diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/Abstract.txt new file mode 100644 index 000000000..46a2ec990 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_class_marks_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.ini b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.ini new file mode 100644 index 000000000..0b2af1253 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_class_marks_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.uvoptx new file mode 100644 index 000000000..5c89cb4d8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.uvoptx @@ -0,0 +1,852 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_class_marks_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 210 + 1 +
460
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_class_marks_example_f32.c + + \\arm_class_marks_example\arm_class_marks_example_f32.c\210 +
+
+ + + 1 + 2 + 0x20001190 + 0 + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_class_marks_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 210 + 1 +
1220
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_class_marks_example_f32.c + + \\arm_class_marks_example\arm_class_marks_example_f32.c\210 +
+
+ + + 1 + 2 + 0x20001190 + 0 + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_class_marks_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 210 + 1 +
1224
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_class_marks_example_f32.c + + \\arm_class_marks_example\arm_class_marks_example_f32.c\210 +
+
+ + + 1 + 2 + 0x20001190 + 0 + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_class_marks_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 210 + 1 +
1224
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_class_marks_example_f32.c + + \\arm_class_marks_example\arm_class_marks_example_f32.c\210 +
+
+ + + 1 + 2 + 0x20001190 + 0 + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\arm_class_marks_example_f32.c + arm_class_marks_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 2 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.uvprojx new file mode 100644 index 000000000..6bd466de8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example.uvprojx @@ -0,0 +1,1753 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_class_marks_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_class_marks_example_f32.c + 1 + .\arm_class_marks_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_class_marks_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_class_marks_example_f32.c + 1 + .\arm_class_marks_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_class_marks_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_class_marks_example_f32.c + 1 + .\arm_class_marks_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_class_marks_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_class_marks_example_f32.c + 1 + .\arm_class_marks_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_DP\startup_ARMCM7.s + + + + + + RTE\Device\ARMCM7_DP\system_ARMCM7.c + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example_f32.c new file mode 100644 index 000000000..1d6241931 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_class_marks_example/arm_class_marks_example_f32.c @@ -0,0 +1,211 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_class_marks_example_f32.c +* +* Description: Example code to calculate Minimum, Maximum +* Mean, std and variance of marks obtained in a class +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup ClassMarks Class Marks Example + * + * \par Description: + * \par + * Demonstrates the use the Maximum, Minimum, Mean, Standard Deviation, Variance + * and Matrix functions to calculate statistical values of marks obtained in a class. + * + * \note This example also demonstrates the usage of static initialization. + * + * \par Variables Description: + * \par + * \li \c testMarks_f32 points to the marks scored by 20 students in 4 subjects + * \li \c max_marks Maximum of all marks + * \li \c min_marks Minimum of all marks + * \li \c mean Mean of all marks + * \li \c var Variance of the marks + * \li \c std Standard deviation of the marks + * \li \c numStudents Total number of students in the class + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mat_init_f32() + * - arm_mat_mult_f32() + * - arm_max_f32() + * - arm_min_f32() + * - arm_mean_f32() + * - arm_std_f32() + * - arm_var_f32() + * + * Refer + * \link arm_class_marks_example_f32.c \endlink + * + */ + + +/** \example arm_class_marks_example_f32.c + */ +#include "arm_math.h" + +#define USE_STATIC_INIT + + /* ---------------------------------------------------------------------- +** Global defines +** ------------------------------------------------------------------- */ + +#define TEST_LENGTH_SAMPLES (20*4) + +/* ---------------------------------------------------------------------- +** List of Marks scored by 20 students for 4 subjects +** ------------------------------------------------------------------- */ +const float32_t testMarks_f32[TEST_LENGTH_SAMPLES] = +{ + 42.000000, 37.000000, 81.000000, 28.000000, + 83.000000, 72.000000, 36.000000, 38.000000, + 32.000000, 51.000000, 63.000000, 64.000000, + 97.000000, 82.000000, 95.000000, 90.000000, + 66.000000, 51.000000, 54.000000, 42.000000, + 67.000000, 56.000000, 45.000000, 57.000000, + 67.000000, 69.000000, 35.000000, 52.000000, + 29.000000, 81.000000, 58.000000, 47.000000, + 38.000000, 76.000000, 100.000000, 29.000000, + 33.000000, 47.000000, 29.000000, 50.000000, + 34.000000, 41.000000, 61.000000, 46.000000, + 52.000000, 50.000000, 48.000000, 36.000000, + 47.000000, 55.000000, 44.000000, 40.000000, + 100.000000, 94.000000, 84.000000, 37.000000, + 32.000000, 71.000000, 47.000000, 77.000000, + 31.000000, 50.000000, 49.000000, 35.000000, + 63.000000, 67.000000, 40.000000, 31.000000, + 29.000000, 68.000000, 61.000000, 38.000000, + 31.000000, 28.000000, 28.000000, 76.000000, + 55.000000, 33.000000, 29.000000, 39.000000 +}; + + +/* ---------------------------------------------------------------------- +* Number of subjects X 1 +* ------------------------------------------------------------------- */ +const float32_t testUnity_f32[4] = +{ + 1.000, 1.000, 1.000, 1.000 +}; + + +/* ---------------------------------------------------------------------- +** f32 Output buffer +** ------------------------------------------------------------------- */ +static float32_t testOutput[TEST_LENGTH_SAMPLES]; + + +/* ------------------------------------------------------------------ +* Global defines +*------------------------------------------------------------------- */ +#define NUMSTUDENTS 20 +#define NUMSUBJECTS 4 + +/* ------------------------------------------------------------------ +* Global variables +*------------------------------------------------------------------- */ + + uint32_t numStudents = 20; + uint32_t numSubjects = 4; +float32_t max_marks, min_marks, mean, std, var; + uint32_t student_num; + +/* ---------------------------------------------------------------------------------- +* Main f32 test function. It returns maximum marks secured and student number +* ------------------------------------------------------------------------------- */ + +int32_t main() +{ + +#ifndef USE_STATIC_INIT + + arm_matrix_instance_f32 srcA; + arm_matrix_instance_f32 srcB; + arm_matrix_instance_f32 dstC; + + /* Input and output matrices initializations */ + arm_mat_init_f32(&srcA, numStudents, numSubjects, (float32_t *)testMarks_f32); + arm_mat_init_f32(&srcB, numSubjects, 1, (float32_t *)testUnity_f32); + arm_mat_init_f32(&dstC, numStudents, 1, testOutput); + +#else + + /* Static Initializations of Input and output matrix sizes and array */ + arm_matrix_instance_f32 srcA = {NUMSTUDENTS, NUMSUBJECTS, (float32_t *)testMarks_f32}; + arm_matrix_instance_f32 srcB = {NUMSUBJECTS, 1, (float32_t *)testUnity_f32}; + arm_matrix_instance_f32 dstC = {NUMSTUDENTS, 1, testOutput}; + +#endif + + + /* ---------------------------------------------------------------------- + *Call the Matrix multiplication process function + * ------------------------------------------------------------------- */ + arm_mat_mult_f32(&srcA, &srcB, &dstC); + + /* ---------------------------------------------------------------------- + ** Call the Max function to calculate max marks among numStudents + ** ------------------------------------------------------------------- */ + arm_max_f32(testOutput, numStudents, &max_marks, &student_num); + + /* ---------------------------------------------------------------------- + ** Call the Min function to calculate min marks among numStudents + ** ------------------------------------------------------------------- */ + arm_min_f32(testOutput, numStudents, &min_marks, &student_num); + + /* ---------------------------------------------------------------------- + ** Call the Mean function to calculate mean + ** ------------------------------------------------------------------- */ + arm_mean_f32(testOutput, numStudents, &mean); + + /* ---------------------------------------------------------------------- + ** Call the std function to calculate standard deviation + ** ------------------------------------------------------------------- */ + arm_std_f32(testOutput, numStudents, &std); + + /* ---------------------------------------------------------------------- + ** Call the var function to calculate variance + ** ------------------------------------------------------------------- */ + arm_var_f32(testOutput, numStudents, &var); + + while (1); /* main function does not return */ +} diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_convolution_example/Abstract.txt new file mode 100644 index 000000000..2abb089c9 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_convolution_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.ini b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.ini new file mode 100644 index 000000000..b1a95db61 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_convolution_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.uvoptx new file mode 100644 index 000000000..24c475009 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.uvoptx @@ -0,0 +1,896 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_convolution_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 241 + 1 +
1722
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\241 +
+ + 1 + 0 + 244 + 1 +
1726
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\244 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_convolution_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 244 + 1 +
2464
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\244 +
+ + 1 + 0 + 241 + 1 +
2460
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\241 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_convolution_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 244 + 1 +
2800
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\244 +
+ + 1 + 0 + 241 + 1 +
2796
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\241 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_convolution_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 241 + 1 +
2796
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\241 +
+ + 1 + 0 + 244 + 1 +
2800
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_convolution_example_f32.c + + \\arm_convolution_example\arm_convolution_example_f32.c\244 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\math_helper.c + math_helper.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\arm_convolution_example_f32.c + arm_convolution_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 3 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.uvprojx new file mode 100644 index 000000000..9b73ad211 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example.uvprojx @@ -0,0 +1,1761 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_convolution_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_convolution_example_f32.c + 1 + .\arm_convolution_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_convolution_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_convolution_example_f32.c + 1 + .\arm_convolution_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_convolution_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_convolution_example_f32.c + 1 + .\arm_convolution_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_convolution_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_convolution_example_f32.c + 1 + .\arm_convolution_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example_f32.c new file mode 100644 index 000000000..8af04b8c0 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/arm_convolution_example_f32.c @@ -0,0 +1,247 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_convolution_example_f32.c +* +* Description: Example code demonstrating Convolution of two input signals using fft. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup ConvolutionExample Convolution Example + * + * \par Description: + * \par + * Demonstrates the convolution theorem with the use of the Complex FFT, Complex-by-Complex + * Multiplication, and Support Functions. + * + * \par Algorithm: + * \par + * The convolution theorem states that convolution in the time domain corresponds to + * multiplication in the frequency domain. Therefore, the Fourier transform of the convoution of + * two signals is equal to the product of their individual Fourier transforms. + * The Fourier transform of a signal can be evaluated efficiently using the Fast Fourier Transform (FFT). + * \par + * Two input signals, a[n] and b[n], with lengths \c n1 and \c n2 respectively, + * are zero padded so that their lengths become \c N, which is greater than or equal to (n1+n2-1) + * and is a power of 4 as FFT implementation is radix-4. + * The convolution of a[n] and b[n] is obtained by taking the FFT of the input + * signals, multiplying the Fourier transforms of the two signals, and taking the inverse FFT of + * the multiplied result. + * \par + * This is denoted by the following equations: + *
 A[k] = FFT(a[n],N)
+ * B[k] = FFT(b[n],N)
+ * conv(a[n], b[n]) = IFFT(A[k] * B[k], N)
+ * where A[k] and B[k] are the N-point FFTs of the signals a[n] + * and b[n] respectively. + * The length of the convolved signal is (n1+n2-1). + * + * \par Block Diagram: + * \par + * \image html Convolution.gif + * + * \par Variables Description: + * \par + * \li \c testInputA_f32 points to the first input sequence + * \li \c srcALen length of the first input sequence + * \li \c testInputB_f32 points to the second input sequence + * \li \c srcBLen length of the second input sequence + * \li \c outLen length of convolution output sequence, (srcALen + srcBLen - 1) + * \li \c AxB points to the output array where the product of individual FFTs of inputs is stored. + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_fill_f32() + * - arm_copy_f32() + * - arm_cfft_radix4_init_f32() + * - arm_cfft_radix4_f32() + * - arm_cmplx_mult_cmplx_f32() + * + * Refer + * \link arm_convolution_example_f32.c \endlink + * + */ + + +/** \example arm_convolution_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 128 +#define DELTA (0.000001f) +#define SNR_THRESHOLD 90 + +/* ---------------------------------------------------------------------- +* Declare I/O buffers +* ------------------------------------------------------------------- */ +float32_t Ak[MAX_BLOCKSIZE]; /* Input A */ +float32_t Bk[MAX_BLOCKSIZE]; /* Input B */ +float32_t AxB[MAX_BLOCKSIZE * 2]; /* Output */ + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Convolution example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ +float32_t testInputA_f32[64] = +{ + -0.808920, 1.357369, 1.180861, -0.504544, 1.762637, -0.703285, + 1.696966, 0.620571, -0.151093, -0.100235, -0.872382, -0.403579, + -0.860749, -0.382648, -1.052338, 0.128113, -0.646269, 1.093377, + -2.209198, 0.471706, 0.408901, 1.266242, 0.598252, 1.176827, + -0.203421, 0.213596, -0.851964, -0.466958, 0.021841, -0.698938, + -0.604107, 0.461778, -0.318219, 0.942520, 0.577585, 0.417619, + 0.614665, 0.563679, -1.295073, -0.764437, 0.952194, -0.859222, + -0.618554, -2.268542, -1.210592, 1.655853, -2.627219, -0.994249, + -1.374704, 0.343799, 0.025619, 1.227481, -0.708031, 0.069355, + -1.845228, -1.570886, 1.010668, -1.802084, 1.630088, 1.286090, + -0.161050, -0.940794, 0.367961, 0.291907 + +}; + +float32_t testInputB_f32[64] = +{ + 0.933724, 0.046881, 1.316470, 0.438345, 0.332682, 2.094885, + 0.512081, 0.035546, 0.050894, -2.320371, 0.168711, -1.830493, + -0.444834, -1.003242, -0.531494, -1.365600, -0.155420, -0.757692, + -0.431880, -0.380021, 0.096243, -0.695835, 0.558850, -1.648962, + 0.020369, -0.363630, 0.887146, 0.845503, -0.252864, -0.330397, + 1.269131, -1.109295, -1.027876, 0.135940, 0.116721, -0.293399, + -1.349799, 0.166078, -0.802201, 0.369367, -0.964568, -2.266011, + 0.465178, 0.651222, -0.325426, 0.320245, -0.784178, -0.579456, + 0.093374, 0.604778, -0.048225, 0.376297, -0.394412, 0.578182, + -1.218141, -1.387326, 0.692462, -0.631297, 0.153137, -0.638952, + 0.635474, -0.970468, 1.334057, -0.111370 +}; + +const float testRefOutput_f32[127] = +{ + -0.818943, 1.229484, -0.533664, 1.016604, 0.341875, -1.963656, + 5.171476, 3.478033, 7.616361, 6.648384, 0.479069, 1.792012, + -1.295591, -7.447818, 0.315830, -10.657445, -2.483469, -6.524236, + -7.380591, -3.739005, -8.388957, 0.184147, -1.554888, 3.786508, + -1.684421, 5.400610, -1.578126, 7.403361, 8.315999, 2.080267, + 11.077776, 2.749673, 7.138962, 2.748762, 0.660363, 0.981552, + 1.442275, 0.552721, -2.576892, 4.703989, 0.989156, 8.759344, + -0.564825, -3.994680, 0.954710, -5.014144, 6.592329, 1.599488, + -13.979146, -0.391891, -4.453369, -2.311242, -2.948764, 1.761415, + -0.138322, 10.433007, -2.309103, 4.297153, 8.535523, 3.209462, + 8.695819, 5.569919, 2.514304, 5.582029, 2.060199, 0.642280, + 7.024616, 1.686615, -6.481756, 1.343084, -3.526451, 1.099073, + -2.965764, -0.173723, -4.111484, 6.528384, -6.965658, 1.726291, + 1.535172, 11.023435, 2.338401, -4.690188, 1.298210, 3.943885, + 8.407885, 5.168365, 0.684131, 1.559181, 1.859998, 2.852417, + 8.574070, -6.369078, 6.023458, 11.837963, -6.027632, 4.469678, + -6.799093, -2.674048, 6.250367, -6.809971, -3.459360, 9.112410, + -2.711621, -1.336678, 1.564249, -1.564297, -1.296760, 8.904013, + -3.230109, 6.878013, -7.819823, 3.369909, -1.657410, -2.007358, + -4.112825, 1.370685, -3.420525, -6.276605, 3.244873, -3.352638, + 1.545372, 0.902211, 0.197489, -1.408732, 0.523390, 0.348440, 0 +}; + + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +uint32_t srcALen = 64; /* Length of Input A */ +uint32_t srcBLen = 64; /* Length of Input B */ +uint32_t outLen; /* Length of convolution output */ +float32_t snr; /* output SNR */ + +int32_t main(void) +{ + arm_status status; /* Status of the example */ + arm_cfft_radix4_instance_f32 cfft_instance; /* CFFT Structure instance */ + + /* CFFT Structure instance pointer */ + arm_cfft_radix4_instance_f32 *cfft_instance_ptr = + (arm_cfft_radix4_instance_f32*) &cfft_instance; + + /* output length of convolution */ + outLen = srcALen + srcBLen - 1; + + /* Initialise the fft input buffers with all zeros */ + arm_fill_f32(0.0, Ak, MAX_BLOCKSIZE); + arm_fill_f32(0.0, Bk, MAX_BLOCKSIZE); + + /* Copy the input values to the fft input buffers */ + arm_copy_f32(testInputA_f32, Ak, MAX_BLOCKSIZE/2); + arm_copy_f32(testInputB_f32, Bk, MAX_BLOCKSIZE/2); + + /* Initialize the CFFT function to compute 64 point fft */ + status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 0, 1); + + /* Transform input a[n] from time domain to frequency domain A[k] */ + arm_cfft_radix4_f32(cfft_instance_ptr, Ak); + /* Transform input b[n] from time domain to frequency domain B[k] */ + arm_cfft_radix4_f32(cfft_instance_ptr, Bk); + + /* Complex Multiplication of the two input buffers in frequency domain */ + arm_cmplx_mult_cmplx_f32(Ak, Bk, AxB, MAX_BLOCKSIZE/2); + + /* Initialize the CIFFT function to compute 64 point ifft */ + status = arm_cfft_radix4_init_f32(cfft_instance_ptr, 64, 1, 1); + + /* Transform the multiplication output from frequency domain to time domain, + that gives the convolved output */ + arm_cfft_radix4_f32(cfft_instance_ptr, AxB); + + /* SNR Calculation */ + snr = arm_snr_f32((float32_t *)testRefOutput_f32, AxB, srcALen + srcBLen - 1); + + /* Compare the SNR with threshold to test whether the + computed output is matched with the reference output values. */ + if ( snr > SNR_THRESHOLD) + { + status = ARM_MATH_SUCCESS; + } + + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +} + + /** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/math_helper.c b/CMSIS/DSP/Examples/ARM/arm_convolution_example/math_helper.c new file mode 100644 index 000000000..4b0ee1f67 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/math_helper.c @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 b +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param[in] pRef Pointer to the reference buffer + * @param[in] pTest Pointer to the test buffer + * @param[in] buffSize total number of samples + * @return SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to outputbuffer + * @param[in] numSamples number of samples in the input buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param[in] num_adds number of additions + * @return guard bits + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Apply guard bits to buffer + * @param[in,out] pIn pointer to input buffer + * @param[in] numSamples number of samples in the input buffer + * @param[in] guard_bits guard bits + * @return none + */ + +void arm_apply_guard_bits (float32_t *pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param[in] numShifts number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param[in,out] pIn input buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if (pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if ( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff --git a/CMSIS/DSP/Examples/ARM/arm_convolution_example/math_helper.h b/CMSIS/DSP/Examples/ARM/arm_convolution_example/math_helper.h new file mode 100644 index 000000000..46b0af3ad --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_convolution_example/math_helper.h @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/Abstract.txt new file mode 100644 index 000000000..c8dbd44f0 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_dotproduct_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.ini b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.ini new file mode 100644 index 000000000..16feac524 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.ini @@ -0,0 +1,13 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_dotproduct_example.ini + +*/ + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.uvoptx new file mode 100644 index 000000000..b0185e5b0 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.uvoptx @@ -0,0 +1,884 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_dotproduct_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 175 + 1 +
444
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\175 +
+ + 1 + 0 + 172 + 1 +
440
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\172 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_dotproduct_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 175 + 1 +
1200
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\175 +
+ + 1 + 0 + 172 + 1 +
1196
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\172 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_dotproduct_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 175 + 1 +
1216
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\175 +
+ + 1 + 0 + 172 + 1 +
1212
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\172 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_dotproduct_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 175 + 1 +
1216
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\175 +
+ + 1 + 0 + 172 + 1 +
1212
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_dotproduct_example_f32.c + + \\arm_dotproduct_example\arm_dotproduct_example_f32.c\172 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\arm_dotproduct_example_f32.c + arm_dotproduct_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 2 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.uvprojx new file mode 100644 index 000000000..5e7b718b0 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example.uvprojx @@ -0,0 +1,1741 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_dotproduct_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_dotproduct_example_f32.c + 1 + .\arm_dotproduct_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_dotproduct_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_dotproduct_example_f32.c + 1 + .\arm_dotproduct_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_dotproduct_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_dotproduct_example_f32.c + 1 + .\arm_dotproduct_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_dotproduct_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_dotproduct_example_f32.c + 1 + .\arm_dotproduct_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example_f32.c new file mode 100644 index 000000000..21966a016 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_dotproduct_example/arm_dotproduct_example_f32.c @@ -0,0 +1,178 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_dotproduct_example_f32.c +* +* Description: Example code computing dot product of two vectors. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup DotproductExample Dot Product Example + * + * \par Description: + * \par + * Demonstrates the use of the Multiply and Add functions to perform the dot product. + * The dot product of two vectors is obtained by multiplying corresponding elements + * and summing the products. + + * \par Algorithm: + * \par + * The two input vectors \c A and \c B with length \c n, are multiplied element-by-element + * and then added to obtain dot product. + * \par + * This is denoted by the following equation: + *
  dotProduct = A[0] * B[0] + A[1] * B[1] + ... + A[n-1] * B[n-1]
+ * + * \par Block Diagram: + * \par + * \image html dotProduct.gif + * + * \par Variables Description: + * \par + * \li \c srcA_buf_f32 points to first input vector + * \li \c srcB_buf_f32 points to second input vector + * \li \c testOutput stores dot product of the two input vectors. + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mult_f32() + * - arm_add_f32() + * + * Refer + * \link arm_dotproduct_example_f32.c \endlink + * + */ + + +/** \example arm_dotproduct_example_f32.c + */ + +#include +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 32 +#define DELTA (0.000001f) + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Dot Product example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- +** Test input data of srcA for blockSize 32 +** ------------------------------------------------------------------- */ +float32_t srcA_buf_f32[MAX_BLOCKSIZE] = +{ + -0.4325648115282207, -1.6655843782380970, 0.1253323064748307, + 0.2876764203585489, -1.1464713506814637, 1.1909154656429988, + 1.1891642016521031, -0.0376332765933176, 0.3272923614086541, + 0.1746391428209245, -0.1867085776814394, 0.7257905482933027, + -0.5883165430141887, 2.1831858181971011, -0.1363958830865957, + 0.1139313135208096, 1.0667682113591888, 0.0592814605236053, + -0.0956484054836690, -0.8323494636500225, 0.2944108163926404, + -1.3361818579378040, 0.7143245518189522, 1.6235620644462707, + -0.6917757017022868, 0.8579966728282626, 1.2540014216025324, + -1.5937295764474768, -1.4409644319010200, 0.5711476236581780, + -0.3998855777153632, 0.6899973754643451 +}; + +/* ---------------------------------------------------------------------- +** Test input data of srcB for blockSize 32 +** ------------------------------------------------------------------- */ +float32_t srcB_buf_f32[MAX_BLOCKSIZE] = +{ + 1.7491401329284098, 0.1325982188803279, 0.3252281811989881, + -0.7938091410349637, 0.3149236145048914, -0.5272704888029532, + 0.9322666565031119, 1.1646643544607362, -2.0456694357357357, + -0.6443728590041911, 1.7410657940825480, 0.4867684246821860, + 1.0488288293660140, 1.4885752747099299, 1.2705014969484090, + -1.8561241921210170, 2.1343209047321410, 1.4358467535865909, + -0.9173023332875400, -1.1060770780029008, 0.8105708062681296, + 0.6985430696369063, -0.4015827425012831, 1.2687512030669628, + -0.7836083053674872, 0.2132664971465569, 0.7878984786088954, + 0.8966819356782295, -0.1869172943544062, 1.0131816724341454, + 0.2484350696132857, 0.0596083377937976 +}; + +/* Reference dot product output */ +float32_t refDotProdOut = 5.9273644806352142; + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +float32_t multOutput[MAX_BLOCKSIZE]; /* Intermediate output */ +float32_t testOutput; /* Final ouput */ + +arm_status status; /* Status of the example */ + +int32_t main(void) +{ + uint32_t i; /* Loop counter */ + float32_t diff; /* Difference between reference and test outputs */ + + /* Multiplication of two input buffers */ + arm_mult_f32(srcA_buf_f32, srcB_buf_f32, multOutput, MAX_BLOCKSIZE); + + /* Accumulate the multiplication output values to + get the dot product of the two inputs */ + for(i=0; i< MAX_BLOCKSIZE; i++) + { + arm_add_f32(&testOutput, &multOutput[i], &testOutput, 1); + } + + /* absolute value of difference between ref and test */ + diff = fabsf(refDotProdOut - testOutput); + + /* Comparison of dot product value with reference */ + if (diff > DELTA) + { + status = ARM_MATH_TEST_FAILURE; + } + + if ( status == ARM_MATH_TEST_FAILURE) + { + while (1); + } + + while (1); /* main function does not return */ +} + + /** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/Abstract.txt new file mode 100644 index 000000000..8395b5327 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_fft_bin_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_data.c b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_data.c new file mode 100644 index 000000000..b5159e5de --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_data.c @@ -0,0 +1,308 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fft_bin_data.c +* +* Description: Data file used for example code +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +Test Input signal contains 10KHz signal + Uniformly distributed white noise +** ------------------------------------------------------------------- */ + +float32_t testInput_f32_10khz[2048] = +{ +-0.865129623056441, 0.000000000000000, -2.655020678073846, 0.000000000000000, 0.600664612949661, 0.000000000000000, 0.080378093886515, 0.000000000000000, +-2.899160484012034, 0.000000000000000, 2.563004262857762, 0.000000000000000, 3.078328403304206, 0.000000000000000, 0.105906778385130, 0.000000000000000, +0.048366940168201, 0.000000000000000, -0.145696461188734, 0.000000000000000, -0.023417155362879, 0.000000000000000, 2.127729174988954, 0.000000000000000, +-1.176633086028377, 0.000000000000000, 3.690223557991855, 0.000000000000000, -0.622791766173194, 0.000000000000000, 0.722837373872203, 0.000000000000000, +2.739754205367484, 0.000000000000000, -0.062610410524552, 0.000000000000000, -0.891296810967338, 0.000000000000000, -1.845872258871811, 0.000000000000000, +1.195039415434387, 0.000000000000000, -2.177388969045026, 0.000000000000000, 1.078649103637905, 0.000000000000000, 2.570976050490193, 0.000000000000000, +-1.383551403404574, 0.000000000000000, 2.392141424058873, 0.000000000000000, 2.858002843205065, 0.000000000000000, -3.682433899725536, 0.000000000000000, +-3.488146646451150, 0.000000000000000, 1.323468578888120, 0.000000000000000, -0.099771155430726, 0.000000000000000, 1.561168082500454, 0.000000000000000, +1.025026795103179, 0.000000000000000, 0.928841900171200, 0.000000000000000, 2.930499509864950, 0.000000000000000, 2.013349089766430, 0.000000000000000, +2.381676148486737, 0.000000000000000, -3.081062307950236, 0.000000000000000, -0.389579115537544, 0.000000000000000, 0.181540149166620, 0.000000000000000, +-2.601953341353208, 0.000000000000000, 0.333435137783218, 0.000000000000000, -2.812945856162965, 0.000000000000000, 2.649109640172910, 0.000000000000000, +-1.003963025744654, 0.000000000000000, 1.552460768755035, 0.000000000000000, 0.088641345335247, 0.000000000000000, -2.519951327113426, 0.000000000000000, +-4.341348988610527, 0.000000000000000, 0.557772429359965, 0.000000000000000, -1.671267412948494, 0.000000000000000, 0.733951350960387, 0.000000000000000, +0.409263788034864, 0.000000000000000, 3.566033071952806, 0.000000000000000, 1.882565173848352, 0.000000000000000, -1.106017073793287, 0.000000000000000, +0.154456720778718, 0.000000000000000, -2.513205795512153, 0.000000000000000, 0.310978660939421, 0.000000000000000, 0.579706500111723, 0.000000000000000, +0.000086383683251, 0.000000000000000, -1.311866980897721, 0.000000000000000, 1.840007477574986, 0.000000000000000, -3.253005768451345, 0.000000000000000, +1.462584328739432, 0.000000000000000, 1.610103610851738, 0.000000000000000, 0.761914676858907, 0.000000000000000, 0.974541361089834, 0.000000000000000, +0.686845845885983, 0.000000000000000, 1.849153122025191, 0.000000000000000, 0.787800410401453, 0.000000000000000, -1.187438909666279, 0.000000000000000, +-0.754937911044720, 0.000000000000000, 0.084373858395232, 0.000000000000000, -2.600269011710521, 0.000000000000000, -0.962982842142644, 0.000000000000000, +-0.369328108540868, 0.000000000000000, 0.810791418361879, 0.000000000000000, 3.587016488699641, 0.000000000000000, -0.520776145083723, 0.000000000000000, +0.640249919627884, 0.000000000000000, 1.103122489464969, 0.000000000000000, 2.231779881455556, 0.000000000000000, -1.308035392685241, 0.000000000000000, +0.424070304330106, 0.000000000000000, -0.200383932651189, 0.000000000000000, -2.365526783356541, 0.000000000000000, -0.989114757436628, 0.000000000000000, +2.770807688959777, 0.000000000000000, -0.444172737462307, 0.000000000000000, 0.079760979374078, 0.000000000000000, -0.005199118412183, 0.000000000000000, +-0.664712668309527, 0.000000000000000, -0.624171857561896, 0.000000000000000, 0.537306979007338, 0.000000000000000, -2.575955675497642, 0.000000000000000, +1.562363235756780, 0.000000000000000, 1.814069369848895, 0.000000000000000, -1.293428583392509, 0.000000000000000, -1.026188449495686, 0.000000000000000, +-2.981771815588717, 0.000000000000000, -4.223468103075124, 0.000000000000000, 2.672674782004045, 0.000000000000000, -0.856096801117735, 0.000000000000000, +0.048517345512563, 0.000000000000000, -0.026860721136222, 0.000000000000000, 0.392932277758187, 0.000000000000000, -1.331740855093099, 0.000000000000000, +-1.894292129477081, 0.000000000000000, -1.425006468460681, 0.000000000000000, -2.721772427617057, 0.000000000000000, -1.616831100216806, 0.000000000000000, +3.551177651488947, 0.000000000000000, -0.069685667896087, 0.000000000000000, -3.134634907409102, 0.000000000000000, -0.263627598944639, 0.000000000000000, +-1.650469945991350, 0.000000000000000, -2.203580339374399, 0.000000000000000, -0.872203246123242, 0.000000000000000, 1.230782812607287, 0.000000000000000, +0.257288860093291, 0.000000000000000, 1.989083106173137, 0.000000000000000, -1.985638729453261, 0.000000000000000, -1.416185105842892, 0.000000000000000, +-1.131097688325772, 0.000000000000000, -2.245130805416057, 0.000000000000000, -1.938873996219074, 0.000000000000000, 2.043608361562645, 0.000000000000000, +-0.583727989880841, 0.000000000000000, -1.785266378212929, 0.000000000000000, 1.961457586224753, 0.000000000000000, 1.139400099963223, 0.000000000000000, +-1.979519343363991, 0.000000000000000, 2.003023322818429, 0.000000000000000, 0.229004069076829, 0.000000000000000, 3.452808862193135, 0.000000000000000, +2.882273808365857, 0.000000000000000, -1.549450501844438, 0.000000000000000, -3.283872089931876, 0.000000000000000, -0.327025884099064, 0.000000000000000, +-0.054979977136430, 0.000000000000000, -1.192280531479012, 0.000000000000000, 0.645539328365578, 0.000000000000000, 2.300832863404618, 0.000000000000000, +-1.092951789535240, 0.000000000000000, -1.017368249363773, 0.000000000000000, -0.142673056169787, 0.000000000000000, 0.831073544881250, 0.000000000000000, +-2.314612531587064, 0.000000000000000, -2.221456299106321, 0.000000000000000, 0.460261143885226, 0.000000000000000, 0.050585301888595, 0.000000000000000, +0.364373329183988, 0.000000000000000, -1.685956552069538, 0.000000000000000, 0.050664512351055, 0.000000000000000, -0.193355783902718, 0.000000000000000, +-0.158660446046828, 0.000000000000000, 2.394156453841953, 0.000000000000000, -1.562965718554525, 0.000000000000000, -2.199750600869900, 0.000000000000000, +1.544984022381773, 0.000000000000000, -1.988307216807315, 0.000000000000000, -0.628240722541046, 0.000000000000000, -1.436235771505429, 0.000000000000000, +1.677013691147313, 0.000000000000000, 1.600741781678228, 0.000000000000000, -0.757380959134706, 0.000000000000000, -4.784797439515566, 0.000000000000000, +0.265121462834569, 0.000000000000000, 3.862029485934378, 0.000000000000000, 2.386823577249430, 0.000000000000000, -3.655779745436893, 0.000000000000000, +-0.763541621368016, 0.000000000000000, -1.182140388432962, 0.000000000000000, -1.349106114858063, 0.000000000000000, -2.287533624396759, 0.000000000000000, +-0.028603745188423, 0.000000000000000, -1.353580755934427, 0.000000000000000, 0.461602380352937, 0.000000000000000, -0.059599055078928, 0.000000000000000, +-0.929946734342228, 0.000000000000000, 0.065773089295561, 0.000000000000000, 1.106565863102982, 0.000000000000000, 4.719295086373593, 0.000000000000000, +-2.108377703544395, 0.000000000000000, -2.226393620240159, 0.000000000000000, 1.375668397437521, 0.000000000000000, -0.960772428525443, 0.000000000000000, +-2.156313465390571, 0.000000000000000, 1.126060012375311, 0.000000000000000, 2.756485137030720, 0.000000000000000, 0.739639690862600, 0.000000000000000, +3.914769510295006, 0.000000000000000, 1.685232785586675, 0.000000000000000, 4.079058040970612, 0.000000000000000, -1.174598301660513, 0.000000000000000, +-2.885776587275580, 0.000000000000000, -0.241073635188767, 0.000000000000000, 3.080489872502403, 0.000000000000000, -2.051244183999421, 0.000000000000000, +0.664330486845139, 0.000000000000000, -1.697798999370016, 0.000000000000000, 1.452369423649782, 0.000000000000000, -1.523532831019280, 0.000000000000000, +0.171981186587481, 0.000000000000000, -4.685274721583927, 0.000000000000000, -1.336175835319380, 0.000000000000000, 1.419070770428945, 0.000000000000000, +-0.035791601713475, 0.000000000000000, 2.291937971632081, 0.000000000000000, -1.962559313450293, 0.000000000000000, -4.831595589339301, 0.000000000000000, +-1.857055284000925, 0.000000000000000, 2.606271522635512, 0.000000000000000, -0.576447978738030, 0.000000000000000, 0.082299166967720, 0.000000000000000, +1.888399453494614, 0.000000000000000, -3.564705298046079, 0.000000000000000, -0.939357831083889, 0.000000000000000, -1.903578203697778, 0.000000000000000, +-2.642492215447250, 0.000000000000000, -0.182990405251017, 0.000000000000000, 3.742026478011174, 0.000000000000000, 0.104295803798333, 0.000000000000000, +1.848678195370347, 0.000000000000000, -1.887384346896369, 0.000000000000000, 0.365048973046045, 0.000000000000000, -0.889638010354219, 0.000000000000000, +1.173877118428863, 0.000000000000000, -1.178562827540109, 0.000000000000000, 0.610271645685184, 0.000000000000000, 1.831284815697871, 0.000000000000000, +0.449575390102283, 0.000000000000000, 1.597171905253443, 0.000000000000000, 3.918574971904773, 0.000000000000000, 0.868104027970404, 0.000000000000000, +0.582643134746494, 0.000000000000000, 2.321256382353331, 0.000000000000000, -0.238118642223180, 0.000000000000000, -2.890287868054370, 0.000000000000000, +0.970995414625622, 0.000000000000000, 0.666137930891283, 0.000000000000000, -0.202435718709502, 0.000000000000000, 2.057930200518194, 0.000000000000000, +3.120583443719949, 0.000000000000000, -0.863945271701041, 0.000000000000000, 0.906848893874630, 0.000000000000000, -1.434124930222570, 0.000000000000000, +0.754659384848783, 0.000000000000000, -5.224154442713778, 0.000000000000000, 2.330229744098967, 0.000000000000000, 1.113946320164698, 0.000000000000000, +0.523324920322840, 0.000000000000000, 1.750740911548348, 0.000000000000000, -0.899333972913577, 0.000000000000000, 0.228705845203506, 0.000000000000000, +-1.934782624767648, 0.000000000000000, -3.508386237231303, 0.000000000000000, -2.107108523073510, 0.000000000000000, 0.380587645474815, 0.000000000000000, +-0.476200877183279, 0.000000000000000, -2.172086712642198, 0.000000000000000, 1.795372535780299, 0.000000000000000, -2.100318983391055, 0.000000000000000, +-0.022571122461405, 0.000000000000000, 0.674514020010955, 0.000000000000000, -0.148872569390857, 0.000000000000000, 0.298175890592737, 0.000000000000000, +-1.134244492493590, 0.000000000000000, -3.146848422289455, 0.000000000000000, -1.357950199087602, 0.000000000000000, 0.667362732020878, 0.000000000000000, +-3.119397998316724, 0.000000000000000, -1.189341126297637, 0.000000000000000, -1.532744386856668, 0.000000000000000, -1.672972484202534, 0.000000000000000, +-2.042283373871558, 0.000000000000000, -1.479481547595924, 0.000000000000000, -0.002668662875396, 0.000000000000000, 0.262737760129546, 0.000000000000000, +2.734456080621830, 0.000000000000000, -0.671945925075102, 0.000000000000000, -3.735078262179111, 0.000000000000000, -0.161705013319883, 0.000000000000000, +0.748963512361001, 0.000000000000000, 1.128046374367600, 0.000000000000000, 0.649651335592966, 0.000000000000000, 1.880020215025867, 0.000000000000000, +-1.095632293842306, 0.000000000000000, 1.197764876160487, 0.000000000000000, 0.323646656252985, 0.000000000000000, -1.655502751114502, 0.000000000000000, +3.666399062961496, 0.000000000000000, -0.334060899735197, 0.000000000000000, -2.119056978738397, 0.000000000000000, 3.721375117275012, 0.000000000000000, +0.044874186872307, 0.000000000000000, -2.733053897593234, 0.000000000000000, 1.590700278891042, 0.000000000000000, 3.215711772781902, 0.000000000000000, +-1.792085012843801, 0.000000000000000, -0.405797188885475, 0.000000000000000, -0.628080020080892, 0.000000000000000, -1.831815840843960, 0.000000000000000, +2.973656862522834, 0.000000000000000, -0.212032655138417, 0.000000000000000, 0.372437389437234, 0.000000000000000, -1.614030579023492, 0.000000000000000, +-0.704900996358698, 0.000000000000000, 1.123700273452105, 0.000000000000000, -0.136371848130819, 0.000000000000000, 3.020284357635585, 0.000000000000000, +-0.550211350877649, 0.000000000000000, 5.101256236381711, 0.000000000000000, 3.367051512192333, 0.000000000000000, -4.385131946669234, 0.000000000000000, +-3.967303337694391, 0.000000000000000, -0.965894936640022, 0.000000000000000, 0.328366945264681, 0.000000000000000, 0.199041562924914, 0.000000000000000, +1.067681999025495, 0.000000000000000, -1.939516091697170, 0.000000000000000, -1.092980954328824, 0.000000000000000, 0.273786079368066, 0.000000000000000, +-0.040928322190265, 0.000000000000000, -0.118368078577437, 0.000000000000000, 1.766589628899997, 0.000000000000000, 1.738321311635393, 0.000000000000000, +-2.895012794321649, 0.000000000000000, 1.213521771395142, 0.000000000000000, 0.922971726633985, 0.000000000000000, 1.091516563636489, 0.000000000000000, +3.226378465469620, 0.000000000000000, 1.149169778666974, 0.000000000000000, -1.695986327709386, 0.000000000000000, -0.974803077355813, 0.000000000000000, +-4.898035507513607, 0.000000000000000, 1.622719302889447, 0.000000000000000, 0.583891313586579, 0.000000000000000, -1.677182424094957, 0.000000000000000, +-1.915633132814685, 0.000000000000000, -1.980150370851616, 0.000000000000000, 0.604538269404190, 0.000000000000000, 0.939862406149365, 0.000000000000000, +-1.266939874246416, 0.000000000000000, -1.494771249200063, 0.000000000000000, 0.278042784093988, 0.000000000000000, 0.326627416008916, 0.000000000000000, +-1.914530157643303, 0.000000000000000, 1.908947721862196, 0.000000000000000, 0.531819285694044, 0.000000000000000, 3.056856632319658, 0.000000000000000, +-0.389241827774643, 0.000000000000000, -2.418606606780420, 0.000000000000000, 0.915299238878703, 0.000000000000000, -0.098774174295283, 0.000000000000000, +-0.906199428444304, 0.000000000000000, 0.316716451217743, 0.000000000000000, -4.367700643578311, 0.000000000000000, 1.491687997515293, 0.000000000000000, +-1.962381126288365, 0.000000000000000, -0.700829196527045, 0.000000000000000, 3.028958963615630, 0.000000000000000, -2.313461067462598, 0.000000000000000, +-1.431933239886712, 0.000000000000000, -0.831153039725342, 0.000000000000000, 3.939495598250743, 0.000000000000000, 0.342974753984771, 0.000000000000000, +-2.768330763002974, 0.000000000000000, -2.744010370019008, 0.000000000000000, 3.821352685212561, 0.000000000000000, 4.551065271455856, 0.000000000000000, +3.270136437041298, 0.000000000000000, -3.188028411950982, 0.000000000000000, -0.777075012417436, 0.000000000000000, 0.097110650265216, 0.000000000000000, +1.221216137608812, 0.000000000000000, -1.325824244541822, 0.000000000000000, -2.655296734084113, 0.000000000000000, -1.074792144885704, 0.000000000000000, +2.770401584439407, 0.000000000000000, 5.240270645610543, 0.000000000000000, 0.108576672208892, 0.000000000000000, -1.209394350650142, 0.000000000000000, +1.403344353838785, 0.000000000000000, -0.299032904177277, 0.000000000000000, 4.074959450638227, 0.000000000000000, 1.718727473952107, 0.000000000000000, +-3.061349227080806, 0.000000000000000, -1.158596888541269, 0.000000000000000, 3.381858904662625, 0.000000000000000, 0.957339964054052, 0.000000000000000, +0.179900074904899, 0.000000000000000, -3.909641902506081, 0.000000000000000, 0.805717289408649, 0.000000000000000, 2.047413793928261, 0.000000000000000, +-1.273580225826614, 0.000000000000000, -2.681359186869971, 0.000000000000000, -0.721241345822093, 0.000000000000000, -1.613090681569475, 0.000000000000000, +0.463138804815955, 0.000000000000000, 0.377223507800954, 0.000000000000000, 2.046550684968141, 0.000000000000000, 0.178508732797712, 0.000000000000000, +-0.477815330358845, 0.000000000000000, 3.763355908332053, 0.000000000000000, 1.300430303035163, 0.000000000000000, -0.214625793857725, 0.000000000000000, +1.343267891864081, 0.000000000000000, -0.340007682433245, 0.000000000000000, 2.062703194680005, 0.000000000000000, 0.042032160234235, 0.000000000000000, +0.643732569732250, 0.000000000000000, -1.913502543857589, 0.000000000000000, 3.771340762937158, 0.000000000000000, 1.050024807363386, 0.000000000000000, +-4.440489488592649, 0.000000000000000, 0.444904302066643, 0.000000000000000, 2.898702265650048, 0.000000000000000, 1.953232980548558, 0.000000000000000, +2.761564952735079, 0.000000000000000, 1.963537633260397, 0.000000000000000, -2.168858472916215, 0.000000000000000, -4.116235357699841, 0.000000000000000, +4.183678271896528, 0.000000000000000, 0.600422284944681, 0.000000000000000, -0.659352647255126, 0.000000000000000, -0.993127338218109, 0.000000000000000, +-2.463571314945747, 0.000000000000000, 0.937720951545881, 0.000000000000000, -3.098957308429730, 0.000000000000000, -2.354719140045463, 0.000000000000000, +-0.417285119323949, 0.000000000000000, 2.187974075975947, 0.000000000000000, 1.101468905172585, 0.000000000000000, -3.185800678152109, 0.000000000000000, +2.357534709345083, 0.000000000000000, 0.246645606729407, 0.000000000000000, 4.440905650784504, 0.000000000000000, -2.236807716637866, 0.000000000000000, +-2.171481518317550, 0.000000000000000, -2.029571795072690, 0.000000000000000, 0.135599790431348, 0.000000000000000, -1.277965265520191, 0.000000000000000, +-1.927976233157507, 0.000000000000000, -5.434492783745394, 0.000000000000000, -2.026375829312657, 0.000000000000000, 1.009666016819321, 0.000000000000000, +0.238549782367247, 0.000000000000000, -0.516403923971309, 0.000000000000000, -0.933977817429352, 0.000000000000000, 0.155803015935614, 0.000000000000000, +-0.396194809997929, 0.000000000000000, -0.915178100253214, 0.000000000000000, 0.666329367985015, 0.000000000000000, -1.517991149945785, 0.000000000000000, +0.458266744144822, 0.000000000000000, -1.242845974381418, 0.000000000000000, 0.057914823556477, 0.000000000000000, 0.994101307476875, 0.000000000000000, +-2.387209849199325, 0.000000000000000, 0.459297048883826, 0.000000000000000, 0.227711405683905, 0.000000000000000, 0.030255073506117, 0.000000000000000, +-1.323361608181337, 0.000000000000000, -4.650244457426706, 0.000000000000000, 0.062908579526021, 0.000000000000000, 3.462831028244432, 0.000000000000000, +1.303608183314856, 0.000000000000000, -1.430415193881612, 0.000000000000000, -1.672886118942142, 0.000000000000000, 0.992890699210099, 0.000000000000000, +-0.160814531784247, 0.000000000000000, -1.238132939350430, 0.000000000000000, -0.589223271459376, 0.000000000000000, 2.326363810561534, 0.000000000000000, +-4.433789496230785, 0.000000000000000, 1.664686987538929, 0.000000000000000, -2.366128834617921, 0.000000000000000, 1.212421570743837, 0.000000000000000, +-4.847914267690055, 0.000000000000000, 0.228485221404712, 0.000000000000000, 0.466139765470957, 0.000000000000000, -1.344202776943546, 0.000000000000000, +-1.012053673330574, 0.000000000000000, -2.844980626424742, 0.000000000000000, -1.552703722026340, 0.000000000000000, -1.448830983885038, 0.000000000000000, +0.127010756753980, 0.000000000000000, -1.667188263752299, 0.000000000000000, 3.424818052085100, 0.000000000000000, 0.956291135453840, 0.000000000000000, +-3.725533331754662, 0.000000000000000, -1.584534272368832, 0.000000000000000, -1.654148210472472, 0.000000000000000, 0.701610500675698, 0.000000000000000, +0.164954538683927, 0.000000000000000, -0.739260064712987, 0.000000000000000, -2.167324026090101, 0.000000000000000, -0.310240491909496, 0.000000000000000, +-2.281790349106906, 0.000000000000000, 1.719655331305361, 0.000000000000000, -2.997005923606441, 0.000000000000000, -1.999301431556852, 0.000000000000000, +-0.292229010068828, 0.000000000000000, 1.172317994855851, 0.000000000000000, 0.196734885241533, 0.000000000000000, 2.981365193477068, 0.000000000000000, +2.637726016926352, 0.000000000000000, 1.434045125217982, 0.000000000000000, 0.883627180451827, 0.000000000000000, -1.434040761445747, 0.000000000000000, +-1.528891971086553, 0.000000000000000, -3.306913135367542, 0.000000000000000, -0.399059265470646, 0.000000000000000, -0.265674394285178, 0.000000000000000, +3.502591252855384, 0.000000000000000, 0.830301156604454, 0.000000000000000, -0.220021317046083, 0.000000000000000, -0.090553770476646, 0.000000000000000, +0.771863477047951, 0.000000000000000, 1.351209629105760, 0.000000000000000, 3.773699756201963, 0.000000000000000, 0.472600118752329, 0.000000000000000, +2.332825668012222, 0.000000000000000, 1.853747950314528, 0.000000000000000, 0.759515251766178, 0.000000000000000, 1.327112776215496, 0.000000000000000, +2.518730296237868, 0.000000000000000, 0.764450208786353, 0.000000000000000, -0.278275349491296, 0.000000000000000, -0.041559465082020, 0.000000000000000, +1.387166083167787, 0.000000000000000, 2.612996769598122, 0.000000000000000, -0.385404831721799, 0.000000000000000, 2.005630016170309, 0.000000000000000, +-0.950500047307998, 0.000000000000000, -1.166884021392492, 0.000000000000000, 1.432973552928162, 0.000000000000000, 2.540370505384567, 0.000000000000000, +-1.140505295054501, 0.000000000000000, -3.673358835201185, 0.000000000000000, -0.450691288038056, 0.000000000000000, 1.601024294408014, 0.000000000000000, +0.773213556014045, 0.000000000000000, 2.973873693246168, 0.000000000000000, -1.361548406382279, 0.000000000000000, 1.409136332424815, 0.000000000000000, +-0.963382518314713, 0.000000000000000, -2.031268227368161, 0.000000000000000, 0.983309972085586, 0.000000000000000, -3.461412488471631, 0.000000000000000, +-2.601124929406039, 0.000000000000000, -0.533896239766343, 0.000000000000000, -2.627129008866350, 0.000000000000000, 0.622111169161305, 0.000000000000000, +-1.160926365580422, 0.000000000000000, -2.406196188132628, 0.000000000000000, -1.076870362758737, 0.000000000000000, -1.791866820937175, 0.000000000000000, +-0.749453071522325, 0.000000000000000, -5.324156615990973, 0.000000000000000, -1.038698022238289, 0.000000000000000, -2.106629944730630, 0.000000000000000, +0.659295598564773, 0.000000000000000, 0.520940881580988, 0.000000000000000, -0.055649203928700, 0.000000000000000, 0.292096765423137, 0.000000000000000, +-4.663743901790872, 0.000000000000000, -0.125066503391666, 0.000000000000000, -2.452620252445380, 0.000000000000000, -0.712128227397468, 0.000000000000000, +-0.048938037970968, 0.000000000000000, -1.821520226003361, 0.000000000000000, 0.810106421304257, 0.000000000000000, -0.196636623956257, 0.000000000000000, +-0.701769836763804, 0.000000000000000, 2.460345045649201, 0.000000000000000, 3.506597671641116, 0.000000000000000, -2.711322611972225, 0.000000000000000, +-0.658079876600542, 0.000000000000000, -2.040082099646173, 0.000000000000000, 2.201668355395807, 0.000000000000000, 1.181507395879711, 0.000000000000000, +-1.640739552179682, 0.000000000000000, -1.613393726467190, 0.000000000000000, -1.156741241731352, 0.000000000000000, 2.527773464519963, 0.000000000000000, +-0.497040638009502, 0.000000000000000, -0.975817112895589, 0.000000000000000, -2.866830755546166, 0.000000000000000, 1.120214498507878, 0.000000000000000, +5.986771654661698, 0.000000000000000, 0.398219252656757, 0.000000000000000, -3.545606013198135, 0.000000000000000, 0.312398099396191, 0.000000000000000, +-2.265327979531788, 0.000000000000000, 0.792121001107366, 0.000000000000000, -3.736145137670100, 0.000000000000000, 0.762228883650802, 0.000000000000000, +2.283545661214646, 0.000000000000000, 3.780020629583529, 0.000000000000000, 3.117260228608810, 0.000000000000000, -2.011159255609613, 0.000000000000000, +0.279107700476072, 0.000000000000000, 2.003369134246936, 0.000000000000000, -1.448171234480257, 0.000000000000000, 0.584697150310140, 0.000000000000000, +0.919508663636197, 0.000000000000000, -3.071349141675388, 0.000000000000000, -1.555923649263667, 0.000000000000000, 2.232497079438850, 0.000000000000000, +-0.012662139119883, 0.000000000000000, 0.372825540734715, 0.000000000000000, 2.378543590847629, 0.000000000000000, 1.459053407813062, 0.000000000000000, +-0.967913907390927, 0.000000000000000, 1.322825200678212, 0.000000000000000, -1.033775820061824, 0.000000000000000, -1.813629552693142, 0.000000000000000, +4.794348161661486, 0.000000000000000, 0.655279811518676, 0.000000000000000, -2.224590138589720, 0.000000000000000, 0.595329481295766, 0.000000000000000, +3.364055988866225, 0.000000000000000, 1.863416422998127, 0.000000000000000, 1.930305751828105, 0.000000000000000, -0.284467053432545, 0.000000000000000, +-0.923374905878938, 0.000000000000000, 1.922988234041399, 0.000000000000000, 0.310482143432719, 0.000000000000000, 0.332122302397134, 0.000000000000000, +-1.659487472408966, 0.000000000000000, -1.865943507877961, 0.000000000000000, -0.186775297569864, 0.000000000000000, -1.700543850628361, 0.000000000000000, +0.497157959366735, 0.000000000000000, -0.471244843957418, 0.000000000000000, -0.432013753969948, 0.000000000000000, -4.000189880113231, 0.000000000000000, +-0.415335170016467, 0.000000000000000, 0.317311950972859, 0.000000000000000, 0.038393428927595, 0.000000000000000, 0.177219909465206, 0.000000000000000, +0.531650958095143, 0.000000000000000, -2.711644985175806, 0.000000000000000, 0.328744077805156, 0.000000000000000, -0.938417707547928, 0.000000000000000, +0.970379584897379, 0.000000000000000, 1.873649473917137, 0.000000000000000, 0.177938226987023, 0.000000000000000, 0.155609346302393, 0.000000000000000, +-1.276504241867208, 0.000000000000000, -0.463725075928807, 0.000000000000000, -0.064748250389500, 0.000000000000000, -1.725568534062385, 0.000000000000000, +-0.139066584804067, 0.000000000000000, 1.975514554117767, 0.000000000000000, -0.807063199499478, 0.000000000000000, -0.326926659682788, 0.000000000000000, +1.445727032487938, 0.000000000000000, -0.597151107739100, 0.000000000000000, 2.732557531709386, 0.000000000000000, -2.907130934109188, 0.000000000000000, +-1.461264832679981, 0.000000000000000, -1.708588604968163, 0.000000000000000, 3.652851925431363, 0.000000000000000, 0.682050868282879, 0.000000000000000, +-0.281312579963294, 0.000000000000000, 0.554966483307825, 0.000000000000000, -0.981341739340932, 0.000000000000000, 1.279543331141603, 0.000000000000000, +0.036589747826856, 0.000000000000000, 2.312073745896073, 0.000000000000000, 1.754682200732425, 0.000000000000000, -0.957515875428627, 0.000000000000000, +-0.833596942819695, 0.000000000000000, 0.437054368791033, 0.000000000000000, -0.898819399360279, 0.000000000000000, -0.296050580896839, 0.000000000000000, +-0.785144257649601, 0.000000000000000, -2.541503089003311, 0.000000000000000, 2.225075846758761, 0.000000000000000, -1.587290487902002, 0.000000000000000, +-1.421404172056462, 0.000000000000000, -3.015149802293631, 0.000000000000000, 1.780874288867949, 0.000000000000000, -0.865812740882613, 0.000000000000000, +-2.845327531197112, 0.000000000000000, 1.445225867774367, 0.000000000000000, 2.183733236584647, 0.000000000000000, 1.163371072749080, 0.000000000000000, +0.883547693520409, 0.000000000000000, -1.224093106684675, 0.000000000000000, -1.854501116331044, 0.000000000000000, 1.783082089255796, 0.000000000000000, +2.301508706196191, 0.000000000000000, -0.539901944139077, 0.000000000000000, 1.962315832319967, 0.000000000000000, -0.060709041870503, 0.000000000000000, +-1.353139923300238, 0.000000000000000, -1.482887537805234, 0.000000000000000, 1.273732601967176, 0.000000000000000, -3.456609915556321, 0.000000000000000, +-3.752320586540873, 0.000000000000000, 3.536356614978951, 0.000000000000000, 0.206035952043233, 0.000000000000000, 5.933966913773842, 0.000000000000000, +-0.486633898075490, 0.000000000000000, -0.329595089863342, 0.000000000000000, 1.496414153905337, 0.000000000000000, 0.137868749388880, 0.000000000000000, +-0.437192030996792, 0.000000000000000, 2.682750615210656, 0.000000000000000, -2.440234892848570, 0.000000000000000, 1.433910252426186, 0.000000000000000, +-0.415051506104074, 0.000000000000000, 1.982003013708649, 0.000000000000000, 1.345796609972435, 0.000000000000000, -2.335949513404370, 0.000000000000000, +1.065988867433025, 0.000000000000000, 2.741844905000464, 0.000000000000000, -1.754047930934362, 0.000000000000000, 0.229252730015575, 0.000000000000000, +-0.679791016408669, 0.000000000000000, -2.274097820043743, 0.000000000000000, 0.149802252231876, 0.000000000000000, -0.139697151364830, 0.000000000000000, +-2.773367420505435, 0.000000000000000, -4.403400246165611, 0.000000000000000, -1.468974515184135, 0.000000000000000, 0.664990623095844, 0.000000000000000, +-3.446979775557143, 0.000000000000000, 1.850006428987618, 0.000000000000000, -1.550866747921936, 0.000000000000000, -3.632874882935257, 0.000000000000000, +0.828039662992464, 0.000000000000000, 2.794055182632816, 0.000000000000000, -0.593995716682633, 0.000000000000000, 0.142788156054200, 0.000000000000000, +0.552461945119668, 0.000000000000000, 0.842127129738758, 0.000000000000000, 1.414335509600077, 0.000000000000000, -0.311559241382430, 0.000000000000000, +1.510590844695250, 0.000000000000000, 1.692217183824300, 0.000000000000000, 0.613760285711957, 0.000000000000000, 0.065233463207770, 0.000000000000000, +-2.571912893711505, 0.000000000000000, -1.707001531141341, 0.000000000000000, 0.673884968382041, 0.000000000000000, 0.889863883420103, 0.000000000000000, +-2.395635435233346, 0.000000000000000, 1.129247296359819, 0.000000000000000, 0.569074704779735, 0.000000000000000, 6.139436017480722, 0.000000000000000, +0.822158309259017, 0.000000000000000, -3.289872016222589, 0.000000000000000, 0.417612988384414, 0.000000000000000, 1.493982103868165, 0.000000000000000, +-0.415353391377005, 0.000000000000000, 0.288670764933155, 0.000000000000000, -1.895650228872272, 0.000000000000000, -0.139631694475020, 0.000000000000000, +1.445103299005436, 0.000000000000000, 2.877182243683429, 0.000000000000000, 1.192428490172580, 0.000000000000000, -5.964591921763842, 0.000000000000000, +0.570859795882959, 0.000000000000000, 2.328333316356666, 0.000000000000000, 0.333755014930026, 0.000000000000000, 1.221901577771909, 0.000000000000000, +0.943358697415568, 0.000000000000000, 2.793063983613067, 0.000000000000000, 3.163005066073616, 0.000000000000000, 2.098300664513867, 0.000000000000000, +-3.915313164333447, 0.000000000000000, -2.475766769064539, 0.000000000000000, 1.720472044894277, 0.000000000000000, -1.273591949275665, 0.000000000000000, +-1.213451272938616, 0.000000000000000, 0.697439404325690, 0.000000000000000, -0.309902287574293, 0.000000000000000, 2.622575852162781, 0.000000000000000, +-2.075881936219060, 0.000000000000000, 0.777847545691770, 0.000000000000000, -3.967947986440650, 0.000000000000000, -3.066503371806472, 0.000000000000000, +1.193780625937845, 0.000000000000000, 0.214246579281311, 0.000000000000000, -2.610681491162162, 0.000000000000000, -1.261224183972745, 0.000000000000000, +-1.165071748544285, 0.000000000000000, -1.116548474834374, 0.000000000000000, 0.847202164846982, 0.000000000000000, -3.474301529532390, 0.000000000000000, +0.020799541946476, 0.000000000000000, -3.868995473288166, 0.000000000000000, 1.757979409638067, 0.000000000000000, 0.868115130183109, 0.000000000000000, +0.910167436737958, 0.000000000000000, -1.878855115563720, 0.000000000000000, 1.710357104174161, 0.000000000000000, -1.468933980990902, 0.000000000000000, +1.799544171601169, 0.000000000000000, -4.922332880027887, 0.000000000000000, 0.219424548939720, 0.000000000000000, -0.971671113451924, 0.000000000000000, +-0.940533475616266, 0.000000000000000, 0.122510114412152, 0.000000000000000, -1.373686254916911, 0.000000000000000, 1.760348103896323, 0.000000000000000, +0.391745067829643, 0.000000000000000, 2.521958505327354, 0.000000000000000, -1.300693516405092, 0.000000000000000, -0.538251788309178, 0.000000000000000, +0.797184135810173, 0.000000000000000, 2.908800548982588, 0.000000000000000, 1.590902251655215, 0.000000000000000, -1.070323714487264, 0.000000000000000, +-3.349764443340999, 0.000000000000000, -1.190563529731447, 0.000000000000000, 1.363369471291963, 0.000000000000000, -1.814270299924576, 0.000000000000000, +-0.023381588315711, 0.000000000000000, 1.719182048679569, 0.000000000000000, 0.839917213252626, 0.000000000000000, 1.006099633839122, 0.000000000000000, +0.812462674381527, 0.000000000000000, 1.755814336346739, 0.000000000000000, 2.546848681206319, 0.000000000000000, -1.555300208869455, 0.000000000000000, +1.017053811631167, 0.000000000000000, 0.996591039170903, 0.000000000000000, -1.228047247924881, 0.000000000000000, 4.809462271463009, 0.000000000000000, +2.318113116151685, 0.000000000000000, -1.206932520679733, 0.000000000000000, 1.273757685623312, 0.000000000000000, 0.724335352481802, 0.000000000000000, +1.519876652073198, 0.000000000000000, -2.749670314714158, 0.000000000000000, 3.424042481847581, 0.000000000000000, -3.714668360421517, 0.000000000000000, +1.612834197004014, 0.000000000000000, -2.038234723985566, 0.000000000000000, 1.470938786562152, 0.000000000000000, 2.111634918450302, 0.000000000000000, +1.030376670151787, 0.000000000000000, -0.420877189003829, 0.000000000000000, -1.502024800532894, 0.000000000000000, 0.452310749163804, 0.000000000000000, +-1.606059382300987, 0.000000000000000, -4.006159967834147, 0.000000000000000, -2.152801208196508, 0.000000000000000, 1.671674089372579, 0.000000000000000, +1.714536333564101, 0.000000000000000, -1.011518543005344, 0.000000000000000, -0.576410282180584, 0.000000000000000, 0.733689809480836, 0.000000000000000, +1.004245602717974, 0.000000000000000, 1.010090391888449, 0.000000000000000, 3.811459513385621, 0.000000000000000, -5.230621089271954, 0.000000000000000, +0.678044861034399, 0.000000000000000, 1.255935859598107, 0.000000000000000, 1.674521701615288, 0.000000000000000, -1.656695216761705, 0.000000000000000, +1.169286028869693, 0.000000000000000, 0.524915416191998, 0.000000000000000, 2.397642885039520, 0.000000000000000, 2.108711400616072, 0.000000000000000, +2.037618211018084, 0.000000000000000, -0.623664553406925, 0.000000000000000, 2.984106170984409, 0.000000000000000, 1.132182737400932, 0.000000000000000, +-2.859274340352130, 0.000000000000000, -0.975550071398723, 0.000000000000000, -1.359935119997407, 0.000000000000000, -2.963308211050121, 0.000000000000000, +-0.228726662781163, 0.000000000000000, -1.411110379682043, 0.000000000000000, 0.741553355734225, 0.000000000000000, 0.497554254758309, 0.000000000000000, +2.371907950598855, 0.000000000000000, 1.063465168988748, 0.000000000000000, -0.641082692081488, 0.000000000000000, -0.855439878540726, 0.000000000000000, +0.578321738578726, 0.000000000000000, 3.005809768796194, 0.000000000000000, 1.961458699064065, 0.000000000000000, -3.206261663772745, 0.000000000000000, +-0.364431989095434, 0.000000000000000, -0.263182496622273, 0.000000000000000, 1.843464680631139, 0.000000000000000, -0.419107530229249, 0.000000000000000, +1.662335873298487, 0.000000000000000, -0.853687563304005, 0.000000000000000, -2.584133404357169, 0.000000000000000, 3.466839568922895, 0.000000000000000, +0.881671345091973, 0.000000000000000, 0.454620014206908, 0.000000000000000, -1.737245187402739, 0.000000000000000, 2.162713238369243, 0.000000000000000, +-3.868539002714486, 0.000000000000000, 2.014114855933826, 0.000000000000000, -0.703233831811006, 0.000000000000000, -3.410319935997574, 0.000000000000000, +-1.851235811006584, 0.000000000000000, 0.909783907894036, 0.000000000000000, 0.091884002136728, 0.000000000000000, -2.688294201131650, 0.000000000000000, +-0.906134178460955, 0.000000000000000, 3.475054609035133, 0.000000000000000, -0.573927964170323, 0.000000000000000, -0.429542937515399, 0.000000000000000, +0.991348618739939, 0.000000000000000, 1.974804904926325, 0.000000000000000, 0.975783450796698, 0.000000000000000, -3.057119549071503, 0.000000000000000, +-3.899429237481194, 0.000000000000000, 0.362439009175350, 0.000000000000000, -1.124461670265618, 0.000000000000000, 1.806000360163583, 0.000000000000000, +-2.768333362600288, 0.000000000000000, 0.244387897900379, 0.000000000000000, 0.908767296720926, 0.000000000000000, 1.254669374391882, 0.000000000000000, +-1.420441929463686, 0.000000000000000, -0.875658895966293, 0.000000000000000, 0.183824603376167, 0.000000000000000, -3.361653917011686, 0.000000000000000, +-0.796615630227952, 0.000000000000000, -1.660226542658673, 0.000000000000000, 1.654439358307226, 0.000000000000000, 2.782812946709771, 0.000000000000000, +1.418064412811531, 0.000000000000000, -0.819645647243761, 0.000000000000000, 0.807724772592699, 0.000000000000000, -0.941967976379298, 0.000000000000000, +-2.312768306047469, 0.000000000000000, 0.872426936477443, 0.000000000000000, 0.919528961530845, 0.000000000000000, -2.084904575264847, 0.000000000000000, +-1.972464868459322, 0.000000000000000, -1.050687203338466, 0.000000000000000, 1.659579707007902, 0.000000000000000, -1.820640014705855, 0.000000000000000, +-1.195078061671045, 0.000000000000000, -1.639773173762048, 0.000000000000000, 1.616744338157063, 0.000000000000000, 4.019216096811563, 0.000000000000000, +3.461021102549681, 0.000000000000000, 1.642352734361484, 0.000000000000000, -0.046354693720813, 0.000000000000000, -0.041936252359677, 0.000000000000000, +-2.393307519480551, 0.000000000000000, -0.341471634615121, 0.000000000000000, -0.392073595257017, 0.000000000000000, -0.219299018372730, 0.000000000000000, +-2.016391579662071, 0.000000000000000, -0.653096251969787, 0.000000000000000, 1.466353155666821, 0.000000000000000, -2.872058864320412, 0.000000000000000, +-2.157180779503830, 0.000000000000000, 0.723257479841560, 0.000000000000000, 3.769951308104384, 0.000000000000000, -1.923392042420024, 0.000000000000000, +0.644899359942840, 0.000000000000000, -2.090226891621437, 0.000000000000000, -0.277043982890403, 0.000000000000000, -0.528271428321112, 0.000000000000000, +2.518120645960652, 0.000000000000000, 1.040820431111488, 0.000000000000000, -4.560583754742486, 0.000000000000000, -0.226899614918836, 0.000000000000000, +1.713331231108959, 0.000000000000000, -3.293941019163642, 0.000000000000000, -1.113331444648290, 0.000000000000000, -1.032308423149906, 0.000000000000000, +1.593774272982443, 0.000000000000000, -1.246840475090529, 0.000000000000000, -0.190344684920137, 0.000000000000000, -1.719386356896355, 0.000000000000000, +-2.827721754659679, 0.000000000000000, -0.092438285279020, 0.000000000000000, -0.565844430675246, 0.000000000000000, -1.077916121691716, 0.000000000000000, +-1.208665809504693, 0.000000000000000, -2.996014266381254, 0.000000000000000, 2.888573323402423, 0.000000000000000, 2.829507048720695, 0.000000000000000, +-0.859177034120755, 0.000000000000000, -1.969302377743254, 0.000000000000000, 0.777437674525362, 0.000000000000000, -0.124910190157646, 0.000000000000000, +0.129875493115290, 0.000000000000000, -4.192139262163992, 0.000000000000000, 3.023496047962126, 0.000000000000000, 1.149775163736637, 0.000000000000000, +2.038151304801731, 0.000000000000000, 3.016122489841263, 0.000000000000000, -4.829481812137012, 0.000000000000000, -1.668436615909279, 0.000000000000000, +0.958586784636918, 0.000000000000000, 1.550652410058678, 0.000000000000000, -1.456305257976716, 0.000000000000000, -0.079588392344731, 0.000000000000000, +-2.453213599392345, 0.000000000000000, 0.296795909127105, 0.000000000000000, -0.253426616607643, 0.000000000000000, 1.418937160028195, 0.000000000000000, +-1.672949529066915, 0.000000000000000, -1.620990298572947, 0.000000000000000, -1.085103073196045, 0.000000000000000, 0.738606361195386, 0.000000000000000, +-2.097831202853255, 0.000000000000000, 2.711952282071310, 0.000000000000000, 1.498539238246888, 0.000000000000000, 1.317457282535915, 0.000000000000000, +-0.302765938349717, 0.000000000000000, -0.044623707947201, 0.000000000000000, 2.337405215062395, 0.000000000000000, -3.980689173859100, 0.000000000000000, + + +}; + diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.ini b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.ini new file mode 100644 index 000000000..62e3049da --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.ini @@ -0,0 +1,13 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_fft_bin_example.ini + +*/ + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.uvoptx new file mode 100644 index 000000000..4d4b67e92 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.uvoptx @@ -0,0 +1,896 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_fft_bin_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 155 + 1 +
476
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\155 +
+ + 1 + 0 + 152 + 1 +
472
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\152 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_fft_bin_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 155 + 1 +
1438
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\155 +
+ + 1 + 0 + 152 + 1 +
1434
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\152 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_fft_bin_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 155 + 1 +
1442
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\155 +
+ + 1 + 0 + 152 + 1 +
1438
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\152 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_fft_bin_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 155 + 1 +
1442
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\155 +
+ + 1 + 0 + 152 + 1 +
1438
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fft_bin_example_f32.c + + \\arm_fft_bin_example\arm_fft_bin_example_f32.c\152 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\arm_fft_bin_data.c + arm_fft_bin_data.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\arm_fft_bin_example_f32.c + arm_fft_bin_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 3 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.uvprojx new file mode 100644 index 000000000..337315b15 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example.uvprojx @@ -0,0 +1,1761 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_fft_bin_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_fft_bin_data.c + 1 + .\arm_fft_bin_data.c + + + arm_fft_bin_example_f32.c + 1 + .\arm_fft_bin_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_fft_bin_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_fft_bin_data.c + 1 + .\arm_fft_bin_data.c + + + arm_fft_bin_example_f32.c + 1 + .\arm_fft_bin_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_fft_bin_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_fft_bin_data.c + 1 + .\arm_fft_bin_data.c + + + arm_fft_bin_example_f32.c + 1 + .\arm_fft_bin_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_fft_bin_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_fft_bin_data.c + 1 + .\arm_fft_bin_data.c + + + arm_fft_bin_example_f32.c + 1 + .\arm_fft_bin_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example_f32.c new file mode 100644 index 000000000..9e36b2bf7 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fft_bin_example/arm_fft_bin_example_f32.c @@ -0,0 +1,158 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fft_bin_example_f32.c +* +* Description: Example code demonstrating calculation of Max energy bin of +* frequency domain of input signal. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup FrequencyBin Frequency Bin Example + * + * \par Description + * \par + * Demonstrates the calculation of the maximum energy bin in the frequency + * domain of the input signal with the use of Complex FFT, Complex + * Magnitude, and Maximum functions. + * + * \par Algorithm: + * \par + * The input test signal contains a 10 kHz signal with uniformly distributed white noise. + * Calculating the FFT of the input signal will give us the maximum energy of the + * bin corresponding to the input frequency of 10 kHz. + * + * \par Block Diagram: + * \image html FFTBin.gif "Block Diagram" + * \par + * The figure below shows the time domain signal of 10 kHz signal with + * uniformly distributed white noise, and the next figure shows the input + * in the frequency domain. The bin with maximum energy corresponds to 10 kHz signal. + * \par + * \image html FFTBinInput.gif "Input signal in Time domain" + * \image html FFTBinOutput.gif "Input signal in Frequency domain" + * + * \par Variables Description: + * \par + * \li \c testInput_f32_10khz points to the input data + * \li \c testOutput points to the output data + * \li \c fftSize length of FFT + * \li \c ifftFlag flag for the selection of CFFT/CIFFT + * \li \c doBitReverse Flag for selection of normal order or bit reversed order + * \li \c refIndex reference index value at which maximum energy of bin ocuurs + * \li \c testIndex calculated index value at which maximum energy of bin ocuurs + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_cfft_f32() + * - arm_cmplx_mag_f32() + * - arm_max_f32() + * + * Refer + * \link arm_fft_bin_example_f32.c \endlink + * + */ + + +/** \example arm_fft_bin_example_f32.c + */ + + +#include "arm_math.h" +#include "arm_const_structs.h" + +#define TEST_LENGTH_SAMPLES 2048 + +/* ------------------------------------------------------------------- +* External Input and Output buffer Declarations for FFT Bin Example +* ------------------------------------------------------------------- */ +extern float32_t testInput_f32_10khz[TEST_LENGTH_SAMPLES]; +static float32_t testOutput[TEST_LENGTH_SAMPLES/2]; + +/* ------------------------------------------------------------------ +* Global variables for FFT Bin Example +* ------------------------------------------------------------------- */ +uint32_t fftSize = 1024; +uint32_t ifftFlag = 0; +uint32_t doBitReverse = 1; + +/* Reference index at which max energy of bin ocuurs */ +uint32_t refIndex = 213, testIndex = 0; + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + + arm_status status; + float32_t maxValue; + + status = ARM_MATH_SUCCESS; + + /* Process the data through the CFFT/CIFFT module */ + arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_10khz, ifftFlag, doBitReverse); + + /* Process the data through the Complex Magnitude Module for + calculating the magnitude at each bin */ + arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize); + + /* Calculates maxValue and returns corresponding BIN value */ + arm_max_f32(testOutput, fftSize, &maxValue, &testIndex); + + if (testIndex != refIndex) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +} + + /** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_fir_example/Abstract.txt new file mode 100644 index 000000000..c06d3f3fc --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_fir_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_data.c b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_data.c new file mode 100644 index 000000000..283a25e25 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_data.c @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_fir_data.c +* +* Description: Data file used for example code +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +** Test input signal contains 1000Hz + 15000 Hz +** ------------------------------------------------------------------- */ + +float32_t testInput_f32_1kHz_15kHz[320] = +{ ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, +-0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, +-0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, +-0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, ++0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, +-0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +-0.8660254038f, -0.4619397663f, -1.3194792169f, -1.1827865776f, -0.5000000000f, -1.1827865776f, -1.3194792169f, -0.4619397663f, +-0.8660254038f, -1.2552931065f, -0.3535533906f, -0.4174197128f, -1.0000000000f, -0.1913417162f, +0.0947343455f, -0.5924659585f, +-0.0000000000f, +0.5924659585f, -0.0947343455f, +0.1913417162f, +1.0000000000f, +0.4174197128f, +0.3535533906f, +1.2552931065f, ++0.8660254038f, +0.4619397663f, +1.3194792169f, +1.1827865776f, +0.5000000000f, +1.1827865776f, +1.3194792169f, +0.4619397663f, ++0.8660254038f, +1.2552931065f, +0.3535533906f, +0.4174197128f, +1.0000000000f, +0.1913417162f, -0.0947343455f, +0.5924659585f, ++0.0000000000f, -0.5924659585f, +0.0947343455f, -0.1913417162f, -1.0000000000f, -0.4174197128f, -0.3535533906f, -1.2552931065f, +}; + +float32_t refOutput[320] = +{ ++0.0000000000f, -0.0010797829f, -0.0007681386f, -0.0001982932f, +0.0000644313f, +0.0020854271f, +0.0036891871f, +0.0015855941f, +-0.0026280805f, -0.0075907658f, -0.0119390538f, -0.0086665968f, +0.0088981202f, +0.0430539279f, +0.0974468742f, +0.1740405600f, ++0.2681416601f, +0.3747720089f, +0.4893362230f, +0.6024154672f, +0.7058740791f, +0.7968348987f, +0.8715901940f, +0.9277881093f, ++0.9682182661f, +0.9934674267f, +1.0012052245f, +0.9925859371f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, -0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, -0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f, ++0.7085021596f, +0.6100062330f, +0.5012752767f, +0.3834386057f, +0.2592435399f, +0.1309866321f, +0.0000000000f, -0.1309866321f, +-0.2592435399f, -0.3834386057f, -0.5012752767f, -0.6100062330f, -0.7085021596f, -0.7952493046f, -0.8679010068f, -0.9257026822f, +-0.9681538347f, -0.9936657199f, -1.0019733630f, -0.9936657199f, -0.9681538347f, -0.9257026822f, -0.8679010068f, -0.7952493046f, +-0.7085021596f, -0.6100062330f, -0.5012752767f, -0.3834386057f, -0.2592435399f, -0.1309866321f, +0.0000000000f, +0.1309866321f, ++0.2592435399f, +0.3834386057f, +0.5012752767f, +0.6100062330f, +0.7085021596f, +0.7952493046f, +0.8679010068f, +0.9257026822f, ++0.9681538347f, +0.9936657199f, +1.0019733630f, +0.9936657199f, +0.9681538347f, +0.9257026822f, +0.8679010068f, +0.7952493046f +}; + diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.ini b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.ini new file mode 100644 index 000000000..0645e7cc3 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.ini @@ -0,0 +1,13 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_fir_lpf_example.ini + +*/ + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.uvoptx new file mode 100644 index 000000000..ab2898232 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.uvoptx @@ -0,0 +1,908 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_fir_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
1640
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
1636
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_fir_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
2478
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
2474
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_fir_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
2810
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
2806
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_fir_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
2810
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
2806
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_fir_example_f32.c + + \\arm_fir_example\arm_fir_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\math_helper.c + math_helper.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\arm_fir_data.c + arm_fir_data.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + .\arm_fir_example_f32.c + arm_fir_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 4 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.uvprojx new file mode 100644 index 000000000..bd5786f30 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example.uvprojx @@ -0,0 +1,1781 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_fir_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_fir_data.c + 1 + .\arm_fir_data.c + + + arm_fir_example_f32.c + 1 + .\arm_fir_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_fir_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_fir_data.c + 1 + .\arm_fir_data.c + + + arm_fir_example_f32.c + 1 + .\arm_fir_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_fir_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_fir_data.c + 1 + .\arm_fir_data.c + + + arm_fir_example_f32.c + 1 + .\arm_fir_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_fir_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_fir_data.c + 1 + .\arm_fir_data.c + + + arm_fir_example_f32.c + 1 + .\arm_fir_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example_f32.c new file mode 100644 index 000000000..333d2300b --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/arm_fir_example_f32.c @@ -0,0 +1,233 @@ +/* ---------------------------------------------------------------------- + * Copyright (C) 2010-2012 ARM Limited. All rights reserved. + * +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library + * Title: arm_fir_example_f32.c + * + * Description: Example code demonstrating how an FIR filter can be used + * as a low pass filter. + * + * Target Processor: Cortex-M4/Cortex-M3 + * +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup FIRLPF FIR Lowpass Filter Example + * + * \par Description: + * \par + * Removes high frequency signal components from the input using an FIR lowpass filter. + * The example demonstrates how to configure an FIR filter and then pass data through + * it in a block-by-block fashion. + * \image html FIRLPF_signalflow.gif + * + * \par Algorithm: + * \par + * The input signal is a sum of two sine waves: 1 kHz and 15 kHz. + * This is processed by an FIR lowpass filter with cutoff frequency 6 kHz. + * The lowpass filter eliminates the 15 kHz signal leaving only the 1 kHz sine wave at the output. + * \par + * The lowpass filter was designed using MATLAB with a sample rate of 48 kHz and + * a length of 29 points. + * The MATLAB code to generate the filter coefficients is shown below: + *
+ *     h = fir1(28, 6/24);
+ * 
+ * The first argument is the "order" of the filter and is always one less than the desired length. + * The second argument is the normalized cutoff frequency. This is in the range 0 (DC) to 1.0 (Nyquist). + * A 6 kHz cutoff with a Nyquist frequency of 24 kHz lies at a normalized frequency of 6/24 = 0.25. + * The CMSIS FIR filter function requires the coefficients to be in time reversed order. + *
+ *     fliplr(h)
+ * 
+ * The resulting filter coefficients and are shown below. + * Note that the filter is symmetric (a property of linear phase FIR filters) + * and the point of symmetry is sample 14. Thus the filter will have a delay of + * 14 samples for all frequencies. + * \par + * \image html FIRLPF_coeffs.gif + * \par + * The frequency response of the filter is shown next. + * The passband gain of the filter is 1.0 and it reaches 0.5 at the cutoff frequency 6 kHz. + * \par + * \image html FIRLPF_response.gif + * \par + * The input signal is shown below. + * The left hand side shows the signal in the time domain while the right hand side is a frequency domain representation. + * The two sine wave components can be clearly seen. + * \par + * \image html FIRLPF_input.gif + * \par + * The output of the filter is shown below. The 15 kHz component has been eliminated. + * \par + * \image html FIRLPF_output.gif + * + * \par Variables Description: + * \par + * \li \c testInput_f32_1kHz_15kHz points to the input data + * \li \c refOutput points to the reference output data + * \li \c testOutput points to the test output data + * \li \c firStateF32 points to state buffer + * \li \c firCoeffs32 points to coefficient buffer + * \li \c blockSize number of samples processed at a time + * \li \c numBlocks number of frames + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_fir_init_f32() + * - arm_fir_f32() + * + * Refer + * \link arm_fir_example_f32.c \endlink + * + */ + + +/** \example arm_fir_example_f32.c + */ + +/* ---------------------------------------------------------------------- +** Include Files +** ------------------------------------------------------------------- */ + +#include "arm_math.h" +#include "math_helper.h" + +/* ---------------------------------------------------------------------- +** Macro Defines +** ------------------------------------------------------------------- */ + +#define TEST_LENGTH_SAMPLES 320 +#define SNR_THRESHOLD_F32 140.0f +#define BLOCK_SIZE 32 +#define NUM_TAPS 29 + +/* ------------------------------------------------------------------- + * The input signal and reference output (computed with MATLAB) + * are defined externally in arm_fir_lpf_data.c. + * ------------------------------------------------------------------- */ + +extern float32_t testInput_f32_1kHz_15kHz[TEST_LENGTH_SAMPLES]; +extern float32_t refOutput[TEST_LENGTH_SAMPLES]; + +/* ------------------------------------------------------------------- + * Declare Test output buffer + * ------------------------------------------------------------------- */ + +static float32_t testOutput[TEST_LENGTH_SAMPLES]; + +/* ------------------------------------------------------------------- + * Declare State buffer of size (numTaps + blockSize - 1) + * ------------------------------------------------------------------- */ + +static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; + +/* ---------------------------------------------------------------------- +** FIR Coefficients buffer generated using fir1() MATLAB function. +** fir1(28, 6/24) +** ------------------------------------------------------------------- */ + +const float32_t firCoeffs32[NUM_TAPS] = { + -0.0018225230f, -0.0015879294f, +0.0000000000f, +0.0036977508f, +0.0080754303f, +0.0085302217f, -0.0000000000f, -0.0173976984f, + -0.0341458607f, -0.0333591565f, +0.0000000000f, +0.0676308395f, +0.1522061835f, +0.2229246956f, +0.2504960933f, +0.2229246956f, + +0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f, -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f, + +0.0080754303f, +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f +}; + +/* ------------------------------------------------------------------ + * Global variables for FIR LPF Example + * ------------------------------------------------------------------- */ + +uint32_t blockSize = BLOCK_SIZE; +uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE; + +float32_t snr; + +/* ---------------------------------------------------------------------- + * FIR LPF Example + * ------------------------------------------------------------------- */ + +int32_t main(void) +{ + uint32_t i; + arm_fir_instance_f32 S; + arm_status status; + float32_t *inputF32, *outputF32; + + /* Initialize input and output buffer pointers */ + inputF32 = &testInput_f32_1kHz_15kHz[0]; + outputF32 = &testOutput[0]; + + /* Call FIR init function to initialize the instance structure. */ + arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], blockSize); + + /* ---------------------------------------------------------------------- + ** Call the FIR process function for every blockSize samples + ** ------------------------------------------------------------------- */ + + for(i=0; i < numBlocks; i++) + { + arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize); + } + + /* ---------------------------------------------------------------------- + ** Compare the generated output against the reference output computed + ** in MATLAB. + ** ------------------------------------------------------------------- */ + + snr = arm_snr_f32(&refOutput[0], &testOutput[0], TEST_LENGTH_SAMPLES); + + if (snr < SNR_THRESHOLD_F32) + { + status = ARM_MATH_TEST_FAILURE; + } + else + { + status = ARM_MATH_SUCCESS; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signal does not match the reference output. + ** ------------------------------------------------------------------- */ + + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +} + +/** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/math_helper.c b/CMSIS/DSP/Examples/ARM/arm_fir_example/math_helper.c new file mode 100644 index 000000000..4b0ee1f67 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/math_helper.c @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 b +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param[in] pRef Pointer to the reference buffer + * @param[in] pTest Pointer to the test buffer + * @param[in] buffSize total number of samples + * @return SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to outputbuffer + * @param[in] numSamples number of samples in the input buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param[in] num_adds number of additions + * @return guard bits + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Apply guard bits to buffer + * @param[in,out] pIn pointer to input buffer + * @param[in] numSamples number of samples in the input buffer + * @param[in] guard_bits guard bits + * @return none + */ + +void arm_apply_guard_bits (float32_t *pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param[in] numShifts number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param[in,out] pIn input buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if (pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if ( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff --git a/CMSIS/DSP/Examples/ARM/arm_fir_example/math_helper.h b/CMSIS/DSP/Examples/ARM/arm_fir_example/math_helper.h new file mode 100644 index 000000000..46b0af3ad --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_fir_example/math_helper.h @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/Abstract.txt new file mode 100644 index 000000000..91f8991d3 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_graphic_equalizer_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_data.c b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_data.c new file mode 100644 index 000000000..ffb0ff318 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_data.c @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_graphic_equalizer_data.c +* +* Description: Data file used for example code +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +#include "arm_math.h" + +float32_t testRefOutput_f32[320] = { + +0.000000000000000000, 0.001898396760225296, 0.004215449094772339, 0.007432077080011368, 0.010948467999696732, 0.015026375651359558, 0.019191544502973557, 0.023574527353048325, +0.027919445186853409, 0.032277785241603851, 0.036551639437675476, 0.040732793509960175, 0.044799156486988068, 0.048710610717535019, 0.052476800978183746, 0.056059073656797409, +0.059482168406248093, 0.062726479023694992, 0.065821025520563126, 0.068763464689254761, 0.071577839553356171, 0.074270240962505341, 0.076856281608343124, 0.079344697296619415, +0.081745062023401260, 0.084067162126302719, 0.086318407207727432, 0.088509257882833481, 0.090647127479314804, 0.092742368578910828, 0.094802625477313995, 0.096837285906076431, +0.098853722214698792, 0.100859899073839190, 0.102862443774938580, 0.104867763817310330, 0.106881409883499150, 0.108908228576183320, 0.110952425748109820, 0.113017357885837550, +0.115105822682380680, 0.117219865322113040, 0.119361080229282380, 0.121530555188655850, 0.123729091137647630, 0.125957202166318890, 0.128215309232473370, 0.130503740161657330, +0.132822841405868530, 0.135173004120588300, 0.137554679065942760, 0.139968376606702800, 0.142414685338735580, 0.144894234836101530, 0.147407654672861100, 0.149955596774816510, +0.152538605034351350, 0.155157200992107390, 0.157811731100082400, 0.160502441227436070, 0.163229387253522870, 0.165992442518472670, 0.168791320174932480, 0.171625509858131410, +0.174494370818138120, 0.177397061139345170, 0.180332608520984650, 0.183299910277128220, 0.186297744512557980, 0.189324837177991870, 0.192379791289567950, 0.195461250841617580, +0.198567759245634080, 0.201697919517755510, 0.204850304871797560, 0.208023533225059510, 0.211216274648904800, 0.214427210390567780, 0.217655111104249950, 0.220898788422346120, +0.224157124757766720, 0.227429077029228210, 0.230713658034801480, 0.234009962528944020, 0.237317133694887160, 0.240634419023990630, 0.243961080908775330, 0.247296508401632310, +0.250640105456113820, 0.253991369158029560, 0.257349837571382520, 0.260715119540691380, 0.264086868613958360, 0.267464816570281980, 0.270848698914051060, 0.274238351732492450, +0.277633611112833020, 0.281034380197525020, 0.284440591931343080, 0.287852220237255100, 0.291269283741712570, 0.294691801071166990, 0.298119872808456420, 0.301553562283515930, +0.304993014782667160, 0.308438356965780260, 0.311889752745628360, 0.315347377210855480, 0.318811416625976560, 0.322282072156667710, 0.325759567320346830, 0.329244095832109450, +0.332735907286405560, 0.336235217750072480, 0.339742250740528110, 0.343257248401641850, 0.346780419349670410, 0.350311983376741410, 0.353852160274982450, 0.357401121407747270, +0.360959105193614960, 0.364526227116584780, 0.368102725595235820, 0.371688675135374070, 0.375284302979707720, 0.378889638930559160, 0.382504884153604510, 0.386130042374134060, +0.389765247702598570, 0.393410529941320420, 0.397065933793783190, 0.400731507688760760, 0.404407206922769550, 0.408093083649873730, 0.411789052188396450, 0.415495119988918300, +0.419211201369762420, 0.422937240451574330, 0.426673140376806260, 0.430418811738491060, 0.434174135327339170, 0.437938995659351350, 0.441713258624076840, 0.445496778935194020, +0.449289388954639430, 0.453090950846672060, 0.456901267170906070, 0.460720170289278030, 0.464547459036111830, 0.468382950872182850, 0.472226426005363460, 0.476077698171138760, +0.479936532676219940, 0.483802750706672670, 0.487676106393337250, 0.491556398570537570, 0.495443399995565410, 0.499336875975131990, 0.503236617892980580, 0.507142387330532070, +0.511053957045078280, 0.514971107244491580, 0.518893606960773470, 0.522821225225925450, 0.526753749698400500, 0.530690938234329220, 0.534632585942745210, 0.538578454405069350, +0.542528338730335240, 0.546481993049383160, 0.550439231097698210, 0.554399792104959490, 0.558363504707813260, 0.562330115586519240, 0.566299438476562500, 0.570271246135234830, +0.574245333671569820, 0.578221492469310760, 0.582199502736330030, 0.586179181933403020, 0.590160276740789410, 0.594142623245716090, 0.598125983029603960, 0.602110169827938080, +0.606094967573881150, 0.610080175101757050, 0.614065583795309070, 0.618050977587699890, 0.622036151587963100, 0.626020893454551700, 0.630004994571208950, 0.633988231420516970, +0.637970402836799620, 0.641951277852058410, 0.645930647850036620, 0.649908289313316350, 0.653883971273899080, 0.657857488840818410, 0.661828581243753430, 0.665797054767608640, +0.669762641191482540, 0.673725124448537830, 0.677684243768453600, 0.681639779359102250, 0.685591462999582290, 0.689539063721895220, 0.693482317030429840, 0.697420965880155560, +0.701354760676622390, 0.705283410847187040, 0.709206689149141310, 0.713124278932809830, 0.717035952955484390, 0.720941375941038130, 0.724840316921472550, 0.728732451796531680, +0.732617516070604320, 0.736495196819305420, 0.740365199744701390, 0.744227230548858640, 0.748080968856811520, 0.751926124095916750, 0.755762357264757160, 0.759589381515979770, +0.763406842947006230, 0.767214450985193250, 0.771011855453252790, 0.774798732250928880, 0.778574761003255840, 0.782339565455913540, 0.786092851310968400, 0.789834223687648770, +0.793563373386859890, 0.797279909253120420, 0.800983514636754990, 0.804673787206411360, 0.808350402861833570, 0.812012966722249980, 0.815661124885082240, 0.819294504821300510, +0.822912722826004030, 0.826515413820743560, 0.830102190375328060, 0.833672653883695600, 0.837226435542106630, 0.840763118118047710, 0.844282336533069610, 0.847783654928207400, +0.851266715675592420, 0.854731071740388870, 0.858176350593566890, 0.861602116376161580, 0.865007970482110980, 0.868393491953611370, 0.871758259832859040, 0.875101849436759950, +0.878423850983381270, 0.881723806262016300, 0.885001312941312790, 0.888255912810564040, 0.891487173736095430, 0.894694659858942030, 0.897877920418977740, 0.901036512106657030, +0.904169965535402300, 0.907277844846248630, 0.910359673202037810, 0.913415014743804930, 0.916443370282649990, 0.919444311410188670, 0.922417331486940380, 0.925361987203359600, +0.928277771919965740, 0.931164238601922990, 0.934020876884460450, 0.936847217381000520, 0.939642757177352910, 0.942407000809907910, 0.945139460265636440, 0.947839632630348210, +0.950507018715143200, 0.953141096979379650, 0.955741371959447860, 0.958307322114706040, 0.960838429629802700, 0.963334184139966960, 0.965794049203395840, 0.968217510730028150, +0.970604017376899720, 0.972953058779239650, 0.975264083594083790, 0.977536566555500030, 0.979769956320524220, 0.981963708996772770, 0.984117280691862110, 0.986230112612247470, +0.988301653414964680, 0.990331344306468960, 0.992318630218505860, 0.994262944906950000, 0.996163722127676010, 0.998020399361848830, 0.999832402914762500, 1.001599155366420700, +1.003320086747407900, 1.004994612187147100, 1.006622135639190700, 1.008202098309993700, 1.009733878076076500, 1.011216927319765100, 1.012650609016418500, 1.014034371823072400, +1.015367589890956900, 1.016649682074785200, 1.017880033701658200, 1.019058048725128200, 1.020183108747005500, 1.021254621446132700, 1.022271949797868700, 1.023234523832798000, + +}; +/* ---------------------------------------------------------------------- +** Test input - logarithmic chirp signal +** ------------------------------------------------------------------- */ + +float32_t testInput_f32[320] = + { + 0.000000000000000061, 0.002622410992047861, 0.005253663973466970, 0.007893770384930297, 0.010542741395035495, 0.013200587895525877, 0.015867320496454066, 0.018542949521290073, +0.021227485001971542, 0.023920936673895138, 0.026623313970853074, 0.029334626019908643, 0.032054881636210709, 0.034784089317753723, 0.037522257240071598, 0.040269393250875855, +0.043025504864628375, 0.045790599257054837, 0.048564683259595690, 0.051347763353792118, 0.054139845665610427, 0.056940935959702531, 0.059751039633601337, 0.062570161711849828, +0.065398306840066575, 0.068235479278943648, 0.071081682898178900, 0.073936921170339814, 0.076801197164660218, 0.079674513540768196, 0.082556872542344922, 0.085448275990715375, +0.088348725278367082, 0.091258221362398390, 0.094176764757897533, 0.097104355531246703, 0.100040993293358240, 0.102986677192832010, 0.105941405909045980, 0.108905177645166230, +0.111877990121087980, 0.114859840566297130, 0.117850725712659680, 0.120850641787131110, 0.123859584504392860, 0.126877549059407400, 0.129904530119898690, 0.132940521818751430, +0.135985517746334080, 0.139039510942737950, 0.142102493889940090, 0.145174458503884160, 0.148255396126476810, 0.151345297517508140, 0.154444152846483080, 0.157551951684374300, +0.160668682995289720, 0.163794335128054890, 0.166928895807713030, 0.170072352126936720, 0.173224690537355760, 0.176385896840798810, 0.179555956180445340, 0.182734853031894270, +0.185922571194139130, 0.189119093780459800, 0.192324403209221870, 0.195538481194587030, 0.198761308737133020, 0.201992866114384050, 0.205233132871247170, 0.208482087810360570, +0.211739708982344370, 0.215005973675965020, 0.218280858408200220, 0.221564338914212730, 0.224856390137231970, 0.228156986218334190, 0.231466100486134670, 0.234783705446379690, +0.238109772771442410, 0.241444273289723230, 0.244787176974952890, 0.248138452935395580, 0.251498069402956710, 0.254865993722190930, 0.258242192339209860, 0.261626630790492030, +0.265019273691591620, 0.268420084725748410, 0.271829026632395280, 0.275246061195565440, 0.278671149232197430, 0.282104250580339830, 0.285545324087251580, 0.288994327597401960, +0.292451217940364990, 0.295915950918612280, 0.299388481295203350, 0.302868762781368150, 0.306356748023990040, 0.309852388592980640, 0.313355634968552230, 0.316866436528383590, +0.320384741534681720, 0.323910497121136620, 0.327443649279772870, 0.330984142847692230, 0.334531921493712690, 0.338086927704900790, 0.341649102772995210, 0.345218386780727190, +0.348794718588032520, 0.352378035818156910, 0.355968274843654950, 0.359565370772282730, 0.363169257432780890, 0.366779867360555120, 0.370397131783246010, 0.374020980606193880, +0.377651342397795690, 0.381288144374756830, 0.384931312387234990, 0.388580770903877330, 0.392236442996751310, 0.395898250326170650, 0.399566113125414350, 0.403239950185338420, +0.406919678838884410, 0.410605214945482130, 0.414296472875345100, 0.417993365493664670, 0.421695804144698540, 0.425403698635752780, 0.429116957221065130, 0.432835486585582130, +0.436559191828633180, 0.440287976447505720, 0.444021742320914510, 0.447760389692375140, 0.451503817153472210, 0.455251921627031540, 0.459004598350192470, 0.462761740857380200, +0.466523240963184150, 0.470288988745136360, 0.474058872526396560, 0.477832778858340690, 0.481610592503056990, 0.485392196415748600, 0.489177471727042850, 0.492966297725213780, +0.496758551838309250, 0.500554109616195060, 0.504352844712508190, 0.508154628866524960, 0.511959331884944910, 0.515766821623591440, 0.519576963969030530, 0.523389622820107150, +0.527204660069405030, 0.531021935584629400, 0.534841307189911630, 0.538662630647041900, 0.542485759636628150, 0.546310545739186690, 0.550136838416161340, 0.553964484990880020, +0.557793330629441700, 0.561623218321546380, 0.565453988861259300, 0.569285480827721570, 0.573117530565801950, 0.576949972166696630, 0.580782637448476910, 0.584615355936589420, +0.588447954844309340, 0.592280259053150400, 0.596112091093235260, 0.599943271123626440, 0.603773616912622660, 0.607602943818024150, 0.611431064767369080, 0.615257790238142090, +0.619082928237961740, 0.622906284284749700, 0.626727661386881850, 0.630546860023327600, 0.634363678123782030, 0.638177911048790960, 0.641989351569874020, 0.645797789849653410, +0.649603013421986450, 0.653404807172108140, 0.657202953316791350, 0.660997231384523490, 0.664787418195706640, 0.668573287842887610, 0.672354611671016960, 0.676131158257749170, +0.679902693393781730, 0.683668980063242500, 0.687429778424128110, 0.691184845788802130, 0.694933936604551380, 0.698676802434213370, 0.702413191936877570, 0.706142850848662460, +0.709865521963579990, 0.713580945114492330, 0.717288857154159800, 0.720988991936399870, 0.724681080297347790, 0.728364850036839040, 0.732040025899910680, 0.735706329558433620, +0.739363479592880620, 0.743011191474238440, 0.746649177546067850, 0.750277147006723990, 0.753894805891742180, 0.757501857056394940, 0.761098000158428880, 0.764682931640995540, +0.768256344715771980, 0.771817929346292900, 0.775367372231492210, 0.778904356789468790, 0.782428563141483460, 0.785939668096195860, 0.789437345134148760, 0.792921264392515420, +0.796391092650110770, 0.799846493312681210, 0.803287126398485760, 0.806712648524170680, 0.810122712890953390, 0.813516969271127150, 0.816895063994893090, 0.820256639937531280, +0.823601336506926020, 0.826928789631450890, 0.830238631748229430, 0.833530491791779850, 0.836803995183058700, 0.840058763818912760, 0.843294416061954100, 0.846510566730867220, +0.849706827091166740, 0.852882804846411770, 0.856038104129895340, 0.859172325496819990, 0.862285065916973510, 0.865375918767918860, 0.868444473828712590, 0.871490317274166260, +0.874513031669661770, 0.877512195966544280, 0.880487385498096800, 0.883438171976119850, 0.886364123488128100, 0.889264804495180530, 0.892139775830360640, 0.894988594697921020, +0.897810814673113080, 0.900605985702712770, 0.903373654106265470, 0.906113362578062300, 0.908824650189867690, 0.911507052394417540, 0.914160101029702910, 0.916783324324059180, +0.919376246902079860, 0.921938389791372770, 0.924469270430179120, 0.926968402675872660, 0.929435296814361430, 0.931869459570409790, 0.934270394118903560, 0.936637600097074200, +0.938970573617708970, 0.941268807283364040, 0.943531790201601380, 0.945759008001275100, 0.947949942849885320, 0.950104073472023970, 0.952220875168933280, 0.954299819839202090, +0.956340376000621160, 0.958342008813221960, 0.960304180103520260, 0.962226348389994210, 0.964107968909812760, 0.965948493646846980, 0.967747371360983650, 0.969504047618768740, +0.971217964825405680, 0.972888562258134030, 0.974515276101013520, 0.976097539481141750, 0.977634782506330400, 0.979126432304266880, 0.980571913063189360, 0.981970646074102120, +0.983322049774557390, 0.984625539794035220, 0.985880529000944810, 0.987086427551279730, 0.988242642938953360, 0.989348580047844540, 0.990403641205582440, 0.991407226239099710, +0.992358732531984260, 0.993257555083659870, 0.994103086570423680, 0.994894717408374870, 0.995631835818261310, 0.996313827892278070, 0.996940077662846650, 0.997509967173408010, + + }; diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.ini b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.ini new file mode 100644 index 000000000..b1c66aa91 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_geq_5band_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.uvoptx new file mode 100644 index 000000000..ef2e82912 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.uvoptx @@ -0,0 +1,908 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_graphic_equalizer_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 402 + 1 +
1898
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\402 +
+ + 1 + 0 + 405 + 1 +
1902
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\405 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_graphic_equalizer_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 405 + 1 +
2648
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\405 +
+ + 1 + 0 + 402 + 1 +
2644
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\402 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_graphic_equalizer_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 405 + 1 +
2980
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\405 +
+ + 1 + 0 + 402 + 1 +
2976
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\402 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_graphic_equalizer_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 402 + 1 +
2976
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\402 +
+ + 1 + 0 + 405 + 1 +
2980
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_graphic_equalizer_example_q31.c + + \\arm_graphic_equalizer_example\arm_graphic_equalizer_example_q31.c\405 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\math_helper.c + math_helper.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\arm_graphic_equalizer_data.c + arm_graphic_equalizer_data.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + .\arm_graphic_equalizer_example_q31.c + arm_graphic_equalizer_example_q31.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 4 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.uvprojx new file mode 100644 index 000000000..27a474f7b --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example.uvprojx @@ -0,0 +1,1781 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_graphic_equalizer_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_graphic_equalizer_data.c + 1 + .\arm_graphic_equalizer_data.c + + + arm_graphic_equalizer_example_q31.c + 1 + .\arm_graphic_equalizer_example_q31.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_graphic_equalizer_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_graphic_equalizer_data.c + 1 + .\arm_graphic_equalizer_data.c + + + arm_graphic_equalizer_example_q31.c + 1 + .\arm_graphic_equalizer_example_q31.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_graphic_equalizer_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_graphic_equalizer_data.c + 1 + .\arm_graphic_equalizer_data.c + + + arm_graphic_equalizer_example_q31.c + 1 + .\arm_graphic_equalizer_example_q31.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_graphic_equalizer_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_graphic_equalizer_data.c + 1 + .\arm_graphic_equalizer_data.c + + + arm_graphic_equalizer_example_q31.c + 1 + .\arm_graphic_equalizer_example_q31.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example_q31.c b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example_q31.c new file mode 100644 index 000000000..663b0467f --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/arm_graphic_equalizer_example_q31.c @@ -0,0 +1,411 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_graphic_equalizer_example_q31.c +* +* Description: Example showing an audio graphic equalizer constructed +* out of Biquad filters. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup GEQ5Band Graphic Audio Equalizer Example + * + * \par Description: + * \par + * This example demonstrates how a 5-band graphic equalizer can be constructed + * using the Biquad cascade functions. + * A graphic equalizer is used in audio applications to vary the tonal quality + * of the audio. + * + * \par Block Diagram: + * \par + * The design is based on a cascade of 5 filter sections. + * \image html GEQ_signalflow.gif + * Each filter section is 4th order and consists of a cascade of two Biquads. + * Each filter has a nominal gain of 0 dB (1.0 in linear units) and + * boosts or cuts signals within a specific frequency range. + * The edge frequencies between the 5 bands are 100, 500, 2000, and 6000 Hz. + * Each band has an adjustable boost or cut in the range of +/- 9 dB. + * For example, the band that extends from 500 to 2000 Hz has the response shown below: + * \par + * \image html GEQ_bandresponse.gif + * \par + * With 1 dB steps, each filter has a total of 19 different settings. + * The filter coefficients for all possible 19 settings were precomputed + * in MATLAB and stored in a table. With 5 different tables, there are + * a total of 5 x 19 = 95 different 4th order filters. + * All 95 responses are shown below: + * \par + * \image html GEQ_allbandresponse.gif + * \par + * Each 4th order filter has 10 coefficents for a grand total of 950 different filter + * coefficients that must be tabulated. The input and output data is in Q31 format. + * For better noise performance, the two low frequency bands are implemented using the high + * precision 32x64-bit Biquad filters. The remaining 3 high frequency bands use standard + * 32x32-bit Biquad filters. The input signal used in the example is a logarithmic chirp. + * \par + * \image html GEQ_inputchirp.gif + * \par + * The array bandGains specifies the gain in dB to apply in each band. + * For example, if bandGains={0, -3, 6, 4, -6}; then the output signal will be: + * \par + * \image html GEQ_outputchirp.gif + * \par + * \note The output chirp signal follows the gain or boost of each band. + * \par + * + * \par Variables Description: + * \par + * \li \c testInput_f32 points to the input data + * \li \c testRefOutput_f32 points to the reference output data + * \li \c testOutput points to the test output data + * \li \c inputQ31 temporary input buffer + * \li \c outputQ31 temporary output buffer + * \li \c biquadStateBand1Q31 points to state buffer for band1 + * \li \c biquadStateBand2Q31 points to state buffer for band2 + * \li \c biquadStateBand3Q31 points to state buffer for band3 + * \li \c biquadStateBand4Q31 points to state buffer for band4 + * \li \c biquadStateBand5Q31 points to state buffer for band5 + * \li \c coeffTable points to coefficient buffer for all bands + * \li \c gainDB gain buffer which has gains applied for all the bands + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_biquad_cas_df1_32x64_init_q31() + * - arm_biquad_cas_df1_32x64_q31() + * - arm_biquad_cascade_df1_init_q31() + * - arm_biquad_cascade_df1_q31() + * - arm_scale_q31() + * - arm_scale_f32() + * - arm_float_to_q31() + * - arm_q31_to_float() + * + * Refer + * \link arm_graphic_equalizer_example_q31.c \endlink + * + */ + + +/** \example arm_graphic_equalizer_example_q31.c + */ + + +#include "arm_math.h" +#include "math_helper.h" + +/* Length of the overall data in the test */ +#define TESTLENGTH 320 + +/* Block size for the underlying processing */ +#define BLOCKSIZE 32 + +/* Total number of blocks to run */ +#define NUMBLOCKS (TESTLENGTH/BLOCKSIZE) + +/* Number of 2nd order Biquad stages per filter */ +#define NUMSTAGES 2 + +#define SNR_THRESHOLD_F32 98 + +/* ------------------------------------------------------------------- + * External Declarations for Input and Output buffers + * ------------------------------------------------------------------- */ + +extern float32_t testInput_f32[TESTLENGTH]; +static float32_t testOutput[TESTLENGTH]; + +extern float32_t testRefOutput_f32[TESTLENGTH]; + +/* ---------------------------------------------------------------------- +** Q31 state buffers for Band1, Band2, Band3, Band4, Band5 +** ------------------------------------------------------------------- */ + +static q63_t biquadStateBand1Q31[4 * 2]; +static q63_t biquadStateBand2Q31[4 * 2]; +static q31_t biquadStateBand3Q31[4 * 2]; +static q31_t biquadStateBand4Q31[4 * 2]; +static q31_t biquadStateBand5Q31[4 * 2]; + +/* ---------------------------------------------------------------------- +** Q31 input and output buffers +** ------------------------------------------------------------------- */ + +q31_t inputQ31[BLOCKSIZE]; +q31_t outputQ31[BLOCKSIZE]; + +/* ---------------------------------------------------------------------- +** Entire coefficient table. There are 10 coefficients per 4th order Biquad +** cascade filter. The first 10 coefficients correspond to the -9 dB gain +** setting of band 1; the next 10 coefficient correspond to the -8 dB gain +** setting of band 1; and so on. There are 10*19=190 coefficients in total +** for band 1 (gains = -9, -8, -7, ..., 9). After this come the 190 coefficients +** for band 2. +** +** The coefficients are in Q29 format and require a postShift of 2. +** ------------------------------------------------------------------- */ + +const q31_t coeffTable[950] = { + + /* Band 1, -9 dB gain */ + 535576962, -1071153923, 535576962, 1073741824, -536870912, 535576962, -1063501998, 527979313, 1060865294, -524146981, + /* Band 1, -8 dB gain */ + 535723226, -1071446451, 535723226, 1073741824, -536870912, 535723226, -1063568947, 527903217, 1061230578, -524503778, + 535868593, -1071737186, 535868593, 1073741824, -536870912, 535868593, -1063627467, 527819780, 1061585502, -524850686, + 536013181, -1072026363, 536013181, 1073741824, -536870912, 536013181, -1063677598, 527728935, 1061930361, -525187972, + 536157109, -1072314217, 536157109, 1073741824, -536870912, 536157109, -1063719372, 527630607, 1062265438, -525515897, + 536300492, -1072600983, 536300492, 1073741824, -536870912, 536300492, -1063752815, 527524720, 1062591011, -525834716, + 536443447, -1072886894, 536443447, 1073741824, -536870912, 536443447, -1063777945, 527411186, 1062907350, -526144676, + 536586091, -1073172183, 536586091, 1073741824, -536870912, 536586091, -1063794775, 527289917, 1063214717, -526446017, + 536728541, -1073457082, 536728541, 1073741824, -536870912, 536728541, -1063803308, 527160815, 1063513366, -526738975, + 536870912, -1073741824, 536870912, 1073741824, -536870912, 536870912, -1063803543, 527023777, 1063803543, -527023777, + 537013321, -1074026642, 537013321, 1073741824, -536870912, 537013321, -1063795470, 526878696, 1064085490, -527300648, + 537155884, -1074311768, 537155884, 1073741824, -536870912, 537155884, -1063779073, 526725455, 1064359439, -527569803, + 537298718, -1074597435, 537298718, 1073741824, -536870912, 537298718, -1063754328, 526563934, 1064625617, -527831454, + 537441939, -1074883878, 537441939, 1073741824, -536870912, 537441939, -1063721205, 526394005, 1064884245, -528085806, + 537585666, -1075171331, 537585666, 1073741824, -536870912, 537585666, -1063679666, 526215534, 1065135536, -528333059, + 537730015, -1075460030, 537730015, 1073741824, -536870912, 537730015, -1063629666, 526028380, 1065379699, -528573409, + 537875106, -1075750212, 537875106, 1073741824, -536870912, 537875106, -1063571152, 525832396, 1065616936, -528807045, + 538021057, -1076042114, 538021057, 1073741824, -536870912, 538021057, -1063504065, 525627429, 1065847444, -529034151, + 538167989, -1076335977, 538167989, 1073741824, -536870912, 538167989, -1063428338, 525413317, 1066071412, -529254907, + + /* Band 2, -9 dB gain */ + 531784976, -1055497692, 523873415, 1066213307, -529420241, 531784976, -1040357886, 509828014, 1028908252, -494627367, + /* Band 2, -8 dB gain */ + 532357636, -1056601982, 524400080, 1066115844, -529326645, 532357636, -1040623406, 509562600, 1030462237, -496062122, + 532927392, -1057707729, 524931110, 1066024274, -529239070, 532927392, -1040848253, 509262081, 1031969246, -497457090, + 533494678, -1058816094, 525467240, 1065939047, -529157961, 533494678, -1041032161, 508925950, 1033429976, -498812573, + 534059929, -1059928204, 526009170, 1065860582, -529083734, 534059929, -1041174868, 508553717, 1034845124, -500128887, + 534623580, -1061045148, 526557561, 1065789260, -529016764, 534623580, -1041276126, 508144920, 1036215393, -501406373, + 535186068, -1062167969, 527113032, 1065725420, -528957385, 535186068, -1041335703, 507699125, 1037541500, -502645399, + 535747827, -1063297666, 527676151, 1065669351, -528905879, 535747827, -1041353386, 507215934, 1038824183, -503846368, + 536309295, -1064435183, 528247436, 1065621289, -528862476, 536309295, -1041328990, 506694984, 1040064203, -505009724, + 536870912, -1065581413, 528827349, 1065581413, -528827349, 536870912, -1041262354, 506135953, 1041262354, -506135953, + 537433117, -1066737194, 529416295, 1065549847, -528800610, 537433117, -1041153346, 505538564, 1042419457, -507225588, + 537996352, -1067903307, 530014622, 1065526651, -528782316, 537996352, -1041001864, 504902578, 1043536370, -508279208, + 538561061, -1069080480, 530622620, 1065511830, -528772462, 538561061, -1040807833, 504227800, 1044613981, -509297437, + 539127690, -1070269387, 531240527, 1065505333, -528770987, 539127690, -1040571205, 503514074, 1045653211, -510280946, + 539696690, -1071470656, 531868525, 1065507054, -528777778, 539696690, -1040291951, 502761277, 1046655011, -511230450, + 540268512, -1072684867, 532506750, 1065516837, -528792672, 540268512, -1039970063, 501969320, 1047620358, -512146700, + 540843613, -1073912567, 533155297, 1065534483, -528815459, 540843613, -1039605542, 501138139, 1048550251, -513030484, + 541422451, -1075154268, 533814224, 1065559750, -528845892, 541422451, -1039198394, 500267687, 1049445708, -513882621, + 542005489, -1076410460, 534483561, 1065592362, -528883686, 542005489, -1038748624, 499357932, 1050307760, -514703956, + 518903861, -1001986830, 486725277, 1037235801, -502367695, 518903861, -945834422, 446371043, 902366163, -400700571, + 520899989, -1005630916, 488289126, 1036926846, -502147311, 520899989, -946490935, 445581846, 907921945, -404936158, + 522893209, -1009290002, 489869792, 1036650484, -501961419, 522893209, -947006359, 444685310, 913306106, -409075225, + 524884763, -1012968199, 491470256, 1036407567, -501810737, 524884763, -947377809, 443679533, 918521018, -413116221, + 526875910, -1016669649, 493093518, 1036198712, -501695739, 526875910, -947602324, 442562672, 923569247, -417057897, + 528867927, -1020398503, 494742575, 1036024293, -501616651, 528867927, -947676875, 441332970, 928453558, -420899319, + 530862111, -1024158905, 496420407, 1035884447, -501573457, 530862111, -947598385, 439988777, 933176909, -424639872, + 532859778, -1027954970, 498129955, 1035779077, -501565907, 532859778, -947363742, 438528571, 937742446, -428279254, + 534862260, -1031790763, 499874098, 1035707863, -501593525, 534862260, -946969823, 436950987, 942153486, -431817474, + 536870912, -1035670279, 501655630, 1035670279, -501655630, 536870912, -946413508, 435254839, 946413508, -435254839, + 538887107, -1039597419, 503477238, 1035665609, -501751354, 538887107, -945691703, 433439146, 950526127, -438591937, + 540912240, -1043575967, 505341475, 1035692963, -501879659, 540912240, -944801359, 431503152, 954495080, -441829621, + 542947726, -1047609569, 507250741, 1035751307, -502039364, 542947726, -943739490, 429446349, 958324201, -444968987, + 544995000, -1051701717, 509207261, 1035839473, -502229165, 544995000, -942503190, 427268492, 962017400, -448011351, + 547055523, -1055855728, 511213065, 1035956193, -502447657, 547055523, -941089647, 424969617, 965578640, -450958226, + 549130774, -1060074734, 513269973, 1036100110, -502693359, 549130774, -939496155, 422550049, 969011913, -453811298, + 551222259, -1064361672, 515379585, 1036269804, -502964731, 551222259, -937720119, 420010407, 972321228, -456572401, + 553331507, -1068719280, 517543273, 1036463810, -503260192, 553331507, -935759057, 417351601, 975510582, -459243495, + 555460072, -1073150100, 519762181, 1036680633, -503578144, 555460072, -933610600, 414574832, 978583948, -461826644, + 494084017, -851422604, 404056273, 930151631, -423619864, 494084017, -673714108, 339502486, 561843007, -265801750, + 498713542, -859177141, 406587077, 929211656, -423786402, 498713542, -673274906, 338185129, 573719128, -272222942, + 503369016, -867012190, 409148384, 928362985, -424054784, 503369016, -672533059, 336693984, 585290277, -278599028, + 508052536, -874935599, 411746438, 927604291, -424422151, 508052536, -671478538, 335026905, 596558312, -284920289, + 512766286, -882955583, 414387826, 926933782, -424885216, 512766286, -670100998, 333182045, 607525792, -291177811, + 517512534, -891080712, 417079474, 926349262, -425440318, 517512534, -668389789, 331157902, 618195914, -297363485, + 522293635, -899319903, 419828635, 925848177, -426083491, 522293635, -666333963, 328953368, 628572440, -303470012, + 527112032, -907682405, 422642886, 925427679, -426810526, 527112032, -663922286, 326567785, 638659631, -309490882, + 531970251, -916177781, 425530105, 925084675, -427617023, 531970251, -661143261, 324000998, 648462180, -315420352, + 536870912, -924815881, 428498454, 924815881, -428498454, 536870912, -657985147, 321253420, 657985147, -321253420, + 541816719, -933606817, 431556352, 924617870, -429450209, 541816719, -654435997, 318326093, 667233900, -326985786, + 546810467, -942560921, 434712438, 924487114, -430467639, 546810467, -650483688, 315220754, 676214053, -332613816, + 551855042, -951688708, 437975532, 924420027, -431546101, 551855042, -646115970, 311939896, 684931422, -338134495, + 556953421, -961000826, 441354588, 924413001, -432680993, 556953421, -641320513, 308486839, 693391970, -343545389, + 562108672, -970508005, 444858642, 924462435, -433867780, 562108672, -636084967, 304865786, 701601770, -348844597, + 567323959, -980220994, 448496743, 924564764, -435102022, 567323959, -630397020, 301081886, 709566963, -354030710, + 572602539, -990150500, 452277894, 924716482, -436379394, 572602539, -624244471, 297141281, 717293726, -359102767, + 577947763, -1000307125, 456210977, 924914158, -437695705, 577947763, -617615296, 293051155, 724788245, -364060214, + 583363084, -1010701292, 460304674, 925154455, -439046908, 583363084, -610497723, 288819761, 732056685, -368902865, + 387379495, -506912469, 196933274, 840112184, -347208270, 387379495, 506912469, 196933274, -840112184, -347208270, + 401658082, -532275898, 207149427, 833765363, -343175316, 401658082, 532275898, 207149427, -833765363, -343175316, + 416472483, -558722695, 217902617, 827270154, -339107319, 416472483, 558722695, 217902617, -827270154, -339107319, + 431841949, -586290861, 229212798, 820624988, -335007540, 431841949, 586290861, 229212798, -820624988, -335007540, + 447786335, -615019650, 241100489, 813828443, -330879528, 447786335, 615019650, 241100489, -813828443, -330879528, + 464326111, -644949597, 253586805, 806879270, -326727141, 464326111, 644949597, 253586805, -806879270, -326727141, + 481482377, -676122557, 266693475, 799776409, -322554559, 481482377, 676122557, 266693475, -799776409, -322554559, + 499276882, -708581728, 280442865, 792519013, -318366296, 499276882, 708581728, 280442865, -792519013, -318366296, + 517732032, -742371685, 294857996, 785106465, -314167221, 517732032, 742371685, 294857996, -785106465, -314167221, + 536870912, -777538408, 309962566, 777538408, -309962566, 536870912, 777538408, 309962566, -777538408, -309962566, + 556717294, -814129313, 325780968, 769814766, -305757943, 556717294, 814129313, 325780968, -769814766, -305757943, + 577295658, -852193284, 342338310, 761935777, -301559360, 577295658, 852193284, 342338310, -761935777, -301559360, + 598631206, -891780698, 359660433, 753902014, -297373230, 598631206, 891780698, 359660433, -753902014, -297373230, + 620749877, -932943463, 377773927, 745714425, -293206383, 620749877, 932943463, 377773927, -745714425, -293206383, + 643678365, -975735041, 396706151, 737374355, -289066077, 643678365, 975735041, 396706151, -737374355, -289066077, + 667444134, -1020210487, 416485252, 728883588, -284960004, 667444134, 1020210487, 416485252, -728883588, -284960004, + 692075438, -1066426476, 437140179, 720244375, -280896294, 692075438, 1066426476, 437140179, -720244375, -280896294, + 717601336, -1114441339, 458700704, 711459472, -276883515, 717601336, 1114441339, 458700704, -711459472, -276883515, + 744051710, -1164315096, 481197437, 702532174, -272930673, 744051710, 1164315096, 481197437, -702532174, -272930673 + +}; + +/* ---------------------------------------------------------------------- +** Desired gains, in dB, per band +** ------------------------------------------------------------------- */ + +int gainDB[5] = {0, -3, 6, 4, -6}; + +float32_t snr; + + +/* ---------------------------------------------------------------------- + * Graphic equalizer Example + * ------------------------------------------------------------------- */ + +int32_t main(void) +{ + float32_t *inputF32, *outputF32; + arm_biquad_cas_df1_32x64_ins_q31 S1; + arm_biquad_cas_df1_32x64_ins_q31 S2; + arm_biquad_casd_df1_inst_q31 S3; + arm_biquad_casd_df1_inst_q31 S4; + arm_biquad_casd_df1_inst_q31 S5; + int i; + int32_t status; + + inputF32 = &testInput_f32[0]; + outputF32 = &testOutput[0]; + + /* Initialize the state and coefficient buffers for all Biquad sections */ + + arm_biquad_cas_df1_32x64_init_q31(&S1, NUMSTAGES, + (q31_t *) &coeffTable[190*0 + 10*(gainDB[0] + 9)], + &biquadStateBand1Q31[0], 2); + + arm_biquad_cas_df1_32x64_init_q31(&S2, NUMSTAGES, + (q31_t *) &coeffTable[190*1 + 10*(gainDB[1] + 9)], + &biquadStateBand2Q31[0], 2); + + arm_biquad_cascade_df1_init_q31(&S3, NUMSTAGES, + (q31_t *) &coeffTable[190*2 + 10*(gainDB[2] + 9)], + &biquadStateBand3Q31[0], 2); + + arm_biquad_cascade_df1_init_q31(&S4, NUMSTAGES, + (q31_t *) &coeffTable[190*3 + 10*(gainDB[3] + 9)], + &biquadStateBand4Q31[0], 2); + + arm_biquad_cascade_df1_init_q31(&S5, NUMSTAGES, + (q31_t *) &coeffTable[190*4 + 10*(gainDB[4] + 9)], + &biquadStateBand5Q31[0], 2); + + + /* Call the process functions and needs to change filter coefficients + for varying the gain of each band */ + + for(i=0; i < NUMBLOCKS; i++) + { + + /* ---------------------------------------------------------------------- + ** Convert block of input data from float to Q31 + ** ------------------------------------------------------------------- */ + + arm_float_to_q31(inputF32 + (i*BLOCKSIZE), inputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Scale down by 1/8. This provides additional headroom so that the + ** graphic EQ can apply gain. + ** ------------------------------------------------------------------- */ + + arm_scale_q31(inputQ31, 0x7FFFFFFF, -3, inputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Call the Q31 Biquad Cascade DF1 32x64 process function for band1, band2 + ** ------------------------------------------------------------------- */ + + arm_biquad_cas_df1_32x64_q31(&S1, inputQ31, outputQ31, BLOCKSIZE); + arm_biquad_cas_df1_32x64_q31(&S2, outputQ31, outputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Call the Q31 Biquad Cascade DF1 process function for band3, band4, band5 + ** ------------------------------------------------------------------- */ + + arm_biquad_cascade_df1_q31(&S3, outputQ31, outputQ31, BLOCKSIZE); + arm_biquad_cascade_df1_q31(&S4, outputQ31, outputQ31, BLOCKSIZE); + arm_biquad_cascade_df1_q31(&S5, outputQ31, outputQ31, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Convert Q31 result back to float + ** ------------------------------------------------------------------- */ + + arm_q31_to_float(outputQ31, outputF32 + (i * BLOCKSIZE), BLOCKSIZE); + + /* ---------------------------------------------------------------------- + ** Scale back up + ** ------------------------------------------------------------------- */ + + arm_scale_f32(outputF32 + (i * BLOCKSIZE), 8.0f, outputF32 + (i * BLOCKSIZE), BLOCKSIZE); + }; + + snr = arm_snr_f32(testRefOutput_f32, testOutput, TESTLENGTH); + + if (snr < SNR_THRESHOLD_F32) + { + status = ARM_MATH_TEST_FAILURE; + } + else + { + status = ARM_MATH_SUCCESS; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signal does not match the reference output. + ** ------------------------------------------------------------------- */ + + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +} + +/** \endlink */ + + + diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/math_helper.c b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/math_helper.c new file mode 100644 index 000000000..4b0ee1f67 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/math_helper.c @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 b +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param[in] pRef Pointer to the reference buffer + * @param[in] pTest Pointer to the test buffer + * @param[in] buffSize total number of samples + * @return SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to outputbuffer + * @param[in] numSamples number of samples in the input buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param[in] num_adds number of additions + * @return guard bits + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Apply guard bits to buffer + * @param[in,out] pIn pointer to input buffer + * @param[in] numSamples number of samples in the input buffer + * @param[in] guard_bits guard bits + * @return none + */ + +void arm_apply_guard_bits (float32_t *pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param[in] numShifts number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param[in,out] pIn input buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if (pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if ( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff --git a/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/math_helper.h b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/math_helper.h new file mode 100644 index 000000000..46b0af3ad --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_graphic_equalizer_example/math_helper.h @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/Abstract.txt new file mode 100644 index 000000000..472fa3454 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_linear_interp_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_data.c b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_data.c new file mode 100644 index 000000000..5a53ec6d2 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_data.c @@ -0,0 +1,23616 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_linear_interp_data.c +* +* Description: Data file used for example. Generation method described +* below +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Table generated from following MATLAB Command +* x = -pi: 0.00005 : (2*pi - 0.00005); +* y = sin(x); +* where pi value is 3.141592653589793 +* --------------------------------------------------------------------*/ + +float arm_linear_interep_table[188495] = { + + +-0.000000000000000122, -0.000049999999979173, -0.000099999999833667, -0.000149999999437717, -0.000199999998666767, -0.000249999997395817, -0.000299999995500311, -0.000349999992854362, +-0.000399999989333412, -0.000449999984812462, -0.000499999979166956, -0.000549999972271007, -0.000599999964000057, -0.000649999954229107, -0.000699999942833602, -0.000749999929687653, +-0.000799999914666704, -0.000849999897645755, -0.000899999878500250, -0.000949999857104302, -0.000999999833333354, -0.001049999807062851, -0.001099999778166904, -0.001149999746520957, +-0.001199999712000011, -0.001249999674479510, -0.001299999633833566, -0.001349999589937622, -0.001399999542666680, -0.001449999491896183, -0.001499999437500243, -0.001549999379354304, +-0.001599999317333367, -0.001649999251312876, -0.001699999181166942, -0.001749999106771011, -0.001799999028000082, -0.001849998944729599, -0.001899998856833675, -0.001949998764187754, +-0.001999998666666836, -0.002049998564146365, -0.002099998456500453, -0.002149998343604546, -0.002199998225334087, -0.002249998101563188, -0.002299997972167294, -0.002349997837021405, +-0.002399997696000966, -0.002449997548980088, -0.002499997395834216, -0.002549997236438351, -0.002599997070667937, -0.002649996898397086, -0.002699996719501243, -0.002749996533855408, +-0.002799996341335026, -0.002849996141814208, -0.002899995935168401, -0.002949995721272604, -0.002999995500002261, -0.003049995271231486, -0.003099995034835722, -0.003149994790690415, +-0.003199994538669677, -0.003249994278648952, -0.003299994010503243, -0.003349993734107991, -0.003399993449337312, -0.003449993156066649, -0.003499992854171003, -0.003549992543525819, +-0.003599992224005209, -0.003649991895484619, -0.003699991557839049, -0.003749991210943944, -0.003799990854673418, -0.003849990488902914, -0.003899990113507434, -0.003949989728362423, +-0.003999989333341993, -0.004049988928321590, -0.004099988513176658, -0.004149988087781312, -0.004199987652010995, -0.004249987205740709, -0.004299986748845899, -0.004349986281200678, +-0.004399985802680492, -0.004449985313160341, -0.004499984812515671, -0.004549984300620594, -0.004599983777350557, -0.004649983242580561, -0.004699982696186050, -0.004749982138041138, +-0.004799981568021272, -0.004849980986001451, -0.004899980391857122, -0.004949979785462398, -0.004999979166692725, -0.005049978535423547, -0.005099977891528979, -0.005149977234884466, +-0.005199976565365011, -0.005249975882846058, -0.005299975187201721, -0.005349974478307446, -0.005399973756038235, -0.005449973020269535, -0.005499972270875456, -0.005549971507731448, +-0.005599970730712511, -0.005649969939694091, -0.005699969134550302, -0.005749968315156590, -0.005799967481387958, -0.005849966633119851, -0.005899965770226383, -0.005949964892583000, +-0.005999964000064706, -0.006049963092546945, -0.006099962169903833, -0.006149961232010816, -0.006199960278743339, -0.006249959309975518, -0.006299958325582797, -0.006349957325440182, +-0.006399956309423117, -0.006449955277405718, -0.006499954229263430, -0.006549953164871257, -0.006599952084104644, -0.006649950986837708, -0.006699949872945895, -0.006749948742304206, +-0.006799947594788089, -0.006849946430271660, -0.006899945248630365, -0.006949944049739206, -0.006999942833473632, -0.007049941599707755, -0.007099940348317025, -0.007149939079176889, +-0.007199937792161461, -0.007249936487146187, -0.007299935164006074, -0.007349933822616566, -0.007399932462851779, -0.007449931084587162, -0.007499929687697716, -0.007549928272058891, +-0.007599926837544801, -0.007649925384030893, -0.007699923911392173, -0.007749922419504085, -0.007799920908240749, -0.007849919377477610, -0.007899917827089672, -0.007949916256952384, +-0.007999914666939863, -0.008049913056927554, -0.008099911426790906, -0.008149909776404035, -0.008199908105642390, -0.008249906414380975, -0.008299904702495238, -0.008349902969859295, +-0.008399901216348595, -0.008449899441838141, -0.008499897646203384, -0.008549895829318437, -0.008599893991058752, -0.008649892131299332, -0.008699890249915625, -0.008749888346781748, +-0.008799886421773151, -0.008849884474764837, -0.008899882505632256, -0.008949880514249525, -0.008999878500492093, -0.009049876464234965, -0.009099874405353590, -0.009149872323722084, +-0.009199870219215898, -0.009249868091710479, -0.009299865941079948, -0.009349863767199750, -0.009399861569944894, -0.009449859349190827, -0.009499857104811669, -0.009549854836682867, +-0.009599852544679429, -0.009649850228676803, -0.009699847888549109, -0.009749845524171793, -0.009799843135419864, -0.009849840722168771, -0.009899838284292632, -0.009949835821666898, +-0.009999833334166574, -0.010049830821667110, -0.010099828284042626, -0.010149825721168572, -0.010199823132920397, -0.010249820519172219, -0.010299817879799491, -0.010349815214677217, +-0.010399812523680850, -0.010449809806684508, -0.010499807063563642, -0.010549804294193258, -0.010599801498448806, -0.010649798676204407, -0.010699795827335511, -0.010749792951717126, +-0.010799790049224703, -0.010849787119732359, -0.010899784163115548, -0.010949781179249277, -0.010999778168008997, -0.011049775129268828, -0.011099772062904221, -0.011149768968790628, +-0.011199765846802169, -0.011249762696814294, -0.011299759518702013, -0.011349756312340777, -0.011399753077604706, -0.011449749814369253, -0.011499746522509425, -0.011549743201900674, +-0.011599739852417123, -0.011649736473934221, -0.011699733066326979, -0.011749729629470847, -0.011799726163239948, -0.011849722667509732, -0.011899719142155211, -0.011949715587051834, +-0.011999712002073726, -0.012049708387096337, -0.012099704741995123, -0.012149701066644201, -0.012199697360919026, -0.012249693624694609, -0.012299689857846402, -0.012349686060248525, +-0.012399682231776434, -0.012449678372305137, -0.012499674481710089, -0.012549670559865410, -0.012599666606646555, -0.012649662621928532, -0.012699658605586799, -0.012749654557495473, +-0.012799650477530011, -0.012849646365565424, -0.012899642221477166, -0.012949638045139357, -0.012999633836427452, -0.013049629595216463, -0.013099625321381845, -0.013149621014797719, +-0.013199616675339540, -0.013249612302882765, -0.013299607897301514, -0.013349603458471243, -0.013399598986266964, -0.013449594480564131, -0.013499589941236869, -0.013549585368160630, +-0.013599580761210430, -0.013649576120261721, -0.013699571445188626, -0.013749566735866605, -0.013799561992170667, -0.013849557213976266, -0.013899552401157530, -0.013949547553589911, +-0.013999542671148425, -0.014049537753708525, -0.014099532801144338, -0.014149527813331319, -0.014199522790144923, -0.014249517731459277, -0.014299512637149837, -0.014349507507091614, +-0.014399502341160067, -0.014449497139229321, -0.014499491901174831, -0.014549486626871612, -0.014599481316195120, -0.014649475969019481, -0.014699470585220153, -0.014749465164672147, +-0.014799459707250922, -0.014849454212830605, -0.014899448681286651, -0.014949443112494076, -0.014999437506328338, -0.015049431862663561, -0.015099426181375206, -0.015149420462338728, +-0.015199414705428255, -0.015249408910519246, -0.015299403077486715, -0.015349397206206119, -0.015399391296551587, -0.015449385348398575, -0.015499379361622101, -0.015549373336097624, +-0.015599367271699268, -0.015649361168302494, -0.015699355025782315, -0.015749348844014195, -0.015799342622872262, -0.015849336362231969, -0.015899330061968333, -0.015949323721956819, +-0.015999317342071551, -0.016049310922187990, -0.016099304462181149, -0.016149297961926493, -0.016199291421298147, -0.016249284840171574, -0.016299278218422232, -0.016349271555924253, +-0.016399264852553091, -0.016449258108183769, -0.016499251322691748, -0.016549244495951149, -0.016599237627837445, -0.016649230718225643, -0.016699223766991209, -0.016749216774008271, +-0.016799209739152290, -0.016849202662298290, -0.016899195543321723, -0.016949188382096723, -0.016999181178498753, -0.017049173932402829, -0.017099166643684417, -0.017149159312217641, +-0.017199151937877969, -0.017249144520540861, -0.017299137060080447, -0.017349129556372193, -0.017399122009291113, -0.017449114418712670, -0.017499106784510998, -0.017549099106561560, +-0.017599091384739373, -0.017649083618919904, -0.017699075808977279, -0.017749067954786969, -0.017799060056223986, -0.017849052113163795, -0.017899044125480532, -0.017949036093049660, +-0.017999028015746196, -0.018049019893445605, -0.018099011726022022, -0.018149003513350907, -0.018198995255307732, -0.018248986951766622, -0.018298978602603044, -0.018348970207692019, +-0.018398961766909014, -0.018448953280128161, -0.018498944747224924, -0.018548936168074327, -0.018598927542551831, -0.018648918870531574, -0.018698910151889018, -0.018748901386499189, +-0.018798892574237547, -0.018848883714978233, -0.018898874808596710, -0.018948865854967998, -0.018998856853967565, -0.019048847805469546, -0.019098838709349409, -0.019148829565482174, +-0.019198820373743309, -0.019248811134006949, -0.019298801846148562, -0.019348792510043615, -0.019398783125566241, -0.019448773692591910, -0.019498764210995646, -0.019548754680652914, +-0.019598745101437852, -0.019648735473225928, -0.019698725795892161, -0.019748716069312028, -0.019798706293359659, -0.019848696467910525, -0.019898686592839651, -0.019948676668022504, +-0.019998666693333219, -0.020048656668647271, -0.020098646593839677, -0.020148636468785914, -0.020198626293360115, -0.020248616067437750, -0.020298605790894288, -0.020348595463603868, +-0.020398585085441959, -0.020448574656283587, -0.020498564176004225, -0.020548553644478006, -0.020598543061580404, -0.020648532427186443, -0.020698521741171597, -0.020748511003410002, +-0.020798500213777129, -0.020848489372148005, -0.020898478478398104, -0.020948467532401559, -0.020998456534033847, -0.021048445483169996, -0.021098434379685473, -0.021148423223454418, +-0.021198412014352307, -0.021248400752254610, -0.021298389437035468, -0.021348378068570352, -0.021398366646734290, -0.021448355171402755, -0.021498343642449892, -0.021548332059751166, +-0.021598320423181612, -0.021648308732616698, -0.021698296987930570, -0.021748285188998701, -0.021798273335696117, -0.021848261427898294, -0.021898249465479372, -0.021948237448314829, +-0.021998225376279691, -0.022048213249249434, -0.022098201067098200, -0.022148188829701463, -0.022198176536934698, -0.022248164188672048, -0.022298151784788989, -0.022348139325160547, +-0.022398126809662203, -0.022448114238168098, -0.022498101610553708, -0.022548088926694063, -0.022598076186464637, -0.022648063389739580, -0.022698050536394364, -0.022748037626304021, +-0.022798024659344031, -0.022848011635388531, -0.022897998554313004, -0.022947985415992481, -0.022997972220302438, -0.023047958967117019, -0.023097945656311705, -0.023147932287761526, +-0.023197918861341957, -0.023247905376927152, -0.023297891834392580, -0.023347878233613725, -0.023397864574464730, -0.023447850856821072, -0.023497837080557787, -0.023547823245550353, +-0.023597809351672917, -0.023647795398800960, -0.023697781386809513, -0.023747767315574056, -0.023797753184968740, -0.023847738994869038, -0.023897724745149989, -0.023947710435687070, +-0.023997696066354435, -0.024047681637027557, -0.024097667147581475, -0.024147652597891669, -0.024197637987832289, -0.024247623317278814, -0.024297608586106724, -0.024347593794190169, +-0.024397578941404627, -0.024447564027625143, -0.024497549052727188, -0.024547534016584920, -0.024597518919073816, -0.024647503760068912, -0.024697488539445693, -0.024747473257078312, +-0.024797457912842245, -0.024847442506612534, -0.024897427038264662, -0.024947411507672778, -0.024997395914712364, -0.025047380259258463, -0.025097364541186551, -0.025147348760370787, +-0.025197332916686650, -0.025247317010009623, -0.025297301040213861, -0.025347285007174848, -0.025397268910767622, -0.025447252750867667, -0.025497236527349136, -0.025547220240087511, +-0.025597203888957840, -0.025647187473835601, -0.025697170994594950, -0.025747154451111372, -0.025797137843259908, -0.025847121170916042, -0.025897104433953929, -0.025947087632249056, +-0.025997070765676464, -0.026047053834111638, -0.026097036837428735, -0.026147019775503239, -0.026197002648210635, -0.026246985455425084, -0.026296968197022069, -0.026346950872876633, +-0.026396933482864263, -0.026446916026859116, -0.026496898504736681, -0.026546880916371998, -0.026596863261640555, -0.026646845540416509, -0.026696827752575352, -0.026746809897992125, +-0.026796791976542320, -0.026846773988100085, -0.026896755932540921, -0.026946737809739864, -0.026996719619572406, -0.027046701361912708, -0.027096683036636253, -0.027146664643618094, +-0.027196646182733715, -0.027246627653857276, -0.027296609056864270, -0.027346590391630184, -0.027396571658029178, -0.027446552855936744, -0.027496533985227927, -0.027546515045778219, +-0.027596496037461778, -0.027646476960154098, -0.027696457813730226, -0.027746438598065654, -0.027796419313034542, -0.027846399958512381, -0.027896380534374220, -0.027946361040495551, +-0.027996341476750536, -0.028046321843014668, -0.028096302139162994, -0.028146282365071010, -0.028196262520612875, -0.028246242605664086, -0.028296222620100130, -0.028346202563795178, +-0.028396182436624718, -0.028446162238463801, -0.028496141969187923, -0.028546121628671248, -0.028596101216789266, -0.028646080733417033, -0.028696060178430041, -0.028746039551702456, +-0.028796018853109770, -0.028845998082527038, -0.028895977239829753, -0.028945956324892084, -0.028995935337589523, -0.029045914277797125, -0.029095893145390381, -0.029145871940243463, +-0.029195850662231865, -0.029245829311231087, -0.029295807887115288, -0.029345786389759970, -0.029395764819040188, -0.029445743174831437, -0.029495721457007882, -0.029545699665445027, +-0.029595677800017921, -0.029645655860602062, -0.029695633847071624, -0.029745611759302099, -0.029795589597168545, -0.029845567360546461, -0.029895545049310013, -0.029945522663334705, +-0.029995500202495588, -0.030045477666668166, -0.030095455055726604, -0.030145432369546407, -0.030195409608002627, -0.030245386770970769, -0.030295363858325000, -0.030345340869940819, +-0.030395317805693732, -0.030445294665457905, -0.030495271449108841, -0.030545248156521602, -0.030595224787571682, -0.030645201342133260, -0.030695177820081833, -0.030745154221292460, +-0.030795130545640648, -0.030845106793000565, -0.030895082963247715, -0.030945059056257156, -0.030995035071904393, -0.031045011010063600, -0.031094986870610280, -0.031144962653419490, +-0.031194938358366741, -0.031244913985326202, -0.031294889534173378, -0.031344865004783770, -0.031394840397031561, -0.031444815710792245, -0.031494790945940897, -0.031544766102353010, +-0.031594741179902762, -0.031644716178465669, -0.031694691097916783, -0.031744665938131605, -0.031794640698984328, -0.031844615380350445, -0.031894589982105023, -0.031944564504123571, +-0.031994538946280265, -0.032044513308450616, -0.032094487590509674, -0.032144461792332962, -0.032194435913794651, -0.032244409954770251, -0.032294383915135269, -0.032344357794763884, +-0.032394331593531604, -0.032444305311313495, -0.032494278947985067, -0.032544252503420502, -0.032594225977495297, -0.032644199370084531, -0.032694172681063713, -0.032744145910307020, +-0.032794119057689960, -0.032844092123087601, -0.032894065106375457, -0.032944038007427706, -0.032994010826119857, -0.033043983562326990, -0.033093956215924598, -0.033143928786786875, +-0.033193901274789335, -0.033243873679807037, -0.033293846001715498, -0.033343818240388901, -0.033393790395702755, -0.033443762467532584, -0.033493734455752558, -0.033543706360238200, +-0.033593678180864575, -0.033643649917507193, -0.033693621570040251, -0.033743593138339245, -0.033793564622279268, -0.033843536021735815, -0.033893507336583077, -0.033943478566696578, +-0.033993449711951375, -0.034043420772222999, -0.034093391747385619, -0.034143362637314767, -0.034193333441885507, -0.034243304160973355, -0.034293274794452495, -0.034343245342198452, +-0.034393215804086739, -0.034443186179991543, -0.034493156469788386, -0.034543126673352333, -0.034593096790558907, -0.034643066821282299, -0.034693036765398019, -0.034743006622781153, +-0.034792976393307209, -0.034842946076850380, -0.034892915673286187, -0.034942885182489711, -0.034992854604336460, -0.035042823938700625, -0.035092793185457737, -0.035142762344482860, +-0.035192731415651525, -0.035242700398837916, -0.035292669293917563, -0.035342638100765975, -0.035392606819257343, -0.035442575449267197, -0.035492543990670616, -0.035542512443343117, +-0.035592480807158891, -0.035642449081993467, -0.035692417267721918, -0.035742385364219767, -0.035792353371361212, -0.035842321289021775, -0.035892289117076537, -0.035942256855401013, +-0.035992224503869408, -0.036042192062357238, -0.036092159530739590, -0.036142126908891986, -0.036192094196688625, -0.036242061394005022, -0.036292028500716271, -0.036341995516697888, +-0.036391962441824077, -0.036441929275970356, -0.036491896019012260, -0.036541862670823974, -0.036591829231281035, -0.036641795700258523, -0.036691762077631966, -0.036741728363275557, +-0.036791694557064832, -0.036841660658874870, -0.036891626668581194, -0.036941592586058017, -0.036991558411180854, -0.037041524143824792, -0.037091489783865367, -0.037141455331176770, +-0.037191420785634539, -0.037241386147113753, -0.037291351415489948, -0.037341316590637316, -0.037391281672431401, -0.037441246660747718, -0.037491211555460480, -0.037541176356445209, +-0.037591141063576999, -0.037641105676731380, -0.037691070195782550, -0.037741034620606045, -0.037790998951076960, -0.037840963187070815, -0.037890927328461818, -0.037940891375125504, +-0.037990855326936968, -0.038040819183771730, -0.038090782945504005, -0.038140746612009321, -0.038190710183162765, -0.038240673658839881, -0.038290637038914874, -0.038340600323263266, +-0.038390563511760609, -0.038440526604281093, -0.038490489600700263, -0.038540452500893212, -0.038590415304735469, -0.038640378012101247, -0.038690340622866082, -0.038740303136905060, +-0.038790265554093727, -0.038840227874306285, -0.038890190097418273, -0.038940152223304790, -0.038990114251841367, -0.039040076182902214, -0.039090038016362870, -0.039139999752098434, +-0.039189961389984436, -0.039239922929895095, -0.039289884371705948, -0.039339845715292532, -0.039389806960529065, -0.039439768107291072, -0.039489729155453658, -0.039539690104892368, +-0.039589650955481413, -0.039639611707096324, -0.039689572359612207, -0.039739532912904607, -0.039789493366847728, -0.039839453721317121, -0.039889413976187872, -0.039939374131335532, +-0.039989334186634320, -0.040039294141959766, -0.040089253997186977, -0.040139213752191497, -0.040189173406847543, -0.040239132961030655, -0.040289092414616375, -0.040339051767478921, +-0.040389011019493840, -0.040438970170536229, -0.040488929220481633, -0.040538888169204278, -0.040588847016579700, -0.040638805762483000, -0.040688764406789736, -0.040738722949374112, +-0.040788681390111679, -0.040838639728877552, -0.040888597965547259, -0.040938556099995034, -0.040988514132096414, -0.041038472061726512, -0.041088429888760873, -0.041138387613073715, +-0.041188345234540590, -0.041238302753036603, -0.041288260168437299, -0.041338217480616897, -0.041388174689450961, -0.041438131794815029, -0.041488088796583319, -0.041538045694631390, +-0.041588002488834347, -0.041637959179067742, -0.041687915765205794, -0.041737872247124060, -0.041787828624697640, -0.041837784897802099, -0.041887741066311650, -0.041937697130101842, +-0.041987653089047797, -0.042037608943025065, -0.042087564691907858, -0.042137520335571749, -0.042187475873891836, -0.042237431306743671, -0.042287386634001493, -0.042337341855540847, +-0.042387296971237283, -0.042437251980965041, -0.042487206884599664, -0.042537161682016274, -0.042587116373090421, -0.042637070957696331, -0.042687025435709569, -0.042736979807005242, +-0.042786934071458907, -0.042836888228944790, -0.042886842279338457, -0.042936796222515020, -0.042986750058350030, -0.043036703786717728, -0.043086657407493664, -0.043136610920552952, +-0.043186564325771164, -0.043236517623022518, -0.043286470812182579, -0.043336423893126905, -0.043386376865729728, -0.043436329729866607, -0.043486282485412663, -0.043536235132243459, +-0.043586187670233222, -0.043636140099257516, -0.043686092419191462, -0.043736044629910618, -0.043785996731289217, -0.043835948723202824, -0.043885900605526565, -0.043935852378135992, +-0.043985804040905345, -0.044035755593710195, -0.044085707036425649, -0.044135658368927279, -0.044185609591089324, -0.044235560702787342, -0.044285511703896455, -0.044335462594292240, +-0.044385413373848923, -0.044435364042442069, -0.044485314599947250, -0.044535265046238698, -0.044585215381191985, -0.044635165604682239, -0.044685115716585018, -0.044735065716774568, +-0.044785015605126446, -0.044834965381515789, -0.044884915045818166, -0.044934864597907805, -0.044984814037660290, -0.045034763364950735, -0.045084712579654712, -0.045134661681646468, +-0.045184610670801574, -0.045234559546995151, -0.045284508310102771, -0.045334456959998673, -0.045384405496558436, -0.045434353919657632, -0.045484302229170492, -0.045534250424972604, +-0.045584198506939087, -0.045634146474945521, -0.045684094328866137, -0.045734042068576522, -0.045783989693951803, -0.045833937204867552, -0.045883884601198015, -0.045933831882818764, +-0.045983779049604941, -0.046033726101432110, -0.046083673038174518, -0.046133619859707743, -0.046183566565906921, -0.046233513156647622, -0.046283459631804101, -0.046333405991251929, +-0.046383352234866684, -0.046433298362522614, -0.046483244374095303, -0.046533190269459880, -0.046583136048491923, -0.046633081711065685, -0.046683027257056739, -0.046732972686340225, +-0.046782917998791723, -0.046832863194285486, -0.046882808272697092, -0.046932753233901670, -0.046982698077774818, -0.047032642804190769, -0.047082587413025116, -0.047132531904152994, +-0.047182476277449988, -0.047232420532790344, -0.047282364670049655, -0.047332308689103049, -0.047382252589826118, -0.047432196372093109, -0.047482140035779608, -0.047532083580761206, +-0.047582027006912150, -0.047631970314108020, -0.047681913502223970, -0.047731856571135579, -0.047781799520717101, -0.047831742350844128, -0.047881685061391802, -0.047931627652235700, +-0.047981570123250085, -0.048031512474310548, -0.048081454705292230, -0.048131396816070718, -0.048181338806520271, -0.048231280676516476, -0.048281222425934481, -0.048331164054649871, +-0.048381105562536907, -0.048431046949471181, -0.048480988215328286, -0.048530929359982468, -0.048580870383309334, -0.048630811285184018, -0.048680752065482120, -0.048730692724077894, +-0.048780633260846945, -0.048830573675664408, -0.048880513968405877, -0.048930454138945624, -0.048980394187159236, -0.049030334112921854, -0.049080273916109085, -0.049130213596595189, +-0.049180153154255758, -0.049230092588965949, -0.049280031900601345, -0.049329971089036223, -0.049379910154146167, -0.049429849095806784, -0.049479787913892334, -0.049529726608278417, +-0.049579665178840181, -0.049629603625453225, -0.049679541947991818, -0.049729480146331551, -0.049779418220347586, -0.049829356169915524, -0.049879293994909625, -0.049929231695205488, +-0.049979169270678275, -0.050029106721203580, -0.050079044046655675, -0.050128981246910162, -0.050178918321842195, -0.050228855271327380, -0.050278792095239978, -0.050328728793455596, +-0.050378665365849389, -0.050428601812296969, -0.050478538132672598, -0.050528474326851883, -0.050578410394710421, -0.050628346336122496, -0.050678282150963705, -0.050728217839109205, +-0.050778153400434602, -0.050828088834814177, -0.050878024142123529, -0.050927959322237815, -0.050977894375032654, -0.051027829300382306, -0.051077764098162393, -0.051127698768248062, +-0.051177633310514933, -0.051227567724837275, -0.051277502011090700, -0.051327436169150371, -0.051377370198891888, -0.051427304100189544, -0.051477237872918934, -0.051527171516955676, +-0.051577105032174046, -0.051627038418449650, -0.051676971675657664, -0.051726904803673687, -0.051776837802372008, -0.051826770671628226, -0.051876703411317525, -0.051926636021315510, +-0.051976568501496463, -0.052026500851735991, -0.052076433071909262, -0.052126365161891904, -0.052176297121558184, -0.052226228950783722, -0.052276160649443688, -0.052326092217413696, +-0.052376023654568026, -0.052425954960782298, -0.052475886135932133, -0.052525817179891805, -0.052575748092536935, -0.052625678873742691, -0.052675609523384695, -0.052725540041337234, +-0.052775470427475921, -0.052825400681675933, -0.052875330803812882, -0.052925260793761066, -0.052975190651396095, -0.053025120376593154, -0.053075049969227850, -0.053124979429174476, +-0.053174908756308654, -0.053224837950505567, -0.053274767011640821, -0.053324695939588718, -0.053374624734224871, -0.053424553395424908, -0.053474481923063123, -0.053524410317015131, +-0.053574338577156107, -0.053624266703361685, -0.053674194695506154, -0.053724122553465134, -0.053774050277113808, -0.053823977866327796, -0.053873905320981401, -0.053923832640950242, +-0.053973759826109496, -0.054023686876334805, -0.054073613791500441, -0.054123540571482054, -0.054173467216154805, -0.054223393725394337, -0.054273320099074943, -0.054323246337072244, +-0.054373172439261881, -0.054423098405518136, -0.054473024235716642, -0.054522949929732598, -0.054572875487441615, -0.054622800908718003, -0.054672726193437382, -0.054722651341474957, +-0.054772576352706340, -0.054822501227005840, -0.054872425964249086, -0.054922350564311266, -0.054972275027068015, -0.055022199352393636, -0.055072123540163755, -0.055122047590253562, +-0.055171971502538698, -0.055221895276893460, -0.055271818913193486, -0.055321742411313962, -0.055371665771130528, -0.055421588992517486, -0.055471512075350470, -0.055521435019505121, +-0.055571357824855741, -0.055621280491277958, -0.055671203018646982, -0.055721125406838441, -0.055771047655726637, -0.055820969765187224, -0.055870891735095379, -0.055920813565326750, +-0.055970735255755640, -0.056020656806257701, -0.056070578216708113, -0.056120499486982521, -0.056170420616955243, -0.056220341606501911, -0.056270262455497724, -0.056320183163818323, +-0.056370103731338023, -0.056420024157932465, -0.056469944443477291, -0.056519864587846809, -0.056569784590916668, -0.056619704452562064, -0.056669624172658639, -0.056719543751080716, +-0.056769463187703935, -0.056819382482403487, -0.056869301635055033, -0.056919220645532884, -0.056969139513712679, -0.057019058239469622, -0.057068976822679369, -0.057118895263216229, +-0.057168813560955850, -0.057218731715773435, -0.057268649727544640, -0.057318567596143774, -0.057368485321446491, -0.057418402903328433, -0.057468320341663930, -0.057518237636328622, +-0.057568154787197720, -0.057618071794146873, -0.057667988657050410, -0.057717905375783973, -0.057767821950222766, -0.057817738380242456, -0.057867654665717354, -0.057917570806523114, +-0.057967486802534947, -0.058017402653628508, -0.058067318359678120, -0.058117233920559432, -0.058167149336147660, -0.058217064606318460, -0.058266979730946154, -0.058316894709906399, +-0.058366809543074410, -0.058416724230325838, -0.058466638771535011, -0.058516553166577591, -0.058566467415329226, -0.058616381517664254, -0.058666295473458328, -0.058716209282586661, +-0.058766122944924913, -0.058816036460347415, -0.058865949828729829, -0.058915863049947365, -0.058965776123875685, -0.059015689050389127, -0.059065601829363344, -0.059115514460673556, +-0.059165426944195423, -0.059215339279803283, -0.059265251467372798, -0.059315163506779178, -0.059365075397898093, -0.059414987140603878, -0.059464898734772197, -0.059514810180278710, +-0.059564721476997755, -0.059614632624804993, -0.059664543623575657, -0.059714454473185401, -0.059764365173508562, -0.059814275724420815, -0.059864186125797379, -0.059914096377513916, +-0.059964006479444776, -0.060013916431465614, -0.060063826233451661, -0.060113735885278588, -0.060163645386820737, -0.060213554737953763, -0.060263463938552905, -0.060313372988493832, +-0.060363281887650888, -0.060413190635899734, -0.060463099233116047, -0.060513007679174169, -0.060562915973949770, -0.060612824117318082, -0.060662732109154779, -0.060712639949334200, +-0.060762547637732020, -0.060812455174223477, -0.060862362558684234, -0.060912269790988648, -0.060962176871012380, -0.061012083798630670, -0.061061990573719201, -0.061111897196152308, +-0.061161803665805668, -0.061211709982554520, -0.061261616146274546, -0.061311522156840083, -0.061361428014126820, -0.061411333718009983, -0.061461239268365254, -0.061511144665066991, +-0.061561049907990856, -0.061610954997012544, -0.061660859932006401, -0.061710764712848115, -0.061760669339412912, -0.061810573811576473, -0.061860478129213164, -0.061910382292198654, +-0.061960286300408195, -0.062010190153717455, -0.062060093852000807, -0.062109997395133919, -0.062159900782992036, -0.062209804015450842, -0.062259707092384702, -0.062309610013669289, +-0.062359512779179851, -0.062409415388792078, -0.062459317842380319, -0.062509220139820271, -0.062559122280987617, -0.062609024265756708, -0.062658926094003239, -0.062708827765602451, +-0.062758729280430040, -0.062808630638360369, -0.062858531839269122, -0.062908432883031537, -0.062958333769523311, -0.063008234498618809, -0.063058135070193727, -0.063108035484123304, +-0.063157935740283236, -0.063207835838547888, -0.063257735778792956, -0.063307635560893666, -0.063357535184725741, -0.063407434650163547, -0.063457333957082751, -0.063507233105359065, +-0.063557132094866853, -0.063607030925481811, -0.063656929597079193, -0.063706828109534694, -0.063756726462722679, -0.063806624656518859, -0.063856522690798473, -0.063906420565437216, +-0.063956318280309468, -0.064006215835290925, -0.064056113230256839, -0.064106010465082922, -0.064155907539643522, -0.064205804453814366, -0.064255701207470692, -0.064305597800488210, +-0.064355494232741298, -0.064405390504105639, -0.064455286614456500, -0.064505182563669605, -0.064555078351619291, -0.064604973978181296, -0.064654869443231303, -0.064704764746643703, +-0.064754659888294180, -0.064804554868058001, -0.064854449685810889, -0.064904344341427209, -0.064954238834782671, -0.065004133165752528, -0.065054027334212505, -0.065103921340036966, +-0.065153815183101621, -0.065203708863281737, -0.065253602380453024, -0.065303495734489861, -0.065353388925267972, -0.065403281952663039, -0.065453174816549470, -0.065503067516802946, +-0.065552960053298776, -0.065602852425912628, -0.065652744634518923, -0.065702636678993342, -0.065752528559211182, -0.065802420275048137, -0.065852311826378601, -0.065902203213078284, +-0.065952094435022451, -0.066001985492086829, -0.066051876384145808, -0.066101767111075085, -0.066151657672749956, -0.066201548069046129, -0.066251438299837970, -0.066301328365001230, +-0.066351218264411163, -0.066401107997943493, -0.066450997565472611, -0.066500886966874243, -0.066550776202024098, -0.066600665270796555, -0.066650554173067367, -0.066700442908711785, +-0.066750331477605535, -0.066800219879623021, -0.066850108114639956, -0.066899996182531618, -0.066949884083173733, -0.066999771816440706, -0.067049659382208235, -0.067099546780351613, +-0.067149434010746578, -0.067199321073267509, -0.067249207967790145, -0.067299094694189751, -0.067348981252342066, -0.067398867642121496, -0.067448753863403738, -0.067498639916064113, +-0.067548525799978318, -0.067598411515020773, -0.067648297061067189, -0.067698182437993318, -0.067748067645673551, -0.067797952683983601, -0.067847837552798773, -0.067897722251994794, +-0.067947606781446068, -0.067997491141028335, -0.068047375330616861, -0.068097259350087397, -0.068147143199314336, -0.068197026878173431, -0.068246910386539947, -0.068296793724289637, +-0.068346676891296892, -0.068396559887437453, -0.068446442712587069, -0.068496325366620134, -0.068546207849412372, -0.068596090160839104, -0.068645972300776043, -0.068695854269097620, +-0.068745736065679547, -0.068795617690397146, -0.068845499143126140, -0.068895380423740937, -0.068945261532117288, -0.068995142468130488, -0.069045023231656275, -0.069094903822569068, +-0.069144784240744592, -0.069194664486058155, -0.069244544558385496, -0.069294424457601034, -0.069344304183580521, -0.069394183736199239, -0.069444063115332938, -0.069493942320856039, +-0.069543821352644294, -0.069593700210573428, -0.069643578894517874, -0.069693457404353371, -0.069743335739955226, -0.069793213901199178, -0.069843091887959660, -0.069892969700112398, +-0.069942847337532726, -0.069992724800096370, -0.070042602087677777, -0.070092479200152658, -0.070142356137396347, -0.070192232899284598, -0.070242109485691817, -0.070291985896493756, +-0.070341862131565736, -0.070391738190783509, -0.070441614074021483, -0.070491489781155436, -0.070541365312061094, -0.070591240666612903, -0.070641115844686603, -0.070690990846157514, +-0.070740865670901404, -0.070790740318792678, -0.070840614789707101, -0.070890489083519984, -0.070940363200107090, -0.070990237139342854, -0.071040110901103015, -0.071089984485262894, +-0.071139857891698272, -0.071189731120283539, -0.071239604170894505, -0.071289477043406435, -0.071339349737695137, -0.071389222253635004, -0.071439094591101829, -0.071488966749971350, +-0.071538838730118015, -0.071588710531417590, -0.071638582153745384, -0.071688453596977161, -0.071738324860987371, -0.071788195945651764, -0.071838066850845664, -0.071887937576444835, +-0.071937808122323726, -0.071987678488358103, -0.072037548674423274, -0.072087418680395018, -0.072137288506147770, -0.072187158151557310, -0.072237027616498944, -0.072286896900848469, +-0.072336766004480288, -0.072386634927270210, -0.072436503669093530, -0.072486372229826040, -0.072536240609342176, -0.072586108807517716, -0.072635976824228413, -0.072685844659348742, +-0.072735712312754441, -0.072785579784320875, -0.072835447073923795, -0.072885314181437663, -0.072935181106738231, -0.072985047849700863, -0.073034914410201310, -0.073084780788114020, +-0.073134646983314788, -0.073184512995678935, -0.073234378825082241, -0.073284244471399168, -0.073334109934505468, -0.073383975214276503, -0.073433840310588042, -0.073483705223314544, +-0.073533569952331776, -0.073583434497515518, -0.073633298858740245, -0.073683163035881710, -0.073733027028815276, -0.073782890837416723, -0.073832754461560485, -0.073882617901122369, +-0.073932481155977711, -0.073982344226002292, -0.074032207111070572, -0.074082069811058332, -0.074131932325840921, -0.074181794655294106, -0.074231656799292375, -0.074281518757711509, +-0.074331380530426830, -0.074381242117314159, -0.074431103518247929, -0.074480964733103935, -0.074530825761757985, -0.074580686604084512, -0.074630547259959337, -0.074680407729257797, +-0.074730268011855672, -0.074780128107627436, -0.074829988016448870, -0.074879847738195351, -0.074929707272742646, -0.074979566619965229, -0.075029425779738895, -0.075079284751938993, +-0.075129143536441331, -0.075179002133120371, -0.075228860541851891, -0.075278718762511271, -0.075328576794974303, -0.075378434639115435, -0.075428292294810489, -0.075478149761934815, +-0.075528007040364192, -0.075577864129973124, -0.075627721030637390, -0.075677577742232813, -0.075727434264633825, -0.075777290597716263, -0.075827146741355475, -0.075877002695427256, +-0.075926858459806096, -0.075976714034367787, -0.076026569418987694, -0.076076424613541610, -0.076126279617904039, -0.076176134431950759, -0.076225989055557150, -0.076275843488599004, +-0.076325697730950798, -0.076375551782488366, -0.076425405643087044, -0.076475259312622654, -0.076525112790969671, -0.076574966078003903, -0.076624819173601172, -0.076674672077635939, +-0.076724524789984039, -0.076774377310520822, -0.076824229639122096, -0.076874081775662365, -0.076923933720017421, -0.076973785472062642, -0.077023637031673850, -0.077073488398725520, +-0.077123339573093461, -0.077173190554653062, -0.077223041343280133, -0.077272891938849148, -0.077322742341235942, -0.077372592550315866, -0.077422442565964769, -0.077472292388057112, +-0.077522142016468731, -0.077571991451075434, -0.077621840691751709, -0.077671689738373392, -0.077721538590815847, -0.077771387248954896, -0.077821235712665041, -0.077871083981822090, +-0.077920932056301434, -0.077970779935978882, -0.078020627620728950, -0.078070475110427445, -0.078120322404949746, -0.078170169504171688, -0.078220016407967760, -0.078269863116213798, +-0.078319709628785178, -0.078369555945557723, -0.078419402066405935, -0.078469247991205637, -0.078519093719832234, -0.078568939252161518, -0.078618784588068036, -0.078668629727427580, +-0.078718474670115987, -0.078768319416007773, -0.078818163964978760, -0.078868008316904326, -0.078917852471660319, -0.078967696429121242, -0.079017540189162933, -0.079067383751660766, +-0.079117227116490579, -0.079167070283526875, -0.079216913252645516, -0.079266756023721852, -0.079316598596631746, -0.079366440971249716, -0.079416283147451569, -0.079466125125113155, +-0.079515966904108989, -0.079565808484314909, -0.079615649865606306, -0.079665491047859027, -0.079715332030947578, -0.079765172814747792, -0.079815013399135076, -0.079864853783985265, +-0.079914693969172876, -0.079964533954573758, -0.080014373740063302, -0.080064213325517358, -0.080114052710810443, -0.080163891895818393, -0.080213730880416598, -0.080263569664480935, +-0.080313408247885895, -0.080363246630507340, -0.080413084812220675, -0.080462922792901737, -0.080512760572425041, -0.080562598150666451, -0.080612435527501802, -0.080662272702805626, +-0.080712109676453772, -0.080761946448321645, -0.080811783018285080, -0.080861619386218636, -0.080911455551998121, -0.080961291515498982, -0.081011127276597053, -0.081060962835166867, +-0.081110798191084271, -0.081160633344224672, -0.081210468294463947, -0.081260303041676599, -0.081310137585738490, -0.081359971926525040, -0.081409806063912113, -0.081459639997774225, +-0.081509473727987225, -0.081559307254426547, -0.081609140576968053, -0.081658973695486248, -0.081708806609857021, -0.081758639319956222, -0.081808471825658369, -0.081858304126839351, +-0.081908136223374561, -0.081957968115139876, -0.082007799802009840, -0.082057631283860288, -0.082107462560566669, -0.082157293632004830, -0.082207124498049317, -0.082256955158575992, +-0.082306785613460276, -0.082356615862578045, -0.082406445905803830, -0.082456275743013493, -0.082506105374082914, -0.082555934798886635, -0.082605764017300506, -0.082655593029199975, +-0.082705421834460904, -0.082755250432957839, -0.082805078824566655, -0.082854907009162759, -0.082904734986622042, -0.082954562756819047, -0.083004390319629640, -0.083054217674929265, +-0.083104044822593787, -0.083153871762497750, -0.083203698494517031, -0.083253525018527078, -0.083303351334403752, -0.083353177442021600, -0.083403003341256499, -0.083452829031983894, +-0.083502654514079663, -0.083552479787418352, -0.083602304851875850, -0.083652129707328007, -0.083701954353649410, -0.083751778790715936, -0.083801603018403004, -0.083851427036586504, +-0.083901250845141009, -0.083951074443942370, -0.084000897832866059, -0.084050721011787927, -0.084100543980582573, -0.084150366739125848, -0.084200189287293198, -0.084250011624960527, +-0.084299833752002382, -0.084349655668294651, -0.084399477373712783, -0.084449298868132669, -0.084499120151428866, -0.084548941223477253, -0.084598762084153289, -0.084648582733332867, +-0.084698403170890543, -0.084748223396702210, -0.084798043410643759, -0.084847863212589761, -0.084897682802416108, -0.084947502179998247, -0.084997321345212068, -0.085047140297932144, +-0.085096959038034381, -0.085146777565394210, -0.085196595879887538, -0.085246413981388935, -0.085296231869774294, -0.085346049544919075, -0.085395867006699169, -0.085445684254989163, +-0.085495501289664946, -0.085545318110602411, -0.085595134717676144, -0.085644951110762035, -0.085694767289735560, -0.085744583254472595, -0.085794399004847741, -0.085844214540736888, +-0.085894029862015484, -0.085943844968559460, -0.085993659860243390, -0.086043474536943151, -0.086093288998534245, -0.086143103244892549, -0.086192917275892650, -0.086242731091410452, +-0.086292544691321443, -0.086342358075501502, -0.086392171243825228, -0.086441984196168525, -0.086491796932406870, -0.086541609452416152, -0.086591421756070971, -0.086641233843247234, +-0.086691045713820872, -0.086740857367666430, -0.086790668804659854, -0.086840480024676606, -0.086890291027592603, -0.086940101813282433, -0.086989912381622000, -0.087039722732486793, +-0.087089532865752717, -0.087139342781294371, -0.087189152478987661, -0.087238961958708075, -0.087288771220331532, -0.087338580263732604, -0.087388389088787238, -0.087438197695370895, +-0.087488006083359507, -0.087537814252627646, -0.087587622203051260, -0.087637429934506253, -0.087687237446867239, -0.087737044740010137, -0.087786851813810407, -0.087836658668143996, +-0.087886465302885491, -0.087936271717910838, -0.087986077913095498, -0.088035883888315403, -0.088085689643445153, -0.088135495178360682, -0.088185300492937477, -0.088235105587051457, +-0.088284910460577223, -0.088334715113390735, -0.088384519545367440, -0.088434323756383298, -0.088484127746312896, -0.088533931515032194, -0.088583735062417082, -0.088633538388342203, +-0.088683341492683476, -0.088733144375316403, -0.088782947036116902, -0.088832749474959588, -0.088882551691720407, -0.088932353686274848, -0.088982155458498843, -0.089031957008267007, +-0.089081758335455272, -0.089131559439939154, -0.089181360321594572, -0.089231160980296154, -0.089280961415919832, -0.089330761628341096, -0.089380561617435905, -0.089430361383078874, +-0.089480160925145935, -0.089529960243512591, -0.089579759338054787, -0.089629558208647153, -0.089679356855165607, -0.089729155277486122, -0.089778953475483314, -0.089828751449033115, +-0.089878549198011026, -0.089928346722293023, -0.089978144021753706, -0.090027941096269021, -0.090077737945714498, -0.090127534569966056, -0.090177330968898350, -0.090227127142387301, +-0.090276923090308450, -0.090326718812537732, -0.090376514308949760, -0.090426309579420522, -0.090476104623825493, -0.090525899442040647, -0.090575694033940626, -0.090625488399401349, +-0.090675282538298804, -0.090725076450507619, -0.090774870135903726, -0.090824663594362670, -0.090874456825760383, -0.090924249829971521, -0.090974042606872044, -0.091023835156337454, +-0.091073627478243713, -0.091123419572465461, -0.091173211438878660, -0.091223003077358839, -0.091272794487781944, -0.091322585670022619, -0.091372376623956836, -0.091422167349460112, +-0.091471957846408408, -0.091521748114676379, -0.091571538154139959, -0.091621327964675148, -0.091671117546156575, -0.091720906898460214, -0.091770696021461567, -0.091820484915036638, +-0.091870273579060052, -0.091920062013407786, -0.091969850217955354, -0.092019638192578745, -0.092069425937152602, -0.092119213451552884, -0.092169000735655135, -0.092218787789335330, +-0.092268574612468124, -0.092318361204929464, -0.092368147566594908, -0.092417933697340429, -0.092467719597040671, -0.092517505265571606, -0.092567290702808780, -0.092617075908628180, +-0.092666860882904434, -0.092716645625513544, -0.092766430136331485, -0.092816214415232912, -0.092865998462093799, -0.092915782276789677, -0.092965565859196561, -0.093015349209189080, +-0.093065132326643221, -0.093114915211434529, -0.093164697863439005, -0.093214480282531278, -0.093264262468587364, -0.093314044421482792, -0.093363826141093550, -0.093413607627294296, +-0.093463388879961029, -0.093513169898969725, -0.093562950684195054, -0.093612731235513016, -0.093662511552799144, -0.093712291635929437, -0.093762071484778553, -0.093811851099222493, +-0.093861630479136815, -0.093911409624397493, -0.093961188534879211, -0.094010967210457944, -0.094060745651009275, -0.094110523856409167, -0.094160301826532330, -0.094210079561254725, +-0.094259857060451924, -0.094309634323999914, -0.094359411351773378, -0.094409188143648320, -0.094458964699500297, -0.094508741019205297, -0.094558517102638004, -0.094608292949674419, +-0.094658068560190545, -0.094707843934061051, -0.094757619071161953, -0.094807393971368809, -0.094857168634557607, -0.094906943060603058, -0.094956717249381151, -0.095006491200767443, +-0.095056264914637950, -0.095106038390867356, -0.095155811629331663, -0.095205584629906442, -0.095255357392467710, -0.095305129916890136, -0.095354902203049735, -0.095404674250822080, +-0.095454446060083187, -0.095504217630707725, -0.095553988962571723, -0.095603760055550754, -0.095653530909520820, -0.095703301524356618, -0.095753071899934178, -0.095802842036129487, +-0.095852611932817244, -0.095902381589873478, -0.095952151007173761, -0.096001920184594094, -0.096051689122009204, -0.096101457819295077, -0.096151226276327315, -0.096200994492981917, +-0.096250762469133597, -0.096300530204658383, -0.096350297699431819, -0.096400064953329978, -0.096449831966227514, -0.096499598738000486, -0.096549365268524895, -0.096599131557675438, +-0.096648897605328174, -0.096698663411358646, -0.096748428975642911, -0.096798194298055668, -0.096847959378472931, -0.096897724216770301, -0.096947488812823793, -0.096997253166508118, +-0.097047017277699321, -0.097096781146272987, -0.097146544772105131, -0.097196308155070479, -0.097246071295045047, -0.097295834191904434, -0.097345596845524685, -0.097395359255780509, +-0.097445121422547923, -0.097494883345702540, -0.097544645025120391, -0.097594406460676186, -0.097644167652245956, -0.097693928599705757, -0.097743689302930301, -0.097793449761795617, +-0.097843209976177306, -0.097892969945951411, -0.097942729670992656, -0.097992489151177073, -0.098042248386380260, -0.098092007376478274, -0.098141766121345828, -0.098191524620858978, +-0.098241282874893296, -0.098291040883324854, -0.098340798646028377, -0.098390556162879894, -0.098440313433755033, -0.098490070458529824, -0.098539827237078992, -0.098589583769278594, +-0.098639340055004243, -0.098689096094131970, -0.098738851886536527, -0.098788607432093958, -0.098838362730680307, -0.098888117782170298, -0.098937872586440004, -0.098987627143365023, +-0.099037381452821427, -0.099087135514683927, -0.099136889328828595, -0.099186642895131030, -0.099236396213467304, -0.099286149283712141, -0.099335902105741614, -0.099385654679431334, +-0.099435407004657347, -0.099485159081294405, -0.099534910909218566, -0.099584662488305900, -0.099634413818431120, -0.099684164899470323, -0.099733915731299097, -0.099783666313793540, +-0.099833416646828363, -0.099883166730279652, -0.099932916564023019, -0.099982666147934537, -0.100032415481888940, -0.100082164565762330, -0.100131913399430280, -0.100181661982768900, +-0.100231410315652930, -0.100281158397958430, -0.100330906229561020, -0.100380653810336800, -0.100430401140160510, -0.100480148218908200, -0.100529895046455530, -0.100579641622678570, +-0.100629387947452050, -0.100679134020652070, -0.100728879842154700, -0.100778625411834670, -0.100828370729568100, -0.100878115795230590, -0.100927860608698240, -0.100977605169845790, +-0.101027349478549330, -0.101077093534684480, -0.101126837338127360, -0.101176580888752700, -0.101226324186436580, -0.101276067231054660, -0.101325810022483000, -0.101375552560596400, +-0.101425294845270890, -0.101475036876382150, -0.101524778653806270, -0.101574520177418000, -0.101624261447093430, -0.101674002462708630, -0.101723743224138390, -0.101773483731258800, +-0.101823223983945500, -0.101872963982074590, -0.101922703725520810, -0.101972443214160280, -0.102022182447868630, -0.102071921426521980, -0.102121660149995090, -0.102171398618164040, +-0.102221136830904490, -0.102270874788092550, -0.102320612489602970, -0.102370349935311870, -0.102420087125094890, -0.102469824058828120, -0.102519560736386360, -0.102569297157645710, +-0.102619033322482250, -0.102668769230770760, -0.102718504882387360, -0.102768240277207680, -0.102817975415107860, -0.102867710295962640, -0.102917444919648160, -0.102967179286040060, +-0.103016913395014450, -0.103066647246446120, -0.103116380840211170, -0.103166114176185280, -0.103215847254244530, -0.103265580074263730, -0.103315312636118970, -0.103365044939685930, +-0.103414776984840720, -0.103464508771458140, -0.103514240299414280, -0.103563971568584810, -0.103613702578845860, -0.103663433330072220, -0.103713163822139990, -0.103762894054925280, +-0.103812624028302910, -0.103862353742148970, -0.103912083196339160, -0.103961812390749570, -0.104011541325255020, -0.104061269999731600, -0.104110998414055010, -0.104160726568101370, +-0.104210454461745470, -0.104260182094863430, -0.104309909467330940, -0.104359636579024130, -0.104409363429817770, -0.104459090019588000, -0.104508816348210510, -0.104558542415561420, +-0.104608268221515530, -0.104657993765948980, -0.104707719048737880, -0.104757444069757040, -0.104807168828882590, -0.104856893325990230, -0.104906617560956070, -0.104956341533654920, +-0.105006065243962910, -0.105055788691755750, -0.105105511876909560, -0.105155234799299140, -0.105204957458800640, -0.105254679855289730, -0.105304401988642590, -0.105354123858733980, +-0.105403845465440070, -0.105453566808636550, -0.105503287888199540, -0.105553008704003890, -0.105602729255925700, -0.105652449543841150, -0.105702169567625020, -0.105751889327153460, +-0.105801608822302190, -0.105851328052947320, -0.105901047018963700, -0.105950765720227480, -0.106000484156614320, -0.106050202328000400, -0.106099920234260540, -0.106149637875270870, +-0.106199355250907110, -0.106249072361045400, -0.106298789205560570, -0.106348505784328760, -0.106398222097225700, -0.106447938144127520, -0.106497653924909050, -0.106547369439446440, +-0.106597084687615420, -0.106646799669292120, -0.106696514384351390, -0.106746228832669360, -0.106795943014122210, -0.106845656928584750, -0.106895370575933170, -0.106945083956043140, +-0.106994797068790850, -0.107044509914051120, -0.107094222491700130, -0.107143934801613580, -0.107193646843667630, -0.107243358617737110, -0.107293070123698210, -0.107342781361426620, +-0.107392492330798530, -0.107442203031688760, -0.107491913463973490, -0.107541623627528430, -0.107591333522229770, -0.107641043147952320, -0.107690752504572260, -0.107740461591965760, +-0.107790170410007670, -0.107839878958574160, -0.107889587237540940, -0.107939295246784210, -0.107989002986178780, -0.108038710455600860, -0.108088417654926150, -0.108138124584030840, +-0.108187831242789790, -0.108237537631079140, -0.108287243748774660, -0.108336949595752520, -0.108386655171887540, -0.108436360477055950, -0.108486065511133430, -0.108535770273996220, +-0.108585474765519120, -0.108635178985578340, -0.108684882934050060, -0.108734586610809120, -0.108784290015731710, -0.108833993148693590, -0.108883696009570920, -0.108933398598238570, +-0.108983100914572720, -0.109032802958449120, -0.109082504729743970, -0.109132206228332100, -0.109181907454089720, -0.109231608406892570, -0.109281309086616830, -0.109331009493137380, +-0.109380709626330420, -0.109430409486071680, -0.109480109072237350, -0.109529808384702320, -0.109579507423342760, -0.109629206188034430, -0.109678904678653530, -0.109728602895074930, +-0.109778300837174810, -0.109827998504829380, -0.109877695897913520, -0.109927393016303430, -0.109977089859874840, -0.110026786428503970, -0.110076482722065700, -0.110126178740436220, +-0.110175874483491300, -0.110225569951107120, -0.110275265143158580, -0.110324960059521890, -0.110374654700072780, -0.110424349064687480, -0.110474043153240870, -0.110523736965609160, +-0.110573430501668540, -0.110623123761293910, -0.110672816744361450, -0.110722509450746960, -0.110772201880326650, -0.110821894032975390, -0.110871585908569380, -0.110921277506984410, +-0.110970968828096710, -0.111020659871781110, -0.111070350637913890, -0.111120041126370780, -0.111169731337028010, -0.111219421269760480, -0.111269110924444390, -0.111318800300955510, +-0.111368489399170090, -0.111418178218962990, -0.111467866760210450, -0.111517555022788250, -0.111567243006572600, -0.111616930711438400, -0.111666618137261860, -0.111716305283919240, +-0.111765992151285400, -0.111815678739236590, -0.111865365047648570, -0.111915051076397580, -0.111964736825358540, -0.112014422294407640, -0.112064107483420690, -0.112113792392273910, +-0.112163477020842210, -0.112213161369001820, -0.112262845436628520, -0.112312529223598560, -0.112362212729786830, -0.112411895955069560, -0.112461578899322550, -0.112511261562422040, +-0.112560943944242940, -0.112610626044661470, -0.112660307863553450, -0.112709989400795090, -0.112759670656261320, -0.112809351629828370, -0.112859032321372480, -0.112908712730768570, +-0.112958392857892890, -0.113008072702621210, -0.113057752264829790, -0.113107431544393550, -0.113157110541188740, -0.113206789255091160, -0.113256467685977020, -0.113306145833721300, +-0.113355823698200200, -0.113405501279289540, -0.113455178576865570, -0.113504855590803210, -0.113554532320978730, -0.113604208767268340, -0.113653884929546990, -0.113703560807690940, +-0.113753236401575970, -0.113802911711078360, -0.113852586736073030, -0.113902261476436230, -0.113951935932043780, -0.114001610102771930, -0.114051283988495610, -0.114100957589091080, +-0.114150630904434160, -0.114200303934401100, -0.114249976678866840, -0.114299649137707640, -0.114349321310799320, -0.114398993198018130, -0.114448664799239030, -0.114498336114338270, +-0.114548007143191650, -0.114597677885675460, -0.114647348341664640, -0.114697018511035450, -0.114746688393664140, -0.114796357989425680, -0.114846027298196330, -0.114895696319851900, +-0.114945365054268680, -0.114995033501321610, -0.115044701660886940, -0.115094369532840520, -0.115144037117058630, -0.115193704413416200, -0.115243371421789500, -0.115293038142054380, +-0.115342704574087100, -0.115392370717762640, -0.115442036572957220, -0.115491702139546720, -0.115541367417407420, -0.115591032406414250, -0.115640697106443490, -0.115690361517371440, +-0.115740025639073050, -0.115789689471424580, -0.115839353014301900, -0.115889016267581270, -0.115938679231137670, -0.115988341904847360, -0.116038004288586200, -0.116087666382230480, +-0.116137328185655130, -0.116186989698736480, -0.116236650921350340, -0.116286311853373030, -0.116335972494679490, -0.116385632845146010, -0.116435292904648460, -0.116484952673063120, +-0.116534612150264960, -0.116584271336130270, -0.116633930230535320, -0.116683588833355130, -0.116733247144465950, -0.116782905163743660, -0.116832562891064560, -0.116882220326303590, +-0.116931877469337090, -0.116981534320040880, -0.117031190878291280, -0.117080847143963260, -0.117130503116933130, -0.117180158797076740, -0.117229814184270390, -0.117279469278389060, +-0.117329124079309070, -0.117378778586906260, -0.117428432801056940, -0.117478086721636110, -0.117527740348520050, -0.117577393681584650, -0.117627046720706200, -0.117676699465759700, +-0.117726351916621450, -0.117776004073167750, -0.117825655935273610, -0.117875307502815330, -0.117924958775668780, -0.117974609753710270, -0.118024260436814800, -0.118073910824858670, +-0.118123560917717770, -0.118173210715268410, -0.118222860217385580, -0.118272509423945600, -0.118322158334824350, -0.118371806949898140, -0.118421455269041960, -0.118471103292132160, +-0.118520751019044610, -0.118570398449655600, -0.118620045583840160, -0.118669692421474610, -0.118719338962435280, -0.118768985206597150, -0.118818631153836550, -0.118868276804029380, +-0.118917922157051960, -0.118967567212779290, -0.119017211971087710, -0.119066856431853090, -0.119116500594951780, -0.119166144460258780, -0.119215788027650400, -0.119265431297002570, +-0.119315074268191590, -0.119364716941092490, -0.119414359315581590, -0.119464001391534800, -0.119513643168828440, -0.119563284647337540, -0.119612925826938430, -0.119662566707507440, +-0.119712207288919580, -0.119761847571051220, -0.119811487553778240, -0.119861127236976980, -0.119910766620522450, -0.119960405704291020, -0.120010044488158570, -0.120059682972001450, +-0.120109321155694670, -0.120158959039114610, -0.120208596622137130, -0.120258233904638610, -0.120307870886494070, -0.120357507567579850, -0.120407143947771860, -0.120456780026946440, +-0.120506415804978630, -0.120556051281744790, -0.120605686457120830, -0.120655321330983080, -0.120704955903206600, -0.120754590173667710, -0.120804224142242800, -0.120853857808806880, +-0.120903491173236330, -0.120953124235407040, -0.121002756995195390, -0.121052389452476390, -0.121102021607126420, -0.121151653459021420, -0.121201285008037700, -0.121250916254050340, +-0.121300547196935680, -0.121350177836569660, -0.121399808172828640, -0.121449438205587650, -0.121499067934723070, -0.121548697360110810, -0.121598326481627260, -0.121647955299147440, +-0.121697583812547750, -0.121747212021704530, -0.121796839926492840, -0.121846467526789060, -0.121896094822469090, -0.121945721813409350, -0.121995348499484850, -0.122044974880571980, +-0.122094600956546660, -0.122144226727285300, -0.122193852192662920, -0.122243477352555920, -0.122293102206840210, -0.122342726755392190, -0.122392350998086930, -0.122441974934800770, +-0.122491598565409680, -0.122541221889790040, -0.122590844907816910, -0.122640467619366660, -0.122690090024315680, -0.122739712122539040, -0.122789333913913110, -0.122838955398313850, +-0.122888576575617640, -0.122938197445699550, -0.122987818008435970, -0.123037438263702840, -0.123087058211376550, -0.123136677851332190, -0.123186297183446130, -0.123235916207594320, +-0.123285534923653170, -0.123335153331497730, -0.123384771431004420, -0.123434389222049160, -0.123484006704508390, -0.123533623878257160, -0.123583240743171850, -0.123632857299128460, +-0.123682473546003370, -0.123732089483671630, -0.123781705112009700, -0.123831320430893930, -0.123880935440199420, -0.123930550139802560, -0.123980164529579340, -0.124029778609406140, +-0.124079392379158060, -0.124129005838711490, -0.124178618987942410, -0.124228231826727240, -0.124277844354941030, -0.124327456572460210, -0.124377068479160760, -0.124426680074919070, +-0.124476291359610230, -0.124525902333110690, -0.124575512995296820, -0.124625123346043710, -0.124674733385227820, -0.124724343112725080, -0.124773952528411920, -0.124823561632163450, +-0.124873170423856070, -0.124922778903365760, -0.124972387070568940, -0.125021994925340720, -0.125071602467557520, -0.125121209697095310, -0.125170816613830500, -0.125220423217638240, +-0.125270029508394890, -0.125319635485976490, -0.125369241150259410, -0.125418846501118810, -0.125468451538431110, -0.125518056262072240, -0.125567660671918710, -0.125617264767845570, +-0.125666868549729280, -0.125716472017446230, -0.125766075170871570, -0.125815678009881750, -0.125865280534352700, -0.125914882744160910, -0.125964484639181470, -0.126014086219290810, +-0.126063687484364940, -0.126113288434280300, -0.126162889068911990, -0.126212489388136450, -0.126262089391829670, -0.126311689079868140, -0.126361288452126940, -0.126410887508482530, +-0.126460486248810870, -0.126510084672988470, -0.126559682780890390, -0.126609280572393120, -0.126658878047372640, -0.126708475205705410, -0.126758072047266550, -0.126807668571932510, +-0.126857264779579730, -0.126906860670083360, -0.126956456243319830, -0.127006051499165160, -0.127055646437495810, -0.127105241058186910, -0.127154835361114880, -0.127204429346155780, +-0.127254023013186060, -0.127303616362080820, -0.127353209392716550, -0.127402802104969240, -0.127452394498715400, -0.127501986573830110, -0.127551578330189850, -0.127601169767671080, +-0.127650760886148960, -0.127700351685499920, -0.127749942165600040, -0.127799532326325710, -0.127849122167552120, -0.127898711689155730, -0.127948300891012560, -0.127997889772999060, +-0.128047478334990390, -0.128097066576863040, -0.128146654498493050, -0.128196242099756830, -0.128245829380529560, -0.128295416340687750, -0.128345002980107370, -0.128394589298664930, +-0.128444175296235590, -0.128493760972695800, -0.128543346327921610, -0.128592931361789480, -0.128642516074174600, -0.128692100464953410, -0.128741684534002420, -0.128791268281196800, +-0.128840851706412990, -0.128890434809527050, -0.128940017590415460, -0.128989600048953410, -0.129039182185017340, -0.129088763998483290, -0.129138345489227810, -0.129187926657126000, +-0.129237507502054400, -0.129287088023889000, -0.129336668222506330, -0.129386248097781570, -0.129435827649591190, -0.129485406877811210, -0.129534985782318170, -0.129584564362987240, +-0.129634142619694890, -0.129683720552317170, -0.129733298160730590, -0.129782875444810320, -0.129832452404432890, -0.129882029039474740, -0.129931605349811100, -0.129981181335318440, +-0.130030756995872830, -0.130080332331350750, -0.130129907341627410, -0.130179482026579310, -0.130229056386082480, -0.130278630420013470, -0.130328204128247440, -0.130377777510660900, +-0.130427350567129920, -0.130476923297530990, -0.130526495701739330, -0.130576067779631410, -0.130625639531083780, -0.130675210955971590, -0.130724782054171400, -0.130774352825559240, +-0.130823923270011630, -0.130873493387403780, -0.130923063177612210, -0.130972632640512980, -0.131022201775982590, -0.131071770583896270, -0.131121339064130510, -0.131170907216561410, +-0.131220475041065490, -0.131270042537517920, -0.131319609705795260, -0.131369176545773570, -0.131418743057329400, -0.131468309240337890, -0.131517875094675660, -0.131567440620218690, +-0.131617005816843600, -0.131666570684425530, -0.131716135222841040, -0.131765699431966670, -0.131815263311677590, -0.131864826861850360, -0.131914390082361050, -0.131963952973086220, +-0.132013515533901060, -0.132063077764682120, -0.132112639665305480, -0.132162201235647670, -0.132211762475583940, -0.132261323384990780, -0.132310883963744320, -0.132360444211721110, +-0.132410004128796330, -0.132459563714846550, -0.132509122969748290, -0.132558681893376770, -0.132608240485608570, -0.132657798746319750, -0.132707356675386440, -0.132756914272685180, +-0.132806471538091220, -0.132856028471481040, -0.132905585072731260, -0.132955141341717040, -0.133004697278315010, -0.133054252882401220, -0.133103808153852230, -0.133153363092543280, +-0.133202917698350940, -0.133252471971151280, -0.133302025910820880, -0.133351579517235000, -0.133401132790270160, -0.133450685729802480, -0.133500238335708540, -0.133549790607863570, +-0.133599342546144110, -0.133648894150426720, -0.133698445420586680, -0.133747996356500500, -0.133797546958044360, -0.133847097225094770, -0.133896647157527000, -0.133946196755217630, +-0.133995746018042760, -0.134045294945878940, -0.134094843538601460, -0.134144391796086890, -0.134193939718211310, -0.134243487304851330, -0.134293034555882210, -0.134342581471180500, +-0.134392128050622310, -0.134441674294084270, -0.134491220201441580, -0.134540765772570870, -0.134590311007348220, -0.134639855905650250, -0.134689400467352170, -0.134738944692330610, +-0.134788488580462130, -0.134838032131621990, -0.134887575345686770, -0.134937118222532600, -0.134986660762036080, -0.135036202964072480, -0.135085744828518340, -0.135135286355249880, +-0.135184827544143630, -0.135234368395074860, -0.135283908907920160, -0.135333449082555710, -0.135382988918858080, -0.135432528416702530, -0.135482067575965650, -0.135531606396524030, +-0.135581144878252980, -0.135630683021029070, -0.135680220824728440, -0.135729758289227260, -0.135779295414402120, -0.135828832200128310, -0.135878368646282420, -0.135927904752741050, +-0.135977440519379460, -0.136026975946074300, -0.136076511032701660, -0.136126045779138200, -0.136175580185259220, -0.136225114250941250, -0.136274647976060510, -0.136324181360493570, +-0.136373714404115750, -0.136423247106803650, -0.136472779468433420, -0.136522311488881690, -0.136571843168023730, -0.136621374505736190, -0.136670905501895620, -0.136720436156377360, +-0.136769966469058010, -0.136819496439813750, -0.136869026068521190, -0.136918555355055620, -0.136968084299293660, -0.137017612901111500, -0.137067141160385740, -0.137116669076991690, +-0.137166196650805950, -0.137215723881704720, -0.137265250769564640, -0.137314777314260980, -0.137364303515670390, -0.137413829373669030, -0.137463354888133550, -0.137512880058939220, +-0.137562404885962690, -0.137611929369080180, -0.137661453508168250, -0.137710977303102280, -0.137760500753758840, -0.137810023860014590, -0.137859546621744850, -0.137909069038826240, +-0.137958591111134980, -0.138008112838547640, -0.138057634220939610, -0.138107155258187480, -0.138156675950167480, -0.138206196296756210, -0.138255716297829010, -0.138305235953262520, +-0.138354755262932950, -0.138404274226716920, -0.138453792844489780, -0.138503311116128150, -0.138552829041508670, -0.138602346620506690, -0.138651863852998850, -0.138701380738861350, +-0.138750897277970820, -0.138800413470202640, -0.138849929315433380, -0.138899444813539330, -0.138948959964397100, -0.138998474767882020, -0.139047989223870770, -0.139097503332239550, +-0.139147017092865010, -0.139196530505622470, -0.139246043570388610, -0.139295556287039630, -0.139345068655452240, -0.139394580675501700, -0.139444092347064730, -0.139493603670017510, +-0.139543114644236720, -0.139592625269597730, -0.139642135545977150, -0.139691645473251690, -0.139741155051296670, -0.139790664279988760, -0.139840173159204190, -0.139889681688819630, +-0.139939189868710400, -0.139988697698753220, -0.140038205178824320, -0.140087712308800290, -0.140137219088556590, -0.140186725517969820, -0.140236231596916230, -0.140285737325272520, +-0.140335242702914000, -0.140384747729717400, -0.140434252405558930, -0.140483756730315270, -0.140533260703861770, -0.140582764326075110, -0.140632267596831530, -0.140681770516007750, +-0.140731273083479070, -0.140780775299122250, -0.140830277162813900, -0.140879778674429440, -0.140929279833845510, -0.140978780640938380, -0.141028281095584770, -0.141077781197659980, +-0.141127280947040770, -0.141176780343603340, -0.141226279387224400, -0.141275778077779330, -0.141325276415144810, -0.141374774399197070, -0.141424272029812860, -0.141473769306867560, +-0.141523266230237780, -0.141572762799800300, -0.141622259015430490, -0.141671754877005010, -0.141721250384400140, -0.141770745537492610, -0.141820240336157750, -0.141869734780272320, +-0.141919228869712530, -0.141968722604355110, -0.142018215984075440, -0.142067709008750240, -0.142117201678255760, -0.142166693992468700, -0.142216185951264510, -0.142265677554519830, +-0.142315168802110950, -0.142364659693914600, -0.142414150229806140, -0.142463640409662310, -0.142513130233359400, -0.142562619700774080, -0.142612108811781800, -0.142661597566259210, +-0.142711085964083080, -0.142760574005128820, -0.142810061689273100, -0.142859549016392220, -0.142909035986362930, -0.142958522599060610, -0.143008008854361960, -0.143057494752143300, +-0.143106980292281360, -0.143156465474651500, -0.143205950299130500, -0.143255434765594600, -0.143304918873920580, -0.143354402623983800, -0.143403886015661040, -0.143453369048828550, +-0.143502851723363080, -0.143552334039140030, -0.143601815996036160, -0.143651297593927750, -0.143700778832691530, -0.143750259712202900, -0.143799740232338660, -0.143849220392975490, +-0.143898700193988820, -0.143948179635255410, -0.143997658716651540, -0.144047137438054000, -0.144096615799338130, -0.144146093800380760, -0.144195571441058130, -0.144245048721247020, +-0.144294525640822850, -0.144344002199662370, -0.144393478397641880, -0.144442954234638130, -0.144492429710526560, -0.144541904825183890, -0.144591379578486940, -0.144640853970311070, +-0.144690328000533080, -0.144739801669029280, -0.144789274975676400, -0.144838747920349900, -0.144888220502926520, -0.144937692723282580, -0.144987164581294880, -0.145036636076838810, +-0.145086107209791150, -0.145135577980028210, -0.145185048387426800, -0.145234518431862300, -0.145283988113211500, -0.145333457431350730, -0.145382926386156800, -0.145432394977505070, +-0.145481863205272370, -0.145531331069335000, -0.145580798569569740, -0.145630265705852050, -0.145679732478058710, -0.145729198886066470, -0.145778664929750780, -0.145828130608988440, +-0.145877595923655760, -0.145927060873629550, -0.145976525458785260, -0.146025989678999630, -0.146075453534149020, -0.146124917024110230, -0.146174380148758720, -0.146223842907971250, +-0.146273305301624160, -0.146322767329594230, -0.146372228991756980, -0.146421690287989150, -0.146471151218167530, -0.146520611782167580, -0.146570071979866130, -0.146619531811139460, +-0.146668991275864000, -0.146718450373916480, -0.146767909105172400, -0.146817367469508550, -0.146866825466801710, -0.146916283096927360, -0.146965740359762310, -0.147015197255182940, +-0.147064653783065990, -0.147114109943286970, -0.147163565735722670, -0.147213021160249450, -0.147262476216744130, -0.147311930905082180, -0.147361385225140390, -0.147410839176795150, +-0.147460292759923230, -0.147509745974400170, -0.147559198820102740, -0.147608651296907730, -0.147658103404690650, -0.147707555143328340, -0.147757006512697130, -0.147806457512673850, +-0.147855908143133980, -0.147905358403954330, -0.147954808295011290, -0.148004257816181680, -0.148053706967340960, -0.148103155748365990, -0.148152604159133140, -0.148202052199519210, +-0.148251499869399730, -0.148300947168651470, -0.148350394097150840, -0.148399840654774680, -0.148449286841398490, -0.148498732656899060, -0.148548178101152810, -0.148597623174036550, +-0.148647067875425810, -0.148696512205197360, -0.148745956163228110, -0.148795399749393510, -0.148844842963570420, -0.148894285805635210, -0.148943728275464730, -0.148993170372934500, +-0.149042612097921330, -0.149092053450301630, -0.149141494429952250, -0.149190935036748680, -0.149240375270567800, -0.149289815131285950, -0.149339254618780000, -0.149388693732925510, +-0.149438132473599240, -0.149487570840678120, -0.149537008834037620, -0.149586446453554590, -0.149635883699105440, -0.149685320570566580, -0.149734757067814860, -0.149784193190725830, +-0.149833628939176290, -0.149883064313043130, -0.149932499312201870, -0.149981933936529370, -0.150031368185902010, -0.150080802060196690, -0.150130235559288920, -0.150179668683055570, +-0.150229101431373020, -0.150278533804118180, -0.150327965801166560, -0.150377397422395030, -0.150426828667680010, -0.150476259536898360, -0.150525690029925610, -0.150575120146638620, +-0.150624549886914290, -0.150673979250628140, -0.150723408237657060, -0.150772836847877430, -0.150822265081166170, -0.150871692937398800, -0.150921120416452200, -0.150970547518202800, +-0.151019974242527470, -0.151069400589301740, -0.151118826558402530, -0.151168252149706280, -0.151217677363089800, -0.151267102198428700, -0.151316526655599860, -0.151365950734479670, +-0.151415374434945070, -0.151464797756871580, -0.151514220700136090, -0.151563643264615080, -0.151613065450185380, -0.151662487256722570, -0.151711908684103560, -0.151761329732205210, +-0.151810750400903080, -0.151860170690074100, -0.151909590599594690, -0.151959010129341710, -0.152008429279190810, -0.152057848049018810, -0.152107266438702200, -0.152156684448117860, +-0.152206102077141360, -0.152255519325649620, -0.152304936193519090, -0.152354352680626640, -0.152403768786847860, -0.152453184512059690, -0.152502599856138980, -0.152552014818961330, +-0.152601429400403640, -0.152650843600342370, -0.152700257418654450, -0.152749670855215430, -0.152799083909902270, -0.152848496582591360, -0.152897908873159650, -0.152947320781482740, +-0.152996732307437540, -0.153046143450900480, -0.153095554211748530, -0.153144964589857240, -0.153194374585103540, -0.153243784197363900, -0.153293193426515260, -0.153342602272433180, +-0.153392010734994590, -0.153441418814075970, -0.153490826509554260, -0.153540233821305020, -0.153589640749205230, -0.153639047293131740, -0.153688453452960230, -0.153737859228567560, +-0.153787264619830250, -0.153836669626625210, -0.153886074248828050, -0.153935478486315720, -0.153984882338964710, -0.154034285806651900, -0.154083688889252970, -0.154133091586644790, +-0.154182493898703890, -0.154231895825307190, -0.154281297366330340, -0.154330698521650210, -0.154380099291143350, -0.154429499674686670, -0.154478899672155810, -0.154528299283427710, +-0.154577698508378850, -0.154627097346886180, -0.154676495798825340, -0.154725893864073260, -0.154775291542506880, -0.154824688834001830, -0.154874085738435060, -0.154923482255683060, +-0.154972878385622820, -0.155022274128129940, -0.155071669483081350, -0.155121064450353620, -0.155170459029823630, -0.155219853221367080, -0.155269247024860890, -0.155318640440181590, +-0.155368033467206120, -0.155417426105810140, -0.155466818355870590, -0.155516210217264420, -0.155565601689867300, -0.155614992773556170, -0.155664383468207550, -0.155713773773698410, +-0.155763163689904420, -0.155812553216702510, -0.155861942353969190, -0.155911331101581480, -0.155960719459415000, -0.156010107427346720, -0.156059495005253180, -0.156108882193011330, +-0.156158268990496840, -0.156207655397586690, -0.156257041414157390, -0.156306427040085900, -0.156355812275247950, -0.156405197119520440, -0.156454581572779940, -0.156503965634903430, +-0.156553349305766560, -0.156602732585246350, -0.156652115473219690, -0.156701497969562340, -0.156750880074151250, -0.156800261786862930, -0.156849643107574430, -0.156899024036161380, +-0.156948404572500750, -0.156997784716469110, -0.157047164467943450, -0.157096543826799440, -0.157145922792914060, -0.157195301366163890, -0.157244679546425900, -0.157294057333575790, +-0.157343434727490520, -0.157392811728046670, -0.157442188335121220, -0.157491564548589870, -0.157540940368329580, -0.157590315794216980, -0.157639690826129000, -0.157689065463941370, +-0.157738439707531070, -0.157787813556775100, -0.157837187011549170, -0.157886560071730270, -0.157935932737194970, -0.157985305007820290, -0.158034676883481880, -0.158084048364056820, +-0.158133419449421610, -0.158182790139453300, -0.158232160434027550, -0.158281530333021420, -0.158330899836311460, -0.158380268943774720, -0.158429637655286840, -0.158479005970724840, +-0.158528373889965800, -0.158577741412885390, -0.158627108539360600, -0.158676475269268060, -0.158725841602484760, -0.158775207538886440, -0.158824573078350070, -0.158873938220752270, +-0.158923302965970070, -0.158972667313879180, -0.159022031264356630, -0.159071394817279000, -0.159120757972523310, -0.159170120729965280, -0.159219483089481970, -0.159268845050949930, +-0.159318206614246230, -0.159367567779246570, -0.159416928545827980, -0.159466288913867080, -0.159515648883240910, -0.159565008453825150, -0.159614367625496880, -0.159663726398133140, +-0.159713084771609640, -0.159762442745803420, -0.159811800320591110, -0.159861157495849730, -0.159910514271455030, -0.159959870647284040, -0.160009226623213350, -0.160058582199120060, +-0.160107937374879860, -0.160157292150369810, -0.160206646525466540, -0.160256000500047100, -0.160305354073987190, -0.160354707247163940, -0.160404060019454310, -0.160453412390734130, +-0.160502764360880400, -0.160552115929769780, -0.160601467097278850, -0.160650817863284700, -0.160700168227663060, -0.160749518190291010, -0.160798867751045600, -0.160848216909802580, +-0.160897565666439010, -0.160946914020831560, -0.160996261972857210, -0.161045609522391800, -0.161094956669312370, -0.161144303413495530, -0.161193649754818370, -0.161242995693156670, +-0.161292341228387450, -0.161341686360387400, -0.161391031089033580, -0.161440375414201730, -0.161489719335768940, -0.161539062853612280, -0.161588405967607540, -0.161637748677631780, +-0.161687090983561650, -0.161736432885274230, -0.161785774382645300, -0.161835115475551930, -0.161884456163870760, -0.161933796447478880, -0.161983136326252110, -0.162032475800067470, +-0.162081814868801630, -0.162131153532331710, -0.162180491790533450, -0.162229829643284000, -0.162279167090459950, -0.162328504131938420, -0.162377840767595180, -0.162427176997307350, +-0.162476512820951570, -0.162525848238404960, -0.162575183249543290, -0.162624517854243640, -0.162673852052383160, -0.162723185843837600, -0.162772519228484100, -0.162821852206199270, +-0.162871184776860270, -0.162920516940342850, -0.162969848696524140, -0.163019180045280820, -0.163068510986489970, -0.163117841520027420, -0.163167171645770270, -0.163216501363595200, +-0.163265830673379300, -0.163315159574998370, -0.163364488068329570, -0.163413816153249960, -0.163463143829635390, -0.163512471097362940, -0.163561797956309350, -0.163611124406351230, +-0.163660450447365740, -0.163709776079228710, -0.163759101301817230, -0.163808426115008430, -0.163857750518678120, -0.163907074512703450, -0.163956398096961080, -0.164005721271328150, +-0.164055044035680500, -0.164104366389895230, -0.164153688333849020, -0.164203009867419060, -0.164252330990481120, -0.164301651702912360, -0.164350972004589480, -0.164400291895389600, +-0.164449611375188540, -0.164498930443863460, -0.164548249101291480, -0.164597567347348460, -0.164646885181911510, -0.164696202604857370, -0.164745519616063120, -0.164794836215404670, +-0.164844152402759130, -0.164893468178003180, -0.164942783541014020, -0.164992098491667460, -0.165041413029840630, -0.165090727155410290, -0.165140040868253570, -0.165189354168246320, +-0.165238667055265660, -0.165287979529188330, -0.165337291589891520, -0.165386603237251020, -0.165435914471144030, -0.165485225291447240, -0.165534535698037830, -0.165583845690791630, +-0.165633155269585830, -0.165682464434297570, -0.165731773184802730, -0.165781081520978420, -0.165830389442701450, -0.165879696949848910, -0.165929004042296710, -0.165978310719922000, +-0.166027616982601520, -0.166076922830212410, -0.166126228262630570, -0.166175533279733170, -0.166224837881396910, -0.166274142067499020, -0.166323445837915310, -0.166372749192523010, +-0.166422052131199260, -0.166471354653819960, -0.166520656760262260, -0.166569958450402900, -0.166619259724119120, -0.166668560581286730, -0.166717861021782930, -0.166767161045484500, +-0.166816460652268600, -0.166865759842011100, -0.166915058614589190, -0.166964356969879660, -0.167013654907759660, -0.167062952428105090, -0.167112249530793150, -0.167161546215700560, +-0.167210842482704570, -0.167260138331681020, -0.167309433762507120, -0.167358728775059670, -0.167408023369215790, -0.167457317544851440, -0.167506611301843800, -0.167555904640070060, +-0.167605197559406120, -0.167654490059729180, -0.167703782140916020, -0.167753073802843850, -0.167802365045388540, -0.167851655868427350, -0.167900946271836990, -0.167950236255494710, +-0.167999525819276410, -0.168048814963059290, -0.168098103686720120, -0.168147391990136150, -0.168196679873183240, -0.168245967335738660, -0.168295254377679140, -0.168344540998881910, +-0.168393827199222910, -0.168443112978579330, -0.168492398336828000, -0.168541683273846080, -0.168590967789509520, -0.168640251883695550, -0.168689535556281380, -0.168738818807142920, +-0.168788101636157430, -0.168837384043201700, -0.168886666028152920, -0.168935947590887060, -0.168985228731281300, -0.169034509449212500, -0.169083789744557840, -0.169133069617193290, +-0.169182349066996060, -0.169231628093842960, -0.169280906697611230, -0.169330184878176780, -0.169379462635416870, -0.169428739969208740, -0.169478016879428340, -0.169527293365952870, +-0.169576569428659200, -0.169625845067424510, -0.169675120282124810, -0.169724395072637290, -0.169773669438838760, -0.169822943380606520, -0.169872216897816480, -0.169921489990345900, +-0.169970762658071570, -0.170020034900870810, -0.170069306718619500, -0.170118578111194930, -0.170167849078473900, -0.170217119620333700, -0.170266389736650260, -0.170315659427300870, +-0.170364928692162300, -0.170414197531111870, -0.170463465944025480, -0.170512733930780450, -0.170562001491254000, -0.170611268625322140, -0.170660535332862070, -0.170709801613750680, +-0.170759067467865230, -0.170808332895081680, -0.170857597895277270, -0.170906862468328900, -0.170956126614113770, -0.171005390332507920, -0.171054653623388590, -0.171103916486632620, +-0.171153178922117290, -0.171202440929718590, -0.171251702509313790, -0.171300963660779710, -0.171350224383993670, -0.171399484678831650, -0.171448744545170890, -0.171498003982888280, +-0.171547262991861100, -0.171596521571965310, -0.171645779723078230, -0.171695037445077160, -0.171744294737838030, -0.171793551601238160, -0.171842808035154420, -0.171892064039464110, +-0.171941319614043190, -0.171990574758768970, -0.172039829473518310, -0.172089083758168530, -0.172138337612595590, -0.172187591036676800, -0.172236844030289050, -0.172286096593309620, +-0.172335348725614510, -0.172384600427081040, -0.172433851697586490, -0.172483102537006850, -0.172532352945219490, -0.172581602922101260, -0.172630852467529430, -0.172680101581380030, +-0.172729350263530400, -0.172778598513857380, -0.172827846332238300, -0.172877093718549170, -0.172926340672667290, -0.172975587194469590, -0.173024833283833330, -0.173074078940634590, +-0.173123324164750620, -0.173172568956058340, -0.173221813314435090, -0.173271057239756860, -0.173320300731900970, -0.173369543790744350, -0.173418786416164320, -0.173468028608036840, +-0.173517270366239320, -0.173566511690649070, -0.173615752581142090, -0.173664993037595750, -0.173714233059886900, -0.173763472647892910, -0.173812711801489800, -0.173861950520554920, +-0.173911188804965170, -0.173960426654597880, -0.174009664069329080, -0.174058901049036100, -0.174108137593595890, -0.174157373702885780, -0.174206609376781780, -0.174255844615161280, +-0.174305079417901160, -0.174354313784878760, -0.174403547715970160, -0.174452781211052680, -0.174502014270003250, -0.174551246892699240, -0.174600479079016660, -0.174649710828832880, +-0.174698942142025250, -0.174748173018469840, -0.174797403458043980, -0.174846633460624650, -0.174895863026089140, -0.174945092154313560, -0.174994320845175220, -0.175043549098551100, +-0.175092776914318540, -0.175142004292353600, -0.175191231232533630, -0.175240457734735620, -0.175289683798836890, -0.175338909424713500, -0.175388134612242840, -0.175437359361302280, +-0.175486583671767890, -0.175535807543517050, -0.175585030976426660, -0.175634253970374160, -0.175683476525235580, -0.175732698640888310, -0.175781920317209290, -0.175831141554075920, +-0.175880362351364230, -0.175929582708951650, -0.175978802626715110, -0.176028022104532000, -0.176077241142278410, -0.176126459739831710, -0.176175677897068870, -0.176224895613867260, +-0.176274112890102970, -0.176323329725653400, -0.176372546120395520, -0.176421762074206710, -0.176470977586963030, -0.176520192658541940, -0.176569407288820780, -0.176618621477675680, +-0.176667835224984030, -0.176717048530622780, -0.176766261394469350, -0.176815473816399840, -0.176864685796291640, -0.176913897334021710, -0.176963108429467500, -0.177012319082505060, +-0.177061529293011830, -0.177110739060864770, -0.177159948385941320, -0.177209157268117530, -0.177258365707270880, -0.177307573703278740, -0.177356781256017230, -0.177405988365363750, +-0.177455195031195310, -0.177504401253388870, -0.177553607031821880, -0.177602812366370460, -0.177652017256911960, -0.177701221703323890, -0.177750425705482330, -0.177799629263264670, +-0.177848832376547970, -0.177898035045209620, -0.177947237269125730, -0.177996439048173780, -0.178045640382230700, -0.178094841271173950, -0.178144041714879690, -0.178193241713225310, +-0.178242441266087820, -0.178291640373344690, -0.178340839034872000, -0.178390037250547220, -0.178439235020247780, -0.178488432343849810, -0.178537629221230760, -0.178586825652267630, +-0.178636021636837890, -0.178685217174817670, -0.178734412266084390, -0.178783606910515090, -0.178832801107987190, -0.178881994858376860, -0.178931188161561530, -0.178980381017418260, +-0.179029573425824460, -0.179078765386656290, -0.179127956899791190, -0.179177147965106230, -0.179226338582478800, -0.179275528751785120, -0.179324718472902600, -0.179373907745708300, +-0.179423096570079650, -0.179472284945892820, -0.179521472873025280, -0.179570660351354520, -0.179619847380756650, -0.179669033961109170, -0.179718220092289080, -0.179767405774173910, +-0.179816591006639770, -0.179865775789564140, -0.179914960122824100, -0.179964144006297090, -0.180013327439859290, -0.180062510423388140, -0.180111692956760740, -0.180160875039854530, +-0.180210056672545720, -0.180259237854711730, -0.180308418586230120, -0.180357598866977000, -0.180406778696829890, -0.180455958075665860, -0.180505137003362350, -0.180554315479795560, +-0.180603493504842980, -0.180652671078381650, -0.180701848200289120, -0.180751024870441510, -0.180800201088716330, -0.180849376854990640, -0.180898552169141970, -0.180947727031046470, +-0.180996901440581640, -0.181046075397624600, -0.181095248902052780, -0.181144421953742390, -0.181193594552570950, -0.181242766698415550, -0.181291938391153620, -0.181341109630661440, +-0.181390280416816490, -0.181439450749496270, -0.181488620628576990, -0.181537790053936170, -0.181586959025450860, -0.181636127542998570, -0.181685295606455550, -0.181734463215699280, +-0.181783630370606850, -0.181832797071055790, -0.181881963316922300, -0.181931129108083900, -0.181980294444417680, -0.182029459325801170, -0.182078623752110540, -0.182127787723223380, +-0.182176951239016750, -0.182226114299368160, -0.182275276904153880, -0.182324439053251380, -0.182373600746537800, -0.182422761983890620, -0.182471922765186150, -0.182521083090301850, +-0.182570242959115250, -0.182619402371502650, -0.182668561327341520, -0.182717719826509000, -0.182766877868882600, -0.182816035454338580, -0.182865192582754470, -0.182914349254007370, +-0.182963505467974850, -0.183012661224533140, -0.183061816523559740, -0.183110971364931820, -0.183160125748526910, -0.183209279674221260, -0.183258433141892390, -0.183307586151417870, +-0.183356738702673970, -0.183405890795538210, -0.183455042429887720, -0.183504193605600080, -0.183553344322551490, -0.183602494580619560, -0.183651644379681400, -0.183700793719614540, +-0.183749942600295290, -0.183799091021601160, -0.183848238983409300, -0.183897386485597310, -0.183946533528041380, -0.183995680110619150, -0.184044826233207700, -0.184093971895684600, +-0.184143117097926160, -0.184192261839809940, -0.184241406121213040, -0.184290549942013080, -0.184339693302086300, -0.184388836201310270, -0.184437978639562600, -0.184487120616719570, +-0.184536262132658700, -0.184585403187257190, -0.184634543780392620, -0.184683683911941260, -0.184732823581780670, -0.184781962789788030, -0.184831101535840920, -0.184880239819815610, +-0.184929377641589700, -0.184978515001040340, -0.185027651898045150, -0.185076788332480400, -0.185125924304223670, -0.185175059813152100, -0.185224194859143350, -0.185273329442073670, +-0.185322463561820670, -0.185371597218261520, -0.185420730411273800, -0.185469863140733800, -0.185518995406519170, -0.185568127208507460, -0.185617258546575010, -0.185666389420599430, +-0.185715519830457860, -0.185764649776027940, -0.185813779257185950, -0.185862908273809500, -0.185912036825775780, -0.185961164912962440, -0.186010292535245730, -0.186059419692503280, +-0.186108546384612270, -0.186157672611450360, -0.186206798372893810, -0.186255923668820270, -0.186305048499107370, -0.186354172863631400, -0.186403296762269990, -0.186452420194900350, +-0.186501543161400110, -0.186550665661645550, -0.186599787695514360, -0.186648909262883660, -0.186698030363631140, -0.186747150997633120, -0.186796271164767210, -0.186845390864910620, +-0.186894510097941000, -0.186943628863734670, -0.186992747162169240, -0.187041864993121980, -0.187090982356470450, -0.187140099252091070, -0.187189215679861410, -0.187238331639658750, +-0.187287447131360670, -0.187336562154843540, -0.187385676709984990, -0.187434790796662700, -0.187483904414752990, -0.187533017564133540, -0.187582130244681510, -0.187631242456274630, +-0.187680354198789170, -0.187729465472102870, -0.187778576276092870, -0.187827686610636870, -0.187876796475611230, -0.187925905870893580, -0.187975014796361200, -0.188024123251891690, +-0.188073231237361440, -0.188122338752648110, -0.188171445797628960, -0.188220552372181600, -0.188269658476182430, -0.188318764109509120, -0.188367869272038880, -0.188416973963649430, +-0.188466078184217100, -0.188515181933619570, -0.188564285211734520, -0.188613388018438330, -0.188662490353608660, -0.188711592217122780, -0.188760693608858330, -0.188809794528691730, +-0.188858894976500660, -0.188907994952162320, -0.188957094455554450, -0.189006193486553400, -0.189055292045036850, -0.189104390130882090, -0.189153487743966790, -0.189202584884167330, +-0.189251681551361410, -0.189300777745426720, -0.189349873466239630, -0.189398968713677900, -0.189448063487618720, -0.189497157787939820, -0.189546251614517600, -0.189595344967229740, +-0.189644437845953530, -0.189693530250566650, -0.189742622180945510, -0.189791713636967810, -0.189840804618510830, -0.189889895125452260, -0.189938985157668550, -0.189988074715037340, +-0.190037163797435990, -0.190086252404742110, -0.190135340536832200, -0.190184428193583940, -0.190233515374874600, -0.190282602080581900, -0.190331688310582280, -0.190380774064753430, +-0.190429859342973070, -0.190478944145117620, -0.190528028471064840, -0.190577112320691970, -0.190626195693876760, -0.190675278590495630, -0.190724361010426280, -0.190773442953546060, +-0.190822524419732630, -0.190871605408862500, -0.190920685920813320, -0.190969765955462440, -0.191018845512687580, -0.191067924592365160, -0.191117003194372940, -0.191166081318588640, +-0.191215158964888720, -0.191264236133150880, -0.191313312823252450, -0.191362389035070750, -0.191411464768483530, -0.191460540023367180, -0.191509614799599490, -0.191558689097058200, +-0.191607762915619760, -0.191656836255161890, -0.191705909115561960, -0.191754981496697670, -0.191804053398445500, -0.191853124820683200, -0.191902195763288070, -0.191951266226137920, +-0.192000336209109140, -0.192049405712079540, -0.192098474734926420, -0.192147543277527530, -0.192196611339759350, -0.192245678921499660, -0.192294746022626200, -0.192343812643015450, +-0.192392878782545160, -0.192441944441092670, -0.192491009618535740, -0.192540074314750870, -0.192589138529615820, -0.192638202263007900, -0.192687265514804920, -0.192736328284883350, +-0.192785390573120940, -0.192834452379395090, -0.192883513703583500, -0.192932574545562730, -0.192981634905210500, -0.193030694782404200, -0.193079754177021580, -0.193128813088939140, +-0.193177871518034670, -0.193226929464185540, -0.193275986927269490, -0.193325043907163070, -0.193374100403744030, -0.193423156416890170, -0.193472211946477980, -0.193521266992385250, +-0.193570321554489390, -0.193619375632668120, -0.193668429226798000, -0.193717482336756790, -0.193766534962421880, -0.193815587103671080, -0.193864638760380880, -0.193913689932429080, +-0.193962740619693040, -0.194011790822050580, -0.194060840539378220, -0.194109889771553770, -0.194158938518455000, -0.194207986779958490, -0.194257034555941980, -0.194306081846282900, +-0.194355128650858610, -0.194404174969546930, -0.194453220802224380, -0.194502266148768780, -0.194551311009057950, -0.194600355382968410, -0.194649399270377970, -0.194698442671164040, +-0.194747485585204440, -0.194796528012375710, -0.194845569952555640, -0.194894611405621640, -0.194943652371451560, -0.194992692849921910, -0.195041732840910500, -0.195090772344294780, +-0.195139811359952590, -0.195188849887760390, -0.195237887927596110, -0.195286925479337510, -0.195335962542861170, -0.195384999118044940, -0.195434035204766210, -0.195483070802902810, +-0.195532105912331310, -0.195581140532929550, -0.195630174664574910, -0.195679208307145300, -0.195728241460517230, -0.195777274124568550, -0.195826306299176660, -0.195875337984219470, +-0.195924369179573510, -0.195973399885116610, -0.196022430100726200, -0.196071459826280160, -0.196120489061655050, -0.196169517806728700, -0.196218546061378560, -0.196267573825482490, +-0.196316601098917050, -0.196365627881560120, -0.196414654173289540, -0.196463679973981900, -0.196512705283515030, -0.196561730101766420, -0.196610754428613920, -0.196659778263934100, +-0.196708801607604840, -0.196757824459503570, -0.196806846819508160, -0.196855868687495220, -0.196904890063342610, -0.196953910946927770, -0.197002931338128570, -0.197051951236821620, +-0.197100970642884790, -0.197149989556195980, -0.197199007976631730, -0.197248025904070010, -0.197297043338388180, -0.197346060279464190, -0.197395076727174630, -0.197444092681397340, +-0.197493108142009850, -0.197542123108890020, -0.197591137581914460, -0.197640151560961040, -0.197689165045907250, -0.197738178036630960, -0.197787190533008810, -0.197836202534918680, +-0.197885214042238050, -0.197934225054844810, -0.197983235572615570, -0.198032245595428260, -0.198081255123160330, -0.198130264155689680, -0.198179272692892950, -0.198228280734648040, +-0.198277288280832850, -0.198326295331324010, -0.198375301885999440, -0.198424307944736590, -0.198473313507413430, -0.198522318573906560, -0.198571323144093870, -0.198620327217852890, +-0.198669330795061520, -0.198718333875596370, -0.198767336459335420, -0.198816338546156100, -0.198865340135936370, -0.198914341228552870, -0.198963341823883500, -0.199012341921805810, +-0.199061341522197680, -0.199110340624935740, -0.199159339229897980, -0.199208337336961860, -0.199257334946005310, -0.199306332056905010, -0.199355328669538890, -0.199404324783784860, +-0.199453320399519600, -0.199502315516621040, -0.199551310134966690, -0.199600304254434480, -0.199649297874901100, -0.199698290996244480, -0.199747283618342100, -0.199796275741071980, +-0.199845267364310710, -0.199894258487936290, -0.199943249111826200, -0.199992239235858430, -0.200041228859909660, -0.200090217983857790, -0.200139206607580810, -0.200188194730955370, +-0.200237182353859460, -0.200286169476170590, -0.200335156097766730, -0.200384142218524550, -0.200433127838322010, -0.200482112957036630, -0.200531097574546430, -0.200580081690728050, +-0.200629065305459460, -0.200678048418618190, -0.200727031030082270, -0.200776013139728320, -0.200824994747434320, -0.200873975853077870, -0.200922956456536880, -0.200971936557688080, +-0.201020916156409430, -0.201069895252578510, -0.201118873846073270, -0.201167851936770420, -0.201216829524547920, -0.201265806609283810, -0.201314783190854720, -0.201363759269138690, +-0.201412734844013260, -0.201461709915356420, -0.201510684483044880, -0.201559658546956620, -0.201608632106969220, -0.201657605162960690, -0.201706577714807680, -0.201755549762388240, +-0.201804521305579940, -0.201853492344260750, -0.201902462878307400, -0.201951432907597900, -0.202000402432009810, -0.202049371451421160, -0.202098339965708640, -0.202147307974750280, +-0.202196275478423640, -0.202245242476606750, -0.202294208969176300, -0.202343174956010340, -0.202392140436986890, -0.202441105411982650, -0.202490069880875640, -0.202539033843543460, +-0.202587997299864130, -0.202636960249714370, -0.202685922692972200, -0.202734884629515220, -0.202783846059221480, -0.202832806981967710, -0.202881767397631890, -0.202930727306091660, +-0.202979686707225050, -0.203028645600908770, -0.203077603987020900, -0.203126561865439450, -0.203175519236041160, -0.203224476098704060, -0.203273432453305790, -0.203322388299724350, +-0.203371343637836520, -0.203420298467520330, -0.203469252788653380, -0.203518206601113750, -0.203567159904778170, -0.203616112699524680, -0.203665064985230900, -0.203714016761774920, +-0.203762968029033460, -0.203811918786884570, -0.203860869035205870, -0.203909818773875460, -0.203958768002770050, -0.204007716721767710, -0.204056664930746090, -0.204105612629583240, +-0.204154559818155920, -0.204203506496342220, -0.204252452664020170, -0.204301398321066560, -0.204350343467359450, -0.204399288102776490, -0.204448232227195740, -0.204497175840493980, +-0.204546118942549260, -0.204595061533239280, -0.204644003612442060, -0.204692945180034390, -0.204741886235894370, -0.204790826779899630, -0.204839766811928250, -0.204888706331857020, +-0.204937645339564020, -0.204986583834927350, -0.205035521817823780, -0.205084459288131400, -0.205133396245727910, -0.205182332690490880, -0.205231268622298480, -0.205280204041027480, +-0.205329138946555970, -0.205378073338762010, -0.205427007217522470, -0.205475940582715400, -0.205524873434218490, -0.205573805771909810, -0.205622737595666180, -0.205671668905365730, +-0.205720599700886100, -0.205769529982105400, -0.205818459748900450, -0.205867389001149340, -0.205916317738729760, -0.205965245961519800, -0.206014173669396310, -0.206063100862237390, +-0.206112027539921170, -0.206160953702324400, -0.206209879349325280, -0.206258804480801440, -0.206307729096631060, -0.206356653196690890, -0.206405576780859110, -0.206454499849013370, +-0.206503422401031810, -0.206552344436791270, -0.206601265956169870, -0.206650186959045300, -0.206699107445295710, -0.206748027414797920, -0.206796946867430030, -0.206845865803069790, +-0.206894784221595320, -0.206943702122883460, -0.206992619506812360, -0.207041536373259670, -0.207090452722103610, -0.207139368553220990, -0.207188283866489910, -0.207237198661788580, +-0.207286112938993820, -0.207335026697983760, -0.207383939938636160, -0.207432852660829110, -0.207481764864439530, -0.207530676549345510, -0.207579587715424810, -0.207628498362555590, +-0.207677408490614670, -0.207726318099480220, -0.207775227189029990, -0.207824135759142130, -0.207873043809693490, -0.207921951340562240, -0.207970858351626570, -0.208019764842763300, +-0.208068670813850610, -0.208117576264766240, -0.208166481195387940, -0.208215385605593880, -0.208264289495260910, -0.208313192864267220, -0.208362095712490980, -0.208410998039809060, +-0.208459899846099670, -0.208508801131240510, -0.208557701895109780, -0.208606602137584360, -0.208655501858542450, -0.208704401057861750, -0.208753299735420530, -0.208802197891095610, +-0.208851095524765190, -0.208899992636307010, -0.208948889225599320, -0.208997785292518940, -0.209046680836944110, -0.209095575858753020, -0.209144470357822550, -0.209193364334030910, +-0.209242257787255860, -0.209291150717375580, -0.209340043124267020, -0.209388935007808340, -0.209437826367877310, -0.209486717204352160, -0.209535607517109780, -0.209584497306028380, +-0.209633386570985740, -0.209682275311860070, -0.209731163528528270, -0.209780051220868570, -0.209828938388758740, -0.209877825032077000, -0.209926711150700250, -0.209975596744506720, +-0.210024481813374210, -0.210073366357180940, -0.210122250375803820, -0.210171133869121060, -0.210220016837010890, -0.210268899279350270, -0.210317781196017380, -0.210366662586890050, +-0.210415543451846490, -0.210464423790763630, -0.210513303603519750, -0.210562182889992570, -0.210611061650060380, -0.210659939883600100, -0.210708817590489980, -0.210757694770607800, +-0.210806571423831830, -0.210855447550038990, -0.210904323149107540, -0.210953198220915710, -0.211002072765340440, -0.211050946782260000, -0.211099820271552190, -0.211148693233095260, +-0.211197565666766170, -0.211246437572443190, -0.211295308950004090, -0.211344179799327150, -0.211393050120289330, -0.211441919912768870, -0.211490789176643630, -0.211539657911791860, +-0.211588526118090480, -0.211637393795417790, -0.211686260943651640, -0.211735127562670270, -0.211783993652350620, -0.211832859212571000, -0.211881724243209250, -0.211930588744143610, +-0.211979452715251070, -0.212028316156409880, -0.212077179067498340, -0.212126041448393420, -0.212174903298973400, -0.212223764619116130, -0.212272625408699870, -0.212321485667601620, +-0.212370345395699660, -0.212419204592871810, -0.212468063258996390, -0.212516921393950400, -0.212565778997612090, -0.212614636069859340, -0.212663492610570440, -0.212712348619622380, +-0.212761204096893420, -0.212810059042261470, -0.212858913455604790, -0.212907767336800420, -0.212956620685726600, -0.213005473502261260, -0.213054325786282640, -0.213103177537667800, +-0.213152028756294990, -0.213200879442042580, -0.213249729594787500, -0.213298579214408120, -0.213347428300782270, -0.213396276853788290, -0.213445124873303190, -0.213493972359205280, +-0.213542819311372420, -0.213591665729682970, -0.213640511614013930, -0.213689356964243570, -0.213738201780249850, -0.213787046061911040, -0.213835889809104200, -0.213884733021707630, +-0.213933575699599670, -0.213982417842657310, -0.214031259450758930, -0.214080100523782400, -0.214128941061606040, -0.214177781064106900, -0.214226620531163310, -0.214275459462653170, +-0.214324297858454800, -0.214373135718445270, -0.214421973042502880, -0.214470809830505590, -0.214519646082331680, -0.214568481797858230, -0.214617316976963600, -0.214666151619525620, +-0.214714985725422750, -0.214763819294531950, -0.214812652326731630, -0.214861484821899650, -0.214910316779914400, -0.214959148200652930, -0.215007979083993610, -0.215056809429814750, +-0.215105639237993420, -0.215154468508408030, -0.215203297240936430, -0.215252125435457050, -0.215300953091846910, -0.215349780209984380, -0.215398606789747430, -0.215447432831014360, +-0.215496258333662290, -0.215545083297569580, -0.215593907722614160, -0.215642731608674390, -0.215691554955627360, -0.215740377763351480, -0.215789200031724610, -0.215838021760625190, +-0.215886842949930300, -0.215935663599518270, -0.215984483709267090, -0.216033303279055150, -0.216082122308759510, -0.216130940798258560, -0.216179758747430700, -0.216228576156153010, +-0.216277393024303880, -0.216326209351761250, -0.216375025138403540, -0.216423840384107840, -0.216472655088752520, -0.216521469252215580, -0.216570282874375410, -0.216619095955109090, +-0.216667908494295010, -0.216716720491811180, -0.216765531947535980, -0.216814342861346520, -0.216863153233121190, -0.216911963062738440, -0.216960772350075330, -0.217009581095010280, +-0.217058389297421270, -0.217107196957186750, -0.217156004074183780, -0.217204810648290810, -0.217253616679385810, -0.217302422167347210, -0.217351227112052130, -0.217400031513378940, +-0.217448835371205710, -0.217497638685410830, -0.217546441455871400, -0.217595243682465860, -0.217644045365072230, -0.217692846503568900, -0.217741647097833060, -0.217790447147743070, +-0.217839246653176940, -0.217888045614013180, -0.217936844030128830, -0.217985641901402400, -0.218034439227712290, -0.218083236008935640, -0.218132032244950900, -0.218180827935636090, +-0.218229623080869630, -0.218278417680528690, -0.218327211734491710, -0.218376005242636670, -0.218424798204842090, -0.218473590620985060, -0.218522382490944050, -0.218571173814597090, +-0.218619964591822650, -0.218668754822497840, -0.218717544506501160, -0.218766333643711040, -0.218815122234004650, -0.218863910277260460, -0.218912697773356480, -0.218961484722170780, +-0.219010271123581790, -0.219059056977466690, -0.219107842283703950, -0.219156627042172040, -0.219205411252748120, -0.219254194915310670, -0.219302978029737750, -0.219351760595907800, +-0.219400542613698010, -0.219449324082986900, -0.219498105003652440, -0.219546885375573180, -0.219595665198626250, -0.219644444472690160, -0.219693223197642980, -0.219742001373363170, +-0.219790778999727900, -0.219839556076615710, -0.219888332603905030, -0.219937108581473110, -0.219985884009198410, -0.220034658886959030, -0.220083433214633390, -0.220132206992098760, +-0.220180980219233600, -0.220229752895916010, -0.220278525022024470, -0.220327296597436160, -0.220376067622029630, -0.220424838095682920, -0.220473608018274540, -0.220522377389681720, +-0.220571146209782960, -0.220619914478456330, -0.220668682195580330, -0.220717449361032210, -0.220766215974690480, -0.220814982036433180, -0.220863747546138880, -0.220912512503684770, +-0.220961276908949370, -0.221010040761811240, -0.221058804062147530, -0.221107566809836840, -0.221156329004757230, -0.221205090646787230, -0.221253851735804090, -0.221302612271686290, +-0.221351372254311980, -0.221400131683559650, -0.221448890559306580, -0.221497648881431250, -0.221546406649811840, -0.221595163864326820, -0.221643920524853460, -0.221692676631270320, +-0.221741432183455910, -0.221790187181287480, -0.221838941624643570, -0.221887695513402320, -0.221936448847441850, -0.221985201626640680, -0.222033953850876040, -0.222082705520026540, +-0.222131456633970710, -0.222180207192585830, -0.222228957195750390, -0.222277706643342590, -0.222326455535240940, -0.222375203871322730, -0.222423951651466500, -0.222472698875550380, +-0.222521445543452960, -0.222570191655051490, -0.222618937210224550, -0.222667682208850250, -0.222716426650807180, -0.222765170535972640, -0.222813913864225140, -0.222862656635443300, +-0.222911398849504390, -0.222960140506286990, -0.223008881605669200, -0.223057622147529670, -0.223106362131745640, -0.223155101558195730, -0.223203840426758030, -0.223252578737311190, +-0.223301316489732480, -0.223350053683900460, -0.223398790319693290, -0.223447526396989590, -0.223496261915666660, -0.223544996875603060, -0.223593731276676950, -0.223642465118766980, +-0.223691198401750390, -0.223739931125505800, -0.223788663289911400, -0.223837394894845780, -0.223886125940186230, -0.223934856425811350, -0.223983586351599790, -0.224032315717428790, +-0.224081044523177040, -0.224129772768722670, -0.224178500453944300, -0.224227227578719240, -0.224275954142926110, -0.224324680146443110, -0.224373405589148840, -0.224422130470920610, +-0.224470854791637060, -0.224519578551176350, -0.224568301749417170, -0.224617024386236760, -0.224665746461513830, -0.224714467975126950, -0.224763188926953460, -0.224811909316872010, +-0.224860629144760770, -0.224909348410498390, -0.224958067113962240, -0.225006785255030900, -0.225055502833582580, -0.225104219849495970, -0.225152936302648350, -0.225201652192918410, +-0.225250367520184320, -0.225299082284324740, -0.225347796485217050, -0.225396510122739840, -0.225445223196771380, -0.225493935707190260, -0.225542647653873910, -0.225591359036700910, +-0.225640069855549520, -0.225688780110298390, -0.225737489800824890, -0.225786198927007660, -0.225834907488725340, -0.225883615485855340, -0.225932322918276310, -0.225981029785866460, +-0.226029736088504490, -0.226078441826067710, -0.226127146998434860, -0.226175851605484120, -0.226224555647094180, -0.226273259123142450, -0.226321962033507550, -0.226370664378067740, +-0.226419366156701720, -0.226468067369286820, -0.226516768015701780, -0.226565468095824810, -0.226614167609534590, -0.226662866556708560, -0.226711564937225330, -0.226760262750963200, +-0.226808959997800820, -0.226857656677615650, -0.226906352790286310, -0.226955048335691520, -0.227003743313708680, -0.227052437724216490, -0.227101131567093190, -0.227149824842217520, +-0.227198517549466850, -0.227247209688719860, -0.227295901259854880, -0.227344592262750560, -0.227393282697284320, -0.227441972563334870, -0.227490661860780510, -0.227539350589499920, +-0.227588038749370530, -0.227636726340271020, -0.227685413362080150, -0.227734099814675290, -0.227782785697935200, -0.227831471011738150, -0.227880155755962850, -0.227928839930486710, +-0.227977523535188490, -0.228026206569946460, -0.228074889034639350, -0.228123570929144560, -0.228172252253340870, -0.228220933007106550, -0.228269613190320330, -0.228318292802859620, +-0.228366971844603190, -0.228415650315429320, -0.228464328215216780, -0.228513005543842990, -0.228561682301186670, -0.228610358487126130, -0.228659034101540150, -0.228707709144306160, +-0.228756383615302870, -0.228805057514409080, -0.228853730841502210, -0.228902403596461000, -0.228951075779163770, -0.228999747389489310, -0.229048418427315020, -0.229097088892519700, +-0.229145758784981670, -0.229194428104579660, -0.229243096851191150, -0.229291765024694890, -0.229340432624969250, -0.229389099651892940, -0.229437766105343440, -0.229486431985199520, +-0.229535097291339560, -0.229583762023642250, -0.229632426181985120, -0.229681089766246900, -0.229729752776305970, -0.229778415212041120, -0.229827077073329780, -0.229875738360050740, +-0.229924399072082790, -0.229973059209303390, -0.230021718771591360, -0.230070377758825050, -0.230119036170883200, -0.230167694007643340, -0.230216351268984270, -0.230265007954784270, +-0.230313664064922210, -0.230362319599275560, -0.230410974557723110, -0.230459628940143210, -0.230508282746414690, -0.230556935976415020, -0.230605588630023030, -0.230654240707117490, +-0.230702892207575890, -0.230751543131277080, -0.230800193478099410, -0.230848843247921710, -0.230897492440621440, -0.230946141056077440, -0.230994789094168100, -0.231043436554772220, +-0.231092083437767330, -0.231140729743032210, -0.231189375470445270, -0.231238020619885330, -0.231286665191229900, -0.231335309184357800, -0.231383952599147430, -0.231432595435477620, +-0.231481237693225870, -0.231529879372271040, -0.231578520472491530, -0.231627160993766120, -0.231675800935972400, -0.231724440298989170, -0.231773079082695260, -0.231821717286968240, +-0.231870354911686890, -0.231918991956729690, -0.231967628421975440, -0.232016264307301680, -0.232064899612587250, -0.232113534337710590, -0.232162168482550500, -0.232210802046984580, +-0.232259435030891640, -0.232308067434150110, -0.232356699256638850, -0.232405330498235420, -0.232453961158818670, -0.232502591238267000, -0.232551220736459290, -0.232599849653273070, +-0.232648477988587260, -0.232697105742280250, -0.232745732914230900, -0.232794359504316790, -0.232842985512416780, -0.232891610938409740, -0.232940235782173240, -0.232988860043586150, +-0.233037483722526920, -0.233086106818874400, -0.233134729332506170, -0.233183351263301140, -0.233231972611137710, -0.233280593375894800, -0.233329213557449950, -0.233377833155682110, +-0.233426452170469640, -0.233475070601691510, -0.233523688449225250, -0.233572305712949760, -0.233620922392743960, -0.233669538488485430, -0.233718154000053020, -0.233766768927325260, +-0.233815383270180980, -0.233863997028497830, -0.233912610202154670, -0.233961222791029990, -0.234009834795002700, -0.234058446213950390, -0.234107057047751950, -0.234155667296285870, +-0.234204276959431050, -0.234252886037065120, -0.234301494529066960, -0.234350102435315070, -0.234398709755688360, -0.234447316490064450, -0.234495922638322220, -0.234544528200340220, +-0.234593133175997310, -0.234641737565171150, -0.234690341367740610, -0.234738944583584690, -0.234787547212580970, -0.234836149254608360, -0.234884750709545400, -0.234933351577270990, +-0.234981951857662770, -0.235030551550599650, -0.235079150655960160, -0.235127749173623250, -0.235176347103466520, -0.235224944445368900, -0.235273541199208960, -0.235322137364865570, +-0.235370732942216420, -0.235419327931140430, -0.235467922331516530, -0.235516516143222420, -0.235565109366137030, -0.235613702000138840, -0.235662294045106410, -0.235710885500918680, +-0.235759476367453290, -0.235808066644589230, -0.235856656332205400, -0.235905245430179540, -0.235953833938390530, -0.236002421856716970, -0.236051009185037770, -0.236099595923230600, +-0.236148182071174470, -0.236196767628747860, -0.236245352595829770, -0.236293936972297860, -0.236342520758031140, -0.236391103952908080, -0.236439686556807720, -0.236488268569607700, +-0.236536849991187010, -0.236585430821424610, -0.236634011060198210, -0.236682590707386810, -0.236731169762868900, -0.236779748226523510, -0.236828326098228320, -0.236876903377862320, +-0.236925480065304060, -0.236974056160432520, -0.237022631663125400, -0.237071206573261720, -0.237119780890720030, -0.237168354615379300, -0.237216927747117250, -0.237265500285812890, +-0.237314072231344790, -0.237362643583591940, -0.237411214342432040, -0.237459784507744100, -0.237508354079406710, -0.237556923057298860, -0.237605491441298280, -0.237654059231283940, +-0.237702626427134910, -0.237751193028728880, -0.237799759035944860, -0.237848324448661470, -0.237896889266757670, -0.237945453490111230, -0.237994017118601160, -0.238042580152106030, +-0.238091142590504870, -0.238139704433675460, -0.238188265681496760, -0.238236826333847410, -0.238285386390606420, -0.238333945851651550, -0.238382504716861790, -0.238431062986116220, +-0.238479620659292540, -0.238528177736269830, -0.238576734216926660, -0.238625290101142080, -0.238673845388793880, -0.238722400079761030, -0.238770954173922190, -0.238819507671156390, +-0.238868060571341410, -0.238916612874356280, -0.238965164580079600, -0.239013715688390440, -0.239062266199166570, -0.239110816112287020, -0.239159365427630440, -0.239207914145075890, +-0.239256462264501090, -0.239305009785785170, -0.239353556708806700, -0.239402103033444780, -0.239450648759577170, -0.239499193887082930, -0.239547738415841150, -0.239596282345729610, +-0.239644825676627340, -0.239693368408413020, -0.239741910540965690, -0.239790452074163160, -0.239838993007884500, -0.239887533342008350, -0.239936073076413820, -0.239984612210978670, +-0.240033150745581960, -0.240081688680102410, -0.240130226014419050, -0.240178762748409710, -0.240227298881953430, -0.240275834414928950, -0.240324369347215290, -0.240372903678690270, +-0.240421437409233000, -0.240469970538722130, -0.240518503067036760, -0.240567034994054710, -0.240615566319655080, -0.240664097043716970, -0.240712627166118160, -0.240761156686737810, +-0.240809685605454540, -0.240858213922147510, -0.240906741636694510, -0.240955268748974660, -0.241003795258866640, -0.241052321166249560, -0.241100846471001220, -0.241149371173000780, +-0.241197895272126930, -0.241246418768258750, -0.241294941661274100, -0.241343463951052110, -0.241391985637471880, -0.241440506720411260, -0.241489027199749350, -0.241537547075364900, +-0.241586066347137000, -0.241634585014943500, -0.241683103078663560, -0.241731620538175850, -0.241780137393359520, -0.241828653644092400, -0.241877169290253660, -0.241925684331721990, +-0.241974198768376560, -0.242022712600095170, -0.242071225826757020, -0.242119738448240810, -0.242168250464425670, -0.242216761875189480, -0.242265272680411370, -0.242313782879970100, +-0.242362292473744800, -0.242410801461613340, -0.242459309843454870, -0.242507817619148550, -0.242556324788572280, -0.242604831351605180, -0.242653337308125990, -0.242701842658013920, +-0.242750347401146790, -0.242798851537403800, -0.242847355066663660, -0.242895857988805590, -0.242944360303707420, -0.242992862011248370, -0.243041363111307170, -0.243089863603762970, +-0.243138363488493690, -0.243186862765378510, -0.243235361434296170, -0.243283859495125850, -0.243332356947745470, -0.243380853792034170, -0.243429350027870750, -0.243477845655134390, +-0.243526340673702960, -0.243574835083455700, -0.243623328884271790, -0.243671822076029110, -0.243720314658606880, -0.243768806631883880, -0.243817297995739280, -0.243865788750050990, +-0.243914278894698240, -0.243962768429559800, -0.244011257354514870, -0.244059745669441360, -0.244108233374218500, -0.244156720468725050, -0.244205206952840200, -0.244253692826441940, +-0.244302178089409430, -0.244350662741621930, -0.244399146782957290, -0.244447630213294830, -0.244496113032513280, -0.244544595240491880, -0.244593076837108570, -0.244641557822242560, +-0.244690038195772650, -0.244738517957578060, -0.244786997107536760, -0.244835475645527990, -0.244883953571430500, -0.244932430885123560, -0.244980907586485140, -0.245029383675394420, +-0.245077859151730250, -0.245126334015371870, -0.245174808266197230, -0.245223281904085540, -0.245271754928915680, -0.245320227340566850, -0.245368699138917010, -0.245417170323845440, +-0.245465640895231370, -0.245514110852952770, -0.245562580196888870, -0.245611048926918540, -0.245659517042921020, -0.245707984544774270, -0.245756451432357550, -0.245804917705549740, +-0.245853383364230020, -0.245901848408276450, -0.245950312837568240, -0.245998776651984250, -0.246047239851403730, -0.246095702435704690, -0.246144164404766410, -0.246192625758467700, +-0.246241086496687880, -0.246289546619304880, -0.246338006126198050, -0.246386465017246180, -0.246434923292328580, -0.246483380951323240, -0.246531837994109470, -0.246580294420566530, +-0.246628750230572400, -0.246677205424006420, -0.246725660000747420, -0.246774113960674670, -0.246822567303666250, -0.246871020029601370, -0.246919472138358960, -0.246967923629818310, +-0.247016374503857410, -0.247064824760355600, -0.247113274399191700, -0.247161723420245030, -0.247210171823393670, -0.247258619608516830, -0.247307066775493910, -0.247355513324202860, +-0.247403959254523050, -0.247452404566333330, -0.247500849259512600, -0.247549293333940180, -0.247597736789494090, -0.247646179626053680, -0.247694621843498250, -0.247743063441705800, +-0.247791504420555720, -0.247839944779926880, -0.247888384519698610, -0.247936823639748920, -0.247985262139957200, -0.248033700020202750, -0.248082137280363600, -0.248130573920319120, +-0.248179009939948210, -0.248227445339129770, -0.248275880117743150, -0.248324314275666400, -0.248372747812778880, -0.248421180728959880, -0.248469613024087540, -0.248518044698041150, +-0.248566475750699650, -0.248614906181942400, -0.248663335991647440, -0.248711765179694150, -0.248760193745961420, -0.248808621690328660, -0.248857049012673910, -0.248905475712876550, +-0.248953901790815500, -0.249002327246370110, -0.249050752079418490, -0.249099176289839960, -0.249147599877513950, -0.249196022842318510, -0.249244445184133000, -0.249292866902836360, +-0.249341287998307570, -0.249389708470425990, -0.249438128319069720, -0.249486547544118110, -0.249534966145450590, -0.249583384122945200, -0.249631801476481370, -0.249680218205938030, +-0.249728634311194550, -0.249777049792129090, -0.249825464648620960, -0.249873878880549210, -0.249922292487793190, -0.249970705470230980, -0.250019117827742050, -0.250067529560205280, +-0.250115940667500150, -0.250164351149504690, -0.250212761006098410, -0.250261170237160660, -0.250309578842569490, -0.250357986822204450, -0.250406394175944400, -0.250454800903668340, +-0.250503207005255750, -0.250551612480584720, -0.250600017329534630, -0.250648421551984910, -0.250696825147813720, -0.250745228116900480, -0.250793630459124170, -0.250842032174364240, +-0.250890433262498770, -0.250938833723407200, -0.250987233556969000, -0.251035632763062290, -0.251084031341566480, -0.251132429292360630, -0.251180826615323650, -0.251229223310335090, +-0.251277619377273000, -0.251326014816016910, -0.251374409626446140, -0.251422803808438950, -0.251471197361874790, -0.251519590286632570, -0.251567982582591830, -0.251616374249630740, +-0.251664765287628660, -0.251713155696464690, -0.251761545476018260, -0.251809934626167580, -0.251858323146792020, -0.251906711037770630, -0.251955098298982940, -0.252003484930307050, +-0.252051870931622460, -0.252100256302808580, -0.252148641043743680, -0.252197025154307140, -0.252245408634378050, -0.252293791483835460, -0.252342173702558790, -0.252390555290426310, +-0.252438936247317390, -0.252487316573111580, -0.252535696267687020, -0.252584075330923250, -0.252632453762699270, -0.252680831562894610, -0.252729208731387430, -0.252777585268057270, +-0.252825961172783110, -0.252874336445444440, -0.252922711085919520, -0.252971085094087830, -0.253019458469828480, -0.253067831213020840, -0.253116203323543230, -0.253164574801275080, +-0.253212945646095980, -0.253261315857884030, -0.253309685436518830, -0.253358054381879360, -0.253406422693845220, -0.253454790372294620, -0.253503157417106990, -0.253551523828161480, +-0.253599889605337640, -0.253648254748513600, -0.253696619257568920, -0.253744983132382750, -0.253793346372834520, -0.253841708978802430, -0.253890070950166140, -0.253938432286805070, +-0.253986792988597500, -0.254035153055422960, -0.254083512487160550, -0.254131871283689300, -0.254180229444888880, -0.254228586970637380, -0.254276943860814450, -0.254325300115299640, +-0.254373655733971080, -0.254422010716708390, -0.254470365063390660, -0.254518718773897480, -0.254567071848107060, -0.254615424285899010, -0.254663776087152350, -0.254712127251746630, +-0.254760477779560230, -0.254808827670472640, -0.254857176924362940, -0.254905525541110790, -0.254953873520594340, -0.255002220862693200, -0.255050567567286950, -0.255098913634253910, +-0.255147259063473520, -0.255195603854824980, -0.255243948008187450, -0.255292291523440520, -0.255340634400462340, -0.255388976639132630, -0.255437318239330910, -0.255485659200935470, +-0.255533999523825880, -0.255582339207881260, -0.255630678252981250, -0.255679016659004110, -0.255727354425829450, -0.255775691553336350, -0.255824028041404530, -0.255872363889912140, +-0.255920699098738880, -0.255969033667763860, -0.256017367596866660, -0.256065700885925620, -0.256114033534820370, -0.256162365543430410, -0.256210696911634170, -0.256259027639311130, +-0.256307357726340560, -0.256355687172601990, -0.256404015977973800, -0.256452344142335530, -0.256500671665566450, -0.256548998547546090, -0.256597324788152840, -0.256645650387266220, +-0.256693975344765510, -0.256742299660530300, -0.256790623334438920, -0.256838946366370950, -0.256887268756206040, -0.256935590503822590, -0.256983911609100110, -0.257032232071917830, +-0.257080551892155010, -0.257128871069691230, -0.257177189604404830, -0.257225507496175450, -0.257273824744882810, -0.257322141350405100, -0.257370457312622040, -0.257418772631412830, +-0.257467087306657180, -0.257515401338233310, -0.257563714726020960, -0.257612027469899360, -0.257660339569748100, -0.257708651025445550, -0.257756961836871360, -0.257805272003904800, +-0.257853581526425460, -0.257901890404311770, -0.257950198637443340, -0.257998506225699810, -0.258046813168959610, -0.258095119467102400, -0.258143425120007370, -0.258191730127553750, +-0.258240034489621300, -0.258288338206088260, -0.258336641276834420, -0.258384943701739420, -0.258433245480681580, -0.258481546613540670, -0.258529847100195890, -0.258578146940526890, +-0.258626446134412100, -0.258674744681731240, -0.258723042582363500, -0.258771339836188550, -0.258819636443084870, -0.258867932402932040, -0.258916227715609400, -0.258964522380996650, +-0.259012816398972170, -0.259061109769415600, -0.259109402492206710, -0.259157694567223870, -0.259205985994346800, -0.259254276773454810, -0.259302566904427490, -0.259350856387143340, +-0.259399145221482110, -0.259447433407322960, -0.259495720944545650, -0.259544007833028610, -0.259592294072651550, -0.259640579663293790, -0.259688864604834980, -0.259737148897153600, +-0.259785432540129370, -0.259833715533641930, -0.259881997877569830, -0.259930279571792660, -0.259978560616189850, -0.260026841010640610, -0.260075120755024700, -0.260123399849220560, +-0.260171678293107940, -0.260219956086566560, -0.260268233229474840, -0.260316509721712550, -0.260364785563158950, -0.260413060753693860, -0.260461335293195650, -0.260509609181544140, +-0.260557882418618600, -0.260606155004298790, -0.260654426938463140, -0.260702698220991400, -0.260750968851762970, -0.260799238830657530, -0.260847508157553530, -0.260895776832330780, +-0.260944044854869050, -0.260992312225046710, -0.261040578942743630, -0.261088845007839130, -0.261137110420212480, -0.261185375179743500, -0.261233639286310660, -0.261281902739793680, +-0.261330165540072430, -0.261378427687025290, -0.261426689180532080, -0.261474950020472160, -0.261523210206725310, -0.261571469739170000, -0.261619728617686010, -0.261667986842152700, +-0.261716244412449890, -0.261764501328455970, -0.261812757590050850, -0.261861013197113800, -0.261909268149524700, -0.261957522447161920, -0.262005776089905380, -0.262054029077634810, +-0.262102281410228790, -0.262150533087567030, -0.262198784109528900, -0.262247034475994290, -0.262295284186841670, -0.262343533241950810, -0.262391781641201140, -0.262440029384472420, +-0.262488276471643240, -0.262536522902593330, -0.262584768677202100, -0.262633013795349420, -0.262681258256913740, -0.262729502061774920, -0.262777745209812790, -0.262825987700905870, +-0.262874229534934000, -0.262922470711776550, -0.262970711231312880, -0.263018951093422880, -0.263067190297985090, -0.263115428844879320, -0.263163666733985390, -0.263211903965181850, +-0.263260140538348620, -0.263308376453364970, -0.263356611710110820, -0.263404846308464720, -0.263453080248306550, -0.263501313529515610, -0.263549546151971850, -0.263597778115553790, +-0.263646009420141270, -0.263694240065613760, -0.263742470051851030, -0.263790699378731730, -0.263838928046135680, -0.263887156053942750, -0.263935383402031490, -0.263983610090281760, +-0.264031836118573000, -0.264080061486784650, -0.264128286194796610, -0.264176510242487390, -0.264224733629736920, -0.264272956356425060, -0.264321178422430300, -0.264369399827632690, +-0.264417620571911540, -0.264465840655146780, -0.264514060077216950, -0.264562278838001990, -0.264610496937381760, -0.264658714375234860, -0.264706931151441170, -0.264755147265880180, +-0.264803362718431300, -0.264851577508974480, -0.264899791637388250, -0.264948005103552540, -0.264996217907347230, -0.265044430048650970, -0.265092641527343630, -0.265140852343304700, +-0.265189062496414050, -0.265237271986550340, -0.265285480813593430, -0.265333688977422820, -0.265381896477918430, -0.265430103314958870, -0.265478309488423990, -0.265526514998193410, +-0.265574719844146930, -0.265622924026163280, -0.265671127544122250, -0.265719330397903850, -0.265767532587386720, -0.265815734112450740, -0.265863934972975450, -0.265912135168840270, +-0.265960334699925250, -0.266008533566108930, -0.266056731767271240, -0.266104929303292210, -0.266153126174050400, -0.266201322379425730, -0.266249517919297850, -0.266297712793546530, +-0.266345907002050520, -0.266394100544689760, -0.266442293421343730, -0.266490485631892370, -0.266538677176214430, -0.266586868054189740, -0.266635058265697940, -0.266683247810618860, +-0.266731436688831260, -0.266779624900215060, -0.266827812444650260, -0.266875999322015440, -0.266924185532190660, -0.266972371075055450, -0.267020555950489680, -0.267068740158372120, +-0.267116923698582700, -0.267165106571000950, -0.267213288775506930, -0.267261470311979220, -0.267309651180297810, -0.267357831380342300, -0.267406010911992620, -0.267454189775127530, +-0.267502367969626900, -0.267550545495370830, -0.267598722352237970, -0.267646898540108260, -0.267695074058861340, -0.267743248908376750, -0.267791423088534430, -0.267839596599213140, +-0.267887769440292860, -0.267935941611653570, -0.267984113113173990, -0.268032283944734160, -0.268080454106213560, -0.268128623597492340, -0.268176792418449050, -0.268224960568963830, +-0.268273128048916230, -0.268321294858186180, -0.268369460996652490, -0.268417626464195150, -0.268465791260693750, -0.268513955386028290, -0.268562118840077520, -0.268610281622721440, +-0.268658443733840120, -0.268706605173312240, -0.268754765941017830, -0.268802926036836530, -0.268851085460647900, -0.268899244212331970, -0.268947402291767500, -0.268995559698834540, +-0.269043716433413130, -0.269091872495381970, -0.269140027884621160, -0.269188182601010240, -0.269236336644429360, -0.269284490014757130, -0.269332642711873740, -0.269380794735658680, +-0.269428946085992100, -0.269477096762752720, -0.269525246765820630, -0.269573396095075360, -0.269621544750397070, -0.269669692731664470, -0.269717840038757650, -0.269765986671556660, +-0.269814132629940310, -0.269862277913788580, -0.269910422522981140, -0.269958566457398130, -0.270006709716918260, -0.270054852301421570, -0.270102994210787820, -0.270151135444896940, +-0.270199276003627810, -0.270247415886860520, -0.270295555094474670, -0.270343693626350360, -0.270391831482366400, -0.270439968662402890, -0.270488105166339870, -0.270536240994056100, +-0.270584376145431790, -0.270632510620346490, -0.270680644418679950, -0.270728777540312220, -0.270776909985122160, -0.270825041752989770, -0.270873172843795200, -0.270921303257417310, +-0.270969432993736100, -0.271017562052631390, -0.271065690433983150, -0.271113818137670270, -0.271161945163572840, -0.271210071511570560, -0.271258197181543480, -0.271306322173370530, +-0.271354446486931740, -0.271402570122106890, -0.271450693078776010, -0.271498815356817970, -0.271546936956112870, -0.271595057876540870, -0.271643178117980830, -0.271691297680312800, +-0.271739416563416550, -0.271787534767171770, -0.271835652291458560, -0.271883769136155810, -0.271931885301143590, -0.271980000786302130, -0.272028115591510240, -0.272076229716648020, +-0.272124343161595280, -0.272172455926232070, -0.272220568010437310, -0.272268679414091110, -0.272316790137073270, -0.272364900179263850, -0.272413009540541710, -0.272461118220787110, +-0.272509226219879660, -0.272557333537699620, -0.272605440174125800, -0.272653546129038360, -0.272701651402317500, -0.272749755993842050, -0.272797859903492260, -0.272845963131147780, +-0.272894065676688890, -0.272942167539994340, -0.272990268720944400, -0.273038369219418760, -0.273086469035297650, -0.273134568168459930, -0.273182666618785820, -0.273230764386155010, +-0.273278861470447720, -0.273326957871542870, -0.273375053589320570, -0.273423148623661130, -0.273471242974443360, -0.273519336641547480, -0.273567429624853250, -0.273615521924240490, +-0.273663613539589290, -0.273711704470778690, -0.273759794717688800, -0.273807884280199860, -0.273855973158190770, -0.273904061351541770, -0.273952148860132580, -0.274000235683843460, +-0.274048321822553340, -0.274096407276142370, -0.274144492044490430, -0.274192576127477660, -0.274240659524983050, -0.274288742236886760, -0.274336824263068660, -0.274384905603408890, +-0.274432986257786450, -0.274481066226081540, -0.274529145508174370, -0.274577224103943920, -0.274625302013270400, -0.274673379236033630, -0.274721455772113430, -0.274769531621390010, +-0.274817606783742340, -0.274865681259050640, -0.274913755047195170, -0.274961828148054870, -0.275009900561510030, -0.275057972287440390, -0.275106043325726300, -0.275154113676246650, +-0.275202183338881750, -0.275250252313511360, -0.275298320600015740, -0.275346388198273890, -0.275394455108166130, -0.275442521329572200, -0.275490586862372380, -0.275538651706445700, +-0.275586715861672380, -0.275634779327932680, -0.275682842105105630, -0.275730904193071450, -0.275778965591710000, -0.275827026300901610, -0.275875086320525150, -0.275923145650461050, +-0.275971204290589080, -0.276019262240789490, -0.276067319500941320, -0.276115376070924900, -0.276163431950619990, -0.276211487139906950, -0.276259541638664730, -0.276307595446773690, +-0.276355648564114100, -0.276403700990564940, -0.276451752726006530, -0.276499803770318740, -0.276547854123381450, -0.276595903785074930, -0.276643952755278260, -0.276692001033871650, +-0.276740048620735530, -0.276788095515748790, -0.276836141718791890, -0.276884187229744560, -0.276932232048487270, -0.276980276174898900, -0.277028319608859870, -0.277076362350250070, +-0.277124404398949750, -0.277172445754838010, -0.277220486417795120, -0.277268526387701050, -0.277316565664436080, -0.277364604247879290, -0.277412642137910950, -0.277460679334411490, +-0.277508715837259830, -0.277556751646336420, -0.277604786761521170, -0.277652821182693910, -0.277700854909735010, -0.277748887942523560, -0.277796920280939890, -0.277844951924864360, +-0.277892982874176020, -0.277941013128755240, -0.277989042688481900, -0.278037071553236370, -0.278085099722897740, -0.278133127197346400, -0.278181153976462650, -0.278229180060125540, +-0.278277205448215550, -0.278325230140612500, -0.278373254137196380, -0.278421277437847560, -0.278469300042445130, -0.278517321950869420, -0.278565343163000860, -0.278613363678718530, +-0.278661383497902760, -0.278709402620433530, -0.278757421046191220, -0.278805438775054980, -0.278853455806905070, -0.278901472141621590, -0.278949487779084790, -0.278997502719173900, +-0.279045516961769210, -0.279093530506750790, -0.279141543353998880, -0.279189555503392750, -0.279237566954812720, -0.279285577708139220, -0.279333587763251290, -0.279381597120029410, +-0.279429605778353570, -0.279477613738103700, -0.279525620999160230, -0.279573627561402250, -0.279621633424710250, -0.279669638588964540, -0.279717643054044340, -0.279765646819830020, +-0.279813649886201610, -0.279861652253039440, -0.279909653920222770, -0.279957654887631970, -0.280005655155146970, -0.280053654722648320, -0.280101653590015100, -0.280149651757127690, +-0.280197649223866200, -0.280245645990111040, -0.280293642055741310, -0.280341637420637450, -0.280389632084679930, -0.280437626047747910, -0.280485619309721880, -0.280533611870481760, +-0.280581603729907590, -0.280629594887879860, -0.280677585344277670, -0.280725575098981550, -0.280773564151871930, -0.280821552502827980, -0.280869540151730160, -0.280917527098458460, +-0.280965513342893380, -0.281013498884914060, -0.281061483724401040, -0.281109467861234700, -0.281157451295294290, -0.281205434026460200, -0.281253416054612570, -0.281301397379631450, +-0.281349378001397200, -0.281397357919789090, -0.281445337134687560, -0.281493315645973130, -0.281541293453525020, -0.281589270557223600, -0.281637246956949080, -0.281685222652581830, +-0.281733197644001120, -0.281781171931087430, -0.281829145513720740, -0.281877118391781700, -0.281925090565149360, -0.281973062033704310, -0.282021032797326650, -0.282069002855896810, +-0.282116972209294050, -0.282164940857398850, -0.282212908800091700, -0.282260876037251860, -0.282308842568759880, -0.282356808394495730, -0.282404773514339570, -0.282452737928171940, +-0.282500701635871990, -0.282548664637320310, -0.282596626932397400, -0.282644588520982510, -0.282692549402956130, -0.282740509578198350, -0.282788469046589770, -0.282836427808009610, +-0.282884385862338330, -0.282932343209456090, -0.282980299849243440, -0.283028255781579590, -0.283076211006345110, -0.283124165523420070, -0.283172119332685100, -0.283220072434019370, +-0.283268024827303510, -0.283315976512417970, -0.283363927489242050, -0.283411877757656310, -0.283459827317540940, -0.283507776168776370, -0.283555724311241930, -0.283603671744818210, +-0.283651618469385300, -0.283699564484823750, -0.283747509791012880, -0.283795454387833270, -0.283843398275164970, -0.283891341452888630, -0.283939283920883470, -0.283987225679030120, +-0.284035166727209190, -0.284083107065299880, -0.284131046693182790, -0.284178985610738070, -0.284226923817845870, -0.284274861314386840, -0.284322798100240190, -0.284370734175286580, +-0.284418669539406530, -0.284466604192479430, -0.284514538134385760, -0.284562471365005790, -0.284610403884220040, -0.284658335691907850, -0.284706266787949860, -0.284754197172226160, +-0.284802126844617420, -0.284850055805002940, -0.284897984053263280, -0.284945911589278680, -0.284993838412929750, -0.285041764524095800, -0.285089689922657430, -0.285137614608495240, +-0.285185538581488600, -0.285233461841518100, -0.285281384388463950, -0.285329306222206370, -0.285377227342625940, -0.285425147749601980, -0.285473067443015200, -0.285520986422746150, +-0.285568904688674190, -0.285616822240680020, -0.285664739078643760, -0.285712655202446100, -0.285760570611966360, -0.285808485307085190, -0.285856399287682810, -0.285904312553639850, +-0.285952225104835700, -0.286000136941150950, -0.286048048062465920, -0.286095958468661150, -0.286143868159616070, -0.286191777135211320, -0.286239685395327570, -0.286287592939844130, +-0.286335499768641750, -0.286383405881600610, -0.286431311278601390, -0.286479215959523470, -0.286527119924247510, -0.286575023172653710, -0.286622925704622830, -0.286670827520034140, +-0.286718728618768460, -0.286766629000705930, -0.286814528665727260, -0.286862427613711830, -0.286910325844540350, -0.286958223358093460, -0.287006120154250590, -0.287054016232892390, +-0.287101911593899200, -0.287149806237151200, -0.287197700162529160, -0.287245593369912400, -0.287293485859181690, -0.287341377630217610, -0.287389268682899710, -0.287437159017108650, +-0.287485048632724730, -0.287532937529628550, -0.287580825707699610, -0.287628713166818650, -0.287676599906865840, -0.287724485927721980, -0.287772371229266520, -0.287820255811380100, +-0.287868139673943040, -0.287916022816836090, -0.287963905239938590, -0.288011786943131400, -0.288059667926295120, -0.288107548189309230, -0.288155427732054490, -0.288203306554411230, +-0.288251184656259650, -0.288299062037480570, -0.288346938697953360, -0.288394814637558840, -0.288442689856177710, -0.288490564353689420, -0.288538438129974710, -0.288586311184913900, +-0.288634183518387770, -0.288682055130275730, -0.288729926020458550, -0.288777796188816550, -0.288825665635230490, -0.288873534359579850, -0.288921402361745410, -0.288969269641607410, +-0.289017136199046680, -0.289065002033942700, -0.289112867146176180, -0.289160731535627940, -0.289208595202177450, -0.289256458145705440, -0.289304320366092330, -0.289352181863218820, +-0.289400042636964390, -0.289447902687209930, -0.289495762013835700, -0.289543620616722450, -0.289591478495749730, -0.289639335650798360, -0.289687192081748590, -0.289735047788481300, +-0.289782902770875980, -0.289830757028813390, -0.289878610562174290, -0.289926463370838270, -0.289974315454686100, -0.290022166813598160, -0.290070017447454750, -0.290117867356136760, +-0.290165716539523670, -0.290213564997496290, -0.290261412729935440, -0.290309259736720620, -0.290357106017732620, -0.290404951572851900, -0.290452796401959200, -0.290500640504934070, +-0.290548483881657380, -0.290596326532009450, -0.290644168455871150, -0.290692009653121970, -0.290739850123642780, -0.290787689867314010, -0.290835528884016370, -0.290883367173629560, +-0.290931204736034290, -0.290979041571111430, -0.291026877678740530, -0.291074713058802450, -0.291122547711177570, -0.291170381635746320, -0.291218214832389580, -0.291266047300986870, +-0.291313879041419030, -0.291361710053566920, -0.291409540337310090, -0.291457369892529410, -0.291505198719105350, -0.291553026816918690, -0.291600854185849020, -0.291648680825777220, +-0.291696506736584150, -0.291744331918149410, -0.291792156370353830, -0.291839980093077880, -0.291887803086201940, -0.291935625349606930, -0.291983446883172400, -0.292031267686779280, +-0.292079087760308440, -0.292126907103639420, -0.292174725716653150, -0.292222543599230110, -0.292270360751251070, -0.292318177172595730, -0.292365992863144910, -0.292413807822779150, +-0.292461622051379320, -0.292509435548824970, -0.292557248314997020, -0.292605060349775960, -0.292652871653042710, -0.292700682224676820, -0.292748492064559220, -0.292796301172570830, +-0.292844109548591250, -0.292891917192501410, -0.292939724104181790, -0.292987530283512820, -0.293035335730375490, -0.293083140444649340, -0.293130944426215400, -0.293178747674954500, +-0.293226550190746280, -0.293274351973471740, -0.293322153023011290, -0.293369953339245870, -0.293417752922055190, -0.293465551771320050, -0.293513349886921070, -0.293561147268739160, +-0.293608943916653930, -0.293656739830546350, -0.293704535010296920, -0.293752329455786610, -0.293800123166895020, -0.293847916143503090, -0.293895708385491840, -0.293943499892740880, +-0.293991290665131190, -0.294039080702543250, -0.294086870004857610, -0.294134658571955250, -0.294182446403715770, -0.294230233500020200, -0.294278019860749470, -0.294325805485783240, +-0.294373590375002550, -0.294421374528287870, -0.294469157945520140, -0.294516940626579130, -0.294564722571345750, -0.294612503779701000, -0.294660284251524520, -0.294708063986697410, +-0.294755842985100100, -0.294803621246613130, -0.294851398771117600, -0.294899175558493150, -0.294946951608620720, -0.294994726921381340, -0.295042501496654790, -0.295090275334321920, +-0.295138048434263330, -0.295185820796360130, -0.295233592420491910, -0.295281363306539700, -0.295329133454384110, -0.295376902863906050, -0.295424671534985360, -0.295472439467503010, +-0.295520206661339550, -0.295567973116375950, -0.295615738832492040, -0.295663503809568740, -0.295711268047487150, -0.295759031546126930, -0.295806794305369160, -0.295854556325094390, +-0.295902317605183260, -0.295950078145516720, -0.295997837945974560, -0.296045597006437840, -0.296093355326787540, -0.296141112906903430, -0.296188869746666530, -0.296236625845957450, +-0.296284381204657220, -0.296332135822645610, -0.296379889699803670, -0.296427642836012030, -0.296475395231151680, -0.296523146885102450, -0.296570897797745310, -0.296618647968960980, +-0.296666397398630380, -0.296714146086633430, -0.296761894032851080, -0.296809641237164410, -0.296857387699453250, -0.296905133419598620, -0.296952878397481130, -0.297000622632981880, +-0.297048366125980620, -0.297096108876358460, -0.297143850883996030, -0.297191592148774440, -0.297239332670573400, -0.297287072449274050, -0.297334811484756990, -0.297382549776903370, +-0.297430287325592900, -0.297478024130706730, -0.297525760192125950, -0.297573495509730330, -0.297621230083400970, -0.297668963913018500, -0.297716696998463700, -0.297764429339617500, +-0.297812160936359870, -0.297859891788571810, -0.297907621896134400, -0.297955351258927580, -0.298003079876832330, -0.298050807749729420, -0.298098534877499880, -0.298146261260023640, +-0.298193986897181680, -0.298241711788854780, -0.298289435934924020, -0.298337159335269280, -0.298384881989771590, -0.298432603898311720, -0.298480325060770770, -0.298528045477028550, +-0.298575765146966270, -0.298623484070464960, -0.298671202247404510, -0.298718919677666060, -0.298766636361130320, -0.298814352297678000, -0.298862067487190240, -0.298909781929546870, +-0.298957495624629030, -0.299005208572317880, -0.299052920772493290, -0.299100632225036410, -0.299148342929827950, -0.299196052886749000, -0.299243762095679540, -0.299291470556500680, +-0.299339178269093120, -0.299386885233338060, -0.299434591449115380, -0.299482296916306180, -0.299530001634791270, -0.299577705604451740, -0.299625408825167580, -0.299673111296819840, +-0.299720813019289770, -0.299768513992457300, -0.299816214216203470, -0.299863913690409100, -0.299911612414955400, -0.299959310389722230, -0.300007007614590810, -0.300054704089441850, +-0.300102399814156600, -0.300150094788614870, -0.300197789012697950, -0.300245482486286520, -0.300293175209261800, -0.300340867181503710, -0.300388558402893470, -0.300436248873312270, +-0.300483938592640050, -0.300531627560757960, -0.300579315777546760, -0.300627003242887330, -0.300674689956660800, -0.300722375918747060, -0.300770061129027490, -0.300817745587383110, +-0.300865429293693980, -0.300913112247841230, -0.300960794449705750, -0.301008475899168680, -0.301056156596110010, -0.301103836540410950, -0.301151515731952310, -0.301199194170615250, +-0.301246871856279850, -0.301294548788827220, -0.301342224968138230, -0.301389900394094130, -0.301437575066574810, -0.301485248985461580, -0.301532922150635650, -0.301580594561977000, +-0.301628266219366890, -0.301675937122686030, -0.301723607271815410, -0.301771276666636170, -0.301818945307028300, -0.301866613192873060, -0.301914280324051710, -0.301961946700444240, +-0.302009612321931910, -0.302057277188395590, -0.302104941299716430, -0.302152604655774540, -0.302200267256451100, -0.302247929101627070, -0.302295590191183570, -0.302343250525000660, +-0.302390910102959650, -0.302438568924941420, -0.302486226990827110, -0.302533884300496820, -0.302581540853831880, -0.302629196650713470, -0.302676851691021650, -0.302724505974637680, +-0.302772159501442430, -0.302819812271317270, -0.302867464284142130, -0.302915115539798270, -0.302962766038166690, -0.303010415779128630, -0.303058064762564080, -0.303105712988354370, +-0.303153360456380360, -0.303201007166523370, -0.303248653118663450, -0.303296298312681900, -0.303343942748460050, -0.303391586425877880, -0.303439229344816760, -0.303486871505157570, +-0.303534512906781240, -0.303582153549569020, -0.303629793433400960, -0.303677432558158430, -0.303725070923722750, -0.303772708529974010, -0.303820345376793480, -0.303867981464062020, +-0.303915616791661130, -0.303963251359470720, -0.304010885167372180, -0.304058518215246430, -0.304106150502974790, -0.304153782030437360, -0.304201412797515500, -0.304249042804090100, +-0.304296672050042520, -0.304344300535252850, -0.304391928259602370, -0.304439555222972560, -0.304487181425243390, -0.304534806866296300, -0.304582431546012170, -0.304630055464271960, +-0.304677678620957070, -0.304725301015947530, -0.304772922649124760, -0.304820543520370080, -0.304868163629563590, -0.304915782976586780, -0.304963401561320460, -0.305011019383646050, +-0.305058636443443660, -0.305106252740594720, -0.305153868274980530, -0.305201483046481260, -0.305249097054978320, -0.305296710300352600, -0.305344322782485080, -0.305391934501257230, +-0.305439545456549110, -0.305487155648242080, -0.305534765076217630, -0.305582373740355850, -0.305629981640538120, -0.305677588776645410, -0.305725195148559170, -0.305772800756159540, +-0.305820405599327880, -0.305868009677945250, -0.305915612991892960, -0.305963215541051270, -0.306010817325301500, -0.306058418344524740, -0.306106018598602310, -0.306153618087414430, +-0.306201216810842450, -0.306248814768767920, -0.306296411961070880, -0.306344008387632870, -0.306391604048334760, -0.306439198943057710, -0.306486793071683080, -0.306534386434091030, +-0.306581979030162990, -0.306629570859780430, -0.306677161922823570, -0.306724752219173780, -0.306772341748712100, -0.306819930511319950, -0.306867518506877600, -0.306915105735266420, +-0.306962692196367510, -0.307010277890062300, -0.307057862816230930, -0.307105446974754950, -0.307153030365515330, -0.307200612988393570, -0.307248194843269820, -0.307295775930025610, +-0.307343356248542420, -0.307390935798700360, -0.307438514580380960, -0.307486092593465320, -0.307533669837834420, -0.307581246313369750, -0.307628822019951560, -0.307676396957461300, +-0.307723971125780480, -0.307771544524789330, -0.307819117154369270, -0.307866689014401450, -0.307914260104767360, -0.307961830425347140, -0.308009399976022390, -0.308056968756674540, +-0.308104536767183860, -0.308152104007431820, -0.308199670477299510, -0.308247236176668050, -0.308294801105418960, -0.308342365263432390, -0.308389928650589900, -0.308437491266773060, +-0.308485053111862030, -0.308532614185738350, -0.308580174488283180, -0.308627734019377930, -0.308675292778902990, -0.308722850766739780, -0.308770407982769500, -0.308817964426873590, +-0.308865520098932310, -0.308913074998827250, -0.308960629126439510, -0.309008182481650630, -0.309055735064340860, -0.309103286874391760, -0.309150837911684850, -0.309198388176100460, +-0.309245937667520070, -0.309293486385824820, -0.309341034330895880, -0.309388581502614780, -0.309436127900861780, -0.309483673525518480, -0.309531218376466410, -0.309578762453585900, +-0.309626305756758420, -0.309673848285865250, -0.309721390040787860, -0.309768931021406570, -0.309816471227602920, -0.309864010659258120, -0.309911549316253700, -0.309959087198469980, +-0.310006624305788570, -0.310054160638090600, -0.310101696195257630, -0.310149230977170010, -0.310196764983709290, -0.310244298214757130, -0.310291830670193720, -0.310339362349900780, +-0.310386893253759450, -0.310434423381651340, -0.310481952733456690, -0.310529481309057160, -0.310577009108333970, -0.310624536131168640, -0.310672062377441550, -0.310719587847034300, +-0.310767112539828080, -0.310814636455704560, -0.310862159594543940, -0.310909681956227980, -0.310957203540638220, -0.311004724347655030, -0.311052244377160000, -0.311099763629034410, +-0.311147282103159390, -0.311194799799416610, -0.311242316717686370, -0.311289832857850330, -0.311337348219790140, -0.311384862803386180, -0.311432376608520080, -0.311479889635073000, +-0.311527401882926660, -0.311574913351961360, -0.311622424042058750, -0.311669933953100110, -0.311717443084967070, -0.311764951437540020, -0.311812459010700540, -0.311859965804329900, +-0.311907471818309800, -0.311954977052520620, -0.312002481506843950, -0.312049985181161560, -0.312097488075353760, -0.312144990189302200, -0.312192491522888190, -0.312239992075992960, +-0.312287491848498190, -0.312334990840284210, -0.312382489051232840, -0.312429986481225610, -0.312477483130143010, -0.312524978997866690, -0.312572474084277910, -0.312619968389258370, +-0.312667461912688520, -0.312714954654449980, -0.312762446614424090, -0.312809937792492440, -0.312857428188535570, -0.312904917802435180, -0.312952406634072420, -0.312999894683329060, +-0.313047381950085580, -0.313094868434223630, -0.313142354135624970, -0.313189839054169970, -0.313237323189740350, -0.313284806542217460, -0.313332289111482980, -0.313379770897417310, +-0.313427251899902230, -0.313474732118819040, -0.313522211554049410, -0.313569690205473870, -0.313617168072974070, -0.313664645156431390, -0.313712121455727470, -0.313759596970742850, +-0.313807071701359240, -0.313854545647458400, -0.313902018808920710, -0.313949491185628040, -0.313996962777461590, -0.314044433584302730, -0.314091903606033230, -0.314139372842533570, +-0.314186841293685460, -0.314234308959370660, -0.314281775839469700, -0.314329241933864250, -0.314376707242435720, -0.314424171765065820, -0.314471635501635090, -0.314519098452025300, +-0.314566560616117710, -0.314614021993794180, -0.314661482584935150, -0.314708942389422430, -0.314756401407137340, -0.314803859637961700, -0.314851317081775940, -0.314898773738461920, +-0.314946229607901420, -0.314993684689974850, -0.315041138984564100, -0.315088592491550520, -0.315136045210815450, -0.315183497142240700, -0.315230948285706750, -0.315278398641095470, +-0.315325848208288570, -0.315373296987166650, -0.315420744977611520, -0.315468192179504450, -0.315515638592727410, -0.315563084217160780, -0.315610529052686490, -0.315657973099185860, +-0.315705416356540700, -0.315752858824631610, -0.315800300503340350, -0.315847741392548340, -0.315895181492137410, -0.315942620801988090, -0.315990059321982260, -0.316037497052001680, +-0.316084933991926890, -0.316132370141639810, -0.316179805501021820, -0.316227240069954670, -0.316274673848319090, -0.316322106835996760, -0.316369539032869180, -0.316416970438818170, +-0.316464401053724310, -0.316511830877469480, -0.316559259909935050, -0.316606688151002900, -0.316654115600553570, -0.316701542258469030, -0.316748968124630990, -0.316796393198920110, +-0.316843817481218260, -0.316891240971406860, -0.316938663669367400, -0.316986085574981650, -0.317033506688130300, -0.317080927008695170, -0.317128346536558140, -0.317175765271599800, +-0.317223183213702080, -0.317270600362746400, -0.317318016718614650, -0.317365432281187410, -0.317412847050346610, -0.317460261025973690, -0.317507674207950510, -0.317555086596157720, +-0.317602498190477260, -0.317649908990790540, -0.317697318996979450, -0.317744728208924630, -0.317792136626508070, -0.317839544249611530, -0.317886951078115710, -0.317934357111902490, +-0.317981762350853400, -0.318029166794849940, -0.318076570443773910, -0.318123973297506080, -0.318171375355928320, -0.318218776618922510, -0.318266177086369400, -0.318313576758150810, +-0.318360975634148220, -0.318408373714243690, -0.318455770998317790, -0.318503167486252460, -0.318550563177929180, -0.318597958073229990, -0.318645352172035430, -0.318692745474227490, +-0.318740137979687700, -0.318787529688297930, -0.318834920599939010, -0.318882310714492690, -0.318929700031841070, -0.318977088551864800, -0.319024476274445800, -0.319071863199465570, +-0.319119249326806130, -0.319166634656348150, -0.319214019187973540, -0.319261402921563910, -0.319308785857001230, -0.319356167994166110, -0.319403549332940630, -0.319450929873206220, +-0.319498309614844930, -0.319545688557737460, -0.319593066701765740, -0.319640444046811800, -0.319687820592756300, -0.319735196339481280, -0.319782571286868270, -0.319829945434798810, +-0.319877318783154900, -0.319924691331817280, -0.319972063080667950, -0.320019434029588880, -0.320066804178460780, -0.320114173527165700, -0.320161542075585170, -0.320208909823601170, +-0.320256276771094530, -0.320303642917947160, -0.320351008264040730, -0.320398372809257150, -0.320445736553477250, -0.320493099496583000, -0.320540461638456010, -0.320587822978978250, +-0.320635183518030550, -0.320682543255494890, -0.320729902191253300, -0.320777260325186500, -0.320824617657176570, -0.320871974187105110, -0.320919329914853670, -0.320966684840304380, +-0.321014038963337910, -0.321061392283836400, -0.321108744801681780, -0.321156096516754860, -0.321203447428937750, -0.321250797538112030, -0.321298146844159690, -0.321345495346961610, +-0.321392843046399760, -0.321440189942356180, -0.321487536034711750, -0.321534881323348510, -0.321582225808148050, -0.321629569488992020, -0.321676912365762460, -0.321724254438340240, +-0.321771595706607350, -0.321818936170445880, -0.321866275829736700, -0.321913614684361800, -0.321960952734202890, -0.322008289979141990, -0.322055626419059940, -0.322102962053838810, +-0.322150296883360330, -0.322197630907506470, -0.322244964126158160, -0.322292296539197440, -0.322339628146505960, -0.322386958947965820, -0.322434288943457880, -0.322481618132864190, +-0.322528946516066890, -0.322576274092946810, -0.322623600863386040, -0.322670926827266280, -0.322718251984469180, -0.322765576334876900, -0.322812899878370250, -0.322860222614831380, +-0.322907544544142330, -0.322954865666183980, -0.323002185980838520, -0.323049505487987550, -0.323096824187513290, -0.323144142079296480, -0.323191459163219340, -0.323238775439163570, +-0.323286090907011270, -0.323333405566643360, -0.323380719417941890, -0.323428032460788660, -0.323475344695065730, -0.323522656120654010, -0.323569966737435710, -0.323617276545292880, +-0.323664585544106430, -0.323711893733758530, -0.323759201114130870, -0.323806507685105600, -0.323853813446563720, -0.323901118398387260, -0.323948422540458030, -0.323995725872658120, +-0.324043028394868540, -0.324090330106971360, -0.324137631008848350, -0.324184931100381660, -0.324232230381452270, -0.324279528851942280, -0.324326826511733890, -0.324374123360707980, +-0.324421419398746800, -0.324468714625732070, -0.324516009041545540, -0.324563302646069420, -0.324610595439184630, -0.324657887420773340, -0.324705178590717740, -0.324752468948898750, +-0.324799758495198650, -0.324847047229499140, -0.324894335151682420, -0.324941622261629430, -0.324988908559222410, -0.325036194044343090, -0.325083478716873710, -0.325130762576695260, +-0.325178045623689850, -0.325225327857739330, -0.325272609278725920, -0.325319889886530600, -0.325367169681035520, -0.325414448662122930, -0.325461726829673840, -0.325509004183570370, +-0.325556280723694410, -0.325603556449927780, -0.325650831362152670, -0.325698105460250020, -0.325745378744102140, -0.325792651213591240, -0.325839922868598310, -0.325887193709005540, +-0.325934463734694810, -0.325981732945548330, -0.326029001341447080, -0.326076268922273320, -0.326123535687908920, -0.326170801638236090, -0.326218066773135810, -0.326265331092490400, +-0.326312594596181670, -0.326359857284091840, -0.326407119156101930, -0.326454380212094280, -0.326501640451951070, -0.326548899875553360, -0.326596158482783390, -0.326643416273523000, +-0.326690673247654500, -0.326737929405058910, -0.326785184745618460, -0.326832439269215120, -0.326879692975731050, -0.326926945865047340, -0.326974197937046240, -0.327021449191609690, +-0.327068699628619900, -0.327115949247957950, -0.327163198049506110, -0.327210446033146750, -0.327257693198760800, -0.327304939546230630, -0.327352185075438170, -0.327399429786265180, +-0.327446673678594040, -0.327493916752305820, -0.327541159007282810, -0.327588400443407310, -0.327635641060560370, -0.327682880858624350, -0.327730119837481130, -0.327777357997013020, +-0.327824595337101120, -0.327871831857627690, -0.327919067558474720, -0.327966302439524520, -0.328013536500658060, -0.328060769741757850, -0.328108002162705640, -0.328155233763383900, +-0.328202464543673630, -0.328249694503457200, -0.328296923642616980, -0.328344151961034000, -0.328391379458590650, -0.328438606135168840, -0.328485831990650510, -0.328533057024918030, +-0.328580281237852550, -0.328627504629336260, -0.328674727199251670, -0.328721948947479860, -0.328769169873903200, -0.328816389978403570, -0.328863609260863390, -0.328910827721163810, +-0.328958045359187100, -0.329005262174815290, -0.329052478167930760, -0.329099693338414660, -0.329146907686149240, -0.329194121211016600, -0.329241333912899060, -0.329288545791677770, +-0.329335756847235150, -0.329382967079453530, -0.329430176488214040, -0.329477385073399130, -0.329524592834890770, -0.329571799772571340, -0.329619005886322040, -0.329666211176025180, +-0.329713415641562760, -0.329760619282817250, -0.329807822099669800, -0.329855024092002790, -0.329902225259698200, -0.329949425602638460, -0.329996625120704710, -0.330043823813779450, +-0.330091021681745030, -0.330138218724482620, -0.330185414941874700, -0.330232610333803240, -0.330279804900150240, -0.330326998640798120, -0.330374191555628140, -0.330421383644522610, +-0.330468574907364090, -0.330515765344033710, -0.330562954954413960, -0.330610143738386760, -0.330657331695834610, -0.330704518826638760, -0.330751705130681580, -0.330798890607845120, +-0.330846075258011910, -0.330893259081063040, -0.330940442076881060, -0.330987624245347940, -0.331034805586346240, -0.331081986099757030, -0.331129165785462920, -0.331176344643346280, +-0.331223522673288360, -0.331270699875171660, -0.331317876248878150, -0.331365051794289990, -0.331412226511289650, -0.331459400399758300, -0.331506573459578460, -0.331553745690632560, +-0.331600917092801930, -0.331648087665968980, -0.331695257410015760, -0.331742426324824920, -0.331789594410277500, -0.331836761666256140, -0.331883928092642890, -0.331931093689320220, +-0.331978258456169410, -0.332025422393072980, -0.332072585499912920, -0.332119747776571880, -0.332166909222931020, -0.332214069838872860, -0.332261229624280010, -0.332308388579033610, +-0.332355546703016260, -0.332402703996110050, -0.332449860458197520, -0.332497016089159880, -0.332544170888879720, -0.332591324857239130, -0.332638477994120660, -0.332685630299405570, +-0.332732781772976380, -0.332779932414715260, -0.332827082224504740, -0.332874231202226030, -0.332921379347761840, -0.332968526660994520, -0.333015673141805520, -0.333062818790077380, +-0.333109963605692120, -0.333157107588531950, -0.333204250738479480, -0.333251393055415960, -0.333298534539223920, -0.333345675189785970, -0.333392815006983420, -0.333439953990698870, +-0.333487092140814400, -0.333534229457212620, -0.333581365939774830, -0.333628501588383640, -0.333675636402921190, -0.333722770383270080, -0.333769903529311630, -0.333817035840928420, +-0.333864167318002610, -0.333911297960416800, -0.333958427768052350, -0.334005556740791800, -0.334052684878517800, -0.334099812181111620, -0.334146938648455960, -0.334194064280432970, +-0.334241189076924790, -0.334288313037814030, -0.334335436162982110, -0.334382558452311570, -0.334429679905685120, -0.334476800522983950, -0.334523920304090840, -0.334571039248887920, +-0.334618157357257860, -0.334665274629081910, -0.334712391064242830, -0.334759506662623160, -0.334806621424104330, -0.334853735348568940, -0.334900848435899180, -0.334947960685977320, +-0.334995072098686010, -0.335042182673906560, -0.335089292411521690, -0.335136401311413980, -0.335183509373464860, -0.335230616597556930, -0.335277722983572500, -0.335324828531394170, +-0.335371933240903360, -0.335419037111982680, -0.335466140144514480, -0.335513242338381260, -0.335560343693464600, -0.335607444209647000, -0.335654543886810870, -0.335701642724838710, +-0.335748740723612100, -0.335795837883013590, -0.335842934202925940, -0.335890029683230510, -0.335937124323810010, -0.335984218124546760, -0.336031311085322910, -0.336078403206021170, +-0.336125494486523070, -0.336172584926711200, -0.336219674526468280, -0.336266763285675730, -0.336313851204216310, -0.336360938281972280, -0.336408024518826290, -0.336455109914659820, +-0.336502194469355590, -0.336549278182795900, -0.336596361054863400, -0.336643443085439530, -0.336690524274407150, -0.336737604621648370, -0.336784684127046040, -0.336831762790481600, +-0.336878840611837760, -0.336925917590997210, -0.336972993727841450, -0.337020069022253180, -0.337067143474114760, -0.337114217083308520, -0.337161289849717110, -0.337208361773222050, +-0.337255432853706130, -0.337302503091051980, -0.337349572485141190, -0.337396641035856480, -0.337443708743080160, -0.337490775606694990, -0.337537841626582460, -0.337584906802625320, +-0.337631971134706390, -0.337679034622707040, -0.337726097266510090, -0.337773159065997970, -0.337820220021052890, -0.337867280131557700, -0.337914339397393900, -0.337961397818444250, +-0.338008455394591510, -0.338055512125717270, -0.338102568011704190, -0.338149623052434680, -0.338196677247791570, -0.338243730597656330, -0.338290783101911800, -0.338337834760440270, +-0.338384885573124570, -0.338431935539846240, -0.338478984660488090, -0.338526032934932440, -0.338573080363062160, -0.338620126944758790, -0.338667172679905040, -0.338714217568383820, +-0.338761261610076640, -0.338808304804866290, -0.338855347152635160, -0.338902388653265660, -0.338949429306640630, -0.338996469112641640, -0.339043508071151410, -0.339090546182052870, +-0.339137583445227540, -0.339184619860558260, -0.339231655427927440, -0.339278690147217840, -0.339325724018311130, -0.339372757041090160, -0.339419789215437250, -0.339466820541235280, +-0.339513851018365840, -0.339560880646711800, -0.339607909426155540, -0.339654937356579920, -0.339701964437866540, -0.339748990669898280, -0.339796016052557880, -0.339843040585727120, +-0.339890064269288690, -0.339937087103125150, -0.339984109087119290, -0.340031130221152720, -0.340078150505108310, -0.340125169938868600, -0.340172188522316340, -0.340219206255333200, +-0.340266223137802030, -0.340313239169605260, -0.340360254350625890, -0.340407268680745390, -0.340454282159846800, -0.340501294787812880, -0.340548306564525280, -0.340595317489866930, +-0.340642327563720320, -0.340689336785967860, -0.340736345156492480, -0.340783352675175840, -0.340830359341900810, -0.340877365156550320, -0.340924370119005950, -0.340971374229150690, +-0.341018377486866970, -0.341065379892037720, -0.341112381444544640, -0.341159382144270550, -0.341206381991098100, -0.341253380984910040, -0.341300379125588080, -0.341347376413015270, +-0.341394372847073910, -0.341441368427647110, -0.341488363154616450, -0.341535357027864920, -0.341582350047275330, -0.341629342212729500, -0.341676333524110310, -0.341723323981300290, +-0.341770313584181970, -0.341817302332638300, -0.341864290226550900, -0.341911277265802840, -0.341958263450276970, -0.342005248779855000, -0.342052233254419910, -0.342099216873854250, +-0.342146199638040990, -0.342193181546861790, -0.342240162600199630, -0.342287142797937090, -0.342334122139957120, -0.342381100626141410, -0.342428078256372950, -0.342475055030534270, +-0.342522030948508360, -0.342569006010176980, -0.342615980215423110, -0.342662953564129680, -0.342709926056178450, -0.342756897691452400, -0.342803868469834130, -0.342850838391206610, +-0.342897807455451560, -0.342944775662451960, -0.342991743012090460, -0.343038709504250030, -0.343085675138812380, -0.343132639915660560, -0.343179603834677100, -0.343226566895745100, +-0.343273529098746260, -0.343320490443563550, -0.343367450930080090, -0.343414410558177560, -0.343461369327739020, -0.343508327238647050, -0.343555284290784250, -0.343602240484033650, +-0.343649195818277020, -0.343696150293397450, -0.343743103909277870, -0.343790056665800150, -0.343837008562847270, -0.343883959600301880, -0.343930909778047020, -0.343977859095964460, +-0.344024807553937220, -0.344071755151847960, -0.344118701889579770, -0.344165647767014420, -0.344212592784034880, -0.344259536940523910, -0.344306480236364510, -0.344353422671438480, +-0.344400364245628920, -0.344447304958818870, -0.344494244810890080, -0.344541183801725710, -0.344588121931208410, -0.344635059199220770, -0.344681995605645940, -0.344728931150365680, +-0.344775865833263080, -0.344822799654221250, -0.344869732613121980, -0.344916664709848390, -0.344963595944283160, -0.345010526316309350, -0.345057455825808770, -0.345104384472664620, +-0.345151312256759430, -0.345198239177976430, -0.345245165236197420, -0.345292090431305490, -0.345339014763183290, -0.345385938231713980, -0.345432860836779430, -0.345479782578262730, +-0.345526703456047020, -0.345573623470014080, -0.345620542620047100, -0.345667460906028790, -0.345714378327842240, -0.345761294885369270, -0.345808210578493090, -0.345855125407096400, +-0.345902039371062340, -0.345948952470272740, -0.345995864704610740, -0.346042776073959110, -0.346089686578200940, -0.346136596217218100, -0.346183504990893840, -0.346230412899111160, +-0.346277319941752090, -0.346324226118699730, -0.346371131429836780, -0.346418035875045990, -0.346464939454210530, -0.346511842167212310, -0.346558744013934490, -0.346605644994260220, +-0.346652545108071420, -0.346699444355251240, -0.346746342735682500, -0.346793240249248290, -0.346840136895830540, -0.346887032675312460, -0.346933927587576800, -0.346980821632506760, +-0.347027714809984230, -0.347074607119892410, -0.347121498562114110, -0.347168389136532420, -0.347215278843029380, -0.347262167681488150, -0.347309055651791930, -0.347355942753822590, +-0.347402828987463440, -0.347449714352597190, -0.347496598849106720, -0.347543482476875110, -0.347590365235784400, -0.347637247125717750, -0.347684128146558410, -0.347731008298188370, +-0.347777887580490770, -0.347824765993348440, -0.347871643536644630, -0.347918520210261320, -0.347965396014081660, -0.348012270947988980, -0.348059145011865190, -0.348106018205593500, +-0.348152890529056790, -0.348199761982137870, -0.348246632564719940, -0.348293502276684990, -0.348340371117916330, -0.348387239088297160, -0.348434106187709420, -0.348480972416036480, +-0.348527837773161100, -0.348574702258966530, -0.348621565873334760, -0.348668428616149110, -0.348715290487292380, -0.348762151486647850, -0.348809011614097500, -0.348855870869524630, +-0.348902729252812070, -0.348949586763843130, -0.348996443402499800, -0.349043299168665330, -0.349090154062223100, -0.349137008083055030, -0.349183861231044390, -0.349230713506074150, +-0.349277564908027140, -0.349324415436786610, -0.349371265092234650, -0.349418113874254480, -0.349464961782729460, -0.349511808817541620, -0.349558654978574300, -0.349605500265710300, +-0.349652344678832990, -0.349699188217824360, -0.349746030882567780, -0.349792872672946120, -0.349839713588842750, -0.349886553630139600, -0.349933392796720090, -0.349980231088467150, +-0.350027068505263990, -0.350073905046992760, -0.350120740713536770, -0.350167575504779340, -0.350214409420602560, -0.350261242460889740, -0.350308074625523820, -0.350354905914387730, +-0.350401736327364770, -0.350448565864337090, -0.350495394525187960, -0.350542222309800760, -0.350589049218057610, -0.350635875249841860, -0.350682700405036350, -0.350729524683524580, +-0.350776348085188540, -0.350823170609911640, -0.350869992257577200, -0.350916813028067380, -0.350963632921265530, -0.351010451937054660, -0.351057270075317560, -0.351104087335937790, +-0.351150903718797310, -0.351197719223779630, -0.351244533850768040, -0.351291347599644700, -0.351338160470292980, -0.351384972462595870, -0.351431783576436730, -0.351478593811697770, +-0.351525403168262250, -0.351572211646013270, -0.351619019244834190, -0.351665825964607100, -0.351712631805215450, -0.351759436766542260, -0.351806240848470900, -0.351853044050883470, +-0.351899846373663450, -0.351946647816694210, -0.351993448379857960, -0.352040248063038130, -0.352087046866117640, -0.352133844788979520, -0.352180641831507210, -0.352227437993582910, +-0.352274233275090000, -0.352321027675911890, -0.352367821195930800, -0.352414613835030200, -0.352461405593093020, -0.352508196470002750, -0.352554986465641600, -0.352601775579892970, +-0.352648563812639930, -0.352695351163765880, -0.352742137633152990, -0.352788923220684780, -0.352835707926244300, -0.352882491749714920, -0.352929274690978960, -0.352976056749919720, +-0.353022837926420810, -0.353069618220364420, -0.353116397631633940, -0.353163176160112450, -0.353209953805683490, -0.353256730568229150, -0.353303506447633030, -0.353350281443778170, +-0.353397055556547990, -0.353443828785824750, -0.353490601131492000, -0.353537372593432650, -0.353584143171530360, -0.353630912865667280, -0.353677681675726880, -0.353724449601592720, +-0.353771216643147040, -0.353817982800273320, -0.353864748072854620, -0.353911512460774010, -0.353958275963915100, -0.354005038582160040, -0.354051800315392410, -0.354098561163495700, +-0.354145321126352160, -0.354192080203845350, -0.354238838395858290, -0.354285595702274580, -0.354332352122976420, -0.354379107657847410, -0.354425862306770640, -0.354472616069629650, +-0.354519368946306700, -0.354566120936685270, -0.354612872040648560, -0.354659622258080120, -0.354706371588862200, -0.354753120032878340, -0.354799867590012090, -0.354846614260145740, +-0.354893360043162910, -0.354940104938946620, -0.354986848947380140, -0.355033592068346890, -0.355080334301729250, -0.355127075647410810, -0.355173816105275040, -0.355220555675204390, +-0.355267294357082260, -0.355314032150791990, -0.355360769056217000, -0.355407505073239650, -0.355454240201743600, -0.355500974441611880, -0.355547707792728210, -0.355594440254974830, +-0.355641171828235350, -0.355687902512392910, -0.355734632307331160, -0.355781361212932410, -0.355828089229080270, -0.355874816355658260, -0.355921542592548880, -0.355968267939635600, +-0.356014992396801620, -0.356061715963930600, -0.356108438640904910, -0.356155160427608090, -0.356201881323923390, -0.356248601329734400, -0.356295320444923460, -0.356342038669374250, +-0.356388756002969930, -0.356435472445594150, -0.356482187997129220, -0.356528902657458900, -0.356575616426466680, -0.356622329304035040, -0.356669041290047560, -0.356715752384387460, +-0.356762462586938000, -0.356809171897582820, -0.356855880316204240, -0.356902587842686030, -0.356949294476911700, -0.356996000218763760, -0.357042705068125800, -0.357089409024881070, +-0.357136112088913270, -0.357182814260104730, -0.357229515538339200, -0.357276215923499840, -0.357322915415470340, -0.357369614014133200, -0.357416311719371990, -0.357463008531069990, +-0.357509704449110900, -0.357556399473377140, -0.357603093603752360, -0.357649786840120280, -0.357696479182363300, -0.357743170630365150, -0.357789861184009070, -0.357836550843178340, +-0.357883239607756640, -0.357929927477626420, -0.357976614452671370, -0.358023300532775200, -0.358069985717820390, -0.358116670007690600, -0.358163353402269120, -0.358210035901439680, +-0.358256717505084750, -0.358303398213088040, -0.358350078025332810, -0.358396756941702810, -0.358443434962080480, -0.358490112086349570, -0.358536788314393400, -0.358583463646095670, +-0.358630138081338870, -0.358676811620006700, -0.358723484261982920, -0.358770156007150070, -0.358816826855391740, -0.358863496806591410, -0.358910165860632730, -0.358956834017398200, +-0.359003501276771610, -0.359050167638636290, -0.359096833102875930, -0.359143497669373090, -0.359190161338011520, -0.359236824108674520, -0.359283485981245880, -0.359330146955608110, +-0.359376807031644980, -0.359423466209240210, -0.359470124488276420, -0.359516781868637280, -0.359563438350206210, -0.359610093932866530, -0.359656748616501990, -0.359703402400995240, +-0.359750055286229940, -0.359796707272089900, -0.359843358358457710, -0.359890008545217130, -0.359936657832251540, -0.359983306219444690, -0.360029953706679170, -0.360076600293838760, +-0.360123245980806860, -0.360169890767467250, -0.360216534653702460, -0.360263177639396410, -0.360309819724432380, -0.360356460908694220, -0.360403101192064480, -0.360449740574426970, +-0.360496379055665560, -0.360543016635662790, -0.360589653314302430, -0.360636289091468000, -0.360682923967042820, -0.360729557940910720, -0.360776191012954330, -0.360822823183057470, +-0.360869454451103970, -0.360916084816976460, -0.360962714280558650, -0.361009342841734140, -0.361055970500386620, -0.361102597256398760, -0.361149223109654470, -0.361195848060037460, +-0.361242472107430490, -0.361289095251717260, -0.361335717492781370, -0.361382338830506130, -0.361428959264775470, -0.361475578795472040, -0.361522197422479600, -0.361568815145682120, +-0.361615431964962210, -0.361662047880203670, -0.361708662891290060, -0.361755276998105170, -0.361801890200531660, -0.361848502498453460, -0.361895113891753990, -0.361941724380317130, +-0.361988333964025580, -0.362034942642763150, -0.362081550416413430, -0.362128157284860200, -0.362174763247986140, -0.362221368305675250, -0.362267972457811280, -0.362314575704277000, +-0.362361178044956270, -0.362407779479732630, -0.362454380008489510, -0.362500979631110830, -0.362547578347479300, -0.362594176157478850, -0.362640773060993350, -0.362687369057905550, +-0.362733964148099270, -0.362780558331458110, -0.362827151607865940, -0.362873743977205510, -0.362920335439360700, -0.362966925994215090, -0.363013515641652520, -0.363060104381555780, +-0.363106692213808810, -0.363153279138295040, -0.363199865154898550, -0.363246450263501940, -0.363293034463989200, -0.363339617756244350, -0.363386200140150000, -0.363432781615590120, +-0.363479362182448310, -0.363525941840608100, -0.363572520589953490, -0.363619098430367100, -0.363665675361733000, -0.363712251383935090, -0.363758826496856150, -0.363805400700380200, +-0.363851973994390680, -0.363898546378771670, -0.363945117853405890, -0.363991688418177250, -0.364038258072969860, -0.364084826817666410, -0.364131394652150890, -0.364177961576306890, +-0.364224527590018000, -0.364271092693168150, -0.364317656885640220, -0.364364220167318060, -0.364410782538085840, -0.364457343997826260, -0.364503904546423290, -0.364550464183760530, +-0.364597022909722070, -0.364643580724190560, -0.364690137627050210, -0.364736693618184450, -0.364783248697477360, -0.364829802864811760, -0.364876356120071690, -0.364922908463140680, +-0.364969459893902840, -0.365016010412240910, -0.365062560018038940, -0.365109108711181020, -0.365155656491549910, -0.365202203359029640, -0.365248749313503870, -0.365295294354856250, +-0.365341838482970750, -0.365388381697730300, -0.365434923999018890, -0.365481465386720550, -0.365528005860718150, -0.365574545420895740, -0.365621084067137000, -0.365667621799325880, +-0.365714158617345350, -0.365760694521079450, -0.365807229510411780, -0.365853763585226420, -0.365900296745406250, -0.365946828990835360, -0.365993360321397400, -0.366039890736976460, +-0.366086420237455360, -0.366132948822718180, -0.366179476492649090, -0.366226003247130890, -0.366272529086047680, -0.366319054009283110, -0.366365578016721370, -0.366412101108245240, +-0.366458623283738900, -0.366505144543085970, -0.366551664886170580, -0.366598184312875610, -0.366644702823085200, -0.366691220416683060, -0.366737737093553230, -0.366784252853578690, +-0.366830767696643470, -0.366877281622631780, -0.366923794631426440, -0.366970306722911640, -0.367016817896971050, -0.367063328153488470, -0.367109837492347930, -0.367156345913432380, +-0.367202853416626010, -0.367249360001812910, -0.367295865668875950, -0.367342370417699350, -0.367388874248166850, -0.367435377160162560, -0.367481879153569450, -0.367528380228271560, +-0.367574880384152760, -0.367621379621097200, -0.367667877938987750, -0.367714375337708620, -0.367760871817143560, -0.367807367377176730, -0.367853862017691050, -0.367900355738570720, +-0.367946848539699890, -0.367993340420961550, -0.368039831382239890, -0.368086321423418570, -0.368132810544381520, -0.368179298745012820, -0.368225786025195510, -0.368272272384813690, +-0.368318757823751620, -0.368365242341892220, -0.368411725939119750, -0.368458208615317920, -0.368504690370371040, -0.368551171204161980, -0.368597651116575000, -0.368644130107493860, +-0.368690608176802880, -0.368737085324384930, -0.368783561550124260, -0.368830036853904700, -0.368876511235610440, -0.368922984695124470, -0.368969457232331100, -0.369015928847114480, +-0.369062399539357600, -0.369108869308944710, -0.369155338155759680, -0.369201806079686720, -0.369248273080608810, -0.369294739158410270, -0.369341204312974790, -0.369387668544186810, +-0.369434131851929190, -0.369480594236086260, -0.369527055696541820, -0.369573516233180190, -0.369619975845884300, -0.369666434534538510, -0.369712892299027040, -0.369759349139232920, +-0.369805805055040460, -0.369852260046333480, -0.369898714112995800, -0.369945167254911830, -0.369991619471964460, -0.370038070764038050, -0.370084521131016920, -0.370130970572784050, +-0.370177419089223750, -0.370223866680219890, -0.370270313345656740, -0.370316759085417500, -0.370363203899386260, -0.370409647787447060, -0.370456090749484160, -0.370502532785380590, +-0.370548973895020730, -0.370595414078288390, -0.370641853335067940, -0.370688291665242480, -0.370734729068696260, -0.370781165545313650, -0.370827601094977700, -0.370874035717572710, +-0.370920469412982680, -0.370966902181091460, -0.371013334021783440, -0.371059764934941580, -0.371106194920450380, -0.371152623978194100, -0.371199052108055820, -0.371245479309919910, +-0.371291905583670310, -0.371338330929191380, -0.371384755346366220, -0.371431178835079150, -0.371477601395214130, -0.371524023026655490, -0.371570443729286440, -0.371616863502991220, +-0.371663282347653890, -0.371709700263158750, -0.371756117249388950, -0.371802533306228870, -0.371848948433562810, -0.371895362631274040, -0.371941775899246820, -0.371988188237365180, +-0.372034599645513440, -0.372081010123574860, -0.372127419671433700, -0.372173828288974000, -0.372220235976080170, -0.372266642732635320, -0.372313048558523870, -0.372359453453629750, +-0.372405857417837490, -0.372452260451030140, -0.372498662553092110, -0.372545063723907890, -0.372591463963360570, -0.372637863271334580, -0.372684261647713900, -0.372730659092382620, +-0.372777055605225120, -0.372823451186124530, -0.372869845834965300, -0.372916239551631890, -0.372962632336007460, -0.373009024187976490, -0.373055415107422910, -0.373101805094231240, +-0.373148194148284600, -0.373194582269467500, -0.373240969457664000, -0.373287355712758400, -0.373333741034634070, -0.373380125423175340, -0.373426508878266280, -0.373472891399791400, +-0.373519272987633880, -0.373565653641678150, -0.373612033361808700, -0.373658412147908790, -0.373704789999862840, -0.373751166917554890, -0.373797542900869030, -0.373843917949689740, +-0.373890292063900230, -0.373936665243385040, -0.373983037488028520, -0.374029408797714070, -0.374075779172326040, -0.374122148611748580, -0.374168517115866130, -0.374214884684562040, +-0.374261251317720700, -0.374307617015226250, -0.374353981776963110, -0.374400345602814650, -0.374446708492665370, -0.374493070446399230, -0.374539431463900900, -0.374585791545053560, +-0.374632150689741710, -0.374678508897849930, -0.374724866169261430, -0.374771222503860800, -0.374817577901532140, -0.374863932362159870, -0.374910285885627410, -0.374956638471819200, +-0.375002990120619440, -0.375049340831912600, -0.375095690605581960, -0.375142039441512140, -0.375188387339587200, -0.375234734299691730, -0.375281080321708980, -0.375327425405523550, +-0.375373769551019980, -0.375420112758081510, -0.375466455026592820, -0.375512796356437970, -0.375559136747501130, -0.375605476199666890, -0.375651814712818500, -0.375698152286840610, +-0.375744488921617710, -0.375790824617033230, -0.375837159372971630, -0.375883493189317190, -0.375929826065954380, -0.375976158002766630, -0.376022488999638470, -0.376068819056454060, +-0.376115148173098050, -0.376161476349453740, -0.376207803585405790, -0.376254129880838280, -0.376300455235635880, -0.376346779649681880, -0.376393103122861010, -0.376439425655057720, +-0.376485747246155520, -0.376532067896038880, -0.376578387604592110, -0.376624706371699370, -0.376671024197245300, -0.376717341081113210, -0.376763657023187810, -0.376809972023353700, +-0.376856286081494190, -0.376902599197493970, -0.376948911371237260, -0.376995222602608700, -0.377041532891491670, -0.377087842237770810, -0.377134150641330770, -0.377180458102054920, +-0.377226764619827900, -0.377273070194533990, -0.377319374826057430, -0.377365678514282820, -0.377411981259093590, -0.377458283060374430, -0.377504583918009950, -0.377550883831883620, +-0.377597182801880090, -0.377643480827883570, -0.377689777909778810, -0.377736074047449130, -0.377782369240779290, -0.377828663489653550, -0.377874956793956550, -0.377921249153571730, +-0.377967540568383830, -0.378013831038277020, -0.378060120563136090, -0.378106409142844440, -0.378152696777286750, -0.378198983466347730, -0.378245269209910860, -0.378291554007860800, +-0.378337837860081850, -0.378384120766458330, -0.378430402726874890, -0.378476683741215070, -0.378522963809363510, -0.378569242931204970, -0.378615521106622890, -0.378661798335502060, +-0.378708074617726650, -0.378754349953181520, -0.378800624341750100, -0.378846897783317090, -0.378893170277766870, -0.378939441824984120, -0.378985712424852350, -0.379031982077256360, +-0.379078250782080350, -0.379124518539209140, -0.379170785348526220, -0.379217051209916330, -0.379263316123264250, -0.379309580088453450, -0.379355843105368680, -0.379402105173894330, +-0.379448366293915100, -0.379494626465314570, -0.379540885687977450, -0.379587143961788160, -0.379633401286631370, -0.379679657662390700, -0.379725913088950870, -0.379772167566196250, +-0.379818421094011650, -0.379864673672280610, -0.379910925300887830, -0.379957175979718180, -0.380003425708655140, -0.380049674487583590, -0.380095922316387780, -0.380142169194952250, +-0.380188415123161650, -0.380234660100899620, -0.380280904128050930, -0.380327147204500390, -0.380373389330131590, -0.380419630504829350, -0.380465870728477980, -0.380512110000962360, +-0.380558348322166060, -0.380604585691973860, -0.380650822110270240, -0.380697057576939950, -0.380743292091866580, -0.380789525654935010, -0.380835758266029610, -0.380881989925035250, +-0.380928220631835510, -0.380974450386315220, -0.381020679188359190, -0.381066907037851070, -0.381113133934675660, -0.381159359878717410, -0.381205584869860780, -0.381251808907990600, +-0.381298031992990500, -0.381344254124745260, -0.381390475303139850, -0.381436695528057870, -0.381482914799384070, -0.381529133117003040, -0.381575350480799600, -0.381621566890657290, +-0.381667782346461150, -0.381713996848095540, -0.381760210395445330, -0.381806422988394180, -0.381852634626826950, -0.381898845310628180, -0.381945055039682680, -0.381991263813874160, +-0.382037471633087430, -0.382083678497207480, -0.382129884406117950, -0.382176089359703650, -0.382222293357849130, -0.382268496400439310, -0.382314698487357830, -0.382360899618489570, +-0.382407099793719120, -0.382453299012931290, -0.382499497276009850, -0.382545694582839600, -0.382591890933305150, -0.382638086327291400, -0.382684280764682030, -0.382730474245361940, +-0.382776666769216070, -0.382822858336128110, -0.382869048945983000, -0.382915238598665280, -0.382961427294059460, -0.383007615032050500, -0.383053801812522080, -0.383099987635359180, +-0.383146172500446690, -0.383192356407668360, -0.383238539356909160, -0.383284721348053580, -0.383330902380986660, -0.383377082455592040, -0.383423261571754710, -0.383469439729359210, +-0.383515616928290560, -0.383561793168432420, -0.383607968449669820, -0.383654142771887310, -0.383700316134969850, -0.383746488538801170, -0.383792659983266280, -0.383838830468250130, +-0.383884999993636510, -0.383931168559310420, -0.383977336165156390, -0.384023502811058960, -0.384069668496903270, -0.384115833222572980, -0.384161996987953060, -0.384208159792928610, +-0.384254321637383320, -0.384300482521202250, -0.384346642444269910, -0.384392801406471470, -0.384438959407690570, -0.384485116447812250, -0.384531272526721150, -0.384577427644302310, +-0.384623581800439480, -0.384669734995017660, -0.384715887227921550, -0.384762038499036120, -0.384808188808245130, -0.384854338155433740, -0.384900486540486860, -0.384946633963288430, +-0.384992780423723370, -0.385038925921676320, -0.385085070457032440, -0.385131214029675430, -0.385177356639490380, -0.385223498286361930, -0.385269638970175190, -0.385315778690813900, +-0.385361917448163170, -0.385408055242107640, -0.385454192072532400, -0.385500327939321320, -0.385546462842359330, -0.385592596781531630, -0.385638729756722030, -0.385684861767815630, +-0.385730992814697030, -0.385777122897250970, -0.385823252015362550, -0.385869380168915530, -0.385915507357795060, -0.385961633581886290, -0.386007758841072970, -0.386053883135240310, +-0.386100006464272890, -0.386146128828055880, -0.386192250226473130, -0.386238370659409750, -0.386284490126750480, -0.386330608628380370, -0.386376726164183340, -0.386422842734044480, +-0.386468958337848500, -0.386515072975480540, -0.386561186646824540, -0.386607299351765520, -0.386653411090188690, -0.386699521861977870, -0.386745631667018310, -0.386791740505194660, +-0.386837848376391620, -0.386883955280494410, -0.386930061217386880, -0.386976166186954180, -0.387022270189081530, -0.387068373223652730, -0.387114475290553040, -0.387160576389667170, +-0.387206676520880260, -0.387252775684076230, -0.387298873879140250, -0.387344971105957110, -0.387391067364411980, -0.387437162654388710, -0.387483256975772570, -0.387529350328448260, +-0.387575442712301040, -0.387621534127214780, -0.387667624573074630, -0.387713714049765900, -0.387759802557172460, -0.387805890095179460, -0.387851976663671830, -0.387898062262534590, +-0.387944146891651800, -0.387990230550908640, -0.388036313240189950, -0.388082394959380850, -0.388128475708365340, -0.388174555487028670, -0.388220634295255610, -0.388266712132931350, +-0.388312788999939930, -0.388358864896166500, -0.388404939821496320, -0.388451013775813430, -0.388497086759002960, -0.388543158770949800, -0.388589229811538710, -0.388635299880654980, +-0.388681368978182620, -0.388727437104006810, -0.388773504258012770, -0.388819570440084640, -0.388865635650107510, -0.388911699887966370, -0.388957763153546350, -0.389003825446731510, +-0.389049886767407090, -0.389095947115457970, -0.389142006490769410, -0.389188064893225380, -0.389234122322711210, -0.389280178779111750, -0.389326234262312280, -0.389372288772196760, +-0.389418342308650520, -0.389464394871558870, -0.389510446460805790, -0.389556497076276600, -0.389602546717856160, -0.389648595385429400, -0.389694643078881520, -0.389740689798096620, +-0.389786735542960010, -0.389832780313357000, -0.389878824109171570, -0.389924866930289100, -0.389970908776594460, -0.390016949647973010, -0.390062989544308740, -0.390109028465486950, +-0.390155066411393080, -0.390201103381911050, -0.390247139376926340, -0.390293174396323720, -0.390339208439988210, -0.390385241507805070, -0.390431273599658460, -0.390477304715433570, +-0.390523334855015890, -0.390569364018289460, -0.390615392205139630, -0.390661419415451290, -0.390707445649109860, -0.390753470905999380, -0.390799495186005210, -0.390845518489012280, +-0.390891540814906010, -0.390937562163570450, -0.390983582534891020, -0.391029601928752580, -0.391075620345040620, -0.391121637783639120, -0.391167654244433560, -0.391213669727309310, +-0.391259684232150410, -0.391305697758842330, -0.391351710307270010, -0.391397721877318420, -0.391443732468872930, -0.391489742081817690, -0.391535750716038080, -0.391581758371419510, +-0.391627765047846190, -0.391673770745203380, -0.391719775463376220, -0.391765779202249980, -0.391811781961708900, -0.391857783741638320, -0.391903784541923320, -0.391949784362449320, +-0.391995783203100360, -0.392041781063761970, -0.392087777944319150, -0.392133773844657310, -0.392179768764660600, -0.392225762704214440, -0.392271755663204320, -0.392317747641514390, +-0.392363738639030070, -0.392409728655636450, -0.392455717691218450, -0.392501705745661620, -0.392547692818850100, -0.392593678910669320, -0.392639664021004810, -0.392685648149740660, +-0.392731631296762470, -0.392777613461955170, -0.392823594645204220, -0.392869574846393840, -0.392915554065409620, -0.392961532302136870, -0.393007509556459860, -0.393053485828264100, +-0.393099461117434660, -0.393145435423856550, -0.393191408747415210, -0.393237381087995000, -0.393283352445481290, -0.393329322819759630, -0.393375292210714270, -0.393421260618230680, +-0.393467228042193920, -0.393513194482489500, -0.393559159939001700, -0.393605124411615990, -0.393651087900217470, -0.393697050404691610, -0.393743011924922730, -0.393788972460796360, +-0.393834932012197490, -0.393880890579011770, -0.393926848161123390, -0.393972804758417890, -0.394018760370780760, -0.394064714998096370, -0.394110668640250130, -0.394156621297127250, +-0.394202572968612830, -0.394248523654592400, -0.394294473354950210, -0.394340422069571870, -0.394386369798342850, -0.394432316541147520, -0.394478262297871420, -0.394524207068399630, +-0.394570150852617760, -0.394616093650410060, -0.394662035461662180, -0.394707976286259200, -0.394753916124086670, -0.394799854975028900, -0.394845792838971590, -0.394891729715799720, +-0.394937665605398950, -0.394983600507653630, -0.395029534422449310, -0.395075467349671530, -0.395121399289204700, -0.395167330240934370, -0.395213260204745680, -0.395259189180524270, +-0.395305117168154470, -0.395351044167521930, -0.395396970178511720, -0.395442895201009500, -0.395488819234899700, -0.395534742280067800, -0.395580664336399050, -0.395626585403779040, +-0.395672505482092150, -0.395718424571224030, -0.395764342671060200, -0.395810259781485150, -0.395856175902384420, -0.395902091033643270, -0.395948005175146890, -0.395993918326780940, +-0.396039830488429720, -0.396085741659979010, -0.396131651841314270, -0.396177561032320050, -0.396223469232881880, -0.396269376442885070, -0.396315282662215220, -0.396361187890756750, +-0.396407092128395310, -0.396452995375016160, -0.396498897630504940, -0.396544798894746030, -0.396590699167625130, -0.396636598449027490, -0.396682496738838760, -0.396728394036943380, +-0.396774290343227030, -0.396820185657575320, -0.396866079979872780, -0.396911973310005000, -0.396957865647857340, -0.397003756993314970, -0.397049647346263630, -0.397095536706587760, +-0.397141425074173100, -0.397187312448905210, -0.397233198830668650, -0.397279084219349150, -0.397324968614831910, -0.397370852017002620, -0.397416734425745820, -0.397462615840947160, +-0.397508496262492020, -0.397554375690265970, -0.397600254124153620, -0.397646131564040610, -0.397692008009812300, -0.397737883461354360, -0.397783757918551310, -0.397829631381288850, +-0.397875503849452750, -0.397921375322927480, -0.397967245801598760, -0.398013115285351940, -0.398058983774072670, -0.398104851267645610, -0.398150717765956400, -0.398196583268890400, +-0.398242447776333330, -0.398288311288169770, -0.398334173804285370, -0.398380035324565620, -0.398425895848896150, -0.398471755377161510, -0.398517613909247500, -0.398563471445039840, +-0.398609327984423110, -0.398655183527283070, -0.398701038073505100, -0.398746891622974500, -0.398792744175577090, -0.398838595731197400, -0.398884446289721200, -0.398930295851034340, +-0.398976144415021330, -0.399021991981567900, -0.399067838550559550, -0.399113684121881970, -0.399159528695419820, -0.399205372271058790, -0.399251214848684370, -0.399297056428182310, +-0.399342897009437200, -0.399388736592334870, -0.399434575176760680, -0.399480412762600430, -0.399526249349738790, -0.399572084938061510, -0.399617919527454400, -0.399663753117802110, +-0.399709585708990460, -0.399755417300904800, -0.399801247893430630, -0.399847077486453760, -0.399892906079858720, -0.399938733673531500, -0.399984560267357790, -0.400030385861222300, +-0.400076210455010850, -0.400122034048608850, -0.400167856641902190, -0.400213678234775490, -0.400259498827114590, -0.400305318418804900, -0.400351137009732350, -0.400396954599781580, +-0.400442771188838420, -0.400488586776788280, -0.400534401363517150, -0.400580214948909550, -0.400626027532851430, -0.400671839115228630, -0.400717649695925880, -0.400763459274828980, +-0.400809267851823410, -0.400855075426795100, -0.400900881999628700, -0.400946687570210070, -0.400992492138424750, -0.401038295704158610, -0.401084098267296300, -0.401129899827723730, +-0.401175700385326460, -0.401221499939990290, -0.401267298491600030, -0.401313096040041450, -0.401358892585200580, -0.401404688126962060, -0.401450482665211830, -0.401496276199835410, +-0.401542068730718240, -0.401587860257746340, -0.401633650780804430, -0.401679440299778310, -0.401725228814554080, -0.401771016325016330, -0.401816802831051030, -0.401862588332543740, +-0.401908372829380360, -0.401954156321445650, -0.401999938808625560, -0.402045720290805600, -0.402091500767871760, -0.402137280239708790, -0.402183058706202580, -0.402228836167238760, +-0.402274612622703250, -0.402320388072480770, -0.402366162516457350, -0.402411935954518910, -0.402457708386550210, -0.402503479812437280, -0.402549250232065610, -0.402595019645320850, +-0.402640788052088970, -0.402686555452254680, -0.402732321845703960, -0.402778087232322890, -0.402823851611996190, -0.402869614984609880, -0.402915377350049510, -0.402961138708201110, +-0.403006899058949430, -0.403052658402180520, -0.403098416737780410, -0.403144174065633800, -0.403189930385626780, -0.403235685697644900, -0.403281440001573840, -0.403327193297299600, +-0.403372945584706930, -0.403418696863681920, -0.403464447134110560, -0.403510196395877710, -0.403555944648869350, -0.403601691892971130, -0.403647438128069080, -0.403693183354048020, +-0.403738927570793990, -0.403784670778192690, -0.403830412976130090, -0.403876154164491070, -0.403921894343161610, -0.403967633512027470, -0.404013371670974620, -0.404059108819887990, +-0.404104844958653510, -0.404150580087157370, -0.404196314205284400, -0.404242047312920570, -0.404287779409951700, -0.404333510496263320, -0.404379240571741630, -0.404424969636271390, +-0.404470697689738700, -0.404516424732029760, -0.404562150763029260, -0.404607875782623420, -0.404653599790697930, -0.404699322787138770, -0.404745044771830930, -0.404790765744660500, +-0.404836485705513170, -0.404882204654274990, -0.404927922590830880, -0.404973639515066990, -0.405019355426869010, -0.405065070326123040, -0.405110784212713960, -0.405156497086527960, +-0.405202208947451130, -0.405247919795368340, -0.405293629630165740, -0.405339338451729090, -0.405385046259944090, -0.405430753054696890, -0.405476458835872410, -0.405522163603356740, +-0.405567867357036150, -0.405613570096795380, -0.405659271822520760, -0.405704972534097930, -0.405750672231413090, -0.405796370914351170, -0.405842068582798310, -0.405887765236640660, +-0.405933460875763210, -0.405979155500052090, -0.406024849109393130, -0.406070541703672020, -0.406116233282774960, -0.406161923846586890, -0.406207613394994060, -0.406253301927882560, +-0.406298989445137430, -0.406344675946644810, -0.406390361432290510, -0.406436045901960700, -0.406481729355540390, -0.406527411792915740, -0.406573093213972560, -0.406618773618597050, +-0.406664453006674200, -0.406710131378090260, -0.406755808732730930, -0.406801485070482530, -0.406847160391229980, -0.406892834694859540, -0.406938507981257410, -0.406984180250308640, +-0.407029851501899350, -0.407075521735915490, -0.407121190952242810, -0.407166859150767560, -0.407212526331374780, -0.407258192493950620, -0.407303857638381450, -0.407349521764552190, +-0.407395184872349160, -0.407440846961658170, -0.407486508032365410, -0.407532168084356050, -0.407577827117516220, -0.407623485131731800, -0.407669142126889150, -0.407714798102873200, +-0.407760453059570260, -0.407806106996866150, -0.407851759914647230, -0.407897411812798480, -0.407943062691206170, -0.407988712549756660, -0.408034361388334930, -0.408080009206827350, +-0.408125656005119690, -0.408171301783098290, -0.408216946540648270, -0.408262590277655880, -0.408308232994006980, -0.408353874689587950, -0.408399515364283820, -0.408445155017980900, +-0.408490793650565060, -0.408536431261922680, -0.408582067851938790, -0.408627703420499750, -0.408673337967491830, -0.408718971492800180, -0.408764603996311090, -0.408810235477910510, +-0.408855865937484300, -0.408901495374918880, -0.408947123790099290, -0.408992751182911900, -0.409038377553243020, -0.409084002900977790, -0.409129627226002600, -0.409175250528203300, +-0.409220872807466270, -0.409266494063676710, -0.409312114296720870, -0.409357733506484740, -0.409403351692854690, -0.409448968855715860, -0.409494584994954610, -0.409540200110456890, +-0.409585814202109100, -0.409631427269796340, -0.409677039313405040, -0.409722650332821510, -0.409768260327930960, -0.409813869298619790, -0.409859477244773900, -0.409905084166279350, +-0.409950690063022480, -0.409996294934888480, -0.410041898781763780, -0.410087501603534690, -0.410133103400086460, -0.410178704171305470, -0.410224303917077760, -0.410269902637289630, +-0.410315500331826340, -0.410361097000574330, -0.410406692643419610, -0.410452287260248520, -0.410497880850946300, -0.410543473415399370, -0.410589064953493790, -0.410634655465115960, +-0.410680244950151040, -0.410725833408485560, -0.410771420840005840, -0.410817007244597240, -0.410862592622146080, -0.410908176972538450, -0.410953760295660770, -0.410999342591398250, +-0.411044923859637420, -0.411090504100264260, -0.411136083313165260, -0.411181661498225660, -0.411227238655331890, -0.411272814784370060, -0.411318389885226510, -0.411363963957786630, +-0.411409537001936890, -0.411455109017563660, -0.411500680004552260, -0.411546249962789160, -0.411591818892160400, -0.411637386792552130, -0.411682953663850830, -0.411728519505941690, +-0.411774084318711260, -0.411819648102046020, -0.411865210855831280, -0.411910772579953510, -0.411956333274298760, -0.412001892938753670, -0.412047451573203380, -0.412093009177534440, +-0.412138565751633050, -0.412184121295385620, -0.412229675808677480, -0.412275229291395100, -0.412320781743424680, -0.412366333164652770, -0.412411883554964550, -0.412457432914246640, +-0.412502981242385550, -0.412548528539266660, -0.412594074804776390, -0.412639620038800950, -0.412685164241226420, -0.412730707411939460, -0.412776249550825260, -0.412821790657770470, +-0.412867330732661570, -0.412912869775383990, -0.412958407785824210, -0.413003944763868420, -0.413049480709403170, -0.413095015622313820, -0.413140549502486910, -0.413186082349808640, +-0.413231614164165590, -0.413277144945443040, -0.413322674693527680, -0.413368203408305600, -0.413413731089663450, -0.413459257737486600, -0.413504783351661520, -0.413550307932074920, +-0.413595831478612170, -0.413641353991159810, -0.413686875469604090, -0.413732395913831600, -0.413777915323727650, -0.413823433699178960, -0.413868951040071710, -0.413914467346292450, +-0.413959982617726600, -0.414005496854260800, -0.414051010055781320, -0.414096522222174630, -0.414142033353326330, -0.414187543449122840, -0.414233052509450970, -0.414278560534196040, +-0.414324067523244740, -0.414369573476483230, -0.414415078393797760, -0.414460582275075100, -0.414506085120200480, -0.414551586929060690, -0.414597087701542360, -0.414642587437530850, +-0.414688086136912880, -0.414733583799574760, -0.414779080425403010, -0.414824576014283190, -0.414870070566101920, -0.414915564080745480, -0.414961056558100560, -0.415006547998052530, +-0.415052038400488210, -0.415097527765293740, -0.415143016092355880, -0.415188503381560050, -0.415233989632792950, -0.415279474845941350, -0.415324959020890620, -0.415370442157527440, +-0.415415924255738260, -0.415461405315409200, -0.415506885336427050, -0.415552364318677260, -0.415597842262046550, -0.415643319166421670, -0.415688795031688100, -0.415734269857732490, +-0.415779743644441260, -0.415825216391701060, -0.415870688099397420, -0.415916158767417050, -0.415961628395646650, -0.416007096983971870, -0.416052564532279230, -0.416098031040455290, +-0.416143496508386220, -0.416188960935958810, -0.416234424323058570, -0.416279886669572330, -0.416325347975386730, -0.416370808240387360, -0.416416267464460980, -0.416461725647493950, +-0.416507182789372990, -0.416552638889983670, -0.416598093949212770, -0.416643547966946640, -0.416689000943071990, -0.416734452877474460, -0.416779903770040820, -0.416825353620657420, +-0.416870802429211040, -0.416916250195587200, -0.416961696919672780, -0.417007142601354520, -0.417052587240518020, -0.417098030837049990, -0.417143473390836960, -0.417188914901765180, +-0.417234355369721530, -0.417279794794591650, -0.417325233176262190, -0.417370670514620120, -0.417416106809550940, -0.417461542060941490, -0.417506976268678220, -0.417552409432647880, +-0.417597841552736100, -0.417643272628829780, -0.417688702660815200, -0.417734131648579310, -0.417779559592007690, -0.417824986490987150, -0.417870412345404170, -0.417915837155145520, +-0.417961260920096890, -0.418006683640145150, -0.418052105315177060, -0.418097525945078320, -0.418142945529735800, -0.418188364069035870, -0.418233781562865000, -0.418279198011110130, +-0.418324613413656840, -0.418370027770392060, -0.418415441081202600, -0.418460853345974100, -0.418506264564593500, -0.418551674736947210, -0.418597083862922160, -0.418642491942403940, +-0.418687898975279580, -0.418733304961435790, -0.418778709900758380, -0.418824113793134220, -0.418869516638449730, -0.418914918436591450, -0.418960319187446310, -0.419005718890899990, +-0.419051117546839320, -0.419096515155151280, -0.419141911715721520, -0.419187307228437000, -0.419232701693184220, -0.419278095109850090, -0.419323487478320320, -0.419368878798481840, +-0.419414269070221170, -0.419459658293425190, -0.419505046467979700, -0.419550433593771530, -0.419595819670687380, -0.419641204698613990, -0.419686588677437240, -0.419731971607044010, +-0.419777353487321260, -0.419822734318154700, -0.419868114099431310, -0.419913492831037630, -0.419958870512860240, -0.420004247144786070, -0.420049622726700820, -0.420094997258491590, +-0.420140370740045230, -0.420185743171247570, -0.420231114551985530, -0.420276484882145750, -0.420321854161615100, -0.420367222390279460, -0.420412589568025740, -0.420457955694740540, +-0.420503320770310830, -0.420548684794622480, -0.420594047767562370, -0.420639409689017140, -0.420684770558873820, -0.420730130377018170, -0.420775489143337180, -0.420820846857717870, +-0.420866203520046000, -0.420911559130208670, -0.420956913688092460, -0.421002267193584300, -0.421047619646570110, -0.421092971046936880, -0.421138321394571250, -0.421183670689360190, +-0.421229018931189520, -0.421274366119946340, -0.421319712255517230, -0.421365057337789230, -0.421410401366648200, -0.421455744341981190, -0.421501086263675160, -0.421546427131616050, +-0.421591766945690890, -0.421637105705786270, -0.421682443411788950, -0.421727780063585860, -0.421773115661062960, -0.421818450204107240, -0.421863783692605850, -0.421909116126444550, +-0.421954447505510480, -0.421999777829690280, -0.422045107098871000, -0.422090435312938610, -0.422135762471780080, -0.422181088575282190, -0.422226413623331960, -0.422271737615815320, +-0.422317060552619310, -0.422362382433630670, -0.422407703258736440, -0.422453023027822620, -0.422498341740776160, -0.422543659397484280, -0.422588975997832850, -0.422634291541709010, +-0.422679606028999400, -0.422724919459590790, -0.422770231833370260, -0.422815543150223790, -0.422860853410038430, -0.422906162612701360, -0.422951470758098470, -0.422996777846116890, +-0.423042083876643380, -0.423087388849565090, -0.423132692764767890, -0.423177995622138980, -0.423223297421565060, -0.423268598162933330, -0.423313897846129660, -0.423359196471041310, +-0.423404494037554920, -0.423449790545557700, -0.423495085994935570, -0.423540380385575790, -0.423585673717365440, -0.423630965990190460, -0.423676257203938140, -0.423721547358495100, +-0.423766836453748630, -0.423812124489584720, -0.423857411465890400, -0.423902697382552600, -0.423947982239458510, -0.423993266036494010, -0.424038548773546300, -0.424083830450502300, +-0.424129111067249100, -0.424174390623672680, -0.424219669119660300, -0.424264946555099160, -0.424310222929875300, -0.424355498243875810, -0.424400772496987600, -0.424446045689097500, +-0.424491317820092640, -0.424536588889859070, -0.424581858898284090, -0.424627127845254800, -0.424672395730657350, -0.424717662554378870, -0.424762928316306240, -0.424808193016326660, +-0.424853456654326220, -0.424898719230192180, -0.424943980743811290, -0.424989241195070870, -0.425034500583856940, -0.425079758910056780, -0.425125016173557190, -0.425170272374245480, +-0.425215527512007700, -0.425260781586731080, -0.425306034598302910, -0.425351286546609250, -0.425396537431537380, -0.425441787252974160, -0.425487036010806510, -0.425532283704921630, +-0.425577530335205680, -0.425622775901545850, -0.425668020403829510, -0.425713263841942690, -0.425758506215772770, -0.425803747525206560, -0.425848987770131360, -0.425894226950433270, +-0.425939465065999670, -0.425984702116717350, -0.426029938102473750, -0.426075173023154840, -0.426120406878648050, -0.426165639668840190, -0.426210871393618680, -0.426256102052869570, +-0.426301331646480150, -0.426346560174337860, -0.426391787636328790, -0.426437014032340190, -0.426482239362259100, -0.426527463625972820, -0.426572686823367460, -0.426617908954330380, +-0.426663130018748560, -0.426708350016509250, -0.426753568947498720, -0.426798786811604270, -0.426844003608712830, -0.426889219338711770, -0.426934434001487280, -0.426979647596926690, +-0.427024860124917420, -0.427070071585345550, -0.427115281978098500, -0.427160491303063270, -0.427205699560126830, -0.427250906749176540, -0.427296112870098550, -0.427341317922780290, +-0.427386521907109130, -0.427431724822971320, -0.427476926670254110, -0.427522127448844660, -0.427567327158630270, -0.427612525799497160, -0.427657723371332680, -0.427702919874023980, +-0.427748115307458320, -0.427793309671521960, -0.427838502966102370, -0.427883695191086540, -0.427928886346361840, -0.427974076431814510, -0.428019265447331990, -0.428064453392801750, +-0.428109640268109940, -0.428154826073144030, -0.428200010807791080, -0.428245194471938100, -0.428290377065472520, -0.428335558588280600, -0.428380739040249760, -0.428425918421267480, +-0.428471096731220020, -0.428516273969994810, -0.428561450137478930, -0.428606625233559860, -0.428651799258123740, -0.428696972211058180, -0.428742144092250200, -0.428787314901587220, +-0.428832484638955570, -0.428877653304242710, -0.428922820897335690, -0.428967987418122090, -0.429013152866488060, -0.429058317242321130, -0.429103480545508840, -0.429148642775937450, +-0.429193803933494490, -0.429238964018066940, -0.429284123029542440, -0.429329280967807200, -0.429374437832748810, -0.429419593624254250, -0.429464748342211160, -0.429509901986505790, +-0.429555054557025640, -0.429600206053657900, -0.429645356476289990, -0.429690505824808330, -0.429735654099100420, -0.429780801299053720, -0.429825947424554660, -0.429871092475490710, +-0.429916236451749030, -0.429961379353216770, -0.430006521179781440, -0.430051661931329430, -0.430096801607748270, -0.430141940208925490, -0.430187077734747460, -0.430232214185101770, +-0.430277349559875510, -0.430322483858956270, -0.430367617082230420, -0.430412749229585560, -0.430457880300908810, -0.430503010296087730, -0.430548139215008780, -0.430593267057559460, +-0.430638393823626950, -0.430683519513098860, -0.430728644125861590, -0.430773767661802700, -0.430818890120809820, -0.430864011502769260, -0.430909131807568730, -0.430954251035095330, +-0.430999369185236290, -0.431044486257879280, -0.431089602252910600, -0.431134717170217950, -0.431179831009688930, -0.431224943771209900, -0.431270055454668510, -0.431315166059951960, +-0.431360275586947890, -0.431405384035542790, -0.431450491405624190, -0.431495597697079790, -0.431540702909795960, -0.431585807043660400, -0.431630910098560310, -0.431676012074382940, +-0.431721112971015950, -0.431766212788345760, -0.431811311526260070, -0.431856409184646520, -0.431901505763391480, -0.431946601262382710, -0.431991695681507410, -0.432036789020653340, +-0.432081881279706810, -0.432126972458555640, -0.432172062557087010, -0.432217151575188640, -0.432262239512747000, -0.432307326369649750, -0.432352412145784180, -0.432397496841037950, +-0.432442580455297650, -0.432487662988450820, -0.432532744440385310, -0.432577824810987500, -0.432622904100145090, -0.432667982307745500, -0.432713059433675880, -0.432758135477824050, +-0.432803210440076470, -0.432848284320320850, -0.432893357118444950, -0.432938428834335250, -0.432983499467879510, -0.433028569018964970, -0.433073637487479400, -0.433118704873309390, +-0.433163771176342580, -0.433208836396466350, -0.433253900533568440, -0.433298963587535340, -0.433344025558254850, -0.433389086445614360, -0.433434146249501500, -0.433479204969802860, +-0.433524262606406200, -0.433569319159199330, -0.433614374628068730, -0.433659429012902220, -0.433704482313587100, -0.433749534530011190, -0.433794585662061030, -0.433839635709624470, +-0.433884684672588780, -0.433929732550841770, -0.433974779344270030, -0.434019825052761320, -0.434064869676203060, -0.434109913214483060, -0.434154955667487850, -0.434199997035105260, +-0.434245037317223080, -0.434290076513727920, -0.434335114624507520, -0.434380151649449380, -0.434425187588440840, -0.434470222441369740, -0.434515256208122700, -0.434560288888587500, +-0.434605320482651940, -0.434650350990202720, -0.434695380411127650, -0.434740408745314060, -0.434785435992649900, -0.434830462153021740, -0.434875487226317410, -0.434920511212424420, +-0.434965534111230460, -0.435010555922622330, -0.435055576646487810, -0.435100596282714300, -0.435145614831189740, -0.435190632291800720, -0.435235648664435150, -0.435280663948980850, +-0.435325678145324470, -0.435370691253353930, -0.435415703272956640, -0.435460714204020050, -0.435505724046432120, -0.435550732800079500, -0.435595740464850000, -0.435640747040631600, +-0.435685752527310900, -0.435730756924775810, -0.435775760232913870, -0.435820762451612890, -0.435865763580759620, -0.435910763620241950, -0.435955762569947340, -0.436000760429763770, +-0.436045757199577830, -0.436090752879277570, -0.436135747468750390, -0.436180740967884230, -0.436225733376565840, -0.436270724694683140, -0.436315714922124010, -0.436360704058775140, +-0.436405692104524570, -0.436450679059259770, -0.436495664922868620, -0.436540649695237980, -0.436585633376255670, -0.436630615965809320, -0.436675597463786760, -0.436720577870074840, +-0.436765557184561500, -0.436810535407134220, -0.436855512537681070, -0.436900488576088710, -0.436945463522245110, -0.436990437376038270, -0.437035410137354920, -0.437080381806083000, +-0.437125352382110200, -0.437170321865324010, -0.437215290255612400, -0.437260257552862130, -0.437305223756961290, -0.437350188867797750, -0.437395152885258320, -0.437440115809231030, +-0.437485077639603430, -0.437530038376263590, -0.437574998019098220, -0.437619956567995350, -0.437664914022842580, -0.437709870383527930, -0.437754825649938230, -0.437799779821961440, +-0.437844732899485220, -0.437889684882397550, -0.437934635770585280, -0.437979585563936400, -0.438024534262339000, -0.438069481865679840, -0.438114428373846950, -0.438159373786728030, +-0.438204318104210680, -0.438249261326182860, -0.438294203452531560, -0.438339144483144760, -0.438384084417910440, -0.438429023256715570, -0.438473960999448080, -0.438518897645995720, +-0.438563833196246530, -0.438608767650087330, -0.438653701007406250, -0.438698633268090890, -0.438743564432029330, -0.438788494499108510, -0.438833423469216390, -0.438878351342240740, +-0.438923278118069640, -0.438968203796589910, -0.439013128377689690, -0.439058051861257010, -0.439102974247178870, -0.439147895535343220, -0.439192815725637900, -0.439237734817950860, +-0.439282652812169160, -0.439327569708180820, -0.439372485505873490, -0.439417400205135420, -0.439462313805853430, -0.439507226307915610, -0.439552137711209770, -0.439597048015623990, +-0.439641957221045150, -0.439686865327361450, -0.439731772334460980, -0.439776678242230710, -0.439821583050558680, -0.439866486759332760, -0.439911389368440600, -0.439956290877770330, +-0.440001191287208990, -0.440046090596644620, -0.440090988805965480, -0.440135885915058420, -0.440180781923811660, -0.440225676832112940, -0.440270570639850420, -0.440315463346911130, +-0.440360354953183100, -0.440405245458554250, -0.440450134862912620, -0.440495023166145310, -0.440539910368140440, -0.440584796468785790, -0.440629681467969550, -0.440674565365578700, +-0.440719448161501380, -0.440764329855625910, -0.440809210447839220, -0.440854089938029440, -0.440898968326084490, -0.440943845611892150, -0.440988721795340540, -0.441033596876316710, +-0.441078470854708920, -0.441123343730405350, -0.441168215503293050, -0.441213086173260160, -0.441257955740194550, -0.441302824203984480, -0.441347691564516980, -0.441392557821680190, +-0.441437422975362040, -0.441482287025450730, -0.441527149971833290, -0.441572011814397980, -0.441616872553032670, -0.441661732187625560, -0.441706590718063670, -0.441751448144235390, +-0.441796304466028860, -0.441841159683331150, -0.441886013796030540, -0.441930866804014890, -0.441975718707172500, -0.442020569505390370, -0.442065419198556850, -0.442110267786559820, +-0.442155115269287470, -0.442199961646626890, -0.442244806918466460, -0.442289651084694040, -0.442334494145197880, -0.442379336099865070, -0.442424176948583880, -0.442469016691242720, +-0.442513855327728580, -0.442558692857929810, -0.442603529281734300, -0.442648364599029950, -0.442693198809705090, -0.442738031913646910, -0.442782863910743560, -0.442827694800883460, +-0.442872524583953760, -0.442917353259842770, -0.442962180828438360, -0.443007007289628880, -0.443051832643301500, -0.443096656889344580, -0.443141480027645970, -0.443186302058094060, +-0.443231122980575990, -0.443275942794980120, -0.443320761501194430, -0.443365579099107180, -0.443410395588605620, -0.443455210969578070, -0.443500025241912900, -0.443544838405497240, +-0.443589650460219480, -0.443634461405967630, -0.443679271242629570, -0.443724079970093780, -0.443768887588247400, -0.443813694096978790, -0.443858499496176280, -0.443903303785727230, +-0.443948106965519840, -0.443992909035442200, -0.444037709995382720, -0.444082509845228510, -0.444127308584868100, -0.444172106214189790, -0.444216902733080790, -0.444261698141429520, +-0.444306492439124010, -0.444351285626052310, -0.444396077702102770, -0.444440868667162650, -0.444485658521120370, -0.444530447263864310, -0.444575234895281720, -0.444620021415261080, +-0.444664806823690360, -0.444709591120458050, -0.444754374305451390, -0.444799156378558710, -0.444843937339668210, -0.444888717188668240, -0.444933495925446070, -0.444978273549890170, +-0.445023050061888580, -0.445067825461329780, -0.445112599748101020, -0.445157372922090730, -0.445202144983187440, -0.445246915931278350, -0.445291685766252000, -0.445336454487996470, +-0.445381222096399740, -0.445425988591350410, -0.445470753972735670, -0.445515518240444050, -0.445560281394364040, -0.445605043434382900, -0.445649804360389200, -0.445694564172270940, +-0.445739322869916690, -0.445784080453213770, -0.445828836922050610, -0.445873592276315340, -0.445918346515896510, -0.445963099640681430, -0.446007851650558620, -0.446052602545416120, +-0.446097352325142580, -0.446142100989625200, -0.446186848538752570, -0.446231594972413270, -0.446276340290494570, -0.446321084492884990, -0.446365827579472680, -0.446410569550145850, +-0.446455310404792970, -0.446500050143301460, -0.446544788765559750, -0.446589526271456540, -0.446634262660879080, -0.446678997933715960, -0.446723732089855330, -0.446768465129185830, +-0.446813197051594720, -0.446857927856970650, -0.446902657545202090, -0.446947386116176570, -0.446992113569782520, -0.447036839905908200, -0.447081565124441800, -0.447126289225271920, +-0.447171012208285870, -0.447215734073372280, -0.447260454820419760, -0.447305174449315720, -0.447349892959948760, -0.447394610352207070, -0.447439326625979240, -0.447484041781152640, +-0.447528755817616030, -0.447573468735257440, -0.447618180533965630, -0.447662891213627960, -0.447707600774133070, -0.447752309215369180, -0.447797016537224920, -0.447841722739587720, +-0.447886427822346170, -0.447931131785389010, -0.447975834628603580, -0.448020536351878550, -0.448065236955102250, -0.448109936438162770, -0.448154634800948910, -0.448199332043348050, +-0.448244028165248830, -0.448288723166540000, -0.448333417047108940, -0.448378109806844280, -0.448422801445634400, -0.448467491963367940, -0.448512181359932320, -0.448556869635216240, +-0.448601556789107960, -0.448646242821496230, -0.448690927732268490, -0.448735611521313420, -0.448780294188519340, -0.448824975733774890, -0.448869656156967610, -0.448914335457986200, +-0.448959013636719360, -0.449003690693054570, -0.449048366626880580, -0.449093041438085650, -0.449137715126558530, -0.449182387692186710, -0.449227059134858940, -0.449271729454463480, +-0.449316398650889130, -0.449361066724023370, -0.449405733673754970, -0.449450399499972230, -0.449495064202563850, -0.449539727781417490, -0.449584390236421720, -0.449629051567465410, +-0.449673711774436100, -0.449718370857222490, -0.449763028815712950, -0.449807685649795840, -0.449852341359359920, -0.449896995944292720, -0.449941649404483060, -0.449986301739819680, +-0.450030952950190130, -0.450075603035483160, -0.450120251995587250, -0.450164899830391100, -0.450209546539782290, -0.450254192123649590, -0.450298836581881410, -0.450343479914366570, +-0.450388122120992610, -0.450432763201648380, -0.450477403156222200, -0.450522041984602940, -0.450566679686678130, -0.450611316262336690, -0.450655951711467330, -0.450700586033957680, +-0.450745219229696570, -0.450789851298572410, -0.450834482240473620, -0.450879112055289020, -0.450923740742906250, -0.450968368303214130, -0.451012994736101460, -0.451057620041455940, +-0.451102244219166340, -0.451146867269121180, -0.451191489191209220, -0.451236109985318160, -0.451280729651336750, -0.451325348189153600, -0.451369965598657440, -0.451414581879735990, +-0.451459197032278050, -0.451503811056172160, -0.451548423951307120, -0.451593035717570590, -0.451637646354851540, -0.451682255863038730, -0.451726864242019910, -0.451771471491683900, +-0.451816077611919220, -0.451860682602614750, -0.451905286463658130, -0.451949889194938340, -0.451994490796343850, -0.452039091267763480, -0.452083690609084990, -0.452128288820197290, +-0.452172885900988920, -0.452217481851348630, -0.452262076671164300, -0.452306670360324790, -0.452351262918718970, -0.452395854346234580, -0.452440444642760620, -0.452485033808185500, +-0.452529621842397810, -0.452574208745286420, -0.452618794516739200, -0.452663379156644900, -0.452707962664892600, -0.452752545041369970, -0.452797126285966020, -0.452841706398569240, +-0.452886285379068550, -0.452930863227351820, -0.452975439943307860, -0.453020015526825360, -0.453064589977793200, -0.453109163296099130, -0.453153735481632180, -0.453198306534280890, +-0.453242876453934240, -0.453287445240480040, -0.453332012893807150, -0.453376579413804660, -0.453421144800360330, -0.453465709053363140, -0.453510272172701680, -0.453554834158264530, +-0.453599395009940680, -0.453643954727617980, -0.453688513311185370, -0.453733070760531820, -0.453777627075545250, -0.453822182256114650, -0.453866736302128540, -0.453911289213476010, +-0.453955840990044880, -0.454000391631724120, -0.454044941138402380, -0.454089489509968690, -0.454134036746310870, -0.454178582847317940, -0.454223127812878600, -0.454267671642881840, +-0.454312214337215470, -0.454356755895768570, -0.454401296318430180, -0.454445835605088170, -0.454490373755631500, -0.454534910769949010, -0.454579446647929540, -0.454623981389461140, +-0.454668514994432730, -0.454713047462733060, -0.454757578794251160, -0.454802108988874910, -0.454846638046493390, -0.454891165966995250, -0.454935692750269630, -0.454980218396204390, +-0.455024742904688580, -0.455069266275611280, -0.455113788508860470, -0.455158309604325180, -0.455202829561894120, -0.455247348381455970, -0.455291866062899840, -0.455336382606113640, +-0.455380898010986520, -0.455425412277407520, -0.455469925405264600, -0.455514437394446860, -0.455558948244843050, -0.455603457956342270, -0.455647966528832440, -0.455692473962202690, +-0.455736980256341740, -0.455781485411138780, -0.455825989426481670, -0.455870492302259570, -0.455914994038361280, -0.455959494634675890, -0.456003994091091380, -0.456048492407496840, +-0.456092989583781530, -0.456137485619833300, -0.456181980515541370, -0.456226474270794490, -0.456270966885481410, -0.456315458359491330, -0.456359948692712240, -0.456404437885033210, +-0.456448925936343510, -0.456493412846531110, -0.456537898615485160, -0.456582383243094470, -0.456626866729248240, -0.456671349073834440, -0.456715830276742230, -0.456760310337860850, +-0.456804789257078350, -0.456849267034283860, -0.456893743669366190, -0.456938219162214110, -0.456982693512716920, -0.457027166720762660, -0.457071638786240410, -0.457116109709039490, +-0.457160579489047870, -0.457205048126154810, -0.457249515620249130, -0.457293981971220060, -0.457338447178955660, -0.457382911243345120, -0.457427374164277310, -0.457471835941641480, +-0.457516296575325660, -0.457560756065219070, -0.457605214411210600, -0.457649671613189480, -0.457694127671043840, -0.457738582584662820, -0.457783036353935750, -0.457827488978750700, +-0.457871940458996930, -0.457916390794563310, -0.457960839985338760, -0.458005288031212430, -0.458049734932072520, -0.458094180687808270, -0.458138625298308950, -0.458183068763462710, +-0.458227511083158730, -0.458271952257286060, -0.458316392285733840, -0.458360831168390270, -0.458405268905144600, -0.458449705495885820, -0.458494140940503110, -0.458538575238884640, +-0.458583008390919760, -0.458627440396497390, -0.458671871255506790, -0.458716300967836110, -0.458760729533374660, -0.458805156952011790, -0.458849583223635670, -0.458894008348135540, +-0.458938432325400440, -0.458982855155319220, -0.459027276837781270, -0.459071697372674730, -0.459116116759888950, -0.459160534999313310, -0.459204952090835890, -0.459249368034346070, +-0.459293782829732880, -0.459338196476885620, -0.459382608975692440, -0.459427020326042770, -0.459471430527825960, -0.459515839580930120, -0.459560247485244710, -0.459604654240658720, +-0.459649059847061060, -0.459693464304341160, -0.459737867612387160, -0.459782269771088550, -0.459826670780334620, -0.459871070640013650, -0.459915469350014980, -0.459959866910227670, +-0.460004263320541060, -0.460048658580843370, -0.460093052691024070, -0.460137445650972140, -0.460181837460576950, -0.460226228119726850, -0.460270617628311120, -0.460315005986218880, +-0.460359393193339460, -0.460403779249561220, -0.460448164154773520, -0.460492547908865790, -0.460536930511726340, -0.460581311963244480, -0.460625692263309410, -0.460670071411810100, +-0.460714449408635980, -0.460758826253675370, -0.460803201946817680, -0.460847576487952380, -0.460891949876967740, -0.460936322113753240, -0.460980693198197900, -0.461025063130191260, +-0.461069431909621570, -0.461113799536378320, -0.461158166010350530, -0.461202531331427690, -0.461246895499498210, -0.461291258514451410, -0.461335620376176540, -0.461379981084562960, +-0.461424340639499050, -0.461468699040874290, -0.461513056288578140, -0.461557412382499030, -0.461601767322526340, -0.461646121108549250, -0.461690473740457240, -0.461734825218138630, +-0.461779175541482960, -0.461823524710379410, -0.461867872724717410, -0.461912219584385330, -0.461956565289272700, -0.462000909839268610, -0.462045253234262710, -0.462089595474143240, +-0.462133936558799810, -0.462178276488121930, -0.462222615261997980, -0.462266952880317440, -0.462311289342969560, -0.462355624649843480, -0.462399958800828680, -0.462444291795813590, +-0.462488623634687790, -0.462532954317340820, -0.462577283843661090, -0.462621612213538150, -0.462665939426861180, -0.462710265483519730, -0.462754590383402220, -0.462798914126398230, +-0.462843236712397020, -0.462887558141288010, -0.462931878412959800, -0.462976197527301850, -0.463020515484203420, -0.463064832283554110, -0.463109147925242270, -0.463153462409157610, +-0.463197775735189670, -0.463242087903226910, -0.463286398913158930, -0.463330708764874980, -0.463375017458264200, -0.463419324993216310, -0.463463631369619710, -0.463507936587364000, +-0.463552240646338880, -0.463596543546432700, -0.463640845287535240, -0.463685145869535630, -0.463729445292323570, -0.463773743555787490, -0.463818040659817020, -0.463862336604301480, +-0.463906631389130520, -0.463950925014192550, -0.463995217479377280, -0.464039508784573950, -0.464083798929672280, -0.464128087914560670, -0.464172375739128900, -0.464216662403266530, +-0.464260947906862120, -0.464305232249805360, -0.464349515431985550, -0.464393797453292290, -0.464438078313614170, -0.464482358012840820, -0.464526636550861630, -0.464570913927566160, +-0.464615190142843080, -0.464659465196582020, -0.464703739088672300, -0.464748011819003600, -0.464792283387464480, -0.464836553793944670, -0.464880823038333830, -0.464925091120520610, +-0.464969358040394630, -0.465013623797845220, -0.465057888392761800, -0.465102151825034000, -0.465146414094550490, -0.465190675201200890, -0.465234935144875020, -0.465279193925461410, +-0.465323451542849820, -0.465367707996929610, -0.465411963287590490, -0.465456217414721100, -0.465500470378211180, -0.465544722177950070, -0.465588972813827550, -0.465633222285732230, +-0.465677470593553800, -0.465721717737181740, -0.465765963716505750, -0.465810208531414470, -0.465854452181797660, -0.465898694667545080, -0.465942935988545410, -0.465987176144688430, +-0.466031415135863440, -0.466075652961959960, -0.466119889622867770, -0.466164125118475380, -0.466208359448672730, -0.466252592613349560, -0.466296824612394520, -0.466341055445697430, +-0.466385285113147700, -0.466429513614635140, -0.466473740950048400, -0.466517967119277340, -0.466562192122211340, -0.466606415958740250, -0.466650638628752720, -0.466694860132138570, +-0.466739080468787320, -0.466783299638588720, -0.466827517641431490, -0.466871734477205480, -0.466915950145800560, -0.466960164647105320, -0.467004377981009690, -0.467048590147403130, +-0.467092801146175460, -0.467137010977215380, -0.467181219640412810, -0.467225427135657180, -0.467269633462838340, -0.467313838621845060, -0.467358042612567190, -0.467402245434894230, +-0.467446447088716020, -0.467490647573921280, -0.467534846890399920, -0.467579045038041870, -0.467623242016735830, -0.467667437826371660, -0.467711632466838890, -0.467755825938027000, +-0.467800018239826030, -0.467844209372124560, -0.467888399334812580, -0.467932588127779990, -0.467976775750915560, -0.468020962204109160, -0.468065147487250370, -0.468109331600229110, +-0.468153514542934080, -0.468197696315255320, -0.468241876917082300, -0.468286056348305000, -0.468330234608812120, -0.468374411698493700, -0.468418587617239260, -0.468462762364938720, +-0.468506935941480850, -0.468551108346755670, -0.468595279580653110, -0.468639449643061980, -0.468683618533872190, -0.468727786252973400, -0.468771952800255130, -0.468816118175607310, +-0.468860282378918860, -0.468904445410079700, -0.468948607268979800, -0.468992767955508040, -0.469036927469554330, -0.469081085811008270, -0.469125242979759940, -0.469169398975698090, +-0.469213553798712710, -0.469257707448693880, -0.469301859925530360, -0.469346011229112180, -0.469390161359329040, -0.469434310316070410, -0.469478458099226450, -0.469522604708685950, +-0.469566750144338960, -0.469610894406075450, -0.469655037493784290, -0.469699179407355560, -0.469743320146678910, -0.469787459711644320, -0.469831598102140700, -0.469875735318058100, +-0.469919871359286150, -0.469964006225714880, -0.470008139917233230, -0.470052272433731270, -0.470096403775098590, -0.470140533941225290, -0.470184662932000290, -0.470228790747313610, +-0.470272917387055340, -0.470317042851114360, -0.470361167139380810, -0.470405290251744320, -0.470449412188094660, -0.470493532948321800, -0.470537652532314780, -0.470581770939963560, +-0.470625888171158360, -0.470670004225787970, -0.470714119103742670, -0.470758232804912020, -0.470802345329186190, -0.470846456676454080, -0.470890566846605850, -0.470934675839531190, +-0.470978783655120250, -0.471022890293261940, -0.471066995753846420, -0.471111100036763430, -0.471155203141903070, -0.471199305069154250, -0.471243405818407230, -0.471287505389552110, +-0.471331603782477790, -0.471375700997074430, -0.471419797033231890, -0.471463891890839810, -0.471507985569788400, -0.471552078069966680, -0.471596169391264700, -0.471640259533572690, +-0.471684348496779700, -0.471728436280775820, -0.471772522885450800, -0.471816608310694940, -0.471860692556397120, -0.471904775622447540, -0.471948857508736500, -0.471992938215152870, +-0.472037017741586850, -0.472081096087928360, -0.472125173254067110, -0.472169249239893280, -0.472213324045295980, -0.472257397670165390, -0.472301470114391660, -0.472345541377863830, +-0.472389611460472200, -0.472433680362106530, -0.472477748082657080, -0.472521814622012810, -0.472565879980064050, -0.472609944156700550, -0.472654007151812610, -0.472698068965289260, +-0.472742129597020720, -0.472786189046896900, -0.472830247314807940, -0.472874304400642990, -0.472918360304292300, -0.472962415025646070, -0.473006468564593440, -0.473050520921024620, +-0.473094572094829520, -0.473138622085897960, -0.473182670894120250, -0.473226718519385470, -0.473270764961583930, -0.473314810220605840, -0.473358854296340340, -0.473402897188677670, +-0.473446938897507770, -0.473490979422720950, -0.473535018764206280, -0.473579056921854040, -0.473623093895554180, -0.473667129685196920, -0.473711164290671500, -0.473755197711868190, +-0.473799229948676850, -0.473843261000987840, -0.473887290868690250, -0.473931319551674450, -0.473975347049830800, -0.474019373363048340, -0.474063398491217420, -0.474107422434228040, +-0.474151445191970500, -0.474195466764333940, -0.474239487151208730, -0.474283506352484780, -0.474327524368052480, -0.474371541197800950, -0.474415556841620620, -0.474459571299401360, +-0.474503584571033530, -0.474547596656406390, -0.474591607555410240, -0.474635617267935520, -0.474679625793871300, -0.474723633133108060, -0.474767639285535670, -0.474811644251044220, +-0.474855648029524070, -0.474899650620864420, -0.474943652024955590, -0.474987652241688040, -0.475031651270950980, -0.475075649112634830, -0.475119645766629520, -0.475163641232825450, +-0.475207635511111950, -0.475251628601379320, -0.475295620503517650, -0.475339611217417300, -0.475383600742967540, -0.475427589080058780, -0.475471576228580990, -0.475515562188424720, +-0.475559546959479110, -0.475603530541634680, -0.475647512934781800, -0.475691494138809730, -0.475735474153608950, -0.475779452979069430, -0.475823430615081310, -0.475867407061535020, +-0.475911382318319810, -0.475955356385326160, -0.475999329262444480, -0.476043300949564100, -0.476087271446575480, -0.476131240753368660, -0.476175208869834170, -0.476219175795861260, +-0.476263141531340360, -0.476307106076161610, -0.476351069430215550, -0.476395031593391360, -0.476438992565579640, -0.476482952346670430, -0.476526910936554190, -0.476570868335120300, +-0.476614824542259290, -0.476658779557861570, -0.476702733381816510, -0.476746686014014600, -0.476790637454345970, -0.476834587702701150, -0.476878536758969520, -0.476922484623041490, +-0.476966431294807260, -0.477010376774157360, -0.477054321060981110, -0.477098264155169090, -0.477142206056611340, -0.477186146765198550, -0.477230086280819920, -0.477274024603366150, +-0.477317961732727670, -0.477361897668793890, -0.477405832411455400, -0.477449765960602290, -0.477493698316124760, -0.477537629477913450, -0.477581559445857620, -0.477625488219847850, +-0.477669415799774840, -0.477713342185527860, -0.477757267376997470, -0.477801191374074010, -0.477845114176647880, -0.477889035784608620, -0.477932956197846760, -0.477976875416252500, +-0.478020793439716480, -0.478064710268128020, -0.478108625901377820, -0.478152540339356060, -0.478196453581953340, -0.478240365629059080, -0.478284276480563930, -0.478328186136358470, +-0.478372094596332180, -0.478416001860375580, -0.478459907928379060, -0.478503812800232740, -0.478547716475827280, -0.478591618955052090, -0.478635520237797930, -0.478679420323955330, +-0.478723319213413770, -0.478767216906063940, -0.478811113401796050, -0.478855008700500740, -0.478898902802067540, -0.478942795706387090, -0.478986687413349650, -0.479030577922845920, +-0.479074467234765320, -0.479118355348998550, -0.479162242265435860, -0.479206127983968000, -0.479250012504484400, -0.479293895826875820, -0.479337777951032830, -0.479381658876845030, +-0.479425538604203120, -0.479469417132997340, -0.479513294463117970, -0.479557170594455790, -0.479601045526900300, -0.479644919260342200, -0.479688791794672160, -0.479732663129779800, +-0.479776533265555750, -0.479820402201890370, -0.479864269938674370, -0.479908136475797330, -0.479952001813149950, -0.479995865950622940, -0.480039728888105870, -0.480083590625489500, +-0.480127451162664090, -0.480171310499520110, -0.480215168635948260, -0.480259025571838080, -0.480302881307080320, -0.480346735841565730, -0.480390589175183960, -0.480434441307825700, +-0.480478292239381320, -0.480522141969741190, -0.480565990498796110, -0.480609837826435680, -0.480653683952551090, -0.480697528877031820, -0.480741372599768790, -0.480785215120652310, +-0.480829056439572740, -0.480872896556421010, -0.480916735471086600, -0.480960573183460360, -0.481004409693433050, -0.481048245000894330, -0.481092079105735040, -0.481135912007845500, +-0.481179743707116250, -0.481223574203437980, -0.481267403496700390, -0.481311231586794290, -0.481355058473610490, -0.481398884157038690, -0.481442708636969640, -0.481486531913293820, +-0.481530353985902100, -0.481574174854684070, -0.481617994519530630, -0.481661812980332560, -0.481705630236979600, -0.481749446289362560, -0.481793261137371920, -0.481837074780898100, +-0.481880887219831970, -0.481924698454063270, -0.481968508483482770, -0.482012317307981440, -0.482056124927448930, -0.482099931341776090, -0.482143736550853410, -0.482187540554571410, +-0.482231343352820920, -0.482275144945491730, -0.482318945332474600, -0.482362744513660570, -0.482406542488939270, -0.482450339258201580, -0.482494134821338070, -0.482537929178239620, +-0.482581722328795980, -0.482625514272898020, -0.482669305010436640, -0.482713094541301620, -0.482756882865383820, -0.482800669982573870, -0.482844455892762260, -0.482888240595839850, +-0.482932024091696440, -0.482975806380223030, -0.483019587461310460, -0.483063367334848560, -0.483107146000728180, -0.483150923458839980, -0.483194699709074470, -0.483238474751322590, +-0.483282248585474140, -0.483326021211420430, -0.483369792629051330, -0.483413562838257700, -0.483457331838930190, -0.483501099630959390, -0.483544866214236150, -0.483588631588650400, +-0.483632395754093060, -0.483676158710455160, -0.483719920457626410, -0.483763680995497880, -0.483807440323960170, -0.483851198442903860, -0.483894955352219940, -0.483938711051798200, +-0.483982465541529740, -0.484026218821305480, -0.484069970891015280, -0.484113721750550120, -0.484157471399800700, -0.484201219838657990, -0.484244967067011810, -0.484288713084753240, +-0.484332457891773320, -0.484376201487961790, -0.484419943873209800, -0.484463685047407940, -0.484507425010446860, -0.484551163762217630, -0.484594901302610070, -0.484638637631515270, +-0.484682372748824250, -0.484726106654426950, -0.484769839348214330, -0.484813570830077150, -0.484857301099906050, -0.484901030157592060, -0.484944758003025110, -0.484988484636096670, +-0.485032210056696610, -0.485075934264716010, -0.485119657260045630, -0.485163379042576060, -0.485207099612198430, -0.485250818968802730, -0.485294537112279930, -0.485338254042521180, +-0.485381969759416390, -0.485425684262856700, -0.485469397552732770, -0.485513109628935400, -0.485556820491355570, -0.485600530139883360, -0.485644238574409800, -0.485687945794826050, +-0.485731651801022070, -0.485775356592888900, -0.485819060170317400, -0.485862762533198600, -0.485906463681422480, -0.485950163614880250, -0.485993862333462980, -0.486037559837060650, +-0.486081256125564460, -0.486124951198865120, -0.486168645056853370, -0.486212337699420400, -0.486256029126456210, -0.486299719337851990, -0.486343408333498820, -0.486387096113286730, +-0.486430782677106930, -0.486474468024850120, -0.486518152156407200, -0.486561835071669280, -0.486605516770526330, -0.486649197252869650, -0.486692876518590330, -0.486736554567578470, +-0.486780231399725150, -0.486823907014921340, -0.486867581413058080, -0.486911254594025510, -0.486954926557714830, -0.486998597304017180, -0.487042266832822650, -0.487085935144022490, +-0.487129602237507450, -0.487173268113168410, -0.487216932770896620, -0.487260596210582100, -0.487304258432116060, -0.487347919435389800, -0.487391579220293360, -0.487435237786717930, +-0.487478895134554390, -0.487522551263693650, -0.487566206174026960, -0.487609859865444310, -0.487653512337837440, -0.487697163591096330, -0.487740813625112350, -0.487784462439776360, +-0.487828110034979220, -0.487871756410612150, -0.487915401566565320, -0.487959045502730000, -0.488002688218997450, -0.488046329715257740, -0.488089969991402250, -0.488133609047321840, +-0.488177246882907420, -0.488220883498050260, -0.488264518892640500, -0.488308153066569440, -0.488351786019728400, -0.488395417752007450, -0.488439048263297980, -0.488482677553490950, +-0.488526305622477560, -0.488569932470148020, -0.488613558096393670, -0.488657182501105790, -0.488700805684174570, -0.488744427645491360, -0.488788048384947050, -0.488831667902432650, +-0.488875286197839490, -0.488918903271057640, -0.488962519121978580, -0.489006133750493620, -0.489049747156492960, -0.489093359339867860, -0.489136970300509450, -0.489180580038308550, +-0.489224188553156640, -0.489267795844943840, -0.489311401913561540, -0.489355006758901090, -0.489398610380852810, -0.489442212779307990, -0.489485813954157580, -0.489529413905293090, +-0.489573012632604660, -0.489616610135983680, -0.489660206415321540, -0.489703801470508570, -0.489747395301436020, -0.489790987907995020, -0.489834579290076570, -0.489878169447572010, +-0.489921758380371660, -0.489965346088366950, -0.490008932571449230, -0.490052517829508820, -0.490096101862437070, -0.490139684670125090, -0.490183266252463890, -0.490226846609344900, +-0.490270425740658430, -0.490314003646296290, -0.490357580326148730, -0.490401155780107230, -0.490444730008062880, -0.490488303009906650, -0.490531874785530060, -0.490575445334823390, +-0.490619014657678100, -0.490662582753985720, -0.490706149623636460, -0.490749715266521780, -0.490793279682532890, -0.490836842871560760, -0.490880404833496930, -0.490923965568231650, +-0.490967525075656500, -0.491011083355662900, -0.491054640408141230, -0.491098196232982950, -0.491141750830079220, -0.491185304199321440, -0.491228856340600040, -0.491272407253806500, +-0.491315956938832290, -0.491359505395567830, -0.491403052623904660, -0.491446598623733800, -0.491490143394946450, -0.491533686937434100, -0.491577229251087210, -0.491620770335797210, +-0.491664310191455680, -0.491707848817952990, -0.491751386215180660, -0.491794922383029850, -0.491838457321391750, -0.491881991030157950, -0.491925523509218750, -0.491969054758465700, +-0.492012584777790420, -0.492056113567083340, -0.492099641126235940, -0.492143167455139420, -0.492186692553685410, -0.492230216421764230, -0.492273739059267520, -0.492317260466086930, +-0.492360780642112690, -0.492404299587236580, -0.492447817301349680, -0.492491333784343230, -0.492534849036108830, -0.492578363056536960, -0.492621875845519200, -0.492665387402947070, +-0.492708897728711130, -0.492752406822702940, -0.492795914684813710, -0.492839421314934690, -0.492882926712957530, -0.492926430878772640, -0.492969933812272110, -0.493013435513346310, +-0.493056935981886930, -0.493100435217785240, -0.493143933220932420, -0.493187429991220170, -0.493230925528538980, -0.493274419832780480, -0.493317912903836250, -0.493361404741596900, +-0.493404895345954050, -0.493448384716798970, -0.493491872854022910, -0.493535359757517500, -0.493578845427173400, -0.493622329862882130, -0.493665813064535440, -0.493709295032023820, +-0.493752775765238960, -0.493796255264072170, -0.493839733528415150, -0.493883210558158370, -0.493926686353193590, -0.493970160913412450, -0.494013634238705530, -0.494057106328964550, +-0.494100577184080790, -0.494144046803945640, -0.494187515188450670, -0.494230982337486580, -0.494274448250945020, -0.494317912928717740, -0.494361376370695270, -0.494404838576769370, +-0.494448299546831340, -0.494491759280772600, -0.494535217778484860, -0.494578675039858640, -0.494622131064785810, -0.494665585853157950, -0.494709039404865770, -0.494752491719801010, +-0.494795942797855050, -0.494839392638919570, -0.494882841242885230, -0.494926288609643770, -0.494969734739087010, -0.495013179631105530, -0.495056623285591080, -0.495100065702435090, +-0.495143506881528920, -0.495186946822764370, -0.495230385526032050, -0.495273822991223800, -0.495317259218231390, -0.495360694206945400, -0.495404127957257690, -0.495447560469059690, +-0.495490991742242760, -0.495534421776698760, -0.495577850572318290, -0.495621278128993590, -0.495664704446615310, -0.495708129525075260, -0.495751553364264910, -0.495794975964075680, +-0.495838397324399380, -0.495881817445126660, -0.495925236326149430, -0.495968653967359560, -0.496012070368647580, -0.496055485529905470, -0.496098899451024640, -0.496142312131896520, +-0.496185723572413080, -0.496229133772464910, -0.496272542731943880, -0.496315950450741890, -0.496359356928749660, -0.496402762165859050, -0.496446166161961520, -0.496489568916948950, +-0.496532970430712040, -0.496576370703142760, -0.496619769734132910, -0.496663167523573260, -0.496706564071355720, -0.496749959377371710, -0.496793353441512820, -0.496836746263670970, +-0.496880137843736860, -0.496923528181602350, -0.496966917277159470, -0.497010305130298870, -0.497053691740912520, -0.497097077108891950, -0.497140461234128690, -0.497183844116514670, +-0.497227225755940640, -0.497270606152298900, -0.497313985305480320, -0.497357363215376710, -0.497400739881879770, -0.497444115304880920, -0.497487489484272180, -0.497530862419944320, +-0.497574234111789360, -0.497617604559699170, -0.497660973763564550, -0.497704341723277540, -0.497747708438729620, -0.497791073909812480, -0.497834438136418030, -0.497877801118437100, +-0.497921162855761660, -0.497964523348283730, -0.498007882595894070, -0.498051240598484710, -0.498094597355947240, -0.498137952868173690, -0.498181307135054870, -0.498224660156482760, +-0.498268011932349380, -0.498311362462545590, -0.498354711746963440, -0.498398059785494450, -0.498441406578030380, -0.498484752124463140, -0.498528096424683600, -0.498571439478583840, +-0.498614781286055910, -0.498658121846990600, -0.498701461161280000, -0.498744799228815710, -0.498788136049489460, -0.498831471623193250, -0.498874805949817980, -0.498918139029255690, +-0.498961470861398420, -0.499004801446137130, -0.499048130783363800, -0.499091458872970130, -0.499134785714848260, -0.499178111308889010, -0.499221435654984450, -0.499264758753026730, +-0.499308080602906710, -0.499351401204516490, -0.499394720557747750, -0.499438038662492260, -0.499481355518642030, -0.499524671126088000, -0.499567985484722310, -0.499611298594437040, +-0.499654610455123160, -0.499697921066672710, -0.499741230428977500, -0.499784538541929220, -0.499827845405419970, -0.499871151019340710, -0.499914455383583920, -0.499957758498040640, +-0.500001060362602940, -0.500044360977162650, -0.500087660341611450, -0.500130958455841430, -0.500174255319743690, -0.500217550933210300, -0.500260845296133350, -0.500304138408403930, +-0.500347430269914240, -0.500390720880555920, -0.500434010240220830, -0.500477298348801060, -0.500520585206187580, -0.500563870812272830, -0.500607155166948650, -0.500650438270106250, +-0.500693720121637710, -0.500737000721434900, -0.500780280069389900, -0.500823558165393920, -0.500866835009339040, -0.500910110601117450, -0.500953384940620140, -0.500996658027739410, +-0.501039929862367010, -0.501083200444394810, -0.501126469773715000, -0.501169737850218570, -0.501213004673797920, -0.501256270244345050, -0.501299534561751140, -0.501342797625908390, +-0.501386059436708660, -0.501429319994043720, -0.501472579297805980, -0.501515837347886300, -0.501559094144177100, -0.501602349686570470, -0.501645603974957610, -0.501688857009230830, +-0.501732108789281760, -0.501775359315002940, -0.501818608586285240, -0.501861856603021070, -0.501905103365102630, -0.501948348872421010, -0.501991593124868630, -0.502034836122337120, +-0.502078077864718590, -0.502121318351905320, -0.502164557583788310, -0.502207795560259850, -0.502251032281212370, -0.502294267746536850, -0.502337501956125700, -0.502380734909870790, +-0.502423966607664090, -0.502467197049397800, -0.502510426234963110, -0.502553654164252790, -0.502596880837157920, -0.502640106253570920, -0.502683330413383640, -0.502726553316487970, +-0.502769774962776310, -0.502812995352139860, -0.502856214484470930, -0.502899432359661840, -0.502942648977603770, -0.502985864338189040, -0.503029078441309730, -0.503072291286857600, +-0.503115502874725280, -0.503158713204803760, -0.503201922276985460, -0.503245130091162670, -0.503288336647226720, -0.503331541945069900, -0.503374745984584320, -0.503417948765662150, +-0.503461150288194830, -0.503504350552074540, -0.503547549557193830, -0.503590747303443780, -0.503633943790716910, -0.503677139018905210, -0.503720332987900640, -0.503763525697595640, +-0.503806717147881390, -0.503849907338650320, -0.503893096269794950, -0.503936283941206490, -0.503979470352777240, -0.504022655504399290, -0.504065839395964720, -0.504109022027365960, +-0.504152203398494310, -0.504195383509242090, -0.504238562359501820, -0.504281739949164700, -0.504324916278123260, -0.504368091346269590, -0.504411265153495990, -0.504454437699693890, +-0.504497608984755710, -0.504540779008573860, -0.504583947771039760, -0.504627115272045730, -0.504670281511483850, -0.504713446489246320, -0.504756610205225550, -0.504799772659312860, +-0.504842933851400780, -0.504886093781381720, -0.504929252449147100, -0.504972409854589240, -0.505015565997600450, -0.505058720878072690, -0.505101874495898610, -0.505145026850969290, +-0.505188177943177940, -0.505231327772415750, -0.505274476338575140, -0.505317623641548420, -0.505360769681227560, -0.505403914457505210, -0.505447057970272670, -0.505490200219422590, +-0.505533341204847280, -0.505576480926438250, -0.505619619384088060, -0.505662756577688780, -0.505705892507132600, -0.505749027172312180, -0.505792160573118710, -0.505835292709444830, +-0.505878423581183070, -0.505921553188224960, -0.505964681530462920, -0.506007808607789160, -0.506050934420096300, -0.506094058967275770, -0.506137182249220000, -0.506180304265821720, +-0.506223425016972260, -0.506266544502564250, -0.506309662722489890, -0.506352779676641380, -0.506395895364911250, -0.506439009787191030, -0.506482122943373250, -0.506525234833350660, +-0.506568345457014460, -0.506611454814257510, -0.506654562904971790, -0.506697669729049840, -0.506740775286383950, -0.506783879576865770, -0.506826982600387940, -0.506870084356843000, +-0.506913184846122470, -0.506956284068118990, -0.506999382022724880, -0.507042478709832540, -0.507085574129333750, -0.507128668281120910, -0.507171761165086890, -0.507214852781122990, +-0.507257943129121980, -0.507301032208976150, -0.507344120020577720, -0.507387206563819420, -0.507430291838592670, -0.507473375844790240, -0.507516458582304650, -0.507559540051027660, +-0.507602620250851790, -0.507645699181669240, -0.507688776843372550, -0.507731853235854350, -0.507774928359006060, -0.507818002212720890, -0.507861074796890240, -0.507904146111407000, +-0.507947216156163340, -0.507990284931051580, -0.508033352435964590, -0.508076418670793780, -0.508119483635431910, -0.508162547329771840, -0.508205609753704880, -0.508248670907124000, +-0.508291730789921400, -0.508334789401989400, -0.508377846743220840, -0.508420902813507380, -0.508463957612741550, -0.508507011140816310, -0.508550063397623100, -0.508593114383054770, +-0.508636164097003520, -0.508679212539362440, -0.508722259710022830, -0.508765305608877560, -0.508808350235819380, -0.508851393590740050, -0.508894435673532210, -0.508937476484088270, +-0.508980516022300660, -0.509023554288062010, -0.509066591281264190, -0.509109627001799960, -0.509152661449561950, -0.509195694624441920, -0.509238726526332730, -0.509281757155126580, +-0.509324786510716220, -0.509367814592994070, -0.509410841401852110, -0.509453866937183530, -0.509496891198879750, -0.509539914186833750, -0.509582935900938060, -0.509625956341084980, +-0.509668975507167390, -0.509711993399076910, -0.509755010016706530, -0.509798025359949000, -0.509841039428696070, -0.509884052222840390, -0.509927063742274700, -0.509970073986891310, +-0.510013082956583210, -0.510056090651241910, -0.510099097070760400, -0.510142102215031530, -0.510185106083947070, -0.510228108677399870, -0.510271109995282250, -0.510314110037486950, +-0.510357108803906830, -0.510400106294433440, -0.510443102508960190, -0.510486097447378830, -0.510529091109582220, -0.510572083495462900, -0.510615074604913400, -0.510658064437826460, +-0.510701052994094070, -0.510744040273609090, -0.510787026276264380, -0.510830011001951690, -0.510872994450563890, -0.510915976621993730, -0.510958957516133520, -0.511001937132876450, +-0.511044915472114060, -0.511087892533739320, -0.511130868317645310, -0.511173842823723800, -0.511216816051867640, -0.511259788001969360, -0.511302758673922050, -0.511345728067617470, +-0.511388696182948580, -0.511431663019808360, -0.511474628578088450, -0.511517592857682170, -0.511560555858481810, -0.511603517580380030, -0.511646478023269900, -0.511689437187043180, +-0.511732395071592850, -0.511775351676811870, -0.511818307002592230, -0.511861261048826680, -0.511904213815408070, -0.511947165302228950, -0.511990115509182280, -0.512033064436159920, +-0.512076012083055310, -0.512118958449760300, -0.512161903536167860, -0.512204847342170640, -0.512247789867661290, -0.512290731112532870, -0.512333671076677270, -0.512376609759987560, +-0.512419547162356600, -0.512462483283676380, -0.512505418123839980, -0.512548351682740040, -0.512591283960269210, -0.512634214956320670, -0.512677144670786070, -0.512720073103558600, +-0.512763000254531360, -0.512805926123596320, -0.512848850710646340, -0.512891774015574290, -0.512934696038273240, -0.512977616778634960, -0.513020536236552750, -0.513063454411919470, +-0.513106371304627330, -0.513149286914569070, -0.513192201241637780, -0.513235114285725880, -0.513278026046726570, -0.513320936524531810, -0.513363845719034710, -0.513406753630128440, +-0.513449660257704890, -0.513492565601657120, -0.513535469661878020, -0.513578372438260210, -0.513621273930696790, -0.513664174139079830, -0.513707073063302540, -0.513749970703257790, +-0.513792867058837870, -0.513835762129935760, -0.513878655916444220, -0.513921548418256320, -0.513964439635264280, -0.514007329567361170, -0.514050218214440080, -0.514093105576392980, +-0.514135991653113190, -0.514178876444493450, -0.514221759950426520, -0.514264642170805590, -0.514307523105522520, -0.514350402754470860, -0.514393281117543450, -0.514436158194632400, +-0.514479033985631110, -0.514521908490432110, -0.514564781708928390, -0.514607653641013020, -0.514650524286578200, -0.514693393645517470, -0.514736261717722910, -0.514779128503087600, +-0.514821994001504520, -0.514864858212866430, -0.514907721137066620, -0.514950582773997080, -0.514993443123551110, -0.515036302185621910, -0.515079159960101560, -0.515122016446883380, +-0.515164871645860110, -0.515207725556924620, -0.515250578179970220, -0.515293429514888990, -0.515336279561574240, -0.515379128319919060, -0.515421975789815750, -0.515464821971157510, +-0.515507666863837200, -0.515550510467748140, -0.515593352782782400, -0.515636193808833300, -0.515679033545794030, -0.515721871993556790, -0.515764709152015000, -0.515807545021061300, +-0.515850379600588770, -0.515893212890490730, -0.515936044890659250, -0.515978875600987650, -0.516021705021369240, -0.516064533151696200, -0.516107359991861750, -0.516150185541758950, +-0.516193009801280690, -0.516235832770320370, -0.516278654448769970, -0.516321474836523020, -0.516364293933472720, -0.516407111739511260, -0.516449928254532060, -0.516492743478428110, +-0.516535557411092580, -0.516578370052417800, -0.516621181402297180, -0.516663991460623920, -0.516706800227290210, -0.516749607702189580, -0.516792413885215020, -0.516835218776259260, +-0.516878022375215960, -0.516920824681977200, -0.516963625696436390, -0.517006425418486850, -0.517049223848020880, -0.517092020984931900, -0.517134816829112780, -0.517177611380456700, +-0.517220404638856880, -0.517263196604205720, -0.517305987276396980, -0.517348776655322860, -0.517391564740876770, -0.517434351532951810, -0.517477137031440940, -0.517519921236237690, +-0.517562704147234150, -0.517605485764323860, -0.517648266087400330, -0.517691045116355660, -0.517733822851083380, -0.517776599291476570, -0.517819374437428310, -0.517862148288831920, +-0.517904920845579820, -0.517947692107565420, -0.517990462074682250, -0.518033230746822390, -0.518075998123879500, -0.518118764205746650, -0.518161528992317270, -0.518204292483483650, +-0.518247054679139340, -0.518289815579177750, -0.518332575183491300, -0.518375333491973290, -0.518418090504517040, -0.518460846221015510, -0.518503600641362250, -0.518546353765449660, +-0.518589105593171170, -0.518631856124420310, -0.518674605359089380, -0.518717353297071910, -0.518760099938261110, -0.518802845282550160, -0.518845589329832270, -0.518888332080000180, +-0.518931073532947210, -0.518973813688566990, -0.519016552546751720, -0.519059290107395150, -0.519102026370390380, -0.519144761335630920, -0.519187495003009200, -0.519230227372418640, +-0.519272958443752990, -0.519315688216904550, -0.519358416691766860, -0.519401143868233110, -0.519443869746196500, -0.519486594325550670, -0.519529317606187920, -0.519572039588001910, +-0.519614760270886160, -0.519657479654733080, -0.519700197739436320, -0.519742914524889080, -0.519785630010984660, -0.519828344197616370, -0.519871057084676960, -0.519913768672060290, +-0.519956478959658800, -0.519999187947365990, -0.520041895635075300, -0.520084602022679920, -0.520127307110073380, -0.520170010897148210, -0.520212713383797930, -0.520255414569916420, +-0.520298114455395870, -0.520340813040130020, -0.520383510324012200, -0.520426206306935480, -0.520468900988793730, -0.520511594369479360, -0.520554286448886020, -0.520596977226907230, +-0.520639666703435760, -0.520682354878365010, -0.520725041751588400, -0.520767727322999590, -0.520810411592491080, -0.520853094559956540, -0.520895776225289600, -0.520938456588382890, +-0.520981135649130070, -0.521023813407424320, -0.521066489863159070, -0.521109165016228060, -0.521151838866523610, -0.521194511413939690, -0.521237182658369820, -0.521279852599706550, +-0.521322521237843730, -0.521365188572674660, -0.521407854604092560, -0.521450519331991160, -0.521493182756263110, -0.521535844876802050, -0.521578505693501840, -0.521621165206255010, +-0.521663823414955210, -0.521706480319495850, -0.521749135919770680, -0.521791790215672350, -0.521834443207094490, -0.521877094893930860, -0.521919745276074100, -0.521962394353418070, +-0.522005042125855970, -0.522047688593281320, -0.522090333755587890, -0.522132977612668080, -0.522175620164415990, -0.522218261410725140, -0.522260901351488280, -0.522303539986599170, +-0.522346177315951230, -0.522388813339437760, -0.522431448056952740, -0.522474081468388700, -0.522516713573639820, -0.522559344372598770, -0.522601973865159270, -0.522644602051214990, +-0.522687228930659110, -0.522729854503385600, -0.522772478769287010, -0.522815101728257290, -0.522857723380190100, -0.522900343724978290, -0.522942962762515620, -0.522985580492695610, +-0.523028196915411580, -0.523070812030557390, -0.523113425838025780, -0.523156038337710740, -0.523198649529505900, -0.523241259413304020, -0.523283867988999060, -0.523326475256484350, +-0.523369081215653950, -0.523411685866400410, -0.523454289208617580, -0.523496891242199560, -0.523539491967038860, -0.523582091383029360, -0.523624689490064690, -0.523667286288038270, +-0.523709881776844080, -0.523752475956374750, -0.523795068826524270, -0.523837660387186490, -0.523880250638254160, -0.523922839579621160, -0.523965427211181110, -0.524008013532827550, +-0.524050598544454240, -0.524093182245954140, -0.524135764637221340, -0.524178345718148920, -0.524220925488630530, -0.524263503948559810, -0.524306081097830390, -0.524348656936336030, +-0.524391231463969820, -0.524433804680625390, -0.524476376586196950, -0.524518947180577120, -0.524561516463659890, -0.524604084435338900, -0.524646651095507680, -0.524689216444060300, +-0.524731780480889420, -0.524774343205889120, -0.524816904618953250, -0.524859464719974910, -0.524902023508847740, -0.524944580985465590, -0.524987137149722340, -0.525029692001510950, +-0.525072245540725290, -0.525114797767259330, -0.525157348681006050, -0.525199898281859420, -0.525242446569712970, -0.525284993544460450, -0.525327539205995840, -0.525370083554212000, +-0.525412626589002900, -0.525455168310262730, -0.525497708717884150, -0.525540247811761340, -0.525582785591787950, -0.525625322057857500, -0.525667857209864200, -0.525710391047700790, +-0.525752923571261470, -0.525795454780440210, -0.525837984675129990, -0.525880513255224780, -0.525923040520618220, -0.525965566471204520, -0.526008091106876410, -0.526050614427528210, +-0.526093136433053780, -0.526135657123346090, -0.526178176498299340, -0.526220694557807180, -0.526263211301763230, -0.526305726730061600, -0.526348240842595240, -0.526390753639258360, +-0.526433265119944930, -0.526475775284548030, -0.526518284132961640, -0.526560791665079520, -0.526603297880795520, -0.526645802780003500, -0.526688306362596670, -0.526730808628469440, +-0.526773309577514890, -0.526815809209627010, -0.526858307524699530, -0.526900804522626440, -0.526943300203301600, -0.526985794566618200, -0.527028287612470230, -0.527070779340751970, +-0.527113269751356420, -0.527155758844177650, -0.527198246619109410, -0.527240733076045690, -0.527283218214880440, -0.527325702035506770, -0.527368184537818860, -0.527410665721710910, +-0.527453145587075790, -0.527495624133807910, -0.527538101361801020, -0.527580577270949090, -0.527623051861145440, -0.527665525132284150, -0.527707997084259530, -0.527750467716964430, +-0.527792937030293170, -0.527835405024139500, -0.527877871698397390, -0.527920337052961040, -0.527962801087723310, -0.528005263802578730, -0.528047725197421270, -0.528090185272144240, +-0.528132644026641620, -0.528175101460807370, -0.528217557574535480, -0.528260012367720020, -0.528302465840254200, -0.528344917992032200, -0.528387368822948230, -0.528429818332895480, +-0.528472266521768150, -0.528514713389460210, -0.528557158935865860, -0.528599603160878280, -0.528642046064391580, -0.528684487646300270, -0.528726927906497220, -0.528769366844876960, +-0.528811804461333250, -0.528854240755760040, -0.528896675728051550, -0.528939109378101070, -0.528981541705802800, -0.529023972711051060, -0.529066402393738920, -0.529108830753760920, +-0.529151257791010690, -0.529193683505382430, -0.529236107896770340, -0.529278530965067500, -0.529320952710168770, -0.529363373131967350, -0.529405792230357440, -0.529448210005233010, +-0.529490626456488030, -0.529533041584016930, -0.529575455387712890, -0.529617867867470120, -0.529660279023183130, -0.529702688854745030, -0.529745097362050220, -0.529787504544992680, +-0.529829910403466280, -0.529872314937365640, -0.529914718146583750, -0.529957120031015030, -0.529999520590553890, -0.530041919825093630, -0.530084317734528580, -0.530126714318752690, +-0.530169109577660390, -0.530211503511144990, -0.530253896119100790, -0.530296287401422210, -0.530338677358002550, -0.530381065988736240, -0.530423453293517260, -0.530465839272239560, +-0.530508223924797680, -0.530550607251084940, -0.530592989250995630, -0.530635369924424170, -0.530677749271263990, -0.530720127291409380, -0.530762503984754440, -0.530804879351193360, +-0.530847253390620330, -0.530889626102928890, -0.530931997488013340, -0.530974367545768100, -0.531016736276086590, -0.531059103678863330, -0.531101469753992310, -0.531143834501367930, +-0.531186197920883510, -0.531228560012433680, -0.531270920775912870, -0.531313280211214380, -0.531355638318232630, -0.531397995096861810, -0.531440350546996010, -0.531482704668529650, +-0.531525057461356250, -0.531567408925370130, -0.531609759060465930, -0.531652107866536830, -0.531694455343477590, -0.531736801491182190, -0.531779146309544810, -0.531821489798459890, +-0.531863831957820830, -0.531906172787522610, -0.531948512287458650, -0.531990850457523260, -0.532033187297610840, -0.532075522807615500, -0.532117856987431640, -0.532160189836952790, +-0.532202521356073490, -0.532244851544688260, -0.532287180402690520, -0.532329507929974800, -0.532371834126435290, -0.532414158991966200, -0.532456482526462160, -0.532498804729816480, +-0.532541125601923790, -0.532583445142678750, -0.532625763351974650, -0.532668080229706130, -0.532710395775767400, -0.532752709990053090, -0.532795022872456610, -0.532837334422872620, +-0.532879644641195640, -0.532921953527319080, -0.532964261081137810, -0.533006567302545810, -0.533048872191437370, -0.533091175747707150, -0.533133477971248550, -0.533175778861956330, +-0.533218078419725020, -0.533260376644448140, -0.533302673536020230, -0.533344969094335710, -0.533387263319288870, -0.533429556210774150, -0.533471847768685170, -0.533514137992916580, +-0.533556426883363020, -0.533598714439917910, -0.533641000662476110, -0.533683285550931920, -0.533725569105179760, -0.533767851325113290, -0.533810132210627230, -0.533852411761616240, +-0.533894689977973740, -0.533936966859594580, -0.533979242406373070, -0.534021516618203410, -0.534063789494980350, -0.534106061036597410, -0.534148331242949250, -0.534190600113930710, +-0.534232867649435340, -0.534275133849357760, -0.534317398713592300, -0.534359662242033460, -0.534401924434575680, -0.534444185291112820, -0.534486444811539840, -0.534528702995750390, +-0.534570959843639230, -0.534613215355100650, -0.534655469530028960, -0.534697722368319030, -0.534739973869864380, -0.534782224034559770, -0.534824472862300060, -0.534866720352978780, +-0.534908966506490670, -0.534951211322730160, -0.534993454801591550, -0.535035696942969820, -0.535077937746758380, -0.535120177212852100, -0.535162415341145730, -0.535204652131533010, +-0.535246887583908590, -0.535289121698167000, -0.535331354474202990, -0.535373585911910200, -0.535415816011183380, -0.535458044771917500, -0.535500272194006090, -0.535542498277344010, +-0.535584723021825690, -0.535626946427345540, -0.535669168493798420, -0.535711389221077970, -0.535753608609079060, -0.535795826657696540, -0.535838043366824060, -0.535880258736356470, +-0.535922472766188210, -0.535964685456213790, -0.536006896806327960, -0.536049106816424590, -0.536091315486398880, -0.536133522816144460, -0.536175728805556200, -0.536217933454528620, +-0.536260136762956250, -0.536302338730733850, -0.536344539357755280, -0.536386738643915280, -0.536428936589108950, -0.536471133193229810, -0.536513328456172830, -0.536555522377832550, +-0.536597714958103490, -0.536639906196880510, -0.536682096094057370, -0.536724284649529040, -0.536766471863190260, -0.536808657734935020, -0.536850842264658180, -0.536893025452254150, +-0.536935207297617900, -0.536977387800643300, -0.537019566961225210, -0.537061744779258610, -0.537103921254637350, -0.537146096387256190, -0.537188270177009760, -0.537230442623792710, +-0.537272613727499900, -0.537314783488025190, -0.537356951905263560, -0.537399118979109970, -0.537441284709458070, -0.537483449096203050, -0.537525612139239330, -0.537567773838461660, +-0.537609934193764900, -0.537652093205042920, -0.537694250872190690, -0.537736407195103290, -0.537778562173674480, -0.537820715807799220, -0.537862868097372160, -0.537905019042288270, +-0.537947168642441520, -0.537989316897726890, -0.538031463808039230, -0.538073609373272640, -0.538115753593321980, -0.538157896468081990, -0.538200037997447200, -0.538242178181312700, +-0.538284317019572360, -0.538326454512121240, -0.538368590658854340, -0.538410725459665620, -0.538452858914450160, -0.538494991023102390, -0.538537121785517270, -0.538579251201589670, +-0.538621379271213560, -0.538663505994284470, -0.538705631370696160, -0.538747755400343700, -0.538789878083121950, -0.538831999418925460, -0.538874119407649400, -0.538916238049187650, +-0.538958355343435280, -0.539000471290287390, -0.539042585889638050, -0.539084699141382130, -0.539126811045414490, -0.539168921601629770, -0.539211030809923280, -0.539253138670188650, +-0.539295245182321300, -0.539337350346216220, -0.539379454161767250, -0.539421556628869810, -0.539463657747418330, -0.539505757517308230, -0.539547855938433240, -0.539589953010688680, +-0.539632048733969640, -0.539674143108169970, -0.539716236133185090, -0.539758327808909530, -0.539800418135238160, -0.539842507112066160, -0.539884594739287520, -0.539926681016797310, +-0.539968765944490840, -0.540010849522262080, -0.540052931750006240, -0.540095012627617940, -0.540137092154992170, -0.540179170332024120, -0.540221247158607750, -0.540263322634638170, +-0.540305396760010770, -0.540347469534619430, -0.540389540958359450, -0.540431611031125580, -0.540473679752813020, -0.540515747123315960, -0.540557813142529490, -0.540599877810348910, +-0.540641941126668300, -0.540684003091382760, -0.540726063704387250, -0.540768122965576530, -0.540810180874845890, -0.540852237432089430, -0.540894292637202460, -0.540936346490080040, +-0.540978398990616390, -0.541020450138706700, -0.541062499934245930, -0.541104548377128960, -0.541146595467250970, -0.541188641204506050, -0.541230685588789950, -0.541272728619996870, +-0.541314770298021770, -0.541356810622759870, -0.541398849594105890, -0.541440887211955160, -0.541482923476201970, -0.541524958386741310, -0.541566991943468690, -0.541609024146278210, +-0.541651054995065160, -0.541693084489724420, -0.541735112630151060, -0.541777139416240280, -0.541819164847886280, -0.541861188924984360, -0.541903211647429830, -0.541945233015116880, +-0.541987253027940820, -0.542029271685796730, -0.542071288988579700, -0.542113304936184150, -0.542155319528505380, -0.542197332765438690, -0.542239344646878170, -0.542281355172719360, +-0.542323364342857220, -0.542365372157186610, -0.542407378615602950, -0.542449383718000440, -0.542491387464274500, -0.542533389854320540, -0.542575390888032640, -0.542617390565306220, +-0.542659388886036490, -0.542701385850118180, -0.542743381457446720, -0.542785375707916520, -0.542827368601422890, -0.542869360137861130, -0.542911350317125670, -0.542953339139111810, +-0.542995326603714630, -0.543037312710829450, -0.543079297460350660, -0.543121280852173590, -0.543163262886193770, -0.543205243562305370, -0.543247222880403830, -0.543289200840384230, +-0.543331177442141660, -0.543373152685571510, -0.543415126570568120, -0.543457099097026890, -0.543499070264843340, -0.543541040073911690, -0.543583008524127440, -0.543624975615385700, +-0.543666941347581530, -0.543708905720610370, -0.543750868734366510, -0.543792830388745930, -0.543834790683642820, -0.543876749618952830, -0.543918707194570920, -0.543960663410392180, +-0.544002618266312240, -0.544044571762225320, -0.544086523898027030, -0.544128474673612810, -0.544170424088877060, -0.544212372143715100, -0.544254318838022330, -0.544296264171693740, +-0.544338208144624860, -0.544380150756710090, -0.544422092007844970, -0.544464031897924920, -0.544505970426844450, -0.544547907594499110, -0.544589843400783980, -0.544631777845594580, +-0.544673710928825330, -0.544715642650371870, -0.544757573010129610, -0.544799502007993100, -0.544841429643857840, -0.544883355917618940, -0.544925280829171800, -0.544967204378411730, +-0.545009126565233260, -0.545051047389531920, -0.545092966851203450, -0.545134884950142170, -0.545176801686243610, -0.545218717059403170, -0.545260631069515830, -0.545302543716477240, +-0.545344455000182030, -0.545386364920525610, -0.545428273477403750, -0.545470180670710740, -0.545512086500342330, -0.545553990966193610, -0.545595894068160450, -0.545637795806137030, +-0.545679696180019210, -0.545721595189702420, -0.545763492835081410, -0.545805389116051590, -0.545847284032508260, -0.545889177584346850, -0.545931069771462770, -0.545972960593750670, +-0.546014850051106170, -0.546056738143424920, -0.546098624870601350, -0.546140510232531300, -0.546182394229110080, -0.546224276860232780, -0.546266158125795150, -0.546308038025691720, +-0.546349916559818570, -0.546391793728070340, -0.546433669530342560, -0.546475543966530640, -0.546517417036529900, -0.546559288740235850, -0.546601159077543360, -0.546643028048347860, +-0.546684895652545190, -0.546726761890030000, -0.546768626760697820, -0.546810490264444060, -0.546852352401164140, -0.546894213170753600, -0.546936072573107280, -0.546977930608120720, +-0.547019787275689670, -0.547061642575708880, -0.547103496508073880, -0.547145349072680200, -0.547187200269423470, -0.547229050098198440, -0.547270898558900760, -0.547312745651426180, +-0.547354591375669330, -0.547396435731526080, -0.547438278718891720, -0.547480120337661690, -0.547521960587731620, -0.547563799468996360, -0.547605636981351560, -0.547647473124693080, +-0.547689307898915570, -0.547731141303914760, -0.547772973339586080, -0.547814804005825050, -0.547856633302527320, -0.547898461229587630, -0.547940287786902180, -0.547982112974365610, +-0.548023936791873780, -0.548065759239321990, -0.548107580316606000, -0.548149400023621340, -0.548191218360262740, -0.548233035326426200, -0.548274850922007340, -0.548316665146901140, +-0.548358478001003120, -0.548400289484208940, -0.548442099596414100, -0.548483908337514370, -0.548525715707404490, -0.548567521705980220, -0.548609326333137640, -0.548651129588771380, +-0.548692931472777200, -0.548734731985050740, -0.548776531125487850, -0.548818328893983300, -0.548860125290432820, -0.548901920314732390, -0.548943713966776880, -0.548985506246462030, +-0.549027297153683480, -0.549069086688336650, -0.549110874850317400, -0.549152661639520700, -0.549194447055842310, -0.549236231099178180, -0.549278013769423090, -0.549319795066472990, +-0.549361574990223310, -0.549403353540569790, -0.549445130717408190, -0.549486906520633480, -0.549528680950141400, -0.549570454005828050, -0.549612225687588160, -0.549653995995317720, +-0.549695764928912370, -0.549737532488267950, -0.549779298673279240, -0.549821063483842300, -0.549862826919853110, -0.549904588981206530, -0.549946349667798430, -0.549988108979524440, +-0.550029866916280200, -0.550071623477961680, -0.550113378664463640, -0.550155132475682260, -0.550196884911513310, -0.550238635971851850, -0.550280385656593870, -0.550322133965634790, +-0.550363880898870450, -0.550405626456196730, -0.550447370637508700, -0.550489113442702460, -0.550530854871673190, -0.550572594924316650, -0.550614333600528690, -0.550656070900204960, +-0.550697806823241320, -0.550739541369532850, -0.550781274538975520, -0.550823006331465410, -0.550864736746897400, -0.550906465785167440, -0.550948193446171410, -0.550989919729804930, +-0.551031644635963990, -0.551073368164543550, -0.551115090315439700, -0.551156811088548420, -0.551198530483764880, -0.551240248500984850, -0.551281965140104410, -0.551323680401019310, +-0.551365394283624630, -0.551407106787816460, -0.551448817913490870, -0.551490527660542960, -0.551532236028868580, -0.551573943018363710, -0.551615648628924090, -0.551657352860445590, +-0.551699055712823290, -0.551740757185953390, -0.551782457279732070, -0.551824155994054100, -0.551865853328815880, -0.551907549283912950, -0.551949243859241050, -0.551990937054696600, +-0.552032628870174350, -0.552074319305570490, -0.552116008360781230, -0.552157696035701530, -0.552199382330227690, -0.552241067244255370, -0.552282750777680740, -0.552324432930398790, +-0.552366113702305820, -0.552407793093298020, -0.552449471103270250, -0.552491147732118830, -0.552532822979739490, -0.552574496846028220, -0.552616169330880980, -0.552657840434192970, +-0.552699510155860390, -0.552741178495779420, -0.552782845453845040, -0.552824511029953560, -0.552866175224000940, -0.552907838035882730, -0.552949499465495320, -0.552991159512733810, +-0.553032818177494830, -0.553074475459673360, -0.553116131359165820, -0.553157785875867840, -0.553199439009675390, -0.553241090760484780, -0.553282741128190980, -0.553324390112690410, +-0.553366037713879160, -0.553407683931652520, -0.553449328765906690, -0.553490972216537420, -0.553532614283440800, -0.553574254966513020, -0.553615894265649280, -0.553657532180745650, +-0.553699168711698660, -0.553740803858403410, -0.553782437620756070, -0.553824069998652750, -0.553865700991989510, -0.553907330600661660, -0.553948958824565520, -0.553990585663597380, +-0.554032211117652440, -0.554073835186626900, -0.554115457870416720, -0.554157079168917990, -0.554198699082026900, -0.554240317609638660, -0.554281934751649660, -0.554323550507956230, +-0.554365164878453440, -0.554406777863037830, -0.554448389461605240, -0.554489999674051770, -0.554531608500273610, -0.554573215940165950, -0.554614821993625440, -0.554656426660548150, +-0.554698029940829400, -0.554739631834365590, -0.554781232341052700, -0.554822831460787150, -0.554864429193464130, -0.554906025538979940, -0.554947620497231120, -0.554989214068112970, +-0.555030806251521680, -0.555072397047353340, -0.555113986455504140, -0.555155574475870270, -0.555197161108347050, -0.555238746352830990, -0.555280330209218410, -0.555321912677404720, +-0.555363493757286110, -0.555405073448758890, -0.555446651751718920, -0.555488228666062730, -0.555529804191685520, -0.555571378328484240, -0.555612951076354110, -0.555654522435191640, +-0.555696092404892820, -0.555737660985353820, -0.555779228176470960, -0.555820793978139660, -0.555862358390256440, -0.555903921412717720, -0.555945483045418800, -0.555987043288256100, +-0.556028602141125820, -0.556070159603924140, -0.556111715676547270, -0.556153270358890840, -0.556194823650851270, -0.556236375552324970, -0.556277926063207360, -0.556319475183394860, +-0.556361022912783780, -0.556402569251270410, -0.556444114198750390, -0.556485657755119930, -0.556527199920275770, -0.556568740694113330, -0.556610280076528910, -0.556651818067418810, +-0.556693354666679130, -0.556734889874206500, -0.556776423689896330, -0.556817956113645040, -0.556859487145349160, -0.556901016784904330, -0.556942545032206860, -0.556984071887153040, +-0.557025597349639080, -0.557067121419561380, -0.557108644096815600, -0.557150165381298250, -0.557191685272905860, -0.557233203771533850, -0.557274720877078740, -0.557316236589436960, +-0.557357750908504920, -0.557399263834178040, -0.557440775366353170, -0.557482285504926620, -0.557523794249794040, -0.557565301600851940, -0.557606807557996520, -0.557648312121124200, +-0.557689815290131400, -0.557731317064913750, -0.557772817445367770, -0.557814316431390120, -0.557855814022876320, -0.557897310219722890, -0.557938805021826360, -0.557980298429082700, +-0.558021790441388670, -0.558063281058639780, -0.558104770280733130, -0.558146258107564130, -0.558187744539029530, -0.558229229575025520, -0.558270713215448520, -0.558312195460194950, +-0.558353676309160660, -0.558395155762242080, -0.558436633819336060, -0.558478110480338130, -0.558519585745144820, -0.558561059613652540, -0.558602532085757720, -0.558644003161356870, +-0.558685472840345640, -0.558726941122620670, -0.558768408008078810, -0.558809873496615590, -0.558851337588127550, -0.558892800282511320, -0.558934261579663310, -0.558975721479479380, +-0.559017179981856070, -0.559058637086690240, -0.559100092793877510, -0.559141547103314430, -0.559183000014897510, -0.559224451528523180, -0.559265901644087960, -0.559307350361487710, +-0.559348797680619070, -0.559390243601378680, -0.559431688123662510, -0.559473131247366970, -0.559514572972388710, -0.559556013298623920, -0.559597452225969460, -0.559638889754321080, +-0.559680325883575860, -0.559721760613629440, -0.559763193944378570, -0.559804625875719660, -0.559846056407549360, -0.559887485539764200, -0.559928913272259910, -0.559970339604933360, +-0.560011764537681310, -0.560053188070399610, -0.560094610202984790, -0.560136030935333480, -0.560177450267342110, -0.560218868198907540, -0.560260284729925400, -0.560301699860292550, +-0.560343113589905740, -0.560384525918660840, -0.560425936846454590, -0.560467346373183520, -0.560508754498744160, -0.560550161223033140, -0.560591566545946440, -0.560632970467381140, +-0.560674372987233110, -0.560715774105399190, -0.560757173821775700, -0.560798572136259390, -0.560839969048746890, -0.560881364559134180, -0.560922758667318110, -0.560964151373195440, +-0.561005542676662030, -0.561046932577614840, -0.561088321075950190, -0.561129708171564820, -0.561171093864355600, -0.561212478154218150, -0.561253861041049570, -0.561295242524746720, +-0.561336622605205340, -0.561378001282322400, -0.561419378555994550, -0.561460754426118540, -0.561502128892590320, -0.561543501955306780, -0.561584873614164870, -0.561626243869060350, +-0.561667612719890190, -0.561708980166551130, -0.561750346208939490, -0.561791710846952450, -0.561833074080485660, -0.561874435909436310, -0.561915796333701150, -0.561957155353176140, +-0.561998512967758270, -0.562039869177344050, -0.562081223981830250, -0.562122577381113710, -0.562163929375090410, -0.562205279963657540, -0.562246629146711200, -0.562287976924148340, +-0.562329323295865380, -0.562370668261759190, -0.562412011821726730, -0.562453353975663870, -0.562494694723467580, -0.562536034065034940, -0.562577372000261810, -0.562618708529045390, +-0.562660043651282080, -0.562701377366868650, -0.562742709675702170, -0.562784040577678500, -0.562825370072694840, -0.562866698160648050, -0.562908024841434210, -0.562949350114950180, +-0.562990673981092930, -0.563031996439759210, -0.563073317490845220, -0.563114637134247920, -0.563155955369864400, -0.563197272197590640, -0.563238587617323700, -0.563279901628960240, +-0.563321214232397120, -0.563362525427531290, -0.563403835214258740, -0.563445143592476660, -0.563486450562082020, -0.563527756122970900, -0.563569060275040390, -0.563610363018187230, +-0.563651664352308290, -0.563692964277300420, -0.563734262793059830, -0.563775559899483470, -0.563816855596468660, -0.563858149883911360, -0.563899442761708670, -0.563940734229757430, +-0.563982024287954630, -0.564023312936196450, -0.564064600174379980, -0.564105886002402410, -0.564147170420159720, -0.564188453427549090, -0.564229735024467380, -0.564271015210811240, +-0.564312293986477980, -0.564353571351363660, -0.564394847305365380, -0.564436121848380320, -0.564477394980304580, -0.564518666701035450, -0.564559937010469580, -0.564601205908503930, +-0.564642473395035480, -0.564683739469960640, -0.564725004133176720, -0.564766267384580020, -0.564807529224067520, -0.564848789651536290, -0.564890048666883080, -0.564931306270005100, +-0.564972562460798520, -0.565013817239160550, -0.565055070604988270, -0.565096322558178100, -0.565137573098627000, -0.565178822226232060, -0.565220069940890020, -0.565261316242498200, +-0.565302561130952670, -0.565343804606150860, -0.565385046667989830, -0.565426287316365790, -0.565467526551176050, -0.565508764372317450, -0.565550000779687310, -0.565591235773181930, +-0.565632469352698290, -0.565673701518134010, -0.565714932269384960, -0.565756161606348670, -0.565797389528922000, -0.565838616037001810, -0.565879841130485390, -0.565921064809269070, +-0.565962287073250030, -0.566003507922325680, -0.566044727356392220, -0.566085945375346960, -0.566127161979086750, -0.566168377167508670, -0.566209590940510040, -0.566250803297987050, +-0.566292014239837100, -0.566333223765957410, -0.566374431876244370, -0.566415638570595180, -0.566456843848906930, -0.566498047711076920, -0.566539250157001350, -0.566580451186577740, +-0.566621650799703390, -0.566662848996274500, -0.566704045776188490, -0.566745241139342440, -0.566786435085633200, -0.566827627614958200, -0.566868818727213840, -0.566910008422297440, +-0.566951196700106410, -0.566992383560536940, -0.567033569003486560, -0.567074753028852240, -0.567115935636531070, -0.567157116826420450, -0.567198296598416580, -0.567239474952417440, +-0.567280651888319110, -0.567321827406019220, -0.567363001505414850, -0.567404174186402880, -0.567445345448880810, -0.567486515292745080, -0.567527683717893080, -0.567568850724222250, +-0.567610016311628770, -0.567651180480010400, -0.567692343229264100, -0.567733504559286840, -0.567774664469976150, -0.567815822961228570, -0.567856980032941380, -0.567898135685012130, +-0.567939289917337110, -0.567980442729813850, -0.568021594122339550, -0.568062744094811610, -0.568103892647126460, -0.568145039779181520, -0.568186185490874410, -0.568227329782101440, +-0.568268472652760150, -0.568309614102747720, -0.568350754131961230, -0.568391892740298220, -0.568433029927655100, -0.568474165693929390, -0.568515300039018620, -0.568556432962819320, +-0.568597564465228800, -0.568638694546144460, -0.568679823205463400, -0.568720950443083130, -0.568762076258900070, -0.568803200652811870, -0.568844323624716040, -0.568885445174509010, +-0.568926565302088410, -0.568967684007351430, -0.569008801290195490, -0.569049917150517230, -0.569091031588214170, -0.569132144603183950, -0.569173256195323000, -0.569214366364528820, +-0.569255475110698740, -0.569296582433730050, -0.569337688333520160, -0.569378792809965840, -0.569419895862964380, -0.569460997492413630, -0.569502097698210030, -0.569543196480251200, +-0.569584293838434340, -0.569625389772656750, -0.569666484282816080, -0.569707577368808730, -0.569748669030532890, -0.569789759267885000, -0.569830848080762680, -0.569871935469063340, +-0.569913021432684070, -0.569954105971522630, -0.569995189085475530, -0.570036270774440520, -0.570077351038315140, -0.570118429876996120, -0.570159507290380900, -0.570200583278366980, +-0.570241657840851570, -0.570282730977732410, -0.570323802688906030, -0.570364872974270190, -0.570405941833722510, -0.570447009267159630, -0.570488075274479200, -0.570529139855578520, +-0.570570203010355440, -0.570611264738706490, -0.570652325040529320, -0.570693383915721770, -0.570734441364180390, -0.570775497385802800, -0.570816551980486530, -0.570857605148128890, +-0.570898656888627620, -0.570939707201879370, -0.570980756087781760, -0.571021803546232780, -0.571062849577128830, -0.571103894180367670, -0.571144937355846930, -0.571185979103463690, +-0.571227019423115930, -0.571268058314700290, -0.571309095778114510, -0.571350131813256330, -0.571391166420022520, -0.571432199598310710, -0.571473231348018420, -0.571514261669043400, +-0.571555290561282400, -0.571596318024633180, -0.571637344058993580, -0.571678368664260140, -0.571719391840330830, -0.571760413587103060, -0.571801433904474240, -0.571842452792342140, +-0.571883470250603600, -0.571924486279156370, -0.571965500877898330, -0.572006514046726200, -0.572047525785537640, -0.572088536094230380, -0.572129544972701740, -0.572170552420849690, +-0.572211558438570740, -0.572252563025763330, -0.572293566182324190, -0.572334567908151070, -0.572375568203141620, -0.572416567067193240, -0.572457564500203690, -0.572498560502069930, +-0.572539555072689830, -0.572580548211961140, -0.572621539919780710, -0.572662530196046520, -0.572703519040655860, -0.572744506453506500, -0.572785492434496170, -0.572826476983521850, +-0.572867460100481280, -0.572908441785272340, -0.572949422037792090, -0.572990400857938180, -0.573031378245608350, -0.573072354200700350, -0.573113328723111160, -0.573154301812738630, +-0.573195273469480630, -0.573236243693234230, -0.573277212483897070, -0.573318179841367010, -0.573359145765541480, -0.573400110256318430, -0.573441073313594730, -0.573482034937268240, +-0.573522995127237150, -0.573563953883398200, -0.573604911205649380, -0.573645867093888210, -0.573686821548012430, -0.573727774567920010, -0.573768726153507710, -0.573809676304673940, +-0.573850625021315670, -0.573891572303330880, -0.573932518150617080, -0.573973462563072020, -0.574014405540593690, -0.574055347083078930, -0.574096287190425820, -0.574137225862532350, +-0.574178163099295480, -0.574219098900613180, -0.574260033266383090, -0.574300966196502950, -0.574341897690870740, -0.574382827749383540, -0.574423756371939100, -0.574464683558435720, +-0.574505609308770260, -0.574546533622840800, -0.574587456500544990, -0.574628377941780900, -0.574669297946445500, -0.574710216514436880, -0.574751133645653110, -0.574792049339991060, +-0.574832963597348920, -0.574873876417624330, -0.574914787800715140, -0.574955697746519220, -0.574996606254933870, -0.575037513325856840, -0.575078418959186430, -0.575119323154819620, +-0.575160225912654590, -0.575201127232588870, -0.575242027114520440, -0.575282925558347260, -0.575323822563966300, -0.575364718131275880, -0.575405612260174060, -0.575446504950557820, +-0.575487396202325250, -0.575528286015374310, -0.575569174389602980, -0.575610061324908330, -0.575650946821188450, -0.575691830878341640, -0.575732713496264870, -0.575773594674856340, +-0.575814474414013900, -0.575855352713635190, -0.575896229573618410, -0.575937104993860750, -0.575977978974260400, -0.576018851514715320, -0.576059722615122840, -0.576100592275381020, +-0.576141460495387720, -0.576182327275040820, -0.576223192614238490, -0.576264056512877710, -0.576304918970857230, -0.576345779988074010, -0.576386639564426370, -0.576427497699812160, +-0.576468354394129250, -0.576509209647275700, -0.576550063459148830, -0.576590915829646830, -0.576631766758667790, -0.576672616246109100, -0.576713464291868870, -0.576754310895844840, +-0.576795156057935190, -0.576835999778037900, -0.576876842056050280, -0.576917682891870620, -0.576958522285397010, -0.576999360236526870, -0.577040196745158160, -0.577081031811189080, +-0.577121865434517820, -0.577162697615041460, -0.577203528352658310, -0.577244357647266780, -0.577285185498763950, -0.577326011907048130, -0.577366836872017400, -0.577407660393569500, +-0.577448482471602740, -0.577489303106014540, -0.577530122296702970, -0.577570940043566570, -0.577611756346502410, -0.577652571205408800, -0.577693384620183830, -0.577734196590725340, +-0.577775007116931750, -0.577815816198700370, -0.577856623835929280, -0.577897430028517120, -0.577938234776360970, -0.577979038079359240, -0.578019839937410020, -0.578060640350411380, +-0.578101439318260860, -0.578142236840856860, -0.578183032918097470, -0.578223827549880220, -0.578264620736103300, -0.578305412476664890, -0.578346202771462980, -0.578386991620395860, +-0.578427779023360960, -0.578468564980256560, -0.578509349490981210, -0.578550132555432080, -0.578590914173507500, -0.578631694345105750, -0.578672473070124820, -0.578713250348462990, +-0.578754026180017590, -0.578794800564687570, -0.578835573502370250, -0.578876344992963920, -0.578917115036366780, -0.578957883632476800, -0.578998650781192500, -0.579039416482411200, +-0.579080180736031290, -0.579120943541951430, -0.579161704900068800, -0.579202464810281810, -0.579243223272488780, -0.579283980286587670, -0.579324735852476900, -0.579365489970053990, +-0.579406242639217360, -0.579446993859865420, -0.579487743631895700, -0.579528491955206610, -0.579569238829696240, -0.579609984255263220, -0.579650728231804860, -0.579691470759219670, +-0.579732211837406200, -0.579772951466261730, -0.579813689645684920, -0.579854426375573940, -0.579895161655826890, -0.579935895486342280, -0.579976627867017540, -0.580017358797751290, +-0.580058088278441960, -0.580098816308987080, -0.580139542889285040, -0.580180268019234280, -0.580220991698732760, -0.580261713927679220, -0.580302434705970980, -0.580343154033506670, +-0.580383871910184810, -0.580424588335902940, -0.580465303310559570, -0.580506016834053010, -0.580546728906281670, -0.580587439527143200, -0.580628148696536120, -0.580668856414359060, +-0.580709562680509440, -0.580750267494885900, -0.580790970857386730, -0.580831672767910150, -0.580872373226354770, -0.580913072232618120, -0.580953769786598630, -0.580994465888195260, +-0.581035160537305310, -0.581075853733827420, -0.581116545477659900, -0.581157235768701040, -0.581197924606849380, -0.581238611992002660, -0.581279297924059750, -0.581319982402918160, +-0.581360665428476640, -0.581401347000633510, -0.581442027119286940, -0.581482705784335700, -0.581523382995677300, -0.581564058753210490, -0.581604733056833910, -0.581645405906445090, +-0.581686077301942770, -0.581726747243225260, -0.581767415730190860, -0.581808082762738320, -0.581848748340765280, -0.581889412464170250, -0.581930075132852110, -0.581970736346708370, +-0.582011396105637790, -0.582052054409538780, -0.582092711258309970, -0.582133366651849000, -0.582174020590054630, -0.582214673072825590, -0.582255324100059420, -0.582295973671655090, +-0.582336621787510780, -0.582377268447524800, -0.582417913651596120, -0.582458557399622270, -0.582499199691501990, -0.582539840527134150, -0.582580479906416260, -0.582621117829247190, +-0.582661754295525360, -0.582702389305149170, -0.582743022858017270, -0.582783654954027510, -0.582824285593078640, -0.582864914775069410, -0.582905542499897460, -0.582946168767461750, +-0.582986793577660590, -0.583027416930392840, -0.583068038825556020, -0.583108659263049330, -0.583149278242771190, -0.583189895764619550, -0.583230511828493170, -0.583271126434290580, +-0.583311739581910070, -0.583352351271250620, -0.583392961502209870, -0.583433570274686790, -0.583474177588580110, -0.583514783443787710, -0.583555387840208220, -0.583595990777740380, +-0.583636592256282500, -0.583677192275733450, -0.583717790835991070, -0.583758387936954670, -0.583798983578521890, -0.583839577760591590, -0.583880170483062400, -0.583920761745832850, +-0.583961351548801690, -0.584001939891866770, -0.584042526774927070, -0.584083112197881340, -0.584123696160627540, -0.584164278663064420, -0.584204859705090620, -0.584245439286604660, +-0.584286017407505520, -0.584326594067690940, -0.584367169267059890, -0.584407743005511350, -0.584448315282942940, -0.584488886099253870, -0.584529455454342540, -0.584570023348107930, +-0.584610589780447890, -0.584651154751261390, -0.584691718260447300, -0.584732280307903700, -0.584772840893529210, -0.584813400017222820, -0.584853957678882820, -0.584894513878408300, +-0.584935068615697110, -0.584975621890648220, -0.585016173703160720, -0.585056724053132360, -0.585097272940462210, -0.585137820365048910, -0.585178366326791100, -0.585218910825587630, +-0.585259453861336600, -0.585299995433937290, -0.585340535543287580, -0.585381074189286530, -0.585421611371832800, -0.585462147090825110, -0.585502681346162350, -0.585543214137742570, +-0.585583745465464660, -0.585624275329227780, -0.585664803728929930, -0.585705330664470060, -0.585745856135746810, -0.585786380142658940, -0.585826902685105510, -0.585867423762984400, +-0.585907943376194780, -0.585948461524635640, -0.585988978208204950, -0.586029493426801880, -0.586070007180325090, -0.586110519468673540, -0.586151030291745420, -0.586191539649439710, +-0.586232047541655590, -0.586272553968290810, -0.586313058929244790, -0.586353562424416050, -0.586394064453703460, -0.586434565017005970, -0.586475064114221790, -0.586515561745249990, +-0.586556057909989550, -0.586596552608338650, -0.586637045840196380, -0.586677537605461490, -0.586718027904032710, -0.586758516735809250, -0.586799004100689190, -0.586839489998571610, +-0.586879974429355580, -0.586920457392939300, -0.586960938889221960, -0.587001418918102200, -0.587041897479479210, -0.587082374573251190, -0.587122850199317200, -0.587163324357576450, +-0.587203797047927020, -0.587244268270268100, -0.587284738024498430, -0.587325206310516990, -0.587365673128222960, -0.587406138477514330, -0.587446602358290380, -0.587487064770450210, +-0.587527525713892110, -0.587567985188515160, -0.587608443194218230, -0.587648899730900180, -0.587689354798460300, -0.587729808396796560, -0.587770260525808720, -0.587810711185394960, +-0.587851160375454260, -0.587891608095885810, -0.587932054346588240, -0.587972499127460970, -0.588012942438402080, -0.588053384279310750, -0.588093824650086420, -0.588134263550627150, +-0.588174700980832130, -0.588215136940600460, -0.588255571429830870, -0.588296004448422780, -0.588336435996274280, -0.588376866073284650, -0.588417294679353330, -0.588457721814378390, +-0.588498147478259010, -0.588538571670894410, -0.588578994392183750, -0.588619415642025130, -0.588659835420318080, -0.588700253726961660, -0.588740670561854420, -0.588781085924895420, +-0.588821499815983640, -0.588861912235018160, -0.588902323181898280, -0.588942732656522190, -0.588983140658789320, -0.589023547188598950, -0.589063952245849400, -0.589104355830439850, +-0.589144757942269500, -0.589185158581237210, -0.589225557747242500, -0.589265955440183340, -0.589306351659959480, -0.589346746406470000, -0.589387139679613310, -0.589427531479288720, +-0.589467921805395420, -0.589508310657832600, -0.589548698036498560, -0.589589083941292950, -0.589629468372114830, -0.589669851328862850, -0.589710232811436090, -0.589750612819733840, +-0.589790991353654980, -0.589831368413099020, -0.589871743997964380, -0.589912118108150250, -0.589952490743556270, -0.589992861904080620, -0.590033231589622950, -0.590073599800082120, +-0.590113966535357300, -0.590154331795347930, -0.590194695579952300, -0.590235057889070380, -0.590275418722600360, -0.590315778080441890, -0.590356135962493920, -0.590396492368655660, +-0.590436847298826510, -0.590477200752904880, -0.590517552730790210, -0.590557903232382110, -0.590598252257578780, -0.590638599806279860, -0.590678945878384540, -0.590719290473791680, +-0.590759633592401130, -0.590799975234110990, -0.590840315398820980, -0.590880654086430530, -0.590920991296838060, -0.590961327029943200, -0.591001661285644910, -0.591041994063842950, +-0.591082325364435500, -0.591122655187322320, -0.591162983532402930, -0.591203310399575630, -0.591243635788740060, -0.591283959699795410, -0.591324282132640880, -0.591364603087175980, +-0.591404922563299240, -0.591445240560910190, -0.591485557079908350, -0.591525872120192250, -0.591566185681661530, -0.591606497764215370, -0.591646808367752850, -0.591687117492173840, +-0.591727425137376530, -0.591767731303260660, -0.591808035989725870, -0.591848339196670680, -0.591888640923994620, -0.591928941171596890, -0.591969239939377220, -0.592009537227234040, +-0.592049833035067090, -0.592090127362775890, -0.592130420210258970, -0.592170711577416080, -0.592211001464146290, -0.592251289870349140, -0.592291576795924040, -0.592331862240769610, +-0.592372146204785620, -0.592412428687871580, -0.592452709689926140, -0.592492989210848810, -0.592533267250539120, -0.592573543808896260, -0.592613818885819880, -0.592654092481208480, +-0.592694364594962390, -0.592734635226979890, -0.592774904377160960, -0.592815172045404570, -0.592855438231610350, -0.592895702935677950, -0.592935966157505880, -0.592976227896993890, +-0.593016488154041730, -0.593056746928547930, -0.593097004220412230, -0.593137260029534150, -0.593177514355812780, -0.593217767199148090, -0.593258018559438600, -0.593298268436584060, +-0.593338516830484220, -0.593378763741037710, -0.593419009168144270, -0.593459253111703330, -0.593499495571614630, -0.593539736547776810, -0.593579976040089610, -0.593620214048452890, +-0.593660450572765290, -0.593700685612926550, -0.593740919168836090, -0.593781151240393210, -0.593821381827498000, -0.593861610930048860, -0.593901838547945760, -0.593942064681088340, +-0.593982289329375470, -0.594022512492706880, -0.594062734170981990, -0.594102954364100320, -0.594143173071961520, -0.594183390294464430, -0.594223606031508920, -0.594263820282994850, +-0.594304033048820730, -0.594344244328886550, -0.594384454123091820, -0.594424662431336180, -0.594464869253518600, -0.594505074589538940, -0.594545278439296830, -0.594585480802691250, +-0.594625681679621930, -0.594665881069988410, -0.594706078973690100, -0.594746275390627080, -0.594786470320697980, -0.594826663763802670, -0.594866855719841100, -0.594907046188712040, +-0.594947235170315340, -0.594987422664550510, -0.595027608671317210, -0.595067793190515170, -0.595107976222043260, -0.595148157765801880, -0.595188337821689670, -0.595228516389606610, +-0.595268693469452330, -0.595308869061126230, -0.595349043164528410, -0.595389215779557610, -0.595429386906113690, -0.595469556544096720, -0.595509724693405460, -0.595549891353939990, +-0.595590056525599710, -0.595630220208284270, -0.595670382401893630, -0.595710543106326760, -0.595750702321483530, -0.595790860047263780, -0.595831016283566610, -0.595871171030291860, +-0.595911324287339280, -0.595951476054608630, -0.595991626331998980, -0.596031775119410300, -0.596071922416742560, -0.596112068223894510, -0.596152212540766450, -0.596192355367257790, +-0.596232496703268280, -0.596272636548697780, -0.596312774903445360, -0.596352911767411120, -0.596393047140494900, -0.596433181022595680, -0.596473313413613540, -0.596513444313448100, +-0.596553573721999020, -0.596593701639166360, -0.596633828064849100, -0.596673952998947650, -0.596714076441360990, -0.596754198391989070, -0.596794318850731640, -0.596834437817488460, +-0.596874555292159600, -0.596914671274643930, -0.596954785764841620, -0.596994898762652660, -0.597035010267976120, -0.597075120280711970, -0.597115228800760180, -0.597155335828020160, +-0.597195441362392220, -0.597235545403775330, -0.597275647952069550, -0.597315749007175100, -0.597355848568990820, -0.597395946637417020, -0.597436043212353220, -0.597476138293699720, +-0.597516231881355610, -0.597556323975220850, -0.597596414575195630, -0.597636503681178930, -0.597676591293071050, -0.597716677410771720, -0.597756762034180710, -0.597796845163198090, +-0.597836926797723050, -0.597877006937655660, -0.597917085582896140, -0.597957162733343540, -0.597997238388898070, -0.598037312549459470, -0.598077385214927480, -0.598117456385202530, +-0.598157526060183580, -0.598197594239770700, -0.598237660923864320, -0.598277726112363410, -0.598317789805168140, -0.598357852002178390, -0.598397912703294340, -0.598437971908415190, +-0.598478029617441120, -0.598518085830272330, -0.598558140546808000, -0.598598193766948230, -0.598638245490593080, -0.598678295717642310, -0.598718344447996100, -0.598758391681553650, +-0.598798437418215260, -0.598838481657881120, -0.598878524400450420, -0.598918565645823460, -0.598958605393900000, -0.598998643644580110, -0.599038680397763980, -0.599078715653350690, +-0.599118749411240990, -0.599158781671334180, -0.599198812433530350, -0.599238841697729450, -0.599278869463831470, -0.599318895731736580, -0.599358920501344210, -0.599398943772554540, +-0.599438965545267880, -0.599478985819383410, -0.599519004594801450, -0.599559021871421960, -0.599599037649145020, -0.599639051927870700, -0.599679064707498540, -0.599719075987928620, +-0.599759085769061450, -0.599799094050796120, -0.599839100833033050, -0.599879106115672300, -0.599919109898614080, -0.599959112181757790, -0.599999112965003740, -0.600039112248252240, +-0.600079110031402570, -0.600119106314355170, -0.600159101097009870, -0.600199094379267000, -0.600239086161026610, -0.600279076442188250, -0.600319065222652100, -0.600359052502318800, +-0.600399038281087320, -0.600439022558858390, -0.600479005335531890, -0.600518986611007780, -0.600558966385186690, -0.600598944657967700, -0.600638921429251460, -0.600678896698938150, +-0.600718870466927290, -0.600758842733119300, -0.600798813497414150, -0.600838782759712360, -0.600878750519913350, -0.600918716777917310, -0.600958681533624860, -0.600998644786935430, +-0.601038606537749320, -0.601078566785966720, -0.601118525531487700, -0.601158482774212690, -0.601198438514041200, -0.601238392750873540, -0.601278345484610230, -0.601318296715150800, +-0.601358246442395550, -0.601398194666244670, -0.601438141386598350, -0.601478086603357000, -0.601518030316420150, -0.601557972525688540, -0.601597913231061600, -0.601637852432439950, +-0.601677790129723560, -0.601717726322812840, -0.601757661011607990, -0.601797594196008760, -0.601837525875915550, -0.601877456051228780, -0.601917384721848080, -0.601957311887673980, +-0.601997237548606570, -0.602037161704546020, -0.602077084355392870, -0.602117005501046740, -0.602156925141408060, -0.602196843276377460, -0.602236759905854350, -0.602276675029739360, +-0.602316588647932690, -0.602356500760334980, -0.602396411366845520, -0.602436320467365170, -0.602476228061794240, -0.602516134150032470, -0.602556038731980380, -0.602595941807538060, +-0.602635843376606030, -0.602675743439084700, -0.602715641994873600, -0.602755539043873470, -0.602795434585984840, -0.602835328621107220, -0.602875221149141380, -0.602915112169987390, +-0.602955001683545650, -0.602994889689716820, -0.603034776188400290, -0.603074661179496930, -0.603114544662907260, -0.603154426638530810, -0.603194307106268310, -0.603234186066020080, +-0.603274063517686640, -0.603313939461167850, -0.603353813896364110, -0.603393686823176180, -0.603433558241503690, -0.603473428151247380, -0.603513296552307340, -0.603553163444584210, +-0.603593028827978490, -0.603632892702389840, -0.603672755067718890, -0.603712615923866490, -0.603752475270732170, -0.603792333108216670, -0.603832189436220300, -0.603872044254643470, +-0.603911897563386920, -0.603951749362350300, -0.603991599651434560, -0.604031448430539570, -0.604071295699565860, -0.604111141458414050, -0.604150985706984220, -0.604190828445177350, +-0.604230669672893070, -0.604270509390032130, -0.604310347596495270, -0.604350184292182120, -0.604390019476993560, -0.604429853150829980, -0.604469685313591800, -0.604509515965179660, +-0.604549345105493410, -0.604589172734433800, -0.604628998851901580, -0.604668823457796600, -0.604708646552019500, -0.604748468134470700, -0.604788288205051260, -0.604828106763660610, +-0.604867923810199710, -0.604907739344569430, -0.604947553366669390, -0.604987365876400450, -0.605027176873663140, -0.605066986358357870, -0.605106794330385500, -0.605146600789645770, +-0.605186405736039550, -0.605226209169467680, -0.605266011089829910, -0.605305811497027110, -0.605345610390959800, -0.605385407771528490, -0.605425203638634060, -0.605464997992176120, +-0.605504790832055770, -0.605544582158173860, -0.605584371970430020, -0.605624160268725340, -0.605663947052960230, -0.605703732323035540, -0.605743516078851240, -0.605783298320308080, +-0.605823079047307140, -0.605862858259748060, -0.605902635957531910, -0.605942412140559110, -0.605982186808730280, -0.606021959961946300, -0.606061731600107120, -0.606101501723113610, +-0.606141270330866730, -0.606181037423266340, -0.606220803000213300, -0.606260567061608250, -0.606300329607351810, -0.606340090637344840, -0.606379850151487320, -0.606419608149680540, +-0.606459364631824370, -0.606499119597819880, -0.606538873047567480, -0.606578624980967930, -0.606618375397922180, -0.606658124298330100, -0.606697871682092770, -0.606737617549111040, +-0.606777361899284990, -0.606817104732515490, -0.606856846048703270, -0.606896585847748970, -0.606936324129553450, -0.606976060894016790, -0.607015796141040060, -0.607055529870524140, +-0.607095262082368970, -0.607134992776475760, -0.607174721952745020, -0.607214449611077840, -0.607254175751374190, -0.607293900373535030, -0.607333623477461560, -0.607373345063053630, +-0.607413065130212430, -0.607452783678838480, -0.607492500708832540, -0.607532216220095790, -0.607571930212528090, -0.607611642686030520, -0.607651353640504270, -0.607691063075849300, +-0.607730770991966600, -0.607770477388757000, -0.607810182266121270, -0.607849885623960360, -0.607889587462174360, -0.607929287780664800, -0.607968986579331740, -0.608008683858076050, +-0.608048379616798810, -0.608088073855400530, -0.608127766573782420, -0.608167457771844560, -0.608207147449488120, -0.608246835606614080, -0.608286522243122520, -0.608326207358914850, +-0.608365890953891490, -0.608405573027953510, -0.608445253581001880, -0.608484932612936790, -0.608524610123659440, -0.608564286113070900, -0.608603960581071140, -0.608643633527561680, +-0.608683304952442940, -0.608722974855616110, -0.608762643236982150, -0.608802310096441150, -0.608841975433894840, -0.608881639249243210, -0.608921301542387440, -0.608960962313228380, +-0.609000621561667010, -0.609040279287604400, -0.609079935490940750, -0.609119590171577240, -0.609159243329415070, -0.609198894964354530, -0.609238545076296710, -0.609278193665142460, +-0.609317840730792870, -0.609357486273148900, -0.609397130292110960, -0.609436772787580130, -0.609476413759457710, -0.609516053207643900, -0.609555691132040000, -0.609595327532546860, +-0.609634962409065780, -0.609674595761496960, -0.609714227589741590, -0.609753857893700960, -0.609793486673275490, -0.609833113928366140, -0.609872739658874120, -0.609912363864700160, +-0.609951986545745670, -0.609991607701910970, -0.610031227333097110, -0.610070845439205640, -0.610110462020136630, -0.610150077075791500, -0.610189690606071090, -0.610229302610876600, +-0.610268913090109110, -0.610308522043669030, -0.610348129471458000, -0.610387735373376210, -0.610427339749325170, -0.610466942599205750, -0.610506543922918920, -0.610546143720366200, +-0.610585741991447660, -0.610625338736064840, -0.610664933954119030, -0.610704527645510530, -0.610744119810140650, -0.610783710447910470, -0.610823299558721060, -0.610862887142473720, +-0.610902473199068870, -0.610942057728407820, -0.610981640730391960, -0.611021222204921610, -0.611060802151898290, -0.611100380571222850, -0.611139957462796920, -0.611179532826520710, +-0.611219106662295620, -0.611258678970023170, -0.611298249749603670, -0.611337819000938530, -0.611377386723928830, -0.611416952918475640, -0.611456517584480500, -0.611496080721843690, +-0.611535642330466640, -0.611575202410250870, -0.611614760961096680, -0.611654317982905700, -0.611693873475578800, -0.611733427439017370, -0.611772979873122620, -0.611812530777795070, +-0.611852080152936240, -0.611891627998447430, -0.611931174314229390, -0.611970719100183300, -0.612010262356210370, -0.612049804082212210, -0.612089344278089250, -0.612128882943742790, +-0.612168420079074570, -0.612207955683984890, -0.612247489758375400, -0.612287022302147150, -0.612326553315201250, -0.612366082797439430, -0.612405610748762100, -0.612445137169070560, +-0.612484662058266680, -0.612524185416250750, -0.612563707242924300, -0.612603227538188740, -0.612642746301944930, -0.612682263534094720, -0.612721779234538410, -0.612761293403178090, +-0.612800806039914160, -0.612840317144648260, -0.612879826717281470, -0.612919334757715210, -0.612958841265850870, -0.612998346241589110, -0.613037849684831550, -0.613077351595479600, +-0.613116851973434020, -0.613156350818596210, -0.613195848130867580, -0.613235343910149330, -0.613274838156343090, -0.613314330869349390, -0.613353822049069960, -0.613393311695406230, +-0.613432799808258820, -0.613472286387529490, -0.613511771433119410, -0.613551254944930240, -0.613590736922862590, -0.613630217366818110, -0.613669696276698430, -0.613709173652404180, +-0.613748649493837010, -0.613788123800898200, -0.613827596573489060, -0.613867067811511240, -0.613906537514865460, -0.613946005683453370, -0.613985472317176480, -0.614024937415935670, +-0.614064400979632550, -0.614103863008168330, -0.614143323501444520, -0.614182782459362750, -0.614222239881823670, -0.614261695768728910, -0.614301150119980320, -0.614340602935478540, +-0.614380054215125200, -0.614419503958821830, -0.614458952166469950, -0.614498398837970310, -0.614537843973224750, -0.614577287572134920, -0.614616729634601460, -0.614656170160526210, +-0.614695609149810580, -0.614735046602355890, -0.614774482518063990, -0.614813916896835400, -0.614853349738572090, -0.614892781043175800, -0.614932210810547160, -0.614971639040588050, +-0.615011065733199750, -0.615050490888283900, -0.615089914505742020, -0.615129336585475080, -0.615168757127385170, -0.615208176131373020, -0.615247593597340490, -0.615287009525188890, +-0.615326423914819730, -0.615365836766134990, -0.615405248079035180, -0.615444657853422280, -0.615484066089198150, -0.615523472786263400, -0.615562877944520030, -0.615602281563869540, +-0.615641683644213230, -0.615681084185453090, -0.615720483187489950, -0.615759880650225470, -0.615799276573561820, -0.615838670957399530, -0.615878063801640560, -0.615917455106186450, +-0.615956844870938940, -0.615996233095799100, -0.616035619780668680, -0.616075004925449530, -0.616114388530042520, -0.616153770594349500, -0.616193151118272110, -0.616232530101711750, +-0.616271907544570510, -0.616311283446749130, -0.616350657808149570, -0.616390030628673700, -0.616429401908222370, -0.616468771646697560, -0.616508139844000770, -0.616547506500033650, +-0.616586871614698160, -0.616626235187895170, -0.616665597219526520, -0.616704957709494180, -0.616744316657699240, -0.616783674064043440, -0.616823029928428410, -0.616862384250756230, +-0.616901737030927650, -0.616941088268844750, -0.616980437964409600, -0.617019786117522840, -0.617059132728086770, -0.617098477796002800, -0.617137821321172560, -0.617177163303498140, +-0.617216503742880510, -0.617255842639221620, -0.617295179992423560, -0.617334515802387070, -0.617373850069014350, -0.617413182792206920, -0.617452513971866620, -0.617491843607895330, +-0.617531171700194110, -0.617570498248665390, -0.617609823253210010, -0.617649146713730060, -0.617688468630127270, -0.617727789002303300, -0.617767107830160090, -0.617806425113598960, +-0.617845740852521640, -0.617885055046830330, -0.617924367696426110, -0.617963678801210840, -0.618002988361086470, -0.618042296375954650, -0.618081602845717340, -0.618120907770275730, +-0.618160211149531900, -0.618199512983387820, -0.618238813271744570, -0.618278112014504440, -0.618317409211568860, -0.618356704862840220, -0.618395998968219400, -0.618435291527608680, +-0.618474582540910030, -0.618513872008024550, -0.618553159928854400, -0.618592446303301350, -0.618631731131267130, -0.618671014412654040, -0.618710296147362950, -0.618749576335296260, +-0.618788854976355830, -0.618828132070443070, -0.618867407617459840, -0.618906681617308110, -0.618945954069889730, -0.618985224975106770, -0.619024494332860440, -0.619063762143052920, +-0.619103028405586290, -0.619142293120361730, -0.619181556287281440, -0.619220817906247280, -0.619260077977161430, -0.619299336499924970, -0.619338593474440200, -0.619377848900609320, +-0.619417102778333510, -0.619456355107514840, -0.619495605888055300, -0.619534855119856840, -0.619574102802821550, -0.619613348936850610, -0.619652593521846320, -0.619691836557710870, +-0.619731078044345570, -0.619770317981652500, -0.619809556369533610, -0.619848793207890880, -0.619888028496626500, -0.619927262235641650, -0.619966494424839090, -0.620005725064119880, +-0.620044954153386450, -0.620084181692540540, -0.620123407681484220, -0.620162632120119680, -0.620201855008348240, -0.620241076346072170, -0.620280296133193800, -0.620319514369614300, +-0.620358731055235980, -0.620397946189960800, -0.620437159773690850, -0.620476371806328310, -0.620515582287774480, -0.620554791217931780, -0.620593998596702390, -0.620633204423987620, +-0.620672408699689870, -0.620711611423711120, -0.620750812595953660, -0.620790012216318800, -0.620829210284708940, -0.620868406801026400, -0.620907601765172570, -0.620946795177049650, +-0.620985987036559720, -0.621025177343604850, -0.621064366098087460, -0.621103553299908740, -0.621142738948971100, -0.621181923045176940, -0.621221105588427690, -0.621260286578625640, +-0.621299466015672990, -0.621338643899471580, -0.621377820229923940, -0.621416995006931370, -0.621456168230396620, -0.621495339900221210, -0.621534510016307330, -0.621573678578557280, +-0.621612845586873020, -0.621652011041156860, -0.621691174941310430, -0.621730337287236150, -0.621769498078836300, -0.621808657316012310, -0.621847814998666700, -0.621886971126701550, +-0.621926125700019040, -0.621965278718521470, -0.622004430182110380, -0.622043580090688280, -0.622082728444157460, -0.622121875242419580, -0.622161020485377030, -0.622200164172931780, +-0.622239306304986580, -0.622278446881442740, -0.622317585902202760, -0.622356723367169300, -0.622395859276243520, -0.622434993629328190, -0.622474126426325270, -0.622513257667137170, +-0.622552387351666180, -0.622591515479813840, -0.622630642051482770, -0.622669767066575510, -0.622708890524993340, -0.622748012426639130, -0.622787132771414730, -0.622826251559222550, +-0.622865368789965120, -0.622904484463543850, -0.622943598579861370, -0.622982711138820310, -0.623021822140322090, -0.623060931584269340, -0.623100039470564250, -0.623139145799109340, +-0.623178250569806360, -0.623217353782557600, -0.623256455437265930, -0.623295555533832760, -0.623334654072160600, -0.623373751052151870, -0.623412846473708760, -0.623451940336733900, +-0.623491032641128820, -0.623530123386796140, -0.623569212573638510, -0.623608300201557550, -0.623647386270455790, -0.623686470780235540, -0.623725553730799190, -0.623764635122049270, +-0.623803714953887420, -0.623842793226216610, -0.623881869938938460, -0.623920945091955610, -0.623960018685170480, -0.623999090718485250, -0.624038161191802660, -0.624077230105024360, +-0.624116297458052970, -0.624155363250791130, -0.624194427483140580, -0.624233490155003960, -0.624272551266283560, -0.624311610816881800, -0.624350668806701430, -0.624389725235643960, +-0.624428780103612250, -0.624467833410508820, -0.624506885156235540, -0.624545935340695020, -0.624584983963789700, -0.624624031025422300, -0.624663076525494350, -0.624702120463908830, +-0.624741162840568350, -0.624780203655374570, -0.624819242908230320, -0.624858280599037920, -0.624897316727699770, -0.624936351294118730, -0.624975384298196550, -0.625014415739835740, +-0.625053445618939390, -0.625092473935409010, -0.625131500689147470, -0.625170525880057170, -0.625209549508040530, -0.625248571573000400, -0.625287592074838420, -0.625326611013457550, +-0.625365628388760530, -0.625404644200649010, -0.625443658449025830, -0.625482671133793630, -0.625521682254855050, -0.625560691812111940, -0.625599699805467040, -0.625638706234823210, +-0.625677711100082410, -0.625716714401147180, -0.625755716137920250, -0.625794716310304030, -0.625833714918201390, -0.625872711961514060, -0.625911707440144900, -0.625950701353996890, +-0.625989693702971860, -0.626028684486972460, -0.626067673705901440, -0.626106661359661200, -0.626145647448154600, -0.626184631971283600, -0.626223614928951290, -0.626262596321059740, +-0.626301576147511590, -0.626340554408209570, -0.626379531103056110, -0.626418506231954160, -0.626457479794805590, -0.626496451791513360, -0.626535422221980330, -0.626574391086108460, +-0.626613358383800500, -0.626652324114959190, -0.626691288279487170, -0.626730250877287180, -0.626769211908261180, -0.626808171372312260, -0.626847129269343160, -0.626886085599255960, +-0.626925040361953510, -0.626963993557338450, -0.627002945185313740, -0.627041895245781360, -0.627080843738644260, -0.627119790663805300, -0.627158736021166560, -0.627197679810631010, +-0.627236622032101290, -0.627275562685480010, -0.627314501770670050, -0.627353439287573590, -0.627392375236093590, -0.627431309616132920, -0.627470242427593640, -0.627509173670378730, +-0.627548103344390930, -0.627587031449532870, -0.627625957985707530, -0.627664882952816970, -0.627703806350764170, -0.627742728179452310, -0.627781648438783150, -0.627820567128659970, +-0.627859484248985300, -0.627898399799662330, -0.627937313780593030, -0.627976226191680360, -0.628015137032827520, -0.628054046303936460, -0.628092954004910390, -0.628131860135651810, +-0.628170764696063590, -0.628209667686048910, -0.628248569105509640, -0.628287468954348950, -0.628326367232469930, -0.628365263939774650, -0.628404159076166200, -0.628443052641547430, +-0.628481944635820860, -0.628520835058889890, -0.628559723910656510, -0.628598611191024110, -0.628637496899894900, -0.628676381037171940, -0.628715263602757980, -0.628754144596555880, +-0.628793024018468700, -0.628831901868398770, -0.628870778146248920, -0.628909652851922570, -0.628948525985321690, -0.628987397546349580, -0.629026267534908870, -0.629065135950902520, +-0.629104002794233730, -0.629142868064804570, -0.629181731762518240, -0.629220593887277910, -0.629259454438985680, -0.629298313417544940, -0.629337170822858340, -0.629376026654829170, +-0.629414880913359620, -0.629453733598352770, -0.629492584709712030, -0.629531434247339480, -0.629570282211138310, -0.629609128601011480, -0.629647973416861740, -0.629686816658592500, +-0.629725658326105830, -0.629764498419305040, -0.629803336938093320, -0.629842173882372960, -0.629881009252047150, -0.629919843047018760, -0.629958675267190850, -0.629997505912466500, +-0.630036334982748140, -0.630075162477938930, -0.630113988397942080, -0.630152812742660000, -0.630191635511995860, -0.630230456705852540, -0.630269276324133540, -0.630308094366740960, +-0.630346910833578190, -0.630385725724548430, -0.630424539039553980, -0.630463350778498240, -0.630502160941284200, -0.630540969527814580, -0.630579776537993020, -0.630618581971721600, +-0.630657385828903850, -0.630696188109442830, -0.630734988813241080, -0.630773787940201780, -0.630812585490228120, -0.630851381463222950, -0.630890175859089570, -0.630928968677730520, +-0.630967759919049410, -0.631006549582948550, -0.631045337669331240, -0.631084124178100670, -0.631122909109159690, -0.631161692462411830, -0.631200474237759380, -0.631239254435105760, +-0.631278033054354370, -0.631316810095407630, -0.631355585558168730, -0.631394359442540850, -0.631433131748427190, -0.631471902475731040, -0.631510671624354700, -0.631549439194201700, +-0.631588205185175440, -0.631626969597178340, -0.631665732430113810, -0.631704493683885040, -0.631743253358395320, -0.631782011453547070, -0.631820767969243800, -0.631859522905389050, +-0.631898276261885110, -0.631937028038635380, -0.631975778235543180, -0.632014526852511470, -0.632053273889443880, -0.632092019346242710, -0.632130763222811480, -0.632169505519053710, +-0.632208246234871820, -0.632246985370169320, -0.632285722924849300, -0.632324458898815060, -0.632363193291969990, -0.632401926104216530, -0.632440657335458620, -0.632479386985598800, +-0.632518115054540480, -0.632556841542186830, -0.632595566448441170, -0.632634289773206790, -0.632673011516386440, -0.632711731677883530, -0.632750450257601680, -0.632789167255443320, +-0.632827882671312070, -0.632866596505111120, -0.632905308756743670, -0.632944019426113340, -0.632982728513122540, -0.633021436017674910, -0.633060141939674080, -0.633098846279022460, +-0.633137549035623800, -0.633176250209381290, -0.633214949800198550, -0.633253647807977990, -0.633292344232623260, -0.633331039074038090, -0.633369732332125010, -0.633408424006787540, +-0.633447114097929090, -0.633485802605452840, -0.633524489529262320, -0.633563174869260390, -0.633601858625350460, -0.633640540797436150, -0.633679221385420210, -0.633717900389206170, +-0.633756577808697430, -0.633795253643797300, -0.633833927894409290, -0.633872600560436150, -0.633911271641781400, -0.633949941138349020, -0.633988609050041290, -0.634027275376762070, +-0.634065940118414660, -0.634104603274902810, -0.634143264846129040, -0.634181924831997090, -0.634220583232410710, -0.634259240047272520, -0.634297895276486280, -0.634336548919955280, +-0.634375200977582930, -0.634413851449272760, -0.634452500334927840, -0.634491147634451580, -0.634529793347747730, -0.634568437474719140, -0.634607080015269440, -0.634645720969301940, +-0.634684360336720270, -0.634722998117427940, -0.634761634311327820, -0.634800268918323970, -0.634838901938319160, -0.634877533371217000, -0.634916163216921010, -0.634954791475334620, +-0.634993418146361680, -0.635032043229904810, -0.635070666725867760, -0.635109288634154500, -0.635147908954667550, -0.635186527687310990, -0.635225144831988000, -0.635263760388602110, +-0.635302374357057160, -0.635340986737256030, -0.635379597529102450, -0.635418206732500050, -0.635456814347351910, -0.635495420373561770, -0.635534024811033050, -0.635572627659669600, +-0.635611228919374160, -0.635649828590050700, -0.635688426671603080, -0.635727023163934040, -0.635765618066947420, -0.635804211380546660, -0.635842803104635480, -0.635881393239117630, +-0.635919981783895860, -0.635958568738874240, -0.635997154103956520, -0.636035737879045550, -0.636074320064045300, -0.636112900658859170, -0.636151479663390810, -0.636190057077544060, +-0.636228632901221890, -0.636267207134328160, -0.636305779776766720, -0.636344350828440430, -0.636382920289253360, -0.636421488159108930, -0.636460054437911090, -0.636498619125562830, +-0.636537182221967980, -0.636575743727030520, -0.636614303640653410, -0.636652861962740510, -0.636691418693195450, -0.636729973831921870, -0.636768527378823720, -0.636807079333803870, +-0.636845629696766280, -0.636884178467615030, -0.636922725646252960, -0.636961271232584060, -0.636999815226511950, -0.637038357627940370, -0.637076898436773290, -0.637115437652913450, +-0.637153975276265490, -0.637192511306732270, -0.637231045744217740, -0.637269578588625540, -0.637308109839859420, -0.637346639497823330, -0.637385167562420360, -0.637423694033554480, +-0.637462218911129750, -0.637500742195049040, -0.637539263885216530, -0.637577783981535860, -0.637616302483910660, -0.637654819392245110, -0.637693334706442180, -0.637731848426405850, +-0.637770360552040280, -0.637808871083248460, -0.637847380019934460, -0.637885887362002020, -0.637924393109355230, -0.637962897261897030, -0.638001399819531630, -0.638039900782163110, +-0.638078400149694520, -0.638116897922029860, -0.638155394099072960, -0.638193888680727570, -0.638232381666897890, -0.638270873057486750, -0.638309362852398590, -0.638347851051537240, +-0.638386337654806010, -0.638424822662108980, -0.638463306073349780, -0.638501787888432370, -0.638540268107260830, -0.638578746729738240, -0.638617223755768790, -0.638655699185256660, +-0.638694173018104940, -0.638732645254217800, -0.638771115893499000, -0.638809584935852710, -0.638848052381182250, -0.638886518229391580, -0.638924982480384870, -0.638963445134065560, +-0.639001906190337480, -0.639040365649104710, -0.639078823510271010, -0.639117279773740550, -0.639155734439416650, -0.639194187507203360, -0.639232638977004890, -0.639271088848724520, +-0.639309537122266460, -0.639347983797534550, -0.639386428874432640, -0.639424872352865050, -0.639463314232734840, -0.639501754513946750, -0.639540193196403980, -0.639578630280010610, +-0.639617065764670810, -0.639655499650288230, -0.639693931936767270, -0.639732362624011230, -0.639770791711924190, -0.639809219200410560, -0.639847645089373530, -0.639886069378717390, +-0.639924492068346010, -0.639962913158163450, -0.640001332648073910, -0.640039750537980790, -0.640078166827788180, -0.640116581517400580, -0.640154994606721210, -0.640193406095654230, +-0.640231815984103840, -0.640270224271974220, -0.640308630959168680, -0.640347036045591620, -0.640385439531147240, -0.640423841415738940, -0.640462241699271130, -0.640500640381647560, +-0.640539037462772520, -0.640577432942550100, -0.640615826820883920, -0.640654219097678060, -0.640692609772837040, -0.640730998846264050, -0.640769386317863730, -0.640807772187539810, +-0.640846156455196490, -0.640884539120738170, -0.640922920184068160, -0.640961299645090850, -0.640999677503710560, -0.641038053759830810, -0.641076428413355880, -0.641114801464189870, +-0.641153172912237170, -0.641191542757401310, -0.641229910999586480, -0.641268277638697310, -0.641306642674637000, -0.641345006107310160, -0.641383367936620870, -0.641421728162473000, +-0.641460086784771290, -0.641498443803418920, -0.641536799218320520, -0.641575153029380400, -0.641613505236502070, -0.641651855839590060, -0.641690204838548330, -0.641728552233281070, +-0.641766898023692800, -0.641805242209686930, -0.641843584791168320, -0.641881925768040370, -0.641920265140207720, -0.641958602907574340, -0.641996939070044400, -0.642035273627522440, +-0.642073606579912080, -0.642111937927117630, -0.642150267669043600, -0.642188595805593730, -0.642226922336672220, -0.642265247262183480, -0.642303570582031580, -0.642341892296121150, +-0.642380212404355610, -0.642418530906639470, -0.642456847802877480, -0.642495163092972940, -0.642533476776830590, -0.642571788854354400, -0.642610099325449210, -0.642648408190018340, +-0.642686715447966520, -0.642725021099198160, -0.642763325143617000, -0.642801627581127580, -0.642839928411633950, -0.642878227635040540, -0.642916525251251980, -0.642954821260171670, +-0.642993115661704360, -0.643031408455754570, -0.643069699642225930, -0.643107989221023080, -0.643146277192050200, -0.643184563555211700, -0.643222848310411990, -0.643261131457554920, +-0.643299412996545360, -0.643337692927286930, -0.643375971249684260, -0.643414247963641660, -0.643452523069063420, -0.643490796565854280, -0.643529068453917770, -0.643567338733158520, +-0.643605607403481380, -0.643643874464789880, -0.643682139916988530, -0.643720403759981960, -0.643758665993674370, -0.643796926617970500, -0.643835185632773870, -0.643873443037989320, +-0.643911698833521510, -0.643949953019274160, -0.643988205595151910, -0.644026456561059060, -0.644064705916900460, -0.644102953662579750, -0.644141199798001660, -0.644179444323070950, +-0.644217687237691240, -0.644255928541767390, -0.644294168235203690, -0.644332406317904450, -0.644370642789774630, -0.644408877650717860, -0.644447110900638890, -0.644485342539442560, +-0.644523572567032410, -0.644561800983313390, -0.644600027788189920, -0.644638252981566300, -0.644676476563347370, -0.644714698533436990, -0.644752918891739800, -0.644791137638160650, +-0.644829354772603390, -0.644867570294972660, -0.644905784205173080, -0.644943996503109300, -0.644982207188685260, -0.645020416261805620, -0.645058623722375320, -0.645096829570298120, +-0.645135033805478870, -0.645173236427821980, -0.645211437437232080, -0.645249636833613920, -0.645287834616871230, -0.645326030786909090, -0.645364225343632140, -0.645402418286944220, +-0.645440609616750430, -0.645478799332954930, -0.645516987435462490, -0.645555173924178050, -0.645593358799005150, -0.645631542059849290, -0.645669723706614240, -0.645707903739204840, +-0.645746082157525710, -0.645784258961481390, -0.645822434150976730, -0.645860607725915690, -0.645898779686203020, -0.645936950031743900, -0.645975118762441960, -0.646013285878202170, +-0.646051451378929280, -0.646089615264527680, -0.646127777534902470, -0.646165938189957380, -0.646204097229597600, -0.646242254653727750, -0.646280410462252040, -0.646318564655075200, +-0.646356717232101970, -0.646394868193237330, -0.646433017538385220, -0.646471165267450520, -0.646509311380338180, -0.646547455876952280, -0.646585598757197790, -0.646623740020979220, +-0.646661879668201320, -0.646700017698769170, -0.646738154112586510, -0.646776288909558520, -0.646814422089590060, -0.646852553652585320, -0.646890683598449150, -0.646928811927086290, +-0.646966938638401380, -0.647005063732299380, -0.647043187208684480, -0.647081309067461640, -0.647119429308535830, -0.647157547931811130, -0.647195664937192490, -0.647233780324584670, +-0.647271894093892850, -0.647310006245020890, -0.647348116777873960, -0.647386225692357040, -0.647424332988374210, -0.647462438665830530, -0.647500542724630870, -0.647538645164679740, +-0.647576745985882330, -0.647614845188142720, -0.647652942771366090, -0.647691038735457410, -0.647729133080320760, -0.647767225805861320, -0.647805316911983730, -0.647843406398592950, +-0.647881494265593940, -0.647919580512890780, -0.647957665140389110, -0.647995748147992880, -0.648033829535607400, -0.648071909303137180, -0.648109987450487310, -0.648148063977562750, +-0.648186138884267680, -0.648224212170507300, -0.648262283836186780, -0.648300353881210100, -0.648338422305482550, -0.648376489108908990, -0.648414554291394270, -0.648452617852843470, +-0.648490679793160660, -0.648528740112251260, -0.648566798810020330, -0.648604855886372070, -0.648642911341211660, -0.648680965174443960, -0.648719017385974260, -0.648757067975706650, +-0.648795116943546300, -0.648833164289398520, -0.648871210013167500, -0.648909254114758530, -0.648947296594076350, -0.648985337451025930, -0.649023376685512470, -0.649061414297440350, +-0.649099450286714560, -0.649137484653240620, -0.649175517396922470, -0.649213548517665660, -0.649251578015374920, -0.649289605889955210, -0.649327632141311840, -0.649365656769349100, +-0.649403679773972180, -0.649441701155086480, -0.649479720912596090, -0.649517739046406420, -0.649555755556422420, -0.649593770442549290, -0.649631783704691550, -0.649669795342754150, +-0.649707805356642740, -0.649745813746261500, -0.649783820511515620, -0.649821825652310280, -0.649859829168550340, -0.649897831060141210, -0.649935831326987070, -0.649973829968993440, +-0.650011826986065520, -0.650049822378107710, -0.650087816145025420, -0.650125808286723510, -0.650163798803107040, -0.650201787694081430, -0.650239774959551100, -0.650277760599421660, +-0.650315744613597420, -0.650353727001983790, -0.650391707764485850, -0.650429686901008770, -0.650467664411457650, -0.650505640295737100, -0.650543614553752430, -0.650581587185409150, +-0.650619558190611460, -0.650657527569264870, -0.650695495321274580, -0.650733461446545420, -0.650771425944983050, -0.650809388816491640, -0.650847350060976940, -0.650885309678344020, +-0.650923267668497620, -0.650961224031343040, -0.650999178766785370, -0.651037131874730110, -0.651075083355081570, -0.651113033207745500, -0.651150981432627060, -0.651188928029630910, +-0.651226872998662330, -0.651264816339626630, -0.651302758052428880, -0.651340698136974590, -0.651378636593168300, -0.651416573420915300, -0.651454508620121220, -0.651492442190690580, +-0.651530374132528790, -0.651568304445541040, -0.651606233129632620, -0.651644160184708940, -0.651682085610674420, -0.651720009407434800, -0.651757931574895370, -0.651795852112960870, +-0.651833771021536720, -0.651871688300528220, -0.651909603949840650, -0.651947517969378890, -0.651985430359048320, -0.652023341118754480, -0.652061250248402000, -0.652099157747896290, +-0.652137063617142740, -0.652174967856046560, -0.652212870464513260, -0.652250771442447470, -0.652288670789754720, -0.652326568506340630, -0.652364464592109840, -0.652402359046967860, +-0.652440251870819890, -0.652478143063571440, -0.652516032625127920, -0.652553920555393960, -0.652591806854275540, -0.652629691521677270, -0.652667574557504790, -0.652705455961663290, +-0.652743335734058180, -0.652781213874595200, -0.652819090383178760, -0.652856965259714480, -0.652894838504108230, -0.652932710116264640, -0.652970580096089100, -0.653008448443487270, +-0.653046315158364200, -0.653084180240625760, -0.653122043690176460, -0.653159905506922040, -0.653197765690768260, -0.653235624241619740, -0.653273481159382110, -0.653311336443960780, +-0.653349190095261490, -0.653387042113188880, -0.653424892497648570, -0.653462741248546530, -0.653500588365787170, -0.653538433849276350, -0.653576277698919460, -0.653614119914621930, +-0.653651960496289370, -0.653689799443826660, -0.653727636757139410, -0.653765472436133370, -0.653803306480713280, -0.653841138890784990, -0.653878969666253810, -0.653916798807025250, +-0.653954626313005050, -0.653992452184097850, -0.654030276420209940, -0.654068099021245960, -0.654105919987111760, -0.654143739317712750, -0.654181557012954440, -0.654219373072742580, +-0.654257187496981810, -0.654295000285578190, -0.654332811438437360, -0.654370620955464170, -0.654408428836564470, -0.654446235081643680, -0.654484039690607310, -0.654521842663361110, +-0.654559643999810040, -0.654597443699859840, -0.654635241763416360, -0.654673038190384470, -0.654710832980670010, -0.654748626134178390, -0.654786417650815240, -0.654824207530486310, +-0.654861995773096670, -0.654899782378552290, -0.654937567346758120, -0.654975350677620030, -0.655013132371043530, -0.655050912426934250, -0.655088690845198050, -0.655126467625739780, +-0.655164242768465300, -0.655202016273280560, -0.655239788140090430, -0.655277558368800860, -0.655315326959317380, -0.655353093911545610, -0.655390859225391420, -0.655428622900759650, +-0.655466384937556490, -0.655504145335687570, -0.655541904095058080, -0.655579661215573760, -0.655617416697140240, -0.655655170539663600, -0.655692922743048690, -0.655730673307201360, +-0.655768422232027800, -0.655806169517432870, -0.655843915163322410, -0.655881659169602170, -0.655919401536177890, -0.655957142262955430, -0.655994881349839630, -0.656032618796736800, +-0.656070354603552670, -0.656108088770192330, -0.656145821296561740, -0.656183552182566630, -0.656221281428112650, -0.656259009033105740, -0.656296734997451110, -0.656334459321054830, +-0.656372182003822190, -0.656409903045659050, -0.656447622446471150, -0.656485340206164110, -0.656523056324644140, -0.656560770801816180, -0.656598483637586330, -0.656636194831860530, +-0.656673904384543980, -0.656711612295542650, -0.656749318564762260, -0.656787023192108580, -0.656824726177487660, -0.656862427520804590, -0.656900127221965560, -0.656937825280876410, +-0.656975521697442440, -0.657013216471569630, -0.657050909603163810, -0.657088601092131070, -0.657126290938376490, -0.657163979141806130, -0.657201665702326190, -0.657239350619841730, +-0.657277033894258840, -0.657314715525483480, -0.657352395513421280, -0.657390073857978430, -0.657427750559060000, -0.657465425616572290, -0.657503099030421370, -0.657540770800512210, +-0.657578440926751330, -0.657616109409044140, -0.657653776247296820, -0.657691441441415340, -0.657729104991304990, -0.657766766896871750, -0.657804427158022010, -0.657842085774660860, +-0.657879742746694470, -0.657917398074028830, -0.657955051756569990, -0.657992703794223030, -0.658030354186894480, -0.658068002934490300, -0.658105650036915790, -0.658143295494077240, +-0.658180939305880290, -0.658218581472231110, -0.658256221993035790, -0.658293860868199630, -0.658331498097628700, -0.658369133681229400, -0.658406767618907040, -0.658444399910567690, +-0.658482030556117310, -0.658519659555461880, -0.658557286908507570, -0.658594912615159790, -0.658632536675325060, -0.658670159088908580, -0.658707779855816740, -0.658745398975955520, +-0.658783016449230760, -0.658820632275548770, -0.658858246454814830, -0.658895858986935370, -0.658933469871816560, -0.658971079109363700, -0.659008686699483200, -0.659046292642080920, +-0.659083896937062930, -0.659121499584335520, -0.659159100583804110, -0.659196699935374890, -0.659234297638954250, -0.659271893694447500, -0.659309488101761040, -0.659347080860800960, +-0.659384671971473440, -0.659422261433683880, -0.659459849247338690, -0.659497435412344180, -0.659535019928605750, -0.659572602796029810, -0.659610184014522320, -0.659647763583989350, +-0.659685341504337440, -0.659722917775471760, -0.659760492397298730, -0.659798065369724850, -0.659835636692655440, -0.659873206365997000, -0.659910774389655510, -0.659948340763537140, +-0.659985905487548210, -0.660023468561594110, -0.660061029985581470, -0.660098589759416490, -0.660136147883004790, -0.660173704356252670, -0.660211259179066200, -0.660248812351352020, +-0.660286363873015420, -0.660323913743963040, -0.660361461964101060, -0.660399008533335220, -0.660436553451571710, -0.660474096718716930, -0.660511638334676850, -0.660549178299358110, +-0.660586716612665990, -0.660624253274507130, -0.660661788284787940, -0.660699321643413940, -0.660736853350291640, -0.660774383405327240, -0.660811911808426800, -0.660849438559496960, +-0.660886963658443240, -0.660924487105172380, -0.660962008899590000, -0.660999529041602640, -0.661037047531116360, -0.661074564368037580, -0.661112079552272580, -0.661149593083727120, +-0.661187104962307700, -0.661224615187920860, -0.661262123760472110, -0.661299630679868080, -0.661337135946014950, -0.661374639558818920, -0.661412141518186720, -0.661449641824023770, +-0.661487140476236800, -0.661524637474732220, -0.661562132819415780, -0.661599626510193990, -0.661637118546973160, -0.661674608929659790, -0.661712097658159640, -0.661749584732379210, +-0.661787070152225150, -0.661824553917603090, -0.661862036028419640, -0.661899516484581120, -0.661936995285993810, -0.661974472432564240, -0.662011947924198260, -0.662049421760802390, +-0.662086893942283370, -0.662124364468546720, -0.662161833339499180, -0.662199300555046940, -0.662236766115096630, -0.662274230019554650, -0.662311692268326760, -0.662349152861319570, +-0.662386611798439940, -0.662424069079593390, -0.662461524704686670, -0.662498978673626170, -0.662536430986318540, -0.662573881642669500, -0.662611330642585820, -0.662648777985974100, +-0.662686223672740100, -0.662723667702790450, -0.662761110076031780, -0.662798550792370270, -0.662835989851712660, -0.662873427253964810, -0.662910862999033350, -0.662948297086825120, +-0.662985729517245770, -0.663023160290202140, -0.663060589405600530, -0.663098016863347570, -0.663135442663349780, -0.663172866805513130, -0.663210289289744680, -0.663247710115950070, +-0.663285129284036270, -0.663322546793909560, -0.663359962645476590, -0.663397376838643970, -0.663434789373317570, -0.663472200249404230, -0.663509609466810700, -0.663547017025442830, +-0.663584422925207360, -0.663621827166010920, -0.663659229747759930, -0.663696630670361110, -0.663734029933720440, -0.663771427537744650, -0.663808823482340600, -0.663846217767414260, +-0.663883610392872360, -0.663921001358621310, -0.663958390664568190, -0.663995778310618730, -0.664033164296679910, -0.664070548622658350, -0.664107931288460240, -0.664145312293992210, +-0.664182691639160990, -0.664220069323873010, -0.664257445348035100, -0.664294819711553350, -0.664332192414334500, -0.664369563456285510, -0.664406932837312230, -0.664444300557321730, +-0.664481666616220430, -0.664519031013914960, -0.664556393750312170, -0.664593754825318130, -0.664631114238839690, -0.664668471990783830, -0.664705828081056490, -0.664743182509564430, +-0.664780535276214610, -0.664817886380913660, -0.664855235823567650, -0.664892583604083650, -0.664929929722368420, -0.664967274178328130, -0.665004616971869520, -0.665041958102899460, +-0.665079297571324560, -0.665116635377051680, -0.665153971519986900, -0.665191306000037170, -0.665228638817109470, -0.665265969971109870, -0.665303299461945330, -0.665340627289522590, +-0.665377953453748280, -0.665415277954529370, -0.665452600791772040, -0.665489921965383480, -0.665527241475269760, -0.665564559321337960, -0.665601875503494700, -0.665639190021646730, +-0.665676502875701240, -0.665713814065564070, -0.665751123591142410, -0.665788431452343340, -0.665825737649072710, -0.665863042181237820, -0.665900345048745400, -0.665937646251501980, +-0.665974945789414850, -0.666012243662389980, -0.666049539870334550, -0.666086834413155530, -0.666124127290759200, -0.666161418503052440, -0.666198708049942190, -0.666235995931335530, +-0.666273282147138550, -0.666310566697258300, -0.666347849581601980, -0.666385130800075780, -0.666422410352586650, -0.666459688239041560, -0.666496964459347250, -0.666534239013410800, +-0.666571511901138500, -0.666608783122437320, -0.666646052677214660, -0.666683320565376380, -0.666720586786829880, -0.666757851341481910, -0.666795114229239320, -0.666832375450009280, +-0.666869635003698000, -0.666906892890212880, -0.666944149109460200, -0.666981403661347170, -0.667018656545780740, -0.667055907762667540, -0.667093157311914870, -0.667130405193429140, +-0.667167651407117200, -0.667204895952886570, -0.667242138830643430, -0.667279380040294860, -0.667316619581747820, -0.667353857454909270, -0.667391093659686410, -0.667428328195985520, +-0.667465561063713800, -0.667502792262778420, -0.667540021793085800, -0.667577249654543130, -0.667614475847057240, -0.667651700370535670, -0.667688923224884380, -0.667726144410010770, +-0.667763363925822250, -0.667800581772224900, -0.667837797949126120, -0.667875012456432880, -0.667912225294052030, -0.667949436461890980, -0.667986645959856020, -0.668023853787854450, +-0.668061059945793570, -0.668098264433579780, -0.668135467251120160, -0.668172668398322010, -0.668209867875092180, -0.668247065681337960, -0.668284261816965760, -0.668321456281882890, +-0.668358649075996740, -0.668395840199213610, -0.668433029651440910, -0.668470217432585610, -0.668507403542555110, -0.668544587981255820, -0.668581770748595040, -0.668618951844480170, +-0.668656131268817510, -0.668693309021514580, -0.668730485102478340, -0.668767659511615990, -0.668804832248834690, -0.668842003314041090, -0.668879172707142370, -0.668916340428046150, +-0.668953506476658740, -0.668990670852887440, -0.669027833556639640, -0.669064994587822090, -0.669102153946342540, -0.669139311632107160, -0.669176467645023920, -0.669213621984999120, +-0.669250774651940270, -0.669287925645754460, -0.669325074966348850, -0.669362222613630990, -0.669399368587507150, -0.669436512887884860, -0.669473655514671640, -0.669510796467774010, +-0.669547935747099250, -0.669585073352554790, -0.669622209284047590, -0.669659343541485260, -0.669696476124774120, -0.669733607033821900, -0.669770736268536000, -0.669807863828822850, +-0.669844989714590060, -0.669882113925744820, -0.669919236462194640, -0.669956357323845950, -0.669993476510606480, -0.670030594022383630, -0.670067709859083930, -0.670104824020614890, +-0.670141936506883920, -0.670179047317798090, -0.670216156453264930, -0.670253263913191070, -0.670290369697484010, -0.670327473806051290, -0.670364576238799750, -0.670401676995636690, +-0.670438776076469290, -0.670475873481205080, -0.670512969209751560, -0.670550063262015270, -0.670587155637903720, -0.670624246337324650, -0.670661335360184680, -0.670698422706391460, +-0.670735508375852050, -0.670772592368474200, -0.670809674684164530, -0.670846755322830780, -0.670883834284380360, -0.670920911568720140, -0.670957987175757500, -0.670995061105399970, +-0.671032133357554850, -0.671069203932129540, -0.671106272829031130, -0.671143340048166890, -0.671180405589444580, -0.671217469452771050, -0.671254531638053820, -0.671291592145200180, +-0.671328650974117650, -0.671365708124713860, -0.671402763596895320, -0.671439817390570350, -0.671476869505645450, -0.671513919942028360, -0.671550968699626490, -0.671588015778347150, +-0.671625061178098170, -0.671662104898786190, -0.671699146940318850, -0.671736187302604090, -0.671773225985548450, -0.671810262989059880, -0.671847298313045570, -0.671884331957413040, +-0.671921363922069910, -0.671958394206923160, -0.671995422811880290, -0.672032449736849280, -0.672069474981736860, -0.672106498546450770, -0.672143520430898310, -0.672180540634987440, +-0.672217559158624910, -0.672254576001718450, -0.672291591164175920, -0.672328604645904050, -0.672365616446810700, -0.672402626566803270, -0.672439635005789290, -0.672476641763676500, +-0.672513646840371850, -0.672550650235783090, -0.672587651949818070, -0.672624651982383530, -0.672661650333387320, -0.672698647002736960, -0.672735641990340080, -0.672772635296104430, +-0.672809626919936840, -0.672846616861745070, -0.672883605121437300, -0.672920591698920050, -0.672957576594101270, -0.672994559806888600, -0.673031541337189900, -0.673068521184912010, +-0.673105499349962780, -0.673142475832250180, -0.673179450631681050, -0.673216423748163260, -0.673253395181604430, -0.673290364931912190, -0.673327332998994280, -0.673364299382757660, +-0.673401264083110410, -0.673438227099960260, -0.673475188433214190, -0.673512148082780260, -0.673549106048565880, -0.673586062330478690, -0.673623016928426740, -0.673659969842316910, +-0.673696921072057480, -0.673733870617555410, -0.673770818478718670, -0.673807764655454890, -0.673844709147671690, -0.673881651955277050, -0.673918593078177920, -0.673955532516282370, +-0.673992470269498270, -0.674029406337732670, -0.674066340720893550, -0.674103273418888650, -0.674140204431625480, -0.674177133759012230, -0.674214061400955740, -0.674250987357364110, +-0.674287911628145280, -0.674324834213206440, -0.674361755112455440, -0.674398674325800140, -0.674435591853148390, -0.674472507694407360, -0.674509421849485150, -0.674546334318289590, +-0.674583245100727870, -0.674620154196708070, -0.674657061606137920, -0.674693967328925170, -0.674730871364977670, -0.674767773714202820, -0.674804674376508370, -0.674841573351802730, +-0.674878470639992730, -0.674915366240986580, -0.674952260154692010, -0.674989152381016750, -0.675026042919869010, -0.675062931771155840, -0.675099818934785210, -0.675136704410665530, +-0.675173588198703660, -0.675210470298807870, -0.675247350710885820, -0.675284229434845900, -0.675321106470594960, -0.675357981818041190, -0.675394855477092880, -0.675431727447657120, +-0.675468597729641960, -0.675505466322955380, -0.675542333227505120, -0.675579198443199360, -0.675616061969945170, -0.675652923807650960, -0.675689783956224700, -0.675726642415573680, +-0.675763499185606080, -0.675800354266229640, -0.675837207657352450, -0.675874059358882450, -0.675910909370727060, -0.675947757692794690, -0.675984604324992520, -0.676021449267228960, +-0.676058292519411740, -0.676095134081448720, -0.676131973953248310, -0.676168812134717580, -0.676205648625764820, -0.676242483426298220, -0.676279316536225080, -0.676316147955453810, +-0.676352977683892020, -0.676389805721447800, -0.676426632068029440, -0.676463456723544130, -0.676500279687900160, -0.676537100961005940, -0.676573920542768550, -0.676610738433096380, +-0.676647554631897300, -0.676684369139079700, -0.676721181954550890, -0.676757993078219040, -0.676794802509992690, -0.676831610249778890, -0.676868416297486060, -0.676905220653022170, +-0.676942023316295270, -0.676978824287213680, -0.677015623565684680, -0.677052421151616570, -0.677089217044917870, -0.677126011245495650, -0.677162803753258440, -0.677199594568114290, +-0.677236383689971080, -0.677273171118737190, -0.677309956854320160, -0.677346740896628500, -0.677383523245569720, -0.677420303901052120, -0.677457082862983670, -0.677493860131272550, +-0.677530635705827170, -0.677567409586554810, -0.677604181773364010, -0.677640952266163050, -0.677677721064859240, -0.677714488169361310, -0.677751253579577110, -0.677788017295414710, +-0.677824779316782640, -0.677861539643588310, -0.677898298275740220, -0.677935055213146560, -0.677971810455714970, -0.678008564003353850, -0.678045315855971390, -0.678082066013475870, +-0.678118814475774930, -0.678155561242776980, -0.678192306314390430, -0.678229049690522780, -0.678265791371082450, -0.678302531355977620, -0.678339269645116590, -0.678376006238407660, +-0.678412741135758330, -0.678449474337077250, -0.678486205842272700, -0.678522935651252430, -0.678559663763924740, -0.678596390180197910, -0.678633114899980020, -0.678669837923179810, +-0.678706559249704580, -0.678743278879463060, -0.678779996812363560, -0.678816713048313810, -0.678853427587222220, -0.678890140428997090, -0.678926851573546930, -0.678963561020779370, +-0.679000268770602820, -0.679036974822926020, -0.679073679177656380, -0.679110381834702630, -0.679147082793972840, -0.679183782055375330, -0.679220479618818710, -0.679257175484210610, +-0.679293869651459550, -0.679330562120474160, -0.679367252891161950, -0.679403941963431680, -0.679440629337191520, -0.679477315012349870, -0.679513998988815150, -0.679550681266495200, +-0.679587361845298890, -0.679624040725133720, -0.679660717905908540, -0.679697393387531550, -0.679734067169911030, -0.679770739252955720, -0.679807409636573270, -0.679844078320672280, +-0.679880745305161400, -0.679917410589948370, -0.679954074174941690, -0.679990736060049890, -0.680027396245181270, -0.680064054730244560, -0.680100711515147280, -0.680137366599798290, +-0.680174019984106090, -0.680210671667978660, -0.680247321651324510, -0.680283969934051940, -0.680320616516069900, -0.680357261397285920, -0.680393904577608840, -0.680430546056947310, +-0.680467185835209150, -0.680503823912302910, -0.680540460288137190, -0.680577094962620310, -0.680613727935660990, -0.680650359207166990, -0.680686988777047140, -0.680723616645210190, +-0.680760242811563780, -0.680796867276016850, -0.680833490038477710, -0.680870111098854870, -0.680906730457057070, -0.680943348112992060, -0.680979964066568800, -0.681016578317695800, +-0.681053190866281130, -0.681089801712233430, -0.681126410855461330, -0.681163018295873450, -0.681199624033377750, -0.681236228067882870, -0.681272830399297870, -0.681309431027530390, +-0.681346029952489380, -0.681382627174083270, -0.681419222692220660, -0.681455816506810200, -0.681492408617759950, -0.681528999024978650, -0.681565587728375170, -0.681602174727857450, +-0.681638760023334230, -0.681675343614714160, -0.681711925501905740, -0.681748505684817820, -0.681785084163358260, -0.681821660937436350, -0.681858236006959940, -0.681894809371838000, +-0.681931381031979030, -0.681967950987291570, -0.682004519237684570, -0.682041085783065880, -0.682077650623344580, -0.682114213758429400, -0.682150775188228420, -0.682187334912650490, +-0.682223892931604240, -0.682260449244998180, -0.682297003852741390, -0.682333556754741720, -0.682370107950908240, -0.682406657441149810, -0.682443205225374380, -0.682479751303490810, +-0.682516295675408060, -0.682552838341034750, -0.682589379300279080, -0.682625918553049990, -0.682662456099256460, -0.682698991938806340, -0.682735526071608810, -0.682772058497572500, +-0.682808589216606030, -0.682845118228618380, -0.682881645533517600, -0.682918171131212780, -0.682954695021612770, -0.682991217204625740, -0.683027737680160670, -0.683064256448126180, +-0.683100773508431120, -0.683137288860984460, -0.683173802505694260, -0.683210314442469490, -0.683246824671219330, -0.683283333191851750, -0.683319840004275920, -0.683356345108400380, +-0.683392848504134290, -0.683429350191385840, -0.683465850170064000, -0.683502348440077840, -0.683538845001335440, -0.683575339853745970, -0.683611832997218170, -0.683648324431660790, +-0.683684814156982900, -0.683721302173092570, -0.683757788479899100, -0.683794273077311440, -0.683830755965237790, -0.683867237143587210, -0.683903716612268560, -0.683940194371190690, +-0.683976670420262560, -0.684013144759392460, -0.684049617388489910, -0.684086088307462870, -0.684122557516220640, -0.684159025014672070, -0.684195490802725900, -0.684231954880291320, +-0.684268417247276490, -0.684304877903590740, -0.684341336849143000, -0.684377794083841580, -0.684414249607595780, -0.684450703420314330, -0.684487155521906090, -0.684523605912280230, +-0.684560054591345170, -0.684596501559009860, -0.684632946815183720, -0.684669390359774810, -0.684705832192692430, -0.684742272313845430, -0.684778710723143110, -0.684815147420493760, +-0.684851582405806460, -0.684888015678990600, -0.684924447239954270, -0.684960877088606980, -0.684997305224857360, -0.685033731648614590, -0.685070156359787630, -0.685106579358285120, +-0.685143000644016120, -0.685179420216889930, -0.685215838076814850, -0.685252254223700170, -0.685288668657454970, -0.685325081377987980, -0.685361492385208600, -0.685397901679025260, +-0.685434309259347120, -0.685470715126083490, -0.685507119279142760, -0.685543521718434250, -0.685579922443867010, -0.685616321455350230, -0.685652718752792320, -0.685689114336102580, +-0.685725508205190400, -0.685761900359964090, -0.685798290800333050, -0.685834679526206360, -0.685871066537492970, -0.685907451834102180, -0.685943835415942390, -0.685980217282923020, +-0.686016597434953470, -0.686052975871942140, -0.686089352593798330, -0.686125727600431110, -0.686162100891749670, -0.686198472467663190, -0.686234842328080300, -0.686271210472910510, +-0.686307576902062460, -0.686343941615445540, -0.686380304612968620, -0.686416665894540980, -0.686453025460072030, -0.686489383309470180, -0.686525739442644830, -0.686562093859505510, +-0.686598446559960610, -0.686634797543919650, -0.686671146811291600, -0.686707494361985750, -0.686743840195911500, -0.686780184312977270, -0.686816526713092570, -0.686852867396166910, +-0.686889206362108820, -0.686925543610827690, -0.686961879142232610, -0.686998212956233200, -0.687034545052737980, -0.687070875431656350, -0.687107204092897830, -0.687143531036371050, +-0.687179856261985410, -0.687216179769650100, -0.687252501559274420, -0.687288821630767770, -0.687325139984038770, -0.687361456618996840, -0.687397771535551590, -0.687434084733611670, +-0.687470396213086480, -0.687506705973885300, -0.687543014015917440, -0.687579320339092300, -0.687615624943318520, -0.687651927828506040, -0.687688228994563390, -0.687724528441400200, +-0.687760826168925640, -0.687797122177049030, -0.687833416465679970, -0.687869709034726990, -0.687905999884099840, -0.687942289013707910, -0.687978576423459940, -0.688014862113265570, +-0.688051146083034080, -0.688087428332674670, -0.688123708862097060, -0.688159987671209780, -0.688196264759922570, -0.688232540128145050, -0.688268813775785860, -0.688305085702754620, +-0.688341355908960620, -0.688377624394313600, -0.688413891158722090, -0.688450156202096040, -0.688486419524344750, -0.688522681125377180, -0.688558941005102950, -0.688595199163431260, +-0.688631455600271610, -0.688667710315533640, -0.688703963309126090, -0.688740214580958690, -0.688776464130941070, -0.688812711958981860, -0.688848958064990910, -0.688885202448877630, +-0.688921445110551200, -0.688957686049921580, -0.688993925266897510, -0.689030162761388510, -0.689066398533304430, -0.689102632582554110, -0.689138864909047080, -0.689175095512692960, +-0.689211324393401490, -0.689247551551081310, -0.689283776985642250, -0.689320000696994060, -0.689356222685045590, -0.689392442949706590, -0.689428661490886440, -0.689464878308494570, +-0.689501093402440920, -0.689537306772634140, -0.689573518418984180, -0.689609728341400660, -0.689645936539792560, -0.689682143014069600, -0.689718347764141320, -0.689754550789917100, +-0.689790752091306910, -0.689826951668219390, -0.689863149520564930, -0.689899345648252280, -0.689935540051191180, -0.689971732729291240, -0.690007923682462000, -0.690044112910613290, +-0.690080300413653980, -0.690116486191493910, -0.690152670244042920, -0.690188852571209990, -0.690225033172904840, -0.690261212049037120, -0.690297389199516440, -0.690333564624252550, +-0.690369738323154510, -0.690405910296132070, -0.690442080543095190, -0.690478249063952720, -0.690514415858614730, -0.690550580926990620, -0.690586744268990360, -0.690622905884523020, +-0.690659065773498340, -0.690695223935826390, -0.690731380371415900, -0.690767535080177080, -0.690803688062019420, -0.690839839316852560, -0.690875988844586340, -0.690912136645129960, +-0.690948282718393150, -0.690984427064285980, -0.691020569682717410, -0.691056710573597410, -0.691092849736835600, -0.691128987172341720, -0.691165122880025630, -0.691201256859796500, +-0.691237389111564180, -0.691273519635238640, -0.691309648430729060, -0.691345775497945400, -0.691381900836797290, -0.691418024447194690, -0.691454146329046780, -0.691490266482263420, +-0.691526384906754780, -0.691562501602429820, -0.691598616569198630, -0.691634729806970830, -0.691670841315656260, -0.691706951095164890, -0.691743059145405900, -0.691779165466289150, +-0.691815270057724920, -0.691851372919622070, -0.691887474051890880, -0.691923573454441000, -0.691959671127182150, -0.691995767070024530, -0.692031861282877080, -0.692067953765650220, +-0.692104044518253360, -0.692140133540596230, -0.692176220832588780, -0.692212306394140890, -0.692248390225162490, -0.692284472325562780, -0.692320552695251830, -0.692356631334139940, +-0.692392708242136060, -0.692428783419150480, -0.692464856865092850, -0.692500928579873110, -0.692536998563401450, -0.692573066815586950, -0.692609133336339780, -0.692645198125570020, +-0.692681261183186960, -0.692717322509100790, -0.692753382103221350, -0.692789439965458720, -0.692825496095722190, -0.692861550493921950, -0.692897603159968070, -0.692933654093769950, +-0.692969703295237550, -0.693005750764281060, -0.693041796500810100, -0.693077840504734980, -0.693113882775964970, -0.693149923314410280, -0.693185962119981070, -0.693221999192586650, +-0.693258034532137190, -0.693294068138542660, -0.693330100011712910, -0.693366130151558350, -0.693402158557988040, -0.693438185230912390, -0.693474210170241580, -0.693510233375884910, +-0.693546254847752670, -0.693582274585754830, -0.693618292589801570, -0.693654308859802280, -0.693690323395667270, -0.693726336197306730, -0.693762347264629930, -0.693798356597547410, +-0.693834364195968890, -0.693870370059804560, -0.693906374188964500, -0.693942376583358330, -0.693978377242896130, -0.694014376167488290, -0.694050373357044230, -0.694086368811474230, +-0.694122362530688370, -0.694158354514596510, -0.694194344763109150, -0.694230333276135590, -0.694266320053586460, -0.694302305095371270, -0.694338288401400330, -0.694374269971583580, +-0.694410249805831210, -0.694446227904053530, -0.694482204266160030, -0.694518178892060910, -0.694554151781666800, -0.694590122934886870, -0.694626092351631640, -0.694662060031811300, +-0.694698025975335700, -0.694733990182115350, -0.694769952652059760, -0.694805913385079240, -0.694841872381084300, -0.694877829639984230, -0.694913785161689780, -0.694949738946110780, +-0.694985690993157770, -0.695021641302740130, -0.695057589874768510, -0.695093536709153190, -0.695129481805803700, -0.695165425164630420, -0.695201366785543670, -0.695237306668453510, +-0.695273244813270350, -0.695309181219903820, -0.695345115888264310, -0.695381048818262350, -0.695416980009807450, -0.695452909462810130, -0.695488837177180460, -0.695524763152828740, +-0.695560687389665370, -0.695596609887600080, -0.695632530646543180, -0.695668449666405290, -0.695704366947095920, -0.695740282488525710, -0.695776196290604720, -0.695812108353243590, +-0.695848018676351820, -0.695883927259840050, -0.695919834103618800, -0.695955739207597680, -0.695991642571687220, -0.696027544195797490, -0.696063444079839110, -0.696099342223722270, +-0.696135238627356820, -0.696171133290653280, -0.696207026213522260, -0.696242917395873300, -0.696278806837617110, -0.696314694538663790, -0.696350580498923840, -0.696386464718307780, +-0.696422347196725130, -0.696458227934086960, -0.696494106930302890, -0.696529984185283670, -0.696565859698939360, -0.696601733471180480, -0.696637605501917560, -0.696673475791060310, +-0.696709344338519390, -0.696745211144205400, -0.696781076208027980, -0.696816939529897980, -0.696852801109725580, -0.696888660947421300, -0.696924519042895540, -0.696960375396058260, +-0.696996230006819980, -0.697032082875091440, -0.697067934000782370, -0.697103783383803520, -0.697139631024065180, -0.697175476921478080, -0.697211321075951960, -0.697247163487397570, +-0.697283004155725530, -0.697318843080845690, -0.697354680262668780, -0.697390515701105220, -0.697426349396065290, -0.697462181347459740, -0.697498011555198530, -0.697533840019192270, +-0.697569666739351720, -0.697605491715586610, -0.697641314947807900, -0.697677136435925770, -0.697712956179850960, -0.697748774179493990, -0.697784590434764710, -0.697820404945574290, +-0.697856217711832590, -0.697892028733450350, -0.697927838010338090, -0.697963645542406090, -0.697999451329565420, -0.698035255371725730, -0.698071057668797960, -0.698106858220692850, +-0.698142657027320150, -0.698178454088590920, -0.698214249404415570, -0.698250042974704610, -0.698285834799368790, -0.698321624878318170, -0.698357413211463380, -0.698393199798715390, +-0.698428984639984150, -0.698464767735180400, -0.698500549084214770, -0.698536328686997780, -0.698572106543440150, -0.698607882653452080, -0.698643657016944530, -0.698679429633827560, +-0.698715200504012040, -0.698750969627408570, -0.698786737003927570, -0.698822502633480000, -0.698858266515975930, -0.698894028651326330, -0.698929789039441810, -0.698965547680232560, +-0.699001304573609320, -0.699037059719482930, -0.699072813117763920, -0.699108564768363140, -0.699144314671190650, -0.699180062826157300, -0.699215809233174170, -0.699251553892151320, +-0.699287296802999390, -0.699323037965629330, -0.699358777379952000, -0.699394515045877350, -0.699430250963316460, -0.699465985132180170, -0.699501717552378670, -0.699537448223822910, +-0.699573177146423530, -0.699608904320091150, -0.699644629744736850, -0.699680353420270680, -0.699716075346603520, -0.699751795523646640, -0.699787513951309890, -0.699823230629504360, +-0.699858945558140770, -0.699894658737129750, -0.699930370166382380, -0.699966079845808940, -0.700001787775320410, -0.700037493954827280, -0.700073198384240310, -0.700108901063470350, +-0.700144601992428120, -0.700180301171024700, -0.700215998599170280, -0.700251694276775800, -0.700287388203752470, -0.700323080380010340, -0.700358770805460500, -0.700394459480013660, +-0.700430146403580700, -0.700465831576072780, -0.700501514997399880, -0.700537196667473160, -0.700572876586203820, -0.700608554753502030, -0.700644231169278760, -0.700679905833444970, +-0.700715578745911730, -0.700751249906589210, -0.700786919315388610, -0.700822586972220880, -0.700858252876996550, -0.700893917029626450, -0.700929579430021650, -0.700965240078092800, +-0.701000898973751290, -0.701036556116907180, -0.701072211507471680, -0.701107865145355950, -0.701143517030470180, -0.701179167162725660, -0.701214815542033240, -0.701250462168303780, +-0.701286107041448450, -0.701321750161377650, -0.701357391528002360, -0.701393031141233970, -0.701428669000982660, -0.701464305107159620, -0.701499939459675930, -0.701535572058442640, +-0.701571202903370050, -0.701606831994369570, -0.701642459331352280, -0.701678084914228560, -0.701713708742909500, -0.701749330817306280, -0.701784951137329750, -0.701820569702891080, +-0.701856186513900690, -0.701891801570269870, -0.701927414871909790, -0.701963026418730980, -0.701998636210644510, -0.702034244247561560, -0.702069850529392860, -0.702105455056049930, +-0.702141057827442960, -0.702176658843483790, -0.702212258104082610, -0.702247855609150710, -0.702283451358599260, -0.702319045352339130, -0.702354637590281720, -0.702390228072337420, +-0.702425816798417530, -0.702461403768433360, -0.702496988982295510, -0.702532572439915070, -0.702568154141203220, -0.702603734086071020, -0.702639312274429770, -0.702674888706189880, +-0.702710463381262860, -0.702746036299559900, -0.702781607460991610, -0.702817176865469300, -0.702852744512904030, -0.702888310403207210, -0.702923874536289350, -0.702959436912061750, +-0.702994997530435820, -0.703030556391322170, -0.703066113494632110, -0.703101668840276810, -0.703137222428167230, -0.703172774258215010, -0.703208324330330430, -0.703243872644425120, +-0.703279419200410480, -0.703314963998196930, -0.703350507037695970, -0.703386048318818680, -0.703421587841476350, -0.703457125605580380, -0.703492661611041180, -0.703528195857770380, +-0.703563728345679480, -0.703599259074678910, -0.703634788044680160, -0.703670315255594430, -0.703705840707333220, -0.703741364399807170, -0.703776886332927560, -0.703812406506606150, +-0.703847924920753430, -0.703883441575280930, -0.703918956470099720, -0.703954469605121200, -0.703989980980256780, -0.704025490595417080, -0.704060998450513730, -0.704096504545458140, +-0.704132008880160920, -0.704167511454533710, -0.704203012268487800, -0.704238511321934270, -0.704274008614784840, -0.704309504146950040, -0.704344997918341820, -0.704380489928870810, +-0.704415980178448530, -0.704451468666986270, -0.704486955394395430, -0.704522440360587420, -0.704557923565473090, -0.704593405008963840, -0.704628884690971510, -0.704664362611406640, +-0.704699838770180830, -0.704735313167205390, -0.704770785802391720, -0.704806256675651330, -0.704841725786895080, -0.704877193136034360, -0.704912658722981140, -0.704948122547645940, +-0.704983584609940370, -0.705019044909775850, -0.705054503447064000, -0.705089960221715660, -0.705125415233642360, -0.705160868482755830, -0.705196319968966810, -0.705231769692187040, +-0.705267217652327800, -0.705302663849300520, -0.705338108283017020, -0.705373550953387830, -0.705408991860324800, -0.705444431003739550, -0.705479868383542930, -0.705515303999646570, +-0.705550737851962100, -0.705586169940400690, -0.705621600264874190, -0.705657028825293350, -0.705692455621569900, -0.705727880653615690, -0.705763303921341460, -0.705798725424658930, +-0.705834145163479640, -0.705869563137715320, -0.705904979347276810, -0.705940393792075740, -0.705975806472024070, -0.706011217387032540, -0.706046626537013000, -0.706082033921876850, +-0.706117439541535610, -0.706152843395901120, -0.706188245484884240, -0.706223645808396690, -0.706259044366350340, -0.706294441158656030, -0.706329836185225710, -0.706365229445970690, +-0.706400620940802690, -0.706436010669633460, -0.706471398632373850, -0.706506784828936030, -0.706542169259230970, -0.706577551923170510, -0.706612932820666170, -0.706648311951629470, +-0.706683689315972250, -0.706719064913605590, -0.706754438744441220, -0.706789810808391090, -0.706825181105366070, -0.706860549635278220, -0.706895916398038840, -0.706931281393559760, +-0.706966644621752740, -0.707002006082528830, -0.707037365775799900, -0.707072723701477890, -0.707108079859473770, -0.707143434249699390, -0.707178786872066480, -0.707214137726486890, +-0.707249486812871590, -0.707284834131132630, -0.707320179681181880, -0.707355523462930400, -0.707390865476290150, -0.707426205721172650, -0.707461544197489630, -0.707496880905153170, +-0.707532215844074110, -0.707567549014164520, -0.707602880415336370, -0.707638210047500720, -0.707673537910569530, -0.707708864004454540, -0.707744188329067380, -0.707779510884319900, +-0.707814831670123490, -0.707850150686390010, -0.707885467933031420, -0.707920783409958900, -0.707956097117084400, -0.707991409054319680, -0.708026719221576670, -0.708062027618766580, +-0.708097334245801460, -0.708132639102593280, -0.708167942189053210, -0.708203243505093230, -0.708238543050625170, -0.708273840825560770, -0.708309136829812110, -0.708344431063290260, +-0.708379723525907280, -0.708415014217575360, -0.708450303138205670, -0.708485590287710190, -0.708520875666000640, -0.708556159272988980, -0.708591441108587180, -0.708626721172706530, +-0.708661999465259320, -0.708697275986156840, -0.708732550735311160, -0.708767823712634140, -0.708803094918037500, -0.708838364351433440, -0.708873632012733120, -0.708908897901848860, +-0.708944162018692590, -0.708979424363175630, -0.709014684935210030, -0.709049943734707750, -0.709085200761580660, -0.709120456015740810, -0.709155709497099610, -0.709190961205569010, +-0.709226211141061440, -0.709261459303487940, -0.709296705692760820, -0.709331950308791930, -0.709367193151493550, -0.709402434220776760, -0.709437673516553960, -0.709472911038737330, +-0.709508146787237950, -0.709543380761968320, -0.709578612962840300, -0.709613843389765630, -0.709649072042656700, -0.709684298921424820, -0.709719524025982150, -0.709754747356240890, +-0.709789968912112550, -0.709825188693509300, -0.709860406700343120, -0.709895622932525840, -0.709930837389969870, -0.709966050072586510, -0.710001260980288260, -0.710036470112986540, +-0.710071677470593740, -0.710106883053021720, -0.710142086860182430, -0.710177288891988170, -0.710212489148350560, -0.710247687629181670, -0.710282884334393790, -0.710318079263898450, +-0.710353272417607930, -0.710388463795434190, -0.710423653397289300, -0.710458841223085560, -0.710494027272734470, -0.710529211546148340, -0.710564394043239340, -0.710599574763919220, +-0.710634753708100030, -0.710669930875694080, -0.710705106266613540, -0.710740279880769820, -0.710775451718075550, -0.710810621778442900, -0.710845790061783500, -0.710880956568009540, +-0.710916121297033190, -0.710951284248766520, -0.710986445423121950, -0.711021604820010870, -0.711056762439345900, -0.711091918281039350, -0.711127072345002610, -0.711162224631148200, +-0.711197375139388300, -0.711232523869634870, -0.711267670821800540, -0.711302815995796700, -0.711337959391535770, -0.711373101008930250, -0.711408240847891780, -0.711443378908332540, +-0.711478515190165030, -0.711513649693301440, -0.711548782417653400, -0.711583913363133420, -0.711619042529654020, -0.711654169917126600, -0.711689295525463890, -0.711724419354577750, +-0.711759541404380800, -0.711794661674785110, -0.711829780165702530, -0.711864896877045460, -0.711900011808726530, -0.711935124960657250, -0.711970236332750140, -0.712005345924917380, +-0.712040453737071370, -0.712075559769124510, -0.712110664020988440, -0.712145766492575990, -0.712180867183798800, -0.712215966094569500, -0.712251063224800250, -0.712286158574403250, +-0.712321252143291340, -0.712356343931375810, -0.712391433938569520, -0.712426522164784970, -0.712461608609933790, -0.712496693273928620, -0.712531776156681620, -0.712566857258105200, +-0.712601936578111990, -0.712637014116613620, -0.712672089873522710, -0.712707163848751880, -0.712742236042212870, -0.712777306453818320, -0.712812375083480390, -0.712847441931111940, +-0.712882506996624480, -0.712917570279930750, -0.712952631780943370, -0.712987691499574190, -0.713022749435735740, -0.713057805589340510, -0.713092859960300700, -0.713127912548529030, +-0.713162963353937250, -0.713198012376438100, -0.713233059615944190, -0.713268105072367380, -0.713303148745620290, -0.713338190635615320, -0.713373230742264890, -0.713408269065481710, +-0.713443305605177440, -0.713478340361265010, -0.713513373333657050, -0.713548404522265310, -0.713583433927002520, -0.713618461547781190, -0.713653487384513950, -0.713688511437112760, +-0.713723533705490350, -0.713758554189559250, -0.713793572889231620, -0.713828589804419880, -0.713863604935036870, -0.713898618280994770, -0.713933629842206320, -0.713968639618583590, +-0.714003647610039200, -0.714038653816486120, -0.714073658237835970, -0.714108660874001710, -0.714143661724895850, -0.714178660790430800, -0.714213658070519400, -0.714248653565073610, +-0.714283647274006390, -0.714318639197229820, -0.714353629334656630, -0.714388617686199320, -0.714423604251770540, -0.714458589031283120, -0.714493572024648800, -0.714528553231780550, +-0.714563532652591200, -0.714598510286992840, -0.714633486134898080, -0.714668460196219660, -0.714703432470870090, -0.714738402958762230, -0.714773371659808030, -0.714808338573920450, +-0.714843303701012340, -0.714878267040995660, -0.714913228593783370, -0.714948188359287860, -0.714983146337422330, -0.715018102528098500, -0.715053056931229450, -0.715088009546728130, +-0.715122960374506400, -0.715157909414477320, -0.715192856666553520, -0.715227802130647410, -0.715262745806672260, -0.715297687694539830, -0.715332627794163290, -0.715367566105455490, +-0.715402502628328390, -0.715437437362695050, -0.715472370308468110, -0.715507301465560190, -0.715542230833884460, -0.715577158413352790, -0.715612084203878230, -0.715647008205373640, +-0.715681930417751410, -0.715716850840924290, -0.715751769474805010, -0.715786686319306640, -0.715821601374341250, -0.715856514639821810, -0.715891426115661370, -0.715926335801772120, +-0.715961243698067020, -0.715996149804458910, -0.716031054120860320, -0.716065956647184310, -0.716100857383343280, -0.716135756329250080, -0.716170653484817680, -0.716205548849958460, +-0.716240442424585290, -0.716275334208611000, -0.716310224201948450, -0.716345112404510600, -0.716379998816209730, -0.716414883436959030, -0.716449766266670900, -0.716484647305258400, +-0.716519526552634290, -0.716554404008711290, -0.716589279673402580, -0.716624153546620460, -0.716659025628277880, -0.716693895918288030, -0.716728764416563190, -0.716763631123016330, +-0.716798496037560520, -0.716833359160108370, -0.716868220490573190, -0.716903080028867160, -0.716937937774903440, -0.716972793728595130, -0.717007647889854600, -0.717042500258594840, +-0.717077350834728900, -0.717112199618169850, -0.717147046608830110, -0.717181891806622620, -0.717216735211460790, -0.717251576823256800, -0.717286416641923830, -0.717321254667374840, +-0.717356090899522790, -0.717390925338280640, -0.717425757983561010, -0.717460588835276970, -0.717495417893341700, -0.717530245157667610, -0.717565070628167990, -0.717599894304755680, +-0.717634716187343540, -0.717669536275844950, -0.717704354570172230, -0.717739171070238550, -0.717773985775957300, -0.717808798687240790, -0.717843609804002300, -0.717878419126154800, +-0.717913226653611570, -0.717948032386284910, -0.717982836324088210, -0.718017638466934670, -0.718052438814736790, -0.718087237367407760, -0.718122034124860640, -0.718156829087008510, +-0.718191622253764540, -0.718226413625041250, -0.718261203200751930, -0.718295990980809870, -0.718330776965127480, -0.718365561153618270, -0.718400343546195090, -0.718435124142771110, +-0.718469902943259520, -0.718504679947572940, -0.718539455155624900, -0.718574228567328000, -0.718609000182595440, -0.718643770001340500, -0.718678538023476030, -0.718713304248915550, +-0.718748068677571570, -0.718782831309357380, -0.718817592144186390, -0.718852351181971110, -0.718887108422624930, -0.718921863866061050, -0.718956617512192420, -0.718991369360932660, +-0.719026119412194080, -0.719060867665890280, -0.719095614121934570, -0.719130358780239560, -0.719165101640718560, -0.719199842703284850, -0.719234581967851950, -0.719269319434332250, +-0.719304055102639170, -0.719338788972686330, -0.719373521044386120, -0.719408251317652070, -0.719442979792397570, -0.719477706468535480, -0.719512431345979530, -0.719547154424642120, +-0.719581875704436880, -0.719616595185277210, -0.719651312867075840, -0.719686028749745970, -0.719720742833201200, -0.719755455117354610, -0.719790165602119610, -0.719824874287408930, +-0.719859581173136310, -0.719894286259214480, -0.719928989545556950, -0.719963691032076800, -0.719998390718687540, -0.720033088605302680, -0.720067784691834740, -0.720102478978197350, +-0.720137171464304000, -0.720171862150067450, -0.720206551035401210, -0.720241238120218670, -0.720275923404433030, -0.720310606887957890, -0.720345288570705790, -0.720379968452590670, +-0.720414646533525830, -0.720449322813424110, -0.720483997292199030, -0.720518669969763880, -0.720553340846032510, -0.720588009920917430, -0.720622677194332370, -0.720657342666190860, +-0.720692006336405620, -0.720726668204890510, -0.720761328271558700, -0.720795986536323490, -0.720830642999098710, -0.720865297659797010, -0.720899950518332000, -0.720934601574617420, +-0.720969250828566110, -0.721003898280091590, -0.721038543929107380, -0.721073187775526760, -0.721107829819263470, -0.721142470060230470, -0.721177108498341160, -0.721211745133509390, +-0.721246379965647890, -0.721281012994670510, -0.721315644220490660, -0.721350273643021960, -0.721384901262177140, -0.721419527077870270, -0.721454151090014760, -0.721488773298523570, +-0.721523393703310530, -0.721558012304288840, -0.721592629101372230, -0.721627244094474430, -0.721661857283508180, -0.721696468668387210, -0.721731078249025380, -0.721765686025335640, +-0.721800291997231610, -0.721834896164626820, -0.721869498527434870, -0.721904099085569410, -0.721938697838943490, -0.721973294787471080, -0.722007889931065130, -0.722042483269639380, +-0.722077074803107570, -0.722111664531382870, -0.722146252454379580, -0.722180838572010100, -0.722215422884188610, -0.722250005390828950, -0.722284586091843980, -0.722319164987147430, +-0.722353742076653040, -0.722388317360274200, -0.722422890837924990, -0.722457462509518140, -0.722492032374967730, -0.722526600434187590, -0.722561166687090580, -0.722595731133590550, +-0.722630293773601330, -0.722664854607036670, -0.722699413633809410, -0.722733970853833840, -0.722768526267023480, -0.722803079873291620, -0.722837631672551990, -0.722872181664718340, +-0.722906729849704170, -0.722941276227423550, -0.722975820797789330, -0.723010363560715570, -0.723044904516116360, -0.723079443663904420, -0.723113981003993930, -0.723148516536298520, +-0.723183050260731710, -0.723217582177207770, -0.723252112285639350, -0.723286640585940830, -0.723321167078025960, -0.723355691761807810, -0.723390214637200430, -0.723424735704117580, +-0.723459254962473210, -0.723493772412180380, -0.723528288053153060, -0.723562801885305310, -0.723597313908550310, -0.723631824122802030, -0.723666332527974190, -0.723700839123980530, +-0.723735343910735020, -0.723769846888150940, -0.723804348056142130, -0.723838847414622900, -0.723873344963506080, -0.723907840702705970, -0.723942334632136310, -0.723976826751710710, +-0.724011317061343470, -0.724045805560947550, -0.724080292250437460, -0.724114777129726270, -0.724149260198728160, -0.724183741457356980, -0.724218220905526340, -0.724252698543150550, +-0.724287174370142670, -0.724321648386416770, -0.724356120591887140, -0.724390590986466850, -0.724425059570070200, -0.724459526342610790, -0.724493991304002600, -0.724528454454159700, +-0.724562915792995480, -0.724597375320423900, -0.724631833036359140, -0.724666288940714500, -0.724700743033404260, -0.724735195314341940, -0.724769645783442160, -0.724804094440617890, +-0.724838541285783400, -0.724872986318852770, -0.724907429539739410, -0.724941870948357490, -0.724976310544620860, -0.725010748328443590, -0.725045184299739630, -0.725079618458422390, +-0.725114050804406160, -0.725148481337605010, -0.725182910057932450, -0.725217336965302660, -0.725251762059629490, -0.725286185340826780, -0.725320606808809050, -0.725355026463489480, +-0.725389444304782360, -0.725423860332601870, -0.725458274546861510, -0.725492686947475370, -0.725527097534357620, -0.725561506307422330, -0.725595913266583010, -0.725630318411753960, +-0.725664721742849350, -0.725699123259782590, -0.725733522962468180, -0.725767920850819760, -0.725802316924751610, -0.725836711184178030, -0.725871103629012420, -0.725905494259168950, +-0.725939883074562140, -0.725974270075105180, -0.726008655260712680, -0.726043038631298380, -0.726077420186776570, -0.726111799927061650, -0.726146177852066700, -0.726180553961706780, +-0.726214928255895060, -0.726249300734546080, -0.726283671397573770, -0.726318040244892440, -0.726352407276416150, -0.726386772492058630, -0.726421135891734180, -0.726455497475357200, +-0.726489857242841100, -0.726524215194100380, -0.726558571329049220, -0.726592925647601470, -0.726627278149671870, -0.726661628835173710, -0.726695977704021390, -0.726730324756129530, +-0.726764669991411540, -0.726799013409781920, -0.726833355011154650, -0.726867694795444440, -0.726902032762564600, -0.726936368912429630, -0.726970703244954050, -0.727005035760051490, +-0.727039366457636340, -0.727073695337622670, -0.727108022399924890, -0.727142347644457290, -0.727176671071133600, -0.727210992679868110, -0.727245312470575440, -0.727279630443169340, +-0.727313946597563990, -0.727348260933673880, -0.727382573451413110, -0.727416884150696160, -0.727451193031436680, -0.727485500093549290, -0.727519805336948490, -0.727554108761547800, +-0.727588410367261850, -0.727622710154004810, -0.727657008121691320, -0.727691304270235100, -0.727725598599550550, -0.727759891109552300, -0.727794181800154090, -0.727828470671270320, +-0.727862757722815500, -0.727897042954703700, -0.727931326366849650, -0.727965607959166870, -0.727999887731570210, -0.728034165683974050, -0.728068441816292160, -0.728102716128439240, +-0.728136988620329490, -0.728171259291877200, -0.728205528142997220, -0.728239795173603040, -0.728274060383609640, -0.728308323772930870, -0.728342585341481220, -0.728376845089175000, +-0.728411103015926820, -0.728445359121651200, -0.728479613406261880, -0.728513865869673370, -0.728548116511800630, -0.728582365332557380, -0.728616612331858040, -0.728650857509617220, +-0.728685100865749340, -0.728719342400168890, -0.728753582112789840, -0.728787820003526820, -0.728822056072294560, -0.728856290319006890, -0.728890522743578460, -0.728924753345923770, +-0.728958982125957440, -0.728993209083593330, -0.729027434218746270, -0.729061657531330900, -0.729095879021261160, -0.729130098688451690, -0.729164316532816880, -0.729198532554271360, +-0.729232746752729750, -0.729266959128106020, -0.729301169680314890, -0.729335378409271100, -0.729369585314888490, -0.729403790397082140, -0.729437993655766110, -0.729472195090855260, +-0.729506394702264080, -0.729540592489906660, -0.729574788453698050, -0.729608982593552220, -0.729643174909383910, -0.729677365401107720, -0.729711554068637970, -0.729745740911889710, +-0.729779925930776900, -0.729814109125214160, -0.729848290495116460, -0.729882470040397750, -0.729916647760972870, -0.729950823656756340, -0.729984997727662790, -0.730019169973606940, +-0.730053340394502980, -0.730087508990265640, -0.730121675760809890, -0.730155840706049550, -0.730190003825899710, -0.730224165120274770, -0.730258324589089680, -0.730292482232258620, +-0.730326638049696330, -0.730360792041317650, -0.730394944207036770, -0.730429094546768410, -0.730463243060427430, -0.730497389747928330, -0.730531534609186070, -0.730565677644114620, +-0.730599818852629030, -0.730633958234644170, -0.730668095790074080, -0.730702231518833730, -0.730736365420837860, -0.730770497496001090, -0.730804627744238380, -0.730838756165463790, +-0.730872882759592280, -0.730907007526538920, -0.730941130466217670, -0.730975251578543590, -0.731009370863431430, -0.731043488320796130, -0.731077603950551770, -0.731111717752613410, +-0.731145829726896120, -0.731179939873313980, -0.731214048191781930, -0.731248154682214710, -0.731282259344527170, -0.731316362178634270, -0.731350463184450180, -0.731384562361889980, +-0.731418659710868500, -0.731452755231300270, -0.731486848923100010, -0.731520940786182680, -0.731555030820463030, -0.731589119025855990, -0.731623205402275990, -0.731657289949638190, +-0.731691372667856890, -0.731725453556847150, -0.731759532616523820, -0.731793609846801640, -0.731827685247595780, -0.731861758818820320, -0.731895830560390540, -0.731929900472221510, +-0.731963968554227300, -0.731998034806323190, -0.732032099228424050, -0.732066161820444710, -0.732100222582300120, -0.732134281513904810, -0.732168338615173720, -0.732202393886022040, +-0.732236447326364170, -0.732270498936115180, -0.732304548715189910, -0.732338596663503650, -0.732372642780970470, -0.732406687067505780, -0.732440729523024640, -0.732474770147441330, +-0.732508808940671050, -0.732542845902628860, -0.732576881033229600, -0.732610914332388340, -0.732644945800019490, -0.732678975436038330, -0.732713003240359930, -0.732747029212898800, +-0.732781053353570130, -0.732815075662288870, -0.732849096138969760, -0.732883114783528300, -0.732917131595878790, -0.732951146575936410, -0.732985159723616440, -0.733019171038833290, +-0.733053180521502260, -0.733087188171538170, -0.733121193988856560, -0.733155197973371480, -0.733189200124998550, -0.733223200443652860, -0.733257198929248900, -0.733291195581701970, +-0.733325190400927030, -0.733359183386839030, -0.733393174539353490, -0.733427163858384580, -0.733461151343847930, -0.733495136995658600, -0.733529120813731120, -0.733563102797980870, +-0.733597082948322820, -0.733631061264672150, -0.733665037746944030, -0.733699012395053090, -0.733732985208914830, -0.733766956188443900, -0.733800925333555560, -0.733834892644164900, +-0.733868858120186980, -0.733902821761537210, -0.733936783568130190, -0.733970743539881120, -0.734004701676705510, -0.734038657978517860, -0.734072612445233470, -0.734106565076767640, +-0.734140515873035420, -0.734174464833952100, -0.734208411959432430, -0.734242357249391690, -0.734276300703745390, -0.734310242322408050, -0.734344182105295060, -0.734378120052321610, +-0.734412056163403100, -0.734445990438454270, -0.734479922877390390, -0.734513853480126990, -0.734547782246578800, -0.734581709176660990, -0.734615634270288980, -0.734649557527377820, +-0.734683478947843140, -0.734717398531599450, -0.734751316278562270, -0.734785232188647110, -0.734819146261768590, -0.734853058497842100, -0.734886968896783070, -0.734920877458506540, +-0.734954784182928140, -0.734988689069962400, -0.735022592119525030, -0.735056493331531560, -0.735090392705896490, -0.735124290242535450, -0.735158185941363620, -0.735192079802296620, +-0.735225971825249180, -0.735259862010136820, -0.735293750356875050, -0.735327636865378610, -0.735361521535563110, -0.735395404367343850, -0.735429285360636010, -0.735463164515355210, +-0.735497041831416290, -0.735530917308734770, -0.735564790947226270, -0.735598662746805410, -0.735632532707387930, -0.735666400828889120, -0.735700267111224270, -0.735734131554309110, +-0.735767994158058380, -0.735801854922387810, -0.735835713847212360, -0.735869570932447650, -0.735903426178009080, -0.735937279583811830, -0.735971131149771750, -0.736004980875803570, +-0.736038828761822810, -0.736072674807745410, -0.736106519013485890, -0.736140361378960220, -0.736174201904083560, -0.736208040588771430, -0.736241877432939450, -0.736275712436502580, +-0.736309545599376340, -0.736343376921476560, -0.736377206402717980, -0.736411034043016440, -0.736444859842287360, -0.736478683800446340, -0.736512505917408360, -0.736546326193089130, +-0.736580144627404400, -0.736613961220268900, -0.736647775971598580, -0.736681588881308860, -0.736715399949315120, -0.736749209175533220, -0.736783016559877880, -0.736816822102265070, +-0.736850625802610510, -0.736884427660829180, -0.736918227676836680, -0.736952025850548530, -0.736985822181880470, -0.737019616670748110, -0.737053409317066420, -0.737087200120751130, +-0.737120989081718190, -0.737154776199882460, -0.737188561475159760, -0.737222344907465740, -0.737256126496716120, -0.737289906242825870, -0.737323684145710920, -0.737357460205287030, +-0.737391234421469140, -0.737425006794173220, -0.737458777323314770, -0.737492546008809310, -0.737526312850572800, -0.737560077848520290, -0.737593841002567530, -0.737627602312630470, +-0.737661361778624180, -0.737695119400464390, -0.737728875178066850, -0.737762629111347050, -0.737796381200221060, -0.737830131444603850, -0.737863879844411490, -0.737897626399559140, +-0.737931371109962870, -0.737965113975538100, -0.737998854996200440, -0.738032594171866060, -0.738066331502449820, -0.738100066987867900, -0.738133800628036020, -0.738167532422869250, +-0.738201262372283780, -0.738234990476195120, -0.738268716734518990, -0.738302441147171250, -0.738336163714067180, -0.738369884435122750, -0.738403603310253900, -0.738437320339375700, +-0.738471035522404230, -0.738504748859255210, -0.738538460349844610, -0.738572169994087480, -0.738605877791900010, -0.738639583743198050, -0.738673287847896880, -0.738706990105912450, +-0.738740690517160630, -0.738774389081557010, -0.738808085799017800, -0.738841780669458050, -0.738875473692793830, -0.738909164868941200, -0.738942854197815360, -0.738976541679332470, +-0.739010227313408150, -0.739043911099958260, -0.739077593038898860, -0.739111273130145240, -0.739144951373613690, -0.739178627769219500, -0.739212302316878840, -0.739245975016507240, +-0.739279645868020860, -0.739313314871335560, -0.739346982026366620, -0.739380647333030330, -0.739414310791242760, -0.739447972400919080, -0.739481632161975380, -0.739515290074327700, +-0.739548946137891680, -0.739582600352583720, -0.739616252718318990, -0.739649903235013450, -0.739683551902583610, -0.739717198720944550, -0.739750843690012430, -0.739784486809703210, +-0.739818128079932860, -0.739851767500617430, -0.739885405071672330, -0.739919040793013960, -0.739952674664557720, -0.739986306686219790, -0.740019936857916120, -0.740053565179562560, +-0.740087191651075390, -0.740120816272369920, -0.740154439043362420, -0.740188059963969190, -0.740221679034105410, -0.740255296253687580, -0.740288911622631330, -0.740322525140852950, +-0.740356136808268510, -0.740389746624793400, -0.740423354590343920, -0.740456960704836350, -0.740490564968186100, -0.740524167380309460, -0.740557767941122380, -0.740591366650541150, +-0.740624963508481280, -0.740658558514858960, -0.740692151669590570, -0.740725742972591420, -0.740759332423778010, -0.740792920023066180, -0.740826505770372120, -0.740860089665612120, +-0.740893671708701460, -0.740927251899556770, -0.740960830238094230, -0.740994406724229230, -0.741027981357878280, -0.741061554138957360, -0.741095125067382510, -0.741128694143070140, +-0.741162261365935880, -0.741195826735896120, -0.741229390252866600, -0.741262951916763500, -0.741296511727503100, -0.741330069685001370, -0.741363625789174810, -0.741397180039938820, +-0.741430732437210030, -0.741464282980904500, -0.741497831670938080, -0.741531378507227060, -0.741564923489687610, -0.741598466618235810, -0.741632007892788160, -0.741665547313260290, +-0.741699084879568480, -0.741732620591629250, -0.741766154449358120, -0.741799686452671690, -0.741833216601486050, -0.741866744895717580, -0.741900271335282020, -0.741933795920095670, +-0.741967318650075260, -0.742000839525136180, -0.742034358545195060, -0.742067875710167970, -0.742101391019971300, -0.742134904474521350, -0.742168416073733850, -0.742201925817525420, +-0.742235433705812350, -0.742268939738510490, -0.742302443915536130, -0.742335946236805770, -0.742369446702235480, -0.742402945311742000, -0.742436442065240840, -0.742469936962648510, +-0.742503430003881640, -0.742536921188855840, -0.742570410517487840, -0.742603897989693730, -0.742637383605390220, -0.742670867364493060, -0.742704349266918530, -0.742737829312583590, +-0.742771307501403630, -0.742804783833295510, -0.742838258308175400, -0.742871730925959710, -0.742905201686564930, -0.742938670589906810, -0.742972137635902090, -0.743005602824467260, +-0.743039066155518180, -0.743072527628971360, -0.743105987244743300, -0.743139445002750200, -0.743172900902908880, -0.743206354945134870, -0.743239807129345340, -0.743273257455456140, +-0.743306705923383550, -0.743340152533044310, -0.743373597284354700, -0.743407040177231470, -0.743440481211590230, -0.743473920387347720, -0.743507357704420890, -0.743540793162725260, +-0.743574226762177660, -0.743607658502694500, -0.743641088384192180, -0.743674516406587440, -0.743707942569796220, -0.743741366873734930, -0.743774789318320640, -0.743808209903469190, +-0.743841628629097080, -0.743875045495120850, -0.743908460501457420, -0.743941873648022560, -0.743975284934732860, -0.744008694361505410, -0.744042101928255820, -0.744075507634901050, +-0.744108911481357490, -0.744142313467541670, -0.744175713593370200, -0.744209111858759380, -0.744242508263625700, -0.744275902807886030, -0.744309295491456300, -0.744342686314253270, +-0.744376075276193650, -0.744409462377193740, -0.744442847617170500, -0.744476230996039880, -0.744509612513718720, -0.744542992170123650, -0.744576369965170960, -0.744609745898777260, +-0.744643119970859300, -0.744676492181333800, -0.744709862530116730, -0.744743231017125030, -0.744776597642275550, -0.744809962405484250, -0.744843325306668080, -0.744876686345743670, +-0.744910045522627410, -0.744943402837236370, -0.744976758289486510, -0.745010111879294780, -0.745043463606578140, -0.745076813471252430, -0.745110161473234720, -0.745143507612441640, +-0.745176851888789790, -0.745210194302196150, -0.745243534852576660, -0.745276873539848510, -0.745310210363928080, -0.745343545324732020, -0.745376878422177150, -0.745410209656180100, +-0.745443539026657720, -0.745476866533526290, -0.745510192176702670, -0.745543515956103910, -0.745576837871645970, -0.745610157923245920, -0.745643476110820600, -0.745676792434286530, +-0.745710106893560760, -0.745743419488559490, -0.745776730219199660, -0.745810039085398220, -0.745843346087071370, -0.745876651224136270, -0.745909954496509540, -0.745943255904108150, +-0.745976555446848270, -0.746009853124647070, -0.746043148937421520, -0.746076442885087900, -0.746109734967563050, -0.746143025184763940, -0.746176313536607180, -0.746209600023010070, +-0.746242884643888550, -0.746276167399159810, -0.746309448288741020, -0.746342727312548250, -0.746376004470498790, -0.746409279762509150, -0.746442553188496390, -0.746475824748377480, +-0.746509094442068810, -0.746542362269487340, -0.746575628230550240, -0.746608892325173910, -0.746642154553275210, -0.746675414914771180, -0.746708673409578920, -0.746741930037614690, +-0.746775184798795570, -0.746808437693038840, -0.746841688720260690, -0.746874937880378290, -0.746908185173308590, -0.746941430598968450, -0.746974674157275030, -0.747007915848144630, +-0.747041155671494430, -0.747074393627241480, -0.747107629715302420, -0.747140863935594310, -0.747174096288034000, -0.747207326772538430, -0.747240555389024900, -0.747273782137409580, +-0.747307007017610100, -0.747340230029542860, -0.747373451173125040, -0.747406670448273690, -0.747439887854905560, -0.747473103392937930, -0.747506317062287430, -0.747539528862871010, +-0.747572738794606060, -0.747605946857409000, -0.747639153051197100, -0.747672357375887330, -0.747705559831396640, -0.747738760417642310, -0.747771959134540860, -0.747805155982009360, +-0.747838350959965430, -0.747871544068325230, -0.747904735307006190, -0.747937924675925350, -0.747971112175000010, -0.748004297804146570, -0.748037481563282310, -0.748070663452324760, +-0.748103843471190190, -0.748137021619796010, -0.748170197898059270, -0.748203372305897170, -0.748236544843226770, -0.748269715509964680, -0.748302884306028430, -0.748336051231335290, +-0.748369216285801660, -0.748402379469344960, -0.748435540781882350, -0.748468700223330900, -0.748501857793608010, -0.748535013492630070, -0.748568167320314730, -0.748601319276579140, +-0.748634469361340040, -0.748667617574514720, -0.748700763916020470, -0.748733908385774470, -0.748767050983693450, -0.748800191709694810, -0.748833330563695940, -0.748866467545613590, +-0.748899602655364930, -0.748932735892867350, -0.748965867258037930, -0.748998996750794070, -0.749032124371052490, -0.749065250118730490, -0.749098373993745680, -0.749131495996014810, +-0.749164616125455040, -0.749197734381983780, -0.749230850765518100, -0.749263965275975720, -0.749297077913273050, -0.749330188677328040, -0.749363297568057200, -0.749396404585378150, +-0.749429509729208080, -0.749462612999464260, -0.749495714396064220, -0.749528813918924560, -0.749561911567962920, -0.749595007343096700, -0.749628101244242730, -0.749661193271318420, +-0.749694283424241270, -0.749727371702928360, -0.749760458107297300, -0.749793542637264720, -0.749826625292748460, -0.749859706073665810, -0.749892784979933610, -0.749925862011469490, +-0.749958937168190620, -0.749992010450014850, -0.750025081856858680, -0.750058151388639740, -0.750091219045275760, -0.750124284826683470, -0.750157348732780500, -0.750190410763484140, +-0.750223470918711670, -0.750256529198380930, -0.750289585602408550, -0.750322640130712150, -0.750355692783209460, -0.750388743559817220, -0.750421792460453150, -0.750454839485034660, +-0.750487884633478930, -0.750520927905703910, -0.750553969301626210, -0.750587008821163910, -0.750620046464233860, -0.750653082230753550, -0.750686116120640730, -0.750719148133812460, +-0.750752178270186700, -0.750785206529680060, -0.750818232912210610, -0.750851257417695650, -0.750884280046052450, -0.750917300797198430, -0.750950319671051190, -0.750983336667528150, +-0.751016351786547020, -0.751049365028024880, -0.751082376391879250, -0.751115385878027840, -0.751148393486387730, -0.751181399216876770, -0.751214403069412230, -0.751247405043911960, +-0.751280405140292820, -0.751313403358472740, -0.751346399698369470, -0.751379394159899850, -0.751412386742981830, -0.751445377447532700, -0.751478366273470310, -0.751511353220712160, +-0.751544338289175330, -0.751577321478777760, -0.751610302789437080, -0.751643282221070460, -0.751676259773595530, -0.751709235446930020, -0.751742209240991330, -0.751775181155697410, +-0.751808151190965330, -0.751841119346712940, -0.751874085622857850, -0.751907050019317460, -0.751940012536009280, -0.751972973172851170, -0.752005931929760840, -0.752038888806655480, +-0.752071843803452820, -0.752104796920070930, -0.752137748156426640, -0.752170697512438040, -0.752203644988022720, -0.752236590583098220, -0.752269534297582590, -0.752302476131392780, +-0.752335416084446870, -0.752368354156662590, -0.752401290347957220, -0.752434224658248610, -0.752467157087454490, -0.752500087635492370, -0.752533016302280310, -0.752565943087735610, +-0.752598867991776110, -0.752631791014319320, -0.752664712155282970, -0.752697631414584900, -0.752730548792142740, -0.752763464287874440, -0.752796377901697290, -0.752829289633529020, +-0.752862199483287920, -0.752895107450891050, -0.752928013536256380, -0.752960917739301740, -0.752993820059944750, -0.753026720498103490, -0.753059619053695120, -0.753092515726637710, +-0.753125410516849450, -0.753158303424247280, -0.753191194448749270, -0.753224083590273370, -0.753256970848737440, -0.753289856224058860, -0.753322739716155710, -0.753355621324945930, +-0.753388501050346830, -0.753421378892276450, -0.753454254850652650, -0.753487128925393160, -0.753520001116416150, -0.753552871423638910, -0.753585739846979520, -0.753618606386355920, +-0.753651471041685620, -0.753684333812886690, -0.753717194699876750, -0.753750053702573970, -0.753782910820896320, -0.753815766054761080, -0.753848619404086540, -0.753881470868790540, +-0.753914320448790700, -0.753947168144005090, -0.753980013954351440, -0.754012857879748140, -0.754045699920112390, -0.754078540075362350, -0.754111378345416310, -0.754144214730191440, +-0.754177049229606160, -0.754209881843578180, -0.754242712572025460, -0.754275541414866300, -0.754308368372017980, -0.754341193443398780, -0.754374016628926890, -0.754406837928519590, +-0.754439657342095280, -0.754472474869571700, -0.754505290510867120, -0.754538104265899510, -0.754570916134586380, -0.754603726116846120, -0.754636534212596350, -0.754669340421755260, +-0.754702144744240800, -0.754734947179971030, -0.754767747728864120, -0.754800546390837600, -0.754833343165809630, -0.754866138053698620, -0.754898931054422070, -0.754931722167898060, +-0.754964511394044860, -0.754997298732780320, -0.755030084184022840, -0.755062867747689830, -0.755095649423699670, -0.755128429211970760, -0.755161207112420410, -0.755193983124966990, +-0.755226757249528700, -0.755259529486023710, -0.755292299834369740, -0.755325068294484980, -0.755357834866287710, -0.755390599549695670, -0.755423362344627150, -0.755456123251000200, +-0.755488882268732900, -0.755521639397743750, -0.755554394637950160, -0.755587147989270620, -0.755619899451623560, -0.755652649024926350, -0.755685396709097510, -0.755718142504055330, +-0.755750886409717660, -0.755783628426003110, -0.755816368552829190, -0.755849106790114300, -0.755881843137776950, -0.755914577595734770, -0.755947310163906150, -0.755980040842209160, +-0.756012769630562410, -0.756045496528883530, -0.756078221537090810, -0.756110944655102870, -0.756143665882837210, -0.756176385220212350, -0.756209102667146690, -0.756241818223558180, +-0.756274531889365440, -0.756307243664485980, -0.756339953548838540, -0.756372661542341510, -0.756405367644912510, -0.756438071856470050, -0.756470774176932430, -0.756503474606217810, +-0.756536173144244820, -0.756568869790931190, -0.756601564546195650, -0.756634257409955930, -0.756666948382130560, -0.756699637462637800, -0.756732324651395950, -0.756765009948323520, +-0.756797693353338240, -0.756830374866358850, -0.756863054487303840, -0.756895732216090740, -0.756928408052638390, -0.756961081996865070, -0.756993754048689070, -0.757026424208028900, +-0.757059092474802410, -0.757091758848928100, -0.757124423330324810, -0.757157085918910070, -0.757189746614602700, -0.757222405417320890, -0.757255062326983470, -0.757287717343507970, +-0.757320370466813220, -0.757353021696817840, -0.757385671033439680, -0.757418318476597240, -0.757450964026209150, -0.757483607682193470, -0.757516249444469160, -0.757548889312953940, +-0.757581527287566450, -0.757614163368225510, -0.757646797554848870, -0.757679429847355150, -0.757712060245662840, -0.757744688749690480, -0.757777315359356660, -0.757809940074579250, +-0.757842562895276960, -0.757875183821368650, -0.757907802852771930, -0.757940419989405870, -0.757973035231188640, -0.758005648578039090, -0.758038260029875290, -0.758070869586615740, +-0.758103477248179280, -0.758136083014483870, -0.758168686885448250, -0.758201288860990920, -0.758233888941030390, -0.758266487125485390, -0.758299083414273880, -0.758331677807314700, +-0.758364270304526580, -0.758396860905827470, -0.758429449611136340, -0.758462036420371470, -0.758494621333451470, -0.758527204350295300, -0.758559785470820810, -0.758592364694947060, +-0.758624942022592230, -0.758657517453675050, -0.758690090988114020, -0.758722662625827770, -0.758755232366735140, -0.758787800210754090, -0.758820366157803680, -0.758852930207802530, +-0.758885492360668820, -0.758918052616321390, -0.758950610974678750, -0.758983167435659630, -0.759015721999182880, -0.759048274665166560, -0.759080825433529500, -0.759113374304190680, +-0.759145921277068150, -0.759178466352080860, -0.759211009529147330, -0.759243550808186620, -0.759276090189116790, -0.759308627671856580, -0.759341163256325280, -0.759373696942440720, +-0.759406228730121760, -0.759438758619287450, -0.759471286609856080, -0.759503812701746940, -0.759536336894877760, -0.759568859189167940, -0.759601379584536220, -0.759633898080900650, +-0.759666414678180520, -0.759698929376294240, -0.759731442175160530, -0.759763953074698680, -0.759796462074826650, -0.759828969175463610, -0.759861474376527960, -0.759893977677938650, +-0.759926479079614300, -0.759958978581473880, -0.759991476183436210, -0.760023971885419590, -0.760056465687343090, -0.760088957589125650, -0.760121447590685450, -0.760153935691941780, +-0.760186421892813270, -0.760218906193218640, -0.760251388593077060, -0.760283869092306720, -0.760316347690826680, -0.760348824388556110, -0.760381299185413080, -0.760413772081316890, +-0.760446243076186250, -0.760478712169940340, -0.760511179362497240, -0.760543644653776330, -0.760576108043696460, -0.760608569532176150, -0.760641029119134340, -0.760673486804489980, +-0.760705942588161930, -0.760738396470069360, -0.760770848450130430, -0.760803298528264450, -0.760835746704390360, -0.760868192978426780, -0.760900637350292670, -0.760933079819906990, +-0.760965520387188450, -0.760997959052056580, -0.761030395814429440, -0.761062830674226310, -0.761095263631366480, -0.761127694685768130, -0.761160123837350540, -0.761192551086032680, +-0.761224976431733700, -0.761257399874372020, -0.761289821413866810, -0.761322241050137350, -0.761354658783101930, -0.761387074612679960, -0.761419488538790270, -0.761451900561351810, +-0.761484310680283990, -0.761516718895505100, -0.761549125206934300, -0.761581529614490990, -0.761613932118093690, -0.761646332717661470, -0.761678731413113490, -0.761711128204368590, +-0.761743523091346190, -0.761775916073964670, -0.761808307152143650, -0.761840696325801650, -0.761873083594857840, -0.761905468959231390, -0.761937852418841270, -0.761970233973606750, +-0.762002613623446350, -0.762034991368279350, -0.762067367208025260, -0.762099741142602480, -0.762132113171930300, -0.762164483295927900, -0.762196851514514220, -0.762229217827608770, +-0.762261582235129960, -0.762293944736997080, -0.762326305333129730, -0.762358664023446320, -0.762391020807866250, -0.762423375686308690, -0.762455728658692930, -0.762488079724937600, +-0.762520428884961960, -0.762552776138685550, -0.762585121486026970, -0.762617464926905630, -0.762649806461240590, -0.762682146088951020, -0.762714483809956320, -0.762746819624175230, +-0.762779153531527030, -0.762811485531931230, -0.762843815625306450, -0.762876143811572090, -0.762908470090647440, -0.762940794462451550, -0.762973116926904060, -0.763005437483923350, +-0.763037756133429170, -0.763070072875340790, -0.763102387709576950, -0.763134700636057260, -0.763167011654700690, -0.763199320765426960, -0.763231627968154580, -0.763263933262803170, +-0.763296236649292140, -0.763328538127540310, -0.763360837697467210, -0.763393135358991890, -0.763425431112033760, -0.763457724956512320, -0.763490016892346300, -0.763522306919455220, +-0.763554595037758690, -0.763586881247175440, -0.763619165547624880, -0.763651447939026510, -0.763683728421299390, -0.763716006994363370, -0.763748283658136960, -0.763780558412540110, +-0.763812831257491660, -0.763845102192911130, -0.763877371218717790, -0.763909638334831050, -0.763941903541170530, -0.763974166837654840, -0.764006428224203840, -0.764038687700737020, +-0.764070945267173230, -0.764103200923432090, -0.764135454669432890, -0.764167706505095130, -0.764199956430338330, -0.764232204445081330, -0.764264450549243860, -0.764296694742745530, +-0.764328937025505200, -0.764361177397442580, -0.764393415858476870, -0.764425652408528000, -0.764457887047514720, -0.764490119775356750, -0.764522350591973710, -0.764554579497284560, +-0.764586806491208910, -0.764619031573666290, -0.764651254744576070, -0.764683476003858000, -0.764715695351430910, -0.764747912787214550, -0.764780128311128850, -0.764812341923092440, +-0.764844553623025170, -0.764876763410846540, -0.764908971286475950, -0.764941177249833350, -0.764973381300837360, -0.765005583439408050, -0.765037783665465040, -0.765069981978927280, +-0.765102178379714500, -0.765134372867746330, -0.765166565442942480, -0.765198756105221920, -0.765230944854504490, -0.765263131690710030, -0.765295316613757490, -0.765327499623566500, +-0.765359680720056890, -0.765391859903148060, -0.765424037172759860, -0.765456212528811240, -0.765488385971222150, -0.765520557499912320, -0.765552727114800820, -0.765584894815807600, +-0.765617060602852060, -0.765649224475853820, -0.765681386434732940, -0.765713546479408150, -0.765745704609799960, -0.765777860825827110, -0.765810015127409540, -0.765842167514466990, +-0.765874317986919070, -0.765906466544685640, -0.765938613187685750, -0.765970757915839240, -0.766002900729066290, -0.766035041627285640, -0.766067180610417450, -0.766099317678381350, +-0.766131452831096960, -0.766163586068484110, -0.766195717390462110, -0.766227846796950770, -0.766259974287870180, -0.766292099863139290, -0.766324223522678150, -0.766356345266406390, +-0.766388465094244190, -0.766420583006110490, -0.766452699001925360, -0.766484813081608760, -0.766516925245079750, -0.766549035492258500, -0.766581143823064640, -0.766613250237418000, +-0.766645354735238430, -0.766677457316445210, -0.766709557980958410, -0.766741656728697870, -0.766773753559582990, -0.766805848473533720, -0.766837941470469800, -0.766870032550311050, +-0.766902121712977560, -0.766934208958388370, -0.766966294286463680, -0.766998377697123650, -0.767030459190287230, -0.767062538765874820, -0.767094616423805940, -0.767126692164000870, +-0.767158765986378780, -0.767190837890859730, -0.767222907877363910, -0.767254975945810600, -0.767287042096119750, -0.767319106328211320, -0.767351168642005140, -0.767383229037421290, +-0.767415287514379150, -0.767447344072798690, -0.767479398712600290, -0.767511451433703030, -0.767543502236027080, -0.767575551119492490, -0.767607598084018910, -0.767639643129526710, +-0.767671686255935070, -0.767703727463164620, -0.767735766751134420, -0.767767804119764860, -0.767799839568975790, -0.767831873098687060, -0.767863904708819050, -0.767895934399290820, +-0.767927962170022900, -0.767959988020935350, -0.767992011951947550, -0.768024033962979690, -0.768056054053951720, -0.768088072224783590, -0.768120088475395590, -0.768152102805707120, +-0.768184115215638450, -0.768216125705109660, -0.768248134274040370, -0.768280140922350640, -0.768312145649960640, -0.768344148456790550, -0.768376149342759770, -0.768408148307788700, +-0.768440145351797390, -0.768472140474705580, -0.768504133676433330, -0.768536124956900820, -0.768568114316027890, -0.768600101753735050, -0.768632087269941700, -0.768664070864568010, +-0.768696052537534480, -0.768728032288760630, -0.768760010118166530, -0.768791986025672560, -0.768823960011198570, -0.768855932074664960, -0.768887902215991240, -0.768919870435098020, +-0.768951836731904810, -0.768983801106332130, -0.769015763558299810, -0.769047724087728150, -0.769079682694537530, -0.769111639378647350, -0.769143594139978020, -0.769175546978450030, +-0.769207497893982910, -0.769239446886497040, -0.769271393955912600, -0.769303339102149540, -0.769335282325128600, -0.769367223624769060, -0.769399163000991430, -0.769431100453716210, +-0.769463035982863030, -0.769494969588352170, -0.769526901270103920, -0.769558831028038680, -0.769590758862076060, -0.769622684772136580, -0.769654608758140730, -0.769686530820007930, +-0.769718450957658900, -0.769750369171013800, -0.769782285459992720, -0.769814199824516150, -0.769846112264503830, -0.769878022779876270, -0.769909931370553970, -0.769941838036456440, +-0.769973742777504410, -0.770005645593617950, -0.770037546484717450, -0.770069445450723310, -0.770101342491555260, -0.770133237607133920, -0.770165130797379800, -0.770197022062212520, +-0.770228911401552590, -0.770260798815320500, -0.770292684303436670, -0.770324567865820820, -0.770356449502393570, -0.770388329213075540, -0.770420206997786350, -0.770452082856446620, +-0.770483956788976740, -0.770515828795296900, -0.770547698875327810, -0.770579567028989110, -0.770611433256201630, -0.770643297556885760, -0.770675159930961360, -0.770707020378349150, +-0.770738878898969300, -0.770770735492742330, -0.770802590159588740, -0.770834442899428370, -0.770866293712182180, -0.770898142597770120, -0.770929989556112580, -0.770961834587130080, +-0.770993677690742900, -0.771025518866871980, -0.771057358115436850, -0.771089195436358340, -0.771121030829557190, -0.771152864294953220, -0.771184695832466960, -0.771216525442019020, +-0.771248353123529800, -0.771280178876919910, -0.771312002702109420, -0.771343824599018730, -0.771375644567568910, -0.771407462607679670, -0.771439278719271760, -0.771471092902265680, +-0.771502905156582040, -0.771534715482140920, -0.771566523878863040, -0.771598330346669140, -0.771630134885479050, -0.771661937495213720, -0.771693738175793560, -0.771725536927138970, +-0.771757333749170880, -0.771789128641809150, -0.771820921604974620, -0.771852712638588010, -0.771884501742569400, -0.771916288916839500, -0.771948074161318940, -0.771979857475928120, +-0.772011638860587990, -0.772043418315218390, -0.772075195839740270, -0.772106971434074470, -0.772138745098141070, -0.772170516831860660, -0.772202286635154000, -0.772234054507941910, +-0.772265820450144470, -0.772297584461682400, -0.772329346542476650, -0.772361106692447290, -0.772392864911515150, -0.772424621199600760, -0.772456375556624940, -0.772488127982508430, +-0.772519878477171300, -0.772551627040534480, -0.772583373672518950, -0.772615118373044530, -0.772646861142032400, -0.772678601979403190, -0.772710340885077400, -0.772742077858976080, +-0.772773812901019320, -0.772805546011128160, -0.772837277189223020, -0.772869006435224600, -0.772900733749053660, -0.772932459130630910, -0.772964182579877310, -0.772995904096712930, +-0.773027623681058820, -0.773059341332835940, -0.773091057051964350, -0.773122770838365230, -0.773154482691959080, -0.773186192612666860, -0.773217900600409290, -0.773249606655106780, +-0.773281310776680160, -0.773313012965050620, -0.773344713220138310, -0.773376411541864210, -0.773408107930149020, -0.773439802384913830, -0.773471494906078920, -0.773503185493565230, +-0.773534874147293830, -0.773566560867185000, -0.773598245653159710, -0.773629928505138900, -0.773661609423043180, -0.773693288406793860, -0.773724965456310980, -0.773756640571515610, +-0.773788313752328930, -0.773819984998671220, -0.773851654310463540, -0.773883321687626750, -0.773914987130081670, -0.773946650637749260, -0.773978312210550130, -0.774009971848405140, +-0.774041629551235450, -0.774073285318961470, -0.774104939151504360, -0.774136591048784740, -0.774168241010724010, -0.774199889037242350, -0.774231535128261040, -0.774263179283701140, +-0.774294821503482940, -0.774326461787527840, -0.774358100135756460, -0.774389736548089850, -0.774421371024449190, -0.774453003564754880, -0.774484634168927990, -0.774516262836889790, +-0.774547889568560690, -0.774579514363861850, -0.774611137222714240, -0.774642758145038800, -0.774674377130756710, -0.774705994179788360, -0.774737609292055370, -0.774769222467478040, +-0.774800833705977740, -0.774832443007475220, -0.774864050371891660, -0.774895655799148320, -0.774927259289165500, -0.774958860841864490, -0.774990460457166690, -0.775022058134992360, +-0.775053653875263040, -0.775085247677899440, -0.775116839542822730, -0.775148429469954330, -0.775180017459214500, -0.775211603510524540, -0.775243187623805950, -0.775274769798979140, +-0.775306350035965260, -0.775337928334685620, -0.775369504695061500, -0.775401079117013170, -0.775432651600462260, -0.775464222145329950, -0.775495790751536850, -0.775527357419004250, +-0.775558922147653320, -0.775590484937405010, -0.775622045788180730, -0.775653604699901080, -0.775685161672487470, -0.775716716705861180, -0.775748269799942940, -0.775779820954653920, +-0.775811370169915300, -0.775842917445648370, -0.775874462781774410, -0.775906006178213930, -0.775937547634888540, -0.775969087151719530, -0.776000624728627410, -0.776032160365533800, +-0.776063694062359870, -0.776095225819026900, -0.776126755635455630, -0.776158283511567460, -0.776189809447283770, -0.776221333442525420, -0.776252855497213680, -0.776284375611269840, +-0.776315893784614960, -0.776347410017170670, -0.776378924308857580, -0.776410436659597190, -0.776441947069311020, -0.776473455537919690, -0.776504962065344690, -0.776536466651507330, +-0.776567969296328760, -0.776599469999730510, -0.776630968761633400, -0.776662465581959060, -0.776693960460628330, -0.776725453397562720, -0.776756944392683390, -0.776788433445911750, +-0.776819920557169310, -0.776851405726376790, -0.776882888953455810, -0.776914370238327770, -0.776945849580913620, -0.776977326981134750, -0.777008802438912680, -0.777040275954168580, +-0.777071747526824060, -0.777103217156799860, -0.777134684844017600, -0.777166150588398890, -0.777197614389864680, -0.777229076248336260, -0.777260536163735250, -0.777291994135983160, +-0.777323450165000820, -0.777354904250709740, -0.777386356393031770, -0.777417806591887640, -0.777449254847198960, -0.777480701158887230, -0.777512145526873640, -0.777543587951080030, +-0.777575028431427120, -0.777606466967836750, -0.777637903560230330, -0.777669338208529020, -0.777700770912654220, -0.777732201672527660, -0.777763630488070400, -0.777795057359204510, +-0.777826482285850610, -0.777857905267930860, -0.777889326305366000, -0.777920745398077870, -0.777952162545987870, -0.777983577749017390, -0.778014991007088370, -0.778046402320121460, +-0.778077811688038580, -0.778109219110761470, -0.778140624588211090, -0.778172028120309060, -0.778203429706977090, -0.778234829348136480, -0.778266227043708960, -0.778297622793615700, +-0.778329016597778420, -0.778360408456118870, -0.778391798368557990, -0.778423186335017500, -0.778454572355419150, -0.778485956429684430, -0.778517338557734970, -0.778548718739491940, +-0.778580096974877400, -0.778611473263812410, -0.778642847606218710, -0.778674220002017800, -0.778705590451131410, -0.778736958953481270, -0.778768325508988560, -0.778799690117574880, +-0.778831052779162420, -0.778862413493671910, -0.778893772261025410, -0.778925129081144530, -0.778956483953950780, -0.778987836879366120, -0.779019187857311610, -0.779050536887709090, +-0.779081883970480500, -0.779113229105546920, -0.779144572292830300, -0.779175913532252240, -0.779207252823734710, -0.779238590167198760, -0.779269925562566250, -0.779301259009759330, +-0.779332590508698850, -0.779363920059306990, -0.779395247661505360, -0.779426573315215480, -0.779457897020359610, -0.779489218776858620, -0.779520538584634550, -0.779551856443609470, +-0.779583172353704450, -0.779614486314841540, -0.779645798326942360, -0.779677108389928650, -0.779708416503722580, -0.779739722668245090, -0.779771026883418590, -0.779802329149164250, +-0.779833629465404020, -0.779864927832059850, -0.779896224249053250, -0.779927518716306500, -0.779958811233740560, -0.779990101801277590, -0.780021390418839670, -0.780052677086348070, +-0.780083961803724630, -0.780115244570891430, -0.780146525387769960, -0.780177804254282630, -0.780209081170350370, -0.780240356135895490, -0.780271629150840030, -0.780302900215105180, +-0.780334169328612990, -0.780365436491285420, -0.780396701703044650, -0.780427964963811730, -0.780459226273508940, -0.780490485632058360, -0.780521743039381270, -0.780552998495399830, +-0.780584252000036010, -0.780615503553211410, -0.780646753154848330, -0.780678000804868160, -0.780709246503192960, -0.780740490249744900, -0.780771732044445390, -0.780802971887216480, +-0.780834209777980240, -0.780865445716658390, -0.780896679703173220, -0.780927911737446130, -0.780959141819399180, -0.780990369948954770, -0.781021596126034060, -0.781052820350559340, +-0.781084042622452570, -0.781115262941636020, -0.781146481308031100, -0.781177697721559870, -0.781208912182144720, -0.781240124689706940, -0.781271335244168920, -0.781302543845452610, +-0.781333750493479860, -0.781364955188173060, -0.781396157929453490, -0.781427358717243670, -0.781458557551465650, -0.781489754432040940, -0.781520949358891940, -0.781552142331940480, +-0.781583333351108630, -0.781614522416318790, -0.781645709527492350, -0.781676894684551930, -0.781708077887419030, -0.781739259136015830, -0.781770438430264610, -0.781801615770087220, +-0.781832791155406050, -0.781863964586142710, -0.781895136062219390, -0.781926305583558470, -0.781957473150081570, -0.781988638761710990, -0.782019802418368880, -0.782050964119977100, +-0.782082123866458370, -0.782113281657733860, -0.782144437493726310, -0.782175591374357880, -0.782206743299550200, -0.782237893269225660, -0.782269041283306320, -0.782300187341714690, +-0.782331331444372390, -0.782362473591201700, -0.782393613782125130, -0.782424752017064180, -0.782455888295941480, -0.782487022618678970, -0.782518154985198940, -0.782549285395423790, +-0.782580413849275120, -0.782611540346675460, -0.782642664887547190, -0.782673787471811930, -0.782704908099392300, -0.782736026770210370, -0.782767143484188410, -0.782798258241248820, +-0.782829371041313230, -0.782860481884304350, -0.782891590770144470, -0.782922697698755330, -0.782953802670059540, -0.782984905683979160, -0.783016006740436810, -0.783047105839354110, +-0.783078202980653780, -0.783109298164258120, -0.783140391390088950, -0.783171482658068800, -0.783202571968119930, -0.783233659320164640, -0.783264744714125550, -0.783295828149924270, +-0.783326909627483410, -0.783357989146725610, -0.783389066707572470, -0.783420142309946720, -0.783451215953770540, -0.783482287638966430, -0.783513357365456800, -0.783544425133163580, +-0.783575490942009510, -0.783606554791916430, -0.783637616682806960, -0.783668676614603490, -0.783699734587228300, -0.783730790600604020, -0.783761844654652600, -0.783792896749296420, +-0.783823946884458440, -0.783854995060060180, -0.783886041276024460, -0.783917085532273680, -0.783948127828730130, -0.783979168165316650, -0.784010206541954860, -0.784041242958567590, +-0.784072277415077460, -0.784103309911406420, -0.784134340447477100, -0.784165369023211880, -0.784196395638533490, -0.784227420293363900, -0.784258442987625810, -0.784289463721241750, +-0.784320482494133890, -0.784351499306224720, -0.784382514157436870, -0.784413527047692740, -0.784444537976914940, -0.784475546945025640, -0.784506553951947460, -0.784537558997603130, +-0.784568562081914720, -0.784599563204804840, -0.784630562366196100, -0.784661559566010910, -0.784692554804172100, -0.784723548080601630, -0.784754539395222220, -0.784785528747956820, +-0.784816516138727270, -0.784847501567456530, -0.784878485034066880, -0.784909466538481480, -0.784940446080621970, -0.784971423660411500, -0.785002399277772600, -0.785033372932627540, +-0.785064344624899050, -0.785095314354509630, -0.785126282121381910, -0.785157247925438840, -0.785188211766602250, -0.785219173644795210, -0.785250133559940560, -0.785281091511960240, +-0.785312047500777210, -0.785343001526314090, -0.785373953588493380, -0.785404903687238140, -0.785435851822470330, -0.785466797994113230, -0.785497742202088790, -0.785528684446319960, +-0.785559624726729470, -0.785590563043239930, -0.785621499395774300, -0.785652433784254530, -0.785683366208603800, -0.785714296668744820, -0.785745225164599880, -0.785776151696091940, +-0.785807076263143500, -0.785837998865677400, -0.785868919503616590, -0.785899838176883250, -0.785930754885400320, -0.785961669629090750, -0.785992582407876730, -0.786023493221681190, +-0.786054402070426980, -0.786085308954037050, -0.786116213872433580, -0.786147116825539500, -0.786178017813278010, -0.786208916835571150, -0.786239813892341990, -0.786270708983513260, +-0.786301602109007790, -0.786332493268748660, -0.786363382462657910, -0.786394269690658840, -0.786425154952674180, -0.786456038248626530, -0.786486919578438750, -0.786517798942033550, +-0.786548676339334010, -0.786579551770262950, -0.786610425234742780, -0.786641296732696560, -0.786672166264047350, -0.786703033828717420, -0.786733899426629970, -0.786764763057707710, +-0.786795624721873920, -0.786826484419050680, -0.786857342149161370, -0.786888197912128830, -0.786919051707875570, -0.786949903536324660, -0.786980753397399040, -0.787011601291021550, +-0.787042447217115250, -0.787073291175602650, -0.787104133166406710, -0.787134973189450800, -0.787165811244657120, -0.787196647331949050, -0.787227481451249210, -0.787258313602480770, +-0.787289143785566800, -0.787319972000429580, -0.787350798246992830, -0.787381622525178740, -0.787412444834910690, -0.787443265176111410, -0.787474083548704070, -0.787504899952611750, +-0.787535714387756940, -0.787566526854062810, -0.787597337351452650, -0.787628145879848860, -0.787658952439174610, -0.787689757029353180, -0.787720559650307180, -0.787751360301960140, +-0.787782158984234430, -0.787812955697053340, -0.787843750440340050, -0.787874543214017180, -0.787905334018008000, -0.787936122852235350, -0.787966909716622750, -0.787997694611092590, +-0.788028477535568150, -0.788059258489972940, -0.788090037474229230, -0.788120814488260320, -0.788151589531989490, -0.788182362605339690, -0.788213133708234200, -0.788243902840595640, +-0.788274670002347300, -0.788305435193412560, -0.788336198413713940, -0.788366959663174830, -0.788397718941718400, -0.788428476249267600, -0.788459231585745820, -0.788489984951075810, +-0.788520736345181050, -0.788551485767984170, -0.788582233219408680, -0.788612978699377520, -0.788643722207813870, -0.788674463744641230, -0.788705203309782220, -0.788735940903160130, +-0.788766676524698450, -0.788797410174319920, -0.788828141851947720, -0.788858871557505230, -0.788889599290915510, -0.788920325052102190, -0.788951048840987660, -0.788981770657495530, +-0.789012490501549310, -0.789043208373071630, -0.789073924271985750, -0.789104638198215190, -0.789135350151683350, -0.789166060132312720, -0.789196768140027040, -0.789227474174749700, +-0.789258178236403320, -0.789288880324911620, -0.789319580440197680, -0.789350278582184760, -0.789380974750796380, -0.789411668945955380, -0.789442361167585150, -0.789473051415609310, +-0.789503739689950580, -0.789534425990532470, -0.789565110317278270, -0.789595792670111370, -0.789626473048955280, -0.789657151453732610, -0.789687827884367200, -0.789718502340782450, +-0.789749174822901080, -0.789779845330646930, -0.789810513863943080, -0.789841180422713230, -0.789871845006880120, -0.789902507616367380, -0.789933168251098720, -0.789963826910996870, +-0.789994483595985340, -0.790025138305987750, -0.790055791040927160, -0.790086441800727510, -0.790117090585311430, -0.790147737394602650, -0.790178382228524660, -0.790209025087000640, +-0.790239665969953880, -0.790270304877308090, -0.790300941808986470, -0.790331576764912840, -0.790362209745009920, -0.790392840749201800, -0.790423469777411290, -0.790454096829562030, +-0.790484721905577610, -0.790515345005381450, -0.790545966128897050, -0.790576585276047570, -0.790607202446756530, -0.790637817640947870, -0.790668430858544320, -0.790699042099469730, +-0.790729651363647480, -0.790760258651001190, -0.790790863961454480, -0.790821467294930300, -0.790852068651352490, -0.790882668030644780, -0.790913265432730110, -0.790943860857532320, +-0.790974454304974820, -0.791005045774981540, -0.791035635267475330, -0.791066222782380040, -0.791096808319619370, -0.791127391879116510, -0.791157973460795190, -0.791188553064578910, +-0.791219130690391180, -0.791249706338155940, -0.791280280007796270, -0.791310851699235760, -0.791341421412398380, -0.791371989147207300, -0.791402554903586130, -0.791433118681458600, +-0.791463680480748330, -0.791494240301379050, -0.791524798143274030, -0.791555354006356900, -0.791585907890551720, -0.791616459795781440, -0.791647009721970000, -0.791677557669041130, +-0.791708103636918570, -0.791738647625525480, -0.791769189634785820, -0.791799729664623310, -0.791830267714961340, -0.791860803785723650, -0.791891337876833970, -0.791921869988216010, +-0.791952400119793510, -0.791982928271489860, -0.792013454443228900, -0.792043978634934480, -0.792074500846529860, -0.792105021077939010, -0.792135539329085650, -0.792166055599893390, +-0.792196569890286310, -0.792227082200187450, -0.792257592529521220, -0.792288100878210780, -0.792318607246179970, -0.792349111633352750, -0.792379614039652740, -0.792410114465003870, +-0.792440612909329540, -0.792471109372553610, -0.792501603854600220, -0.792532096355392570, -0.792562586874854590, -0.792593075412910240, -0.792623561969483140, -0.792654046544497450, +-0.792684529137876350, -0.792715009749543900, -0.792745488379424270, -0.792775965027440630, -0.792806439693517050, -0.792836912377577360, -0.792867383079545630, -0.792897851799345240, +-0.792928318536900270, -0.792958783292134650, -0.792989246064971900, -0.793019706855335960, -0.793050165663150790, -0.793080622488340210, -0.793111077330828310, -0.793141530190538460, +-0.793171981067394840, -0.793202429961321510, -0.793232876872241750, -0.793263321800079860, -0.793293764744759770, -0.793324205706205100, -0.793354644684340250, -0.793385081679088610, +-0.793415516690374130, -0.793445949718121210, -0.793476380762253130, -0.793506809822694060, -0.793537236899368060, -0.793567661992199080, -0.793598085101110850, -0.793628506226027320, +-0.793658925366872770, -0.793689342523570710, -0.793719757696045190, -0.793750170884220290, -0.793780582088020050, -0.793810991307368650, -0.793841398542189380, -0.793871803792406630, +-0.793902207057944790, -0.793932608338727030, -0.793963007634677750, -0.793993404945721020, -0.794023800271780660, -0.794054193612781180, -0.794084584968645870, -0.794114974339299450, +-0.794145361724665320, -0.794175747124667760, -0.794206130539230730, -0.794236511968278490, -0.794266891411735230, -0.794297268869524450, -0.794327644341570550, -0.794358017827797690, +-0.794388389328129610, -0.794418758842490580, -0.794449126370804560, -0.794479491912995830, -0.794509855468988560, -0.794540217038706480, -0.794570576622073750, -0.794600934219014900, +-0.794631289829453410, -0.794661643453313690, -0.794691995090519910, -0.794722344740996340, -0.794752692404666730, -0.794783038081455340, -0.794813381771286690, -0.794843723474084270, +-0.794874063189772500, -0.794904400918275630, -0.794934736659517640, -0.794965070413423240, -0.794995402179915820, -0.795025731958919900, -0.795056059750359980, -0.795086385554159560, +-0.795116709370243150, -0.795147031198535030, -0.795177351038959260, -0.795207668891440460, -0.795237984755902240, -0.795268298632269000, -0.795298610520465350, -0.795328920420414810, +-0.795359228332041980, -0.795389534255271150, -0.795419838190026710, -0.795450140136232390, -0.795480440093812800, -0.795510738062692350, -0.795541034042794750, -0.795571328034044510, +-0.795601620036366030, -0.795631910049683480, -0.795662198073921470, -0.795692484109003620, -0.795722768154854650, -0.795753050211398970, -0.795783330278560410, -0.795813608356263470, +-0.795843884444432550, -0.795874158542991930, -0.795904430651866220, -0.795934700770979160, -0.795964968900255590, -0.795995235039619220, -0.796025499188994900, -0.796055761348306800, +-0.796086021517479310, -0.796116279696436950, -0.796146535885103760, -0.796176790083404140, -0.796207042291262820, -0.796237292508603640, -0.796267540735351220, -0.796297786971429940, +-0.796328031216764210, -0.796358273471278740, -0.796388513734897160, -0.796418752007544420, -0.796448988289145120, -0.796479222579623000, -0.796509454878902790, -0.796539685186908990, +-0.796569913503566210, -0.796600139828798400, -0.796630364162530190, -0.796660586504686410, -0.796690806855190890, -0.796721025213968370, -0.796751241580943240, -0.796781455956040000, +-0.796811668339183380, -0.796841878730297330, -0.796872087129306680, -0.796902293536135950, -0.796932497950709310, -0.796962700372951360, -0.796992900802786730, -0.797023099240139810, +-0.797053295684935330, -0.797083490137097450, -0.797113682596551130, -0.797143873063220210, -0.797174061537029740, -0.797204248017904020, -0.797234432505767750, -0.797264615000545680, +-0.797294795502161760, -0.797324974010540810, -0.797355150525607790, -0.797385325047286540, -0.797415497575502010, -0.797445668110178700, -0.797475836651241330, -0.797506003198614530, +-0.797536167752222580, -0.797566330311990090, -0.797596490877842010, -0.797626649449702520, -0.797656806027496450, -0.797686960611148300, -0.797717113200583030, -0.797747263795724690, +-0.797777412396498130, -0.797807559002828400, -0.797837703614639460, -0.797867846231856360, -0.797897986854403500, -0.797928125482205820, -0.797958262115187940, -0.797988396753274270, +-0.798018529396389510, -0.798048660044458740, -0.798078788697406120, -0.798108915355156380, -0.798139040017634470, -0.798169162684764900, -0.798199283356472720, -0.798229402032682110, +-0.798259518713317910, -0.798289633398305170, -0.798319746087568170, -0.798349856781031760, -0.798379965478620670, -0.798410072180260060, -0.798440176885873880, -0.798470279595387300, +-0.798500380308725280, -0.798530479025811980, -0.798560575746572580, -0.798590670470931690, -0.798620763198814140, -0.798650853930144900, -0.798680942664848350, -0.798711029402849440, +-0.798741114144073120, -0.798771196888443890, -0.798801277635886600, -0.798831356386326070, -0.798861433139687160, -0.798891507895895030, -0.798921580654873730, -0.798951651416548890, +-0.798981720180844570, -0.799011786947685930, -0.799041851716997820, -0.799071914488705070, -0.799101975262732860, -0.799132034039005460, -0.799162090817447930, -0.799192145597985460, +-0.799222198380542430, -0.799252249165043780, -0.799282297951414590, -0.799312344739579570, -0.799342389529464010, -0.799372432320992200, -0.799402473114089300, -0.799432511908680480, +-0.799462548704690130, -0.799492583502043440, -0.799522616300665230, -0.799552647100480800, -0.799582675901414520, -0.799612702703391460, -0.799642727506336910, -0.799672750310175370, +-0.799702771114831900, -0.799732789920231560, -0.799762806726299180, -0.799792821532960050, -0.799822834340138570, -0.799852845147760010, -0.799882853955749650, -0.799912860764031900, +-0.799942865572531910, -0.799972868381174870, -0.800002869189885610, -0.800032867998589410, -0.800062864807210780, -0.800092859615675000, -0.800122852423907460, -0.800152843231832330, +-0.800182832039375240, -0.800212818846461000, -0.800242803653014920, -0.800272786458961720, -0.800302767264226440, -0.800332746068734500, -0.800362722872410500, -0.800392697675179620, +-0.800422670476967020, -0.800452641277697770, -0.800482610077297150, -0.800512576875689770, -0.800542541672800920, -0.800572504468556100, -0.800602465262879590, -0.800632424055697010, +-0.800662380846933310, -0.800692335636513760, -0.800722288424363550, -0.800752239210407280, -0.800782187994570790, -0.800812134776778590, -0.800842079556955970, -0.800872022335028190, +-0.800901963110920320, -0.800931901884557870, -0.800961838655865450, -0.800991773424768240, -0.801021706191192060, -0.801051636955061210, -0.801081565716301400, -0.801111492474837590, +-0.801141417230595070, -0.801171339983499210, -0.801201260733474860, -0.801231179480447200, -0.801261096224341940, -0.801291010965083710, -0.801320923702597890, -0.801350834436809880, +-0.801380743167644960, -0.801410649895027860, -0.801440554618884190, -0.801470457339139350, -0.801500358055718180, -0.801530256768546170, -0.801560153477548390, -0.801590048182650340, +-0.801619940883777300, -0.801649831580854230, -0.801679720273806520, -0.801709606962559880, -0.801739491647038840, -0.801769374327169220, -0.801799255002876080, -0.801829133674084700, +-0.801859010340720930, -0.801888885002709270, -0.801918757659975450, -0.801948628312444960, -0.801978496960042640, -0.802008363602694010, -0.802038228240324560, -0.802068090872859800, +-0.802097951500224560, -0.802127810122344350, -0.802157666739145010, -0.802187521350551160, -0.802217373956488510, -0.802247224556882470, -0.802277073151658300, -0.802306919740741750, +-0.802336764324057650, -0.802366606901531610, -0.802396447473089360, -0.802426286038655730, -0.802456122598156350, -0.802485957151516600, -0.802515789698662110, -0.802545620239518250, +-0.802575448774010210, -0.802605275302063710, -0.802635099823603810, -0.802664922338556130, -0.802694742846846170, -0.802724561348399420, -0.802754377843141410, -0.802784192330997290, +-0.802814004811892580, -0.802843815285753220, -0.802873623752504040, -0.802903430212070780, -0.802933234664378940, -0.802963037109354020, -0.802992837546921740, -0.803022635977007180, +-0.803052432399535940, -0.803082226814433970, -0.803112019221626120, -0.803141809621038320, -0.803171598012595860, -0.803201384396224680, -0.803231168771849860, -0.803260951139397110, +-0.803290731498792150, -0.803320509849960170, -0.803350286192826890, -0.803380060527317920, -0.803409832853358760, -0.803439603170875370, -0.803469371479792580, -0.803499137780036450, +-0.803528902071532710, -0.803558664354206530, -0.803588424627983630, -0.803618182892789630, -0.803647939148550260, -0.803677693395191130, -0.803707445632637630, -0.803737195860815490, +-0.803766944079650660, -0.803796690289068310, -0.803826434488994050, -0.803856176679353720, -0.803885916860073270, -0.803915655031077760, -0.803945391192293140, -0.803975125343645350, +-0.804004857485059340, -0.804034587616461290, -0.804064315737776700, -0.804094041848931410, -0.804123765949851130, -0.804153488040461270, -0.804183208120687780, -0.804212926190456370, +-0.804242642249692440, -0.804272356298321940, -0.804302068336270600, -0.804331778363463920, -0.804361486379828180, -0.804391192385288440, -0.804420896379770990, -0.804450598363200990, +-0.804480298335504610, -0.804509996296607350, -0.804539692246435180, -0.804569386184914030, -0.804599078111969180, -0.804628768027526590, -0.804658455931512310, -0.804688141823851620, +-0.804717825704470700, -0.804747507573295050, -0.804777187430250730, -0.804806865275263790, -0.804836541108259310, -0.804866214929163440, -0.804895886737902360, -0.804925556534401340, +-0.804955224318586350, -0.804984890090383320, -0.805014553849718320, -0.805044215596516730, -0.805073875330704510, -0.805103533052207940, -0.805133188760952300, -0.805162842456863650, +-0.805192494139867820, -0.805222143809890880, -0.805251791466858770, -0.805281437110697000, -0.805311080741331510, -0.805340722358688700, -0.805370361962693740, -0.805399999553272910, +-0.805429635130352040, -0.805459268693857090, -0.805488900243714220, -0.805518529779848950, -0.805548157302187540, -0.805577782810655510, -0.805607406305178910, -0.805637027785683910, +-0.805666647252096360, -0.805696264704342300, -0.805725880142347470, -0.805755493566037930, -0.805785104975339840, -0.805814714370178710, -0.805844321750480930, -0.805873927116172230, +-0.805903530467178770, -0.805933131803426630, -0.805962731124841510, -0.805992328431349600, -0.806021923722877070, -0.806051516999349400, -0.806081108260693010, -0.806110697506833950, +-0.806140284737698280, -0.806169869953211600, -0.806199453153300330, -0.806229034337890730, -0.806258613506908190, -0.806288190660279120, -0.806317765797929690, -0.806347338919785720, +-0.806376910025773720, -0.806406479115819200, -0.806436046189848430, -0.806465611247787820, -0.806495174289562860, -0.806524735315100050, -0.806554294324325350, -0.806583851317165030, +-0.806613406293545280, -0.806642959253391690, -0.806672510196630780, -0.806702059123188820, -0.806731606032991430, -0.806761150925965010, -0.806790693802035830, -0.806820234661130060, +-0.806849773503173440, -0.806879310328092460, -0.806908845135813510, -0.806938377926262110, -0.806967908699364740, -0.806997437455047590, -0.807026964193236940, -0.807056488913859060, +-0.807086011616839680, -0.807115532302105310, -0.807145050969582440, -0.807174567619196590, -0.807204082250874370, -0.807233594864541940, -0.807263105460125470, -0.807292614037551590, +-0.807322120596745800, -0.807351625137635030, -0.807381127660144910, -0.807410628164202060, -0.807440126649732530, -0.807469623116662700, -0.807499117564919210, -0.807528609994427550, +-0.807558100405114330, -0.807587588796906180, -0.807617075169728800, -0.807646559523508720, -0.807676041858172210, -0.807705522173645550, -0.807735000469855470, -0.807764476746727580, +-0.807793951004188490, -0.807823423242164830, -0.807852893460582310, -0.807882361659367550, -0.807911827838446840, -0.807941291997746890, -0.807970754137193440, -0.808000214256713090, +-0.808029672356232460, -0.808059128435677400, -0.808088582494974510, -0.808118034534050180, -0.808147484552830810, -0.808176932551242900, -0.808206378529212510, -0.808235822486666030, +-0.808265264423530420, -0.808294704339731270, -0.808324142235195330, -0.808353578109849090, -0.808383011963618950, -0.808412443796431510, -0.808441873608212620, -0.808471301398889120, +-0.808500727168387720, -0.808530150916634050, -0.808559572643555160, -0.808588992349077220, -0.808618410033127180, -0.808647825695630760, -0.808677239336514810, -0.808706650955706040, +-0.808736060553130410, -0.808765468128714530, -0.808794873682385010, -0.808824277214068350, -0.808853678723691180, -0.808883078211179660, -0.808912475676460410, -0.808941871119460140, +-0.808971264540105040, -0.809000655938321710, -0.809030045314036880, -0.809059432667176730, -0.809088817997668410, -0.809118201305437770, -0.809147582590411860, -0.809176961852516640, +-0.809206339091679160, -0.809235714307825820, -0.809265087500883110, -0.809294458670777980, -0.809323827817436500, -0.809353194940785390, -0.809382560040751490, -0.809411923117261070, +-0.809441284170240750, -0.809470643199617260, -0.809500000205317090, -0.809529355187267320, -0.809558708145393770, -0.809588059079623500, -0.809617407989883350, -0.809646754876099380, +-0.809676099738198540, -0.809705442576107550, -0.809734783389753130, -0.809764122179061460, -0.809793458943959490, -0.809822793684374150, -0.809852126400231630, -0.809881457091458760, +-0.809910785757982250, -0.809940112399728740, -0.809969437016625160, -0.809998759608597800, -0.810028080175573590, -0.810057398717479390, -0.810086715234241360, -0.810116029725786670, +-0.810145342192041820, -0.810174652632933650, -0.810203961048389100, -0.810233267438334350, -0.810262571802696450, -0.810291874141402470, -0.810321174454378460, -0.810350472741551480, +-0.810379769002848360, -0.810409063238196170, -0.810438355447520960, -0.810467645630749800, -0.810496933787809960, -0.810526219918627390, -0.810555504023129370, -0.810584786101242520, +-0.810614066152893660, -0.810643344178009980, -0.810672620176517640, -0.810701894148343820, -0.810731166093415450, -0.810760436011658920, -0.810789703903001310, -0.810818969767369450, +-0.810848233604690160, -0.810877495414890510, -0.810906755197896900, -0.810936012953636600, -0.810965268682036110, -0.810994522383022390, -0.811023774056522370, -0.811053023702462910, +-0.811082271320771150, -0.811111516911373510, -0.811140760474197030, -0.811170002009168890, -0.811199241516215470, -0.811228478995263960, -0.811257714446241280, -0.811286947869074290, +-0.811316179263690260, -0.811345408630015470, -0.811374635967977210, -0.811403861277502520, -0.811433084558517930, -0.811462305810950690, -0.811491525034727660, -0.811520742229776100, +-0.811549957396022430, -0.811579170533393790, -0.811608381641817590, -0.811637590721220100, -0.811666797771528610, -0.811696002792670180, -0.811725205784571750, -0.811754406747160600, +-0.811783605680363120, -0.811812802584106600, -0.811841997458318420, -0.811871190302924870, -0.811900381117853450, -0.811929569903031000, -0.811958756658384680, -0.811987941383841670, +-0.812017124079328580, -0.812046304744772800, -0.812075483380101380, -0.812104659985240950, -0.812133834560119010, -0.812163007104662380, -0.812192177618798470, -0.812221346102453890, +-0.812250512555556030, -0.812279676978032050, -0.812308839369808690, -0.812337999730813220, -0.812367158060972700, -0.812396314360214310, -0.812425468628465320, -0.812454620865652570, +-0.812483771071703110, -0.812512919246544560, -0.812542065390103430, -0.812571209502307210, -0.812600351583082860, -0.812629491632357650, -0.812658629650058970, -0.812687765636113560, +-0.812716899590448900, -0.812746031512991740, -0.812775161403669570, -0.812804289262409440, -0.812833415089138530, -0.812862538883784350, -0.812891660646273720, -0.812920780376533700, +-0.812949898074492140, -0.812979013740075640, -0.813008127373211490, -0.813037238973827070, -0.813066348541849450, -0.813095456077206350, -0.813124561579824270, -0.813153665049630820, +-0.813182766486553520, -0.813211865890518970, -0.813240963261454790, -0.813270058599288140, -0.813299151903946640, -0.813328243175357010, -0.813357332413446880, -0.813386419618143510, +-0.813415504789373970, -0.813444587927065530, -0.813473669031145710, -0.813502748101541660, -0.813531825138181120, -0.813560900140990580, -0.813589973109897890, -0.813619044044830540, +-0.813648112945715370, -0.813677179812479780, -0.813706244645051370, -0.813735307443357200, -0.813764368207325120, -0.813793426936881840, -0.813822483631955310, -0.813851538292472250, +-0.813880590918360400, -0.813909641509547030, -0.813938690065959540, -0.813967736587525640, -0.813996781074172060, -0.814025823525826530, -0.814054863942416770, -0.814083902323869620, +-0.814112938670112580, -0.814141972981073270, -0.814171005256679070, -0.814200035496857600, -0.814229063701535690, -0.814258089870641190, -0.814287114004101810, -0.814316136101844280, +-0.814345156163796440, -0.814374174189885670, -0.814403190180039480, -0.814432204134185600, -0.814461216052250970, -0.814490225934163540, -0.814519233779850250, -0.814548239589238940, +-0.814577243362257010, -0.814606245098831950, -0.814635244798891490, -0.814664242462362690, -0.814693238089173380, -0.814722231679251170, -0.814751223232523030, -0.814780212748916990, +-0.814809200228360340, -0.814838185670780700, -0.814867169076105790, -0.814896150444262780, -0.814925129775179390, -0.814954107068783350, -0.814983082325001940, -0.815012055543762660, +-0.815041026724993340, -0.815069995868621720, -0.815098962974574850, -0.815127928042780560, -0.815156891073166690, -0.815185852065660300, -0.815214811020189330, -0.815243767936681300, +-0.815272722815063910, -0.815301675655264900, -0.815330626457211440, -0.815359575220831470, -0.815388521946052820, -0.815417466632802570, -0.815446409281008640, -0.815475349890598780, +-0.815504288461500470, -0.815533224993641670, -0.815562159486949660, -0.815591091941352380, -0.815620022356777220, -0.815648950733151910, -0.815677877070404290, -0.815706801368461960, +-0.815735723627252880, -0.815764643846704330, -0.815793562026744020, -0.815822478167300140, -0.815851392268299720, -0.815880304329670960, -0.815909214351341340, -0.815938122333238700, +-0.815967028275291110, -0.815995932177425500, -0.816024834039570270, -0.816053733861653030, -0.816082631643601290, -0.816111527385342980, -0.816140421086805850, -0.816169312747917930, +-0.816198202368606410, -0.816227089948799440, -0.816255975488424990, -0.816284858987410320, -0.816313740445683500, -0.816342619863172360, -0.816371497239804730, -0.816400372575508460, +-0.816429245870211150, -0.816458117123840640, -0.816486986336325100, -0.816515853507591930, -0.816544718637569060, -0.816573581726184330, -0.816602442773365690, -0.816631301779041310, +-0.816660158743138240, -0.816689013665584880, -0.816717866546309180, -0.816746717385238630, -0.816775566182301290, -0.816804412937425010, -0.816833257650537940, -0.816862100321567470, +-0.816890940950441790, -0.816919779537088940, -0.816948616081436430, -0.816977450583412310, -0.817006283042944650, -0.817035113459961270, -0.817063941834390350, -0.817092768166159390, +-0.817121592455196440, -0.817150414701429680, -0.817179234904786720, -0.817208053065195730, -0.817236869182584540, -0.817265683256881200, -0.817294495288013900, -0.817323305275910130, +-0.817352113220498280, -0.817380919121705960, -0.817409722979461240, -0.817438524793692390, -0.817467324564327140, -0.817496122291293760, -0.817524917974519870, -0.817553711613933750, +-0.817582503209463570, -0.817611292761036830, -0.817640080268581930, -0.817668865732026680, -0.817697649151299390, -0.817726430526328320, -0.817755209857040750, -0.817783987143365200, +-0.817812762385229930, -0.817841535582562560, -0.817870306735291370, -0.817899075843344310, -0.817927842906649880, -0.817956607925135580, -0.817985370898729800, -0.818014131827360820, +-0.818042890710956260, -0.818071647549444390, -0.818100402342753500, -0.818129155090811630, -0.818157905793546970, -0.818186654450887450, -0.818215401062761250, -0.818244145629096750, +-0.818272888149821690, -0.818301628624864330, -0.818330367054152960, -0.818359103437615750, -0.818387837775180980, -0.818416570066776260, -0.818445300312330200, -0.818474028511771200, +-0.818502754665026750, -0.818531478772025480, -0.818560200832695540, -0.818588920846965330, -0.818617638814762570, -0.818646354736015660, -0.818675068610653200, -0.818703780438602810, +-0.818732490219792890, -0.818761197954151810, -0.818789903641607750, -0.818818607282089110, -0.818847308875523710, -0.818876008421840050, -0.818904705920966650, -0.818933401372831220, +-0.818962094777362370, -0.818990786134488170, -0.819019475444137000, -0.819048162706237480, -0.819076847920717220, -0.819105531087505170, -0.819134212206528930, -0.819162891277717240, +-0.819191568300998260, -0.819220243276300500, -0.819248916203552220, -0.819277587082681500, -0.819306255913616830, -0.819334922696286720, -0.819363587430618990, -0.819392250116542380, +-0.819420910753985150, -0.819449569342875610, -0.819478225883142340, -0.819506880374713420, -0.819535532817517120, -0.819564183211482390, -0.819592831556536840, -0.819621477852609300, +-0.819650122099627950, -0.819678764297521620, -0.819707404446218150, -0.819736042545646140, -0.819764678595734320, -0.819793312596410530, -0.819821944547603380, -0.819850574449241480, +-0.819879202301253110, -0.819907828103566880, -0.819936451856110970, -0.819965073558813870, -0.819993693211604310, -0.820022310814410350, -0.820050926367160480, -0.820079539869783440, +-0.820108151322207490, -0.820136760724361480, -0.820165368076173240, -0.820193973377571610, -0.820222576628485190, -0.820251177828842160, -0.820279776978571240, -0.820308374077600820, +-0.820336969125859740, -0.820365562123275940, -0.820394153069778250, -0.820422741965295520, -0.820451328809755580, -0.820479913603087360, -0.820508496345219380, -0.820537077036080030, +-0.820565655675598360, -0.820594232263702320, -0.820622806800320630, -0.820651379285382230, -0.820679949718815080, -0.820708518100548120, -0.820737084430509740, -0.820765648708628780, +-0.820794210934833960, -0.820822771109053220, -0.820851329231215950, -0.820879885301250000, -0.820908439319084420, -0.820936991284647700, -0.820965541197868460, -0.820994089058675660, +-0.821022634866997450, -0.821051178622762560, -0.821079720325900040, -0.821108259976337960, -0.821136797574005150, -0.821165333118830440, -0.821193866610742340, -0.821222398049669790, +-0.821250927435541070, -0.821279454768285010, -0.821307980047830570, -0.821336503274106010, -0.821365024447040070, -0.821393543566561580, -0.821422060632599480, -0.821450575645082060, +-0.821479088603938150, -0.821507599509096800, -0.821536108360486180, -0.821564615158035250, -0.821593119901672830, -0.821621622591327540, -0.821650123226928540, -0.821678621808403900, +-0.821707118335682770, -0.821735612808694120, -0.821764105227366090, -0.821792595591627870, -0.821821083901408180, -0.821849570156635730, -0.821878054357239600, -0.821906536503148040, +-0.821935016594290250, -0.821963494630595040, -0.821991970611990920, -0.822020444538406950, -0.822048916409771730, -0.822077386226014560, -0.822105853987063600, -0.822134319692848110, +-0.822162783343297070, -0.822191244938338730, -0.822219704477902270, -0.822248161961916630, -0.822276617390310550, -0.822305070763013180, -0.822333522079952810, -0.822361971341058710, +-0.822390418546259940, -0.822418863695484890, -0.822447306788662620, -0.822475747825722190, -0.822504186806592320, -0.822532623731202170, -0.822561058599480250, -0.822589491411355960, +-0.822617922166757780, -0.822646350865614660, -0.822674777507855670, -0.822703202093409750, -0.822731624622206170, -0.822760045094173220, -0.822788463509240060, -0.822816879867336090, +-0.822845294168389700, -0.822873706412330040, -0.822902116599086080, -0.822930524728586850, -0.822958930800761550, -0.822987334815538650, -0.823015736772847450, -0.823044136672617220, +-0.823072534514776350, -0.823100930299254130, -0.823129324025979600, -0.823157715694881940, -0.823186105305889870, -0.823214492858932450, -0.823242878353939060, -0.823271261790838200, +-0.823299643169559170, -0.823328022490031120, -0.823356399752183000, -0.823384774955944090, -0.823413148101243000, -0.823441519188009010, -0.823469888216171510, -0.823498255185659000, +-0.823526620096400990, -0.823554982948326300, -0.823583343741364100, -0.823611702475443910, -0.823640059150494210, -0.823668413766444620, -0.823696766323223640, -0.823725116820760880, +-0.823753465258985180, -0.823781811637825930, -0.823810155957212410, -0.823838498217073110, -0.823866838417337650, -0.823895176557935430, -0.823923512638794930, -0.823951846659845670, +-0.823980178621016800, -0.824008508522237500, -0.824036836363437160, -0.824065162144544390, -0.824093485865488810, -0.824121807526199790, -0.824150127126605960, -0.824178444666636810, +-0.824206760146221520, -0.824235073565289690, -0.824263384923769830, -0.824291694221591540, -0.824320001458684230, -0.824348306634976710, -0.824376609750398390, -0.824404910804878540, +-0.824433209798346440, -0.824461506730731600, -0.824489801601962610, -0.824518094411969330, -0.824546385160680910, -0.824574673848026300, -0.824602960473935000, -0.824631245038336290, +-0.824659527541159560, -0.824687807982334210, -0.824716086361789060, -0.824744362679453720, -0.824772636935257710, -0.824800909129129840, -0.824829179260999750, -0.824857447330796690, +-0.824885713338450290, -0.824913977283889270, -0.824942239167043350, -0.824970498987842140, -0.824998756746214370, -0.825027012442089650, -0.825055266075397480, -0.825083517646067240, +-0.825111767154028340, -0.825140014599209710, -0.825168259981541200, -0.825196503300952180, -0.825224744557371710, -0.825252983750729310, -0.825281220880954570, -0.825309455947976670, +-0.825337688951725430, -0.825365919892129710, -0.825394148769119430, -0.825422375582623440, -0.825450600332571670, -0.825478823018893300, -0.825507043641517950, -0.825535262200375100, +-0.825563478695394040, -0.825591693126504160, -0.825619905493635290, -0.825648115796716490, -0.825676324035677260, -0.825704530210447320, -0.825732734320956060, -0.825760936367133210, +-0.825789136348907830, -0.825817334266209510, -0.825845530118968110, -0.825873723907112670, -0.825901915630572910, -0.825930105289278350, -0.825958292883158810, -0.825986478412143230, +-0.826014661876161460, -0.826042843275143320, -0.826071022609017880, -0.826099199877714850, -0.826127375081163740, -0.826155548219294270, -0.826183719292036160, -0.826211888299318460, +-0.826240055241071140, -0.826268220117223780, -0.826296382927705800, -0.826324543672446680, -0.826352702351376370, -0.826380858964424150, -0.826409013511520190, -0.826437165992593310, +-0.826465316407573590, -0.826493464756390850, -0.826521611038974150, -0.826549755255253430, -0.826577897405158300, -0.826606037488618720, -0.826634175505563840, -0.826662311455923390, +-0.826690445339627540, -0.826718577156605240, -0.826746706906786530, -0.826774834590101040, -0.826802960206478480, -0.826831083755848790, -0.826859205238141160, -0.826887324653285400, +-0.826915442001211700, -0.826943557281849100, -0.826971670495127540, -0.826999781640976870, -0.827027890719326810, -0.827055997730107180, -0.827084102673247390, -0.827112205548677480, +-0.827140306356326850, -0.827168405096125550, -0.827196501768003080, -0.827224596371889500, -0.827252688907714640, -0.827280779375407670, -0.827308867774898870, -0.827336954106118180, +-0.827365038368994780, -0.827393120563458930, -0.827421200689440140, -0.827449278746868360, -0.827477354735673630, -0.827505428655785360, -0.827533500507133370, -0.827561570289648050, +-0.827589638003258350, -0.827617703647894780, -0.827645767223486820, -0.827673828729964640, -0.827701888167257760, -0.827729945535296110, -0.827758000834009850, -0.827786054063328280, +-0.827814105223181660, -0.827842154313499720, -0.827870201334212520, -0.827898246285249880, -0.827926289166541540, -0.827954329978017320, -0.827982368719607620, -0.828010405391241820, +-0.828038439992849870, -0.828066472524361830, -0.828094502985707640, -0.828122531376817460, -0.828150557697620690, -0.828178581948047610, -0.828206604128028270, -0.828234624237492060, +-0.828262642276369480, -0.828290658244590140, -0.828318672142084430, -0.828346683968781860, -0.828374693724612590, -0.828402701409506780, -0.828430707023393940, -0.828458710566204350, +-0.828486712037868060, -0.828514711438314900, -0.828542708767475160, -0.828570704025278550, -0.828598697211655130, -0.828626688326535190, -0.828654677369848210, -0.828682664341524710, +-0.828710649241494400, -0.828738632069687560, -0.828766612826034250, -0.828794591510464310, -0.828822568122908110, -0.828850542663295160, -0.828878515131555970, -0.828906485527620470, +-0.828934453851418730, -0.828962420102881010, -0.828990384281937160, -0.829018346388517240, -0.829046306422551730, -0.829074264383970250, -0.829102220272703080, -0.829130174088680280, +-0.829158125831832130, -0.829186075502088890, -0.829214023099380300, -0.829241968623636530, -0.829269912074788170, -0.829297853452764630, -0.829325792757496630, -0.829353729988914100, +-0.829381665146947440, -0.829409598231526490, -0.829437529242581410, -0.829465458180042800, -0.829493385043840290, -0.829521309833904370, -0.829549232550165110, -0.829577153192552870, +-0.829605071760997960, -0.829632988255430080, -0.829660902675779740, -0.829688815021977330, -0.829716725293952680, -0.829744633491636300, -0.829772539614958230, -0.829800443663848860, +-0.829828345638238600, -0.829856245538057260, -0.829884143363235350, -0.829912039113703260, -0.829939932789390820, -0.829967824390228540, -0.829995713916146790, -0.830023601367075870, +-0.830051486742945820, -0.830079370043686930, -0.830107251269230020, -0.830135130419504600, -0.830163007494441390, -0.830190882493970770, -0.830218755418022810, -0.830246626266528230, +-0.830274495039416860, -0.830302361736619310, -0.830330226358066080, -0.830358088903686900, -0.830385949373412590, -0.830413807767173440, -0.830441664084899720, -0.830469518326522160, +-0.830497370491970480, -0.830525220581175730, -0.830553068594067520, -0.830580914530576810, -0.830608758390633750, -0.830636600174168740, -0.830664439881112490, -0.830692277511394960, +-0.830720113064946640, -0.830747946541698370, -0.830775777941579970, -0.830803607264522070, -0.830831434510455270, -0.830859259679309740, -0.830887082771016420, -0.830914903785505030, +-0.830942722722706420, -0.830970539582551290, -0.830998354364969600, -0.831026167069891960, -0.831053977697248980, -0.831081786246971270, -0.831109592718988770, -0.831137397113232310, +-0.831165199429632630, -0.831192999668119770, -0.831220797828624350, -0.831248593911076970, -0.831276387915408030, -0.831304179841548360, -0.831331969689428130, -0.831359757458977830, +-0.831387543150128530, -0.831415326762810050, -0.831443108296953230, -0.831470887752488670, -0.831498665129346890, -0.831526440427458600, -0.831554213646754080, -0.831581984787164270, +-0.831609753848619130, -0.831637520831049800, -0.831665285734386470, -0.831693048558560080, -0.831720809303501230, -0.831748567969140100, -0.831776324555407620, -0.831804079062234520, +-0.831831831489551090, -0.831859581837287920, -0.831887330105375860, -0.831915076293745500, -0.831942820402327700, -0.831970562431052500, -0.831998302379851060, -0.832026040248654010, +-0.832053776037391610, -0.832081509745994820, -0.832109241374394240, -0.832136970922520700, -0.832164698390304600, -0.832192423777676770, -0.832220147084568040, -0.832247868310908800, +-0.832275587456629770, -0.832303304521661900, -0.832331019505935690, -0.832358732409382180, -0.832386443231931560, -0.832414151973514870, -0.832441858634063060, -0.832469563213506400, +-0.832497265711775740, -0.832524966128802000, -0.832552664464515810, -0.832580360718848220, -0.832608054891729400, -0.832635746983090510, -0.832663436992862490, -0.832691124920975630, +-0.832718810767360980, -0.832746494531949380, -0.832774176214671650, -0.832801855815458290, -0.832829533334240260, -0.832857208770948710, -0.832884882125513810, -0.832912553397866740, +-0.832940222587938320, -0.832967889695659270, -0.832995554720960760, -0.833023217663773190, -0.833050878524027590, -0.833078537301654930, -0.833106193996585700, -0.833133848608751060, +-0.833161501138081740, -0.833189151584508680, -0.833216799947963050, -0.833244446228375120, -0.833272090425676290, -0.833299732539797060, -0.833327372570668360, -0.833355010518221360, +-0.833382646382386790, -0.833410280163095820, -0.833437911860279050, -0.833465541473867310, -0.833493169003792110, -0.833520794449983620, -0.833548417812373210, -0.833576039090891730, +-0.833603658285470230, -0.833631275396039760, -0.833658890422530830, -0.833686503364874710, -0.833714114223002570, -0.833741722996844900, -0.833769329686332990, -0.833796934291397670, +-0.833824536811970330, -0.833852137247981350, -0.833879735599362020, -0.833907331866043600, -0.833934926047956600, -0.833962518145032420, -0.833990108157201760, -0.834017696084395910, +-0.834045281926546030, -0.834072865683582740, -0.834100447355437310, -0.834128026942040910, -0.834155604443324260, -0.834183179859218640, -0.834210753189654990, -0.834238324434564580, +-0.834265893593878480, -0.834293460667527410, -0.834321025655442750, -0.834348588557555780, -0.834376149373797000, -0.834403708104097920, -0.834431264748389580, -0.834458819306603260, +-0.834486371778669690, -0.834513922164520140, -0.834541470464086110, -0.834569016677298100, -0.834596560804087620, -0.834624102844385710, -0.834651642798123540, -0.834679180665232500, +-0.834706716445643200, -0.834734250139287150, -0.834761781746095720, -0.834789311265999650, -0.834816838698930310, -0.834844364044818770, -0.834871887303596400, -0.834899408475194500, +-0.834926927559543900, -0.834954444556576190, -0.834981959466222110, -0.835009472288413160, -0.835036983023080490, -0.835064491670155400, -0.835091998229569370, -0.835119502701253010, +-0.835147005085137950, -0.835174505381155560, -0.835202003589236690, -0.835229499709312820, -0.835256993741315230, -0.835284485685175100, -0.835311975540824040, -0.835339463308192860, +-0.835366948987212980, -0.835394432577815870, -0.835421914079932600, -0.835449393493494450, -0.835476870818432800, -0.835504346054679160, -0.835531819202164570, -0.835559290260820320, +-0.835586759230578120, -0.835614226111368820, -0.835641690903123900, -0.835669153605774760, -0.835696614219252680, -0.835724072743489480, -0.835751529178415660, -0.835778983523963180, +-0.835806435780063420, -0.835833885946647310, -0.835861334023646490, -0.835888780010992320, -0.835916223908616200, -0.835943665716449850, -0.835971105434423990, -0.835998543062470350, +-0.836025978600520750, -0.836053412048505810, -0.836080843406357350, -0.836108272674006890, -0.836135699851385920, -0.836163124938425480, -0.836190547935057200, -0.836217968841212800, +-0.836245387656823210, -0.836272804381820170, -0.836300219016135160, -0.836327631559699580, -0.836355042012445150, -0.836382450374302920, -0.836409856645204510, -0.836437260825081740, +-0.836464662913865450, -0.836492062911487700, -0.836519460817879650, -0.836546856632973010, -0.836574250356699410, -0.836601641988990010, -0.836629031529776750, -0.836656418978990680, +-0.836683804336563530, -0.836711187602426800, -0.836738568776512200, -0.836765947858751360, -0.836793324849075540, -0.836820699747416240, -0.836848072553705520, -0.836875443267874330, +-0.836902811889854600, -0.836930178419577840, -0.836957542856975540, -0.836984905201979660, -0.837012265454521340, -0.837039623614532320, -0.837066979681944430, -0.837094333656688950, +-0.837121685538697590, -0.837149035327901970, -0.837176383024234030, -0.837203728627624930, -0.837231072138006520, -0.837258413555310610, -0.837285752879468490, -0.837313090110411880, +-0.837340425248072620, -0.837367758292382300, -0.837395089243272770, -0.837422418100675410, -0.837449744864521950, -0.837477069534744320, -0.837504392111273810, -0.837531712594042240, +-0.837559030982981460, -0.837586347278023060, -0.837613661479099100, -0.837640973586140760, -0.837668283599079850, -0.837695591517848560, -0.837722897342378150, -0.837750201072600340, +-0.837777502708447090, -0.837804802249850320, -0.837832099696741330, -0.837859395049052050, -0.837886688306714530, -0.837913979469660060, -0.837941268537820690, -0.837968555511128140, +-0.837995840389514140, -0.838023123172910830, -0.838050403861249400, -0.838077682454462010, -0.838104958952480610, -0.838132233355236680, -0.838159505662662060, -0.838186775874688710, +-0.838214043991248440, -0.838241310012273310, -0.838268573937694610, -0.838295835767444820, -0.838323095501455120, -0.838350353139657670, -0.838377608681984300, -0.838404862128367070, +-0.838432113478737810, -0.838459362733028010, -0.838486609891169850, -0.838513854953095380, -0.838541097918735990, -0.838568338788023950, -0.838595577560890980, -0.838622814237269140, +-0.838650048817090490, -0.838677281300286400, -0.838704511686789170, -0.838731739976530940, -0.838758966169443120, -0.838786190265457860, -0.838813412264507010, -0.838840632166523050, +-0.838867849971437150, -0.838895065679181710, -0.838922279289688770, -0.838949490802889940, -0.838976700218717400, -0.839003907537103080, -0.839031112757978930, -0.839058315881277330, +-0.839085516906929670, -0.839112715834868240, -0.839139912665025190, -0.839167107397332130, -0.839194300031721350, -0.839221490568124890, -0.839248679006474600, -0.839275865346702840, +-0.839303049588741250, -0.839330231732522190, -0.839357411777977400, -0.839384589725039040, -0.839411765573639170, -0.839438939323709940, -0.839466110975183640, -0.839493280527991770, +-0.839520447982066600, -0.839547613337340740, -0.839574776593745460, -0.839601937751213280, -0.839629096809676350, -0.839656253769066610, -0.839683408629316450, -0.839710561390357490, +-0.839737712052122220, -0.839764860614542810, -0.839792007077551080, -0.839819151441079330, -0.839846293705059700, -0.839873433869424590, -0.839900571934105610, -0.839927707899035260, +-0.839954841764145810, -0.839981973529369100, -0.840009103194637400, -0.840036230759882980, -0.840063356225037920, -0.840090479590034690, -0.840117600854805140, -0.840144720019281530, +-0.840171837083396380, -0.840198952047081280, -0.840226064910268970, -0.840253175672891370, -0.840280284334880890, -0.840307390896170010, -0.840334495356690250, -0.840361597716374310, +-0.840388697975154700, -0.840415796132963020, -0.840442892189731890, -0.840469986145393590, -0.840497077999880490, -0.840524167753124440, -0.840551255405058040, -0.840578340955613680, +-0.840605424404723190, -0.840632505752319180, -0.840659584998333930, -0.840686662142699710, -0.840713737185349030, -0.840740810126213820, -0.840767880965226590, -0.840794949702319940, +-0.840822016337425590, -0.840849080870476160, -0.840876143301404140, -0.840903203630141700, -0.840930261856621560, -0.840957317980775440, -0.840984372002536280, -0.841011423921836030, +-0.841038473738607180, -0.841065521452782020, -0.841092567064293250, -0.841119610573073160, -0.841146651979053920, -0.841173691282168010, -0.841200728482348060, -0.841227763579526000, +-0.841254796573634670, -0.841281827464606340, -0.841308856252373390, -0.841335882936868560, -0.841362907518023670, -0.841389929995771670, -0.841416950370045050, -0.841443968640775750, +-0.841470984807896620, -0.841497998871339910, -0.841525010831038260, -0.841552020686924360, -0.841579028438930180, -0.841606034086988640, -0.841633037631031700, -0.841660039070992290, +-0.841687038406802700, -0.841714035638395530, -0.841741030765703280, -0.841768023788658670, -0.841795014707194090, -0.841822003521241590, -0.841848990230734230, -0.841875974835604280, +-0.841902957335784460, -0.841929937731207280, -0.841956916021805450, -0.841983892207511020, -0.842010866288257160, -0.842037838263975940, -0.842064808134600050, -0.842091775900062120, +-0.842118741560294870, -0.842145705115230680, -0.842172666564802500, -0.842199625908942370, -0.842226583147583470, -0.842253538280657850, -0.842280491308098340, -0.842307442229837670, +-0.842334391045808430, -0.842361337755943350, -0.842388282360174710, -0.842415224858435670, -0.842442165250658290, -0.842469103536775510, -0.842496039716719940, -0.842522973790424290, +-0.842549905757821180, -0.842576835618843560, -0.842603763373423580, -0.842630689021494520, -0.842657612562988430, -0.842684533997838270, -0.842711453325976860, -0.842738370547336800, +-0.842765285661850830, -0.842792198669451880, -0.842819109570072110, -0.842846018363644920, -0.842872925050102360, -0.842899829629377480, -0.842926732101403120, -0.842953632466111880, +-0.842980530723436820, -0.843007426873310100, -0.843034320915665210, -0.843061212850434120, -0.843088102677550080, -0.843114990396945820, -0.843141876008553950, -0.843168759512307520, +-0.843195640908139370, -0.843222520195981980, -0.843249397375768430, -0.843276272447431200, -0.843303145410903230, -0.843330016266117370, -0.843356885013006540, -0.843383751651503480, +-0.843410616181541340, -0.843437478603052520, -0.843464338915969840, -0.843491197120226350, -0.843518053215754790, -0.843544907202488200, -0.843571759080359310, -0.843598608849301160, +-0.843625456509246360, -0.843652302060128090, -0.843679145501878950, -0.843705986834431760, -0.843732826057719710, -0.843759663171675610, -0.843786498176232410, -0.843813331071323060, +-0.843840161856880160, -0.843866990532837200, -0.843893817099126480, -0.843920641555681250, -0.843947463902434250, -0.843974284139318740, -0.844001102266267790, -0.844027918283213770, +-0.844054732190090200, -0.844081543986829550, -0.844108353673365120, -0.844135161249629730, -0.844161966715556430, -0.844188770071078290, -0.844215571316128340, -0.844242370450639320, +-0.844269167474544610, -0.844295962387776710, -0.844322755190268890, -0.844349545881954210, -0.844376334462765720, -0.844403120932636360, -0.844429905291499420, -0.844456687539287380, +-0.844483467675933960, -0.844510245701371680, -0.844537021615533680, -0.844563795418353250, -0.844590567109763210, -0.844617336689697070, -0.844644104158087330, -0.844670869514867580, +-0.844697632759970340, -0.844724393893329100, -0.844751152914876900, -0.844777909824546700, -0.844804664622271880, -0.844831417307985500, -0.844858167881620380, -0.844884916343110140, +-0.844911662692387270, -0.844938406929385270, -0.844965149054037300, -0.844991889066276540, -0.845018626966035910, -0.845045362753249040, -0.845072096427848640, -0.845098827989767880, +-0.845125557438940020, -0.845152284775298250, -0.845179009998775820, -0.845205733109305800, -0.845232454106821680, -0.845259172991256190, -0.845285889762543040, -0.845312604420614950, +-0.845339316965405320, -0.845366027396847410, -0.845392735714874390, -0.845419441919419530, -0.845446146010416340, -0.845472847987797650, -0.845499547851496950, -0.845526245601447180, +-0.845552941237581730, -0.845579634759834000, -0.845606326168137130, -0.845633015462424750, -0.845659702642629570, -0.845686387708685320, -0.845713070660524920, -0.845739751498081780, +-0.845766430221289390, -0.845793106830080800, -0.845819781324389510, -0.845846453704149010, -0.845873123969292040, -0.845899792119752640, -0.845926458155463410, -0.845953122076358090, +-0.845979783882369940, -0.846006443573432350, -0.846033101149478610, -0.846059756610442410, -0.846086409956256610, -0.846113061186854920, -0.846139710302170390, -0.846166357302136630, +-0.846193002186686920, -0.846219644955754750, -0.846246285609273620, -0.846272924147176590, -0.846299560569397480, -0.846326194875869240, -0.846352827066525590, -0.846379457141299810, +-0.846406085100125270, -0.846432710942935710, -0.846459334669664500, -0.846485956280244700, -0.846512575774610370, -0.846539193152694210, -0.846565808414430190, -0.846592421559751560, +-0.846619032588591950, -0.846645641500884950, -0.846672248296563620, -0.846698852975561910, -0.846725455537812870, -0.846752055983250100, -0.846778654311807210, -0.846805250523417710, +-0.846831844618015190, -0.846858436595533170, -0.846885026455904800, -0.846911614199064130, -0.846938199824944230, -0.846964783333478800, -0.846991364724601460, -0.847017943998245700, +-0.847044521154345030, -0.847071096192833270, -0.847097669113643590, -0.847124239916709930, -0.847150808601965450, -0.847177375169343990, -0.847203939618779160, -0.847230501950204330, +-0.847257062163553560, -0.847283620258759810, -0.847310176235757330, -0.847336730094479180, -0.847363281834859210, -0.847389831456831000, -0.847416378960328180, -0.847442924345284450, +-0.847469467611633660, -0.847496008759308970, -0.847522547788244540, -0.847549084698373420, -0.847575619489629560, -0.847602152161946790, -0.847628682715258490, -0.847655211149498600, +-0.847681737464600850, -0.847708261660498510, -0.847734783737125850, -0.847761303694415820, -0.847787821532302700, -0.847814337250719970, -0.847840850849601370, -0.847867362328880940, +-0.847893871688491840, -0.847920378928368250, -0.847946884048443540, -0.847973387048651550, -0.847999887928926110, -0.848026386689201050, -0.848052883329409870, -0.848079377849486840, +-0.848105870249365120, -0.848132360528978890, -0.848158848688261520, -0.848185334727147190, -0.848211818645569380, -0.848238300443462050, -0.848264780120759230, -0.848291257677394110, +-0.848317733113301160, -0.848344206428413680, -0.848370677622665600, -0.848397146695990980, -0.848423613648323420, -0.848450078479596750, -0.848476541189745140, -0.848503001778702080, +-0.848529460246401520, -0.848555916592777290, -0.848582370817763110, -0.848608822921293140, -0.848635272903300990, -0.848661720763720710, -0.848688166502486350, -0.848714610119531420, +-0.848741051614790190, -0.848767490988196040, -0.848793928239683140, -0.848820363369185430, -0.848846796376636850, -0.848873227261971450, -0.848899656025122850, -0.848926082666025210, +-0.848952507184612240, -0.848978929580818000, -0.849005349854576320, -0.849031768005821360, -0.849058184034486960, -0.849084597940507390, -0.849111009723816030, -0.849137419384347390, +-0.849163826922034960, -0.849190232336813010, -0.849216635628615490, -0.849243036797376340, -0.849269435843029610, -0.849295832765509460, -0.849322227564749840, -0.849348620240684250, +-0.849375010793247290, -0.849401399222372680, -0.849427785527994690, -0.849454169710047170, -0.849480551768464380, -0.849506931703180150, -0.849533309514128640, -0.849559685201243700, +-0.849586058764459580, -0.849612430203710360, -0.849638799518929950, -0.849665166710052660, -0.849691531777012620, -0.849717894719743460, -0.849744255538179890, -0.849770614232255420, +-0.849796970801904420, -0.849823325247060950, -0.849849677567659170, -0.849876027763633470, -0.849902375834917460, -0.849928721781445740, -0.849955065603152040, -0.849981407299970630, +-0.850007746871835670, -0.850034084318681330, -0.850060419640441770, -0.850086752837051480, -0.850113083908444090, -0.850139412854554080, -0.850165739675315390, -0.850192064370662410, +-0.850218386940529200, -0.850244707384850030, -0.850271025703559060, -0.850297341896590900, -0.850323655963878930, -0.850349967905358220, -0.850376277720962360, -0.850402585410625740, +-0.850428890974282650, -0.850455194411867340, -0.850481495723314330, -0.850507794908557320, -0.850534091967531050, -0.850560386900169330, -0.850586679706406560, -0.850612970386177230, +-0.850639258939415390, -0.850665545366055430, -0.850691829666031850, -0.850718111839278370, -0.850744391885729920, -0.850770669805320230, -0.850796945597983910, -0.850823219263655230, +-0.850849490802268460, -0.850875760213757990, -0.850902027498058320, -0.850928292655103610, -0.850954555684828030, -0.850980816587165960, -0.851007075362051780, -0.851033332009420000, +-0.851059586529204880, -0.851085838921341040, -0.851112089185762310, -0.851138337322403630, -0.851164583331198930, -0.851190827212082720, -0.851217068964989390, -0.851243308589853420, +-0.851269546086609210, -0.851295781455191360, -0.851322014695533810, -0.851348245807571510, -0.851374474791238290, -0.851400701646468970, -0.851426926373197830, -0.851453148971359370, +-0.851479369440888310, -0.851505587781718590, -0.851531803993785030, -0.851558018077021810, -0.851584230031363630, -0.851610439856744780, -0.851636647553099760, -0.851662853120363270, +-0.851689056558469830, -0.851715257867353470, -0.851741457046949260, -0.851767654097191130, -0.851793849018013920, -0.851820041809352000, -0.851846232471140000, -0.851872421003312510, +-0.851898607405804030, -0.851924791678548950, -0.851950973821482100, -0.851977153834537540, -0.852003331717650080, -0.852029507470754340, -0.852055681093784820, -0.852081852586676350, +-0.852108021949362970, -0.852134189181779860, -0.852160354283860940, -0.852186517255541180, -0.852212678096755050, -0.852238836807437390, -0.852264993387522480, -0.852291147836945370, +-0.852317300155640220, -0.852343450343541980, -0.852369598400584900, -0.852395744326703840, -0.852421888121833390, -0.852448029785908280, -0.852474169318863110, -0.852500306720632710, +-0.852526441991151460, -0.852552575130353980, -0.852578706138174990, -0.852604835014549310, -0.852630961759411440, -0.852657086372696220, -0.852683208854338570, -0.852709329204272560, +-0.852735447422433570, -0.852761563508755650, -0.852787677463173850, -0.852813789285622900, -0.852839898976037400, -0.852866006534352180, -0.852892111960502300, -0.852918215254421690, +-0.852944316416045960, -0.852970415445309050, -0.852996512342146240, -0.853022607106492030, -0.853048699738281350, -0.853074790237449250, -0.853100878603929800, -0.853126964837658490, +-0.853153048938569470, -0.853179130906597800, -0.853205210741678320, -0.853231288443745850, -0.853257364012735220, -0.853283437448581370, -0.853309508751218580, -0.853335577920582460, +-0.853361644956607050, -0.853387709859227410, -0.853413772628378700, -0.853439833263995420, -0.853465891766012620, -0.853491948134365350, -0.853518002368987890, -0.853544054469815740, +-0.853570104436783160, -0.853596152269825330, -0.853622197968877170, -0.853648241533873420, -0.853674282964749340, -0.853700322261439330, -0.853726359423878760, -0.853752394452002130, +-0.853778427345744380, -0.853804458105040690, -0.853830486729825750, -0.853856513220034640, -0.853882537575602510, -0.853908559796463740, -0.853934579882553830, -0.853960597833807180, +-0.853986613650159150, -0.854012627331544480, -0.854038638877898330, -0.854064648289155740, -0.854090655565251320, -0.854116660706120580, -0.854142663711697890, -0.854168664581918420, +-0.854194663316717450, -0.854220659916029800, -0.854246654379790420, -0.854272646707934790, -0.854298636900397200, -0.854324624957113250, -0.854350610878017450, -0.854376594663045270, +-0.854402576312131460, -0.854428555825211270, -0.854454533202219760, -0.854480508443092090, -0.854506481547762880, -0.854532452516167720, -0.854558421348241230, -0.854584388043918670, +-0.854610352603135110, -0.854636315025825710, -0.854662275311925730, -0.854688233461369910, -0.854714189474093610, -0.854740143350031680, -0.854766095089119380, -0.854792044691291890, +-0.854817992156484240, -0.854843937484631610, -0.854869880675669380, -0.854895821729532160, -0.854921760646155660, -0.854947697425474500, -0.854973632067424160, -0.854999564571939710, +-0.855025494938956410, -0.855051423168409320, -0.855077349260233820, -0.855103273214364860, -0.855129195030737810, -0.855155114709287620, -0.855181032249949680, -0.855206947652659030, +-0.855232860917351180, -0.855258772043961280, -0.855284681032424280, -0.855310587882675780, -0.855336492594650610, -0.855362395168284160, -0.855388295603511710, -0.855414193900268630, +-0.855440090058489980, -0.855465984078111360, -0.855491875959067620, -0.855517765701294230, -0.855543653304726370, -0.855569538769299310, -0.855595422094948430, -0.855621303281608900, +-0.855647182329216440, -0.855673059237705870, -0.855698934007012690, -0.855724806637072070, -0.855750677127819380, -0.855776545479190130, -0.855802411691119370, -0.855828275763542590, +-0.855854137696395400, -0.855879997489612630, -0.855905855143130110, -0.855931710656882670, -0.855957564030806030, -0.855983415264835350, -0.856009264358906230, -0.856035111312953960, +-0.856060956126914130, -0.856086798800721690, -0.856112639334312480, -0.856138477727621420, -0.856164313980584120, -0.856190148093136090, -0.856215980065212710, -0.856241809896749580, +-0.856267637587681650, -0.856293463137944970, -0.856319286547474360, -0.856345107816205430, -0.856370926944073910, -0.856396743931014950, -0.856422558776964160, -0.856448371481857150, +-0.856474182045629080, -0.856499990468215680, -0.856525796749552200, -0.856551600889574160, -0.856577402888217150, -0.856603202745416570, -0.856629000461108010, -0.856654796035227210, +-0.856680589467709310, -0.856706380758489820, -0.856732169907504340, -0.856757956914688480, -0.856783741779977740, -0.856809524503307610, -0.856835305084613810, -0.856861083523831610, +-0.856886859820896960, -0.856912633975744910, -0.856938405988311280, -0.856964175858531570, -0.856989943586341510, -0.857015709171676470, -0.857041472614472500, -0.857067233914664550, +-0.857092993072188780, -0.857118750086980240, -0.857144504958974980, -0.857170257688108280, -0.857196008274316080, -0.857221756717533980, -0.857247503017697370, -0.857273247174742070, +-0.857298989188603590, -0.857324729059217530, -0.857350466786519720, -0.857376202370445650, -0.857401935810931160, -0.857427667107912070, -0.857453396261323550, -0.857479123271101760, +-0.857504848137181860, -0.857530570859500020, -0.857556291437991610, -0.857582009872592480, -0.857607726163238330, -0.857633440309865210, -0.857659152312408080, -0.857684862170803420, +-0.857710569884986400, -0.857736275454892840, -0.857761978880458690, -0.857787680161619550, -0.857813379298311470, -0.857839076290469630, -0.857864771138030390, -0.857890463840929040, +-0.857916154399101520, -0.857941842812483530, -0.857967529081010930, -0.857993213204619630, -0.858018895183245480, -0.858044575016823850, -0.858070252705290910, -0.858095928248582270, +-0.858121601646633760, -0.858147272899381200, -0.858172942006760420, -0.858198608968707370, -0.858224273785158090, -0.858249936456047970, -0.858275596981312840, -0.858301255360888750, +-0.858326911594711530, -0.858352565682717010, -0.858378217624841120, -0.858403867421019820, -0.858429515071188700, -0.858455160575283930, -0.858480803933241110, -0.858506445144996300, +-0.858532084210485320, -0.858557721129644120, -0.858583355902408640, -0.858608988528715030, -0.858634619008498690, -0.858660247341695990, -0.858685873528242550, -0.858711497568074410, +-0.858737119461127410, -0.858762739207337700, -0.858788356806641340, -0.858813972258973930, -0.858839585564271760, -0.858865196722470410, -0.858890805733506070, -0.858916412597314660, +-0.858942017313832350, -0.858967619882994860, -0.858993220304738680, -0.859018818578999090, -0.859044414705712690, -0.859070008684815090, -0.859095600516242450, -0.859121190199930830, +-0.859146777735816270, -0.859172363123834710, -0.859197946363922440, -0.859223527456015160, -0.859249106400049150, -0.859274683195960230, -0.859300257843684690, -0.859325830343158350, +-0.859351400694317590, -0.859376968897098470, -0.859402534951436700, -0.859428098857268790, -0.859453660614530430, -0.859479220223157920, -0.859504777683087420, -0.859530332994254850, +-0.859555886156596620, -0.859581437170048760, -0.859606986034547100, -0.859632532750028270, -0.859658077316427850, -0.859683619733682240, -0.859709160001727590, -0.859734698120499960, +-0.859760234089935630, -0.859785767909970970, -0.859811299580541920, -0.859836829101584320, -0.859862356473034660, -0.859887881694829210, -0.859913404766903920, -0.859938925689195170, +-0.859964444461639330, -0.859989961084172250, -0.860015475556730300, -0.860040987879249540, -0.860066498051666350, -0.860092006073916890, -0.860117511945937440, -0.860143015667664160, +-0.860168517239033540, -0.860194016659981520, -0.860219513930444490, -0.860245009050358610, -0.860270502019660150, -0.860295992838285510, -0.860321481506170830, -0.860346968023252610, +-0.860372452389466800, -0.860397934604750110, -0.860423414669038380, -0.860448892582267980, -0.860474368344375520, -0.860499841955297050, -0.860525313414968960, -0.860550782723327860, +-0.860576249880309560, -0.860601714885850800, -0.860627177739887620, -0.860652638442356510, -0.860678096993193640, -0.860703553392335730, -0.860729007639718820, -0.860754459735279640, +-0.860779909678954120, -0.860805357470678990, -0.860830803110390290, -0.860856246598024620, -0.860881687933518270, -0.860907127116807720, -0.860932564147829480, -0.860957999026519700, +-0.860983431752815220, -0.861008862326651860, -0.861034290747966340, -0.861059717016695040, -0.861085141132774570, -0.861110563096141090, -0.861135982906731550, -0.861161400564481870, +-0.861186816069328790, -0.861212229421208560, -0.861237640620057700, -0.861263049665812690, -0.861288456558410130, -0.861313861297786310, -0.861339263883878160, -0.861364664316621840, +-0.861390062595953740, -0.861415458721810360, -0.861440852694128290, -0.861466244512844150, -0.861491634177894430, -0.861517021689215850, -0.861542407046744450, -0.861567790250417300, +-0.861593171300170440, -0.861618550195940580, -0.861643926937664450, -0.861669301525278430, -0.861694673958719130, -0.861720044237923480, -0.861745412362827420, -0.861770778333368010, +-0.861796142149481530, -0.861821503811104670, -0.861846863318174060, -0.861872220670626190, -0.861897575868398100, -0.861922928911425860, -0.861948279799646390, -0.861973628532996190, +-0.861998975111411770, -0.862024319534829940, -0.862049661803187320, -0.862075001916420610, -0.862100339874466550, -0.862125675677261390, -0.862151009324742310, -0.862176340816845470, +-0.862201670153507790, -0.862226997334666010, -0.862252322360256620, -0.862277645230216440, -0.862302965944482410, -0.862328284502990710, -0.862353600905678590, -0.862378915152482220, +-0.862404227243338430, -0.862429537178184270, -0.862454844956956120, -0.862480150579591150, -0.862505454046025630, -0.862530755356196610, -0.862556054510040470, -0.862581351507494270, +-0.862606646348494600, -0.862631939032978410, -0.862657229560882310, -0.862682517932143340, -0.862707804146697900, -0.862733088204483240, -0.862758370105435550, -0.862783649849491960, +-0.862808927436589210, -0.862834202866664120, -0.862859476139653860, -0.862884747255494580, -0.862910016214123670, -0.862935283015477510, -0.862960547659493150, -0.862985810146107420, +-0.863011070475257270, -0.863036328646879290, -0.863061584660910760, -0.863086838517288070, -0.863112090215948480, -0.863137339756828490, -0.863162587139865050, -0.863187832364995190, +-0.863213075432155860, -0.863238316341283670, -0.863263555092316000, -0.863288791685189240, -0.863314026119840650, -0.863339258396206840, -0.863364488514224870, -0.863389716473831670, +-0.863414942274964180, -0.863440165917559570, -0.863465387401554320, -0.863490606726885820, -0.863515823893490580, -0.863541038901305740, -0.863566251750268350, -0.863591462440315260, +-0.863616670971383620, -0.863641877343410470, -0.863667081556332430, -0.863692283610086880, -0.863717483504610420, -0.863742681239840220, -0.863767876815713320, -0.863793070232166780, +-0.863818261489137540, -0.863843450586562870, -0.863868637524379590, -0.863893822302524430, -0.863919004920934760, -0.863944185379547540, -0.863969363678299910, -0.863994539817128810, +-0.864019713795971640, -0.864044885614765000, -0.864070055273446270, -0.864095222771952280, -0.864120388110220180, -0.864145551288187150, -0.864170712305790120, -0.864195871162966480, +-0.864221027859653270, -0.864246182395787320, -0.864271334771306020, -0.864296484986146310, -0.864321633040245340, -0.864346778933540280, -0.864371922665968300, -0.864397064237466650, +-0.864422203647972180, -0.864447340897422480, -0.864472475985754050, -0.864497608912904610, -0.864522739678811100, -0.864547868283410680, -0.864572994726640620, -0.864598119008438300, +-0.864623241128740450, -0.864648361087484660, -0.864673478884607880, -0.864698594520047270, -0.864723707993740210, -0.864748819305623970, -0.864773928455635610, -0.864799035443712620, +-0.864824140269791930, -0.864849242933811050, -0.864874343435706790, -0.864899441775416670, -0.864924537952878050, -0.864949631968027990, -0.864974723820804090, -0.864999813511143190, +-0.865024901038983000, -0.865049986404260340, -0.865075069606912610, -0.865100150646877290, -0.865125229524091540, -0.865150306238492760, -0.865175380790018430, -0.865200453178605500, +-0.865225523404191570, -0.865250591466713570, -0.865275657366109120, -0.865300721102315600, -0.865325782675270270, -0.865350842084910420, -0.865375899331173760, -0.865400954413997230, +-0.865426007333318200, -0.865451058089074080, -0.865476106681202450, -0.865501153109640380, -0.865526197374325570, -0.865551239475195410, -0.865576279412186960, -0.865601317185238030, +-0.865626352794285570, -0.865651386239267180, -0.865676417520120370, -0.865701446636782500, -0.865726473589191080, -0.865751498377283710, -0.865776521000997330, -0.865801541460269770, +-0.865826559755038190, -0.865851575885240310, -0.865876589850813390, -0.865901601651695050, -0.865926611287822890, -0.865951618759134070, -0.865976624065566300, -0.866001627207056870, +-0.866026628183543260, -0.866051626994963190, -0.866076623641253930, -0.866101618122353200, -0.866126610438198610, -0.866151600588727310, -0.866176588573877140, -0.866201574393585360, +-0.866226558047789700, -0.866251539536427530, -0.866276518859436570, -0.866301496016754210, -0.866326471008318500, -0.866351443834066260, -0.866376414493935650, -0.866401382987863840, +-0.866426349315788550, -0.866451313477647370, -0.866476275473377910, -0.866501235302918000, -0.866526192966204810, -0.866551148463176270, -0.866576101793769760, -0.866601052957922890, +-0.866626001955573380, -0.866650948786658940, -0.866675893451117170, -0.866700835948885810, -0.866725776279902100, -0.866750714444104230, -0.866775650441429350, -0.866800584271815280, +-0.866825515935199850, -0.866850445431520570, -0.866875372760715250, -0.866900297922721610, -0.866925220917477260, -0.866950141744919690, -0.866975060404986730, -0.866999976897616100, +-0.867024891222745510, -0.867049803380312790, -0.867074713370255660, -0.867099621192511600, -0.867124526847018680, -0.867149430333714280, -0.867174331652536210, -0.867199230803422430, +-0.867224127786310530, -0.867249022601138230, -0.867273915247843700, -0.867298805726364090, -0.867323694036637670, -0.867348580178601950, -0.867373464152194630, -0.867398345957353660, +-0.867423225594016860, -0.867448103062122280, -0.867472978361607080, -0.867497851492409770, -0.867522722454467600, -0.867547591247718520, -0.867572457872100580, -0.867597322327551380, +-0.867622184614008970, -0.867647044731411300, -0.867671902679695850, -0.867696758458800790, -0.867721612068663610, -0.867746463509222470, -0.867771312780415080, -0.867796159882179400, +-0.867821004814453460, -0.867845847577175090, -0.867870688170281900, -0.867895526593712270, -0.867920362847403590, -0.867945196931294020, -0.867970028845321370, -0.867994858589423710, +-0.868019686163539190, -0.868044511567605090, -0.868069334801560010, -0.868094155865341440, -0.868118974758887330, -0.868143791482135940, -0.868168606035024990, -0.868193418417492540, +-0.868218228629476730, -0.868243036670915180, -0.868267842541746270, -0.868292646241907500, -0.868317447771337130, -0.868342247129973100, -0.868367044317753470, -0.868391839334616170, +-0.868416632180499580, -0.868441422855341430, -0.868466211359079420, -0.868490997691651940, -0.868515781852996940, -0.868540563843052560, -0.868565343661756640, -0.868590121309047670, +-0.868614896784863140, -0.868639670089141670, -0.868664441221820630, -0.868689210182838620, -0.868713976972133590, -0.868738741589643590, -0.868763504035306780, -0.868788264309061310, +-0.868813022410845020, -0.868837778340596500, -0.868862532098253150, -0.868887283683753560, -0.868912033097035800, -0.868936780338037900, -0.868961525406698240, -0.868986268302954560, +-0.869011009026745440, -0.869035747578008610, -0.869060483956682450, -0.869085218162705010, -0.869109950196014560, -0.869134680056549150, -0.869159407744247380, -0.869184133259046750, +-0.869208856600886090, -0.869233577769703000, -0.869258296765436090, -0.869283013588023290, -0.869307728237403100, -0.869332440713513450, -0.869357151016293070, -0.869381859145679450, +-0.869406565101611520, -0.869431268884026890, -0.869455970492864050, -0.869480669928061390, -0.869505367189556950, -0.869530062277289350, -0.869554755191196400, -0.869579445931216830, +-0.869604134497288350, -0.869628820889349560, -0.869653505107338630, -0.869678187151194050, -0.869702867020853980, -0.869727544716256910, -0.869752220237340890, -0.869776893584044420, +-0.869801564756305550, -0.869826233754062650, -0.869850900577254340, -0.869875565225818660, -0.869900227699694330, -0.869924887998819170, -0.869949546123132130, -0.869974202072570920, +-0.869998855847074150, -0.870023507446580300, -0.870048156871027660, -0.870072804120354700, -0.870097449194499940, -0.870122092093401190, -0.870146732816997610, -0.870171371365226930, +-0.870196007738027740, -0.870220641935338660, -0.870245273957097830, -0.870269903803243870, -0.870294531473715490, -0.870319156968450410, -0.870343780287387680, -0.870368401430465340, +-0.870393020397622010, -0.870417637188796060, -0.870442251803925980, -0.870466864242950610, -0.870491474505807770, -0.870516082592436510, -0.870540688502774770, -0.870565292236761380, +-0.870589893794334710, -0.870614493175433380, -0.870639090379995760, -0.870663685407960690, -0.870688278259266090, -0.870712868933851030, -0.870737457431653650, -0.870762043752612570, +-0.870786627896666390, -0.870811209863753710, -0.870835789653812920, -0.870860367266782840, -0.870884942702601970, -0.870909515961208470, -0.870934087042541160, -0.870958655946538650, +-0.870983222673139430, -0.871007787222282230, -0.871032349593905740, -0.871056909787948250, -0.871081467804348590, -0.871106023643045120, -0.871130577303976580, -0.871155128787081570, +-0.871179678092298680, -0.871204225219566750, -0.871228770168824380, -0.871253312940009850, -0.871277853533062310, -0.871302391947919920, -0.871326928184521510, -0.871351462242805800, +-0.871375994122711380, -0.871400523824177210, -0.871425051347141540, -0.871449576691543440, -0.871474099857321270, -0.871498620844413760, -0.871523139652759740, -0.871547656282297800, +-0.871572170732966780, -0.871596683004705610, -0.871621193097452450, -0.871645701011146470, -0.871670206745726150, -0.871694710301130220, -0.871719211677297490, -0.871743710874166800, +-0.871768207891676750, -0.871792702729766500, -0.871817195388374210, -0.871841685867439150, -0.871866174166899710, -0.871890660286694820, -0.871915144226763310, -0.871939625987043890, +-0.871964105567475610, -0.871988582967996860, -0.872013058188546910, -0.872037531229064020, -0.872062002089487360, -0.872086470769755650, -0.872110937269807820, -0.872135401589582580, +-0.872159863729019100, -0.872184323688055760, -0.872208781466631830, -0.872233237064685700, -0.872257690482156510, -0.872282141718983110, -0.872306590775104310, -0.872331037650458940, +-0.872355482344986390, -0.872379924858625030, -0.872404365191313590, -0.872428803342991330, -0.872453239313596970, -0.872477673103069670, -0.872502104711348040, -0.872526534138371450, +-0.872550961384078280, -0.872575386448407820, -0.872599809331298880, -0.872624230032690300, -0.872648648552521110, -0.872673064890730380, -0.872697479047256920, -0.872721891022040010, +-0.872746300815018140, -0.872770708426130800, -0.872795113855316380, -0.872819517102514260, -0.872843918167663380, -0.872868317050702560, -0.872892713751571290, -0.872917108270207960, +-0.872941500606552070, -0.872965890760542210, -0.872990278732117650, -0.873014664521217340, -0.873039048127780440, -0.873063429551745980, -0.873087808793053030, -0.873112185851640410, +-0.873136560727447500, -0.873160933420413010, -0.873185303930476220, -0.873209672257576060, -0.873234038401651810, -0.873258402362642410, -0.873282764140487220, -0.873307123735124980, +-0.873331481146495060, -0.873355836374536290, -0.873380189419187940, -0.873404540280389050, -0.873428888958078800, -0.873453235452196550, -0.873477579762681030, -0.873501921889471840, +-0.873526261832507590, -0.873550599591727650, -0.873574935167071190, -0.873599268558477360, -0.873623599765885440, -0.873647928789234810, -0.873672255628463960, -0.873696580283512820, +-0.873720902754320020, -0.873745223040824910, -0.873769541142966680, -0.873793857060684690, -0.873818170793917990, -0.873842482342606200, -0.873866791706688130, -0.873891098886102840, +-0.873915403880789810, -0.873939706690688320, -0.873964007315737530, -0.873988305755876720, -0.874012602011045360, -0.874036896081182290, -0.874061187966227230, -0.874085477666118880, +-0.874109765180796860, -0.874134050510200540, -0.874158333654268980, -0.874182614612941670, -0.874206893386157980, -0.874231169973856860, -0.874255444375978020, -0.874279716592460400, +-0.874303986623243490, -0.874328254468266560, -0.874352520127469000, -0.874376783600790410, -0.874401044888169610, -0.874425303989546320, -0.874449560904859700, -0.874473815634049130, +-0.874498068177054000, -0.874522318533813680, -0.874546566704267560, -0.874570812688355350, -0.874595056486015760, -0.874619298097188860, -0.874643537521813450, -0.874667774759829150, +-0.874692009811175450, -0.874716242675791730, -0.874740473353617490, -0.874764701844592100, -0.874788928148654830, -0.874813152265745520, -0.874837374195803100, -0.874861593938767170, +-0.874885811494577340, -0.874910026863172870, -0.874934240044493610, -0.874958451038478580, -0.874982659845067510, -0.875006866464199670, -0.875031070895814670, -0.875055273139851990, +-0.875079473196251120, -0.875103671064951570, -0.875127866745893050, -0.875152060239014600, -0.875176251544256270, -0.875200440661557110, -0.875224627590856840, -0.875248812332094950, +-0.875272994885211040, -0.875297175250144720, -0.875321353426835590, -0.875345529415223140, -0.875369703215246650, -0.875393874826845830, -0.875418044249960390, -0.875442211484529830, +-0.875466376530493750, -0.875490539387791870, -0.875514700056363560, -0.875538858536148660, -0.875563014827086320, -0.875587168929116480, -0.875611320842178740, -0.875635470566212710, +-0.875659618101158000, -0.875683763446954420, -0.875707906603541250, -0.875732047570858540, -0.875756186348845560, -0.875780322937442010, -0.875804457336587630, -0.875828589546222220, +-0.875852719566285520, -0.875876847396716780, -0.875900973037456070, -0.875925096488442860, -0.875949217749616760, -0.875973336820917710, -0.875997453702285320, -0.876021568393659190, +-0.876045680894979470, -0.876069791206185330, -0.876093899327216820, -0.876118005258013420, -0.876142108998515080, -0.876166210548661390, -0.876190309908392200, -0.876214407077647190, +-0.876238502056366440, -0.876262594844489100, -0.876286685441955650, -0.876310773848705150, -0.876334860064677760, -0.876358944089813190, -0.876383025924051260, -0.876407105567332030, +-0.876431183019594880, -0.876455258280779860, -0.876479331350826560, -0.876503402229674930, -0.876527470917264680, -0.876551537413535860, -0.876575601718428190, -0.876599663831881700, +-0.876623723753835900, -0.876647781484230950, -0.876671837023006330, -0.876695890370102090, -0.876719941525458180, -0.876743990489014410, -0.876768037260710840, -0.876792081840487070, +-0.876816124228283260, -0.876840164424038890, -0.876864202427694140, -0.876888238239188820, -0.876912271858462990, -0.876936303285456350, -0.876960332520109300, -0.876984359562361200, +-0.877008384412152340, -0.877032407069422320, -0.877056427534111280, -0.877080445806159180, -0.877104461885506060, -0.877128475772091630, -0.877152487465856390, -0.877176496966739610, +-0.877200504274681770, -0.877224509389622490, -0.877248512311502030, -0.877272513040260220, -0.877296511575837100, -0.877320507918172950, -0.877344502067207270, -0.877368494022880640, +-0.877392483785132460, -0.877416471353903100, -0.877440456729132620, -0.877464439910760950, -0.877488420898728140, -0.877512399692974570, -0.877536376293439720, -0.877560350700064220, +-0.877584322912787650, -0.877608292931550180, -0.877632260756291970, -0.877656226386953180, -0.877680189823473840, -0.877704151065794140, -0.877728110113853880, -0.877752066967593560, +-0.877776021626952900, -0.877799974091872160, -0.877823924362291510, -0.877847872438151100, -0.877871818319391100, -0.877895762005951430, -0.877919703497772490, -0.877943642794794200, +-0.877967579896956730, -0.877991514804200230, -0.878015447516464990, -0.878039378033691250, -0.878063306355819200, -0.878087232482788640, -0.878111156414540180, -0.878135078151013770, +-0.878158997692149560, -0.878182915037887810, -0.878206830188168810, -0.878230743142933030, -0.878254653902120100, -0.878278562465670710, -0.878302468833524810, -0.878326373005622660, +-0.878350274981904540, -0.878374174762310830, -0.878398072346781690, -0.878421967735257490, -0.878445860927678180, -0.878469751923984470, -0.878493640724116180, -0.878517527328013800, +-0.878541411735617510, -0.878565293946867780, -0.878589173961704770, -0.878613051780069100, -0.878636927401900470, -0.878660800827139820, -0.878684672055726980, -0.878708541087602430, +-0.878732407922706460, -0.878756272560979550, -0.878780135002362180, -0.878803995246794200, -0.878827853294216530, -0.878851709144568890, -0.878875562797792110, -0.878899414253826340, +-0.878923263512612070, -0.878947110574089590, -0.878970955438199590, -0.878994798104882010, -0.879018638574077580, -0.879042476845726450, -0.879066312919769000, -0.879090146796145830, +-0.879113978474797330, -0.879137807955663870, -0.879161635238686070, -0.879185460323804180, -0.879209283210958480, -0.879233103900089460, -0.879256922391137730, -0.879280738684043770, +-0.879304552778747860, -0.879328364675190930, -0.879352174373312700, -0.879375981873054320, -0.879399787174355850, -0.879423590277157770, -0.879447391181400810, -0.879471189887025330, +-0.879494986393971940, -0.879518780702181260, -0.879542572811593430, -0.879566362722149280, -0.879590150433789190, -0.879613935946453540, -0.879637719260083160, -0.879661500374618430, +-0.879685279290000180, -0.879709056006168550, -0.879732830523064500, -0.879756602840628180, -0.879780372958800290, -0.879804140877521460, -0.879827906596732270, -0.879851670116373330, +-0.879875431436385470, -0.879899190556708840, -0.879922947477284390, -0.879946702198052380, -0.879970454718953630, -0.879994205039928650, -0.880017953160918240, -0.880041699081862920, +-0.880065442802703600, -0.880089184323380460, -0.880112923643834530, -0.880136660764006100, -0.880160395683835970, -0.880184128403264990, -0.880207858922233520, -0.880231587240682730, +-0.880255313358552780, -0.880279037275784710, -0.880302758992318800, -0.880326478508095980, -0.880350195823057070, -0.880373910937142570, -0.880397623850293300, -0.880421334562450310, +-0.880445043073553650, -0.880468749383544580, -0.880492453492363490, -0.880516155399951210, -0.880539855106248550, -0.880563552611196340, -0.880587247914735190, -0.880610941016806150, +-0.880634631917349700, -0.880658320616306440, -0.880682007113617440, -0.880705691409223500, -0.880729373503065240, -0.880753053395083580, -0.880776731085219480, -0.880800406573413300, +-0.880824079859606310, -0.880847750943739020, -0.880871419825752230, -0.880895086505587010, -0.880918750983183950, -0.880942413258484100, -0.880966073331428400, -0.880989731201957340, +-0.881013386870012070, -0.881037040335533210, -0.881060691598461680, -0.881084340658738530, -0.881107987516304370, -0.881131632171100580, -0.881155274623067530, -0.881178914872146390, +-0.881202552918277760, -0.881226188761402800, -0.881249822401462430, -0.881273453838397390, -0.881297083072148710, -0.881320710102657670, -0.881344334929864530, -0.881367957553710780, +-0.881391577974136920, -0.881415196191084100, -0.881438812204493380, -0.881462426014305580, -0.881486037620461740, -0.881509647022902910, -0.881533254221569810, -0.881556859216403810, +-0.881580462007345520, -0.881604062594335990, -0.881627660977316260, -0.881651257156227500, -0.881674851131010740, -0.881698442901606590, -0.881722032467956550, -0.881745619830001330, +-0.881769204987681960, -0.881792787940939630, -0.881816368689715360, -0.881839947233950090, -0.881863523573585220, -0.881887097708561220, -0.881910669638819810, -0.881934239364301490, +-0.881957806884947510, -0.881981372200699170, -0.882004935311497260, -0.882028496217283080, -0.882052054917997760, -0.882075611413582370, -0.882099165703977840, -0.882122717789125210, +-0.882146267668965980, -0.882169815343440970, -0.882193360812491440, -0.882216904076058680, -0.882240445134083510, -0.882263983986507410, -0.882287520633271090, -0.882311055074316060, +-0.882334587309583360, -0.882358117339014150, -0.882381645162549690, -0.882405170780131360, -0.882428694191699890, -0.882452215397196760, -0.882475734396563020, -0.882499251189739930, +-0.882522765776668660, -0.882546278157290480, -0.882569788331546870, -0.882593296299378550, -0.882616802060727230, -0.882640305615533640, -0.882663806963739360, -0.882687306105285450, +-0.882710803040113400, -0.882734297768164260, -0.882757790289379620, -0.882781280603700310, -0.882804768711067940, -0.882828254611423450, -0.882851738304708420, -0.882875219790863920, +-0.882898699069831430, -0.882922176141552220, -0.882945651005967780, -0.882969123663018940, -0.882992594112647520, -0.883016062354794460, -0.883039528389401140, -0.883062992216409160, +-0.883086453835759570, -0.883109913247394070, -0.883133370451253620, -0.883156825447279910, -0.883180278235414010, -0.883203728815597280, -0.883227177187771330, -0.883250623351877430, +-0.883274067307856960, -0.883297509055651520, -0.883320948595202160, -0.883344385926450480, -0.883367821049337750, -0.883391253963805470, -0.883414684669795000, -0.883438113167247850, +-0.883461539456105620, -0.883484963536309340, -0.883508385407800860, -0.883531805070521200, -0.883555222524412100, -0.883578637769414920, -0.883602050805471050, -0.883625461632522090, +-0.883648870250509750, -0.883672276659374980, -0.883695680859059700, -0.883719082849505070, -0.883742482630652690, -0.883765880202444070, -0.883789275564820900, -0.883812668717724350, +-0.883836059661096460, -0.883859448394878180, -0.883882834919011540, -0.883906219233437480, -0.883929601338097950, -0.883952981232934420, -0.883976358917888390, -0.883999734392901690, +-0.884023107657915470, -0.884046478712871790, -0.884069847557711560, -0.884093214192376740, -0.884116578616808920, -0.884139940830949600, -0.884163300834740480, -0.884186658628123290, +-0.884210014211039290, -0.884233367583430410, -0.884256718745237920, -0.884280067696403550, -0.884303414436869110, -0.884326758966576200, -0.884350101285466210, -0.884373441393481290, +-0.884396779290562600, -0.884420114976652070, -0.884443448451691090, -0.884466779715621490, -0.884490108768384960, -0.884513435609923130, -0.884536760240177910, -0.884560082659090590, +-0.884583402866603310, -0.884606720862657350, -0.884630036647194420, -0.884653350220156560, -0.884676661581485280, -0.884699970731122280, -0.884723277669009600, -0.884746582395088630, +-0.884769884909301310, -0.884793185211589010, -0.884816483301893890, -0.884839779180157440, -0.884863072846321600, -0.884886364300328300, -0.884909653542118810, -0.884932940571635520, +-0.884956225388819570, -0.884979507993613020, -0.885002788385957810, -0.885026066565795520, -0.885049342533068220, -0.885072616287717610, -0.885095887829685290, -0.885119157158913540, +-0.885142424275343620, -0.885165689178917690, -0.885188951869577470, -0.885212212347264880, -0.885235470611921870, -0.885258726663490260, -0.885281980501911650, -0.885305232127128310, +-0.885328481539081720, -0.885351728737713950, -0.885374973722966810, -0.885398216494782230, -0.885421457053102270, -0.885444695397868520, -0.885467931529023260, -0.885491165446507860, +-0.885514397150264700, -0.885537626640235390, -0.885560853916362080, -0.885584078978586710, -0.885607301826851320, -0.885630522461097410, -0.885653740881267360, -0.885676957087302870, +-0.885700171079145890, -0.885723382856738570, -0.885746592420022740, -0.885769799768940440, -0.885793004903433820, -0.885816207823444720, -0.885839408528914960, -0.885862607019786590, +-0.885885803296001750, -0.885908997357502390, -0.885932189204230450, -0.885955378836128400, -0.885978566253137640, -0.886001751455200550, -0.886024934442259050, -0.886048115214255080, +-0.886071293771130920, -0.886094470112828490, -0.886117644239289850, -0.886140816150457370, -0.886163985846272540, -0.886187153326678080, -0.886210318591615480, -0.886233481641027110, +-0.886256642474854920, -0.886279801093041280, -0.886302957495528230, -0.886326111682257610, -0.886349263653171900, -0.886372413408212930, -0.886395560947322860, -0.886418706270443830, +-0.886441849377518130, -0.886464990268487680, -0.886488128943295100, -0.886511265401881960, -0.886534399644190780, -0.886557531670163490, -0.886580661479742350, -0.886603789072869520, +-0.886626914449487270, -0.886650037609537640, -0.886673158552963250, -0.886696277279705680, -0.886719393789707540, -0.886742508082910890, -0.886765620159257860, -0.886788730018690850, +-0.886811837661151900, -0.886834943086583620, -0.886858046294927820, -0.886881147286127100, -0.886904246060123300, -0.886927342616858900, -0.886950436956276070, -0.886973529078317170, +-0.886996618982924480, -0.887019706670040490, -0.887042792139607020, -0.887065875391566670, -0.887088956425861500, -0.887112035242433980, -0.887135111841226290, -0.887158186222180900, +-0.887181258385239980, -0.887204328330346130, -0.887227396057441500, -0.887250461566468140, -0.887273524857368550, -0.887296585930085310, -0.887319644784560490, -0.887342701420736570, +-0.887365755838556150, -0.887388808037961050, -0.887411858018894220, -0.887434905781297580, -0.887457951325113630, -0.887480994650284740, -0.887504035756753410, -0.887527074644462010, +-0.887550111313353040, -0.887573145763368650, -0.887596177994451670, -0.887619208006543920, -0.887642235799588230, -0.887665261373526970, -0.887688284728302520, -0.887711305863857490, +-0.887734324780134140, -0.887757341477075080, -0.887780355954622460, -0.887803368212718990, -0.887826378251307060, -0.887849386070329260, -0.887872391669727980, -0.887895395049445810, +-0.887918396209425030, -0.887941395149608460, -0.887964391869938250, -0.887987386370357010, -0.888010378650807340, -0.888033368711231620, -0.888056356551572560, -0.888079342171772870, +-0.888102325571774490, -0.888125306751520570, -0.888148285710953170, -0.888171262450015100, -0.888194236968648850, -0.888217209266796930, -0.888240179344402250, -0.888263147201406980, +-0.888286112837753940, -0.888309076253385510, -0.888332037448244290, -0.888354996422273110, -0.888377953175414350, -0.888400907707610710, -0.888423860018805020, -0.888446810108939440, +-0.888469757977957130, -0.888492703625800130, -0.888515647052411370, -0.888538588257733570, -0.888561527241709230, -0.888584464004281150, -0.888607398545392060, -0.888630330864984440, +-0.888653260963000790, -0.888676188839384040, -0.888699114494076790, -0.888722037927021760, -0.888744959138161650, -0.888767878127439290, -0.888790794894797180, -0.888813709440178120, +-0.888836621763524630, -0.888859531864779620, -0.888882439743885810, -0.888905345400785810, -0.888928248835422540, -0.888951150047738840, -0.888974049037676960, -0.888996945805180290, +-0.889019840350190990, -0.889042732672651990, -0.889065622772506340, -0.889088510649696520, -0.889111396304165690, -0.889134279735856130, -0.889157160944711090, -0.889180039930672960, +-0.889202916693684680, -0.889225791233689170, -0.889248663550629040, -0.889271533644447440, -0.889294401515087100, -0.889317267162490600, -0.889340130586601110, -0.889362991787361110, +-0.889385850764713550, -0.889408707518601460, -0.889431562048967560, -0.889454414355754790, -0.889477264438906180, -0.889500112298364230, -0.889522957934072100, -0.889545801345972500, +-0.889568642534008360, -0.889591481498122500, -0.889614318238258090, -0.889637152754358060, -0.889659985046364900, -0.889682815114221980, -0.889705642957871800, -0.889728468577257510, +-0.889751291972322170, -0.889774113143008470, -0.889796932089259580, -0.889819748811018440, -0.889842563308227860, -0.889865375580831010, -0.889888185628770480, -0.889910993451989540, +-0.889933799050431130, -0.889956602424038180, -0.889979403572753740, -0.890002202496521070, -0.890024999195282770, -0.890047793668981790, -0.890070585917561390, -0.890093375940964490, +-0.890116163739134160, -0.890138949312013430, -0.890161732659545460, -0.890184513781673070, -0.890207292678339530, -0.890230069349487560, -0.890252843795060420, -0.890275616015001160, +-0.890298386009252930, -0.890321153777758670, -0.890343919320461750, -0.890366682637304780, -0.890389443728231370, -0.890412202593184100, -0.890434959232106360, -0.890457713644941200, +-0.890480465831631760, -0.890503215792121440, -0.890525963526352720, -0.890548709034269410, -0.890571452315814140, -0.890594193370930150, -0.890616932199560730, -0.890639668801648910, +-0.890662403177138070, -0.890685135325971270, -0.890707865248091530, -0.890730592943442260, -0.890753318411966370, -0.890776041653607130, -0.890798762668307820, -0.890821481456011590, +-0.890844198016661700, -0.890866912350201430, -0.890889624456573710, -0.890912334335722140, -0.890935041987589550, -0.890957747412119420, -0.890980450609254790, -0.891003151578939170, +-0.891025850321115700, -0.891048546835727540, -0.891071241122718180, -0.891093933182030450, -0.891116623013607940, -0.891139310617393930, -0.891161995993331570, -0.891184679141364230, +-0.891207360061435420, -0.891230038753488050, -0.891252715217465740, -0.891275389453311420, -0.891298061460968570, -0.891320731240380690, -0.891343398791490940, -0.891366064114242910, +-0.891388727208579420, -0.891411388074444420, -0.891434046711780730, -0.891456703120531820, -0.891479357300641320, -0.891502009252052360, -0.891524658974708340, -0.891547306468552850, +-0.891569951733528930, -0.891592594769580420, -0.891615235576650120, -0.891637874154681760, -0.891660510503618720, -0.891683144623404370, -0.891705776513982200, -0.891728406175295810, +-0.891751033607288130, -0.891773658809903110, -0.891796281783083790, -0.891818902526773650, -0.891841521040916410, -0.891864137325455220, -0.891886751380333910, -0.891909363205495630, +-0.891931972800884100, -0.891954580166442360, -0.891977185302114230, -0.891999788207843090, -0.892022388883572550, -0.892044987329245980, -0.892067583544807200, -0.892090177530199260, +-0.892112769285365980, -0.892135358810250630, -0.892157946104796930, -0.892180531168948350, -0.892203114002648400, -0.892225694605840670, -0.892248272978468980, -0.892270849120476490, +-0.892293423031806810, -0.892315994712403420, -0.892338564162210130, -0.892361131381170460, -0.892383696369227870, -0.892406259126326320, -0.892428819652408940, -0.892451377947419690, +-0.892473934011301710, -0.892496487843999040, -0.892519039445455080, -0.892541588815613520, -0.892564135954417970, -0.892586680861812250, -0.892609223537739640, -0.892631763982144280, +-0.892654302194969220, -0.892676838176158390, -0.892699371925655520, -0.892721903443404190, -0.892744432729348340, -0.892766959783431120, -0.892789484605596820, -0.892812007195788460, +-0.892834527553950210, -0.892857045680025550, -0.892879561573958420, -0.892902075235692210, -0.892924586665171160, -0.892947095862338340, -0.892969602827138000, -0.892992107559513530, +-0.893014610059408740, -0.893037110326767360, -0.893059608361533310, -0.893082104163650190, -0.893104597733061940, -0.893127089069712170, -0.893149578173544680, -0.893172065044503190, +-0.893194549682531540, -0.893217032087573410, -0.893239512259572770, -0.893261990198473520, -0.893284465904219170, -0.893306939376753760, -0.893329410616020780, -0.893351879621964380, +-0.893374346394528280, -0.893396810933656190, -0.893419273239292160, -0.893441733311380220, -0.893464191149863640, -0.893486646754686810, -0.893509100125793100, -0.893531551263126780, +-0.893554000166631450, -0.893576446836251260, -0.893598891271929820, -0.893621333473611390, -0.893643773441239690, -0.893666211174758310, -0.893688646674111300, -0.893711079939242810, +-0.893733510970096570, -0.893755939766616600, -0.893778366328746960, -0.893800790656431140, -0.893823212749613630, -0.893845632608237790, -0.893868050232248020, -0.893890465621588030, +-0.893912878776201850, -0.893935289696033530, -0.893957698381027120, -0.893980104831126330, -0.894002509046275430, -0.894024911026418120, -0.894047310771498460, -0.894069708281460600, +-0.894092103556248460, -0.894114496595806220, -0.894136887400077570, -0.894159275969006790, -0.894181662302537820, -0.894204046400614570, -0.894226428263181220, -0.894248807890181800, +-0.894271185281560350, -0.894293560437261160, -0.894315933357227810, -0.894338304041404910, -0.894360672489736050, -0.894383038702165400, -0.894405402678637220, -0.894427764419095550, +-0.894450123923484550, -0.894472481191748270, -0.894494836223830750, -0.894517189019676250, -0.894539539579228600, -0.894561887902432070, -0.894584233989230810, -0.894606577839568980, +-0.894628919453390960, -0.894651258830640340, -0.894673595971261840, -0.894695930875199160, -0.894718263542396700, -0.894740593972798480, -0.894762922166348900, -0.894785248122991870, +-0.894807571842672010, -0.894829893325333030, -0.894852212570919400, -0.894874529579375190, -0.894896844350644540, -0.894919156884671830, -0.894941467181401220, -0.894963775240776970, +-0.894986081062743470, -0.895008384647244750, -0.895030685994224860, -0.895052985103628300, -0.895075281975399210, -0.895097576609481970, -0.895119869005820750, -0.895142159164360130, +-0.895164447085043840, -0.895186732767816680, -0.895209016212622500, -0.895231297419405660, -0.895253576388110650, -0.895275853118681740, -0.895298127611063200, -0.895320399865199510, +-0.895342669881034610, -0.895364937658513220, -0.895387203197579360, -0.895409466498177430, -0.895431727560251910, -0.895453986383746960, -0.895476242968607280, -0.895498497314776820, +-0.895520749422200280, -0.895542999290821710, -0.895565246920585700, -0.895587492311436420, -0.895609735463318570, -0.895631976376176310, -0.895654215049954240, -0.895676451484596510, +-0.895698685680047850, -0.895720917636252280, -0.895743147353154410, -0.895765374830698620, -0.895787600068829400, -0.895809823067491240, -0.895832043826628730, -0.895854262346185810, +-0.895876478626107530, -0.895898692666337810, -0.895920904466821380, -0.895943114027502710, -0.895965321348326180, -0.895987526429236620, -0.896009729270178080, -0.896031929871095370, +-0.896054128231932530, -0.896076324352634510, -0.896098518233145680, -0.896120709873410410, -0.896142899273373540, -0.896165086432979540, -0.896187271352172580, -0.896209454030897690, +-0.896231634469099040, -0.896253812666721220, -0.896275988623708830, -0.896298162340006590, -0.896320333815558870, -0.896342503050310490, -0.896364670044205840, -0.896386834797189390, +-0.896408997309205870, -0.896431157580199760, -0.896453315610115880, -0.896475471398898600, -0.896497624946492880, -0.896519776252842850, -0.896541925317893670, -0.896564072141589400, +-0.896586216723875060, -0.896608359064695050, -0.896630499163994180, -0.896652637021717050, -0.896674772637808590, -0.896696906012212970, -0.896719037144875330, -0.896741166035739830, +-0.896763292684751410, -0.896785417091854780, -0.896807539256994630, -0.896829659180115810, -0.896851776861162690, -0.896873892300080190, -0.896896005496812920, -0.896918116451305590, +-0.896940225163502910, -0.896962331633349710, -0.896984435860790690, -0.897006537845770780, -0.897028637588234260, -0.897050735088126380, -0.897072830345391540, -0.897094923359974540, +-0.897117014131820320, -0.897139102660873490, -0.897161188947078970, -0.897183272990381590, -0.897205354790725830, -0.897227434348056960, -0.897249511662319250, -0.897271586733457750, +-0.897293659561417380, -0.897315730146142740, -0.897337798487579000, -0.897359864585670630, -0.897381928440362690, -0.897403990051599880, -0.897426049419327020, -0.897448106543488940, +-0.897470161424030800, -0.897492214060897080, -0.897514264454033040, -0.897536312603383290, -0.897558358508892760, -0.897580402170506280, -0.897602443588168760, -0.897624482761825050, +-0.897646519691420290, -0.897668554376899300, -0.897690586818206790, -0.897712617015287930, -0.897734644968087410, -0.897756670676550290, -0.897778694140621390, -0.897800715360245860, +-0.897822734335368520, -0.897844751065934530, -0.897866765551888490, -0.897888777793175660, -0.897910787789740760, -0.897932795541528830, -0.897954801048485020, -0.897976804310554160, +-0.897998805327681170, -0.898020804099811550, -0.898042800626889570, -0.898064794908860820, -0.898086786945670010, -0.898108776737262080, -0.898130764283582290, -0.898152749584575580, +-0.898174732640187210, -0.898196713450361780, -0.898218692015044670, -0.898240668334180810, -0.898262642407715140, -0.898284614235592920, -0.898306583817759190, -0.898328551154158990, +-0.898350516244737610, -0.898372479089439730, -0.898394439688210870, -0.898416398040995710, -0.898438354147739540, -0.898460308008387500, -0.898482259622884640, -0.898504208991176220, +-0.898526156113207410, -0.898548100988923240, -0.898570043618268530, -0.898591984001188780, -0.898613922137629140, -0.898635858027534650, -0.898657791670850470, -0.898679723067521970, +-0.898701652217494100, -0.898723579120712210, -0.898745503777121150, -0.898767426186666380, -0.898789346349293080, -0.898811264264946400, -0.898833179933571480, -0.898855093355113930, +-0.898877004529518350, -0.898898913456730450, -0.898920820136695160, -0.898942724569357750, -0.898964626754663600, -0.898986526692557740, -0.899008424382985890, -0.899030319825892770, +-0.899052213021223960, -0.899074103968924510, -0.899095992668939800, -0.899117879121215100, -0.899139763325695670, -0.899161645282326890, -0.899183524991054140, -0.899205402451822340, +-0.899227277664577330, -0.899249150629263800, -0.899271021345827480, -0.899292889814213630, -0.899314756034367500, -0.899336620006234600, -0.899358481729760180, -0.899380341204889520, +-0.899402198431568100, -0.899424053409740960, -0.899445906139353820, -0.899467756620351830, -0.899489604852680370, -0.899511450836285250, -0.899533294571111200, -0.899555136057104130, +-0.899576975294208990, -0.899598812282371480, -0.899620647021536990, -0.899642479511650770, -0.899664309752658430, -0.899686137744505450, -0.899707963487136890, -0.899729786980498770, +-0.899751608224535810, -0.899773427219193960, -0.899795243964418570, -0.899817058460154920, -0.899838870706348710, -0.899860680702945560, -0.899882488449890610, -0.899904293947129340, +-0.899926097194607260, -0.899947898192270060, -0.899969696940063010, -0.899991493437931720, -0.900013287685821890, -0.900035079683678680, -0.900056869431447910, -0.900078656929074850, +-0.900100442176505090, -0.900122225173684230, -0.900144005920557880, -0.900165784417071400, -0.900187560663170740, -0.900209334658800930, -0.900231106403908020, -0.900252875898437170, +-0.900274643142334070, -0.900296408135544350, -0.900318170878013690, -0.900339931369687710, -0.900361689610511770, -0.900383445600431820, -0.900405199339393000, -0.900426950827341250, +-0.900448700064222060, -0.900470447049981140, -0.900492191784564080, -0.900513934267916820, -0.900535674499984400, -0.900557412480713080, -0.900579148210048030, -0.900600881687935060, +-0.900622612914320000, -0.900644341889148330, -0.900666068612365760, -0.900687793083918220, -0.900709515303751100, -0.900731235271810320, -0.900752952988041260, -0.900774668452389850, +-0.900796381664801690, -0.900818092625222610, -0.900839801333598530, -0.900861507789874730, -0.900883211993997350, -0.900904913945911770, -0.900926613645563920, -0.900948311092899520, +-0.900970006287864280, -0.900991699230404120, -0.901013389920464870, -0.901035078357991900, -0.901056764542931490, -0.901078448475229000, -0.901100130154830370, -0.901121809581681310, +-0.901143486755727860, -0.901165161676915630, -0.901186834345190760, -0.901208504760498740, -0.901230172922785180, -0.901251838831996330, -0.901273502488077800, -0.901295163890975640, +-0.901316823040635430, -0.901338479937003450, -0.901360134580024950, -0.901381786969646440, -0.901403437105813170, -0.901425084988471400, -0.901446730617566860, -0.901468373993045470, +-0.901490015114853270, -0.901511653982936090, -0.901533290597239630, -0.901554924957710170, -0.901576557064293180, -0.901598186916934720, -0.901619814515580930, -0.901641439860177530, +-0.901663062950670780, -0.901684683787006060, -0.901706302369129960, -0.901727918696987760, -0.901749532770525940, -0.901771144589690210, -0.901792754154426610, -0.901814361464681080, +-0.901835966520399880, -0.901857569321528610, -0.901879169868013530, -0.901900768159800360, -0.901922364196835360, -0.901943957979064350, -0.901965549506433480, -0.901987138778888700, +-0.902008725796376360, -0.902030310558841970, -0.902051893066231900, -0.902073473318491970, -0.902095051315568440, -0.902116627057407250, -0.902138200543954440, -0.902159771775156270, +-0.902181340750958570, -0.902202907471307710, -0.902224471936149300, -0.902246034145429810, -0.902267594099095180, -0.902289151797091570, -0.902310707239365130, -0.902332260425862120, +-0.902353811356528260, -0.902375360031310030, -0.902396906450153140, -0.902418450613004080, -0.902439992519808890, -0.902461532170513720, -0.902483069565064630, -0.902504604703408210, +-0.902526137585490160, -0.902547668211256650, -0.902569196580653930, -0.902590722693628170, -0.902612246550125620, -0.902633768150092550, -0.902655287493475230, -0.902676804580219370, +-0.902698319410271790, -0.902719831983578190, -0.902741342300085070, -0.902762850359738580, -0.902784356162484980, -0.902805859708270430, -0.902827360997041420, -0.902848860028743870, +-0.902870356803324280, -0.902891851320728690, -0.902913343580903470, -0.902934833583794780, -0.902956321329349110, -0.902977806817512830, -0.902999290048231870, -0.903020771021452840, +-0.903042249737121660, -0.903063726195184820, -0.903085200395588710, -0.903106672338279680, -0.903128142023203910, -0.903149609450307870, -0.903171074619537720, -0.903192537530840060, +-0.903213998184160930, -0.903235456579446700, -0.903256912716643880, -0.903278366595698820, -0.903299818216557800, -0.903321267579167420, -0.903342714683473710, -0.903364159529423390, +-0.903385602116962390, -0.903407042446037530, -0.903428480516594970, -0.903449916328581290, -0.903471349881942890, -0.903492781176626010, -0.903514210212577380, -0.903535636989742930, +-0.903557061508069470, -0.903578483767503380, -0.903599903767991040, -0.903621321509478940, -0.903642736991913780, -0.903664150215241600, -0.903685561179409120, -0.903706969884362610, +-0.903728376330048650, -0.903749780516413860, -0.903771182443404490, -0.903792582110967360, -0.903813979519048630, -0.903835374667595230, -0.903856767556553090, -0.903878158185869030, +-0.903899546555489540, -0.903920932665361330, -0.903942316515430670, -0.903963698105644480, -0.903985077435948800, -0.904006454506290580, -0.904027829316616070, -0.904049201866871990, +-0.904070572157004930, -0.904091940186961480, -0.904113305956688150, -0.904134669466131750, -0.904156030715238420, -0.904177389703955230, -0.904198746432228420, -0.904220100900004710, +-0.904241453107230700, -0.904262803053853090, -0.904284150739818720, -0.904305496165073720, -0.904326839329565260, -0.904348180233239480, -0.904369518876043220, -0.904390855257923070, +-0.904412189378825950, -0.904433521238698250, -0.904454850837487000, -0.904476178175138370, -0.904497503251599500, -0.904518826066816770, -0.904540146620736900, -0.904561464913306580, +-0.904582780944472750, -0.904604094714181910, -0.904625406222380970, -0.904646715469016430, -0.904668022454035210, -0.904689327177383820, -0.904710629639009060, -0.904731929838857640, +-0.904753227776876500, -0.904774523453012570, -0.904795816867212000, -0.904817108019422060, -0.904838396909589230, -0.904859683537660440, -0.904880967903582410, -0.904902250007301960, +-0.904923529848765780, -0.904944807427921160, -0.904966082744714130, -0.904987355799092170, -0.905008626591001670, -0.905029895120389670, -0.905051161387202760, -0.905072425391388100, +-0.905093687132892400, -0.905114946611662470, -0.905136203827645260, -0.905157458780787350, -0.905178711471035790, -0.905199961898337510, -0.905221210062639340, -0.905242455963888080, +-0.905263699602030900, -0.905284940977014290, -0.905306180088785490, -0.905327416937291020, -0.905348651522478120, -0.905369883844293510, -0.905391113902684120, -0.905412341697597100, +-0.905433567228979270, -0.905454790496777460, -0.905476011500938820, -0.905497230241409930, -0.905518446718137970, -0.905539660931069970, -0.905560872880152750, -0.905582082565333460, +-0.905603289986558920, -0.905624495143776300, -0.905645698036932180, -0.905666898665973940, -0.905688097030848400, -0.905709293131502500, -0.905730486967883500, -0.905751678539938430, +-0.905772867847614020, -0.905794054890857630, -0.905815239669615860, -0.905836422183836090, -0.905857602433465140, -0.905878780418450270, -0.905899956138738420, -0.905921129594276840, +-0.905942300785012480, -0.905963469710892140, -0.905984636371863110, -0.906005800767872520, -0.906026962898867420, -0.906048122764794960, -0.906069280365602300, -0.906090435701236370, +-0.906111588771644440, -0.906132739576773430, -0.906153888116570490, -0.906175034390982900, -0.906196178399957700, -0.906217320143442030, -0.906238459621383160, -0.906259596833728140, +-0.906280731780424230, -0.906301864461418250, -0.906322994876657680, -0.906344123026089580, -0.906365248909661190, -0.906386372527319910, -0.906407493879012430, -0.906428612964686460, +-0.906449729784288840, -0.906470844337766810, -0.906491956625067650, -0.906513066646138620, -0.906534174400926870, -0.906555279889380010, -0.906576383111444620, -0.906597484067068530, +-0.906618582756198550, -0.906639679178782080, -0.906660773334766470, -0.906681865224098880, -0.906702954846726580, -0.906724042202597170, -0.906745127291657460, -0.906766210113855050, +-0.906787290669136990, -0.906808368957450760, -0.906829444978743520, -0.906850518732962630, -0.906871590220055700, -0.906892659439969550, -0.906913726392652000, -0.906934791078049970, +-0.906955853496110850, -0.906976913646782230, -0.906997971530011270, -0.907019027145745340, -0.907040080493932030, -0.907061131574518400, -0.907082180387452140, -0.907103226932680200, +-0.907124271210150160, -0.907145313219809510, -0.907166352961605530, -0.907187390435485690, -0.907208425641397480, -0.907229458579288270, -0.907250489249105230, -0.907271517650796060, +-0.907292543784308010, -0.907313567649588590, -0.907334589246585280, -0.907355608575245550, -0.907376625635516800, -0.907397640427346610, -0.907418652950682140, -0.907439663205470980, +-0.907460671191660740, -0.907481676909198790, -0.907502680358032610, -0.907523681538109920, -0.907544680449377860, -0.907565677091784260, -0.907586671465276380, -0.907607663569801710, +-0.907628653405307960, -0.907649640971742610, -0.907670626269053260, -0.907691609297187170, -0.907712590056092280, -0.907733568545715630, -0.907754544766005140, -0.907775518716908310, +-0.907796490398372620, -0.907817459810345780, -0.907838426952775390, -0.907859391825608820, -0.907880354428793890, -0.907901314762277980, -0.907922272826008680, -0.907943228619933820, +-0.907964182144000760, -0.907985133398157340, -0.908006082382351250, -0.908027029096529770, -0.908047973540640820, -0.908068915714631890, -0.908089855618450570, -0.908110793252044580, +-0.908131728615361730, -0.908152661708349630, -0.908173592530955750, -0.908194521083128150, -0.908215447364813970, -0.908236371375961140, -0.908257293116517480, -0.908278212586430490, +-0.908299129785647970, -0.908320044714117870, -0.908340957371787440, -0.908361867758604840, -0.908382775874517430, -0.908403681719472940, -0.908424585293419410, -0.908445486596304310, +-0.908466385628075470, -0.908487282388680930, -0.908508176878068170, -0.908529069096184690, -0.908549959042978640, -0.908570846718397610, -0.908591732122389530, -0.908612615254902110, +-0.908633496115883400, -0.908654374705280650, -0.908675251023042250, -0.908696125069115460, -0.908716996843448420, -0.908737866345988850, -0.908758733576684570, -0.908779598535483510, +-0.908800461222333600, -0.908821321637182430, -0.908842179779978050, -0.908863035650668060, -0.908883889249200600, -0.908904740575523280, -0.908925589629584140, -0.908946436411331220, +-0.908967280920712000, -0.908988123157674850, -0.909008963122167170, -0.909029800814136980, -0.909050636233532440, -0.909071469380301140, -0.909092300254391360, -0.909113128855750910, +-0.909133955184327490, -0.909154779240069270, -0.909175601022924050, -0.909196420532839780, -0.909217237769764370, -0.909238052733646000, -0.909258865424432350, -0.909279675842071810, +-0.909300483986511980, -0.909321289857700890, -0.909342093455586700, -0.909362894780117110, -0.909383693831240400, -0.909404490608904270, -0.909425285113057090, -0.909446077343646580, +-0.909466867300621100, -0.909487654983928140, -0.909508440393516300, -0.909529223529333190, -0.909550004391327160, -0.909570782979446050, -0.909591559293638000, -0.909612333333850940, +-0.909633105100033260, -0.909653874592132650, -0.909674641810097380, -0.909695406753875500, -0.909716169423415270, -0.909736929818664500, -0.909757687939571350, -0.909778443786084080, +-0.909799197358150510, -0.909819948655719140, -0.909840697678737760, -0.909861444427154780, -0.909882188900918100, -0.909902931099976000, -0.909923671024276510, -0.909944408673767910, +-0.909965144048398230, -0.909985877148115740, -0.910006607972868480, -0.910027336522604810, -0.910048062797272680, -0.910068786796820460, -0.910089508521196300, -0.910110227970348350, +-0.910130945144224770, -0.910151660042773920, -0.910172372665943970, -0.910193083013682850, -0.910213791085939250, -0.910234496882661000, -0.910255200403796700, -0.910275901649294280, +-0.910296600619102110, -0.910317297313168460, -0.910337991731441590, -0.910358683873869650, -0.910379373740401120, -0.910400061330984060, -0.910420746645566940, -0.910441429684097800, +-0.910462110446525250, -0.910482788932797330, -0.910503465142862510, -0.910524139076668960, -0.910544810734165160, -0.910565480115299140, -0.910586147220019630, -0.910606812048274760, +-0.910627474600012700, -0.910648134875182040, -0.910668792873730930, -0.910689448595608080, -0.910710102040761300, -0.910730753209139540, -0.910751402100690720, -0.910772048715363550, +-0.910792693053106060, -0.910813335113866970, -0.910833974897594540, -0.910854612404237150, -0.910875247633743170, -0.910895880586061190, -0.910916511261139370, -0.910937139658926420, +-0.910957765779370490, -0.910978389622420280, -0.910999011188024070, -0.911019630476130220, -0.911040247486687440, -0.911060862219643890, -0.911081474674948380, -0.911102084852548950, +-0.911122692752394550, -0.911143298374433200, -0.911163901718613720, -0.911184502784884390, -0.911205101573194010, -0.911225698083490630, -0.911246292315723180, -0.911266884269839930, +-0.911287473945789460, -0.911308061343520270, -0.911328646462981060, -0.911349229304120100, -0.911369809866886200, -0.911390388151227640, -0.911410964157093220, -0.911431537884431320, +-0.911452109333190540, -0.911472678503319590, -0.911493245394766840, -0.911513810007481110, -0.911534372341410770, -0.911554932396504540, -0.911575490172710890, -0.911596045669978540, +-0.911616598888256080, -0.911637149827492220, -0.911657698487635340, -0.911678244868634360, -0.911698788970437660, -0.911719330792994050, -0.911739870336252030, -0.911760407600160530, +-0.911780942584667800, -0.911801475289722770, -0.911822005715274160, -0.911842533861270450, -0.911863059727660460, -0.911883583314392680, -0.911904104621416020, -0.911924623648679100, +-0.911945140396130730, -0.911965654863719280, -0.911986167051393900, -0.912006676959102980, -0.912027184586795440, -0.912047689934419870, -0.912068193001925210, -0.912088693789259830, +-0.912109192296372990, -0.912129688523212970, -0.912150182469728790, -0.912170674135869160, -0.912191163521582920, -0.912211650626818640, -0.912232135451525370, -0.912252617995651720, +-0.912273098259146380, -0.912293576241958500, -0.912314051944036470, -0.912334525365329550, -0.912354996505786110, -0.912375465365355300, -0.912395931943985720, -0.912416396241626520, +-0.912436858258226070, -0.912457317993733640, -0.912477775448097830, -0.912498230621267670, -0.912518683513191880, -0.912539134123819370, -0.912559582453099090, -0.912580028500979750, +-0.912600472267410370, -0.912620913752339890, -0.912641352955717020, -0.912661789877490910, -0.912682224517610270, -0.912702656876024030, -0.912723086952681120, -0.912743514747530570, +-0.912763940260521210, -0.912784363491601860, -0.912804784440721770, -0.912825203107829660, -0.912845619492874570, -0.912866033595805430, -0.912886445416571270, -0.912906854955120810, +-0.912927262211403410, -0.912947667185367680, -0.912968069876962880, -0.912988470286137940, -0.913008868412841790, -0.913029264257023470, -0.913049657818632010, -0.913070049097616350, +-0.913090438093925540, -0.913110824807508830, -0.913131209238314810, -0.913151591386292870, -0.913171971251391930, -0.913192348833561150, -0.913212724132749450, -0.913233097148905880, +-0.913253467881979590, -0.913273836331919720, -0.913294202498675210, -0.913314566382195210, -0.913334927982428660, -0.913355287299324910, -0.913375644332832910, -0.913395999082901920, +-0.913416351549480750, -0.913436701732518790, -0.913457049631965060, -0.913477395247768720, -0.913497738579878930, -0.913518079628244720, -0.913538418392815350, -0.913558754873539990, +-0.913579089070367670, -0.913599420983247650, -0.913619750612129080, -0.913640077956961010, -0.913660403017692910, -0.913680725794273730, -0.913701046286652830, -0.913721364494779140, +-0.913741680418602260, -0.913761994058071010, -0.913782305413134770, -0.913802614483742780, -0.913822921269844430, -0.913843225771388550, -0.913863527988324710, -0.913883827920602080, +-0.913904125568169800, -0.913924420930977250, -0.913944714008973700, -0.913965004802108290, -0.913985293310330400, -0.914005579533589300, -0.914025863471834120, -0.914046145125014480, +-0.914066424493079290, -0.914086701575978160, -0.914106976373660230, -0.914127248886074880, -0.914147519113171380, -0.914167787054899090, -0.914188052711207400, -0.914208316082045560, +-0.914228577167362830, -0.914248835967108710, -0.914269092481232450, -0.914289346709683650, -0.914309598652411350, -0.914329848309365030, -0.914350095680494190, -0.914370340765747970, +-0.914390583565075970, -0.914410824078427440, -0.914431062305752000, -0.914451298246998780, -0.914471531902117380, -0.914491763271057080, -0.914511992353767460, -0.914532219150197780, +-0.914552443660297640, -0.914572665884016310, -0.914592885821303380, -0.914613103472108220, -0.914633318836380330, -0.914653531914069060, -0.914673742705124030, -0.914693951209494700, +-0.914714157427130360, -0.914734361357980700, -0.914754563001995090, -0.914774762359123140, -0.914794959429314210, -0.914815154212517910, -0.914835346708683720, -0.914855536917761230, +-0.914875724839699700, -0.914895910474449070, -0.914916093821958600, -0.914936274882177880, -0.914956453655056400, -0.914976630140543980, -0.914996804338589760, -0.915016976249143690, +-0.915037145872155120, -0.915057313207573770, -0.915077478255349020, -0.915097641015430670, -0.915117801487768220, -0.915137959672311150, -0.915158115569009280, -0.915178269177812090, +-0.915198420498669170, -0.915218569531530250, -0.915238716276345010, -0.915258860733062840, -0.915279002901633550, -0.915299142782006750, -0.915319280374132130, -0.915339415677959290, +-0.915359548693437940, -0.915379679420517570, -0.915399807859148210, -0.915419934009279230, -0.915440057870860470, -0.915460179443841390, -0.915480298728172050, -0.915500415723801920, +-0.915520530430680710, -0.915540642848758250, -0.915560752977984120, -0.915580860818308140, -0.915600966369680020, -0.915621069632049480, -0.915641170605366210, -0.915661269289580030, +-0.915681365684640650, -0.915701459790498000, -0.915721551607101560, -0.915741641134401260, -0.915761728372346820, -0.915781813320888150, -0.915801895979974970, -0.915821976349556980, +-0.915842054429584000, -0.915862130220006070, -0.915882203720772560, -0.915902274931833740, -0.915922343853139200, -0.915942410484638760, -0.915962474826282350, -0.915982536878019670, +-0.916002596639800770, -0.916022654111575240, -0.916042709293293120, -0.916062762184904230, -0.916082812786358500, -0.916102861097605640, -0.916122907118595680, -0.916142950849278440, +-0.916162992289603850, -0.916183031439521730, -0.916203068298982130, -0.916223102867934740, -0.916243135146329600, -0.916263165134116650, -0.916283192831245820, -0.916303218237666920, +-0.916323241353330100, -0.916343262178185180, -0.916363280712181980, -0.916383296955270770, -0.916403310907401130, -0.916423322568523320, -0.916443331938587070, -0.916463339017542620, +-0.916483343805339800, -0.916503346301928650, -0.916523346507258970, -0.916543344421281160, -0.916563340043944800, -0.916583333375200260, -0.916603324414997140, -0.916623313163285940, +-0.916643299620016340, -0.916663283785138620, -0.916683265658602480, -0.916703245240358400, -0.916723222530356100, -0.916743197528545720, -0.916763170234877410, -0.916783140649301110, +-0.916803108771767070, -0.916823074602225120, -0.916843038140625620, -0.916862999386918290, -0.916882958341053710, -0.916902915002981600, -0.916922869372652330, -0.916942821450015710, +-0.916962771235022120, -0.916982718727621600, -0.917002663927764420, -0.917022606835400380, -0.917042547450479970, -0.917062485772953020, -0.917082421802770000, -0.917102355539880840, +-0.917122286984235920, -0.917142216135785170, -0.917162142994478960, -0.917182067560267320, -0.917201989833100530, -0.917221909812928730, -0.917241827499702180, -0.917261742893371150, +-0.917281655993885670, -0.917301566801196120, -0.917321475315252540, -0.917341381536005310, -0.917361285463404670, -0.917381187097400800, -0.917401086437943940, -0.917420983484984460, +-0.917440878238472310, -0.917460770698358190, -0.917480660864592010, -0.917500548737124280, -0.917520434315905130, -0.917540317600884950, -0.917560198592013880, -0.917580077289242290, +-0.917599953692520680, -0.917619827801798960, -0.917639699617027850, -0.917659569138157380, -0.917679436365138050, -0.917699301297920100, -0.917719163936453920, -0.917739024280689760, +-0.917758882330578230, -0.917778738086069250, -0.917798591547113630, -0.917818442713661420, -0.917838291585663100, -0.917858138163069050, -0.917877982445829740, -0.917897824433895340, +-0.917917664127216540, -0.917937501525743490, -0.917957336629426690, -0.917977169438216610, -0.917996999952063520, -0.918016828170918010, -0.918036654094730230, -0.918056477723451000, +-0.918076299057030590, -0.918096118095419360, -0.918115934838567790, -0.918135749286426490, -0.918155561438945830, -0.918175371296076180, -0.918195178857768140, -0.918214984123972180, +-0.918234787094638680, -0.918254587769718360, -0.918274386149161350, -0.918294182232918590, -0.918313976020940230, -0.918333767513177080, -0.918353556709579410, -0.918373343610097810, +-0.918393128214682890, -0.918412910523285220, -0.918432690535855190, -0.918452468252343390, -0.918472243672700530, -0.918492016796876980, -0.918511787624823440, -0.918531556156490400, +-0.918551322391828570, -0.918571086330788320, -0.918590847973320360, -0.918610607319375270, -0.918630364368903770, -0.918650119121856230, -0.918669871578183470, -0.918689621737835970, +-0.918709369600764550, -0.918729115166919690, -0.918748858436251870, -0.918768599408712030, -0.918788338084250640, -0.918808074462818420, -0.918827808544366080, -0.918847540328844190, +-0.918867269816203370, -0.918886997006394420, -0.918906721899367950, -0.918926444495074770, -0.918946164793465360, -0.918965882794490650, -0.918985598498101130, -0.919005311904247720, +-0.919025023012880920, -0.919044731823951740, -0.919064438337410470, -0.919084142553208360, -0.919103844471295670, -0.919123544091623560, -0.919143241414142500, -0.919162936438803310, +-0.919182629165556930, -0.919202319594353830, -0.919222007725144950, -0.919241693557880990, -0.919261377092512990, -0.919281058328991320, -0.919300737267267240, -0.919320413907291130, +-0.919340088249014030, -0.919359760292386750, -0.919379430037360110, -0.919399097483884710, -0.919418762631911800, -0.919438425481391760, -0.919458086032275860, -0.919477744284514560, +-0.919497400238059150, -0.919517053892860090, -0.919536705248868320, -0.919556354306034880, -0.919576001064310480, -0.919595645523646250, -0.919615287683992700, -0.919634927545301070, +-0.919654565107521970, -0.919674200370606650, -0.919693833334505720, -0.919713463999170200, -0.919733092364551030, -0.919752718430599250, -0.919772342197265450, -0.919791963664501000, +-0.919811582832256500, -0.919831199700483100, -0.919850814269131730, -0.919870426538153320, -0.919890036507498790, -0.919909644177119180, -0.919929249546965530, -0.919948852616988670, +-0.919968453387139840, -0.919988051857369650, -0.920007648027629470, -0.920027241897870110, -0.920046833468042720, -0.920066422738098130, -0.920086009707987600, -0.920105594377661930, +-0.920125176747072390, -0.920144756816169810, -0.920164334584905430, -0.920183910053230190, -0.920203483221095130, -0.920223054088451400, -0.920242622655250030, -0.920262188921442070, +-0.920281752886978670, -0.920301314551810970, -0.920320873915889790, -0.920340430979166620, -0.920359985741592280, -0.920379538203118020, -0.920399088363694770, -0.920418636223274020, +-0.920438181781806470, -0.920457725039243610, -0.920477265995536360, -0.920496804650635990, -0.920516341004493530, -0.920535875057060360, -0.920555406808287400, -0.920574936258126030, +-0.920594463406527170, -0.920613988253442320, -0.920633510798822270, -0.920653031042618640, -0.920672548984782350, -0.920692064625264760, -0.920711577964016930, -0.920731089000990210, +-0.920750597736135770, -0.920770104169404750, -0.920789608300748520, -0.920809110130118240, -0.920828609657465270, -0.920848106882740660, -0.920867601805895890, -0.920887094426882100, +-0.920906584745650570, -0.920926072762152550, -0.920945558476339410, -0.920965041888162190, -0.920984522997572610, -0.921004001804521580, -0.921023478308960590, -0.921042952510840780, +-0.921062424410113770, -0.921081894006730570, -0.921101361300642800, -0.921120826291801590, -0.921140288980158100, -0.921159749365664140, -0.921179207448270640, -0.921198663227929200, +-0.921218116704591080, -0.921237567878207760, -0.921257016748730400, -0.921276463316110570, -0.921295907580299440, -0.921315349541248720, -0.921334789198909540, -0.921354226553233400, +-0.921373661604171670, -0.921393094351675820, -0.921412524795697240, -0.921431952936187290, -0.921451378773097460, -0.921470802306379340, -0.921490223535984090, -0.921509642461863290, +-0.921529059083968430, -0.921548473402250880, -0.921567885416662120, -0.921587295127153650, -0.921606702533677050, -0.921626107636183580, -0.921645510434624840, -0.921664910928952310, +-0.921684309119117580, -0.921703705005072040, -0.921723098586767260, -0.921742489864154750, -0.921761878837185970, -0.921781265505812520, -0.921800649869985890, -0.921820031929657670, +-0.921839411684779340, -0.921858789135302390, -0.921878164281178640, -0.921897537122359450, -0.921916907658796300, -0.921936275890441030, -0.921955641817244990, -0.921975005439159780, +-0.921994366756137110, -0.922013725768128570, -0.922033082475085640, -0.922052436876960150, -0.922071788973703340, -0.922091138765267270, -0.922110486251603190, -0.922129831432663030, +-0.922149174308398270, -0.922168514878760500, -0.922187853143701440, -0.922207189103172900, -0.922226522757126240, -0.922245854105513300, -0.922265183148285760, -0.922284509885395230, +-0.922303834316793520, -0.922323156442432010, -0.922342476262262840, -0.922361793776237280, -0.922381108984307360, -0.922400421886424680, -0.922419732482540940, -0.922439040772607740, +-0.922458346756577120, -0.922477650434400550, -0.922496951806029860, -0.922516250871416750, -0.922535547630513040, -0.922554842083270430, -0.922574134229640850, -0.922593424069575780, +-0.922612711603027270, -0.922631996829946900, -0.922651279750286600, -0.922670560363998080, -0.922689838671033050, -0.922709114671343640, -0.922728388364881250, -0.922747659751598000, +-0.922766928831445510, -0.922786195604375800, -0.922805460070340480, -0.922824722229291570, -0.922843982081180900, -0.922863239625960290, -0.922882494863581430, -0.922901747793996470, +-0.922920998417157130, -0.922940246733015220, -0.922959492741522780, -0.922978736442631620, -0.922997977836293450, -0.923017216922460530, -0.923036453701084560, -0.923055688172117360, +-0.923074920335510970, -0.923094150191217210, -0.923113377739188220, -0.923132602979375720, -0.923151825911731730, -0.923171046536208070, -0.923190264852756900, -0.923209480861330030, +-0.923228694561879500, -0.923247905954357240, -0.923267115038715170, -0.923286321814905330, -0.923305526282879650, -0.923324728442590170, -0.923343928293988920, -0.923363125837027840, +-0.923382321071658960, -0.923401513997834100, -0.923420704615505630, -0.923439892924625470, -0.923459078925145450, -0.923478262617017710, -0.923497444000194400, -0.923516623074627450, +-0.923535799840268900, -0.923554974297070900, -0.923574146444985370, -0.923593316283964680, -0.923612483813960440, -0.923631649034925230, -0.923650811946810760, -0.923669972549569280, +-0.923689130843152850, -0.923708286827513710, -0.923727440502603690, -0.923746591868375160, -0.923765740924780140, -0.923784887671770800, -0.923804032109299180, -0.923823174237317520, +-0.923842314055777880, -0.923861451564632510, -0.923880586763833560, -0.923899719653332950, -0.923918850233083290, -0.923937978503036270, -0.923957104463144500, -0.923976228113359780, +-0.923995349453634710, -0.924014468483921100, -0.924033585204171340, -0.924052699614337670, -0.924071811714372250, -0.924090921504227230, -0.924110028983854970, -0.924129134153207630, +-0.924148237012237470, -0.924167337560896640, -0.924186435799137620, -0.924205531726912440, -0.924224625344173270, -0.924243716650872790, -0.924262805646962840, -0.924281892332395990, +-0.924300976707124300, -0.924320058771100240, -0.924339138524275960, -0.924358215966603950, -0.924377291098036350, -0.924396363918525530, -0.924415434428023760, -0.924434502626483410, +-0.924453568513856850, -0.924472632090096340, -0.924491693355154240, -0.924510752308982940, -0.924529808951534690, -0.924548863282762090, -0.924567915302617060, -0.924586965011052530, +-0.924606012408020430, -0.924625057493473350, -0.924644100267363540, -0.924663140729643510, -0.924682178880265710, -0.924701214719182430, -0.924720248246346130, -0.924739279461709080, +-0.924758308365223990, -0.924777334956843000, -0.924796359236518820, -0.924815381204203590, -0.924834400859850030, -0.924853418203410380, -0.924872433234837250, -0.924891445954083010, +-0.924910456361100140, -0.924929464455841120, -0.924948470238258440, -0.924967473708304680, -0.924986474865932110, -0.925005473711093540, -0.925024470243741010, -0.925043464463827570, +-0.925062456371305240, -0.925081445966126960, -0.925100433248244980, -0.925119418217611900, -0.925138400874180310, -0.925157381217902700, -0.925176359248731650, -0.925195334966619650, +-0.925214308371519300, -0.925233279463383300, -0.925252248242164010, -0.925271214707814150, -0.925290178860286190, -0.925309140699532850, -0.925328100225506600, -0.925347057438160260, +-0.925366012337446090, -0.925384964923317010, -0.925403915195725400, -0.925422863154624080, -0.925441808799965630, -0.925460752131702540, -0.925479693149787730, -0.925498631854173470, +-0.925517568244812790, -0.925536502321658180, -0.925555434084662340, -0.925574363533777870, -0.925593290668957460, -0.925612215490153820, -0.925631137997319780, -0.925650058190407690, +-0.925668976069370600, -0.925687891634160990, -0.925706804884731780, -0.925725715821035360, -0.925744624443024850, -0.925763530750652760, -0.925782434743871670, -0.925801336422634620, +-0.925820235786894210, -0.925839132836603240, -0.925858027571714310, -0.925876919992180470, -0.925895810097954190, -0.925914697888988500, -0.925933583365236010, -0.925952466526649640, +-0.925971347373181990, -0.925990225904786080, -0.926009102121414520, -0.926027976023020230, -0.926046847609556020, -0.926065716880974720, -0.926084583837229030, -0.926103448478271970, +-0.926122310804056270, -0.926141170814534730, -0.926160028509660390, -0.926178883889385850, -0.926197736953664250, -0.926216587702448080, -0.926235436135690700, -0.926254282253344500, +-0.926273126055362720, -0.926291967541698070, -0.926310806712303590, -0.926329643567131990, -0.926348478106136410, -0.926367310329269440, -0.926386140236484360, -0.926404967827733850, +-0.926423793102971070, -0.926442616062148620, -0.926461436705219740, -0.926480255032137160, -0.926499071042854120, -0.926517884737323330, -0.926536696115497720, -0.926555505177330430, +-0.926574311922774400, -0.926593116351782650, -0.926611918464307900, -0.926630718260303630, -0.926649515739722320, -0.926668310902517440, -0.926687103748641610, -0.926705894278048060, +-0.926724682490689840, -0.926743468386519890, -0.926762251965491220, -0.926781033227557010, -0.926799812172670050, -0.926818588800783720, -0.926837363111850830, -0.926856135105824650, +-0.926874904782658100, -0.926893672142304230, -0.926912437184716160, -0.926931199909846960, -0.926949960317649870, -0.926968718408077820, -0.926987474181084070, -0.927006227636621550, +-0.927024978774643520, -0.927043727595102900, -0.927062474097953060, -0.927081218283147050, -0.927099960150638000, -0.927118699700378970, -0.927137436932323310, -0.927156171846423960, +-0.927174904442634280, -0.927193634720907210, -0.927212362681196110, -0.927231088323454130, -0.927249811647634430, -0.927268532653690250, -0.927287251341574640, -0.927305967711240960, +-0.927324681762642270, -0.927343393495732030, -0.927362102910463170, -0.927380810006789180, -0.927399514784662980, -0.927418217244038170, -0.927436917384867780, -0.927455615207105070, +-0.927474310710703300, -0.927493003895615730, -0.927511694761795740, -0.927530383309196460, -0.927549069537771160, -0.927567753447473330, -0.927586435038256000, -0.927605114310072640, +-0.927623791262876530, -0.927642465896620920, -0.927661138211259060, -0.927679808206744450, -0.927698475883030340, -0.927717141240069880, -0.927735804277816770, -0.927754464996223940, +-0.927773123395245090, -0.927791779474833380, -0.927810433234942280, -0.927829084675525050, -0.927847733796535180, -0.927866380597925810, -0.927885025079650650, -0.927903667241662840, +-0.927922307083915990, -0.927940944606363230, -0.927959579808958160, -0.927978212691654150, -0.927996843254404570, -0.928015471497163010, -0.928034097419882630, -0.928052721022517010, +-0.928071342305019640, -0.928089961267343890, -0.928108577909443230, -0.928127192231271160, -0.928145804232781040, -0.928164413913926570, -0.928183021274660900, -0.928201626314937740, +-0.928220229034710460, -0.928238829433932770, -0.928257427512557800, -0.928276023270539370, -0.928294616707830870, -0.928313207824385870, -0.928331796620157750, -0.928350383095100320, +-0.928368967249166730, -0.928387549082310800, -0.928406128594486120, -0.928424705785645950, -0.928443280655744110, -0.928461853204733960, -0.928480423432569310, -0.928498991339203440, +-0.928517556924590260, -0.928536120188683030, -0.928554681131435690, -0.928573239752801480, -0.928591796052734230, -0.928610350031187530, -0.928628901688114850, -0.928647451023470020, +-0.928665998037206510, -0.928684542729278030, -0.928703085099638170, -0.928721625148240640, -0.928740162875039020, -0.928758698279987030, -0.928777231363038250, -0.928795762124146500, +-0.928814290563265140, -0.928832816680348230, -0.928851340475349120, -0.928869861948221850, -0.928888381098919800, -0.928906897927396780, -0.928925412433606600, -0.928943924617502860, +-0.928962434479039260, -0.928980942018169610, -0.928999447234847620, -0.929017950129026990, -0.929036450700661430, -0.929054948949704860, -0.929073444876110880, -0.929091938479833290, +-0.929110429760825810, -0.929128918719042350, -0.929147405354436520, -0.929165889666962120, -0.929184371656573190, -0.929202851323223110, -0.929221328666866020, -0.929239803687455620, +-0.929258276384945630, -0.929276746759289950, -0.929295214810442530, -0.929313680538356950, -0.929332143942987240, -0.929350605024287120, -0.929369063782210510, -0.929387520216711230, +-0.929405974327743190, -0.929424426115260100, -0.929442875579216120, -0.929461322719564830, -0.929479767536260270, -0.929498210029256370, -0.929516650198506820, -0.929535088043965670, +-0.929553523565586850, -0.929571956763324270, -0.929590387637131640, -0.929608816186963120, -0.929627242412772500, -0.929645666314513950, -0.929664087892141060, -0.929682507145608070, +-0.929700924074868710, -0.929719338679877110, -0.929737750960587080, -0.929756160916952790, -0.929774568548928040, -0.929792973856466860, -0.929811376839523200, -0.929829777498051180, +-0.929848175832004630, -0.929866571841337810, -0.929884965526004410, -0.929903356885958600, -0.929921745921154510, -0.929940132631545960, -0.929958517017087090, -0.929976899077731960, +-0.929995278813434580, -0.930013656224148890, -0.930032031309829250, -0.930050404070429380, -0.930068774505903640, -0.930087142616205840, -0.930105508401290250, -0.930123871861110780, +-0.930142232995621710, -0.930160591804777060, -0.930178948288530980, -0.930197302446837400, -0.930215654279650690, -0.930234003786924890, -0.930252350968613920, -0.930270695824672260, +-0.930289038355053720, -0.930307378559712570, -0.930325716438602960, -0.930344051991679240, -0.930362385218895140, -0.930380716120205340, -0.930399044695563560, -0.930417370944924270, +-0.930435694868241400, -0.930454016465469440, -0.930472335736562410, -0.930490652681474570, -0.930508967300159970, -0.930527279592573090, -0.930545589558667950, -0.930563897198398830, +-0.930582202511719970, -0.930600505498585640, -0.930618806158950100, -0.930637104492767490, -0.930655400499992070, -0.930673694180578100, -0.930691985534480070, -0.930710274561651900, +-0.930728561262048170, -0.930746845635622930, -0.930765127682330770, -0.930783407402125620, -0.930801684794961950, -0.930819959860794130, -0.930838232599576430, -0.930856503011263100, +-0.930874771095808520, -0.930893036853166930, -0.930911300283292940, -0.930929561386140580, -0.930947820161664330, -0.930966076609818450, -0.930984330730557530, -0.931002582523835720, +-0.931020831989607500, -0.931039079127827130, -0.931057323938449090, -0.931075566421427750, -0.931093806576717480, -0.931112044404272640, -0.931130279904047730, -0.931148513075997220, +-0.931166743920075260, -0.931184972436236550, -0.931203198624435350, -0.931221422484626250, -0.931239644016763510, -0.931257863220801730, -0.931276080096695160, -0.931294294644398500, +-0.931312506863866020, -0.931330716755052410, -0.931348924317911940, -0.931367129552399090, -0.931385332458468550, -0.931403533036074590, -0.931421731285171810, -0.931439927205714670, +-0.931458120797657770, -0.931476312060955490, -0.931494500995562520, -0.931512687601433240, -0.931530871878522350, -0.931549053826784100, -0.931567233446173320, -0.931585410736644470, +-0.931603585698152050, -0.931621758330650640, -0.931639928634094950, -0.931658096608439350, -0.931676262253638530, -0.931694425569646990, -0.931712586556419530, -0.931730745213910530, +-0.931748901542074680, -0.931767055540866580, -0.931785207210240830, -0.931803356550152010, -0.931821503560554820, -0.931839648241403970, -0.931857790592653830, -0.931875930614259330, +-0.931894068306174940, -0.931912203668355480, -0.931930336700755420, -0.931948467403329590, -0.931966595776032580, -0.931984721818819080, -0.932002845531643700, -0.932020966914461240, +-0.932039085967226400, -0.932057202689893890, -0.932075317082418310, -0.932093429144754350, -0.932111538876856940, -0.932129646278680670, -0.932147751350180240, -0.932165854091310480, +-0.932183954502026070, -0.932202052582281730, -0.932220148332032370, -0.932238241751232490, -0.932256332839837110, -0.932274421597800830, -0.932292508025078570, -0.932310592121624930, +-0.932328673887394930, -0.932346753322343180, -0.932364830426424600, -0.932382905199593880, -0.932400977641805960, -0.932419047753015540, -0.932437115533177540, -0.932455180982246780, +-0.932473244100178070, -0.932491304886926220, -0.932509363342446050, -0.932527419466692600, -0.932545473259620450, -0.932563524721184640, -0.932581573851340110, -0.932599620650041650, +-0.932617665117243980, -0.932635707252902350, -0.932653747056971350, -0.932671784529406020, -0.932689819670161180, -0.932707852479191860, -0.932725882956452760, -0.932743911101899140, +-0.932761936915485590, -0.932779960397167260, -0.932797981546899080, -0.932816000364635860, -0.932834016850332740, -0.932852031003944540, -0.932870042825426180, -0.932888052314732820, +-0.932906059471819260, -0.932924064296640540, -0.932942066789151810, -0.932960066949307780, -0.932978064777063580, -0.932996060272374250, -0.933014053435194720, -0.933032044265480140, +-0.933050032763185430, -0.933068018928265520, -0.933086002760675770, -0.933103984260370890, -0.933121963427306020, -0.933139940261436320, -0.933157914762716700, -0.933175886931102430, +-0.933193856766548310, -0.933211824269009620, -0.933229789438441260, -0.933247752274798500, -0.933265712778036380, -0.933283670948109930, -0.933301626784974300, -0.933319580288584750, +-0.933337531458896090, -0.933355480295863680, -0.933373426799442460, -0.933391370969587800, -0.933409312806254610, -0.933427252309398270, -0.933445189478973700, -0.933463124314936170, +-0.933481056817240810, -0.933498986985842880, -0.933516914820697430, -0.933534840321759710, -0.933552763488984860, -0.933570684322328150, -0.933588602821744720, -0.933606518987189720, +-0.933624432818618510, -0.933642344315986140, -0.933660253479247970, -0.933678160308359150, -0.933696064803274940, -0.933713966963950480, -0.933731866790341260, -0.933749764282402190, +-0.933767659440088880, -0.933785552263356360, -0.933803442752159980, -0.933821330906454920, -0.933839216726196630, -0.933857100211340160, -0.933874981361841110, -0.933892860177654490, +-0.933910736658735700, -0.933928610805040190, -0.933946482616523020, -0.933964352093139770, -0.933982219234845590, -0.934000084041595850, -0.934017946513345910, -0.934035806650051040, +-0.934053664451666710, -0.934071519918148300, -0.934089373049450940, -0.934107223845530240, -0.934125072306341450, -0.934142918431840050, -0.934160762221981190, -0.934178603676720560, +-0.934196442796013330, -0.934214279579815180, -0.934232114028081150, -0.934249946140766950, -0.934267775917827840, -0.934285603359219170, -0.934303428464896670, -0.934321251234815460, +-0.934339071668931260, -0.934356889767199330, -0.934374705529575130, -0.934392518956014160, -0.934410330046472000, -0.934428138800903920, -0.934445945219265490, -0.934463749301512210, +-0.934481551047599560, -0.934499350457483000, -0.934517147531118250, -0.934534942268460340, -0.934552734669465310, -0.934570524734088300, -0.934588312462285130, -0.934606097854011050, +-0.934623880909221770, -0.934641661627872770, -0.934659440009919630, -0.934677216055317950, -0.934694989764023100, -0.934712761135990890, -0.934730530171176690, -0.934748296869536200, +-0.934766061231025010, -0.934783823255598610, -0.934801582943212690, -0.934819340293822850, -0.934837095307384570, -0.934854847983853540, -0.934872598323185480, -0.934890346325335850, +-0.934908091990260370, -0.934925835317914730, -0.934943576308254420, -0.934961314961235250, -0.934979051276812800, -0.934996785254942560, -0.935014516895580570, -0.935032246198682080, +-0.935049973164203130, -0.935067697792099200, -0.935085420082325980, -0.935103140034839300, -0.935120857649594740, -0.935138572926548010, -0.935156285865654800, -0.935173996466870940, +-0.935191704730152120, -0.935209410655453930, -0.935227114242732300, -0.935244815491942830, -0.935262514403041420, -0.935280210975983680, -0.935297905210725420, -0.935315597107222340, +-0.935333286665430360, -0.935350973885305080, -0.935368658766802420, -0.935386341309878080, -0.935404021514487870, -0.935421699380587610, -0.935439374908133110, -0.935457048097080190, +-0.935474718947384650, -0.935492387459002320, -0.935510053631888990, -0.935527717466000610, -0.935545378961292860, -0.935563038117721680, -0.935580694935242870, -0.935598349413812370, +-0.935616001553385980, -0.935633651353919630, -0.935651298815369010, -0.935668943937690290, -0.935686586720839260, -0.935704227164771640, -0.935721865269443450, -0.935739501034810630, +-0.935757134460829090, -0.935774765547454650, -0.935792394294643340, -0.935810020702350980, -0.935827644770533710, -0.935845266499147230, -0.935862885888147590, -0.935880502937490700, +-0.935898117647132600, -0.935915730017029210, -0.935933340047136460, -0.935950947737410390, -0.935968553087807020, -0.935986156098282060, -0.936003756768791880, -0.936021355099292300, +-0.936038951089739340, -0.936056544740089040, -0.936074136050297210, -0.936091725020320230, -0.936109311650113800, -0.936126895939634160, -0.936144477888837260, -0.936162057497679110, +-0.936179634766115880, -0.936197209694103580, -0.936214782281598160, -0.936232352528555970, -0.936249920434932710, -0.936267486000684770, -0.936285049225768050, -0.936302610110138710, +-0.936320168653752780, -0.936337724856566630, -0.936355278718535970, -0.936372830239617260, -0.936390379419766440, -0.936407926258939540, -0.936425470757093040, -0.936443012914182640, +-0.936460552730164820, -0.936478090204995620, -0.936495625338631290, -0.936513158131027760, -0.936530688582141390, -0.936548216691928230, -0.936565742460344630, -0.936583265887346530, +-0.936600786972890400, -0.936618305716932280, -0.936635822119428420, -0.936653336180334860, -0.936670847899608080, -0.936688357277204120, -0.936705864313079340, -0.936723369007189890, +-0.936740871359492020, -0.936758371369942000, -0.936775869038495970, -0.936793364365110290, -0.936810857349741230, -0.936828347992345050, -0.936845836292877880, -0.936863322251296200, +-0.936880805867556180, -0.936898287141614270, -0.936915766073426530, -0.936933242662949420, -0.936950716910139090, -0.936968188814952140, -0.936985658377344600, -0.937003125597272950, +-0.937020590474693440, -0.937038053009562550, -0.937055513201836440, -0.937072971051471690, -0.937090426558424450, -0.937107879722651080, -0.937125330544108070, -0.937142779022751670, +-0.937160225158538360, -0.937177668951424400, -0.937195110401366380, -0.937212549508320560, -0.937229986272243410, -0.937247420693091190, -0.937264852770820500, -0.937282282505387590, +-0.937299709896749160, -0.937317134944861240, -0.937334557649680660, -0.937351978011163540, -0.937369396029266610, -0.937386811703946000, -0.937404225035158520, -0.937421636022860440, +-0.937439044667008230, -0.937456450967558470, -0.937473854924467550, -0.937491256537692050, -0.937508655807188340, -0.937526052732913010, -0.937543447314822530, -0.937560839552873500, +-0.937578229447022290, -0.937595616997225600, -0.937613002203439790, -0.937630385065621460, -0.937647765583727200, -0.937665143757713590, -0.937682519587537010, -0.937699893073154270, +-0.937717264214521620, -0.937734633011595990, -0.937751999464333630, -0.937769363572691360, -0.937786725336625550, -0.937804084756093110, -0.937821441831050430, -0.937838796561454080, +-0.937856148947260770, -0.937873498988426980, -0.937890846684909630, -0.937908192036664980, -0.937925535043649950, -0.937942875705821020, -0.937960214023135010, -0.937977549995548390, +-0.937994883623017970, -0.938012214905500240, -0.938029543842952010, -0.938046870435329970, -0.938064194682590720, -0.938081516584690860, -0.938098836141587400, -0.938116153353236730, +-0.938133468219595760, -0.938150780740621080, -0.938168090916269510, -0.938185398746497650, -0.938202704231262290, -0.938220007370520140, -0.938237308164228010, -0.938254606612342610, +-0.938271902714820750, -0.938289196471619010, -0.938306487882694330, -0.938323776948003510, -0.938341063667503140, -0.938358348041150260, -0.938375630068901350, -0.938392909750713430, +-0.938410187086543220, -0.938427462076347530, -0.938444734720083160, -0.938462005017707050, -0.938479272969175880, -0.938496538574446590, -0.938513801833475880, -0.938531062746220670, +-0.938548321312637770, -0.938565577532684100, -0.938582831406316600, -0.938600082933491840, -0.938617332114166980, -0.938634578948298710, -0.938651823435844080, -0.938669065576759780, +-0.938686305371002950, -0.938703542818530300, -0.938720777919298750, -0.938738010673265340, -0.938755241080386880, -0.938772469140620290, -0.938789694853922500, -0.938806918220250530, +-0.938824139239561210, -0.938841357911811670, -0.938858574236958620, -0.938875788214959210, -0.938892999845770240, -0.938910209129348750, -0.938927416065651780, -0.938944620654636350, +-0.938961822896259290, -0.938979022790477740, -0.938996220337248500, -0.939013415536528840, -0.939030608388275570, -0.939047798892445830, -0.939064987048996550, -0.939082172857884870, +-0.939099356319067600, -0.939116537432502120, -0.939133716198145120, -0.939150892615953970, -0.939168066685885590, -0.939185238407897030, -0.939202407781945410, -0.939219574807987680, +-0.939236739485981080, -0.939253901815882530, -0.939271061797649300, -0.939288219431238410, -0.939305374716607020, -0.939322527653712050, -0.939339678242510970, -0.939356826482960480, +-0.939373972375018070, -0.939391115918640660, -0.939408257113785510, -0.939425395960409640, -0.939442532458470430, -0.939459666607924680, -0.939476798408729890, -0.939493927860843070, +-0.939511054964221490, -0.939528179718822300, -0.939545302124602520, -0.939562422181519640, -0.939579539889530580, -0.939596655248592820, -0.939613768258663270, -0.939630878919699320, +-0.939647987231658210, -0.939665093194497090, -0.939682196808173330, -0.939699298072643960, -0.939716396987866460, -0.939733493553797870, -0.939750587770395550, -0.939767679637616870, +-0.939784769155418860, -0.939801856323759120, -0.939818941142594570, -0.939836023611882680, -0.939853103731580710, -0.939870181501646140, -0.939887256922036010, -0.939904329992707680, +-0.939921400713618630, -0.939938469084726000, -0.939955535105987280, -0.939972598777359610, -0.939989660098800580, -0.940006719070267230, -0.940023775691717240, -0.940040829963107670, +-0.940057881884396210, -0.940074931455539890, -0.940091978676496300, -0.940109023547222700, -0.940126066067676680, -0.940143106237815380, -0.940160144057596400, -0.940177179526976880, +-0.940194212645914630, -0.940211243414366680, -0.940228271832290740, -0.940245297899644170, -0.940262321616384230, -0.940279342982468510, -0.940296361997854380, -0.940313378662499530, +-0.940330392976361010, -0.940347404939396720, -0.940364414551563720, -0.940381421812819810, -0.940398426723122350, -0.940415429282428830, -0.940432429490696610, -0.940449427347883390, +-0.940466422853946660, -0.940483416008843780, -0.940500406812532440, -0.940517395264970020, -0.940534381366114110, -0.940551365115922300, -0.940568346514352170, -0.940585325561360990, +-0.940602302256906550, -0.940619276600946350, -0.940636248593438080, -0.940653218234339010, -0.940670185523607040, -0.940687150461199440, -0.940704113047074130, -0.940721073281188480, +-0.940738031163500190, -0.940754986693966730, -0.940771939872545810, -0.940788890699195020, -0.940805839173872170, -0.940822785296534510, -0.940839729067140080, -0.940856670485646250, +-0.940873609552010710, -0.940890546266191170, -0.940907480628145330, -0.940924412637830660, -0.940941342295204990, -0.940958269600226100, -0.940975194552851390, -0.940992117153038770, +-0.941009037400745820, -0.941025955295930250, -0.941042870838549870, -0.941059784028562270, -0.941076694865925160, -0.941093603350596440, -0.941110509482533500, -0.941127413261694470, +-0.941144314688036830, -0.941161213761518510, -0.941178110482096990, -0.941195004849730400, -0.941211896864376120, -0.941228786525992180, -0.941245673834536280, -0.941262558789966120, +-0.941279441392239620, -0.941296321641314490, -0.941313199537148650, -0.941330075079699680, -0.941346948268925620, -0.941363819104784170, -0.941380687587233140, -0.941397553716230350, +-0.941414417491733820, -0.941431278913701040, -0.941448137982090260, -0.941464994696859070, -0.941481849057965390, -0.941498701065367040, -0.941515550719022040, -0.941532398018887990, +-0.941549242964923150, -0.941566085557085100, -0.941582925795331870, -0.941599763679621280, -0.941616599209911250, -0.941633432386159820, -0.941650263208324790, -0.941667091676364090, +-0.941683917790235640, -0.941700741549897360, -0.941717562955307290, -0.941734382006423340, -0.941751198703203340, -0.941768013045605420, -0.941784825033587400, -0.941801634667107420, +-0.941818441946123190, -0.941835246870593060, -0.941852049440474630, -0.941868849655726150, -0.941885647516305550, -0.941902443022170850, -0.941919236173280110, -0.941936026969591110, +-0.941952815411062240, -0.941969601497651190, -0.941986385229316210, -0.942003166606015130, -0.942019945627706300, -0.942036722294347540, -0.942053496605896990, -0.942070268562312570, +-0.942087038163552660, -0.942103805409575060, -0.942120570300338020, -0.942137332835799480, -0.942154093015917680, -0.942170850840650550, -0.942187606309956350, -0.942204359423793100, +-0.942221110182119070, -0.942237858584892170, -0.942254604632070670, -0.942271348323612590, -0.942288089659476190, -0.942304828639619510, -0.942321565264000790, -0.942338299532578190, +-0.942355031445309850, -0.942371761002153920, -0.942388488203068530, -0.942405213048011950, -0.942421935536942310, -0.942438655669817880, -0.942455373446596800, -0.942472088867237320, +-0.942488801931697600, -0.942505512639935870, -0.942522220991910300, -0.942538926987579240, -0.942555630626900840, -0.942572331909833360, -0.942589030836335050, -0.942605727406364170, +-0.942622421619879080, -0.942639113476837820, -0.942655802977198750, -0.942672490120920250, -0.942689174907960450, -0.942705857338277720, -0.942722537411830430, -0.942739215128576720, +-0.942755890488475080, -0.942772563491483530, -0.942789234137560770, -0.942805902426664730, -0.942822568358754110, -0.942839231933786940, -0.942855893151721800, -0.942872552012516850, +-0.942889208516130560, -0.942905862662521190, -0.942922514451647210, -0.942939163883466990, -0.942955810957938790, -0.942972455675021080, -0.942989098034672240, -0.943005738036850730, +-0.943022375681514700, -0.943039010968622860, -0.943055643898133460, -0.943072274470004970, -0.943088902684195760, -0.943105528540664320, -0.943122152039369000, -0.943138773180268400, +-0.943155391963320770, -0.943172008388484810, -0.943188622455718660, -0.943205234164981030, -0.943221843516230280, -0.943238450509425010, -0.943255055144523460, -0.943271657421484440, +-0.943288257340266220, -0.943304854900827270, -0.943321450103126290, -0.943338042947121650, -0.943354633432771930, -0.943371221560035610, -0.943387807328871290, -0.943404390739237320, +-0.943420971791092410, -0.943437550484395150, -0.943454126819103900, -0.943470700795177360, -0.943487272412574240, -0.943503841671252670, -0.943520408571171700, -0.943536973112289680, +-0.943553535294565200, -0.943570095117956860, -0.943586652582423250, -0.943603207687923160, -0.943619760434414870, -0.943636310821857280, -0.943652858850208890, -0.943669404519428380, +-0.943685947829474240, -0.943702488780305380, -0.943719027371880180, -0.943735563604157560, -0.943752097477095870, -0.943768628990654060, -0.943785158144790580, -0.943801684939464370, +-0.943818209374633790, -0.943834731450257760, -0.943851251166294760, -0.943867768522703820, -0.943884283519443310, -0.943900796156472270, -0.943917306433749050, -0.943933814351232690, +-0.943950319908881790, -0.943966823106655030, -0.943983323944511230, -0.943999822422409100, -0.944016318540307540, -0.944032812298165050, -0.944049303695940530, -0.944065792733592810, +-0.944082279411080580, -0.944098763728362660, -0.944115245685397840, -0.944131725282144840, -0.944148202518562680, -0.944164677394609850, -0.944181149910245380, -0.944197620065428070, +-0.944214087860116740, -0.944230553294270080, -0.944247016367847140, -0.944263477080806600, -0.944279935433107400, -0.944296391424708340, -0.944312845055568340, -0.944329296325646220, +-0.944345745234900780, -0.944362191783291060, -0.944378635970775760, -0.944395077797314020, -0.944411517262864430, -0.944427954367386250, -0.944444389110837950, -0.944460821493178890, +-0.944477251514367570, -0.944493679174363330, -0.944510104473124780, -0.944526527410610940, -0.944542947986780850, -0.944559366201593310, -0.944575782055007470, -0.944592195546982150, +-0.944608606677476260, -0.944625015446448950, -0.944641421853859020, -0.944657825899665520, -0.944674227583827570, -0.944690626906303900, -0.944707023867053850, -0.944723418466036140, +-0.944739810703209890, -0.944756200578534040, -0.944772588091967850, -0.944788973243470000, -0.944805356032999870, -0.944821736460516260, -0.944838114525978320, -0.944854490229345090, +-0.944870863570575700, -0.944887234549629080, -0.944903603166464490, -0.944919969421040730, -0.944936333313317170, -0.944952694843252840, -0.944969054010806550, -0.944985410815937790, +-0.945001765258605460, -0.945018117338768730, -0.945034467056386610, -0.945050814411418470, -0.945067159403823240, -0.945083502033560060, -0.945099842300588190, -0.945116180204866650, +-0.945132515746354710, -0.945148848925011500, -0.945165179740796170, -0.945181508193667860, -0.945197834283585720, -0.945214158010509120, -0.945230479374396970, -0.945246798375208750, +-0.945263115012903610, -0.945279429287440460, -0.945295741198778900, -0.945312050746877960, -0.945328357931696890, -0.945344662753194840, -0.945360965211331280, -0.945377265306065140, +-0.945393563037356000, -0.945409858405162780, -0.945426151409445080, -0.945442442050161920, -0.945458730327272680, -0.945475016240736600, -0.945491299790512940, -0.945507580976561070, +-0.945523859798840350, -0.945540136257309820, -0.945556410351929060, -0.945572682082657100, -0.945588951449453650, -0.945605218452277740, -0.945621483091088730, -0.945637745365846110, +-0.945654005276509110, -0.945670262823037120, -0.945686518005389280, -0.945702770823525380, -0.945719021277404370, -0.945735269366985930, -0.945751515092229320, -0.945767758453093910, +-0.945783999449539060, -0.945800238081524250, -0.945816474349008730, -0.945832708251952200, -0.945848939790313810, -0.945865168964053040, -0.945881395773129350, -0.945897620217502340, +-0.945913842297131160, -0.945930062011975270, -0.945946279361994380, -0.945962494347147740, -0.945978706967394830, -0.945994917222695240, -0.946011125113008330, -0.946027330638293470, +-0.946043533798510470, -0.946059734593618470, -0.946075933023577290, -0.946092129088346170, -0.946108322787884810, -0.946124514122152590, -0.946140703091109090, -0.946156889694713790, +-0.946173073932926380, -0.946189255805706120, -0.946205435313012930, -0.946221612454805960, -0.946237787231045120, -0.946253959641689790, -0.946270129686699430, -0.946286297366033870, +-0.946302462679652460, -0.946318625627515010, -0.946334786209580890, -0.946350944425809910, -0.946367100276161440, -0.946383253760595400, -0.946399404879071040, -0.946415553631548280, +-0.946431700017986600, -0.946447844038345700, -0.946463985692585160, -0.946480124980664690, -0.946496261902543770, -0.946512396458182410, -0.946528528647539890, -0.946544658470576120, +-0.946560785927250680, -0.946576911017523280, -0.946593033741353730, -0.946609154098701390, -0.946625272089526290, -0.946641387713788030, -0.946657500971446190, -0.946673611862460680, +-0.946689720386791110, -0.946705826544397280, -0.946721930335238880, -0.946738031759275510, -0.946754130816467310, -0.946770227506773530, -0.946786321830154430, -0.946802413786569260, +-0.946818503375978280, -0.946834590598340960, -0.946850675453617120, -0.946866757941766670, -0.946882838062749310, -0.946898915816524860, -0.946914991203053000, -0.946931064222293890, +-0.946947134874206900, -0.946963203158752150, -0.946979269075889360, -0.946995332625578560, -0.947011393807779210, -0.947027452622451580, -0.947043509069555140, -0.947059563149050040, +-0.947075614860895980, -0.947091664205052860, -0.947107711181480630, -0.947123755790139190, -0.947139798030988240, -0.947155837903987830, -0.947171875409097860, -0.947187910546278160, +-0.947203943315488630, -0.947219973716689420, -0.947236001749840130, -0.947252027414900890, -0.947268050711831620, -0.947284071640592140, -0.947300090201142480, -0.947316106393442660, +-0.947332120217452500, -0.947348131673132030, -0.947364140760441400, -0.947380147479340180, -0.947396151829788760, -0.947412153811746930, -0.947428153425174720, -0.947444150670032070, +-0.947460145546279110, -0.947476138053875760, -0.947492128192782060, -0.947508115962958030, -0.947524101364363710, -0.947540084396959250, -0.947556065060704440, -0.947572043355559450, +-0.947588019281484390, -0.947603992838439320, -0.947619964026384260, -0.947635932845279360, -0.947651899295084420, -0.947667863375759920, -0.947683825087265670, -0.947699784429561930, +-0.947715741402608720, -0.947731696006366090, -0.947747648240794270, -0.947763598105853310, -0.947779545601503350, -0.947795490727704530, -0.947811433484416990, -0.947827373871600880, +-0.947843311889216330, -0.947859247537223500, -0.947875180815582640, -0.947891111724253670, -0.947907040263197050, -0.947922966432372730, -0.947938890231741050, -0.947954811661262050, +-0.947970730720896100, -0.947986647410603340, -0.948002561730344030, -0.948018473680078190, -0.948034383259766190, -0.948050290469368170, -0.948066195308844620, -0.948082097778155440, +-0.948097997877261010, -0.948113895606121580, -0.948129790964697520, -0.948145683952948850, -0.948161574570836050, -0.948177462818319380, -0.948193348695358870, -0.948209232201915220, +-0.948225113337948230, -0.948240992103418610, -0.948256868498286500, -0.948272742522512260, -0.948288614176056030, -0.948304483458878410, -0.948320350370939420, -0.948336214912199770, +-0.948352077082619370, -0.948367936882158920, -0.948383794310778570, -0.948399649368438790, -0.948415502055099720, -0.948431352370722070, -0.948447200315265970, -0.948463045888691900, +-0.948478889090960230, -0.948494729922031320, -0.948510568381865650, -0.948526404470423360, -0.948542238187665250, -0.948558069533551480, -0.948573898508042520, -0.948589725111098850, +-0.948605549342680820, -0.948621371202748920, -0.948637190691263730, -0.948653007808185400, -0.948668822553474620, -0.948684634927091760, -0.948700444928997300, -0.948716252559151710, +-0.948732057817515570, -0.948747860704049260, -0.948763661218713250, -0.948779459361468120, -0.948795255132274360, -0.948811048531092440, -0.948826839557882940, -0.948842628212606340, +-0.948858414495223010, -0.948874198405693870, -0.948889979943979060, -0.948905759110039380, -0.948921535903835320, -0.948937310325327470, -0.948953082374476180, -0.948968852051242370, +-0.948984619355586200, -0.949000384287468690, -0.949016146846850090, -0.949031907033691220, -0.949047664847952550, -0.949063420289594780, -0.949079173358578280, -0.949094924054864060, +-0.949110672378412400, -0.949126418329184100, -0.949142161907139740, -0.949157903112240020, -0.949173641944445530, -0.949189378403716870, -0.949205112490014820, -0.949220844203299880, +-0.949236573543532970, -0.949252300510674550, -0.949268025104685440, -0.949283747325526230, -0.949299467173157720, -0.949315184647540390, -0.949330899748635270, -0.949346612476402730, +-0.949362322830803800, -0.949378030811798950, -0.949393736419349210, -0.949409439653414950, -0.949425140513957210, -0.949440839000936450, -0.949456535114313720, -0.949472228854049690, +-0.949487920220104980, -0.949503609212440590, -0.949519295831017130, -0.949534980075795400, -0.949550661946736210, -0.949566341443800370, -0.949582018566948680, -0.949597693316141970, +-0.949613365691341030, -0.949629035692506670, -0.949644703319599710, -0.949660368572580960, -0.949676031451411330, -0.949691691956051630, -0.949707350086462680, -0.949723005842605380, +-0.949738659224440450, -0.949754310231929020, -0.949769958865031790, -0.949785605123709690, -0.949801249007923510, -0.949816890517634180, -0.949832529652802740, -0.949848166413389870, +-0.949863800799356620, -0.949879432810663780, -0.949895062447272510, -0.949910689709143500, -0.949926314596237780, -0.949941937108516270, -0.949957557245940000, -0.949973175008469670, +-0.949988790396066540, -0.950004403408691410, -0.950020014046305320, -0.950035622308869070, -0.950051228196343800, -0.950066831708690440, -0.950082432845870130, -0.950098031607843670, +-0.950113627994572110, -0.950129222006016460, -0.950144813642137760, -0.950160402902897050, -0.950175989788255350, -0.950191574298173690, -0.950207156432613000, -0.950222736191534520, +-0.950238313574899180, -0.950253888582668020, -0.950269461214802160, -0.950285031471262640, -0.950300599352010500, -0.950316164857006980, -0.950331727986212900, -0.950347288739589620, +-0.950362847117098060, -0.950378403118699480, -0.950393956744354780, -0.950409507994025240, -0.950425056867671870, -0.950440603365255930, -0.950456147486738460, -0.950471689232080590, +-0.950487228601243570, -0.950502765594188340, -0.950518300210876350, -0.950533832451268430, -0.950549362315326160, -0.950564889803010350, -0.950580414914282360, -0.950595937649103220, +-0.950611458007434410, -0.950626975989236840, -0.950642491594471890, -0.950658004823100590, -0.950673515675084400, -0.950689024150384370, -0.950704530248961840, -0.950720033970777980, +-0.950735535315794020, -0.950751034283971230, -0.950766530875270740, -0.950782025089654040, -0.950797516927082250, -0.950813006387516650, -0.950828493470918580, -0.950843978177249300, +-0.950859460506469970, -0.950874940458542040, -0.950890418033426780, -0.950905893231085430, -0.950921366051479370, -0.950936836494569950, -0.950952304560318320, -0.950967770248686060, +-0.950983233559634320, -0.950998694493124460, -0.951014153049117850, -0.951029609227575960, -0.951045063028460040, -0.951060514451731340, -0.951075963497351460, -0.951091410165281650, +-0.951106854455483370, -0.951122296367917790, -0.951137735902546690, -0.951153173059331000, -0.951168607838232540, -0.951184040239212550, -0.951199470262232500, -0.951214897907253660, +-0.951230323174237610, -0.951245746063145830, -0.951261166573939550, -0.951276584706580500, -0.951292000461029910, -0.951307413837249260, -0.951322824835200250, -0.951338233454844030, +-0.951353639696142280, -0.951369043559056490, -0.951384445043547910, -0.951399844149578340, -0.951415240877109160, -0.951430635226101940, -0.951446027196518050, -0.951461416788319080, +-0.951476804001466610, -0.951492188835922130, -0.951507571291647090, -0.951522951368603210, -0.951538329066751950, -0.951553704386054910, -0.951569077326473440, -0.951584447887969480, +-0.951599816070504260, -0.951615181874039600, -0.951630545298536860, -0.951645906343957850, -0.951661265010264160, -0.951676621297417150, -0.951691975205378630, -0.951707326734110180, +-0.951722675883573510, -0.951738022653729980, -0.951753367044541500, -0.951768709055969550, -0.951784048687975950, -0.951799385940522050, -0.951814720813569770, -0.951830053307080700, +-0.951845383421016540, -0.951860711155338770, -0.951876036510009400, -0.951891359484989820, -0.951906680080241930, -0.951921998295727210, -0.951937314131407590, -0.951952627587244750, +-0.951967938663200290, -0.951983247359235900, -0.951998553675313500, -0.952013857611394680, -0.952029159167441130, -0.952044458343414780, -0.952059755139277210, -0.952075049554990340, +-0.952090341590515750, -0.952105631245815490, -0.952120918520850900, -0.952136203415584250, -0.952151485929976890, -0.952166766063990980, -0.952182043817588090, -0.952197319190730030, +-0.952212592183378730, -0.952227862795495980, -0.952243131027043500, -0.952258396877983300, -0.952273660348277100, -0.952288921437886680, -0.952304180146773980, -0.952319436474900800, +-0.952334690422229070, -0.952349941988720470, -0.952365191174337270, -0.952380437979040930, -0.952395682402793490, -0.952410924445556860, -0.952426164107292970, -0.952441401387963630, +-0.952456636287530860, -0.952471868805956360, -0.952487098943202270, -0.952502326699230410, -0.952517552074002790, -0.952532775067481240, -0.952547995679627780, -0.952563213910404330, +-0.952578429759772800, -0.952593643227695350, -0.952608854314133560, -0.952624063019049780, -0.952639269342405840, -0.952654473284163750, -0.952669674844285330, -0.952684874022732830, +-0.952700070819468170, -0.952715265234453270, -0.952730457267650270, -0.952745646919021080, -0.952760834188527750, -0.952776019076132410, -0.952791201581796980, -0.952806381705483480, +-0.952821559447154080, -0.952836734806770890, -0.952851907784295740, -0.952867078379690870, -0.952882246592918310, -0.952897412423940100, -0.952912575872718380, -0.952927736939215180, +-0.952942895623392740, -0.952958051925212880, -0.952973205844638070, -0.952988357381630120, -0.953003506536151400, -0.953018653308163820, -0.953033797697629640, -0.953048939704510990, +-0.953064079328769910, -0.953079216570368650, -0.953094351429269460, -0.953109483905434260, -0.953124613998825420, -0.953139741709405080, -0.953154867037135370, -0.953169989981978330, +-0.953185110543896540, -0.953200228722851930, -0.953215344518806630, -0.953230457931723120, -0.953245568961563320, -0.953260677608289700, -0.953275783871864290, -0.953290887752249460, +-0.953305989249407460, -0.953321088363300430, -0.953336185093890730, -0.953351279441140620, -0.953366371405012130, -0.953381460985467830, -0.953396548182469880, -0.953411632995980530, +-0.953426715425962130, -0.953441795472376950, -0.953456873135187230, -0.953471948414355340, -0.953487021309843640, -0.953502091821614380, -0.953517159949629820, -0.953532225693852430, +-0.953547289054244460, -0.953562350030768170, -0.953577408623386140, -0.953592464832060500, -0.953607518656753750, -0.953622570097428120, -0.953637619154046210, -0.953652665826570160, +-0.953667710114962430, -0.953682752019185510, -0.953697791539201640, -0.953712828674973310, -0.953727863426462870, -0.953742895793632810, -0.953757925776445580, -0.953772953374863340, +-0.953787978588848890, -0.953803001418364490, -0.953818021863372500, -0.953833039923835610, -0.953848055599715970, -0.953863068890976270, -0.953878079797578770, -0.953893088319486160, +-0.953908094456660800, -0.953923098209065290, -0.953938099576661980, -0.953953098559413460, -0.953968095157282090, -0.953983089370230570, -0.953998081198221270, -0.954013070641216880, +-0.954028057699179640, -0.954043042372072380, -0.954058024659857450, -0.954073004562497550, -0.954087982079955150, -0.954102957212192630, -0.954117929959172880, -0.954132900320858180, +-0.954147868297211430, -0.954162833888194780, -0.954177797093771150, -0.954192757913903010, -0.954207716348553060, -0.954222672397683660, -0.954237626061257730, -0.954252577339237630, +-0.954267526231586170, -0.954282472738265720, -0.954297416859239300, -0.954312358594469170, -0.954327297943918350, -0.954342234907549100, -0.954357169485324340, -0.954372101677206650, +-0.954387031483158730, -0.954401958903143170, -0.954416883937122760, -0.954431806585060110, -0.954446726846918000, -0.954461644722659040, -0.954476560212245920, -0.954491473315641440, +-0.954506384032808300, -0.954521292363709200, -0.954536198308306830, -0.954551101866564000, -0.954566003038443410, -0.954580901823907760, -0.954595798222919960, -0.954610692235442590, +-0.954625583861438480, -0.954640473100870410, -0.954655359953701210, -0.954670244419893570, -0.954685126499410290, -0.954700006192214290, -0.954714883498268270, -0.954729758417534930, +-0.954744630949977300, -0.954759501095558070, -0.954774368854240050, -0.954789234225986160, -0.954804097210759100, -0.954818957808521880, -0.954833816019237220, -0.954848671842868040, +-0.954863525279377230, -0.954878376328727520, -0.954893224990881920, -0.954908071265803240, -0.954922915153454400, -0.954937756653798210, -0.954952595766797700, -0.954967432492415670, +-0.954982266830615050, -0.954997098781358860, -0.955011928344609800, -0.955026755520331010, -0.955041580308485180, -0.955056402709035580, -0.955071222721944890, -0.955086040347176150, +-0.955100855584692270, -0.955115668434456390, -0.955130478896431100, -0.955145286970579880, -0.955160092656865300, -0.955174895955250510, -0.955189696865698430, -0.955204495388172200, +-0.955219291522634630, -0.955234085269048960, -0.955248876627377900, -0.955263665597584800, -0.955278452179632480, -0.955293236373484070, -0.955308018179102600, -0.955322797596451000, +-0.955337574625492400, -0.955352349266189950, -0.955367121518506560, -0.955381891382405370, -0.955396658857849520, -0.955411423944801940, -0.955426186643225870, -0.955440946953084240, +-0.955455704874340280, -0.955470460406957050, -0.955485213550897770, -0.955499964306125270, -0.955514712672603020, -0.955529458650293930, -0.955544202239161260, -0.955558943439167920, +-0.955573682250277390, -0.955588418672452590, -0.955603152705656770, -0.955617884349853060, -0.955632613605004620, -0.955647340471074690, -0.955662064948026300, -0.955676787035822930, +-0.955691506734427380, -0.955706224043803230, -0.955720938963913410, -0.955735651494721280, -0.955750361636189980, -0.955765069388282870, -0.955779774750963100, -0.955794477724193790, +-0.955809178307938320, -0.955823876502159940, -0.955838572306821900, -0.955853265721887340, -0.955867956747319610, -0.955882645383082100, -0.955897331629137930, -0.955912015485450350, +-0.955926696951982850, -0.955941376028698550, -0.955956052715560830, -0.955970727012532940, -0.955985398919578230, -0.956000068436660080, -0.956014735563741720, -0.956029400300786540, +-0.956044062647757880, -0.956058722604618990, -0.956073380171333360, -0.956088035347864240, -0.956102688134175090, -0.956117338530229070, -0.956131986535989850, -0.956146632151420590, +-0.956161275376484880, -0.956175916211145840, -0.956190554655367060, -0.956205190709111920, -0.956219824372343760, -0.956234455645026070, -0.956249084527122210, -0.956263711018595640, +-0.956278335119409850, -0.956292956829528200, -0.956307576148914150, -0.956322193077531190, -0.956336807615342680, -0.956351419762312190, -0.956366029518403100, -0.956380636883578990, +-0.956395241857803220, -0.956409844441039490, -0.956424444633250940, -0.956439042434401480, -0.956453637844454250, -0.956468230863373070, -0.956482821491121290, -0.956497409727662400, +-0.956511995572960070, -0.956526579026977570, -0.956541160089678820, -0.956555738761027060, -0.956570315040986000, -0.956584888929519090, -0.956599460426590050, -0.956614029532162350, +-0.956628596246199560, -0.956643160568665160, -0.956657722499523080, -0.956672282038736440, -0.956686839186269290, -0.956701393942084980, -0.956715946306147200, -0.956730496278419550, +-0.956745043858865610, -0.956759589047449180, -0.956774131844133620, -0.956788672248882870, -0.956803210261660380, -0.956817745882429850, -0.956832279111154980, -0.956846809947799470, +-0.956861338392326790, -0.956875864444700850, -0.956890388104885250, -0.956904909372843780, -0.956919428248539820, -0.956933944731937490, -0.956948458823000170, -0.956962970521691770, +-0.956977479827975870, -0.956991986741816400, -0.957006491263176830, -0.957020993392021070, -0.957035493128312820, -0.957049990472015890, -0.957064485423093970, -0.957078977981510870, +-0.957093468147230290, -0.957107955920216020, -0.957122441300431890, -0.957136924287841580, -0.957151404882409020, -0.957165883084097890, -0.957180358892872230, -0.957194832308695510, +-0.957209303331531760, -0.957223771961344670, -0.957238238198098280, -0.957252702041756160, -0.957267163492282470, -0.957281622549640670, -0.957296079213795000, -0.957310533484708960, +-0.957324985362346670, -0.957339434846671940, -0.957353881937648590, -0.957368326635240630, -0.957382768939411650, -0.957397208850125910, -0.957411646367347100, -0.957426081491039250, +-0.957440514221166050, -0.957454944557691650, -0.957469372500579840, -0.957483798049794670, -0.957498221205300040, -0.957512641967059760, -0.957527060335037870, -0.957541476309198390, +-0.957555889889505240, -0.957570301075922340, -0.957584709868413600, -0.957599116266943160, -0.957613520271474950, -0.957627921881972880, -0.957642321098401080, -0.957656717920723490, +-0.957671112348904010, -0.957685504382906780, -0.957699894022695840, -0.957714281268235100, -0.957728666119488700, -0.957743048576420560, -0.957757428638994930, -0.957771806307175620, +-0.957786181580926880, -0.957800554460212620, -0.957814924944996980, -0.957829293035244110, -0.957843658730917920, -0.957858022031982560, -0.957872382938402270, -0.957886741450140860, +-0.957901097567162680, -0.957915451289431790, -0.957929802616912300, -0.957944151549568250, -0.957958498087363770, -0.957972842230263130, -0.957987183978230350, -0.958001523331229570, +-0.958015860289225030, -0.958030194852180880, -0.958044527020061150, -0.958058856792830090, -0.958073184170451950, -0.958087509152890870, -0.958101831740110990, -0.958116151932076550, +-0.958130469728751710, -0.958144785130100710, -0.958159098136087680, -0.958173408746677000, -0.958187716961832690, -0.958202022781519220, -0.958216326205700630, -0.958230627234341270, +-0.958244925867405280, -0.958259222104857030, -0.958273515946660660, -0.958287807392780520, -0.958302096443180870, -0.958316383097825960, -0.958330667356680150, -0.958344949219707590, +-0.958359228686872730, -0.958373505758139730, -0.958387780433473060, -0.958402052712836850, -0.958416322596195580, -0.958430590083513500, -0.958444855174754970, -0.958459117869884140, +-0.958473378168865690, -0.958487636071663650, -0.958501891578242730, -0.958516144688566940, -0.958530395402600770, -0.958544643720308680, -0.958558889641654920, -0.958573133166603970, +-0.958587374295120200, -0.958601613027167950, -0.958615849362711710, -0.958630083301715840, -0.958644314844144700, -0.958658543989962860, -0.958672770739134590, -0.958686995091624470, +-0.958701217047396750, -0.958715436606416120, -0.958729653768646830, -0.958743868534053360, -0.958758080902600280, -0.958772290874251980, -0.958786498448973010, -0.958800703626727760, +-0.958814906407480790, -0.958829106791196480, -0.958843304777839410, -0.958857500367374050, -0.958871693559765090, -0.958885884354976680, -0.958900072752973730, -0.958914258753720490, +-0.958928442357181670, -0.958942623563321720, -0.958956802372105230, -0.958970978783496690, -0.958985152797460770, -0.958999324413961960, -0.959013493632964840, -0.959027660454433880, +-0.959041824878333890, -0.959055986904629340, -0.959070146533284820, -0.959084303764264900, -0.959098458597534180, -0.959112611033057340, -0.959126761070798970, -0.959140908710723770, +-0.959155053952796210, -0.959169196796981090, -0.959183337243242900, -0.959197475291546420, -0.959211610941856250, -0.959225744194137090, -0.959239875048353400, -0.959254003504470210, +-0.959268129562451890, -0.959282253222263350, -0.959296374483869060, -0.959310493347233950, -0.959324609812322590, -0.959338723879099690, -0.959352835547529930, -0.959366944817578120, +-0.959381051689208950, -0.959395156162387130, -0.959409258237077460, -0.959423357913244620, -0.959437455190853440, -0.959451550069868600, -0.959465642550254790, -0.959479732631976940, +-0.959493820314999860, -0.959507905599288000, -0.959521988484806520, -0.959536068971520110, -0.959550147059393450, -0.959564222748391480, -0.959578296038478880, -0.959592366929620580, +-0.959606435421781370, -0.959620501514926060, -0.959634565209019570, -0.959648626504026600, -0.959662685399912060, -0.959676741896640760, -0.959690795994177610, -0.959704847692487650, +-0.959718896991535340, -0.959732943891285940, -0.959746988391704140, -0.959761030492754850, -0.959775070194403000, -0.959789107496613390, -0.959803142399351160, -0.959817174902581010, +-0.959831205006267840, -0.959845232710376810, -0.959859258014872600, -0.959873280919720240, -0.959887301424884650, -0.959901319530330980, -0.959915335236023790, -0.959929348541928460, +-0.959943359448009680, -0.959957367954232480, -0.959971374060561880, -0.959985377766962800, -0.959999379073400270, -0.960013377979839320, -0.960027374486244980, -0.960041368592582160, +-0.960055360298816000, -0.960069349604911300, -0.960083336510833330, -0.960097321016546880, -0.960111303122017310, -0.960125282827209330, -0.960139260132088280, -0.960153235036618980, +-0.960167207540766680, -0.960181177644496180, -0.960195145347772950, -0.960209110650561800, -0.960223073552827770, -0.960237034054536200, -0.960250992155651910, -0.960264947856140250, +-0.960278901155966150, -0.960292852055094850, -0.960306800553491380, -0.960320746651120990, -0.960334690347948610, -0.960348631643939580, -0.960362570539058940, -0.960376507033271930, +-0.960390441126543590, -0.960404372818839170, -0.960418302110123800, -0.960432229000362740, -0.960446153489521000, -0.960460075577563970, -0.960473995264456650, -0.960487912550164410, +-0.960501827434652510, -0.960515739917885860, -0.960529649999829930, -0.960543557680449860, -0.960557462959710890, -0.960571365837578290, -0.960585266314017310, -0.960599164388993070, +-0.960613060062470940, -0.960626953334416170, -0.960640844204794120, -0.960654732673569820, -0.960668618740708750, -0.960682502406176140, -0.960696383669937260, -0.960710262531957350, +-0.960724138992201880, -0.960738013050636110, -0.960751884707225170, -0.960765753961934640, -0.960779620814729670, -0.960793485265575730, -0.960807347314437950, -0.960821206961281820, +-0.960835064206072680, -0.960848919048776010, -0.960862771489356840, -0.960876621527780860, -0.960890469164013330, -0.960904314398019600, -0.960918157229765040, -0.960931997659215220, +-0.960945835686335290, -0.960959671311090840, -0.960973504533447100, -0.960987335353369660, -0.961001163770823900, -0.961014989785775260, -0.961028813398189130, -0.961042634608030970, +-0.961056453415266130, -0.961070269819860210, -0.961084083821778680, -0.961097895420986890, -0.961111704617450440, -0.961125511411134560, -0.961139315802005070, -0.961153117790027210, +-0.961166917375166570, -0.961180714557388630, -0.961194509336658950, -0.961208301712942910, -0.961222091686206200, -0.961235879256414180, -0.961249664423532550, -0.961263447187526650, +-0.961277227548362200, -0.961291005506004660, -0.961304781060419720, -0.961318554211572640, -0.961332324959429330, -0.961346093303955150, -0.961359859245115690, -0.961373622782876640, +-0.961387383917203580, -0.961401142648061980, -0.961414898975417540, -0.961428652899235850, -0.961442404419482480, -0.961456153536123240, -0.961469900249123490, -0.961483644558449040, +-0.961497386464065460, -0.961511125965938460, -0.961524863064033620, -0.961538597758316630, -0.961552330048753070, -0.961566059935308750, -0.961579787417949250, -0.961593512496640380, +-0.961607235171347610, -0.961620955442036850, -0.961634673308673690, -0.961648388771223720, -0.961662101829652950, -0.961675812483926750, -0.961689520734011150, -0.961703226579871730, +-0.961716930021474180, -0.961730631058784420, -0.961744329691768040, -0.961758025920390720, -0.961771719744618500, -0.961785411164416850, -0.961799100179751790, -0.961812786790588900, +-0.961826470996894000, -0.961840152798633000, -0.961853832195771590, -0.961867509188275570, -0.961881183776110870, -0.961894855959243290, -0.961908525737638300, -0.961922193111262260, +-0.961935858080080530, -0.961949520644059250, -0.961963180803164120, -0.961976838557361160, -0.961990493906615950, -0.962004146850894640, -0.962017797390162910, -0.962031445524386690, +-0.962045091253531770, -0.962058734577564300, -0.962072375496449860, -0.962086014010154480, -0.962099650118644070, -0.962113283821884660, -0.962126915119841940, -0.962140544012481950, +-0.962154170499770590, -0.962167794581673790, -0.962181416258157560, -0.962195035529187730, -0.962208652394730300, -0.962222266854751320, -0.962235878909216580, -0.962249488558092110, +-0.962263095801344060, -0.962276700638938220, -0.962290303070840620, -0.962303903097017190, -0.962317500717434160, -0.962331095932057230, -0.962344688740852660, -0.962358279143786350, +-0.962371867140824340, -0.962385452731932540, -0.962399035917077320, -0.962412616696224350, -0.962426195069339910, -0.962439771036390000, -0.962453344597340550, -0.962466915752157930, +-0.962480484500807810, -0.962494050843256680, -0.962507614779470220, -0.962521176309414920, -0.962534735433056450, -0.962548292150361310, -0.962561846461295390, -0.962575398365824950, +-0.962588947863915910, -0.962602494955534520, -0.962616039640646900, -0.962629581919219210, -0.962643121791217470, -0.962656659256608040, -0.962670194315356830, -0.962683726967430320, +-0.962697257212794310, -0.962710785051415270, -0.962724310483259240, -0.962737833508292450, -0.962751354126481050, -0.962764872337791290, -0.962778388142189410, -0.962791901539641450, +-0.962805412530113760, -0.962818921113572480, -0.962832427289983970, -0.962845931059314370, -0.962859432421530050, -0.962872931376597020, -0.962886427924481760, -0.962899922065150290, +-0.962913413798569210, -0.962926903124704410, -0.962940390043522500, -0.962953874554989490, -0.962967356659071850, -0.962980836355735840, -0.962994313644947700, -0.963007788526673790, +-0.963021261000880370, -0.963034731067533900, -0.963048198726600520, -0.963061663978046710, -0.963075126821838600, -0.963088587257942890, -0.963102045286325480, -0.963115500906953190, +-0.963128954119791940, -0.963142404924808400, -0.963155853321968850, -0.963169299311239730, -0.963182742892587210, -0.963196184065977960, -0.963209622831378120, -0.963223059188754390, +-0.963236493138072910, -0.963249924679300260, -0.963263353812402800, -0.963276780537346890, -0.963290204854099000, -0.963303626762625600, -0.963317046262893270, -0.963330463354868160, +-0.963343878038517070, -0.963357290313806120, -0.963370700180702030, -0.963384107639171150, -0.963397512689180060, -0.963410915330695120, -0.963424315563682910, -0.963437713388109910, +-0.963451108803942690, -0.963464501811147620, -0.963477892409691390, -0.963491280599540370, -0.963504666380661120, -0.963518049753020240, -0.963531430716584200, -0.963544809271319690, +-0.963558185417193070, -0.963571559154170920, -0.963584930482219940, -0.963598299401306700, -0.963611665911397570, -0.963625030012459470, -0.963638391704458640, -0.963651750987361890, +-0.963665107861135680, -0.963678462325746830, -0.963691814381161690, -0.963705164027347180, -0.963718511264269660, -0.963731856091895820, -0.963745198510192360, -0.963758538519125960, +-0.963771876118663220, -0.963785211308770820, -0.963798544089415340, -0.963811874460563490, -0.963825202422181950, -0.963838527974237410, -0.963851851116696580, -0.963865171849526030, +-0.963878490172692670, -0.963891806086162980, -0.963905119589903880, -0.963918430683881830, -0.963931739368063870, -0.963945045642416450, -0.963958349506906510, -0.963971650961500610, +-0.963984950006165690, -0.963998246640868190, -0.964011540865575280, -0.964024832680253410, -0.964038122084869500, -0.964051409079390240, -0.964064693663782560, -0.964077975838013130, +-0.964091255602048670, -0.964104532955856190, -0.964117807899402270, -0.964131080432653830, -0.964144350555577790, -0.964157618268140840, -0.964170883570309780, -0.964184146462051530, +-0.964197406943332890, -0.964210665014120780, -0.964223920674382010, -0.964237173924083480, -0.964250424763191890, -0.964263673191674390, -0.964276919209497540, -0.964290162816628600, +-0.964303404013034050, -0.964316642798681120, -0.964329879173536630, -0.964343113137567260, -0.964356344690740270, -0.964369573833022240, -0.964382800564380420, -0.964396024884781600, +-0.964409246794192710, -0.964422466292580660, -0.964435683379912480, -0.964448898056155080, -0.964462110321275380, -0.964475320175240510, -0.964488527618017290, -0.964501732649572730, +-0.964514935269873860, -0.964528135478887600, -0.964541333276581090, -0.964554528662921130, -0.964567721637874960, -0.964580912201409510, -0.964594100353491690, -0.964607286094088750, +-0.964620469423167370, -0.964633650340695040, -0.964646828846638440, -0.964660004940964820, -0.964673178623641210, -0.964686349894634640, -0.964699518753912130, -0.964712685201440930, +-0.964725849237187960, -0.964739010861120350, -0.964752170073205240, -0.964765326873409770, -0.964778481261700850, -0.964791633238045840, -0.964804782802411660, -0.964817929954765560, +-0.964831074695074560, -0.964844217023306030, -0.964857356939426870, -0.964870494443404340, -0.964883629535205570, -0.964896762214797700, -0.964909892482147980, -0.964923020337223440, +-0.964936145779991430, -0.964949268810419090, -0.964962389428473570, -0.964975507634121990, -0.964988623427331600, -0.965001736808069780, -0.965014847776303530, -0.965027956332000230, +-0.965041062475127000, -0.965054166205651100, -0.965067267523539880, -0.965080366428760380, -0.965093462921279950, -0.965106557001065960, -0.965119648668085530, -0.965132737922306030, +-0.965145824763694590, -0.965158909192218690, -0.965171991207845470, -0.965185070810542280, -0.965198148000276370, -0.965211222777015100, -0.965224295140725830, -0.965237365091375810, +-0.965250432628932290, -0.965263497753362840, -0.965276560464634500, -0.965289620762714850, -0.965302678647571020, -0.965315734119170710, -0.965328787177480940, -0.965341837822469180, +-0.965354886054102800, -0.965367931872349370, -0.965380975277176030, -0.965394016268550150, -0.965407054846439290, -0.965420091010810830, -0.965433124761632120, -0.965446156098870630, +-0.965459185022493730, -0.965472211532468760, -0.965485235628763430, -0.965498257311344980, -0.965511276580180770, -0.965524293435238490, -0.965537307876485400, -0.965550319903889060, +-0.965563329517416970, -0.965576336717036470, -0.965589341502715250, -0.965602343874420570, -0.965615343832120110, -0.965628341375781240, -0.965641336505371540, -0.965654329220858480, +-0.965667319522209630, -0.965680307409392480, -0.965693292882374490, -0.965706275941123350, -0.965719256585606420, -0.965732234815791510, -0.965745210631645870, -0.965758184033137290, +-0.965771155020233140, -0.965784123592901220, -0.965797089751108890, -0.965810053494823960, -0.965823014824013780, -0.965835973738646160, -0.965848930238688560, -0.965861884324108690, +-0.965874835994874000, -0.965887785250952310, -0.965900732092311090, -0.965913676518918020, -0.965926618530740910, -0.965939558127747120, -0.965952495309904460, -0.965965430077180610, +-0.965978362429543160, -0.965991292366959800, -0.966004219889398220, -0.966017144996826000, -0.966030067689211070, -0.966042987966520770, -0.966055905828723250, -0.966068821275785750, +-0.966081734307676300, -0.966094644924362480, -0.966107553125812090, -0.966120458911992830, -0.966133362282872390, -0.966146263238418460, -0.966159161778599060, -0.966172057903381680, +-0.966184951612734100, -0.966197842906624140, -0.966210731785019590, -0.966223618247888270, -0.966236502295197860, -0.966249383926916170, -0.966262263143011000, -0.966275139943450270, +-0.966288014328201660, -0.966300886297232990, -0.966313755850512050, -0.966326622988006870, -0.966339487709685030, -0.966352350015514450, -0.966365209905463040, -0.966378067379498610, +-0.966390922437588950, -0.966403775079702100, -0.966416625305805630, -0.966429473115867800, -0.966442318509856180, -0.966455161487738800, -0.966468002049483580, -0.966480840195058200, +-0.966493675924430810, -0.966506509237569200, -0.966519340134441410, -0.966532168615015120, -0.966544994679258470, -0.966557818327139380, -0.966570639558625770, -0.966583458373685420, +-0.966596274772286490, -0.966609088754396880, -0.966621900319984630, -0.966634709469017530, -0.966647516201463720, -0.966660320517291010, -0.966673122416467630, -0.966685921898961410, +-0.966698718964740360, -0.966711513613772500, -0.966724305846025870, -0.966737095661468480, -0.966749883060068370, -0.966762668041793560, -0.966775450606611960, -0.966788230754491940, +-0.966801008485401180, -0.966813783799307940, -0.966826556696180230, -0.966839327175986200, -0.966852095238693750, -0.966864860884271150, -0.966877624112686410, -0.966890384923907550, +-0.966903143317902720, -0.966915899294640060, -0.966928652854087690, -0.966941403996213640, -0.966954152720986060, -0.966966899028373180, -0.966979642918343040, -0.966992384390863660, +-0.967005123445903500, -0.967017860083430380, -0.967030594303412650, -0.967043326105818450, -0.967056055490616020, -0.967068782457773280, -0.967081507007258700, -0.967094229139040310, +-0.967106948853086460, -0.967119666149365060, -0.967132381027844600, -0.967145093488493200, -0.967157803531279110, -0.967170511156170360, -0.967183216363135420, -0.967195919152142540, +-0.967208619523159620, -0.967221317476155360, -0.967234013011097680, -0.967246706127955050, -0.967259396826695590, -0.967272085107287790, -0.967284770969699560, -0.967297454413899580, +-0.967310135439855890, -0.967322814047536840, -0.967335490236910790, -0.967348164007945990, -0.967360835360610790, -0.967373504294873570, -0.967386170810702440, -0.967398834908066000, +-0.967411496586932370, -0.967424155847270150, -0.967436812689047470, -0.967449467112232670, -0.967462119116794360, -0.967474768702700660, -0.967487415869920040, -0.967500060618420870, +-0.967512702948171600, -0.967525342859140600, -0.967537980351296230, -0.967550615424606740, -0.967563248079040930, -0.967575878314566930, -0.967588506131153210, -0.967601131528768140, +-0.967613754507380410, -0.967626375066958140, -0.967638993207470040, -0.967651608928884470, -0.967664222231169880, -0.967676833114294640, -0.967689441578227340, -0.967702047622936550, +-0.967714651248390510, -0.967727252454557930, -0.967739851241407160, -0.967752447608906770, -0.967765041557025250, -0.967777633085731170, -0.967790222194993000, -0.967802808884779320, +-0.967815393155058490, -0.967827975005799310, -0.967840554436970040, -0.967853131448539570, -0.967865706040476170, -0.967878278212748520, -0.967890847965325100, -0.967903415298174700, +-0.967915980211265680, -0.967928542704566740, -0.967941102778046350, -0.967953660431673300, -0.967966215665416070, -0.967978768479243360, -0.967991318873123730, -0.968003866847025660, +-0.968016412400918070, -0.968028955534769310, -0.968041496248548290, -0.968054034542223500, -0.968066570415763610, -0.968079103869137310, -0.968091634902313200, -0.968104163515260070, +-0.968116689707946510, -0.968129213480341200, -0.968141734832412840, -0.968154253764130220, -0.968166770275461940, -0.968179284366376680, -0.968191796036843240, -0.968204305286830320, +-0.968216812116306610, -0.968229316525241020, -0.968241818513601920, -0.968254318081358420, -0.968266815228479020, -0.968279309954932720, -0.968291802260688010, -0.968304292145713900, +-0.968316779609978970, -0.968329264653452150, -0.968341747276102120, -0.968354227477897790, -0.968366705258807860, -0.968379180618801130, -0.968391653557846510, -0.968404124075912700, +-0.968416592172968600, -0.968429057848983030, -0.968441521103924790, -0.968453981937762780, -0.968466440350465810, -0.968478896342002790, -0.968491349912342430, -0.968503801061453730, +-0.968516249789305620, -0.968528696095866670, -0.968541139981106140, -0.968553581444992710, -0.968566020487495400, -0.968578457108583040, -0.968590891308224510, -0.968603323086388630, +-0.968615752443044540, -0.968628179378161150, -0.968640603891707250, -0.968653025983651770, -0.968665445653963840, -0.968677862902612150, -0.968690277729565950, -0.968702690134793930, +-0.968715100118265340, -0.968727507679948860, -0.968739912819813640, -0.968752315537828700, -0.968764715833962950, -0.968777113708185420, -0.968789509160465020, -0.968801902190771000, +-0.968814292799072050, -0.968826680985337530, -0.968839066749536130, -0.968851450091637200, -0.968863831011609560, -0.968876209509422440, -0.968888585585044760, -0.968900959238445660, +-0.968913330469594050, -0.968925699278459170, -0.968938065665010060, -0.968950429629215740, -0.968962791171045450, -0.968975150290468100, -0.968987506987452840, -0.968999861261968910, +-0.969012213113985220, -0.969024562543471020, -0.969036909550395560, -0.969049254134727640, -0.969061596296436730, -0.969073936035491750, -0.969086273351861930, -0.969098608245516410, +-0.969110940716424450, -0.969123270764554960, -0.969135598389877510, -0.969147923592360900, -0.969160246371974620, -0.969172566728687570, -0.969184884662469330, -0.969197200173288700, +-0.969209513261115040, -0.969221823925917710, -0.969234132167665740, -0.969246437986328590, -0.969258741381875180, -0.969271042354274970, -0.969283340903497100, -0.969295637029511050, +-0.969307930732285720, -0.969320222011790690, -0.969332510867994990, -0.969344797300868090, -0.969357081310379230, -0.969369362896497560, -0.969381642059192530, -0.969393918798433510, +-0.969406193114189520, -0.969418465006430140, -0.969430734475124510, -0.969443001520242210, -0.969455266141752260, -0.969467528339624240, -0.969479788113827400, -0.969492045464330990, +-0.969504300391104580, -0.969516552894117310, -0.969528802973338650, -0.969541050628738080, -0.969553295860284830, -0.969565538667948370, -0.969577779051698060, -0.969590017011503270, +-0.969602252547333450, -0.969614485659157980, -0.969626716346946420, -0.969638944610667910, -0.969651170450292140, -0.969663393865788370, -0.969675614857126170, -0.969687833424274890, +-0.969700049567204130, -0.969712263285883220, -0.969724474580281550, -0.969736683450368790, -0.969748889896114190, -0.969761093917487550, -0.969773295514458010, -0.969785494686995380, +-0.969797691435068890, -0.969809885758648240, -0.969822077657702790, -0.969834267132202220, -0.969846454182116010, -0.969858638807413630, -0.969870821008064650, -0.969883000784038660, +-0.969895178135305120, -0.969907353061833620, -0.969919525563593730, -0.969931695640555150, -0.969943863292687110, -0.969956028519959660, -0.969968191322342020, -0.969980351699803900, +-0.969992509652314870, -0.970004665179844630, -0.970016818282362750, -0.970028968959838700, -0.970041117212242290, -0.970053263039543090, -0.970065406441710800, -0.970077547418714880, +-0.970089685970525140, -0.970101822097111270, -0.970113955798442730, -0.970126087074489330, -0.970138215925220760, -0.970150342350606600, -0.970162466350616650, -0.970174587925220380, +-0.970186707074387810, -0.970198823798088420, -0.970210938096291890, -0.970223049968968130, -0.970235159416086730, -0.970247266437617380, -0.970259371033529880, -0.970271473203793920, +-0.970283572948379300, -0.970295670267255830, -0.970307765160393080, -0.970319857627760960, -0.970331947669329180, -0.970344035285067630, -0.970356120474945790, -0.970368203238933800, +-0.970380283577001230, -0.970392361489118120, -0.970404436975253910, -0.970416510035378650, -0.970428580669462140, -0.970440648877474170, -0.970452714659384650, -0.970464778015163290, +-0.970476838944779980, -0.970488897448204550, -0.970500953525406880, -0.970513007176356800, -0.970525058401024320, -0.970537107199379130, -0.970549153571391150, -0.970561197517030290, +-0.970573239036266470, -0.970585278129069470, -0.970597314795409340, -0.970609349035255970, -0.970621380848579180, -0.970633410235348880, -0.970645437195535090, -0.970657461729107720, +-0.970669483836036790, -0.970681503516292010, -0.970693520769843500, -0.970705535596661280, -0.970717547996715170, -0.970729557969975180, -0.970741565516411220, -0.970753570635993430, +-0.970765573328691730, -0.970777573594476140, -0.970789571433316460, -0.970801566845182930, -0.970813559830045470, -0.970825550387874210, -0.970837538518638970, -0.970849524222309970, +-0.970861507498857020, -0.970873488348250380, -0.970885466770460060, -0.970897442765455980, -0.970909416333208370, -0.970921387473687280, -0.970933356186862610, -0.970945322472704600, +-0.970957286331183280, -0.970969247762268670, -0.970981206765931030, -0.970993163342140360, -0.971005117490866710, -0.971017069212080310, -0.971029018505751300, -0.971040965371849700, +-0.971052909810345640, -0.971064851821209380, -0.971076791404410940, -0.971088728559920570, -0.971100663287708390, -0.971112595587744430, -0.971124525459999060, -0.971136452904442390, +-0.971148377921044580, -0.971160300509775860, -0.971172220670606380, -0.971184138403506260, -0.971196053708445860, -0.971207966585395430, -0.971219877034324890, -0.971231785055204800, +-0.971243690648005200, -0.971255593812696330, -0.971267494549248540, -0.971279392857631980, -0.971291288737816890, -0.971303182189773630, -0.971315073213472440, -0.971326961808883560, +-0.971338847975977250, -0.971350731714723860, -0.971362613025093640, -0.971374491907056830, -0.971386368360583790, -0.971398242385644870, -0.971410113982210440, -0.971421983150250520, +-0.971433849889735800, -0.971445714200636410, -0.971457576082922710, -0.971469435536565060, -0.971481292561533930, -0.971493147157799440, -0.971504999325332190, -0.971516849064102290, +-0.971528696374080350, -0.971540541255236700, -0.971552383707541710, -0.971564223730965740, -0.971576061325479130, -0.971587896491052480, -0.971599729227656030, -0.971611559535260240, +-0.971623387413835580, -0.971635212863352530, -0.971647035883781320, -0.971658856475092650, -0.971670674637256760, -0.971682490370244230, -0.971694303674025320, -0.971706114548570810, +-0.971717922993850960, -0.971729729009836340, -0.971741532596497310, -0.971753333753804570, -0.971765132481728470, -0.971776928780239470, -0.971788722649308160, -0.971800514088905110, +-0.971812303099000680, -0.971824089679565570, -0.971835873830570240, -0.971847655551985160, -0.971859434843781010, -0.971871211705928270, -0.971882986138397520, -0.971894758141159220, +-0.971906527714184070, -0.971918294857442520, -0.971930059570905390, -0.971941821854543030, -0.971953581708326130, -0.971965339132225160, -0.971977094126211030, -0.971988846690253980, +-0.972000596824324940, -0.972012344528394360, -0.972024089802433040, -0.972035832646411360, -0.972047573060300100, -0.972059311044069950, -0.972071046597691610, -0.972082779721135440, +-0.972094510414372560, -0.972106238677373220, -0.972117964510108350, -0.972129687912548610, -0.972141408884664600, -0.972153127426427120, -0.972164843537806740, -0.972176557218774270, +-0.972188268469300400, -0.972199977289355920, -0.972211683678911420, -0.972223387637937810, -0.972235089166405660, -0.972246788264285900, -0.972258484931548980, -0.972270179168166050, +-0.972281870974107450, -0.972293560349344330, -0.972305247293847260, -0.972316931807587160, -0.972328613890534600, -0.972340293542660610, -0.972351970763935760, -0.972363645554331080, +-0.972375317913817260, -0.972386987842365210, -0.972398655339945630, -0.972410320406529420, -0.972421983042087380, -0.972433643246590430, -0.972445301020009370, -0.972456956362314990, +-0.972468609273478330, -0.972480259753469970, -0.972491907802261140, -0.972503553419822420, -0.972515196606124950, -0.972526837361139320, -0.972538475684836760, -0.972550111577187960, +-0.972561745038163840, -0.972573376067735310, -0.972585004665873500, -0.972596630832549100, -0.972608254567733140, -0.972619875871396530, -0.972631494743510180, -0.972643111184045120, +-0.972654725192972250, -0.972666336770262710, -0.972677945915887190, -0.972689552629816820, -0.972701156912022640, -0.972712758762475540, -0.972724358181146440, -0.972735955168006590, +-0.972747549723026790, -0.972759141846178070, -0.972770731537431540, -0.972782318796758250, -0.972793903624129100, -0.972805486019515220, -0.972817065982887530, -0.972828643514217270, +-0.972840218613475360, -0.972851791280632930, -0.972863361515661110, -0.972874929318530700, -0.972886494689213070, -0.972898057627679220, -0.972909618133900200, -0.972921176207847130, +-0.972932731849491140, -0.972944285058803260, -0.972955835835754730, -0.972967384180316590, -0.972978930092459950, -0.972990473572156070, -0.973002014619375970, -0.973013553234090780, +-0.973025089416271750, -0.973036623165890010, -0.973048154482916710, -0.973059683367323070, -0.973071209819080130, -0.973082733838159240, -0.973094255424531430, -0.973105774578168050, +-0.973117291299040230, -0.973128805587119230, -0.973140317442376060, -0.973151826864782300, -0.973163333854308750, -0.973174838410927000, -0.973186340534608170, -0.973197840225323520, +-0.973209337483044170, -0.973220832307741480, -0.973232324699386700, -0.973243814657951180, -0.973255302183406170, -0.973266787275722800, -0.973278269934872430, -0.973289750160826530, +-0.973301227953556230, -0.973312703313032770, -0.973324176239227620, -0.973335646732111930, -0.973347114791657250, -0.973358580417834630, -0.973370043610615740, -0.973381504369971620, +-0.973392962695873830, -0.973404418588293520, -0.973415872047202260, -0.973427323072571180, -0.973438771664371980, -0.973450217822575680, -0.973461661547153970, -0.973473102838078090, +-0.973484541695319390, -0.973495978118849360, -0.973507412108639450, -0.973518843664661020, -0.973530272786885310, -0.973541699475284130, -0.973553123729828500, -0.973564545550490210, +-0.973575964937240410, -0.973587381890050900, -0.973598796408892800, -0.973610208493737690, -0.973621618144557170, -0.973633025361322570, -0.973644430144005260, -0.973655832492577030, +-0.973667232407009250, -0.973678629887273270, -0.973690024933340780, -0.973701417545183250, -0.973712807722772130, -0.973724195466079020, -0.973735580775075380, -0.973746963649732790, +-0.973758344090022820, -0.973769722095917060, -0.973781097667386850, -0.973792470804404010, -0.973803841506939990, -0.973815209774966270, -0.973826575608454650, -0.973837939007376470, +-0.973849299971703550, -0.973860658501407240, -0.973872014596459450, -0.973883368256831530, -0.973894719482495170, -0.973906068273422080, -0.973917414629583810, -0.973928758550951960, +-0.973940100037498200, -0.973951439089194240, -0.973962775706011750, -0.973974109887922210, -0.973985441634897420, -0.973996770946909060, -0.974008097823928720, -0.974019422265928190, +-0.974030744272879060, -0.974042063844753110, -0.974053380981521940, -0.974064695683157340, -0.974076007949631010, -0.974087317780914730, -0.974098625176980090, -0.974109930137798900, +-0.974121232663342830, -0.974132532753583800, -0.974143830408493280, -0.974155125628043290, -0.974166418412205530, -0.974177708760951670, -0.974188996674253520, -0.974200282152082870, +-0.974211565194411540, -0.974222845801211320, -0.974234123972453900, -0.974245399708111190, -0.974256673008155110, -0.974267943872557220, -0.974279212301289550, -0.974290478294323800, +-0.974301741851631880, -0.974313002973185570, -0.974324261658956800, -0.974335517908917260, -0.974346771723039070, -0.974358023101293820, -0.974369272043653640, -0.974380518550090220, +-0.974391762620575590, -0.974403004255081420, -0.974414243453579740, -0.974425480216042580, -0.974436714542441630, -0.974447946432748900, -0.974459175886936310, -0.974470402904975770, +-0.974481627486839310, -0.974492849632498710, -0.974504069341925900, -0.974515286615093120, -0.974526501451971950, -0.974537713852534630, -0.974548923816752950, -0.974560131344598960, +-0.974571336436044660, -0.974582539091062070, -0.974593739309623120, -0.974604937091699820, -0.974616132437264080, -0.974627325346288150, -0.974638515818743830, -0.974649703854603260, +-0.974660889453838440, -0.974672072616421300, -0.974683253342324090, -0.974694431631518700, -0.974705607483977170, -0.974716780899671730, -0.974727951878574310, -0.974739120420656910, +-0.974750286525891800, -0.974761450194250980, -0.974772611425706590, -0.974783770220230550, -0.974794926577795100, -0.974806080498372360, -0.974817231981934480, -0.974828381028453480, +-0.974839527637901490, -0.974850671810250760, -0.974861813545473300, -0.974872952843541250, -0.974884089704426860, -0.974895224128102370, -0.974906356114539690, -0.974917485663711170, +-0.974928612775588840, -0.974939737450145060, -0.974950859687351960, -0.974961979487181660, -0.974973096849606420, -0.974984211774598490, -0.974995324262129870, -0.975006434312173150, +-0.975017541924700250, -0.975028647099683510, -0.975039749837095070, -0.975050850136907400, -0.975061947999092520, -0.975073043423622780, -0.975084136410470430, -0.975095226959607710, +-0.975106315071006980, -0.975117400744640370, -0.975128483980480350, -0.975139564778499170, -0.975150643138668950, -0.975161719060962160, -0.975172792545351160, -0.975183863591808090, +-0.975194932200305400, -0.975205998370815340, -0.975217062103310270, -0.975228123397762660, -0.975239182254144630, -0.975250238672428660, -0.975261292652587100, -0.975272344194592300, +-0.975283393298416730, -0.975294439964032530, -0.975305484191412390, -0.975316525980528430, -0.975327565331353230, -0.975338602243859040, -0.975349636718018330, -0.975360668753803670, +-0.975371698351187200, -0.975382725510141600, -0.975393750230639010, -0.975404772512652230, -0.975415792356153390, -0.975426809761115180, -0.975437824727509840, -0.975448837255309950, +-0.975459847344487980, -0.975470854995016510, -0.975481860206867780, -0.975492862980014470, -0.975503863314428950, -0.975514861210083790, -0.975525856666951460, -0.975536849685004540, +-0.975547840264215370, -0.975558828404556650, -0.975569814106000970, -0.975580797368520660, -0.975591778192088420, -0.975602756576676610, -0.975613732522258030, -0.975624706028805130, +-0.975635677096290400, -0.975646645724686510, -0.975657611913965940, -0.975668575664101370, -0.975679536975065380, -0.975690495846830540, -0.975701452279369550, -0.975712406272654760, +-0.975723357826659090, -0.975734306941354990, -0.975745253616715160, -0.975756197852712060, -0.975767139649318600, -0.975778079006507260, -0.975789015924250710, -0.975799950402521650, +-0.975810882441292660, -0.975821812040536530, -0.975832739200225840, -0.975843663920333280, -0.975854586200831540, -0.975865506041693420, -0.975876423442891380, -0.975887338404398450, +-0.975898250926187090, -0.975909161008230220, -0.975920068650500290, -0.975930973852970230, -0.975941876615612710, -0.975952776938400660, -0.975963674821306530, -0.975974570264303230, +-0.975985463267363460, -0.975996353830460130, -0.976007241953565920, -0.976018127636653520, -0.976029010879695850, -0.976039891682665580, -0.976050770045535750, -0.976061645968278820, +-0.976072519450867810, -0.976083390493275530, -0.976094259095474870, -0.976105125257438420, -0.976115988979139200, -0.976126850260550020, -0.976137709101643770, -0.976148565502393150, +-0.976159419462771180, -0.976170270982750550, -0.976181120062304400, -0.976191966701405400, -0.976202810900026470, -0.976213652658140530, -0.976224491975720370, -0.976235328852739110, +-0.976246163289169470, -0.976256995284984440, -0.976267824840156840, -0.976278651954659790, -0.976289476628465990, -0.976300298861548680, -0.976311118653880430, -0.976321936005434490, +-0.976332750916183660, -0.976343563386101070, -0.976354373415159400, -0.976365181003331920, -0.976375986150591400, -0.976386788856910990, -0.976397589122263600, -0.976408386946622240, +-0.976419182329959830, -0.976429975272249510, -0.976440765773464390, -0.976451553833577180, -0.976462339452561110, -0.976473122630389210, -0.976483903367034610, -0.976494681662470110, +-0.976505457516668950, -0.976516230929604160, -0.976527001901248750, -0.976537770431575860, -0.976548536520558620, -0.976559300168169940, -0.976570061374383070, -0.976580820139171020, +-0.976591576462506940, -0.976602330344363830, -0.976613081784715060, -0.976623830783533430, -0.976634577340792290, -0.976645321456464770, -0.976656063130523780, -0.976666802362942790, +-0.976677539153694710, -0.976688273502752890, -0.976699005410090250, -0.976709734875680140, -0.976720461899495680, -0.976731186481510140, -0.976741908621696520, -0.976752628320028290, +-0.976763345576478370, -0.976774060391020100, -0.976784772763626740, -0.976795482694271410, -0.976806190182927250, -0.976816895229567830, -0.976827597834166060, -0.976838297996695300, +-0.976848995717128800, -0.976859690995439790, -0.976870383831601630, -0.976881074225587450, -0.976891762177370620, -0.976902447686924250, -0.976913130754221930, -0.976923811379236670, +-0.976934489561941950, -0.976945165302311010, -0.976955838600317210, -0.976966509455933660, -0.976977177869133960, -0.976987843839891230, -0.976998507368178950, -0.977009168453970340, +-0.977019827097238890, -0.977030483297957830, -0.977041137056100630, -0.977051788371640530, -0.977062437244551000, -0.977073083674805280, -0.977083727662376940, -0.977094369207239240, +-0.977105008309365640, -0.977115644968729490, -0.977126279185304260, -0.977136910959063300, -0.977147540289980080, -0.977158167178028060, -0.977168791623180490, -0.977179413625411050, +-0.977190033184693110, -0.977200650301000010, -0.977211264974305330, -0.977221877204582420, -0.977232486991804870, -0.977243094335946140, -0.977253699236979580, -0.977264301694878880, +-0.977274901709617280, -0.977285499281168590, -0.977296094409506040, -0.977306687094603330, -0.977317277336433810, -0.977327865134971160, -0.977338450490188860, -0.977349033402060360, +-0.977359613870559360, -0.977370191895659320, -0.977380767477333710, -0.977391340615556330, -0.977401911310300520, -0.977412479561539870, -0.977423045369248070, -0.977433608733398680, +-0.977444169653965300, -0.977454728130921380, -0.977465284164240720, -0.977475837753896790, -0.977486388899863390, -0.977496937602113980, -0.977507483860622140, -0.977518027675361670, +-0.977528569046306140, -0.977539107973429130, -0.977549644456704340, -0.977560178496105550, -0.977570710091606120, -0.977581239243180080, -0.977591765950800880, -0.977602290214442340, +-0.977612812034078020, -0.977623331409681610, -0.977633848341226910, -0.977644362828687610, -0.977654874872037390, -0.977665384471250070, -0.977675891626299200, -0.977686396337158590, +-0.977696898603802040, -0.977707398426203240, -0.977717895804335880, -0.977728390738173860, -0.977738883227690870, -0.977749373272860600, -0.977759860873656960, -0.977770346030053530, +-0.977780828742024430, -0.977791309009543140, -0.977801786832583560, -0.977812262211119610, -0.977822735145124970, -0.977833205634573430, -0.977843673679438920, -0.977854139279695220, +-0.977864602435316250, -0.977875063146275700, -0.977885521412547480, -0.977895977234105480, -0.977906430610923530, -0.977916881542975510, -0.977927330030235350, -0.977937776072676730, +-0.977948219670273790, -0.977958660823000200, -0.977969099530830000, -0.977979535793737090, -0.977989969611695380, -0.978000400984678660, -0.978010829912660860, -0.978021256395616210, +-0.978031680433518180, -0.978042102026341120, -0.978052521174058720, -0.978062937876645110, -0.978073352134074090, -0.978083763946319680, -0.978094173313355800, -0.978104580235156670, +-0.978114984711695890, -0.978125386742947800, -0.978135786328886090, -0.978146183469485120, -0.978156578164718570, -0.978166970414560580, -0.978177360218985160, -0.978187747577966340, +-0.978198132491478130, -0.978208514959494680, -0.978218894981989880, -0.978229272558937770, -0.978239647690312570, -0.978250020376088210, -0.978260390616238930, -0.978270758410738520, +-0.978281123759561220, -0.978291486662681180, -0.978301847120072400, -0.978312205131709020, -0.978322560697565070, -0.978332913817614780, -0.978343264491832180, -0.978353612720191500, +-0.978363958502666660, -0.978374301839232020, -0.978384642729861590, -0.978394981174529500, -0.978405317173210000, -0.978415650725877220, -0.978425981832505290, -0.978436310493068450, +-0.978446636707540840, -0.978456960475896590, -0.978467281798109930, -0.978477600674155120, -0.978487917104006180, -0.978498231087637560, -0.978508542625023400, -0.978518851716137840, +-0.978529158360955110, -0.978539462559449570, -0.978549764311595240, -0.978560063617366580, -0.978570360476737840, -0.978580654889683150, -0.978590946856176760, -0.978601236376193010, +-0.978611523449706260, -0.978621808076690640, -0.978632090257120500, -0.978642369990970100, -0.978652647278213880, -0.978662922118825880, -0.978673194512780680, -0.978683464460052500, +-0.978693731960615710, -0.978703997014444440, -0.978714259621513260, -0.978724519781796420, -0.978734777495268380, -0.978745032761903280, -0.978755285581675570, -0.978765535954559730, +-0.978775783880530100, -0.978786029359560940, -0.978796272391626700, -0.978806512976701740, -0.978816751114760520, -0.978826986805777510, -0.978837220049726950, -0.978847450846583310, +-0.978857679196321160, -0.978867905098914750, -0.978878128554338530, -0.978888349562566980, -0.978898568123574670, -0.978908784237335850, -0.978918997903825080, -0.978929209123016840, +-0.978939417894885590, -0.978949624219405790, -0.978959828096551910, -0.978970029526298520, -0.978980228508619990, -0.978990425043490880, -0.979000619130885760, -0.979010810770779010, +-0.979020999963145290, -0.979031186707959080, -0.979041371005194950, -0.979051552854827260, -0.979061732256830800, -0.979071909211179920, -0.979082083717849330, -0.979092255776813580, +-0.979102425388047150, -0.979112592551524610, -0.979122757267220640, -0.979132919535109720, -0.979143079355166530, -0.979153236727365650, -0.979163391651681760, -0.979173544128089320, +-0.979183694156562920, -0.979193841737077460, -0.979203986869607300, -0.979214129554127120, -0.979224269790611720, -0.979234407579035570, -0.979244542919373460, -0.979254675811599970, +-0.979264806255689790, -0.979274934251617600, -0.979285059799358090, -0.979295182898885950, -0.979305303550175750, -0.979315421753202410, -0.979325537507940380, -0.979335650814364690, +-0.979345761672449690, -0.979355870082170400, -0.979365976043501400, -0.979376079556417480, -0.979386180620893440, -0.979396279236903760, -0.979406375404423550, -0.979416469123427280, +-0.979426560393889870, -0.979436649215786100, -0.979446735589090680, -0.979456819513778500, -0.979466900989824140, -0.979476980017202630, -0.979487056595888640, -0.979497130725856980, +-0.979507202407082560, -0.979517271639540050, -0.979527338423204390, -0.979537402758050350, -0.979547464644052850, -0.979557524081186680, -0.979567581069426760, -0.979577635608747780, +-0.979587687699124740, -0.979597737340532570, -0.979607784532945950, -0.979617829276340000, -0.979627871570689310, -0.979637911415969010, -0.979647948812154000, -0.979657983759219090, +-0.979668016257139170, -0.979678046305889170, -0.979688073905444100, -0.979698099055778870, -0.979708121756868390, -0.979718142008687680, -0.979728159811211530, -0.979738175164414970, +-0.979748188068273020, -0.979758198522760580, -0.979768206527852570, -0.979778212083524110, -0.979788215189750120, -0.979798215846505620, -0.979808214053765610, -0.979818209811504910, +-0.979828203119698870, -0.979838193978322170, -0.979848182387350050, -0.979858168346757540, -0.979868151856519540, -0.979878132916611080, -0.979888111527007500, -0.979898087687683490, +-0.979908061398614310, -0.979918032659774840, -0.979928001471140450, -0.979937967832686050, -0.979947931744386660, -0.979957893206217510, -0.979967852218153520, -0.979977808780170050, +-0.979987762892241990, -0.979997714554344480, -0.980007663766452760, -0.980017610528541860, -0.980027554840586900, -0.980037496702563020, -0.980047436114445450, -0.980057373076209330, +-0.980067307587829670, -0.980077239649281840, -0.980087169260540850, -0.980097096421581940, -0.980107021132380350, -0.980116943392911220, -0.980126863203149570, -0.980136780563070960, +-0.980146695472650320, -0.980156607931862880, -0.980166517940683990, -0.980176425499088790, -0.980186330607052510, -0.980196233264550410, -0.980206133471557830, -0.980216031228049790, +-0.980225926534001760, -0.980235819389388750, -0.980245709794186350, -0.980255597748369680, -0.980265483251913980, -0.980275366304794500, -0.980285246906986710, -0.980295125058465720, +-0.980305000759207010, -0.980314874009185710, -0.980324744808377280, -0.980334613156756960, -0.980344479054300110, -0.980354342500982080, -0.980364203496778220, -0.980374062041663770, +-0.980383918135614210, -0.980393771778604870, -0.980403622970611120, -0.980413471711608200, -0.980423318001571680, -0.980433161840476910, -0.980443003228299140, -0.980452842165013940, +-0.980462678650596660, -0.980472512685022670, -0.980482344268267300, -0.980492173400306140, -0.980502000081114540, -0.980511824310667970, -0.980521646088941770, -0.980531465415911520, +-0.980541282291552570, -0.980551096715840400, -0.980560908688750570, -0.980570718210258430, -0.980580525280339450, -0.980590329898969220, -0.980600132066123060, -0.980609931781776690, +-0.980619729045905440, -0.980629523858484900, -0.980639316219490520, -0.980649106128897770, -0.980658893586682350, -0.980668678592819700, -0.980678461147285410, -0.980688241250054830, +-0.980698018901103750, -0.980707794100407540, -0.980717566847941870, -0.980727337143682320, -0.980737104987604470, -0.980746870379683780, -0.980756633319895930, -0.980766393808216510, +-0.980776151844621080, -0.980785907429085340, -0.980795660561584740, -0.980805411242095080, -0.980815159470591840, -0.980824905247050680, -0.980834648571447310, -0.980844389443757290, +-0.980854127863956200, -0.980863863832019960, -0.980873597347924010, -0.980883328411644050, -0.980893057023155770, -0.980902783182434850, -0.980912506889456860, -0.980922228144197830, +-0.980931946946632990, -0.980941663296738490, -0.980951377194489660, -0.980961088639862530, -0.980970797632832570, -0.980980504173375790, -0.980990208261467540, -0.980999909897083850, +-0.981009609080200410, -0.981019305810793000, -0.981029000088837200, -0.981038691914308920, -0.981048381287183970, -0.981058068207438130, -0.981067752675046980, -0.981077434689986540, +-0.981087114252232500, -0.981096791361760650, -0.981106466018546790, -0.981116138222566820, -0.981125807973796450, -0.981135475272211570, -0.981145140117788080, -0.981154802510501690, +-0.981164462450328290, -0.981174119937243790, -0.981183774971223890, -0.981193427552244590, -0.981203077680281700, -0.981212725355311230, -0.981222370577308880, -0.981232013346250540, +-0.981241653662112250, -0.981251291524869780, -0.981260926934499070, -0.981270559890976110, -0.981280190394276720, -0.981289818444376790, -0.981299444041252360, -0.981309067184879420, +-0.981318687875233690, -0.981328306112291270, -0.981337921896028090, -0.981347535226420040, -0.981357146103443270, -0.981366754527073560, -0.981376360497287050, -0.981385964014059530, +-0.981395565077367140, -0.981405163687185890, -0.981414759843491690, -0.981424353546260560, -0.981433944795468530, -0.981443533591091710, -0.981453119933106020, -0.981462703821487590, +-0.981472285256212330, -0.981481864237256360, -0.981491440764595710, -0.981501014838206510, -0.981510586458064770, -0.981520155624146520, -0.981529722336427990, -0.981539286594884990, +-0.981548848399493970, -0.981558407750230730, -0.981567964647071410, -0.981577519089992250, -0.981587071078969250, -0.981596620613978570, -0.981606167694996420, -0.981615712321998850, +-0.981625254494961850, -0.981634794213861910, -0.981644331478674800, -0.981653866289377010, -0.981663398645944430, -0.981672928548353420, -0.981682455996580110, -0.981691980990600620, +-0.981701503530391210, -0.981711023615927990, -0.981720541247187330, -0.981730056424145240, -0.981739569146777960, -0.981749079415061840, -0.981758587228973020, -0.981768092588487630, +-0.981777595493582120, -0.981787095944232520, -0.981796593940415300, -0.981806089482106460, -0.981815582569282470, -0.981825073201919580, -0.981834561379993920, -0.981844047103481940, +-0.981853530372359780, -0.981863011186603800, -0.981872489546190330, -0.981881965451095520, -0.981891438901295930, -0.981900909896767700, -0.981910378437487190, -0.981919844523430730, +-0.981929308154574690, -0.981938769330895410, -0.981948228052369140, -0.981957684318972230, -0.981967138130681260, -0.981976589487472350, -0.981986038389321970, -0.981995484836206580, +-0.982004928828102420, -0.982014370364985960, -0.982023809446833430, -0.982033246073621520, -0.982042680245326480, -0.982052111961924770, -0.982061541223392730, -0.982070968029706840, +-0.982080392380843550, -0.982089814276779330, -0.982099233717490420, -0.982108650702953610, -0.982118065233145040, -0.982127477308041400, -0.982136886927619020, -0.982146294091854390, +-0.982155698800724060, -0.982165101054204510, -0.982174500852272200, -0.982183898194903590, -0.982193293082075260, -0.982202685513763660, -0.982212075489945490, -0.982221463010596980, +-0.982230848075694830, -0.982240230685215600, -0.982249610839135870, -0.982258988537431990, -0.982268363780080640, -0.982277736567058410, -0.982287106898341870, -0.982296474773907580, +-0.982305840193732020, -0.982315203157791970, -0.982324563666063800, -0.982333921718524290, -0.982343277315149920, -0.982352630455917470, -0.982361981140803310, -0.982371329369784330, +-0.982380675142836890, -0.982390018459937900, -0.982399359321063700, -0.982408697726191220, -0.982418033675297010, -0.982427367168357660, -0.982436698205349850, -0.982446026786250370, +-0.982455352911035810, -0.982464676579682950, -0.982473997792168260, -0.982483316548468650, -0.982492632848560700, -0.982501946692421190, -0.982511258080026820, -0.982520567011354370, +-0.982529873486380430, -0.982539177505081800, -0.982548479067435250, -0.982557778173417500, -0.982567074823005320, -0.982576369016175400, -0.982585660752904650, -0.982594950033169660, +-0.982604236856947310, -0.982613521224214410, -0.982622803134947650, -0.982632082589123930, -0.982641359586719940, -0.982650634127712590, -0.982659906212078770, -0.982669175839794960, +-0.982678443010838400, -0.982687707725185660, -0.982696969982813640, -0.982706229783699260, -0.982715487127819200, -0.982724742015150590, -0.982733994445669890, -0.982743244419354460, +-0.982752491936180750, -0.982761736996125790, -0.982770979599166590, -0.982780219745279850, -0.982789457434442680, -0.982798692666631780, -0.982807925441824160, -0.982817155759996730, +-0.982826383621126400, -0.982835609025190180, -0.982844831972164880, -0.982854052462027510, -0.982863270494754970, -0.982872486070324290, -0.982881699188712380, -0.982890909849896240, +-0.982900118053852800, -0.982909323800559060, -0.982918527089992170, -0.982927727922128790, -0.982936926296946070, -0.982946122214421130, -0.982955315674530870, -0.982964506677252330, +-0.982973695222562500, -0.982982881310438430, -0.982992064940857110, -0.983001246113795690, -0.983010424829231180, -0.983019601087140480, -0.983028774887500960, -0.983037946230289390, +-0.983047115115482930, -0.983056281543058690, -0.983065445512993800, -0.983074607025265390, -0.983083766079850260, -0.983092922676725880, -0.983102076815869030, -0.983111228497257180, +-0.983120377720867130, -0.983129524486676120, -0.983138668794661390, -0.983147810644799950, -0.983156950037068930, -0.983166086971445590, -0.983175221447907030, -0.983184353466430410, +-0.983193483026992940, -0.983202610129571770, -0.983211734774144030, -0.983220856960686950, -0.983229976689177660, -0.983239093959593520, -0.983248208771911660, -0.983257321126109310, +-0.983266431022163600, -0.983275538460051780, -0.983284643439751190, -0.983293745961238860, -0.983302846024492360, -0.983311943629488590, -0.983321038776205030, -0.983330131464618780, +-0.983339221694707330, -0.983348309466447800, -0.983357394779817430, -0.983366477634793680, -0.983375558031353680, -0.983384635969474670, -0.983393711449134230, -0.983402784470309490, +-0.983411855032977790, -0.983420923137116380, -0.983429988782702710, -0.983439051969714040, -0.983448112698127820, -0.983457170967921290, -0.983466226779071690, -0.983475280131556720, +-0.983484331025353490, -0.983493379460439350, -0.983502425436791780, -0.983511468954388230, -0.983520510013205950, -0.983529548613222500, -0.983538584754415020, -0.983547618436761200, +-0.983556649660238260, -0.983565678424823790, -0.983574704730495020, -0.983583728577229530, -0.983592749965004680, -0.983601768893798020, -0.983610785363586930, -0.983619799374348850, +-0.983628810926061250, -0.983637820018701700, -0.983646826652247560, -0.983655830826676290, -0.983664832541965460, -0.983673831798092650, -0.983682828595035200, -0.983691822932770690, +-0.983700814811276580, -0.983709804230530450, -0.983718791190509870, -0.983727775691192190, -0.983736757732555200, -0.983745737314576260, -0.983754714437232950, -0.983763689100502940, +-0.983772661304363690, -0.983781631048792680, -0.983790598333767700, -0.983799563159266200, -0.983808525525265760, -0.983817485431744080, -0.983826442878678600, -0.983835397866047010, +-0.983844350393827010, -0.983853300461996040, -0.983862248070531910, -0.983871193219412080, -0.983880135908614340, -0.983889076138116270, -0.983898013907895440, -0.983906949217929540, +-0.983915882068196360, -0.983924812458673470, -0.983933740389338450, -0.983942665860169210, -0.983951588871143200, -0.983960509422238340, -0.983969427513432080, -0.983978343144702340, +-0.983987256316026790, -0.983996167027382910, -0.984005075278748810, -0.984013981070101850, -0.984022884401420050, -0.984031785272680980, -0.984040683683862550, -0.984049579634942330, +-0.984058473125898230, -0.984067364156707810, -0.984076252727349110, -0.984085138837799690, -0.984094022488037460, -0.984102903678040210, -0.984111782407785630, -0.984120658677251630, +-0.984129532486415990, -0.984138403835256530, -0.984147272723751020, -0.984156139151877380, -0.984165003119613410, -0.984173864626936900, -0.984182723673825640, -0.984191580260257660, +-0.984200434386210740, -0.984209286051662690, -0.984218135256591520, -0.984226982000974910, -0.984235826284790890, -0.984244668108017250, -0.984253507470632010, -0.984262344372612950, +-0.984271178813938110, -0.984280010794585270, -0.984288840314532340, -0.984297667373757460, -0.984306491972238300, -0.984315314109952880, -0.984324133786879220, -0.984332951002995230, +-0.984341765758278920, -0.984350578052708090, -0.984359387886260980, -0.984368195258915280, -0.984377000170649110, -0.984385802621440380, -0.984394602611267210, -0.984403400140107520, +-0.984412195207939320, -0.984420987814740630, -0.984429777960489470, -0.984438565645163850, -0.984447350868741910, -0.984456133631201550, -0.984464913932520780, -0.984473691772677850, +-0.984482467151650550, -0.984491240069417240, -0.984500010525955700, -0.984508778521244190, -0.984517544055260710, -0.984526307127983390, -0.984535067739390370, -0.984543825889459550, +-0.984552581578169270, -0.984561334805497460, -0.984570085571422340, -0.984578833875922040, -0.984587579718974590, -0.984596323100558220, -0.984605064020651070, -0.984613802479231250, +-0.984622538476276900, -0.984631272011766260, -0.984640003085677340, -0.984648731697988500, -0.984657457848677750, -0.984666181537723450, -0.984674902765103720, -0.984683621530796580, +-0.984692337834780610, -0.984701051677033590, -0.984709763057533990, -0.984718471976260060, -0.984727178433189910, -0.984735882428301790, -0.984744583961573940, -0.984753283032984710, +-0.984761979642512220, -0.984770673790134720, -0.984779365475830670, -0.984788054699578090, -0.984796741461355540, -0.984805425761140940, -0.984814107598912860, -0.984822786974649530, +-0.984831463888329210, -0.984840138339930230, -0.984848810329430950, -0.984857479856809600, -0.984866146922044550, -0.984874811525114140, -0.984883473665996710, -0.984892133344670630, +-0.984900790561114130, -0.984909445315305780, -0.984918097607223710, -0.984926747436846380, -0.984935394804152260, -0.984944039709119590, -0.984952682151726820, -0.984961322131952420, +-0.984969959649774630, -0.984978594705172020, -0.984987227298122820, -0.984995857428605740, -0.985004485096598770, -0.985013110302080830, -0.985021733045029930, -0.985030353325424770, +-0.985038971143243790, -0.985047586498465240, -0.985056199391067810, -0.985064809821029840, -0.985073417788329910, -0.985082023292946360, -0.985090626334857890, -0.985099226914042720, +-0.985107825030479560, -0.985116420684146730, -0.985125013875022940, -0.985133604603086630, -0.985142192868316280, -0.985150778670690450, -0.985159362010187610, -0.985167942886786440, +-0.985176521300465400, -0.985185097251203070, -0.985193670738978010, -0.985202241763768690, -0.985210810325553910, -0.985219376424312010, -0.985227940060021680, -0.985236501232661490, +-0.985245059942210010, -0.985253616188645930, -0.985262169971947820, -0.985270721292094250, -0.985279270149063910, -0.985287816542835370, -0.985296360473387310, -0.985304901940698310, +-0.985313440944747040, -0.985321977485512310, -0.985330511562972470, -0.985339043177106520, -0.985347572327892830, -0.985356099015310180, -0.985364623239337380, -0.985373144999952990, +-0.985381664297135810, -0.985390181130864300, -0.985398695501117470, -0.985407207407873910, -0.985415716851112290, -0.985424223830811300, -0.985432728346949840, -0.985441230399506600, +-0.985449729988460250, -0.985458227113789500, -0.985466721775473230, -0.985475213973490140, -0.985483703707819130, -0.985492190978438760, -0.985500675785327960, -0.985509158128465400, +-0.985517638007829990, -0.985526115423400410, -0.985534590375155670, -0.985543062863074360, -0.985551532887135480, -0.985560000447317730, -0.985568465543599890, -0.985576928175960990, +-0.985585388344379810, -0.985593846048835040, -0.985602301289305700, -0.985610754065770590, -0.985619204378208600, -0.985627652226598650, -0.985636097610919530, -0.985644540531150250, +-0.985652980987269500, -0.985661418979256410, -0.985669854507089660, -0.985678287570748380, -0.985686718170211250, -0.985695146305457400, -0.985703571976465630, -0.985711995183215060, +-0.985720415925684380, -0.985728834203852710, -0.985737250017698960, -0.985745663367202150, -0.985754074252341070, -0.985762482673094850, -0.985770888629442400, -0.985779292121362730, +-0.985787693148834850, -0.985796091711837800, -0.985804487810350460, -0.985812881444351860, -0.985821272613821130, -0.985829661318737170, -0.985838047559079000, -0.985846431334825860, +-0.985854812645956540, -0.985863191492450160, -0.985871567874285870, -0.985879941791442670, -0.985888313243899580, -0.985896682231635730, -0.985905048754630140, -0.985913412812862040, +-0.985921774406310240, -0.985930133534954070, -0.985938490198772670, -0.985946844397744940, -0.985955196131850120, -0.985963545401067230, -0.985971892205375620, -0.985980236544754200, +-0.985988578419182190, -0.985996917828638740, -0.986005254773102970, -0.986013589252554110, -0.986021921266971300, -0.986030250816333660, -0.986038577900620330, -0.986046902519810640, +-0.986055224673883620, -0.986063544362818620, -0.986071861586594770, -0.986080176345191180, -0.986088488638587220, -0.986096798466762010, -0.986105105829694790, -0.986113410727364800, +-0.986121713159751280, -0.986130013126833570, -0.986138310628590700, -0.986146605665002120, -0.986154898236047070, -0.986163188341704690, -0.986171475981954430, -0.986179761156775300, +-0.986188043866147000, -0.986196324110048430, -0.986204601888459150, -0.986212877201358310, -0.986221150048725240, -0.986229420430539410, -0.986237688346779940, -0.986245953797426300, +-0.986254216782457730, -0.986262477301853570, -0.986270735355593290, -0.986278990943656230, -0.986287244066021530, -0.986295494722668860, -0.986303742913577360, -0.986311988638726600, +-0.986320231898095810, -0.986328472691664460, -0.986336711019411890, -0.986344946881317690, -0.986353180277360960, -0.986361411207521300, -0.986369639671778150, -0.986377865670110880, +-0.986386089202498930, -0.986394310268921880, -0.986402528869358970, -0.986410745003789670, -0.986418958672193540, -0.986427169874550040, -0.986435378610838630, -0.986443584881038780, +-0.986451788685129950, -0.986459990023091590, -0.986468188894903400, -0.986476385300544600, -0.986484579239994890, -0.986492770713233710, -0.986500959720240660, -0.986509146260995170, +-0.986517330335476840, -0.986525511943665110, -0.986533691085539680, -0.986541867761079990, -0.986550041970265750, -0.986558213713076280, -0.986566382989491290, -0.986574549799490330, +-0.986582714143052990, -0.986590876020158940, -0.986599035430787640, -0.986607192374918780, -0.986615346852531830, -0.986623498863606670, -0.986631648408122670, -0.986639795486059620, +-0.986647940097396980, -0.986656082242114540, -0.986664221920191880, -0.986672359131608670, -0.986680493876344600, -0.986688626154379360, -0.986696755965692400, -0.986704883310263630, +-0.986713008188072620, -0.986721130599099160, -0.986729250543322830, -0.986737368020723320, -0.986745483031280510, -0.986753595574973890, -0.986761705651783340, -0.986769813261688440, +-0.986777918404669110, -0.986786021080704900, -0.986794121289775730, -0.986802219031861160, -0.986810314306941220, -0.986818407114995240, -0.986826497456003480, -0.986834585329945280, +-0.986842670736800760, -0.986850753676549510, -0.986858834149171420, -0.986866912154646170, -0.986874987692953680, -0.986883060764073620, -0.986891131367986010, -0.986899199504670640, +-0.986907265174107210, -0.986915328376275600, -0.986923389111155620, -0.986931447378727290, -0.986939503178970170, -0.986947556511864500, -0.986955607377389740, -0.986963655775526140, +-0.986971701706253260, -0.986979745169551230, -0.986987786165399730, -0.986995824693778890, -0.987003860754668390, -0.987011894348048260, -0.987019925473898390, -0.987027954132198790, +-0.987035980322929160, -0.987044004046069730, -0.987052025301600190, -0.987060044089500650, -0.987068060409750920, -0.987076074262331130, -0.987084085647221050, -0.987092094564400830, +-0.987100101013850370, -0.987108104995549680, -0.987116106509478670, -0.987124105555617360, -0.987132102133945870, -0.987140096244444100, -0.987148087887092180, -0.987156077061869920, +-0.987164063768757540, -0.987172048007734950, -0.987180029778782280, -0.987188009081879430, -0.987195985917006640, -0.987203960284143920, -0.987211932183271300, -0.987219901614368790, +-0.987227868577416510, -0.987235833072394600, -0.987243795099283170, -0.987251754658062140, -0.987259711748711740, -0.987267666371212100, -0.987275618525543350, -0.987283568211685500, +-0.987291515429618680, -0.987299460179323130, -0.987307402460778860, -0.987315342273966220, -0.987323279618865120, -0.987331214495455800, -0.987339146903718490, -0.987347076843633320, +-0.987355004315180420, -0.987362929318340130, -0.987370851853092370, -0.987378771919417590, -0.987386689517295800, -0.987394604646707360, -0.987402517307632400, -0.987410427500051040, +-0.987418335223943730, -0.987426240479290510, -0.987434143266071710, -0.987442043584267570, -0.987449941433858340, -0.987457836814824130, -0.987465729727145520, -0.987473620170802420, +-0.987481508145775400, -0.987489393652044580, -0.987497276689590200, -0.987505157258392720, -0.987513035358432270, -0.987520910989689300, -0.987528784152143960, -0.987536654845776800, +-0.987544523070567840, -0.987552388826497650, -0.987560252113546590, -0.987568112931694770, -0.987575971280922670, -0.987583827161210740, -0.987591680572539100, -0.987599531514888330, +-0.987607379988238780, -0.987615225992570790, -0.987623069527864610, -0.987630910594100910, -0.987638749191259820, -0.987646585319321920, -0.987654418978267450, -0.987662250168077070, +-0.987670078888730930, -0.987677905140209700, -0.987685728922493730, -0.987693550235563380, -0.987701369079399210, -0.987709185453981560, -0.987716999359290910, -0.987724810795307830, +-0.987732619762012650, -0.987740426259385960, -0.987748230287408320, -0.987756031846059980, -0.987763830935321610, -0.987771627555173560, -0.987779421705596520, -0.987787213386570940, +-0.987795002598077290, -0.987802789340096240, -0.987810573612608160, -0.987818355415593600, -0.987826134749033140, -0.987833911612907340, -0.987841686007196800, -0.987849457931882060, +-0.987857227386943700, -0.987864994372362190, -0.987872758888118210, -0.987880520934192430, -0.987888280510565210, -0.987896037617217450, -0.987903792254129390, -0.987911544421282040, +-0.987919294118655760, -0.987927041346231220, -0.987934786103989100, -0.987942528391909990, -0.987950268209974560, -0.987958005558163490, -0.987965740436457350, -0.987973472844836940, +-0.987981202783282830, -0.987988930251775700, -0.987996655250296230, -0.988004377778825100, -0.988012097837343120, -0.988019815425830840, -0.988027530544269060, -0.988035243192638360, +-0.988042953370919630, -0.988050661079093450, -0.988058366317140720, -0.988066069085042020, -0.988073769382778130, -0.988081467210329740, -0.988089162567677870, -0.988096855454802970, +-0.988104545871685950, -0.988112233818307590, -0.988119919294648600, -0.988127602300689860, -0.988135282836412050, -0.988142960901796100, -0.988150636496822780, -0.988158309621472770, +-0.988165980275727110, -0.988173648459566350, -0.988181314172971610, -0.988188977415923490, -0.988196638188402980, -0.988204296490390880, -0.988211952321867980, -0.988219605682815190, +-0.988227256573213420, -0.988234904993043560, -0.988242550942286300, -0.988250194420922770, -0.988257835428933750, -0.988265473966300160, -0.988273110033002890, -0.988280743629022850, +-0.988288374754340840, -0.988296003408937970, -0.988303629592795050, -0.988311253305893200, -0.988318874548213100, -0.988326493319735770, -0.988334109620442320, -0.988341723450313570, +-0.988349334809330400, -0.988356943697473960, -0.988364550114725240, -0.988372154061065040, -0.988379755536474500, -0.988387354540934630, -0.988394951074426320, -0.988402545136930600, +-0.988410136728428590, -0.988417725848901200, -0.988425312498329430, -0.988432896676694430, -0.988440478383977190, -0.988448057620158750, -0.988455634385220220, -0.988463208679142610, +-0.988470780501906840, -0.988478349853494250, -0.988485916733885750, -0.988493481143062460, -0.988501043081005500, -0.988508602547695900, -0.988516159543114780, -0.988523714067243260, +-0.988531266120062480, -0.988538815701553550, -0.988546362811697500, -0.988553907450475670, -0.988561449617868960, -0.988568989313858610, -0.988576526538425870, -0.988584061291551850, +-0.988591593573217580, -0.988599123383404390, -0.988606650722093310, -0.988614175589265680, -0.988621697984902630, -0.988629217908985280, -0.988636735361494880, -0.988644250342412660, +-0.988651762851719850, -0.988659272889397590, -0.988666780455427110, -0.988674285549789760, -0.988681788172466660, -0.988689288323439050, -0.988696786002688290, -0.988704281210195600, +-0.988711773945942120, -0.988719264209909190, -0.988726752002078160, -0.988734237322430260, -0.988741720170946750, -0.988749200547608950, -0.988756678452398120, -0.988764153885295590, +-0.988771626846282730, -0.988779097335340750, -0.988786565352451020, -0.988794030897594880, -0.988801493970753680, -0.988808954571908760, -0.988816412701041480, -0.988823868358133070, +-0.988831321543165110, -0.988838772256118710, -0.988846220496975460, -0.988853666265716690, -0.988861109562323760, -0.988868550386778010, -0.988875988739060910, -0.988883424619153790, +-0.988890858027038130, -0.988898288962695380, -0.988905717426106780, -0.988913143417254000, -0.988920566936118410, -0.988927987982681220, -0.988935406556924250, -0.988942822658828600, +-0.988950236288375970, -0.988957647445547820, -0.988965056130325480, -0.988972462342690430, -0.988979866082624340, -0.988987267350108560, -0.988994666145124550, -0.989002062467653990, +-0.989009456317678230, -0.989016847695178720, -0.989024236600137270, -0.989031623032535110, -0.989039006992353920, -0.989046388479575160, -0.989053767494180500, -0.989061144036151420, +-0.989068518105469470, -0.989075889702116240, -0.989083258826073290, -0.989090625477322180, -0.989097989655844390, -0.989105351361621810, -0.989112710594635790, -0.989120067354867900, +-0.989127421642299940, -0.989134773456913470, -0.989142122798689960, -0.989149469667611190, -0.989156814063658740, -0.989164155986814290, -0.989171495437059400, -0.989178832414375760, +-0.989186166918745060, -0.989193498950148960, -0.989200828508569160, -0.989208155593987230, -0.989215480206384950, -0.989222802345743890, -0.989230122012045850, -0.989237439205272520, +-0.989244753925405670, -0.989252066172426780, -0.989259375946317850, -0.989266683247060460, -0.989273988074636400, -0.989281290429027240, -0.989288590310214990, -0.989295887718181110, +-0.989303182652907620, -0.989310475114376200, -0.989317765102568520, -0.989325052617466500, -0.989332337659051820, -0.989339620227306260, -0.989346900322211730, -0.989354177943749800, +-0.989361453091902600, -0.989368725766651690, -0.989375995967978980, -0.989383263695866270, -0.989390528950295330, -0.989397791731248200, -0.989405052038706430, -0.989412309872652160, +-0.989419565233067070, -0.989426818119933160, -0.989434068533232010, -0.989441316472945860, -0.989448561939056390, -0.989455804931545500, -0.989463045450395100, -0.989470283495587080, +-0.989477519067103240, -0.989484752164925820, -0.989491982789036380, -0.989499210939416950, -0.989506436616049640, -0.989513659818916150, -0.989520880547998470, -0.989528098803278630, +-0.989535314584738530, -0.989542527892360190, -0.989549738726125510, -0.989556947086016490, -0.989564152972015050, -0.989571356384103320, -0.989578557322263070, -0.989585755786476560, +-0.989592951776725570, -0.989600145292992230, -0.989607336335258550, -0.989614524903506540, -0.989621710997718230, -0.989628894617875510, -0.989636075763960730, -0.989643254435955580, +-0.989650430633842500, -0.989657604357603190, -0.989664775607219880, -0.989671944382674700, -0.989679110683949650, -0.989686274511026750, -0.989693435863888250, -0.989700594742516150, +-0.989707751146892580, -0.989714905076999550, -0.989722056532819310, -0.989729205514333970, -0.989736352021525550, -0.989743496054376280, -0.989750637612868190, -0.989757776696983620, +-0.989764913306704460, -0.989772047442013190, -0.989779179102891700, -0.989786308289322350, -0.989793435001287140, -0.989800559238768420, -0.989807681001748210, -0.989814800290208850, +-0.989821917104132480, -0.989829031443501320, -0.989836143308297610, -0.989843252698503480, -0.989850359614101280, -0.989857464055073240, -0.989864566021401380, -0.989871665513068270, +-0.989878762530055910, -0.989885857072346550, -0.989892949139922760, -0.989900038732766440, -0.989907125850860050, -0.989914210494185820, -0.989921292662726100, -0.989928372356463250, +-0.989935449575379380, -0.989942524319456840, -0.989949596588677980, -0.989956666383025260, -0.989963733702480810, -0.989970798547026960, -0.989977860916646190, -0.989984920811320720, +-0.989991978231033020, -0.989999033175765320, -0.990006085645499970, -0.990013135640219530, -0.990020183159906140, -0.990027228204542480, -0.990034270774110550, -0.990041310868593040, +-0.990048348487972190, -0.990055383632230560, -0.990062416301350390, -0.990069446495314250, -0.990076474214104390, -0.990083499457703460, -0.990090522226093730, -0.990097542519257750, +-0.990104560337177860, -0.990111575679836540, -0.990118588547216350, -0.990125598939299630, -0.990132606856068960, -0.990139612297506690, -0.990146615263595490, -0.990153615754317710, +-0.990160613769655920, -0.990167609309592470, -0.990174602374110150, -0.990181592963191300, -0.990188581076818400, -0.990195566714974110, -0.990202549877640890, -0.990209530564801210, +-0.990216508776437850, -0.990223484512533170, -0.990230457773069730, -0.990237428558030210, -0.990244396867397070, -0.990251362701152880, -0.990258326059280440, -0.990265286941762080, +-0.990272245348580490, -0.990279201279718360, -0.990286154735158130, -0.990293105714882600, -0.990300054218874240, -0.990307000247115820, -0.990313943799589810, -0.990320884876279120, +-0.990327823477165970, -0.990334759602233490, -0.990341693251463930, -0.990348624424840280, -0.990355553122344910, -0.990362479343960820, -0.990369403089670470, -0.990376324359456550, +-0.990383243153301950, -0.990390159471189140, -0.990397073313101010, -0.990403984679020130, -0.990410893568929310, -0.990417799982811210, -0.990424703920648630, -0.990431605382424360, +-0.990438504368120980, -0.990445400877721370, -0.990452294911208340, -0.990459186468564460, -0.990466075549772730, -0.990472962154815730, -0.990479846283676360, -0.990486727936337300, +-0.990493607112781560, -0.990500483812991720, -0.990507358036950670, -0.990514229784641210, -0.990521099056046130, -0.990527965851148440, -0.990534830169930710, -0.990541692012375960, +-0.990548551378466980, -0.990555408268186670, -0.990562262681517700, -0.990569114618443210, -0.990575964078945880, -0.990582811063008720, -0.990589655570614400, -0.990596497601746060, +-0.990603337156386380, -0.990610174234518360, -0.990617008836124910, -0.990623840961189050, -0.990630670609693450, -0.990637497781621250, -0.990644322476955330, -0.990651144695678500, +-0.990657964437773870, -0.990664781703224360, -0.990671596492012860, -0.990678408804122390, -0.990685218639535960, -0.990692025998236360, -0.990698830880206720, -0.990705633285430040, +-0.990712433213889240, -0.990719230665567440, -0.990726025640447430, -0.990732818138512440, -0.990739608159745490, -0.990746395704129370, -0.990753180771647310, -0.990759963362282340, +-0.990766743476017450, -0.990773521112835680, -0.990780296272720020, -0.990787068955653720, -0.990793839161619780, -0.990800606890601230, -0.990807372142581080, -0.990814134917542550, +-0.990820895215468680, -0.990827653036342570, -0.990834408380147360, -0.990841161246866160, -0.990847911636482000, -0.990854659548978000, -0.990861404984337390, -0.990868147942543410, +-0.990874888423578850, -0.990881626427427160, -0.990888361954071480, -0.990895095003494820, -0.990901825575680410, -0.990908553670611480, -0.990915279288271170, -0.990922002428642590, +-0.990928723091709100, -0.990935441277453700, -0.990942156985859750, -0.990948870216910360, -0.990955580970588890, -0.990962289246878350, -0.990968995045762190, -0.990975698367223550, +-0.990982399211245650, -0.990989097577811620, -0.990995793466905030, -0.991002486878508890, -0.991009177812606450, -0.991015866269181140, -0.991022552248216230, -0.991029235749694810, +-0.991035916773600370, -0.991042595319916120, -0.991049271388625420, -0.991055944979711610, -0.991062616093157820, -0.991069284728947510, -0.991075950887064020, -0.991082614567490580, +-0.991089275770210660, -0.991095934495207500, -0.991102590742464540, -0.991109244511965140, -0.991115895803692640, -0.991122544617630390, -0.991129190953761730, -0.991135834812070130, +-0.991142476192538810, -0.991149115095151470, -0.991155751519891330, -0.991162385466741740, -0.991169016935686260, -0.991175645926708150, -0.991182272439790960, -0.991188896474918150, +-0.991195518032073060, -0.991202137111239170, -0.991208753712399910, -0.991215367835538760, -0.991221979480639280, -0.991228588647684710, -0.991235195336658830, -0.991241799547544880, +-0.991248401280326430, -0.991255000534986940, -0.991261597311509980, -0.991268191609879110, -0.991274783430077690, -0.991281372772089280, -0.991287959635897440, -0.991294544021485760, +-0.991301125928837680, -0.991307705357936770, -0.991314282308766730, -0.991320856781310880, -0.991327428775552800, -0.991333998291476280, -0.991340565329064670, -0.991347129888301760, +-0.991353691969171000, -0.991360251571655970, -0.991366808695740230, -0.991373363341407580, -0.991379915508641570, -0.991386465197425680, -0.991393012407743580, -0.991399557139579060, +-0.991406099392915570, -0.991412639167736920, -0.991419176464026550, -0.991425711281768370, -0.991432243620945840, -0.991438773481542750, -0.991445300863542660, -0.991451825766929360, +-0.991458348191686540, -0.991464868137797770, -0.991471385605246840, -0.991477900594017410, -0.991484413104093300, -0.991490923135458170, -0.991497430688095700, -0.991503935761989590, +-0.991510438357123820, -0.991516938473481770, -0.991523436111047430, -0.991529931269804490, -0.991536423949736840, -0.991542914150827960, -0.991549401873061950, -0.991555887116422290, +-0.991562369880892970, -0.991568850166457790, -0.991575327973100440, -0.991581803300804810, -0.991588276149554580, -0.991594746519333660, -0.991601214410125940, -0.991607679821915220, +-0.991614142754685180, -0.991620603208419830, -0.991627061183103060, -0.991633516678718570, -0.991639969695250260, -0.991646420232682010, -0.991652868290997750, -0.991659313870181360, +-0.991665756970216640, -0.991672197591087600, -0.991678635732777920, -0.991685071395271730, -0.991691504578552930, -0.991697935282605300, -0.991704363507412870, -0.991710789252959410, +-0.991717212519229170, -0.991723633306205720, -0.991730051613873290, -0.991736467442215660, -0.991742880791216970, -0.991749291660861010, -0.991755700051131780, -0.991762105962013420, +-0.991768509393489710, -0.991774910345544770, -0.991781308818162510, -0.991787704811326940, -0.991794098325022190, -0.991800489359232150, -0.991806877913940950, -0.991813263989132500, +-0.991819647584790910, -0.991826028700900200, -0.991832407337444380, -0.991838783494407570, -0.991845157171773790, -0.991851528369527170, -0.991857897087651710, -0.991864263326131420, +-0.991870627084950550, -0.991876988364093100, -0.991883347163543210, -0.991889703483284980, -0.991896057323302440, -0.991902408683579710, -0.991908757564101020, -0.991915103964850390, +-0.991921447885812050, -0.991927789326970120, -0.991934128288308630, -0.991940464769811900, -0.991946798771463860, -0.991953130293248940, -0.991959459335151170, -0.991965785897154780, +-0.991972109979244010, -0.991978431581402860, -0.991984750703615580, -0.991991067345866510, -0.991997381508139760, -0.992003693190419590, -0.992010002392690100, -0.992016309114935660, +-0.992022613357140370, -0.992028915119288700, -0.992035214401364660, -0.992041511203352490, -0.992047805525236640, -0.992054097367001340, -0.992060386728630730, -0.992066673610109140, +-0.992072958011420810, -0.992079239932550210, -0.992085519373481440, -0.992091796334198860, -0.992098070814686820, -0.992104342814929650, -0.992110612334911490, -0.992116879374616900, +-0.992123143934030120, -0.992129406013135480, -0.992135665611917240, -0.992141922730359950, -0.992148177368447740, -0.992154429526165170, -0.992160679203496490, -0.992166926400426140, +-0.992173171116938480, -0.992179413353017850, -0.992185653108648700, -0.992191890383815390, -0.992198125178502370, -0.992204357492694090, -0.992210587326374900, -0.992216814679529270, +-0.992223039552141530, -0.992229261944196250, -0.992235481855677780, -0.992241699286570580, -0.992247914236859210, -0.992254126706528020, -0.992260336695561460, -0.992266544203944110, +-0.992272749231660420, -0.992278951778694850, -0.992285151845031850, -0.992291349430656000, -0.992297544535551750, -0.992303737159703660, -0.992309927303096310, -0.992316114965714040, +-0.992322300147541530, -0.992328482848563230, -0.992334663068763720, -0.992340840808127570, -0.992347016066639330, -0.992353188844283580, -0.992359359141044890, -0.992365526956907720, +-0.992371692291856730, -0.992377855145876510, -0.992384015518951720, -0.992390173411066830, -0.992396328822206520, -0.992402481752355350, -0.992408632201498000, -0.992414780169619150, +-0.992420925656703260, -0.992427068662735110, -0.992433209187699280, -0.992439347231580450, -0.992445482794363180, -0.992451615876032260, -0.992457746476572260, -0.992463874595967850, +-0.992470000234203840, -0.992476123391264790, -0.992482244067135480, -0.992488362261800480, -0.992494477975244700, -0.992500591207452600, -0.992506701958409070, -0.992512810228098790, +-0.992518916016506550, -0.992525019323616920, -0.992531120149414800, -0.992537218493884770, -0.992543314357011820, -0.992549407738780530, -0.992555498639175800, -0.992561587058182200, +-0.992567672995784740, -0.992573756451967990, -0.992579837426716960, -0.992585915920016220, -0.992591991931850770, -0.992598065462205410, -0.992604136511064720, -0.992610205078413800, +-0.992616271164237340, -0.992622334768520240, -0.992628395891247180, -0.992634454532403290, -0.992640510691973120, -0.992646564369941810, -0.992652615566294030, -0.992658664281014680, +-0.992664710514088670, -0.992670754265501000, -0.992676795535236360, -0.992682834323279640, -0.992688870629615970, -0.992694904454230030, -0.992700935797106940, -0.992706964658231380, +-0.992712991037588590, -0.992719014935163120, -0.992725036350940230, -0.992731055284904680, -0.992737071737041620, -0.992743085707335720, -0.992749097195772200, -0.992755106202335870, +-0.992761112727011840, -0.992767116769785020, -0.992773118330640410, -0.992779117409563040, -0.992785114006537790, -0.992791108121549800, -0.992797099754584080, -0.992803088905625520, +-0.992809075574659360, -0.992815059761670390, -0.992821041466643850, -0.992827020689564630, -0.992832997430417970, -0.992838971689188780, -0.992844943465862050, -0.992850912760423030, +-0.992856879572856730, -0.992862843903148270, -0.992868805751282670, -0.992874765117245150, -0.992880722001020620, -0.992886676402594310, -0.992892628321951240, -0.992898577759076640, +-0.992904524713955630, -0.992910469186573330, -0.992916411176914760, -0.992922350684965260, -0.992928287710709840, -0.992934222254133750, -0.992940154315221980, -0.992946083893960000, +-0.992952010990332700, -0.992957935604325330, -0.992963857735923220, -0.992969777385111390, -0.992975694551875180, -0.992981609236199710, -0.992987521438070230, -0.992993431157471960, +-0.992999338394390030, -0.993005243148809780, -0.993011145420716450, -0.993017045210095260, -0.993022942516931460, -0.993028837341210280, -0.993034729682917060, -0.993040619542037040, +-0.993046506918555340, -0.993052391812457520, -0.993058274223728610, -0.993064154152354050, -0.993070031598319190, -0.993075906561609160, -0.993081779042209290, -0.993087649040105160, +-0.993093516555281770, -0.993099381587724590, -0.993105244137418960, -0.993111104204350340, -0.993116961788503840, -0.993122816889864920, -0.993128669508419050, -0.993134519644151450, +-0.993140367297047580, -0.993146212467092780, -0.993152055154272410, -0.993157895358572020, -0.993163733079976740, -0.993169568318472250, -0.993175401074043780, -0.993181231346676800, +-0.993187059136356740, -0.993192884443069080, -0.993198707266799150, -0.993204527607532530, -0.993210345465254550, -0.993216160839950680, -0.993221973731606480, -0.993227784140207290, +-0.993233592065738580, -0.993239397508186020, -0.993245200467534840, -0.993251000943770720, -0.993256798936879130, -0.993262594446845500, -0.993268387473655420, -0.993274178017294340, +-0.993279966077747820, -0.993285751655001440, -0.993291534749040640, -0.993297315359851000, -0.993303093487418080, -0.993308869131727330, -0.993314642292764560, -0.993320412970515100, +-0.993326181164964630, -0.993331946876098710, -0.993337710103902930, -0.993343470848362830, -0.993349229109464100, -0.993354984887192320, -0.993360738181533030, -0.993366488992471930, +-0.993372237319994580, -0.993377983164086650, -0.993383726524733720, -0.993389467401921470, -0.993395205795635560, -0.993400941705861680, -0.993406675132585510, -0.993412406075792510, +-0.993418134535468570, -0.993423860511599250, -0.993429584004170360, -0.993435305013167460, -0.993441023538576330, -0.993446739580382650, -0.993452453138572000, -0.993458164213130380, +-0.993463872804043250, -0.993469578911296500, -0.993475282534875710, -0.993480983674766780, -0.993486682330955380, -0.993492378503427310, -0.993498072192168240, -0.993503763397163950, +-0.993509452118400360, -0.993515138355863140, -0.993520822109537960, -0.993526503379410840, -0.993532182165467350, -0.993537858467693490, -0.993543532286074950, -0.993549203620597620, +-0.993554872471247300, -0.993560538838009770, -0.993566202720870820, -0.993571864119816460, -0.993577523034832380, -0.993583179465904460, -0.993588833413018730, -0.993594484876160760, +-0.993600133855316650, -0.993605780350472310, -0.993611424361613320, -0.993617065888725890, -0.993622704931795830, -0.993628341490808920, -0.993633975565751170, -0.993639607156608480, +-0.993645236263366760, -0.993650862886012010, -0.993656487024530130, -0.993662108678906920, -0.993667727849128600, -0.993673344535180750, -0.993678958737049700, -0.993684570454721140, +-0.993690179688181300, -0.993695786437415850, -0.993701390702411040, -0.993706992483152750, -0.993712591779627010, -0.993718188591819710, -0.993723782919716970, -0.993729374763304700, +-0.993734964122569120, -0.993740550997496030, -0.993746135388071660, -0.993751717294281800, -0.993757296716112790, -0.993762873653550540, -0.993768448106581050, -0.993774020075190450, +-0.993779589559364740, -0.993785156559090170, -0.993790721074352620, -0.993796283105138340, -0.993801842651433230, -0.993807399713223630, -0.993812954290495540, -0.993818506383234990, +-0.993824055991428200, -0.993829603115061300, -0.993835147754120410, -0.993840689908591650, -0.993846229578461030, -0.993851766763715010, -0.993857301464339480, -0.993862833680320690, +-0.993868363411644860, -0.993873890658298120, -0.993879415420266590, -0.993884937697536610, -0.993890457490094300, -0.993895974797925800, -0.993901489621017320, -0.993907001959355110, +-0.993912511812925500, -0.993918019181714520, -0.993923524065708500, -0.993929026464893670, -0.993934526379256390, -0.993940023808782660, -0.993945518753458930, -0.993951011213271340, +-0.993956501188206330, -0.993961988678249920, -0.993967473683388670, -0.993972956203608700, -0.993978436238896370, -0.993983913789237890, -0.993989388854619630, -0.993994861435027910, +-0.994000331530449090, -0.994005799140869390, -0.994011264266275170, -0.994016726906652880, -0.994022187061988640, -0.994027644732269010, -0.994033099917480230, -0.994038552617608760, +-0.994044002832640940, -0.994049450562563000, -0.994054895807361500, -0.994060338567022810, -0.994065778841533130, -0.994071216630879160, -0.994076651935047020, -0.994082084754023380, +-0.994087515087794360, -0.994092942936346760, -0.994098368299666690, -0.994103791177740610, -0.994109211570555210, -0.994114629478096700, -0.994120044900351660, -0.994125457837306440, +-0.994130868288947590, -0.994136276255261690, -0.994141681736234960, -0.994147084731854090, -0.994152485242105530, -0.994157883266975630, -0.994163278806451170, -0.994168671860518380, +-0.994174062429164060, -0.994179450512374440, -0.994184836110136310, -0.994190219222436000, -0.994195599849260200, -0.994200977990595370, -0.994206353646428180, -0.994211726816745080, +-0.994217097501532530, -0.994222465700777440, -0.994227831414466020, -0.994233194642585080, -0.994238555385121180, -0.994243913642060880, -0.994249269413390760, -0.994254622699097480, +-0.994259973499167620, -0.994265321813587840, -0.994270667642344840, -0.994276010985425060, -0.994281351842815300, -0.994286690214502220, -0.994292026100472290, -0.994297359500712410, +-0.994302690415209020, -0.994308018843949040, -0.994313344786918910, -0.994318668244105420, -0.994323989215495360, -0.994329307701075190, -0.994334623700831810, -0.994339937214751890, +-0.994345248242822110, -0.994350556785029260, -0.994355862841360020, -0.994361166411801060, -0.994366467496339170, -0.994371766094961140, -0.994377062207653650, -0.994382355834403600, +-0.994387646975197660, -0.994392935630022510, -0.994398221798865060, -0.994403505481712080, -0.994408786678550370, -0.994414065389366610, -0.994419341614147690, -0.994424615352880510, +-0.994429886605551760, -0.994435155372148220, -0.994440421652656780, -0.994445685447064350, -0.994450946755357720, -0.994456205577523790, -0.994461461913549230, -0.994466715763421050, +-0.994471967127126040, -0.994477216004651220, -0.994482462395983260, -0.994487706301109160, -0.994492947720015840, -0.994498186652690070, -0.994503423099118880, -0.994508657059289150, +-0.994513888533187780, -0.994519117520801690, -0.994524344022117760, -0.994529568037123000, -0.994534789565804320, -0.994540008608148730, -0.994545225164143010, -0.994550439233774290, +-0.994555650817029460, -0.994560859913895530, -0.994566066524359420, -0.994571270648408110, -0.994576472286028750, -0.994581671437208100, -0.994586868101933310, -0.994592062280191260, +-0.994597253971969190, -0.994602443177253880, -0.994607629896032570, -0.994612814128292060, -0.994617995874019560, -0.994623175133202090, -0.994628351905826660, -0.994633526191880390, +-0.994638697991350300, -0.994643867304223490, -0.994649034130487000, -0.994654198470127810, -0.994659360323133290, -0.994664519689490320, -0.994669676569185920, -0.994674830962207550, +-0.994679982868541980, -0.994685132288176450, -0.994690279221098090, -0.994695423667294020, -0.994700565626751350, -0.994705705099457440, -0.994710842085399060, -0.994715976584563680, +-0.994721108596938410, -0.994726238122510260, -0.994731365161266590, -0.994736489713194500, -0.994741611778281240, -0.994746731356513810, -0.994751848447879670, -0.994756963052365830, +-0.994762075169959630, -0.994767184800648190, -0.994772291944418850, -0.994777396601258750, -0.994782498771155210, -0.994787598454095370, -0.994792695650066560, -0.994797790359055910, +-0.994802882581050980, -0.994807972316038680, -0.994813059564006560, -0.994818144324941640, -0.994823226598831490, -0.994828306385663220, -0.994833383685424290, -0.994838458498101820, +-0.994843530823683150, -0.994848600662155750, -0.994853668013506720, -0.994858732877723640, -0.994863795254793740, -0.994868855144704240, -0.994873912547442730, -0.994878967462996310, +-0.994884019891352560, -0.994889069832498700, -0.994894117286422300, -0.994899162253110480, -0.994904204732550810, -0.994909244724730520, -0.994914282229637290, -0.994919317247258240, +-0.994924349777580930, -0.994929379820592710, -0.994934407376281140, -0.994939432444633450, -0.994944455025637220, -0.994949475119279780, -0.994954492725548810, -0.994959507844431430, +-0.994964520475915440, -0.994969530619988050, -0.994974538276636840, -0.994979543445849380, -0.994984546127613000, -0.994989546321915160, -0.994994544028743540, -0.994999539248085600, +-0.995004531979928770, -0.995009522224260650, -0.995014509981068660, -0.995019495250340390, -0.995024478032063510, -0.995029458326225250, -0.995034436132813500, -0.995039411451815630, +-0.995044384283219170, -0.995049354627011720, -0.995054322483180930, -0.995059287851714380, -0.995064250732599630, -0.995069211125824140, -0.995074169031375690, -0.995079124449241850, +-0.995084077379410180, -0.995089027821868250, -0.995093975776603860, -0.995098921243604440, -0.995103864222857680, -0.995108804714351370, -0.995113742718073070, -0.995118678234010350, +-0.995123611262150880, -0.995128541802482450, -0.995133469854992620, -0.995138395419669200, -0.995143318496499730, -0.995148239085472010, -0.995153157186573600, -0.995158072799792400, +-0.995162985925115980, -0.995167896562532020, -0.995172804712028400, -0.995177710373592820, -0.995182613547212940, -0.995187514232876440, -0.995192412430571220, -0.995197308140284950, +-0.995202201362005430, -0.995207092095720340, -0.995211980341417560, -0.995216866099084880, -0.995221749368710000, -0.995226630150280680, -0.995231508443784940, -0.995236384249210350, +-0.995241257566544690, -0.995246128395776090, -0.995250996736891990, -0.995255862589880520, -0.995260725954729360, -0.995265586831426300, -0.995270445219959330, -0.995275301120316370, +-0.995280154532484970, -0.995285005456453260, -0.995289853892209030, -0.995294699839740170, -0.995299543299034580, -0.995304384270080170, -0.995309222752864710, -0.995314058747376220, +-0.995318892253602590, -0.995323723271531850, -0.995328551801151650, -0.995333377842450130, -0.995338201395415180, -0.995343022460034590, -0.995347841036296590, -0.995352657124188970, +-0.995357470723699620, -0.995362281834816680, -0.995367090457528030, -0.995371896591821680, -0.995376700237685540, -0.995381501395107620, -0.995386300064076020, -0.995391096244578550, +-0.995395889936603440, -0.995400681140138580, -0.995405469855172090, -0.995410256081691870, -0.995415039819686040, -0.995419821069142510, -0.995424599830049490, -0.995429376102395010, +-0.995434149886167070, -0.995438921181353690, -0.995443689987943080, -0.995448456305923270, -0.995453220135282260, -0.995457981476008170, -0.995462740328089240, -0.995467496691513350, +-0.995472250566268760, -0.995477001952343570, -0.995481750849725790, -0.995486497258403770, -0.995491241178365400, -0.995495982609598930, -0.995500721552092570, -0.995505458005834340, +-0.995510191970812470, -0.995514923447015200, -0.995519652434430520, -0.995524378933046790, -0.995529102942852020, -0.995533824463834540, -0.995538543495982590, -0.995543260039284170, +-0.995547974093727640, -0.995552685659301110, -0.995557394735992920, -0.995562101323791300, -0.995566805422684390, -0.995571507032660400, -0.995576206153707680, -0.995580902785814460, +-0.995585596928969090, -0.995590288583159570, -0.995594977748374350, -0.995599664424601680, -0.995604348611830000, -0.995609030310047330, -0.995613709519242000, -0.995618386239402580, +-0.995623060470517070, -0.995627732212573950, -0.995632401465561420, -0.995637068229468070, -0.995641732504281900, -0.995646394289991470, -0.995651053586585010, -0.995655710394050870, +-0.995660364712377510, -0.995665016541553260, -0.995669665881566470, -0.995674312732405480, -0.995678957094058740, -0.995683598966514590, -0.995688238349761390, -0.995692875243787690, +-0.995697509648581720, -0.995702141564132060, -0.995706770990427040, -0.995711397927455000, -0.995716022375204620, -0.995720644333664030, -0.995725263802821890, -0.995729880782666550, +-0.995734495273186580, -0.995739107274370320, -0.995743716786206320, -0.995748323808683060, -0.995752928341788970, -0.995757530385512510, -0.995762129939842260, -0.995766727004766650, +-0.995771321580274260, -0.995775913666353650, -0.995780503262993170, -0.995785090370181370, -0.995789674987906940, -0.995794257116158320, -0.995798836754923980, -0.995803413904192580, +-0.995807988563952700, -0.995812560734192780, -0.995817130414901500, -0.995821697606067420, -0.995826262307679010, -0.995830824519725040, -0.995835384242193980, -0.995839941475074370, +-0.995844496218355020, -0.995849048472024380, -0.995853598236071110, -0.995858145510483910, -0.995862690295251320, -0.995867232590361920, -0.995871772395804490, -0.995876309711567710, +-0.995880844537640030, -0.995885376874010350, -0.995889906720667130, -0.995894434077599260, -0.995898958944795190, -0.995903481322243820, -0.995908001209933720, -0.995912518607853570, +-0.995917033515992140, -0.995921545934338130, -0.995926055862880300, -0.995930563301607230, -0.995935068250507820, -0.995939570709570730, -0.995944070678784770, -0.995948568158138590, +-0.995953063147621000, -0.995957555647220660, -0.995962045656926590, -0.995966533176727230, -0.995971018206611710, -0.995975500746568490, -0.995979980796586670, -0.995984458356654830, +-0.995988933426761760, -0.995993406006896450, -0.995997876097047600, -0.996002343697204080, -0.996006808807354700, -0.996011271427488350, -0.996015731557593710, -0.996020189197659780, +-0.996024644347675460, -0.996029097007629430, -0.996033547177510690, -0.996037994857308040, -0.996042440047010480, -0.996046882746606800, -0.996051322956085890, -0.996055760675436660, +-0.996060195904648000, -0.996064628643708930, -0.996069058892608330, -0.996073486651334990, -0.996077911919877930, -0.996082334698226160, -0.996086754986368450, -0.996091172784293930, +-0.996095588091991500, -0.996100000909450060, -0.996104411236658600, -0.996108819073606160, -0.996113224420281610, -0.996117627276674080, -0.996122027642772470, -0.996126425518565670, +-0.996130820904042920, -0.996135213799193120, -0.996139604204005270, -0.996143992118468380, -0.996148377542571570, -0.996152760476303740, -0.996157140919654130, -0.996161518872611510, +-0.996165894335165230, -0.996170267307304070, -0.996174637789017380, -0.996179005780294060, -0.996183371281123220, -0.996187734291493880, -0.996192094811395260, -0.996196452840816480, +-0.996200808379746450, -0.996205161428174500, -0.996209511986089540, -0.996213860053480890, -0.996218205630337470, -0.996222548716648730, -0.996226889312403440, -0.996231227417591070, +-0.996235563032200510, -0.996239896156221110, -0.996244226789641970, -0.996248554932452230, -0.996252880584641120, -0.996257203746197750, -0.996261524417111470, -0.996265842597371390, +-0.996270158286966630, -0.996274471485886440, -0.996278782194120140, -0.996283090411656860, -0.996287396138485940, -0.996291699374596380, -0.996296000119977650, -0.996300298374618980, +-0.996304594138509470, -0.996308887411638590, -0.996313178193995340, -0.996317466485569290, -0.996321752286349450, -0.996326035596325270, -0.996330316415486080, -0.996334594743821020, +-0.996338870581319420, -0.996343143927970740, -0.996347414783764210, -0.996351683148689050, -0.996355949022734720, -0.996360212405890570, -0.996364473298145930, -0.996368731699490030, +-0.996372987609912220, -0.996377241029402060, -0.996381491957948780, -0.996385740395541730, -0.996389986342170350, -0.996394229797823990, -0.996398470762492110, -0.996402709236164030, +-0.996406945218829110, -0.996411178710476910, -0.996415409711096770, -0.996419638220678030, -0.996423864239210260, -0.996428087766682790, -0.996432308803085200, -0.996436527348406710, +-0.996440743402637000, -0.996444956965765290, -0.996449168037781270, -0.996453376618674390, -0.996457582708433990, -0.996461786307049740, -0.996465987414510870, -0.996470186030807170, +-0.996474382155927870, -0.996478575789862760, -0.996482766932601070, -0.996486955584132580, -0.996491141744446640, -0.996495325413532920, -0.996499506591380760, -0.996503685277979940, +-0.996507861473319820, -0.996512035177390180, -0.996516206390180350, -0.996520375111680010, -0.996524541341878730, -0.996528705080766190, -0.996532866328331710, -0.996537025084565210, +-0.996541181349456130, -0.996545335122994040, -0.996549486405168610, -0.996553635195969510, -0.996557781495386320, -0.996561925303408700, -0.996566066620026230, -0.996570205445228560, +-0.996574341779005390, -0.996578475621346490, -0.996582606972241210, -0.996586735831679560, -0.996590862199650980, -0.996594986076145380, -0.996599107461152210, -0.996603226354661250, +-0.996607342756662300, -0.996611456667144900, -0.996615568086098860, -0.996619677013513950, -0.996623783449379850, -0.996627887393686350, -0.996631988846423010, -0.996636087807579840, +-0.996640184277146290, -0.996644278255112370, -0.996648369741467750, -0.996652458736202230, -0.996656545239305470, -0.996660629250767480, -0.996664710770577830, -0.996668789798726420, +-0.996672866335203020, -0.996676940379997430, -0.996681011933099550, -0.996685080994499150, -0.996689147564186030, -0.996693211642150080, -0.996697273228380980, -0.996701332322868840, +-0.996705388925603230, -0.996709443036574270, -0.996713494655771640, -0.996717543783185330, -0.996721590418805040, -0.996725634562620870, -0.996729676214622610, -0.996733715374800160, +-0.996737752043143410, -0.996741786219642270, -0.996745817904286620, -0.996749847097066490, -0.996753873797971760, -0.996757898006992330, -0.996761919724118210, -0.996765938949339180, +-0.996769955682645370, -0.996773969924026560, -0.996777981673472980, -0.996781990930974420, -0.996785997696520760, -0.996790001970102260, -0.996794003751708680, -0.996798003041330040, +-0.996801999838956450, -0.996805994144577930, -0.996809985958184370, -0.996813975279765780, -0.996817962109312280, -0.996821946446813880, -0.996825928292260690, -0.996829907645642610, +-0.996833884506949760, -0.996837858876172270, -0.996841830753300020, -0.996845800138323250, -0.996849767031231960, -0.996853731432016280, -0.996857693340666320, -0.996861652757172090, +-0.996865609681523710, -0.996869564113711300, -0.996873516053724980, -0.996877465501554870, -0.996881412457191090, -0.996885356920623860, -0.996889298891843080, -0.996893238370839210, +-0.996897175357602140, -0.996901109852122210, -0.996905041854389440, -0.996908971364394160, -0.996912898382126380, -0.996916822907576330, -0.996920744940734240, -0.996924664481590340, +-0.996928581530134750, -0.996932496086357700, -0.996936408150249420, -0.996940317721800030, -0.996944224800999980, -0.996948129387839280, -0.996952031482308270, -0.996955931084397280, +-0.996959828194096340, -0.996963722811395890, -0.996967614936286160, -0.996971504568757270, -0.996975391708799790, -0.996979276356403710, -0.996983158511559500, -0.996987038174257380, +-0.996990915344487580, -0.996994790022240560, -0.996998662207506550, -0.997002531900275990, -0.997006399100539010, -0.997010263808286060, -0.997014126023507360, -0.997017985746193490, +-0.997021842976334560, -0.997025697713921020, -0.997029549958943220, -0.997033399711391600, -0.997037246971256510, -0.997041091738528280, -0.997044934013197270, -0.997048773795253920, +-0.997052611084688680, -0.997056445881491890, -0.997060278185654010, -0.997064107997165490, -0.997067935316016560, -0.997071760142197890, -0.997075582475699830, -0.997079402316512820, +-0.997083219664627210, -0.997087034520033670, -0.997090846882722430, -0.997094656752684160, -0.997098464129909210, -0.997102269014388030, -0.997106071406111290, -0.997109871305069340, +-0.997113668711252730, -0.997117463624651920, -0.997121256045257480, -0.997125045973059840, -0.997128833408049700, -0.997132618350217380, -0.997136400799553460, -0.997140180756048710, +-0.997143958219693370, -0.997147733190478110, -0.997151505668393610, -0.997155275653430430, -0.997159043145578900, -0.997162808144829830, -0.997166570651173760, -0.997170330664601150, +-0.997174088185102780, -0.997177843212669220, -0.997181595747291040, -0.997185345788958900, -0.997189093337663370, -0.997192838393395120, -0.997196580956144720, -0.997200321025902950, +-0.997204058602660260, -0.997207793686407550, -0.997211526277135270, -0.997215256374834210, -0.997218983979495040, -0.997222709091108330, -0.997226431709664960, -0.997230151835155400, +-0.997233869467570530, -0.997237584606900930, -0.997241297253137370, -0.997245007406270640, -0.997248715066291310, -0.997252420233190270, -0.997256122906958200, -0.997259823087585760, +-0.997263520775063750, -0.997267215969382950, -0.997270908670534140, -0.997274598878508000, -0.997278286593295430, -0.997281971814887090, -0.997285654543273890, -0.997289334778446500, +-0.997293012520395820, -0.997296687769112510, -0.997300360524587590, -0.997304030786811730, -0.997307698555775720, -0.997311363831470570, -0.997315026613886930, -0.997318686903015840, +-0.997322344698847950, -0.997326000001374170, -0.997329652810585500, -0.997333303126472610, -0.997336950949026410, -0.997340596278238010, -0.997344239114097970, -0.997347879456597420, +-0.997351517305727020, -0.997355152661478010, -0.997358785523841050, -0.997362415892807050, -0.997366043768367130, -0.997369669150512060, -0.997373292039232750, -0.997376912434520310, +-0.997380530336365530, -0.997384145744759530, -0.997387758659693090, -0.997391369081157220, -0.997394977009142920, -0.997398582443641210, -0.997402185384643090, -0.997405785832139460, +-0.997409383786121320, -0.997412979246579790, -0.997416572213505770, -0.997420162686890380, -0.997423750666724510, -0.997427336152999280, -0.997430919145705810, -0.997434499644834880, +-0.997438077650377840, -0.997441653162325580, -0.997445226180669110, -0.997448796705399650, -0.997452364736508110, -0.997455930273985820, -0.997459493317823580, -0.997463053868012590, +-0.997466611924544000, -0.997470167487408910, -0.997473720556598440, -0.997477271132103600, -0.997480819213915510, -0.997484364802025510, -0.997487907896424500, -0.997491448497103810, +-0.997494986604054450, -0.997498522217267650, -0.997502055336734530, -0.997505585962446210, -0.997509114094394020, -0.997512639732568980, -0.997516162876962320, -0.997519683527565370, +-0.997523201684369140, -0.997526717347364870, -0.997530230516543880, -0.997533741191897310, -0.997537249373416370, -0.997540755061092300, -0.997544258254916330, -0.997547758954879680, +-0.997551257160973700, -0.997554752873189510, -0.997558246091518550, -0.997561736815951840, -0.997565225046480930, -0.997568710783096830, -0.997572194025791000, -0.997575674774554670, +-0.997579153029379160, -0.997582628790255830, -0.997586102057175910, -0.997589572830130720, -0.997593041109111510, -0.997596506894109840, -0.997599970185116810, -0.997603430982123900, +-0.997606889285122420, -0.997610345094103620, -0.997613798409059060, -0.997617249229979960, -0.997620697556857780, -0.997624143389683860, -0.997627586728449530, -0.997631027573146260, +-0.997634465923765370, -0.997637901780298430, -0.997641335142736560, -0.997644766011071550, -0.997648194385294510, -0.997651620265397000, -0.997655043651370480, -0.997658464543206280, +-0.997661882940895970, -0.997665298844431000, -0.997668712253802710, -0.997672123169002670, -0.997675531590022310, -0.997678937516853100, -0.997682340949486600, -0.997685741887914150, +-0.997689140332127410, -0.997692536282117850, -0.997695929737876910, -0.997699320699396150, -0.997702709166667150, -0.997706095139681340, -0.997709478618430180, -0.997712859602905460, +-0.997716238093098620, -0.997719614089001010, -0.997722987590604520, -0.997726358597900490, -0.997729727110880590, -0.997733093129536400, -0.997736456653859460, -0.997739817683841350, +-0.997743176219473730, -0.997746532260748160, -0.997749885807656220, -0.997753236860189570, -0.997756585418339890, -0.997759931482098740, -0.997763275051457680, -0.997766616126408600, +-0.997769954706942850, -0.997773290793052210, -0.997776624384728360, -0.997779955481962970, -0.997783284084747700, -0.997786610193074130, -0.997789933806934150, -0.997793254926319320, +-0.997796573551221310, -0.997799889681631800, -0.997803203317542690, -0.997806514458945530, -0.997809823105832110, -0.997813129258194100, -0.997816432916023290, -0.997819734079311350, +-0.997823032748050180, -0.997826328922231330, -0.997829622601846600, -0.997832913786887990, -0.997836202477346950, -0.997839488673215480, -0.997842772374485270, -0.997846053581148080, +-0.997849332293195830, -0.997852608510620190, -0.997855882233413150, -0.997859153461566280, -0.997862422195071600, -0.997865688433920760, -0.997868952178105780, -0.997872213427618450, +-0.997875472182450540, -0.997878728442593950, -0.997881982208040470, -0.997885233478782220, -0.997888482254810750, -0.997891728536118070, -0.997894972322696080, -0.997898213614536680, +-0.997901452411631750, -0.997904688713973200, -0.997907922521552910, -0.997911153834362800, -0.997914382652394850, -0.997917608975640970, -0.997920832804092940, -0.997924054137742990, +-0.997927272976582790, -0.997930489320604460, -0.997933703169799900, -0.997936914524161000, -0.997940123383679880, -0.997943329748348430, -0.997946533618158770, -0.997949734993102690, +-0.997952933873172190, -0.997956130258359500, -0.997959324148656400, -0.997962515544055020, -0.997965704444547350, -0.997968890850125410, -0.997972074760781200, -0.997975256176506840, +-0.997978435097294450, -0.997981611523135800, -0.997984785454023250, -0.997987956889948680, -0.997991125830904210, -0.997994292276881970, -0.997997456227873950, -0.998000617683872270, +-0.998003776644869060, -0.998006933110856420, -0.998010087081826480, -0.998013238557771350, -0.998016387538683050, -0.998019534024553790, -0.998022678015375700, -0.998025819511141000, +-0.998028958511841590, -0.998032095017469920, -0.998035229028018000, -0.998038360543477940, -0.998041489563841980, -0.998044616089102330, -0.998047740119251130, -0.998050861654280590, +-0.998053980694182940, -0.998057097238950310, -0.998060211288574920, -0.998063322843048990, -0.998066431902364770, -0.998069538466514470, -0.998072642535490330, -0.998075744109284570, +-0.998078843187889420, -0.998081939771297220, -0.998085033859500200, -0.998088125452490480, -0.998091214550260620, -0.998094301152802510, -0.998097385260108830, -0.998100466872171580, +-0.998103545988983210, -0.998106622610535950, -0.998109696736822150, -0.998112768367834140, -0.998115837503564140, -0.998118904144004620, -0.998121968289147790, -0.998125029938986110, +-0.998128089093511690, -0.998131145752717220, -0.998134199916594800, -0.998137251585136890, -0.998140300758335930, -0.998143347436184160, -0.998146391618673910, -0.998149433305797860, +-0.998152472497548130, -0.998155509193917270, -0.998158543394897620, -0.998161575100481540, -0.998164604310661560, -0.998167631025430160, -0.998170655244779550, -0.998173676968702410, +-0.998176696197191070, -0.998179712930237990, -0.998182727167835520, -0.998185738909976310, -0.998188748156652820, -0.998191754907857390, -0.998194759163582580, -0.998197760923820840, +-0.998200760188564740, -0.998203756957806720, -0.998206751231539350, -0.998209743009755070, -0.998212732292446340, -0.998215719079605930, -0.998218703371226090, -0.998221685167299590, +-0.998224664467818880, -0.998227641272776520, -0.998230615582164970, -0.998233587395976900, -0.998236556714204970, -0.998239523536841530, -0.998242487863879370, -0.998245449695310930, +-0.998248409031128880, -0.998251365871325790, -0.998254320215894330, -0.998257272064827060, -0.998260221418116540, -0.998263168275755560, -0.998266112637736570, -0.998269054504052340, +-0.998271993874695560, -0.998274930749658670, -0.998277865128934460, -0.998280797012515710, -0.998283726400394870, -0.998286653292564720, -0.998289577689017940, -0.998292499589747200, +-0.998295418994745280, -0.998298335904004740, -0.998301250317518480, -0.998304162235278960, -0.998307071657279050, -0.998309978583511560, -0.998312883013969030, -0.998315784948644370, +-0.998318684387530130, -0.998321581330619210, -0.998324475777904400, -0.998327367729378360, -0.998330257185033990, -0.998333144144863850, -0.998336028608860950, -0.998338910577017960, +-0.998341790049327660, -0.998344667025782840, -0.998347541506376390, -0.998350413491101100, -0.998353282979949850, -0.998356149972915330, -0.998359014469990420, -0.998361876471168030, +-0.998364735976440820, -0.998367592985801910, -0.998370447499243970, -0.998373299516759900, -0.998376149038342600, -0.998378996063984840, -0.998381840593679740, -0.998384682627419970, +-0.998387522165198440, -0.998390359207008140, -0.998393193752841970, -0.998396025802692820, -0.998398855356553590, -0.998401682414417180, -0.998404506976276580, -0.998407329042124810, +-0.998410148611954540, -0.998412965685759100, -0.998415780263531170, -0.998418592345263760, -0.998421401930949860, -0.998424209020582490, -0.998427013614154530, -0.998429815711659120, +-0.998432615313089130, -0.998435412418437580, -0.998438207027697590, -0.998440999140862040, -0.998443788757923940, -0.998446575878876420, -0.998449360503712470, -0.998452142632425100, +-0.998454922265007320, -0.998457699401452240, -0.998460474041752980, -0.998463246185902540, -0.998466015833893940, -0.998468782985720280, -0.998471547641374800, -0.998474309800850280, +-0.998477069464140050, -0.998479826631237240, -0.998482581302134740, -0.998485333476825780, -0.998488083155303570, -0.998490830337561140, -0.998493575023591600, -0.998496317213388160, +-0.998499056906943850, -0.998501794104251990, -0.998504528805305600, -0.998507261010097900, -0.998509990718622010, -0.998512717930871150, -0.998515442646838560, -0.998518164866517340, +-0.998520884589900630, -0.998523601816981850, -0.998526316547753920, -0.998529028782210280, -0.998531738520344050, -0.998534445762148560, -0.998537150507616820, -0.998539852756742290, +-0.998542552509518070, -0.998545249765937500, -0.998547944525993820, -0.998550636789680260, -0.998553326556990140, -0.998556013827916700, -0.998558698602453170, -0.998561380880592870, +-0.998564060662329170, -0.998566737947655380, -0.998569412736564630, -0.998572085029050480, -0.998574754825106050, -0.998577422124724670, -0.998580086927899790, -0.998582749234624760, +-0.998585409044892790, -0.998588066358697350, -0.998590721176031650, -0.998593373496889150, -0.998596023321263290, -0.998598670649147310, -0.998601315480534770, -0.998603957815418770, +-0.998606597653793000, -0.998609234995650690, -0.998611869840985380, -0.998614502189790310, -0.998617132042058930, -0.998619759397784800, -0.998622384256961260, -0.998625006619581760, +-0.998627626485639740, -0.998630243855128660, -0.998632858728041970, -0.998635471104373120, -0.998638080984115660, -0.998640688367262940, -0.998643293253808520, -0.998645895643745840, +-0.998648495537068360, -0.998651092933769750, -0.998653687833843340, -0.998656280237282810, -0.998658870144081500, -0.998661457554232970, -0.998664042467730880, -0.998666624884568700, +-0.998669204804739860, -0.998671782228238050, -0.998674357155056810, -0.998676929585189720, -0.998679499518630220, -0.998682066955371980, -0.998684631895408680, -0.998687194338733650, +-0.998689754285340680, -0.998692311735223440, -0.998694866688375260, -0.998697419144790040, -0.998699969104461240, -0.998702516567382400, -0.998705061533547430, -0.998707604002949670, +-0.998710143975583000, -0.998712681451440990, -0.998715216430517190, -0.998717748912805400, -0.998720278898299170, -0.998722806386992400, -0.998725331378878420, -0.998727853873951240, +-0.998730373872204420, -0.998732891373631640, -0.998735406378226550, -0.998737918885983070, -0.998740428896894740, -0.998742936410955350, -0.998745441428158690, -0.998747943948498310, +-0.998750443971968100, -0.998752941498561750, -0.998755436528273140, -0.998757929061095840, -0.998760419097023840, -0.998762906636050720, -0.998765391678170360, -0.998767874223376430, +-0.998770354271662940, -0.998772831823023450, -0.998775306877451970, -0.998777779434942170, -0.998780249495487940, -0.998782717059083060, -0.998785182125721430, -0.998787644695396830, +-0.998790104768103150, -0.998792562343834180, -0.998795017422583810, -0.998797470004345820, -0.998799920089114220, -0.998802367676882910, -0.998804812767645540, -0.998807255361396250, +-0.998809695458128700, -0.998812133057837000, -0.998814568160514950, -0.998817000766156540, -0.998819430874755550, -0.998821858486306000, -0.998824283600801780, -0.998826706218236880, +-0.998829126338605210, -0.998831543961900660, -0.998833959088117340, -0.998836371717249150, -0.998838781849289980, -0.998841189484233840, -0.998843594622074730, -0.998845997262806650, +-0.998848397406423620, -0.998850795052919520, -0.998853190202288470, -0.998855582854524470, -0.998857973009621420, -0.998860360667573550, -0.998862745828374640, -0.998865128492019030, +-0.998867508658500490, -0.998869886327813260, -0.998872261499951230, -0.998874634174908630, -0.998877004352679340, -0.998879372033257610, -0.998881737216637420, -0.998884099902812910, +-0.998886460091778170, -0.998888817783527230, -0.998891172978054300, -0.998893525675353390, -0.998895875875418730, -0.998898223578244320, -0.998900568783824380, -0.998902911492153050, +-0.998905251703224310, -0.998907589417032620, -0.998909924633571870, -0.998912257352836290, -0.998914587574820100, -0.998916915299517430, -0.998919240526922380, -0.998921563257029410, +-0.998923883489832410, -0.998926201225325720, -0.998928516463503560, -0.998930829204360050, -0.998933139447889530, -0.998935447194086110, -0.998937752442944140, -0.998940055194457720, +-0.998942355448621200, -0.998944653205428800, -0.998946948464874750, -0.998949241226953390, -0.998951531491658830, -0.998953819258985520, -0.998956104528927580, -0.998958387301479460, +-0.998960667576635260, -0.998962945354389450, -0.998965220634736360, -0.998967493417670100, -0.998969763703185240, -0.998972031491275890, -0.998974296781936390, -0.998976559575161290, +-0.998978819870944720, -0.998981077669281130, -0.998983332970164730, -0.998985585773590090, -0.998987836079551550, -0.998990083888043330, -0.998992329199059890, -0.998994572012595670, +-0.998996812328645010, -0.998999050147202360, -0.999001285468262060, -0.999003518291818550, -0.999005748617866170, -0.999007976446399490, -0.999010201777412840, -0.999012424610900780, +-0.999014644946857540, -0.999016862785277790, -0.999019078126155760, -0.999021290969486110, -0.999023501315263300, -0.999025709163481550, -0.999027914514135640, -0.999030117367220030, +-0.999032317722729050, -0.999034515580657260, -0.999036710940999110, -0.999038903803749270, -0.999041094168902190, -0.999043282036452320, -0.999045467406394330, -0.999047650278722550, +-0.999049830653431780, -0.999052008530516340, -0.999054183909970920, -0.999056356791789950, -0.999058527175968210, -0.999060695062500060, -0.999062860451380260, -0.999065023342603280, +-0.999067183736163770, -0.999069341632056180, -0.999071497030275310, -0.999073649930815710, -0.999075800333672050, -0.999077948238838780, -0.999080093646310670, -0.999082236556082300, +-0.999084376968148450, -0.999086514882503550, -0.999088650299142400, -0.999090783218059660, -0.999092913639249900, -0.999095041562707900, -0.999097166988428210, -0.999099289916405730, +-0.999101410346634910, -0.999103528279110640, -0.999105643713827480, -0.999107756650780330, -0.999109867089963740, -0.999111975031372390, -0.999114080475001280, -0.999116183420844850, +-0.999118283868897890, -0.999120381819155300, -0.999122477271611850, -0.999124570226262110, -0.999126660683100960, -0.999128748642123090, -0.999130834103323480, -0.999132917066696710, +-0.999134997532237670, -0.999137075499941130, -0.999139150969801880, -0.999141223941814700, -0.999143294415974600, -0.999145362392276140, -0.999147427870714310, -0.999149490851284020, +-0.999151551333979930, -0.999153609318796930, -0.999155664805729930, -0.999157717794773690, -0.999159768285923230, -0.999161816279173330, -0.999163861774518990, -0.999165904771954880, +-0.999167945271476010, -0.999169983273077380, -0.999172018776753660, -0.999174051782499960, -0.999176082290311070, -0.999178110300182110, -0.999180135812107740, -0.999182158826083080, +-0.999184179342103020, -0.999186197360162560, -0.999188212880256610, -0.999190225902380050, -0.999192236426527990, -0.999194244452695330, -0.999196249980876970, -0.999198253011068130, +-0.999200253543263580, -0.999202251577458340, -0.999204247113647530, -0.999206240151826130, -0.999208230691989160, -0.999210218734131520, -0.999212204278248420, -0.999214187324334760, +-0.999216167872385540, -0.999218145922395990, -0.999220121474361120, -0.999222094528275930, -0.999224065084135530, -0.999226033141934810, -0.999227998701669230, -0.999229961763333450, +-0.999231922326922930, -0.999233880392432550, -0.999235835959857430, -0.999237789029192690, -0.999239739600433550, -0.999241687673575020, -0.999243633248612320, -0.999245576325540560, +-0.999247516904354760, -0.999249454985050240, -0.999251390567622020, -0.999253323652065430, -0.999255254238375470, -0.999257182326547370, -0.999259107916576240, -0.999261031008457420, +-0.999262951602186030, -0.999264869697757300, -0.999266785295166330, -0.999268698394408460, -0.999270608995478820, -0.999272517098372610, -0.999274422703085090, -0.999276325809611570, +-0.999278226417947280, -0.999280124528087340, -0.999282020140027090, -0.999283913253761870, -0.999285803869286780, -0.999287691986597280, -0.999289577605688480, -0.999291460726555720, +-0.999293341349194340, -0.999295219473599560, -0.999297095099766830, -0.999298968227691260, -0.999300838857368310, -0.999302706988793310, -0.999304572621961480, -0.999306435756868280, +-0.999308296393508930, -0.999310154531878880, -0.999312010171973350, -0.999313863313787910, -0.999315713957317770, -0.999317562102558400, -0.999319407749505010, -0.999321250898153160, +-0.999323091548498190, -0.999324929700535550, -0.999326765354260460, -0.999328598509668600, -0.999330429166755190, -0.999332257325515670, -0.999334082985945500, -0.999335906148040130, +-0.999337726811795000, -0.999339544977205560, -0.999341360644267260, -0.999343173812975550, -0.999344984483325980, -0.999346792655313900, -0.999348598328934750, -0.999350401504184190, +-0.999352202181057690, -0.999354000359550580, -0.999355796039658520, -0.999357589221376960, -0.999359379904701360, -0.999361168089627380, -0.999362953776150480, -0.999364736964266200, +-0.999366517653970110, -0.999368295845257660, -0.999370071538124520, -0.999371844732566130, -0.999373615428578170, -0.999375383626156190, -0.999377149325295750, -0.999378912525992420, +-0.999380673228241760, -0.999382431432039530, -0.999384187137381090, -0.999385940344262310, -0.999387691052678660, -0.999389439262625690, -0.999391184974099180, -0.999392928187094690, +-0.999394668901607890, -0.999396407117634440, -0.999398142835170030, -0.999399876054210100, -0.999401606774750650, -0.999403334996787130, -0.999405060720315210, -0.999406783945330670, +-0.999408504671829180, -0.999410222899806410, -0.999411938629258150, -0.999413651860179940, -0.999415362592567690, -0.999417070826416950, -0.999418776561723620, -0.999420479798483250, +-0.999422180536691850, -0.999423878776344870, -0.999425574517438190, -0.999427267759967600, -0.999428958503928880, -0.999430646749317700, -0.999432332496129950, -0.999434015744361300, +-0.999435696494007650, -0.999437374745064780, -0.999439050497528460, -0.999440723751394590, -0.999442394506658840, -0.999444062763317100, -0.999445728521365150, -0.999447391780798890, +-0.999449052541614200, -0.999450710803806870, -0.999452366567372800, -0.999454019832307860, -0.999455670598607740, -0.999457318866268540, -0.999458964635285940, -0.999460607905656050, +-0.999462248677374540, -0.999463886950437420, -0.999465522724840680, -0.999467156000580000, -0.999468786777651500, -0.999470415056051050, -0.999472040835774570, -0.999473664116817930, +-0.999475284899177140, -0.999476903182848210, -0.999478518967826910, -0.999480132254109480, -0.999481743041691570, -0.999483351330569310, -0.999484957120738700, -0.999486560412195750, +-0.999488161204936330, -0.999489759498956580, -0.999491355294252370, -0.999492948590819830, -0.999494539388654850, -0.999496127687753530, -0.999497713488111890, -0.999499296789726040, +-0.999500877592591870, -0.999502455896705500, -0.999504031702063030, -0.999505605008660480, -0.999507175816493950, -0.999508744125559460, -0.999510309935853100, -0.999511873247371010, +-0.999513434060109170, -0.999514992374063720, -0.999516548189230860, -0.999518101505606600, -0.999519652323187070, -0.999521200641968480, -0.999522746461946830, -0.999524289783118250, +-0.999525830605479060, -0.999527368929025270, -0.999528904753753000, -0.999530438079658580, -0.999531968906737900, -0.999533497234987410, -0.999535023064403230, -0.999536546394981350, +-0.999538067226718230, -0.999539585559609870, -0.999541101393652600, -0.999542614728842540, -0.999544125565175910, -0.999545633902649060, -0.999547139741258080, -0.999548643080999220, +-0.999550143921868810, -0.999551642263862950, -0.999553138106978100, -0.999554631451210260, -0.999556122296555990, -0.999557610643011300, -0.999559096490572620, -0.999560579839236300, +-0.999562060688998440, -0.999563539039855400, -0.999565014891803600, -0.999566488244839180, -0.999567959098958570, -0.999569427454158000, -0.999570893310434030, -0.999572356667782660, +-0.999573817526200450, -0.999575275885683730, -0.999576731746228850, -0.999578185107832030, -0.999579635970489820, -0.999581084334198570, -0.999582530198954490, -0.999583973564754150, +-0.999585414431593880, -0.999586852799470020, -0.999588288668379120, -0.999589722038317420, -0.999591152909281470, -0.999592581281267600, -0.999594007154272270, -0.999595430528292030, +-0.999596851403323110, -0.999598269779362060, -0.999599685656405330, -0.999601099034449380, -0.999602509913490760, -0.999603918293525790, -0.999605324174551060, -0.999606727556563100, +-0.999608128439558150, -0.999609526823532990, -0.999610922708484060, -0.999612316094407700, -0.999613706981300590, -0.999615095369159270, -0.999616481257980190, -0.999617864647759920, +-0.999619245538494900, -0.999620623930181810, -0.999621999822817190, -0.999623373216397600, -0.999624744110919510, -0.999626112506379560, -0.999627478402774330, -0.999628841800100480, +-0.999630202698354450, -0.999631561097532930, -0.999632916997632570, -0.999634270398649830, -0.999635621300581480, -0.999636969703423970, -0.999638315607174200, -0.999639659011828500, +-0.999640999917383750, -0.999642338323836420, -0.999643674231183280, -0.999645007639420990, -0.999646338548546120, -0.999647666958555450, -0.999648992869445530, -0.999650316281213260, +-0.999651637193855080, -0.999652955607367890, -0.999654271521748240, -0.999655584936993020, -0.999656895853098800, -0.999658204270062250, -0.999659510187880240, -0.999660813606549460, +-0.999662114526066680, -0.999663412946428580, -0.999664708867632030, -0.999666002289673620, -0.999667293212550210, -0.999668581636258600, -0.999669867560795460, -0.999671150986157660, +-0.999672431912342120, -0.999673710339345380, -0.999674986267164440, -0.999676259695795990, -0.999677530625236900, -0.999678799055483960, -0.999680064986533940, -0.999681328418383860, +-0.999682589351030490, -0.999683847784470610, -0.999685103718701120, -0.999686357153718900, -0.999687608089520730, -0.999688856526103510, -0.999690102463464240, -0.999691345901599690, +-0.999692586840506770, -0.999693825280182360, -0.999695061220623350, -0.999696294661826750, -0.999697525603789440, -0.999698754046508320, -0.999699979989980280, -0.999701203434202210, +-0.999702424379171230, -0.999703642824884220, -0.999704858771337970, -0.999706072218529700, -0.999707283166456180, -0.999708491615114550, -0.999709697564501560, -0.999710901014614350, +-0.999712101965450020, -0.999713300417005240, -0.999714496369277340, -0.999715689822263220, -0.999716880775959770, -0.999718069230364210, -0.999719255185473440, -0.999720438641284570, +-0.999721619597794490, -0.999722798055000420, -0.999723974012899360, -0.999725147471488440, -0.999726318430764540, -0.999727486890724990, -0.999728652851366580, -0.999729816312686540, +-0.999730977274682080, -0.999732135737350090, -0.999733291700687810, -0.999734445164692230, -0.999735596129360580, -0.999736744594689860, -0.999737890560677410, -0.999739034027320230, +-0.999740174994615320, -0.999741313462560120, -0.999742449431151540, -0.999743582900386900, -0.999744713870263310, -0.999745842340777900, -0.999746968311927890, -0.999748091783710490, +-0.999749212756122830, -0.999750331229162130, -0.999751447202825600, -0.999752560677110490, -0.999753671652013900, -0.999754780127533270, -0.999755886103665500, -0.999756989580408150, +-0.999758090557758330, -0.999759189035713260, -0.999760285014270170, -0.999761378493426500, -0.999762469473179260, -0.999763557953525890, -0.999764643934463630, -0.999765727415989680, +-0.999766808398101500, -0.999767886880796320, -0.999768962864071350, -0.999770036347924050, -0.999771107332351530, -0.999772175817351340, -0.999773241802920710, -0.999774305289056970, +-0.999775366275757470, -0.999776424763019530, -0.999777480750840610, -0.999778534239217920, -0.999779585228148800, -0.999780633717630930, -0.999781679707661300, -0.999782723198237580, +-0.999783764189356990, -0.999784802681016990, -0.999785838673215020, -0.999786872165948410, -0.999787903159214620, -0.999788931653011080, -0.999789957647335250, -0.999790981142184560, +-0.999792002137556370, -0.999793020633448100, -0.999794036629857330, -0.999795050126781490, -0.999796061124218040, -0.999797069622164410, -0.999798075620618180, -0.999799079119576660, +-0.999800080119037430, -0.999801078618998140, -0.999802074619456030, -0.999803068120408760, -0.999804059121853770, -0.999805047623788750, -0.999806033626211010, -0.999807017129118240, +-0.999807998132507980, -0.999808976636377580, -0.999809952640724810, -0.999810926145547230, -0.999811897150842290, -0.999812865656607540, -0.999813831662840660, -0.999814795169539310, +-0.999815756176700820, -0.999816714684322980, -0.999817670692403460, -0.999818624200939590, -0.999819575209929260, -0.999820523719370020, -0.999821469729259450, -0.999822413239595200, +-0.999823354250374830, -0.999824292761596230, -0.999825228773256750, -0.999826162285354260, -0.999827093297886440, -0.999828021810850840, -0.999828947824245140, -0.999829871338067110, +-0.999830792352314310, -0.999831710866984640, -0.999832626882075640, -0.999833540397585100, -0.999834451413510790, -0.999835359929850180, -0.999836265946601240, -0.999837169463761670, +-0.999838070481329220, -0.999838968999301470, -0.999839865017676410, -0.999840758536451600, -0.999841649555624930, -0.999842538075194190, -0.999843424095157030, -0.999844307615511350, +-0.999845188636254930, -0.999846067157385440, -0.999846943178900880, -0.999847816700798920, -0.999848687723077440, -0.999849556245734240, -0.999850422268767080, -0.999851285792173970, +-0.999852146815952580, -0.999853005340100800, -0.999853861364616510, -0.999854714889497620, -0.999855565914742010, -0.999856414440347340, -0.999857260466311740, -0.999858103992632860, +-0.999858945019308830, -0.999859783546337420, -0.999860619573716520, -0.999861453101444140, -0.999862284129518050, -0.999863112657936370, -0.999863938686696760, -0.999864762215797340, +-0.999865583245236110, -0.999866401775010850, -0.999867217805119560, -0.999868031335560240, -0.999868842366330890, -0.999869650897429410, -0.999870456928853790, -0.999871260460602040, +-0.999872061492672160, -0.999872860025062040, -0.999873656057769900, -0.999874449590793520, -0.999875240624131020, -0.999876029157780510, -0.999876815191739880, -0.999877598726007120, +-0.999878379760580470, -0.999879158295457810, -0.999879934330637270, -0.999880707866116940, -0.999881478901894830, -0.999882247437969050, -0.999883013474337610, -0.999883777010998620, +-0.999884538047950190, -0.999885296585190430, -0.999886052622717350, -0.999886806160529270, -0.999887557198624100, -0.999888305737000050, -0.999889051775655240, -0.999889795314587880, +-0.999890536353795880, -0.999891274893277670, -0.999892010933031260, -0.999892744473054760, -0.999893475513346400, -0.999894204053904390, -0.999894930094726850, -0.999895653635812010, +-0.999896374677157970, -0.999897093218763080, -0.999897809260625440, -0.999898522802743160, -0.999899233845114700, -0.999899942387738160, -0.999900648430611770, -0.999901351973733640, +-0.999902053017102220, -0.999902751560715730, -0.999903447604572280, -0.999904141148670210, -0.999904832193007740, -0.999905520737583320, -0.999906206782394950, -0.999906890327441180, +-0.999907571372720130, -0.999908249918230130, -0.999908925963969630, -0.999909599509936740, -0.999910270556129800, -0.999910939102547250, -0.999911605149187310, -0.999912268696048320, +-0.999912929743128730, -0.999913588290426870, -0.999914244337940960, -0.999914897885669450, -0.999915548933610680, -0.999916197481763080, -0.999916843530124890, -0.999917487078694660, +-0.999918128127470720, -0.999918766676451520, -0.999919402725635290, -0.999920036275020570, -0.999920667324605830, -0.999921295874389380, -0.999921921924369680, -0.999922545474545180, +-0.999923166524914420, -0.999923785075475640, -0.999924401126227380, -0.999925014677168100, -0.999925625728296350, -0.999926234279610580, -0.999926840331109120, -0.999927443882790650, +-0.999928044934653480, -0.999928643486696300, -0.999929239538917440, -0.999929833091315450, -0.999930424143888890, -0.999931012696636310, -0.999931598749556280, -0.999932182302647130, +-0.999932763355907530, -0.999933341909336030, -0.999933917962931180, -0.999934491516691560, -0.999935062570615710, -0.999935631124702300, -0.999936197178949660, -0.999936760733356580, +-0.999937321787921610, -0.999937880342643300, -0.999938436397520340, -0.999938989952551260, -0.999939541007734740, -0.999940089563069350, -0.999940635618553620, -0.999941179174186460, +-0.999941720229966300, -0.999942258785891820, -0.999942794841961690, -0.999943328398174680, -0.999943859454529240, -0.999944388011024140, -0.999944914067658170, -0.999945437624429780, +-0.999945958681337840, -0.999946477238381040, -0.999946993295558140, -0.999947506852867600, -0.999948017910308410, -0.999948526467879020, -0.999949032525578430, -0.999949536083405310, +-0.999950037141358220, -0.999950535699436150, -0.999951031757637670, -0.999951525315961650, -0.999952016374406780, -0.999952504932971830, -0.999952990991655690, -0.999953474550457130, +-0.999953955609374720, -0.999954434168407570, -0.999954910227554230, -0.999955383786813700, -0.999955854846184660, -0.999956323405665980, -0.999956789465256570, -0.999957253024955080, +-0.999957714084760530, -0.999958172644671680, -0.999958628704687440, -0.999959082264806560, -0.999959533325027960, -0.999959981885350510, -0.999960427945773220, -0.999960871506294760, +-0.999961312566914230, -0.999961751127630310, -0.999962187188441990, -0.999962620749348270, -0.999963051810348060, -0.999963480371440120, -0.999963906432623560, -0.999964329993897170, +-0.999964751055259950, -0.999965169616710890, -0.999965585678248890, -0.999965999239872950, -0.999966410301581950, -0.999966818863375020, -0.999967224925250920, -0.999967628487208880, +-0.999968029549247680, -0.999968428111366440, -0.999968824173564140, -0.999969217735839800, -0.999969608798192410, -0.999969997360620980, -0.999970383423124500, -0.999970766985702090, +-0.999971148048352850, -0.999971526611075690, -0.999971902673869710, -0.999972276236733900, -0.999972647299667510, -0.999973015862669400, -0.999973381925738810, -0.999973745488874850, +-0.999974106552076410, -0.999974465115342710, -0.999974821178672870, -0.999975174742065990, -0.999975525805521180, -0.999975874369037570, -0.999976220432614250, -0.999976563996250340, +-0.999976905059945080, -0.999977243623697550, -0.999977579687506890, -0.999977913251372310, -0.999978244315292920, -0.999978572879267950, -0.999978898943296500, -0.999979222507377810, +-0.999979543571511090, -0.999979862135695450, -0.999980178199930240, -0.999980491764214550, -0.999980802828547620, -0.999981111392928670, -0.999981417457357020, -0.999981721021831800, +-0.999982022086352230, -0.999982320650917630, -0.999982616715527240, -0.999982910280180270, -0.999983201344876060, -0.999983489909613830, -0.999983775974392920, -0.999984059539212540, +-0.999984340604071930, -0.999984619168970630, -0.999984895233907660, -0.999985168798882550, -0.999985439863894430, -0.999985708428942740, -0.999985974494026710, -0.999986238059145880, +-0.999986499124299380, -0.999986757689486640, -0.999987013754707000, -0.999987267319959790, -0.999987518385244470, -0.999987766950560350, -0.999988013015906780, -0.999988256581283210, +-0.999988497646689070, -0.999988736212123590, -0.999988972277586320, -0.999989205843076490, -0.999989436908593770, -0.999989665474137480, -0.999989891539706970, -0.999990115105301780, +-0.999990336170921260, -0.999990554736564840, -0.999990770802232090, -0.999990984367922440, -0.999991195433635350, -0.999991403999370140, -0.999991610065126600, -0.999991813630903950, +-0.999992014696701740, -0.999992213262519520, -0.999992409328356760, -0.999992602894212990, -0.999992793960087670, -0.999992982525980460, -0.999993168591890690, -0.999993352157818040, +-0.999993533223762050, -0.999993711789722180, -0.999993887855698090, -0.999994061421689230, -0.999994232487695140, -0.999994401053715620, -0.999994567119749990, -0.999994730685798030, +-0.999994891751859180, -0.999995050317933120, -0.999995206384019400, -0.999995359950117680, -0.999995511016227630, -0.999995659582348710, -0.999995805648480670, -0.999995949214623090, +-0.999996090280775740, -0.999996228846938060, -0.999996364913109840, -0.999996498479290730, -0.999996629545480410, -0.999996758111678430, -0.999996884177884570, -0.999997007744098500, +-0.999997128810319990, -0.999997247376548600, -0.999997363442784120, -0.999997477009026190, -0.999997588075274610, -0.999997696641529040, -0.999997802707789150, -0.999997906274054830, +-0.999998007340325730, -0.999998105906601650, -0.999998201972882250, -0.999998295539167410, -0.999998386605456810, -0.999998475171750220, -0.999998561238047420, -0.999998644804348300, +-0.999998725870652530, -0.999998804436959880, -0.999998880503270350, -0.999998954069583500, -0.999999025135899330, -0.999999093702217620, -0.999999159768538040, -0.999999223334860690, +-0.999999284401185240, -0.999999342967511580, -0.999999399033839610, -0.999999452600169090, -0.999999503666499920, -0.999999552232832100, -0.999999598299165290, -0.999999641865499500, +-0.999999682931834610, -0.999999721498170510, -0.999999757564507100, -0.999999791130844360, -0.999999822197182090, -0.999999850763520270, -0.999999876829858910, -0.999999900396197680, +-0.999999921462536800, -0.999999940028876160, -0.999999956095215640, -0.999999969661555240, -0.999999980727894870, -0.999999989294234610, -0.999999995360574270, -0.999999998926914050, +-0.999999999993253730, -0.999999998559593540, -0.999999994625933250, -0.999999988192273090, -0.999999979258612840, -0.999999967824952710, -0.999999953891292590, -0.999999937457632600, +-0.999999918523972850, -0.999999897090313230, -0.999999873156653950, -0.999999846722994910, -0.999999817789336220, -0.999999786355678100, -0.999999752422020440, -0.999999715988363350, +-0.999999677054707050, -0.999999635621051540, -0.999999591687396940, -0.999999545253743350, -0.999999496320091000, -0.999999444886439770, -0.999999390952790000, -0.999999334519141690, +-0.999999275585495170, -0.999999214151850340, -0.999999150218207510, -0.999999083784566810, -0.999999014850928350, -0.999998943417292450, -0.999998869483659130, -0.999998793050028700, +-0.999998714116401180, -0.999998632682777000, -0.999998548749156170, -0.999998462315538910, -0.999998373381925540, -0.999998281948316300, -0.999998188014711300, -0.999998091581110860, +-0.999997992647515100, -0.999997891213924460, -0.999997787280339060, -0.999997680846759220, -0.999997571913185170, -0.999997460479617130, -0.999997346546055540, -0.999997230112500520, +-0.999997111178952400, -0.999996989745411510, -0.999996865811878190, -0.999996739378352760, -0.999996610444835340, -0.999996479011326490, -0.999996345077826420, -0.999996208644335470, +-0.999996069710853970, -0.999995928277382370, -0.999995784343920890, -0.999995637910470080, -0.999995488977030060, -0.999995337543601260, -0.999995183610184250, -0.999995027176779240, +-0.999994868243386570, -0.999994706810006790, -0.999994542876640360, -0.999994376443287370, -0.999994207509948610, -0.999994036076624290, -0.999993862143314760, -0.999993685710020670, +-0.999993506776742370, -0.999993325343480290, -0.999993141410234990, -0.999992954977006690, -0.999992766043796060, -0.999992574610603540, -0.999992380677429570, -0.999992184244274610, +-0.999991985311139310, -0.999991783878023900, -0.999991579944929150, -0.999991373511855300, -0.999991164578803100, -0.999990953145773020, -0.999990739212765600, -0.999990522779781290, +-0.999990303846820640, -0.999990082413884210, -0.999989858480972550, -0.999989632048086330, -0.999989403115225990, -0.999989171682392210, -0.999988937749585420, -0.999988701316806280, +-0.999988462384055480, -0.999988220951333440, -0.999987977018640840, -0.999987730585978340, -0.999987481653346500, -0.999987230220745980, -0.999986976288177340, -0.999986719855641360, +-0.999986460923138480, -0.999986199490669470, -0.999985935558234900, -0.999985669125835640, -0.999985400193472040, -0.999985128761145090, -0.999984854828855240, -0.999984578396603260, +-0.999984299464389830, -0.999984018032215700, -0.999983734100081460, -0.999983447667987970, -0.999983158735935800, -0.999982867303925720, -0.999982573371958510, -0.999982276940034830, +-0.999981978008155470, -0.999981676576321200, -0.999981372644532680, -0.999981066212790700, -0.999980757281096140, -0.999980445849449670, -0.999980131917852070, -0.999979815486304210, +-0.999979496554806670, -0.999979175123360540, -0.999978851191966390, -0.999978524760625100, -0.999978195829337560, -0.999977864398104430, -0.999977530466926720, -0.999977194035805210, +-0.999976855104740660, -0.999976513673733970, -0.999976169742786030, -0.999975823311897600, -0.999975474381069710, -0.999975122950303110, -0.999974769019598700, -0.999974412588957250, +-0.999974053658379880, -0.999973692227867360, -0.999973328297420690, -0.999972961867040540, -0.999972592936728130, -0.999972221506484130, -0.999971847576309640, -0.999971471146205550, +-0.999971092216172750, -0.999970710786212250, -0.999970326856324920, -0.999969940426511770, -0.999969551496773800, -0.999969160067111900, -0.999968766137527170, -0.999968369708020500, +-0.999967970778592900, -0.999967569349245360, -0.999967165419978990, -0.999966758990794570, -0.999966350061693320, -0.999965938632676240, -0.999965524703744220, -0.999965108274898480, +-0.999964689346139910, -0.999964267917469620, -0.999963843988888710, -0.999963417560398080, -0.999962988631999060, -0.999962557203692430, -0.999962123275479510, -0.999961686847361200, +-0.999961247919338710, -0.999960806491413170, -0.999960362563585560, -0.999959916135857000, -0.999959467208228700, -0.999959015780701680, -0.999958561853277140, -0.999958105425956200, +-0.999957646498740080, -0.999957185071629780, -0.999956721144626530, -0.999956254717731420, -0.999955785790945680, -0.999955314364270540, -0.999954840437707100, -0.999954364011256480, +-0.999953885084920000, -0.999953403658698890, -0.999952919732594150, -0.999952433306607210, -0.999951944380739090, -0.999951452954991220, -0.999950959029364590, -0.999950462603860670, +-0.999949963678480550, -0.999949462253225560, -0.999948958328096830, -0.999948451903095780, -0.999947942978223540, -0.999947431553481540, -0.999946917628870890, -0.999946401204392930, +-0.999945882280048990, -0.999945360855840400, -0.999944836931768390, -0.999944310507834170, -0.999943781584039290, -0.999943250160384990, -0.999942716236872480, -0.999942179813503200, +-0.999941640890278480, -0.999941099467199670, -0.999940555544268080, -0.999940009121485060, -0.999939460198852050, -0.999938908776370480, -0.999938354854041590, -0.999937798431866810, +-0.999937239509847480, -0.999936678087985030, -0.999936114166281030, -0.999935547744736590, -0.999934978823353360, -0.999934407402132690, -0.999933833481076010, -0.999933257060184770, +-0.999932678139460300, -0.999932096718904150, -0.999931512798517770, -0.999930926378302610, -0.999930337458260210, -0.999929746038391910, -0.999929152118699260, -0.999928555699183710, +-0.999927956779846800, -0.999927355360689880, -0.999926751441714720, -0.999926145022922650, -0.999925536104315120, -0.999924924685893890, -0.999924310767660310, -0.999923694349615920, +-0.999923075431762290, -0.999922454014100960, -0.999921830096633490, -0.999921203679361550, -0.999920574762286460, -0.999919943345410010, -0.999919309428733750, -0.999918673012259120, +-0.999918034095987780, -0.999917392679921520, -0.999916748764061670, -0.999916102348409890, -0.999915453432967950, -0.999914802017737410, -0.999914148102719720, -0.999913491687916770, +-0.999912832773330100, -0.999912171358961270, -0.999911507444812050, -0.999910841030884120, -0.999910172117179030, -0.999909500703698550, -0.999908826790444240, -0.999908150377417980, +-0.999907471464621220, -0.999906790052055850, -0.999906106139723530, -0.999905419727625810, -0.999904730815764700, -0.999904039404141740, -0.999903345492758610, -0.999902649081617190, +-0.999901950170719030, -0.999901248760066140, -0.999900544849660070, -0.999899838439502590, -0.999899129529595590, -0.999898418119940740, -0.999897704210539810, -0.999896987801394690, +-0.999896268892507050, -0.999895547483878660, -0.999894823575511520, -0.999894097167407290, -0.999893368259567870, -0.999892636851994920, -0.999891902944690440, -0.999891166537656200, +-0.999890427630894090, -0.999889686224405880, -0.999888942318193360, -0.999888195912258640, -0.999887447006603370, -0.999886695601229450, -0.999885941696138760, -0.999885185291333300, +-0.999884426386814850, -0.999883664982585300, -0.999882901078646640, -0.999882134675000640, -0.999881365771649430, -0.999880594368594780, -0.999879820465838560, -0.999879044063382790, +-0.999878265161229460, -0.999877483759380570, -0.999876699857837780, -0.999875913456603320, -0.999875124555679170, -0.999874333155067130, -0.999873539254769180, -0.999872742854787440, +-0.999871943955123910, -0.999871142555780470, -0.999870338656759120, -0.999869532258061970, -0.999868723359691010, -0.999867911961648260, -0.999867098063935700, -0.999866281666555450, +-0.999865462769509380, -0.999864641372799730, -0.999863817476428500, -0.999862991080397670, -0.999862162184709360, -0.999861330789365680, -0.999860496894368620, -0.999859660499720420, +-0.999858821605422940, -0.999857980211478540, -0.999857136317889080, -0.999856289924656800, -0.999855441031783810, -0.999854589639272210, -0.999853735747124220, -0.999852879355341840, +-0.999852020463927180, -0.999851159072882580, -0.999850295182210020, -0.999849428791911740, -0.999848559901989840, -0.999847688512446650, -0.999846814623284170, -0.999845938234504630, +-0.999845059346110340, -0.999844177958103320, -0.999843294070485890, -0.999842407683260160, -0.999841518796428460, -0.999840627409993020, -0.999839733523955940, -0.999838837138319560, +-0.999837938253086090, -0.999837036868257760, -0.999836132983836780, -0.999835226599825600, -0.999834317716226220, -0.999833406333041070, -0.999832492450272500, -0.999831576067922610, +-0.999830657185993840, -0.999829735804488420, -0.999828811923408560, -0.999827885542756810, -0.999826956662535290, -0.999826025282746330, -0.999825091403392370, -0.999824155024475640, +-0.999823216145998560, -0.999822274767963480, -0.999821330890372620, -0.999820384513228520, -0.999819435636533420, -0.999818484260289630, -0.999817530384499720, -0.999816574009166010, +-0.999815615134290850, -0.999814653759876660, -0.999813689885925780, -0.999812723512440770, -0.999811754639423840, -0.999810783266877670, -0.999809809394804460, -0.999808833023206670, +-0.999807854152086840, -0.999806872781447420, -0.999805888911290740, -0.999804902541619470, -0.999803913672435820, -0.999802922303742460, -0.999801928435541720, -0.999800932067836160, +-0.999799933200628320, -0.999798931833920660, -0.999797927967715610, -0.999796921602015830, -0.999795912736823670, -0.999794901372141780, -0.999793887507972600, -0.999792871144318700, +-0.999791852281182610, -0.999790830918566910, -0.999789807056474130, -0.999788780694906840, -0.999787751833867590, -0.999786720473359040, -0.999785686613383630, -0.999784650253943920, +-0.999783611395042680, -0.999782570036682360, -0.999781526178865730, -0.999780479821595120, -0.999779430964873430, -0.999778379608703190, -0.999777325753086870, -0.999776269398027330, +-0.999775210543527030, -0.999774149189588850, -0.999773085336215120, -0.999772018983408840, -0.999770950131172450, -0.999769878779508630, -0.999768804928420130, -0.999767728577909740, +-0.999766649727979910, -0.999765568378633510, -0.999764484529873100, -0.999763398181701570, -0.999762309334121470, -0.999761217987135690, -0.999760124140746780, -0.999759027794957620, +-0.999757928949770890, -0.999756827605189360, -0.999755723761215690, -0.999754617417852760, -0.999753508575103260, -0.999752397232969940, -0.999751283391455690, -0.999750167050563300, +-0.999749048210295420, -0.999747926870654830, -0.999746803031644540, -0.999745676693267190, -0.999744547855525690, -0.999743416518422800, -0.999742282681961410, -0.999741146346144300, +-0.999740007510974250, -0.999738866176454240, -0.999737722342587070, -0.999736576009375600, -0.999735427176822730, -0.999734275844931240, -0.999733122013704010, -0.999731965683144040, +-0.999730806853254110, -0.999729645524037200, -0.999728481695496220, -0.999727315367633930, -0.999726146540453440, -0.999724975213957530, -0.999723801388149200, -0.999722625063031440, +-0.999721446238607040, -0.999720264914878980, -0.999719081091850370, -0.999717894769524000, -0.999716705947902850, -0.999715514626990040, -0.999714320806788350, -0.999713124487300870, +-0.999711925668530620, -0.999710724350480580, -0.999709520533153650, -0.999708314216552930, -0.999707105400681530, -0.999705894085542220, -0.999704680271138240, -0.999703463957472670, +-0.999702245144548310, -0.999701023832368360, -0.999699800020935840, -0.999698573710253830, -0.999697344900325360, -0.999696113591153620, -0.999694879782741520, -0.999693643475092260, +-0.999692404668208860, -0.999691163362094400, -0.999689919556752130, -0.999688673252185020, -0.999687424448396200, -0.999686173145388880, -0.999684919343166060, -0.999683663041731060, +-0.999682404241086790, -0.999681142941236560, -0.999679879142183370, -0.999678612843930670, -0.999677344046481230, -0.999676072749838610, -0.999674798954005680, -0.999673522658985790, +-0.999672243864782150, -0.999670962571397870, -0.999669678778836170, -0.999668392487100270, -0.999667103696193380, -0.999665812406118850, -0.999664518616879660, -0.999663222328479150, +-0.999661923540920650, -0.999660622254207380, -0.999659318468342440, -0.999658012183329280, -0.999656703399171120, -0.999655392115871180, -0.999654078333432670, -0.999652762051859050, +-0.999651443271153520, -0.999650121991319420, -0.999648798212359970, -0.999647471934278500, -0.999646143157078340, -0.999644811880762930, -0.999643478105335380, -0.999642141830799140, +-0.999640803057157630, -0.999639461784414100, -0.999638118012571850, -0.999636771741634340, -0.999635422971604900, -0.999634071702486860, -0.999632717934283650, -0.999631361666998730, +-0.999630002900635310, -0.999628641635196940, -0.999627277870686950, -0.999625911607108790, -0.999624542844465780, -0.999623171582761480, -0.999621797821999230, -0.999620421562182560, +-0.999619042803314710, -0.999617661545399330, -0.999616277788439760, -0.999614891532439540, -0.999613502777402020, -0.999612111523330850, -0.999610717770229360, -0.999609321518101000, +-0.999607922766949430, -0.999606521516777980, -0.999605117767590310, -0.999603711519389760, -0.999602302772179980, -0.999600891525964430, -0.999599477780746650, -0.999598061536530190, +-0.999596642793318610, -0.999595221551115350, -0.999593797809924080, -0.999592371569748340, -0.999590942830591580, -0.999589511592457570, -0.999588077855349750, -0.999586641619271690, +-0.999585202884227030, -0.999583761650219450, -0.999582317917252380, -0.999580871685329500, -0.999579422954454460, -0.999577971724630920, -0.999576517995862450, -0.999575061768152580, +-0.999573603041505110, -0.999572141815923690, -0.999570678091411870, -0.999569211867973430, -0.999567743145611810, -0.999566271924330900, -0.999564798204134350, -0.999563321985025840, +-0.999561843267008920, -0.999560362050087470, -0.999558878334265040, -0.999557392119545530, -0.999555903405932370, -0.999554412193429550, -0.999552918482040750, -0.999551422271769630, +-0.999549923562619960, -0.999548422354595400, -0.999546918647699840, -0.999545412441936950, -0.999543903737310610, -0.999542392533824490, -0.999540878831482350, -0.999539362630287980, +-0.999537843930245250, -0.999536322731357950, -0.999534799033629740, -0.999533272837064610, -0.999531744141666230, -0.999530212947438600, -0.999528679254385380, -0.999527143062510450, +-0.999525604371817700, -0.999524063182310910, -0.999522519493993960, -0.999520973306870730, -0.999519424620945010, -0.999517873436220780, -0.999516319752701940, -0.999514763570392150, +-0.999513204889295510, -0.999511643709415920, -0.999510080030757140, -0.999508513853323290, -0.999506945177118020, -0.999505374002145450, -0.999503800328409350, -0.999502224155913830, +-0.999500645484662780, -0.999499064314660070, -0.999497480645909710, -0.999495894478415690, -0.999494305812181900, -0.999492714647212340, -0.999491120983511010, -0.999489524821081890, +-0.999487926159928870, -0.999486325000056080, -0.999484721341467490, -0.999483115184167100, -0.999481506528158930, -0.999479895373447060, -0.999478281720035390, -0.999476665567927910, +-0.999475046917128850, -0.999473425767642200, -0.999471802119472060, -0.999470175972622330, -0.999468547327097110, -0.999466916182900620, -0.999465282540036750, -0.999463646398509710, +-0.999462007758323610, -0.999460366619482340, -0.999458722981990340, -0.999457076845851390, -0.999455428211069810, -0.999453777077649710, -0.999452123445595090, -0.999450467314910160, +-0.999448808685599150, -0.999447147557666060, -0.999445483931115100, -0.999443817805950370, -0.999442149182176220, -0.999440478059796520, -0.999438804438815830, -0.999437128319238030, +-0.999435449701067350, -0.999433768584308100, -0.999432084968964520, -0.999430398855040590, -0.999428710242540760, -0.999427019131469140, -0.999425325521829940, -0.999423629413627390, +-0.999421930806865810, -0.999420229701549420, -0.999418526097682450, -0.999416819995269210, -0.999415111394313830, -0.999413400294820730, -0.999411686696794140, -0.999409970600238280, +-0.999408252005157480, -0.999406530911556180, -0.999404807319438370, -0.999403081228808720, -0.999401352639671230, -0.999399621552030440, -0.999397887965890570, -0.999396151881255970, +-0.999394413298131060, -0.999392672216520060, -0.999390928636427310, -0.999389182557857360, -0.999387433980814420, -0.999385682905302830, -0.999383929331327030, -0.999382173258891560, +-0.999380414688000540, -0.999378653618658410, -0.999376890050869830, -0.999375123984638900, -0.999373355419970190, -0.999371584356868130, -0.999369810795337040, -0.999368034735381380, +-0.999366256177005810, -0.999364475120214420, -0.999362691565012010, -0.999360905511402780, -0.999359116959391280, -0.999357325908981960, -0.999355532360179380, -0.999353736312987960, +-0.999351937767412160, -0.999350136723456520, -0.999348333181125590, -0.999346527140423820, -0.999344718601355760, -0.999342907563925850, -0.999341094028138640, -0.999339277993998800, +-0.999337459461510650, -0.999335638430678960, -0.999333814901508080, -0.999331988874002760, -0.999330160348167350, -0.999328329324006610, -0.999326495801525110, -0.999324659780727260, +-0.999322821261617760, -0.999320980244201240, -0.999319136728482270, -0.999317290714465510, -0.999315442202155510, -0.999313591191556830, -0.999311737682674230, -0.999309881675512270, +-0.999308023170075610, -0.999306162166368920, -0.999304298664396850, -0.999302432664163960, -0.999300564165675030, -0.999298693168934600, -0.999296819673947570, -0.999294943680718360, +-0.999293065189251870, -0.999291184199552760, -0.999289300711625690, -0.999287414725475220, -0.999285526241106340, -0.999283635258523590, -0.999281741777731880, -0.999279845798735630, +-0.999277947321539850, -0.999276046346149190, -0.999274142872568440, -0.999272236900802360, -0.999270328430855610, -0.999268417462733090, -0.999266503996439570, -0.999264588031979710, +-0.999262669569358390, -0.999260748608580500, -0.999258825149650590, -0.999256899192573660, -0.999254970737354590, -0.999253039783997930, -0.999251106332508800, -0.999249170382891850, +-0.999247231935151970, -0.999245290989294040, -0.999243347545322850, -0.999241401603243260, -0.999239453163060290, -0.999237502224778580, -0.999235548788403150, -0.999233592853938870, +-0.999231634421390510, -0.999229673490763190, -0.999227710062061570, -0.999225744135290750, -0.999223775710455510, -0.999221804787560950, -0.999219831366611740, -0.999217855447613100, +-0.999215877030569690, -0.999213896115486610, -0.999211912702368870, -0.999209926791221340, -0.999207938382048910, -0.999205947474856690, -0.999203954069649570, -0.999201958166432540, +-0.999199959765210700, -0.999197958865988940, -0.999195955468772270, -0.999193949573565670, -0.999191941180374240, -0.999189930289202890, -0.999187916900056820, -0.999185901012940910, +-0.999183882627860290, -0.999181861744819930, -0.999179838363824850, -0.999177812484880250, -0.999175784107991130, -0.999173753233162490, -0.999171719860399540, -0.999169683989707180, +-0.999167645621090730, -0.999165604754555070, -0.999163561390105540, -0.999161515527747010, -0.999159467167484610, -0.999157416309323640, -0.999155362953269120, -0.999153307099326260, +-0.999151248747500050, -0.999149187897795720, -0.999147124550218370, -0.999145058704773330, -0.999142990361465590, -0.999140919520300370, -0.999138846181282900, -0.999136770344418170, +-0.999134692009711610, -0.999132611177168340, -0.999130527846793570, -0.999128442018592410, -0.999126353692570190, -0.999124262868732020, -0.999122169547083330, -0.999120073727629120, +-0.999117975410374730, -0.999115874595325360, -0.999113771282486350, -0.999111665471862920, -0.999109557163460280, -0.999107446357283880, -0.999105333053338710, -0.999103217251630320, +-0.999101098952163810, -0.999098978154944530, -0.999096854859977900, -0.999094729067269150, -0.999092600776823490, -0.999090469988646370, -0.999088336702743000, -0.999086200919118930, +-0.999084062637779270, -0.999081921858729460, -0.999079778581974830, -0.999077632807520710, -0.999075484535372650, -0.999073333765535750, -0.999071180498015580, -0.999069024732817450, +-0.999066866469946690, -0.999064705709408860, -0.999062542451209290, -0.999060376695353300, -0.999058208441846340, -0.999056037690693950, -0.999053864441901360, -0.999051688695474120, +-0.999049510451417770, -0.999047329709737530, -0.999045146470439070, -0.999042960733527610, -0.999040772499008910, -0.999038581766888200, -0.999036388537171030, -0.999034192809862830, +-0.999031994584969270, -0.999029793862495570, -0.999027590642447500, -0.999025384924830510, -0.999023176709649910, -0.999020965996911480, -0.999018752786620560, -0.999016537078782800, +-0.999014318873403750, -0.999012098170488750, -0.999009874970043680, -0.999007649272073750, -0.999005421076584850, -0.999003190383582320, -0.999000957193071800, -0.998998721505058970, +-0.998996483319549270, -0.998994242636548350, -0.998991999456061870, -0.998989753778095400, -0.998987505602654480, -0.998985254929744880, -0.998983001759372050, -0.998980746091541860, +-0.998978487926259650, -0.998976227263531300, -0.998973964103362370, -0.998971698445758500, -0.998969430290725380, -0.998967159638268760, -0.998964886488394210, -0.998962610841107380, +-0.998960332696414150, -0.998958052054319980, -0.998955768914830730, -0.998953483277951970, -0.998951195143689570, -0.998948904512049210, -0.998946611383036640, -0.998944315756657430, +-0.998942017632917460, -0.998939717011822490, -0.998937413893378200, -0.998935108277590360, -0.998932800164464730, -0.998930489554007090, -0.998928176446223340, -0.998925860841119010, +-0.998923542738700100, -0.998921222138972280, -0.998918899041941530, -0.998916573447613420, -0.998914245355993930, -0.998911914767088850, -0.998909581680903940, -0.998907246097445080, +-0.998904908016718050, -0.998902567438728850, -0.998900224363483140, -0.998897878790986900, -0.998895530721246040, -0.998893180154266200, -0.998890827090053500, -0.998888471528613820, +-0.998886113469952820, -0.998883752914076610, -0.998881389860991060, -0.998879024310701970, -0.998876656263215310, -0.998874285718536980, -0.998871912676672970, -0.998869537137629270, +-0.998867159101411660, -0.998864778568026130, -0.998862395537478690, -0.998860010009775200, -0.998857621984921670, -0.998855231462924210, -0.998852838443788580, -0.998850442927520900, +-0.998848044914127040, -0.998845644403613120, -0.998843241395985130, -0.998840835891248950, -0.998838427889410800, -0.998836017390476450, -0.998833604394452120, -0.998831188901343810, +-0.998828770911157520, -0.998826350423899220, -0.998823927439575040, -0.998821501958191190, -0.998819073979753450, -0.998816643504268130, -0.998814210531741130, -0.998811775062178550, +-0.998809337095586610, -0.998806896631971310, -0.998804453671338850, -0.998802008213695140, -0.998799560259046480, -0.998797109807398890, -0.998794656858758460, -0.998792201413131520, +-0.998789743470523960, -0.998787283030942110, -0.998784820094392070, -0.998782354660879950, -0.998779886730411960, -0.998777416302994210, -0.998774943378632930, -0.998772467957334320, +-0.998769990039104600, -0.998767509623949780, -0.998765026711876280, -0.998762541302890110, -0.998760053396997690, -0.998757562994205150, -0.998755070094518580, -0.998752574697944430, +-0.998750076804488800, -0.998747576414158010, -0.998745073526958290, -0.998742568142895860, -0.998740060261977040, -0.998737549884208040, -0.998735037009595210, -0.998732521638144740, +-0.998730003769862980, -0.998727483404756140, -0.998724960542830660, -0.998722435184092760, -0.998719907328548870, -0.998717376976205110, -0.998714844127067900, -0.998712308781143590, +-0.998709770938438600, -0.998707230598959050, -0.998704687762711480, -0.998702142429702230, -0.998699594599937620, -0.998697044273423980, -0.998694491450167750, -0.998691936130175260, +-0.998689378313452950, -0.998686818000007250, -0.998684255189844490, -0.998681689882971010, -0.998679122079393360, -0.998676551779117960, -0.998673978982151040, -0.998671403688499270, +-0.998668825898168970, -0.998666245611166680, -0.998663662827498740, -0.998661077547171590, -0.998658489770191780, -0.998655899496565750, -0.998653306726299930, -0.998650711459400870, +-0.998648113695875030, -0.998645513435728940, -0.998642910678969040, -0.998640305425601780, -0.998637697675633930, -0.998635087429071700, -0.998632474685921760, -0.998629859446190760, +-0.998627241709884930, -0.998624621477011140, -0.998621998747575730, -0.998619373521585360, -0.998616745799046470, -0.998614115579965820, -0.998611482864349860, -0.998608847652205140, +-0.998606209943538330, -0.998603569738356070, -0.998600927036664810, -0.998598281838471210, -0.998595634143781940, -0.998592983952603650, -0.998590331264942790, -0.998587676080806120, +-0.998585018400200310, -0.998582358223131910, -0.998579695549607680, -0.998577030379634190, -0.998574362713218090, -0.998571692550366040, -0.998569019891084820, -0.998566344735381080, +-0.998563667083261500, -0.998560986934732610, -0.998558304289801410, -0.998555619148474350, -0.998552931510758300, -0.998550241376659820, -0.998547548746185900, -0.998544853619342980, +-0.998542155996137940, -0.998539455876577550, -0.998536753260668600, -0.998534048148417620, -0.998531340539831610, -0.998528630434917130, -0.998525917833681160, -0.998523202736130490, +-0.998520485142271650, -0.998517765052111650, -0.998515042465657250, -0.998512317382915350, -0.998509589803892480, -0.998506859728595760, -0.998504127157031850, -0.998501392089207630, +-0.998498654525129870, -0.998495914464805570, -0.998493171908241380, -0.998490426855444310, -0.998487679306421240, -0.998484929261178930, -0.998482176719724280, -0.998479421682064160, +-0.998476664148205460, -0.998473904118155180, -0.998471141591920070, -0.998468376569507270, -0.998465609050923300, -0.998462839036175500, -0.998460066525270530, -0.998457291518215380, +-0.998454514015016950, -0.998451734015682320, -0.998448951520218290, -0.998446166528631940, -0.998443379040930170, -0.998440589057119960, -0.998437796577208210, -0.998435001601202020, +-0.998432204129108380, -0.998429404160934180, -0.998426601696686400, -0.998423796736372160, -0.998420989279998450, -0.998418179327572260, -0.998415366879100710, -0.998412551934590550, +-0.998409734494049130, -0.998406914557483430, -0.998404092124900330, -0.998401267196307060, -0.998398439771710610, -0.998395609851118080, -0.998392777434536470, -0.998389942521973000, +-0.998387105113434650, -0.998384265208928530, -0.998381422808461650, -0.998378577912041320, -0.998375730519674540, -0.998372880631368420, -0.998370028247130060, -0.998367173366966680, +-0.998364315990885380, -0.998361456118893260, -0.998358593750997450, -0.998355728887205250, -0.998352861527523670, -0.998349991671960040, -0.998347119320521340, -0.998344244473214790, +-0.998341367130047730, -0.998338487291027140, -0.998335604956160470, -0.998332720125454710, -0.998329832798917180, -0.998326942976555000, -0.998324050658375480, -0.998321155844385970, +-0.998318258534593440, -0.998315358729005230, -0.998312456427628780, -0.998309551630471080, -0.998306644337539460, -0.998303734548841360, -0.998300822264383770, -0.998297907484174240, +-0.998294990208219880, -0.998292070436528120, -0.998289148169106080, -0.998286223405961290, -0.998283296147100870, -0.998280366392532150, -0.998277434142262670, -0.998274499396299530, +-0.998271562154650070, -0.998268622417321730, -0.998265680184321940, -0.998262735455657910, -0.998259788231336990, -0.998256838511366600, -0.998253886295754180, -0.998250931584506950, +-0.998247974377632460, -0.998245014675138040, -0.998242052477031020, -0.998239087783318930, -0.998236120594009120, -0.998233150909108910, -0.998230178728625960, -0.998227204052567480, +-0.998224226880941030, -0.998221247213754050, -0.998218265051013850, -0.998215280392728000, -0.998212293238904040, -0.998209303589549290, -0.998206311444671310, -0.998203316804277540, +-0.998200319668375410, -0.998197320036972590, -0.998194317910076400, -0.998191313287694500, -0.998188306169834230, -0.998185296556503230, -0.998182284447708960, -0.998179269843458950, +-0.998176252743760870, -0.998173233148622050, -0.998170211058050260, -0.998167186472052830, -0.998164159390637520, -0.998161129813811780, -0.998158097741583260, -0.998155063173959410, +-0.998152026110948000, -0.998148986552556460, -0.998145944498792460, -0.998142899949663540, -0.998139852905177480, -0.998136803365341720, -0.998133751330164020, -0.998130696799651830, +-0.998127639773813020, -0.998124580252655050, -0.998121518236185670, -0.998118453724412440, -0.998115386717343120, -0.998112317214985280, -0.998109245217346670, -0.998106170724434970, +-0.998103093736257830, -0.998100014252822910, -0.998096932274137980, -0.998093847800210820, -0.998090760831048970, -0.998087671366660210, -0.998084579407052200, -0.998081484952232810, +-0.998078388002209720, -0.998075288556990680, -0.998072186616583370, -0.998069082180995660, -0.998065975250235220, -0.998062865824309810, -0.998059753903227210, -0.998056639486995300, +-0.998053522575621740, -0.998050403169114420, -0.998047281267481100, -0.998044156870729450, -0.998041029978867570, -0.998037900591903000, -0.998034768709843760, -0.998031634332697480, +-0.998028497460472290, -0.998025358093175720, -0.998022216230815770, -0.998019071873400330, -0.998015925020937170, -0.998012775673434270, -0.998009623830899420, -0.998006469493340380, +-0.998003312660765250, -0.998000153333181930, -0.997996991510598060, -0.997993827193021880, -0.997990660380461030, -0.997987491072923500, -0.997984319270417310, -0.997981144972950320, +-0.997977968180530420, -0.997974788893165600, -0.997971607110863860, -0.997968422833633070, -0.997965236061481240, -0.997962046794416360, -0.997958855032446300, -0.997955660775579180, +-0.997952464023822760, -0.997949264777185260, -0.997946063035674680, -0.997942858799298890, -0.997939652068065900, -0.997936442841983800, -0.997933231121060690, -0.997930016905304360, +-0.997926800194723020, -0.997923580989324770, -0.997920359289117490, -0.997917135094109290, -0.997913908404308380, -0.997910679219722540, -0.997907447540360090, -0.997904213366229030, +-0.997900976697337460, -0.997897737533693370, -0.997894495875304990, -0.997891251722180290, -0.997888005074327510, -0.997884755931754740, -0.997881504294470090, -0.997878250162481660, +-0.997874993535797670, -0.997871734414426110, -0.997868472798375210, -0.997865208687653160, -0.997861942082268080, -0.997858672982228190, -0.997855401387541590, -0.997852127298216480, +-0.997848850714260990, -0.997845571635683440, -0.997842290062491920, -0.997839005994694770, -0.997835719432299980, -0.997832430375315990, -0.997829138823750910, -0.997825844777612940, +-0.997822548236910410, -0.997819249201651440, -0.997815947671844450, -0.997812643647497440, -0.997809337128618970, -0.997806028115217130, -0.997802716607300130, -0.997799402604876430, +-0.997796086107954230, -0.997792767116541750, -0.997789445630647310, -0.997786121650279360, -0.997782795175446100, -0.997779466206155760, -0.997776134742416890, -0.997772800784237580, +-0.997769464331626280, -0.997766125384591420, -0.997762783943141110, -0.997759440007283890, -0.997756093577028100, -0.997752744652382060, -0.997749393233354210, -0.997746039319952760, +-0.997742682912186260, -0.997739324010063160, -0.997735962613591650, -0.997732598722780200, -0.997729232337637330, -0.997725863458171380, -0.997722492084390680, -0.997719118216303770, +-0.997715741853919200, -0.997712362997245080, -0.997708981646290180, -0.997705597801062830, -0.997702211461571450, -0.997698822627824500, -0.997695431299830630, -0.997692037477598050, +-0.997688641161135430, -0.997685242350451200, -0.997681841045553910, -0.997678437246451890, -0.997675030953153910, -0.997671622165668290, -0.997668210884003590, -0.997664797108168470, +-0.997661380838171240, -0.997657962074020580, -0.997654540815725130, -0.997651117063293240, -0.997647690816733550, -0.997644262076054610, -0.997640830841264980, -0.997637397112373430, +-0.997633960889388270, -0.997630522172318180, -0.997627080961171920, -0.997623637255957820, -0.997620191056684760, -0.997616742363361060, -0.997613291175995620, -0.997609837494596970, +-0.997606381319173670, -0.997602922649734380, -0.997599461486287860, -0.997595997828842670, -0.997592531677407470, -0.997589063031991020, -0.997585591892601760, -0.997582118259248580, +-0.997578642131940140, -0.997575163510685090, -0.997571682395492100, -0.997568198786369930, -0.997564712683327360, -0.997561224086372820, -0.997557732995515310, -0.997554239410763490, +-0.997550743332126120, -0.997547244759611760, -0.997543743693229400, -0.997540240132987590, -0.997536734078895200, -0.997533225530961020, -0.997529714489193810, -0.997526200953602230, +-0.997522684924195160, -0.997519166400981370, -0.997515645383969750, -0.997512121873168960, -0.997508595868587870, -0.997505067370235250, -0.997501536378120000, -0.997498002892250880, +-0.997494466912636770, -0.997490928439286550, -0.997487387472209000, -0.997483844011412880, -0.997480298056907190, -0.997476749608700810, -0.997473198666802510, -0.997469645231221280, +-0.997466089301965900, -0.997462530879045240, -0.997458969962468300, -0.997455406552243960, -0.997451840648381110, -0.997448272250888610, -0.997444701359775480, -0.997441127975050470, +-0.997437552096722800, -0.997433973724801140, -0.997430392859294580, -0.997426809500212120, -0.997423223647562530, -0.997419635301354910, -0.997416044461598260, -0.997412451128301460, +-0.997408855301473500, -0.997405256981123370, -0.997401656167260180, -0.997398052859892800, -0.997394447059030350, -0.997390838764681710, -0.997387227976856080, -0.997383614695562250, +-0.997379998920809420, -0.997376380652606590, -0.997372759890962860, -0.997369136635887220, -0.997365510887388780, -0.997361882645476430, -0.997358251910159480, -0.997354618681446920, +-0.997350982959347760, -0.997347344743871100, -0.997343704035026150, -0.997340060832821900, -0.997336415137267560, -0.997332766948372140, -0.997329116266144730, -0.997325463090594670, +-0.997321807421730820, -0.997318149259562530, -0.997314488604098880, -0.997310825455348990, -0.997307159813321960, -0.997303491678027120, -0.997299821049473570, -0.997296147927670410, +-0.997292472312626970, -0.997288794204352240, -0.997285113602855540, -0.997281430508146110, -0.997277744920233020, -0.997274056839125620, -0.997270366264833120, -0.997266673197364620, +-0.997262977636729550, -0.997259279582936920, -0.997255579035996150, -0.997251875995916470, -0.997248170462707080, -0.997244462436377210, -0.997240751916936170, -0.997237038904393300, +-0.997233323398757920, -0.997229605400039130, -0.997225884908246260, -0.997222161923388750, -0.997218436445475920, -0.997214708474516880, -0.997210978010521170, -0.997207245053497890, +-0.997203509603456610, -0.997199771660406520, -0.997196031224356960, -0.997192288295317360, -0.997188542873297060, -0.997184794958305360, -0.997181044550351730, -0.997177291649445350, +-0.997173536255595900, -0.997169778368812600, -0.997166017989104760, -0.997162255116481930, -0.997158489750953450, -0.997154721892528740, -0.997150951541217250, -0.997147178697028400, +-0.997143403359971540, -0.997139625530056200, -0.997135845207291820, -0.997132062391687720, -0.997128277083253580, -0.997124489281998700, -0.997120698987932650, -0.997116906201064860, +-0.997113110921404750, -0.997109313148961900, -0.997105512883745710, -0.997101710125765760, -0.997097904875031580, -0.997094097131552610, -0.997090286895338410, -0.997086474166398510, +-0.997082658944742350, -0.997078841230379600, -0.997075021023319690, -0.997071198323572270, -0.997067373131146910, -0.997063545446053020, -0.997059715268300280, -0.997055882597898350, +-0.997052047434856650, -0.997048209779184850, -0.997044369630892490, -0.997040526989989240, -0.997036681856484640, -0.997032834230388350, -0.997028984111709930, -0.997025131500459130, +-0.997021276396645510, -0.997017418800278610, -0.997013558711368210, -0.997009696129923960, -0.997005831055955420, -0.997001963489472340, -0.996998093430484290, -0.996994220879001030, +-0.996990345835032210, -0.996986468298587500, -0.996982588269676670, -0.996978705748309380, -0.996974820734495280, -0.996970933228244150, -0.996967043229565750, -0.996963150738469640, +-0.996959255754965800, -0.996955358279063670, -0.996951458310773140, -0.996947555850104080, -0.996943650897066050, -0.996939743451668910, -0.996935833513922450, -0.996931921083836330, +-0.996928006161420520, -0.996924088746684590, -0.996920168839638520, -0.996916246440291980, -0.996912321548654830, -0.996908394164736870, -0.996904464288547840, -0.996900531920097750, +-0.996896597059396370, -0.996892659706453470, -0.996888719861278920, -0.996884777523882490, -0.996880832694274190, -0.996876885372463770, -0.996872935558461130, -0.996868983252276240, +-0.996865028453918780, -0.996861071163398840, -0.996857111380726190, -0.996853149105910830, -0.996849184338962520, -0.996845217079891270, -0.996841247328706940, -0.996837275085419530, +-0.996833300350038920, -0.996829323122575000, -0.996825343403037860, -0.996821361191437380, -0.996817376487783460, -0.996813389292086070, -0.996809399604355220, -0.996805407424600890, +-0.996801412752832960, -0.996797415589061650, -0.996793415933296730, -0.996789413785548200, -0.996785409145826250, -0.996781402014140670, -0.996777392390501670, -0.996773380274919130, +-0.996769365667403260, -0.996765348567963840, -0.996761328976611070, -0.996757306893355070, -0.996753282318205700, -0.996749255251173190, -0.996745225692267530, -0.996741193641498710, +-0.996737159098877060, -0.996733122064412450, -0.996729082538114990, -0.996725040519994890, -0.996720996010062140, -0.996716949008326970, -0.996712899514799360, -0.996708847529489520, +-0.996704793052407560, -0.996700736083563580, -0.996696676622967790, -0.996692614670630310, -0.996688550226561330, -0.996684483290770970, -0.996680413863269330, -0.996676341944066730, +-0.996672267533173280, -0.996668190630599080, -0.996664111236354460, -0.996660029350449620, -0.996655944972894670, -0.996651858103699830, -0.996647768742875310, -0.996643676890431430, +-0.996639582546378300, -0.996635485710726240, -0.996631386383485470, -0.996627284564666320, -0.996623180254278870, -0.996619073452333470, -0.996614964158840430, -0.996610852373809860, +-0.996606738097252310, -0.996602621329177870, -0.996598502069596880, -0.996594380318519550, -0.996590256075956420, -0.996586129341917480, -0.996582000116413290, -0.996577868399454170, +-0.996573734191050330, -0.996569597491212100, -0.996565458299949910, -0.996561316617274100, -0.996557172443194970, -0.996553025777722980, -0.996548876620868330, -0.996544724972641570, +-0.996540570833052920, -0.996536414202112920, -0.996532255079831900, -0.996528093466220180, -0.996523929361288200, -0.996519762765046500, -0.996515593677505310, -0.996511422098675160, +-0.996507248028566380, -0.996503071467189640, -0.996498892414555030, -0.996494710870673320, -0.996490526835554840, -0.996486340309210020, -0.996482151291649300, -0.996477959782883230, +-0.996473765782922350, -0.996469569291776880, -0.996465370309457700, -0.996461168835974910, -0.996456964871339280, -0.996452758415561250, -0.996448549468651250, -0.996444338030619940, +-0.996440124101477750, -0.996435907681235360, -0.996431688769903070, -0.996427467367491660, -0.996423243474011460, -0.996419017089473220, -0.996414788213887510, -0.996410556847264760, +-0.996406322989615510, -0.996402086640950650, -0.996397847801280490, -0.996393606470615700, -0.996389362648966830, -0.996385116336344630, -0.996380867532759670, -0.996376616238222490, +-0.996372362452743740, -0.996368106176334200, -0.996363847409004300, -0.996359586150764810, -0.996355322401626280, -0.996351056161599580, -0.996346787430695160, -0.996342516208923780, +-0.996338242496296100, -0.996333966292822890, -0.996329687598514700, -0.996325406413382300, -0.996321122737436340, -0.996316836570687590, -0.996312547913146830, -0.996308256764824600, +-0.996303963125731770, -0.996299666995879020, -0.996295368375277210, -0.996291067263936790, -0.996286763661868860, -0.996282457569083960, -0.996278148985592860, -0.996273837911406450, +-0.996269524346535480, -0.996265208290990630, -0.996260889744782880, -0.996256568707922780, -0.996252245180421330, -0.996247919162289160, -0.996243590653537290, -0.996239259654176480, +-0.996234926164217380, -0.996230590183671110, -0.996226251712548310, -0.996221910750859860, -0.996217567298616660, -0.996213221355829460, -0.996208872922509260, -0.996204521998666940, +-0.996200168584313260, -0.996195812679459220, -0.996191454284115600, -0.996187093398293370, -0.996182730022003300, -0.996178364155256510, -0.996173995798063760, -0.996169624950436040, +-0.996165251612384340, -0.996160875783919430, -0.996156497465052300, -0.996152116655793950, -0.996147733356155360, -0.996143347566147420, -0.996138959285781000, -0.996134568515067320, +-0.996130175254017150, -0.996125779502641580, -0.996121381260951620, -0.996116980528958030, -0.996112577306672130, -0.996108171594104810, -0.996103763391266940, -0.996099352698169740, +-0.996094939514824200, -0.996090523841241190, -0.996086105677431940, -0.996081685023407440, -0.996077261879178670, -0.996072836244756840, -0.996068408120152850, -0.996063977505377900, +-0.996059544400442860, -0.996055108805359080, -0.996050670720137530, -0.996046230144789320, -0.996041787079325450, -0.996037341523757220, -0.996032893478095540, -0.996028442942351710, +-0.996023989916536730, -0.996019534400661710, -0.996015076394737960, -0.996010615898776490, -0.996006152912788490, -0.996001687436785080, -0.995997219470777460, -0.995992749014776750, +-0.995988276068794250, -0.995983800632840980, -0.995979322706928240, -0.995974842291067250, -0.995970359385269120, -0.995965873989545060, -0.995961386103906390, -0.995956895728364100, +-0.995952402862929740, -0.995947907507614310, -0.995943409662429110, -0.995938909327385380, -0.995934406502494320, -0.995929901187767360, -0.995925393383215620, -0.995920883088850300, +-0.995916370304682830, -0.995911855030724440, -0.995907337266986440, -0.995902817013480160, -0.995898294270216700, -0.995893769037207610, -0.995889241314463990, -0.995884711101997390, +-0.995880178399818900, -0.995875643207939980, -0.995871105526372040, -0.995866565355126300, -0.995862022694214090, -0.995857477543646840, -0.995852929903435990, -0.995848379773592750, +-0.995843827154128450, -0.995839272045054740, -0.995834714446382830, -0.995830154358124050, -0.995825591780289950, -0.995821026712891850, -0.995816459155941190, -0.995811889109449400, +-0.995807316573427910, -0.995802741547888060, -0.995798164032841380, -0.995793584028299320, -0.995789001534273300, -0.995784416550774760, -0.995779829077815150, -0.995775239115406000, +-0.995770646663558750, -0.995766051722284830, -0.995761454291595900, -0.995756854371503300, -0.995752251962018440, -0.995747647063153110, -0.995743039674918620, -0.995738429797326410, +-0.995733817430388250, -0.995729202574115570, -0.995724585228519810, -0.995719965393612630, -0.995715343069405460, -0.995710718255910070, -0.995706090953137780, -0.995701461161100250, +-0.995696828879809150, -0.995692194109275900, -0.995687556849512160, -0.995682917100529590, -0.995678274862339730, -0.995673630134954140, -0.995668982918384460, -0.995664333212642470, +-0.995659681017739500, -0.995655026333687300, -0.995650369160497650, -0.995645709498181990, -0.995641047346752070, -0.995636382706219570, -0.995631715576596130, -0.995627045957893420, +-0.995622373850122980, -0.995617699253296680, -0.995613022167426090, -0.995608342592523070, -0.995603660528599050, -0.995598975975665930, -0.995594288933735360, -0.995589599402819100, +-0.995584907382928820, -0.995580212874076280, -0.995575515876273240, -0.995570816389531380, -0.995566114413862450, -0.995561409949278220, -0.995556702995790580, -0.995551993553411060, +-0.995547281622151560, -0.995542567202023940, -0.995537850293039870, -0.995533130895211120, -0.995528409008549660, -0.995523684633067060, -0.995518957768775300, -0.995514228415686150, +-0.995509496573811380, -0.995504762243162980, -0.995500025423752600, -0.995495286115592130, -0.995490544318693440, -0.995485800033068520, -0.995481053258728930, -0.995476303995686870, +-0.995471552243953890, -0.995466798003542100, -0.995462041274463360, -0.995457282056729450, -0.995452520350352370, -0.995447756155343980, -0.995442989471716280, -0.995438220299481040, +-0.995433448638650240, -0.995428674489235780, -0.995423897851249630, -0.995419118724703790, -0.995414337109610140, -0.995409553005980660, -0.995404766413827360, -0.995399977333161990, +-0.995395185763996770, -0.995390391706343580, -0.995385595160214410, -0.995380796125621250, -0.995375994602576090, -0.995371190591091030, -0.995366384091177950, -0.995361575102848840, +-0.995356763626115800, -0.995351949660990940, -0.995347133207486130, -0.995342314265613480, -0.995337492835385080, -0.995332668916812930, -0.995327842509909130, -0.995323013614685670, +-0.995318182231154760, -0.995313348359328390, -0.995308511999218550, -0.995303673150837560, -0.995298831814197320, -0.995293987989310010, -0.995289141676187650, -0.995284292874842550, +-0.995279441585286690, -0.995274587807532200, -0.995269731541591260, -0.995264872787476000, -0.995260011545198500, -0.995255147814771090, -0.995250281596205770, -0.995245412889514620, +-0.995240541694710100, -0.995235668011804190, -0.995230791840808980, -0.995225913181736920, -0.995221032034600110, -0.995216148399410640, -0.995211262276180840, -0.995206373664922820, +-0.995201482565648890, -0.995196588978371270, -0.995191692903102280, -0.995186794339853910, -0.995181893288638600, -0.995176989749468550, -0.995172083722356100, -0.995167175207313350, +-0.995162264204352720, -0.995157350713486320, -0.995152434734726700, -0.995147516268085840, -0.995142595313576290, -0.995137671871210270, -0.995132745940999990, -0.995127817522957980, +-0.995122886617096250, -0.995117953223427440, -0.995113017341963670, -0.995108078972717360, -0.995103138115700950, -0.995098194770926540, -0.995093248938406780, -0.995088300618153900, +-0.995083349810180100, -0.995078396514498140, -0.995073440731120030, -0.995068482460058410, -0.995063521701325500, -0.995058558454933850, -0.995053592720895770, -0.995048624499223820, +-0.995043653789930200, -0.995038680593027470, -0.995033704908528050, -0.995028726736444380, -0.995023746076788780, -0.995018762929573920, -0.995013777294812110, -0.995008789172515900, +-0.995003798562697720, -0.994998805465370010, -0.994993809880545310, -0.994988811808236060, -0.994983811248454810, -0.994978808201213980, -0.994973802666526240, -0.994968794644403910, +-0.994963784134859640, -0.994958771137905870, -0.994953755653555150, -0.994948737681820130, -0.994943717222713130, -0.994938694276246930, -0.994933668842434060, -0.994928640921286860, +-0.994923610512818190, -0.994918577617040390, -0.994913542233966220, -0.994908504363608230, -0.994903464005978840, -0.994898421161090950, -0.994893375828956870, -0.994888328009589480, +-0.994883277703001110, -0.994878224909204740, -0.994873169628212590, -0.994868111860037650, -0.994863051604692460, -0.994857988862189570, -0.994852923632541740, -0.994847855915761640, +-0.994842785711861800, -0.994837713020855110, -0.994832637842754110, -0.994827560177571460, -0.994822480025319920, -0.994817397386012160, -0.994812312259660940, -0.994807224646279020, +-0.994802134545878960, -0.994797041958473520, -0.994791946884075570, -0.994786849322697670, -0.994781749274352700, -0.994776646739053310, -0.994771541716812370, -0.994766434207642550, +-0.994761324211556610, -0.994756211728567430, -0.994751096758687670, -0.994745979301930090, -0.994740859358307690, -0.994735736927833130, -0.994730612010519160, -0.994725484606378770, +-0.994720354715424530, -0.994715222337669510, -0.994710087473126390, -0.994704950121808040, -0.994699810283727340, -0.994694667958897160, -0.994689523147330170, -0.994684375849039460, +-0.994679226064037800, -0.994674073792338190, -0.994668919033953270, -0.994663761788896040, -0.994658602057179490, -0.994653439838816380, -0.994648275133819700, -0.994643107942202230, +-0.994637938263977060, -0.994632766099157070, -0.994627591447755140, -0.994622414309784260, -0.994617234685257310, -0.994612052574187390, -0.994606867976587150, -0.994601680892469920, +-0.994596491321848350, -0.994591299264735660, -0.994586104721144610, -0.994580907691088310, -0.994575708174579850, -0.994570506171632010, -0.994565301682257990, -0.994560094706470670, +-0.994554885244283150, -0.994549673295708310, -0.994544458860759480, -0.994539241939449310, -0.994534022531791130, -0.994528800637797920, -0.994523576257482670, -0.994518349390858480, +-0.994513120037938350, -0.994507888198735480, -0.994502653873262870, -0.994497417061533720, -0.994492177763560910, -0.994486935979357780, -0.994481691708937190, -0.994476444952312470, +-0.994471195709496490, -0.994465943980502700, -0.994460689765343960, -0.994455433064033500, -0.994450173876584410, -0.994444912203010010, -0.994439648043323190, -0.994434381397537370, +-0.994429112265665550, -0.994423840647720940, -0.994418566543716740, -0.994413289953666070, -0.994408010877582240, -0.994402729315478350, -0.994397445267367620, -0.994392158733263360, +-0.994386869713178690, -0.994381578207126800, -0.994376284215120920, -0.994370987737174360, -0.994365688773300450, -0.994360387323512170, -0.994355083387822970, -0.994349776966246050, +-0.994344468058794730, -0.994339156665482230, -0.994333842786321860, -0.994328526421326850, -0.994323207570510510, -0.994317886233886170, -0.994312562411467040, -0.994307236103266660, +-0.994301907309298130, -0.994296576029574770, -0.994291242264109920, -0.994285906012917110, -0.994280567276009440, -0.994275226053400460, -0.994269882345103270, -0.994264536151131530, +-0.994259187471498330, -0.994253836306217220, -0.994248482655301520, -0.994243126518764560, -0.994237767896619880, -0.994232406788880700, -0.994227043195560540, -0.994221677116672750, +-0.994216308552230750, -0.994210937502247980, -0.994205563966737870, -0.994200187945713960, -0.994194809439189480, -0.994189428447177950, -0.994184044969692930, -0.994178659006747730, +-0.994173270558355910, -0.994167879624530900, -0.994162486205286240, -0.994157090300635260, -0.994151691910591720, -0.994146291035168830, -0.994140887674380250, -0.994135481828239410, +-0.994130073496759860, -0.994124662679955250, -0.994119249377838910, -0.994113833590424380, -0.994108415317725310, -0.994102994559755260, -0.994097571316527650, -0.994092145588056140, +-0.994086717374354280, -0.994081286675435600, -0.994075853491313670, -0.994070417822002230, -0.994064979667514610, -0.994059539027864590, -0.994054095903065700, -0.994048650293131720, +-0.994043202198075960, -0.994037751617912190, -0.994032298552654070, -0.994026843002315250, -0.994021384966909280, -0.994015924446449930, -0.994010461440950620, -0.994004995950425240, +-0.993999527974887440, -0.993994057514350770, -0.993988584568828880, -0.993983109138335540, -0.993977631222884520, -0.993972150822489350, -0.993966667937163820, -0.993961182566921670, +-0.993955694711776470, -0.993950204371742090, -0.993944711546832280, -0.993939216237060500, -0.993933718442440830, -0.993928218162986820, -0.993922715398712240, -0.993917210149630970, +-0.993911702415756550, -0.993906192197102970, -0.993900679493683880, -0.993895164305513060, -0.993889646632604370, -0.993884126474971490, -0.993878603832628380, -0.993873078705588720, +-0.993867551093866370, -0.993862020997475120, -0.993856488416428930, -0.993850953350741360, -0.993845415800426510, -0.993839875765498150, -0.993834333245969930, -0.993828788241856050, +-0.993823240753170080, -0.993817690779926100, -0.993812138322137880, -0.993806583379819310, -0.993801025952984250, -0.993795466041646700, -0.993789903645820430, -0.993784338765519410, +-0.993778771400757430, -0.993773201551548690, -0.993767629217906840, -0.993762054399846000, -0.993756477097380020, -0.993750897310522800, -0.993745315039288310, -0.993739730283690560, +-0.993734143043743520, -0.993728553319461080, -0.993722961110857340, -0.993717366417946060, -0.993711769240741450, -0.993706169579257390, -0.993700567433507990, -0.993694962803507110, +-0.993689355689268860, -0.993683746090807120, -0.993678134008136090, -0.993672519441269660, -0.993666902390222040, -0.993661282855007100, -0.993655660835638940, -0.993650036332131670, +-0.993644409344499270, -0.993638779872755950, -0.993633147916915590, -0.993627513476992300, -0.993621876553000270, -0.993616237144953620, -0.993610595252866320, -0.993604950876752600, +-0.993599304016626440, -0.993593654672502050, -0.993588002844393410, -0.993582348532314860, -0.993576691736280490, -0.993571032456304290, -0.993565370692400580, -0.993559706444583470, +-0.993554039712867040, -0.993548370497265520, -0.993542698797793000, -0.993537024614463800, -0.993531347947292030, -0.993525668796292010, -0.993519987161477600, -0.993514303042863370, +-0.993508616440463400, -0.993502927354291800, -0.993497235784362890, -0.993491541730690990, -0.993485845193290080, -0.993480146172174730, -0.993474444667358900, -0.993468740678856930, +-0.993463034206683250, -0.993457325250851840, -0.993451613811377250, -0.993445899888273480, -0.993440183481555050, -0.993434464591236190, -0.993428743217331100, -0.993423019359854220, +-0.993417293018819760, -0.993411564194242040, -0.993405832886135380, -0.993400099094514210, -0.993394362819392750, -0.993388624060785430, -0.993382882818706460, -0.993377139093170380, +-0.993371392884191410, -0.993365644191783970, -0.993359893015962390, -0.993354139356741220, -0.993348383214134540, -0.993342624588156920, -0.993336863478822770, -0.993331099886146540, +-0.993325333810142430, -0.993319565250824990, -0.993313794208208760, -0.993308020682307950, -0.993302244673137100, -0.993296466180710660, -0.993290685205043040, -0.993284901746148700, +-0.993279115804042160, -0.993273327378737750, -0.993267536470250010, -0.993261743078593500, -0.993255947203782630, -0.993250148845831850, -0.993244348004755810, -0.993238544680568710, +-0.993232738873285450, -0.993226930582920220, -0.993221119809487680, -0.993215306553002390, -0.993209490813478760, -0.993203672590931450, -0.993197851885374900, -0.993192028696823770, +-0.993186203025292590, -0.993180374870795910, -0.993174544233348280, -0.993168711112964230, -0.993162875509658430, -0.993157037423445520, -0.993151196854339950, -0.993145353802356360, +-0.993139508267509410, -0.993133660249813750, -0.993127809749283830, -0.993121956765934510, -0.993116101299780120, -0.993110243350835640, -0.993104382919115510, -0.993098520004634390, +-0.993092654607407030, -0.993086786727447990, -0.993080916364772030, -0.993075043519393690, -0.993069168191327840, -0.993063290380589050, -0.993057410087191950, -0.993051527311151430, +-0.993045642052482020, -0.993039754311198510, -0.993033864087315640, -0.993027971380848080, -0.993022076191810710, -0.993016178520218060, -0.993010278366084910, -0.993004375729426130, +-0.992998470610256370, -0.992992563008590510, -0.992986652924443210, -0.992980740357829240, -0.992974825308763460, -0.992968907777260550, -0.992962987763335470, -0.992957065267002890, +-0.992951140288277580, -0.992945212827174520, -0.992939282883708360, -0.992933350457893990, -0.992927415549746280, -0.992921478159280000, -0.992915538286510020, -0.992909595931451340, +-0.992903651094118490, -0.992897703774526570, -0.992891753972690360, -0.992885801688624840, -0.992879846922344770, -0.992873889673865140, -0.992867929943200720, -0.992861967730366500, +-0.992856003035377350, -0.992850035858248160, -0.992844066198993900, -0.992838094057629570, -0.992832119434169820, -0.992826142328629980, -0.992820162741024580, -0.992814180671368950, +-0.992808196119677740, -0.992802209085966170, -0.992796219570248990, -0.992790227572541210, -0.992784233092858020, -0.992778236131214080, -0.992772236687624600, -0.992766234762104570, +-0.992760230354668980, -0.992754223465332710, -0.992748214094110960, -0.992742202241018720, -0.992736187906070880, -0.992730171089282630, -0.992724151790668970, -0.992718130010244780, +-0.992712105748025490, -0.992706079004025740, -0.992700049778260870, -0.992694018070745860, -0.992687983881495930, -0.992681947210525830, -0.992675908057851000, -0.992669866423486420, +-0.992663822307447100, -0.992657775709748220, -0.992651726630404910, -0.992645675069432350, -0.992639621026845550, -0.992633564502659720, -0.992627505496889940, -0.992621444009551430, +-0.992615380040659300, -0.992609313590228750, -0.992603244658274870, -0.992597173244812890, -0.992591099349858010, -0.992585022973425320, -0.992578944115530050, -0.992572862776187500, +-0.992566778955412790, -0.992560692653221110, -0.992554603869627680, -0.992548512604647830, -0.992542418858296640, -0.992536322630589330, -0.992530223921541330, -0.992524122731167750, +-0.992518019059483780, -0.992511912906504870, -0.992505804272246110, -0.992499693156722820, -0.992493579559950320, -0.992487463481943940, -0.992481344922718890, -0.992475223882290370, +-0.992469100360673820, -0.992462974357884550, -0.992456845873937900, -0.992450714908849060, -0.992444581462633480, -0.992438445535306470, -0.992432307126883240, -0.992426166237379340, +-0.992420022866809970, -0.992413877015190570, -0.992407728682536460, -0.992401577868863070, -0.992395424574185720, -0.992389268798519740, -0.992383110541880660, -0.992376949804283810, +-0.992370786585744510, -0.992364620886278410, -0.992358452705900620, -0.992352282044626670, -0.992346108902472100, -0.992339933279452250, -0.992333755175582530, -0.992327574590878500, +-0.992321391525355370, -0.992315205979028890, -0.992309017951914400, -0.992302827444027310, -0.992296634455383190, -0.992290438985997450, -0.992284241035885640, -0.992278040605063190, +-0.992271837693545770, -0.992265632301348570, -0.992259424428487470, -0.992253214074977690, -0.992247001240834870, -0.992240785926074560, -0.992234568130712310, -0.992228347854763660, +-0.992222125098244150, -0.992215899861169310, -0.992209672143554710, -0.992203441945415880, -0.992197209266768580, -0.992190974107628130, -0.992184736468010200, -0.992178496347930540, +-0.992172253747404590, -0.992166008666448110, -0.992159761105076530, -0.992153511063305520, -0.992147258541150710, -0.992141003538627890, -0.992134746055752470, -0.992128486092540120, +-0.992122223649006710, -0.992115958725167670, -0.992109691321038660, -0.992103421436635550, -0.992097149071973770, -0.992090874227069210, -0.992084596901937400, -0.992078317096594110, +-0.992072034811054990, -0.992065750045335810, -0.992059462799452340, -0.992053173073420110, -0.992046880867255010, -0.992040586180972680, -0.992034289014588900, -0.992027989368119420, +-0.992021687241579910, -0.992015382634986230, -0.992009075548354050, -0.992002765981699230, -0.991996453935037440, -0.991990139408384540, -0.991983822401756310, -0.991977502915168510, +-0.991971180948637010, -0.991964856502177470, -0.991958529575805880, -0.991952200169537890, -0.991945868283389380, -0.991939533917376210, -0.991933197071514280, -0.991926857745819350, +-0.991920515940307170, -0.991914171654993850, -0.991907824889894930, -0.991901475645026620, -0.991895123920404460, -0.991888769716044670, -0.991882413031962780, -0.991876053868175010, +-0.991869692224697010, -0.991863328101544760, -0.991856961498734260, -0.991850592416281370, -0.991844220854201990, -0.991837846812511970, -0.991831470291227420, -0.991825091290364110, +-0.991818709809938140, -0.991812325849965370, -0.991805939410461800, -0.991799550491443420, -0.991793159092926090, -0.991786765214925920, -0.991780368857458790, -0.991773970020540800, +-0.991767568704187810, -0.991761164908415930, -0.991754758633241250, -0.991748349878679550, -0.991741938644747020, -0.991735524931459560, -0.991729108738833350, -0.991722690066884400, +-0.991716268915628700, -0.991709845285082330, -0.991703419175261280, -0.991696990586181770, -0.991690559517859780, -0.991684125970311300, -0.991677689943552650, -0.991671251437599710, +-0.991664810452468570, -0.991658366988175440, -0.991651921044736430, -0.991645472622167620, -0.991639021720485130, -0.991632568339705030, -0.991626112479843560, -0.991619654140916800, +-0.991613193322940960, -0.991606730025932030, -0.991600264249906330, -0.991593795994879960, -0.991587325260869120, -0.991580852047890040, -0.991574376355958690, -0.991567898185091500, +-0.991561417535304470, -0.991554934406614020, -0.991548448799036140, -0.991541960712587160, -0.991535470147283270, -0.991528977103140700, -0.991522481580175640, -0.991515983578404430, +-0.991509483097843370, -0.991502980138508460, -0.991496474700416130, -0.991489966783582590, -0.991483456388024260, -0.991476943513757150, -0.991470428160797780, -0.991463910329162260, +-0.991457390018867010, -0.991450867229928260, -0.991444341962362310, -0.991437814216185600, -0.991431283991414340, -0.991424751288064840, -0.991418216106153440, -0.991411678445696440, +-0.991405138306710400, -0.991398595689211400, -0.991392050593215890, -0.991385503018740400, -0.991378952965801030, -0.991372400434414320, -0.991365845424596600, -0.991359287936364300, +-0.991352727969733730, -0.991346165524721320, -0.991339600601343630, -0.991333033199616850, -0.991326463319557430, -0.991319890961181890, -0.991313316124506680, -0.991306738809548120, +-0.991300159016322740, -0.991293576744846970, -0.991286991995137260, -0.991280404767210020, -0.991273815061081810, -0.991267222876769050, -0.991260628214288290, -0.991254031073655840, +-0.991247431454888470, -0.991240829358002400, -0.991234224783014260, -0.991227617729940610, -0.991221008198797880, -0.991214396189602610, -0.991207781702371450, -0.991201164737120720, +-0.991194545293867190, -0.991187923372627180, -0.991181298973417450, -0.991174672096254430, -0.991168042741154780, -0.991161410908135030, -0.991154776597211630, -0.991148139808401440, +-0.991141500541720790, -0.991134858797186440, -0.991128214574814930, -0.991121567874622910, -0.991114918696626930, -0.991108267040843650, -0.991101612907289710, -0.991094956295981770, +-0.991088297206936470, -0.991081635640170380, -0.991074971595700130, -0.991068305073542600, -0.991061636073714220, -0.991054964596231770, -0.991048290641111880, -0.991041614208371340, +-0.991034935298026660, -0.991028253910094750, -0.991021570044592130, -0.991014883701535560, -0.991008194880941830, -0.991001503582827570, -0.990994809807209660, -0.990988113554104650, +-0.990981414823529310, -0.990974713615500490, -0.990968009930034870, -0.990961303767149300, -0.990954595126860350, -0.990947884009184990, -0.990941170414139980, -0.990934454341741880, +-0.990927735792007770, -0.990921014764954310, -0.990914291260598270, -0.990907565278956510, -0.990900836820045820, -0.990894105883883050, -0.990887372470485080, -0.990880636579868580, +-0.990873898212050520, -0.990867157367047780, -0.990860414044877120, -0.990853668245555430, -0.990846919969099460, -0.990840169215526310, -0.990833415984852750, -0.990826660277095540, +-0.990819902092271780, -0.990813141430398230, -0.990806378291491870, -0.990799612675569490, -0.990792844582648160, -0.990786074012744660, -0.990779300965875960, -0.990772525442059070, +-0.990765747441310740, -0.990758966963648180, -0.990752184009088150, -0.990745398577647650, -0.990738610669343660, -0.990731820284193150, -0.990725027422213130, -0.990718232083420470, +-0.990711434267832260, -0.990704633975465490, -0.990697831206337140, -0.990691025960464210, -0.990684218237863680, -0.990677408038552640, -0.990670595362547980, -0.990663780209866900, +-0.990656962580526490, -0.990650142474543530, -0.990643319891935210, -0.990636494832718650, -0.990629667296910820, -0.990622837284528820, -0.990616004795589760, -0.990609169830110710, +-0.990602332388108690, -0.990595492469600880, -0.990588650074604280, -0.990581805203136100, -0.990574957855213320, -0.990568108030853270, -0.990561255730072920, -0.990554400952889380, +-0.990547543699319850, -0.990540683969381440, -0.990533821763091350, -0.990526957080466790, -0.990520089921524740, -0.990513220286282530, -0.990506348174757130, -0.990499473586965990, +-0.990492596522926090, -0.990485716982654860, -0.990478834966169170, -0.990471950473486460, -0.990465063504623820, -0.990458174059598570, -0.990451282138427920, -0.990444387741128970, +-0.990437490867719150, -0.990430591518215550, -0.990423689692635500, -0.990416785390996090, -0.990409878613314860, -0.990402969359608920, -0.990396057629895580, -0.990389143424192040, +-0.990382226742515640, -0.990375307584883680, -0.990368385951313490, -0.990361461841822280, -0.990354535256427470, -0.990347606195146280, -0.990340674657996130, -0.990333740644994240, +-0.990326804156158040, -0.990319865191504830, -0.990312923751051840, -0.990305979834816720, -0.990299033442816560, -0.990292084575068790, -0.990285133231590840, -0.990278179412400040, +-0.990271223117513810, -0.990264264346949590, -0.990257303100724570, -0.990250339378856430, -0.990243373181362350, -0.990236404508259890, -0.990229433359566370, -0.990222459735299320, +-0.990215483635476070, -0.990208505060114150, -0.990201524009230890, -0.990194540482843940, -0.990187554480970620, -0.990180566003628360, -0.990173575050834700, -0.990166581622607070, +-0.990159585718963010, -0.990152587339920070, -0.990145586485495550, -0.990138583155707130, -0.990131577350572220, -0.990124569070108370, -0.990117558314333120, -0.990110545083263900, +-0.990103529376918370, -0.990096511195314060, -0.990089490538468400, -0.990082467406399050, -0.990075441799123550, -0.990068413716659430, -0.990061383159024260, -0.990054350126235660, +-0.990047314618311190, -0.990040276635268390, -0.990033236177124910, -0.990026193243898400, -0.990019147835606290, -0.990012099952266470, -0.990005049593896240, -0.989997996760513480, +-0.989990941452135730, -0.989983883668780650, -0.989976823410465780, -0.989969760677208880, -0.989962695469027600, -0.989955627785939600, -0.989948557627962410, -0.989941484995114030, +-0.989934409887411770, -0.989927332304873510, -0.989920252247517010, -0.989913169715359810, -0.989906084708419680, -0.989898997226714370, -0.989891907270261550, -0.989884814839078970, +-0.989877719933184300, -0.989870622552595390, -0.989863522697329910, -0.989856420367405620, -0.989849315562840280, -0.989842208283651660, -0.989835098529857520, -0.989827986301475620, +-0.989820871598523830, -0.989813754421019710, -0.989806634768981340, -0.989799512642426380, -0.989792388041372590, -0.989785260965837850, -0.989778131415839920, -0.989770999391396680, +-0.989763864892525880, -0.989756727919245520, -0.989749588471573350, -0.989742446549527140, -0.989735302153124770, -0.989728155282384340, -0.989721005937323370, -0.989713854117959870, +-0.989706699824311810, -0.989699543056396960, -0.989692383814233300, -0.989685222097838600, -0.989678057907230850, -0.989670891242428020, -0.989663722103448000, -0.989656550490308540, +-0.989649376403027750, -0.989642199841623600, -0.989635020806113870, -0.989627839296516650, -0.989620655312849820, -0.989613468855131240, -0.989606279923379130, -0.989599088517611250, +-0.989591894637845690, -0.989584698284100340, -0.989577499456393280, -0.989570298154742510, -0.989563094379165900, -0.989555888129681650, -0.989548679406307640, -0.989541468209061970, +-0.989534254537962510, -0.989527038393027580, -0.989519819774274940, -0.989512598681722810, -0.989505375115389160, -0.989498149075291990, -0.989490920561449610, -0.989483689573879780, +-0.989476456112600820, -0.989469220177630620, -0.989461981768987480, -0.989454740886689390, -0.989447497530754340, -0.989440251701200650, -0.989433003398046300, -0.989425752621309380, +-0.989418499371008120, -0.989411243647160710, -0.989403985449785030, -0.989396724778899510, -0.989389461634522130, -0.989382196016671100, -0.989374927925364520, -0.989367657360620710, +-0.989360384322457760, -0.989353108810893780, -0.989345830825947070, -0.989338550367635850, -0.989331267435978100, -0.989323982030992250, -0.989316694152696520, -0.989309403801108990, +-0.989302110976247980, -0.989294815678131600, -0.989287517906778270, -0.989280217662206200, -0.989272914944433480, -0.989265609753478550, -0.989258302089359500, -0.989250991952094760, +-0.989243679341702540, -0.989236364258201050, -0.989229046701608830, -0.989221726671943860, -0.989214404169224570, -0.989207079193469290, -0.989199751744696320, -0.989192421822923880, +-0.989185089428170520, -0.989177754560454430, -0.989170417219793820, -0.989163077406207350, -0.989155735119713000, -0.989148390360329420, -0.989141043128074830, -0.989133693422967750, +-0.989126341245026300, -0.989118986594269000, -0.989111629470714290, -0.989104269874380490, -0.989096907805286030, -0.989089543263449330, -0.989082176248888720, -0.989074806761622630, +-0.989067434801669590, -0.989060060369047920, -0.989052683463776170, -0.989045304085872660, -0.989037922235355920, -0.989030537912244270, -0.989023151116556360, -0.989015761848310640, +-0.989008370107525400, -0.989000975894219310, -0.988993579208410690, -0.988986180050118180, -0.988978778419360330, -0.988971374316155340, -0.988963967740522090, -0.988956558692478780, +-0.988949147172044190, -0.988941733179236620, -0.988934316714074830, -0.988926897776577160, -0.988919476366762250, -0.988912052484648640, -0.988904626130254980, -0.988897197303599710, +-0.988889766004701460, -0.988882332233578800, -0.988874895990250250, -0.988867457274734460, -0.988860016087050100, -0.988852572427215690, -0.988845126295249790, -0.988837677691171150, +-0.988830226614998200, -0.988822773066749820, -0.988815317046444430, -0.988807858554100800, -0.988800397589737480, -0.988792934153373220, -0.988785468245026560, -0.988777999864716260, +-0.988770529012460990, -0.988763055688279380, -0.988755579892190100, -0.988748101624211890, -0.988740620884363430, -0.988733137672663350, -0.988725651989130540, -0.988718163833783530, +-0.988710673206641080, -0.988703180107721960, -0.988695684537045040, -0.988688186494628750, -0.988680685980492080, -0.988673182994653570, -0.988665677537132190, -0.988658169607946610, +-0.988650659207115700, -0.988643146334658000, -0.988635630990592480, -0.988628113174937930, -0.988620592887713090, -0.988613070128936730, -0.988605544898627730, -0.988598017196804730, +-0.988590487023486840, -0.988582954378692700, -0.988575419262441190, -0.988567881674751070, -0.988560341615641320, -0.988552799085130610, -0.988545254083238010, -0.988537706609982300, +-0.988530156665382240, -0.988522604249456820, -0.988515049362224900, -0.988507492003705250, -0.988499932173916960, -0.988492369872878920, -0.988484805100609880, -0.988477237857128820, +-0.988469668142454630, -0.988462095956606280, -0.988454521299602760, -0.988446944171462950, -0.988439364572205710, -0.988431782501850040, -0.988424197960414920, -0.988416610947919330, +-0.988409021464382250, -0.988401429509822570, -0.988393835084259380, -0.988386238187711540, -0.988378638820198160, -0.988371036981738120, -0.988363432672350490, -0.988355825892054280, +-0.988348216640868580, -0.988340604918812260, -0.988332990725904410, -0.988325374062164140, -0.988317754927610430, -0.988310133322262360, -0.988302509246138940, -0.988294882699259250, +-0.988287253681642270, -0.988279622193307230, -0.988271988234273090, -0.988264351804559070, -0.988256712904184040, -0.988249071533167320, -0.988241427691527900, -0.988233781379284970, +-0.988226132596457530, -0.988218481343064780, -0.988210827619125820, -0.988203171424659740, -0.988195512759685760, -0.988187851624223070, -0.988180188018290660, -0.988172521941907860, +-0.988164853395093750, -0.988157182377867430, -0.988149508890248220, -0.988141832932255220, -0.988134154503907620, -0.988126473605224650, -0.988118790236225400, -0.988111104396929290, +-0.988103416087355410, -0.988095725307522990, -0.988088032057451220, -0.988080336337159420, -0.988072638146666790, -0.988064937485992440, -0.988057234355155910, -0.988049528754176180, +-0.988041820683072670, -0.988034110141864600, -0.988026397130571280, -0.988018681649211920, -0.988010963697805940, -0.988003243276372460, -0.987995520384930880, -0.987987795023500540, +-0.987980067192100740, -0.987972336890750700, -0.987964604119469850, -0.987956868878277490, -0.987949131167192960, -0.987941390986235680, -0.987933648335424740, -0.987925903214779800, +-0.987918155624320060, -0.987910405564065060, -0.987902653034033910, -0.987894898034246130, -0.987887140564721160, -0.987879380625478310, -0.987871618216537020, -0.987863853337916710, +-0.987856085989636700, -0.987848316171716530, -0.987840543884175530, -0.987832769127033220, -0.987824991900309040, -0.987817212204022300, -0.987809430038192550, -0.987801645402839100, +-0.987793858297981720, -0.987786068723639610, -0.987778276679832310, -0.987770482166579370, -0.987762685183900200, -0.987754885731814360, -0.987747083810341260, -0.987739279419500460, +-0.987731472559311490, -0.987723663229793770, -0.987715851430966960, -0.987708037162850490, -0.987700220425463900, -0.987692401218826840, -0.987684579542958740, -0.987676755397879140, +-0.987668928783607680, -0.987661099700163910, -0.987653268147567380, -0.987645434125837720, -0.987637597634994480, -0.987629758675057200, -0.987621917246045530, -0.987614073347979130, +-0.987606226980877410, -0.987598378144760260, -0.987590526839647100, -0.987582673065557580, -0.987574816822511470, -0.987566958110528300, -0.987559096929627730, -0.987551233279829410, +-0.987543367161152990, -0.987535498573618110, -0.987527627517244540, -0.987519753992051940, -0.987511877998059950, -0.987503999535288220, -0.987496118603756520, -0.987488235203484390, +-0.987480349334491910, -0.987472460996798420, -0.987464570190423770, -0.987456676915387740, -0.987448781171709980, -0.987440882959410240, -0.987432982278508400, -0.987425079129024000, +-0.987417173510977020, -0.987409265424387010, -0.987401354869273830, -0.987393441845657250, -0.987385526353557140, -0.987377608392993160, -0.987369687963985280, -0.987361765066553040, +-0.987353839700716440, -0.987345911866495230, -0.987337981563909170, -0.987330048792978250, -0.987322113553722240, -0.987314175846160880, -0.987306235670314060, -0.987298293026201760, +-0.987290347913843620, -0.987282400333259650, -0.987274450284469700, -0.987266497767493530, -0.987258542782351260, -0.987250585329062510, -0.987242625407647400, -0.987234663018125680, +-0.987226698160517220, -0.987218730834842130, -0.987210761041120160, -0.987202788779371400, -0.987194814049615510, -0.987186836851872700, -0.987178857186162720, -0.987170875052505560, +-0.987162890450921320, -0.987154903381429750, -0.987146913844051070, -0.987138921838805030, -0.987130927365711620, -0.987122930424790930, -0.987114931016062960, -0.987106929139547670, +-0.987098924795264950, -0.987090917983235010, -0.987082908703477810, -0.987074896956013250, -0.987066882740861520, -0.987058866058042490, -0.987050846907576380, -0.987042825289483170, +-0.987034801203782840, -0.987026774650495490, -0.987018745629641310, -0.987010714141240090, -0.987002680185312230, -0.986994643761877620, -0.986986604870956350, -0.986978563512568740, +-0.986970519686734550, -0.986962473393474090, -0.986954424632807470, -0.986946373404754880, -0.986938319709336210, -0.986930263546571870, -0.986922204916481750, -0.986914143819086150, +-0.986906080254405180, -0.986898014222459150, -0.986889945723267940, -0.986881874756851960, -0.986873801323231210, -0.986865725422426010, -0.986857647054456440, -0.986849566219342720, +-0.986841482917105160, -0.986833397147763860, -0.986825308911339130, -0.986817218207851070, -0.986809125037319990, -0.986801029399766110, -0.986792931295209620, -0.986784830723670850, +-0.986776727685170000, -0.986768622179727270, -0.986760514207362990, -0.986752403768097470, -0.986744290861950920, -0.986736175488943660, -0.986728057649095990, -0.986719937342428130, +-0.986711814568960510, -0.986703689328713220, -0.986695561621706800, -0.986687431447961450, -0.986679298807497500, -0.986671163700335250, -0.986663026126495150, -0.986654886085997610, +-0.986646743578862620, -0.986638598605110940, -0.986630451164762780, -0.986622301257838340, -0.986614148884358280, -0.986605994044342790, -0.986597836737812320, -0.986589676964787280, +-0.986581514725288100, -0.986573350019334990, -0.986565182846948610, -0.986557013208149260, -0.986548841102957370, -0.986540666531393380, -0.986532489493477720, -0.986524309989230800, +-0.986516128018673170, -0.986507943581825140, -0.986499756678707370, -0.986491567309340180, -0.986483375473743980, -0.986475181171939440, -0.986466984403946870, -0.986458785169786910, +-0.986450583469479890, -0.986442379303046460, -0.986434172670507150, -0.986425963571882390, -0.986417752007192620, -0.986409537976458580, -0.986401321479700610, -0.986393102516939350, +-0.986384881088195440, -0.986376657193489210, -0.986368430832841430, -0.986360202006272500, -0.986351970713803090, -0.986343736955453740, -0.986335500731244990, -0.986327262041197580, +-0.986319020885331970, -0.986310777263668890, -0.986302531176228790, -0.986294282623032430, -0.986286031604100330, -0.986277778119453160, -0.986269522169111460, -0.986261263753096080, +-0.986253002871427360, -0.986244739524126280, -0.986236473711213370, -0.986228205432709280, -0.986219934688634560, -0.986211661479010070, -0.986203385803856470, -0.986195107663194290, +-0.986186827057044410, -0.986178543985427480, -0.986170258448364260, -0.986161970445875280, -0.986153679977981420, -0.986145387044703340, -0.986137091646061780, -0.986128793782077520, +-0.986120493452771310, -0.986112190658163800, -0.986103885398275760, -0.986095577673128170, -0.986087267482741560, -0.986078954827136700, -0.986070639706334570, -0.986062322120355830, +-0.986054002069221220, -0.986045679552951640, -0.986037354571567830, -0.986029027125090660, -0.986020697213540910, -0.986012364836939440, -0.986004029995307120, -0.985995692688664600, +-0.985987352917032880, -0.985979010680432920, -0.985970665978885270, -0.985962318812411030, -0.985953969181030950, -0.985945617084765910, -0.985937262523636890, -0.985928905497664760, +-0.985920546006870290, -0.985912184051274450, -0.985903819630898240, -0.985895452745762400, -0.985887083395887930, -0.985878711581295810, -0.985870337302006900, -0.985861960558042090, +-0.985853581349422360, -0.985845199676168790, -0.985836815538302160, -0.985828428935843440, -0.985820039868813720, -0.985811648337233890, -0.985803254341124920, -0.985794857880507800, +-0.985786458955403620, -0.985778057565833250, -0.985769653711817680, -0.985761247393378000, -0.985752838610535200, -0.985744427363310360, -0.985736013651724470, -0.985727597475798410, +-0.985719178835553490, -0.985710757731010580, -0.985702334162190770, -0.985693908129115060, -0.985685479631804640, -0.985677048670280500, -0.985668615244563840, -0.985660179354675540, +-0.985651741000636790, -0.985643300182468710, -0.985634856900192370, -0.985626411153828990, -0.985617962943399430, -0.985609512268925010, -0.985601059130426840, -0.985592603527926100, +-0.985584145461443680, -0.985575684931001010, -0.985567221936619050, -0.985558756478319140, -0.985550288556122260, -0.985541818170049710, -0.985533345320122600, -0.985524870006362130, +-0.985516392228789400, -0.985507911987425820, -0.985499429282292390, -0.985490944113410320, -0.985482456480801020, -0.985473966384485480, -0.985465473824485130, -0.985456978800821060, +-0.985448481313514480, -0.985439981362586700, -0.985431478948059050, -0.985422974069952720, -0.985414466728288920, -0.985405956923088850, -0.985397444654373960, -0.985388929922165540, +-0.985380412726484690, -0.985371893067352840, -0.985363370944791210, -0.985354846358821200, -0.985346319309464040, -0.985337789796741140, -0.985329257820673820, -0.985320723381283290, +-0.985312186478590870, -0.985303647112618090, -0.985295105283386150, -0.985286560990916490, -0.985278014235230310, -0.985269465016349270, -0.985260913334294440, -0.985252359189087380, +-0.985243802580749390, -0.985235243509301920, -0.985226681974766370, -0.985218117977164080, -0.985209551516516460, -0.985200982592844940, -0.985192411206171070, -0.985183837356516160, +-0.985175261043901520, -0.985166682268348910, -0.985158101029879440, -0.985149517328514860, -0.985140931164276370, -0.985132342537185620, -0.985123751447264050, -0.985115157894532970, +-0.985106561879014130, -0.985097963400728750, -0.985089362459698580, -0.985080759055944940, -0.985072153189489490, -0.985063544860353520, -0.985054934068558820, -0.985046320814126690, +-0.985037705097078780, -0.985029086917436620, -0.985020466275221770, -0.985011843170455760, -0.985003217603160120, -0.984994589573356390, -0.984985959081066230, -0.984977326126311170, +-0.984968690709112750, -0.984960052829492730, -0.984951412487472420, -0.984942769683073700, -0.984934124416318000, -0.984925476687227070, -0.984916826495822350, -0.984908173842125590, +-0.984899518726158440, -0.984890861147942440, -0.984882201107499240, -0.984873538604850610, -0.984864873640018180, -0.984856206213023500, -0.984847536323888330, -0.984838863972634320, +-0.984830189159283110, -0.984821511883856470, -0.984812832146376050, -0.984804149946863490, -0.984795465285340570, -0.984786778161829020, -0.984778088576350520, -0.984769396528926810, +-0.984760702019579660, -0.984752005048330710, -0.984743305615201740, -0.984734603720214490, -0.984725899363390720, -0.984717192544752210, -0.984708483264320700, -0.984699771522118070, +-0.984691057318165970, -0.984682340652486170, -0.984673621525100630, -0.984664899936030900, -0.984656175885299080, -0.984647449372926700, -0.984638720398935630, -0.984629988963347970, +-0.984621255066185140, -0.984612518707469350, -0.984603779887222140, -0.984595038605465490, -0.984586294862221270, -0.984577548657511350, -0.984568799991357490, -0.984560048863781680, +-0.984551295274805670, -0.984542539224451560, -0.984533780712741000, -0.984525019739695970, -0.984516256305338460, -0.984507490409690320, -0.984498722052773330, -0.984489951234609690, +-0.984481177955221050, -0.984472402214629510, -0.984463624012857030, -0.984454843349925390, -0.984446060225856790, -0.984437274640672880, -0.984428486594395860, -0.984419696087047600, +-0.984410903118650090, -0.984402107689225310, -0.984393309798795360, -0.984384509447382090, -0.984375706635007510, -0.984366901361693690, -0.984358093627462630, -0.984349283432336300, +-0.984340470776336800, -0.984331655659485990, -0.984322838081806210, -0.984314018043319190, -0.984305195544047270, -0.984296370584012310, -0.984287543163236410, -0.984278713281741660, +-0.984269880939550150, -0.984261046136683860, -0.984252208873165000, -0.984243369149015670, -0.984234526964257840, -0.984225682318913720, -0.984216835213005400, -0.984207985646555090, +-0.984199133619584670, -0.984190279132116430, -0.984181422184172590, -0.984172562775775140, -0.984163700906946270, -0.984154836577708190, -0.984145969788082890, -0.984137100538092780, +-0.984128228827759970, -0.984119354657106430, -0.984110478026154590, -0.984101598934926550, -0.984092717383444620, -0.984083833371730780, -0.984074946899807350, -0.984066057967696530, +-0.984057166575420640, -0.984048272723001770, -0.984039376410462350, -0.984030477637824360, -0.984021576405110230, -0.984012672712342160, -0.984003766559542360, -0.983994857946733140, +-0.983985946873936920, -0.983977033341175700, -0.983968117348471890, -0.983959198895847820, -0.983950277983325790, -0.983941354610928020, -0.983932428778676820, -0.983923500486594600, +-0.983914569734703590, -0.983905636523026320, -0.983896700851584760, -0.983887762720401570, -0.983878822129498840, -0.983869879078899220, -0.983860933568624810, -0.983851985598698130, +-0.983843035169141400, -0.983834082279977150, -0.983825126931227590, -0.983816169122915360, -0.983807208855062560, -0.983798246127691840, -0.983789280940825520, -0.983780313294486010, +-0.983771343188695640, -0.983762370623476930, -0.983753395598852220, -0.983744418114844140, -0.983735438171475020, -0.983726455768767270, -0.983717470906743330, -0.983708483585425730, +-0.983699493804837010, -0.983690501564999490, -0.983681506865935700, -0.983672509707668170, -0.983663510090219350, -0.983654508013611760, -0.983645503477867940, -0.983636496483010330, +-0.983627487029061440, -0.983618475116043940, -0.983609460743980150, -0.983600443912892700, -0.983591424622804240, -0.983582402873737220, -0.983573378665714040, -0.983564351998757580, +-0.983555322872890160, -0.983546291288134420, -0.983537257244513020, -0.983528220742048380, -0.983519181780763250, -0.983510140360680190, -0.983501096481821710, -0.983492050144210590, +-0.983483001347869260, -0.983473950092820460, -0.983464896379086740, -0.983455840206690860, -0.983446781575655240, -0.983437720486002860, -0.983428656937756050, -0.983419590930937670, +-0.983410522465570260, -0.983401451541676570, -0.983392378159279160, -0.983383302318400880, -0.983374224019064380, -0.983365143261292320, -0.983356060045107340, -0.983346974370532200, +-0.983337886237589660, -0.983328795646302490, -0.983319702596693210, -0.983310607088784700, -0.983301509122599730, -0.983292408698160920, -0.983283305815491170, -0.983274200474613000, +-0.983265092675549510, -0.983255982418323130, -0.983246869702956940, -0.983237754529473480, -0.983228636897895750, -0.983219516808246260, -0.983210394260548020, -0.983201269254823870, +-0.983192141791096490, -0.983183011869388830, -0.983173879489723570, -0.983164744652123670, -0.983155607356611890, -0.983146467603211010, -0.983137325391943980, -0.983128180722833810, +-0.983119033595903020, -0.983109884011174720, -0.983100731968671650, -0.983091577468416800, -0.983082420510432930, -0.983073261094743130, -0.983064099221370060, -0.983054934890336800, +-0.983045768101666220, -0.983036598855381190, -0.983027427151504600, -0.983018252990059520, -0.983009076371068820, -0.982999897294555390, -0.982990715760542310, -0.982981531769052340, +-0.982972345320108580, -0.982963156413733890, -0.982953965049951470, -0.982944771228783990, -0.982935574950254630, -0.982926376214386280, -0.982917175021202130, -0.982907971370724940, +-0.982898765262977810, -0.982889556697983830, -0.982880345675765880, -0.982871132196347140, -0.982861916259750500, -0.982852697865999160, -0.982843477015115980, -0.982834253707124180, +-0.982825027942046630, -0.982815799719906620, -0.982806569040727160, -0.982797335904531220, -0.982788100311341890, -0.982778862261182380, -0.982769621754075670, -0.982760378790044960, +-0.982751133369113240, -0.982741885491303700, -0.982732635156639440, -0.982723382365143670, -0.982714127116839360, -0.982704869411749730, -0.982695609249897960, -0.982686346631307160, +-0.982677081556000530, -0.982667814024001160, -0.982658544035332260, -0.982649271590016920, -0.982639996688078550, -0.982630719329540050, -0.982621439514424820, -0.982612157242755970, +-0.982602872514556800, -0.982593585329850420, -0.982584295688660010, -0.982575003591008910, -0.982565709036920310, -0.982556412026417410, -0.982547112559523540, -0.982537810636261780, +-0.982528506256655660, -0.982519199420728070, -0.982509890128502650, -0.982500578380002490, -0.982491264175250790, -0.982481947514270980, -0.982472628397086270, -0.982463306823720070, +-0.982453982794195490, -0.982444656308536060, -0.982435327366764870, -0.982425995968905450, -0.982416662114981020, -0.982407325805015000, -0.982397987039030580, -0.982388645817051210, +-0.982379302139100300, -0.982369956005201050, -0.982360607415376900, -0.982351256369651260, -0.982341902868047570, -0.982332546910589020, -0.982323188497299050, -0.982313827628201190, +-0.982304464303318750, -0.982295098522675160, -0.982285730286293850, -0.982276359594198120, -0.982266986446411640, -0.982257610842957600, -0.982248232783859530, -0.982238852269140870, +-0.982229469298825150, -0.982220083872935690, -0.982210695991496020, -0.982201305654529570, -0.982191912862059980, -0.982182517614110460, -0.982173119910704770, -0.982163719751866230, +-0.982154317137618470, -0.982144912067984820, -0.982135504542988920, -0.982126094562654210, -0.982116682127004310, -0.982107267236062790, -0.982097849889852940, -0.982088430088398520, +-0.982079007831723080, -0.982069583119850150, -0.982060155952803160, -0.982050726330605860, -0.982041294253281680, -0.982031859720854270, -0.982022422733347280, -0.982012983290784240, +-0.982003541393188570, -0.981994097040584270, -0.981984650232994530, -0.981975200970443330, -0.981965749252953990, -0.981956295080550380, -0.981946838453256030, -0.981937379371094600, +-0.981927917834089610, -0.981918453842264950, -0.981908987395644030, -0.981899518494250720, -0.981890047138108570, -0.981880573327241320, -0.981871097061672750, -0.981861618341426270, +-0.981852137166525860, -0.981842653536995070, -0.981833167452857650, -0.981823678914137240, -0.981814187920857730, -0.981804694473042750, -0.981795198570715950, -0.981785700213901210, +-0.981776199402622280, -0.981766696136902710, -0.981757190416766570, -0.981747682242237300, -0.981738171613338870, -0.981728658530095060, -0.981719142992529600, -0.981709625000666160, +-0.981700104554528830, -0.981690581654141140, -0.981681056299526960, -0.981671528490710270, -0.981661998227714610, -0.981652465510564070, -0.981642930339282290, -0.981633392713893270, +-0.981623852634420760, -0.981614310100888510, -0.981604765113320620, -0.981595217671740740, -0.981585667776172840, -0.981576115426640810, -0.981566560623168380, -0.981557003365779670, +-0.981547443654498310, -0.981537881489348510, -0.981528316870353910, -0.981518749797538500, -0.981509180270926260, -0.981499608290541060, -0.981490033856406760, -0.981480456968547470, +-0.981470877626987040, -0.981461295831749460, -0.981451711582858490, -0.981442124880338330, -0.981432535724212960, -0.981422944114506040, -0.981413350051241970, -0.981403753534444420, +-0.981394154564137480, -0.981384553140345120, -0.981374949263091430, -0.981365342932400410, -0.981355734148295910, -0.981346122910802140, -0.981336509219943090, -0.981326893075742830, +-0.981317274478225140, -0.981307653427414440, -0.981298029923334590, -0.981288403966009580, -0.981278775555463610, -0.981269144691720660, -0.981259511374804940, -0.981249875604740420, +-0.981240237381551080, -0.981230596705261360, -0.981220953575895010, -0.981211307993476330, -0.981201659958029330, -0.981192009469578190, -0.981182356528147000, -0.981172701133759980, +-0.981163043286441220, -0.981153382986214790, -0.981143720233104920, -0.981134055027135800, -0.981124387368331520, -0.981114717256716170, -0.981105044692314190, -0.981095369675149430, +-0.981085692205246440, -0.981076012282629080, -0.981066329907321680, -0.981056645079348530, -0.981046957798733740, -0.981037268065501510, -0.981027575879676260, -0.981017881241281970, +-0.981008184150342970, -0.980998484606883440, -0.980988782610927810, -0.980979078162500180, -0.980969371261624870, -0.980959661908326170, -0.980949950102628310, -0.980940235844555470, +-0.980930519134132100, -0.980920799971382480, -0.980911078356330850, -0.980901354289001490, -0.980891627769418740, -0.980881898797606900, -0.980872167373590400, -0.980862433497393440, +-0.980852697169040330, -0.980842958388555510, -0.980833217155963390, -0.980823473471288180, -0.980813727334554190, -0.980803978745785950, -0.980794227705007790, -0.980784474212244020, +-0.980774718267519050, -0.980764959870857430, -0.980755199022283250, -0.980745435721821160, -0.980735669969495350, -0.980725901765330480, -0.980716131109350850, -0.980706358001580900, +-0.980696582442045050, -0.980686804430767720, -0.980677023967773340, -0.980667241053086450, -0.980657455686731460, -0.980647667868732810, -0.980637877599115030, -0.980628084877902540, +-0.980618289705119880, -0.980608492080791370, -0.980598692004941760, -0.980588889477595370, -0.980579084498776730, -0.980569277068510380, -0.980559467186820970, -0.980549654853732690, +-0.980539840069270420, -0.980530022833458470, -0.980520203146321490, -0.980510381007884010, -0.980500556418170580, -0.980490729377205830, -0.980480899885014080, -0.980471067941620200, +-0.980461233547048620, -0.980451396701323970, -0.980441557404470920, -0.980431715656513880, -0.980421871457477500, -0.980412024807386540, -0.980402175706265420, -0.980392324154139020, +-0.980382470151031640, -0.980372613696968150, -0.980362754791973100, -0.980352893436071240, -0.980343029629287100, -0.980333163371645330, -0.980323294663170810, -0.980313423503887840, +-0.980303549893821510, -0.980293673832996150, -0.980283795321436720, -0.980273914359167780, -0.980264030946214060, -0.980254145082600110, -0.980244256768351030, -0.980234366003491120, +-0.980224472788045480, -0.980214577122038520, -0.980204679005495130, -0.980194778438440050, -0.980184875420898050, -0.980174969952893880, -0.980165062034452310, -0.980155151665597970, +-0.980145238846355850, -0.980135323576750590, -0.980125405856806960, -0.980115485686549940, -0.980105563066004160, -0.980095637995194500, -0.980085710474145610, -0.980075780502882580, +-0.980065848081430050, -0.980055913209813000, -0.980045975888055980, -0.980036036116184170, -0.980026093894222240, -0.980016149222195040, -0.980006202100127450, -0.979996252528044450, +-0.979986300505970800, -0.979976346033931360, -0.979966389111951000, -0.979956429740054700, -0.979946467918267340, -0.979936503646613890, -0.979926536925119110, -0.979916567753807980, +-0.979906596132705480, -0.979896622061836360, -0.979886645541225840, -0.979876666570898560, -0.979866685150879710, -0.979856701281194180, -0.979846714961866820, -0.979836726192922720, +-0.979826734974386770, -0.979816741306284040, -0.979806745188639420, -0.979796746621477980, -0.979786745604824590, -0.979776742138704360, -0.979766736223142360, -0.979756727858163370, +-0.979746717043792680, -0.979736703780055170, -0.979726688066975940, -0.979716669904579950, -0.979706649292892200, -0.979696626231937980, -0.979686600721742070, -0.979676572762329780, +-0.979666542353725970, -0.979656509495955840, -0.979646474189044380, -0.979636436433016790, -0.979626396227898040, -0.979616353573713460, -0.979606308470487800, -0.979596260918246480, +-0.979586210917014480, -0.979576158466817000, -0.979566103567679040, -0.979556046219625890, -0.979545986422682650, -0.979535924176874300, -0.979525859482226260, -0.979515792338763510, +-0.979505722746511380, -0.979495650705494820, -0.979485576215739280, -0.979475499277269730, -0.979465419890111380, -0.979455338054289530, -0.979445253769829380, -0.979435167036756040, +-0.979425077855094810, -0.979414986224870780, -0.979404892146109370, -0.979394795618835690, -0.979384696643075150, -0.979374595218852730, -0.979364491346193860, -0.979354385025123730, +-0.979344276255667780, -0.979334165037850980, -0.979324051371698760, -0.979313935257236530, -0.979303816694489400, -0.979293695683482790, -0.979283572224241890, -0.979273446316792030, +-0.979263317961158620, -0.979253187157366870, -0.979243053905442080, -0.979232918205409810, -0.979222780057295130, -0.979212639461123580, -0.979202496416920360, -0.979192350924711020, +-0.979182202984520630, -0.979172052596374850, -0.979161899760298880, -0.979151744476318250, -0.979141586744458170, -0.979131426564744170, -0.979121263937201560, -0.979111098861855880, +-0.979100931338732330, -0.979090761367856550, -0.979080588949253870, -0.979070414082949590, -0.979060236768969470, -0.979050057007338600, -0.979039874798082630, -0.979029690141226980, +-0.979019503036797190, -0.979009313484818570, -0.978999121485316650, -0.978988927038316860, -0.978978730143844840, -0.978968530801926030, -0.978958329012585840, -0.978948124775849800, +-0.978937918091743580, -0.978927708960292460, -0.978917497381522010, -0.978907283355457960, -0.978897066882125520, -0.978886847961550570, -0.978876626593758400, -0.978866402778774790, +-0.978856176516625040, -0.978845947807334920, -0.978835716650929940, -0.978825483047435660, -0.978815246996877610, -0.978805008499281540, -0.978794767554672870, -0.978784524163077370, +-0.978774278324520460, -0.978764030039028010, -0.978753779306625330, -0.978743526127338280, -0.978733270501192300, -0.978723012428213250, -0.978712751908426660, -0.978702488941858180, +-0.978692223528533470, -0.978681955668478150, -0.978671685361718110, -0.978661412608278660, -0.978651137408185770, -0.978640859761465090, -0.978630579668142150, -0.978620297128242830, +-0.978610012141792770, -0.978599724708817620, -0.978589434829343240, -0.978579142503395170, -0.978568847730999390, -0.978558550512181440, -0.978548250846967060, -0.978537948735382020, +-0.978527644177452190, -0.978517337173203220, -0.978507027722660960, -0.978496715825851070, -0.978486401482799420, -0.978476084693531760, -0.978465765458073840, -0.978455443776451550, +-0.978445119648690630, -0.978434793074816960, -0.978424464054856280, -0.978414132588834470, -0.978403798676777290, -0.978393462318710600, -0.978383123514660280, -0.978372782264652190, +-0.978362438568712080, -0.978352092426865940, -0.978341743839139410, -0.978331392805558700, -0.978321039326149440, -0.978310683400937630, -0.978300325029949010, -0.978289964213209680, +-0.978279600950745400, -0.978269235242582020, -0.978258867088745760, -0.978248496489262150, -0.978238123444157390, -0.978227747953457350, -0.978217370017187890, -0.978206989635375000, +-0.978196606808044660, -0.978186221535222720, -0.978175833816935290, -0.978165443653208340, -0.978155051044067750, -0.978144655989539480, -0.978134258489649630, -0.978123858544424070, +-0.978113456153888890, -0.978103051318070070, -0.978092644036993590, -0.978082234310685530, -0.978071822139171880, -0.978061407522478720, -0.978050990460632040, -0.978040570953657820, +-0.978030149001582250, -0.978019724604431210, -0.978009297762230890, -0.977998868475007390, -0.977988436742786680, -0.977978002565594860, -0.977967565943458130, -0.977957126876402350, +-0.977946685364453840, -0.977936241407638570, -0.977925795005982760, -0.977915346159512370, -0.977904894868253720, -0.977894441132232780, -0.977883984951475660, -0.977873526326008660, +-0.977863065255857870, -0.977852601741049380, -0.977842135781609390, -0.977831667377564000, -0.977821196528939510, -0.977810723235762010, -0.977800247498057830, -0.977789769315852820, +-0.977779288689173520, -0.977768805618045910, -0.977758320102496410, -0.977747832142551010, -0.977737341738236120, -0.977726848889577730, -0.977716353596602360, -0.977705855859336000, +-0.977695355677805080, -0.977684853052035780, -0.977674347982054210, -0.977663840467886900, -0.977653330509559940, -0.977642818107099740, -0.977632303260532410, -0.977621785969884360, +-0.977611266235181800, -0.977600744056451140, -0.977590219433718600, -0.977579692367010480, -0.977569162856353090, -0.977558630901772860, -0.977548096503296100, -0.977537559660949020, +-0.977527020374758030, -0.977516478644749550, -0.977505934470949800, -0.977495387853385300, -0.977484838792082260, -0.977474287287067200, -0.977463733338366340, -0.977453176946006200, +-0.977442618110013100, -0.977432056830413450, -0.977421493107233700, -0.977410926940500140, -0.977400358330239310, -0.977389787276477630, -0.977379213779241420, -0.977368637838557210, +-0.977358059454451420, -0.977347478626950370, -0.977336895356080700, -0.977326309641868840, -0.977315721484341200, -0.977305130883524110, -0.977294537839444310, -0.977283942352128230, +-0.977273344421602190, -0.977262744047892820, -0.977252141231026660, -0.977241535971030030, -0.977230928267929570, -0.977220318121751810, -0.977209705532523290, -0.977199090500270540, +-0.977188473025019990, -0.977177853106798280, -0.977167230745631940, -0.977156605941547520, -0.977145978694571540, -0.977135349004730760, -0.977124716872051490, -0.977114082296560380, +-0.977103445278284190, -0.977092805817249330, -0.977082163913482460, -0.977071519567010220, -0.977060872777859020, -0.977050223546055860, -0.977039571871627040, -0.977028917754599210, +-0.977018261194999240, -0.977007602192853540, -0.976996940748188770, -0.976986276861031790, -0.976975610531409020, -0.976964941759347230, -0.976954270544873160, -0.976943596888013350, +-0.976932920788794570, -0.976922242247243440, -0.976911561263386740, -0.976900877837251100, -0.976890191968863400, -0.976879503658250050, -0.976868812905438030, -0.976858119710454000, +-0.976847424073324590, -0.976836725994076670, -0.976826025472737000, -0.976815322509332120, -0.976804617103888990, -0.976793909256434390, -0.976783198966994950, -0.976772486235597540, +-0.976761771062268910, -0.976751053447035830, -0.976740333389925160, -0.976729610890963660, -0.976718885950178080, -0.976708158567595410, -0.976697428743242170, -0.976686696477145460, +-0.976675961769331910, -0.976665224619828630, -0.976654485028662140, -0.976643742995859540, -0.976632998521447470, -0.976622251605453020, -0.976611502247902830, -0.976600750448824000, +-0.976589996208243160, -0.976579239526187410, -0.976568480402683630, -0.976557718837758550, -0.976546954831439160, -0.976536188383752450, -0.976525419494725270, -0.976514648164384490, +-0.976503874392757100, -0.976493098179870070, -0.976482319525750260, -0.976471538430424670, -0.976460754893920260, -0.976449968916263900, -0.976439180497482680, -0.976428389637603370, +-0.976417596336653260, -0.976406800594659010, -0.976396002411647920, -0.976385201787646650, -0.976374398722682500, -0.976363593216782340, -0.976352785269973160, -0.976341974882282030, +-0.976331162053735930, -0.976320346784362080, -0.976309529074187220, -0.976298708923238560, -0.976287886331543060, -0.976277061299127950, -0.976266233826020180, -0.976255403912246860, +-0.976244571557834950, -0.976233736762811670, -0.976222899527203980, -0.976212059851039090, -0.976201217734343980, -0.976190373177145960, -0.976179526179471900, -0.976168676741349000, +-0.976157824862804450, -0.976146970543865340, -0.976136113784558890, -0.976125254584912060, -0.976114392944952170, -0.976103528864706190, -0.976092662344201440, -0.976081793383465010, +-0.976070921982524210, -0.976060048141405900, -0.976049171860137620, -0.976038293138746350, -0.976027411977259400, -0.976016528375703960, -0.976005642334107140, -0.975994753852496230, +-0.975983862930898450, -0.975972969569340880, -0.975962073767851050, -0.975951175526455940, -0.975940274845182860, -0.975929371724059250, -0.975918466163112060, -0.975907558162368850, +-0.975896647721856580, -0.975885734841602790, -0.975874819521634680, -0.975863901761979460, -0.975852981562664530, -0.975842058923717110, -0.975831133845164620, -0.975820206327034260, +-0.975809276369353330, -0.975798343972149260, -0.975787409135449260, -0.975776471859280850, -0.975765532143671120, -0.975754589988647720, -0.975743645394237750, -0.975732698360468720, +-0.975721748887367850, -0.975710796974962660, -0.975699842623280470, -0.975688885832348700, -0.975677926602194770, -0.975666964932845880, -0.975656000824329680, -0.975645034276673480, +-0.975634065289904710, -0.975623093864050660, -0.975612119999138990, -0.975601143695197020, -0.975590164952252150, -0.975579183770331810, -0.975568200149463660, -0.975557214089674880, +-0.975546225590993130, -0.975535234653445830, -0.975524241277060390, -0.975513245461864350, -0.975502247207885140, -0.975491246515150510, -0.975480243383687550, -0.975469237813524130, +-0.975458229804687550, -0.975447219357205460, -0.975436206471105180, -0.975425191146414460, -0.975414173383160830, -0.975403153181371720, -0.975392130541074650, -0.975381105462297390, +-0.975370077945067250, -0.975359047989411980, -0.975348015595359110, -0.975336980762936180, -0.975325943492170720, -0.975314903783090490, -0.975303861635723020, -0.975292817050095850, +-0.975281770026236620, -0.975270720564172970, -0.975259668663932540, -0.975248614325543000, -0.975237557549031850, -0.975226498334426760, -0.975215436681755590, -0.975204372591045640, +-0.975193306062324900, -0.975182237095620800, -0.975171165690961180, -0.975160091848373600, -0.975149015567885800, -0.975137936849525430, -0.975126855693320250, -0.975115772099298010, +-0.975104686067486240, -0.975093597597912810, -0.975082506690605370, -0.975071413345591550, -0.975060317562899350, -0.975049219342556280, -0.975038118684590120, -0.975027015589028820, +-0.975015910055899830, -0.975004802085231210, -0.974993691677050410, -0.974982578831385500, -0.974971463548264140, -0.974960345827714070, -0.974949225669763160, -0.974938103074439290, +-0.974926978041769980, -0.974915850571783320, -0.974904720664507060, -0.974893588319968970, -0.974882453538196800, -0.974871316319218640, -0.974860176663062130, -0.974849034569755250, +-0.974837890039325750, -0.974826743071801390, -0.974815593667210380, -0.974804441825580240, -0.974793287546939060, -0.974782130831314710, -0.974770971678734940, -0.974759810089227740, +-0.974748646062821080, -0.974737479599542820, -0.974726310699420840, -0.974715139362483000, -0.974703965588757380, -0.974692789378271860, -0.974681610731054300, -0.974670429647132800, +-0.974659246126535210, -0.974648060169289510, -0.974636871775423570, -0.974625680944965490, -0.974614487677943230, -0.974603291974384780, -0.974592093834318110, -0.974580893257771200, +-0.974569690244771910, -0.974558484795348570, -0.974547276909528910, -0.974536066587341150, -0.974524853828813150, -0.974513638633973110, -0.974502421002848900, -0.974491200935468700, +-0.974479978431860410, -0.974468753492052200, -0.974457526116072170, -0.974446296303948300, -0.974435064055708570, -0.974423829371381390, -0.974412592250994410, -0.974401352694576170, +-0.974390110702154420, -0.974378866273757360, -0.974367619409413190, -0.974356370109149990, -0.974345118372995870, -0.974333864200978890, -0.974322607593127280, -0.974311348549469210, +-0.974300087070032680, -0.974288823154846000, -0.974277556803937240, -0.974266288017334610, -0.974255016795066210, -0.974243743137160330, -0.974232467043645080, -0.974221188514548640, +-0.974209907549899220, -0.974198624149725020, -0.974187338314054350, -0.974176050042915190, -0.974164759336336060, -0.974153466194344950, -0.974142170616970060, -0.974130872604239920, +-0.974119572156182500, -0.974108269272826230, -0.974096963954199200, -0.974085656200329940, -0.974074346011246320, -0.974063033386976970, -0.974051718327550000, -0.974040400832993700, +-0.974029080903336400, -0.974017758538606500, -0.974006433738832110, -0.973995106504041640, -0.973983776834263400, -0.973972444729525820, -0.973961110189856980, -0.973949773215285420, +-0.973938433805839440, -0.973927091961547360, -0.973915747682437600, -0.973904400968538360, -0.973893051819878290, -0.973881700236485460, -0.973870346218388420, -0.973858989765615470, +-0.973847630878195150, -0.973836269556155650, -0.973824905799525520, -0.973813539608333170, -0.973802170982606910, -0.973790799922375270, -0.973779426427666570, -0.973768050498509340, +-0.973756672134932000, -0.973745291336962860, -0.973733908104630670, -0.973722522437963640, -0.973711134336990300, -0.973699743801739070, -0.973688350832238480, -0.973676955428517180, +-0.973665557590603250, -0.973654157318525670, -0.973642754612312530, -0.973631349471992590, -0.973619941897594150, -0.973608531889145980, -0.973597119446676480, -0.973585704570214090, +-0.973574287259787560, -0.973562867515425200, -0.973551445337155760, -0.973540020725007670, -0.973528593679009460, -0.973517164199189880, -0.973505732285577350, -0.973494297938200530, +-0.973482861157087820, -0.973471421942268100, -0.973459980293769790, -0.973448536211621530, -0.973437089695851960, -0.973425640746489520, -0.973414189363563160, -0.973402735547101220, +-0.973391279297132540, -0.973379820613685550, -0.973368359496789130, -0.973356895946471680, -0.973345429962762080, -0.973333961545688850, -0.973322490695280760, -0.973311017411566450, +-0.973299541694574550, -0.973288063544333840, -0.973276582960872940, -0.973265099944220500, -0.973253614494405510, -0.973242126611456370, -0.973230636295401850, -0.973219143546270820, +-0.973207648364091900, -0.973196150748893980, -0.973184650700705480, -0.973173148219555470, -0.973161643305472610, -0.973150135958485650, -0.973138626178623230, -0.973127113965914450, +-0.973115599320387710, -0.973104082242072010, -0.973092562730996090, -0.973081040787188820, -0.973069516410678960, -0.973057989601495250, -0.973046460359666580, -0.973034928685221790, +-0.973023394578189650, -0.973011858038599020, -0.973000319066478770, -0.972988777661857650, -0.972977233824764750, -0.972965687555228610, -0.972954138853278310, -0.972942587718942600, +-0.972931034152250570, -0.972919478153230770, -0.972907919721912480, -0.972896358858324260, -0.972884795562495190, -0.972873229834454010, -0.972861661674229940, -0.972850091081851610, +-0.972838518057348000, -0.972826942600748200, -0.972815364712081080, -0.972803784391375380, -0.972792201638660430, -0.972780616453964740, -0.972769028837317640, -0.972757438788747990, +-0.972745846308284760, -0.972734251395956820, -0.972722654051793260, -0.972711054275823160, -0.972699452068075400, -0.972687847428578940, -0.972676240357362890, -0.972664630854456310, +-0.972653018919888090, -0.972641404553687310, -0.972629787755883050, -0.972618168526504290, -0.972606546865580120, -0.972594922773139640, -0.972583296249211800, -0.972571667293825710, +-0.972560035907010460, -0.972548402088795120, -0.972536765839208780, -0.972525127158280540, -0.972513486046039490, -0.972501842502514700, -0.972490196527735380, -0.972478548121730400, +-0.972466897284529170, -0.972455244016160680, -0.972443588316654120, -0.972431930186038570, -0.972420269624343140, -0.972408606631597120, -0.972396941207829490, -0.972385273353069570, +-0.972373603067346440, -0.972361930350689300, -0.972350255203127340, -0.972338577624689780, -0.972326897615405810, -0.972315215175304500, -0.972303530304415080, -0.972291843002767050, +-0.972280153270389190, -0.972268461107311130, -0.972256766513561850, -0.972245069489170670, -0.972233370034166770, -0.972221668148579470, -0.972209963832437960, -0.972198257085771680, +-0.972186547908609590, -0.972174836300981230, -0.972163122262915790, -0.972151405794442480, -0.972139686895590720, -0.972127965566389700, -0.972116241806868730, -0.972104515617057240, +-0.972092786996984430, -0.972081055946679710, -0.972069322466172170, -0.972057586555491460, -0.972045848214666770, -0.972034107443727420, -0.972022364242702940, -0.972010618611622410, +-0.971998870550515370, -0.971987120059411120, -0.971975367138339100, -0.971963611787328710, -0.971951854006409270, -0.971940093795610080, -0.971928331154960800, -0.971916566084490620, +-0.971904798584229070, -0.971893028654205460, -0.971881256294449440, -0.971869481504990080, -0.971857704285857160, -0.971845924637079860, -0.971834142558687830, -0.971822358050710380, +-0.971810571113177040, -0.971798781746117330, -0.971786989949560700, -0.971775195723536540, -0.971763399068074300, -0.971751599983203710, -0.971739798468954090, -0.971727994525354970, +-0.971716188152435770, -0.971704379350226240, -0.971692568118755710, -0.971680754458053690, -0.971668938368149830, -0.971657119849073660, -0.971645298900854600, -0.971633475523522420, +-0.971621649717106520, -0.971609821481636440, -0.971597990817141820, -0.971586157723652200, -0.971574322201197330, -0.971562484249806510, -0.971550643869509510, -0.971538801060335850, +-0.971526955822315300, -0.971515108155477260, -0.971503258059851600, -0.971491405535467640, -0.971479550582355240, -0.971467693200543940, -0.971455833390063360, -0.971443971150943280, +-0.971432106483213210, -0.971420239386902920, -0.971408369862042040, -0.971396497908660230, -0.971384623526787120, -0.971372746716452460, -0.971360867477686020, -0.971348985810517320, +-0.971337101714976230, -0.971325215191092380, -0.971313326238895440, -0.971301434858415250, -0.971289541049681350, -0.971277644812723720, -0.971265746147571880, -0.971253845054255830, +-0.971241941532804960, -0.971230035583249380, -0.971218127205618620, -0.971206216399942650, -0.971194303166251100, -0.971182387504573750, -0.971170469414940450, -0.971158548897381070, +-0.971146625951925250, -0.971134700578602850, -0.971122772777443630, -0.971110842548477570, -0.971098909891734420, -0.971086974807243930, -0.971075037295036080, -0.971063097355140510, +-0.971051154987587320, -0.971039210192406130, -0.971027262969627050, -0.971015313319279700, -0.971003361241394190, -0.970991406736000150, -0.970979449803127670, -0.970967490442806500, +-0.970955528655066740, -0.970943564439938010, -0.970931597797450530, -0.970919628727633930, -0.970907657230518310, -0.970895683306133410, -0.970883706954509430, -0.970871728175676240, +-0.970859746969663600, -0.970847763336501690, -0.970835777276220280, -0.970823788788849450, -0.970811797874419180, -0.970799804532959440, -0.970787808764500100, -0.970775810569071360, +-0.970763809946703080, -0.970751806897425240, -0.970739801421267810, -0.970727793518261000, -0.970715783188434540, -0.970703770431818770, -0.970691755248443530, -0.970679737638338920, +-0.970667717601534920, -0.970655695138061710, -0.970643670247949180, -0.970631642931227500, -0.970619613187926780, -0.970607581018076870, -0.970595546421708200, -0.970583509398850520, +-0.970571469949534140, -0.970559428073789030, -0.970547383771645400, -0.970535337043133330, -0.970523287888282900, -0.970511236307124210, -0.970499182299687460, -0.970487125866002720, +-0.970475067006100200, -0.970463005720009990, -0.970450942007762270, -0.970438875869387260, -0.970426807304915040, -0.970414736314375690, -0.970402662897799640, -0.970390587055216860, +-0.970378508786657550, -0.970366428092152120, -0.970354344971730450, -0.970342259425423070, -0.970330171453259950, -0.970318081055271510, -0.970305988231487730, -0.970293892981939130, +-0.970281795306655590, -0.970269695205667750, -0.970257592679005580, -0.970245487726699500, -0.970233380348779590, -0.970221270545276400, -0.970209158316219900, -0.970197043661640500, +-0.970184926581568520, -0.970172807076034260, -0.970160685145067920, -0.970148560788699930, -0.970136434006960480, -0.970124304799879990, -0.970112173167488770, -0.970100039109817010, +-0.970087902626895260, -0.970075763718753700, -0.970063622385422760, -0.970051478626932750, -0.970039332443313970, -0.970027183834596960, -0.970015032800811920, -0.970002879341989370, +-0.969990723458159620, -0.969978565149352990, -0.969966404415600000, -0.969954241256930970, -0.969942075673376420, -0.969929907664966560, -0.969917737231732020, -0.969905564373703120, +-0.969893389090910270, -0.969881211383384010, -0.969869031251154650, -0.969856848694252700, -0.969844663712708720, -0.969832476306553000, -0.969820286475816080, -0.969808094220528600, +-0.969795899540720760, -0.969783702436423200, -0.969771502907666340, -0.969759300954480820, -0.969747096576896950, -0.969734889774945370, -0.969722680548656510, -0.969710468898061120, +-0.969698254823189390, -0.969686038324072070, -0.969673819400739600, -0.969661598053222720, -0.969649374281551730, -0.969637148085757290, -0.969624919465870150, -0.969612688421920500, +-0.969600454953939320, -0.969588219061956910, -0.969575980746003930, -0.969563740006111010, -0.969551496842308790, -0.969539251254627700, -0.969527003243098710, -0.969514752807752010, +-0.969502499948618480, -0.969490244665728750, -0.969477986959113360, -0.969465726828802940, -0.969453464274828370, -0.969441199297220060, -0.969428931896008760, -0.969416662071225010, +-0.969404389822899780, -0.969392115151063490, -0.969379838055746900, -0.969367558536980760, -0.969355276594795700, -0.969342992229222490, -0.969330705440291760, -0.969318416228034270, +-0.969306124592480670, -0.969293830533661920, -0.969281534051608440, -0.969269235146351220, -0.969256933817920880, -0.969244630066348200, -0.969232323891664030, -0.969220015293898900, +-0.969207704273083780, -0.969195390829249550, -0.969183074962426620, -0.969170756672646180, -0.969158435959938780, -0.969146112824335160, -0.969133787265866410, -0.969121459284563170, +-0.969109128880456310, -0.969096796053576570, -0.969084460803954940, -0.969072123131622050, -0.969059783036608890, -0.969047440518946200, -0.969035095578665070, -0.969022748215796040, +-0.969010398430370290, -0.968998046222418470, -0.968985691591971570, -0.968973334539060320, -0.968960975063715810, -0.968948613165968920, -0.968936248845850390, -0.968923882103391310, +-0.968911512938622430, -0.968899141351574960, -0.968886767342279520, -0.968874390910767100, -0.968862012057068790, -0.968849630781215440, -0.968837247083238040, -0.968824860963167440, +-0.968812472421034740, -0.968800081456870910, -0.968787688070706810, -0.968775292262573530, -0.968762894032501930, -0.968750493380523210, -0.968738090306668130, -0.968725684810967990, +-0.968713276893453430, -0.968700866554155880, -0.968688453793106090, -0.968676038610335130, -0.968663621005874110, -0.968651200979753990, -0.968638778532005970, -0.968626353662660920, +-0.968613926371750030, -0.968601496659304280, -0.968589064525354760, -0.968576629969932660, -0.968564192993068950, -0.968551753594794730, -0.968539311775141190, -0.968526867534139300, +-0.968514420871820380, -0.968501971788215290, -0.968489520283355220, -0.968477066357271490, -0.968464610009994950, -0.968452151241557040, -0.968439690051988710, -0.968427226441321070, +-0.968414760409585410, -0.968402291956812820, -0.968389821083034510, -0.968377347788281660, -0.968364872072585480, -0.968352393935977160, -0.968339913378487680, -0.968327430400148570, +-0.968314945000990800, -0.968302457181045790, -0.968289966940344530, -0.968277474278918420, -0.968264979196798550, -0.968252481694016230, -0.968239981770602780, -0.968227479426589380, +-0.968214974662007230, -0.968202467476887650, -0.968189957871261830, -0.968177445845161300, -0.968164931398616920, -0.968152414531660340, -0.968139895244322760, -0.968127373536635360, +-0.968114849408629690, -0.968102322860336710, -0.968089793891788060, -0.968077262503014730, -0.968064728694048470, -0.968052192464920250, -0.968039653815661590, -0.968027112746303820, +-0.968014569256878230, -0.968002023347416250, -0.967989475017949190, -0.967976924268508450, -0.967964371099125480, -0.967951815509831450, -0.967939257500657900, -0.967926697071636260, +-0.967914134222797820, -0.967901568954174120, -0.967889001265796470, -0.967876431157696280, -0.967863858629904980, -0.967851283682454210, -0.967838706315375050, -0.967826126528699260, +-0.967813544322458030, -0.967800959696683010, -0.967788372651405490, -0.967775783186657250, -0.967763191302469350, -0.967750596998873560, -0.967738000275901290, -0.967725401133583960, +-0.967712799571953220, -0.967700195591040370, -0.967687589190877160, -0.967674980371494910, -0.967662369132925140, -0.967649755475199490, -0.967637139398349500, -0.967624520902406580, +-0.967611899987402490, -0.967599276653368530, -0.967586650900336460, -0.967574022728337700, -0.967561392137404000, -0.967548759127566660, -0.967536123698857550, -0.967523485851307980, +-0.967510845584949820, -0.967498202899814470, -0.967485557795933700, -0.967472910273339040, -0.967460260332062120, -0.967447607972134360, -0.967434953193587740, -0.967422295996453680, +-0.967409636380763940, -0.967396974346550140, -0.967384309893843830, -0.967371643022676750, -0.967358973733080550, -0.967346302025086980, -0.967333627898727570, -0.967320951354034180, +-0.967308272391038340, -0.967295591009771800, -0.967282907210266330, -0.967270220992553660, -0.967257532356665340, -0.967244841302633220, -0.967232147830488940, -0.967219451940264370, +-0.967206753631991160, -0.967194052905701150, -0.967181349761425890, -0.967168644199197240, -0.967155936219047050, -0.967143225821006870, -0.967130513005108880, -0.967117797771384400, +-0.967105080119865510, -0.967092360050583850, -0.967079637563571400, -0.967066912658859800, -0.967054185336480910, -0.967041455596466590, -0.967028723438848600, -0.967015988863658800, +-0.967003251870929060, -0.966990512460691230, -0.966977770632977070, -0.966965026387818450, -0.966952279725247330, -0.966939530645295480, -0.966926779147994740, -0.966914025233377110, +-0.966901268901474430, -0.966888510152318580, -0.966875748985941420, -0.966862985402374920, -0.966850219401650950, -0.966837450983801470, -0.966824680148858250, -0.966811906896853480, +-0.966799131227818800, -0.966786353141786400, -0.966773572638788050, -0.966760789718855820, -0.966748004382021580, -0.966735216628317300, -0.966722426457775060, -0.966709633870426740, +-0.966696838866304200, -0.966684041445439730, -0.966671241607865110, -0.966658439353612400, -0.966645634682713580, -0.966632827595200640, -0.966620018091105650, -0.966607206170460590, +-0.966594391833297540, -0.966581575079648480, -0.966568755909545610, -0.966555934323020670, -0.966543110320105980, -0.966530283900833510, -0.966517455065235340, -0.966504623813343570, +-0.966491790145190270, -0.966478954060807420, -0.966466115560227210, -0.966453274643481630, -0.966440431310602980, -0.966427585561623110, -0.966414737396574460, -0.966401886815488780, +-0.966389033818398580, -0.966376178405335630, -0.966363320576332230, -0.966350460331420690, -0.966337597670632880, -0.966324732594001090, -0.966311865101557420, -0.966298995193334180, +-0.966286122869363440, -0.966273248129677410, -0.966260370974308170, -0.966247491403288140, -0.966234609416649180, -0.966221725014423940, -0.966208838196644160, -0.966195948963342490, +-0.966183057314550790, -0.966170163250301580, -0.966157266770626850, -0.966144367875559020, -0.966131466565130160, -0.966118562839372810, -0.966105656698318940, -0.966092748142000860, +-0.966079837170451090, -0.966066923783701510, -0.966054007981784870, -0.966041089764733020, -0.966028169132578500, -0.966015246085353610, -0.966002320623090550, -0.965989392745821740, +-0.965976462453579380, -0.965963529746395880, -0.965950594624303660, -0.965937657087334810, -0.965924717135521860, -0.965911774768897110, -0.965898829987492990, -0.965885882791341800, +-0.965872933180475850, -0.965859981154927550, -0.965847026714729330, -0.965834069859913490, -0.965821110590512570, -0.965808148906558860, -0.965795184808084680, -0.965782218295122670, +-0.965769249367705030, -0.965756278025864280, -0.965743304269632840, -0.965730328099043130, -0.965717349514127580, -0.965704368514918700, -0.965691385101448920, -0.965678399273750650, +-0.965665411031856320, -0.965652420375798570, -0.965639427305609700, -0.965626431821322240, -0.965613433922968720, -0.965600433610581680, -0.965587430884193520, -0.965574425743836780, +-0.965561418189544000, -0.965548408221347580, -0.965535395839280270, -0.965522381043374400, -0.965509363833662590, -0.965496344210177380, -0.965483322172951300, -0.965470297722016870, +-0.965457270857406740, -0.965444241579153430, -0.965431209887289590, -0.965418175781847630, -0.965405139262860200, -0.965392100330359940, -0.965379058984379590, -0.965366015224951360, +-0.965352969052108320, -0.965339920465882680, -0.965326869466307300, -0.965313816053414710, -0.965300760227237650, -0.965287701987808670, -0.965274641335160390, -0.965261578269325570, +-0.965248512790336740, -0.965235444898226660, -0.965222374593027950, -0.965209301874773380, -0.965196226743495480, -0.965183149199227100, -0.965170069242000770, -0.965156986871849250, +-0.965143902088805290, -0.965130814892901650, -0.965117725284170840, -0.965104633262645840, -0.965091538828359070, -0.965078441981343630, -0.965065342721632020, -0.965052241049257020, +-0.965039136964251590, -0.965026030466648140, -0.965012921556479660, -0.964999810233778900, -0.964986696498578600, -0.964973580350911520, -0.964960461790810630, -0.964947340818308460, +-0.964934217433437990, -0.964921091636231850, -0.964907963426723140, -0.964894832804944480, -0.964881699770928750, -0.964868564324708690, -0.964855426466317280, -0.964842286195787270, +-0.964829143513151630, -0.964815998418443010, -0.964802850911694490, -0.964789700992938810, -0.964776548662208850, -0.964763393919537580, -0.964750236764957750, -0.964737077198502440, +-0.964723915220204290, -0.964710750830096500, -0.964697584028211710, -0.964684414814583110, -0.964671243189243350, -0.964658069152225520, -0.964644892703562460, -0.964631713843287280, +-0.964618532571432710, -0.964605348888031950, -0.964592162793117660, -0.964578974286723010, -0.964565783368880990, -0.964552590039624460, -0.964539394298986390, -0.964526196146999970, +-0.964512995583697960, -0.964499792609113450, -0.964486587223279510, -0.964473379426229130, -0.964460169217995270, -0.964446956598611020, -0.964433741568109350, -0.964420524126523240, +-0.964407304273885990, -0.964394082010230360, -0.964380857335589540, -0.964367630249996610, -0.964354400753484660, -0.964341168846086560, -0.964327934527835720, -0.964314697798764890, +-0.964301458658907370, -0.964288217108296150, -0.964274973146964530, -0.964261726774945260, -0.964248477992271870, -0.964235226798977220, -0.964221973195094510, -0.964208717180656820, +-0.964195458755697340, -0.964182197920249280, -0.964168934674345720, -0.964155669018019750, -0.964142400951304660, -0.964129130474233540, -0.964115857586839600, -0.964102582289156130, +-0.964089304581216110, -0.964076024463052850, -0.964062741934699430, -0.964049456996189270, -0.964036169647555450, -0.964022879888831170, -0.964009587720049630, -0.963996293141244240, +-0.963982996152448090, -0.963969696753694370, -0.963956394945016500, -0.963943090726447680, -0.963929784098021100, -0.963916475059769960, -0.963903163611727790, -0.963889849753927550, +-0.963876533486402790, -0.963863214809186690, -0.963849893722312560, -0.963836570225813590, -0.963823244319723330, -0.963809916004074840, -0.963796585278901660, -0.963783252144236990, +-0.963769916600114240, -0.963756578646566610, -0.963743238283627510, -0.963729895511330370, -0.963716550329708490, -0.963703202738795280, -0.963689852738623950, -0.963676500329228140, +-0.963663145510640920, -0.963649788282895940, -0.963636428646026500, -0.963623066600065910, -0.963609702145047710, -0.963596335281005300, -0.963582966007972000, -0.963569594325981220, +-0.963556220235066490, -0.963542843735261330, -0.963529464826598850, -0.963516083509112890, -0.963502699782836650, -0.963489313647803660, -0.963475925104047450, -0.963462534151601320, +-0.963449140790498930, -0.963435745020773560, -0.963422346842458980, -0.963408946255588480, -0.963395543260195720, -0.963382137856313880, -0.963368730043976940, -0.963355319823217980, +-0.963341907194070870, -0.963328492156568910, -0.963315074710745730, -0.963301654856634770, -0.963288232594269880, -0.963274807923684250, -0.963261380844911640, -0.963247951357985580, +-0.963234519462939700, -0.963221085159807420, -0.963207648448622500, -0.963194209329418350, -0.963180767802228830, -0.963167323867087250, -0.963153877524027480, -0.963140428773082920, +-0.963126977614287340, -0.963113524047674360, -0.963100068073277530, -0.963086609691130580, -0.963073148901266940, -0.963059685703720580, -0.963046220098525030, -0.963032752085713820, +-0.963019281665320800, -0.963005808837379520, -0.962992333601923710, -0.962978855958987130, -0.962965375908603430, -0.962951893450806230, -0.962938408585629290, -0.962924921313106470, +-0.962911431633271200, -0.962897939546157320, -0.962884445051798710, -0.962870948150228890, -0.962857448841481720, -0.962843947125590960, -0.962830443002590350, -0.962816936472513650, +-0.962803427535394500, -0.962789916191266860, -0.962776402440164490, -0.962762886282121030, -0.962749367717170350, -0.962735846745346290, -0.962722323366682620, -0.962708797581213080, +-0.962695269388971540, -0.962681738789991860, -0.962668205784307900, -0.962654670371953290, -0.962641132552962130, -0.962627592327368050, -0.962614049695205030, -0.962600504656506930, +-0.962586957211307490, -0.962573407359640700, -0.962559855101540410, -0.962546300437040480, -0.962532743366174780, -0.962519183888977280, -0.962505622005481730, -0.962492057715722100, +-0.962478491019732370, -0.962464921917546510, -0.962451350409198270, -0.962437776494721620, -0.962424200174150530, -0.962410621447518990, -0.962397040314860840, -0.962383456776210180, +-0.962369870831600750, -0.962356282481066750, -0.962342691724642040, -0.962329098562360490, -0.962315502994256280, -0.962301905020363280, -0.962288304640715570, -0.962274701855347140, +-0.962261096664291830, -0.962247489067583840, -0.962233879065257150, -0.962220266657345720, -0.962206651843883650, -0.962193034624904910, -0.962179415000443680, -0.962165792970533840, +-0.962152168535209570, -0.962138541694504750, -0.962124912448453770, -0.962111280797090300, -0.962097646740448730, -0.962084010278563050, -0.962070371411467340, -0.962056730139195790, +-0.962043086461782270, -0.962029440379261080, -0.962015791891666310, -0.962002140999032030, -0.961988487701392450, -0.961974831998781640, -0.961961173891233700, -0.961947513378782930, +-0.961933850461463290, -0.961920185139308990, -0.961906517412354330, -0.961892847280633290, -0.961879174744180170, -0.961865499803029160, -0.961851822457214340, -0.961838142706769930, +-0.961824460551730210, -0.961810775992129270, -0.961797089028001540, -0.961783399659380980, -0.961769707886302010, -0.961756013708798600, -0.961742317126905280, -0.961728618140656130, +-0.961714916750085580, -0.961701212955227590, -0.961687506756116580, -0.961673798152786750, -0.961660087145272510, -0.961646373733608060, -0.961632657917827700, -0.961618939697965640, +-0.961605219074056270, -0.961591496046133810, -0.961577770614232550, -0.961564042778386920, -0.961550312538631210, -0.961536579894999740, -0.961522844847526810, -0.961509107396246730, +-0.961495367541193910, -0.961481625282402660, -0.961467880619907290, -0.961454133553742320, -0.961440384083941950, -0.961426632210540700, -0.961412877933572770, -0.961399121253072700, +-0.961385362169074780, -0.961371600681613540, -0.961357836790723290, -0.961344070496438440, -0.961330301798793310, -0.961316530697822520, -0.961302757193560400, -0.961288981286041340, +-0.961275202975299890, -0.961261422261370350, -0.961247639144287350, -0.961233853624085200, -0.961220065700798430, -0.961206275374461460, -0.961192482645108930, -0.961178687512775020, +-0.961164889977494500, -0.961151090039301660, -0.961137287698231260, -0.961123482954317490, -0.961109675807595100, -0.961095866258098400, -0.961082054305862240, -0.961068239950920720, +-0.961054423193308800, -0.961040604033060690, -0.961026782470211120, -0.961012958504794510, -0.960999132136845620, -0.960985303366398870, -0.960971472193488770, -0.960957638618150200, +-0.960943802640417340, -0.960929964260325060, -0.960916123477907780, -0.960902280293200350, -0.960888434706237080, -0.960874586717052840, -0.960860736325682030, -0.960846883532159410, +-0.960833028336519620, -0.960819170738797190, -0.960805310739026860, -0.960791448337243280, -0.960777583533481080, -0.960763716327774910, -0.960749846720159400, -0.960735974710669400, +-0.960722100299339350, -0.960708223486203990, -0.960694344271298300, -0.960680462654656560, -0.960666578636313770, -0.960652692216304450, -0.960638803394663450, -0.960624912171425430, +-0.960611018546625120, -0.960597122520297160, -0.960583224092476540, -0.960569323263197880, -0.960555420032495830, -0.960541514400405250, -0.960527606366960880, -0.960513695932197490, +-0.960499783096149920, -0.960485867858852820, -0.960471950220341150, -0.960458030180649460, -0.960444107739812810, -0.960430182897865860, -0.960416255654843450, -0.960402326010780350, +-0.960388393965711520, -0.960374459519671710, -0.960360522672695670, -0.960346583424818380, -0.960332641776074580, -0.960318697726499250, -0.960304751276127020, -0.960290802424993100, +-0.960276851173132110, -0.960262897520579030, -0.960248941467368610, -0.960234983013535940, -0.960221022159115760, -0.960207058904143040, -0.960193093248652540, -0.960179125192679560, +-0.960165154736258520, -0.960151181879424720, -0.960137206622213020, -0.960123228964658180, -0.960109248906795390, -0.960095266448659390, -0.960081281590285270, -0.960067294331707900, +-0.960053304672962350, -0.960039312614083480, -0.960025318155106390, -0.960011321296065920, -0.959997322036997280, -0.959983320377935210, -0.959969316318914910, -0.959955309859971240, +-0.959941301001139390, -0.959927289742454230, -0.959913276083950830, -0.959899260025664280, -0.959885241567629670, -0.959871220709881840, -0.959857197452455900, -0.959843171795387030, +-0.959829143738710310, -0.959815113282460720, -0.959801080426673230, -0.959787045171383140, -0.959773007516625310, -0.959758967462435160, -0.959744925008847450, -0.959730880155897470, +-0.959716832903620310, -0.959702783252051050, -0.959688731201224780, -0.959674676751176790, -0.959660619901941960, -0.959646560653555800, -0.959632499006052960, -0.959618434959469080, +-0.959604368513839010, -0.959590299669198070, -0.959576228425581430, -0.959562154783024090, -0.959548078741561560, -0.959534000301228600, -0.959519919462060830, -0.959505836224093130, +-0.959491750587360910, -0.959477662551899260, -0.959463572117743580, -0.959449479284928850, -0.959435384053490490, -0.959421286423463580, -0.959407186394883540, -0.959393083967785440, +-0.959378979142204710, -0.959364871918176540, -0.959350762295736240, -0.959336650274918880, -0.959322535855759990, -0.959308419038294780, -0.959294299822558430, -0.959280178208586460, +-0.959266054196413860, -0.959251927786076260, -0.959237798977608860, -0.959223667771046950, -0.959209534166425850, -0.959195398163780850, -0.959181259763147390, -0.959167118964560860, +-0.959152975768056470, -0.959138830173669740, -0.959124682181435760, -0.959110531791390160, -0.959096379003568260, -0.959082223818005450, -0.959068066234736950, -0.959053906253798380, +-0.959039743875224950, -0.959025579099052280, -0.959011411925315580, -0.958997242354050370, -0.958983070385292070, -0.958968896019076090, -0.958954719255437850, -0.958940540094412870, +-0.958926358536036470, -0.958912174580344170, -0.958897988227371600, -0.958883799477153850, -0.958869608329726670, -0.958855414785125480, -0.958841218843385800, -0.958827020504543050, +-0.958812819768632750, -0.958798616635690330, -0.958784411105751410, -0.958770203178851420, -0.958755992855026110, -0.958741780134310550, -0.958727565016740720, -0.958713347502351930, +-0.958699127591179700, -0.958684905283259780, -0.958670680578627590, -0.958656453477318650, -0.958642223979368490, -0.958627992084812970, -0.958613757793687290, -0.958599521106027310, +-0.958585282021868430, -0.958571040541246530, -0.958556796664196800, -0.958542550390755310, -0.958528301720957270, -0.958514050654838520, -0.958499797192434720, -0.958485541333781390, +-0.958471283078914160, -0.958457022427868790, -0.958442759380680690, -0.958428493937385830, -0.958414226098019740, -0.958399955862618060, -0.958385683231216530, -0.958371408203850810, +-0.958357130780556510, -0.958342850961369400, -0.958328568746325220, -0.958314284135459490, -0.958299997128808200, -0.958285707726406750, -0.958271415928291130, -0.958257121734496950, +-0.958242825145059980, -0.958228526160015970, -0.958214224779400660, -0.958199921003249690, -0.958185614831599030, -0.958171306264484210, -0.958156995301941210, -0.958142681944005760, +-0.958128366190713510, -0.958114048042100430, -0.958099727498202160, -0.958085404559054670, -0.958071079224693480, -0.958056751495154790, -0.958042421370474130, -0.958028088850687460, +-0.958013753935830550, -0.957999416625939240, -0.957985076921049390, -0.957970734821196880, -0.957956390326417440, -0.957942043436747160, -0.957927694152221680, -0.957913342472876960, +-0.957898988398748870, -0.957884631929873390, -0.957870273066286250, -0.957855911808023430, -0.957841548155121010, -0.957827182107614530, -0.957812813665540160, -0.957798442828933670, +-0.957784069597831240, -0.957769693972268520, -0.957755315952281580, -0.957740935537906290, -0.957726552729178840, -0.957712167526134860, -0.957697779928810560, -0.957683389937241670, +-0.957668997551464400, -0.957654602771514600, -0.957640205597428350, -0.957625806029241520, -0.957611404066990300, -0.957596999710710440, -0.957582592960438130, -0.957568183816209340, +-0.957553772278060040, -0.957539358346026330, -0.957524942020144270, -0.957510523300449830, -0.957496102186979000, -0.957481678679768080, -0.957467252778852810, -0.957452824484269490, +-0.957438393796054110, -0.957423960714242740, -0.957409525238871460, -0.957395087369976470, -0.957380647107593630, -0.957366204451759240, -0.957351759402509270, -0.957337311959879920, +-0.957322862123907270, -0.957308409894627510, -0.957293955272076720, -0.957279498256290990, -0.957265038847306630, -0.957250577045159590, -0.957236112849886190, -0.957221646261522400, +-0.957207177280104520, -0.957192705905668740, -0.957178232138251150, -0.957163755977888050, -0.957149277424615530, -0.957134796478469770, -0.957120313139487090, -0.957105827407703560, +-0.957091339283155480, -0.957076848765879060, -0.957062355855910600, -0.957047860553286060, -0.957033362858042080, -0.957018862770214530, -0.957004360289839930, -0.956989855416954360, +-0.956975348151594130, -0.956960838493795650, -0.956946326443594900, -0.956931812001028500, -0.956917295166132440, -0.956902775938943240, -0.956888254319497090, -0.956873730307830290, +-0.956859203903979160, -0.956844675107980100, -0.956830143919869200, -0.956815610339683100, -0.956801074367457760, -0.956786536003229940, -0.956771995247035710, -0.956757452098911500, +-0.956742906558893600, -0.956728358627018550, -0.956713808303322530, -0.956699255587841970, -0.956684700480613270, -0.956670142981672860, -0.956655583091057030, -0.956641020808802310, +-0.956626456134945010, -0.956611889069521550, -0.956597319612568440, -0.956582747764122000, -0.956568173524218750, -0.956553596892894880, -0.956539017870187250, -0.956524436456131940, +-0.956509852650765600, -0.956495266454124530, -0.956480677866245350, -0.956466086887164500, -0.956451493516918380, -0.956436897755543520, -0.956422299603076560, -0.956407699059553700, +-0.956393096125011550, -0.956378490799486890, -0.956363883083015790, -0.956349272975635100, -0.956334660477381140, -0.956320045588290650, -0.956305428308399930, -0.956290808637745740, +-0.956276186576364370, -0.956261562124292700, -0.956246935281567010, -0.956232306048224070, -0.956217674424300280, -0.956203040409832390, -0.956188404004856830, -0.956173765209410330, +-0.956159124023529320, -0.956144480447250640, -0.956129834480610620, -0.956115186123646100, -0.956100535376393610, -0.956085882238889680, -0.956071226711171170, -0.956056568793274500, +-0.956041908485236510, -0.956027245787093640, -0.956012580698882840, -0.955997913220640430, -0.955983243352403260, -0.955968571094207960, -0.955953896446091300, -0.955939219408089790, +-0.955924539980240410, -0.955909858162579450, -0.955895173955144010, -0.955880487357970600, -0.955865798371095980, -0.955851106994556890, -0.955836413228389970, -0.955821717072631970, +-0.955807018527319750, -0.955792317592490060, -0.955777614268179420, -0.955762908554424920, -0.955748200451262960, -0.955733489958730640, -0.955718777076864590, -0.955704061805701550, +-0.955689344145278400, -0.955674624095631860, -0.955659901656798700, -0.955645176828815890, -0.955630449611720060, -0.955615720005548170, -0.955600988010336880, -0.955586253626123260, +-0.955571516852943840, -0.955556777690835800, -0.955542036139835680, -0.955527292199980560, -0.955512545871307180, -0.955497797153852410, -0.955483046047653220, -0.955468292552746350, +-0.955453536669168770, -0.955438778396957340, -0.955424017736148930, -0.955409254686780510, -0.955394489248889030, -0.955379721422511260, -0.955364951207684170, -0.955350178604444710, +-0.955335403612829760, -0.955320626232876390, -0.955305846464621470, -0.955291064308101840, -0.955276279763354610, -0.955261492830416610, -0.955246703509324950, -0.955231911800116460, +-0.955217117702828240, -0.955202321217497260, -0.955187522344160490, -0.955172721082854890, -0.955157917433617440, -0.955143111396485220, -0.955128302971495200, -0.955113492158684460, +-0.955098678958089970, -0.955083863369748820, -0.955069045393697970, -0.955054225029974500, -0.955039402278615500, -0.955024577139658050, -0.955009749613139000, -0.954994919699095780, +-0.954980087397565120, -0.954965252708584230, -0.954950415632190300, -0.954935576168420290, -0.954920734317311280, -0.954905890078900480, -0.954891043453224950, -0.954876194440321790, +-0.954861343040228290, -0.954846489252981320, -0.954831633078618070, -0.954816774517175840, -0.954801913568691600, -0.954787050233202650, -0.954772184510746080, -0.954757316401358970, +-0.954742445905078620, -0.954727573021942110, -0.954712697751986750, -0.954697820095249510, -0.954682940051767790, -0.954668057621578800, -0.954653172804719620, -0.954638285601227430, +-0.954623396011139550, -0.954608504034493270, -0.954593609671325670, -0.954578712921674070, -0.954563813785575640, -0.954548912263067710, -0.954534008354187450, -0.954519102058972280, +-0.954504193377459290, -0.954489282309685770, -0.954474368855689040, -0.954459453015506500, -0.954444534789175240, -0.954429614176732780, -0.954414691178216090, -0.954399765793662810, +-0.954384838023110030, -0.954369907866595260, -0.954354975324155590, -0.954340040395828540, -0.954325103081651420, -0.954310163381661410, -0.954295221295896170, -0.954280276824392760, +-0.954265329967188710, -0.954250380724321330, -0.954235429095828040, -0.954220475081746120, -0.954205518682113010, -0.954190559896966110, -0.954175598726342940, -0.954160635170280600, +-0.954145669228816720, -0.954130700901988700, -0.954115730189833870, -0.954100757092389730, -0.954085781609693820, -0.954070803741783320, -0.954055823488695890, -0.954040840850468810, +-0.954025855827139610, -0.954010868418745830, -0.953995878625324870, -0.953980886446914260, -0.953965891883551410, -0.953950894935273850, -0.953935895602119000, -0.953920893884124490, +-0.953905889781327620, -0.953890883293766150, -0.953875874421477370, -0.953860863164499030, -0.953845849522868440, -0.953830833496623230, -0.953815815085800930, -0.953800794290439180, +-0.953785771110575390, -0.953770745546247190, -0.953755717597492000, -0.953740687264347690, -0.953725654546851540, -0.953710619445041320, -0.953695581958954540, -0.953680542088628850, +-0.953665499834101760, -0.953650455195410810, -0.953635408172593960, -0.953620358765688400, -0.953605306974732000, -0.953590252799762280, -0.953575196240817100, -0.953560137297933760, +-0.953545075971150120, -0.953530012260503820, -0.953514946166032500, -0.953499877687773780, -0.953484806825765420, -0.953469733580044940, -0.953454657950650210, -0.953439579937618740, +-0.953424499540988510, -0.953409416760796820, -0.953394331597081650, -0.953379244049880730, -0.953364154119231590, -0.953349061805172200, -0.953333967107740100, -0.953318870026973020, +-0.953303770562908830, -0.953288668715585260, -0.953273564485039860, -0.953258457871310690, -0.953243348874435290, -0.953228237494451620, -0.953213123731397220, -0.953198007585310150, +-0.953182889056227940, -0.953167768144188690, -0.953152644849229790, -0.953137519171389450, -0.953122391110705180, -0.953107260667214960, -0.953092127840956760, -0.953076992631967990, +-0.953061855040286950, -0.953046715065951180, -0.953031572708998630, -0.953016427969467060, -0.953001280847394550, -0.952986131342818730, -0.952970979455777690, -0.952955825186309170, +-0.952940668534451140, -0.952925509500241350, -0.952910348083717770, -0.952895184284918370, -0.952880018103881010, -0.952864849540643540, -0.952849678595244050, -0.952834505267720290, +-0.952819329558110330, -0.952804151466452030, -0.952788970992783260, -0.952773788137142200, -0.952758602899566490, -0.952743415280094430, -0.952728225278763770, -0.952713032895612600, +-0.952697838130678760, -0.952682640984000460, -0.952667441455615440, -0.952652239545561890, -0.952637035253877660, -0.952621828580600960, -0.952606619525769640, -0.952591408089421780, +-0.952576194271595340, -0.952560978072328420, -0.952545759491659090, -0.952530538529625330, -0.952515315186265200, -0.952500089461616790, -0.952484861355718300, -0.952469630868607480, +-0.952454398000322720, -0.952439162750901900, -0.952423925120383210, -0.952408685108804610, -0.952393442716204410, -0.952378197942620460, -0.952362950788091190, -0.952347701252654440, +-0.952332449336348530, -0.952317195039211310, -0.952301938361281300, -0.952286679302596360, -0.952271417863194690, -0.952256154043114480, -0.952240887842394020, -0.952225619261071190, +-0.952210348299184380, -0.952195074956771690, -0.952179799233871300, -0.952164521130521410, -0.952149240646760210, -0.952133957782625990, -0.952118672538156740, -0.952103384913390860, +-0.952088094908366540, -0.952072802523121990, -0.952057507757695380, -0.952042210612125130, -0.952026911086449210, -0.952011609180706150, -0.951996304894933920, -0.951980998229171040, +-0.951965689183455590, -0.951950377757825980, -0.951935063952320410, -0.951919747766977190, -0.951904429201834600, -0.951889108256930850, -0.951873784932304460, -0.951858459227993500, +-0.951843131144036400, -0.951827800680471460, -0.951812467837337190, -0.951797132614671580, -0.951781795012513250, -0.951766455030900290, -0.951751112669871340, -0.951735767929464460, +-0.951720420809718300, -0.951705071310671060, -0.951689719432361140, -0.951674365174826840, -0.951659008538106700, -0.951643649522239010, -0.951628288127262190, -0.951612924353214650, +-0.951597558200134920, -0.951582189668061070, -0.951566818757031860, -0.951551445467085700, -0.951536069798260780, -0.951520691750595840, -0.951505311324128970, -0.951489928518899020, +-0.951474543334944080, -0.951459155772302890, -0.951443765831013750, -0.951428373511115310, -0.951412978812645750, -0.951397581735643930, -0.951382182280148040, -0.951366780446196820, +-0.951351376233828480, -0.951335969643081870, -0.951320560673995170, -0.951305149326607150, -0.951289735600956200, -0.951274319497081080, -0.951258901015019980, -0.951243480154811640, +-0.951228056916494700, -0.951212631300107580, -0.951197203305688910, -0.951181772933277100, -0.951166340182911020, -0.951150905054628960, -0.951135467548469780, -0.951120027664471790, +-0.951104585402673840, -0.951089140763114350, -0.951073693745832060, -0.951058244350865500, -0.951042792578253420, -0.951027338428034220, -0.951011881900246770, -0.950996422994929590, +-0.950980961712121320, -0.950965498051860700, -0.950950032014186260, -0.950934563599136860, -0.950919092806750910, -0.950903619637067380, -0.950888144090124680, -0.950872666165961670, +-0.950857185864616980, -0.950841703186129370, -0.950826218130537360, -0.950810730697880020, -0.950795240888195670, -0.950779748701523380, -0.950764254137901550, -0.950748757197369180, +-0.950733257879964880, -0.950717756185727510, -0.950702252114695720, -0.950686745666908250, -0.950671236842403950, -0.950655725641221580, -0.950640212063399880, -0.950624696108977600, +-0.950609177777993590, -0.950593657070486710, -0.950578133986495600, -0.950562608526059230, -0.950547080689216340, -0.950531550476005680, -0.950516017886466220, -0.950500482920636600, +-0.950484945578555900, -0.950469405860262740, -0.950453863765796210, -0.950438319295194840, -0.950422772448497820, -0.950407223225743780, -0.950391671626971690, -0.950376117652220410, +-0.950360561301528910, -0.950345002574935930, -0.950329441472480440, -0.950313877994201420, -0.950298312140137710, -0.950282743910328190, -0.950267173304811810, -0.950251600323627540, +-0.950236024966814140, -0.950220447234410790, -0.950204867126456240, -0.950189284642989570, -0.950173699784049750, -0.950158112549675640, -0.950142522939906200, -0.950126930954780510, +-0.950111336594337440, -0.950095739858616060, -0.950080140747655340, -0.950064539261494260, -0.950048935400171770, -0.950033329163727070, -0.950017720552198910, -0.950002109565626470, +-0.949986496204048850, -0.949970880467505000, -0.949955262356033890, -0.949939641869674610, -0.949924019008466240, -0.949908393772447850, -0.949892766161658410, -0.949877136176137120, +-0.949861503815922940, -0.949845869081055060, -0.949830231971572460, -0.949814592487514320, -0.949798950628919720, -0.949783306395827640, -0.949767659788277370, -0.949752010806307890, +-0.949736359449958490, -0.949720705719268140, -0.949705049614275930, -0.949689391135021270, -0.949673730281543000, -0.949658067053880450, -0.949642401452072680, -0.949626733476159000, +-0.949611063126178490, -0.949595390402170230, -0.949579715304173510, -0.949564037832227650, -0.949548357986371490, -0.949532675766644570, -0.949516991173085860, -0.949501304205734860, +-0.949485614864630350, -0.949469923149812050, -0.949454229061318710, -0.949438532599189980, -0.949422833763464810, -0.949407132554182630, -0.949391428971382510, -0.949375723015103870, +-0.949360014685386000, -0.949344303982267990, -0.949328590905789360, -0.949312875455989080, -0.949297157632906670, -0.949281437436581440, -0.949265714867052580, -0.949249989924359380, +-0.949234262608541270, -0.949218532919637430, -0.949202800857687380, -0.949187066422730210, -0.949171329614805440, -0.949155590433952260, -0.949139848880210190, -0.949124104953618430, +-0.949108358654216500, -0.949092609982043590, -0.949076858937139220, -0.949061105519542700, -0.949045349729293330, -0.949029591566430740, -0.949013831030994020, -0.948998068123022790, +-0.948982302842556360, -0.948966535189634250, -0.948950765164295770, -0.948934992766580330, -0.948919217996527450, -0.948903440854176550, -0.948887661339566920, -0.948871879452738320, +-0.948856095193729930, -0.948840308562581280, -0.948824519559331890, -0.948808728184021180, -0.948792934436688660, -0.948777138317373870, -0.948761339826116100, -0.948745538962954990, +-0.948729735727930180, -0.948713930121080850, -0.948698122142446860, -0.948682311792067520, -0.948666499069982350, -0.948650683976230980, -0.948634866510852940, -0.948619046673887630, +-0.948603224465374820, -0.948587399885353790, -0.948571572933864400, -0.948555743610945970, -0.948539911916638330, -0.948524077850980700, -0.948508241414013130, -0.948492402605774720, +-0.948476561426305430, -0.948460717875644680, -0.948444871953832200, -0.948429023660907530, -0.948413172996910190, -0.948397319961880040, -0.948381464555856590, -0.948365606778879490, +-0.948349746630988260, -0.948333884112222750, -0.948318019222622490, -0.948302151962227340, -0.948286282331076590, -0.948270410329210220, -0.948254535956667870, -0.948238659213489150, +-0.948222780099713720, -0.948206898615381430, -0.948191014760531800, -0.948175128535204800, -0.948159239939439850, -0.948143348973276790, -0.948127455636755380, -0.948111559929915360, +-0.948095661852796370, -0.948079761405438260, -0.948063858587880780, -0.948047953400163680, -0.948032045842326700, -0.948016135914409470, -0.948000223616452090, -0.947984308948493950, +-0.947968391910575250, -0.947952472502735400, -0.947936550725014480, -0.947920626577452020, -0.947904700060088200, -0.947888771172962440, -0.947872839916114930, -0.947856906289585190, +-0.947840970293413300, -0.947825031927638890, -0.947809091192301940, -0.947793148087442190, -0.947777202613099610, -0.947761254769314170, -0.947745304556125380, -0.947729351973573440, +-0.947713397021698100, -0.947697439700539320, -0.947681480010136860, -0.947665517950530780, -0.947649553521760830, -0.947633586723866990, -0.947617617556889220, -0.947601646020867490, +-0.947585672115841550, -0.947569695841851470, -0.947553717198937000, -0.947537736187138440, -0.947521752806495420, -0.947505767057048140, -0.947489778938836240, -0.947473788451900110, +-0.947457795596279410, -0.947441800372014090, -0.947425802779144450, -0.947409802817710260, -0.947393800487751570, -0.947377795789308360, -0.947361788722420720, -0.947345779287128490, +-0.947329767483471970, -0.947313753311490920, -0.947297736771225530, -0.947281717862715760, -0.947265696586001680, -0.947249672941123390, -0.947233646928120950, -0.947217618547034350, +-0.947201587797903750, -0.947185554680769150, -0.947169519195670720, -0.947153481342648320, -0.947137441121742360, -0.947121398532992820, -0.947105353576439660, -0.947089306252123290, +-0.947073256560083450, -0.947057204500360680, -0.947041150072994720, -0.947025093278025980, -0.947009034115494530, -0.946992972585440460, -0.946976908687903850, -0.946960842422925110, +-0.946944773790544200, -0.946928702790801440, -0.946912629423736880, -0.946896553689390740, -0.946880475587803190, -0.946864395119014430, -0.946848312283064760, -0.946832227079994260, +-0.946816139509843220, -0.946800049572651740, -0.946783957268460320, -0.946767862597308830, -0.946751765559237790, -0.946735666154287280, -0.946719564382497600, -0.946703460243909060, +-0.946687353738561830, -0.946671244866496230, -0.946655133627752550, -0.946639020022370990, -0.946622904050391960, -0.946606785711855530, -0.946590665006802220, -0.946574541935272240, +-0.946558416497305990, -0.946542288692943550, -0.946526158522225550, -0.946510025985191960, -0.946493891081883420, -0.946477753812340120, -0.946461614176602460, -0.946445472174710760, +-0.946429327806705410, -0.946413181072626730, -0.946397031972515010, -0.946380880506410780, -0.946364726674354340, -0.946348570476386100, -0.946332411912546470, -0.946316250982875750, +-0.946300087687414360, -0.946283922026202930, -0.946267753999281540, -0.946251583606690820, -0.946235410848471070, -0.946219235724662930, -0.946203058235306590, -0.946186878380442580, +-0.946170696160111400, -0.946154511574353490, -0.946138324623209350, -0.946122135306719400, -0.946105943624924060, -0.946089749577863850, -0.946073553165579400, -0.946057354388110890, +-0.946041153245499090, -0.946024949737784390, -0.946008743865007330, -0.945992535627208310, -0.945976325024428080, -0.945960112056706940, -0.945943896724085630, -0.945927679026604570, +-0.945911458964304290, -0.945895236537225290, -0.945879011745408230, -0.945862784588893610, -0.945846555067722080, -0.945830323181934160, -0.945814088931570480, -0.945797852316671570, +-0.945781613337277950, -0.945765371993430360, -0.945749128285169330, -0.945732882212535490, -0.945716633775569360, -0.945700382974311690, -0.945684129808803120, -0.945667874279084160, +-0.945651616385195570, -0.945635356127177970, -0.945619093505071890, -0.945602828518918080, -0.945586561168757280, -0.945570291454630010, -0.945554019376577020, -0.945537744934639050, +-0.945521468128856620, -0.945505188959270490, -0.945488907425921510, -0.945472623528850200, -0.945456337268097300, -0.945440048643703570, -0.945423757655709850, -0.945407464304156560, +-0.945391168589084670, -0.945374870510534930, -0.945358570068547950, -0.945342267263164500, -0.945325962094425540, -0.945309654562371480, -0.945293344667043400, -0.945277032408481930, +-0.945260717786727930, -0.945244400801822040, -0.945228081453805210, -0.945211759742718090, -0.945195435668601760, -0.945179109231496620, -0.945162780431443860, -0.945146449268484120, +-0.945130115742658150, -0.945113779854007020, -0.945097441602571360, -0.945081100988392260, -0.945064758011510240, -0.945048412671966380, -0.945032064969801410, -0.945015714905056430, +-0.944999362477772050, -0.944983007687989370, -0.944966650535749020, -0.944950291021092180, -0.944933929144059490, -0.944917564904692140, -0.944901198303030650, -0.944884829339116330, +-0.944868458012989910, -0.944852084324692250, -0.944835708274264550, -0.944819329861747440, -0.944802949087182100, -0.944786565950609390, -0.944770180452070170, -0.944753792591605520, +-0.944737402369256520, -0.944721009785063900, -0.944704614839068760, -0.944688217531312050, -0.944671817861834960, -0.944655415830678140, -0.944639011437882870, -0.944622604683490020, +-0.944606195567540770, -0.944589784090075880, -0.944573370251136630, -0.944556954050763900, -0.944540535488998860, -0.944524114565882480, -0.944507691281455730, -0.944491265635759800, +-0.944474837628835660, -0.944458407260724500, -0.944441974531467280, -0.944425539441105190, -0.944409101989679090, -0.944392662177230390, -0.944376220003799950, -0.944359775469429060, +-0.944343328574158590, -0.944326879318029940, -0.944310427701083980, -0.944293973723361990, -0.944277517384905060, -0.944261058685754380, -0.944244597625951030, -0.944228134205536200, +-0.944211668424551060, -0.944195200283036610, -0.944178729781034340, -0.944162256918585130, -0.944145781695730270, -0.944129304112511060, -0.944112824168968470, -0.944096341865143910, +-0.944079857201078450, -0.944063370176813410, -0.944046880792389850, -0.944030389047849080, -0.944013894943232510, -0.943997398478581000, -0.943980899653936170, -0.943964398469338880, +-0.943947894924830780, -0.943931389020452930, -0.943914880756246520, -0.943898370132252970, -0.943881857148513470, -0.943865341805069310, -0.943848824101961800, -0.943832304039232240, +-0.943815781616921920, -0.943799256835072150, -0.943782729693724230, -0.943766200192919570, -0.943749668332699240, -0.943733134113104890, -0.943716597534177580, -0.943700058595958960, +-0.943683517298489980, -0.943666973641812400, -0.943650427625967180, -0.943633879250996070, -0.943617328516940250, -0.943600775423841020, -0.943584219971739910, -0.943567662160678220, +-0.943551101990697360, -0.943534539461838740, -0.943517974574143880, -0.943501407327653970, -0.943484837722410540, -0.943468265758455100, -0.943451691435828970, -0.943435114754573530, +-0.943418535714730440, -0.943401954316340880, -0.943385370559446490, -0.943368784444088670, -0.943352195970308950, -0.943335605138148630, -0.943319011947649440, -0.943302416398852590, +-0.943285818491799710, -0.943269218226532310, -0.943252615603091930, -0.943236010621519960, -0.943219403281857940, -0.943202793584147380, -0.943186181528429920, -0.943169567114746980, +-0.943152950343140060, -0.943136331213650920, -0.943119709726320750, -0.943103085881191520, -0.943086459678304400, -0.943069831117701260, -0.943053200199423400, -0.943036566923512680, +-0.943019931290010490, -0.943003293298958490, -0.942986652950398190, -0.942970010244371330, -0.942953365180919430, -0.942936717760084140, -0.942920067981906970, -0.942903415846429670, +-0.942886761353693870, -0.942870104503741090, -0.942853445296613080, -0.942836783732351470, -0.942820119810997890, -0.942803453532593980, -0.942786784897181600, -0.942770113904802140, +-0.942753440555497370, -0.942736764849309020, -0.942720086786278830, -0.942703406366448230, -0.942686723589859280, -0.942670038456553510, -0.942653350966572660, -0.942636661119958360, +-0.942619968916752480, -0.942603274356996530, -0.942586577440732600, -0.942569878168002080, -0.942553176538846960, -0.942536472553308860, -0.942519766211429520, -0.942503057513250810, +-0.942486346458814460, -0.942469633048162340, -0.942452917281335960, -0.942436199158377400, -0.942419478679328290, -0.942402755844230500, -0.942386030653125870, -0.942369303106056160, +-0.942352573203063090, -0.942335840944188650, -0.942319106329474690, -0.942302369358962830, -0.942285630032695170, -0.942268888350713320, -0.942252144313059260, -0.942235397919774950, +-0.942218649170902030, -0.942201898066482580, -0.942185144606558330, -0.942168388791171150, -0.942151630620363110, -0.942134870094175960, -0.942118107212651660, -0.942101341975832060, +-0.942084574383759140, -0.942067804436474750, -0.942051032134020860, -0.942034257476439320, -0.942017480463772320, -0.942000701096061380, -0.941983919373348910, -0.941967135295676440, +-0.941950348863086370, -0.941933560075620240, -0.941916768933320330, -0.941899975436228390, -0.941883179584386500, -0.941866381377836740, -0.941849580816620960, -0.941832777900781350, +-0.941815972630359650, -0.941799165005398060, -0.941782355025938540, -0.941765542692023280, -0.941748728003694020, -0.941731910960993070, -0.941715091563962160, -0.941698269812643710, +-0.941681445707079460, -0.941664619247311600, -0.941647790433382200, -0.941630959265333360, -0.941614125743207130, -0.941597289867045610, -0.941580451636890750, -0.941563611052784850, +-0.941546768114769890, -0.941529922822888050, -0.941513075177181300, -0.941496225177691940, -0.941479372824462040, -0.941462518117533680, -0.941445661056949050, -0.941428801642750220, +-0.941411939874979400, -0.941395075753678760, -0.941378209278890490, -0.941361340450656560, -0.941344469269019380, -0.941327595734020920, -0.941310719845703580, -0.941293841604109450, +-0.941276961009280710, -0.941260078061259440, -0.941243192760088050, -0.941226305105808740, -0.941209415098463680, -0.941192522738094950, -0.941175628024744970, -0.941158730958455920, +-0.941141831539270000, -0.941124929767229610, -0.941108025642376830, -0.941091119164754080, -0.941074210334403420, -0.941057299151367270, -0.941040385615687810, -0.941023469727407580, +-0.941006551486568420, -0.940989630893213080, -0.940972707947383520, -0.940955782649122390, -0.940938854998471630, -0.940921924995473780, -0.940904992640171020, -0.940888057932605990, +-0.940871120872820650, -0.940854181460857640, -0.940837239696759030, -0.940820295580567350, -0.940803349112324990, -0.940786400292074170, -0.940769449119857490, -0.940752495595717050, +-0.940735539719695480, -0.940718581491834960, -0.940701620912178130, -0.940684657980767060, -0.940667692697644500, -0.940650725062852630, -0.940633755076434100, -0.940616782738430970, +-0.940599808048885990, -0.940582831007841460, -0.940565851615339900, -0.940548869871423610, -0.940531885776135220, -0.940514899329517150, -0.940497910531611800, -0.940480919382461590, +-0.940463925882109140, -0.940446930030596980, -0.940429931827967300, -0.940412931274262950, -0.940395928369526240, -0.940378923113799670, -0.940361915507125780, -0.940344905549547190, +-0.940327893241106220, -0.940310878581845590, -0.940293861571807720, -0.940276842211035360, -0.940259820499570690, -0.940242796437456560, -0.940225770024735400, -0.940208741261449820, +-0.940191710147642470, -0.940174676683355750, -0.940157640868632290, -0.940140602703514850, -0.940123562188045820, -0.940106519322267960, -0.940089474106223790, -0.940072426539955820, +-0.940055376623507020, -0.940038324356919590, -0.940021269740236360, -0.940004212773499990, -0.939987153456753100, -0.939970091790038320, -0.939953027773398290, -0.939935961406875740, +-0.939918892690513320, -0.939901821624353540, -0.939884748208439260, -0.939867672442813110, -0.939850594327517830, -0.939833513862595950, -0.939816431048090430, -0.939799345884043790, +-0.939782258370498670, -0.939765168507498030, -0.939748076295084390, -0.939730981733300720, -0.939713884822189430, -0.939696785561793480, -0.939679683952155510, -0.939662579993318480, +-0.939645473685324810, -0.939628365028217560, -0.939611254022039380, -0.939594140666833110, -0.939577024962641390, -0.939559906909507300, -0.939542786507473250, -0.939525663756582310, +-0.939508538656877220, -0.939491411208400740, -0.939474281411195710, -0.939457149265304990, -0.939440014770771550, -0.939422877927637900, -0.939405738735947130, -0.939388597195741970, +-0.939371453307065400, -0.939354307069960040, -0.939337158484469080, -0.939320007550635160, -0.939302854268501240, -0.939285698638110070, -0.939268540659504820, -0.939251380332728150, +-0.939234217657823000, -0.939217052634832350, -0.939199885263799050, -0.939182715544765960, -0.939165543477776250, -0.939148369062872580, -0.939131192300098010, -0.939114013189495390, +-0.939096831731107810, -0.939079647924978110, -0.939062461771149270, -0.939045273269664360, -0.939028082420566230, -0.939010889223897970, -0.938993693679702310, -0.938976495788022560, +-0.938959295548901560, -0.938942092962382290, -0.938924888028507710, -0.938907680747321120, -0.938890471118865140, -0.938873259143183090, -0.938856044820317810, -0.938838828150312500, +-0.938821609133210000, -0.938804387769053620, -0.938787164057886090, -0.938769937999750840, -0.938752709594690590, -0.938735478842748660, -0.938718245743968010, -0.938701010298391810, +-0.938683772506063050, -0.938666532367024800, -0.938649289881320240, -0.938632045048992450, -0.938614797870084620, -0.938597548344639710, -0.938580296472701030, -0.938563042254311530, +-0.938545785689514410, -0.938528526778352860, -0.938511265520870050, -0.938494001917108970, -0.938476735967112900, -0.938459467670925030, -0.938442197028588550, -0.938424924040146440, +-0.938407648705642080, -0.938390371025118690, -0.938373090998619210, -0.938355808626187170, -0.938338523907865430, -0.938321236843697500, -0.938303947433726470, -0.938286655677995630, +-0.938269361576547940, -0.938252065129427050, -0.938234766336675910, -0.938217465198337930, -0.938200161714456190, -0.938182855885074110, -0.938165547710234860, -0.938148237189981750, +-0.938130924324358070, -0.938113609113407130, -0.938096291557172000, -0.938078971655696310, -0.938061649409023040, -0.938044324817195680, -0.938026997880257670, -0.938009668598251970, +-0.937992336971222200, -0.937975002999211550, -0.937957666682263440, -0.937940328020421150, -0.937922987013728000, -0.937905643662227400, -0.937888297965962740, -0.937870949924977330, +-0.937853599539314460, -0.937836246809017670, -0.937818891734130240, -0.937801534314695480, -0.937784174550757130, -0.937766812442358160, -0.937749447989542180, -0.937732081192352520, +-0.937714712050832790, -0.937697340565026180, -0.937679966734976220, -0.937662590560726540, -0.937645212042320100, -0.937627831179800860, -0.937610447973211910, -0.937593062422596880, +-0.937575674527999170, -0.937558284289462310, -0.937540891707029700, -0.937523496780744870, -0.937506099510651340, -0.937488699896792620, -0.937471297939212020, -0.937453893637953170, +-0.937436486993059590, -0.937419078004574910, -0.937401666672542430, -0.937384252997005900, -0.937366836978008600, -0.937349418615594290, -0.937331997909806370, -0.937314574860688480, +-0.937297149468284240, -0.937279721732636960, -0.937262291653790490, -0.937244859231788240, -0.937227424466673950, -0.937209987358491040, -0.937192547907283120, -0.937175106113093850, +-0.937157661975966840, -0.937140215495945620, -0.937122766673073930, -0.937105315507395290, -0.937087861998953440, -0.937070406147791800, -0.937052947953954220, -0.937035487417484210, +-0.937018024538425530, -0.937000559316821800, -0.936983091752716660, -0.936965621846153840, -0.936948149597176870, -0.936930675005829610, -0.936913198072155560, -0.936895718796198600, +-0.936878237178002340, -0.936860753217610530, -0.936843266915066700, -0.936825778270414800, -0.936808287283698470, -0.936790793954961340, -0.936773298284247270, -0.936755800271599990, +-0.936738299917063140, -0.936720797220680690, -0.936703292182496040, -0.936685784802553380, -0.936668275080896010, -0.936650763017568110, -0.936633248612613320, -0.936615731866075270, +-0.936598212777998040, -0.936580691348425140, -0.936563167577400660, -0.936545641464968210, -0.936528113011171670, -0.936510582216054770, -0.936493049079661470, -0.936475513602035510, +-0.936457975783220880, -0.936440435623261180, -0.936422893122200510, -0.936405348280082480, -0.936387801096951190, -0.936370251572850250, -0.936352699707823870, -0.936335145501915660, +-0.936317588955169590, -0.936300030067629520, -0.936282468839339300, -0.936264905270343010, -0.936247339360684490, -0.936229771110407620, -0.936212200519556230, -0.936194627588174400, +-0.936177052316305990, -0.936159474703994960, -0.936141894751285180, -0.936124312458220810, -0.936106727824845500, -0.936089140851203430, -0.936071551537338560, -0.936053959883294760, +-0.936036365889115980, -0.936018769554846420, -0.936001170880529920, -0.935983569866210450, -0.935965966511932090, -0.935948360817738690, -0.935930752783674550, -0.935913142409783520, +-0.935895529696109560, -0.935877914642696760, -0.935860297249589300, -0.935842677516830920, -0.935825055444466040, -0.935807431032538380, -0.935789804281092150, -0.935772175190171420, +-0.935754543759820370, -0.935736909990082850, -0.935719273881003070, -0.935701635432625080, -0.935683994644993080, -0.935666351518151030, -0.935648706052143120, -0.935631058247013430, +-0.935613408102806130, -0.935595755619565210, -0.935578100797334940, -0.935560443636159530, -0.935542784136082940, -0.935525122297149460, -0.935507458119403060, -0.935489791602888030, +-0.935472122747648570, -0.935454451553728750, -0.935436778021172870, -0.935419102150024990, -0.935401423940329320, -0.935383743392130260, -0.935366060505471660, -0.935348375280398050, +-0.935330687716953380, -0.935312997815182070, -0.935295305575128190, -0.935277610996836150, -0.935259914080350030, -0.935242214825714010, -0.935224513232972620, -0.935206809302169930, +-0.935189103033350120, -0.935171394426557610, -0.935153683481836700, -0.935135970199231450, -0.935118254578786390, -0.935100536620545600, -0.935082816324553480, -0.935065093690854330, +-0.935047368719492460, -0.935029641410512150, -0.935011911763957810, -0.934994179779873540, -0.934976445458303940, -0.934958708799293210, -0.934940969802885770, -0.934923228469125790, +-0.934905484798057800, -0.934887738789726090, -0.934869990444174960, -0.934852239761448930, -0.934834486741592310, -0.934816731384649380, -0.934798973690664670, -0.934781213659682590, +-0.934763451291747430, -0.934745686586903710, -0.934727919545195630, -0.934710150166667920, -0.934692378451364660, -0.934674604399330590, -0.934656828010610010, -0.934639049285247330, +-0.934621268223286950, -0.934603484824773510, -0.934585699089751310, -0.934567911018264860, -0.934550120610358580, -0.934532327866077090, -0.934514532785464700, -0.934496735368566030, +-0.934478935615425610, -0.934461133526087620, -0.934443329100597020, -0.934425522338998000, -0.934407713241335200, -0.934389901807653130, -0.934372088037996210, -0.934354271932409160, +-0.934336453490936410, -0.934318632713622590, -0.934300809600512090, -0.934282984151649560, -0.934265156367079630, -0.934247326246846810, -0.934229493790995740, -0.934211658999570820, +-0.934193821872616790, -0.934175982410178190, -0.934158140612299630, -0.934140296479025740, -0.934122450010401060, -0.934104601206470320, -0.934086750067278040, -0.934068896592868960, +-0.934051040783287490, -0.934033182638578600, -0.934015322158786580, -0.933997459343956390, -0.933979594194132460, -0.933961726709359620, -0.933943856889682400, -0.933925984735145650, +-0.933908110245793790, -0.933890233421671770, -0.933872354262824110, -0.933854472769295560, -0.933836588941130860, -0.933818702778374750, -0.933800814281071760, -0.933782923449266720, +-0.933765030283004500, -0.933747134782329510, -0.933729236947286930, -0.933711336777921060, -0.933693434274276980, -0.933675529436399200, -0.933657622264332690, -0.933639712758122080, +-0.933621800917812220, -0.933603886743447850, -0.933585970235073730, -0.933568051392734690, -0.933550130216475590, -0.933532206706341070, -0.933514280862376090, -0.933496352684625390, +-0.933478422173133930, -0.933460489327946230, -0.933442554149107370, -0.933424616636662100, -0.933406676790655250, -0.933388734611131920, -0.933370790098136500, -0.933352843251714300, +-0.933334894071909840, -0.933316942558768290, -0.933298988712334300, -0.933281032532652820, -0.933263074019768820, -0.933245113173727160, -0.933227149994572570, -0.933209184482350240, +-0.933191216637104910, -0.933173246458881560, -0.933155273947725020, -0.933137299103680370, -0.933119321926792480, -0.933101342417106290, -0.933083360574666680, -0.933065376399518590, +-0.933047389891707210, -0.933029401051277300, -0.933011409878273910, -0.932993416372742020, -0.932975420534726600, -0.932957422364272480, -0.932939421861424980, -0.932921419026228830, +-0.932903413858729210, -0.932885406358970990, -0.932867396526999240, -0.932849384362859020, -0.932831369866595430, -0.932813353038253300, -0.932795333877877830, -0.932777312385513980, +-0.932759288561206930, -0.932741262405001550, -0.932723233916943010, -0.932705203097076500, -0.932687169945446980, -0.932669134462099540, -0.932651096647079130, -0.932633056500431160, +-0.932615014022200370, -0.932596969212432180, -0.932578922071171550, -0.932560872598463540, -0.932542820794353360, -0.932524766658886280, -0.932506710192107070, -0.932488651394061230, +-0.932470590264793620, -0.932452526804349760, -0.932434461012774380, -0.932416392890112910, -0.932398322436410520, -0.932380249651712290, -0.932362174536063400, -0.932344097089509050, +-0.932326017312094520, -0.932307935203864900, -0.932289850764865480, -0.932271763995141440, -0.932253674894737980, -0.932235583463700280, -0.932217489702073740, -0.932199393609903340, +-0.932181295187234580, -0.932163194434112440, -0.932145091350582430, -0.932126985936689630, -0.932108878192479450, -0.932090768117996960, -0.932072655713287680, -0.932054540978396680, +-0.932036423913369380, -0.932018304518250960, -0.932000182793086720, -0.931982058737922170, -0.931963932352802390, -0.931945803637772800, -0.931927672592878680, -0.931909539218165440, +-0.931891403513678270, -0.931873265479462700, -0.931855125115563900, -0.931836982422027280, -0.931818837398898150, -0.931800690046222010, -0.931782540364044180, -0.931764388352409930, +-0.931746234011364690, -0.931728077340953980, -0.931709918341222960, -0.931691757012217180, -0.931673593353981920, -0.931655427366562820, -0.931637259050005050, -0.931619088404354150, +-0.931600915429655620, -0.931582740125954770, -0.931564562493297000, -0.931546382531727830, -0.931528200241292790, -0.931510015622037170, -0.931491828674006590, -0.931473639397246370, +-0.931455447791802120, -0.931437253857719140, -0.931419057595043180, -0.931400859003819410, -0.931382658084093600, -0.931364454835911130, -0.931346249259317530, -0.931328041354358200, +-0.931309831121078900, -0.931291618559524910, -0.931273403669741980, -0.931255186451775520, -0.931236966905671040, -0.931218745031474170, -0.931200520829230440, -0.931182294298985470, +-0.931164065440784670, -0.931145834254673790, -0.931127600740698220, -0.931109364898903720, -0.931091126729335810, -0.931072886232040100, -0.931054643407062120, -0.931036398254447620, +-0.931018150774241990, -0.930999900966491100, -0.930981648831240350, -0.930963394368535590, -0.930945137578422340, -0.930926878460946240, -0.930908617016152800, -0.930890353244087860, +-0.930872087144797190, -0.930853818718326180, -0.930835547964720680, -0.930817274884026320, -0.930798999476288750, -0.930780721741553570, -0.930762441679866770, -0.930744159291273740, +-0.930725874575820460, -0.930707587533552320, -0.930689298164515290, -0.930671006468755000, -0.930652712446317310, -0.930634416097247620, -0.930616117421592120, -0.930597816419396100, +-0.930579513090705750, -0.930561207435566470, -0.930542899454024240, -0.930524589146124680, -0.930506276511913640, -0.930487961551437090, -0.930469644264740440, -0.930451324651869860, +-0.930433002712870880, -0.930414678447789360, -0.930396351856671130, -0.930378022939562180, -0.930359691696508010, -0.930341358127554700, -0.930323022232747880, -0.930304684012133620, +-0.930286343465757560, -0.930268000593665770, -0.930249655395903870, -0.930231307872517840, -0.930212958023553530, -0.930194605849056890, -0.930176251349073670, -0.930157894523649830, +-0.930139535372831340, -0.930121173896663930, -0.930102810095193580, -0.930084443968466230, -0.930066075516527760, -0.930047704739424110, -0.930029331637201250, -0.930010956209905040, +-0.929992578457581430, -0.929974198380276280, -0.929955815978035780, -0.929937431250905670, -0.929919044198932010, -0.929900654822160670, -0.929882263120637820, -0.929863869094409100, +-0.929845472743520920, -0.929827074068019010, -0.929808673067949340, -0.929790269743357990, -0.929771864094291020, -0.929753456120794410, -0.929735045822914110, -0.929716633200696200, +-0.929698218254186750, -0.929679800983431730, -0.929661381388477200, -0.929642959469369260, -0.929624535226153850, -0.929606108658877160, -0.929587679767585160, -0.929569248552324030, +-0.929550815013139630, -0.929532379150078360, -0.929513940963186070, -0.929495500452508950, -0.929477057618092960, -0.929458612459984510, -0.929440164978229340, -0.929421715172873860, +-0.929403263043964150, -0.929384808591546150, -0.929366351815666290, -0.929347892716370420, -0.929329431293704930, -0.929310967547715690, -0.929292501478449220, -0.929274033085951360, +-0.929255562370268520, -0.929237089331446780, -0.929218613969532200, -0.929200136284571210, -0.929181656276609870, -0.929163173945694250, -0.929144689291870880, -0.929126202315185610, +-0.929107713015684960, -0.929089221393414990, -0.929070727448422010, -0.929052231180752090, -0.929033732590451630, -0.929015231677566940, -0.928996728442144090, -0.928978222884229380, +-0.928959715003869200, -0.928941204801109750, -0.928922692275997220, -0.928904177428578000, -0.928885660258898290, -0.928867140767004500, -0.928848618952942790, -0.928830094816759600, +-0.928811568358501090, -0.928793039578213690, -0.928774508475943670, -0.928755975051737460, -0.928737439305641230, -0.928718901237701510, -0.928700360847964480, -0.928681818136476540, +-0.928663273103284000, -0.928644725748433260, -0.928626176071970840, -0.928607624073942930, -0.928589069754395920, -0.928570513113376240, -0.928551954150930390, -0.928533392867104460, +-0.928514829261945170, -0.928496263335498840, -0.928477695087811860, -0.928459124518930530, -0.928440551628901490, -0.928421976417770910, -0.928403398885585540, -0.928384819032391670, +-0.928366236858235720, -0.928347652363164190, -0.928329065547223500, -0.928310476410460160, -0.928291884952920590, -0.928273291174651400, -0.928254695075698910, -0.928236096656109730, +-0.928217495915930280, -0.928198892855207070, -0.928180287473986620, -0.928161679772315560, -0.928143069750240190, -0.928124457407807250, -0.928105842745063030, -0.928087225762054380, +-0.928068606458827490, -0.928049984835429220, -0.928031360891905850, -0.928012734628304250, -0.927994106044670590, -0.927975475141051830, -0.927956841917494390, -0.927938206374044780, +-0.927919568510749640, -0.927900928327655580, -0.927882285824809250, -0.927863641002257160, -0.927844993860046040, -0.927826344398222420, -0.927807692616832940, -0.927789038515924090, +-0.927770382095542860, -0.927751723355735520, -0.927733062296548950, -0.927714398918029650, -0.927695733220224470, -0.927677065203179830, -0.927658394866942680, -0.927639722211559440, +-0.927621047237076950, -0.927602369943541730, -0.927583690331000630, -0.927565008399500290, -0.927546324149087440, -0.927527637579808830, -0.927508948691711080, -0.927490257484841040, +-0.927471563959245240, -0.927452868114970630, -0.927434169952063850, -0.927415469470571630, -0.927396766670540610, -0.927378061552017850, -0.927359354115049880, -0.927340644359683550, +-0.927321932285965490, -0.927303217893942770, -0.927284501183661790, -0.927265782155169750, -0.927247060808513160, -0.927228337143738980, -0.927209611160893840, -0.927190882860024820, +-0.927172152241178550, -0.927153419304401760, -0.927134684049741640, -0.927115946477244600, -0.927097206586957930, -0.927078464378928050, -0.927059719853202120, -0.927040973009826800, +-0.927022223848849140, -0.927003472370315880, -0.926984718574273890, -0.926965962460770120, -0.926947204029851530, -0.926928443281564870, -0.926909680215957100, -0.926890914833075170, +-0.926872147132965950, -0.926853377115676280, -0.926834604781253240, -0.926815830129743670, -0.926797053161194540, -0.926778273875652700, -0.926759492273165230, -0.926740708353779090, +-0.926721922117541120, -0.926703133564498400, -0.926684342694697680, -0.926665549508186360, -0.926646754005010950, -0.926627956185218760, -0.926609156048856630, -0.926590353595971640, +-0.926571548826610750, -0.926552741740821030, -0.926533932338649450, -0.926515120620143070, -0.926496306585348760, -0.926477490234313810, -0.926458671567085060, -0.926439850583709700, +-0.926421027284234590, -0.926402201668707010, -0.926383373737173940, -0.926364543489682330, -0.926345710926279490, -0.926326876047012250, -0.926308038851927920, -0.926289199341073450, +-0.926270357514496050, -0.926251513372242650, -0.926232666914360570, -0.926213818140896760, -0.926194967051898410, -0.926176113647412700, -0.926157257927486600, -0.926138399892167400, +-0.926119539541502280, -0.926100676875538210, -0.926081811894322480, -0.926062944597902280, -0.926044074986324680, -0.926025203059636760, -0.926006328817885920, -0.925987452261119340, +-0.925968573389384100, -0.925949692202727380, -0.925930808701196480, -0.925911922884838590, -0.925893034753700770, -0.925874144307830440, -0.925855251547274770, -0.925836356472080960, +-0.925817459082296180, -0.925798559377967840, -0.925779657359143030, -0.925760753025869130, -0.925741846378193340, -0.925722937416162960, -0.925704026139825160, -0.925685112549227470, +-0.925666196644416850, -0.925647278425440700, -0.925628357892346430, -0.925609435045181230, -0.925590509883992500, -0.925571582408827420, -0.925552652619733520, -0.925533720516757860, +-0.925514786099947970, -0.925495849369351030, -0.925476910325014560, -0.925457968966985730, -0.925439025295312080, -0.925420079310040780, -0.925401131011219350, -0.925382180398894970, +-0.925363227473115280, -0.925344272233927460, -0.925325314681379020, -0.925306354815517150, -0.925287392636389480, -0.925268428144043310, -0.925249461338526040, -0.925230492219885290, +-0.925211520788168150, -0.925192547043422240, -0.925173570985694970, -0.925154592615033740, -0.925135611931486080, -0.925116628935099380, -0.925097643625921060, -0.925078656003998740, +-0.925059666069379730, -0.925040673822111530, -0.925021679262241660, -0.925002682389817530, -0.924983683204886780, -0.924964681707496790, -0.924945677897695110, -0.924926671775529230, +-0.924907663341046680, -0.924888652594294870, -0.924869639535321530, -0.924850624164174070, -0.924831606480900130, -0.924812586485547090, -0.924793564178162610, -0.924774539558794180, +-0.924755512627489450, -0.924736483384295930, -0.924717451829261240, -0.924698417962432790, -0.924679381783858450, -0.924660343293585480, -0.924641302491661770, -0.924622259378134800, +-0.924603213953052230, -0.924584166216461560, -0.924565116168410530, -0.924546063808946550, -0.924527009138117580, -0.924507952155971040, -0.924488892862554530, -0.924469831257915930, +-0.924450767342102630, -0.924431701115162490, -0.924412632577143010, -0.924393561728092060, -0.924374488568057150, -0.924355413097086130, -0.924336335315226410, -0.924317255222525950, +-0.924298172819032260, -0.924279088104793310, -0.924260001079856510, -0.924240911744269810, -0.924221820098080630, -0.924202726141337140, -0.924183629874086640, -0.924164531296377210, +-0.924145430408256360, -0.924126327209771950, -0.924107221700971700, -0.924088113881903370, -0.924069003752614910, -0.924049891313153850, -0.924030776563568020, -0.924011659503905290, +-0.923992540134213500, -0.923973418454540170, -0.923954294464933490, -0.923935168165440860, -0.923916039556110570, -0.923896908636989920, -0.923877775408127210, -0.923858639869569950, +-0.923839502021366110, -0.923820361863563530, -0.923801219396210070, -0.923782074619353470, -0.923762927533041790, -0.923743778137322670, -0.923724626432244180, -0.923705472417854170, +-0.923686316094200380, -0.923667157461330880, -0.923647996519293410, -0.923628833268136050, -0.923609667707906530, -0.923590499838652930, -0.923571329660422990, -0.923552157173264780, +-0.923532982377226030, -0.923513805272355050, -0.923494625858699350, -0.923475444136307330, -0.923456260105226520, -0.923437073765505100, -0.923417885117190920, -0.923398694160332160, +-0.923379500894976560, -0.923360305321172300, -0.923341107438967250, -0.923321907248409350, -0.923302704749546790, -0.923283499942427310, -0.923264292827099320, -0.923245083403610440, +-0.923225871672008870, -0.923206657632342660, -0.923187441284659790, -0.923168222629008330, -0.923149001665436340, -0.923129778393991680, -0.923110552814722760, -0.923091324927677430, +-0.923072094732903750, -0.923052862230449800, -0.923033627420363770, -0.923014390302693610, -0.922995150877487510, -0.922975909144793550, -0.922956665104659680, -0.922937418757134310, +-0.922918170102265290, -0.922898919140100920, -0.922879665870689260, -0.922860410294078390, -0.922841152410316500, -0.922821892219451770, -0.922802629721532260, -0.922783364916606170, +-0.922764097804721680, -0.922744828385926970, -0.922725556660270230, -0.922706282627799520, -0.922687006288563150, -0.922667727642609290, -0.922648446689986020, -0.922629163430741750, +-0.922609877864924430, -0.922590589992582480, -0.922571299813764070, -0.922552007328517390, -0.922532712536890730, -0.922513415438932170, -0.922494116034690230, -0.922474814324212970, +-0.922455510307548690, -0.922436203984745460, -0.922416895355851920, -0.922397584420916020, -0.922378271179986280, -0.922358955633110770, -0.922339637780337900, -0.922320317621715960, +-0.922300995157293250, -0.922281670387117950, -0.922262343311238570, -0.922243013929703200, -0.922223682242560460, -0.922204348249858310, -0.922185011951645370, -0.922165673347970060, +-0.922146332438880450, -0.922126989224425040, -0.922107643704652040, -0.922088295879610050, -0.922068945749347280, -0.922049593313912230, -0.922030238573353090, -0.922010881527718370, +-0.921991522177056490, -0.921972160521415840, -0.921952796560844610, -0.921933430295391540, -0.921914061725104820, -0.921894690850033060, -0.921875317670224460, -0.921855942185727750, +-0.921836564396590900, -0.921817184302862860, -0.921797801904591820, -0.921778417201826180, -0.921759030194614580, -0.921739640883005310, -0.921720249267047100, -0.921700855346788140, +-0.921681459122277060, -0.921662060593562370, -0.921642659760692480, -0.921623256623716030, -0.921603851182681400, -0.921584443437637010, -0.921565033388631720, -0.921545621035713690, +-0.921526206378931790, -0.921506789418334190, -0.921487370153969750, -0.921467948585886760, -0.921448524714133970, -0.921429098538759870, -0.921409670059813000, -0.921390239277341980, +-0.921370806191395220, -0.921351370802021670, -0.921331933109269530, -0.921312493113187640, -0.921293050813824510, -0.921273606211228780, -0.921254159305448960, -0.921234710096533790, +-0.921215258584531790, -0.921195804769491810, -0.921176348651462140, -0.921156890230491740, -0.921137429506628910, -0.921117966479922720, -0.921098501150421470, -0.921079033518174110, +-0.921059563583229050, -0.921040091345635140, -0.921020616805440890, -0.921001139962695170, -0.920981660817446590, -0.920962179369743890, -0.920942695619635820, -0.920923209567170890, +-0.920903721212397940, -0.920884230555365720, -0.920864737596122970, -0.920845242334718210, -0.920825744771200600, -0.920806244905618350, -0.920786742738020750, -0.920767238268456080, +-0.920747731496973530, -0.920728222423621400, -0.920708711048448980, -0.920689197371504560, -0.920669681392837220, -0.920650163112495700, -0.920630642530528840, -0.920611119646985280, +-0.920591594461913850, -0.920572066975363530, -0.920552537187383060, -0.920533005098021270, -0.920513470707326810, -0.920493934015348850, -0.920474395022136020, -0.920454853727737170, +-0.920435310132201150, -0.920415764235576920, -0.920396216037913220, -0.920376665539259120, -0.920357112739663140, -0.920337557639174570, -0.920318000237841940, -0.920298440535714520, +-0.920278878532840850, -0.920259314229269990, -0.920239747625050790, -0.920220178720232320, -0.920200607514863430, -0.920181034008992870, -0.920161458202669920, -0.920141880095943220, +-0.920122299688861830, -0.920102716981474720, -0.920083131973830740, -0.920063544665978950, -0.920043955057968430, -0.920024363149847810, -0.920004768941666500, -0.919985172433473110, +-0.919965573625316950, -0.919945972517246640, -0.919926369109311580, -0.919906763401560520, -0.919887155394042530, -0.919867545086806680, -0.919847932479902040, -0.919828317573377460, +-0.919808700367282020, -0.919789080861665000, -0.919769459056575140, -0.919749834952061750, -0.919730208548173780, -0.919710579844960300, -0.919690948842470160, -0.919671315540752880, +-0.919651679939857190, -0.919632042039832400, -0.919612401840727340, -0.919592759342591440, -0.919573114545473520, -0.919553467449423010, -0.919533818054488640, -0.919514166360719810, +-0.919494512368165480, -0.919474856076874960, -0.919455197486897300, -0.919435536598281590, -0.919415873411077110, -0.919396207925332830, -0.919376540141098150, -0.919356870058422040, +-0.919337197677353780, -0.919317522997942560, -0.919297846020237560, -0.919278166744287750, -0.919258485170142750, -0.919238801297851400, -0.919219115127463130, -0.919199426659027100, +-0.919179735892592390, -0.919160042828208400, -0.919140347465924320, -0.919120649805789340, -0.919100949847852840, -0.919081247592163810, -0.919061543038771740, -0.919041836187725720, +-0.919022127039075150, -0.919002415592869440, -0.918982701849157420, -0.918962985807988850, -0.918943267469412680, -0.918923546833478540, -0.918903823900235280, -0.918884098669732640, +-0.918864371142019690, -0.918844641317145830, -0.918824909195160360, -0.918805174776112680, -0.918785438060051860, -0.918765699047027650, -0.918745957737089110, -0.918726214130285770, +-0.918706468226666790, -0.918686720026281600, -0.918666969529179700, -0.918647216735410390, -0.918627461645022960, -0.918607704258066930, -0.918587944574591590, -0.918568182594646450, +-0.918548418318280820, -0.918528651745544100, -0.918508882876485910, -0.918489111711155330, -0.918469338249602090, -0.918449562491875480, -0.918429784438024920, -0.918410004088099920, +-0.918390221442149990, -0.918370436500224430, -0.918350649262372750, -0.918330859728644480, -0.918311067899089120, -0.918291273773755970, -0.918271477352694760, -0.918251678635954690, +-0.918231877623585490, -0.918212074315636780, -0.918192268712157640, -0.918172460813198030, -0.918152650618807130, -0.918132838129034680, -0.918113023343930080, -0.918093206263542960, +-0.918073386887922730, -0.918053565217119120, -0.918033741251181650, -0.918013914990159720, -0.917994086434103070, -0.917974255583061230, -0.917954422437083580, -0.917934586996220100, +-0.917914749260519970, -0.917894909230033140, -0.917875066904808910, -0.917855222284897020, -0.917835375370347100, -0.917815526161208760, -0.917795674657531650, -0.917775820859365150, +-0.917755964766759360, -0.917736106379763440, -0.917716245698427470, -0.917696382722800740, -0.917676517452933100, -0.917656649888874080, -0.917636780030673620, -0.917616907878381020, +-0.917597033432046240, -0.917577156691718800, -0.917557277657448660, -0.917537396329285100, -0.917517512707278220, -0.917497626791477510, -0.917477738581932710, -0.917457848078693460, +-0.917437955281809710, -0.917418060191331100, -0.917398162807307240, -0.917378263129788100, -0.917358361158823190, -0.917338456894462470, -0.917318550336755580, -0.917298641485752240, +-0.917278730341502310, -0.917258816904055640, -0.917238901173461850, -0.917218983149770910, -0.917199062833032430, -0.917179140223296390, -0.917159215320612290, -0.917139288125030430, +-0.917119358636600100, -0.917099426855371490, -0.917079492781394330, -0.917059556414718370, -0.917039617755393550, -0.917019676803469630, -0.916999733558996670, -0.916979788022024290, +-0.916959840192602460, -0.916939890070780920, -0.916919937656609840, -0.916899982950138750, -0.916880025951417820, -0.916860066660496690, -0.916840105077425530, -0.916820141202254080, +-0.916800175035032310, -0.916780206575809940, -0.916760235824637280, -0.916740262781563840, -0.916720287446639910, -0.916700309819915130, -0.916680329901439660, -0.916660347691263260, +-0.916640363189436090, -0.916620376396007910, -0.916600387311028890, -0.916580395934548870, -0.916560402266617840, -0.916540406307285840, -0.916520408056602730, -0.916500407514618700, +-0.916480404681383700, -0.916460399556947580, -0.916440392141360530, -0.916420382434672500, -0.916400370436933450, -0.916380356148193580, -0.916360339568502600, -0.916340320697911050, +-0.916320299536468540, -0.916300276084225370, -0.916280250341231390, -0.916260222307536900, -0.916240191983191730, -0.916220159368246080, -0.916200124462750120, -0.916180087266753820, +-0.916160047780307350, -0.916140006003460680, -0.916119961936264100, -0.916099915578767580, -0.916079866931021280, -0.916059815993075180, -0.916039762764979670, -0.916019707246784720, +-0.915999649438540620, -0.915979589340297220, -0.915959526952104920, -0.915939462274013790, -0.915919395306074020, -0.915899326048335680, -0.915879254500849170, -0.915859180663664450, +-0.915839104536831820, -0.915819026120401340, -0.915798945414423300, -0.915778862418948010, -0.915758777134025430, -0.915738689559706050, -0.915718599696039750, -0.915698507543077130, +-0.915678413100868170, -0.915658316369463270, -0.915638217348912490, -0.915618116039266130, -0.915598012440574480, -0.915577906552887950, -0.915557798376256500, -0.915537687910730650, +-0.915517575156360450, -0.915497460113196440, -0.915477342781288780, -0.915457223160687780, -0.915437101251443620, -0.915416977053606700, -0.915396850567227420, -0.915376721792355960, +-0.915356590729042740, -0.915336457377337930, -0.915316321737292160, -0.915296183808955500, -0.915276043592378350, -0.915255901087611120, -0.915235756294704220, -0.915215609213707810, +-0.915195459844672430, -0.915175308187648360, -0.915155154242686120, -0.915134998009835780, -0.915114839489148180, -0.915094678680673400, -0.915074515584461960, -0.915054350200564140, +-0.915034182529030460, -0.915014012569911330, -0.914993840323257150, -0.914973665789118430, -0.914953488967545470, -0.914933309858588890, -0.914913128462299000, -0.914892944778726290, +-0.914872758807921180, -0.914852570549934300, -0.914832380004815810, -0.914812187172616590, -0.914791992053386680, -0.914771794647176950, -0.914751594954037570, -0.914731392974019400, +-0.914711188707172610, -0.914690982153547940, -0.914670773313195680, -0.914650562186166580, -0.914630348772511040, -0.914610133072279560, -0.914589915085522900, -0.914569694812291330, +-0.914549472252635720, -0.914529247406606240, -0.914509020274253740, -0.914488790855628620, -0.914468559150781510, -0.914448325159763040, -0.914428088882623840, -0.914407850319414290, +-0.914387609470185160, -0.914367366334986940, -0.914347120913870490, -0.914326873206886100, -0.914306623214084510, -0.914286370935516350, -0.914266116371232450, -0.914245859521283010, +-0.914225600385719090, -0.914205338964591110, -0.914185075257949680, -0.914164809265845760, -0.914144540988329650, -0.914124270425452300, -0.914103997577264240, -0.914083722443816190, +-0.914063445025158790, -0.914043165321342890, -0.914022883332418990, -0.914002599058437950, -0.913982312499450280, -0.913962023655507050, -0.913941732526658560, -0.913921439112955870, +-0.913901143414449390, -0.913880845431190300, -0.913860545163228900, -0.913840242610616250, -0.913819937773402870, -0.913799630651639830, -0.913779321245377530, -0.913759009554666930, +-0.913738695579559000, -0.913718379320104130, -0.913698060776353520, -0.913677739948357550, -0.913657416836167410, -0.913637091439833520, -0.913616763759407150, -0.913596433794938710, +-0.913576101546479170, -0.913555767014079480, -0.913535430197790270, -0.913515091097662490, -0.913494749713747110, -0.913474406046094760, -0.913454060094756380, -0.913433711859782840, +-0.913413361341225190, -0.913393008539133970, -0.913372653453560220, -0.913352296084554930, -0.913331936432168810, -0.913311574496452840, -0.913291210277457970, -0.913270843775235150, +-0.913250474989835140, -0.913230103921308990, -0.913209730569707560, -0.913189354935081800, -0.913168977017482560, -0.913148596816961030, -0.913128214333567940, -0.913107829567354370, +-0.913087442518371150, -0.913067053186669360, -0.913046661572299970, -0.913026267675313920, -0.913005871495762070, -0.912985473033695700, -0.912965072289165570, -0.912944669262222730, +-0.912924263952918260, -0.912903856361303110, -0.912883446487428360, -0.912863034331344970, -0.912842619893104110, -0.912822203172756530, -0.912801784170353510, -0.912781362885946020, +-0.912760939319585130, -0.912740513471321900, -0.912720085341207410, -0.912699654929292610, -0.912679222235628810, -0.912658787260266830, -0.912638350003257990, -0.912617910464653240, +-0.912597468644503750, -0.912577024542860490, -0.912556578159774650, -0.912536129495297500, -0.912515678549479900, -0.912495225322373150, -0.912474769814028310, -0.912454312024496670, +-0.912433851953829090, -0.912413389602077070, -0.912392924969291360, -0.912372458055523470, -0.912351988860824360, -0.912331517385245430, -0.912311043628837530, -0.912290567591652170, +-0.912270089273740200, -0.912249608675153260, -0.912229125795942060, -0.912208640636158250, -0.912188153195852670, -0.912167663475076830, -0.912147171473881690, -0.912126677192318660, +-0.912106180630439020, -0.912085681788293860, -0.912065180665934560, -0.912044677263412320, -0.912024171580778310, -0.912003663618083940, -0.911983153375380380, -0.911962640852718830, +-0.911942126050150900, -0.911921608967727450, -0.911901089605500090, -0.911880567963520020, -0.911860044041838510, -0.911839517840506870, -0.911818989359576390, -0.911798458599098470, +-0.911777925559124510, -0.911757390239705590, -0.911736852640893210, -0.911716312762738790, -0.911695770605293500, -0.911675226168608850, -0.911654679452736040, -0.911634130457726680, +-0.911613579183631840, -0.911593025630503150, -0.911572469798391900, -0.911551911687349500, -0.911531351297427240, -0.911510788628676630, -0.911490223681149070, -0.911469656454895970, +-0.911449086949968620, -0.911428515166418650, -0.911407941104297350, -0.911387364763656230, -0.911366786144546690, -0.911346205247020260, -0.911325622071128110, -0.911305036616921970, +-0.911284448884453370, -0.911263858873773590, -0.911243266584934150, -0.911222672017986570, -0.911202075172982240, -0.911181476049972790, -0.911160874649009630, -0.911140270970144270, +-0.911119665013428340, -0.911099056778913010, -0.911078446266650240, -0.911057833476691340, -0.911037218409087800, -0.911016601063891260, -0.910995981441153240, -0.910975359540925120, +-0.910954735363258770, -0.910934108908205480, -0.910913480175816970, -0.910892849166144660, -0.910872215879240280, -0.910851580315155450, -0.910830942473941470, -0.910810302355650410, +-0.910789659960333340, -0.910769015288042330, -0.910748368338828660, -0.910727719112744080, -0.910707067609840220, -0.910686413830168680, -0.910665757773781110, -0.910645099440729240, +-0.910624438831064480, -0.910603775944838660, -0.910583110782103410, -0.910562443342910480, -0.910541773627311260, -0.910521101635357710, -0.910500427367101350, -0.910479750822593910, +-0.910459072001887250, -0.910438390905032760, -0.910417707532082400, -0.910397021883087690, -0.910376333958100470, -0.910355643757172370, -0.910334951280355240, -0.910314256527700590, +-0.910293559499260500, -0.910272860195086350, -0.910252158615230120, -0.910231454759743430, -0.910210748628678230, -0.910190040222086050, -0.910169329540018830, -0.910148616582528210, +-0.910127901349666150, -0.910107183841484260, -0.910086464058034390, -0.910065741999368400, -0.910045017665538030, -0.910024291056595210, -0.910003562172591480, -0.909982831013579020, +-0.909962097579609440, -0.909941361870734600, -0.909920623887006340, -0.909899883628476620, -0.909879141095197070, -0.909858396287219760, -0.909837649204596310, -0.909816899847378900, +-0.909796148215619160, -0.909775394309369050, -0.909754638128680520, -0.909733879673605310, -0.909713118944195380, -0.909692355940502790, -0.909671590662579190, -0.909650823110476630, +-0.909630053284247060, -0.909609281183942240, -0.909588506809614450, -0.909567730161315200, -0.909546951239096680, -0.909526170043010730, -0.909505386573109530, -0.909484600829444600, +-0.909463812812068450, -0.909443022521032480, -0.909422229956389220, -0.909401435118190270, -0.909380638006487720, -0.909359838621333520, -0.909339036962779850, -0.909318233030878440, +-0.909297426825681600, -0.909276618347241270, -0.909255807595609090, -0.909234994570837560, -0.909214179272978650, -0.909193361702083980, -0.909172541858206170, -0.909151719741396970, +-0.909130895351708550, -0.909110068689192640, -0.909089239753901770, -0.909068408545887770, -0.909047575065202730, -0.909026739311898590, -0.909005901286027870, -0.908985060987642310, +-0.908964218416794090, -0.908943373573535160, -0.908922526457918050, -0.908901677069994470, -0.908880825409816850, -0.908859971477436910, -0.908839115272907170, -0.908818256796279810, +-0.908797396047606450, -0.908776533026939840, -0.908755667734331920, -0.908734800169834880, -0.908713930333500560, -0.908693058225381710, -0.908672183845530060, -0.908651307193998110, +-0.908630428270837620, -0.908609547076101200, -0.908588663609841030, -0.908567777872109070, -0.908546889862957620, -0.908525999582439070, -0.908505107030605500, -0.908484212207509190, +-0.908463315113202110, -0.908442415747736990, -0.908421514111165780, -0.908400610203540900, -0.908379704024914190, -0.908358795575338500, -0.908337884854865770, -0.908316971863548090, +-0.908296056601438200, -0.908275139068588140, -0.908254219265050340, -0.908233297190876750, -0.908212372846120110, -0.908191446230832480, -0.908170517345066260, -0.908149586188873650, +-0.908128652762307140, -0.908107717065419040, -0.908086779098261740, -0.908065838860887210, -0.908044896353348290, -0.908023951575697040, -0.908003004527985990, -0.907982055210267310, +-0.907961103622593630, -0.907940149765017130, -0.907919193637590110, -0.907898235240365390, -0.907877274573394950, -0.907856311636731310, -0.907835346430426850, -0.907814378954534100, +-0.907793409209105450, -0.907772437194193200, -0.907751462909849760, -0.907730486356127740, -0.907709507533079660, -0.907688526440757700, -0.907667543079214270, -0.907646557448502200, +-0.907625569548673680, -0.907604579379781230, -0.907583586941877240, -0.907562592235014340, -0.907541595259245050, -0.907520596014621540, -0.907499594501196770, -0.907478590719023040, +-0.907457584668152740, -0.907436576348638390, -0.907415565760532730, -0.907394552903888150, -0.907373537778757180, -0.907352520385192210, -0.907331500723246090, -0.907310478792971220, +-0.907289454594420230, -0.907268428127645300, -0.907247399392699600, -0.907226368389635330, -0.907205335118505210, -0.907184299579361530, -0.907163261772257260, -0.907142221697244790, +-0.907121179354376640, -0.907100134743705770, -0.907079087865284570, -0.907058038719165570, -0.907036987305401280, -0.907015933624044760, -0.906994877675148410, -0.906973819458764870, +-0.906952758974946540, -0.906931696223746590, -0.906910631205217310, -0.906889563919411560, -0.906868494366381620, -0.906847422546180670, -0.906826348458861120, -0.906805272104475700, +-0.906784193483077040, -0.906763112594717980, -0.906742029439451150, -0.906720944017329170, -0.906699856328404770, -0.906678766372730820, -0.906657674150360030, -0.906636579661344810, +-0.906615482905738350, -0.906594383883593260, -0.906573282594962060, -0.906552179039897600, -0.906531073218452830, -0.906509965130680270, -0.906488854776632990, -0.906467742156363280, +-0.906446627269924420, -0.906425510117368940, -0.906404390698749780, -0.906383269014119360, -0.906362145063531080, -0.906341018847037330, -0.906319890364691070, -0.906298759616544940, +-0.906277626602651990, -0.906256491323065070, -0.906235353777836710, -0.906214213967020180, -0.906193071890668000, -0.906171927548833240, -0.906150780941568530, -0.906129632068926940, +-0.906108480930961300, -0.906087327527724470, -0.906066171859269190, -0.906045013925648620, -0.906023853726915410, -0.906002691263122720, -0.905981526534323070, -0.905960359540569750, +-0.905939190281915610, -0.905918018758413380, -0.905896844970116020, -0.905875668917076720, -0.905854490599348190, -0.905833310016983310, -0.905812127170035340, -0.905790942058557040, +-0.905769754682601350, -0.905748565042221120, -0.905727373137469650, -0.905706178968399780, -0.905684982535064460, -0.905663783837516450, -0.905642582875809230, -0.905621379649995450, +-0.905600174160128280, -0.905578966406260570, -0.905557756388445490, -0.905536544106736120, -0.905515329561185300, -0.905494112751846100, -0.905472893678771710, -0.905451672342015070, +-0.905430448741629370, -0.905409222877667230, -0.905387994750182280, -0.905366764359227360, -0.905345531704855320, -0.905324296787119560, -0.905303059606073160, -0.905281820161769060, +-0.905260578454260220, -0.905239334483600170, -0.905218088249841850, -0.905196839753038220, -0.905175588993242240, -0.905154335970507540, -0.905133080684887070, -0.905111823136433790, +-0.905090563325200770, -0.905069301251241630, -0.905048036914609110, -0.905026770315356610, -0.905005501453536980, -0.904984230329203720, -0.904962956942409910, -0.904941681293208510, +-0.904920403381653140, -0.904899123207796750, -0.904877840771692530, -0.904856556073393550, -0.904835269112953310, -0.904813979890424890, -0.904792688405861580, -0.904771394659316330, +-0.904750098650842880, -0.904728800380494080, -0.904707499848323330, -0.904686197054383580, -0.904664891998728570, -0.904643584681411260, -0.904622275102485050, -0.904600963262003010, +-0.904579649160018650, -0.904558332796585260, -0.904537014171755800, -0.904515693285584010, -0.904494370138123060, -0.904473044729426020, -0.904451717059546300, -0.904430387128537410, +-0.904409054936452630, -0.904387720483345150, -0.904366383769268260, -0.904345044794275470, -0.904323703558420180, -0.904302360061755570, -0.904281014304334940, -0.904259666286211910, +-0.904238316007439650, -0.904216963468071680, -0.904195608668161180, -0.904174251607761770, -0.904152892286926750, -0.904131530705709290, -0.904110166864163120, -0.904088800762341660, +-0.904067432400298080, -0.904046061778085890, -0.904024688895758600, -0.904003313753369620, -0.903981936350972350, -0.903960556688620080, -0.903939174766366650, -0.903917790584265250, +-0.903896404142369270, -0.903875015440732230, -0.903853624479407760, -0.903832231258449250, -0.903810835777910220, -0.903789438037843840, -0.903768038038304080, -0.903746635779344220, +-0.903725231261017780, -0.903703824483378050, -0.903682415446478980, -0.903661004150373870, -0.903639590595116000, -0.903618174780759340, -0.903596756707357280, -0.903575336374963340, +-0.903553913783630920, -0.903532488933413870, -0.903511061824365580, -0.903489632456539680, -0.903468200829989470, -0.903446766944768890, -0.903425330800931460, -0.903403892398530690, +-0.903382451737620000, -0.903361008818253430, -0.903339563640484290, -0.903318116204366190, -0.903296666509952660, -0.903275214557297650, -0.903253760346454550, -0.903232303877476990, +-0.903210845150418720, -0.903189384165333450, -0.903167920922274710, -0.903146455421295900, -0.903124987662451200, -0.903103517645794000, -0.903082045371378040, -0.903060570839256730, +-0.903039094049484240, -0.903017615002113970, -0.902996133697199670, -0.902974650134794830, -0.902953164314953540, -0.902931676237729410, -0.902910185903176070, -0.902888693311347020, +-0.902867198462296460, -0.902845701356078000, -0.902824201992744930, -0.902802700372351660, -0.902781196494951590, -0.902759690360598550, -0.902738181969346080, -0.902716671321248440, +-0.902695158416359060, -0.902673643254731760, -0.902652125836420070, -0.902630606161478390, -0.902609084229960220, -0.902587560041919200, -0.902566033597409170, -0.902544504896484300, +-0.902522973939198110, -0.902501440725604450, -0.902479905255757050, -0.902458367529710090, -0.902436827547517200, -0.902415285309232210, -0.902393740814908860, -0.902372194064601230, +-0.902350645058363270, -0.902329093796248370, -0.902307540278311060, -0.902285984504604840, -0.902264426475183680, -0.902242866190101190, -0.902221303649411780, -0.902199738853169180, +-0.902178171801427120, -0.902156602494239460, -0.902135030931660590, -0.902113457113744020, -0.902091881040543830, -0.902070302712113750, -0.902048722128508170, -0.902027139289780730, +-0.902005554195985490, -0.901983966847176080, -0.901962377243407000, -0.901940785384731990, -0.901919191271204790, -0.901897594902879800, -0.901875996279810850, -0.901854395402051920, +-0.901832792269656850, -0.901811186882679920, -0.901789579241175090, -0.901767969345196210, -0.901746357194797230, -0.901724742790032670, -0.901703126130956160, -0.901681507217621860, +-0.901659886050083630, -0.901638262628395750, -0.901616636952612290, -0.901595009022787330, -0.901573378838974480, -0.901551746401228480, -0.901530111709603180, -0.901508474764152300, +-0.901486835564930480, -0.901465194111991550, -0.901443550405389590, -0.901421904445178670, -0.901400256231413070, -0.901378605764146860, -0.901356953043434220, -0.901335298069328880, +-0.901313640841885590, -0.901291981361158180, -0.901270319627200720, -0.901248655640067400, -0.901226989399812610, -0.901205320906490300, -0.901183650160154670, -0.901161977160859770, +-0.901140301908660120, -0.901118624403609680, -0.901096944645762510, -0.901075262635173120, -0.901053578371895700, -0.901031891855984200, -0.901010203087492910, -0.900988512066476120, +-0.900966818792988230, -0.900945123267083200, -0.900923425488815210, -0.900901725458238770, -0.900880023175408160, -0.900858318640377350, -0.900836611853200630, -0.900814902813932620, +-0.900793191522627270, -0.900771477979338990, -0.900749762184121730, -0.900728044137030340, -0.900706323838118880, -0.900684601287441540, -0.900662876485052500, -0.900641149431006480, +-0.900619420125357560, -0.900597688568159920, -0.900575954759468280, -0.900554218699336720, -0.900532480387819630, -0.900510739824971100, -0.900488997010845950, -0.900467251945498370, +-0.900445504628982650, -0.900423755061352860, -0.900402003242663950, -0.900380249172969990, -0.900358492852325500, -0.900336734280784530, -0.900314973458401950, -0.900293210385231910, +-0.900271445061328830, -0.900249677486746890, -0.900227907661541040, -0.900206135585765450, -0.900184361259474210, -0.900162584682722370, -0.900140805855564000, -0.900119024778053610, +-0.900097241450245500, -0.900075455872194510, -0.900053668043954810, -0.900031877965581040, -0.900010085637127260, -0.899988291058648530, -0.899966494230199030, -0.899944695151833400, +-0.899922893823605690, -0.899901090245571080, -0.899879284417783640, -0.899857476340298000, -0.899835666013168560, -0.899813853436450040, -0.899792038610196960, -0.899770221534463620, +-0.899748402209304850, -0.899726580634775060, -0.899704756810928870, -0.899682930737820570, -0.899661102415505120, -0.899639271844037030, -0.899617439023470580, -0.899595603953860510, +-0.899573766635261450, -0.899551927067728130, -0.899530085251314950, -0.899508241186076310, -0.899486394872067270, -0.899464546309342360, -0.899442695497955970, -0.899420842437962610, +-0.899398987129417460, -0.899377129572374810, -0.899355269766889290, -0.899333407713015400, -0.899311543410808210, -0.899289676860322130, -0.899267808061611660, -0.899245937014731990, +-0.899224063719737400, -0.899202188176682630, -0.899180310385622180, -0.899158430346611140, -0.899136548059704110, -0.899114663524955620, -0.899092776742420270, -0.899070887712153270, +-0.899048996434208990, -0.899027102908642180, -0.899005207135507470, -0.898983309114860020, -0.898961408846754130, -0.898939506331244860, -0.898917601568386520, -0.898895694558234480, +-0.898873785300843050, -0.898851873796267080, -0.898829960044561620, -0.898808044045781300, -0.898786125799980740, -0.898764205307214790, -0.898742282567538410, -0.898720357581006430, +-0.898698430347673490, -0.898676500867594320, -0.898654569140824090, -0.898632635167417430, -0.898610698947429180, -0.898588760480913960, -0.898566819767927070, -0.898544876808523130, +-0.898522931602756980, -0.898500984150683250, -0.898479034452357330, -0.898457082507833850, -0.898435128317167430, -0.898413171880413360, -0.898391213197626380, -0.898369252268861440, +-0.898347289094173050, -0.898325323673616730, -0.898303356007247090, -0.898281386095118980, -0.898259413937287250, -0.898237439533807190, -0.898215462884733530, -0.898193483990121220, +-0.898171502850025010, -0.898149519464500280, -0.898127533833601670, -0.898105545957384340, -0.898083555835902820, -0.898061563469212620, -0.898039568857368580, -0.898017572000425420, +-0.897995572898438450, -0.897973571551462620, -0.897951567959552890, -0.897929562122763980, -0.897907554041151300, -0.897885543714769810, -0.897863531143674450, -0.897841516327920090, +-0.897819499267562100, -0.897797479962655460, -0.897775458413255010, -0.897753434619415810, -0.897731408581193160, -0.897709380298642000, -0.897687349771817300, -0.897665317000774120, +-0.897643281985567860, -0.897621244726253380, -0.897599205222885830, -0.897577163475519970, -0.897555119484211520, -0.897533073249015210, -0.897511024769986010, -0.897488974047179420, +-0.897466921080650400, -0.897444865870454130, -0.897422808416645460, -0.897400748719279990, -0.897378686778412590, -0.897356622594098540, -0.897334556166392680, -0.897312487495350640, +-0.897290416581027480, -0.897268343423478170, -0.897246268022757860, -0.897224190378922090, -0.897202110492025810, -0.897180028362124180, -0.897157943989272400, -0.897135857373525860, +-0.897113768514939740, -0.897091677413568990, -0.897069584069469240, -0.897047488482695550, -0.897025390653303110, -0.897003290581347090, -0.896981188266883000, -0.896959083709965800, +-0.896936976910651000, -0.896914867868993660, -0.896892756585049190, -0.896870643058872870, -0.896848527290520000, -0.896826409280045530, -0.896804289027505310, -0.896782166532954280, +-0.896760041796447970, -0.896737914818041220, -0.896715785597789970, -0.896693654135749200, -0.896671520431974180, -0.896649384486520430, -0.896627246299443350, -0.896605105870798000, +-0.896582963200639790, -0.896560818289024450, -0.896538671136006940, -0.896516521741642760, -0.896494370105987090, -0.896472216229095790, -0.896450060111023790, -0.896427901751826740, +-0.896405741151559800, -0.896383578310278590, -0.896361413228038420, -0.896339245904894780, -0.896317076340902850, -0.896294904536118380, -0.896272730490596640, -0.896250554204393150, +-0.896228375677562970, -0.896206194910162070, -0.896184011902245730, -0.896161826653869120, -0.896139639165088210, -0.896117449435958170, -0.896095257466534510, -0.896073063256872530, +-0.896050866807028060, -0.896028668117056390, -0.896006467187013040, -0.895984264016953410, -0.895962058606933230, -0.895939850957008010, -0.895917641067233040, -0.895895428937663830, +-0.895873214568356220, -0.895850997959365620, -0.895828779110747540, -0.895806558022557260, -0.895784334694850860, -0.895762109127683500, -0.895739881321110820, -0.895717651275188540, +-0.895695418989972070, -0.895673184465517140, -0.895650947701879030, -0.895628708699113820, -0.895606467457276790, -0.895584223976423570, -0.895561978256609550, -0.895539730297890910, +-0.895517480100322840, -0.895495227663961060, -0.895472972988861080, -0.895450716075078870, -0.895428456922669810, -0.895406195531689650, -0.895383931902193790, -0.895361666034238280, +-0.895339397927878640, -0.895317127583170280, -0.895294855000169370, -0.895272580178931190, -0.895250303119511700, -0.895228023821966200, -0.895205742286350750, -0.895183458512721080, +-0.895161172501132700, -0.895138884251641230, -0.895116593764302640, -0.895094301039172650, -0.895072006076306880, -0.895049708875760960, -0.895027409437590960, -0.895005107761852380, +-0.894982803848601070, -0.894960497697892540, -0.894938189309782970, -0.894915878684327870, -0.894893565821582970, -0.894871250721604230, -0.894848933384447490, -0.894826613810168370, +-0.894804291998822500, -0.894781967950466160, -0.894759641665154760, -0.894737313142944360, -0.894714982383890470, -0.894692649388049380, -0.894670314155476600, -0.894647976686227970, +-0.894625636980359350, -0.894603295037926790, -0.894580950858985920, -0.894558604443592700, -0.894536255791802850, -0.894513904903672440, -0.894491551779257320, -0.894469196418613330, +-0.894446838821796210, -0.894424478988862130, -0.894402116919866820, -0.894379752614866020, -0.894357386073916130, -0.894335017297072650, -0.894312646284391780, -0.894290273035928900, +-0.894267897551740740, -0.894245519831882720, -0.894223139876410890, -0.894200757685381100, -0.894178373258849520, -0.894155986596872010, -0.894133597699504620, -0.894111206566802990, +-0.894088813198823500, -0.894066417595622000, -0.894044019757254560, -0.894021619683776800, -0.893999217375245130, -0.893976812831715480, -0.893954406053243610, -0.893931997039885800, +-0.893909585791698100, -0.893887172308736490, -0.893864756591056690, -0.893842338638715210, -0.893819918451767890, -0.893797496030270700, -0.893775071374279690, -0.893752644483851060, +-0.893730215359040960, -0.893707783999905250, -0.893685350406499880, -0.893662914578881360, -0.893640476517105540, -0.893618036221228600, -0.893595593691306260, -0.893573148927395140, +-0.893550701929551220, -0.893528252697830320, -0.893505801232288950, -0.893483347532983090, -0.893460891599968890, -0.893438433433302310, -0.893415973033039770, -0.893393510399237310, +-0.893371045531951010, -0.893348578431237050, -0.893326109097151710, -0.893303637529751170, -0.893281163729091500, -0.893258687695228760, -0.893236209428219460, -0.893213728928119680, +-0.893191246194985580, -0.893168761228873120, -0.893146274029838930, -0.893123784597939060, -0.893101292933229820, -0.893078799035767150, -0.893056302905607560, -0.893033804542807340, +-0.893011303947422340, -0.892988801119509290, -0.892966296059124250, -0.892943788766323410, -0.892921279241162940, -0.892898767483699560, -0.892876253493989140, -0.892853737272088170, +-0.892831218818052610, -0.892808698131939190, -0.892786175213803990, -0.892763650063703510, -0.892741122681693590, -0.892718593067831080, -0.892696061222172040, -0.892673527144772880, +-0.892650990835689770, -0.892628452294979220, -0.892605911522697750, -0.892583368518901190, -0.892560823283646390, -0.892538275816989520, -0.892515726118987110, -0.892493174189694980, +-0.892470620029170210, -0.892448063637468980, -0.892425505014647460, -0.892402944160762050, -0.892380381075869480, -0.892357815760025820, -0.892335248213287800, -0.892312678435711380, +-0.892290106427353510, -0.892267532188270260, -0.892244955718518360, -0.892222377018153770, -0.892199796087233430, -0.892177212925813530, -0.892154627533950470, -0.892132039911701090, +-0.892109450059121570, -0.892086857976268410, -0.892064263663197910, -0.892041667119967020, -0.892019068346631920, -0.891996467343249110, -0.891973864109874890, -0.891951258646566330, +-0.891928650953379590, -0.891906041030371190, -0.891883428877597530, -0.891860814495115450, -0.891838197882981350, -0.891815579041251750, -0.891792957969983040, -0.891770334669232060, +-0.891747709139055320, -0.891725081379509120, -0.891702451390650300, -0.891679819172535470, -0.891657184725221040, -0.891634548048763410, -0.891611909143219750, -0.891589268008646130, +-0.891566624645099500, -0.891543979052636050, -0.891521331231312830, -0.891498681181186360, -0.891476028902313030, -0.891453374394749590, -0.891430717658552860, -0.891408058693779260, +-0.891385397500485620, -0.891362734078728240, -0.891340068428564280, -0.891317400550050040, -0.891294730443242370, -0.891272058108197650, -0.891249383544973070, -0.891226706753624920, +-0.891204027734209920, -0.891181346486784930, -0.891158663011406670, -0.891135977308131650, -0.891113289377016500, -0.891090599218118400, -0.891067906831493840, -0.891045212217199340, +-0.891022515375291760, -0.890999816305828030, -0.890977115008864780, -0.890954411484458750, -0.890931705732666450, -0.890908997753545150, -0.890886287547151380, -0.890863575113541860, +-0.890840860452773110, -0.890818143564902520, -0.890795424449986490, -0.890772703108081760, -0.890749979539245400, -0.890727253743534230, -0.890704525721004780, -0.890681795471713890, +-0.890659062995718730, -0.890636328293075820, -0.890613591363842220, -0.890590852208074320, -0.890568110825829540, -0.890545367217164490, -0.890522621382136000, -0.890499873320800830, +-0.890477123033216130, -0.890454370519438540, -0.890431615779525120, -0.890408858813532490, -0.890386099621517820, -0.890363338203537970, -0.890340574559649540, -0.890317808689909840, +-0.890295040594375700, -0.890272270273103960, -0.890249497726151250, -0.890226722953575080, -0.890203945955432060, -0.890181166731779160, -0.890158385282673210, -0.890135601608171510, +-0.890112815708330670, -0.890090027583207990, -0.890067237232859850, -0.890044444657343890, -0.890021649856716830, -0.889998852831035640, -0.889976053580357140, -0.889953252104738750, +-0.889930448404237180, -0.889907642478909410, -0.889884834328812380, -0.889862023954003490, -0.889839211354539580, -0.889816396530477390, -0.889793579481874430, -0.889770760208787540, +-0.889747938711273670, -0.889725114989389780, -0.889702289043193370, -0.889679460872741190, -0.889656630478090400, -0.889633797859297750, -0.889610963016420840, -0.889588125949516530, +-0.889565286658641980, -0.889542445143853940, -0.889519601405209910, -0.889496755442766960, -0.889473907256582150, -0.889451056846712330, -0.889428204213215110, -0.889405349356147350, +-0.889382492275565980, -0.889359632971528650, -0.889336771444092180, -0.889313907693313870, -0.889291041719250550, -0.889268173521959750, -0.889245303101498630, -0.889222430457924150, +-0.889199555591293490, -0.889176678501664040, -0.889153799189092990, -0.889130917653637390, -0.889108033895354310, -0.889085147914301270, -0.889062259710535430, -0.889039369284113980, +-0.889016476635093870, -0.888993581763532830, -0.888970684669487700, -0.888947785353015770, -0.888924883814174560, -0.888901980053021120, -0.888879074069612640, -0.888856165864006400, +-0.888833255436259910, -0.888810342786430340, -0.888787427914574880, -0.888764510820750590, -0.888741591505015300, -0.888718669967425990, -0.888695746208039930, -0.888672820226914410, +-0.888649892024107050, -0.888626961599674910, -0.888604028953675410, -0.888581094086165590, -0.888558156997203200, -0.888535217686845510, -0.888512276155149490, -0.888489332402173090, +-0.888466386427973260, -0.888443438232607520, -0.888420487816133030, -0.888397535178607420, -0.888374580320087980, -0.888351623240632100, -0.888328663940296970, -0.888305702419140420, +-0.888282738677219630, -0.888259772714591890, -0.888236804531314590, -0.888213834127445480, -0.888190861503041830, -0.888167886658160930, -0.888144909592860190, -0.888121930307197330, +-0.888098948801229640, -0.888075965075014630, -0.888052979128609480, -0.888029990962072020, -0.888007000575459670, -0.887984007968829590, -0.887961013142239630, -0.887938016095747300, +-0.887915016829409760, -0.887892015343284550, -0.887869011637429480, -0.887846005711901980, -0.887822997566759310, -0.887799987202058990, -0.887776974617858980, -0.887753959814216450, +-0.887730942791189140, -0.887707923548834100, -0.887684902087209630, -0.887661878406372780, -0.887638852506381300, -0.887615824387292470, -0.887592794049164250, -0.887569761492054020, +-0.887546726716019310, -0.887523689721117840, -0.887500650507407230, -0.887477609074945000, -0.887454565423788530, -0.887431519553995800, -0.887408471465624290, -0.887385421158731650, +-0.887362368633375250, -0.887339313889613070, -0.887316256927502710, -0.887293197747101580, -0.887270136348467410, -0.887247072731657930, -0.887224006896730870, -0.887200938843743850, +-0.887177868572754160, -0.887154796083819970, -0.887131721376998920, -0.887108644452348270, -0.887085565309926330, -0.887062483949790370, -0.887039400371998240, -0.887016314576607350, +-0.886993226563675960, -0.886970136333261490, -0.886947043885421670, -0.886923949220214000, -0.886900852337696670, -0.886877753237927280, -0.886854651920963470, -0.886831548386862730, +-0.886808442635683370, -0.886785334667482990, -0.886762224482319230, -0.886739112080249690, -0.886715997461332560, -0.886692880625625460, -0.886669761573186220, -0.886646640304072250, +-0.886623516818341950, -0.886600391116052820, -0.886577263197262600, -0.886554133062029350, -0.886531000710410800, -0.886507866142464680, -0.886484729358248740, -0.886461590357821240, +-0.886438449141239700, -0.886415305708562080, -0.886392160059845890, -0.886369012195149630, -0.886345862114530700, -0.886322709818047280, -0.886299555305756770, -0.886276398577717560, +-0.886253239633987500, -0.886230078474624210, -0.886206915099685520, -0.886183749509229850, -0.886160581703314690, -0.886137411681997890, -0.886114239445337850, -0.886091064993392070, +-0.886067888326218740, -0.886044709443875480, -0.886021528346420670, -0.885998345033911950, -0.885975159506407480, -0.885951971763964790, -0.885928781806642470, -0.885905589634498170, +-0.885882395247589830, -0.885859198645975400, -0.885835999829713060, -0.885812798798860770, -0.885789595553476580, -0.885766390093618130, -0.885743182419343910, -0.885719972530711660, +-0.885696760427779340, -0.885673546110605340, -0.885650329579247500, -0.885627110833763780, -0.885603889874212010, -0.885580666700650830, -0.885557441313137960, -0.885534213711731470, +-0.885510983896489300, -0.885487751867469860, -0.885464517624731000, -0.885441281168330870, -0.885418042498327230, -0.885394801614778790, -0.885371558517743410, -0.885348313207279030, +-0.885325065683443710, -0.885301815946295870, -0.885278563995893550, -0.885255309832294610, -0.885232053455557550, -0.885208794865740440, -0.885185534062901350, -0.885162271047098100, +-0.885139005818389450, -0.885115738376833330, -0.885092468722487810, -0.885069196855410970, -0.885045922775661300, -0.885022646483296760, -0.884999367978375640, -0.884976087260956000, +-0.884952804331096240, -0.884929519188854430, -0.884906231834288960, -0.884882942267457560, -0.884859650488419190, -0.884836356497231580, -0.884813060293953010, -0.884789761878641670, +-0.884766461251356160, -0.884743158412154450, -0.884719853361094710, -0.884696546098235450, -0.884673236623634840, -0.884649924937351170, -0.884626611039442510, -0.884603294929967480, +-0.884579976608984240, -0.884556656076550980, -0.884533333332725990, -0.884510008377567770, -0.884486681211134610, -0.884463351833484680, -0.884440020244676160, -0.884416686444767900, +-0.884393350433817840, -0.884370012211884380, -0.884346671779025820, -0.884323329135300650, -0.884299984280767170, -0.884276637215483550, -0.884253287939508640, -0.884229936452900380, +-0.884206582755717290, -0.884183226848017530, -0.884159868729859970, -0.884136508401302760, -0.884113145862404190, -0.884089781113222670, -0.884066414153816820, -0.884043044984244910, +-0.884019673604565460, -0.883996300014836530, -0.883972924215117080, -0.883949546205465400, -0.883926165985939760, -0.883902783556598570, -0.883879398917500670, -0.883856012068704120, +-0.883832623010267440, -0.883809231742249460, -0.883785838264708250, -0.883762442577702530, -0.883739044681290500, -0.883715644575531090, -0.883692242260482490, -0.883668837736203310, +-0.883645431002751840, -0.883622022060187030, -0.883598610908567170, -0.883575197547950770, -0.883551781978396120, -0.883528364199962280, -0.883504944212707530, -0.883481522016690390, +-0.883458097611969250, -0.883434670998603070, -0.883411242176650240, -0.883387811146169270, -0.883364377907218560, -0.883340942459857060, -0.883317504804143280, -0.883294064940135510, +-0.883270622867892820, -0.883247178587473590, -0.883223732098936340, -0.883200283402339580, -0.883176832497742370, -0.883153379385203000, -0.883129924064780300, -0.883106466536532460, +-0.883083006800518660, -0.883059544856797380, -0.883036080705427270, -0.883012614346466720, -0.882989145779974890, -0.882965675006010200, -0.882942202024631250, -0.882918726835896560, +-0.882895249439865300, -0.882871769836595990, -0.882848288026147010, -0.882824804008577440, -0.882801317783945990, -0.882777829352311190, -0.882754338713731550, -0.882730845868266330, +-0.882707350815973960, -0.882683853556913260, -0.882660354091142630, -0.882636852418721470, -0.882613348539708080, -0.882589842454161280, -0.882566334162139810, -0.882542823663702620, +-0.882519310958908340, -0.882495796047815810, -0.882472278930483630, -0.882448759606970890, -0.882425238077336300, -0.882401714341638390, -0.882378188399936430, -0.882354660252288920, +-0.882331129898754840, -0.882307597339392680, -0.882284062574261730, -0.882260525603420720, -0.882236986426928270, -0.882213445044843230, -0.882189901457224760, -0.882166355664131490, +-0.882142807665622470, -0.882119257461756120, -0.882095705052591830, -0.882072150438188320, -0.882048593618604330, -0.882025034593898800, -0.882001473364130820, -0.881977909929359090, +-0.881954344289642700, -0.881930776445040140, -0.881907206395610930, -0.881883634141413690, -0.881860059682507140, -0.881836483018950680, -0.881812904150802930, -0.881789323078122970, +-0.881765739800969510, -0.881742154319401950, -0.881718566633478920, -0.881694976743259470, -0.881671384648802460, -0.881647790350167160, -0.881624193847412310, -0.881600595140597080, +-0.881576994229780090, -0.881553391115020850, -0.881529785796378080, -0.881506178273910870, -0.881482568547678040, -0.881458956617738990, -0.881435342484152560, -0.881411726146977600, +-0.881388107606273510, -0.881364486862099120, -0.881340863914513490, -0.881317238763575480, -0.881293611409344590, -0.881269981851879770, -0.881246350091239860, -0.881222716127483930, +-0.881199079960671480, -0.881175441590861250, -0.881151801018112410, -0.881128158242483920, -0.881104513264035270, -0.881080866082825210, -0.881057216698913130, -0.881033565112357640, +-0.881009911323218600, -0.880986255331554720, -0.880962597137424970, -0.880938936740888970, -0.880915274142005660, -0.880891609340834100, -0.880867942337433260, -0.880844273131862860, +-0.880820601724181750, -0.880796928114449210, -0.880773252302724070, -0.880749574289065970, -0.880725894073533970, -0.880702211656187230, -0.880678527037084820, -0.880654840216286260, +-0.880631151193850600, -0.880607459969837030, -0.880583766544304590, -0.880560070917313030, -0.880536373088921190, -0.880512673059188230, -0.880488970828173900, -0.880465266395937030, +-0.880441559762537020, -0.880417850928032930, -0.880394139892484380, -0.880370426655950560, -0.880346711218490620, -0.880322993580163640, -0.880299273741029450, -0.880275551701147130, +-0.880251827460575840, -0.880228101019374760, -0.880204372377603740, -0.880180641535321720, -0.880156908492588100, -0.880133173249461940, -0.880109435806003200, -0.880085696162270730, +-0.880061954318324120, -0.880038210274222350, -0.880014464030025260, -0.879990715585792120, -0.879966964941581890, -0.879943212097454410, -0.879919457053468970, -0.879895699809684850, +-0.879871940366161340, -0.879848178722958170, -0.879824414880134520, -0.879800648837749890, -0.879776880595863340, -0.879753110154534830, -0.879729337513823540, -0.879705562673788970, +-0.879681785634490180, -0.879658006395987240, -0.879634224958339210, -0.879610441321605710, -0.879586655485845800, -0.879562867451119450, -0.879539077217486030, -0.879515284785004630, +-0.879491490153735290, -0.879467693323737200, -0.879443894295069860, -0.879420093067792560, -0.879396289641965260, -0.879372484017647230, -0.879348676194897980, -0.879324866173776920, +-0.879301053954343770, -0.879277239536658040, -0.879253422920779240, -0.879229604106766650, -0.879205783094680230, -0.879181959884579370, -0.879158134476523690, -0.879134306870572370, +-0.879110477066785580, -0.879086645065222490, -0.879062810865942620, -0.879038974469005920, -0.879015135874471890, -0.878991295082399930, -0.878967452092849430, -0.878943606905880690, +-0.878919759521552770, -0.878895909939925610, -0.878872058161058400, -0.878848204185011190, -0.878824348011843500, -0.878800489641615060, -0.878776629074385030, -0.878752766310213710, +-0.878728901349160480, -0.878705034191284980, -0.878681164836646710, -0.878657293285305620, -0.878633419537321440, -0.878609543592753670, -0.878585665451661830, -0.878561785114105990, +-0.878537902580145750, -0.878514017849840510, -0.878490130923250460, -0.878466241800435090, -0.878442350481454140, -0.878418456966367000, -0.878394561255233960, -0.878370663348114640, +-0.878346763245068550, -0.878322860946155300, -0.878298956451435190, -0.878275049760967710, -0.878251140874812600, -0.878227229793029360, -0.878203316515678290, -0.878179401042818890, +-0.878155483374511100, -0.878131563510814230, -0.878107641451788770, -0.878083717197494230, -0.878059790747990120, -0.878035862103336730, -0.878011931263593780, -0.877987998228820900, +-0.877964062999077920, -0.877940125574424910, -0.877916185954921600, -0.877892244140627830, -0.877868300131603220, -0.877844353927908160, -0.877820405529602170, -0.877796454936745070, +-0.877772502149396730, -0.877748547167617300, -0.877724589991466520, -0.877700630621004340, -0.877676669056290270, -0.877652705297384710, -0.877628739344347490, -0.877604771197238120, +-0.877580800856117120, -0.877556828321044090, -0.877532853592079000, -0.877508876669281460, -0.877484897552712080, -0.877460916242430390, -0.877436932738496430, -0.877412947040969840, +-0.877388959149911220, -0.877364969065380200, -0.877340976787436720, -0.877316982316140530, -0.877292985651552120, -0.877268986793731330, -0.877244985742737900, -0.877220982498632010, +-0.877196977061473700, -0.877172969431323060, -0.877148959608239800, -0.877124947592284210, -0.877100933383516360, -0.877076916981996190, -0.877052898387783440, -0.877028877600938730, +-0.877004854621521780, -0.876980829449592770, -0.876956802085211320, -0.876932772528438260, -0.876908740779333120, -0.876884706837956270, -0.876860670704367350, -0.876836632378626970, +-0.876812591860794970, -0.876788549150931520, -0.876764504249096580, -0.876740457155350540, -0.876716407869753240, -0.876692356392365090, -0.876668302723245700, -0.876644246862455790, +-0.876620188810055320, -0.876596128566104140, -0.876572066130662850, -0.876548001503791420, -0.876523934685550010, -0.876499865675998470, -0.876475794475197520, -0.876451721083207120, +-0.876427645500087340, -0.876403567725898340, -0.876379487760700520, -0.876355405604554050, -0.876331321257519000, -0.876307234719655550, -0.876283145991024190, -0.876259055071684890, +-0.876234961961698030, -0.876210866661123470, -0.876186769170022030, -0.876162669488453670, -0.876138567616478350, -0.876114463554156900, -0.876090357301549270, -0.876066248858715760, +-0.876042138225716300, -0.876018025402611870, -0.875993910389462280, -0.875969793186327950, -0.875945673793268930, -0.875921552210345960, -0.875897428437619090, -0.875873302475148610, +-0.875849174322994690, -0.875825043981217970, -0.875800911449878820, -0.875776776729037200, -0.875752639818753510, -0.875728500719088480, -0.875704359430102160, -0.875680215951854750, +-0.875656070284406950, -0.875631922427819060, -0.875607772382151260, -0.875583620147463940, -0.875559465723817710, -0.875535309111272750, -0.875511150309889690, -0.875486989319728350, +-0.875462826140849910, -0.875438660773314340, -0.875414493217182120, -0.875390323472513440, -0.875366151539369140, -0.875341977417809500, -0.875317801107894920, -0.875293622609685680, +-0.875269441923242520, -0.875245259048625710, -0.875221073985895880, -0.875196886735113090, -0.875172697296338290, -0.875148505669631760, -0.875124311855053680, -0.875100115852665120, +-0.875075917662526240, -0.875051717284697660, -0.875027514719239450, -0.875003309966212670, -0.874979103025677720, -0.874954893897694870, -0.874930682582324650, -0.874906469079627990, +-0.874882253389665080, -0.874858035512496520, -0.874833815448182730, -0.874809593196784530, -0.874785368758362440, -0.874761142132976950, -0.874736913320688260, -0.874712682321557630, +-0.874688449135645250, -0.874664213763011510, -0.874639976203717360, -0.874615736457823420, -0.874591494525390090, -0.874567250406477760, -0.874543004101147600, -0.874518755609459910, +-0.874494504931475400, -0.874470252067254260, -0.874445997016857770, -0.874421739780346320, -0.874397480357780530, -0.874373218749220800, -0.874348954954728200, -0.874324688974363220, +-0.874300420808186600, -0.874276150456258620, -0.874251877918640450, -0.874227603195392720, -0.874203326286575710, -0.874179047192250590, -0.874154765912477760, -0.874130482447318170, +-0.874106196796832100, -0.874081908961080730, -0.874057618940124570, -0.874033326734024450, -0.874009032342840770, -0.873984735766634710, -0.873960437005466770, -0.873936136059397790, +-0.873911832928488170, -0.873887527612799310, -0.873863220112391590, -0.873838910427325750, -0.873814598557662410, -0.873790284503462970, -0.873765968264787700, -0.873741649841697220, +-0.873717329234252940, -0.873693006442515240, -0.873668681466545080, -0.873644354306403080, -0.873620024962150300, -0.873595693433847460, -0.873571359721555530, -0.873547023825334780, +-0.873522685745246830, -0.873498345481352080, -0.873474003033711590, -0.873449658402385750, -0.873425311587436080, -0.873400962588923080, -0.873376611406907590, -0.873352258041450450, +-0.873327902492612940, -0.873303544760455570, -0.873279184845039300, -0.873254822746424960, -0.873230458464673730, -0.873206091999846330, -0.873181723352003610, -0.873157352521206740, +-0.873132979507516340, -0.873108604310993690, -0.873084226931699180, -0.873059847369694440, -0.873035465625039970, -0.873011081697796950, -0.872986695588025880, -0.872962307295788390, +-0.872937916821145080, -0.872913524164157020, -0.872889129324884830, -0.872864732303390120, -0.872840333099733630, -0.872815931713976200, -0.872791528146178770, -0.872767122396402750, +-0.872742714464708860, -0.872718304351158050, -0.872693892055811720, -0.872669477578730590, -0.872645060919975730, -0.872620642079608100, -0.872596221057688970, -0.872571797854279410, +-0.872547372469440250, -0.872522944903232570, -0.872498515155717640, -0.872474083226956410, -0.872449649117010060, -0.872425212825939320, -0.872400774353805700, -0.872376333700670250, +-0.872351890866593930, -0.872327445851637680, -0.872302998655862920, -0.872278549279330790, -0.872254097722102050, -0.872229643984238300, -0.872205188065800390, -0.872180729966849590, +-0.872156269687446640, -0.872131807227653270, -0.872107342587530420, -0.872082875767139170, -0.872058406766540560, -0.872033935585796120, -0.872009462224966890, -0.871984986684113950, +-0.871960508963298350, -0.871936029062581720, -0.871911546982024890, -0.871887062721689370, -0.871862576281635880, -0.871838087661926160, -0.871813596862621280, -0.871789103883782280, +-0.871764608725470460, -0.871740111387747210, -0.871715611870673810, -0.871691110174311110, -0.871666606298720730, -0.871642100243963940, -0.871617592010101920, -0.871593081597195730, +-0.871568569005306990, -0.871544054234496880, -0.871519537284826560, -0.871495018156357220, -0.871470496849150570, -0.871445973363267680, -0.871421447698769840, -0.871396919855718100, +-0.871372389834174420, -0.871347857634199640, -0.871323323255855260, -0.871298786699202350, -0.871274247964302750, -0.871249707051217400, -0.871225163960007710, -0.871200618690735280, +-0.871176071243461190, -0.871151521618247050, -0.871126969815153920, -0.871102415834243530, -0.871077859675577050, -0.871053301339215990, -0.871028740825221410, -0.871004178133655160, +-0.870979613264578620, -0.870955046218052860, -0.870930476994139390, -0.870905905592899930, -0.870881332014395660, -0.870856756258688080, -0.870832178325838480, -0.870807598215908580, +-0.870783015928959680, -0.870758431465052940, -0.870733844824250420, -0.870709256006613310, -0.870684665012203100, -0.870660071841080960, -0.870635476493308860, -0.870610878968947950, +-0.870586279268059980, -0.870561677390706110, -0.870537073336948190, -0.870512467106847600, -0.870487858700465860, -0.870463248117864350, -0.870438635359104820, -0.870414020424248760, +-0.870389403313357570, -0.870364784026492640, -0.870340162563716050, -0.870315538925089060, -0.870290913110672970, -0.870266285120529840, -0.870241654954720940, -0.870217022613308020, +-0.870192388096352240, -0.870167751403915670, -0.870143112536059800, -0.870118471492846160, -0.870093828274336010, -0.870069182880591650, -0.870044535311674250, -0.870019885567645530, +-0.869995233648566790, -0.869970579554500300, -0.869945923285507350, -0.869921264841649560, -0.869896604222988420, -0.869871941429586020, -0.869847276461503730, -0.869822609318803170, +-0.869797940001545980, -0.869773268509794080, -0.869748594843609110, -0.869723919003052350, -0.869699240988185960, -0.869674560799071570, -0.869649878435770800, -0.869625193898345030, +-0.869600507186856550, -0.869575818301366770, -0.869551127241937500, -0.869526434008630060, -0.869501738601506920, -0.869477041020629280, -0.869452341266059080, -0.869427639337857940, +-0.869402935236087800, -0.869378228960810300, -0.869353520512087250, -0.869328809889980290, -0.869304097094551360, -0.869279382125862310, -0.869254664983974520, -0.869229945668950400, +-0.869205224180851220, -0.869180500519739160, -0.869155774685675510, -0.869131046678722760, -0.869106316498942320, -0.869081584146396020, -0.869056849621145600, -0.869032112923253330, +-0.869007374052780720, -0.868982633009789730, -0.868957889794341850, -0.868933144406499600, -0.868908396846324370, -0.868883647113878220, -0.868858895209222660, -0.868834141132420080, +-0.868809384883532210, -0.868784626462620670, -0.868759865869747740, -0.868735103104975150, -0.868710338168364850, -0.868685571059978460, -0.868660801779878260, -0.868636030328126200, +-0.868611256704784010, -0.868586480909913420, -0.868561702943576930, -0.868536922805836050, -0.868512140496752960, -0.868487356016389270, -0.868462569364807480, -0.868437780542069220, +-0.868412989548236540, -0.868388196383371060, -0.868363401047535400, -0.868338603540791290, -0.868313803863200560, -0.868289002014825170, -0.868264197995727400, -0.868239391805969210, +-0.868214583445612310, -0.868189772914719220, -0.868164960213351660, -0.868140145341571690, -0.868115328299441160, -0.868090509087022450, -0.868065687704377530, -0.868040864151568450, +-0.868016038428656930, -0.867991210535705490, -0.867966380472776080, -0.867941548239930750, -0.867916713837231240, -0.867891877264740260, -0.867867038522519450, -0.867842197610631190, +-0.867817354529137110, -0.867792509278099920, -0.867767661857581470, -0.867742812267643600, -0.867717960508349040, -0.867693106579759400, -0.867668250481937080, -0.867643392214943910, +-0.867618531778842520, -0.867593669173694740, -0.867568804399562850, -0.867543937456508710, -0.867519068344594910, -0.867494197063883420, -0.867469323614436520, -0.867444447996316040, +-0.867419570209584710, -0.867394690254304380, -0.867369808130537320, -0.867344923838345610, -0.867320037377791730, -0.867295148748937760, -0.867270257951845760, -0.867245364986578340, +-0.867220469853197450, -0.867195572551765380, -0.867170673082344190, -0.867145771444996490, -0.867120867639784470, -0.867095961666770170, -0.867071053526015770, -0.867046143217584000, +-0.867021230741536920, -0.866996316097936700, -0.866971399286845410, -0.866946480308325880, -0.866921559162440180, -0.866896635849250590, -0.866871710368819160, -0.866846782721208630, +-0.866821852906481280, -0.866796920924698950, -0.866771986775924600, -0.866747050460220270, -0.866722111977648370, -0.866697171328270840, -0.866672228512150640, -0.866647283529349940, +-0.866622336379931020, -0.866597387063956060, -0.866572435581487780, -0.866547481932588460, -0.866522526117320390, -0.866497568135745740, -0.866472607987927470, -0.866447645673927740, +-0.866422681193808830, -0.866397714547632920, -0.866372745735463080, -0.866347774757361360, -0.866322801613390150, -0.866297826303611630, -0.866272848828088860, -0.866247869186884010, +-0.866222887380059260, -0.866197903407677440, -0.866172917269800950, -0.866147928966492060, -0.866122938497813190, -0.866097945863827160, -0.866072951064596360, -0.866047954100183090, +-0.866022954970649740, -0.865997953676059250, -0.865972950216473800, -0.865947944591956010, -0.865922936802568160, -0.865897926848373190, -0.865872914729433400, -0.865847900445811390, +-0.865822883997569240, -0.865797865384770220, -0.865772844607476610, -0.865747821665750480, -0.865722796559655120, -0.865697769289252790, -0.865672739854606020, -0.865647708255777190, +-0.865622674492829260, -0.865597638565824720, -0.865572600474825980, -0.865547560219895540, -0.865522517801096460, -0.865497473218491130, -0.865472426472142060, -0.865447377562111760, +-0.865422326488463180, -0.865397273251258810, -0.865372217850561180, -0.865347160286432880, -0.865322100558936880, -0.865297038668135570, -0.865271974614091550, -0.865246908396867690, +-0.865221840016526690, -0.865196769473130960, -0.865171696766743210, -0.865146621897426420, -0.865121544865242950, -0.865096465670255780, -0.865071384312527060, -0.865046300792120190, +-0.865021215109097570, -0.864996127263521930, -0.864971037255455770, -0.864945945084962140, -0.864920850752103790, -0.864895754256943210, -0.864870655599543010, -0.864845554779966500, +-0.864820451798275940, -0.864795346654534390, -0.864770239348804150, -0.864745129881148600, -0.864720018251630250, -0.864694904460311610, -0.864669788507255950, -0.864644670392525790, +-0.864619550116183970, -0.864594427678292980, -0.864569303078916220, -0.864544176318116200, -0.864519047395955640, -0.864493916312497390, -0.864468783067804500, -0.864443647661939600, +-0.864418510094965730, -0.864393370366945190, -0.864368228477941590, -0.864343084428017330, -0.864317938217235350, -0.864292789845658380, -0.864267639313349600, -0.864242486620371730, +-0.864217331766787390, -0.864192174752660080, -0.864167015578052200, -0.864141854243026810, -0.864116690747646520, -0.864091525091974840, -0.864066357276074280, -0.864041187300007780, +-0.864016015163838190, -0.863990840867628670, -0.863965664411442180, -0.863940485795341440, -0.863915305019389290, -0.863890122083649130, -0.863864936988183670, -0.863839749733055770, +-0.863814560318328370, -0.863789368744064760, -0.863764175010327650, -0.863738979117180010, -0.863713781064685100, -0.863688580852905790, -0.863663378481904890, -0.863638173951745470, +-0.863612967262490700, -0.863587758414203540, -0.863562547406947050, -0.863537334240783940, -0.863512118915777730, -0.863486901431991250, -0.863461681789487460, -0.863436459988329300, +-0.863411236028580160, -0.863386009910302900, -0.863360781633560670, -0.863335551198416320, -0.863310318604933240, -0.863285083853174370, -0.863259846943202570, -0.863234607875081330, +-0.863209366648873600, -0.863184123264642560, -0.863158877722450920, -0.863133630022362320, -0.863108380164439580, -0.863083128148745880, -0.863057873975344170, -0.863032617644298060, +-0.863007359155670390, -0.862982098509524230, -0.862956835705922630, -0.862931570744929210, -0.862906303626606920, -0.862881034351018820, -0.862855762918227850, -0.862830489328297760, +-0.862805213581291470, -0.862779935677272070, -0.862754655616302600, -0.862729373398446800, -0.862704089023767500, -0.862678802492327760, -0.862653513804191310, -0.862628222959420990, +-0.862602929958080190, -0.862577634800231750, -0.862552337485939510, -0.862527038015266420, -0.862501736388275760, -0.862476432605030490, -0.862451126665594310, -0.862425818570030420, +-0.862400508318401980, -0.862375195910771940, -0.862349881347204250, -0.862324564627761750, -0.862299245752507940, -0.862273924721505770, -0.862248601534818970, -0.862223276192510710, +-0.862197948694644060, -0.862172619041282730, -0.862147287232489790, -0.862121953268328740, -0.862096617148862430, -0.862071278874154910, -0.862045938444269240, -0.862020595859268600, +-0.861995251119216380, -0.861969904224176190, -0.861944555174211200, -0.861919203969384930, -0.861893850609760310, -0.861868495095401310, -0.861843137426371090, -0.861817777602733040, +-0.861792415624550330, -0.861767051491886820, -0.861741685204805650, -0.861716316763370130, -0.861690946167643860, -0.861665573417690340, -0.861640198513572870, -0.861614821455354730, +-0.861589442243099750, -0.861564060876871100, -0.861538677356732290, -0.861513291682746600, -0.861487903854977870, -0.861462513873489490, -0.861437121738344750, -0.861411727449607030, +-0.861386331007340080, -0.861360932411607380, -0.861335531662472450, -0.861310128759998350, -0.861284723704249130, -0.861259316495288200, -0.861233907133178930, -0.861208495617984630, +-0.861183081949769450, -0.861157666128596460, -0.861132248154529050, -0.861106828027631280, -0.861081405747966430, -0.861055981315598130, -0.861030554730589650, -0.861005125993004940, +-0.860979695102907390, -0.860954262060360740, -0.860928826865428040, -0.860903389518173580, -0.860877950018660740, -0.860852508366952930, -0.860827064563113640, -0.860801618607206830, +-0.860776170499296110, -0.860750720239444880, -0.860725267827716630, -0.860699813264175440, -0.860674356548884690, -0.860648897681907890, -0.860623436663309090, -0.860597973493151590, +-0.860572508171499220, -0.860547040698415370, -0.860521571073964210, -0.860496099298209030, -0.860470625371213550, -0.860445149293041390, -0.860419671063756500, -0.860394190683422490, +-0.860368708152102980, -0.860343223469861470, -0.860317736636762140, -0.860292247652868490, -0.860266756518244250, -0.860241263232952800, -0.860215767797058440, -0.860190270210624660, +-0.860164770473714980, -0.860139268586393670, -0.860113764548724120, -0.860088258360770190, -0.860062750022595360, -0.860037239534263920, -0.860011726895839380, -0.859986212107385460, +-0.859960695168965890, -0.859935176080644740, -0.859909654842485600, -0.859884131454552340, -0.859858605916908660, -0.859833078229618520, -0.859807548392745760, -0.859782016406354210, +-0.859756482270507270, -0.859730945985269450, -0.859705407550704130, -0.859679866966875150, -0.859654324233846800, -0.859628779351682470, -0.859603232320446330, -0.859577683140201780, +-0.859552131811013310, -0.859526578332944550, -0.859501022706059330, -0.859475464930421260, -0.859449905006094860, -0.859424342933143630, -0.859398778711631510, -0.859373212341622230, +-0.859347643823180190, -0.859322073156368990, -0.859296500341252710, -0.859270925377894850, -0.859245348266359900, -0.859219769006711600, -0.859194187599014000, -0.859168604043330510, +-0.859143018339725840, -0.859117430488263610, -0.859091840489007550, -0.859066248342022170, -0.859040654047371180, -0.859015057605118540, -0.858989459015327970, -0.858963858278063990, +-0.858938255393390420, -0.858912650361371210, -0.858887043182070100, -0.858861433855551580, -0.858835822381879610, -0.858810208761118020, -0.858784592993330540, -0.858758975078582010, +-0.858733355016935930, -0.858707732808456470, -0.858682108453207470, -0.858656481951253440, -0.858630853302658200, -0.858605222507485610, -0.858579589565800160, -0.858553954477665800, +-0.858528317243146490, -0.858502677862306160, -0.858477036335209440, -0.858451392661920050, -0.858425746842502170, -0.858400098877019730, -0.858374448765537260, -0.858348796508118680, +-0.858323142104828070, -0.858297485555729490, -0.858271826860887320, -0.858246166020365630, -0.858220503034228480, -0.858194837902539920, -0.858169170625364350, -0.858143501202766060, +-0.858117829634808650, -0.858092155921556850, -0.858066480063074730, -0.858040802059426460, -0.858015121910675860, -0.857989439616887780, -0.857963755178126060, -0.857938068594454980, +-0.857912379865938380, -0.857886688992641200, -0.857860995974627280, -0.857835300811960800, -0.857809603504705920, -0.857783904052927150, -0.857758202456688770, -0.857732498716054730, +-0.857706792831089300, -0.857681084801857120, -0.857655374628422230, -0.857629662310848810, -0.857603947849201130, -0.857578231243543710, -0.857552512493940820, -0.857526791600456420, +-0.857501068563155110, -0.857475343382101300, -0.857449616057359030, -0.857423886588992490, -0.857398154977066510, -0.857372421221645140, -0.857346685322792680, -0.857320947280573400, +-0.857295207095051800, -0.857269464766292290, -0.857243720294359140, -0.857217973679316400, -0.857192224921229040, -0.857166474020161000, -0.857140720976176770, -0.857114965789340650, +-0.857089208459717260, -0.857063448987370860, -0.857037687372365520, -0.857011923614766300, -0.856986157714637260, -0.856960389672042800, -0.856934619487047190, -0.856908847159715160, +-0.856883072690111100, -0.856857296078299300, -0.856831517324344150, -0.856805736428310260, -0.856779953390262140, -0.856754168210264070, -0.856728380888380440, -0.856702591424676090, +-0.856676799819215180, -0.856651006072062350, -0.856625210183281640, -0.856599412152938220, -0.856573611981096270, -0.856547809667820070, -0.856522005213174680, -0.856496198617224150, +-0.856470389880033100, -0.856444579001665930, -0.856418765982187470, -0.856392950821662110, -0.856367133520154370, -0.856341314077728620, -0.856315492494449830, -0.856289668770382150, +-0.856263842905590430, -0.856238014900138960, -0.856212184754092550, -0.856186352467515730, -0.856160518040472880, -0.856134681473028740, -0.856108842765248010, -0.856083001917195110, +-0.856057158928934530, -0.856031313800531320, -0.856005466532049790, -0.855979617123554640, -0.855953765575110160, -0.855927911886781520, -0.855902056058633120, -0.855876198090729570, +-0.855850337983135260, -0.855824475735915470, -0.855798611349134370, -0.855772744822856700, -0.855746876157146950, -0.855721005352070410, -0.855695132407691130, -0.855669257324074170, +-0.855643380101283820, -0.855617500739385140, -0.855591619238442850, -0.855565735598521450, -0.855539849819685450, -0.855513961902000130, -0.855488071845529880, -0.855462179650339220, +-0.855436285316493290, -0.855410388844056620, -0.855384490233094040, -0.855358589483670050, -0.855332686595849820, -0.855306781569697750, -0.855280874405278890, -0.855254965102657420, +-0.855229053661898940, -0.855203140083067750, -0.855177224366228780, -0.855151306511446440, -0.855125386518786110, -0.855099464388312190, -0.855073540120089740, -0.855047613714183140, +-0.855021685170657800, -0.854995754489578320, -0.854969821671009100, -0.854943886715015530, -0.854917949621662340, -0.854892010391014150, -0.854866069023135890, -0.854840125518092520, +-0.854814179875948990, -0.854788232096769800, -0.854762282180620000, -0.854736330127564670, -0.854710375937668410, -0.854684419610996390, -0.854658461147612900, -0.854632500547583660, +-0.854606537810973070, -0.854580572937846170, -0.854554605928267600, -0.854528636782302730, -0.854502665500016300, -0.854476692081472920, -0.854450716526738100, -0.854424738835876440, +-0.854398759008953010, -0.854372777046032320, -0.854346792947180080, -0.854320806712460690, -0.854294818341939430, -0.854268827835680810, -0.854242835193750440, -0.854216840416212930, +-0.854190843503133230, -0.854164844454576300, -0.854138843270607520, -0.854112839951291500, -0.854086834496693430, -0.854060826906878120, -0.854034817181910990, -0.854008805321856750, +-0.853982791326780450, -0.853956775196746950, -0.853930756931821740, -0.853904736532069770, -0.853878713997555660, -0.853852689328344900, -0.853826662524502570, -0.853800633586093480, +-0.853774602513182600, -0.853748569305835430, -0.853722533964116790, -0.853696496488091870, -0.853670456877825500, -0.853644415133383290, -0.853618371254829870, -0.853592325242230610, +-0.853566277095650360, -0.853540226815154620, -0.853514174400808230, -0.853488119852676470, -0.853462063170824180, -0.853436004355316970, -0.853409943406219780, -0.853383880323597350, +-0.853357815107515630, -0.853331747758039330, -0.853305678275233630, -0.853279606659163470, -0.853253532909894590, -0.853227457027491810, -0.853201379012020420, -0.853175298863545370, +-0.853149216582132270, -0.853123132167846190, -0.853097045620752280, -0.853070956940915390, -0.853044866128401470, -0.853018773183275350, -0.852992678105602310, -0.852966580895447300, +-0.852940481552876160, -0.852914380077953730, -0.852888276470745170, -0.852862170731316090, -0.852836062859731680, -0.852809952856056990, -0.852783840720357290, -0.852757726452698210, +-0.852731610053144800, -0.852705491521762340, -0.852679370858615890, -0.852653248063771300, -0.852627123137293610, -0.852600996079248000, -0.852574866889699750, -0.852548735568714580, +-0.852522602116357550, -0.852496466532694060, -0.852470328817789060, -0.852444188971708590, -0.852418046994517620, -0.852391902886281530, -0.852365756647065380, -0.852339608276935110, +-0.852313457775955910, -0.852287305144192710, -0.852261150381711570, -0.852234993488577450, -0.852208834464855960, -0.852182673310612150, -0.852156510025911750, -0.852130344610820160, +-0.852104177065402760, -0.852078007389724610, -0.852051835583851780, -0.852025661647849210, -0.851999485581782620, -0.851973307385716970, -0.851947127059718420, -0.851920944603851930, +-0.851894760018183090, -0.851868573302777210, -0.851842384457700000, -0.851816193483016960, -0.851790000378793160, -0.851763805145094530, -0.851737607781986480, -0.851711408289534290, +-0.851685206667803450, -0.851659002916859810, -0.851632797036768640, -0.851606589027595450, -0.851580378889405630, -0.851554166622265130, -0.851527952226239120, -0.851501735701393200, +-0.851475517047792780, -0.851449296265503810, -0.851423073354591550, -0.851396848315121630, -0.851370621147159330, -0.851344391850770820, -0.851318160426021150, -0.851291926872976060, +-0.851265691191701260, -0.851239453382262260, -0.851213213444724560, -0.851186971379153670, -0.851160727185615530, -0.851134480864175650, -0.851108232414899520, -0.851081981837852550, +-0.851055729133100900, -0.851029474300709850, -0.851003217340745240, -0.850976958253272240, -0.850950697038357130, -0.850924433696065300, -0.850898168226462360, -0.850871900629613820, +-0.850845630905585630, -0.850819359054443500, -0.850793085076252620, -0.850766808971079370, -0.850740530738989030, -0.850714250380047440, -0.850687967894319890, -0.850661683281872750, +-0.850635396542771320, -0.850609107677081420, -0.850582816684868570, -0.850556523566198820, -0.850530228321137890, -0.850503930949751300, -0.850477631452104640, -0.850451329828264210, +-0.850425026078295400, -0.850398720202264040, -0.850372412200235630, -0.850346102072276340, -0.850319789818451910, -0.850293475438828050, -0.850267158933470160, -0.850240840302444620, +-0.850214519545817060, -0.850188196663652860, -0.850161871656018530, -0.850135544522979460, -0.850109215264601480, -0.850082883880950320, -0.850056550372092050, -0.850030214738092480, +-0.850003876979017470, -0.849977537094932400, -0.849951195085903780, -0.849924850951997100, -0.849898504693278320, -0.849872156309813160, -0.849845805801667690, -0.849819453168907830, +-0.849793098411599220, -0.849766741529807800, -0.849740382523599620, -0.849714021393040530, -0.849687658138196130, -0.849661292759132820, -0.849634925255916330, -0.849608555628612480, +-0.849582183877287010, -0.849555810002006310, -0.849529434002836090, -0.849503055879842320, -0.849476675633090590, -0.849450293262647430, -0.849423908768578650, -0.849397522150949990, +-0.849371133409827280, -0.849344742545277030, -0.849318349557364850, -0.849291954446156900, -0.849265557211718810, -0.849239157854116970, -0.849212756373417310, -0.849186352769685460, +-0.849159947042988030, -0.849133539193390740, -0.849107129220959660, -0.849080717125760390, -0.849054302907859660, -0.849027886567323090, -0.849001468104216840, -0.848975047518606640, +-0.848948624810559100, -0.848922199980140070, -0.848895773027415480, -0.848869343952451170, -0.848842912755313760, -0.848816479436069080, -0.848790043994783310, -0.848763606431522040, +-0.848737166746352020, -0.848710724939339190, -0.848684281010549380, -0.848657834960048760, -0.848631386787903730, -0.848604936494180230, -0.848578484078944210, -0.848552029542262170, +-0.848525572884200050, -0.848499114104824040, -0.848472653204199960, -0.848446190182394530, -0.848419725039473600, -0.848393257775503340, -0.848366788390549800, -0.848340316884679480, +-0.848313843257958330, -0.848287367510452530, -0.848260889642228120, -0.848234409653351730, -0.848207927543889300, -0.848181443313907100, -0.848154956963470990, -0.848128468492647780, +-0.848101977901503430, -0.848075485190103780, -0.848048990358515780, -0.848022493406805240, -0.847995994335038470, -0.847969493143281410, -0.847942989831600990, -0.847916484400062950, +-0.847889976848733800, -0.847863467177679460, -0.847836955386966680, -0.847810441476661510, -0.847783925446830230, -0.847757407297538900, -0.847730887028854350, -0.847704364640842530, +-0.847677840133569730, -0.847651313507102210, -0.847624784761506600, -0.847598253896848950, -0.847571720913195550, -0.847545185810613000, -0.847518648589167590, -0.847492109248925480, +-0.847465567789952860, -0.847439024212316540, -0.847412478516082700, -0.847385930701317620, -0.847359380768087480, -0.847332828716459210, -0.847306274546498760, -0.847279718258272750, +-0.847253159851847130, -0.847226599327288830, -0.847200036684664040, -0.847173471924039250, -0.847146905045480400, -0.847120336049054570, -0.847093764934828020, -0.847067191702866710, +-0.847040616353237690, -0.847014038886007010, -0.846987459301241420, -0.846960877599006840, -0.846934293779370350, -0.846907707842398110, -0.846881119788156500, -0.846854529616712040, +-0.846827937328131330, -0.846801342922480880, -0.846774746399826970, -0.846748147760236100, -0.846721547003775000, -0.846694944130510050, -0.846668339140507760, -0.846641732033834420, +-0.846615122810556840, -0.846588511470741660, -0.846561898014455030, -0.846535282441763460, -0.846508664752734010, -0.846482044947432840, -0.846455423025926250, -0.846428798988281380, +-0.846402172834564540, -0.846375544564842320, -0.846348914179180900, -0.846322281677647560, -0.846295647060308460, -0.846269010327230120, -0.846242371478479140, -0.846215730514122470, +-0.846189087434226490, -0.846162442238857730, -0.846135794928082660, -0.846109145501968250, -0.846082493960581110, -0.846055840303987730, -0.846029184532254400, -0.846002526645448390, +-0.845975866643636110, -0.845949204526883940, -0.845922540295258930, -0.845895873948827590, -0.845869205487656540, -0.845842534911812270, -0.845815862221361960, -0.845789187416371880, +-0.845762510496908870, -0.845735831463039430, -0.845709150314830630, -0.845682467052348840, -0.845655781675661020, -0.845629094184833340, -0.845602404579933300, -0.845575712861027280, +-0.845549019028181800, -0.845522323081463690, -0.845495625020940000, -0.845468924846677240, -0.845442222558741910, -0.845415518157201170, -0.845388811642121760, -0.845362103013570290, +-0.845335392271613360, -0.845308679416318150, -0.845281964447751170, -0.845255247365979350, -0.845228528171069190, -0.845201806863087990, -0.845175083442102130, -0.845148357908178660, +-0.845121630261384090, -0.845094900501785600, -0.845068168629449890, -0.845041434644443810, -0.845014698546833750, -0.844987960336687330, -0.844961220014071030, -0.844934477579051600, +-0.844907733031695750, -0.844880986372070760, -0.844854237600243470, -0.844827486716280160, -0.844800733720248440, -0.844773978612214930, -0.844747221392246450, -0.844720462060409630, +-0.844693700616771960, -0.844666937061399950, -0.844640171394360650, -0.844613403615720790, -0.844586633725547540, -0.844559861723907730, -0.844533087610868320, -0.844506311386495790, +-0.844479533050857880, -0.844452752604021080, -0.844425970046052350, -0.844399185377018520, -0.844372398596986980, -0.844345609706024460, -0.844318818704197670, -0.844292025591574010, +-0.844265230368220320, -0.844238433034203540, -0.844211633589590390, -0.844184832034448500, -0.844158028368844460, -0.844131222592845450, -0.844104414706517980, -0.844077604709929870, +-0.844050792603147640, -0.844023978386238550, -0.843997162059269110, -0.843970343622307160, -0.843943523075419310, -0.843916700418672620, -0.843889875652133910, -0.843863048775870820, +-0.843836219789950050, -0.843809388694438440, -0.843782555489403730, -0.843755720174912520, -0.843728882751032080, -0.843702043217829270, -0.843675201575371460, -0.843648357823725710, +-0.843621511962958980, -0.843594663993138320, -0.843567813914331220, -0.843540961726604640, -0.843514107430025530, -0.843487251024661040, -0.843460392510578580, -0.843433531887845090, +-0.843406669156527840, -0.843379804316693680, -0.843352937368410330, -0.843326068311744500, -0.843299197146763380, -0.843272323873534460, -0.843245448492124680, -0.843218571002601340, +-0.843191691405031250, -0.843164809699482260, -0.843137925886021210, -0.843111039964715370, -0.843084151935631580, -0.843057261798837780, -0.843030369554400800, -0.843003475202387940, +-0.842976578742866020, -0.842949680175902990, -0.842922779501565690, -0.842895876719921610, -0.842868971831037370, -0.842842064834981140, -0.842815155731819640, -0.842788244521620270, +-0.842761331204450070, -0.842734415780376670, -0.842707498249467330, -0.842680578611789020, -0.842653656867409450, -0.842626733016395790, -0.842599807058815320, -0.842572878994734990, +-0.842545948824222850, -0.842519016547345730, -0.842492082164171040, -0.842465145674766050, -0.842438207079198250, -0.842411266377535050, -0.842384323569843610, -0.842357378656191200, +-0.842330431636645560, -0.842303482511273850, -0.842276531280143460, -0.842249577943321450, -0.842222622500875760, -0.842195664952873460, -0.842168705299381810, -0.842141743540468670, +-0.842114779676201080, -0.842087813706646650, -0.842060845631872330, -0.842033875451946190, -0.842006903166935380, -0.841979928776907300, -0.841952952281929120, -0.841925973682068900, +-0.841898992977393680, -0.841872010167970970, -0.841845025253867950, -0.841818038235152670, -0.841791049111892290, -0.841764057884154320, -0.841737064552005920, -0.841710069115515160, +-0.841683071574749090, -0.841656071929775210, -0.841629070180661350, -0.841602066327474920, -0.841575060370283180, -0.841548052309153640, -0.841521042144154130, -0.841494029875352050, +-0.841467015502815000, -0.841439999026610040, -0.841412980446805350, -0.841385959763468190, -0.841358936976666190, -0.841331912086466630, -0.841304885092937440, -0.841277855996146130, +-0.841250824796160090, -0.841223791493046820, -0.841196756086874280, -0.841169718577709840, -0.841142678965621120, -0.841115637250675400, -0.841088593432940960, -0.841061547512484960, +-0.841034499489374810, -0.841007449363678660, -0.840980397135463910, -0.840953342804798280, -0.840926286371748930, -0.840899227836384040, -0.840872167198771230, -0.840845104458977980, +-0.840818039617071690, -0.840790972673120530, -0.840763903627191890, -0.840736832479353600, -0.840709759229672950, -0.840682683878218100, -0.840655606425056550, -0.840628526870256020, +-0.840601445213883910, -0.840574361456008500, -0.840547275596697060, -0.840520187636017320, -0.840493097574037230, -0.840466005410824500, -0.840438911146446750, -0.840411814780971380, +-0.840384716314466760, -0.840357615747000410, -0.840330513078639930, -0.840303408309453050, -0.840276301439507820, -0.840249192468871750, -0.840222081397612790, -0.840194968225798420, +-0.840167852953496830, -0.840140735580775620, -0.840113616107702520, -0.840086494534345140, -0.840059370860771870, -0.840032245087050100, -0.840005117213247440, -0.839977987239432290, +-0.839950855165672140, -0.839923720992034940, -0.839896584718588080, -0.839869446345400060, -0.839842305872538390, -0.839815163300071000, -0.839788018628065400, -0.839760871856590100, +-0.839733722985712470, -0.839706572015500700, -0.839679418946022160, -0.839652263777345250, -0.839625106509537810, -0.839597947142667560, -0.839570785676802210, -0.839543622112010060, +-0.839516456448358930, -0.839489288685916430, -0.839462118824750860, -0.839434946864930140, -0.839407772806521900, -0.839380596649594080, -0.839353418394214960, -0.839326238040452370, +-0.839299055588374140, -0.839271871038048010, -0.839244684389542470, -0.839217495642925250, -0.839190304798264290, -0.839163111855627200, -0.839135916815082710, -0.839108719676698310, +-0.839081520440542180, -0.839054319106682040, -0.839027115675186290, -0.838999910146122850, -0.838972702519559580, -0.838945492795564180, -0.838918280974205510, -0.838891067055550940, +-0.838863851039668540, -0.838836632926626800, -0.838809412716493450, -0.838782190409336550, -0.838754966005223920, -0.838727739504224190, -0.838700510906405070, -0.838673280211834630, +-0.838646047420580800, -0.838618812532712090, -0.838591575548296330, -0.838564336467401690, -0.838537095290095900, -0.838509852016447680, -0.838482606646524740, -0.838455359180395380, +-0.838428109618127190, -0.838400857959789140, -0.838373604205448930, -0.838346348355174410, -0.838319090409034300, -0.838291830367096540, -0.838264568229429070, -0.838237303996099970, +-0.838210037667177940, -0.838182769242730720, -0.838155498722826690, -0.838128226107533570, -0.838100951396920090, -0.838073674591054310, -0.838046395690004390, -0.838019114693838160, +-0.837991831602624360, -0.837964546416431030, -0.837937259135326350, -0.837909969759378260, -0.837882678288655480, -0.837855384723225960, -0.837828089063157870, -0.837800791308519700, +-0.837773491459379520, -0.837746189515805710, -0.837718885477866100, -0.837691579345629540, -0.837664271119164080, -0.837636960798537890, -0.837609648383819130, -0.837582333875076410, +-0.837555017272377910, -0.837527698575791790, -0.837500377785386220, -0.837473054901230030, -0.837445729923391060, -0.837418402851937920, -0.837391073686938440, -0.837363742428461450, +-0.837336409076575250, -0.837309073631347990, -0.837281736092847730, -0.837254396461143410, -0.837227054736303100, -0.837199710918394960, -0.837172365007487710, -0.837145017003649630, +-0.837117666906948890, -0.837090314717453880, -0.837062960435233210, -0.837035604060355260, -0.837008245592888220, -0.836980885032900250, -0.836953522380460390, -0.836926157635636820, +-0.836898790798497720, -0.836871421869111450, -0.836844050847546870, -0.836816677733872140, -0.836789302528155750, -0.836761925230465780, -0.836734545840871370, -0.836707164359440480, +-0.836679780786241500, -0.836652395121343260, -0.836625007364814040, -0.836597617516722350, -0.836570225577136340, -0.836542831546125080, -0.836515435423756730, -0.836488037210099680, +-0.836460636905222430, -0.836433234509193710, -0.836405830022081910, -0.836378423443955630, -0.836351014774883050, -0.836323604014933110, -0.836296191164174090, -0.836268776222674700, +-0.836241359190503130, -0.836213940067728420, -0.836186518854418750, -0.836159095550642610, -0.836131670156469050, -0.836104242671966260, -0.836076813097202830, -0.836049381432247050, +-0.836021947677168200, -0.835994511832034440, -0.835967073896914380, -0.835939633871876420, -0.835912191756989610, -0.835884747552322340, -0.835857301257943110, -0.835829852873920530, +-0.835802402400323440, -0.835774949837220450, -0.835747495184679940, -0.835720038442770540, -0.835692579611561290, -0.835665118691120590, -0.835637655681516820, -0.835610190582819270, +-0.835582723395096090, -0.835555254118416140, -0.835527782752847890, -0.835500309298460310, -0.835472833755322000, -0.835445356123501680, -0.835417876403067640, -0.835390394594089150, +-0.835362910696634710, -0.835335424710773040, -0.835307936636572550, -0.835280446474102380, -0.835252954223431150, -0.835225459884627490, -0.835197963457759980, -0.835170464942897820, +-0.835142964340109480, -0.835115461649463710, -0.835087956871029100, -0.835060450004874830, -0.835032941051069400, -0.835005430009681300, -0.834977916880780050, -0.834950401664433910, +-0.834922884360711710, -0.834895364969682090, -0.834867843491414300, -0.834840319925976960, -0.834812794273438800, -0.834785266533868420, -0.834757736707335110, -0.834730204793907470, +-0.834702670793654230, -0.834675134706644120, -0.834647596532946510, -0.834620056272629810, -0.834592513925762950, -0.834564969492414650, -0.834537422972654100, -0.834509874366550000, +-0.834482323674170970, -0.834454770895586400, -0.834427216030864890, -0.834399659080075300, -0.834372100043286320, -0.834344538920567480, -0.834316975711987150, -0.834289410417614400, +-0.834261843037517940, -0.834234273571767050, -0.834206702020430460, -0.834179128383577220, -0.834151552661275830, -0.834123974853595800, -0.834096394960605950, -0.834068812982375010, +-0.834041228918971810, -0.834013642770465750, -0.833986054536925540, -0.833958464218420130, -0.833930871815018680, -0.833903277326790040, -0.833875680753803250, -0.833848082096127040, +-0.833820481353830800, -0.833792878526983360, -0.833765273615653780, -0.833737666619910670, -0.833710057539823750, -0.833682446375461630, -0.833654833126893480, -0.833627217794187910, +-0.833599600377414540, -0.833571980876642190, -0.833544359291939930, -0.833516735623376470, -0.833489109871021430, -0.833461482034943630, -0.833433852115212150, -0.833406220111895690, +-0.833378586025063980, -0.833350949854785860, -0.833323311601130160, -0.833295671264166260, -0.833268028843963340, -0.833240384340590220, -0.833212737754115970, -0.833185089084610090, +-0.833157438332141510, -0.833129785496779300, -0.833102130578592500, -0.833074473577650520, -0.833046814494022290, -0.833019153327777100, -0.832991490078983880, -0.832963824747712020, +-0.832936157334030700, -0.832908487838008970, -0.832880816259715660, -0.832853142599220720, -0.832825466856592870, -0.832797789031901050, -0.832770109125215100, -0.832742427136603740, +-0.832714743066136460, -0.832687056913882010, -0.832659368679910080, -0.832631678364289860, -0.832603985967090400, -0.832576291488380750, -0.832548594928230630, -0.832520896286708890, +-0.832493195563885010, -0.832465492759827950, -0.832437787874607320, -0.832410080908292270, -0.832382371860951990, -0.832354660732655520, -0.832326947523472690, -0.832299232233472460, +-0.832271514862723880, -0.832243795411296780, -0.832216073879260220, -0.832188350266683470, -0.832160624573635600, -0.832132896800186430, -0.832105166946405020, -0.832077435012360640, +-0.832049700998122480, -0.832021964903760240, -0.831994226729343200, -0.831966486474940430, -0.831938744140621300, -0.831910999726455550, -0.831883253232512330, -0.831855504658860930, +-0.831827754005570630, -0.831800001272711030, -0.831772246460351530, -0.831744489568561170, -0.831716730597409800, -0.831688969546966580, -0.831661206417300900, -0.831633441208482040, +-0.831605673920579820, -0.831577904553663430, -0.831550133107802240, -0.831522359583065530, -0.831494583979523030, -0.831466806297244230, -0.831439026536298310, -0.831411244696754650, +-0.831383460778683080, -0.831355674782152780, -0.831327886707233450, -0.831300096553994060, -0.831272304322504760, -0.831244510012834610, -0.831216713625053230, -0.831188915159229770, +-0.831161114615434290, -0.831133311993736080, -0.831105507294204290, -0.831077700516908990, -0.831049891661919450, -0.831022080729305170, -0.830994267719135430, -0.830966452631480280, +-0.830938635466409000, -0.830910816223991100, -0.830882994904295960, -0.830855171507393630, -0.830827346033353290, -0.830799518482244650, -0.830771688854136880, -0.830743857149100150, +-0.830716023367203740, -0.830688187508517360, -0.830660349573110300, -0.830632509561052500, -0.830604667472413460, -0.830576823307262570, -0.830548977065669770, -0.830521128747704670, +-0.830493278353436670, -0.830465425882935150, -0.830437571336270390, -0.830409714713511770, -0.830381856014728690, -0.830353995239990870, -0.830326132389368250, -0.830298267462930340, +-0.830270400460746740, -0.830242531382886840, -0.830214660229420920, -0.830186787000418260, -0.830158911695948800, -0.830131034316081710, -0.830103154860887260, -0.830075273330434960, +-0.830047389724794190, -0.830019504044035240, -0.829991616288227490, -0.829963726457440760, -0.829935834551744470, -0.829907940571208760, -0.829880044515903250, -0.829852146385897660, +-0.829824246181261380, -0.829796343902064800, -0.829768439548377310, -0.829740533120268740, -0.829712624617808590, -0.829684714041067140, -0.829656801390113880, -0.829628886665018660, +-0.829600969865850970, -0.829573050992681080, -0.829545130045578500, -0.829517207024613180, -0.829489281929854600, -0.829461354761373060, -0.829433425519238040, -0.829405494203519390, +-0.829377560814287040, -0.829349625351610940, -0.829321687815560700, -0.829293748206206050, -0.829265806523617250, -0.829237862767863930, -0.829209916939016020, -0.829181969037142920, +-0.829154019062315230, -0.829126067014602560, -0.829098112894074650, -0.829070156700801200, -0.829042198434852610, -0.829014238096298590, -0.828986275685208880, -0.828958311201653310, +-0.828930344645702140, -0.828902376017425220, -0.828874405316892050, -0.828846432544173120, -0.828818457699338040, -0.828790480782456870, -0.828762501793599230, -0.828734520732835600, +-0.828706537600235720, -0.828678552395869410, -0.828650565119806500, -0.828622575772117510, -0.828594584352872030, -0.828566590862140020, -0.828538595299991300, -0.828510597666496370, +-0.828482597961724960, -0.828454596185747130, -0.828426592338632470, -0.828398586420451500, -0.828370578431274150, -0.828342568371170150, -0.828314556240209890, -0.828286542038463300, +-0.828258525766000340, -0.828230507422890840, -0.828202487009205290, -0.828174464525013530, -0.828146439970385620, -0.828118413345391380, -0.828090384650101320, -0.828062353884585270, +-0.828034321048913390, -0.828006286143155410, -0.827978249167382050, -0.827950210121662920, -0.827922169006068410, -0.827894125820668240, -0.827866080565532900, -0.827838033240732350, +-0.827809983846336530, -0.827781932382416040, -0.827753878849040610, -0.827725823246280520, -0.827697765574205710, -0.827669705832886680, -0.827641644022393370, -0.827613580142795960, +-0.827585514194164370, -0.827557446176569230, -0.827529376090080370, -0.827501303934768170, -0.827473229710702470, -0.827445153417953990, -0.827417075056592570, -0.827388994626688470, +-0.827360912128311640, -0.827332827561532700, -0.827304740926421810, -0.827276652223049020, -0.827248561451484290, -0.827220468611798430, -0.827192373704061510, -0.827164276728343360, +-0.827136177684714700, -0.827108076573245590, -0.827079973394006410, -0.827051868147066880, -0.827023760832498070, -0.826995651450369800, -0.826967540000752450, -0.826939426483715880, +-0.826911310899331120, -0.826883193247668010, -0.826855073528796950, -0.826826951742787970, -0.826798827889711820, -0.826770701969638640, -0.826742573982638620, -0.826714443928782020, +-0.826686311808139560, -0.826658177620781310, -0.826630041366777310, -0.826601903046198520, -0.826573762659114860, -0.826545620205596960, -0.826517475685714650, -0.826489329099538870, +-0.826461180447139900, -0.826433029728587900, -0.826404876943953040, -0.826376722093306260, -0.826348565176717730, -0.826320406194257730, -0.826292245145996530, -0.826264082032004850, +-0.826235916852353090, -0.826207749607111520, -0.826179580296350300, -0.826151408920140270, -0.826123235478551820, -0.826095059971655110, -0.826066882399520860, -0.826038702762219470, +-0.826010521059821310, -0.825982337292396670, -0.825954151460016380, -0.825925963562750720, -0.825897773600670070, -0.825869581573844820, -0.825841387482345920, -0.825813191326243420, +-0.825784993105608050, -0.825756792820509840, -0.825728590471019990, -0.825700386057208640, -0.825672179579146290, -0.825643971036903350, -0.825615760430550630, -0.825587547760158520, +-0.825559333025797540, -0.825531116227538050, -0.825502897365450910, -0.825474676439606590, -0.825446453450075390, -0.825418228396928130, -0.825390001280235430, -0.825361772100067670, +-0.825333540856495350, -0.825305307549589310, -0.825277072179420030, -0.825248834746058040, -0.825220595249573810, -0.825192353690038290, -0.825164110067521880, -0.825135864382095190, +-0.825107616633828590, -0.825079366822793150, -0.825051114949059360, -0.825022861012697730, -0.824994605013778750, -0.824966346952373470, -0.824938086828552410, -0.824909824642385820, +-0.824881560393944890, -0.824853294083300100, -0.824825025710522080, -0.824796755275681190, -0.824768482778848730, -0.824740208220094970, -0.824711931599490740, -0.824683652917106550, +-0.824655372173013320, -0.824627089367281680, -0.824598804499982350, -0.824570517571185820, -0.824542228580963150, -0.824513937529384950, -0.824485644416521830, -0.824457349242444510, +-0.824429052007223940, -0.824400752710930830, -0.824372451353635460, -0.824344147935409330, -0.824315842456322830, -0.824287534916446680, -0.824259225315851380, -0.824230913654608320, +-0.824202599932787990, -0.824174284150461230, -0.824145966307698430, -0.824117646404570970, -0.824089324441149350, -0.824061000417504520, -0.824032674333706860, -0.824004346189827760, +-0.823976015985937840, -0.823947683722107920, -0.823919349398408500, -0.823891013014910970, -0.823862674571685830, -0.823834334068803800, -0.823805991506336150, -0.823777646884353620, +-0.823749300202926920, -0.823720951462126760, -0.823692600662024430, -0.823664247802690540, -0.823635892884196140, -0.823607535906611730, -0.823579176870008700, -0.823550815774457770, +-0.823522452620029770, -0.823494087406795310, -0.823465720134826000, -0.823437350804192340, -0.823408979414965270, -0.823380605967215520, -0.823352230461014580, -0.823323852896433060, +-0.823295473273541800, -0.823267091592411630, -0.823238707853114040, -0.823210322055719650, -0.823181934200299280, -0.823153544286924220, -0.823125152315665410, -0.823096758286593570, +-0.823068362199779750, -0.823039964055295110, -0.823011563853210730, -0.822983161593597300, -0.822954757276525780, -0.822926350902067560, -0.822897942470293580, -0.822869531981274660, +-0.822841119435081650, -0.822812704831786150, -0.822784288171458880, -0.822755869454170790, -0.822727448679992920, -0.822699025848996570, -0.822670600961252660, -0.822642174016832040, +-0.822613745015806200, -0.822585313958246080, -0.822556880844222630, -0.822528445673806670, -0.822500008447069940, -0.822471569164083150, -0.822443127824917460, -0.822414684429643610, +-0.822386238978333410, -0.822357791471057590, -0.822329341907887200, -0.822300890288893300, -0.822272436614147400, -0.822243980883720420, -0.822215523097683420, -0.822187063256107460, +-0.822158601359064050, -0.822130137406624110, -0.822101671398858700, -0.822073203335839220, -0.822044733217636820, -0.822016261044322460, -0.821987786815967290, -0.821959310532642930, +-0.821930832194420310, -0.821902351801370500, -0.821873869353564660, -0.821845384851074390, -0.821816898293970640, -0.821788409682324580, -0.821759919016207260, -0.821731426295690400, +-0.821702931520845060, -0.821674434691742280, -0.821645935808453240, -0.821617434871049660, -0.821588931879602360, -0.821560426834182840, -0.821531919734861950, -0.821503410581711500, +-0.821474899374802560, -0.821446386114206060, -0.821417870799993950, -0.821389353432237180, -0.821360834011006900, -0.821332312536374290, -0.821303789008411280, -0.821275263427188710, +-0.821246735792777960, -0.821218206105250090, -0.821189674364677050, -0.821161140571129770, -0.821132604724679640, -0.821104066825397830, -0.821075526873356050, -0.821046984868625370, +-0.821018440811277280, -0.820989894701382950, -0.820961346539013980, -0.820932796324241760, -0.820904244057137240, -0.820875689737772360, -0.820847133366218170, -0.820818574942546290, +-0.820790014466827640, -0.820761451939134300, -0.820732887359537310, -0.820704320728107950, -0.820675752044917720, -0.820647181310038220, -0.820618608523540850, -0.820590033685496990, +-0.820561456795977700, -0.820532877855055130, -0.820504296862800240, -0.820475713819284750, -0.820447128724579590, -0.820418541578756930, -0.820389952381887940, -0.820361361134043790, +-0.820332767835296410, -0.820304172485717190, -0.820275575085377520, -0.820246975634348670, -0.820218374132702710, -0.820189770580510680, -0.820161164977844300, -0.820132557324774750, +-0.820103947621374060, -0.820075335867713530, -0.820046722063864530, -0.820018106209898570, -0.819989488305887580, -0.819960868351902960, -0.819932246348016090, -0.819903622294298360, +-0.819874996190821830, -0.819846368037657760, -0.819817737834877770, -0.819789105582553250, -0.819760471280756240, -0.819731834929557920, -0.819703196529029900, -0.819674556079244110, +-0.819645913580271830, -0.819617269032184900, -0.819588622435054480, -0.819559973788952730, -0.819531323093951160, -0.819502670350121140, -0.819474015557534300, -0.819445358716262670, +-0.819416699826377550, -0.819388038887950750, -0.819359375901053570, -0.819330710865758260, -0.819302043782136110, -0.819273374650258850, -0.819244703470197950, -0.819216030242025490, +-0.819187354965812960, -0.819158677641631860, -0.819129998269554240, -0.819101316849651710, -0.819072633381995760, -0.819043947866658130, -0.819015260303710750, -0.818986570693225340, +-0.818957879035273400, -0.818929185329926530, -0.818900489577257030, -0.818871791777336160, -0.818843091930235970, -0.818814390036027740, -0.818785686094783750, -0.818756980106575490, +-0.818728272071474920, -0.818699561989553400, -0.818670849860883120, -0.818642135685535790, -0.818613419463582900, -0.818584701195096630, -0.818555980880148580, -0.818527258518810700, +-0.818498534111154360, -0.818469807657251970, -0.818441079157175010, -0.818412348610995430, -0.818383616018784620, -0.818354881380615070, -0.818326144696558400, -0.818297405966686210, +-0.818268665191070330, -0.818239922369783050, -0.818211177502895960, -0.818182430590481010, -0.818153681632609600, -0.818124930629354320, -0.818096177580786680, -0.818067422486978390, +-0.818038665348001740, -0.818009906163928440, -0.817981144934830320, -0.817952381660779220, -0.817923616341847290, -0.817894848978106380, -0.817866079569628310, -0.817837308116484810, +-0.817808534618748360, -0.817779759076490480, -0.817750981489783200, -0.817722201858698260, -0.817693420183308040, -0.817664636463684370, -0.817635850699898970, -0.817607062892023780, +-0.817578273040131090, -0.817549481144292820, -0.817520687204580820, -0.817491891221066800, -0.817463093193823380, -0.817434293122922150, -0.817405491008434960, -0.817376686850434410, +-0.817347880648992000, -0.817319072404179890, -0.817290262116069920, -0.817261449784734580, -0.817232635410245490, -0.817203818992674910, -0.817175000532094460, -0.817146180028576860, +-0.817117357482193720, -0.817088532893017190, -0.817059706261119120, -0.817030877586572000, -0.817002046869447770, -0.816973214109818380, -0.816944379307755650, -0.816915542463332200, +-0.816886703576619970, -0.816857862647690670, -0.816829019676617030, -0.816800174663470770, -0.816771327608324160, -0.816742478511248930, -0.816713627372317790, -0.816684774191602570, +-0.816655918969175440, -0.816627061705108130, -0.816598202399473560, -0.816569341052343470, -0.816540477663790010, -0.816511612233885020, -0.816482744762701330, -0.816453875250310770, +-0.816425003696785500, -0.816396130102197470, -0.816367254466619400, -0.816338376790123220, -0.816309497072780780, -0.816280615314664890, -0.816251731515847510, -0.816222845676400690, +-0.816193957796396590, -0.816165067875907810, -0.816136175915006310, -0.816107281913764470, -0.816078385872254120, -0.816049487790548090, -0.816020587668718320, -0.815991685506837090, +-0.815962781304976350, -0.815933875063208910, -0.815904966781606840, -0.815876056460242300, -0.815847144099187460, -0.815818229698514920, -0.815789313258296840, -0.815760394778605510, +-0.815731474259512870, -0.815702551701091850, -0.815673627103414400, -0.815644700466552690, -0.815615771790579420, -0.815586841075566780, -0.815557908321587030, -0.815528973528712230, +-0.815500036697015210, -0.815471097826568130, -0.815442156917443370, -0.815413213969712890, -0.815384268983449730, -0.815355321958725730, -0.815326372895613600, -0.815297421794185180, +-0.815268468654513520, -0.815239513476670560, -0.815210556260728910, -0.815181597006760630, -0.815152635714838650, -0.815123672385035030, -0.815094707017421930, -0.815065739612072400, +-0.815036770169058510, -0.815007798688452630, -0.814978825170327050, -0.814949849614754700, -0.814920872021807630, -0.814891892391558350, -0.814862910724079240, -0.814833927019443020, +-0.814804941277721960, -0.814775953498988570, -0.814746963683315120, -0.814717971830774430, -0.814688977941438800, -0.814659982015380810, -0.814630984052672540, -0.814601984053387020, +-0.814572982017596650, -0.814543977945373480, -0.814514971836790670, -0.814485963691920390, -0.814456953510835250, -0.814427941293607520, -0.814398927040310030, -0.814369910751015390, +-0.814340892425795880, -0.814311872064723890, -0.814282849667872570, -0.814253825235313980, -0.814224798767120950, -0.814195770263365540, -0.814166739724121010, -0.814137707149459660, +-0.814108672539454070, -0.814079635894176530, -0.814050597213700100, -0.814021556498097270, -0.813992513747440190, -0.813963468961802160, -0.813934422141255440, -0.813905373285872650, +-0.813876322395726160, -0.813847269470889150, -0.813818214511433880, -0.813789157517433190, -0.813760098488959360, -0.813731037426085440, -0.813701974328884030, -0.813672909197427520, +-0.813643842031788630, -0.813614772832040420, -0.813585701598255160, -0.813556628330505680, -0.813527553028864370, -0.813498475693404500, -0.813469396324198350, -0.813440314921318740, +-0.813411231484838180, -0.813382146014829720, -0.813353058511365860, -0.813323968974519080, -0.813294877404362680, -0.813265783800969140, -0.813236688164411080, -0.813207590494761100, +-0.813178490792092370, -0.813149389056477380, -0.813120285287988960, -0.813091179486699510, -0.813062071652682410, -0.813032961786010140, -0.813003849886755450, -0.812974735954990920, +-0.812945619990789740, -0.812916501994224490, -0.812887381965368140, -0.812858259904292950, -0.812829135811072410, -0.812800009685778920, -0.812770881528485310, -0.812741751339264630, +-0.812712619118189710, -0.812683484865333150, -0.812654348580767570, -0.812625210264566470, -0.812596069916802330, -0.812566927537548000, -0.812537783126876080, -0.812508636684859950, +-0.812479488211572340, -0.812450337707085860, -0.812421185171473330, -0.812392030604808140, -0.812362874007162890, -0.812333715378610320, -0.812304554719223360, -0.812275392029075170, +-0.812246227308238590, -0.812217060556786110, -0.812187891774791230, -0.812158720962326660, -0.812129548119465250, -0.812100373246279710, -0.812071196342843530, -0.812042017409229320, +-0.812012836445510140, -0.811983653451758600, -0.811954468428048080, -0.811925281374451520, -0.811896092291041650, -0.811866901177891400, -0.811837708035074050, -0.811808512862662530, +-0.811779315660729580, -0.811750116429348250, -0.811720915168591790, -0.811691711878533060, -0.811662506559245100, -0.811633299210800520, -0.811604089833273030, -0.811574878426735260, +-0.811545664991260130, -0.811516449526921040, -0.811487232033790810, -0.811458012511942490, -0.811428790961448930, -0.811399567382383610, -0.811370341774819370, -0.811341114138829260, +-0.811311884474486210, -0.811282652781863620, -0.811253419061034430, -0.811224183312071580, -0.811194945535048120, -0.811165705730037550, -0.811136463897112690, -0.811107220036346720, +-0.811077974147812460, -0.811048726231583420, -0.811019476287732630, -0.810990224316332940, -0.810960970317457840, -0.810931714291180380, -0.810902456237573620, -0.810873196156710500, +-0.810843934048664620, -0.810814669913508810, -0.810785403751316470, -0.810756135562160310, -0.810726865346114050, -0.810697593103250620, -0.810668318833643210, -0.810639042537364850, +-0.810609764214488940, -0.810580483865088740, -0.810551201489237320, -0.810521917087007710, -0.810492630658473430, -0.810463342203707750, -0.810434051722783270, -0.810404759215774040, +-0.810375464682752900, -0.810346168123793010, -0.810316869538967530, -0.810287568928350080, -0.810258266292013700, -0.810228961630031770, -0.810199654942477030, -0.810170346229423520, +-0.810141035490944070, -0.810111722727112180, -0.810082407938000570, -0.810053091123683180, -0.810023772284233170, -0.809994451419723700, -0.809965128530227840, -0.809935803615819410, +-0.809906476676571450, -0.809877147712557030, -0.809847816723849980, -0.809818483710523450, -0.809789148672650730, -0.809759811610304860, -0.809730472523559670, -0.809701131412488340, +-0.809671788277164240, -0.809642443117660320, -0.809613095934050620, -0.809583746726408090, -0.809554395494806230, -0.809525042239318090, -0.809495686960017720, -0.809466329656978070, +-0.809436970330272510, -0.809407608979974440, -0.809378245606157450, -0.809348880208894950, -0.809319512788260200, -0.809290143344326360, -0.809260771877167500, -0.809231398386856650, +-0.809202022873467100, -0.809172645337072780, -0.809143265777746760, -0.809113884195562630, -0.809084500590593560, -0.809055114962913490, -0.809025727312595590, -0.808996337639713350, +-0.808966945944340040, -0.808937552226549620, -0.808908156486415340, -0.808878758724010720, -0.808849358939408790, -0.808819957132683840, -0.808790553303909030, -0.808761147453157750, +-0.808731739580503370, -0.808702329686019850, -0.808672917769780560, -0.808643503831858680, -0.808614087872328360, -0.808584669891262760, -0.808555249888735620, -0.808525827864819970, +-0.808496403819589980, -0.808466977753119040, -0.808437549665480650, -0.808408119556748180, -0.808378687426995590, -0.808349253276296360, -0.808319817104723890, -0.808290378912351670, +-0.808260938699253860, -0.808231496465503520, -0.808202052211174580, -0.808172605936340220, -0.808143157641074580, -0.808113707325451070, -0.808084254989542950, -0.808054800633424500, +-0.808025344257169100, -0.807995885860850360, -0.807966425444541560, -0.807936963008316970, -0.807907498552249970, -0.807878032076414290, -0.807848563580883190, -0.807819093065731080, +-0.807789620531031090, -0.807760145976857080, -0.807730669403282530, -0.807701190810381500, -0.807671710198227480, -0.807642227566894190, -0.807612742916455020, -0.807583256246984350, +-0.807553767558555460, -0.807524276851242170, -0.807494784125117990, -0.807465289380257080, -0.807435792616732930, -0.807406293834619040, -0.807376793033989680, -0.807347290214918360, +-0.807317785377478780, -0.807288278521744560, -0.807258769647789750, -0.807229258755688180, -0.807199745845513350, -0.807170230917338970, -0.807140713971239210, -0.807111195007287670, +-0.807081674025558190, -0.807052151026124260, -0.807022626009060160, -0.806993098974439490, -0.806963569922336200, -0.806934038852823550, -0.806904505765976170, -0.806874970661867530, +-0.806845433540571140, -0.806815894402161500, -0.806786353246712110, -0.806756810074296780, -0.806727264884989250, -0.806697717678863780, -0.806668168455993980, -0.806638617216453800, +-0.806609063960316730, -0.806579508687657380, -0.806549951398549240, -0.806520392093066140, -0.806490830771281920, -0.806461267433270850, -0.806431702079106530, -0.806402134708863020, +-0.806372565322613920, -0.806342993920433630, -0.806313420502395850, -0.806283845068574310, -0.806254267619043400, -0.806224688153876820, -0.806195106673148420, -0.806165523176932130, +-0.806135937665302230, -0.806106350138332540, -0.806076760596096900, -0.806047169038669130, -0.806017575466123740, -0.805987979878534320, -0.805958382275975050, -0.805928782658519530, +-0.805899181026242360, -0.805869577379217160, -0.805839971717517980, -0.805810364041218750, -0.805780754350393760, -0.805751142645116940, -0.805721528925462000, -0.805691913191503460, +-0.805662295443315140, -0.805632675680971080, -0.805603053904545120, -0.805573430114111750, -0.805543804309744820, -0.805514176491518350, -0.805484546659506200, -0.805454914813782950, +-0.805425280954422340, -0.805395645081498630, -0.805366007195085550, -0.805336367295257590, -0.805306725382088810, -0.805277081455653240, -0.805247435516024730, -0.805217787563277780, +-0.805188137597486420, -0.805158485618724720, -0.805128831627066500, -0.805099175622586480, -0.805069517605358610, -0.805039857575456600, -0.805010195532955160, -0.804980531477928360, +-0.804950865410450130, -0.804921197330594530, -0.804891527238436160, -0.804861855134048950, -0.804832181017507200, -0.804802504888884720, -0.804772826748256230, -0.804743146595695570, +-0.804713464431277110, -0.804683780255074810, -0.804654094067163150, -0.804624405867616410, -0.804594715656508640, -0.804565023433913670, -0.804535329199906560, -0.804505632954561120, +-0.804475934697951310, -0.804446234430151840, -0.804416532151236870, -0.804386827861280570, -0.804357121560356880, -0.804327413248540730, -0.804297702925905970, -0.804267990592527070, +-0.804238276248477880, -0.804208559893833220, -0.804178841528667140, -0.804149121153054040, -0.804119398767067730, -0.804089674370783380, -0.804059947964274710, -0.804030219547616220, +-0.804000489120881840, -0.803970756684146640, -0.803941022237484430, -0.803911285780969490, -0.803881547314676540, -0.803851806838679740, -0.803822064353053370, -0.803792319857871700, +-0.803762573353209440, -0.803732824839140660, -0.803703074315739950, -0.803673321783081150, -0.803643567241239420, -0.803613810690288810, -0.803584052130303590, -0.803554291561357940, +-0.803524528983526890, -0.803494764396884500, -0.803464997801505270, -0.803435229197463130, -0.803405458584833370, -0.803375685963689800, -0.803345911334107150, -0.803316134696159370, +-0.803286356049921490, -0.803256575395467800, -0.803226792732872340, -0.803197008062210170, -0.803167221383555560, -0.803137432696982790, -0.803107642002566240, -0.803077849300380840, +-0.803048054590500770, -0.803018257873000630, -0.802988459147954580, -0.802958658415437570, -0.802928855675524080, -0.802899050928288280, -0.802869244173804670, -0.802839435412148190, +-0.802809624643393120, -0.802779811867614050, -0.802749997084885040, -0.802720180295281470, -0.802690361498877400, -0.802660540695747100, -0.802630717885965740, -0.802600893069607580, +-0.802571066246747230, -0.802541237417458860, -0.802511406581817740, -0.802481573739898150, -0.802451738891774570, -0.802421902037521280, -0.802392063177213680, -0.802362222310925800, +-0.802332379438732370, -0.802302534560707770, -0.802272687676927050, -0.802242838787464720, -0.802212987892395150, -0.802183134991792950, -0.802153280085733170, -0.802123423174290200, +-0.802093564257538310, -0.802063703335552880, -0.802033840408408080, -0.802003975476178740, -0.801974108538939250, -0.801944239596764640, -0.801914368649729540, -0.801884495697908540, +-0.801854620741375920, -0.801824743780207070, -0.801794864814476370, -0.801764983844258540, -0.801735100869627960, -0.801705215890659790, -0.801675328907428650, -0.801645439920009250, +-0.801615548928475970, -0.801585655932903980, -0.801555760933368000, -0.801525863929942290, -0.801495964922702140, -0.801466063911722150, -0.801436160897076920, -0.801406255878841070, +-0.801376348857089860, -0.801346439831897790, -0.801316528803339480, -0.801286615771489740, -0.801256700736423740, -0.801226783698215870, -0.801196864656941070, -0.801166943612673930, +-0.801137020565489630, -0.801107095515462770, -0.801077168462668190, -0.801047239407180480, -0.801017308349074810, -0.800987375288426010, -0.800957440225308680, -0.800927503159797440, +-0.800897564091967880, -0.800867623021894290, -0.800837679949651380, -0.800807734875314540, -0.800777787798958360, -0.800747838720657690, -0.800717887640487240, -0.800687934558522270, +-0.800657979474837520, -0.800628022389507700, -0.800598063302607740, -0.800568102214212820, -0.800538139124397530, -0.800508174033236930, -0.800478206940805740, -0.800448237847179220, +-0.800418266752432110, -0.800388293656639330, -0.800358318559875600, -0.800328341462216320, -0.800298362363736190, -0.800268381264509830, -0.800238398164612840, -0.800208413064119830, +-0.800178425963105840, -0.800148436861645500, -0.800118445759814280, -0.800088452657686910, -0.800058457555338550, -0.800028460452843700, -0.799998461350277970, -0.799968460247716060, +-0.799938457145233040, -0.799908452042903620, -0.799878444940803290, -0.799848435839006890, -0.799818424737589350, -0.799788411636625510, -0.799758396536190960, -0.799728379436360330, +-0.799698360337208540, -0.799668339238811090, -0.799638316141242810, -0.799608291044578760, -0.799578263948893750, -0.799548234854263300, -0.799518203760762210, -0.799488170668465670, +-0.799458135577448380, -0.799428098487786070, -0.799398059399553550, -0.799368018312825780, -0.799337975227677800, -0.799307930144185110, -0.799277883062422530, -0.799247833982465350, +-0.799217782904388270, -0.799187729828267020, -0.799157674754176430, -0.799127617682191650, -0.799097558612387520, -0.799067497544839860, -0.799037434479623390, -0.799007369416813050, +-0.798977302356484560, -0.798947233298712870, -0.798917162243573010, -0.798887089191140040, -0.798857014141489570, -0.798826937094696650, -0.798796858050836330, -0.798766777009983550, +-0.798736693972214250, -0.798706608937603040, -0.798676521906225400, -0.798646432878156180, -0.798616341853471080, -0.798586248832245270, -0.798556153814553690, -0.798526056800471510, +-0.798495957790074540, -0.798465856783437510, -0.798435753780635690, -0.798405648781744800, -0.798375541786839670, -0.798345432795995680, -0.798315321809287880, -0.798285208826792100, +-0.798255093848583290, -0.798224976874736700, -0.798194857905327400, -0.798164736940431220, -0.798134613980123200, -0.798104489024478610, -0.798074362073572630, -0.798044233127480960, +-0.798014102186278660, -0.797983969250041230, -0.797953834318843480, -0.797923697392761480, -0.797893558471870160, -0.797863417556244790, -0.797833274645961100, -0.797803129741094240, +-0.797772982841719490, -0.797742833947912010, -0.797712683059747850, -0.797682530177301840, -0.797652375300649590, -0.797622218429866030, -0.797592059565027320, -0.797561898706208420, +-0.797531735853484690, -0.797501571006931420, -0.797471404166624540, -0.797441235332639110, -0.797411064505050620, -0.797380891683934110, -0.797350716869365650, -0.797320540061420500, +-0.797290361260173610, -0.797260180465701240, -0.797229997678078340, -0.797199812897380400, -0.797169626123682700, -0.797139437357061160, -0.797109246597591080, -0.797079053845347830, +-0.797048859100406790, -0.797018662362843800, -0.796988463632734120, -0.796958262910153260, -0.796928060195176590, -0.796897855487879950, -0.796867648788338710, -0.796837440096628380, +-0.796807229412824110, -0.796777016737002080, -0.796746802069237430, -0.796716585409605880, -0.796686366758182610, -0.796656146115043650, -0.796625923480264290, -0.796595698853919900, +-0.796565472236086420, -0.796535243626839360, -0.796505013026254200, -0.796474780434406230, -0.796444545851371590, -0.796414309277225560, -0.796384070712043760, -0.796353830155901440, +-0.796323587608874890, -0.796293343071039380, -0.796263096542470520, -0.796232848023243680, -0.796202597513434920, -0.796172345013119730, -0.796142090522373610, -0.796111834041271950, +-0.796081575569891120, -0.796051315108306290, -0.796021052656592840, -0.795990788214827050, -0.795960521783084410, -0.795930253361440300, -0.795899982949970440, -0.795869710548750780, +-0.795839436157856910, -0.795809159777364330, -0.795778881407348760, -0.795748601047886140, -0.795718318699051960, -0.795688034360922170, -0.795657748033571920, -0.795627459717077600, +-0.795597169411514590, -0.795566877116958620, -0.795536582833485270, -0.795506286561170730, -0.795475988300090360, -0.795445688050319900, -0.795415385811935380, -0.795385081585012530, +-0.795354775369626840, -0.795324467165854030, -0.795294156973770260, -0.795263844793451140, -0.795233530624972370, -0.795203214468409470, -0.795172896323838920, -0.795142576191335990, +-0.795112254070976740, -0.795081929962836550, -0.795051603866991810, -0.795021275783518000, -0.794990945712491070, -0.794960613653986510, -0.794930279608080600, -0.794899943574849050, +-0.794869605554367700, -0.794839265546712030, -0.794808923551958420, -0.794778579570182500, -0.794748233601459960, -0.794717885645866980, -0.794687535703479390, -0.794657183774372890, +-0.794626829858623210, -0.794596473956306730, -0.794566116067499050, -0.794535756192276010, -0.794505394330713320, -0.794475030482887480, -0.794444664648874090, -0.794414296828748980, +-0.794383927022587870, -0.794353555230467250, -0.794323181452462720, -0.794292805688650240, -0.794262427939105400, -0.794232048203904810, -0.794201666483124180, -0.794171282776839020, +-0.794140897085125920, -0.794110509408060610, -0.794080119745719020, -0.794049728098176870, -0.794019334465510650, -0.793988938847796090, -0.793958541245109230, -0.793928141657525790, +-0.793897740085122150, -0.793867336527974250, -0.793836930986157930, -0.793806523459749000, -0.793776113948824080, -0.793745702453458880, -0.793715288973729450, -0.793684873509711510, +-0.793654456061481660, -0.793624036629115630, -0.793593615212689230, -0.793563191812279190, -0.793532766427961000, -0.793502339059811050, -0.793471909707904820, -0.793441478372319150, +-0.793411045053129870, -0.793380609750412910, -0.793350172464244110, -0.793319733194700280, -0.793289291941856930, -0.793258848705790550, -0.793228403486576640, -0.793197956284292020, +-0.793167507099012510, -0.793137055930814290, -0.793106602779773180, -0.793076147645965680, -0.793045690529467940, -0.793015231430355680, -0.792984770348705630, -0.792954307284593600, +-0.792923842238095870, -0.792893375209288150, -0.792862906198247400, -0.792832435205049310, -0.792801962229770170, -0.792771487272485810, -0.792741010333272930, -0.792710531412207600, +-0.792680050509366070, -0.792649567624823970, -0.792619082758658330, -0.792588595910944880, -0.792558107081760000, -0.792527616271179620, -0.792497123479280360, -0.792466628706138380, +-0.792436131951829830, -0.792405633216430650, -0.792375132500017680, -0.792344629802666840, -0.792314125124454200, -0.792283618465456470, -0.792253109825749700, -0.792222599205410160, +-0.792192086604513900, -0.792161572023137640, -0.792131055461357540, -0.792100536919249750, -0.792070016396890340, -0.792039493894356130, -0.792008969411723160, -0.791978442949067830, +-0.791947914506466180, -0.791917384083994920, -0.791886851681730230, -0.791856317299748370, -0.791825780938125500, -0.791795242596938450, -0.791764702276263280, -0.791734159976176020, +-0.791703615696753740, -0.791673069438072360, -0.791642521200208280, -0.791611970983237660, -0.791581418787237420, -0.791550864612283630, -0.791520308458452670, -0.791489750325820580, +-0.791459190214464540, -0.791428628124460350, -0.791398064055884750, -0.791367498008813560, -0.791336929983324060, -0.791306359979492170, -0.791275787997394290, -0.791245214037106790, +-0.791214638098706510, -0.791184060182269610, -0.791153480287872250, -0.791122898415591580, -0.791092314565503550, -0.791061728737684770, -0.791031140932211390, -0.791000551149160460, +-0.790969959388608030, -0.790939365650630830, -0.790908769935305010, -0.790878172242707400, -0.790847572572914380, -0.790816970926002450, -0.790786367302047880, -0.790755761701127600, +-0.790725154123317900, -0.790694544568695370, -0.790663933037336180, -0.790633319529317370, -0.790602704044715330, -0.790572086583606560, -0.790541467146067210, -0.790510845732174560, +-0.790480222342004660, -0.790449596975634110, -0.790418969633139730, -0.790388340314597930, -0.790357709020085290, -0.790327075749678090, -0.790296440503453490, -0.790265803281487880, +-0.790235164083857630, -0.790204522910639250, -0.790173879761909780, -0.790143234637745720, -0.790112587538223550, -0.790081938463419560, -0.790051287413411020, -0.790020634388274300, +-0.789989979388086020, -0.789959322412922440, -0.789928663462860840, -0.789898002537977590, -0.789867339638349100, -0.789836674764052500, -0.789806007915164310, -0.789775339091761010, +-0.789744668293919090, -0.789713995521715730, -0.789683320775227400, -0.789652644054530840, -0.789621965359702300, -0.789591284690819300, -0.789560602047957970, -0.789529917431195050, +-0.789499230840607140, -0.789468542276271500, -0.789437851738264420, -0.789407159226662710, -0.789376464741542880, -0.789345768282982090, -0.789315069851056930, -0.789284369445843790, +-0.789253667067420060, -0.789222962715862120, -0.789192256391246790, -0.789161548093650470, -0.789130837823150630, -0.789100125579823670, -0.789069411363746420, -0.789038695174995360, +-0.789007977013647780, -0.788977256879780380, -0.788946534773469770, -0.788915810694792550, -0.788885084643826010, -0.788854356620646850, -0.788823626625331790, -0.788792894657957430, +-0.788762160718600950, -0.788731424807339150, -0.788700686924248550, -0.788669947069406520, -0.788639205242889660, -0.788608461444774700, -0.788577715675138350, -0.788546967934057990, +-0.788516218221610110, -0.788485466537871770, -0.788454712882919460, -0.788423957256830680, -0.788393199659682020, -0.788362440091550320, -0.788331678552512290, -0.788300915042645320, +-0.788270149562026010, -0.788239382110731410, -0.788208612688838020, -0.788177841296423430, -0.788147067933564150, -0.788116292600337220, -0.788085515296819360, -0.788054736023087950, +-0.788023954779219720, -0.787993171565291250, -0.787962386381380160, -0.787931599227563170, -0.787900810103917100, -0.787870019010518790, -0.787839225947445710, -0.787808430914774480, +-0.787777633912582260, -0.787746834940945660, -0.787716033999942280, -0.787685231089648720, -0.787654426210142140, -0.787623619361499160, -0.787592810543797480, -0.787561999757113830, +-0.787531187001525020, -0.787500372277108120, -0.787469555583940490, -0.787438736922098980, -0.787407916291660400, -0.787377093692702260, -0.787346269125301370, -0.787315442589534790, +-0.787284614085479340, -0.787253783613212740, -0.787222951172811490, -0.787192116764353080, -0.787161280387914000, -0.787130442043571970, -0.787099601731403810, -0.787068759451486690, +-0.787037915203897430, -0.787007068988713530, -0.786976220806012150, -0.786945370655870110, -0.786914518538364360, -0.786883664453572610, -0.786852808401571680, -0.786821950382438520, +-0.786791090396250610, -0.786760228443085130, -0.786729364523019000, -0.786698498636129170, -0.786667630782493470, -0.786636760962188600, -0.786605889175291840, -0.786575015421880130, +-0.786544139702031080, -0.786513262015821720, -0.786482382363329240, -0.786451500744630550, -0.786420617159803270, -0.786389731608924560, -0.786358844092071460, -0.786327954609321030, +-0.786297063160750880, -0.786266169746438150, -0.786235274366460010, -0.786204377020893410, -0.786173477709816050, -0.786142576433305100, -0.786111673191437380, -0.786080767984290830, +-0.786049860811942280, -0.786018951674469110, -0.785988040571948270, -0.785957127504457560, -0.785926212472074170, -0.785895295474875130, -0.785864376512937610, -0.785833455586339440, +-0.785802532695157650, -0.785771607839469420, -0.785740681019352020, -0.785709752234883150, -0.785678821486139880, -0.785647888773199580, -0.785616954096139190, -0.785586017455036870, +-0.785555078849969330, -0.785524138281013970, -0.785493195748248390, -0.785462251251749950, -0.785431304791595840, -0.785400356367863210, -0.785369405980629880, -0.785338453629973120, +-0.785307499315970210, -0.785276543038698200, -0.785245584798235250, -0.785214624594658180, -0.785183662428044720, -0.785152698298471670, -0.785121732206017220, -0.785090764150758510, +-0.785059794132772830, -0.785028822152137320, -0.784997848208930150, -0.784966872303228260, -0.784935894435108920, -0.784904914604650170, -0.784873932811929190, -0.784842949057023230, +-0.784811963340009690, -0.784780975660966610, -0.784749986019970920, -0.784718994417100360, -0.784688000852432070, -0.784657005326043990, -0.784626007838013400, -0.784595008388417890, +-0.784564006977334530, -0.784533003604841350, -0.784501998271015740, -0.784470990975935090, -0.784439981719676770, -0.784408970502318610, -0.784377957323938220, -0.784346942184612760, +-0.784315925084419830, -0.784284906023437260, -0.784253885001742420, -0.784222862019412600, -0.784191837076525950, -0.784160810173159750, -0.784129781309391370, -0.784098750485298420, +-0.784067717700958730, -0.784036682956449900, -0.784005646251849210, -0.783974607587234250, -0.783943566962682970, -0.783912524378272750, -0.783881479834081300, -0.783850433330185890, +-0.783819384866664580, -0.783788334443594860, -0.783757282061054330, -0.783726227719120260, -0.783695171417870930, -0.783664113157383600, -0.783633052937735890, -0.783601990759005720, +-0.783570926621270480, -0.783539860524608000, -0.783508792469095660, -0.783477722454811510, -0.783446650481833150, -0.783415576550238080, -0.783384500660103790, -0.783353422811508660, +-0.783322343004529850, -0.783291261239245200, -0.783260177515732070, -0.783229091834068860, -0.783198004194332940, -0.783166914596601930, -0.783135823040953420, -0.783104729527465570, +-0.783073634056215990, -0.783042536627281960, -0.783011437240741850, -0.782980335896673150, -0.782949232595153700, -0.782918127336260870, -0.782887020120072940, -0.782855910946667510, +-0.782824799816122300, -0.782793686728514790, -0.782762571683923270, -0.782731454682425440, -0.782700335724098920, -0.782669214809021300, -0.782638091937270960, -0.782606967108925300, +-0.782575840324062360, -0.782544711582759400, -0.782513580885095040, -0.782482448231146650, -0.782451313620991850, -0.782420177054709120, -0.782389038532375960, -0.782357898054070080, +-0.782326755619869310, -0.782295611229851810, -0.782264464884095400, -0.782233316582677810, -0.782202166325676520, -0.782171014113170250, -0.782139859945236380, -0.782108703821952860, +-0.782077545743397270, -0.782046385709648130, -0.782015223720783030, -0.781984059776879900, -0.781952893878016250, -0.781921726024270790, -0.781890556215720900, -0.781859384452444630, +-0.781828210734519690, -0.781797035062024470, -0.781765857435036570, -0.781734677853633820, -0.781703496317894710, -0.781672312827896840, -0.781641127383718160, -0.781609939985436370, +-0.781578750633129980, -0.781547559326876810, -0.781516366066754680, -0.781485170852841300, -0.781453973685215300, -0.781422774563954480, -0.781391573489136570, -0.781360370460839610, +-0.781329165479141880, -0.781297958544121320, -0.781266749655855740, -0.781235538814423090, -0.781204326019901860, -0.781173111272369880, -0.781141894571904750, -0.781110675918585180, +-0.781079455312488900, -0.781048232753694060, -0.781017008242278380, -0.780985781778320340, -0.780954553361897900, -0.780923322993089090, -0.780892090671971740, -0.780860856398624350, +-0.780829620173124850, -0.780798381995551290, -0.780767141865981510, -0.780735899784494200, -0.780704655751167100, -0.780673409766078350, -0.780642161829305790, -0.780610911940928130, +-0.780579660101023200, -0.780548406309668820, -0.780517150566943710, -0.780485892872925690, -0.780454633227692930, -0.780423371631323360, -0.780392108083895700, -0.780360842585487660, +-0.780329575136177510, -0.780298305736043200, -0.780267034385163430, -0.780235761083616030, -0.780204485831479280, -0.780173208628830990, -0.780141929475749900, -0.780110648372314030, +-0.780079365318601560, -0.780048080314690420, -0.780016793360659320, -0.779985504456586210, -0.779954213602549460, -0.779922920798626800, -0.779891626044897150, -0.779860329341438340, +-0.779829030688328540, -0.779797730085646460, -0.779766427533469920, -0.779735123031877420, -0.779703816580946780, -0.779672508180756950, -0.779641197831385860, -0.779609885532911660, +-0.779578571285412520, -0.779547255088967270, -0.779515936943653840, -0.779484616849550620, -0.779453294806735530, -0.779421970815287410, -0.779390644875284530, -0.779359316986804940, +-0.779327987149926790, -0.779296655364728920, -0.779265321631289480, -0.779233985949686400, -0.779202648319998640, -0.779171308742304340, -0.779139967216681660, -0.779108623743208880, +-0.779077278321964720, -0.779045930953027430, -0.779014581636475300, -0.778983230372386480, -0.778951877160839800, -0.778920522001913420, -0.778889164895685830, -0.778857805842234960, +-0.778826444841639880, -0.778795081893978610, -0.778763716999329780, -0.778732350157771310, -0.778700981369382150, -0.778669610634240670, -0.778638237952424930, -0.778606863324013740, +-0.778575486749085390, -0.778544108227718470, -0.778512727759990810, -0.778481345345981790, -0.778449960985769240, -0.778418574679431870, -0.778387186427047850, -0.778355796228696000, +-0.778324404084454800, -0.778293009994402540, -0.778261613958617480, -0.778230215977178560, -0.778198816050164280, -0.778167414177652890, -0.778136010359722570, -0.778104604596452700, +-0.778073196887921200, -0.778041787234206470, -0.778010375635387440, -0.777978962091542600, -0.777947546602750340, -0.777916129169088920, -0.777884709790637400, -0.777853288467474150, +-0.777821865199677660, -0.777790439987326330, -0.777759012830499090, -0.777727583729274310, -0.777696152683730600, -0.777664719693946240, -0.777633284760000270, -0.777601847881971180, +-0.777570409059937460, -0.777538968293977390, -0.777507525584170240, -0.777476080930594280, -0.777444634333328110, -0.777413185792450000, -0.777381735308039220, -0.777350282880174160, +-0.777318828508933190, -0.777287372194395250, -0.777255913936638950, -0.777224453735742890, -0.777192991591785450, -0.777161527504845790, -0.777130061475002300, -0.777098593502333570, +-0.777067123586918210, -0.777035651728835260, -0.777004177928163120, -0.776972702184980710, -0.776941224499366090, -0.776909744871398740, -0.776878263301157060, -0.776846779788719740, +-0.776815294334165190, -0.776783806937572650, -0.776752317599020530, -0.776720826318587410, -0.776689333096352460, -0.776657837932394290, -0.776626340826791380, -0.776594841779622460, +-0.776563340790966670, -0.776531837860902520, -0.776500332989508710, -0.776468826176863970, -0.776437317423047220, -0.776405806728137300, -0.776374294092212920, -0.776342779515352470, +-0.776311262997635310, -0.776279744539140060, -0.776248224139945320, -0.776216701800129920, -0.776185177519772900, -0.776153651298952970, -0.776122123137748640, -0.776090593036239400, +-0.776059060994503500, -0.776027527012620010, -0.775995991090667530, -0.775964453228725200, -0.775932913426871760, -0.775901371685186140, -0.775869828003746710, -0.775838282382632970, +-0.775806734821923640, -0.775775185321697420, -0.775743633882032930, -0.775712080503009660, -0.775680525184706200, -0.775648967927201390, -0.775617408730573940, -0.775585847594903120, +-0.775554284520267870, -0.775522719506746780, -0.775491152554418580, -0.775459583663362870, -0.775428012833658140, -0.775396440065383220, -0.775364865358617370, -0.775333288713439320, +-0.775301710129928210, -0.775270129608162440, -0.775238547148221600, -0.775206962750184410, -0.775175376414129810, -0.775143788140136510, -0.775112197928284010, -0.775080605778651010, +-0.775049011691316570, -0.775017415666359180, -0.774985817703858660, -0.774954217803893510, -0.774922615966542880, -0.774891012191885390, -0.774859406480000620, -0.774827798830967420, +-0.774796189244864380, -0.774764577721771210, -0.774732964261766520, -0.774701348864929470, -0.774669731531338780, -0.774638112261073930, -0.774606491054213860, -0.774574867910837630, +-0.774543242831023940, -0.774511615814852390, -0.774479986862401710, -0.774448355973751170, -0.774416723148979470, -0.774385088388166220, -0.774353451691390250, -0.774321813058730600, +-0.774290172490266220, -0.774258529986076690, -0.774226885546240750, -0.774195239170837320, -0.774163590859946240, -0.774131940613645990, -0.774100288432015950, -0.774068634315134950, +-0.774036978263082600, -0.774005320275937820, -0.773973660353779680, -0.773941998496687210, -0.773910334704740020, -0.773878668978016940, -0.773847001316597230, -0.773815331720559610, +-0.773783660189984120, -0.773751986724949380, -0.773720311325534650, -0.773688633991818970, -0.773656954723881850, -0.773625273521802440, -0.773593590385659560, -0.773561905315532930, +-0.773530218311501590, -0.773498529373644720, -0.773466838502041230, -0.773435145696770850, -0.773403450957912630, -0.773371754285545940, -0.773340055679749390, -0.773308355140603030, +-0.773276652668185790, -0.773244948262577060, -0.773213241923855540, -0.773181533652101180, -0.773149823447393030, -0.773118111309810230, -0.773086397239431950, -0.773054681236338030, +-0.773022963300607380, -0.772991243432319170, -0.772959521631552680, -0.772927797898387730, -0.772896072232903240, -0.772864344635178280, -0.772832615105292660, -0.772800883643325550, +-0.772769150249356330, -0.772737414923463820, -0.772705677665728170, -0.772673938476228230, -0.772642197355043470, -0.772610454302252950, -0.772578709317936600, -0.772546962402173460, +-0.772515213555042930, -0.772483462776624050, -0.772451710066996760, -0.772419955426240310, -0.772388198854433880, -0.772356440351656740, -0.772324679917988700, -0.772292917553508930, +-0.772261153258296700, -0.772229387032431820, -0.772197618875993470, -0.772165848789061030, -0.772134076771713750, -0.772102302824031580, -0.772070526946093570, -0.772038749137979320, +-0.772006969399767870, -0.771975187731539280, -0.771943404133372810, -0.771911618605347740, -0.771879831147543330, -0.771848041760039630, -0.771816250442915910, -0.771784457196251440, +-0.771752662020125600, -0.771720864914618440, -0.771689065879809010, -0.771657264915776690, -0.771625462022601520, -0.771593657200362770, -0.771561850449139720, -0.771530041769011850, +-0.771498231160059110, -0.771466418622360760, -0.771434604155996410, -0.771402787761045320, -0.771370969437587430, -0.771339149185702230, -0.771307327005469110, -0.771275502896967450, +-0.771243676860277170, -0.771211848895477780, -0.771180019002648760, -0.771148187181869500, -0.771116353433219940, -0.771084517756779550, -0.771052680152627850, -0.771020840620844190, +-0.770988999161508650, -0.770957155774700700, -0.770925310460499500, -0.770893463218985330, -0.770861614050237560, -0.770829762954335700, -0.770797909931359100, -0.770766054981388060, +-0.770734198104501940, -0.770702339300780250, -0.770670478570302460, -0.770638615913148750, -0.770606751329398490, -0.770574884819131390, -0.770543016382426730, -0.770511146019364880, +-0.770479273730025120, -0.770447399514487150, -0.770415523372830480, -0.770383645305135260, -0.770351765311480970, -0.770319883391946900, -0.770287999546613420, -0.770256113775559910, +-0.770224226078866200, -0.770192336456611560, -0.770160444908876470, -0.770128551435740220, -0.770096656037282500, -0.770064758713582930, -0.770032859464721780, -0.770000958290778410, +-0.769969055191832670, -0.769937150167964050, -0.769905243219252800, -0.769873334345778430, -0.769841423547620750, -0.769809510824859270, -0.769777596177574240, -0.769745679605845280, +-0.769713761109751760, -0.769681840689374170, -0.769649918344791910, -0.769617994076085000, -0.769586067883332610, -0.769554139766615460, -0.769522209726013040, -0.769490277761604950, +-0.769458343873470900, -0.769426408061691380, -0.769394470326345780, -0.769362530667513920, -0.769330589085275520, -0.769298645579711060, -0.769266700150899820, -0.769234752798921840, +-0.769202803523856730, -0.769170852325784970, -0.769138899204785950, -0.769106944160939500, -0.769074987194325880, -0.769043028305024910, -0.769011067493116210, -0.768979104758679700, +-0.768947140101795660, -0.768915173522543790, -0.768883205021003930, -0.768851234597255790, -0.768819262251379860, -0.768787287983455860, -0.768755311793563490, -0.768723333681782690, +-0.768691353648193740, -0.768659371692876460, -0.768627387815910780, -0.768595402017376310, -0.768563414297353640, -0.768531424655922390, -0.768499433093162600, -0.768467439609153870, +-0.768435444203976910, -0.768403446877711340, -0.768371447630436850, -0.768339446462234070, -0.768307443373182570, -0.768275438363362540, -0.768243431432853670, -0.768211422581736470, +-0.768179411810090640, -0.768147399117996340, -0.768115384505533290, -0.768083367972781980, -0.768051349519822350, -0.768019329146734320, -0.767987306853597620, -0.767955282640493060, +-0.767923256507500150, -0.767891228454699150, -0.767859198482169880, -0.767827166589992840, -0.767795132778247850, -0.767763097047014730, -0.767731059396374200, -0.767699019826405980, +-0.767666978337190220, -0.767634934928806740, -0.767602889601336270, -0.767570842354858510, -0.767538793189453620, -0.767506742105201530, -0.767474689102182860, -0.767442634180477420, +-0.767410577340165490, -0.767378518581326660, -0.767346457904041990, -0.767314395308391070, -0.767282330794454290, -0.767250264362311250, -0.767218196012042890, -0.767186125743729020, +-0.767154053557449590, -0.767121979453285310, -0.767089903431316110, -0.767057825491622050, -0.767025745634283270, -0.766993663859380280, -0.766961580166993230, -0.766929494557202160, +-0.766897407030087130, -0.766865317585728850, -0.766833226224207240, -0.766801132945602590, -0.766769037749994830, -0.766736940637464780, -0.766704841608092380, -0.766672740661957790, +-0.766640637799141160, -0.766608533019723200, -0.766576426323783870, -0.766544317711403520, -0.766512207182662110, -0.766480094737640340, -0.766447980376418480, -0.766415864099076360, +-0.766383745905694800, -0.766351625796353850, -0.766319503771133890, -0.766287379830114970, -0.766255253973377790, -0.766223126201002410, -0.766190996513069320, -0.766158864909658450, +-0.766126731390850630, -0.766094595956726130, -0.766062458607364990, -0.766030319342847490, -0.765998178163254440, -0.765966035068666010, -0.765933890059162460, -0.765901743134823840, +-0.765869594295731200, -0.765837443541964590, -0.765805290873604050, -0.765773136290730630, -0.765740979793424260, -0.765708821381765550, -0.765676661055834430, -0.765644498815711950, +-0.765612334661478270, -0.765580168593213760, -0.765548000610998480, -0.765515830714913470, -0.765483658905039000, -0.765451485181455340, -0.765419309544242640, -0.765387131993481960, +-0.765354952529253450, -0.765322771151637490, -0.765290587860714470, -0.765258402656565200, -0.765226215539269840, -0.765194026508908780, -0.765161835565562940, -0.765129642709312390, +-0.765097447940237820, -0.765065251258419290, -0.765033052663937950, -0.765000852156874080, -0.764968649737307940, -0.764936445405319910, -0.764904239160991150, -0.764872031004401710, +-0.764839820935632190, -0.764807608954762850, -0.764775395061874750, -0.764743179257048160, -0.764710961540363670, -0.764678741911901440, -0.764646520371742630, -0.764614296919967630, +-0.764582071556656470, -0.764549844281890540, -0.764517615095749890, -0.764485383998315230, -0.764453150989666930, -0.764420916069885940, -0.764388679239052630, -0.764356440497247710, +-0.764324199844551360, -0.764291957281044710, -0.764259712806808270, -0.764227466421922520, -0.764195218126467850, -0.764162967920525400, -0.764130715804175580, -0.764098461777498850, +-0.764066205840575720, -0.764033947993487450, -0.764001688236314200, -0.763969426569136800, -0.763937162992035510, -0.763904897505091610, -0.763872630108385580, -0.763840360801997580, +-0.763808089586008990, -0.763775816460500080, -0.763743541425551790, -0.763711264481244270, -0.763678985627658790, -0.763646704864875960, -0.763614422192976370, -0.763582137612040410, +-0.763549851122149350, -0.763517562723383780, -0.763485272415824200, -0.763452980199551210, -0.763420686074645970, -0.763388390041189080, -0.763356092099261250, -0.763323792248942870, +-0.763291490490315310, -0.763259186823458950, -0.763226881248454390, -0.763194573765382910, -0.763162264374325110, -0.763129953075361470, -0.763097639868572710, -0.763065324754040210, +-0.763033007731844350, -0.763000688802065950, -0.762968367964785620, -0.762936045220084620, -0.762903720568043450, -0.762871394008743040, -0.762839065542263770, -0.762806735168687240, +-0.762774402888093840, -0.762742068700564380, -0.762709732606179470, -0.762677394605020600, -0.762645054697168150, -0.762612712882702830, -0.762580369161705910, -0.762548023534258210, +-0.762515676000440350, -0.762483326560333130, -0.762450975214017830, -0.762418621961575060, -0.762386266803085740, -0.762353909738630490, -0.762321550768290670, -0.762289189892147110, +-0.762256827110280530, -0.762224462422771530, -0.762192095829701710, -0.762159727331151670, -0.762127356927202240, -0.762094984617934120, -0.762062610403428930, -0.762030234283767150, +-0.761997856259029830, -0.761965476329297560, -0.761933094494651850, -0.761900710755173520, -0.761868325110943050, -0.761835937562042040, -0.761803548108551110, -0.761771156750551400, +-0.761738763488123530, -0.761706368321349080, -0.761673971250308560, -0.761641572275083220, -0.761609171395753680, -0.761576768612401420, -0.761544363925107270, -0.761511957333952270, +-0.761479548839017030, -0.761447138440383140, -0.761414726138131550, -0.761382311932343070, -0.761349895823098530, -0.761317477810479540, -0.761285057894566800, -0.761252636075441250, +-0.761220212353184270, -0.761187786727876790, -0.761155359199599870, -0.761122929768434320, -0.761090498434461640, -0.761058065197762760, -0.761025630058418720, -0.760993193016510250, +-0.760960754072119160, -0.760928313225326170, -0.760895870476212430, -0.760863425824858660, -0.760830979271346690, -0.760798530815757210, -0.760766080458171400, -0.760733628198670080, +-0.760701174037335060, -0.760668717974247070, -0.760636260009487030, -0.760603800143136550, -0.760571338375276570, -0.760538874705988350, -0.760506409135352610, -0.760473941663451060, +-0.760441472290364740, -0.760409001016174700, -0.760376527840961880, -0.760344052764807990, -0.760311575787794070, -0.760279096910001170, -0.760246616131510230, -0.760214133452402960, +-0.760181648872760410, -0.760149162392663840, -0.760116674012193960, -0.760084183731432720, -0.760051691550461040, -0.760019197469359750, -0.759986701488210900, -0.759954203607095200, +-0.759921703826093920, -0.759889202145288210, -0.759856698564759790, -0.759824193084589590, -0.759791685704858890, -0.759759176425648720, -0.759726665247040910, -0.759694152169116400, +-0.759661637191956450, -0.759629120315642230, -0.759596601540255430, -0.759564080865877230, -0.759531558292588670, -0.759499033820471010, -0.759466507449606090, -0.759433979180074940, +-0.759401449011958720, -0.759368916945338590, -0.759336382980296490, -0.759303847116913460, -0.759271309355270540, -0.759238769695449680, -0.759206228137531800, -0.759173684681598290, +-0.759141139327730310, -0.759108592076009890, -0.759076042926517980, -0.759043491879335840, -0.759010938934544740, -0.758978384092226620, -0.758945827352462520, -0.758913268715333820, +-0.758880708180921680, -0.758848145749308150, -0.758815581420574150, -0.758783015194801180, -0.758750447072070400, -0.758717877052463850, -0.758685305136062470, -0.758652731322947640, +-0.758620155613201290, -0.758587578006904570, -0.758554998504138880, -0.758522417104985360, -0.758489833809526060, -0.758457248617842250, -0.758424661530015310, -0.758392072546126390, +-0.758359481666257660, -0.758326888890490160, -0.758294294218905480, -0.758261697651584690, -0.758229099188610030, -0.758196498830062570, -0.758163896576023900, -0.758131292426575180, +-0.758098686381798450, -0.758066078441775200, -0.758033468606586270, -0.758000856876314020, -0.757968243251039730, -0.757935627730844660, -0.757903010315810310, -0.757870391006018720, +-0.757837769801551260, -0.757805146702489220, -0.757772521708914070, -0.757739894820907980, -0.757707266038552100, -0.757674635361928030, -0.757642002791117040, -0.757609368326201400, +-0.757576731967262380, -0.757544093714381470, -0.757511453567640050, -0.757478811527120270, -0.757446167592903400, -0.757413521765071260, -0.757380874043704910, -0.757348224428886720, +-0.757315572920697950, -0.757282919519220000, -0.757250264224535010, -0.757217607036724360, -0.757184947955869660, -0.757152286982052390, -0.757119624115354610, -0.757086959355857790, +-0.757054292703643550, -0.757021624158793260, -0.756988953721389300, -0.756956281391512940, -0.756923607169245780, -0.756890931054669420, -0.756858253047866030, -0.756825573148916850, +-0.756792891357903950, -0.756760207674908370, -0.756727522100012600, -0.756694834633298120, -0.756662145274846100, -0.756629454024739130, -0.756596760883058490, -0.756564065849886000, +-0.756531368925303040, -0.756498670109391870, -0.756465969402234100, -0.756433266803911320, -0.756400562314505140, -0.756367855934097830, -0.756335147662770990, -0.756302437500606110, +-0.756269725447684890, -0.756237011504089730, -0.756204295669901990, -0.756171577945203510, -0.756138858330075880, -0.756106136824601260, -0.756073413428861360, -0.756040688142937570, +-0.756007960966912470, -0.755975231900867350, -0.755942500944884130, -0.755909768099044530, -0.755877033363430710, -0.755844296738124250, -0.755811558223207220, -0.755778817818760880, +-0.755746075524867830, -0.755713331341609560, -0.755680585269067890, -0.755647837307324540, -0.755615087456461890, -0.755582335716561530, -0.755549582087705400, -0.755516826569974880, +-0.755484069163452680, -0.755451309868220290, -0.755418548684359310, -0.755385785611952240, -0.755353020651080680, -0.755320253801826660, -0.755287485064271680, -0.755254714438498230, +-0.755221941924588020, -0.755189167522622990, -0.755156391232684740, -0.755123613054855760, -0.755090832989217860, -0.755058051035852770, -0.755025267194842310, -0.754992481466268960, +-0.754959693850214440, -0.754926904346760570, -0.754894112955989180, -0.754861319677982980, -0.754828524512823230, -0.754795727460592310, -0.754762928521371830, -0.754730127695244170, +-0.754697324982291360, -0.754664520382594790, -0.754631713896237290, -0.754598905523300440, -0.754566095263866420, -0.754533283118016820, -0.754500469085834350, -0.754467653167400610, +-0.754434835362797870, -0.754402015672107630, -0.754369194095412700, -0.754336370632794790, -0.754303545284335960, -0.754270718050117920, -0.754237888930223480, -0.754205057924734130, +-0.754172225033732270, -0.754139390257299590, -0.754106553595518700, -0.754073715048471430, -0.754040874616239480, -0.754008032298905780, -0.753975188096551950, -0.753942342009260140, +-0.753909494037112160, -0.753876644180190740, -0.753843792438577690, -0.753810938812355170, -0.753778083301605120, -0.753745225906410020, -0.753712366626851930, -0.753679505463012880, +-0.753646642414974810, -0.753613777482820320, -0.753580910666631460, -0.753548041966490390, -0.753515171382478920, -0.753482298914679770, -0.753449424563174870, -0.753416548328046050, +-0.753383670209376240, -0.753350790207247160, -0.753317908321741170, -0.753285024552940220, -0.753252138900926900, -0.753219251365783160, -0.753186361947591370, -0.753153470646433450, +-0.753120577462392030, -0.753087682395549240, -0.753054785445987250, -0.753021886613787990, -0.752988985899034290, -0.752956083301808080, -0.752923178822191730, -0.752890272460267070, +-0.752857364216117150, -0.752824454089823680, -0.752791542081469260, -0.752758628191135480, -0.752725712418905510, -0.752692794764861280, -0.752659875229084730, -0.752626953811658890, +-0.752594030512665490, -0.752561105332187120, -0.752528178270305710, -0.752495249327104100, -0.752462318502664430, -0.752429385797068860, -0.752396451210399660, -0.752363514742739550, +-0.752330576394170670, -0.752297636164775300, -0.752264694054635590, -0.752231750063834470, -0.752198804192453880, -0.752165856440576430, -0.752132906808283930, -0.752099955295659430, +-0.752067001902785080, -0.752034046629743050, -0.752001089476616040, -0.751968130443486320, -0.751935169530436380, -0.751902206737548150, -0.751869242064904690, -0.751836275512588140, +-0.751803307080680880, -0.751770336769265080, -0.751737364578423770, -0.751704390508239010, -0.751671414558793270, -0.751638436730168720, -0.751605457022448410, -0.751572475435714370, +-0.751539491970049210, -0.751506506625534980, -0.751473519402254820, -0.751440530300290790, -0.751407539319725260, -0.751374546460641060, -0.751341551723120560, -0.751308555107246150, +-0.751275556613100080, -0.751242556240765410, -0.751209553990324300, -0.751176549861859330, -0.751143543855452680, -0.751110535971187600, -0.751077526209146030, -0.751044514569410680, +-0.751011501052063710, -0.750978485657188390, -0.750945468384866750, -0.750912449235181520, -0.750879428208214850, -0.750846405304049780, -0.750813380522768910, -0.750780353864454190, +-0.750747325329188860, -0.750714294917055210, -0.750681262628135840, -0.750648228462513110, -0.750615192420269970, -0.750582154501489020, -0.750549114706252520, -0.750516073034642960, +-0.750483029486743500, -0.750449984062636520, -0.750416936762404620, -0.750383887586129950, -0.750350836533896000, -0.750317783605784940, -0.750284728801879350, -0.750251672122261630, +-0.750218613567015140, -0.750185553136222040, -0.750152490829965050, -0.750119426648326540, -0.750086360591389780, -0.750053292659237150, -0.750020222851950910, -0.749987151169614450, +-0.749954077612310140, -0.749921002180120590, -0.749887924873128280, -0.749854845691416360, -0.749821764635067440, -0.749788681704164130, -0.749755596898788680, -0.749722510219024580, +-0.749689421664954340, -0.749656331236660420, -0.749623238934225330, -0.749590144757732560, -0.749557048707264360, -0.749523950782903570, -0.749490850984732560, -0.749457749312834820, +-0.749424645767292620, -0.749391540348188560, -0.749358433055605900, -0.749325323889627140, -0.749292212850335090, -0.749259099937812260, -0.749225985152141890, -0.749192868493406610, +-0.749159749961689210, -0.749126629557072100, -0.749093507279638640, -0.749060383129471430, -0.749027257106653410, -0.748994129211266850, -0.748960999443395230, -0.748927867803121150, +-0.748894734290527330, -0.748861598905696480, -0.748828461648711860, -0.748795322519656080, -0.748762181518611850, -0.748729038645662200, -0.748695893900890200, -0.748662747284378320, +-0.748629598796209380, -0.748596448436466670, -0.748563296205232880, -0.748530142102590830, -0.748496986128623030, -0.748463828283413180, -0.748430668567043770, -0.748397506979597620, +-0.748364343521157440, -0.748331178191806720, -0.748298010991627960, -0.748264841920704300, -0.748231670979118140, -0.748198498166953160, -0.748165323484291880, -0.748132146931217320, +-0.748098968507812100, -0.748065788214159810, -0.748032606050343050, -0.747999422016444430, -0.747966236112547530, -0.747933048338734970, -0.747899858695089900, -0.747866667181694920, +-0.747833473798633520, -0.747800278545988410, -0.747767081423842630, -0.747733882432278900, -0.747700681571380700, -0.747667478841230750, -0.747634274241912200, -0.747601067773507650, +-0.747567859436100710, -0.747534649229774080, -0.747501437154610810, -0.747468223210693730, -0.747435007398106420, -0.747401789716931500, -0.747368570167251890, -0.747335348749151080, +-0.747302125462711910, -0.747268900308017400, -0.747235673285150390, -0.747202444394194480, -0.747169213635232480, -0.747135981008347440, -0.747102746513622180, -0.747069510151140310, +-0.747036271920984650, -0.747003031823238350, -0.746969789857984120, -0.746936546025305680, -0.746903300325286070, -0.746870052758008110, -0.746836803323554620, -0.746803552022009540, +-0.746770298853455470, -0.746737043817975450, -0.746703786915653090, -0.746670528146571200, -0.746637267510813050, -0.746604005008461470, -0.746570740639600160, -0.746537474404311950, +-0.746504206302680110, -0.746470936334787450, -0.746437664500717690, -0.746404390800553870, -0.746371115234378930, -0.746337837802276030, -0.746304558504328750, -0.746271277340620150, +-0.746237994311233280, -0.746204709416251170, -0.746171422655757640, -0.746138134029835420, -0.746104843538567990, -0.746071551182038050, -0.746038256960329660, -0.746004960873525520, +-0.745971662921708690, -0.745938363104962980, -0.745905061423371430, -0.745871757877017210, -0.745838452465983350, -0.745805145190353570, -0.745771836050210910, -0.745738525045638760, +-0.745705212176719920, -0.745671897443538350, -0.745638580846177070, -0.745605262384719360, -0.745571942059248150, -0.745538619869847370, -0.745505295816600080, -0.745471969899589530, +-0.745438642118898760, -0.745405312474611730, -0.745371980966811340, -0.745338647595580770, -0.745305312361003840, -0.745271975263163580, -0.745238636302143490, -0.745205295478026500, +-0.745171952790896540, -0.745138608240836660, -0.745105261827930240, -0.745071913552260430, -0.745038563413911170, -0.745005211412965500, -0.744971857549506680, -0.744938501823617980, +-0.744905144235383340, -0.744871784784885800, -0.744838423472208970, -0.744805060297435540, -0.744771695260649900, -0.744738328361934990, -0.744704959601373950, -0.744671588979050840, +-0.744638216495048690, -0.744604842149451110, -0.744571465942341030, -0.744538087873802600, -0.744504707943918990, -0.744471326152773560, -0.744437942500449590, -0.744404556987031010, +-0.744371169612601080, -0.744337780377243190, -0.744304389281040480, -0.744270996324077230, -0.744237601506436360, -0.744204204828201600, -0.744170806289455980, -0.744137405890283650, +-0.744104003630767790, -0.744070599510991640, -0.744037193531039250, -0.744003785690994010, -0.743970375990939180, -0.743936964430958140, -0.743903551011135030, -0.743870135731553030, +-0.743836718592295610, -0.743803299593446150, -0.743769878735088710, -0.743736456017306650, -0.743703031440183350, -0.743669605003802190, -0.743636176708247440, -0.743602746553602150, +-0.743569314539950010, -0.743535880667374300, -0.743502444935959180, -0.743469007345787910, -0.743435567896944090, -0.743402126589511210, -0.743368683423573100, -0.743335238399213450, +-0.743301791516515320, -0.743268342775563080, -0.743234892176439900, -0.743201439719229580, -0.743167985404015300, -0.743134529230881300, -0.743101071199911090, -0.743067611311188150, +-0.743034149564795960, -0.743000685960818590, -0.742967220499339610, -0.742933753180442520, -0.742900284004210710, -0.742866812970728540, -0.742833340080079290, -0.742799865332346650, +-0.742766388727614140, -0.742732910265966000, -0.742699429947485500, -0.742665947772256140, -0.742632463740362180, -0.742598977851887110, -0.742565490106914640, -0.742532000505528030, +-0.742498509047811780, -0.742465015733849270, -0.742431520563724190, -0.742398023537520050, -0.742364524655321210, -0.742331023917210950, -0.742297521323273090, -0.742264016873591230, +-0.742230510568249620, -0.742197002407331660, -0.742163492390921280, -0.742129980519101840, -0.742096466791957620, -0.742062951209572440, -0.742029433772029570, -0.741995914479413270, +-0.741962393331807250, -0.741928870329295220, -0.741895345471960790, -0.741861818759888210, -0.741828290193161210, -0.741794759771863380, -0.741761227496078310, -0.741727693365890620, +-0.741694157381383560, -0.741660619542641180, -0.741627079849746960, -0.741593538302785290, -0.741559994901839770, -0.741526449646994320, -0.741492902538332330, -0.741459353575938510, +-0.741425802759896220, -0.741392250090289530, -0.741358695567201800, -0.741325139190717740, -0.741291580960920740, -0.741258020877894610, -0.741224458941723620, -0.741190895152491480, +-0.741157329510282130, -0.741123762015179150, -0.741090192667267060, -0.741056621466629540, -0.741023048413350430, -0.740989473507513320, -0.740955896749202920, -0.740922318138502730, +-0.740888737675496900, -0.740855155360268690, -0.740821571192903040, -0.740787985173483430, -0.740754397302093800, -0.740720807578818090, -0.740687216003740430, -0.740653622576944780, +-0.740620027298514840, -0.740586430168535090, -0.740552831187089260, -0.740519230354261370, -0.740485627670135040, -0.740452023134794970, -0.740418416748324870, -0.740384808510808680, +-0.740351198422330330, -0.740317586482974190, -0.740283972692823980, -0.740250357051963960, -0.740216739560477730, -0.740183120218449900, -0.740149499025964270, -0.740115875983104910, +-0.740082251089955620, -0.740048624346600900, -0.740014995753124680, -0.739981365309610780, -0.739947733016143580, -0.739914098872807120, -0.739880462879685340, -0.739846825036862280, +-0.739813185344422310, -0.739779543802449480, -0.739745900411027720, -0.739712255170240860, -0.739678608080173830, -0.739644959140910110, -0.739611308352533970, -0.739577655715129460, +-0.739544001228780950, -0.739510344893572480, -0.739476686709588100, -0.739443026676911860, -0.739409364795628240, -0.739375701065821180, -0.739342035487574600, -0.739308368060973220, +-0.739274698786100970, -0.739241027663041890, -0.739207354691880040, -0.739173679872700000, -0.739140003205585930, -0.739106324690621760, -0.739072644327891440, -0.739038962117479770, +-0.739005278059470690, -0.738971592153948590, -0.738937904400997050, -0.738904214800701120, -0.738870523353144630, -0.738836830058411830, -0.738803134916586670, -0.738769437927753960, +-0.738735739091997630, -0.738702038409401960, -0.738668335880050990, -0.738634631504029420, -0.738600925281421180, -0.738567217212310450, -0.738533507296781910, -0.738499795534919620, +-0.738466081926807850, -0.738432366472530520, -0.738398649172172680, -0.738364930025818160, -0.738331209033551320, -0.738297486195456100, -0.738263761511617540, -0.738230034982119590, +-0.738196306607046490, -0.738162576386482420, -0.738128844320512070, -0.738095110409219710, -0.738061374652689620, -0.738027637051005710, -0.737993897604252940, -0.737960156312515550, +-0.737926413175877370, -0.737892668194423560, -0.737858921368238050, -0.737825172697405220, -0.737791422182009100, -0.737757669822134750, -0.737723915617866320, -0.737690159569288070, +-0.737656401676484050, -0.737622641939539300, -0.737588880358538090, -0.737555116933564570, -0.737521351664703010, -0.737487584552038330, -0.737453815595654700, -0.737420044795636500, +-0.737386272152068090, -0.737352497665034080, -0.737318721334618840, -0.737284943160906540, -0.737251163143982200, -0.737217381283930000, -0.737183597580834180, -0.737149812034779250, +-0.737116024645849910, -0.737082235414130650, -0.737048444339705840, -0.737014651422659430, -0.736980856663076890, -0.736947060061042160, -0.736913261616639730, -0.736879461329953860, +-0.736845659201069590, -0.736811855230071200, -0.736778049417043170, -0.736744241762069760, -0.736710432265236030, -0.736676620926626220, -0.736642807746324850, -0.736608992724416160, +-0.736575175860985310, -0.736541357156116570, -0.736507536609893990, -0.736473714222402930, -0.736439889993727670, -0.736406063923952580, -0.736372236013162040, -0.736338406261441310, +-0.736304574668874450, -0.736270741235546260, -0.736236905961540790, -0.736203068846943420, -0.736169229891838420, -0.736135389096310270, -0.736101546460443350, -0.736067701984322920, +-0.736033855668033250, -0.736000007511658950, -0.735966157515284270, -0.735932305678994480, -0.735898452002873960, -0.735864596487006970, -0.735830739131478890, -0.735796879936373880, +-0.735763018901776640, -0.735729156027771670, -0.735695291314444000, -0.735661424761878120, -0.735627556370158750, -0.735593686139370150, -0.735559814069597580, -0.735525940160925540, +-0.735492064413438620, -0.735458186827221310, -0.735424307402358760, -0.735390426138935460, -0.735356543037036130, -0.735322658096745130, -0.735288771318147740, -0.735254882701328330, +-0.735220992246371610, -0.735187099953362620, -0.735153205822385860, -0.735119309853526140, -0.735085412046867840, -0.735051512402496220, -0.735017610920496000, -0.734983707600951550, +-0.734949802443947700, -0.734915895449569480, -0.734881986617901720, -0.734848075949028790, -0.734814163443035520, -0.734780249100007050, -0.734746332920028000, -0.734712414903183060, +-0.734678495049556850, -0.734644573359234720, -0.734610649832301180, -0.734576724468840590, -0.734542797268938560, -0.734508868232679580, -0.734474937360148350, -0.734441004651429470, +-0.734407070106608440, -0.734373133725769730, -0.734339195508998180, -0.734305255456378370, -0.734271313567995690, -0.734237369843934730, -0.734203424284280310, -0.734169476889117050, +-0.734135527658530410, -0.734101576592604890, -0.734067623691425530, -0.734033668955076820, -0.733999712383644140, -0.733965753977212200, -0.733931793735865920, -0.733897831659689800, +-0.733863867748769440, -0.733829902003189430, -0.733795934423034370, -0.733761965008389750, -0.733727993759340170, -0.733694020675970670, -0.733660045758365850, -0.733626069006611090, +-0.733592090420791320, -0.733558110000991250, -0.733524127747295580, -0.733490143659789820, -0.733456157738558880, -0.733422169983687370, -0.733388180395260210, -0.733354188973362910, +-0.733320195718080160, -0.733286200629496900, -0.733252203707697840, -0.733218204952768570, -0.733184204364793810, -0.733150201943858270, -0.733116197690047430, -0.733082191603446120, +-0.733048183684139380, -0.733014173932211800, -0.732980162347749100, -0.732946148930836090, -0.732912133681557610, -0.732878116599998570, -0.732844097686244480, -0.732810076940380140, +-0.732776054362490600, -0.732742029952660690, -0.732708003710976000, -0.732673975637521240, -0.732639945732381670, -0.732605913995641790, -0.732571880427387520, -0.732537845027703470, +-0.732503807796674570, -0.732469768734386410, -0.732435727840923810, -0.732401685116371940, -0.732367640560815490, -0.732333594174340410, -0.732299545957031170, -0.732265495908973160, +-0.732231444030251090, -0.732197390320950660, -0.732163334781156800, -0.732129277410954570, -0.732095218210428890, -0.732061157179665470, -0.732027094318749130, -0.731993029627765020, +-0.731958963106798090, -0.731924894755934030, -0.731890824575257780, -0.731856752564854380, -0.731822678724808770, -0.731788603055206880, -0.731754525556133520, -0.731720446227673400, +-0.731686365069912580, -0.731652282082935760, -0.731618197266828310, -0.731584110621675050, -0.731550022147561820, -0.731515931844573420, -0.731481839712795350, -0.731447745752312310, +-0.731413649963210230, -0.731379552345573950, -0.731345452899488820, -0.731311351625039910, -0.731277248522312680, -0.731243143591392530, -0.731209036832364380, -0.731174928245313380, +-0.731140817830325360, -0.731106705587485360, -0.731072591516878310, -0.731038475618589920, -0.731004357892705460, -0.730970238339310190, -0.730936116958488810, -0.730901993750327610, +-0.730867868714911270, -0.730833741852325410, -0.730799613162654850, -0.730765482645985510, -0.730731350302402440, -0.730697216131991120, -0.730663080134836380, -0.730628942311024270, +-0.730594802660639810, -0.730560661183768280, -0.730526517880494830, -0.730492372750905390, -0.730458225795085010, -0.730424077013118840, -0.730389926405092700, -0.730355773971091750, +-0.730321619711201350, -0.730287463625506670, -0.730253305714093640, -0.730219145977047290, -0.730184984414453010, -0.730150821026396060, -0.730116655812962370, -0.730082488774236980, +-0.730048319910305390, -0.730014149221252740, -0.729979976707164970, -0.729945802368127340, -0.729911626204225120, -0.729877448215543570, -0.729843268402168620, -0.729809086764185540, +-0.729774903301679490, -0.729740718014736500, -0.729706530903441620, -0.729672341967880440, -0.729638151208138130, -0.729603958624300830, -0.729569764216453590, -0.729535567984681890, +-0.729501369929070890, -0.729467170049706850, -0.729432968346674930, -0.729398764820060500, -0.729364559469948940, -0.729330352296426290, -0.729296143299577700, -0.729261932479488780, +-0.729227719836244680, -0.729193505369931660, -0.729159289080634760, -0.729125070968439810, -0.729090851033431740, -0.729056629275696920, -0.729022405695320510, -0.728988180292387770, +-0.728953953066984850, -0.728919724019197020, -0.728885493149110000, -0.728851260456808920, -0.728817025942379960, -0.728782789605908370, -0.728748551447479960, -0.728714311467179690, +-0.728680069665094130, -0.728645826041308230, -0.728611580595907920, -0.728577333328978230, -0.728543084240605540, -0.728508833330875130, -0.728474580599872690, -0.728440326047683500, +-0.728406069674393700, -0.728371811480088780, -0.728337551464854020, -0.728303289628775770, -0.728269025971939210, -0.728234760494430140, -0.728200493196333840, -0.728166224077736570, +-0.728131953138723700, -0.728097680379381050, -0.728063405799793890, -0.728029129400048490, -0.727994851180230330, -0.727960571140425010, -0.727926289280717900, -0.727892005601195380, +-0.727857720101942830, -0.727823432783046060, -0.727789143644590350, -0.727754852686662070, -0.727720559909346700, -0.727686265312729620, -0.727651968896897210, -0.727617670661934830, +-0.727583370607928330, -0.727549068734962940, -0.727514765043125400, -0.727480459532500840, -0.727446152203175100, -0.727411843055233760, -0.727377532088762990, -0.727343219303848490, +-0.727308904700575960, -0.727274588279030800, -0.727240270039299470, -0.727205949981467590, -0.727171628105620750, -0.727137304411844540, -0.727102978900225240, -0.727068651570848660, +-0.727034322423800510, -0.726999991459166050, -0.726965658677032000, -0.726931324077483950, -0.726896987660607060, -0.726862649426488150, -0.726828309375212480, -0.726793967506866200, +-0.726759623821534580, -0.726725278319304220, -0.726690931000260720, -0.726656581864489890, -0.726622230912077230, -0.726587878143109320, -0.726553523557671780, -0.726519167155850410, +-0.726484808937730710, -0.726450448903399490, -0.726416087052942030, -0.726381723386444240, -0.726347357903992070, -0.726312990605671670, -0.726278621491568850, -0.726244250561769110, +-0.726209877816359040, -0.726175503255424350, -0.726141126879050860, -0.726106748687324280, -0.726072368680331090, -0.726037986858157010, -0.726003603220887970, -0.725969217768609560, +-0.725934830501408500, -0.725900441419370270, -0.725866050522581020, -0.725831657811126350, -0.725797263285092750, -0.725762866944566040, -0.725728468789632150, -0.725694068820376790, +-0.725659667036886560, -0.725625263439247160, -0.725590858027544310, -0.725556450801864590, -0.725522041762293850, -0.725487630908917880, -0.725453218241822520, -0.725418803761094470, +-0.725384387466819440, -0.725349969359083470, -0.725315549437972160, -0.725281127703572340, -0.725246704155969700, -0.725212278795250300, -0.725177851621499950, -0.725143422634805250, +-0.725108991835251900, -0.725074559222926180, -0.725040124797913690, -0.725005688560301230, -0.724971250510174530, -0.724936810647619390, -0.724902368972722530, -0.724867925485569780, +-0.724833480186247160, -0.724799033074840620, -0.724764584151436740, -0.724730133416121360, -0.724695680868980840, -0.724661226510100680, -0.724626770339567680, -0.724592312357467790, +-0.724557852563887160, -0.724523390958911720, -0.724488927542627950, -0.724454462315121890, -0.724419995276479600, -0.724385526426787110, -0.724351055766131120, -0.724316583294597470, +-0.724282109012272410, -0.724247632919241660, -0.724213155015592250, -0.724178675301409890, -0.724144193776780520, -0.724109710441790950, -0.724075225296527240, -0.724040738341075300, +-0.724006249575521290, -0.723971758999951920, -0.723937266614453230, -0.723902772419111380, -0.723868276414012190, -0.723833778599242690, -0.723799278974888830, -0.723764777541036630, +-0.723730274297772150, -0.723695769245182420, -0.723661262383353150, -0.723626753712370840, -0.723592243232321300, -0.723557730943291460, -0.723523216845367250, -0.723488700938634710, +-0.723454183223180670, -0.723419663699091280, -0.723385142366452680, -0.723350619225350930, -0.723316094275872960, -0.723281567518104680, -0.723247038952132600, -0.723212508578042420, +-0.723177976395921520, -0.723143442405855490, -0.723108906607930920, -0.723074369002233870, -0.723039829588851050, -0.723005288367868700, -0.722970745339373110, -0.722936200503450420, +-0.722901653860187570, -0.722867105409670470, -0.722832555151985410, -0.722798003087219200, -0.722763449215457990, -0.722728893536788150, -0.722694336051295740, -0.722659776759067900, +-0.722625215660190560, -0.722590652754750210, -0.722556088042832780, -0.722521521524525650, -0.722486953199914520, -0.722452383069086100, -0.722417811132126440, -0.722383237389122580, +-0.722348661840160560, -0.722314084485326970, -0.722279505324707750, -0.722244924358390160, -0.722210341586460250, -0.722175757009004380, -0.722141170626108940, -0.722106582437860740, +-0.722071992444346280, -0.722037400645651360, -0.722002807041863370, -0.721968211633068240, -0.721933614419352660, -0.721899015400802810, -0.721864414577505610, -0.721829811949547430, +-0.721795207517014650, -0.721760601279993640, -0.721725993238571340, -0.721691383392834120, -0.721656771742868460, -0.721622158288760530, -0.721587543030597470, -0.721552925968465650, +-0.721518307102451460, -0.721483686432641160, -0.721449063959122010, -0.721414439681980160, -0.721379813601301880, -0.721345185717174430, -0.721310556029684080, -0.721275924538917200, +-0.721241291244960280, -0.721206656147900470, -0.721172019247823930, -0.721137380544817350, -0.721102740038967130, -0.721068097730360290, -0.721033453619083110, -0.720998807705222510, +-0.720964159988864430, -0.720929510470096350, -0.720894859149004310, -0.720860206025675240, -0.720825551100195420, -0.720790894372651980, -0.720756235843131310, -0.720721575511719670, +-0.720686913378504430, -0.720652249443571980, -0.720617583707008790, -0.720582916168901470, -0.720548246829337050, -0.720513575688402130, -0.720478902746183090, -0.720444228002766640, +-0.720409551458239930, -0.720374873112689220, -0.720340192966201440, -0.720305511018862870, -0.720270827270760750, -0.720236141721981580, -0.720201454372612180, -0.720166765222738700, +-0.720132074272448630, -0.720097381521828450, -0.720062686970964430, -0.720027990619944050, -0.719993292468853690, -0.719958592517780050, -0.719923890766809630, -0.719889187216029900, +-0.719854481865527030, -0.719819774715388050, -0.719785065765699340, -0.719750355016548270, -0.719715642468021330, -0.719680928120205230, -0.719646211973186460, -0.719611494027052600, +-0.719576774281889930, -0.719542052737785260, -0.719507329394825310, -0.719472604253097230, -0.719437877312687600, -0.719403148573683370, -0.719368418036170910, -0.719333685700237810, +-0.719298951565970460, -0.719264215633455330, -0.719229477902780020, -0.719194738374031030, -0.719159997047295160, -0.719125253922659020, -0.719090509000209990, -0.719055762280034760, +-0.719021013762220160, -0.718986263446852680, -0.718951511334019800, -0.718916757423808230, -0.718882001716304670, -0.718847244211595850, -0.718812484909769230, -0.718777723810911430, +-0.718742960915109250, -0.718708196222449410, -0.718673429733019290, -0.718638661446905800, -0.718603891364195220, -0.718569119484975150, -0.718534345809332400, -0.718499570337353680, +-0.718464793069125810, -0.718430014004736270, -0.718395233144271670, -0.718360450487819050, -0.718325666035464880, -0.718290879787296890, -0.718256091743401770, -0.718221301903866350, +-0.718186510268777330, -0.718151716838222430, -0.718116921612288240, -0.718082124591061690, -0.718047325774629600, -0.718012525163079340, -0.717977722756497960, -0.717942918554971830, +-0.717908112558588770, -0.717873304767435490, -0.717838495181598810, -0.717803683801165660, -0.717768870626223630, -0.717734055656859440, -0.717699238893160010, -0.717664420335212270, +-0.717629599983103720, -0.717594777836921270, -0.717559953896751760, -0.717525128162682100, -0.717490300634799900, -0.717455471313191980, -0.717420640197945380, -0.717385807289146920, +-0.717350972586884180, -0.717316136091244120, -0.717281297802313640, -0.717246457720179590, -0.717211615844929650, -0.717176772176650770, -0.717141926715429650, -0.717107079461353990, +-0.717072230414510630, -0.717037379574986700, -0.717002526942868920, -0.716967672518245340, -0.716932816301202420, -0.716897958291827450, -0.716863098490207350, -0.716828236896429830, +-0.716793373510581700, -0.716758508332750010, -0.716723641363021910, -0.716688772601485000, -0.716653902048226100, -0.716619029703332470, -0.716584155566890920, -0.716549279638989290, +-0.716514401919714490, -0.716479522409153360, -0.716444641107393700, -0.716409758014522560, -0.716374873130626980, -0.716339986455793780, -0.716305097990111110, -0.716270207733665560, +-0.716235315686544530, -0.716200421848834920, -0.716165526220624570, -0.716130628802000400, -0.716095729593049680, -0.716060828593859220, -0.716025925804517070, -0.715991021225110160, +-0.715956114855725630, -0.715921206696450430, -0.715886296747372700, -0.715851385008579140, -0.715816471480156810, -0.715781556162193630, -0.715746639054776530, -0.715711720157992780, +-0.715676799471929530, -0.715641876996674590, -0.715606952732314780, -0.715572026678937820, -0.715537098836630300, -0.715502169205480490, -0.715467237785575190, -0.715432304577001800, +-0.715397369579847340, -0.715362432794199750, -0.715327494220146080, -0.715292553857773680, -0.715257611707169620, -0.715222667768421800, -0.715187722041617400, -0.715152774526843340, +-0.715117825224187540, -0.715082874133737280, -0.715047921255579810, -0.715012966589802180, -0.714978010136492540, -0.714943051895737810, -0.714908091867625490, -0.714873130052242620, +-0.714838166449677240, -0.714803201060016490, -0.714768233883347650, -0.714733264919757970, -0.714698294169335390, -0.714663321632167060, -0.714628347308340460, -0.714593371197942750, +-0.714558393301061860, -0.714523413617784930, -0.714488432148199570, -0.714453448892392820, -0.714418463850452710, -0.714383477022466410, -0.714348488408521170, -0.714313498008705030, +-0.714278505823105040, -0.714243511851808900, -0.714208516094903540, -0.714173518552477350, -0.714138519224617240, -0.714103518111410930, -0.714068515212945450, -0.714033510529309080, +-0.713998504060588850, -0.713963495806872350, -0.713928485768246860, -0.713893473944800410, -0.713858460336620370, -0.713823444943794130, -0.713788427766408830, -0.713753408804552960, +-0.713718388058313450, -0.713683365527777780, -0.713648341213033890, -0.713613315114169260, -0.713578287231271260, -0.713543257564427270, -0.713508226113725440, -0.713473192879253040, +-0.713438157861097650, -0.713403121059346560, -0.713368082474087890, -0.713333042105409150, -0.713297999953397710, -0.713262956018141050, -0.713227910299727320, -0.713192862798243680, +-0.713157813513777940, -0.713122762446417370, -0.713087709596250230, -0.713052654963363790, -0.713017598547845410, -0.712982540349783370, -0.712947480369264920, -0.712912418606377880, +-0.712877355061209420, -0.712842289733847780, -0.712807222624380570, -0.712772153732895260, -0.712737083059479250, -0.712702010604220780, -0.712666936367207350, -0.712631860348526550, +-0.712596782548265860, -0.712561702966513440, -0.712526621603356780, -0.712491538458883580, -0.712456453533181210, -0.712421366826338050, -0.712386278338441370, -0.712351188069579200, +-0.712316096019838580, -0.712281002189308010, -0.712245906578075070, -0.712210809186226920, -0.712175710013852160, -0.712140609061038040, -0.712105506327872510, -0.712070401814442810, +-0.712035295520837440, -0.712000187447143770, -0.711965077593449850, -0.711929965959842700, -0.711894852546411050, -0.711859737353242260, -0.711824620380424040, -0.711789501628044110, +-0.711754381096190600, -0.711719258784951240, -0.711684134694413610, -0.711649008824665420, -0.711613881175795050, -0.711578751747889870, -0.711543620541037590, -0.711508487555326590, +-0.711473352790844230, -0.711438216247678670, -0.711403077925917170, -0.711367937825648220, -0.711332795946959530, -0.711297652289938800, -0.711262506854673630, -0.711227359641252500, +-0.711192210649763010, -0.711157059880292990, -0.711121907332930010, -0.711086753007762580, -0.711051596904878180, -0.711016439024364840, -0.710981279366310170, -0.710946117930802530, +-0.710910954717929530, -0.710875789727778980, -0.710840622960439150, -0.710805454415997850, -0.710770284094542900, -0.710735111996161910, -0.710699938120943450, -0.710664762468975140, +-0.710629585040344900, -0.710594405835140440, -0.710559224853450240, -0.710524042095362020, -0.710488857560963690, -0.710453671250342870, -0.710418483163588130, -0.710383293300787310, +-0.710348101662028110, -0.710312908247398460, -0.710277713056986840, -0.710242516090880960, -0.710207317349168310, -0.710172116831937930, -0.710136914539277080, -0.710101710471274020, +-0.710066504628016350, -0.710031297009592670, -0.709996087616090790, -0.709960876447598750, -0.709925663504204160, -0.709890448785995720, -0.709855232293061240, -0.709820014025488550, +-0.709784793983365580, -0.709749572166780920, -0.709714348575822380, -0.709679123210577910, -0.709643896071135320, -0.709608667157583310, -0.709573436470009700, -0.709538204008502430, +-0.709502969773149310, -0.709467733764039150, -0.709432495981259570, -0.709397256424898480, -0.709362015095044600, -0.709326771991785730, -0.709291527115209820, -0.709256280465404790, +-0.709221032042459450, -0.709185781846461420, -0.709150529877499050, -0.709115276135659940, -0.709080020621033040, -0.709044763333706030, -0.709009504273767190, -0.708974243441304110, +-0.708938980836405830, -0.708903716459160170, -0.708868450309655170, -0.708833182387978660, -0.708797912694219660, -0.708762641228465770, -0.708727367990804940, -0.708692092981326070, +-0.708656816200117000, -0.708621537647265760, -0.708586257322860400, -0.708550975226989730, -0.708515691359741680, -0.708480405721204410, -0.708445118311465730, -0.708409829130614680, +-0.708374538178738970, -0.708339245455926860, -0.708303950962266390, -0.708268654697846390, -0.708233356662754670, -0.708198056857079590, -0.708162755280909110, -0.708127451934332020, +-0.708092146817436260, -0.708056839930309880, -0.708021531273041680, -0.707986220845719720, -0.707950908648432130, -0.707915594681266970, -0.707880278944313050, -0.707844961437658630, +-0.707809642161391750, -0.707774321115600350, -0.707738998300373460, -0.707703673715799120, -0.707668347361965600, -0.707633019238960940, -0.707597689346874060, -0.707562357685792900, +-0.707527024255805830, -0.707491689057000880, -0.707456352089467110, -0.707421013353292330, -0.707385672848565130, -0.707350330575373440, -0.707314986533806200, -0.707279640723951440, +-0.707244293145897320, -0.707208943799732760, -0.707173592685545800, -0.707138239803424940, -0.707102885153458200, -0.707067528735734420, -0.707032170550341950, -0.706996810597368960, +-0.706961448876903710, -0.706926085389035120, -0.706890720133851240, -0.706855353111440650, -0.706819984321891410, -0.706784613765292450, -0.706749241441731900, -0.706713867351298370, +-0.706678491494079800, -0.706643113870165320, -0.706607734479642980, -0.706572353322601040, -0.706536970399128660, -0.706501585709313650, -0.706466199253244830, -0.706430811031010130, +-0.706395421042698700, -0.706360029288398810, -0.706324635768198710, -0.706289240482186780, -0.706253843430452060, -0.706218444613082810, -0.706183044030167300, -0.706147641681794000, +-0.706112237568051750, -0.706076831689029020, -0.706041424044814180, -0.706006014635495500, -0.705970603461162140, -0.705935190521902230, -0.705899775817803940, -0.705864359348956640, +-0.705828941115448360, -0.705793521117367820, -0.705758099354803050, -0.705722675827843430, -0.705687250536577100, -0.705651823481092680, -0.705616394661478300, -0.705580964077823340, +-0.705545531730215950, -0.705510097618744610, -0.705474661743497820, -0.705439224104564720, -0.705403784702033580, -0.705368343535992870, -0.705332900606530980, -0.705297455913737270, +-0.705262009457699790, -0.705226561238507350, -0.705191111256248230, -0.705155659511011670, -0.705120206002885830, -0.705084750731959310, -0.705049293698321140, -0.705013834902059710, +-0.704978374343263820, -0.704942912022021530, -0.704907447938422300, -0.704871982092554530, -0.704836514484506790, -0.704801045114367360, -0.704765573982225720, -0.704730101088170140, +-0.704694626432289310, -0.704659150014671610, -0.704623671835406310, -0.704588191894581770, -0.704552710192286820, -0.704517226728609840, -0.704481741503640070, -0.704446254517465900, +-0.704410765770175810, -0.704375275261859170, -0.704339782992604250, -0.704304288962499860, -0.704268793171634490, -0.704233295620097510, -0.704197796307977190, -0.704162295235362450, +-0.704126792402341550, -0.704091287809004100, -0.704055781455438350, -0.704020273341733230, -0.703984763467977110, -0.703949251834259270, -0.703913738440668400, -0.703878223287293210, +-0.703842706374222080, -0.703807187701544600, -0.703771667269349030, -0.703736145077724080, -0.703700621126759020, -0.703665095416542430, -0.703629567947163030, -0.703594038718709400, +-0.703558507731271150, -0.703522974984936430, -0.703487440479794390, -0.703451904215933400, -0.703416366193443050, -0.703380826412411730, -0.703345284872928240, -0.703309741575081300, +-0.703274196518960390, -0.703238649704653880, -0.703203101132250820, -0.703167550801839680, -0.703131998713509950, -0.703096444867350230, -0.703060889263449120, -0.703025331901896090, +-0.702989772782779630, -0.702954211906188900, -0.702918649272212150, -0.702883084880939310, -0.702847518732458540, -0.702811950826859100, -0.702776381164229470, -0.702740809744659130, +-0.702705236568236800, -0.702669661635051400, -0.702634084945191530, -0.702598506498746780, -0.702562926295805750, -0.702527344336457360, -0.702491760620790330, -0.702456175148894250, +-0.702420587920857710, -0.702384998936769640, -0.702349408196718760, -0.702313815700794760, -0.702278221449086140, -0.702242625441681700, -0.702207027678671050, -0.702171428160142770, +-0.702135826886185920, -0.702100223856889190, -0.702064619072342190, -0.702029012532633720, -0.701993404237852610, -0.701957794188087790, -0.701922182383428740, -0.701886568823964270, +-0.701850953509783330, -0.701815336440974710, -0.701779717617628140, -0.701744097039832200, -0.701708474707675940, -0.701672850621248290, -0.701637224780638840, -0.701601597185936290, +-0.701565967837229460, -0.701530336734607960, -0.701494703878160710, -0.701459069267976630, -0.701423432904144550, -0.701387794786754170, -0.701352154915894420, -0.701316513291654230, +-0.701280869914122420, -0.701245224783388800, -0.701209577899542080, -0.701173929262671410, -0.701138278872865620, -0.701102626730214510, -0.701066972834806680, -0.701031317186731510, +-0.700995659786077810, -0.700960000632935180, -0.700924339727392540, -0.700888677069538720, -0.700853012659463650, -0.700817346497255910, -0.700781678583004890, -0.700746008916799280, +-0.700710337498729020, -0.700674664328882920, -0.700638989407350140, -0.700603312734219610, -0.700567634309581020, -0.700531954133523430, -0.700496272206135970, -0.700460588527507480, +-0.700424903097727760, -0.700389215916885850, -0.700353526985070920, -0.700317836302371880, -0.700282143868878440, -0.700246449684679750, -0.700210753749864970, -0.700175056064522900, +-0.700139356628743490, -0.700103655442615770, -0.700067952506228550, -0.700032247819671770, -0.699996541383034470, -0.699960833196405670, -0.699925123259874550, -0.699889411573530910, +-0.699853698137463680, -0.699817982951762340, -0.699782266016515610, -0.699746547331813630, -0.699710826897745220, -0.699675104714399750, -0.699639380781866160, -0.699603655100234480, +-0.699567927669593750, -0.699532198490033120, -0.699496467561641630, -0.699460734884509330, -0.699425000458725240, -0.699389264284378200, -0.699353526361558450, -0.699317786690354830, +-0.699282045270856800, -0.699246302103153190, -0.699210557187334270, -0.699174810523488950, -0.699139062111706620, -0.699103311952076200, -0.699067560044687950, -0.699031806389630810, +-0.698996050986994020, -0.698960293836866860, -0.698924534939339260, -0.698888774294500360, -0.698853011902439540, -0.698817247763245830, -0.698781481877009390, -0.698745714243819150, +-0.698709944863764370, -0.698674173736934970, -0.698638400863420220, -0.698602626243309490, -0.698566849876691710, -0.698531071763657250, -0.698495291904295160, -0.698459510298694800, +-0.698423726946945320, -0.698387941849136770, -0.698352155005358520, -0.698316366415699830, -0.698280576080249850, -0.698244783999098730, -0.698208990172335730, -0.698173194600050230, +-0.698137397282331370, -0.698101598219269430, -0.698065797410953430, -0.698029994857472640, -0.697994190558917200, -0.697958384515376280, -0.697922576726939360, -0.697886767193695690, +-0.697850955915735430, -0.697815142893147830, -0.697779328126022280, -0.697743511614448140, -0.697707693358515570, -0.697671873358313710, -0.697636051613932270, -0.697600228125460300, +-0.697564402892988040, -0.697528575916604780, -0.697492747196400200, -0.697456916732463350, -0.697421084524884490, -0.697385250573753000, -0.697349414879158250, -0.697313577441189820, +-0.697277738259937660, -0.697241897335491130, -0.697206054667939610, -0.697170210257373250, -0.697134364103881410, -0.697098516207553590, -0.697062666568479150, -0.697026815186748470, +-0.696990962062450590, -0.696955107195675440, -0.696919250586512160, -0.696883392235051020, -0.696847532141381510, -0.696811670305593100, -0.696775806727775170, -0.696739941408018090, +-0.696704074346411130, -0.696668205543043980, -0.696632334998006030, -0.696596462711387530, -0.696560588683277970, -0.696524712913766500, -0.696488835402943600, -0.696452956150898640, +-0.696417075157721220, -0.696381192423500940, -0.696345307948327830, -0.696309421732291600, -0.696273533775481730, -0.696237644077987720, -0.696201752639899920, -0.696165859461307710, +-0.696129964542300920, -0.696094067882968790, -0.696058169483401820, -0.696022269343689490, -0.695986367463921510, -0.695950463844187240, -0.695914558484577170, -0.695878651385180680, +-0.695842742546087250, -0.695806831967387350, -0.695770919649170260, -0.695735005591525900, -0.695699089794543760, -0.695663172258314200, -0.695627252982926600, -0.695591331968471000, +-0.695555409215036670, -0.695519484722714190, -0.695483558491593050, -0.695447630521762950, -0.695411700813313380, -0.695375769366334940, -0.695339836180917100, -0.695303901257149690, +-0.695267964595122080, -0.695232026194924970, -0.695196086056647840, -0.695160144180380520, -0.695124200566212380, -0.695088255214234120, -0.695052308124535220, -0.695016359297205290, +-0.694980408732334690, -0.694944456430013120, -0.694908502390330420, -0.694872546613376050, -0.694836589099240730, -0.694800629848013940, -0.694764668859785610, -0.694728706134645210, +-0.694692741672683360, -0.694656775473989740, -0.694620807538654070, -0.694584837866766060, -0.694548866458416400, -0.694512893313694480, -0.694476918432690330, -0.694440941815493650, +-0.694404963462194820, -0.694368983372883660, -0.694333001547649650, -0.694297017986583500, -0.694261032689774900, -0.694225045657313580, -0.694189056889289340, -0.694153066385792880, +-0.694117074146913590, -0.694081080172741730, -0.694045084463366880, -0.694009087018879530, -0.693973087839369620, -0.693937086924926840, -0.693901084275641120, -0.693865079891602950, +-0.693829073772902040, -0.693793065919628530, -0.693757056331872010, -0.693721045009723200, -0.693685031953271690, -0.693649017162607300, -0.693613000637820720, -0.693576982379001670, +-0.693540962386240190, -0.693504940659625870, -0.693468917199249630, -0.693432892005201080, -0.693396865077570260, -0.693360836416446970, -0.693324806021921810, -0.693288773894084830, +-0.693252740033025730, -0.693216704438834540, -0.693180667111601980, -0.693144628051417630, -0.693108587258371770, -0.693072544732554200, -0.693036500474055520, -0.693000454482965540, +-0.692964406759374100, -0.692928357303371990, -0.692892306115049040, -0.692856253194495290, -0.692820198541800550, -0.692784142157055640, -0.692748084040350490, -0.692712024191775020, +-0.692675962611419170, -0.692639899299373750, -0.692603834255728580, -0.692567767480573800, -0.692531698973999350, -0.692495628736095940, -0.692459556766953480, -0.692423483066662130, +-0.692387407635311700, -0.692351330472993130, -0.692315251579796120, -0.692279170955811150, -0.692243088601127820, -0.692207004515837170, -0.692170918700028890, -0.692134831153793040, +-0.692098741877220420, -0.692062650870401090, -0.692026558133424950, -0.691990463666382170, -0.691954367469363560, -0.691918269542459050, -0.691882169885758790, -0.691846068499352820, +-0.691809965383332060, -0.691773860537786330, -0.691737753962805900, -0.691701645658480910, -0.691665535624901960, -0.691629423862159310, -0.691593310370343000, -0.691557195149543170, +-0.691521078199850650, -0.691484959521355360, -0.691448839114147450, -0.691412716978317740, -0.691376593113956160, -0.691340467521153190, -0.691304340199998760, -0.691268211150583680, +-0.691232080372998100, -0.691195947867332410, -0.691159813633676510, -0.691123677672121350, -0.691087539982756960, -0.691051400565673820, -0.691015259420961760, -0.690979116548711910, +-0.690942971949014330, -0.690906825621959260, -0.690870677567636760, -0.690834527786137960, -0.690798376277552810, -0.690762223041971430, -0.690726068079484780, -0.690689911390182990, +-0.690653752974156430, -0.690617592831495150, -0.690581430962290190, -0.690545267366631690, -0.690509102044609910, -0.690472934996315240, -0.690436766221838360, -0.690400595721269660, +-0.690364423494699510, -0.690328249542217940, -0.690292073863916110, -0.690255896459884060, -0.690219717330212260, -0.690183536474990870, -0.690147353894310920, -0.690111169588262570, +-0.690074983556936310, -0.690038795800422380, -0.690002606318811610, -0.689966415112194480, -0.689930222180660910, -0.689894027524302070, -0.689857831143208200, -0.689821633037469790, +-0.689785433207176890, -0.689749231652420860, -0.689713028373291630, -0.689676823369879900, -0.689640616642275830, -0.689604408190570450, -0.689568198014854030, -0.689531986115217150, +-0.689495772491750090, -0.689459557144543770, -0.689423340073688660, -0.689387121279275150, -0.689350900761393490, -0.689314678520134950, -0.689278454555589670, -0.689242228867847920, +-0.689206001457000950, -0.689169772323139030, -0.689133541466352640, -0.689097308886732040, -0.689061074584368600, -0.689024838559352370, -0.688988600811774040, -0.688952361341723880, +-0.688916120149293150, -0.688879877234572220, -0.688843632597651470, -0.688807386238621370, -0.688771138157573180, -0.688734888354597060, -0.688698636829783720, -0.688662383583223510, +-0.688626128615007600, -0.688589871925226470, -0.688553613513970260, -0.688517353381330350, -0.688481091527397120, -0.688444827952261030, -0.688408562656012690, -0.688372295638743140, +-0.688336026900542960, -0.688299756441502650, -0.688263484261712690, -0.688227210361264220, -0.688190934740247840, -0.688154657398754140, -0.688118378336873390, -0.688082097554697070, +-0.688045815052315430, -0.688009530829819300, -0.687973244887299050, -0.687936957224845940, -0.687900667842550550, -0.687864376740503050, -0.687828083918795020, -0.687791789377516730, +-0.687755493116758990, -0.687719195136612170, -0.687682895437167760, -0.687646594018516020, -0.687610290880747880, -0.687573986023953590, -0.687537679448224750, -0.687501371153651620, +-0.687465061140325130, -0.687428749408335650, -0.687392435957774550, -0.687356120788732540, -0.687319803901300100, -0.687283485295567820, -0.687247164971627190, -0.687210842929568580, +-0.687174519169482910, -0.687138193691460670, -0.687101866495593240, -0.687065537581971090, -0.687029206950684810, -0.686992874601825900, -0.686956540535484720, -0.686920204751752190, +-0.686883867250718820, -0.686847528032476170, -0.686811187097114640, -0.686774844444725140, -0.686738500075398270, -0.686702153989225410, -0.686665806186297130, -0.686629456666704390, +-0.686593105430537750, -0.686556752477888610, -0.686520397808847550, -0.686484041423505500, -0.686447683321953050, -0.686411323504281800, -0.686374961970582120, -0.686338598720944710, +-0.686302233755461290, -0.686265867074222100, -0.686229498677318310, -0.686193128564840490, -0.686156756736880150, -0.686120383193527860, -0.686084007934874670, -0.686047630961011070, +-0.686011252272028860, -0.685974871868018420, -0.685938489749070790, -0.685902105915276560, -0.685865720366727550, -0.685829333103514130, -0.685792944125727330, -0.685756553433457980, +-0.685720161026797450, -0.685683766905836660, -0.685647371070665980, -0.685610973521377230, -0.685574574258061120, -0.685538173280808570, -0.685501770589710180, -0.685465366184857760, +-0.685428960066341910, -0.685392552234253550, -0.685356142688683610, -0.685319731429723580, -0.685283318457464260, -0.685246903771996710, -0.685210487373411500, -0.685174069261800360, +-0.685137649437254080, -0.685101227899863720, -0.685064804649719860, -0.685028379686914430, -0.684991953011538040, -0.684955524623681700, -0.684919094523436240, -0.684882662710893380, +-0.684846229186143800, -0.684809793949278430, -0.684773357000388880, -0.684736918339565960, -0.684700477966900700, -0.684664035882483810, -0.684627592086407330, -0.684591146578761740, +-0.684554699359638420, -0.684518250429127950, -0.684481799787322150, -0.684445347434311960, -0.684408893370188290, -0.684372437595042070, -0.684335980108965130, -0.684299520912048260, +-0.684263060004382530, -0.684226597386058840, -0.684190133057169030, -0.684153667017803780, -0.684117199268054140, -0.684080729808011820, -0.684044258637767630, -0.684007785757412830, +-0.683971311167038240, -0.683934834866735670, -0.683898356856595950, -0.683861877136710430, -0.683825395707169940, -0.683788912568066180, -0.683752427719490190, -0.683715941161533110, +-0.683679452894285890, -0.683642962917840320, -0.683606471232287350, -0.683569977837718220, -0.683533482734223760, -0.683496985921896010, -0.683460487400825770, -0.683423987171103970, +-0.683387485232822560, -0.683350981586072330, -0.683314476230944770, -0.683277969167530590, -0.683241460395921930, -0.683204949916209500, -0.683168437728484790, -0.683131923832838610, +-0.683095408229362990, -0.683058890918148750, -0.683022371899287380, -0.682985851172869700, -0.682949328738987840, -0.682912804597732510, -0.682876278749195210, -0.682839751193466960, +-0.682803221930639580, -0.682766690960804220, -0.682730158284051700, -0.682693623900474170, -0.682657087810162540, -0.682620550013208320, -0.682584010509702300, -0.682547469299736530, +-0.682510926383402160, -0.682474381760790450, -0.682437835431992430, -0.682401287397100260, -0.682364737656204760, -0.682328186209397500, -0.682291633056769320, -0.682255078198412470, +-0.682218521634417980, -0.682181963364877130, -0.682145403389881060, -0.682108841709521800, -0.682072278323890390, -0.682035713233078320, -0.681999146437176630, -0.681962577936277460, +-0.681926007730471740, -0.681889435819850730, -0.681852862204506470, -0.681816286884530110, -0.681779709860012910, -0.681743131131046230, -0.681706550697721900, -0.681669968560131290, +-0.681633384718365760, -0.681596799172516480, -0.681560211922675460, -0.681523622968933870, -0.681487032311383300, -0.681450439950114780, -0.681413845885220580, -0.681377250116791620, +-0.681340652644919720, -0.681304053469695690, -0.681267452591211910, -0.681230850009559520, -0.681194245724829670, -0.681157639737114520, -0.681121032046505310, -0.681084422653093440, +-0.681047811556970250, -0.681011198758227910, -0.680974584256957450, -0.680937968053250580, -0.680901350147198550, -0.680864730538893290, -0.680828109228426400, -0.680791486215889140, +-0.680754861501372770, -0.680718235084969650, -0.680681606966770940, -0.680644977146868340, -0.680608345625352770, -0.680571712402316730, -0.680535077477851470, -0.680498440852048030, +-0.680461802524998990, -0.680425162496795410, -0.680388520767528870, -0.680351877337290740, -0.680315232206173180, -0.680278585374267550, -0.680241936841665560, -0.680205286608458250, +-0.680168634674738200, -0.680131981040596470, -0.680095325706124850, -0.680058668671414510, -0.680022009936557930, -0.679985349501646240, -0.679948687366771170, -0.679912023532024070, +-0.679875357997497320, -0.679838690763282070, -0.679802021829470140, -0.679765351196152780, -0.679728678863422480, -0.679692004831370380, -0.679655329100087970, -0.679618651669667620, +-0.679581972540200590, -0.679545291711778580, -0.679508609184493070, -0.679471924958436340, -0.679435239033699840, -0.679398551410375200, -0.679361862088553870, -0.679325171068328240, +-0.679288478349789670, -0.679251783933029870, -0.679215087818140330, -0.679178390005213410, -0.679141690494340480, -0.679104989285613360, -0.679068286379123310, -0.679031581774963030, +-0.678994875473223680, -0.678958167473996950, -0.678921457777375000, -0.678884746383449420, -0.678848033292312030, -0.678811318504054180, -0.678774602018768380, -0.678737883836546100, +-0.678701163957479150, -0.678664442381658910, -0.678627719109177850, -0.678590994140127580, -0.678554267474599680, -0.678517539112685970, -0.678480809054478610, -0.678444077300069280, +-0.678407343849549700, -0.678370608703011470, -0.678333871860547170, -0.678297133322248060, -0.678260393088205740, -0.678223651158512910, -0.678186907533260830, -0.678150162212541540, +-0.678113415196446410, -0.678076666485068260, -0.678039916078498340, -0.678003163976828580, -0.677966410180150690, -0.677929654688557040, -0.677892897502139210, -0.677856138620989260, +-0.677819378045198540, -0.677782615774859760, -0.677745851810064410, -0.677709086150904420, -0.677672318797471360, -0.677635549749857850, -0.677598779008155570, -0.677562006572455910, +-0.677525232442851570, -0.677488456619434130, -0.677451679102295650, -0.677414899891527480, -0.677378118987222550, -0.677341336389472250, -0.677304552098368600, -0.677267766114003300, +-0.677230978436468840, -0.677194189065856930, -0.677157398002259600, -0.677120605245768450, -0.677083810796476060, -0.677047014654474260, -0.677010216819854850, -0.676973417292709550, +-0.676936616073131050, -0.676899813161210950, -0.676863008557041400, -0.676826202260713990, -0.676789394272321320, -0.676752584591955310, -0.676715773219707440, -0.676678960155670420, +-0.676642145399936060, -0.676605328952596290, -0.676568510813742920, -0.676531690983468550, -0.676494869461864990, -0.676458046249024280, -0.676421221345038130, -0.676384394749999230, +-0.676347566463999290, -0.676310736487130470, -0.676273904819484460, -0.676237071461154080, -0.676200236412231040, -0.676163399672807360, -0.676126561242974770, -0.676089721122826170, +-0.676052879312453280, -0.676016035811947910, -0.675979190621402770, -0.675942343740909560, -0.675905495170560530, -0.675868644910447510, -0.675831792960663200, -0.675794939321299300, +-0.675758083992448080, -0.675721226974201450, -0.675684368266651900, -0.675647507869891580, -0.675610645784012420, -0.675573782009106340, -0.675536916545266040, -0.675500049392583570, +-0.675463180551150840, -0.675426310021060020, -0.675389437802403680, -0.675352563895273650, -0.675315688299761960, -0.675278811015961430, -0.675241932043963770, -0.675205051383861330, +-0.675168169035745950, -0.675131284999710420, -0.675094399275846690, -0.675057511864247010, -0.675020622765003190, -0.674983731978208160, -0.674946839503953730, -0.674909945342332280, +-0.674873049493435630, -0.674836151957356690, -0.674799252734187390, -0.674762351824019890, -0.674725449226946220, -0.674688544943059300, -0.674651638972450950, -0.674614731315213540, +-0.674577821971438900, -0.674540910941220150, -0.674503998224649020, -0.674467083821817640, -0.674430167732818830, -0.674393249957744630, -0.674356330496687310, -0.674319409349738770, +-0.674282486516992070, -0.674245561998539240, -0.674208635794472430, -0.674171707904883680, -0.674134778329866010, -0.674097847069511370, -0.674060914123912220, -0.674023979493160400, +-0.673987043177348920, -0.673950105176569840, -0.673913165490915510, -0.673876224120477870, -0.673839281065350070, -0.673802336325624030, -0.673765389901391900, -0.673728441792746600, +-0.673691491999780180, -0.673654540522585000, -0.673617587361253210, -0.673580632515877740, -0.673543675986550630, -0.673506717773364460, -0.673469757876411060, -0.673432796295783560, +-0.673395833031574240, -0.673358868083875240, -0.673321901452778700, -0.673284933138377780, -0.673247963140764520, -0.673210991460031380, -0.673174018096270420, -0.673137043049574670, +-0.673100066320036380, -0.673063087907747600, -0.673026107812801480, -0.672989126035289930, -0.672952142575305670, -0.672915157432940720, -0.672878170608288250, -0.672841182101440280, +-0.672804191912489410, -0.672767200041527680, -0.672730206488648340, -0.672693211253943430, -0.672656214337505440, -0.672619215739426730, -0.672582215459800240, -0.672545213498718210, +-0.672508209856273130, -0.672471204532557150, -0.672434197527663650, -0.672397188841684530, -0.672360178474712080, -0.672323166426839650, -0.672286152698159170, -0.672249137288763340, +-0.672212120198744320, -0.672175101428195370, -0.672138080977208730, -0.672101058845876790, -0.672064035034291910, -0.672027009542547350, -0.671989982370735150, -0.671952953518948020, +-0.671915922987278200, -0.671878890775818860, -0.671841856884662360, -0.671804821313901180, -0.671767784063627580, -0.671730745133934830, -0.671693704524915390, -0.671656662236661540, +-0.671619618269265750, -0.671582572622821170, -0.671545525297420290, -0.671508476293155130, -0.671471425610119190, -0.671434373248404710, -0.671397319208104190, -0.671360263489310220, +-0.671323206092115820, -0.671286147016613380, -0.671249086262895590, -0.671212023831054720, -0.671174959721184130, -0.671137893933376200, -0.671100826467723510, -0.671063757324318440, +-0.671026686503254250, -0.670989614004623420, -0.670952539828518550, -0.670915463975031880, -0.670878386444257010, -0.670841307236286100, -0.670804226351211730, -0.670767143789126940, +-0.670730059550124440, -0.670692973634296700, -0.670655886041736200, -0.670618796772536330, -0.670581705826789440, -0.670544613204588360, -0.670507518906025330, -0.670470422931193850, +-0.670433325280186400, -0.670396225953095560, -0.670359124950013820, -0.670322022271034660, -0.670284917916250440, -0.670247811885753890, -0.670210704179637460, -0.670173594797994650, +-0.670136483740917830, -0.670099371008499480, -0.670062256600832960, -0.670025140518010880, -0.669988022760125920, -0.669950903327270590, -0.669913782219538230, -0.669876659437021570, +-0.669839534979813190, -0.669802408848005680, -0.669765281041692420, -0.669728151560965990, -0.669691020405919210, -0.669653887576644460, -0.669616753073235430, -0.669579616895784490, +-0.669542479044384460, -0.669505339519127940, -0.669468198320108400, -0.669431055447418320, -0.669393910901150630, -0.669356764681397820, -0.669319616788253470, -0.669282467221810060, +-0.669245315982160190, -0.669208163069397340, -0.669171008483613990, -0.669133852224903180, -0.669096694293357500, -0.669059534689070310, -0.669022373412134330, -0.668985210462642370, +-0.668948045840687120, -0.668910879546361970, -0.668873711579759720, -0.668836541940973190, -0.668799370630094980, -0.668762197647218670, -0.668725022992436750, -0.668687846665842360, +-0.668650668667528090, -0.668613488997587440, -0.668576307656112980, -0.668539124643197540, -0.668501939958934590, -0.668464753603416730, -0.668427565576736990, -0.668390375878988090, +-0.668353184510263490, -0.668315991470656010, -0.668278796760258480, -0.668241600379163690, -0.668204402327465250, -0.668167202605255750, -0.668130001212628220, -0.668092798149675370, +-0.668055593416490900, -0.668018387013167400, -0.667981178939797910, -0.667943969196475250, -0.667906757783292890, -0.667869544700343650, -0.667832329947720240, -0.667795113525516350, +-0.667757895433824690, -0.667720675672738300, -0.667683454242349870, -0.667646231142753120, -0.667609006374040750, -0.667571779936305900, -0.667534551829641280, -0.667497322054140700, +-0.667460090609896640, -0.667422857497002480, -0.667385622715550800, -0.667348386265635420, -0.667311148147349040, -0.667273908360784820, -0.667236666906035450, -0.667199423783194740, +-0.667162178992355530, -0.667124932533610600, -0.667087684407053570, -0.667050434612777350, -0.667013183150874990, -0.666975930021439400, -0.666938675224564290, -0.666901418760342590, +-0.666864160628867220, -0.666826900830231220, -0.666789639364528290, -0.666752376231851130, -0.666715111432293120, -0.666677844965947060, -0.666640576832906670, -0.666603307033264760, +-0.666566035567114690, -0.666528762434549170, -0.666491487635662020, -0.666454211170546260, -0.666416933039294830, -0.666379653242000880, -0.666342371778757990, -0.666305088649659320, +-0.666267803854797450, -0.666230517394266530, -0.666193229268159270, -0.666155939476568930, -0.666118648019588420, -0.666081354897311570, -0.666044060109831420, -0.666006763657240990, +-0.665969465539633430, -0.665932165757102460, -0.665894864309741210, -0.665857561197642720, -0.665820256420899930, -0.665782949979606960, -0.665745641873856540, -0.665708332103742030, +-0.665671020669356350, -0.665633707570793430, -0.665596392808146310, -0.665559076381507800, -0.665521758290971930, -0.665484438536631750, -0.665447117118580400, -0.665409794036910920, +-0.665372469291717340, -0.665335142883092480, -0.665297814811129930, -0.665260485075922390, -0.665223153677564020, -0.665185820616147730, -0.665148485891766890, -0.665111149504514550, +-0.665073811454484630, -0.665036471741770160, -0.664999130366464630, -0.664961787328660850, -0.664924442628452850, -0.664887096265933900, -0.664849748241196800, -0.664812398554335720, +-0.664775047205443560, -0.664737694194613820, -0.664700339521939520, -0.664662983187514710, -0.664625625191432420, -0.664588265533786030, -0.664550904214668670, -0.664513541234174500, +-0.664476176592396330, -0.664438810289427750, -0.664401442325361800, -0.664364072700292630, -0.664326701414313270, -0.664289328467517090, -0.664251953859997360, -0.664214577591847990, +-0.664177199663162240, -0.664139820074033490, -0.664102438824554890, -0.664065055914820460, -0.664027671344923350, -0.663990285114956840, -0.663952897225014830, -0.663915507675190590, +-0.663878116465577710, -0.663840723596269110, -0.663803329067359060, -0.663765932878940700, -0.663728535031107400, -0.663691135523952540, -0.663653734357570140, -0.663616331532053460, +-0.663578927047495880, -0.663541520903990660, -0.663504113101632040, -0.663466703640513080, -0.663429292520727350, -0.663391879742368020, -0.663354465305529440, -0.663317049210304540, +-0.663279631456786810, -0.663242212045070280, -0.663204790975248320, -0.663167368247414290, -0.663129943861661460, -0.663092517818084200, -0.663055090116775550, -0.663017660757829310, +-0.662980229741338520, -0.662942797067397450, -0.662905362736099460, -0.662867926747538030, -0.662830489101806420, -0.662793049798998890, -0.662755608839208810, -0.662718166222529660, +-0.662680721949054810, -0.662643276018878510, -0.662605828432093920, -0.662568379188794520, -0.662530928289074450, -0.662493475733027080, -0.662456021520746010, -0.662418565652324600, +-0.662381108127857000, -0.662343648947436690, -0.662306188111157270, -0.662268725619112100, -0.662231261471395330, -0.662193795668100550, -0.662156328209321130, -0.662118859095150670, +-0.662081388325683310, -0.662043915901012530, -0.662006441821232030, -0.661968966086434960, -0.661931488696715920, -0.661894009652168050, -0.661856528952885270, -0.661819046598960740, +-0.661781562590489040, -0.661744076927563320, -0.661706589610277060, -0.661669100638724750, -0.661631610012999640, -0.661594117733195540, -0.661556623799405720, -0.661519128211724760, +-0.661481630970246040, -0.661444132075063140, -0.661406631526269550, -0.661369129323959860, -0.661331625468227210, -0.661294119959165540, -0.661256612796868200, -0.661219103981429690, +-0.661181593512943480, -0.661144081391503160, -0.661106567617202430, -0.661069052190135560, -0.661031535110396030, -0.660994016378077420, -0.660956495993274000, -0.660918973956079460, +-0.660881450266587400, -0.660843924924891410, -0.660806397931085860, -0.660768869285264350, -0.660731338987520790, -0.660693807037948440, -0.660656273436641910, -0.660618738183694650, +-0.660581201279200610, -0.660543662723253270, -0.660506122515947090, -0.660468580657375570, -0.660431037147632630, -0.660393491986811740, -0.660355945175007400, -0.660318396712313290, +-0.660280846598822800, -0.660243294834630510, -0.660205741419830130, -0.660168186354515240, -0.660130629638779550, -0.660093071272717660, -0.660055511256423140, -0.660017949589989830, +-0.659980386273511300, -0.659942821307082040, -0.659905254690795860, -0.659867686424746470, -0.659830116509027560, -0.659792544943733740, -0.659754971728958470, -0.659717396864795800, +-0.659679820351339320, -0.659642242188683610, -0.659604662376922280, -0.659567080916149020, -0.659529497806458310, -0.659491913047943860, -0.659454326640699700, -0.659416738584819310, +-0.659379148880397500, -0.659341557527527770, -0.659303964526304130, -0.659266369876820300, -0.659228773579170870, -0.659191175633449420, -0.659153576039750110, -0.659115974798166530, +-0.659078371908793260, -0.659040767371724120, -0.659003161187053040, -0.658965553354873830, -0.658927943875280970, -0.658890332748368280, -0.658852719974229670, -0.658815105552959080, +-0.658777489484650980, -0.658739871769399080, -0.658702252407297300, -0.658664631398440230, -0.658627008742921460, -0.658589384440835260, -0.658551758492275210, -0.658514130897336130, +-0.658476501656111710, -0.658438870768696120, -0.658401238235182930, -0.658363604055666960, -0.658325968230242030, -0.658288330759002170, -0.658250691642041090, -0.658213050879453700, +-0.658175408471333600, -0.658137764417775050, -0.658100118718871750, -0.658062471374718520, -0.658024822385409050, -0.657987171751037160, -0.657949519471697770, -0.657911865547484490, +-0.657874209978491550, -0.657836552764812790, -0.657798893906543000, -0.657761233403776010, -0.657723571256605850, -0.657685907465126450, -0.657648242029432620, -0.657610574949618280, +-0.657572906225777350, -0.657535235858003890, -0.657497563846392690, -0.657459890191037570, -0.657422214892032670, -0.657384537949471940, -0.657346859363450280, -0.657309179134061390, +-0.657271497261399220, -0.657233813745558670, -0.657196128586633570, -0.657158441784718050, -0.657120753339906270, -0.657083063252292820, -0.657045371521971730, -0.657007678149037270, +-0.656969983133583240, -0.656932286475704560, -0.656894588175495180, -0.656856888233049330, -0.656819186648460950, -0.656781483421824960, -0.656743778553235180, -0.656706072042785970, +-0.656668363890571370, -0.656630654096686080, -0.656592942661224140, -0.656555229584279920, -0.656517514865947230, -0.656479798506321100, -0.656442080505495460, -0.656404360863564350, +-0.656366639580622580, -0.656328916656764290, -0.656291192092083750, -0.656253465886674770, -0.656215738040632490, -0.656178008554050950, -0.656140277427024300, -0.656102544659646680, +-0.656064810252013020, -0.656027074204217240, -0.655989336516353940, -0.655951597188516810, -0.655913856220801120, -0.655876113613300780, -0.655838369366110060, -0.655800623479323220, +-0.655762875953035060, -0.655725126787339740, -0.655687375982331290, -0.655649623538104740, -0.655611869454754140, -0.655574113732373840, -0.655536356371057890, -0.655498597370901440, +-0.655460836731998510, -0.655423074454443370, -0.655385310538330270, -0.655347544983754250, -0.655309777790809460, -0.655272008959590040, -0.655234238490190360, -0.655196466382705460, +-0.655158692637229370, -0.655120917253856460, -0.655083140232680990, -0.655045361573798000, -0.655007581277301630, -0.654969799343285920, -0.654932015771846120, -0.654894230563076270, +-0.654856443717070860, -0.654818655233923910, -0.654780865113730680, -0.654743073356585330, -0.654705279962582320, -0.654667484931815700, -0.654629688264380730, -0.654591889960371540, +-0.654554090019882630, -0.654516288443008240, -0.654478485229843420, -0.654440680380482310, -0.654402873895019500, -0.654365065773549250, -0.654327256016166590, -0.654289444622965900, +-0.654251631594041210, -0.654213816929487770, -0.654176000629399730, -0.654138182693871810, -0.654100363122998020, -0.654062541916873630, -0.654024719075593010, -0.653986894599250410, +-0.653949068487940430, -0.653911240741757990, -0.653873411360797460, -0.653835580345153430, -0.653797747694920160, -0.653759913410192790, -0.653722077491065590, -0.653684239937633250, +-0.653646400749990030, -0.653608559928231080, -0.653570717472450770, -0.653532873382743680, -0.653495027659203980, -0.653457180301927120, -0.653419331311007270, -0.653381480686538780, +-0.653343628428616930, -0.653305774537335960, -0.653267919012790690, -0.653230061855075150, -0.653192203064284830, -0.653154342640513970, -0.653116480583857300, -0.653078616894409160, +-0.653040751572264710, -0.653002884617518430, -0.652965016030264910, -0.652927145810598520, -0.652889273958614620, -0.652851400474407480, -0.652813525358071910, -0.652775648609702160, +-0.652737770229393610, -0.652699890217240620, -0.652662008573337560, -0.652624125297779910, -0.652586240390661930, -0.652548353852078210, -0.652510465682123450, -0.652472575880892800, +-0.652434684448480630, -0.652396791384981860, -0.652358896690490740, -0.652321000365102650, -0.652283102408912070, -0.652245202822013810, -0.652207301604502130, -0.652169398756472620, +-0.652131494278019530, -0.652093588169237790, -0.652055680430221660, -0.652017771061066730, -0.651979860061867370, -0.651941947432717940, -0.651904033173714040, -0.651866117284950140, +-0.651828199766520840, -0.651790280618520730, -0.651752359841045180, -0.651714437434188890, -0.651676513398046330, -0.651638587732712220, -0.651600660438282020, -0.651562731514850220, +-0.651524800962511420, -0.651486868781360420, -0.651448934971492590, -0.651410999533002300, -0.651373062465984590, -0.651335123770533930, -0.651297183446745700, -0.651259241494714590, +-0.651221297914535420, -0.651183352706302570, -0.651145405870111720, -0.651107457406057350, -0.651069507314233960, -0.651031555594737130, -0.650993602247661450, -0.650955647273101850, +-0.650917690671152680, -0.650879732441909660, -0.650841772585467270, -0.650803811101920540, -0.650765847991363830, -0.650727883253892860, -0.650689916889602200, -0.650651948898586800, +-0.650613979280941110, -0.650576008036760970, -0.650538035166140620, -0.650500060669175320, -0.650462084545959440, -0.650424106796588690, -0.650386127421157760, -0.650348146419761020, +-0.650310163792494400, -0.650272179539452270, -0.650234193660729760, -0.650196206156421370, -0.650158217026622910, -0.650120226271428850, -0.650082233890934110, -0.650044239885233630, +-0.650006244254422770, -0.649968246998596340, -0.649930248117849270, -0.649892247612276260, -0.649854245481973010, -0.649816241727034120, -0.649778236347554610, -0.649740229343629180, +-0.649702220715353440, -0.649664210462822190, -0.649626198586130130, -0.649588185085372860, -0.649550169960645190, -0.649512153212042030, -0.649474134839658210, -0.649436114843589430, +-0.649398093223930270, -0.649360069980775890, -0.649322045114220980, -0.649284018624361360, -0.649245990511291620, -0.649207960775106900, -0.649169929415902010, -0.649131896433772560, +-0.649093861828813460, -0.649055825601119630, -0.649017787750786000, -0.648979748277908160, -0.648941707182580930, -0.648903664464899110, -0.648865620124958520, -0.648827574162853860, +-0.648789526578680160, -0.648751477372532470, -0.648713426544506260, -0.648675374094696670, -0.648637320023198520, -0.648599264330106730, -0.648561207015517120, -0.648523148079524490, +-0.648485087522224110, -0.648447025343710570, -0.648408961544079790, -0.648370896123426580, -0.648332829081846200, -0.648294760419433460, -0.648256690136284060, -0.648218618232492940, +-0.648180544708155340, -0.648142469563365960, -0.648104392798220740, -0.648066314412814590, -0.648028234407242330, -0.647990152781599770, -0.647952069535981940, -0.647913984670483780, +-0.647875898185200420, -0.647837810080227670, -0.647799720355660360, -0.647761629011593730, -0.647723536048122720, -0.647685441465343130, -0.647647345263349990, -0.647609247442238580, +-0.647571148002103580, -0.647533046943041150, -0.647494944265145980, -0.647456839968513550, -0.647418734053238690, -0.647380626519417300, -0.647342517367144320, -0.647304406596514670, +-0.647266294207624380, -0.647228180200568380, -0.647190064575441930, -0.647151947332340050, -0.647113828471358570, -0.647075707992592510, -0.647037585896137140, -0.646999462182087480, +-0.646961336850539580, -0.646923209901588250, -0.646885081335328960, -0.646846951151856640, -0.646808819351267220, -0.646770685933655830, -0.646732550899117630, -0.646694414247747760, +-0.646656275979642260, -0.646618136094895930, -0.646579994593604050, -0.646541851475862410, -0.646503706741766270, -0.646465560391410790, -0.646427412424890990, -0.646389262842303140, +-0.646351111643742040, -0.646312958829303290, -0.646274804399081690, -0.646236648353173400, -0.646198490691673570, -0.646160331414677440, -0.646122170522280160, -0.646084008014577770, +-0.646045843891665420, -0.646007678153638460, -0.645969510800591950, -0.645931341832622020, -0.645893171249823710, -0.645854999052292490, -0.645816825240123400, -0.645778649813412600, +-0.645740472772255210, -0.645702294116746290, -0.645664113846981860, -0.645625931963057290, -0.645587748465067830, -0.645549563353108650, -0.645511376627275980, -0.645473188287664760, +-0.645434998334370680, -0.645396806767488670, -0.645358613587114990, -0.645320418793344790, -0.645282222386273640, -0.645244024365996480, -0.645205824732609680, -0.645167623486208260, +-0.645129420626887720, -0.645091216154743410, -0.645053010069871370, -0.645014802372366750, -0.644976593062324800, -0.644938382139841780, -0.644900169605012730, -0.644861955457933230, +-0.644823739698698550, -0.644785522327404940, -0.644747303344147430, -0.644709082749021610, -0.644670860542122860, -0.644632636723547310, -0.644594411293390010, -0.644556184251746880, +-0.644517955598712830, -0.644479725334384250, -0.644441493458856370, -0.644403259972224700, -0.644365024874584580, -0.644326788166032280, -0.644288549846662950, -0.644250309916571950, +-0.644212068375855430, -0.644173825224608860, -0.644135580462927630, -0.644097334090907190, -0.644059086108643710, -0.644020836516232540, -0.643982585313769280, -0.643944332501349190, +-0.643906078079068630, -0.643867822047022860, -0.643829564405307480, -0.643791305154017950, -0.643753044293250420, -0.643714781823100380, -0.643676517743663300, -0.643638252055034550, +-0.643599984757310620, -0.643561715850586640, -0.643523445334958090, -0.643485173210521230, -0.643446899477371440, -0.643408624135604400, -0.643370347185315490, -0.643332068626601080, +-0.643293788459556430, -0.643255506684277330, -0.643217223300859060, -0.643178938309398210, -0.643140651709989910, -0.643102363502729980, -0.643064073687713900, -0.643025782265037930, +-0.642987489234797430, -0.642949194597088320, -0.642910898352005770, -0.642872600499646450, -0.642834301040105530, -0.642795999973478800, -0.642757697299861870, -0.642719393019350990, +-0.642681087132041640, -0.642642779638029180, -0.642604470537410100, -0.642566159830279870, -0.642527847516734310, -0.642489533596868670, -0.642451218070779650, -0.642412900938562510, +-0.642374582200313180, -0.642336261856127020, -0.642297939906100510, -0.642259616350329130, -0.642221291188908800, -0.642182964421934900, -0.642144636049503890, -0.642106306071711260, +-0.642067974488652940, -0.642029641300424280, -0.641991306507121880, -0.641952970108841230, -0.641914632105677780, -0.641876292497728150, -0.641837951285087690, -0.641799608467852440, +-0.641761264046117770, -0.641722918019980380, -0.641684570389535640, -0.641646221154879460, -0.641607870316107330, -0.641569517873315950, -0.641531163826600690, -0.641492808176057580, +-0.641454450921782100, -0.641416092063870850, -0.641377731602419400, -0.641339369537523570, -0.641301005869278960, -0.641262640597782260, -0.641224273723128960, -0.641185905245414520, +-0.641147535164735770, -0.641109163481188070, -0.641070790194867570, -0.641032415305869630, -0.640994038814291070, -0.640955660720227470, -0.640917281023774650, -0.640878899725028320, +-0.640840516824085050, -0.640802132321040440, -0.640763746215990640, -0.640725358509031010, -0.640686969200258360, -0.640648578289768290, -0.640610185777656830, -0.640571791664019450, +-0.640533395948952980, -0.640494998632553100, -0.640456599714915640, -0.640418199196136410, -0.640379797076311870, -0.640341393355537970, -0.640302988033910280, -0.640264581111525400, +-0.640226172588479030, -0.640187762464867300, -0.640149350740785720, -0.640110937416331180, -0.640072522491599290, -0.640034105966686080, -0.639995687841687260, -0.639957268116699620, +-0.639918846791818760, -0.639880423867140840, -0.639841999342761420, -0.639803573218777450, -0.639765145495284400, -0.639726716172378640, -0.639688285250155640, -0.639649852728712330, +-0.639611418608144410, -0.639572982888547580, -0.639534545570018540, -0.639496106652653330, -0.639457666136547640, -0.639419224021797630, -0.639380780308499760, -0.639342334996749970, +-0.639303888086644400, -0.639265439578278750, -0.639226989471749830, -0.639188537767153450, -0.639150084464585650, -0.639111629564142470, -0.639073173065920370, -0.639034714970015410, +-0.638996255276523710, -0.638957793985540980, -0.638919331097164140, -0.638880866611488910, -0.638842400528611190, -0.638803932848627910, -0.638765463571634660, -0.638726992697727810, +-0.638688520227003180, -0.638650046159557560, -0.638611570495486780, -0.638573093234887090, -0.638534614377854410, -0.638496133924485450, -0.638457651874876130, -0.638419168229122810, +-0.638380682987321090, -0.638342196149568110, -0.638303707715959570, -0.638265217686591720, -0.638226726061560610, -0.638188232840962930, -0.638149738024894720, -0.638111241613451790, +-0.638072743606731160, -0.638034244004828550, -0.637995742807840440, -0.637957240015862630, -0.637918735628992040, -0.637880229647324490, -0.637841722070956570, -0.637803212899983870, +-0.637764702134503540, -0.637726189774611370, -0.637687675820403870, -0.637649160271976710, -0.637610643129427060, -0.637572124392850830, -0.637533604062344160, -0.637495082138003210, +-0.637456558619924900, -0.637418033508205250, -0.637379506802940420, -0.637340978504226550, -0.637302448612160570, -0.637263917126838500, -0.637225384048356160, -0.637186849376810800, +-0.637148313112298360, -0.637109775254915080, -0.637071235804757000, -0.637032694761921260, -0.636994152126503680, -0.636955607898600730, -0.636917062078308450, -0.636878514665723870, +-0.636839965660943030, -0.636801415064062180, -0.636762862875177580, -0.636724309094386040, -0.636685753721783820, -0.636647196757467170, -0.636608638201532130, -0.636570078054075950, +-0.636531516315194560, -0.636492952984983980, -0.636454388063541380, -0.636415821550962770, -0.636377253447344640, -0.636338683752783130, -0.636300112467375170, -0.636261539591216900, +-0.636222965124404790, -0.636184389067034890, -0.636145811419204450, -0.636107232181009510, -0.636068651352546420, -0.636030068933911340, -0.635991484925201410, -0.635952899326512890, +-0.635914312137942030, -0.635875723359584980, -0.635837132991539100, -0.635798541033900320, -0.635759947486764900, -0.635721352350229860, -0.635682755624391470, -0.635644157309346200, +-0.635605557405190200, -0.635566955912020730, -0.635528352829933810, -0.635489748159025920, -0.635451141899393450, -0.635412534051133400, -0.635373924614342060, -0.635335313589115880, +-0.635296700975551020, -0.635258086773744850, -0.635219470983793390, -0.635180853605793240, -0.635142234639840650, -0.635103614086032890, -0.635064991944465970, -0.635026368215236610, +-0.634987742898441070, -0.634949115994176360, -0.634910487502538980, -0.634871857423625060, -0.634833225757531760, -0.634794592504355440, -0.634755957664192570, -0.634717321237139530, +-0.634678683223293460, -0.634640043622750840, -0.634601402435607920, -0.634562759661961300, -0.634524115301908000, -0.634485469355544510, -0.634446821822967300, -0.634408172704272740, +-0.634369521999557980, -0.634330869708919500, -0.634292215832453880, -0.634253560370257260, -0.634214903322427250, -0.634176244689059860, -0.634137584470251590, -0.634098922666099570, +-0.634060259276700400, -0.634021594302150440, -0.633982927742546280, -0.633944259597985060, -0.633905589868563270, -0.633866918554377380, -0.633828245655523980, -0.633789571172100220, +-0.633750895104202570, -0.633712217451927740, -0.633673538215371870, -0.633634857394632660, -0.633596174989806250, -0.633557491000989350, -0.633518805428278430, -0.633480118271770860, +-0.633441429531562910, -0.633402739207751140, -0.633364047300432830, -0.633325353809704340, -0.633286658735662590, -0.633247962078403730, -0.633209263838025340, -0.633170564014623900, +-0.633131862608295900, -0.633093159619138040, -0.633054455047247440, -0.633015748892720830, -0.632977041155654900, -0.632938331836145900, -0.632899620934291420, -0.632860908450187940, +-0.632822194383932280, -0.632783478735620690, -0.632744761505350750, -0.632706042693218840, -0.632667322299321540, -0.632628600323756340, -0.632589876766619600, -0.632551151628008120, +-0.632512424908018400, -0.632473696606748010, -0.632434966724293450, -0.632396235260751390, -0.632357502216218450, -0.632318767590791970, -0.632280031384568670, -0.632241293597645360, +-0.632202554230118400, -0.632163813282085370, -0.632125070753642880, -0.632086326644887620, -0.632047580955916290, -0.632008833686826250, -0.631970084837714220, -0.631931334408676880, +-0.631892582399810940, -0.631853828811213880, -0.631815073642982280, -0.631776316895212630, -0.631737558568002510, -0.631698798661448510, -0.631660037175647450, -0.631621274110696020, +-0.631582509466691700, -0.631543743243731190, -0.631504975441911200, -0.631466206061328530, -0.631427435102080660, -0.631388662564264180, -0.631349888447976130, -0.631311112753312980, +-0.631272335480372320, -0.631233556629250850, -0.631194776200045490, -0.631155994192852840, -0.631117210607770600, -0.631078425444895340, -0.631039638704323560, -0.631000850386153170, +-0.630962060490480540, -0.630923269017402810, -0.630884475967016580, -0.630845681339419540, -0.630806885134708170, -0.630768087352979730, -0.630729287994330590, -0.630690487058858660, +-0.630651684546660540, -0.630612880457833150, -0.630574074792473180, -0.630535267550678460, -0.630496458732545560, -0.630457648338171420, -0.630418836367652840, -0.630380022821087630, +-0.630341207698572270, -0.630302391000203580, -0.630263572726079250, -0.630224752876295870, -0.630185931450950810, -0.630147108450140440, -0.630108283873962670, -0.630069457722514210, +-0.630030629995892100, -0.629991800694193140, -0.629952969817514920, -0.629914137365954250, -0.629875303339608280, -0.629836467738573820, -0.629797630562948350, -0.629758791812828900, +-0.629719951488312500, -0.629681109589495860, -0.629642266116476780, -0.629603421069352080, -0.629564574448218670, -0.629525726253173600, -0.629486876484314560, -0.629448025141738370, +-0.629409172225541710, -0.629370317735822420, -0.629331461672677390, -0.629292604036203680, -0.629253744826498210, -0.629214884043658660, -0.629176021687781860, -0.629137157758965060, +-0.629098292257304960, -0.629059425182899590, -0.629020556535845540, -0.628981686316240070, -0.628942814524180220, -0.628903941159763560, -0.628865066223087020, -0.628826189714247860, +-0.628787311633342890, -0.628748431980469920, -0.628709550755725880, -0.628670667959207670, -0.628631783591013130, -0.628592897651239160, -0.628554010139982910, -0.628515121057341310, +-0.628476230403412270, -0.628437338178292610, -0.628398444382079590, -0.628359549014870120, -0.628320652076762130, -0.628281753567852540, -0.628242853488238500, -0.628203951838017030, +-0.628165048617286060, -0.628126143826142400, -0.628087237464683420, -0.628048329533006040, -0.628009420031208080, -0.627970508959386660, -0.627931596317638620, -0.627892682106061860, +-0.627853766324753430, -0.627814848973810570, -0.627775930053330320, -0.627737009563410500, -0.627698087504148240, -0.627659163875640690, -0.627620238677984890, -0.627581311911278860, +-0.627542383575619530, -0.627503453671104270, -0.627464522197830110, -0.627425589155894860, -0.627386654545395660, -0.627347718366429890, -0.627308780619094340, -0.627269841303487290, +-0.627230900419705640, -0.627191957967846440, -0.627153013948007600, -0.627114068360286270, -0.627075121204779710, -0.627036172481585050, -0.626997222190800340, -0.626958270332522490, +-0.626919316906848990, -0.626880361913876860, -0.626841405353704250, -0.626802447226428080, -0.626763487532145720, -0.626724526270954320, -0.626685563442952010, -0.626646599048235720, +-0.626607633086903040, -0.626568665559050890, -0.626529696464777300, -0.626490725804179640, -0.626451753577355050, -0.626412779784400800, -0.626373804425414900, -0.626334827500494520, +-0.626295849009736670, -0.626256868953239620, -0.626217887331100400, -0.626178904143416370, -0.626139919390284790, -0.626100933071803810, -0.626061945188070460, -0.626022955739182210, +-0.625983964725236210, -0.625944972146330710, -0.625905978002562760, -0.625866982294029820, -0.625827985020829150, -0.625788986183058780, -0.625749985780816090, -0.625710983814198320, +-0.625671980283302730, -0.625632975188227580, -0.625593968529070010, -0.625554960305927170, -0.625515950518897190, -0.625476939168077450, -0.625437926253565310, -0.625398911775458030, +-0.625359895733853750, -0.625320878128849730, -0.625281858960543560, -0.625242838229032480, -0.625203815934414540, -0.625164792076787100, -0.625125766656247640, -0.625086739672893410, +-0.625047711126822780, -0.625008681018132780, -0.624969649346921120, -0.624930616113284930, -0.624891581317322590, -0.624852544959131340, -0.624813507038808340, -0.624774467556451940, +-0.624735426512159300, -0.624696383906028220, -0.624657339738155740, -0.624618294008640220, -0.624579246717579030, -0.624540197865069760, -0.624501147451209550, -0.624462095476096880, +-0.624423041939829000, -0.624383986842503510, -0.624344930184217660, -0.624305871965069810, -0.624266812185157340, -0.624227750844577820, -0.624188687943428630, -0.624149623481807910, +-0.624110557459813250, -0.624071489877542240, -0.624032420735092020, -0.623993350032561180, -0.623954277770046970, -0.623915203947646770, -0.623876128565458820, -0.623837051623580610, +-0.623797973122109720, -0.623758893061143520, -0.623719811440780480, -0.623680728261117980, -0.623641643522253600, -0.623602557224284700, -0.623563469367309780, -0.623524379951426290, +-0.623485288976731720, -0.623446196443323660, -0.623407102351300480, -0.623368006700759420, -0.623328909491798420, -0.623289810724514840, -0.623250710399007040, -0.623211608515372490, +-0.623172505073708580, -0.623133400074113660, -0.623094293516685330, -0.623055185401521270, -0.623016075728718870, -0.622976964498376580, -0.622937851710591910, -0.622898737365462640, +-0.622859621463086150, -0.622820504003561040, -0.622781384986984540, -0.622742264413454700, -0.622703142283068780, -0.622664018595925350, -0.622624893352121900, -0.622585766551756240, +-0.622546638194925730, -0.622507508281729070, -0.622468376812263640, -0.622429243786626780, -0.622390109204917330, -0.622350973067232530, -0.622311835373670300, -0.622272696124328120, +-0.622233555319304580, -0.622194412958697150, -0.622155269042603650, -0.622116123571121670, -0.622076976544349680, -0.622037827962385270, -0.621998677825326250, -0.621959526133270320, +-0.621920372886315740, -0.621881218084560430, -0.621842061728101970, -0.621802903817037960, -0.621763744351467080, -0.621724583331486840, -0.621685420757194800, -0.621646256628689550, +-0.621607090946068700, -0.621567923709430150, -0.621528754918871380, -0.621489584574490990, -0.621450412676386790, -0.621411239224656460, -0.621372064219397720, -0.621332887660709150, +-0.621293709548688340, -0.621254529883433330, -0.621215348665041580, -0.621176165893611910, -0.621136981569241690, -0.621097795692029160, -0.621058608262071710, -0.621019419279468020, +-0.620980228744315910, -0.620941036656713190, -0.620901843016757440, -0.620862647824547590, -0.620823451080181000, -0.620784252783755490, -0.620745052935369630, -0.620705851535121140, +-0.620666648583108050, -0.620627444079428050, -0.620588238024179730, -0.620549030417460790, -0.620509821259369380, -0.620470610550002970, -0.620431398289460480, -0.620392184477839390, +-0.620352969115237850, -0.620313752201753550, -0.620274533737485310, -0.620235313722530600, -0.620196092156987680, -0.620156869040954130, -0.620117644374528880, -0.620078418157809400, +-0.620039190390893500, -0.619999961073880110, -0.619960730206866710, -0.619921497789951540, -0.619882263823232190, -0.619843028306807600, -0.619803791240775450, -0.619764552625233780, +-0.619725312460280400, -0.619686070746014120, -0.619646827482532640, -0.619607582669934100, -0.619568336308316200, -0.619529088397777870, -0.619489838938416800, -0.619450587930331140, +-0.619411335373618700, -0.619372081268378170, -0.619332825614707480, -0.619293568412704440, -0.619254309662467750, -0.619215049364095330, -0.619175787517685210, -0.619136524123335420, +-0.619097259181144550, -0.619057992691210530, -0.619018724653631610, -0.618979455068505490, -0.618940183935931090, -0.618900911256006210, -0.618861637028829010, -0.618822361254497410, +-0.618783083933110320, -0.618743805064765450, -0.618704524649561050, -0.618665242687595040, -0.618625959178966230, -0.618586674123772550, -0.618547387522112140, -0.618508099374083020, +-0.618468809679783900, -0.618429518439312820, -0.618390225652767580, -0.618350931320247100, -0.618311635441849190, -0.618272338017672340, -0.618233039047814240, -0.618193738532373920, +-0.618154436471449300, -0.618115132865138530, -0.618075827713539530, -0.618036521016751440, -0.617997212774871960, -0.617957902987999460, -0.617918591656231860, -0.617879278779668080, +-0.617839964358406160, -0.617800648392544340, -0.617761330882180550, -0.617722011827413710, -0.617682691228341850, -0.617643369085063010, -0.617604045397675990, -0.617564720166278950, +-0.617525393390970010, -0.617486065071847330, -0.617446735209009830, -0.617407403802555430, -0.617368070852582610, -0.617328736359189170, -0.617289400322474260, -0.617250062742535910, +-0.617210723619472380, -0.617171382953381590, -0.617132040744362790, -0.617092696992513900, -0.617053351697933180, -0.617014004860718890, -0.616974656480969830, -0.616935306558784150, +-0.616895955094259760, -0.616856602087495930, -0.616817247538590570, -0.616777891447642170, -0.616738533814748520, -0.616699174640009010, -0.616659813923521540, -0.616620451665384590, +-0.616581087865696100, -0.616541722524555300, -0.616502355642060130, -0.616462987218309060, -0.616423617253400220, -0.616384245747432670, -0.616344872700504420, -0.616305498112714070, +-0.616266121984159640, -0.616226744314940290, -0.616187365105154040, -0.616147984354899370, -0.616108602064274310, -0.616069218233378240, -0.616029832862309060, -0.615990445951164920, +-0.615951057500044970, -0.615911667509047470, -0.615872275978270770, -0.615832882907813130, -0.615793488297773470, -0.615754092148250170, -0.615714694459341680, -0.615675295231146060, +-0.615635894463762550, -0.615596492157289290, -0.615557088311824760, -0.615517682927467220, -0.615478276004315820, -0.615438867542468680, -0.615399457542024520, -0.615360046003081250, +-0.615320632925738130, -0.615281218310093530, -0.615241802156245580, -0.615202384464293430, -0.615162965234335330, -0.615123544466469770, -0.615084122160795000, -0.615044698317410380, +-0.615005272936413940, -0.614965846017904270, -0.614926417561979740, -0.614886987568739380, -0.614847556038281670, -0.614808122970704970, -0.614768688366107760, -0.614729252224589070, +-0.614689814546247270, -0.614650375331180940, -0.614610934579488340, -0.614571492291268730, -0.614532048466620350, -0.614492603105641580, -0.614453156208431550, -0.614413707775088750, +-0.614374257805711640, -0.614334806300398490, -0.614295353259248670, -0.614255898682360520, -0.614216442569832650, -0.614176984921763310, -0.614137525738251750, -0.614098065019396460, +-0.614058602765296000, -0.614019138976048760, -0.613979673651753880, -0.613940206792509930, -0.613900738398415410, -0.613861268469568680, -0.613821797006069200, -0.613782324008015130, +-0.613742849475504950, -0.613703373408638010, -0.613663895807512570, -0.613624416672227450, -0.613584936002881000, -0.613545453799572480, -0.613505970062400370, -0.613466484791463260, +-0.613426997986859620, -0.613387509648688820, -0.613348019777049340, -0.613308528372039750, -0.613269035433758440, -0.613229540962304980, -0.613190044957777620, -0.613150547420275080, +-0.613111048349895940, -0.613071547746739440, -0.613032045610904190, -0.612992541942488760, -0.612953036741591520, -0.612913530008312170, -0.612874021742748960, -0.612834511945000380, +-0.612795000615165790, -0.612755487753343760, -0.612715973359633010, -0.612676457434131900, -0.612636939976940130, -0.612597420988155950, -0.612557900467878170, -0.612518378416205380, +-0.612478854833236940, -0.612439329719071330, -0.612399803073807370, -0.612360274897543630, -0.612320745190379600, -0.612281213952413640, -0.612241681183744670, -0.612202146884471050, +-0.612162611054692500, -0.612123073694507470, -0.612083534804014340, -0.612043994383312700, -0.612004452432501120, -0.611964908951678320, -0.611925363940942990, -0.611885817400394600, +-0.611846269330131640, -0.611806719730253020, -0.611767168600857230, -0.611727615942043950, -0.611688061753911550, -0.611648506036558960, -0.611608948790084870, -0.611569390014588650, +-0.611529829710169000, -0.611490267876924840, -0.611450704514954540, -0.611411139624357890, -0.611371573205233390, -0.611332005257679610, -0.611292435781796150, -0.611252864777681590, +-0.611213292245434970, -0.611173718185154650, -0.611134142596940430, -0.611094565480890810, -0.611054986837104910, -0.611015406665681100, -0.610975824966719090, -0.610936241740317580, +-0.610896656986575360, -0.610857070705591250, -0.610817482897464850, -0.610777893562294620, -0.610738302700179700, -0.610698710311218700, -0.610659116395511290, -0.610619520953156080, +-0.610579923984252090, -0.610540325488897920, -0.610500725467193250, -0.610461123919236790, -0.610421520845127130, -0.610381916244964070, -0.610342310118846210, -0.610302702466872570, +-0.610263093289141860, -0.610223482585753650, -0.610183870356806880, -0.610144256602400350, -0.610104641322632870, -0.610065024517604030, -0.610025406187412740, -0.609985786332157940, +-0.609946164951938320, -0.609906542046853570, -0.609866917617002510, -0.609827291662484170, -0.609787664183397250, -0.609748035179841440, -0.609708404651915670, -0.609668772599718410, +-0.609629139023349700, -0.609589503922908120, -0.609549867298492700, -0.609510229150202250, -0.609470589478136700, -0.609430948282394520, -0.609391305563075080, -0.609351661320277070, +-0.609312015554100080, -0.609272368264643260, -0.609232719452005410, -0.609193069116285350, -0.609153417257583100, -0.609113763875997250, -0.609074108971626950, -0.609034452544571110, +-0.608994794594929440, -0.608955135122800750, -0.608915474128283950, -0.608875811611478750, -0.608836147572484050, -0.608796482011398910, -0.608756814928322340, -0.608717146323354050, +-0.608677476196592850, -0.608637804548137980, -0.608598131378088270, -0.608558456686543510, -0.608518780473602640, -0.608479102739364900, -0.608439423483928990, -0.608399742707394830, +-0.608360060409861350, -0.608320376591427790, -0.608280691252192860, -0.608241004392256590, -0.608201316011717790, -0.608161626110675260, -0.608121934689229150, -0.608082241747478160, +-0.608042547285521540, -0.608002851303458210, -0.607963153801388100, -0.607923454779410120, -0.607883754237623530, -0.607844052176127140, -0.607804348595021080, -0.607764643494404070, +-0.607724936874375450, -0.607685228735034170, -0.607645519076480120, -0.607605807898812240, -0.607566095202130010, -0.607526380986532000, -0.607486665252118470, -0.607446947998988350, +-0.607407229227240770, -0.607367508936974780, -0.607327787128290390, -0.607288063801286530, -0.607248338956062120, -0.607208612592717190, -0.607168884711350780, -0.607129155312062130, +-0.607089424394950280, -0.607049691960115270, -0.607009958007655890, -0.606970222537671740, -0.606930485550261630, -0.606890747045525700, -0.606851007023562870, -0.606811265484472510, +-0.606771522428353640, -0.606731777855306300, -0.606692031765429520, -0.606652284158822660, -0.606612535035584770, -0.606572784395815860, -0.606533032239615080, -0.606493278567081240, +-0.606453523378314600, -0.606413766673414180, -0.606374008452479350, -0.606334248715609150, -0.606294487462903600, -0.606254724694461840, -0.606214960410383360, -0.606175194610767080, +-0.606135427295713240, -0.606095658465320760, -0.606055888119689130, -0.606016116258917380, -0.605976342883105760, -0.605936567992353290, -0.605896791586759350, -0.605857013666423080, +-0.605817234231444730, -0.605777453281923120, -0.605737670817957710, -0.605697886839648310, -0.605658101347094300, -0.605618314340395040, -0.605578525819649550, -0.605538735784958200, +-0.605498944236420030, -0.605459151174134400, -0.605419356598200560, -0.605379560508718770, -0.605339762905787950, -0.605299963789507790, -0.605260163159977330, -0.605220361017296930, +-0.605180557361565510, -0.605140752192882770, -0.605100945511347740, -0.605061137317060680, -0.605021327610120840, -0.604981516390627690, -0.604941703658680390, -0.604901889414379060, +-0.604862073657823180, -0.604822256389111690, -0.604782437608344830, -0.604742617315621960, -0.604702795511042560, -0.604662972194705770, -0.604623147366711970, -0.604583321027160280, +-0.604543493176150300, -0.604503663813781180, -0.604463832940153270, -0.604424000555365830, -0.604384166659518330, -0.604344331252710030, -0.604304494335041410, -0.604264655906611380, +-0.604224815967519760, -0.604184974517865790, -0.604145131557749740, -0.604105287087270850, -0.604065441106528380, -0.604025593615622690, -0.603985744614652930, -0.603945894103718910, +-0.603906042082919760, -0.603866188552355740, -0.603826333512126450, -0.603786476962331230, -0.603746618903069470, -0.603706759334441510, -0.603666898256546620, -0.603627035669484500, +-0.603587171573354510, -0.603547305968256900, -0.603507438854291030, -0.603467570231556620, -0.603427700100152790, -0.603387828460180130, -0.603347955311737900, -0.603308080654925470, +-0.603268204489843200, -0.603228326816590330, -0.603188447635266690, -0.603148566945971630, -0.603108684748805410, -0.603068801043867510, -0.603028915831257620, -0.602989029111075100, +-0.602949140883420330, -0.602909251148392780, -0.602869359906092030, -0.602829467156617560, -0.602789572900069740, -0.602749677136548030, -0.602709779866152150, -0.602669881088981450, +-0.602629980805136300, -0.602590079014716280, -0.602550175717820770, -0.602510270914550120, -0.602470364605003810, -0.602430456789281530, -0.602390547467482770, -0.602350636639708000, +-0.602310724306056700, -0.602270810466628450, -0.602230895121522950, -0.602190978270840560, -0.602151059914680650, -0.602111140053143150, -0.602071218686327400, -0.602031295814334010, +-0.601991371437262330, -0.601951445555212290, -0.601911518168283250, -0.601871589276575800, -0.601831658880189300, -0.601791726979223670, -0.601751793573778390, -0.601711858663954050, +-0.601671922249849890, -0.601631984331565730, -0.601592044909201930, -0.601552103982857970, -0.601512161552633760, -0.601472217618628790, -0.601432272180943640, -0.601392325239677890, +-0.601352376794931250, -0.601312426846803310, -0.601272475395394630, -0.601232522440804830, -0.601192567983133700, -0.601152612022480830, -0.601112654558946690, -0.601072695592630990, +-0.601032735123633530, -0.600992773152053910, -0.600952809677992580, -0.600912844701549380, -0.600872878222823650, -0.600832910241916100, -0.600792940758926310, -0.600752969773954090, +-0.600712997287099150, -0.600673023298462060, -0.600633047808142310, -0.600593070816240030, -0.600553092322854810, -0.600513112328087020, -0.600473130832036570, -0.600433147834803280, +-0.600393163336486730, -0.600353177337187740, -0.600313189837005660, -0.600273200836040740, -0.600233210334392360, -0.600193218332161330, -0.600153224829447220, -0.600113229826349740, +-0.600073233322969580, -0.600033235319406330, -0.599993235815759920, -0.599953234812130140, -0.599913232308617590, -0.599873228305321970, -0.599833222802343300, -0.599793215799781180, +-0.599753207297736290, -0.599713197296308560, -0.599673185795597700, -0.599633172795703610, -0.599593158296726880, -0.599553142298767330, -0.599513124801924870, -0.599473105806299200, +-0.599433085311991240, -0.599393063319100470, -0.599353039827727030, -0.599313014837970730, -0.599272988349932150, -0.599232960363711210, -0.599192930879407390, -0.599152899897121730, +-0.599112867416953690, -0.599072833439003530, -0.599032797963370940, -0.598992760990156750, -0.598952722519460630, -0.598912682551382640, -0.598872641086022670, -0.598832598123481440, +-0.598792553663858750, -0.598752507707254630, -0.598712460253768790, -0.598672411303502350, -0.598632360856554690, -0.598592308913026280, -0.598552255473016710, -0.598512200536626790, +-0.598472144103956440, -0.598432086175105350, -0.598392026750174330, -0.598351965829263310, -0.598311903412472420, -0.598271839499901370, -0.598231774091651070, -0.598191707187821330, +-0.598151638788512300, -0.598111568893823890, -0.598071497503856800, -0.598031424618711060, -0.597991350238486710, -0.597951274363283660, -0.597911196993202830, -0.597871118128343930, +-0.597831037768807310, -0.597790955914692670, -0.597750872566101040, -0.597710787723132130, -0.597670701385885960, -0.597630613554463450, -0.597590524228964410, -0.597550433409488990, +-0.597510341096137100, -0.597470247289009770, -0.597430151988206810, -0.597390055193828480, -0.597349956905974700, -0.597309857124746270, -0.597269755850243330, -0.597229653082565930, +-0.597189548821814080, -0.597149443068088590, -0.597109335821489620, -0.597069227082117290, -0.597029116850071540, -0.596989005125453280, -0.596948891908362530, -0.596908777198899230, +-0.596868660997164400, -0.596828543303257850, -0.596788424117279950, -0.596748303439330610, -0.596708181269510970, -0.596668057607920740, -0.596627932454660390, -0.596587805809829950, +-0.596547677673530230, -0.596507548045861480, -0.596467416926923730, -0.596427284316817020, -0.596387150215642590, -0.596347014623500260, -0.596306877540490390, -0.596266738966712890, +-0.596226598902269030, -0.596186457347258610, -0.596146314301782000, -0.596106169765939330, -0.596066023739831530, -0.596025876223558740, -0.595985727217220760, -0.595945576720918970, +-0.595905424734753160, -0.595865271258823830, -0.595825116293230980, -0.595784959838075670, -0.595744801893457910, -0.595704642459478180, -0.595664481536236520, -0.595624319123833960, +-0.595584155222370630, -0.595543989831947010, -0.595503822952662910, -0.595463654584619690, -0.595423484727917280, -0.595383313382656150, -0.595343140548936440, -0.595302966226859190, +-0.595262790416524630, -0.595222613118032600, -0.595182434331484430, -0.595142254056980180, -0.595102072294620310, -0.595061889044504970, -0.595021704306735180, -0.594981518081411090, +-0.594941330368633280, -0.594901141168501790, -0.594860950481117760, -0.594820758306581430, -0.594780564644993180, -0.594740369496453040, -0.594700172861062470, -0.594659974738921400, +-0.594619775130130420, -0.594579574034789670, -0.594539371453000290, -0.594499167384862530, -0.594458961830476530, -0.594418754789943330, -0.594378546263363390, -0.594338336250836980, +-0.594298124752464460, -0.594257911768346970, -0.594217697298584650, -0.594177481343278190, -0.594137263902527520, -0.594097044976434230, -0.594056824565098120, -0.594016602668620110, +-0.593976379287100120, -0.593936154420639630, -0.593895928069338770, -0.593855700233298030, -0.593815470912617660, -0.593775240107399020, -0.593735007817742240, -0.593694774043748040, +-0.593654538785516440, -0.593614302043148910, -0.593574063816745600, -0.593533824106406760, -0.593493582912233750, -0.593453340234326720, -0.593413096072786360, -0.593372850427712930, +-0.593332603299207780, -0.593292354687371070, -0.593252104592303490, -0.593211853014105280, -0.593171599952877720, -0.593131345408721260, -0.593091089381736380, -0.593050831872023450, +-0.593010572879683840, -0.592970312404817790, -0.592930050447525890, -0.592889787007908510, -0.592849522086067120, -0.592809255682101850, -0.592768987796113090, -0.592728718428202180, +-0.592688447578469500, -0.592648175247015740, -0.592607901433941150, -0.592567626139347210, -0.592527349363334180, -0.592487071106002740, -0.592446791367453260, -0.592406510147787220, +-0.592366227447104880, -0.592325943265506920, -0.592285657603093820, -0.592245370459966840, -0.592205081836226550, -0.592164791731973450, -0.592124500147308110, -0.592084207082331890, +-0.592043912537145060, -0.592003616511848070, -0.591963319006542530, -0.591923020021328570, -0.591882719556307110, -0.591842417611578520, -0.591802114187244150, -0.591761809283404610, +-0.591721502900160460, -0.591681195037612300, -0.591640885695861370, -0.591600574875008390, -0.591560262575153820, -0.591519948796398350, -0.591479633538843250, -0.591439316802589210, +-0.591398998587736810, -0.591358678894386540, -0.591318357722639850, -0.591278035072597350, -0.591237710944359510, -0.591197385338027570, -0.591157058253702240, -0.591116729691484320, +-0.591076399651474180, -0.591036068133773410, -0.590995735138482360, -0.590955400665702070, -0.590915064715532900, -0.590874727288076440, -0.590834388383433160, -0.590794048001703990, +-0.590753706142989170, -0.590713362807390620, -0.590673017995008490, -0.590632671705943910, -0.590592323940297260, -0.590551974698170220, -0.590511623979663170, -0.590471271784877130, +-0.590430918113912570, -0.590390562966870980, -0.590350206343853050, -0.590309848244959250, -0.590269488670291160, -0.590229127619949280, -0.590188765094034730, -0.590148401092647770, +-0.590108035615890200, -0.590067668663862620, -0.590027300236665830, -0.589986930334400420, -0.589946558957167970, -0.589906186105069290, -0.589865811778204960, -0.589825435976675800, +-0.589785058700583510, -0.589744679950028550, -0.589704299725111740, -0.589663918025933990, -0.589623534852596660, -0.589583150205200580, -0.589542764083846320, -0.589502376488635460, +-0.589461987419668600, -0.589421596877046870, -0.589381204860870760, -0.589340811371241950, -0.589300416408261140, -0.589260019972029260, -0.589219622062647000, -0.589179222680216050, +-0.589138821824837010, -0.589098419496610900, -0.589058015695638430, -0.589017610422021280, -0.588977203675860150, -0.588936795457255970, -0.588896385766309430, -0.588855974603122220, +-0.588815561967795160, -0.588775147860428840, -0.588734732281124940, -0.588694315229984280, -0.588653896707107770, -0.588613476712596230, -0.588573055246551350, -0.588532632309073820, +-0.588492207900264690, -0.588451782020224630, -0.588411354669055590, -0.588370925846858130, -0.588330495553733290, -0.588290063789781880, -0.588249630555105710, -0.588209195849805470, +-0.588168759673982190, -0.588128322027736680, -0.588087882911170650, -0.588047442324384990, -0.588007000267480760, -0.587966556740558640, -0.587926111743720450, -0.587885665277066980, +-0.587845217340699060, -0.587804767934718360, -0.587764317059225830, -0.587723864714322360, -0.587683410900109000, -0.587642955616687450, -0.587602498864158500, -0.587562040642623300, +-0.587521580952182650, -0.587481119792938490, -0.587440657164991390, -0.587400193068442710, -0.587359727503393160, -0.587319260469944760, -0.587278791968198100, -0.587238321998254430, +-0.587197850560214670, -0.587157377654180630, -0.587116903280253120, -0.587076427438533060, -0.587035950129122240, -0.586995471352121490, -0.586954991107632160, -0.586914509395754960, +-0.586874026216591790, -0.586833541570243590, -0.586793055456811600, -0.586752567876396510, -0.586712078829100480, -0.586671588315024200, -0.586631096334268910, -0.586590602886935540, +-0.586550107973126010, -0.586509611592941240, -0.586469113746482470, -0.586428614433850410, -0.586388113655147310, -0.586347611410473980, -0.586307107699931110, -0.586266602523620950, +-0.586226095881644200, -0.586185587774102230, -0.586145078201095960, -0.586104567162727300, -0.586064054659097280, -0.586023540690307150, -0.585983025256457730, -0.585942508357651160, +-0.585901989993988240, -0.585861470165570440, -0.585820948872498580, -0.585780426114874690, -0.585739901892799790, -0.585699376206375020, -0.585658849055701540, -0.585618320440881250, +-0.585577790362015180, -0.585537258819204260, -0.585496725812550630, -0.585456191342155100, -0.585415655408119130, -0.585375118010543650, -0.585334579149530800, -0.585294038825181380, +-0.585253497037596990, -0.585212953786878430, -0.585172409073127840, -0.585131862896446140, -0.585091315256934920, -0.585050766154694980, -0.585010215589828570, -0.584969663562436510, +-0.584929110072620380, -0.584888555120481100, -0.584847998706120810, -0.584807440829640420, -0.584766881491141530, -0.584726320690725050, -0.584685758428493130, -0.584645194704546790, +-0.584604629518987170, -0.584564062871916200, -0.584523494763435240, -0.584482925193645420, -0.584442354162648000, -0.584401781670545020, -0.584361207717437600, -0.584320632303427120, +-0.584280055428614720, -0.584239477093102530, -0.584198897296991700, -0.584158316040383600, -0.584117733323379350, -0.584077149146081110, -0.584036563508590010, -0.583995976411007530, +-0.583955387853434700, -0.583914797835973780, -0.583874206358725890, -0.583833613421792070, -0.583793019025274700, -0.583752423169274670, -0.583711825853893580, -0.583671227079232580, +-0.583630626845393910, -0.583590025152478600, -0.583549422000588350, -0.583508817389824070, -0.583468211320288140, -0.583427603792081690, -0.583386994805306200, -0.583346384360062920, +-0.583305772456453990, -0.583265159094580650, -0.583224544274544400, -0.583183927996446470, -0.583143310260389120, -0.583102691066473390, -0.583062070414800630, -0.583021448305472980, +-0.582980824738591810, -0.582940199714258480, -0.582899573232574350, -0.582858945293641680, -0.582818315897561610, -0.582777685044435720, -0.582737052734365270, -0.582696418967452610, +-0.582655783743798890, -0.582615147063505700, -0.582574508926674170, -0.582533869333406900, -0.582493228283804900, -0.582452585777969770, -0.582411941816002860, -0.582371296398006440, +-0.582330649524081760, -0.582290001194330500, -0.582249351408853810, -0.582208700167754170, -0.582168047471132820, -0.582127393319090910, -0.582086737711730920, -0.582046080649154090, +-0.582005422131462000, -0.581964762158756030, -0.581924100731138540, -0.581883437848710770, -0.581842773511574430, -0.581802107719830760, -0.581761440473582140, -0.581720771772930020, +-0.581680101617975900, -0.581639430008821230, -0.581598756945568280, -0.581558082428318520, -0.581517406457173420, -0.581476729032234570, -0.581436050153604220, -0.581395369821383730, +-0.581354688035674470, -0.581314004796578910, -0.581273320104198190, -0.581232633958634230, -0.581191946359988390, -0.581151257308363030, -0.581110566803859530, -0.581069874846579570, +-0.581029181436624520, -0.580988486574096960, -0.580947790259098150, -0.580907092491729890, -0.580866393272093550, -0.580825692600291490, -0.580784990476425290, -0.580744286900596540, +-0.580703581872906830, -0.580662875393458400, -0.580622167462352850, -0.580581458079691530, -0.580540747245576920, -0.580500034960110490, -0.580459321223393830, -0.580418606035528640, +-0.580377889396617270, -0.580337171306761100, -0.580296451766062040, -0.580255730774621560, -0.580215008332542030, -0.580174284439925030, -0.580133559096872250, -0.580092832303485300, +-0.580052104059866620, -0.580011374366117600, -0.579970643222340150, -0.579929910628635860, -0.579889176585107080, -0.579848441091855290, -0.579807704148982080, -0.579766965756590040, +-0.579726225914780510, -0.579685484623655430, -0.579644741883316270, -0.579603997693865610, -0.579563252055405040, -0.579522504968036260, -0.579481756431860840, -0.579441006446981490, +-0.579400255013499570, -0.579359502131516990, -0.579318747801135240, -0.579277992022457110, -0.579237234795583980, -0.579196476120617640, -0.579155715997659910, -0.579114954426813160, +-0.579074191408178950, -0.579033426941859440, -0.578992661027955880, -0.578951893666571070, -0.578911124857806490, -0.578870354601763730, -0.578829582898545470, -0.578788809748253310, +-0.578748035150989050, -0.578707259106854390, -0.578666481615951910, -0.578625702678383200, -0.578584922294250290, -0.578544140463654770, -0.578503357186699100, -0.578462572463485200, +-0.578421786294114780, -0.578380998678689530, -0.578340209617312140, -0.578299419110084310, -0.578258627157107850, -0.578217833758484460, -0.578177038914316820, -0.578136242624706640, +-0.578095444889755510, -0.578054645709566110, -0.578013845084240030, -0.577973043013879420, -0.577932239498585850, -0.577891434538462030, -0.577850628133609550, -0.577809820284130530, +-0.577769010990126670, -0.577728200251700570, -0.577687388068954030, -0.577646574441988970, -0.577605759370907080, -0.577564942855811280, -0.577524124896803050, -0.577483305493984410, +-0.577442484647457290, -0.577401662357324260, -0.577360838623687030, -0.577320013446647410, -0.577279186826308190, -0.577238358762770850, -0.577197529256137650, -0.577156698306510400, +-0.577115865913991670, -0.577075032078683270, -0.577034196800687240, -0.576993360080105380, -0.576952521917040500, -0.576911682311594290, -0.576870841263869010, -0.576829998773966120, +-0.576789154841988560, -0.576748309468038230, -0.576707462652217060, -0.576666614394626960, -0.576625764695370640, -0.576584913554549880, -0.576544060972266850, -0.576503206948623340, +-0.576462351483722050, -0.576421494577665010, -0.576380636230553800, -0.576339776442491460, -0.576298915213579570, -0.576258052543920480, -0.576217188433615800, -0.576176322882768540, +-0.576135455891480520, -0.576094587459853870, -0.576053717587990290, -0.576012846275992920, -0.575971973523963340, -0.575931099332003820, -0.575890223700216250, -0.575849346628703460, +-0.575808468117567250, -0.575767588166909980, -0.575726706776833240, -0.575685823947440170, -0.575644939678832570, -0.575604053971112250, -0.575563166824382130, -0.575522278238744130, +-0.575481388214300390, -0.575440496751152830, -0.575399603849404360, -0.575358709509156910, -0.575317813730512720, -0.575276916513573600, -0.575236017858442470, -0.575195117765221480, +-0.575154216234012530, -0.575113313264917770, -0.575072408858040010, -0.575031503013481270, -0.574990595731343810, -0.574949687011729440, -0.574908776854741290, -0.574867865260481170, +-0.574826952229051000, -0.574786037760553810, -0.574745121855091520, -0.574704204512766490, -0.574663285733680530, -0.574622365517936660, -0.574581443865637030, -0.574540520776883670, +-0.574499596251778710, -0.574458670290425080, -0.574417742892924800, -0.574376814059380130, -0.574335883789893090, -0.574294952084566710, -0.574254018943502920, -0.574213084366804070, +-0.574172148354572200, -0.574131210906910330, -0.574090272023920380, -0.574049331705704380, -0.574008389952365470, -0.573967446764005460, -0.573926502140726940, -0.573885556082631810, +-0.573844608589823110, -0.573803659662402990, -0.573762709300473570, -0.573721757504137120, -0.573680804273496660, -0.573639849608654110, -0.573598893509711940, -0.573557935976772180, +-0.573516977009937980, -0.573476016609311360, -0.573435054774994680, -0.573394091507089980, -0.573353126805700390, -0.573312160670928050, -0.573271193102875220, -0.573230224101644040, +-0.573189253667337750, -0.573148281800058280, -0.573107308499907760, -0.573066333766989340, -0.573025357601405050, -0.572984380003257350, -0.572943400972648400, -0.572902420509681320, +-0.572861438614458150, -0.572820455287081360, -0.572779470527653100, -0.572738484336276500, -0.572697496713053810, -0.572656507658087180, -0.572615517171479070, -0.572574525253332520, +-0.572533531903749560, -0.572492537122832880, -0.572451540910684400, -0.572410543267407480, -0.572369544193104150, -0.572328543687876670, -0.572287541751828170, -0.572246538385060790, +-0.572205533587677120, -0.572164527359779180, -0.572123519701470350, -0.572082510612852760, -0.572041500094028770, -0.572000488145100740, -0.571959474766171820, -0.571918459957344250, +-0.571877443718720510, -0.571836426050402750, -0.571795406952494420, -0.571754386425097460, -0.571713364468314560, -0.571672341082247960, -0.571631316267000700, -0.571590290022675250, +-0.571549262349373750, -0.571508233247199460, -0.571467202716254510, -0.571426170756641590, -0.571385137368462860, -0.571344102551821780, -0.571303066306820260, -0.571262028633561130, +-0.571220989532146620, -0.571179949002679990, -0.571138907045263490, -0.571097863659999700, -0.571056818846990890, -0.571015772606340290, -0.570974724938150380, -0.570933675842523640, +-0.570892625319562420, -0.570851573369369870, -0.570810519992048460, -0.570769465187700780, -0.570728408956428960, -0.570687351298336590, -0.570646292213525810, -0.570605231702098870, +-0.570564169764159250, -0.570523106399809300, -0.570482041609151500, -0.570440975392288220, -0.570399907749322920, -0.570358838680357750, -0.570317768185495620, -0.570276696264838680, +-0.570235622918490280, -0.570194548146552900, -0.570153471949129020, -0.570112394326321210, -0.570071315278232850, -0.570030234804966060, -0.569989152906623770, -0.569948069583308130, +-0.569906984835122810, -0.569865898662169970, -0.569824811064551960, -0.569783722042372380, -0.569742631595733460, -0.569701539724738030, -0.569660446429488320, -0.569619351710087820, +-0.569578255566638990, -0.569537157999244540, -0.569496059008006710, -0.569454958593029190, -0.569413856754414250, -0.569372753492264790, -0.569331648806682970, -0.569290542697772350, +-0.569249435165635420, -0.569208326210374980, -0.569167215832093290, -0.569126104030893920, -0.569084990806879240, -0.569043876160151840, -0.569002760090814960, -0.568961642598971310, +-0.568920523684723570, -0.568879403348174110, -0.568838281589426400, -0.568797158408583140, -0.568756033805746910, -0.568714907781020300, -0.568673780334506660, -0.568632651466308700, +-0.568591521176529000, -0.568550389465270260, -0.568509256332635830, -0.568468121778728190, -0.568426985803650360, -0.568385848407504720, -0.568344709590394740, -0.568303569352422990, +-0.568262427693692400, -0.568221284614305320, -0.568180140114365350, -0.568138994193975070, -0.568097846853236940, -0.568056698092254560, -0.568015547911130400, -0.567974396309967490, +-0.567933243288868070, -0.567892088847935960, -0.567850932987273740, -0.567809775706984100, -0.567768617007169630, -0.567727456887934020, -0.567686295349379750, -0.567645132391609740, +-0.567603968014726460, -0.567562802218833710, -0.567521635004033960, -0.567480466370430150, -0.567439296318124730, -0.567398124847221520, -0.567356951957822990, -0.567315777650031610, +-0.567274601923951180, -0.567233424779684300, -0.567192246217333880, -0.567151066237002400, -0.567109884838793650, -0.567068702022810230, -0.567027517789155060, -0.566986332137930700, +-0.566945145069240870, -0.566903956583188150, -0.566862766679875560, -0.566821575359405690, -0.566780382621882240, -0.566739188467407900, -0.566697992896085580, -0.566656795908017760, +-0.566615597503308480, -0.566574397682060190, -0.566533196444375500, -0.566491993790358190, -0.566450789720110870, -0.566409584233736550, -0.566368377331337940, -0.566327169013018830, +-0.566285959278881700, -0.566244748129029700, -0.566203535563565510, -0.566162321582592830, -0.566121106186214250, -0.566079889374533020, -0.566038671147651610, -0.565997451505673930, +-0.565956230448702690, -0.565915007976840800, -0.565873784090191070, -0.565832558788857190, -0.565791332072941970, -0.565750103942547990, -0.565708874397779170, -0.565667643438738100, +-0.565626411065527910, -0.565585177278251420, -0.565543942077012310, -0.565502705461913390, -0.565461467433057590, -0.565420227990547920, -0.565378987134487860, -0.565337744864980450, +-0.565296501182128710, -0.565255256086035330, -0.565214009576804120, -0.565172761654537890, -0.565131512319339780, -0.565090261571312480, -0.565049009410559910, -0.565007755837184880, +-0.564966500851290410, -0.564925244452979310, -0.564883986642355510, -0.564842727419521680, -0.564801466784580760, -0.564760204737636550, -0.564718941278791740, -0.564677676408149590, +-0.564636410125812890, -0.564595142431885580, -0.564553873326470330, -0.564512602809670420, -0.564471330881588630, -0.564430057542328890, -0.564388782791994110, -0.564347506630687220, +-0.564306229058511240, -0.564264950075570090, -0.564223669681966580, -0.564182387877803840, -0.564141104663184790, -0.564099820038213350, -0.564058534002992330, -0.564017246557624640, +-0.563975957702214200, -0.563934667436863930, -0.563893375761676860, -0.563852082676756130, -0.563810788182205420, -0.563769492278127780, -0.563728194964626450, -0.563686896241804240, +-0.563645596109765170, -0.563604294568612050, -0.563562991618448250, -0.563521687259376680, -0.563480381491501150, -0.563439074314924680, -0.563397765729750530, -0.563356455736081620, +-0.563315144334021860, -0.563273831523674380, -0.563232517305141790, -0.563191201678528430, -0.563149884643937000, -0.563108566201470870, -0.563067246351232950, -0.563025925093327270, +-0.562984602427856750, -0.562943278354924750, -0.562901952874634180, -0.562860625987089190, -0.562819297692392470, -0.562777967990647610, -0.562736636881957520, -0.562695304366426120, +-0.562653970444156440, -0.562612635115251840, -0.562571298379815340, -0.562529960237950880, -0.562488620689761580, -0.562447279735350690, -0.562405937374821360, -0.562364593608277400, +-0.562323248435822040, -0.562281901857558110, -0.562240553873589840, -0.562199204484020280, -0.562157853688952550, -0.562116501488489910, -0.562075147882736380, -0.562033792871795000, +-0.561992436455769130, -0.561951078634761680, -0.561909719408877020, -0.561868358778218060, -0.561826996742888160, -0.561785633302990470, -0.561744268458629010, -0.561702902209906820, +-0.561661534556927470, -0.561620165499793880, -0.561578795038610300, -0.561537423173479660, -0.561496049904505080, -0.561454675231790820, -0.561413299155439800, -0.561371921675555610, +-0.561330542792241150, -0.561289162505600790, -0.561247780815737450, -0.561206397722754710, -0.561165013226755600, -0.561123627327844380, -0.561082240026124060, -0.561040851321698120, +-0.560999461214669590, -0.560958069705142950, -0.560916676793220990, -0.560875282479007420, -0.560833886762605260, -0.560792489644118760, -0.560751091123650960, -0.560709691201305200, +-0.560668289877185530, -0.560626887151395080, -0.560585483024037430, -0.560544077495215730, -0.560502670565034220, -0.560461262233595940, -0.560419852501004570, -0.560378441367363260, +-0.560337028832776140, -0.560295614897346470, -0.560254199561177720, -0.560212782824373150, -0.560171364687036990, -0.560129945149272390, -0.560088524211182940, -0.560047101872871880, +-0.560005678134443350, -0.559964252996000610, -0.559922826457647020, -0.559881398519486590, -0.559839969181622710, -0.559798538444158830, -0.559757106307198330, -0.559715672770845440, +-0.559674237835203310, -0.559632801500375530, -0.559591363766465570, -0.559549924633577440, -0.559508484101814420, -0.559467042171280290, -0.559425598842078210, -0.559384154114312530, +-0.559342707988086390, -0.559301260463503480, -0.559259811540667060, -0.559218361219681490, -0.559176909500650020, -0.559135456383676230, -0.559094001868863490, -0.559052545956316150, +-0.559011088646137360, -0.558969629938430470, -0.558928169833299960, -0.558886708330848970, -0.558845245431181190, -0.558803781134399990, -0.558762315440609610, -0.558720848349913530, +-0.558679379862415340, -0.558637909978218270, -0.558596438697426810, -0.558554966020144320, -0.558513491946474370, -0.558472016476520230, -0.558430539610386580, -0.558389061348176450, +-0.558347581689993770, -0.558306100635941660, -0.558264618186124720, -0.558223134340646300, -0.558181649099609540, -0.558140162463119150, -0.558098674431278250, -0.558057185004190770, +-0.558015694181959840, -0.557974201964690160, -0.557932708352484990, -0.557891213345447890, -0.557849716943682570, -0.557808219147293170, -0.557766719956383270, -0.557725219371056680, +-0.557683717391416530, -0.557642214017567530, -0.557600709249613020, -0.557559203087656610, -0.557517695531801970, -0.557476186582153370, -0.557434676238814380, -0.557393164501888250, +-0.557351651371479570, -0.557310136847691820, -0.557268620930628680, -0.557227103620393740, -0.557185584917091250, -0.557144064820824900, -0.557102543331698400, -0.557061020449815090, +-0.557019496175279680, -0.556977970508195420, -0.556936443448666330, -0.556894914996795660, -0.556853385152688230, -0.556811853916447270, -0.556770321288176610, -0.556728787267979810, +-0.556687251855961460, -0.556645715052224930, -0.556604176856874130, -0.556562637270012540, -0.556521096291744730, -0.556479553922174070, -0.556438010161404260, -0.556396465009539760, +-0.556354918466684170, -0.556313370532941280, -0.556271821208414450, -0.556230270493208610, -0.556188718387427010, -0.556147164891173550, -0.556105610004551940, -0.556064053727666540, +-0.556022496060621150, -0.555980937003519360, -0.555939376556464970, -0.555897814719562570, -0.555856251492915510, -0.555814686876627830, -0.555773120870803110, -0.555731553475545930, +-0.555689984690959870, -0.555648414517148530, -0.555606842954216470, -0.555565270002267300, -0.555523695661404910, -0.555482119931733020, -0.555440542813356200, -0.555398964306377920, +-0.555357384410902320, -0.555315803127032770, -0.555274220454874180, -0.555232636394530020, -0.555191050946104330, -0.555149464109700560, -0.555107875885423540, -0.555066286273376840, +-0.555024695273664380, -0.554983102886389860, -0.554941509111657850, -0.554899913949572170, -0.554858317400236280, -0.554816719463754990, -0.554775120140231890, -0.554733519429771120, +-0.554691917332476030, -0.554650313848451540, -0.554608708977801230, -0.554567102720629260, -0.554525495077039080, -0.554483886047135610, -0.554442275631022330, -0.554400663828803380, +-0.554359050640582440, -0.554317436066464220, -0.554275820106552410, -0.554234202760951030, -0.554192584029763790, -0.554150963913095480, -0.554109342411049810, -0.554067719523730350, +-0.554026095251241910, -0.553984469593688300, -0.553942842551173540, -0.553901214123801220, -0.553859584311676370, -0.553817953114902450, -0.553776320533583610, -0.553734686567823650, +-0.553693051217727380, -0.553651414483398500, -0.553609776364941020, -0.553568136862458760, -0.553526495976056520, -0.553484853705838000, -0.553443210051907440, -0.553401565014368440, +-0.553359918593325780, -0.553318270788883520, -0.553276621601145440, -0.553234971030215460, -0.553193319076198510, -0.553151665739198160, -0.553110011019318340, -0.553068354916663840, +-0.553026697431338480, -0.552985038563446380, -0.552943378313091260, -0.552901716680378130, -0.552860053665410580, -0.552818389268293080, -0.552776723489129100, -0.552735056328023780, +-0.552693387785080700, -0.552651717860404230, -0.552610046554098070, -0.552568373866267230, -0.552526699797015410, -0.552485024346446750, -0.552443347514665280, -0.552401669301775810, +-0.552359989707882140, -0.552318308733088070, -0.552276626377498640, -0.552234942641217640, -0.552193257524349330, -0.552151571026997410, -0.552109883149267010, -0.552068193891261830, +-0.552026503253086220, -0.551984811234844000, -0.551943117836640180, -0.551901423058578480, -0.551859726900763240, -0.551818029363298270, -0.551776330446288600, -0.551734630149838150, +-0.551692928474051160, -0.551651225419031330, -0.551609520984883920, -0.551567815171712720, -0.551526107979621650, -0.551484399408715520, -0.551442689459098580, -0.551400978130874740, +-0.551359265424148260, -0.551317551339023830, -0.551275835875605580, -0.551234119033997770, -0.551192400814304320, -0.551150681216630130, -0.551108960241079360, -0.551067237887756130, +-0.551025514156764370, -0.550983789048209330, -0.550942062562194690, -0.550900334698824930, -0.550858605458203980, -0.550816874840436950, -0.550775142845627670, -0.550733409473880500, +-0.550691674725299450, -0.550649938599989670, -0.550608201098054970, -0.550566462219599370, -0.550524721964728010, -0.550482980333544920, -0.550441237326154240, -0.550399492942660220, +-0.550357747183167770, -0.550316000047781030, -0.550274251536604250, -0.550232501649741360, -0.550190750387297700, -0.550148997749377200, -0.550107243736084110, -0.550065488347522560, +-0.550023731583797690, -0.549981973445013540, -0.549940213931274350, -0.549898453042684370, -0.549856690779348510, -0.549814927141371030, -0.549773162128855740, -0.549731395741907990, +-0.549689627980631810, -0.549647858845131450, -0.549606088335511170, -0.549564316451875980, -0.549522543194330030, -0.549480768562977670, -0.549438992557923060, -0.549397215179271310, +-0.549355436427126590, -0.549313656301593120, -0.549271874802775280, -0.549230091930778100, -0.549188307685705700, -0.549146522067662460, -0.549104735076752610, -0.549062946713081310, +-0.549021156976752580, -0.548979365867870660, -0.548937573386540700, -0.548895779532866720, -0.548853984306953310, -0.548812187708904610, -0.548770389738825860, -0.548728590396820980, +-0.548686789682994780, -0.548644987597451170, -0.548603184140295410, -0.548561379311631850, -0.548519573111564630, -0.548477765540198230, -0.548435956597637770, -0.548394146283987420, +-0.548352334599351730, -0.548310521543834860, -0.548268707117541940, -0.548226891320577340, -0.548185074153045070, -0.548143255615050620, -0.548101435706697890, -0.548059614428091590, +-0.548017791779335960, -0.547975967760536140, -0.547934142371796500, -0.547892315613221380, -0.547850487484915270, -0.547808657986983190, -0.547766827119529510, -0.547724994882658690, +-0.547683161276475090, -0.547641326301083860, -0.547599489956589470, -0.547557652243096270, -0.547515813160708520, -0.547473972709531690, -0.547432130889669800, -0.547390287701227770, +-0.547348443144309530, -0.547306597219020530, -0.547264749925465140, -0.547222901263747400, -0.547181051233972870, -0.547139199836245700, -0.547097347070670480, -0.547055492937351560, +-0.547013637436394200, -0.546971780567902850, -0.546929922331982010, -0.546888062728736020, -0.546846201758270150, -0.546804339420688850, -0.546762475716096710, -0.546720610644597980, +-0.546678744206298140, -0.546636876401301430, -0.546595007229712440, -0.546553136691635630, -0.546511264787176380, -0.546469391516438920, -0.546427516879527620, -0.546385640876547950, +-0.546343763507604050, -0.546301884772800840, -0.546260004672242560, -0.546218123206034580, -0.546176240374281360, -0.546134356177087500, -0.546092470614557350, -0.546050583686796490, +-0.546008695393909060, -0.545966805735999980, -0.545924914713173500, -0.545883022325535090, -0.545841128573189120, -0.545799233456240260, -0.545757336974793010, -0.545715439128952820, +-0.545673539918823950, -0.545631639344510980, -0.545589737406119160, -0.545547834103753070, -0.545505929437517410, -0.545464023407516540, -0.545422116013855930, -0.545380207256640050, +-0.545338297135973700, -0.545296385651961150, -0.545254472804708070, -0.545212558594318830, -0.545170643020898130, -0.545128726084550430, -0.545086807785381430, -0.545044888123495270, +-0.545002967098996980, -0.544961044711990810, -0.544919120962582440, -0.544877195850876350, -0.544835269376977130, -0.544793341540989460, -0.544751412343018830, -0.544709481783169580, +-0.544667549861546310, -0.544625616578254480, -0.544583681933398680, -0.544541745927083600, -0.544499808559413930, -0.544457869830494930, -0.544415929740431400, -0.544373988289327930, +-0.544332045477289190, -0.544290101304420680, -0.544248155770826970, -0.544206208876612750, -0.544164260621882720, -0.544122311006742470, -0.544080360031296340, -0.544038407695649370, +-0.543996453999906040, -0.543954498944171800, -0.543912542528551480, -0.543870584753149310, -0.543828625618071100, -0.543786665123421330, -0.543744703269304910, -0.543702740055826310, +-0.543660775483091330, -0.543618809551204340, -0.543576842260270250, -0.543534873610393770, -0.543492903601680570, -0.543450932234235020, -0.543408959508162040, -0.543366985423566430, +-0.543325009980553660, -0.543283033179228440, -0.543241055019695550, -0.543199075502059700, -0.543157094626426470, -0.543115112392900560, -0.543073128801586540, -0.543031143852589990, +-0.542989157546015620, -0.542947169881968340, -0.542905180860552840, -0.542863190481874590, -0.542821198746038510, -0.542779205653149410, -0.542737211203311860, -0.542695215396631790, +-0.542653218233213550, -0.542611219713162280, -0.542569219836582570, -0.542527218603580330, -0.542485216014259920, -0.542443212068726480, -0.542401206767084590, -0.542359200109440160, +-0.542317192095897680, -0.542275182726561830, -0.542233172001538420, -0.542191159920932140, -0.542149146484847800, -0.542107131693390420, -0.542065115546665480, -0.542023098044777660, +-0.541981079187832230, -0.541939058975933750, -0.541897037409187930, -0.541855014487699460, -0.541812990211573590, -0.541770964580914780, -0.541728937595828960, -0.541686909256420710, +-0.541644879562795280, -0.541602848515057240, -0.541560816113312530, -0.541518782357665710, -0.541476747248221920, -0.541434710785085980, -0.541392672968363580, -0.541350633798159400, +-0.541308593274578360, -0.541266551397726280, -0.541224508167707730, -0.541182463584627960, -0.541140417648591550, -0.541098370359704540, -0.541056321718071610, -0.541014271723797900, +-0.540972220376988110, -0.540930167677748150, -0.540888113626182720, -0.540846058222397060, -0.540804001466495880, -0.540761943358585070, -0.540719883898769460, -0.540677823087154060, +-0.540635760923843690, -0.540593697408944360, -0.540551632542560780, -0.540509566324797740, -0.540467498755761170, -0.540425429835555860, -0.540383359564286960, -0.540341287942059270, +-0.540299214968978700, -0.540257140645150180, -0.540215064970678730, -0.540172987945669260, -0.540130909570227800, -0.540088829844458940, -0.540046748768468030, -0.540004666342359880, +-0.539962582566240520, -0.539920497440214640, -0.539878410964387490, -0.539836323138863980, -0.539794233963749930, -0.539752143439150460, -0.539710051565170160, -0.539667958341915170, +-0.539625863769490180, -0.539583767848000550, -0.539541670577551200, -0.539499571958248050, -0.539457471990195890, -0.539415370673500090, -0.539373268008265570, -0.539331163994598130, +-0.539289058632602790, -0.539246951922384920, -0.539204843864049210, -0.539162734457701800, -0.539120623703447490, -0.539078511601391640, -0.539036398151639170, -0.538994283354296110, +-0.538952167209467260, -0.538910049717258090, -0.538867930877773290, -0.538825810691119120, -0.538783689157400380, -0.538741566276722090, -0.538699442049190290, -0.538657316474909780, +-0.538615189553986130, -0.538573061286524050, -0.538530931672629660, -0.538488800712407900, -0.538446668405964220, -0.538404534753403440, -0.538362399754831800, -0.538320263410354110, +-0.538278125720075720, -0.538235986684101660, -0.538193846302537970, -0.538151704575489780, -0.538109561503062220, -0.538067417085360430, -0.538025271322490450, -0.537983124214557300, +-0.537940975761666000, -0.537898825963922580, -0.537856674821432180, -0.537814522334300050, -0.537772368502631220, -0.537730213326531810, -0.537688056806106870, -0.537645898941461860, +-0.537603739732701700, -0.537561579179932520, -0.537519417283259470, -0.537477254042787900, -0.537435089458622730, -0.537392923530870200, -0.537350756259635460, -0.537308587645023760, +-0.537266417687140230, -0.537224246386091010, -0.537182073741981240, -0.537139899754915830, -0.537097724425001030, -0.537055547752341990, -0.537013369737044060, -0.536971190379212370, +-0.536929009678952960, -0.536886827636371190, -0.536844644251572190, -0.536802459524661320, -0.536760273455744620, -0.536718086044927320, -0.536675897292314690, -0.536633707198011960, +-0.536591515762125380, -0.536549322984759990, -0.536507128866021370, -0.536464933406014420, -0.536422736604845630, -0.536380538462619900, -0.536338338979442500, -0.536296138155419650, +-0.536253935990656410, -0.536211732485258330, -0.536169527639330570, -0.536127321452979370, -0.536085113926309860, -0.536042905059427640, -0.536000694852437620, -0.535958483305446380, +-0.535916270418558830, -0.535874056191880670, -0.535831840625516920, -0.535789623719574060, -0.535747405474157110, -0.535705185889371550, -0.535662964965322730, -0.535620742702116900, +-0.535578519099859100, -0.535536294158655110, -0.535494067878609980, -0.535451840259830060, -0.535409611302420490, -0.535367381006486620, -0.535325149372134600, -0.535282916399469680, +-0.535240682088597540, -0.535198446439623220, -0.535156209452653300, -0.535113971127792690, -0.535071731465147300, -0.535029490464822180, -0.534987248126923660, -0.534945004451557020, +-0.534902759438827920, -0.534860513088841530, -0.534818265401704180, -0.534776016377521150, -0.534733766016398220, -0.534691514318440420, -0.534649261283754120, -0.534607006912444780, +-0.534564751204617550, -0.534522494160378780, -0.534480235779833720, -0.534437976063088180, -0.534395715010247300, -0.534353452621417420, -0.534311188896704040, -0.534268923836212610, +-0.534226657440048490, -0.534184389708318160, -0.534142120641126760, -0.534099850238580090, -0.534057578500783500, -0.534015305427843260, -0.533973031019864820, -0.533930755276953770, +-0.533888478199215370, -0.533846199786756290, -0.533803920039681580, -0.533761638958096810, -0.533719356542108230, -0.533677072791821310, -0.533634787707341740, -0.533592501288774780, +-0.533550213536226890, -0.533507924449803550, -0.533465634029610340, -0.533423342275752720, -0.533381049188337180, -0.533338754767468840, -0.533296459013253730, -0.533254161925797110, +-0.533211863505205440, -0.533169563751584090, -0.533127262665038850, -0.533084960245675090, -0.533042656493599280, -0.533000351408916770, -0.532958044991733490, -0.532915737242154690, +-0.532873428160286930, -0.532831117746235590, -0.532788806000106030, -0.532746492922004930, -0.532704178512037550, -0.532661862770309690, -0.532619545696926820, -0.532577227291995410, +-0.532534907555621050, -0.532492586487909310, -0.532450264088965790, -0.532407940358897050, -0.532365615297808350, -0.532323288905805600, -0.532280961182994280, -0.532238632129480970, +-0.532196301745371030, -0.532153970030770360, -0.532111636985784450, -0.532069302610519770, -0.532026966905081890, -0.531984629869576060, -0.531942291504109210, -0.531899951808786460, +-0.531857610783713960, -0.531815268428997070, -0.531772924744742360, -0.531730579731055310, -0.531688233388041720, -0.531645885715807290, -0.531603536714458480, -0.531561186384100880, +-0.531518834724840290, -0.531476481736782190, -0.531434127420033380, -0.531391771774699100, -0.531349414800885490, -0.531307056498697920, -0.531264696868243070, -0.531222335909626530, +-0.531179973622953770, -0.531137610008331480, -0.531095245065865140, -0.531052878795660650, -0.531010511197823610, -0.530968142272460700, -0.530925772019677390, -0.530883400439579600, +-0.530841027532273020, -0.530798653297864240, -0.530756277736458840, -0.530713900848162720, -0.530671522633081480, -0.530629143091321810, -0.530586762222989170, -0.530544380028189820, +-0.530501996507029010, -0.530459611659613640, -0.530417225486049190, -0.530374837986441360, -0.530332449160896720, -0.530290059009521090, -0.530247667532420250, -0.530205274729699920, +-0.530162880601466660, -0.530120485147826280, -0.530078088368884700, -0.530035690264747390, -0.529993290835521380, -0.529950890081312130, -0.529908488002225560, -0.529866084598367480, +-0.529823679869844580, -0.529781273816762430, -0.529738866439227070, -0.529696457737344200, -0.529654047711220600, -0.529611636360961870, -0.529569223686674030, -0.529526809688462770, +-0.529484394366434800, -0.529441977720695900, -0.529399559751351670, -0.529357140458508900, -0.529314719842273300, -0.529272297902750880, -0.529229874640047340, -0.529187450054269480, +-0.529145024145523110, -0.529102596913914040, -0.529060168359548170, -0.529017738482532200, -0.528975307282971930, -0.528932874760973390, -0.528890440916642280, -0.528848005750085500, +-0.528805569261408650, -0.528763131450717850, -0.528720692318118910, -0.528678251863718530, -0.528635810087622620, -0.528593366989936750, -0.528550922570767860, -0.528508476830221620, +-0.528466029768404180, -0.528423581385421340, -0.528381131681379900, -0.528338680656385670, -0.528296228310544680, -0.528253774643962840, -0.528211319656746840, -0.528168863349002590, +-0.528126405720836130, -0.528083946772353370, -0.528041486503661010, -0.527999024914865060, -0.527956562006071440, -0.527914097777386070, -0.527871632228915870, -0.527829165360766520, +-0.527786697173043940, -0.527744227665854940, -0.527701756839305420, -0.527659284693501540, -0.527616811228548980, -0.527574336444554870, -0.527531860341624800, -0.527489382919865140, +-0.527446904179381670, -0.527404424120281320, -0.527361942742669900, -0.527319460046653530, -0.527276976032338250, -0.527234490699830860, -0.527192004049237270, -0.527149516080663630, +-0.527107026794215840, -0.527064536190000930, -0.527022044268124600, -0.526979551028693200, -0.526937056471812440, -0.526894560597589550, -0.526852063406130220, -0.526809564897540270, +-0.526767065071926940, -0.526724563929395820, -0.526682061470053360, -0.526639557694005280, -0.526597052601358810, -0.526554546192219640, -0.526512038466694140, -0.526469529424888120, +-0.526427019066908700, -0.526384507392861690, -0.526341994402853340, -0.526299480096989790, -0.526256964475377840, -0.526214447538123410, -0.526171929285332960, -0.526129409717112310, +-0.526086888833568470, -0.526044366634807470, -0.526001843120935120, -0.525959318292058550, -0.525916792148283680, -0.525874264689716760, -0.525831735916463930, -0.525789205828632090, +-0.525746674426327170, -0.525704141709655630, -0.525661607678723390, -0.525619072333637470, -0.525576535674503910, -0.525533997701428950, -0.525491458414518610, -0.525448917813880030, +-0.525406375899619140, -0.525363832671842280, -0.525321288130655590, -0.525278742276165890, -0.525236195108479410, -0.525193646627702180, -0.525151096833941010, -0.525108545727302260, +-0.525065993307892050, -0.525023439575816540, -0.524980884531182750, -0.524938328174096800, -0.524895770504664960, -0.524853211522993360, -0.524810651229189130, -0.524768089623358300, +-0.524725526705607130, -0.524682962476041850, -0.524640396934769600, -0.524597830081896200, -0.524555261917528330, -0.524512692441771900, -0.524470121654734170, -0.524427549556521040, +-0.524384976147238780, -0.524342401426994400, -0.524299825395893930, -0.524257248054044060, -0.524214669401550590, -0.524172089438520780, -0.524129508165060880, -0.524086925581277120, +-0.524044341687275650, -0.524001756483163720, -0.523959169969047460, -0.523916582145033230, -0.523873993011227170, -0.523831402567736410, -0.523788810814667330, -0.523746217752126150, +-0.523703623380219030, -0.523661027699053210, -0.523618430708734820, -0.523575832409370330, -0.523533232801066010, -0.523490631883928860, -0.523448029658065140, -0.523405426123580990, +-0.523362821280583650, -0.523320215129179370, -0.523277607669474400, -0.523234998901575100, -0.523192388825588610, -0.523149777441621280, -0.523107164749779360, -0.523064550750169220, +-0.523021935442898100, -0.522979318828072140, -0.522936700905797910, -0.522894081676181450, -0.522851461139330230, -0.522808839295350380, -0.522766216144348370, -0.522723591686430460, +-0.522680965921703990, -0.522638338850275110, -0.522595710472249950, -0.522553080787735880, -0.522510449796839140, -0.522467817499666310, -0.522425183896323530, -0.522382548986918160, +-0.522339912771556450, -0.522297275250344860, -0.522254636423389870, -0.522211996290798510, -0.522169354852677240, -0.522126712109132530, -0.522084068060270750, -0.522041422706199130, +-0.521998776047023940, -0.521956128082851860, -0.521913478813789020, -0.521870828239942910, -0.521828176361419650, -0.521785523178325610, -0.521742868690768140, -0.521700212898853600, +-0.521657555802688360, -0.521614897402378990, -0.521572237698032740, -0.521529576689755750, -0.521486914377654930, -0.521444250761836540, -0.521401585842407700, -0.521358919619475000, +-0.521316252093145030, -0.521273583263524020, -0.521230913130719450, -0.521188241694837570, -0.521145568955985070, -0.521102894914268310, -0.521060219569794650, -0.521017542922670550, +-0.520974864973002490, -0.520932185720896830, -0.520889505166461260, -0.520846823309801810, -0.520804140151024940, -0.520761455690238020, -0.520718769927547620, -0.520676082863060220, +-0.520633394496882170, -0.520590704829121180, -0.520548013859883250, -0.520505321589275430, -0.520462628017403840, -0.520419933144376070, -0.520377236970298470, -0.520334539495277750, +-0.520291840719420360, -0.520249140642833670, -0.520206439265624150, -0.520163736587898610, -0.520121032609763280, -0.520078327331325860, -0.520035620752692500, -0.519992912873969760, +-0.519950203695265010, -0.519907493216684950, -0.519864781438336030, -0.519822068360324740, -0.519779353982758760, -0.519736638305744350, -0.519693921329388300, -0.519651203053797080, +-0.519608483479078290, -0.519565762605338270, -0.519523040432683820, -0.519480316961221430, -0.519437592191058560, -0.519394866122301790, -0.519352138755057810, -0.519309410089433100, +-0.519266680125535230, -0.519223948863470790, -0.519181216303345900, -0.519138482445268500, -0.519095747289344820, -0.519053010835681780, -0.519010273084385850, -0.518967534035564610, +-0.518924793689324540, -0.518882052045772530, -0.518839309105014970, -0.518796564867159530, -0.518753819332312570, -0.518711072500581240, -0.518668324372071670, -0.518625574946891770, +-0.518582824225148010, -0.518540072206947090, -0.518497318892395590, -0.518454564281601190, -0.518411808374670380, -0.518369051171710060, -0.518326292672826710, -0.518283532878128120, +-0.518240771787720540, -0.518198009401710790, -0.518155245720206330, -0.518112480743313730, -0.518069714471139920, -0.518026946903791470, -0.517984178041376090, -0.517941407884000230, +-0.517898636431770810, -0.517855863684794420, -0.517813089643178850, -0.517770314307030470, -0.517727537676456300, -0.517684759751562920, -0.517641980532458020, -0.517599200019248200, +-0.517556418212040350, -0.517513635110941060, -0.517470850716058140, -0.517428065027498050, -0.517385278045367380, -0.517342489769773930, -0.517299700200824160, -0.517256909338625230, +-0.517214117183283690, -0.517171323734907150, -0.517128528993602400, -0.517085732959476240, -0.517042935632635370, -0.517000137013187590, -0.516957337101239480, -0.516914535896897950, +-0.516871733400269710, -0.516828929611462540, -0.516786124530583150, -0.516743318157738330, -0.516700510493034780, -0.516657701536580420, -0.516614891288481810, -0.516572079748845560, +-0.516529266917779560, -0.516486452795390290, -0.516443637381785000, -0.516400820677070160, -0.516358002681353680, -0.516315183394742140, -0.516272362817342790, -0.516229540949261990, +-0.516186717790607760, -0.516143893341486800, -0.516101067602006030, -0.516058240572272230, -0.516015412252393220, -0.515972582642475700, -0.515929751742626670, -0.515886919552952960, +-0.515844086073562250, -0.515801251304561340, -0.515758415246056920, -0.515715577898156920, -0.515672739260967910, -0.515629899334597020, -0.515587058119151060, -0.515544215614737840, +-0.515501371821464050, -0.515458526739436820, -0.515415680368762950, -0.515372832709550250, -0.515329983761905420, -0.515287133525935580, -0.515244282001747660, -0.515201429189449330, +-0.515158575089147420, -0.515115719700949160, -0.515072863024961140, -0.515030005061291370, -0.514987145810046560, -0.514944285271333960, -0.514901423445260240, -0.514858560331933330, +-0.514815695931459930, -0.514772830243947040, -0.514729963269502380, -0.514687095008232840, -0.514644225460245570, -0.514601354625647380, -0.514558482504546060, -0.514515609097048630, +-0.514472734403262240, -0.514429858423293580, -0.514386981157250570, -0.514344102605240220, -0.514301222767369560, -0.514258341643745400, -0.514215459234475870, -0.514172575539667660, +-0.514129690559428030, -0.514086804293863770, -0.514043916743082920, -0.514001027907192260, -0.513958137786298620, -0.513915246380510000, -0.513872353689933340, -0.513829459714675750, +-0.513786564454844050, -0.513743667910546490, -0.513700770081889630, -0.513657870968980860, -0.513614970571927070, -0.513572068890836290, -0.513529165925815210, -0.513486261676971310, +-0.513443356144411280, -0.513400449328243360, -0.513357541228574240, -0.513314631845511290, -0.513271721179161420, -0.513228809229632540, -0.513185895997031680, -0.513142981481465750, +-0.513100065683042670, -0.513057148601869460, -0.513014230238053370, -0.512971310591701310, -0.512928389662921420, -0.512885467451820510, -0.512842543958505930, -0.512799619183084590, +-0.512756693125664630, -0.512713765786352860, -0.512670837165256740, -0.512627907262483080, -0.512584976078140130, -0.512542043612334690, -0.512499109865174220, -0.512456174836765420, +-0.512413238527216760, -0.512370300936634830, -0.512327362065127300, -0.512284421912800880, -0.512241480479763810, -0.512198537766123010, -0.512155593771985610, -0.512112648497459520, +-0.512069701942651780, -0.512026754107669850, -0.511983804992620530, -0.511940854597612180, -0.511897902922751720, -0.511854949968146400, -0.511811995733903460, -0.511769040220130810, +-0.511726083426935600, -0.511683125354425170, -0.511640166002706560, -0.511597205371887910, -0.511554243462076230, -0.511511280273378890, -0.511468315805903020, -0.511425350059756760, +-0.511382383035047130, -0.511339414731881160, -0.511296445150366980, -0.511253474290611740, -0.511210502152722900, -0.511167528736807260, -0.511124554042973300, -0.511081578071327920, +-0.511038600821978490, -0.510995622295032260, -0.510952642490597460, -0.510909661408780910, -0.510866679049690300, -0.510823695413432530, -0.510780710500115980, -0.510737724309847540, +-0.510694736842734920, -0.510651748098885030, -0.510608758078406110, -0.510565766781405310, -0.510522774207989750, -0.510479780358267580, -0.510436785232345920, -0.510393788830332480, +-0.510350791152334060, -0.510307792198459010, -0.510264791968814580, -0.510221790463508130, -0.510178787682646790, -0.510135783626338820, -0.510092778294691460, -0.510049771687812180, +-0.510006763805808010, -0.509963754648787400, -0.509920744216857400, -0.509877732510125470, -0.509834719528698850, -0.509791705272685800, -0.509748689742193560, -0.509705672937329160, +-0.509662654858200950, -0.509619635504916180, -0.509576614877582210, -0.509533592976306400, -0.509490569801197000, -0.509447545352361030, -0.509404519629906400, -0.509361492633939930, +-0.509318464364570180, -0.509275434821904290, -0.509232404006049740, -0.509189371917113890, -0.509146338555204970, -0.509103303920430130, -0.509060268012897050, -0.509017230832713000, +-0.508974192379986200, -0.508931152654823920, -0.508888111657333830, -0.508845069387622970, -0.508802025845799810, -0.508758981031971700, -0.508715934946245670, -0.508672887588730190, +-0.508629838959532510, -0.508586789058760200, -0.508543737886520630, -0.508500685442922040, -0.508457631728071680, -0.508414576742077350, -0.508371520485046080, -0.508328462957086450, +-0.508285404158305700, -0.508242344088811420, -0.508199282748710850, -0.508156220138112460, -0.508113156257123610, -0.508070091105851770, -0.508027024684404420, -0.507983956992889780, +-0.507940888031415240, -0.507897817800088250, -0.507854746299016950, -0.507811673528308800, -0.507768599488071510, -0.507725524178412320, -0.507682447599439700, -0.507639369751261000, +-0.507596290633983930, -0.507553210247715600, -0.507510128592564720, -0.507467045668638540, -0.507423961476044630, -0.507380876014890570, -0.507337789285284610, -0.507294701287334230, +-0.507251612021146990, -0.507208521486830490, -0.507165429684492960, -0.507122336614241890, -0.507079242276184620, -0.507036146670429620, -0.506993049797084260, -0.506949951656256230, +-0.506906852248052990, -0.506863751572583010, -0.506820649629953550, -0.506777546420272620, -0.506734441943647360, -0.506691336200186360, -0.506648229189996970, -0.506605120913187100, +-0.506562011369864010, -0.506518900560136260, -0.506475788484111340, -0.506432675141896940, -0.506389560533600400, -0.506346444659330320, -0.506303327519194160, -0.506260209113299720, +-0.506217089441754360, -0.506173968504666670, -0.506130846302144000, -0.506087722834293820, -0.506044598101224820, -0.506001472103044250, -0.505958344839860020, -0.505915216311779600, +-0.505872086518911470, -0.505828955461363080, -0.505785823139242360, -0.505742689552656670, -0.505699554701714680, -0.505656418586523770, -0.505613281207191730, -0.505570142563826260, +-0.505527002656535720, -0.505483861485427680, -0.505440719050610050, -0.505397575352190210, -0.505354430390276830, -0.505311284164977280, -0.505268136676399250, -0.505224987924651200, +-0.505181837909840730, -0.505138686632075620, -0.505095534091463460, -0.505052380288112720, -0.505009225222131210, -0.504966068893626500, -0.504922911302706280, -0.504879752449479140, +-0.504836592334052650, -0.504793430956534730, -0.504750268317032740, -0.504707104415655580, -0.504663939252510630, -0.504620772827705790, -0.504577605141348640, -0.504534436193547870, +-0.504491265984410960, -0.504448094514045600, -0.504404921782560360, -0.504361747790062710, -0.504318572536660790, -0.504275396022462070, -0.504232218247575140, -0.504189039212107780, +-0.504145858916167810, -0.504102677359862690, -0.504059494543301460, -0.504016310466591340, -0.503973125129840490, -0.503929938533156370, -0.503886750676647900, -0.503843561560422540, +-0.503800371184588200, -0.503757179549252590, -0.503713986654524490, -0.503670792500511280, -0.503627597087320860, -0.503584400415061690, -0.503541202483841600, -0.503498003293768480, +-0.503454802844950030, -0.503411601137494840, -0.503368398171510690, -0.503325193947105620, -0.503281988464387100, -0.503238781723464030, -0.503195573724444010, -0.503152364467435050, +-0.503109153952544740, -0.503065942179881990, -0.503022729149554370, -0.502979514861669920, -0.502936299316336320, -0.502893082513662270, -0.502849864453755680, -0.502806645136724240, +-0.502763424562675980, -0.502720202731719470, -0.502676979643962410, -0.502633755299512490, -0.502590529698478730, -0.502547302840968490, -0.502504074727090020, -0.502460845356951010, +-0.502417614730660270, -0.502374382848325470, -0.502331149710054770, -0.502287915315955740, -0.502244679666137390, -0.502201442760707330, -0.502158204599773560, -0.502114965183444010, +-0.502071724511827360, -0.502028482585031410, -0.501985239403164310, -0.501941994966333630, -0.501898749274648390, -0.501855502328216300, -0.501812254127145030, -0.501769004671543510, +-0.501725753961519530, -0.501682501997181120, -0.501639248778636080, -0.501595994305993330, -0.501552738579360560, -0.501509481598846010, -0.501466223364557260, -0.501422963876603460, +-0.501379703135092170, -0.501336441140131650, -0.501293177891829590, -0.501249913390295010, -0.501206647635635720, -0.501163380627959730, -0.501120112367374970, -0.501076842853990230, +-0.501033572087913440, -0.500990300069252270, -0.500947026798115760, -0.500903752274611700, -0.500860476498848240, -0.500817199470933280, -0.500773921190975630, -0.500730641659083210, +-0.500687360875364140, -0.500644078839926340, -0.500600795552878620, -0.500557511014328990, -0.500514225224385600, -0.500470938183156240, -0.500427649890749950, -0.500384360347274510, +-0.500341069552838190, -0.500297777507548780, -0.500254484211515300, -0.500211189664845680, -0.500167893867648040, -0.500124596820030300, -0.500081298522101480, -0.500037998973969280, +-0.499994698175741830, -0.499951396127527980, -0.499908092829435660, -0.499864788281573050, -0.499821482484048120, -0.499778175436969900, -0.499734867140446180, -0.499691557594585330, +-0.499648246799495210, -0.499604934755284840, -0.499561621462062120, -0.499518306919935370, -0.499474991129012450, -0.499431674089402480, -0.499388355801213270, -0.499345036264553180, +-0.499301715479530170, -0.499258393446253170, -0.499215070164830240, -0.499171745635369260, -0.499128419857979290, -0.499085092832768250, -0.499041764559844500, -0.498998435039315960, +-0.498955104271291690, -0.498911772255879680, -0.498868438993188220, -0.498825104483325290, -0.498781768726400010, -0.498738431722520250, -0.498695093471794470, -0.498651753974330540, +-0.498608413230237580, -0.498565071239623630, -0.498521728002597030, -0.498478383519265660, -0.498435037789738740, -0.498391690814124270, -0.498348342592530140, -0.498304993125065540, +-0.498261642411838460, -0.498218290452957290, -0.498174937248530010, -0.498131582798665760, -0.498088227103472560, -0.498044870163058760, -0.498001511977532450, -0.497958152547002710, +-0.497914791871577610, -0.497871429951365520, -0.497828066786474450, -0.497784702377013670, -0.497741336723091070, -0.497697969824815120, -0.497654601682293920, -0.497611232295636530, +-0.497567861664951090, -0.497524489790345640, -0.497481116671929350, -0.497437742309810190, -0.497394366704096760, -0.497350989854897010, -0.497307611762320130, -0.497264232426474270, +-0.497220851847467840, -0.497177470025408850, -0.497134086960406560, -0.497090702652569110, -0.497047317102004840, -0.497003930308821950, -0.496960542273129580, -0.496917152995035860, +-0.496873762474649260, -0.496830370712077920, -0.496786977707430970, -0.496743583460816600, -0.496700187972343280, -0.496656791242119090, -0.496613393270253280, -0.496569994056854040, +-0.496526593602029440, -0.496483191905888690, -0.496439788968539960, -0.496396384790091790, -0.496352979370652260, -0.496309572710330660, -0.496266164809235130, -0.496222755667474260, +-0.496179345285156000, -0.496135933662389840, -0.496092520799283840, -0.496049106695946480, -0.496005691352486010, -0.495962274769011720, -0.495918856945631700, -0.495875437882454580, +-0.495832017579588450, -0.495788596037142650, -0.495745173255225380, -0.495701749233944830, -0.495658323973410250, -0.495614897473729830, -0.495571469735012200, -0.495528040757365510, +-0.495484610540899100, -0.495441179085721160, -0.495397746391940290, -0.495354312459664660, -0.495310877289003640, -0.495267440880065410, -0.495224003232958620, -0.495180564347791400, +-0.495137124224673150, -0.495093682863712080, -0.495050240265016870, -0.495006796428695610, -0.494963351354857750, -0.494919905043611550, -0.494876457495065150, -0.494833008709328000, +-0.494789558686508370, -0.494746107426714820, -0.494702654930055610, -0.494659201196640200, -0.494615746226576720, -0.494572290019973880, -0.494528832576939970, -0.494485373897584350, +-0.494441913982015260, -0.494398452830341400, -0.494354990442671060, -0.494311526819113610, -0.494268061959777350, -0.494224595864770910, -0.494181128534202600, -0.494137659968181870, +-0.494094190166816990, -0.494050719130216590, -0.494007246858489070, -0.493963773351743800, -0.493920298610089070, -0.493876822633633250, -0.493833345422485690, -0.493789866976754870, +-0.493746387296549290, -0.493702906381977390, -0.493659424233148620, -0.493615940850171300, -0.493572456233154100, -0.493528970382205390, -0.493485483297434640, -0.493441994978950140, +-0.493398505426860700, -0.493355014641274630, -0.493311522622301380, -0.493268029370049320, -0.493224534884627200, -0.493181039166143310, -0.493137542214707240, -0.493094044030427340, +-0.493050544613411910, -0.493007043963770540, -0.492963542081611530, -0.492920038967043670, -0.492876534620175330, -0.492833029041116030, -0.492789522229974190, -0.492746014186858540, +-0.492702504911877450, -0.492658994405140490, -0.492615482666756030, -0.492571969696832870, -0.492528455495479410, -0.492484940062805190, -0.492441423398918610, -0.492397905503928480, +-0.492354386377943210, -0.492310866021072380, -0.492267344433424350, -0.492223821615107580, -0.492180297566231660, -0.492136772286904940, -0.492093245777236340, -0.492049718037334270, +-0.492006189067308250, -0.491962658867266760, -0.491919127437318580, -0.491875594777572260, -0.491832060888137300, -0.491788525769122240, -0.491744989420635830, -0.491701451842786570, +-0.491657913035684010, -0.491614372999436720, -0.491570831734153500, -0.491527289239942820, -0.491483745516914320, -0.491440200565176400, -0.491396654384837650, -0.491353106976007590, +-0.491309558338794810, -0.491266008473308150, -0.491222457379656030, -0.491178905057948150, -0.491135351508293070, -0.491091796730799560, -0.491048240725576180, -0.491004683492732570, +-0.490961125032377320, -0.490917565344619170, -0.490874004429566800, -0.490830442287329750, -0.490786878918016590, -0.490743314321736290, -0.490699748498597270, -0.490656181448709260, +-0.490612613172180800, -0.490569043669120850, -0.490525472939637890, -0.490481900983841590, -0.490438327801840600, -0.490394753393743330, -0.490351177759659640, -0.490307600899697940, +-0.490264022813967300, -0.490220443502576150, -0.490176862965634340, -0.490133281203250340, -0.490089698215533160, -0.490046114002591350, -0.490002528564534580, -0.489958941901471550, +-0.489915354013511160, -0.489871764900761950, -0.489828174563333770, -0.489784583001335150, -0.489740990214875050, -0.489697396204062110, -0.489653800969006070, -0.489610204509815460, +-0.489566606826599030, -0.489523007919466460, -0.489479407788526330, -0.489435806433887730, -0.489392203855659180, -0.489348600053950530, -0.489304995028870370, -0.489261388780527720, +-0.489217781309031260, -0.489174172614490700, -0.489130562697014710, -0.489086951556712280, -0.489043339193692140, -0.488999725608063980, -0.488956110799936560, -0.488912494769418840, +-0.488868877516619500, -0.488825259041648360, -0.488781639344614050, -0.488738018425625250, -0.488694396284791830, -0.488650772922222420, -0.488607148338026040, -0.488563522532311450, +-0.488519895505188370, -0.488476267256765630, -0.488432637787152180, -0.488389007096456720, -0.488345375184789150, -0.488301742052258180, -0.488258107698972820, -0.488214472125041820, +-0.488170835330575040, -0.488127197315681160, -0.488083558080469270, -0.488039917625048110, -0.487996275949527550, -0.487952633054016320, -0.487908988938623440, -0.487865343603457740, +-0.487821697048629100, -0.487778049274246170, -0.487734400280417760, -0.487690750067253710, -0.487647098634862770, -0.487603445983354140, -0.487559792112836510, -0.487516137023419730, +-0.487472480715212650, -0.487428823188324370, -0.487385164442863620, -0.487341504478940310, -0.487297843296663310, -0.487254180896141700, -0.487210517277484210, -0.487166852440800820, +-0.487123186386200340, -0.487079519113791830, -0.487035850623684210, -0.486992180915987280, -0.486948509990809960, -0.486904837848260940, -0.486861164488450180, -0.486817489911486550, +-0.486773814117479220, -0.486730137106536950, -0.486686458878769710, -0.486642779434286350, -0.486599098773196010, -0.486555416895607550, -0.486511733801630930, -0.486468049491374950, +-0.486424363964948870, -0.486380677222461530, -0.486336989264022860, -0.486293300089741700, -0.486249609699727300, -0.486205918094088470, -0.486162225272935290, -0.486118531236376490, +-0.486074835984521000, -0.486031139517478780, -0.485987441835358750, -0.485943742938270080, -0.485900042826321710, -0.485856341499623590, -0.485812638958284580, -0.485768935202414040, +-0.485725230232120770, -0.485681524047514750, -0.485637816648704980, -0.485594108035800660, -0.485550398208910660, -0.485506687168145050, -0.485462974913612730, -0.485419261445423020, +-0.485375546763684720, -0.485331830868507950, -0.485288113760001580, -0.485244395438274580, -0.485200675903436960, -0.485156955155597650, -0.485113233194865930, -0.485069510021350790, +-0.485025785635162240, -0.484982060036409200, -0.484938333225201020, -0.484894605201646620, -0.484850875965856130, -0.484807145517938410, -0.484763413858002870, -0.484719680986158360, +-0.484675946902515090, -0.484632211607181900, -0.484588475100268200, -0.484544737381882920, -0.484500998452136180, -0.484457258311136950, -0.484413516958994590, -0.484369774395818020, +-0.484326030621717420, -0.484282285636801760, -0.484238539441180000, -0.484194792034962240, -0.484151043418257540, -0.484107293591175210, -0.484063542553824280, -0.484019790306314810, +-0.483976036848755950, -0.483932282181256950, -0.483888526303926870, -0.483844769216875860, -0.483801010920212940, -0.483757251414047520, -0.483713490698488510, -0.483669728773646220, +-0.483625965639629560, -0.483582201296548050, -0.483538435744510610, -0.483494668983627470, -0.483450901014007670, -0.483407131835760230, -0.483363361448995330, -0.483319589853822060, +-0.483275817050349780, -0.483232043038687550, -0.483188267818945640, -0.483144491391233060, -0.483100713755659270, -0.483056934912333260, -0.483013154861365310, -0.482969373602864520, +-0.482925591136940220, -0.482881807463701630, -0.482838022583258860, -0.482794236495721060, -0.482750449201197640, -0.482706660699797730, -0.482662870991631580, -0.482619080076808200, +-0.482575287955436800, -0.482531494627627510, -0.482487700093489510, -0.482443904353132220, -0.482400107406664840, -0.482356309254197540, -0.482312509895839510, -0.482268709331700180, +-0.482224907561888680, -0.482181104586515310, -0.482137300405689140, -0.482093495019519760, -0.482049688428116240, -0.482005880631588890, -0.481962071630046840, -0.481918261423599610, +-0.481874450012356350, -0.481830637396427400, -0.481786823575921790, -0.481743008550949090, -0.481699192321618560, -0.481655374888040390, -0.481611556250323810, -0.481567736408577920, +-0.481523915362913110, -0.481480093113438480, -0.481436269660263650, -0.481392445003497700, -0.481348619143251110, -0.481304792079632890, -0.481260963812752740, -0.481217134342719790, +-0.481173303669644390, -0.481129471793635740, -0.481085638714803370, -0.481041804433256560, -0.480997968949105630, -0.480954132262459750, -0.480910294373428530, -0.480866455282121190, +-0.480822614988648140, -0.480778773493118540, -0.480734930795641560, -0.480691086896327720, -0.480647241795286120, -0.480603395492626430, -0.480559547988457850, -0.480515699282890780, +-0.480471849376034490, -0.480427998267998590, -0.480384145958892230, -0.480340292448825980, -0.480296437737908980, -0.480252581826250860, -0.480208724713960920, -0.480164866401149530, +-0.480121006887925970, -0.480077146174399950, -0.480033284260680590, -0.479989421146878480, -0.479945556833102800, -0.479901691319462810, -0.479857824606069020, -0.479813956693030620, +-0.479770087580457420, -0.479726217268458540, -0.479682345757144520, -0.479638473046624600, -0.479594599137008530, -0.479550724028405590, -0.479506847720926220, -0.479462970214679710, +-0.479419091509775800, -0.479375211606323790, -0.479331330504434110, -0.479287448204216090, -0.479243564705779500, -0.479199680009233580, -0.479155794114688840, -0.479111907022254590, +-0.479068018732040250, -0.479024129244156220, -0.478980238558711860, -0.478936346675816860, -0.478892453595580690, -0.478848559318113710, -0.478804663843525380, -0.478760767171925390, +-0.478716869303423050, -0.478672970238128940, -0.478629069976152450, -0.478585168517603240, -0.478541265862590710, -0.478497362011225450, -0.478453456963616740, -0.478409550719874400, +-0.478365643280107830, -0.478321734644427510, -0.478277824812942840, -0.478233913785763630, -0.478190001562999230, -0.478146088144760230, -0.478102173531156030, -0.478058257722295990, +-0.478014340718290690, -0.477970422519249540, -0.477926503125282290, -0.477882582536498460, -0.477838660753008520, -0.477794737774921980, -0.477750813602348560, -0.477706888235397700, +-0.477662961674180040, -0.477619033918804950, -0.477575104969382270, -0.477531174826021480, -0.477487243488833150, -0.477443310957926640, -0.477399377233411910, -0.477355442315398340, +-0.477311506203996540, -0.477267568899315990, -0.477223630401466090, -0.477179690710557550, -0.477135749826699760, -0.477091807750002590, -0.477047864480575570, -0.477003920018529200, +-0.476959974363973080, -0.476916027517017000, -0.476872079477770490, -0.476828130246344130, -0.476784179822847490, -0.476740228207390370, -0.476696275400082300, -0.476652321401033920, +-0.476608366210354740, -0.476564409828154620, -0.476520452254543150, -0.476476493489630890, -0.476432533533527440, -0.476388572386342250, -0.476344610048185960, -0.476300646519168200, +-0.476256681799398840, -0.476212715888987340, -0.476168748788044440, -0.476124780496679720, -0.476080811015002990, -0.476036840343123880, -0.475992868481153080, -0.475948895429200050, +-0.475904921187374820, -0.475860945755786910, -0.475816969134547020, -0.475772991323764660, -0.475729012323549860, -0.475685032134012140, -0.475641050755262200, -0.475597068187409660, +-0.475553084430564430, -0.475509099484836160, -0.475465113350335480, -0.475421126027172010, -0.475377137515455350, -0.475333147815296230, -0.475289156926804290, -0.475245164850089390, +-0.475201171585261210, -0.475157177132430500, -0.475113181491706840, -0.475069184663200250, -0.475025186647020260, -0.474981187443277720, -0.474937187052082210, -0.474893185473543760, +-0.474849182707771930, -0.474805178754877490, -0.474761173614970170, -0.474717167288159880, -0.474673159774556320, -0.474629151074270230, -0.474585141187411240, -0.474541130114089050, +-0.474497117854414400, -0.474453104408496970, -0.474409089776446750, -0.474365073958373410, -0.474321056954387810, -0.474277038764599530, -0.474233019389118720, -0.474188998828054930, +-0.474144977081519040, -0.474100954149620670, -0.474056930032469960, -0.474012904730176540, -0.473968878242851220, -0.473924850570603680, -0.473880821713544060, -0.473836791671782000, +-0.473792760445428340, -0.473748728034592780, -0.473704694439385010, -0.473660659659915880, -0.473616623696295090, -0.473572586548632770, -0.473528548217038600, -0.473484508701623400, +-0.473440468002497010, -0.473396426119769400, -0.473352383053550320, -0.473308338803950680, -0.473264293371080220, -0.473220246755049030, -0.473176198955966800, -0.473132149973944480, +-0.473088099809091780, -0.473044048461518820, -0.472999995931335350, -0.472955942218652340, -0.472911887323579420, -0.472867831246226390, -0.472823773986704170, -0.472779715545122550, +-0.472735655921591610, -0.472691595116221110, -0.472647533129122050, -0.472603469960404200, -0.472559405610177620, -0.472515340078552120, -0.472471273365638710, -0.472427205471547100, +-0.472383136396387460, -0.472339066140269600, -0.472294994703304490, -0.472250922085601880, -0.472206848287271940, -0.472162773308424490, -0.472118697149170540, -0.472074619809619790, +-0.472030541289882530, -0.471986461590068520, -0.471942380710288770, -0.471898298650653030, -0.471854215411271150, -0.471810130992254160, -0.471766045393711810, -0.471721958615754390, +-0.471677870658491650, -0.471633781522034610, -0.471589691206493130, -0.471545599711977400, -0.471501507038597330, -0.471457413186463840, -0.471413318155686820, -0.471369221946376540, +-0.471325124558642780, -0.471281025992596640, -0.471236926248347900, -0.471192825326006870, -0.471148723225683350, -0.471104619947488420, -0.471060515491531940, -0.471016409857923810, +-0.470972303046775010, -0.470928195058195500, -0.470884085892295470, -0.470839975549184830, -0.470795864028974660, -0.470751751331774830, -0.470707637457695620, -0.470663522406846890, +-0.470619406179339780, -0.470575288775284150, -0.470531170194790290, -0.470487050437968120, -0.470442929504928720, -0.470398807395781990, -0.470354684110638300, -0.470310559649607440, +-0.470266434012800550, -0.470222307200327650, -0.470178179212298540, -0.470134050048824360, -0.470089919710015120, -0.470045788195981030, -0.470001655506832090, -0.469957521642679400, +-0.469913386603632910, -0.469869250389802980, -0.469825113001299480, -0.469780974438233630, -0.469736834700715310, -0.469692693788854920, -0.469648551702762430, -0.469604408442548920, +-0.469560264008324400, -0.469516118400199240, -0.469471971618283360, -0.469427823662687930, -0.469383674533522980, -0.469339524230898810, -0.469295372754925500, -0.469251220105714070, +-0.469207066283374660, -0.469162911288017130, -0.469118755119752760, -0.469074597778691480, -0.469030439264943700, -0.468986279578619440, -0.468942118719829880, -0.468897956688685060, +-0.468853793485295270, -0.468809629109770640, -0.468765463562222370, -0.468721296842760370, -0.468677128951495160, -0.468632959888536760, -0.468588789653996310, -0.468544618247983930, +-0.468500445670609940, -0.468456271921984520, -0.468412097002218750, -0.468367920911422760, -0.468323743649706580, -0.468279565217181450, -0.468235385613957390, -0.468191204840144870, +-0.468147022895853970, -0.468102839781195880, -0.468058655496280670, -0.468014470041218820, -0.467970283416120460, -0.467926095621096720, -0.467881906656257780, -0.467837716521714080, +-0.467793525217575670, -0.467749332743953860, -0.467705139100958680, -0.467660944288700700, -0.467616748307289940, -0.467572551156837710, -0.467528352837454090, -0.467484153349249200, +-0.467439952692334350, -0.467395750866819560, -0.467351547872815460, -0.467307343710432030, -0.467263138379780670, -0.467218931880971470, -0.467174724214114930, -0.467130515379321210, +-0.467086305376701590, -0.467042094206366170, -0.466997881868425560, -0.466953668362989790, -0.466909453690170280, -0.466865237850077160, -0.466821020842820960, -0.466776802668511740, +-0.466732583327260970, -0.466688362819178690, -0.466644141144375520, -0.466599918302961660, -0.466555694295048340, -0.466511469120745760, -0.466467242780164160, -0.466423015273414840, +-0.466378786600608000, -0.466334556761854150, -0.466290325757263540, -0.466246093586947520, -0.466201860251016230, -0.466157625749580360, -0.466113390082749990, -0.466069153250636530, +-0.466024915253350160, -0.465980676091001520, -0.465936435763700860, -0.465892194271559420, -0.465847951614687560, -0.465803707793195800, -0.465759462807194320, -0.465715216656794660, +-0.465670969342106890, -0.465626720863241360, -0.465582471220309380, -0.465538220413421240, -0.465493968442687530, -0.465449715308218550, -0.465405461010125640, -0.465361205548519120, +-0.465316948923509550, -0.465272691135207190, -0.465228432183723560, -0.465184172069168790, -0.465139910791653620, -0.465095648351288250, -0.465051384748184190, -0.465007119982451640, +-0.464962854054201350, -0.464918586963543490, -0.464874318710589540, -0.464830049295449800, -0.464785778718234570, -0.464741506979055250, -0.464697234078022160, -0.464652960015246030, +-0.464608684790837060, -0.464564408404906810, -0.464520130857565550, -0.464475852148923900, -0.464431572279092260, -0.464387291248182120, -0.464343009056303710, -0.464298725703567780, +-0.464254441190084630, -0.464210155515965780, -0.464165868681321590, -0.464121580686262690, -0.464077291530899440, -0.464033001215343350, -0.463988709739704740, -0.463944417104094010, +-0.463900123308622630, -0.463855828353400890, -0.463811532238539600, -0.463767234964149120, -0.463722936530340910, -0.463678636937225390, -0.463634336184913230, -0.463590034273514860, +-0.463545731203141850, -0.463501426973904450, -0.463457121585913510, -0.463412815039279340, -0.463368507334113560, -0.463324198470526470, -0.463279888448628940, -0.463235577268531260, +-0.463191264930345070, -0.463146951434180660, -0.463102636780148900, -0.463058320968360190, -0.463014003998926000, -0.462969685871956860, -0.462925366587563060, -0.462881046145856290, +-0.462836724546946850, -0.462792401790945660, -0.462748077877963020, -0.462703752808110600, -0.462659426581498830, -0.462615099198238460, -0.462570770658439930, -0.462526440962214900, +-0.462482110109673770, -0.462437778100927340, -0.462393444936086080, -0.462349110615261630, -0.462304775138564330, -0.462260438506105150, -0.462216100717994460, -0.462171761774343940, +-0.462127421675263990, -0.462083080420865100, -0.462038738011258940, -0.461994394446555880, -0.461950049726866820, -0.461905703852302290, -0.461861356822973910, -0.461817008638992110, +-0.461772659300467790, -0.461728308807511420, -0.461683957160234640, -0.461639604358748010, -0.461595250403162400, -0.461550895293588230, -0.461506539030137220, -0.461462181612919850, +-0.461417823042047040, -0.461373463317629300, -0.461329102439778260, -0.461284740408604450, -0.461240377224218460, -0.461196012886731840, -0.461151647396255250, -0.461107280752899530, +-0.461062912956775210, -0.461018544007993970, -0.460974173906666400, -0.460929802652903400, -0.460885430246815500, -0.460841056688514440, -0.460796681978110690, -0.460752306115715270, +-0.460707929101438650, -0.460663550935392630, -0.460619171617687730, -0.460574791148434910, -0.460530409527744710, -0.460486026755728920, -0.460441642832498000, -0.460397257758163040, +-0.460352871532834500, -0.460308484156624120, -0.460264095629642600, -0.460219705952000460, -0.460175315123809440, -0.460130923145180060, -0.460086530016223460, -0.460042135737050110, +-0.459997740307771800, -0.459953343728499160, -0.459908945999343180, -0.459864547120414410, -0.459820147091824670, -0.459775745913684530, -0.459731343586105070, -0.459686940109196860, +-0.459642535483071660, -0.459598129707840140, -0.459553722783613340, -0.459509314710501770, -0.459464905488617350, -0.459420495118070650, -0.459376083598972310, -0.459331670931434180, +-0.459287257115566840, -0.459242842151481370, -0.459198426039288400, -0.459154008779099790, -0.459109590371026110, -0.459065170815178500, -0.459020750111667540, -0.458976328260605080, +-0.458931905262101870, -0.458887481116268810, -0.458843055823216720, -0.458798629383057380, -0.458754201795901430, -0.458709773061860000, -0.458665343181043740, -0.458620912153564490, +-0.458576479979532990, -0.458532046659059890, -0.458487612192257090, -0.458443176579235220, -0.458398739820105430, -0.458354301914978390, -0.458309862863966020, -0.458265422667178960, +-0.458220981324728330, -0.458176538836724880, -0.458132095203280460, -0.458087650424505830, -0.458043204500512060, -0.457998757431409890, -0.457954309217311170, -0.457909859858326720, +-0.457865409354567650, -0.457820957706144620, -0.457776504913169620, -0.457732050975753310, -0.457687595894006540, -0.457643139668041100, -0.457598682297967850, -0.457554223783897930, +-0.457509764125942020, -0.457465303324212090, -0.457420841378818890, -0.457376378289873650, -0.457331914057487020, -0.457287448681771010, -0.457242982162836380, -0.457198514500794300, +-0.457154045695755520, -0.457109575747832010, -0.457065104657134570, -0.457020632423774390, -0.456976159047862260, -0.456931684529510050, -0.456887208868828660, -0.456842732065929290, +-0.456798254120922680, -0.456753775033920780, -0.456709294805034470, -0.456664813434374540, -0.456620330922053010, -0.456575847268180570, -0.456531362472868570, -0.456486876536227770, +-0.456442389458370120, -0.456397901239406540, -0.456353411879448220, -0.456308921378605960, -0.456264429736991770, -0.456219936954716520, -0.456175443031891450, -0.456130947968627350, +-0.456086451765036260, -0.456041954421229080, -0.455997455937317000, -0.455952956313410870, -0.455908455549622780, -0.455863953646063520, -0.455819450602843960, -0.455774946420076210, +-0.455730441097871090, -0.455685934636339880, -0.455641427035593400, -0.455596918295743780, -0.455552408416901810, -0.455507897399178910, -0.455463385242685810, -0.455418871947534660, +-0.455374357513836310, -0.455329841941702060, -0.455285325231242880, -0.455240807382570720, -0.455196288395796570, -0.455151768271031650, -0.455107247008386950, -0.455062724607974530, +-0.455018201069905310, -0.454973676394290150, -0.454929150581241230, -0.454884623630869460, -0.454840095543286080, -0.454795566318602070, -0.454751035956929560, -0.454706504458379460, +-0.454661971823063060, -0.454617438051091390, -0.454572903142576480, -0.454528367097629340, -0.454483829916361270, -0.454439291598883240, -0.454394752145307390, -0.454350211555744620, +-0.454305669830306350, -0.454261126969103480, -0.454216582972248260, -0.454172037839851490, -0.454127491572024700, -0.454082944168878730, -0.454038395630525840, -0.453993845957076920, +-0.453949295148643020, -0.453904743205336250, -0.453860190127267640, -0.453815635914548600, -0.453771080567289990, -0.453726524085604150, -0.453681966469601960, -0.453637407719394870, +-0.453592847835093850, -0.453548286816811090, -0.453503724664657600, -0.453459161378744870, -0.453414596959183790, -0.453370031406086620, -0.453325464719564420, -0.453280896899728500, +-0.453236327946689940, -0.453191757860560980, -0.453147186641452650, -0.453102614289475900, -0.453058040804743050, -0.453013466187365100, -0.452968890437453480, -0.452924313555119200, +-0.452879735540474560, -0.452835156393630590, -0.452790576114698750, -0.452745994703790010, -0.452701412161016730, -0.452656828486489910, -0.452612243680320990, -0.452567657742621090, +-0.452523070673502450, -0.452478482473076150, -0.452433893141453600, -0.452389302678745940, -0.452344711085065410, -0.452300118360523140, -0.452255524505230160, -0.452210929519298750, +-0.452166333402840010, -0.452121736155965460, -0.452077137778786160, -0.452032538271414430, -0.451987937633961330, -0.451943335866538400, -0.451898732969256700, -0.451854128942228590, +-0.451809523785565210, -0.451764917499377970, -0.451720310083778000, -0.451675701538877710, -0.451631091864788170, -0.451586481061620860, -0.451541869129486960, -0.451497256068498830, +-0.451452641878767550, -0.451408026560404240, -0.451363410113521270, -0.451318792538229760, -0.451274173834641250, -0.451229554002866960, -0.451184933043019150, -0.451140310955209010, +-0.451095687739548110, -0.451051063396147590, -0.451006437925119800, -0.450961811326575920, -0.450917183600627490, -0.450872554747385750, -0.450827924766962980, -0.450783293659470450, +-0.450738661425019620, -0.450694028063721770, -0.450649393575689280, -0.450604757961033280, -0.450560121219865330, -0.450515483352296740, -0.450470844358439870, -0.450426204238405850, +-0.450381562992305920, -0.450336920620252430, -0.450292277122356700, -0.450247632498730290, -0.450202986749484390, -0.450158339874731360, -0.450113691874582560, -0.450069042749149490, +-0.450024392498543420, -0.449979741122876750, -0.449935088622260780, -0.449890434996807030, -0.449845780246626860, -0.449801124371832620, -0.449756467372535500, -0.449711809248847290, +-0.449667150000879150, -0.449622489628743460, -0.449577828132551650, -0.449533165512414790, -0.449488501768445460, -0.449443836900754850, -0.449399170909454690, -0.449354503794656130, +-0.449309835556471750, -0.449265166195012830, -0.449220495710390910, -0.449175824102717390, -0.449131151372104740, -0.449086477518664150, -0.449041802542507420, -0.448997126443745790, +-0.448952449222491720, -0.448907770878856530, -0.448863091412951890, -0.448818410824889160, -0.448773729114780750, -0.448729046282738080, -0.448684362328872320, -0.448639677253296120, +-0.448594991056120720, -0.448550303737457800, -0.448505615297418780, -0.448460925736116070, -0.448416235053661070, -0.448371543250165480, -0.448326850325740660, -0.448282156280499060, +-0.448237461114552090, -0.448192764828011460, -0.448148067420988560, -0.448103368893595870, -0.448058669245944730, -0.448013968478146950, -0.447969266590313830, -0.447924563582557940, +-0.447879859454990650, -0.447835154207723740, -0.447790447840868520, -0.447745740354537570, -0.447701031748842290, -0.447656322023893990, -0.447611611179805360, -0.447566899216687630, +-0.447522186134652670, -0.447477471933811880, -0.447432756614277780, -0.447388040176161790, -0.447343322619575710, -0.447298603944630890, -0.447253884151440020, -0.447209163240114390, +-0.447164441210765870, -0.447119718063505870, -0.447074993798446950, -0.447030268415700540, -0.446985541915378480, -0.446940814297592140, -0.446896085562454190, -0.446851355710076000, +-0.446806624740569040, -0.446761892654045870, -0.446717159450618020, -0.446672425130397290, -0.446627689693495030, -0.446582953140024000, -0.446538215470095590, -0.446493476683821610, +-0.446448736781313580, -0.446403995762684080, -0.446359253628044570, -0.446314510377506970, -0.446269766011182680, -0.446225020529184340, -0.446180273931623460, -0.446135526218611910, +-0.446090777390261150, -0.446046027446683870, -0.446001276387991470, -0.445956524214295550, -0.445911770925708660, -0.445867016522342340, -0.445822261004308500, -0.445777504371718590, +-0.445732746624685370, -0.445687987763320250, -0.445643227787735130, -0.445598466698041600, -0.445553704494352280, -0.445508941176778640, -0.445464176745432710, -0.445419411200425940, +-0.445374644541871030, -0.445329876769879510, -0.445285107884563270, -0.445240337886033900, -0.445195566774404080, -0.445150794549785340, -0.445106021212289200, -0.445061246762028410, +-0.445016471199114530, -0.444971694523659420, -0.444926916735774720, -0.444882137835573120, -0.444837357823166190, -0.444792576698665840, -0.444747794462183650, -0.444703011113832370, +-0.444658226653723570, -0.444613441081969210, -0.444568654398680820, -0.444523866603971250, -0.444479077697951970, -0.444434287680735010, -0.444389496552431930, -0.444344704313155480, +-0.444299910963017300, -0.444255116502129340, -0.444210320930603200, -0.444165524248551660, -0.444120726456086250, -0.444075927553318710, -0.444031127540361670, -0.443986326417326880, +-0.443941524184326250, -0.443896720841471360, -0.443851916388875170, -0.443807110826649090, -0.443762304154905310, -0.443717496373755290, -0.443672687483312010, -0.443627877483686980, +-0.443583066374992230, -0.443538254157339440, -0.443493440830841410, -0.443448626395609780, -0.443403810851756620, -0.443358994199393450, -0.443314176438633250, -0.443269357569587630, +-0.443224537592368180, -0.443179716507087760, -0.443134894313858110, -0.443090071012791190, -0.443045246603998690, -0.443000421087593520, -0.442955594463687260, -0.442910766732391990, +-0.442865937893819450, -0.442821107948082440, -0.442776276895292640, -0.442731444735562200, -0.442686611469002730, -0.442641777095727110, -0.442596941615847060, -0.442552105029474670, +-0.442507267336721580, -0.442462428537700740, -0.442417588632523840, -0.442372747621302580, -0.442327905504149800, -0.442283062281177310, -0.442238217952497130, -0.442193372518221050, +-0.442148525978461880, -0.442103678333331420, -0.442058829582941790, -0.442013979727404640, -0.441969128766832970, -0.441924276701338490, -0.441879423531033320, -0.441834569256029150, +-0.441789713876439010, -0.441744857392374570, -0.441699999803947970, -0.441655141111270970, -0.441610281314456510, -0.441565420413616350, -0.441520558408862670, -0.441475695300307170, +-0.441430831088062800, -0.441385965772241430, -0.441341099352954680, -0.441296231830315630, -0.441251363204435980, -0.441206493475427900, -0.441161622643403200, -0.441116750708474840, +-0.441071877670754620, -0.441027003530354680, -0.440982128287386870, -0.440937251941964090, -0.440892374494198210, -0.440847495944201420, -0.440802616292085450, -0.440757735537963380, +-0.440712853681946900, -0.440667970724148370, -0.440623086664679480, -0.440578201503653230, -0.440533315241181500, -0.440488427877376130, -0.440443539412350040, -0.440398649846215130, +-0.440353759179083590, -0.440308867411067230, -0.440263974542279110, -0.440219080572831100, -0.440174185502835320, -0.440129289332403690, -0.440084392061649290, -0.440039493690683850, +-0.439994594219619730, -0.439949693648568670, -0.439904791977643820, -0.439859889206956960, -0.439814985336620390, -0.439770080366745920, -0.439725174297446730, -0.439680267128834510, +-0.439635358861021290, -0.439590449494120070, -0.439545539028242730, -0.439500627463501490, -0.439455714800008330, -0.439410801037876280, -0.439365886177217170, -0.439320970218143430, +-0.439276053160766790, -0.439231135005200450, -0.439186215751556310, -0.439141295399946560, -0.439096373950483230, -0.439051451403279340, -0.439006527758446840, -0.438961603016097990, +-0.438916677176344750, -0.438871750239300200, -0.438826822205076290, -0.438781893073784960, -0.438736962845539260, -0.438692031520451160, -0.438647099098632980, -0.438602165580196600, +-0.438557230965255280, -0.438512295253920880, -0.438467358446305690, -0.438422420542521730, -0.438377481542682130, -0.438332541446898820, -0.438287600255284180, -0.438242657967950090, +-0.438197714585009780, -0.438152770106575220, -0.438107824532758650, -0.438062877863672210, -0.438017930099428910, -0.437972981240140840, -0.437928031285920280, -0.437883080236879220, +-0.437838128093130880, -0.437793174854787250, -0.437748220521960270, -0.437703265094763150, -0.437658308573307840, -0.437613350957706760, -0.437568392248071920, -0.437523432444516470, +-0.437478471547152470, -0.437433509556092280, -0.437388546471447930, -0.437343582293332590, -0.437298617021858290, -0.437253650657137450, -0.437208683199282130, -0.437163714648405420, +-0.437118745004619500, -0.437073774268036670, -0.437028802438769020, -0.436983829516929770, -0.436938855502630950, -0.436893880395984590, -0.436848904197103930, -0.436803926906101040, +-0.436758948523088280, -0.436713969048177770, -0.436668988481482720, -0.436624006823115200, -0.436579024073187720, -0.436534040231812190, -0.436489055299102040, -0.436444069275169210, +-0.436399082160126180, -0.436354093954085090, -0.436309104657159160, -0.436264114269460490, -0.436219122791101480, -0.436174130222194310, -0.436129136562852180, -0.436084141813187220, +-0.436039145973311500, -0.435994149043338330, -0.435949151023379830, -0.435904151913548370, -0.435859151713956170, -0.435814150424716500, -0.435769148045941470, -0.435724144577743500, +-0.435679140020234830, -0.435634134373528710, -0.435589127637737220, -0.435544119812972920, -0.435499110899347950, -0.435454100896975560, -0.435409089805967930, -0.435364077626437580, +-0.435319064358496650, -0.435274050002258440, -0.435229034557835130, -0.435184018025339240, -0.435139000404882850, -0.435093981696579420, -0.435048961900540990, -0.435003941016879780, +-0.434958919045709100, -0.434913895987141140, -0.434868871841288420, -0.434823846608263180, -0.434778820288178660, -0.434733792881147110, -0.434688764387281050, -0.434643734806692720, +-0.434598704139495420, -0.434553672385801390, -0.434508639545723160, -0.434463605619372970, -0.434418570606864120, -0.434373534508308850, -0.434328497323819780, -0.434283459053509010, +-0.434238419697490050, -0.434193379255874980, -0.434148337728776150, -0.434103295116306800, -0.434058251418579230, -0.434013206635706030, -0.433968160767799430, -0.433923113814972840, +-0.433878065777338400, -0.433833016655008840, -0.433787966448096360, -0.433742915156714310, -0.433697862780975050, -0.433652809320991100, -0.433607754776874690, -0.433562699148739290, +-0.433517642436697210, -0.433472584640860970, -0.433427525761342860, -0.433382465798256400, -0.433337404751713730, -0.433292342621827140, -0.433247279408710110, -0.433202215112474860, +-0.433157149733234100, -0.433112083271100070, -0.433067015726186220, -0.433021947098604810, -0.432976877388468570, -0.432931806595889700, -0.432886734720981770, -0.432841661763856970, +-0.432796587724627980, -0.432751512603407160, -0.432706436400307930, -0.432661359115442680, -0.432616280748923940, -0.432571201300864130, -0.432526120771376750, -0.432481039160574070, +-0.432435956468568360, -0.432390872695473160, -0.432345787841400760, -0.432300701906463970, -0.432255614890774960, -0.432210526794447330, -0.432165437617593350, -0.432120347360325840, +-0.432075256022756980, -0.432030163605000460, -0.431985070107168470, -0.431939975529373850, -0.431894879871728870, -0.431849783134347130, -0.431804685317340900, -0.431759586420822910, +-0.431714486444905620, -0.431669385389702510, -0.431624283255325920, -0.431579180041888610, -0.431534075749502980, -0.431488970378282490, -0.431443863928339670, -0.431398756399786750, +-0.431353647792737330, -0.431308538107303800, -0.431263427343598900, -0.431218315501735060, -0.431173202581825840, -0.431128088583983600, -0.431082973508321140, -0.431037857354950820, +-0.430992740123986310, -0.430947621815539920, -0.430902502429724440, -0.430857381966652350, -0.430812260426437220, -0.430767137809191400, -0.430722014115027750, -0.430676889344058680, +-0.430631763496397760, -0.430586636572157460, -0.430541508571450130, -0.430496379494389460, -0.430451249341087860, -0.430406118111658080, -0.430360985806212630, -0.430315852424865140, +-0.430270717967727980, -0.430225582434914040, -0.430180445826535750, -0.430135308142706780, -0.430090169383539500, -0.430045029549146810, -0.429999888639641110, -0.429954746655136110, +-0.429909603595744260, -0.429864459461578420, -0.429819314252750990, -0.429774167969375680, -0.429729020611564980, -0.429683872179431270, -0.429638722673088340, -0.429593572092648590, +-0.429548420438224890, -0.429503267709929750, -0.429458113907876860, -0.429412959032178630, -0.429367803082948090, -0.429322646060297570, -0.429277487964340840, -0.429232328795190410, +-0.429187168552959190, -0.429142007237759580, -0.429096844849705390, -0.429051681388909090, -0.429006516855483580, -0.428961351249541380, -0.428916184571196180, -0.428871016820560560, +-0.428825847997747370, -0.428780678102869180, -0.428735507136039700, -0.428690335097371420, -0.428645161986976890, -0.428599987804969880, -0.428554812551462940, -0.428509636226568900, +-0.428464458830400410, -0.428419280363071200, -0.428374100824693740, -0.428328920215381050, -0.428283738535245650, -0.428238555784401290, -0.428193371962960530, -0.428148187071036410, +-0.428103001108741390, -0.428057814076189260, -0.428012625973492540, -0.427967436800764320, -0.427922246558117110, -0.427877055245664660, -0.427831862863519600, -0.427786669411794440, +-0.427741474890603050, -0.427696279300057940, -0.427651082640272180, -0.427605884911358260, -0.427560686113430070, -0.427515486246600130, -0.427470285310981470, -0.427425083306686720, +-0.427379880233829670, -0.427334676092522900, -0.427289470882879440, -0.427244264605011910, -0.427199057259034120, -0.427153848845058690, -0.427108639363198650, -0.427063428813566570, +-0.427018217196276360, -0.426973004511440600, -0.426927790759171920, -0.426882575939584120, -0.426837360052789940, -0.426792143098902340, -0.426746925078034020, -0.426701705990298720, +-0.426656485835809170, -0.426611264614678460, -0.426566042327019170, -0.426520818972945140, -0.426475594552569060, -0.426430369066004010, -0.426385142513362680, -0.426339914894758860, +-0.426294686210305250, -0.426249456460114920, -0.426204225644300550, -0.426158993762976000, -0.426113760816253960, -0.426068526804247170, -0.426023291727069430, -0.425978055584833480, +-0.425932818377652340, -0.425887580105638820, -0.425842340768906700, -0.425797100367568790, -0.425751858901738060, -0.425706616371527350, -0.425661372777050410, -0.425616128118420090, +-0.425570882395749470, -0.425525635609151240, -0.425480387758739310, -0.425435138844626410, -0.425389888866925640, -0.425344637825749770, -0.425299385721212670, -0.425254132553427140, +-0.425208878322506310, -0.425163623028562860, -0.425118366671710710, -0.425073109252062710, -0.425027850769731490, -0.424982591224831060, -0.424937330617474180, -0.424892068947773930, +-0.424846806215843140, -0.424801542421795690, -0.424756277565744410, -0.424711011647802450, -0.424665744668082550, -0.424620476626698660, -0.424575207523763600, -0.424529937359390540, +-0.424484666133692230, -0.424439393846782640, -0.424394120498774560, -0.424348846089781240, -0.424303570619915360, -0.424258294089290940, -0.424213016498020790, -0.424167737846217700, +-0.424122458133995680, -0.424077177361467490, -0.424031895528746370, -0.423986612635945110, -0.423941328683177740, -0.423896043670557050, -0.423850757598196240, -0.423805470466208090, +-0.423760182274706740, -0.423714893023804880, -0.423669602713615810, -0.423624311344252320, -0.423579018915828500, -0.423533725428457080, -0.423488430882251350, -0.423443135277324130, +-0.423397838613789490, -0.423352540891760280, -0.423307242111349290, -0.423261942272670610, -0.423216641375837090, -0.423171339420961910, -0.423126036408158050, -0.423080732337539460, +-0.423035427209219050, -0.422990121023310070, -0.422944813779925380, -0.422899505479179040, -0.422854196121183970, -0.422808885706053410, -0.422763574233900210, -0.422718261704838450, +-0.422672948118981100, -0.422627633476441330, -0.422582317777332130, -0.422537001021767500, -0.422491683209860360, -0.422446364341724000, -0.422401044417471390, -0.422355723437216500, +-0.422310401401072340, -0.422265078309151780, -0.422219754161568930, -0.422174428958436650, -0.422129102699868360, -0.422083775385976860, -0.422038447016876370, -0.421993117592679710, +-0.421947787113500280, -0.421902455579451000, -0.421857122990645980, -0.421811789347198150, -0.421766454649220800, -0.421721118896826950, -0.421675782090130740, -0.421630444229245000, +-0.421585105314283230, -0.421539765345358200, -0.421494424322584220, -0.421449082246074190, -0.421403739115941030, -0.421358394932298930, -0.421313049695260840, -0.421267703404940130, +-0.421222356061449750, -0.421177007664903900, -0.421131658215415540, -0.421086307713097960, -0.421040956158064310, -0.420995603550428590, -0.420950249890303880, -0.420904895177803610, +-0.420859539413040660, -0.420814182596129240, -0.420768824727182360, -0.420723465806313420, -0.420678105833635460, -0.420632744809262600, -0.420587382733307870, -0.420542019605884330, +-0.420496655427106130, -0.420451290197086270, -0.420405923915938170, -0.420360556583774860, -0.420315188200710620, -0.420269818766858320, -0.420224448282331520, -0.420179076747243200, +-0.420133704161707590, -0.420088330525837720, -0.420042955839747050, -0.419997580103548540, -0.419952203317356500, -0.419906825481284000, -0.419861446595444390, -0.419816066659950750, +-0.419770685674917320, -0.419725303640457240, -0.419679920556683460, -0.419634536423710290, -0.419589151241650800, -0.419543765010618410, -0.419498377730726240, -0.419452989402088470, +-0.419407600024818250, -0.419362209599029030, -0.419316818124833900, -0.419271425602347150, -0.419226032031681790, -0.419180637412951360, -0.419135241746268930, -0.419089845031748790, +-0.419044447269504070, -0.418999048459648190, -0.418953648602294340, -0.418908247697556750, -0.418862845745548550, -0.418817442746383220, -0.418772038700173880, -0.418726633607034830, +-0.418681227467079200, -0.418635820280420120, -0.418590412047171900, -0.418545002767447600, -0.418499592441360870, -0.418454181069024710, -0.418408768650553490, -0.418363355186060380, +-0.418317940675658860, -0.418272525119462110, -0.418227108517584380, -0.418181690870138960, -0.418136272177239250, -0.418090852438998520, -0.418045431655531040, -0.418000009826949960, +-0.417954586953368900, -0.417909163034900940, -0.417863738071660440, -0.417818312063760630, -0.417772885011314650, -0.417727456914436860, -0.417682027773240430, -0.417636597587838890, +-0.417591166358345480, -0.417545734084874550, -0.417500300767539300, -0.417454866406453300, -0.417409431001729720, -0.417363994553482940, -0.417318557061826250, -0.417273118526873100, +-0.417227678948736750, -0.417182238327531650, -0.417136796663370890, -0.417091353956368200, -0.417045910206636730, -0.417000465414290810, -0.416955019579443810, -0.416909572702208800, +-0.416864124782700300, -0.416818675821031490, -0.416773225817315960, -0.416727774771666950, -0.416682322684198970, -0.416636869555025100, -0.416591415384259140, -0.416545960172014170, +-0.416500503918404760, -0.416455046623544050, -0.416409588287545760, -0.416364128910523050, -0.416318668492590470, -0.416273207033861170, -0.416227744534448880, -0.416182280994466800, +-0.416136816414029500, -0.416091350793250050, -0.416045884132242310, -0.416000416431119400, -0.415954947689995910, -0.415909477908984970, -0.415864007088199980, -0.415818535227755410, +-0.415773062327764450, -0.415727588388340840, -0.415682113409597880, -0.415636637391650020, -0.415591160334610580, -0.415545682238593230, -0.415500203103711270, -0.415454722930079230, +-0.415409241717810350, -0.415363759467018370, -0.415318276177816580, -0.415272791850319570, -0.415227306484640510, -0.415181820080893220, -0.415136332639190920, -0.415090844159648250, +-0.415045354642378460, -0.414999864087494900, -0.414954372495112020, -0.414908879865343250, -0.414863386198302260, -0.414817891494102420, -0.414772395752858290, -0.414726898974683120, +-0.414681401159690710, -0.414635902307994410, -0.414590402419708740, -0.414544901494947050, -0.414499399533823140, -0.414453896536450320, -0.414408392502943150, -0.414362887433415040, +-0.414317381327979680, -0.414271874186750430, -0.414226366009841920, -0.414180856797367550, -0.414135346549440560, -0.414089835266175650, -0.414044322947686120, -0.413998809594085800, +-0.413953295205488070, -0.413907779782007490, -0.413862263323757470, -0.413816745830851760, -0.413771227303403820, -0.413725707741528230, -0.413680187145338330, -0.413634665514947990, +-0.413589142850470550, -0.413543619152020650, -0.413498094419711750, -0.413452568653657590, -0.413407041853971590, -0.413361514020768430, -0.413315985154161460, -0.413270455254264530, +-0.413224924321191070, -0.413179392355055690, -0.413133859355971800, -0.413088325324052870, -0.413042790259413590, -0.412997254162167260, -0.412951717032427830, -0.412906178870308730, +-0.412860639675924510, -0.412815099449388770, -0.412769558190815230, -0.412724015900317430, -0.412678472578009990, -0.412632928224006320, -0.412587382838420390, -0.412541836421365550, +-0.412496288972956540, -0.412450740493306820, -0.412405190982530260, -0.412359640440740300, -0.412314088868051650, -0.412268536264577770, -0.412222982630432170, -0.412177427965729480, +-0.412131872270583230, -0.412086315545107270, -0.412040757789415180, -0.411995199003621580, -0.411949639187839940, -0.411904078342184290, -0.411858516466767970, -0.411812953561705770, +-0.411767389627111180, -0.411721824663098150, -0.411676258669780140, -0.411630691647271900, -0.411585123595686890, -0.411539554515139130, -0.411493984405742030, -0.411448413267610390, +-0.411402841100857730, -0.411357267905597570, -0.411311693681944590, -0.411266118430012430, -0.411220542149914940, -0.411174964841765690, -0.411129386505679480, -0.411083807141769790, +-0.411038226750150560, -0.410992645330935320, -0.410947062884238930, -0.410901479410174850, -0.410855894908857100, -0.410810309380399200, -0.410764722824915940, -0.410719135242520850, +-0.410673546633327950, -0.410627956997450750, -0.410582366335004110, -0.410536774646101500, -0.410491181930856600, -0.410445588189384090, -0.410399993421797670, -0.410354397628211240, +-0.410308800808738380, -0.410263202963493940, -0.410217604092591500, -0.410172004196145080, -0.410126403274268190, -0.410080801327075750, -0.410035198354681270, -0.409989594357198840, +-0.409943989334741970, -0.409898383287425560, -0.409852776215363150, -0.409807168118668850, -0.409761558997456200, -0.409715948851840040, -0.409670337681934060, -0.409624725487852230, +-0.409579112269708110, -0.409533498027616680, -0.409487882761691510, -0.409442266472046180, -0.409396649158795590, -0.409351030822053430, -0.409305411461933670, -0.409259791078549980, +-0.409214169672017180, -0.409168547242449000, -0.409122923789959460, -0.409077299314662190, -0.409031673816672050, -0.408986047296102720, -0.408940419753068330, -0.408894791187682460, +-0.408849161600060020, -0.408803530990314630, -0.408757899358560440, -0.408712266704911120, -0.408666633029481530, -0.408620998332385350, -0.408575362613736280, -0.408529725873649220, +-0.408484088112237800, -0.408438449329616200, -0.408392809525898070, -0.408347168701198300, -0.408301526855630590, -0.408255883989309120, -0.408210240102347520, -0.408164595194860700, +-0.408118949266962410, -0.408073302318766710, -0.408027654350387400, -0.407982005361939350, -0.407936355353536230, -0.407890704325292290, -0.407845052277321150, -0.407799399209737790, +-0.407753745122655940, -0.407708090016189350, -0.407662433890452920, -0.407616776745560410, -0.407571118581625920, -0.407525459398763280, -0.407479799197087320, -0.407434137976711960, +-0.407388475737751170, -0.407342812480318840, -0.407297148204529890, -0.407251482910498010, -0.407205816598337490, -0.407160149268161960, -0.407114480920086510, -0.407068811554224860, +-0.407023141170691160, -0.406977469769599200, -0.406931797351064000, -0.406886123915199290, -0.406840449462119280, -0.406794773991937700, -0.406749097504769620, -0.406703420000728790, +-0.406657741479929000, -0.406612061942485280, -0.406566381388511420, -0.406520699818121560, -0.406475017231429590, -0.406429333628550440, -0.406383649009598000, -0.406337963374686420, +-0.406292276723929480, -0.406246589057442320, -0.406200900375338620, -0.406155210677732750, -0.406109519964738430, -0.406063828236470690, -0.406018135493043390, -0.405972441734570700, +-0.405926746961166600, -0.405881051172945980, -0.405835354370022720, -0.405789656552510700, -0.405743957720524910, -0.405698257874179240, -0.405652557013587930, -0.405606855138864850, +-0.405561152250125010, -0.405515448347482270, -0.405469743431050970, -0.405424037500944860, -0.405378330557279070, -0.405332622600167450, -0.405286913629724240, -0.405241203646063420, +-0.405195492649299940, -0.405149780639547760, -0.405104067616921080, -0.405058353581533860, -0.405012638533501170, -0.404966922472936860, -0.404921205399954850, -0.404875487314670270, +-0.404829768217196910, -0.404784048107649170, -0.404738326986140870, -0.404692604852787190, -0.404646881707701970, -0.404601157550999570, -0.404555432382793840, -0.404509706203199980, +-0.404463979012331830, -0.404418250810303750, -0.404372521597229640, -0.404326791373224580, -0.404281060138402590, -0.404235327892877920, -0.404189594636764570, -0.404143860370177580, +-0.404098125093230950, -0.404052388806038660, -0.404006651508715730, -0.403960913201376230, -0.403915173884134450, -0.403869433557104310, -0.403823692220400930, -0.403777949874138400, +-0.403732206518430950, -0.403686462153392600, -0.403640716779138540, -0.403594970395782630, -0.403549223003439320, -0.403503474602222520, -0.403457725192247480, -0.403411974773628110, +-0.403366223346478760, -0.403320470910913500, -0.403274717467047460, -0.403228963014994610, -0.403183207554869360, -0.403137451086785730, -0.403091693610858840, -0.403045935127202660, +-0.403000175635931320, -0.402954415137159900, -0.402908653631002480, -0.402862891117573400, -0.402817127596986680, -0.402771363069357570, -0.402725597534800030, -0.402679830993428520, +-0.402634063445357020, -0.402588294890700750, -0.402542525329573740, -0.402496754762090460, -0.402450983188364860, -0.402405210608512200, -0.402359437022646540, -0.402313662430882240, +-0.402267886833333420, -0.402222110230115280, -0.402176332621341840, -0.402130554007127160, -0.402084774387586550, -0.402038993762833970, -0.401993212132983950, -0.401947429498150430, +-0.401901645858448790, -0.401855861213992970, -0.401810075564897560, -0.401764288911276580, -0.401718501253245210, -0.401672712590917640, -0.401626922924408270, -0.401581132253831190, +-0.401535340579301680, -0.401489547900933770, -0.401443754218842040, -0.401397959533140560, -0.401352163843944510, -0.401306367151368140, -0.401260569455525350, -0.401214770756531610, +-0.401168971054500890, -0.401123170349547810, -0.401077368641786340, -0.401031565931331880, -0.400985762218298510, -0.400939957502800700, -0.400894151784952630, -0.400848345064869550, +-0.400802537342665630, -0.400756728618455400, -0.400710918892352890, -0.400665108164473480, -0.400619296434931380, -0.400573483703840940, -0.400527669971316450, -0.400481855237473150, +-0.400436039502425290, -0.400390222766287270, -0.400344405029173290, -0.400298586291198690, -0.400252766552477660, -0.400206945813124270, -0.400161124073253940, -0.400115301332980790, +-0.400069477592419400, -0.400023652851683900, -0.399977827110889690, -0.399932000370150920, -0.399886172629582150, -0.399840343889297510, -0.399794514149412420, -0.399748683410041050, +-0.399702851671297990, -0.399657018933297410, -0.399611185196154680, -0.399565350459983930, -0.399519514724899880, -0.399473677991016570, -0.399427840258449520, -0.399382001527312850, +-0.399336161797720750, -0.399290321069788680, -0.399244479343630830, -0.399198636619361720, -0.399152792897095650, -0.399106948176948030, -0.399061102459033030, -0.399015255743465250, +-0.398969408030358910, -0.398923559319829480, -0.398877709611991150, -0.398831858906958550, -0.398786007204845860, -0.398740154505768610, -0.398694300809840970, -0.398648446117177540, +-0.398602590427892640, -0.398556733742101600, -0.398510876059918810, -0.398465017381458340, -0.398419157706835780, -0.398373297036165310, -0.398327435369561610, -0.398281572707138930, +-0.398235709049012730, -0.398189844395297200, -0.398143978746107070, -0.398098112101556660, -0.398052244461761300, -0.398006375826835350, -0.397960506196893490, -0.397914635572049920, +-0.397868763952420210, -0.397822891338118540, -0.397777017729259660, -0.397731143125957860, -0.397685267528328560, -0.397639390936486150, -0.397593513350544770, -0.397547634770620110, +-0.397501755196826290, -0.397455874629278120, -0.397409993068089830, -0.397364110513377000, -0.397318226965253870, -0.397272342423835190, -0.397226456889235250, -0.397180570361569560, +-0.397134682840952440, -0.397088794327498610, -0.397042904821322370, -0.396997014322539310, -0.396951122831263710, -0.396905230347610270, -0.396859336871693390, -0.396813442403628590, +-0.396767546943530110, -0.396721650491512810, -0.396675753047690980, -0.396629854612180200, -0.396583955185094760, -0.396538054766549020, -0.396492153356658550, -0.396446250955537650, +-0.396400347563301170, -0.396354443180063410, -0.396308537805940000, -0.396262631441045180, -0.396216724085493800, -0.396170815739400160, -0.396124906402879950, -0.396078996076047460, +-0.396033084759017500, -0.395987172451904350, -0.395941259154823750, -0.395895344867889960, -0.395849429591217830, -0.395803513324921700, -0.395757596069117200, -0.395711677823918750, +-0.395665758589440640, -0.395619838365798560, -0.395573917153106910, -0.395527994951480440, -0.395482071761033560, -0.395436147581881950, -0.395390222414139960, -0.395344296257922390, +-0.395298369113343650, -0.395252440980519480, -0.395206511859564120, -0.395160581750592540, -0.395114650653719090, -0.395068718569059400, -0.395022785496727920, -0.394976851436839470, +-0.394930916389508500, -0.394884980354850650, -0.394839043332980310, -0.394793105324012020, -0.394747166328061340, -0.394701226345242740, -0.394655285375671070, -0.394609343419460800, +-0.394563400476727550, -0.394517456547585800, -0.394471511632150440, -0.394425565730535890, -0.394379618842857830, -0.394333670969230670, -0.394287722109769370, -0.394241772264588400, +-0.394195821433803330, -0.394149869617528790, -0.394103916815879530, -0.394057963028970060, -0.394012008256916120, -0.393966052499832130, -0.393920095757833040, -0.393874138031033270, +-0.393828179319548550, -0.393782219623493410, -0.393736258942982360, -0.393690297278130990, -0.393644334629053900, -0.393598370995866030, -0.393552406378681770, -0.393506440777616930, +-0.393460474192785960, -0.393414506624303830, -0.393368538072285000, -0.393322568536845220, -0.393276598018099060, -0.393230626516161360, -0.393184654031146720, -0.393138680563170860, +-0.393092706112348310, -0.393046730678793920, -0.393000754262622380, -0.392954776863949310, -0.392908798482889340, -0.392862819119556950, -0.392816838774067920, -0.392770857446536780, +-0.392724875137078490, -0.392678891845807620, -0.392632907572839920, -0.392586922318289950, -0.392540936082272700, -0.392494948864902660, -0.392448960666295700, -0.392402971486566330, +-0.392356981325829520, -0.392310990184199850, -0.392264998061793100, -0.392219004958723860, -0.392173010875107090, -0.392127015811057410, -0.392081019766690630, -0.392035022742121260, +-0.391989024737463940, -0.391943025752834460, -0.391897025788347400, -0.391851024844117820, -0.391805022920260200, -0.391759020016890500, -0.391713016134123240, -0.391667011272073430, +-0.391621005430855650, -0.391574998610585810, -0.391528990811378430, -0.391482982033348580, -0.391436972276610890, -0.391390961541281220, -0.391344949827474090, -0.391298937135304560, +-0.391252923464887330, -0.391206908816338180, -0.391160893189771760, -0.391114876585302700, -0.391068859003046890, -0.391022840443118860, -0.390976820905633790, -0.390930800390706270, +-0.390884778898452080, -0.390838756428986020, -0.390792732982423010, -0.390746708558877830, -0.390700683158466230, -0.390654656781302960, -0.390608629427503020, -0.390562601097181110, +-0.390516571790453070, -0.390470541507433650, -0.390424510248237820, -0.390378478012980370, -0.390332444801777090, -0.390286410614742730, -0.390240375451992360, -0.390194339313640610, +-0.390148302199803400, -0.390102264110595450, -0.390056225046131470, -0.390010185006527290, -0.389964143991897660, -0.389918102002357660, -0.389872059038022020, -0.389826015099006610, +-0.389779970185426210, -0.389733924297395840, -0.389687877435030310, -0.389641829598445400, -0.389595780787755970, -0.389549731003077100, -0.389503680244523480, -0.389457628512211110, +-0.389411575806254630, -0.389365522126769170, -0.389319467473869530, -0.389273411847671670, -0.389227355248290220, -0.389181297675840030, -0.389135239130436960, -0.389089179612195800, +-0.389043119121231740, -0.388997057657659410, -0.388950995221594880, -0.388904931813152830, -0.388858867432448460, -0.388812802079596560, -0.388766735754712990, -0.388720668457912640, +-0.388674600189310600, -0.388628530949021610, -0.388582460737161790, -0.388536389553845730, -0.388490317399188770, -0.388444244273305540, -0.388398170176312170, -0.388352095108323300, +-0.388306019069453830, -0.388259942059819730, -0.388213864079535790, -0.388167785128717140, -0.388121705207478680, -0.388075624315936340, -0.388029542454204900, -0.387983459622399660, +-0.387937375820635310, -0.387891291049027980, -0.387845205307692400, -0.387799118596743760, -0.387753030916296980, -0.387706942266468010, -0.387660852647371710, -0.387614762059123210, +-0.387568670501837460, -0.387522577975630440, -0.387476484480616950, -0.387430390016912260, -0.387384294584631190, -0.387338198183889760, -0.387292100814802860, -0.387246002477485310, +-0.387199903172053160, -0.387153802898621220, -0.387107701657304850, -0.387061599448218720, -0.387015496271479080, -0.386969392127200660, -0.386923287015498770, -0.386877180936488260, +-0.386831073890285150, -0.386784965877004390, -0.386738856896761240, -0.386692746949670540, -0.386646636035848370, -0.386600524155409630, -0.386554411308469570, -0.386508297495143040, +-0.386462182715546170, -0.386416066969793910, -0.386369950258001030, -0.386323832580283690, -0.386277713936756750, -0.386231594327535510, -0.386185473752734930, -0.386139352212471030, +-0.386093229706858780, -0.386047106236013460, -0.386000981800049940, -0.385954856399084390, -0.385908730033231730, -0.385862602702607190, -0.385816474407325750, -0.385770345147503520, +-0.385724214923255480, -0.385678083734696860, -0.385631951581942630, -0.385585818465108920, -0.385539684384310690, -0.385493549339662840, -0.385447413331281520, -0.385401276359281620, +-0.385355138423778610, -0.385308999524887290, -0.385262859662723890, -0.385216718837403330, -0.385170577049041010, -0.385124434297751780, -0.385078290583651950, -0.385032145906856360, +-0.384986000267480370, -0.384939853665638990, -0.384893706101448410, -0.384847557575023540, -0.384801408086479780, -0.384755257635932100, -0.384709106223496690, -0.384662953849288500, +-0.384616800513422510, -0.384570646216014940, -0.384524490957180780, -0.384478334737035350, -0.384432177555693700, -0.384386019413272000, -0.384339860309885260, -0.384293700245648910, +-0.384247539220677840, -0.384201377235088350, -0.384155214288995410, -0.384109050382514470, -0.384062885515760450, -0.384016719688849650, -0.383970552901897020, -0.383924385155018030, +-0.383878216448327700, -0.383832046781942220, -0.383785876155976590, -0.383739704570546290, -0.383693532025766340, -0.383647358521752910, -0.383601184058621150, -0.383555008636486010, +-0.383508832255463730, -0.383462654915669390, -0.383416476617218390, -0.383370297360225820, -0.383324117144807910, -0.383277935971079680, -0.383231753839156640, -0.383185570749153770, +-0.383139386701187410, -0.383093201695372590, -0.383047015731824760, -0.383000828810658940, -0.382954640931991550, -0.382908452095937490, -0.382862262302612280, -0.382816071552131040, +-0.382769879844610030, -0.382723687180164360, -0.382677493558909010, -0.382631298980960320, -0.382585103446433430, -0.382538906955443790, -0.382492709508106430, -0.382446511104537700, +-0.382400311744852730, -0.382354111429166980, -0.382307910157595520, -0.382261707930254710, -0.382215504747259630, -0.382169300608725780, -0.382123095514768250, -0.382076889465503390, +-0.382030682461046320, -0.381984474501512570, -0.381938265587017210, -0.381892055717676590, -0.381845844893605850, -0.381799633114920050, -0.381753420381735600, -0.381707206694167580, +-0.381660992052331560, -0.381614776456342670, -0.381568559906317220, -0.381522342402370370, -0.381476123944617720, -0.381429904533174270, -0.381383684168156490, -0.381337462849679560, +-0.381291240577858900, -0.381245017352809750, -0.381198793174648500, -0.381152568043490240, -0.381106341959450530, -0.381060114922644580, -0.381013886933188770, -0.380967657991198250, +-0.380921428096788530, -0.380875197250074900, -0.380828965451173620, -0.380782732700199970, -0.380736498997269080, -0.380690264342497360, -0.380644028735999950, -0.380597792177892470, +-0.380551554668290100, -0.380505316207309260, -0.380459076795065130, -0.380412836431673340, -0.380366595117249020, -0.380320352851908570, -0.380274109635767300, -0.380227865468940770, +-0.380181620351544130, -0.380135374283693870, -0.380089127265505140, -0.380042879297093630, -0.379996630378574510, -0.379950380510064190, -0.379904129691677970, -0.379857877923530980, +-0.379811625205739690, -0.379765371538419380, -0.379719116921685640, -0.379672861355653650, -0.379626604840439970, -0.379580347376159750, -0.379534088962928670, -0.379487829600861970, +-0.379441569290076050, -0.379395308030686270, -0.379349045822808210, -0.379302782666557090, -0.379256518562049450, -0.379210253509400520, -0.379163987508725930, -0.379117720560140980, +-0.379071452663762130, -0.379025183819704680, -0.378978914028083810, -0.378932643289016100, -0.378886371602616790, -0.378840098969001560, -0.378793825388285600, -0.378747550860585540, +-0.378701275386016610, -0.378654998964694510, -0.378608721596734420, -0.378562443282253020, -0.378516164021365450, -0.378469883814187500, -0.378423602660834470, -0.378377320561422810, +-0.378331037516067840, -0.378284753524885280, -0.378238468587990430, -0.378192182705499810, -0.378145895877528730, -0.378099608104192520, -0.378053319385607660, -0.378007029721889540, +-0.377960739113153870, -0.377914447559515860, -0.377868155061092230, -0.377821861617998130, -0.377775567230349440, -0.377729271898261390, -0.377682975621850600, -0.377636678401232330, +-0.377590380236522420, -0.377544081127836110, -0.377497781075290030, -0.377451480078999480, -0.377405178139080200, -0.377358875255647600, -0.377312571428818240, -0.377266266658707440, +-0.377219960945430920, -0.377173654289104150, -0.377127346689843660, -0.377081038147764720, -0.377034728662982880, -0.376988418235614580, -0.376942106865775230, -0.376895794553580630, +-0.376849481299146080, -0.376803167102588320, -0.376756851964022590, -0.376710535883564730, -0.376664218861330170, -0.376617900897435410, -0.376571581991995920, -0.376525262145127490, +-0.376478941356945480, -0.376432619627566520, -0.376386296957106070, -0.376339973345679810, -0.376293648793403210, -0.376247323300392960, -0.376200996866764340, -0.376154669492632820, +-0.376108341178115040, -0.376062011923326440, -0.376015681728382790, -0.375969350593399530, -0.375923018518493300, -0.375876685503779510, -0.375830351549374050, -0.375784016655392240, +-0.375737680821950860, -0.375691344049165210, -0.375645006337151250, -0.375598667686024350, -0.375552328095901220, -0.375505987566897240, -0.375459646099128300, -0.375413303692709810, +-0.375366960347758460, -0.375320616064389770, -0.375274270842719080, -0.375227924682863150, -0.375181577584937420, -0.375135229549057700, -0.375088880575339570, -0.375042530663899590, +-0.374996179814853280, -0.374949828028316560, -0.374903475304404820, -0.374857121643234810, -0.374810767044922000, -0.374764411509582280, -0.374718055037331130, -0.374671697628285230, +-0.374625339282560090, -0.374578980000271620, -0.374532619781535290, -0.374486258626467780, -0.374439896535184670, -0.374393533507801800, -0.374347169544434700, -0.374300804645200100, +-0.374254438810213470, -0.374208072039590280, -0.374161704333447360, -0.374115335691900200, -0.374068966115064680, -0.374022595603056400, -0.373976224155991970, -0.373929851773986970, +-0.373883478457157360, -0.373837104205618660, -0.373790729019487620, -0.373744352898879690, -0.373697975843910960, -0.373651597854696820, -0.373605218931354120, -0.373558839073998390, +-0.373512458282745540, -0.373466076557711140, -0.373419693899011970, -0.373373310306763570, -0.373326925781081450, -0.373280540322082470, -0.373234153929882070, -0.373187766604596350, +-0.373141378346340760, -0.373094989155232200, -0.373048599031386100, -0.373002207974918510, -0.372955815985945020, -0.372909423064582410, -0.372863029210946220, -0.372816634425152450, +-0.372770238707316680, -0.372723842057555770, -0.372677444475985160, -0.372631045962721010, -0.372584646517878810, -0.372538246141575440, -0.372491844833926440, -0.372445442595047420, +-0.372399039425055200, -0.372352635324065370, -0.372306230292193950, -0.372259824329556570, -0.372213417436270010, -0.372167009612449920, -0.372120600858212300, -0.372074191173672800, +-0.372027780558948200, -0.371981369014154130, -0.371934956539406670, -0.371888543134821390, -0.371842128800515200, -0.371795713536603620, -0.371749297343202830, -0.371702880220428360, +-0.371656462168397090, -0.371610043187224680, -0.371563623277026740, -0.371517202437920140, -0.371470780670020540, -0.371424357973443970, -0.371377934348306130, -0.371331509794723850, +-0.371285084312812820, -0.371238657902689060, -0.371192230564468260, -0.371145802298267270, -0.371099373104201770, -0.371052942982387890, -0.371006511932941150, -0.370960079955978630, +-0.370913647051615890, -0.370867213219969020, -0.370820778461153690, -0.370774342775286810, -0.370727906162484130, -0.370681468622861670, -0.370635030156535090, -0.370588590763621380, +-0.370542150444236160, -0.370495709198495170, -0.370449267026515370, -0.370402823928412340, -0.370356379904302260, -0.370309934954300810, -0.370263489078524970, -0.370217042277090400, +-0.370170594550113200, -0.370124145897709140, -0.370077696319995100, -0.370031245817086800, -0.369984794389100420, -0.369938342036151610, -0.369891888758357380, -0.369845434555833410, +-0.369798979428695880, -0.369752523377060490, -0.369706066401044200, -0.369659608500762740, -0.369613149676331850, -0.369566689927868450, -0.369520229255488390, -0.369473767659307730, +-0.369427305139442270, -0.369380841696008930, -0.369334377329123500, -0.369287912038902100, -0.369241445825460530, -0.369194978688915710, -0.369148510629383530, -0.369102041646980020, +-0.369055571741820960, -0.369009100914023450, -0.368962629163703150, -0.368916156490976310, -0.368869682895958670, -0.368823208378767200, -0.368776732939517680, -0.368730256578325980, +-0.368683779295309040, -0.368637301090582630, -0.368590821964262960, -0.368544341916465850, -0.368497860947308300, -0.368451379056906060, -0.368404896245375420, -0.368358412512832130, +-0.368311927859393150, -0.368265442285174440, -0.368218955790292070, -0.368172468374861890, -0.368125980039000990, -0.368079490782825090, -0.368033000606450500, -0.367986509509993010, +-0.367940017493569640, -0.367893524557296240, -0.367847030701288990, -0.367800535925663810, -0.367754040230537650, -0.367707543616026420, -0.367661046082245920, -0.367614547629313170, +-0.367568048257344130, -0.367521547966454920, -0.367475046756761400, -0.367428544628380700, -0.367382041581428680, -0.367335537616021500, -0.367289032732275090, -0.367242526930306510, +-0.367196020210231620, -0.367149512572166660, -0.367103004016227530, -0.367056494542531310, -0.367009984151193790, -0.366963472842331380, -0.366916960616059830, -0.366870447472496310, +-0.366823933411756680, -0.366777418433956840, -0.366730902539213810, -0.366684385727643500, -0.366637867999362270, -0.366591349354485950, -0.366544829793131690, -0.366498309315415330, +-0.366451787921453220, -0.366405265611361220, -0.366358742385256450, -0.366312218243254830, -0.366265693185472640, -0.366219167212025850, -0.366172640323031540, -0.366126112518605610, +-0.366079583798864410, -0.366033054163923840, -0.365986523613901050, -0.365939992148911990, -0.365893459769072500, -0.365846926474499730, -0.365800392265309690, -0.365753857141618680, +-0.365707321103542590, -0.365660784151198630, -0.365614246284702680, -0.365567707504171170, -0.365521167809719940, -0.365474627201466230, -0.365428085679525890, -0.365381543244015390, +-0.365334999895050580, -0.365288455632748750, -0.365241910457225700, -0.365195364368597950, -0.365148817366981350, -0.365102269452493080, -0.365055720625249160, -0.365009170885365550, +-0.364962620232959390, -0.364916068668146690, -0.364869516191043850, -0.364822962801766790, -0.364776408500432690, -0.364729853287157620, -0.364683297162057940, -0.364636740125249550, +-0.364590182176849740, -0.364543623316974490, -0.364497063545740130, -0.364450502863262750, -0.364403941269659530, -0.364357378765046420, -0.364310815349539910, -0.364264251023255880, +-0.364217685786311700, -0.364171119638823260, -0.364124552580907090, -0.364077984612679040, -0.364031415734256510, -0.363984845945755420, -0.363938275247291780, -0.363891703638982880, +-0.363845131120944740, -0.363798557693293720, -0.363751983356145950, -0.363705408109618600, -0.363658831953827750, -0.363612254888889820, -0.363565676914920810, -0.363519098032038020, +-0.363472518240357530, -0.363425937539995750, -0.363379355931068680, -0.363332773413693630, -0.363286189987986620, -0.363239605654064210, -0.363193020412042320, -0.363146434262038300, +-0.363099847204168210, -0.363053259238548090, -0.363006670365295210, -0.362960080584525670, -0.362913489896355910, -0.362866898300902020, -0.362820305798281340, -0.362773712388609840, +-0.362727118072004080, -0.362680522848580100, -0.362633926718455290, -0.362587329681745560, -0.362540731738567600, -0.362494132889037370, -0.362447533133272160, -0.362400932471388220, +-0.362354330903501890, -0.362307728429729300, -0.362261125050187820, -0.362214520764993550, -0.362167915574262530, -0.362121309478112160, -0.362074702476658520, -0.362028094570018110, +-0.361981485758307080, -0.361934876041642710, -0.361888265420141130, -0.361841653893918920, -0.361795041463092160, -0.361748428127778240, -0.361701813888093250, -0.361655198744153690, +-0.361608582696075710, -0.361561965743976700, -0.361515347887972790, -0.361468729128180510, -0.361422109464715980, -0.361375488897696610, -0.361328867427238460, -0.361282245053458180, +-0.361235621776471890, -0.361188997596396940, -0.361142372513349520, -0.361095746527445750, -0.361049119638803040, -0.361002491847537470, -0.360955863153765710, -0.360909233557603900, +-0.360862603059169400, -0.360815971658578370, -0.360769339355947460, -0.360722706151392740, -0.360676072045031660, -0.360629437036980470, -0.360582801127355630, -0.360536164316273390, +-0.360489526603851140, -0.360442887990205070, -0.360396248475451820, -0.360349608059707500, -0.360302966743089590, -0.360256324525714270, -0.360209681407697710, -0.360163037389157340, +-0.360116392470209430, -0.360069746650970470, -0.360023099931556790, -0.359976452312085750, -0.359929803792673590, -0.359883154373436930, -0.359836504054491910, -0.359789852835956100, +-0.359743200717945690, -0.359696547700577180, -0.359649893783966950, -0.359603238968232430, -0.359556583253489770, -0.359509926639855650, -0.359463269127446310, -0.359416610716379200, +-0.359369951406770580, -0.359323291198736630, -0.359276630092394910, -0.359229968087861620, -0.359183305185253380, -0.359136641384686430, -0.359089976686278340, -0.359043311090145310, +-0.358996644596404010, -0.358949977205170630, -0.358903308916562800, -0.358856639730696650, -0.358809969647688910, -0.358763298667655830, -0.358716626790714920, -0.358669954016982430, +-0.358623280346575090, -0.358576605779609090, -0.358529930316202010, -0.358483253956470130, -0.358436576700530090, -0.358389898548498180, -0.358343219500491970, -0.358296539556627660, +-0.358249858717021640, -0.358203176981791380, -0.358156494351053180, -0.358109810824923710, -0.358063126403519340, -0.358016441086957520, -0.357969754875354650, -0.357923067768827370, +-0.357876379767491980, -0.357829690871466100, -0.357783001080865970, -0.357736310395808330, -0.357689618816409540, -0.357642926342787050, -0.357596232975057330, -0.357549538713336950, +-0.357502843557742370, -0.357456147508391050, -0.357409450565399360, -0.357362752728883630, -0.357316053998961490, -0.357269354375749140, -0.357222653859363470, -0.357175952449920680, +-0.357129250147538490, -0.357082546952333160, -0.357035842864421420, -0.356989137883919730, -0.356942432010945550, -0.356895725245615300, -0.356849017588045770, -0.356802309038353250, +-0.356755599596655370, -0.356708889263068480, -0.356662178037709390, -0.356615465920694430, -0.356568752912141240, -0.356522039012166170, -0.356475324220885570, -0.356428608538417070, +-0.356381891964877070, -0.356335174500382320, -0.356288456145049230, -0.356241736898995410, -0.356195016762337280, -0.356148295735191580, -0.356101573817674710, -0.356054851009904310, +-0.356008127311996820, -0.355961402724069010, -0.355914677246237270, -0.355867950878619220, -0.355821223621331340, -0.355774495474490420, -0.355727766438212800, -0.355681036512616180, +-0.355634305697816950, -0.355587573993931590, -0.355540841401077670, -0.355494107919371690, -0.355447373548930410, -0.355400638289870290, -0.355353902142309000, -0.355307165106362950, +-0.355260427182148950, -0.355213688369783510, -0.355166948669384250, -0.355120208081067650, -0.355073466604950480, -0.355026724241149230, -0.354979980989781620, -0.354933236850964010, +-0.354886491824813350, -0.354839745911446070, -0.354792999110979780, -0.354746251423531000, -0.354699502849216640, -0.354652753388153050, -0.354606003040458030, -0.354559251806247980, +-0.354512499685639420, -0.354465746678749970, -0.354418992785696220, -0.354372238006594950, -0.354325482341562690, -0.354278725790717120, -0.354231968354174700, -0.354185210032052440, +-0.354138450824466710, -0.354091690731535240, -0.354044929753374540, -0.353998167890101520, -0.353951405141832710, -0.353904641508685780, -0.353857876990777250, -0.353811111588223980, +-0.353764345301142590, -0.353717578129650710, -0.353670810073864860, -0.353624041133901610, -0.353577271309878700, -0.353530500601912550, -0.353483729010120210, -0.353436956534618040, +-0.353390183175523950, -0.353343408932954410, -0.353296633807026360, -0.353249857797856280, -0.353203080905562020, -0.353156303130259970, -0.353109524472067230, -0.353062744931100240, +-0.353015964507476800, -0.352969183201313490, -0.352922401012727200, -0.352875617941834470, -0.352828833988753140, -0.352782049153599670, -0.352735263436490700, -0.352688476837544010, +-0.352641689356876120, -0.352594900994604000, -0.352548111750844160, -0.352501321625714510, -0.352454530619331570, -0.352407738731812250, -0.352360945963273220, -0.352314152313832230, +-0.352267357783605850, -0.352220562372711040, -0.352173766081264440, -0.352126968909383890, -0.352080170857185850, -0.352033371924787400, -0.351986572112305110, -0.351939771419856830, +-0.351892969847559080, -0.351846167395528930, -0.351799364063882900, -0.351752559852738960, -0.351705754762213550, -0.351658948792423380, -0.351612141943486220, -0.351565334215518720, +-0.351518525608637890, -0.351471716122960350, -0.351424905758603910, -0.351378094515685190, -0.351331282394321260, -0.351284469394628710, -0.351237655516725370, -0.351190840760727930, +-0.351144025126753360, -0.351097208614918330, -0.351050391225340710, -0.351003572958137060, -0.350956753813424500, -0.350909933791319680, -0.350863112891940390, -0.350816291115403360, +-0.350769468461825160, -0.350722644931323710, -0.350675820524015640, -0.350628995240018000, -0.350582169079447500, -0.350535342042421980, -0.350488514129058070, -0.350441685339472950, +-0.350394855673783150, -0.350348025132106610, -0.350301193714560030, -0.350254361421260480, -0.350207528252324600, -0.350160694207870330, -0.350113859288014310, -0.350067023492873610, +-0.350020186822564970, -0.349973349277206250, -0.349926510856914170, -0.349879671561805440, -0.349832831391997890, -0.349785990347608320, -0.349739148428753750, -0.349692305635550870, +-0.349645461968117630, -0.349598617426570780, -0.349551772011027380, -0.349504925721604130, -0.349458078558418930, -0.349411230521588620, -0.349364381611230180, -0.349317531827460390, +-0.349270681170397170, -0.349223829640157250, -0.349176977236857760, -0.349130123960615430, -0.349083269811548190, -0.349036414789772760, -0.348989558895405890, -0.348942702128565540, +-0.348895844489368450, -0.348848985977931740, -0.348802126594372150, -0.348755266338807660, -0.348708405211354990, -0.348661543212131280, -0.348614680341253370, -0.348567816598839120, +-0.348520951985005320, -0.348474086499869160, -0.348427220143547380, -0.348380352916157990, -0.348333484817817670, -0.348286615848643680, -0.348239746008752680, -0.348192875298262760, +-0.348146003717290650, -0.348099131265953540, -0.348052257944368170, -0.348005383752652610, -0.347958508690923540, -0.347911632759297820, -0.347864755957893400, -0.347817878286827140, +-0.347770999746216170, -0.347724120336177220, -0.347677240056828430, -0.347630358908286590, -0.347583476890668760, -0.347536594004091870, -0.347489710248673920, -0.347442825624531710, +-0.347395940131782380, -0.347349053770542810, -0.347302166540931050, -0.347255278443063860, -0.347208389477058450, -0.347161499643031670, -0.347114608941101580, -0.347067717371384920, +-0.347020824933998550, -0.346973931629060540, -0.346927037456687740, -0.346880142416997330, -0.346833246510106110, -0.346786349736132260, -0.346739452095192470, -0.346692553587404080, +-0.346645654212883900, -0.346598753971750000, -0.346551852864119160, -0.346504950890108740, -0.346458048049835540, -0.346411144343417580, -0.346364239770971800, -0.346317334332615410, +-0.346270428028465300, -0.346223520858639500, -0.346176612823254900, -0.346129703922428370, -0.346082794156277960, -0.346035883524920600, -0.345988972028473510, -0.345942059667053600, +-0.345895146440778960, -0.345848232349766420, -0.345801317394133280, -0.345754401573996510, -0.345707484889474060, -0.345660567340682960, -0.345613648927740440, -0.345566729650763350, +-0.345519809509869880, -0.345472888505176880, -0.345425966636801640, -0.345379043904861130, -0.345332120309473360, -0.345285195850755290, -0.345238270528824280, -0.345191344343797110, +-0.345144417295792040, -0.345097489384925960, -0.345050560611315670, -0.345003630975079410, -0.344956700476334090, -0.344909769115197050, -0.344862836891785150, -0.344815903806216520, +-0.344768969858608220, -0.344722035049077450, -0.344675099377741160, -0.344628162844717530, -0.344581225450123540, -0.344534287194076470, -0.344487348076693230, -0.344440408098092070, +-0.344393467258389870, -0.344346525557704060, -0.344299582996151430, -0.344252639573850330, -0.344205695290917600, -0.344158750147470220, -0.344111804143626410, -0.344064857279503030, +-0.344017909555217550, -0.343970960970886860, -0.343924011526629210, -0.343877061222561510, -0.343830110058801150, -0.343783158035465160, -0.343736205152671610, -0.343689251410537580, +-0.343642296809180460, -0.343595341348717110, -0.343548385029265880, -0.343501427850943670, -0.343454469813867850, -0.343407510918155520, -0.343360551163924780, -0.343313590551292620, +-0.343266629080376140, -0.343219666751293510, -0.343172703564161630, -0.343125739519098080, -0.343078774616219720, -0.343031808855644830, -0.342984842237490430, -0.342937874761873930, +-0.342890906428912350, -0.342843937238723860, -0.342796967191425610, -0.342749996287134870, -0.342703024525968740, -0.342656051908045490, -0.342609078433482090, -0.342562104102396010, +-0.342515128914904270, -0.342468152871125090, -0.342421175971175500, -0.342374198215172620, -0.342327219603234590, -0.342280240135478590, -0.342233259812021960, -0.342186278632981730, +-0.342139296598476250, -0.342092313708622530, -0.342045329963538040, -0.341998345363339780, -0.341951359908146070, -0.341904373598073960, -0.341857386433240930, -0.341810398413764040, +-0.341763409539761530, -0.341716419811350540, -0.341669429228648460, -0.341622437791772370, -0.341575445500840680, -0.341528452355970290, -0.341481458357278830, -0.341434463504883270, +-0.341387467798902000, -0.341340471239452050, -0.341293473826650540, -0.341246475560615710, -0.341199476441464700, -0.341152476469315010, -0.341105475644283730, -0.341058473966489140, +-0.341011471436048370, -0.340964468053078950, -0.340917463817697940, -0.340870458730023640, -0.340823452790173230, -0.340776445998264180, -0.340729438354413610, -0.340682429858739870, +-0.340635420511360030, -0.340588410312391680, -0.340541399261951820, -0.340494387360158910, -0.340447374607130040, -0.340400361002982320, -0.340353346547834110, -0.340306331241802540, +-0.340259315085005120, -0.340212298077559040, -0.340165280219582590, -0.340118261511192950, -0.340071241952507650, -0.340024221543643870, -0.339977200284719890, -0.339930178175852970, +-0.339883155217160560, -0.339836131408759850, -0.339789106750769230, -0.339742081243305850, -0.339695054886487270, -0.339648027680430680, -0.339600999625254360, -0.339553970721075570, +-0.339506940968011480, -0.339459910366180400, -0.339412878915699550, -0.339365846616686510, -0.339318813469258460, -0.339271779473533760, -0.339224744629629590, -0.339177708937663640, +-0.339130672397752910, -0.339083635010015980, -0.339036596774569930, -0.338989557691532440, -0.338942517761020580, -0.338895476983152870, -0.338848435358046430, -0.338801392885818950, +-0.338754349566587560, -0.338707305400470730, -0.338660260387585570, -0.338613214528049820, -0.338566167821980570, -0.338519120269496380, -0.338472071870714320, -0.338425022625751750, +-0.338377972534726960, -0.338330921597757290, -0.338283869814960280, -0.338236817186453210, -0.338189763712354490, -0.338142709392781350, -0.338095654227851480, -0.338048598217682020, +-0.338001541362391470, -0.337954483662097130, -0.337907425116916520, -0.337860365726966980, -0.337813305492366880, -0.337766244413233550, -0.337719182489684630, -0.337672119721837300, +-0.337625056109810140, -0.337577991653720270, -0.337530926353685030, -0.337483860209822910, -0.337436793222251170, -0.337389725391087360, -0.337342656716448920, -0.337295587198454150, +-0.337248516837220510, -0.337201445632865530, -0.337154373585506480, -0.337107300695261960, -0.337060226962249190, -0.337013152386585860, -0.336966076968389210, -0.336919000707777800, +-0.336871923604868890, -0.336824845659780160, -0.336777766872628890, -0.336730687243533670, -0.336683606772611670, -0.336636525459980240, -0.336589443305757960, -0.336542360310062020, +-0.336495276473010250, -0.336448191794719800, -0.336401106275309340, -0.336354019914896050, -0.336306932713597790, -0.336259844671531750, -0.336212755788816490, -0.336165666065569360, +-0.336118575501908050, -0.336071484097949900, -0.336024391853813440, -0.335977298769616020, -0.335930204845475370, -0.335883110081508730, -0.335836014477834790, -0.335788918034570780, +-0.335741820751834120, -0.335694722629743260, -0.335647623668415610, -0.335600523867968900, -0.335553423228520440, -0.335506321750188910, -0.335459219433091540, -0.335412116277346070, +-0.335365012283069970, -0.335317907450381700, -0.335270801779398660, -0.335223695270238650, -0.335176587923018960, -0.335129479737858280, -0.335082370714873850, -0.335035260854183500, +-0.334988150155904550, -0.334941038620155670, -0.334893926247054220, -0.334846813036717930, -0.334799698989264150, -0.334752584104811570, -0.334705468383477530, -0.334658351825379450, +-0.334611234430635840, -0.334564116199364160, -0.334516997131682200, -0.334469877227707320, -0.334422756487558200, -0.334375634911352190, -0.334328512499207030, -0.334281389251240240, +-0.334234265167570320, -0.334187140248314810, -0.334140014493591430, -0.334092887903517600, -0.334045760478211940, -0.333998632217791860, -0.333951503122375260, -0.333904373192079440, +-0.333857242427023140, -0.333810110827323700, -0.333762978393098600, -0.333715845124466450, -0.333668711021544660, -0.333621576084451140, -0.333574440313303240, -0.333527303708219700, +-0.333480166269317870, -0.333433027996715590, -0.333385888890530340, -0.333338748950880780, -0.333291608177884390, -0.333244466571658960, -0.333197324132321950, -0.333150180859992040, +-0.333103036754786640, -0.333055891816823710, -0.333008746046220610, -0.332961599443096060, -0.332914452007567530, -0.332867303739752430, -0.332820154639769440, -0.332773004707736130, +-0.332725853943770300, -0.332678702347989410, -0.332631549920512190, -0.332584396661456120, -0.332537242570938970, -0.332490087649078390, -0.332442931895992940, -0.332395775311800200, +-0.332348617896618010, -0.332301459650563900, -0.332254300573756490, -0.332207140666313410, -0.332159979928352390, -0.332112818359991070, -0.332065655961348070, -0.332018492732540970, +-0.331971328673687620, -0.331924163784905520, -0.331876998066313430, -0.331829831518028860, -0.331782664140169270, -0.331735495932853510, -0.331688326896198930, -0.331641157030323540, +-0.331593986335344870, -0.331546814811381650, -0.331499642458551400, -0.331452469276972030, -0.331405295266761050, -0.331358120428037250, -0.331310944760918210, -0.331263768265521730, +-0.331216590941965480, -0.331169412790368100, -0.331122233810847270, -0.331075054003520770, -0.331027873368506310, -0.330980691905922500, -0.330933509615887020, -0.330886326498517290, +-0.330839142553932210, -0.330791957782249240, -0.330744772183586390, -0.330697585758061240, -0.330650398505792480, -0.330603210426897720, -0.330556021521494990, -0.330508831789701750, +-0.330461641231636850, -0.330414449847417860, -0.330367257637162740, -0.330320064600989060, -0.330272870739015620, -0.330225676051360000, -0.330178480538140200, -0.330131284199473800, +-0.330084087035479590, -0.330036889046275150, -0.329989690231978110, -0.329942490592707250, -0.329895290128580150, -0.329848088839714840, -0.329800886726228870, -0.329753683788241100, +-0.329706480025869110, -0.329659275439230960, -0.329612070028444170, -0.329564863793627650, -0.329517656734898970, -0.329470448852376090, -0.329423240146176740, -0.329376030616419680, +-0.329328820263222520, -0.329281609086703340, -0.329234397086979710, -0.329187184264170540, -0.329139970618393400, -0.329092756149765850, -0.329045540858406930, -0.328998324744434080, +-0.328951107807965440, -0.328903890049118630, -0.328856671468012450, -0.328809452064764640, -0.328762231839493210, -0.328715010792315800, -0.328667788923351250, -0.328620566232717180, +-0.328573342720531790, -0.328526118386912540, -0.328478893231978490, -0.328431667255847160, -0.328384440458636680, -0.328337212840464630, -0.328289984401450020, -0.328242755141710420, +-0.328195525061363960, -0.328148294160528260, -0.328101062439322240, -0.328053829897863580, -0.328006596536269900, -0.327959362354660170, -0.327912127353152010, -0.327864891531863540, +-0.327817654890912470, -0.327770417430417630, -0.327723179150496760, -0.327675940051267930, -0.327628700132848840, -0.327581459395358430, -0.327534217838914340, -0.327486975463634760, +-0.327439732269637240, -0.327392488257040870, -0.327345243425963270, -0.327297997776522580, -0.327250751308836460, -0.327203504023023840, -0.327156255919202500, -0.327109006997490130, +-0.327061757258005630, -0.327014506700866740, -0.326967255326191530, -0.326920003134097860, -0.326872750124704510, -0.326825496298129350, -0.326778241654490430, -0.326730986193905500, +-0.326683729916493470, -0.326636472822372180, -0.326589214911659650, -0.326541956184473740, -0.326494696640933280, -0.326447436281156130, -0.326400175105260370, -0.326352913113363790, +-0.326305650305585280, -0.326258386682042660, -0.326211122242853700, -0.326163856988137320, -0.326116590918011320, -0.326069324032593810, -0.326022056332002600, -0.325974787816356640, +-0.325927518485773730, -0.325880248340371990, -0.325832977380269280, -0.325785705605584510, -0.325738433016435460, -0.325691159612940320, -0.325643885395216880, -0.325596610363384160, +-0.325549334517559910, -0.325502057857862290, -0.325454780384409170, -0.325407502097319450, -0.325360222996711020, -0.325312943082702030, -0.325265662355410210, -0.325218380814954740, +-0.325171098461453260, -0.325123815295023600, -0.325076531315784840, -0.325029246523854790, -0.324981960919351610, -0.324934674502393050, -0.324887387273098290, -0.324840099231585020, +-0.324792810377971530, -0.324745520712375610, -0.324698230234916290, -0.324650938945711340, -0.324603646844879130, -0.324556353932537340, -0.324509060208805100, -0.324461765673800200, +-0.324414470327640870, -0.324367174170444970, -0.324319877202331520, -0.324272579423418420, -0.324225280833823400, -0.324177981433665660, -0.324130681223062930, -0.324083380202133510, +-0.324036078370995180, -0.323988775729767140, -0.323941472278567120, -0.323894168017513420, -0.323846862946723880, -0.323799557066317630, -0.323752250376412480, -0.323704942877126700, +-0.323657634568578100, -0.323610325450885860, -0.323563015524167830, -0.323515704788542250, -0.323468393244127020, -0.323421080891041160, -0.323373767729402630, -0.323326453759329280, +-0.323279138980940180, -0.323231823394353250, -0.323184506999686760, -0.323137189797058580, -0.323089871786587880, -0.323042552968392460, -0.322995233342590670, -0.322947912909300360, +-0.322900591668640710, -0.322853269620729580, -0.322805946765685250, -0.322758623103625690, -0.322711298634669960, -0.322663973358935980, -0.322616647276542050, -0.322569320387606110, +-0.322521992692247240, -0.322474664190583460, -0.322427334882732560, -0.322380004768813730, -0.322332673848944930, -0.322285342123244390, -0.322238009591830130, -0.322190676254821230, +-0.322143342112335640, -0.322096007164491720, -0.322048671411407360, -0.322001334853201760, -0.321953997489992760, -0.321906659321898820, -0.321859320349037800, -0.321811980571528880, +-0.321764639989490010, -0.321717298603039550, -0.321669956412295450, -0.321622613417376860, -0.321575269618401720, -0.321527925015488440, -0.321480579608754870, -0.321433233398320310, +-0.321385886384302650, -0.321338538566819880, -0.321291189945991150, -0.321243840521934500, -0.321196490294768210, -0.321149139264610250, -0.321101787431579910, -0.321054434795795100, +-0.321007081357374160, -0.320959727116435110, -0.320912372073097200, -0.320865016227478320, -0.320817659579696930, -0.320770302129870950, -0.320722943878119670, -0.320675584824560990, +-0.320628224969313370, -0.320580864312494720, -0.320533502854224380, -0.320486140594620270, -0.320438777533800400, -0.320391413671884010, -0.320344049008989050, -0.320296683545234000, +-0.320249317280736800, -0.320201950215616700, -0.320154582349991780, -0.320107213683980370, -0.320059844217700560, -0.320012473951271530, -0.319965102884811280, -0.319917731018438290, +-0.319870358352270570, -0.319822984886427350, -0.319775610621026720, -0.319728235556187010, -0.319680859692026310, -0.319633483028663900, -0.319586105566217750, -0.319538727304805930, +-0.319491348244547720, -0.319443968385561110, -0.319396587727964590, -0.319349206271876180, -0.319301824017415190, -0.319254440964699630, -0.319207057113848000, -0.319159672464978280, +-0.319112287018209760, -0.319064900773660560, -0.319017513731449150, -0.318970125891693490, -0.318922737254512920, -0.318875347820025520, -0.318827957588349810, -0.318780566559603680, +-0.318733174733906610, -0.318685782111376600, -0.318638388692132180, -0.318590994476291300, -0.318543599463973370, -0.318496203655296460, -0.318448807050378590, -0.318401409649339160, +-0.318354011452296190, -0.318306612459368200, -0.318259212670673250, -0.318211812086330700, -0.318164410706458620, -0.318117008531175470, -0.318069605560599430, -0.318022201794849800, +-0.317974797234044650, -0.317927391878302490, -0.317879985727741400, -0.317832578782480830, -0.317785171042638810, -0.317737762508333800, -0.317690353179684030, -0.317642943056808790, +-0.317595532139826160, -0.317548120428854270, -0.317500707924012530, -0.317453294625419050, -0.317405880533192300, -0.317358465647450410, -0.317311049968312770, -0.317263633495897530, +-0.317216216230323260, -0.317168798171707960, -0.317121379320171090, -0.317073959675830800, -0.317026539238805580, -0.316979118009213580, -0.316931695987174240, -0.316884273172805650, +-0.316836849566226380, -0.316789425167554590, -0.316741999976909610, -0.316694573994409640, -0.316647147220172840, -0.316599719654318600, -0.316552291296964990, -0.316504862148230700, +-0.316457432208233860, -0.316410001477093860, -0.316362569954928790, -0.316315137641857370, -0.316267704537997630, -0.316220270643469080, -0.316172835958389850, -0.316125400482878520, +-0.316077964217053250, -0.316030527161033530, -0.315983089314937520, -0.315935650678883740, -0.315888211252990380, -0.315840771037376960, -0.315793330032161590, -0.315745888237462520, +-0.315698445653399110, -0.315651002280089580, -0.315603558117652560, -0.315556113166206240, -0.315508667425870030, -0.315461220896762150, -0.315413773579001240, -0.315366325472705430, +-0.315318876577994290, -0.315271426894985940, -0.315223976423799010, -0.315176525164551690, -0.315129073117363550, -0.315081620282352650, -0.315034166659637740, -0.314986712249337000, +-0.314939257051569890, -0.314891801066454650, -0.314844344294109900, -0.314796886734653840, -0.314749428388206020, -0.314701969254884640, -0.314654509334807870, -0.314607048628095300, +-0.314559587134865040, -0.314512124855235890, -0.314464661789325920, -0.314417197937254810, -0.314369733299140640, -0.314322267875102150, -0.314274801665257560, -0.314227334669726410, +-0.314179866888626920, -0.314132398322077790, -0.314084928970197190, -0.314037458833104740, -0.313989987910918590, -0.313942516203757520, -0.313895043711739710, -0.313847570434984680, +-0.313800096373610780, -0.313752621527736200, -0.313705145897480500, -0.313657669482961920, -0.313610192284299150, -0.313562714301610480, -0.313515235535015480, -0.313467755984632390, +-0.313420275650579890, -0.313372794532976280, -0.313325312631941080, -0.313277829947592680, -0.313230346480049600, -0.313182862229430310, -0.313135377195854270, -0.313087891379439760, +-0.313040404780305540, -0.312992917398569880, -0.312945429234352370, -0.312897940287771290, -0.312850450558944890, -0.312802960047992800, -0.312755468755033350, -0.312707976680185180, +-0.312660483823566700, -0.312612990185297370, -0.312565495765495640, -0.312518000564280090, -0.312470504581769170, -0.312423007818082410, -0.312375510273338100, -0.312328011947655030, +-0.312280512841151490, -0.312233012953947120, -0.312185512286160200, -0.312138010837909540, -0.312090508609313370, -0.312043005600491360, -0.311995501811561880, -0.311947997242643600, +-0.311900491893854940, -0.311852985765315450, -0.311805478857143490, -0.311757971169457470, -0.311710462702376900, -0.311662953456020130, -0.311615443430506070, -0.311567932625952890, +-0.311520421042480340, -0.311472908680206720, -0.311425395539250860, -0.311377881619731070, -0.311330366921767020, -0.311282851445477020, -0.311235335190979900, -0.311187818158394030, +-0.311140300347839020, -0.311092781759433280, -0.311045262393295610, -0.310997742249544300, -0.310950221328299080, -0.310902699629678310, -0.310855177153800400, -0.310807653900784910, +-0.310760129870750360, -0.310712605063815430, -0.310665079480098580, -0.310617553119719450, -0.310570025982796430, -0.310522498069448370, -0.310474969379793630, -0.310427439913951890, +-0.310379909672041540, -0.310332378654181400, -0.310284846860489900, -0.310237314291086750, -0.310189780946090290, -0.310142246825619360, -0.310094711929792380, -0.310047176258729070, +-0.309999639812547800, -0.309952102591367070, -0.309904564595306460, -0.309857025824484430, -0.309809486279019830, -0.309761945959031120, -0.309714404864637920, -0.309666862995958750, +-0.309619320353112400, -0.309571776936217350, -0.309524232745393260, -0.309476687780758600, -0.309429142042432210, -0.309381595530532570, -0.309334048245179350, -0.309286500186491010, +-0.309238951354586400, -0.309191401749584040, -0.309143851371603550, -0.309096300220763450, -0.309048748297182150, -0.309001195600979440, -0.308953642132273720, -0.308906087891183900, +-0.308858532877828440, -0.308810977092327080, -0.308763420534798270, -0.308715863205360870, -0.308668305104133460, -0.308620746231235640, -0.308573186586786010, -0.308525626170903400, +-0.308478064983706280, -0.308430503025314440, -0.308382940295846340, -0.308335376795420890, -0.308287812524156550, -0.308240247482173100, -0.308192681669589070, -0.308145115086523310, +-0.308097547733094390, -0.308049979609421990, -0.308002410715624620, -0.307954841051820800, -0.307907270618130340, -0.307859699414671670, -0.307812127441563780, -0.307764554698925110, +-0.307716981186875460, -0.307669406905533400, -0.307621831855017850, -0.307574256035447250, -0.307526679446941450, -0.307479102089618930, -0.307431523963598690, -0.307383945068999190, +-0.307336365405940280, -0.307288784974540430, -0.307241203774918650, -0.307193621807193400, -0.307146039071484520, -0.307098455567910540, -0.307050871296590030, -0.307003286257642730, +-0.306955700451187250, -0.306908113877342510, -0.306860526536227030, -0.306812938427960700, -0.306765349552661990, -0.306717759910449920, -0.306670169501443050, -0.306622578325761120, +-0.306574986383522820, -0.306527393674846990, -0.306479800199852270, -0.306432205958658500, -0.306384610951384200, -0.306337015178148380, -0.306289418639069560, -0.306241821334267640, +-0.306194223263861200, -0.306146624427968750, -0.306099024826710140, -0.306051424460204000, -0.306003823328569290, -0.305956221431924640, -0.305908618770389770, -0.305861015344083440, +-0.305813411153124490, -0.305765806197631660, -0.305718200477724690, -0.305670593993522250, -0.305622986745143320, -0.305575378732706520, -0.305527769956331630, -0.305480160416137400, +-0.305432550112242680, -0.305384939044766210, -0.305337327213827840, -0.305289714619546130, -0.305242101262040100, -0.305194487141428440, -0.305146872257830990, -0.305099256611366330, +-0.305051640202153080, -0.305004023030311210, -0.304956405095959280, -0.304908786399216310, -0.304861166940200930, -0.304813546719033100, -0.304765925735831390, -0.304718303990714870, +-0.304670681483802160, -0.304623058215213180, -0.304575434185066500, -0.304527809393481290, -0.304480183840576120, -0.304432557526470910, -0.304384930451284340, -0.304337302615135420, +-0.304289674018142780, -0.304242044660426430, -0.304194414542104940, -0.304146783663297000, -0.304099152024122580, -0.304051519624700230, -0.304003886465149030, -0.303956252545587780, +-0.303908617866136270, -0.303860982426913230, -0.303813346228037740, -0.303765709269628430, -0.303718071551805300, -0.303670433074687000, -0.303622793838392580, -0.303575153843040790, +-0.303527513088751530, -0.303479871575643490, -0.303432229303835730, -0.303384586273447000, -0.303336942484597250, -0.303289297937405110, -0.303241652631989320, -0.303194006568469840, +-0.303146359746965300, -0.303098712167594870, -0.303051063830477310, -0.303003414735732450, -0.302955764883479030, -0.302908114273836240, -0.302860462906922700, -0.302812810782858490, +-0.302765157901762230, -0.302717504263753050, -0.302669849868949680, -0.302622194717472150, -0.302574538809439080, -0.302526882144969700, -0.302479224724182700, -0.302431566547198050, +-0.302383907614134470, -0.302336247925111160, -0.302288587480246780, -0.302240926279661310, -0.302193264323473600, -0.302145601611802260, -0.302097938144767380, -0.302050273922487620, +-0.302002608945082180, -0.301954943212669800, -0.301907276725370490, -0.301859609483302980, -0.301811941486586470, -0.301764272735339620, -0.301716603229682580, -0.301668932969734020, +-0.301621261955613120, -0.301573590187438620, -0.301525917665330550, -0.301478244389407730, -0.301430570359789320, -0.301382895576594030, -0.301335220039941900, -0.301287543749951760, +-0.301239866706742300, -0.301192188910433640, -0.301144510361144480, -0.301096831058994040, -0.301049151004101120, -0.301001470196585740, -0.300953788636566690, -0.300906106324163150, +-0.300858423259493910, -0.300810739442679050, -0.300763054873837370, -0.300715369553088030, -0.300667683480549840, -0.300619996656342870, -0.300572309080585910, -0.300524620753398140, +-0.300476931674898470, -0.300429241845206860, -0.300381551264442100, -0.300333859932723100, -0.300286167850169870, -0.300238475016901150, -0.300190781433036350, -0.300143087098694080, +-0.300095392013994540, -0.300047696179056580, -0.299999999593999310, -0.299952302258941650, -0.299904604174003660, -0.299856905339304150, -0.299809205754962340, -0.299761505421097140, +-0.299713804337828570, -0.299666102505275530, -0.299618399923557210, -0.299570696592792450, -0.299522992513101380, -0.299475287684602850, -0.299427582107415660, -0.299379875781659980, +-0.299332168707454550, -0.299284460884918720, -0.299236752314171350, -0.299189042995332440, -0.299141332928521020, -0.299093622113856210, -0.299045910551456910, -0.298998198241443300, +-0.298950485183934190, -0.298902771379048800, -0.298855056826906160, -0.298807341527626220, -0.298759625481327950, -0.298711908688130630, -0.298664191148153120, -0.298616472861515550, +-0.298568753828336810, -0.298521034048736140, -0.298473313522832520, -0.298425592250746000, -0.298377870232595490, -0.298330147468499900, -0.298282423958579400, -0.298234699702952800, +-0.298186974701739440, -0.298139248955058220, -0.298091522463029330, -0.298043795225771620, -0.297996067243404440, -0.297948338516046630, -0.297900609043818430, -0.297852878826838700, +-0.297805147865226770, -0.297757416159101560, -0.297709683708583190, -0.297661950513790690, -0.297614216574843220, -0.297566481891859860, -0.297518746464960680, -0.297471010294264650, +-0.297423273379890660, -0.297375535721958910, -0.297327797320588340, -0.297280058175898250, -0.297232318288007610, -0.297184577657036600, -0.297136836283104110, -0.297089094166329560, +-0.297041351306831850, -0.296993607704731210, -0.296945863360146500, -0.296898118273197180, -0.296850372444002090, -0.296802625872681520, -0.296754878559354400, -0.296707130504140050, +-0.296659381707157500, -0.296611632168526870, -0.296563881888367190, -0.296516130866797340, -0.296468379103937640, -0.296420626599906980, -0.296372873354824710, -0.296325119368809900, +-0.296277364641982680, -0.296229609174462060, -0.296181852966367400, -0.296134096017817650, -0.296086338328933160, -0.296038579899832790, -0.295990820730635980, -0.295943060821461660, +-0.295895300172430150, -0.295847538783660380, -0.295799776655271740, -0.295752013787383250, -0.295704250180115150, -0.295656485833586450, -0.295608720747916500, -0.295560954923224370, +-0.295513188359630200, -0.295465421057253150, -0.295417653016212030, -0.295369884236627240, -0.295322114718617800, -0.295274344462303000, -0.295226573467801960, -0.295178801735234860, +-0.295131029264720790, -0.295083256056379140, -0.295035482110328930, -0.294987707426690450, -0.294939932005582660, -0.294892155847125080, -0.294844378951436670, -0.294796601318637720, +-0.294748822948847300, -0.294701043842184820, -0.294653263998769290, -0.294605483418721060, -0.294557702102159090, -0.294509920049202400, -0.294462137259971390, -0.294414353734585020, +-0.294366569473162810, -0.294318784475823710, -0.294270998742688080, -0.294223212273874930, -0.294175425069503780, -0.294127637129693640, -0.294079848454564810, -0.294032059044236350, +-0.293984268898827780, -0.293936478018458070, -0.293888686403247670, -0.293840894053315480, -0.293793100968781080, -0.293745307149763490, -0.293697512596383050, -0.293649717308758880, +-0.293601921287009960, -0.293554124531256620, -0.293506327041618050, -0.293458528818213600, -0.293410729861162460, -0.293362930170584850, -0.293315129746599960, -0.293267328589327250, +-0.293219526698885740, -0.293171724075395880, -0.293123920718976750, -0.293076116629747750, -0.293028311807828070, -0.292980506253337990, -0.292932699966396700, -0.292884892947123670, +-0.292837085195637950, -0.292789276712059900, -0.292741467496508700, -0.292693657549103430, -0.292645846869964420, -0.292598035459210810, -0.292550223316962070, -0.292502410443337360, +-0.292454596838457090, -0.292406782502440290, -0.292358967435406570, -0.292311151637474950, -0.292263335108765900, -0.292215517849398530, -0.292167699859492370, -0.292119881139166480, +-0.292072061688541380, -0.292024241507736090, -0.291976420596870180, -0.291928598956062820, -0.291880776585434430, -0.291832953485104020, -0.291785129655191270, -0.291737305095815250, +-0.291689479807096420, -0.291641653789153850, -0.291593827042106790, -0.291545999566075520, -0.291498171361179280, -0.291450342427537590, -0.291402512765269630, -0.291354682374495800, +-0.291306851255335290, -0.291259019407907660, -0.291211186832332050, -0.291163353528728910, -0.291115519497217310, -0.291067684737917000, -0.291019849250947040, -0.290972013036427830, +-0.290924176094478630, -0.290876338425218980, -0.290828500028768030, -0.290780660905246290, -0.290732821054772880, -0.290684980477467050, -0.290637139173449130, -0.290589297142838380, +-0.290541454385754410, -0.290493610902316350, -0.290445766692644660, -0.290397921756858580, -0.290350076095077740, -0.290302229707421260, -0.290254382594009600, -0.290206534754962000, +-0.290158686190398090, -0.290110836900436990, -0.290062986885199270, -0.290015136144804060, -0.289967284679371000, -0.289919432489019300, -0.289871579573869440, -0.289823725934040650, +-0.289775871569652120, -0.289728016480824360, -0.289680160667676550, -0.289632304130328310, -0.289584446868898890, -0.289536588883508810, -0.289488730174277230, -0.289440870741323850, +-0.289393010584767800, -0.289345149704729740, -0.289297288101328760, -0.289249425774684540, -0.289201562724916370, -0.289153698952144710, -0.289105834456488800, -0.289057969238068260, +-0.289010103297002440, -0.288962236633411750, -0.288914369247415480, -0.288866501139133260, -0.288818632308684380, -0.288770762756189350, -0.288722892481767410, -0.288675021485537810, +-0.288627149767621110, -0.288579277328136540, -0.288531404167203740, -0.288483530284942000, -0.288435655681471890, -0.288387780356912590, -0.288339904311383900, -0.288292027545004990, +-0.288244150057896440, -0.288196271850177540, -0.288148392921967920, -0.288100513273386930, -0.288052632904555070, -0.288004751815591600, -0.287956870006616290, -0.287908987477748350, +-0.287861104229108380, -0.287813220260815680, -0.287765335572989440, -0.287717450165750340, -0.287669564039217620, -0.287621677193510950, -0.287573789628749690, -0.287525901345054350, +-0.287478012342544280, -0.287430122621339160, -0.287382232181558340, -0.287334341023322340, -0.287286449146750500, -0.287238556551962560, -0.287190663239077770, -0.287142769208216740, +-0.287094874459498830, -0.287046978993043660, -0.286999082808970680, -0.286951185907400430, -0.286903288288452190, -0.286855389952245300, -0.286807490898900340, -0.286759591128536660, +-0.286711690641274000, -0.286663789437231750, -0.286615887516530390, -0.286567984879289310, -0.286520081525628300, -0.286472177455666670, -0.286424272669524970, -0.286376367167322620, +-0.286328460949179350, -0.286280554015214520, -0.286232646365548680, -0.286184738000301250, -0.286136828919592020, -0.286088919123540230, -0.286041008612266610, -0.285993097385890460, +-0.285945185444531120, -0.285897272788309230, -0.285849359417344180, -0.285801445331755780, -0.285753530531663300, -0.285705615017187390, -0.285657698788447490, -0.285609781845563290, +-0.285561864188654260, -0.285513945817840950, -0.285466026733242840, -0.285418106934979600, -0.285370186423170690, -0.285322265197936740, -0.285274343259397160, -0.285226420607671670, +-0.285178497242879690, -0.285130573165141950, -0.285082648374577750, -0.285034722871306930, -0.284986796655448900, -0.284938869727124290, -0.284890942086452490, -0.284843013733552920, +-0.284795084668546250, -0.284747154891551830, -0.284699224402689580, -0.284651293202078830, -0.284603361289840210, -0.284555428666093240, -0.284507495330957700, -0.284459561284553020, +-0.284411626526999810, -0.284363691058417580, -0.284315754878926070, -0.284267817988644760, -0.284219880387694360, -0.284171942076194230, -0.284124003054264270, -0.284076063322023900, +-0.284028122879593730, -0.283980181727093330, -0.283932239864642000, -0.283884297292360480, -0.283836354010368270, -0.283788410018785130, -0.283740465317730560, -0.283692519907325250, +-0.283644573787688650, -0.283596626958940610, -0.283548679421200540, -0.283500731174589240, -0.283452782219226100, -0.283404832555231020, -0.283356882182723420, -0.283308931101824040, +-0.283260979312652320, -0.283213026815328170, -0.283165073609971010, -0.283117119696701610, -0.283069165075639400, -0.283021209746903870, -0.282973253710615710, -0.282925296966894450, +-0.282877339515859920, -0.282829381357631640, -0.282781422492330290, -0.282733462920075450, -0.282685502640986910, -0.282637541655184180, -0.282589579962788050, -0.282541617563917940, +-0.282493654458693790, -0.282445690647235070, -0.282397726129662570, -0.282349760906095760, -0.282301794976654590, -0.282253828341458400, -0.282205861000628170, -0.282157892954283230, +-0.282109924202543550, -0.282061954745528640, -0.282013984583359300, -0.281966013716154980, -0.281918042144035210, -0.281870069867120760, -0.281822096885531110, -0.281774123199386270, +-0.281726148808805640, -0.281678173713910070, -0.281630197914819080, -0.281582221411652620, -0.281534244204530160, -0.281486266293572480, -0.281438287678899170, -0.281390308360630170, +-0.281342328338884950, -0.281294347613784300, -0.281246366185447790, -0.281198384053995390, -0.281150401219546600, -0.281102417682222220, -0.281054433442141820, -0.281006448499424910, +-0.280958462854192290, -0.280910476506563530, -0.280862489456658540, -0.280814501704596930, -0.280766513250499450, -0.280718524094485720, -0.280670534236675710, -0.280622543677188920, +-0.280574552416146210, -0.280526560453667080, -0.280478567789871570, -0.280430574424879180, -0.280382580358810810, -0.280334585591785980, -0.280286590123924710, -0.280238593955346560, +-0.280190597086172280, -0.280142599516521540, -0.280094601246513920, -0.280046602276270150, -0.279998602605909920, -0.279950602235553180, -0.279902601165319450, -0.279854599395329700, +-0.279806596925703480, -0.279758593756560700, -0.279710589888021060, -0.279662585320205330, -0.279614580053233200, -0.279566574087224570, -0.279518567422299080, -0.279470560058577620, +-0.279422551996179710, -0.279374543235225480, -0.279326533775834440, -0.279278523618127490, -0.279230512762224210, -0.279182501208244280, -0.279134488956308490, -0.279086476006536470, +-0.279038462359048280, -0.278990448013963500, -0.278942432971403030, -0.278894417231486450, -0.278846400794333870, -0.278798383660064820, -0.278750365828800250, -0.278702347300659790, +-0.278654328075763400, -0.278606308154230820, -0.278558287536182890, -0.278510266221739240, -0.278462244211019890, -0.278414221504144580, -0.278366198101234090, -0.278318174002408100, +-0.278270149207786700, -0.278222123717489440, -0.278174097531637350, -0.278126070650350050, -0.278078043073747120, -0.278030014801949440, -0.277981985835076830, -0.277933956173249170, +-0.277885925816586220, -0.277837894765208930, -0.277789863019236860, -0.277741830578790090, -0.277693797443988370, -0.277645763614952580, -0.277597729091802410, -0.277549693874657890, +-0.277501657963638680, -0.277453621358865750, -0.277405584060458840, -0.277357546068537910, -0.277309507383222690, -0.277261468004634140, -0.277213427932891940, -0.277165387168115670, +-0.277117345710426450, -0.277069303559943800, -0.277021260716787950, -0.276973217181078480, -0.276925172952936390, -0.276877128032481380, -0.276829082419833560, -0.276781036115112620, +-0.276732989118439470, -0.276684941429933880, -0.276636893049715950, -0.276588843977905340, -0.276540794214623020, -0.276492743759988780, -0.276444692614122630, -0.276396640777144320, +-0.276348588249174850, -0.276300535030333920, -0.276252481120741190, -0.276204426520517740, -0.276156371229783150, -0.276108315248657700, -0.276060258577261020, -0.276012201215714130, +-0.275964143164136700, -0.275916084422648920, -0.275868024991370530, -0.275819964870422480, -0.275771904059924520, -0.275723842559996820, -0.275675780370759070, -0.275627717492332280, +-0.275579653924836190, -0.275531589668391030, -0.275483524723116380, -0.275435459089133420, -0.275387392766561770, -0.275339325755521670, -0.275291258056132800, -0.275243189668516240, +-0.275195120592791660, -0.275147050829078920, -0.275098980377498910, -0.275050909238171490, -0.275002837411216780, -0.274954764896754580, -0.274906691694905890, -0.274858617805790460, +-0.274810543229528470, -0.274762467966239710, -0.274714392016045190, -0.274666315379064720, -0.274618238055418410, -0.274570160045226110, -0.274522081348608840, -0.274474001965686390, +-0.274425921896578880, -0.274377841141406180, -0.274329759700289330, -0.274281677573348040, -0.274233594760702140, -0.274185511262472650, -0.274137427078779420, -0.274089342209742630, +-0.274041256655482010, -0.273993170416118700, -0.273945083491772490, -0.273896995882563500, -0.273848907588611690, -0.273800818610037970, -0.273752728946962230, -0.273704638599504670, +-0.273656547567785070, -0.273608455851924500, -0.273560363452042820, -0.273512270368260260, -0.273464176600696550, -0.273416082149472880, -0.273367987014708990, -0.273319891196524670, +-0.273271794695041090, -0.273223697510378010, -0.273175599642655640, -0.273127501091993910, -0.273079401858513810, -0.273031301942335210, -0.272983201343578400, -0.272935100062363100, +-0.272886998098810510, -0.272838895453040410, -0.272790792125173100, -0.272742688115328370, -0.272694583423627350, -0.272646478050189880, -0.272598371995136150, -0.272550265258586110, +-0.272502157840660840, -0.272454049741480190, -0.272405940961163940, -0.272357831499833340, -0.272309721357608110, -0.272261610534608570, -0.272213499030954600, -0.272165386846767280, +-0.272117273982166510, -0.272069160437272580, -0.272021046212205300, -0.271972931307085830, -0.271924815722034030, -0.271876699457170190, -0.271828582512614160, -0.271780464888487120, +-0.271732346584908910, -0.271684227601999840, -0.271636107939879800, -0.271587987598669870, -0.271539866578490000, -0.271491744879460480, -0.271443622501701120, -0.271395499445333140, +-0.271347375710476460, -0.271299251297250850, -0.271251126205777630, -0.271203000436176510, -0.271154873988567910, -0.271106746863071730, -0.271058619059809050, -0.271010490578899870, +-0.270962361420464480, -0.270914231584622690, -0.270866101071495780, -0.270817969881203660, -0.270769838013866560, -0.270721705469604450, -0.270673572248538550, -0.270625438350788670, +-0.270577303776475210, -0.270529168525718070, -0.270481032598638430, -0.270432895995356190, -0.270384758715991270, -0.270336620760664950, -0.270288482129497020, -0.270240342822607890, +-0.270192202840117470, -0.270144062182147040, -0.270095920848816400, -0.270047778840245940, -0.269999636156555640, -0.269951492797866620, -0.269903348764298940, -0.269855204055972850, +-0.269807058673008360, -0.269758912615526590, -0.269710765883647560, -0.269662618477491680, -0.269614470397178730, -0.269566321642830060, -0.269518172214565640, -0.269470022112505310, +-0.269421871336770370, -0.269373719887480770, -0.269325567764756800, -0.269277414968718540, -0.269229261499487170, -0.269181107357182650, -0.269132952541925370, -0.269084797053835260, +-0.269036640893033590, -0.268988484059640260, -0.268940326553775810, -0.268892168375560070, -0.268844009525114340, -0.268795850002558620, -0.268747689808013220, -0.268699528941598210, +-0.268651367403434760, -0.268603205193642950, -0.268555042312343120, -0.268506878759655230, -0.268458714535700580, -0.268410549640599130, -0.268362384074470880, -0.268314217837437140, +-0.268266050929617810, -0.268217883351133330, -0.268169715102103800, -0.268121546182650330, -0.268073376592893040, -0.268025206332952290, -0.267977035402948090, -0.267928863803001740, +-0.267880691533233240, -0.267832518593763000, -0.267784344984711040, -0.267736170706198650, -0.267687995758345790, -0.267639820141273020, -0.267591643855100200, -0.267543466899948730, +-0.267495289275938570, -0.267447110983189800, -0.267398932021823690, -0.267350752391960210, -0.267302572093719830, -0.267254391127222660, -0.267206209492589890, -0.267158027189941580, +-0.267109844219398260, -0.267061660581079830, -0.267013476275107740, -0.266965291301601960, -0.266917105660682890, -0.266868919352470700, -0.266820732377086590, -0.266772544734650670, +-0.266724356425283360, -0.266676167449104770, -0.266627977806236200, -0.266579787496797670, -0.266531596520909190, -0.266483404878692210, -0.266435212570266700, -0.266387019595753170, +-0.266338825955271640, -0.266290631648943510, -0.266242436676888740, -0.266194241039227950, -0.266146044736081060, -0.266097847767569510, -0.266049650133813380, -0.266001451834933070, +-0.265953252871048760, -0.265905053242281700, -0.265856852948752000, -0.265808651990580180, -0.265760450367886310, -0.265712248080791750, -0.265664045129416600, -0.265615841513880850, +-0.265567637234305930, -0.265519432290811930, -0.265471226683519360, -0.265423020412548280, -0.265374813478020110, -0.265326605880054860, -0.265278397618773140, -0.265230188694294990, +-0.265181979106741740, -0.265133768856233630, -0.265085557942891010, -0.265037346366834130, -0.264989134128184310, -0.264940921227061640, -0.264892707663586640, -0.264844493437879470, +-0.264796278550061490, -0.264748063000252830, -0.264699846788574000, -0.264651629915145130, -0.264603412380087550, -0.264555194183521520, -0.264506975325567050, -0.264458755806345590, +-0.264410535625977220, -0.264362314784582500, -0.264314093282281560, -0.264265871119195860, -0.264217648295445470, -0.264169424811150910, -0.264121200666432410, -0.264072975861411320, +-0.264024750396207820, -0.263976524270942370, -0.263928297485735260, -0.263880070040707790, -0.263831841935980140, -0.263783613171672930, -0.263735383747906230, -0.263687153664801500, +-0.263638922922478870, -0.263590691521058520, -0.263542459460661900, -0.263494226741409100, -0.263445993363420730, -0.263397759326816970, -0.263349524631719180, -0.263301289278247640, +-0.263253053266522870, -0.263204816596665000, -0.263156579268795540, -0.263108341283034670, -0.263060102639502910, -0.263011863338320440, -0.262963623379608770, -0.262915382763488080, +-0.262867141490078890, -0.262818899559501440, -0.262770656971877130, -0.262722413727326190, -0.262674169825968810, -0.262625925267926390, -0.262577680053319220, -0.262529434182267820, +-0.262481187654892370, -0.262432940471314440, -0.262384692631654150, -0.262336444136032080, -0.262288194984568510, -0.262239945177384860, -0.262191694714601350, -0.262143443596338620, +-0.262095191822716840, -0.262046939393857540, -0.261998686309880880, -0.261950432570907500, -0.261902178177057580, -0.261853923128452680, -0.261805667425212940, -0.261757411067459090, +-0.261709154055311200, -0.261660896388890900, -0.261612638068318360, -0.261564379093713770, -0.261516119465198700, -0.261467859182893340, -0.261419598246918290, -0.261371336657393820, +-0.261323074414441470, -0.261274811518181440, -0.261226547968734350, -0.261178283766220430, -0.261130018910761260, -0.261081753402477080, -0.261033487241488500, -0.260985220427915720, +-0.260936952961880350, -0.260888684843502640, -0.260840416072903150, -0.260792146650202230, -0.260743876575521390, -0.260695605848980830, -0.260647334470700820, -0.260599062440802940, +-0.260550789759407380, -0.260502516426634800, -0.260454242442605570, -0.260405967807441130, -0.260357692521261790, -0.260309416584188210, -0.260261139996340650, -0.260212862757840670, +-0.260164584868808560, -0.260116306329364940, -0.260068027139630180, -0.260019747299725710, -0.259971466809771960, -0.259923185669889480, -0.259874903880198630, -0.259826621440820920, +-0.259778338351876690, -0.259730054613486190, -0.259681770225770990, -0.259633485188851320, -0.259585199502847970, -0.259536913167881190, -0.259488626184072530, -0.259440338551542300, +-0.259392050270411290, -0.259343761340799670, -0.259295471762829080, -0.259247181536619850, -0.259198890662292620, -0.259150599139967740, -0.259102306969766830, -0.259054014151810120, +-0.259005720686218350, -0.258957426573111880, -0.258909131812612270, -0.258860836404839870, -0.258812540349914910, -0.258764243647959020, -0.258715946299092500, -0.258667648303436190, +-0.258619349661110280, -0.258571050372236430, -0.258522750436934960, -0.258474449855326580, -0.258426148627531660, -0.258377846753671810, -0.258329544233867390, -0.258281241068239080, +-0.258232937256907210, -0.258184632799993430, -0.258136327697618070, -0.258088021949901940, -0.258039715556965250, -0.257991408518929770, -0.257943100835915710, -0.257894792508043920, +-0.257846483535434710, -0.257798173918209750, -0.257749863656489330, -0.257701552750393860, -0.257653241200044900, -0.257604929005562810, -0.257556616167068430, -0.257508302684682110, +-0.257459988558525420, -0.257411673788718760, -0.257363358375382930, -0.257315042318638280, -0.257266725618606470, -0.257218408275407820, -0.257170090289163160, -0.257121771659992840, +-0.257073452388018540, -0.257025132473360560, -0.256976811916139800, -0.256928490716476550, -0.256880168874492500, -0.256831846390308040, -0.256783523264043520, -0.256735199495820690, +-0.256686875085759770, -0.256638550033981730, -0.256590224340606850, -0.256541898005756830, -0.256493571029552060, -0.256445243412113390, -0.256396915153561170, -0.256348586254017130, +-0.256300256713601570, -0.256251926532435390, -0.256203595710638940, -0.256155264248333960, -0.256106932145640840, -0.256058599402680330, -0.256010266019572940, -0.255961931996440300, +-0.255913597333402850, -0.255865262030580910, -0.255816926088096310, -0.255768589506069400, -0.255720252284620970, -0.255671914423871490, -0.255623575923942690, -0.255575236784954920, +-0.255526897007029070, -0.255478556590285510, -0.255430215534846070, -0.255381873840831000, -0.255333531508361300, -0.255285188537557330, -0.255236844928540820, -0.255188500681432170, +-0.255140155796352300, -0.255091810273421650, -0.255043464112761850, -0.254995117314493370, -0.254946769878737160, -0.254898421805613560, -0.254850073095244320, -0.254801723747749900, +-0.254753373763250750, -0.254705023141868600, -0.254656671883723930, -0.254608319988937510, -0.254559967457629930, -0.254511614289922810, -0.254463260485936650, -0.254414906045792370, +-0.254366550969610360, -0.254318195257512420, -0.254269838909619020, -0.254221481926050990, -0.254173124306928840, -0.254124766052374330, -0.254076407162507840, -0.254028047637450400, +-0.253979687477322410, -0.253931326682245610, -0.253882965252340440, -0.253834603187727490, -0.253786240488528440, -0.253737877154863790, -0.253689513186854450, -0.253641148584620950, +-0.253592783348284940, -0.253544417477966970, -0.253496050973788020, -0.253447683835868460, -0.253399316064330140, -0.253350947659293500, -0.253302578620879510, -0.253254208949208640, +-0.253205838644402710, -0.253157467706582150, -0.253109096135867910, -0.253060723932380550, -0.253012351096241760, -0.252963977627572110, -0.252915603526492060, -0.252867228793123460, +-0.252818853427586810, -0.252770477430002970, -0.252722100800492570, -0.252673723539177330, -0.252625345646177780, -0.252576967121614810, -0.252528587965609060, -0.252480208178282260, +-0.252431827759754920, -0.252383446710148010, -0.252335065029582030, -0.252286682718178890, -0.252238299776058990, -0.252189916203343360, -0.252141532000152490, -0.252093147166608240, +-0.252044761702831130, -0.251996375608941670, -0.251947988885061700, -0.251899601531311750, -0.251851213547812810, -0.251802824934685370, -0.251754435692051360, -0.251706045820031200, +-0.251657655318745950, -0.251609264188316140, -0.251560872428863600, -0.251512480040508910, -0.251464087023372970, -0.251415693377576410, -0.251367299103241020, -0.251318904200487410, +-0.251270508669436510, -0.251222112510208930, -0.251173715722926520, -0.251125318307709790, -0.251076920264679760, -0.251028521593957000, -0.250980122295663410, -0.250931722369919450, +-0.250883321816845810, -0.250834920636564260, -0.250786518829195390, -0.250738116394860270, -0.250689713333679400, -0.250641309645774690, -0.250592905331266710, -0.250544500390276480, +-0.250496094822924560, -0.250447688629332810, -0.250399281809621840, -0.250350874363912680, -0.250302466292325890, -0.250254057594983370, -0.250205648272005750, -0.250157238323513940, +-0.250108827749628670, -0.250060416550471680, -0.250012004726163690, -0.249963592276825300, -0.249915179202578300, -0.249866765503543390, -0.249818351179841550, -0.249769936231593410, +-0.249721520658920840, -0.249673104461944490, -0.249624687640785350, -0.249576270195564110, -0.249527852126402580, -0.249479433433421440, -0.249431014116741710, -0.249382594176484010, +-0.249334173612770270, -0.249285752425721100, -0.249237330615457530, -0.249188908182100210, -0.249140485125771060, -0.249092061446590680, -0.249043637144679720, -0.248995212220160110, +-0.248946786673152450, -0.248898360503777840, -0.248849933712156880, -0.248801506298411550, -0.248753078262662440, -0.248704649605030610, -0.248656220325636750, -0.248607790424602760, +-0.248559359902049300, -0.248510928758097440, -0.248462496992867820, -0.248414064606482410, -0.248365631599061800, -0.248317197970727150, -0.248268763721599060, -0.248220328851799480, +-0.248171893361449100, -0.248123457250668980, -0.248075020519579780, -0.248026583168303450, -0.247978145196960680, -0.247929706605672100, -0.247881267394559710, -0.247832827563744110, +-0.247784387113346470, -0.247735946043487420, -0.247687504354288960, -0.247639062045871720, -0.247590619118356840, -0.247542175571864950, -0.247493731406518090, -0.247445286622436870, +-0.247396841219742450, -0.247348395198555500, -0.247299948558997980, -0.247251501301190580, -0.247203053425254450, -0.247154604931310250, -0.247106155819479980, -0.247057706089884280, +-0.247009255742643930, -0.246960804777880850, -0.246912353195715750, -0.246863900996269790, -0.246815448179663640, -0.246766994746019290, -0.246718540695457460, -0.246670086028099260, +-0.246621630744065430, -0.246573174843477960, -0.246524718326457560, -0.246476261193125350, -0.246427803443602040, -0.246379345078009680, -0.246330886096468940, -0.246282426499101010, +-0.246233966286026560, -0.246185505457367640, -0.246137044013244930, -0.246088581953779200, -0.246040119279092450, -0.245991655989305390, -0.245943192084539190, -0.245894727564914590, +-0.245846262430553600, -0.245797796681576950, -0.245749330318105810, -0.245700863340260920, -0.245652395748164280, -0.245603927541936660, -0.245555458721699230, -0.245506989287572720, +-0.245458519239679180, -0.245410048578139330, -0.245361577303074340, -0.245313105414605020, -0.245264632912853330, -0.245216159797940060, -0.245167686069986400, -0.245119211729113110, +-0.245070736775442190, -0.245022261209094460, -0.244973785030190630, -0.244925308238852750, -0.244876830835201620, -0.244828352819358410, -0.244779874191443900, -0.244731394951580110, +-0.244682915099887850, -0.244634434636488320, -0.244585953561502230, -0.244537471875051700, -0.244488989577257510, -0.244440506668240850, -0.244392023148122470, -0.244343539017024460, +-0.244295054275067620, -0.244246568922373150, -0.244198082959061810, -0.244149596385255680, -0.244101109201075580, -0.244052621406642300, -0.244004133002077850, -0.243955643987503110, +-0.243907154363039220, -0.243858664128807050, -0.243810173284928630, -0.243761681831524770, -0.243713189768716730, -0.243664697096625250, -0.243616203815372500, -0.243567709925079200, +-0.243519215425866660, -0.243470720317855630, -0.243422224601168250, -0.243373728275925270, -0.243325231342248010, -0.243276733800257220, -0.243228235650075040, -0.243179736891822260, +-0.243131237525619710, -0.243082737551589490, -0.243034236969852440, -0.242985735780529790, -0.242937233983742370, -0.242888731579612300, -0.242840228568260370, -0.242791724949807910, +-0.242743220724375680, -0.242694715892085850, -0.242646210453059230, -0.242597704407417070, -0.242549197755280220, -0.242500690496770810, -0.242452182632009680, -0.242403674161118100, +-0.242355165084216890, -0.242306655401428210, -0.242258145112872860, -0.242209634218671750, -0.242161122718946960, -0.242112610613819390, -0.242064097903410270, -0.242015584587840500, +-0.241967070667232190, -0.241918556141706180, -0.241870041011383820, -0.241821525276385900, -0.241773008936834590, -0.241724491992850790, -0.241675974444555740, -0.241627456292070300, +-0.241578937535516680, -0.241530418175015720, -0.241481898210688720, -0.241433377642656520, -0.241384856471041300, -0.241336334695963970, -0.241287812317545790, -0.241239289335907630, +-0.241190765751171710, -0.241142241563458870, -0.241093716772889960, -0.241045191379587210, -0.240996665383671510, -0.240948138785264110, -0.240899611584485950, -0.240851083781459200, +-0.240802555376304710, -0.240754026369143860, -0.240705496760097500, -0.240656966549287840, -0.240608435736835740, -0.240559904322862560, -0.240511372307489200, -0.240462839690837840, +-0.240414306473029390, -0.240365772654185160, -0.240317238234426050, -0.240268703213874310, -0.240220167592650800, -0.240171631370876440, -0.240123094548673420, -0.240074557126162660, +-0.240026019103465520, -0.239977480480702910, -0.239928941257997020, -0.239880401435468770, -0.239831861013239530, -0.239783319991430180, -0.239734778370162990, -0.239686236149558860, +-0.239637693329739110, -0.239589149910824720, -0.239540605892937880, -0.239492061276199510, -0.239443516060731030, -0.239394970246653290, -0.239346423834088550, -0.239297876823157780, +-0.239249329213981870, -0.239200781006683070, -0.239152232201382320, -0.239103682798200990, -0.239055132797260010, -0.239006582198681650, -0.238958031002586810, -0.238909479209096910, +-0.238860926818332870, -0.238812373830416950, -0.238763820245470100, -0.238715266063613710, -0.238666711284968690, -0.238618155909657350, -0.238569599937800610, -0.238521043369519880, +-0.238472486204936110, -0.238423928444171540, -0.238375370087347160, -0.238326811134584370, -0.238278251586004100, -0.238229691441728620, -0.238181130701878930, -0.238132569366575980, +-0.238084007435942050, -0.238035444910098090, -0.237986881789165520, -0.237938318073265320, -0.237889753762519750, -0.237841188857049800, -0.237792623356976870, -0.237744057262421950, +-0.237695490573507310, -0.237646923290353970, -0.237598355413083300, -0.237549786941816300, -0.237501217876675300, -0.237452648217781230, -0.237404077965255560, -0.237355507119219240, +-0.237306935679794610, -0.237258363647102620, -0.237209791021264300, -0.237161217802401900, -0.237112643990636500, -0.237064069586089470, -0.237015494588881850, -0.236966918999135910, +-0.236918342816972660, -0.236869766042513590, -0.236821188675879650, -0.236772610717193160, -0.236724032166575170, -0.236675453024147080, -0.236626873290029930, -0.236578292964346040, +-0.236529712047216400, -0.236481130538762490, -0.236432548439105330, -0.236383965748367230, -0.236335382466669190, -0.236286798594132290, -0.236238214130878810, -0.236189629077029810, +-0.236141043432706730, -0.236092457198030600, -0.236043870373123770, -0.235995282958107260, -0.235946694953102530, -0.235898106358230640, -0.235849517173613910, -0.235800927399373420, +-0.235752337035630590, -0.235703746082506470, -0.235655154540123420, -0.235606562408602500, -0.235557969688065170, -0.235509376378632480, -0.235460782480426790, -0.235412187993569140, +-0.235363592918180600, -0.235314997254383480, -0.235266401002298900, -0.235217804162048290, -0.235169206733752740, -0.235120608717534620, -0.235072010113514970, -0.235023410921815310, +-0.234974811142556670, -0.234926210775861430, -0.234877609821850690, -0.234829008280645900, -0.234780406152368170, -0.234731803437139840, -0.234683200135082040, -0.234634596246316220, +-0.234585991770963450, -0.234537386709146170, -0.234488781060985390, -0.234440174826602680, -0.234391568006119100, -0.234342960599657040, -0.234294352607337550, -0.234245744029281780, +-0.234197134865612060, -0.234148525116449510, -0.234099914781915660, -0.234051303862131580, -0.234002692357219650, -0.233954080267301020, -0.233905467592497200, -0.233856854332929240, +-0.233808240488719590, -0.233759626059989340, -0.233711011046860040, -0.233662395449452780, -0.233613779267889950, -0.233565162502292670, -0.233516545152782500, -0.233467927219480510, +-0.233419308702509150, -0.233370689601989530, -0.233322069918042750, -0.233273449650791190, -0.233224828800356050, -0.233176207366858820, -0.233127585350420640, -0.233078962751163940, +-0.233030339569209820, -0.232981715804679860, -0.232933091457695170, -0.232884466528378190, -0.232835841016850040, -0.232787214923232290, -0.232738588247646070, -0.232689960990213800, +-0.232641333151056650, -0.232592704730296140, -0.232544075728053470, -0.232495446144451000, -0.232446815979609950, -0.232398185233651410, -0.232349553906697870, -0.232300921998870400, +-0.232252289510290640, -0.232203656441079740, -0.232155022791360130, -0.232106388561252960, -0.232057753750879810, -0.232009118360361840, -0.231960482389821530, -0.231911845839379990, +-0.231863208709158860, -0.231814570999279240, -0.231765932709863650, -0.231717293841033230, -0.231668654392909570, -0.231620014365613830, -0.231571373759268510, -0.231522732573994750, +-0.231474090809914130, -0.231425448467147880, -0.231376805545818440, -0.231328162046046980, -0.231279517967954680, -0.231230873311664030, -0.231182228077296190, -0.231133582264972770, +-0.231084935874814960, -0.231036288906945250, -0.230987641361484840, -0.230938993238555300, -0.230890344538277840, -0.230841695260774970, -0.230793045406167850, -0.230744394974578130, +-0.230695743966126960, -0.230647092380936890, -0.230598440219129090, -0.230549787480825190, -0.230501134166146370, -0.230452480275215170, -0.230403825808152750, -0.230355170765080330, +-0.230306515146120440, -0.230257858951394250, -0.230209202181023420, -0.230160544835129130, -0.230111886913833940, -0.230063228417259010, -0.230014569345526030, -0.229965909698756160, +-0.229917249477071980, -0.229868588680594650, -0.229819927309445870, -0.229771265363746840, -0.229722602843620060, -0.229673939749186790, -0.229625276080568680, -0.229576611837886910, +-0.229527947021264080, -0.229479281630821370, -0.229430615666680020, -0.229381949128962560, -0.229333282017790240, -0.229284614333284700, -0.229235946075567220, -0.229187277244760290, +-0.229138607840985160, -0.229089937864363520, -0.229041267315016590, -0.228992596193066940, -0.228943924498635790, -0.228895252231844840, -0.228846579392815300, -0.228797905981669770, +-0.228749231998529480, -0.228700557443516080, -0.228651882316750880, -0.228603206618356400, -0.228554530348453910, -0.228505853507164650, -0.228457176094611190, -0.228408498110914790, +-0.228359819556197140, -0.228311140430579510, -0.228262460734184490, -0.228213780467133280, -0.228165099629547650, -0.228116418221548820, -0.228067736243259380, -0.228019053694800610, +-0.227970370576294180, -0.227921686887861410, -0.227873002629624840, -0.227824317801705780, -0.227775632404225940, -0.227726946437306570, -0.227678259901070240, -0.227629572795638310, +-0.227580885121132420, -0.227532196877673870, -0.227483508065385280, -0.227434818684387920, -0.227386128734803100, -0.227337438216753370, -0.227288747130360040, -0.227240055475744830, +-0.227191363253029080, -0.227142670462335330, -0.227093977103784930, -0.227045283177499560, -0.226996588683600560, -0.226947893622210520, -0.226899197993450760, -0.226850501797442980, +-0.226801805034308520, -0.226753107704170010, -0.226704409807148700, -0.226655711343366370, -0.226607012312944330, -0.226558312716005210, -0.226509612552670270, -0.226460911823060910, +-0.226412210527299680, -0.226363508665507920, -0.226314806237807390, -0.226266103244319420, -0.226217399685166630, -0.226168695560470310, -0.226119990870352280, -0.226071285614933840, +-0.226022579794337620, -0.225973873408684940, -0.225925166458097570, -0.225876458942696870, -0.225827750862605450, -0.225779042217944650, -0.225730333008836240, -0.225681623235401560, +-0.225632912897763270, -0.225584201996042680, -0.225535490530361180, -0.225486778500841370, -0.225438065907604600, -0.225389352750772680, -0.225340639030466940, -0.225291924746810030, +-0.225243209899923330, -0.225194494489928590, -0.225145778516947200, -0.225097061981101770, -0.225048344882513710, -0.224999627221304760, -0.224950908997596320, -0.224902190211511060, +-0.224853470863170310, -0.224804750952695860, -0.224756030480209150, -0.224707309445832750, -0.224658587849688090, -0.224609865691896980, -0.224561142972580760, -0.224512419691862110, +-0.224463695849862420, -0.224414971446703050, -0.224366246482506660, -0.224317520957394710, -0.224268794871488930, -0.224220068224910720, -0.224171341017782770, -0.224122613250226480, +-0.224073884922363660, -0.224025156034315690, -0.223976426586205260, -0.223927696578153780, -0.223878966010283040, -0.223830234882714450, -0.223781503195570720, -0.223732770948973230, +-0.223684038143043800, -0.223635304777903860, -0.223586570853676090, -0.223537836370481860, -0.223489101328442630, -0.223440365727681080, -0.223391629568318620, -0.223342892850477090, +-0.223294155574277900, -0.223245417739843720, -0.223196679347296030, -0.223147940396756620, -0.223099200888346950, -0.223050460822189680, -0.223001720198406280, -0.222952979017118580, +-0.222904237278447990, -0.222855494982517250, -0.222806752129447750, -0.222758008719361380, -0.222709264752379570, -0.222660520228625040, -0.222611775148219170, -0.222563029511283460, +-0.222514283317940600, -0.222465536568312030, -0.222416789262519620, -0.222368041400684810, -0.222319292982930320, -0.222270544009377600, -0.222221794480148530, -0.222173044395364530, +-0.222124293755148360, -0.222075542559621450, -0.222026790808905670, -0.221978038503122500, -0.221929285642394670, -0.221880532226843620, -0.221831778256591230, -0.221783023731758950, +-0.221734268652469590, -0.221685513018844510, -0.221636756831005250, -0.221588000089074500, -0.221539242793173770, -0.221490484943424940, -0.221441726539949450, -0.221392967582870080, +-0.221344208072308280, -0.221295448008385990, -0.221246687391224630, -0.221197926220946970, -0.221149164497674520, -0.221100402221529160, -0.221051639392632340, -0.221002876011106850, +-0.220954112077074190, -0.220905347590656250, -0.220856582551974490, -0.220807816961151730, -0.220759050818309400, -0.220710284123569470, -0.220661516877053400, -0.220612749078883950, +-0.220563980729182620, -0.220515211828070930, -0.220466442375671650, -0.220417672372106240, -0.220368901817496660, -0.220320130711964380, -0.220271359055632220, -0.220222586848621640, +-0.220173814091054630, -0.220125040783052620, -0.220076266924738470, -0.220027492516233630, -0.219978717557660080, -0.219929942049139270, -0.219881165990794050, -0.219832389382745940, +-0.219783612225116830, -0.219734834518028280, -0.219686056261603040, -0.219637277455962680, -0.219588498101228710, -0.219539718197523910, -0.219490937744969810, -0.219442156743688390, +-0.219393375193801120, -0.219344593095430830, -0.219295810448699090, -0.219247027253727830, -0.219198243510638550, -0.219149459219554090, -0.219100674380595990, -0.219051888993886220, +-0.219003103059546260, -0.218954316577699010, -0.218905529548465950, -0.218856741971969050, -0.218807953848329910, -0.218759165177671270, -0.218710375960114750, -0.218661586195781830, +-0.218612795884795400, -0.218564005027276960, -0.218515213623348530, -0.218466421673131630, -0.218417629176749090, -0.218368836134322510, -0.218320042545973810, -0.218271248411824580, +-0.218222453731997670, -0.218173658506614600, -0.218124862735797400, -0.218076066419667620, -0.218027269558348110, -0.217978472151960400, -0.217929674200626530, -0.217880875704468040, +-0.217832076663607790, -0.217783277078167360, -0.217734476948268720, -0.217685676274033460, -0.217636875055584430, -0.217588073293043220, -0.217539270986531420, -0.217490468136171840, +-0.217441664742086120, -0.217392860804396210, -0.217344056323223730, -0.217295251298691540, -0.217246445730921220, -0.217197639620034800, -0.217148832966153840, -0.217100025769401210, +-0.217051218029898550, -0.217002409747767830, -0.216953600923130650, -0.216904791556109890, -0.216855981646827150, -0.216807171195404490, -0.216758360201963430, -0.216709548666626920, +-0.216660736589516540, -0.216611923970753910, -0.216563110810461870, -0.216514297108762050, -0.216465482865776490, -0.216416668081626800, -0.216367852756435890, -0.216319036890325310, +-0.216270220483417150, -0.216221403535833020, -0.216172586047695820, -0.216123768019127140, -0.216074949450249050, -0.216026130341183150, -0.215977310692052340, -0.215928490502978270, +-0.215879669774082960, -0.215830848505488060, -0.215782026697316470, -0.215733204349689790, -0.215684381462729700, -0.215635558036559070, -0.215586734071299550, -0.215537909567073190, +-0.215489084524001620, -0.215440258942207780, -0.215391432821813310, -0.215342606162940240, -0.215293778965710200, -0.215244951230246170, -0.215196122956669760, -0.215147294145103060, +-0.215098464795667660, -0.215049634908486550, -0.215000804483681330, -0.214951973521374130, -0.214903142021686560, -0.214854309984741560, -0.214805477410660780, -0.214756644299565870, +-0.214707810651579790, -0.214658976466824190, -0.214610141745421120, -0.214561306487492300, -0.214512470693160620, -0.214463634362547780, -0.214414797495775860, -0.214365960092966490, +-0.214317122154242670, -0.214268283679726030, -0.214219444669538680, -0.214170605123802320, -0.214121765042639860, -0.214072924426172980, -0.214024083274523800, -0.213975241587813950, +-0.213926399366166450, -0.213877556609702950, -0.213828713318545580, -0.213779869492815970, -0.213731025132637110, -0.213682180238130710, -0.213633334809418430, -0.213584488846623230, +-0.213535642349866800, -0.213486795319271280, -0.213437947754958330, -0.213389099657050970, -0.213340251025670840, -0.213291401860940060, -0.213242552162980380, -0.213193701931914730, +-0.213144851167864830, -0.213095999870952820, -0.213047148041300340, -0.212998295679030450, -0.212949442784264810, -0.212900589357125580, -0.212851735397734440, -0.212802880906214380, +-0.212754025882687130, -0.212705170327274370, -0.212656314240099120, -0.212607457621283110, -0.212558600470948430, -0.212509742789216830, -0.212460884576211290, -0.212412025832053540, +-0.212363166556865740, -0.212314306750769570, -0.212265446413888090, -0.212216585546342980, -0.212167724148256410, -0.212118862219750100, -0.212069999760947060, -0.212021136771969020, +-0.211972273252938160, -0.211923409203976150, -0.211874544625206080, -0.211825679516749630, -0.211776813878728540, -0.211727947711265880, -0.211679081014483320, -0.211630213788503080, +-0.211581346033446860, -0.211532477749437700, -0.211483608936597370, -0.211434739595047990, -0.211385869724911360, -0.211336999326310480, -0.211288128399367090, -0.211239256944203370, +-0.211190384960941090, -0.211141512449703280, -0.211092639410611680, -0.211043765843788510, -0.210994891749355460, -0.210946017127435630, -0.210897141978150740, -0.210848266301623010, +-0.210799390097974190, -0.210750513367327310, -0.210701636109804140, -0.210652758325526460, -0.210603880014617330, -0.210555001177198470, -0.210506121813392150, -0.210457241923320050, +-0.210408361507105290, -0.210359480564869640, -0.210310599096735270, -0.210261717102823990, -0.210212834583258850, -0.210163951538161610, -0.210115067967654500, -0.210066183871859270, +-0.210017299250899010, -0.209968414104895530, -0.209919528433971020, -0.209870642238247220, -0.209821755517847260, -0.209772868272892930, -0.209723980503505990, -0.209675092209809510, +-0.209626203391925340, -0.209577314049975620, -0.209528424184082210, -0.209479533794368150, -0.209430642880955280, -0.209381751443965790, -0.209332859483521480, -0.209283966999745470, +-0.209235073992759530, -0.209186180462685920, -0.209137286409646410, -0.209088391833764130, -0.209039496735160840, -0.208990601113958840, -0.208941704970279890, -0.208892808304247140, +-0.208843911115982330, -0.208795013405607330, -0.208746115173245230, -0.208697216419017840, -0.208648317143047410, -0.208599417345455730, -0.208550517026365980, -0.208501616185899910, +-0.208452714824179820, -0.208403812941327480, -0.208354910537466080, -0.208306007612717360, -0.208257104167203670, -0.208208200201046740, -0.208159295714369780, -0.208110390707294560, +-0.208061485179943360, -0.208012579132438010, -0.207963672564901670, -0.207914765477456130, -0.207865857870223240, -0.207816949743326150, -0.207768041096886680, -0.207719131931027120, +-0.207670222245869280, -0.207621312041536330, -0.207572401318150110, -0.207523490075832870, -0.207474578314706480, -0.207425666034894070, -0.207376753236517470, -0.207327839919699030, +-0.207278926084560530, -0.207230011731225160, -0.207181096859814760, -0.207132181470451620, -0.207083265563257600, -0.207034349138355830, -0.206985432195868210, -0.206936514735916980, +-0.206887596758624060, -0.206838678264112560, -0.206789759252504370, -0.206740839723921350, -0.206691919678486660, -0.206642999116322200, -0.206594078037550200, -0.206545156442292600, +-0.206496234330672520, -0.206447311702811890, -0.206398388558832940, -0.206349464898857610, -0.206300540723009050, -0.206251616031409120, -0.206202690824180160, -0.206153765101444040, +-0.206104838863323950, -0.206055912109941760, -0.206006984841419770, -0.205958057057879920, -0.205909128759445340, -0.205860199946237940, -0.205811270618379590, -0.205762340775993540, +-0.205713410419201600, -0.205664479548126140, -0.205615548162889040, -0.205566616263613530, -0.205517683850421460, -0.205468750923435190, -0.205419817482776600, -0.205370883528568910, +-0.205321949060934010, -0.205273014079994240, -0.205224078585871490, -0.205175142578688990, -0.205126206058568630, -0.205077269025632750, -0.205028331480003270, -0.204979393421803380, +-0.204930454851155020, -0.204881515768180090, -0.204832576173001800, -0.204783636065742070, -0.204734695446523260, -0.204685754315467260, -0.204636812672697320, -0.204587870518335320, +-0.204538927852503690, -0.204489984675324280, -0.204441040986920340, -0.204392096787413820, -0.204343152076927050, -0.204294206855581940, -0.204245261123501780, -0.204196314880808440, +-0.204147368127624320, -0.204098420864071370, -0.204049473090272770, -0.204000524806350500, -0.203951576012426920, -0.203902626708623970, -0.203853676895064890, -0.203804726571871600, +-0.203755775739166090, -0.203706824397071550, -0.203657872545709940, -0.203608920185203680, -0.203559967315674660, -0.203511013937246160, -0.203462060050040140, -0.203413105654178940, +-0.203364150749784590, -0.203315195336980250, -0.203266239415887950, -0.203217282986630030, -0.203168326049328500, -0.203119368604106560, -0.203070410651086220, -0.203021452190389830, +-0.202972493222139390, -0.202923533746458130, -0.202874573763468070, -0.202825613273291130, -0.202776652276050570, -0.202727690771868420, -0.202678728760867010, -0.202629766243168360, +-0.202580803218895710, -0.202531839688171070, -0.202482875651116830, -0.202433911107854970, -0.202384946058508740, -0.202335980503200170, -0.202287014442051630, -0.202238047875185150, +-0.202189080802723960, -0.202140113224790090, -0.202091145141505920, -0.202042176552993450, -0.201993207459375960, -0.201944237860775480, -0.201895267757313950, -0.201846297149114700, +-0.201797326036299710, -0.201748354418991390, -0.201699382297311770, -0.201650409671384120, -0.201601436541330450, -0.201552462907273160, -0.201503488769334300, -0.201454514127637150, +-0.201405538982303730, -0.201356563333456450, -0.201307587181217330, -0.201258610525709670, -0.201209633367055500, -0.201160655705377220, -0.201111677540796870, -0.201062698873437780, +-0.201013719703421940, -0.200964740030871360, -0.200915759855909370, -0.200866779178657970, -0.200817797999239630, -0.200768816317776350, -0.200719834134391480, -0.200670851449207020, +-0.200621868262345400, -0.200572884573928720, -0.200523900384080240, -0.200474915692922030, -0.200425930500576500, -0.200376944807165720, -0.200327958612813020, -0.200278971917640440, +-0.200229984721770390, -0.200180997025324990, -0.200132008828427490, -0.200083020131200000, -0.200034030933764930, -0.199985041236244360, -0.199936051038761640, -0.199887060341438770, +-0.199838069144397830, -0.199789077447762140, -0.199740085251653770, -0.199691092556195160, -0.199642099361508420, -0.199593105667716850, -0.199544111474942500, -0.199495116783307890, +-0.199446121592935070, -0.199397125903947340, -0.199348129716466820, -0.199299133030615970, -0.199250135846516850, -0.199201138164292830, -0.199152139984065970, -0.199103141305958740, +-0.199054142130093260, -0.199005142456592820, -0.198956142285579530, -0.198907141617175460, -0.198858140451503990, -0.198809138788687140, -0.198760136628847450, -0.198711133972106990, +-0.198662130818589130, -0.198613127168415950, -0.198564123021709920, -0.198515118378593170, -0.198466113239189060, -0.198417107603619660, -0.198368101472007510, -0.198319094844474660, +-0.198270087721144490, -0.198221080102139120, -0.198172071987581050, -0.198123063377592360, -0.198074054272296430, -0.198025044671815390, -0.197976034576271300, -0.197927023985787570, +-0.197878012900486260, -0.197829001320489920, -0.197779989245920630, -0.197730976676901820, -0.197681963613555580, -0.197632950056004400, -0.197583936004370440, -0.197534921458777050, +-0.197485906419346380, -0.197436890886200920, -0.197387874859462800, -0.197338858339255440, -0.197289841325700930, -0.197240823818921830, -0.197191805819040220, -0.197142787326179540, +-0.197093768340461880, -0.197044748862009820, -0.196995728890945440, -0.196946708427392150, -0.196897687471472130, -0.196848666023307420, -0.196799644083021500, -0.196750621650736480, +-0.196701598726574890, -0.196652575310658860, -0.196603551403111840, -0.196554527004055930, -0.196505502113613730, -0.196456476731907300, -0.196407450859060140, -0.196358424495194360, +-0.196309397640432510, -0.196260370294896710, -0.196211342458710440, -0.196162314131995810, -0.196113285314875400, -0.196064256007471350, -0.196015226209907080, -0.195966195922304740, +-0.195917165144786490, -0.195868133877475760, -0.195819102120494660, -0.195770069873965860, -0.195721037138011420, -0.195672003912754830, -0.195622970198318230, -0.195573935994824200, +-0.195524901302394890, -0.195475866121153780, -0.195426830451222970, -0.195377794292725120, -0.195328757645782340, -0.195279720510518090, -0.195230682887054560, -0.195181644775514310, +-0.195132606176019520, -0.195083567088693620, -0.195034527513658850, -0.194985487451037300, -0.194936446900952460, -0.194887405863526510, -0.194838364338882050, -0.194789322327141250, +-0.194740279828427560, -0.194691236842863190, -0.194642193370570700, -0.194593149411672330, -0.194544104966291490, -0.194495060034550390, -0.194446014616571660, -0.194396968712477440, +-0.194347922322391260, -0.194298875446435260, -0.194249828084732040, -0.194200780237403860, -0.194151731904574130, -0.194102683086365110, -0.194053633782898920, -0.194004583994299070, +-0.193955533720687770, -0.193906482962187650, -0.193857431718920890, -0.193808379991010970, -0.193759327778580100, -0.193710275081750930, -0.193661221900645610, -0.193612168235387680, +-0.193563114086099330, -0.193514059452903200, -0.193465004335921480, -0.193415948735277700, -0.193366892651094020, -0.193317836083493150, -0.193268779032597200, -0.193219721498529780, +-0.193170663481413040, -0.193121604981369650, -0.193072545998521810, -0.193023486532993030, -0.192974426584905550, -0.192925366154381550, -0.192876305241544590, -0.192827243846516870, +-0.192778181969421010, -0.192729119610379280, -0.192680056769515190, -0.192630993446950950, -0.192581929642809240, -0.192532865357212260, -0.192483800590283530, -0.192434735342145340, +-0.192385669612920280, -0.192336603402730620, -0.192287536711699900, -0.192238469539950330, -0.192189401887604580, -0.192140333754784900, -0.192091265141614790, -0.192042196048216540, +-0.191993126474712370, -0.191944056421225830, -0.191894985887879120, -0.191845914874794960, -0.191796843382095600, -0.191747771409904540, -0.191698698958344040, -0.191649626027536820, +-0.191600552617605090, -0.191551478728672400, -0.191502404360861020, -0.191453329514293640, -0.191404254189092520, -0.191355178385381160, -0.191306102103281860, -0.191257025342917330, +-0.191207948104409780, -0.191158870387882820, -0.191109792193458670, -0.191060713521259580, -0.191011634371409170, -0.190962554744029650, -0.190913474639243770, -0.190864394057173760, +-0.190815312997943190, -0.190766231461674350, -0.190717149448489910, -0.190668066958512180, -0.190618983991864720, -0.190569900548669820, -0.190520816629050130, -0.190471732233127970, +-0.190422647361026930, -0.190373562012869260, -0.190324476188777710, -0.190275389888874490, -0.190226303113283260, -0.190177215862126270, -0.190128128135526240, -0.190079039933605450, +-0.190029951256487500, -0.189980862104294660, -0.189931772477149240, -0.189882682375174830, -0.189833591798493710, -0.189784500747228610, -0.189735409221501810, -0.189686317221436950, +-0.189637224747156270, -0.189588131798782530, -0.189539038376438040, -0.189489944480246390, -0.189440850110329880, -0.189391755266811230, -0.189342659949812750, -0.189293564159458080, +-0.189244467895869490, -0.189195371159169730, -0.189146273949481110, -0.189097176266927240, -0.189048078111630410, -0.188998979483712970, -0.188949880383298520, -0.188900780810509340, +-0.188851680765468240, -0.188802580248297490, -0.188753479259120730, -0.188704377798060260, -0.188655275865238860, -0.188606173460778820, -0.188557070584803810, -0.188507967237436100, +-0.188458863418798470, -0.188409759129013250, -0.188360654368204070, -0.188311549136493260, -0.188262443434003580, -0.188213337260857340, -0.188164230617178210, -0.188115123503088480, +-0.188066015918710530, -0.188016907864167970, -0.187967799339583130, -0.187918690345078800, -0.187869580880777320, -0.187820470946802290, -0.187771360543276120, -0.187722249670321530, +-0.187673138328060870, -0.187624026516617830, -0.187574914236114690, -0.187525801486674280, -0.187476688268418930, -0.187427574581472300, -0.187378460425956740, -0.187329345801995010, +-0.187280230709709480, -0.187231115149223830, -0.187181999120660390, -0.187132882624141930, -0.187083765659790850, -0.187034648227730780, -0.186985530328084070, -0.186936411960973130, +-0.186887293126521580, -0.186838173824851820, -0.186789054056086590, -0.186739933820348310, -0.186690813117760650, -0.186641691948445930, -0.186592570312526990, -0.186543448210126170, +-0.186494325641367200, -0.186445202606372370, -0.186396079105264570, -0.186346955138166130, -0.186297830705200730, -0.186248705806490750, -0.186199580442159040, -0.186150454612327900, +-0.186101328317121090, -0.186052201556660940, -0.186003074331069860, -0.185953946640471520, -0.185904818484988330, -0.185855689864743070, -0.185806560779858160, -0.185757431230457290, +-0.185708301216662850, -0.185659170738597640, -0.185610039796384070, -0.185560908390145830, -0.185511776520005330, -0.185462644186085410, -0.185413511388508400, -0.185364378127398090, +-0.185315244402876810, -0.185266110215067420, -0.185216975564092310, -0.185167840450075200, -0.185118704873138500, -0.185069568833404610, -0.185020432330997210, -0.184971295366038760, +-0.184922157938652050, -0.184873020048959500, -0.184823881697084860, -0.184774742883150520, -0.184725603607279300, -0.184676463869593630, -0.184627323670217250, -0.184578183009272560, +-0.184529041886882430, -0.184479900303169240, -0.184430758258256750, -0.184381615752267330, -0.184332472785323910, -0.184283329357548850, -0.184234185469065920, -0.184185041119997510, +-0.184135896310466060, -0.184086751040595300, -0.184037605310507700, -0.183988459120326050, -0.183939312470172810, -0.183890165360171750, -0.183841017790445260, -0.183791869761116250, +-0.183742721272307120, -0.183693572324141600, -0.183644422916742180, -0.183595273050231680, -0.183546122724732560, -0.183496971940368600, -0.183447820697262180, -0.183398668995536220, +-0.183349516835313140, -0.183300364216716720, -0.183251211139869390, -0.183202057604894030, -0.183152903611913080, -0.183103749161050320, -0.183054594252428180, -0.183005438886169100, +-0.182956283062396890, -0.182907126781233940, -0.182857970042803210, -0.182808812847227110, -0.182759655194629390, -0.182710497085132570, -0.182661338518859460, -0.182612179495932610, +-0.182563020016475730, -0.182513860080611300, -0.182464699688462210, -0.182415538840150940, -0.182366377535801260, -0.182317215775535640, -0.182268053559477010, -0.182218890887747760, +-0.182169727760471740, -0.182120564177771390, -0.182071400139769220, -0.182022235646588980, -0.181973070698353140, -0.181923905295184620, -0.181874739437205890, -0.181825573124540780, +-0.181776406357311710, -0.181727239135641650, -0.181678071459653030, -0.181628903329469680, -0.181579734745214080, -0.181530565707009120, -0.181481396214977330, -0.181432226269242460, +-0.181383055869927060, -0.181333885017154000, -0.181284713711045790, -0.181235541951726250, -0.181186369739317840, -0.181137197073943070, -0.181088023955725740, -0.181038850384788370, +-0.180989676361253850, -0.180940501885244710, -0.180891326956884760, -0.180842151576296490, -0.180792975743602840, -0.180743799458926300, -0.180694622722390700, -0.180645445534118570, +-0.180596267894232800, -0.180547089802855940, -0.180497911260111780, -0.180448732266122850, -0.180399552821012080, -0.180350372924902000, -0.180301192577916440, -0.180252011780177880, +-0.180202830531809270, -0.180153648832933190, -0.180104466683673390, -0.180055284084152440, -0.180006101034492850, -0.179956917534818430, -0.179907733585251720, -0.179858549185915680, +-0.179809364336932810, -0.179760179038427000, -0.179710993290520730, -0.179661807093336980, -0.179612620446998270, -0.179563433351628440, -0.179514245807350040, -0.179465057814286010, +-0.179415869372558910, -0.179366680482292570, -0.179317491143609510, -0.179268301356632740, -0.179219111121484780, -0.179169920438289470, -0.179120729307169380, -0.179071537728247020, +-0.179022345701646240, -0.178973153227489610, -0.178923960305900100, -0.178874766937000250, -0.178825573120913910, -0.178776378857763650, -0.178727184147672440, -0.178677988990762810, +-0.178628793387158670, -0.178579597336982530, -0.178530400840357430, -0.178481203897405850, -0.178432006508251720, -0.178382808673017560, -0.178333610391826380, -0.178284411664800750, +-0.178235212492064530, -0.178186012873740280, -0.178136812809950560, -0.178087612300819210, -0.178038411346468860, -0.177989209947022500, -0.177940008102602630, -0.177890805813333220, +-0.177841603079336770, -0.177792399900736340, -0.177743196277654450, -0.177693992210215010, -0.177644787698540580, -0.177595582742754190, -0.177546377342978400, -0.177497171499337110, +-0.177447965211952910, -0.177398758480948770, -0.177349551306447310, -0.177300343688572390, -0.177251135627446630, -0.177201927123192600, -0.177152718175934170, -0.177103508785793950, +-0.177054298952894980, -0.177005088677359810, -0.176955877959312340, -0.176906666798875210, -0.176857455196171380, -0.176808243151323490, -0.176759030664455420, -0.176709817735689780, +-0.176660604365149600, -0.176611390552957460, -0.176562176299237290, -0.176512961604111670, -0.176463746467703660, -0.176414530890135840, -0.176365314871532120, -0.176316098412015120, +-0.176266881511707880, -0.176217664170733010, -0.176168446389214390, -0.176119228167274680, -0.176070009505036460, -0.176020790402623640, -0.175971570860158830, -0.175922350877765120, +-0.175873130455565070, -0.175823909593682660, -0.175774688292240470, -0.175725466551361540, -0.175676244371168520, -0.175627021751785320, -0.175577798693334590, -0.175528575195939340, +-0.175479351259722220, -0.175430126884807160, -0.175380902071316790, -0.175331676819374140, -0.175282451129101870, -0.175233225000623940, -0.175183998434062900, -0.175134771429541450, +-0.175085543987183540, -0.175036316107111730, -0.174987087789449130, -0.174937859034318380, -0.174888629841843450, -0.174839400212146890, -0.174790170145351860, -0.174740939641580970, +-0.174691708700958180, -0.174642477323606080, -0.174593245509647830, -0.174544013259205990, -0.174494780572404580, -0.174445547449366220, -0.174396313890213980, -0.174347079895070510, +-0.174297845464059800, -0.174248610597304450, -0.174199375294927160, -0.174150139557051860, -0.174100903383801210, -0.174051666775298290, -0.174002429731665800, -0.173953192253027630, +-0.173903954339506510, -0.173854715991225480, -0.173805477208307250, -0.173756237990875750, -0.173706998339053680, -0.173657758252964090, -0.173608517732729640, -0.173559276778474380, +-0.173510035390320920, -0.173460793568392360, -0.173411551312811360, -0.173362308623701940, -0.173313065501186750, -0.173263821945388890, -0.173214577956431050, -0.173165333534437190, +-0.173116088679530020, -0.173066843391832180, -0.173017597671467650, -0.172968351518559130, -0.172919104933229730, -0.172869857915602170, -0.172820610465800360, -0.172771362583947040, +-0.172722114270165290, -0.172672865524577830, -0.172623616347308660, -0.172574366738480450, -0.172525116698216300, -0.172475866226638940, -0.172426615323872350, -0.172377363990039220, +-0.172328112225262680, -0.172278860029665410, -0.172229607403371430, -0.172180354346503440, -0.172131100859184120, -0.172081846941537500, -0.172032592593686250, -0.171983337815753530, +-0.171934082607862030, -0.171884826970135740, -0.171835570902697380, -0.171786314405670100, -0.171737057479176610, -0.171687800123340920, -0.171638542338285710, -0.171589284124134160, +-0.171540025481008940, -0.171490766409034100, -0.171441506908332380, -0.171392246979026860, -0.171342986621240280, -0.171293725835096670, -0.171244464620718770, -0.171195202978229240, +-0.171145940907752180, -0.171096678409410230, -0.171047415483326610, -0.170998152129623990, -0.170948888348426450, -0.170899624139856680, -0.170850359504037850, -0.170801094441092680, +-0.170751828951145210, -0.170702563034318160, -0.170653296690734730, -0.170604029920517600, -0.170554762723790830, -0.170505495100677170, -0.170456227051299760, -0.170406958575781340, +-0.170357689674245970, -0.170308420346816400, -0.170259150593615290, -0.170209880414766780, -0.170160609810393550, -0.170111338780618820, -0.170062067325565280, -0.170012795445357020, +-0.169963523140116760, -0.169914250409967720, -0.169864977255032580, -0.169815703675435470, -0.169766429671299070, -0.169717155242746610, -0.169667880389900830, -0.169618605112885790, +-0.169569329411824200, -0.169520053286839330, -0.169470776738053890, -0.169421499765591930, -0.169372222369576190, -0.169322944550129940, -0.169273666307375860, -0.169224387641438070, +-0.169175108552439310, -0.169125829040502360, -0.169076549105751230, -0.169027268748308760, -0.168977987968298100, -0.168928706765842070, -0.168879425141064660, -0.168830143094088720, +-0.168780860625037420, -0.168731577734033520, -0.168682294421201110, -0.168633010686662980, -0.168583726530542320, -0.168534441952961880, -0.168485156954045810, -0.168435871533916840, +-0.168386585692698180, -0.168337299430512620, -0.168288012747484260, -0.168238725643735850, -0.168189438119390190, -0.168140150174571370, -0.168090861809402190, -0.168041573024005850, +-0.167992283818505140, -0.167942994193024160, -0.167893704147685700, -0.167844413682612960, -0.167795122797928770, -0.167745831493757190, -0.167696539770221030, -0.167647247627443540, +-0.167597955065547500, -0.167548662084656990, -0.167499368684894820, -0.167450074866384250, -0.167400780629248040, -0.167351485973610330, -0.167302190899593890, -0.167252895407321550, +-0.167203599496917400, -0.167154303168504240, -0.167105006422205330, -0.167055709258143480, -0.167006411676442780, -0.166957113677226070, -0.166907815260616540, -0.166858516426737070, +-0.166809217175711730, -0.166759917507663340, -0.166710617422715170, -0.166661316920990010, -0.166612016002612020, -0.166562714667703950, -0.166513412916389130, -0.166464110748790310, +-0.166414808165031680, -0.166365505165236020, -0.166316201749526580, -0.166266897918026210, -0.166217593670859030, -0.166168289008147870, -0.166118983930015560, -0.166069678436586210, +-0.166020372527982660, -0.165971066204328190, -0.165921759465745610, -0.165872452312359090, -0.165823144744291410, -0.165773836761665900, -0.165724528364605330, -0.165675219553233890, +-0.165625910327674400, -0.165576600688050140, -0.165527290634483930, -0.165477980167099940, -0.165428669286021010, -0.165379357991370380, -0.165330046283270940, -0.165280734161846830, +-0.165231421627220850, -0.165182108679515910, -0.165132795318856110, -0.165083481545364340, -0.165034167359163850, -0.164984852760377530, -0.164935537749129500, -0.164886222325542620, +-0.164836906489740200, -0.164787590241845060, -0.164738273581981400, -0.164688956510272020, -0.164639639026840280, -0.164590321131808990, -0.164541002825302350, -0.164491684107443190, +-0.164442364978354850, -0.164393045438160130, -0.164343725486983230, -0.164294405124947030, -0.164245084352174390, -0.164195763168789450, -0.164146441574915120, -0.164097119570674690, +-0.164047797156191000, -0.163998474331588260, -0.163949151096989350, -0.163899827452517580, -0.163850503398295770, -0.163801178934448150, -0.163751854061097570, -0.163702528778367380, +-0.163653203086380400, -0.163603876985260880, -0.163554550475131650, -0.163505223556116050, -0.163455896228336950, -0.163406568491918560, -0.163357240346983730, -0.163307911793655390, +-0.163258582832057690, -0.163209253462313520, -0.163159923684546240, -0.163110593498878690, -0.163061262905435100, -0.163011931904338350, -0.162962600495711790, -0.162913268679678290, +-0.162863936456362050, -0.162814603825885950, -0.162765270788373360, -0.162715937343947150, -0.162666603492731540, -0.162617269234849400, -0.162567934570424120, -0.162518599499578530, +-0.162469264022436920, -0.162419928139122120, -0.162370591849757500, -0.162321255154465970, -0.162271918053371740, -0.162222580546597720, -0.162173242634266800, -0.162123904316503230, +-0.162074565593429890, -0.162025226465170120, -0.161975886931846860, -0.161926546993584330, -0.161877206650505420, -0.161827865902733490, -0.161778524750391480, -0.161729183193603580, +-0.161679841232492710, -0.161630498867182250, -0.161581156097795110, -0.161531812924455510, -0.161482469347286380, -0.161433125366411080, -0.161383780981952520, -0.161334436194034950, +-0.161285091002781290, -0.161235745408314450, -0.161186399410758710, -0.161137053010236950, -0.161087706206872570, -0.161038359000788500, -0.160989011392108940, -0.160939663380956890, +-0.160890314967455650, -0.160840966151728190, -0.160791616933898760, -0.160742267314090280, -0.160692917292426130, -0.160643566869029250, -0.160594216044023910, -0.160544864817533020, +-0.160495513189679940, -0.160446161160587690, -0.160396808730380420, -0.160347455899181170, -0.160298102667112840, -0.160248749034299670, -0.160199395000864640, -0.160150040566931110, +-0.160100685732622070, -0.160051330498061720, -0.160001974863373060, -0.159952618828679450, -0.159903262394103880, -0.159853905559770580, -0.159804548325802510, -0.159755190692323080, +-0.159705832659455200, -0.159656474227323240, -0.159607115396050050, -0.159557756165759070, -0.159508396536573280, -0.159459036508616920, -0.159409676082012980, -0.159360315256884850, +-0.159310954033355490, -0.159261592411549190, -0.159212230391588910, -0.159162867973597600, -0.159113505157699560, -0.159064141944017770, -0.159014778332675630, -0.158965414323796100, +-0.158916049917503470, -0.158866685113920710, -0.158817319913171250, -0.158767954315378050, -0.158718588320665380, -0.158669221929156250, -0.158619855140974100, -0.158570487956241820, +-0.158521120375083780, -0.158471752397622960, -0.158422384023982730, -0.158373015254286130, -0.158323646088657400, -0.158274276527219570, -0.158224906570095610, -0.158175536217409820, +-0.158126165469285210, -0.158076794325845150, -0.158027422787212680, -0.157978050853512100, -0.157928678524866390, -0.157879305801398970, -0.157829932683232870, -0.157780559170492360, +-0.157731185263300460, -0.157681810961780610, -0.157632436266055780, -0.157583061176250290, -0.157533685692487160, -0.157484309814889780, -0.157434933543581230, -0.157385556878685770, +-0.157336179820326410, -0.157286802368626190, -0.157237424523709370, -0.157188046285699020, -0.157138667654718540, -0.157089288630890940, -0.157039909214340580, -0.156990529405190430, +-0.156941149203563950, -0.156891768609584180, -0.156842387623375410, -0.156793006245060680, -0.156743624474763420, -0.156694242312606670, -0.156644859758714760, -0.156595476813210700, +-0.156546093476217920, -0.156496709747859510, -0.156447325628259750, -0.156397941117541660, -0.156348556215828300, -0.156299170923243970, -0.156249785239911730, -0.156200399165955020, +-0.156151012701496870, -0.156101625846661620, -0.156052238601572300, -0.156002850966352410, -0.155953462941124940, -0.155904074526014260, -0.155854685721143390, -0.155805296526635800, +-0.155755906942614510, -0.155706516969203930, -0.155657126606527030, -0.155607735854707330, -0.155558344713867840, -0.155508953184132940, -0.155459561265625660, -0.155410168958469460, +-0.155360776262787410, -0.155311383178703850, -0.155261989706341840, -0.155212595845824420, -0.155163201597275950, -0.155113806960819470, -0.155064411936578470, -0.155015016524676000, +-0.154965620725236420, -0.154916224538382800, -0.154866827964238620, -0.154817431002926940, -0.154768033654572120, -0.154718635919297190, -0.154669237797225690, -0.154619839288480660, +-0.154570440393186460, -0.154521041111466170, -0.154471641443443270, -0.154422241389240820, -0.154372840948983210, -0.154323440122793500, -0.154274038910794780, -0.154224637313111370, +-0.154175235329866350, -0.154125832961183260, -0.154076430207185170, -0.154027027067996420, -0.153977623543740120, -0.153928219634539730, -0.153878815340518370, -0.153829410661800420, +-0.153780005598508930, -0.153730600150767420, -0.153681194318699000, -0.153631788102428000, -0.153582381502077560, -0.153532974517771150, -0.153483567149631850, -0.153434159397784100, +-0.153384751262350930, -0.153335342743455450, -0.153285933841222080, -0.153236524555773830, -0.153187114887234300, -0.153137704835726530, -0.153088294401374920, -0.153038883584302590, +-0.152989472384633060, -0.152940060802489420, -0.152890648837996050, -0.152841236491276070, -0.152791823762452980, -0.152742410651649900, -0.152692997158991230, -0.152643583284600070, +-0.152594169028599960, -0.152544754391113980, -0.152495339372266530, -0.152445923972180760, -0.152396508190980190, -0.152347092028787880, -0.152297675485728280, -0.152248258561924530, +-0.152198841257499660, -0.152149423572578130, -0.152100005507283060, -0.152050587061737960, -0.152001168236065960, -0.151951749030391460, -0.151902329444837610, -0.151852909479527930, +-0.151803489134585550, -0.151754068410134860, -0.151704647306299010, -0.151655225823201570, -0.151605803960965600, -0.151556381719715550, -0.151506959099574540, -0.151457536100666150, +-0.151408112723113500, -0.151358688967040970, -0.151309264832571730, -0.151259840319828890, -0.151210415428936900, -0.151160990160018850, -0.151111564513198350, -0.151062138488598480, +-0.151012712086343730, -0.150963285306557170, -0.150913858149362400, -0.150864430614882560, -0.150815002703242080, -0.150765574414564090, -0.150716145748972160, -0.150666716706589430, +-0.150617287287540340, -0.150567857491948040, -0.150518427319936090, -0.150468996771627640, -0.150419565847147140, -0.150370134546617710, -0.150320702870162530, -0.150271270817906010, +-0.150221838389971300, -0.150172405586482010, -0.150122972407561280, -0.150073538853333550, -0.150024104923921990, -0.149974670619450130, -0.149925235940041170, -0.149875800885819560, +-0.149826365456908470, -0.149776929653431450, -0.149727493475511650, -0.149678056923273570, -0.149628619996840350, -0.149579182696335580, -0.149529745021882400, -0.149480306973605310, +-0.149430868551627460, -0.149381429756071990, -0.149331990587063400, -0.149282551044724790, -0.149233111129179840, -0.149183670840551670, -0.149134230178964770, -0.149084789144542260, +-0.149035347737407810, -0.148985905957684540, -0.148936463805496940, -0.148887021280968200, -0.148837578384221870, -0.148788135115381190, -0.148738691474570610, -0.148689247461913280, +-0.148639803077532830, -0.148590358321552460, -0.148540913194096620, -0.148491467695288480, -0.148442021825251680, -0.148392575584109400, -0.148343128971986120, -0.148293681989005000, +-0.148244234635289240, -0.148194786910963360, -0.148145338816150500, -0.148095890350974260, -0.148046441515557880, -0.147996992310025830, -0.147947542734501310, -0.147898092789107930, +-0.147848642473968890, -0.147799191789208670, -0.147749740734950450, -0.147700289311317900, -0.147650837518434190, -0.147601385356423840, -0.147551932825409990, -0.147502479925516320, +-0.147453026656866020, -0.147403573019583590, -0.147354119013792250, -0.147304664639615140, -0.147255209897176800, -0.147205754786600470, -0.147156299308009750, -0.147106843461527830, +-0.147057387247279240, -0.147007930665387170, -0.146958473715975290, -0.146909016399166790, -0.146859558715086160, -0.146810100663856660, -0.146760642245601900, -0.146711183460445090, +-0.146661724308510770, -0.146612264789922150, -0.146562804904802860, -0.146513344653276120, -0.146463884035466420, -0.146414423051497070, -0.146364961701491190, -0.146315499985573330, +-0.146266037903866750, -0.146216575456495080, -0.146167112643581510, -0.146117649465250600, -0.146068185921625570, -0.146018722012830090, -0.145969257738987330, -0.145919793100221910, +-0.145870328096656980, -0.145820862728416240, -0.145771396995622890, -0.145721930898401490, -0.145672464436875290, -0.145622997611167900, -0.145573530421402590, -0.145524062867703860, +-0.145474594950195020, -0.145425126668999680, -0.145375658024241070, -0.145326189016043740, -0.145276719644530980, -0.145227249909825970, -0.145177779812053260, -0.145128309351336110, +-0.145078838527798180, -0.145029367341562710, -0.144979895792754280, -0.144930423881496070, -0.144880951607911840, -0.144831478972124780, -0.144782005974259470, -0.144732532614439140, +-0.144683058892787490, -0.144633584809427730, -0.144584110364484460, -0.144534635558080910, -0.144485160390340760, -0.144435684861387280, -0.144386208971345050, -0.144336732720337260, +-0.144287256108487220, -0.144237779135919480, -0.144188301802757300, -0.144138824109124350, -0.144089346055143900, -0.144039867640940510, -0.143990388866637480, -0.143940909732358460, +-0.143891430238226730, -0.143841950384366870, -0.143792470170902130, -0.143742989597956230, -0.143693508665652390, -0.143644027374115250, -0.143594545723468000, -0.143545063713834410, +-0.143495581345337710, -0.143446098618102510, -0.143396615532252080, -0.143347132087909640, -0.143297648285199810, -0.143248164124245870, -0.143198679605171520, -0.143149194728100030, +-0.143099709493156010, -0.143050223900462680, -0.143000737950143810, -0.142951251642322670, -0.142901764977123810, -0.142852277954670560, -0.142802790575086630, -0.142753302838495240, +-0.142703814745021060, -0.142654326294787360, -0.142604837487917800, -0.142555348324535730, -0.142505858804765740, -0.142456368928731090, -0.142406878696555080, -0.142357388108362320, +-0.142307897164276080, -0.142258405864420100, -0.142208914208917650, -0.142159422197893380, -0.142109929831470560, -0.142060437109772900, -0.142010944032923690, -0.141961450601047590, +-0.141911956814267850, -0.141862462672708220, -0.141812968176491970, -0.141763473325743770, -0.141713978120586890, -0.141664482561145060, -0.141614986647541570, -0.141565490379901040, +-0.141515993758346810, -0.141466496783002600, -0.141416999453991690, -0.141367501771438750, -0.141318003735467020, -0.141268505346199860, -0.141219006603761880, -0.141169507508276370, +-0.141120008059867100, -0.141070508258657360, -0.141021008104771810, -0.140971507598333710, -0.140922006739466870, -0.140872505528294560, -0.140823003964941430, -0.140773502049530790, +-0.140723999782186390, -0.140674497163031570, -0.140624994192190910, -0.140575490869787790, -0.140525987195945950, -0.140476483170788670, -0.140426978794440660, -0.140377474067025170, +-0.140327968988665590, -0.140278463559486500, -0.140228957779611250, -0.140179451649163620, -0.140129945168266910, -0.140080438337045780, -0.140030931155623570, -0.139981423624124020, +-0.139931915742670470, -0.139882407511387560, -0.139832898930398660, -0.139783389999827480, -0.139733880719797390, -0.139684371090433050, -0.139634861111857800, -0.139585350784195370, +-0.139535840107569140, -0.139486329082103730, -0.139436817707922520, -0.139387305985148810, -0.139337793913907270, -0.139288281494321260, -0.139238768726514530, -0.139189255610610460, +-0.139139742146733690, -0.139090228335007530, -0.139040714175555830, -0.138991199668501900, -0.138941684813970430, -0.138892169612084730, -0.138842654062968580, -0.138793138166745380, +-0.138743621923539780, -0.138694105333475120, -0.138644588396675210, -0.138595071113263360, -0.138545553483364280, -0.138496035507101320, -0.138446517184598270, -0.138396998515978500, +-0.138347479501366670, -0.138297960140886130, -0.138248440434660250, -0.138198920382813730, -0.138149399985469910, -0.138099879242752550, -0.138050358154785090, -0.138000836721692170, +-0.137951314943597140, -0.137901792820623810, -0.137852270352895600, -0.137802747540537120, -0.137753224383671800, -0.137703700882423400, -0.137654177036915320, -0.137604652847272220, +-0.137555128313617490, -0.137505603436074960, -0.137456078214767960, -0.137406552649821210, -0.137357026741358080, -0.137307500489501970, -0.137257973894377520, -0.137208446956108120, +-0.137158919674817640, -0.137109392050629390, -0.137059864083668100, -0.137010335774057190, -0.136960807121920410, -0.136911278127381160, -0.136861748790564170, -0.136812219111592800, +-0.136762689090590920, -0.136713158727681830, -0.136663628022990310, -0.136614096976639700, -0.136564565588753880, -0.136515033859456180, -0.136465501788871320, -0.136415969377122750, +-0.136366436624333790, -0.136316903530629170, -0.136267370096132300, -0.136217836320967010, -0.136168302205256690, -0.136118767749126040, -0.136069232952698490, -0.136019697816097850, +-0.135970162339447530, -0.135920626522872230, -0.135871090366495360, -0.135821553870440790, -0.135772017034831880, -0.135722479859793380, -0.135672942345448660, -0.135623404491921590, +-0.135573866299335570, -0.135524327767815340, -0.135474788897484270, -0.135425249688465810, -0.135375710140884650, -0.135326170254864210, -0.135276630030528370, -0.135227089468000490, +-0.135177548567405330, -0.135128007328866290, -0.135078465752507260, -0.135028923838451610, -0.134979381586824070, -0.134929838997748100, -0.134880296071347520, -0.134830752807745790, +-0.134781209207067570, -0.134731665269436360, -0.134682120994975980, -0.134632576383809850, -0.134583031436062730, -0.134533486151858030, -0.134483940531319620, -0.134434394574570900, +-0.134384848281736660, -0.134335301652940280, -0.134285754688305200, -0.134236207387956190, -0.134186659752016660, -0.134137111780610470, -0.134087563473861080, -0.134038014831893200, +-0.133988465854830290, -0.133938916542796220, -0.133889366895914410, -0.133839816914309630, -0.133790266598105310, -0.133740715947425310, -0.133691164962393080, -0.133641613643133400, +-0.133592061989769670, -0.133542510002425780, -0.133492957681225180, -0.133443405026292650, -0.133393852037751590, -0.133344298715725450, -0.133294745060339000, -0.133245191071715700, +-0.133195636749979420, -0.133146082095253610, -0.133096527107663040, -0.133046971787331130, -0.132997416134381820, -0.132947860148938500, -0.132898303831126000, -0.132848747181067710, +-0.132799190198887580, -0.132749632884709010, -0.132700075238656820, -0.132650517260854420, -0.132600958951425730, -0.132551400310494230, -0.132501841338184660, -0.132452282034620480, +-0.132402722399925150, -0.132353162434223460, -0.132303602137638840, -0.132254041510295240, -0.132204480552316090, -0.132154919263826190, -0.132105357644948990, -0.132055795695808390, +-0.132006233416527840, -0.131956670807232170, -0.131907107868044830, -0.131857544599089690, -0.131807981000490270, -0.131758417072371350, -0.131708852814856360, -0.131659288228069240, +-0.131609723312133470, -0.131560158067173830, -0.131510592493313820, -0.131461026590677290, -0.131411460359387780, -0.131361893799570060, -0.131312326911347590, -0.131262759694843860, +-0.131213192150183680, -0.131163624277490510, -0.131114056076888280, -0.131064487548500470, -0.131014918692451910, -0.130965349508866010, -0.130915779997866770, -0.130866210159577640, +-0.130816639994123410, -0.130767069501627560, -0.130717498682214080, -0.130667927536006370, -0.130618356063129330, -0.130568784263706360, -0.130519212137861440, -0.130469639685718060, +-0.130420066907401020, -0.130370493803033780, -0.130320920372739900, -0.130271346616644160, -0.130221772534870020, -0.130172198127541490, -0.130122623394782010, -0.130073048336716400, +-0.130023472953468190, -0.129973897245161290, -0.129924321211919190, -0.129874744853866740, -0.129825168171127440, -0.129775591163825200, -0.129726013832083540, -0.129676436176027310, +-0.129626858195779960, -0.129577279891465470, -0.129527701263207370, -0.129478122311130430, -0.129428543035358200, -0.129378963436014150, -0.129329383513223150, -0.129279803267108690, +-0.129230222697794720, -0.129180641805404760, -0.129131060590063600, -0.129081479051894820, -0.129031897191022340, -0.128982315007569680, -0.128932732501661680, -0.128883149673421820, +-0.128833566522974120, -0.128783983050442030, -0.128734399255950450, -0.128684815139622850, -0.128635230701583230, -0.128585645941955070, -0.128536060860863250, -0.128486475458431280, +-0.128436889734783120, -0.128387303690042310, -0.128337717324333660, -0.128288130637780720, -0.128238543630507020, -0.128188956302637410, -0.128139368654295400, -0.128089780685604950, +-0.128040192396689620, -0.127990603787674270, -0.127941014858682390, -0.127891425609837990, -0.127841836041264560, -0.127792246153086990, -0.127742655945428800, -0.127693065418413990, +-0.127643474572166070, -0.127593883406809880, -0.127544291922469020, -0.127494700119267390, -0.127445107997328610, -0.127395515556777470, -0.127345922797737540, -0.127296329720332390, +-0.127246736324686830, -0.127197142610924440, -0.127147548579169180, -0.127097954229544650, -0.127048359562175640, -0.126998764577185730, -0.126949169274698900, -0.126899573654838730, +-0.126849977717730070, -0.126800381463496450, -0.126750784892261880, -0.126701188004149900, -0.126651590799285400, -0.126601993277791920, -0.126552395439793460, -0.126502797285413580, +-0.126453198814777120, -0.126403600028007680, -0.126354000925228800, -0.126304401506565360, -0.126254801772140910, -0.126205201722079470, -0.126155601356504580, -0.126106000675541120, +-0.126056399679312650, -0.126006798367943210, -0.125957196741556310, -0.125907594800276860, -0.125857992544228410, -0.125808389973535000, -0.125758787088320170, -0.125709183888708830, +-0.125659580374824500, -0.125609976546791240, -0.125560372404732580, -0.125510767948773440, -0.125461163179037380, -0.125411558095647970, -0.125361952698730100, -0.125312346988407370, +-0.125262740964803750, -0.125213134628042840, -0.125163527978249560, -0.125113921015547440, -0.125064313740060500, -0.125014706151912350, -0.124965098251227880, -0.124915490038130670, +-0.124865881512744720, -0.124816272675193630, -0.124766663525602310, -0.124717054064094320, -0.124667444290793700, -0.124617834205824020, -0.124568223809310210, -0.124518613101375820, +-0.124469002082144910, -0.124419390751741060, -0.124369779110289170, -0.124320167157912820, -0.124270554894735620, -0.124220942320882470, -0.124171329436476980, -0.124121716241643160, +-0.124072102736504600, -0.124022488921186220, -0.123972874795811640, -0.123923260360504860, -0.123873645615389480, -0.123824030560590420, -0.123774415196231310, -0.123724799522436150, +-0.123675183539328550, -0.123625567247033430, -0.123575950645674390, -0.123526333735375480, -0.123476716516260300, -0.123427098988453750, -0.123377481152079470, -0.123327863007261030, +-0.123278244554123400, -0.123228625792790130, -0.123179006723385320, -0.123129387346032540, -0.123079767660856740, -0.123030147667981510, -0.122980527367530910, -0.122930906759628560, +-0.122881285844399380, -0.122831664621966980, -0.122782043092455430, -0.122732421255988320, -0.122682799112690600, -0.122633176662685890, -0.122583553906098240, -0.122533930843051250, +-0.122484307473669880, -0.122434683798077750, -0.122385059816398470, -0.122335435528756980, -0.122285810935276880, -0.122236186036082270, -0.122186560831296750, -0.122136935321045280, +-0.122087309505451460, -0.122037683384639370, -0.121988056958732630, -0.121938430227856190, -0.121888803192133670, -0.121839175851689140, -0.121789548206646240, -0.121739920257129920, +-0.121690292003263770, -0.121640663445171910, -0.121591034582977940, -0.121541405416806830, -0.121491775946782220, -0.121442146173028150, -0.121392516095668280, -0.121342885714827560, +-0.121293255030629630, -0.121243624043198120, -0.121193992752657990, -0.121144361159132880, -0.121094729262746860, -0.121045097063623580, -0.120995464561888010, -0.120945831757663750, +-0.120896198651074940, -0.120846565242245170, -0.120796931531299450, -0.120747297518361390, -0.120697663203555090, -0.120648028587004190, -0.120598393668833650, -0.120548758449167130, +-0.120499122928128710, -0.120449487105842050, -0.120399850982432120, -0.120350214558022560, -0.120300577832737010, -0.120250940806700470, -0.120201303480036560, -0.120151665852869400, +-0.120102027925322650, -0.120052389697521260, -0.120002751169588890, -0.119953112341649650, -0.119903473213827190, -0.119853833786246480, -0.119804194059031190, -0.119754554032305410, +-0.119704913706192810, -0.119655273080818360, -0.119605632156305740, -0.119555990932779020, -0.119506349410361900, -0.119456707589179340, -0.119407065469355010, -0.119357423051012570, +-0.119307780334277020, -0.119258137319272030, -0.119208494006121680, -0.119158850394949670, -0.119109206485880960, -0.119059562279039230, -0.119009917774548610, -0.118960272972532750, +-0.118910627873116640, -0.118860982476423970, -0.118811336782578840, -0.118761690791704930, -0.118712044503927240, -0.118662397919369430, -0.118612751038155620, -0.118563103860409500, +-0.118513456386256060, -0.118463808615818980, -0.118414160549221940, -0.118364512186589930, -0.118314863528046640, -0.118265214573716210, -0.118215565323722280, -0.118165915778189880, +-0.118116265937242710, -0.118066615801004860, -0.118016965369600030, -0.117967314643153230, -0.117917663621788140, -0.117868012305628910, -0.117818360694799190, -0.117768708789424010, +-0.117719056589627060, -0.117669404095532460, -0.117619751307263920, -0.117570098224946450, -0.117520444848703720, -0.117470791178659880, -0.117421137214938620, -0.117371482957664960, +-0.117321828406962610, -0.117272173562955220, -0.117222518425767850, -0.117172862995524190, -0.117123207272348360, -0.117073551256364080, -0.117023894947696360, -0.116974238346468900, +-0.116924581452805850, -0.116874924266830910, -0.116825266788669090, -0.116775609018444100, -0.116725950956280090, -0.116676292602300770, -0.116626633956631160, -0.116576975019394960, +-0.116527315790716320, -0.116477656270718950, -0.116427996459527880, -0.116378336357266830, -0.116328675964059480, -0.116279015280030900, -0.116229354305304760, -0.116179693040005250, +-0.116130031484256060, -0.116080369638182250, -0.116030707501907500, -0.115981045075555980, -0.115931382359251410, -0.115881719353118820, -0.115832056057281930, -0.115782392471864910, +-0.115732728596991460, -0.115683064432786640, -0.115633399979374150, -0.115583735236878160, -0.115534070205422400, -0.115484404885131900, -0.115434739276130390, -0.115385073378541580, +-0.115335407192490540, -0.115285740718100980, -0.115236073955497060, -0.115186406904802520, -0.115136739566142400, -0.115087071939640430, -0.115037404025420800, -0.114987735823607200, +-0.114938067334324700, -0.114888398557697040, -0.114838729493848380, -0.114789060142902450, -0.114739390504984330, -0.114689720580217720, -0.114640050368726810, -0.114590379870635330, +-0.114540709086068340, -0.114491038015149580, -0.114441366658003220, -0.114391695014753020, -0.114342023085524010, -0.114292350870439940, -0.114242678369624570, -0.114193005583202920, +-0.114143332511298770, -0.114093659154036280, -0.114043985511539210, -0.113994311583932630, -0.113944637371340250, -0.113894962873886270, -0.113845288091694460, -0.113795613024889870, +-0.113745937673596240, -0.113696262037937770, -0.113646586118038200, -0.113596909914022600, -0.113547233426014750, -0.113497556654138800, -0.113447879598518510, -0.113398202259278980, +-0.113348524636543920, -0.113298846730437120, -0.113249168541083650, -0.113199490068607260, -0.113149811313132130, -0.113100132274782050, -0.113050452953682070, -0.113000773349955950, +-0.112951093463727910, -0.112901413295121700, -0.112851732844262380, -0.112802052111273740, -0.112752371096279960, -0.112702689799404810, -0.112653008220773380, -0.112603326360509450, +-0.112553644218737180, -0.112503961795580370, -0.112454279091164090, -0.112404596105612110, -0.112354912839048210, -0.112305229291597460, -0.112255545463383640, -0.112205861354530950, +-0.112156176965163180, -0.112106492295405400, -0.112056807345381380, -0.112007122115215350, -0.111957436605031090, -0.111907750814953660, -0.111858064745106860, -0.111808378395614890, +-0.111758691766601540, -0.111709004858191890, -0.111659317670509750, -0.111609630203679300, -0.111559942457824340, -0.111510254433069960, -0.111460566129539950, -0.111410877547358080, +-0.111361188686649460, -0.111311499547537860, -0.111261810130147520, -0.111212120434602210, -0.111162430461027040, -0.111112740209545800, -0.111063049680282700, -0.111013358873361540, +-0.110963667788907430, -0.110913976427044130, -0.110864284787895910, -0.110814592871586530, -0.110764900678241100, -0.110715208207983430, -0.110665515460937740, -0.110615822437227810, +-0.110566129136978770, -0.110516435560314420, -0.110466741707358970, -0.110417047578236230, -0.110367353173071290, -0.110317658491987990, -0.110267963535110110, -0.110218268302562730, +-0.110168572794469700, -0.110118877010955240, -0.110069180952143140, -0.110019484618158540, -0.109969788009125210, -0.109920091125167430, -0.109870393966408980, -0.109820696532974970, +-0.109770998824989220, -0.109721300842575990, -0.109671602585859050, -0.109621904054963550, -0.109572205250013290, -0.109522506171132520, -0.109472806818445040, -0.109423107192075990, +-0.109373407292149170, -0.109323707118788390, -0.109274006672118770, -0.109224305952264150, -0.109174604959348760, -0.109124903693496420, -0.109075202154832250, -0.109025500343480090, +-0.108975798259564170, -0.108926095903208310, -0.108876393274537660, -0.108826690373676020, -0.108776987200747670, -0.108727283755876400, -0.108677580039187360, -0.108627876050804370, +-0.108578171790851690, -0.108528467259453140, -0.108478762456733870, -0.108429057382817680, -0.108379352037828420, -0.108329646421891200, -0.108279940535129890, -0.108230234377668710, +-0.108180527949631510, -0.108130821251143430, -0.108081114282328310, -0.108031407043310380, -0.107981699534213510, -0.107931991755162830, -0.107882283706282150, -0.107832575387695780, +-0.107782866799527530, -0.107733157941902550, -0.107683448814944680, -0.107633739418778180, -0.107584029753526910, -0.107534319819315980, -0.107484609616269270, -0.107434899144511030, +-0.107385188404165100, -0.107335477395356630, -0.107285766118209490, -0.107236054572847480, -0.107186342759395770, -0.107136630677978210, -0.107086918328719070, -0.107037205711742190, +-0.106987492827172740, -0.106937779675134560, -0.106888066255751940, -0.106838352569148700, -0.106788638615450020, -0.106738924394779750, -0.106689209907262160, -0.106639495153021110, +-0.106589780132181760, -0.106540064844867970, -0.106490349291204020, -0.106440633471313730, -0.106390917385322320, -0.106341201033353610, -0.106291484415531460, -0.106241767531981040, +-0.106192050382826200, -0.106142332968191230, -0.106092615288199990, -0.106042897342977660, -0.105993179132648070, -0.105943460657335540, -0.105893741917163910, -0.105844022912258390, +-0.105794303642742800, -0.105744584108741440, -0.105694864310378180, -0.105645144247778210, -0.105595423921065380, -0.105545703330363990, -0.105495982475797900, -0.105446261357492290, +-0.105396539975571020, -0.105346818330157980, -0.105297096421378330, -0.105247374249355930, -0.105197651814215090, -0.105147929116079690, -0.105098206155074900, -0.105048482931324600, +-0.104998759444953100, -0.104949035696084240, -0.104899311684843250, -0.104849587411353970, -0.104799862875740740, -0.104750138078127400, -0.104700413018639150, -0.104650687697399870, +-0.104600962114533870, -0.104551236270165030, -0.104501510164418540, -0.104451783797418280, -0.104402057169288100, -0.104352330280153230, -0.104302603130137530, -0.104252875719365340, +-0.104203148047960490, -0.104153420116048240, -0.104103691923752420, -0.104053963471197390, -0.104004234758506980, -0.103954505785806450, -0.103904776553219640, -0.103855047060870900, +-0.103805317308884090, -0.103755587297384450, -0.103705857026495820, -0.103656126496342550, -0.103606395707048530, -0.103556664658738960, -0.103506933351537720, -0.103457201785569160, +-0.103407469960957150, -0.103357737877826900, -0.103308005536302320, -0.103258272936507270, -0.103208540078566990, -0.103158806962605350, -0.103109073588746700, -0.103059339957114910, +-0.103009606067835230, -0.102959871921031520, -0.102910137516828150, -0.102860402855348980, -0.102810667936719240, -0.102760932761062840, -0.102711197328504100, -0.102661461639166940, +-0.102611725693176560, -0.102561989490656850, -0.102512253031732180, -0.102462516316526450, -0.102412779345164850, -0.102363042117771310, -0.102313304634469720, -0.102263566895385310, +-0.102213828900641980, -0.102164090650364090, -0.102114352144675530, -0.102064613383701530, -0.102014874367565980, -0.101965135096393270, -0.101915395570307250, -0.101865655789433210, +-0.101815915753895020, -0.101766175463817040, -0.101716434919323180, -0.101666694120538680, -0.101616953067587430, -0.101567211760593810, -0.101517470199681710, -0.101467728384976390, +-0.101417986316601750, -0.101368243994681680, -0.101318501419341470, -0.101268758590704990, -0.101219015508896610, -0.101169272174040260, -0.101119528586261160, -0.101069784745683250, +-0.101020040652430880, -0.100970296306627960, -0.100920551708399740, -0.100870806857870140, -0.100821061755163520, -0.100771316400403810, -0.100721570793716260, -0.100671824935224770, +-0.100622078825053710, -0.100572332463327030, -0.100522585850169950, -0.100472838985706410, -0.100423091870060770, -0.100373344503356960, -0.100323596885720230, -0.100273849017274500, +-0.100224100898143720, -0.100174352528453120, -0.100124603908326640, -0.100074855037888650, -0.100025105917263090, -0.099975356546575203, -0.099925606925948915, -0.099875857055508624, +-0.099826106935378231, -0.099776356565683025, -0.099726605946546920, -0.099676855078094304, -0.099627103960449118, -0.099577352593736609, -0.099527600978080707, -0.099477849113605812, +-0.099428097000435853, -0.099378344638696089, -0.099328592028510465, -0.099278839170002922, -0.099229086063298721, -0.099179332708521806, -0.099129579105796561, -0.099079825255246917, +-0.099030071156998162, -0.098980316811174224, -0.098930562217899504, -0.098880807377297916, -0.098831052289494764, -0.098781296954613990, -0.098731541372779966, -0.098681785544116635, +-0.098632029468749299, -0.098582273146801888, -0.098532516578398788, -0.098482759763663955, -0.098433002702722663, -0.098383245395698871, -0.098333487842716519, -0.098283730043900883, +-0.098233971999375932, -0.098184213709266041, -0.098134455173695193, -0.098084696392788634, -0.098034937366670336, -0.097985178095464698, -0.097935418579295663, -0.097885658818288535, +-0.097835898812567254, -0.097786138562256222, -0.097736378067479410, -0.097686617328362091, -0.097636856345028236, -0.097587095117602232, -0.097537333646208049, -0.097487571930970976, +-0.097437809972014969, -0.097388047769463998, -0.097338285323443352, -0.097288522634076988, -0.097238759701489333, -0.097188996525804316, -0.097139233107147255, -0.097089469445642118, +-0.097039705541413307, -0.096989941394584792, -0.096940177005281861, -0.096890412373628484, -0.096840647499749077, -0.096790882383767610, -0.096741117025809384, -0.096691351425998356, +-0.096641585584458956, -0.096591819501315151, -0.096542053176692233, -0.096492286610714198, -0.096442519803505433, -0.096392752755189923, -0.096342985465892983, -0.096293217935738570, +-0.096243450164850683, -0.096193682153354609, -0.096143913901374320, -0.096094145409034257, -0.096044376676458376, -0.095994607703772009, -0.095944838491099110, -0.095895069038564124, +-0.095845299346291032, -0.095795529414405112, -0.095745759243030387, -0.095695988832291259, -0.095646218182311712, -0.095596447293217063, -0.095546676165131295, -0.095496904798178836, +-0.095447133192483685, -0.095397361348171131, -0.095347589265365171, -0.095297816944189803, -0.095248044384770331, -0.095198271587230751, -0.095148498551695493, -0.095098725278288540, +-0.095048951767135223, -0.094999178018359526, -0.094949404032085891, -0.094899629808438288, -0.094849855347542061, -0.094800080649521196, -0.094750305714500133, -0.094700530542602857, +-0.094650755133954698, -0.094600979488679640, -0.094551203606902154, -0.094501427488746209, -0.094451651134337136, -0.094401874543798933, -0.094352097717255598, -0.094302320654832475, +-0.094252543356653534, -0.094202765822843246, -0.094152988053525608, -0.094103210048825922, -0.094053431808868229, -0.094003653333776943, -0.093953874623676090, -0.093904095678690985, +-0.093854316498945656, -0.093804537084564515, -0.093754757435671604, -0.093704977552392238, -0.093655197434850429, -0.093605417083170619, -0.093555636497476835, -0.093505855677894406, +-0.093456074624547317, -0.093406293337560065, -0.093356511817056620, -0.093306730063162341, -0.093256948076001239, -0.093207165855697327, -0.093157383402375948, -0.093107600716161101, +-0.093057817797177256, -0.093008034645548424, -0.092958251261399949, -0.092908467644855844, -0.092858683796040564, -0.092808899715078136, -0.092759115402093903, -0.092709330857211877, +-0.092659546080556529, -0.092609761072251884, -0.092559975832423258, -0.092510190361194705, -0.092460404658690681, -0.092410618725035185, -0.092360832560353601, -0.092311046164769928, +-0.092261259538408205, -0.092211472681393764, -0.092161685593850642, -0.092111898275903312, -0.092062110727675797, -0.092012322949293443, -0.091962534940880289, -0.091912746702560791, +-0.091862958234458975, -0.091813169536700212, -0.091763380609408529, -0.091713591452708396, -0.091663802066723837, -0.091614012451580226, -0.091564222607401574, -0.091514432534312365, +-0.091464642232436638, -0.091414851701899738, -0.091365060942825718, -0.091315269955338604, -0.091265478739563755, -0.091215687295625208, -0.091165895623647436, -0.091116103723754491, +-0.091066311596071731, -0.091016519240723182, -0.090966726657833341, -0.090916933847526249, -0.090867140809927249, -0.090817347545160410, -0.090767554053350200, -0.090717760334620659, +-0.090667966389097160, -0.090618172216903742, -0.090568377818164902, -0.090518583193004667, -0.090468788341548423, -0.090418993263920208, -0.090369197960244063, -0.090319402430645360, +-0.090269606675248165, -0.090219810694176950, -0.090170014487555752, -0.090120218055509974, -0.090070421398163653, -0.090020624515641273, -0.089970827408066889, -0.089921030075565872, +-0.089871232518262290, -0.089821434736280625, -0.089771636729744933, -0.089721838498780584, -0.089672040043511647, -0.089622241364062605, -0.089572442460557511, -0.089522643333121765, +-0.089472843981879407, -0.089423044406954935, -0.089373244608472416, -0.089323444586557221, -0.089273644341333419, -0.089223843872925063, -0.089174043181457552, -0.089124242267054912, +-0.089074441129841683, -0.089024639769941905, -0.088974838187480962, -0.088925036382582923, -0.088875234355372298, -0.088825432105973143, -0.088775629634510855, -0.088725826941109490, +-0.088676024025893557, -0.088626220888987126, -0.088576417530515580, -0.088526613950602989, -0.088476810149373863, -0.088427006126952284, -0.088377201883463610, -0.088327397419031950, +-0.088277592733781343, -0.088227787827837204, -0.088177982701323585, -0.088128177354365012, -0.088078371787085566, -0.088028565999610620, -0.087978759992064254, -0.087928953764571008, +-0.087879147317254921, -0.087829340650241408, -0.087779533763654549, -0.087729726657618856, -0.087679919332258396, -0.087630111787698584, -0.087580304024063499, -0.087530496041477640, +-0.087480687840065116, -0.087430879419951299, -0.087381070781260298, -0.087331261924116166, -0.087281452848644331, -0.087231643554968846, -0.087181834043214265, -0.087132024313504669, +-0.087082214365965430, -0.087032404200720670, -0.086982593817894902, -0.086932783217612206, -0.086882972399997982, -0.086833161365176340, -0.086783350113271790, -0.086733538644408414, +-0.086683726958711654, -0.086633915056305563, -0.086584102937314680, -0.086534290601863101, -0.086484478050076252, -0.086434665282078188, -0.086384852297993475, -0.086335039097946181, +-0.086285225682061734, -0.086235412050464227, -0.086185598203277744, -0.086135784140627697, -0.086085969862638209, -0.086036155369433778, -0.085986340661138527, -0.085936525737877870, +-0.085886710599775887, -0.085836895246957146, -0.085787079679545700, -0.085737263897667018, -0.085687447901445168, -0.085637631691004704, -0.085587815266469705, -0.085537998627965614, +-0.085488181775616540, -0.085438364709546993, -0.085388547429881112, -0.085338729936744295, -0.085288912230260652, -0.085239094310554278, -0.085189276177750628, -0.085139457831973769, +-0.085089639273348283, -0.085039820501998251, -0.084990001518049099, -0.084940182321624952, -0.084890362912850362, -0.084840543291849396, -0.084790723458747538, -0.084740903413668855, +-0.084691083156737929, -0.084641262688078839, -0.084591442007817041, -0.084541621116076632, -0.084491800012982177, -0.084441978698657771, -0.084392157173228871, -0.084342335436819571, +-0.084292513489553994, -0.084242691331557581, -0.084192868962954429, -0.084143046383869116, -0.084093223594425739, -0.084043400594749740, -0.083993577384965240, -0.083943753965196807, +-0.083893930335568537, -0.083844106496205884, -0.083794282447232971, -0.083744458188774351, -0.083694633720954134, -0.083644809043897789, -0.083594984157729410, -0.083545159062573579, +-0.083495333758554405, -0.083445508245797342, -0.083395682524426501, -0.083345856594566017, -0.083296030456341333, -0.083246204109876570, -0.083196377555296297, -0.083146550792724636, +-0.083096723822287041, -0.083046896644107637, -0.082997069258311004, -0.082947241665021237, -0.082897413864363820, -0.082847585856462860, -0.082797757641442940, -0.082747929219428182, +-0.082698100590544055, -0.082648271754914668, -0.082598442712664588, -0.082548613463917980, -0.082498784008800272, -0.082448954347435599, -0.082399124479948543, -0.082349294406463242, +-0.082299464127105135, -0.082249633641998374, -0.082199802951267095, -0.082149972055036741, -0.082100140953431461, -0.082050309646575822, -0.082000478134593963, -0.081950646417611364, +-0.081900814495752150, -0.081850982369140887, -0.081801150037901726, -0.081751317502160151, -0.081701484762040269, -0.081651651817666676, -0.081601818669163509, -0.081551985316656236, +-0.081502151760269009, -0.081452318000126395, -0.081402484036352543, -0.081352649869072924, -0.081302815498411687, -0.081252980924492957, -0.081203146147442229, -0.081153311167383627, +-0.081103475984441759, -0.081053640598740748, -0.081003805010406077, -0.080953969219561897, -0.080904133226332803, -0.080854297030842917, -0.080804460633217737, -0.080754624033581413, +-0.080704787232058525, -0.080654950228773226, -0.080605113023850983, -0.080555275617415975, -0.080505438009592770, -0.080455600200505531, -0.080405762190279728, -0.080355923979039526, +-0.080306085566909061, -0.080256246954013830, -0.080206408140477983, -0.080156569126426117, -0.080106729911982380, -0.080056890497272271, -0.080007050882419925, -0.079957211067549966, +-0.079907371052786530, -0.079857530838255100, -0.079807690424079855, -0.079757849810385376, -0.079708008997295826, -0.079658167984936704, -0.079608326773432159, -0.079558485362906800, +-0.079508643753484792, -0.079458801945291604, -0.079408959938451415, -0.079359117733088833, -0.079309275329328008, -0.079259432727294438, -0.079209589927112287, -0.079159746928905719, +-0.079109903732800219, -0.079060060338919977, -0.079010216747389561, -0.078960372958333178, -0.078910528971876295, -0.078860684788143107, -0.078810840407258193, -0.078760995829345731, +-0.078711151054531234, -0.078661306082938851, -0.078611460914693204, -0.078561615549918459, -0.078511769988740127, -0.078461924231282371, -0.078412078277669786, -0.078362232128026579, +-0.078312385782478233, -0.078262539241148926, -0.078212692504162823, -0.078162845571645420, -0.078112998443720924, -0.078063151120513916, -0.078013303602148601, -0.077963455888750463, +-0.077913607980443680, -0.077863759877352876, -0.077813911579602241, -0.077764063087317259, -0.077714214400622136, -0.077664365519641454, -0.077614516444499432, -0.077564667175321553, +-0.077514817712232009, -0.077464968055355424, -0.077415118204815975, -0.077365268160739173, -0.077315417923249197, -0.077265567492470238, -0.077215716868527809, -0.077165866051546073, +-0.077116015041649680, -0.077066163838962809, -0.077016312443610971, -0.076966460855718344, -0.076916609075409578, -0.076866757102808839, -0.076816904938041650, -0.076767052581232190, +-0.076717200032505109, -0.076667347291984586, -0.076617494359796132, -0.076567641236063938, -0.076517787920912655, -0.076467934414466449, -0.076418080716850856, -0.076368226828190056, +-0.076318372748608254, -0.076268518478230948, -0.076218664017182358, -0.076168809365587106, -0.076118954523569385, -0.076069099491254732, -0.076019244268767314, -0.075969388856231793, +-0.075919533253772362, -0.075869677461514531, -0.075819821479582508, -0.075769965308100928, -0.075720108947193998, -0.075670252396987242, -0.075620395657604852, -0.075570538729171480, +-0.075520681611811302, -0.075470824305649872, -0.075420966810811382, -0.075371109127420469, -0.075321251255601351, -0.075271393195479541, -0.075221534947179244, -0.075171676510824681, +-0.075121817886541362, -0.075071959074453493, -0.075022100074685724, -0.074972240887362276, -0.074922381512608660, -0.074872521950549081, -0.074822662201308218, -0.074772802265010235, +-0.074722942141780699, -0.074673081831743815, -0.074623221335024220, -0.074573360651746134, -0.074523499782035083, -0.074473638726015284, -0.074423777483811390, -0.074373916055547606, +-0.074324054441349471, -0.074274192641341205, -0.074224330655647014, -0.074174468484392436, -0.074124606127701692, -0.074074743585699432, -0.074024880858509876, -0.073975017946258548, +-0.073925154849069682, -0.073875291567067930, -0.073825428100377510, -0.073775564449123948, -0.073725700613431491, -0.073675836593424776, -0.073625972389228023, -0.073576108000966783, +-0.073526243428765278, -0.073476378672748172, -0.073426513733039656, -0.073376648609765310, -0.073326783303049342, -0.073276917813015971, -0.073227052139790749, -0.073177186283497897, +-0.073127320244262092, -0.073077454022207528, -0.073027587617459769, -0.072977721030143050, -0.072927854260382022, -0.072877987308300932, -0.072828120174025290, -0.072778252857679374, +-0.072728385359387804, -0.072678517679274843, -0.072628649817466029, -0.072578781774085582, -0.072528913549258181, -0.072479045143108059, -0.072429176555760769, -0.072379307787340530, +-0.072329438837972021, -0.072279569707779476, -0.072229700396888460, -0.072179830905423181, -0.072129961233507886, -0.072080091381268127, -0.072030221348828138, -0.071980351136312598, +-0.071930480743845740, -0.071880610171553130, -0.071830739419558975, -0.071780868487987995, -0.071730997376964381, -0.071681126086613728, -0.071631254617060255, -0.071581382968428642, +-0.071531511140843135, -0.071481639134429287, -0.071431766949311346, -0.071381894585613989, -0.071332022043461452, -0.071282149322979299, -0.071232276424291779, -0.071182403347523127, +-0.071132530092798907, -0.071082656660243354, -0.071032783049981160, -0.070982909262136573, -0.070933035296835159, -0.070883161154201138, -0.070833286834359230, -0.070783412337433654, +-0.070733537663550006, -0.070683662812832504, -0.070633787785405841, -0.070583912581394265, -0.070534037200923355, -0.070484161644117346, -0.070434285911100944, -0.070384410001998368, +-0.070334533916935227, -0.070284657656035740, -0.070234781219424169, -0.070184904607226095, -0.070135027819565751, -0.070085150856567843, -0.070035273718356605, -0.069985396405057645, +-0.069935518916795170, -0.069885641253693911, -0.069835763415878105, -0.069785885403473330, -0.069736007216603849, -0.069686128855394353, -0.069636250319969076, -0.069586371610453626, +-0.069536492726972252, -0.069486613669649630, -0.069436734438610051, -0.069386855033979067, -0.069336975455880939, -0.069287095704440388, -0.069237215779781647, -0.069187335682030310, +-0.069137455411310625, -0.069087574967746868, -0.069037694351464618, -0.068987813562588138, -0.068937932601242105, -0.068888051467550809, -0.068838170161639831, -0.068788288683633431, +-0.068738407033656301, -0.068688525211832704, -0.068638643218288248, -0.068588761053147179, -0.068538878716534204, -0.068488996208573599, -0.068439113529390944, -0.068389230679110499, +-0.068339347657856986, -0.068289464465754651, -0.068239581102929103, -0.068189697569504604, -0.068139813865605414, -0.068089929991357129, -0.068040045946884037, -0.067990161732310817, +-0.067940277347761743, -0.067890392793362425, -0.067840508069237124, -0.067790623175510559, -0.067740738112306992, -0.067690852879752017, -0.067640967477969910, -0.067591081907085390, +-0.067541196167222720, -0.067491310258507506, -0.067441424181064011, -0.067391537935016954, -0.067341651520490611, -0.067291764937610590, -0.067241878186501153, -0.067191991267286574, +-0.067142104180092449, -0.067092216925043080, -0.067042329502263159, -0.066992441911876977, -0.066942554154010139, -0.066892666228786909, -0.066842778136332007, -0.066792889876769734, +-0.066743001450225659, -0.066693112856824097, -0.066643224096689740, -0.066593335169946893, -0.066543446076721136, -0.066493556817136770, -0.066443667391318517, -0.066393777799390652, +-0.066343888041478782, -0.066293998117707184, -0.066244108028200160, -0.066194217773083305, -0.066144327352480908, -0.066094436766517689, -0.066044546015317937, -0.065994655099007260, +-0.065944764017709948, -0.065894872771550733, -0.065844981360653879, -0.065795089785145033, -0.065745198045148445, -0.065695306140788862, -0.065645414072190586, -0.065595521839479212, +-0.065545629442779030, -0.065495736882214772, -0.065445844157910729, -0.065395951269992522, -0.065346058218584441, -0.065296165003811205, -0.065246271625797117, -0.065196378084667786, +-0.065146484380547529, -0.065096590513560607, -0.065046696483832642, -0.064996802291487951, -0.064946907936651241, -0.064897013419446828, -0.064847118740000320, -0.064797223898436021, +-0.064747328894878664, -0.064697433729452539, -0.064647538402283267, -0.064597642913495151, -0.064547747263212926, -0.064497851451560895, -0.064447955478664679, -0.064398059344648567, +-0.064348163049637322, -0.064298266593755204, -0.064248369977127878, -0.064198473199879619, -0.064148576262134743, -0.064098679164018860, -0.064048781905656285, -0.063998884487171753, +-0.063948986908689567, -0.063899089170335363, -0.063849191272233430, -0.063799293214508529, -0.063749394997284936, -0.063699496620688301, -0.063649598084842940, -0.063599699389873560, +-0.063549800535904505, -0.063499901523061397, -0.063450002351468526, -0.063400103021250639, -0.063350203532532068, -0.063300303885438419, -0.063250404080094025, -0.063200504116623160, +-0.063150603995151489, -0.063100703715803313, -0.063050803278703368, -0.063000902683975971, -0.062951001931746770, -0.062901101022140055, -0.062851199955280587, -0.062801298731292685, +-0.062751397350301968, -0.062701495812432770, -0.062651594117809822, -0.062601692266557443, -0.062551790258801282, -0.062501888094665656, -0.062451985774275298, -0.062402083297754533, +-0.062352180665229004, -0.062302277876823027, -0.062252374932661350, -0.062202471832868297, -0.062152568577569504, -0.062102665166889288, -0.062052761600951974, -0.062002857879883196, +-0.061952954003807272, -0.061903049972848963, -0.061853145787132580, -0.061803241446783785, -0.061753336951926883, -0.061703432302686635, -0.061653527499187365, -0.061603622541554721, +-0.061553717429913023, -0.061503812164387030, -0.061453906745101060, -0.061404001172180769, -0.061354095445750476, -0.061304189565934947, -0.061254283532858493, -0.061204377346646778, +-0.061154471007424119, -0.061104564515314840, -0.061054657870444597, -0.061004751072937700, -0.060954844122918933, -0.060904937020512612, -0.060855029765844386, -0.060805122359038587, +-0.060755214800219989, -0.060705307089512904, -0.060655399227042994, -0.060605491212934591, -0.060555583047312456, -0.060505674730300926, -0.060455766262025645, -0.060405857642610951, +-0.060355948872181618, -0.060306039950861964, -0.060256130878777653, -0.060206221656053015, -0.060156312282812381, -0.060106402759181408, -0.060056493085284435, -0.060006583261246221, +-0.059956673287191106, -0.059906763163244760, -0.059856852889531499, -0.059806942466176106, -0.059757031893302913, -0.059707121171037582, -0.059657210299504451, -0.059607299278828296, +-0.059557388109133448, -0.059507476790545570, -0.059457565323189007, -0.059407653707188528, -0.059357741942668470, -0.059307830029754496, -0.059257917968570953, -0.059208005759242170, +-0.059158093401893819, -0.059108180896650230, -0.059058268243636192, -0.059008355442976036, -0.058958442494795441, -0.058908529399218736, -0.058858616156370704, -0.058808702766375689, +-0.058758789229359371, -0.058708875545446071, -0.058658961714760580, -0.058609047737427249, -0.058559133613571734, -0.058509219343318389, -0.058459304926791994, -0.058409390364116895, +-0.058359475655418769, -0.058309560800821947, -0.058259645800451225, -0.058209730654430941, -0.058159815362886780, -0.058109899925943079, -0.058059984343724183, -0.058010068616355770, +-0.057960152743962184, -0.057910236726668222, -0.057860320564598215, -0.057810404257877861, -0.057760487806631490, -0.057710571210983899, -0.057660654471059440, -0.057610737586983783, +-0.057560820558881287, -0.057510903386876741, -0.057460986071094490, -0.057411068611660218, -0.057361151008698277, -0.057311233262333450, -0.057261315372690108, -0.057211397339893909, +-0.057161479164069225, -0.057111560845340401, -0.057061642383833114, -0.057011723779671723, -0.056961805032981018, -0.056911886143885364, -0.056861967112510431, -0.056812047938980585, +-0.056762128623420616, -0.056712209165954888, -0.056662289566709073, -0.056612369825807543, -0.056562449943375080, -0.056512529919536050, -0.056462609754416145, -0.056412689448139708, +-0.056362769000831550, -0.056312848412616030, -0.056262927683618826, -0.056213006813964309, -0.056163085803776831, -0.056113164653182078, -0.056063243362304414, -0.056013321931268643, +-0.055963400360199124, -0.055913478649221547, -0.055863556798460272, -0.055813634808040108, -0.055763712678085414, -0.055713790408721875, -0.055663868000073870, -0.055613945452266188, +-0.055564022765423202, -0.055514099939670596, -0.055464176975132749, -0.055414253871934452, -0.055364330630200083, -0.055314407250055327, -0.055264483731624556, -0.055214560075032573, +-0.055164636280403752, -0.055114712347863776, -0.055064788277537025, -0.055014864069547857, -0.054964939724021972, -0.054915015241083741, -0.054865090620857968, -0.054815165863469031, +-0.054765240969042617, -0.054715315937703103, -0.054665390769575294, -0.054615465464783568, -0.054565540023453624, -0.054515614445709834, -0.054465688731677002, -0.054415762881479500, +-0.054365836895243040, -0.054315910773091988, -0.054265984515151161, -0.054216058121544924, -0.054166131592398990, -0.054116204927837724, -0.054066278127985506, -0.054016351192968035, +-0.053966424122909681, -0.053916496917935271, -0.053866569578169175, -0.053816642103737100, -0.053766714494763418, -0.053716786751372946, -0.053666858873690070, -0.053616930861840488, +-0.053567002715948574, -0.053517074436139157, -0.053467146022536612, -0.053417217475266648, -0.053367288794453634, -0.053317359980222405, -0.053267431032697328, -0.053217501952004115, +-0.053167572738267152, -0.053117643391610812, -0.053067713912160808, -0.053017784300041511, -0.052967854555377766, -0.052917924678293933, -0.052867994668915730, -0.052818064527367550, +-0.052768134253774197, -0.052718203848260071, -0.052668273310950885, -0.052618342641971010, -0.052568411841445277, -0.052518480909498066, -0.052468549846255104, -0.052418618651840769, +-0.052368687326379885, -0.052318755869996833, -0.052268824282817344, -0.052218892564965785, -0.052168960716566563, -0.052119028737745376, -0.052069096628626611, -0.052019164389335112, +-0.051969232019995260, -0.051919299520732771, -0.051869366891672028, -0.051819434132937874, -0.051769501244654688, -0.051719568226948190, -0.051669635079942773, -0.051619701803763268, +-0.051569768398534069, -0.051519834864380887, -0.051469901201428123, -0.051419967409800607, -0.051370033489622720, -0.051320099441020200, -0.051270165264117429, -0.051220230959039249, +-0.051170296525910042, -0.051120361964855539, -0.051070427276000134, -0.051020492459468214, -0.050970557515385512, -0.050920622443876414, -0.050870687245065757, -0.050820751919077936, +-0.050770816466038683, -0.050720880886072392, -0.050670945179303893, -0.050621009345857587, -0.050571073385859207, -0.050521137299433139, -0.050471201086704227, -0.050421264747796873, +-0.050371328282836796, -0.050321391691948401, -0.050271454975256528, -0.050221518132885570, -0.050171581164961267, -0.050121644071608004, -0.050071706852950190, -0.050021769509113558, +-0.049971832040222493, -0.049921894446401854, -0.049871956727776029, -0.049822018884470763, -0.049772080916610451, -0.049722142824319929, -0.049672204607723612, -0.049622266266947226, +-0.049572327802115172, -0.049522389213352301, -0.049472450500783006, -0.049422511664533035, -0.049372572704726787, -0.049322633621489108, -0.049272694414944397, -0.049222755085218395, +-0.049172815632435501, -0.049122876056720131, -0.049072936358198010, -0.049022996536993553, -0.048973056593231604, -0.048923116527036563, -0.048873176338534184, -0.048823236027848854, +-0.048773295595105438, -0.048723355040428344, -0.048673414363943304, -0.048623473565774726, -0.048573532646047461, -0.048523591604885931, -0.048473650442415854, -0.048423709158761659, +-0.048373767754048190, -0.048323826228399855, -0.048273884581942400, -0.048223942814800233, -0.048174000927098205, -0.048124058918960738, -0.048074116790513564, -0.048024174541881098, +-0.047974232173187754, -0.047924289684559272, -0.047874347076120066, -0.047824404347994988, -0.047774461500308459, -0.047724518533186225, -0.047674575446752687, -0.047624632241132711, +-0.047574688916450718, -0.047524745472832440, -0.047474801910402299, -0.047424858229285154, -0.047374914429605418, -0.047324970511488845, -0.047275026475059843, -0.047225082320443271, +-0.047175138047763555, -0.047125193657146437, -0.047075249148716330, -0.047025304522597663, -0.046975359778916176, -0.046925414917796282, -0.046875469939362861, -0.046825524843740321, +-0.046775579631054408, -0.046725634301429543, -0.046675688854990599, -0.046625743291861990, -0.046575797612169463, -0.046525851816037439, -0.046475905903590790, -0.046425959874953932, +-0.046376013730252616, -0.046326067469611265, -0.046276121093154751, -0.046226174601007489, -0.046176227993295231, -0.046126281270142400, -0.046076334431673430, -0.046026387478014061, +-0.045976440409288728, -0.045926493225622290, -0.045876545927139183, -0.045826598513965144, -0.045776650986224618, -0.045726703344042462, -0.045676755587543104, -0.045626807716852298, +-0.045576859732094473, -0.045526911633394500, -0.045476963420876808, -0.045427015094667143, -0.045377066654889948, -0.045327118101670082, -0.045277169435131978, -0.045227220655401391, +-0.045177271762602757, -0.045127322756860502, -0.045077373638300375, -0.045027424407046823, -0.044977475063224706, -0.044927525606958459, -0.044877576038373841, -0.044827626357595282, +-0.044777676564747661, -0.044727726659955398, -0.044677776643344269, -0.044627826515038695, -0.044577876275163554, -0.044527925923843276, -0.044477975461203634, -0.044428024887369050, +-0.044378074202464403, -0.044328123406614128, -0.044278172499943987, -0.044228221482578413, -0.044178270354642286, -0.044128319116260042, -0.044078367767557448, -0.044028416308658926, +-0.043978464739688923, -0.043928513060773201, -0.043878561272036203, -0.043828609373602792, -0.043778657365597419, -0.043728705248145844, -0.043678753021372509, -0.043628800685402293, +-0.043578848240359624, -0.043528895686370285, -0.043478943023558703, -0.043428990252049771, -0.043379037371967910, -0.043329084383438903, -0.043279131286587183, -0.043229178081537638, +-0.043179224768414702, -0.043129271347344150, -0.043079317818450417, -0.043029364181857946, -0.042979410437692510, -0.042929456586078552, -0.042879502627140943, -0.042829548561004141, +-0.042779594387793912, -0.042729640107634692, -0.042679685720651374, -0.042629731226968400, -0.042579776626711537, -0.042529821920005234, -0.042479867106974378, -0.042429912187743411, +-0.042379957162438107, -0.042330002031182909, -0.042280046794102702, -0.042230091451321942, -0.042180136002966391, -0.042130180449160504, -0.042080224790028722, -0.042030269025696815, +-0.041980313156289244, -0.041930357181930888, -0.041880401102746191, -0.041830444918860940, -0.041780488630399577, -0.041730532237486989, -0.041680575740247632, -0.041630619138807272, +-0.041580662433290366, -0.041530705623821808, -0.041480748710526039, -0.041430791693528847, -0.041380834572954668, -0.041330877348928409, -0.041280920021574505, -0.041230962591018751, +-0.041181005057385589, -0.041131047420799920, -0.041081089681386178, -0.041031131839270166, -0.040981173894576318, -0.040931215847429092, -0.040881257697954275, -0.040831299446276309, +-0.040781341092520094, -0.040731382636810080, -0.040681424079272062, -0.040631465420030481, -0.040581506659210231, -0.040531547796935775, -0.040481588833332895, -0.040431629768526038, +-0.040381670602640106, -0.040331711335799561, -0.040281751968130178, -0.040231792499756412, -0.040181832930803164, -0.040131873261394897, -0.040081913491657385, -0.040031953621715091, +-0.039981993651692471, -0.039932033581715307, -0.039882073411908060, -0.039832113142395632, -0.039782152773302472, -0.039732192304754381, -0.039682231736875802, -0.039632271069791648, +-0.039582310303626377, -0.039532349438505768, -0.039482388474554285, -0.039432427411896828, -0.039382466250657867, -0.039332504990963177, -0.039282543632937234, -0.039232582176704923, +-0.039182620622390717, -0.039132658970120401, -0.039082697220018434, -0.039032735372209290, -0.038982773426818745, -0.038932811383971262, -0.038882849243791762, -0.038832887006404686, +-0.038782924671935837, -0.038732962240509677, -0.038682999712251115, -0.038633037087284612, -0.038583074365735957, -0.038533111547729613, -0.038483148633390495, -0.038433185622843057, +-0.038383222516213102, -0.038333259313625086, -0.038283296015203923, -0.038233332621074083, -0.038183369131361347, -0.038133405546190192, -0.038083441865685082, -0.038033478089971810, +-0.037983514219174841, -0.037933550253419088, -0.037883586192829014, -0.037833622037530414, -0.037783657787647765, -0.037733693443305967, -0.037683729004629497, -0.037633764471744144, +-0.037583799844774383, -0.037533835123845123, -0.037483870309080826, -0.037433905400607301, -0.037383940398549018, -0.037333975303030877, -0.037284010114177354, -0.037234044832114253, +-0.037184079456966036, -0.037134113988857617, -0.037084148427913480, -0.037034182774259405, -0.036984217028019878, -0.036934251189319367, -0.036884285258283668, -0.036834319235037258, +-0.036784353119705050, -0.036734386912411515, -0.036684420613282455, -0.036634454222442346, -0.036584487740016103, -0.036534521166128195, -0.036484554500904424, -0.036434587744469268, +-0.036384620896947648, -0.036334653958464025, -0.036284686929144216, -0.036234719809112692, -0.036184752598494359, -0.036134785297413707, -0.036084817905996540, -0.036034850424367319, +-0.035984882852650536, -0.035934915190971986, -0.035884947439456145, -0.035834979598227942, -0.035785011667411840, -0.035735043647133653, -0.035685075537517860, -0.035635107338689381, +-0.035585139050772686, -0.035535170673893585, -0.035485202208176560, -0.035435233653746533, -0.035385265010727973, -0.035335296279246690, -0.035285327459427175, -0.035235358551394341, +-0.035185389555272659, -0.035135420471187957, -0.035085451299264700, -0.035035482039627364, -0.034985512692401778, -0.034935543257712399, -0.034885573735684169, -0.034835604126441565, +-0.034785634430110388, -0.034735664646815122, -0.034685694776680702, -0.034635724819831598, -0.034585754776393626, -0.034535784646491263, -0.034485814430249444, -0.034435844127792645, +-0.034385873739246675, -0.034335903264736026, -0.034285932704385617, -0.034235962058319927, -0.034185991326664784, -0.034136020509544659, -0.034086049607084480, -0.034036078619408737, +-0.033986107546643239, -0.033936136388912477, -0.033886165146340928, -0.033836193819054408, -0.033786222407177401, -0.033736250910834840, -0.033686279330151211, -0.033636307665252323, +-0.033586335916262672, -0.033536364083307180, -0.033486392166510330, -0.033436420165997946, -0.033386448081894511, -0.033336475914324953, -0.033286503663413763, -0.033236531329286757, +-0.033186558912068426, -0.033136586411883696, -0.033086613828857053, -0.033036641163114326, -0.032986668414779992, -0.032936695583978541, -0.032886722670835804, -0.032836749675476250, +-0.032786776598024828, -0.032736803438606014, -0.032686830197345640, -0.032636856874368195, -0.032586883469798600, -0.032536909983761353, -0.032486936416382277, -0.032436962767785862, +-0.032386989038097037, -0.032337015227440299, -0.032287041335941465, -0.032237067363725030, -0.032187093310915925, -0.032137119177638639, -0.032087144964019002, -0.032037170670181504, +-0.031987196296250631, -0.031937221842352218, -0.031887247308610742, -0.031837272695151159, -0.031787298002097938, -0.031737323229576925, -0.031687348377712601, -0.031637373446629903, +-0.031587398436453334, -0.031537423347308705, -0.031487448179320525, -0.031437472932613716, -0.031387497607312791, -0.031337522203543557, -0.031287546721430526, -0.031237571161098619, +-0.031187595522672348, -0.031137619806277529, -0.031087644012038659, -0.031037668140080237, -0.030987692190528087, -0.030937716163506709, -0.030887740059141040, -0.030837763877555574, +-0.030787787618876145, -0.030737811283227248, -0.030687834870733819, -0.030637858381520361, -0.030587881815712703, -0.030537905173435336, -0.030487928454813209, -0.030437951659970819, +-0.030387974789033989, -0.030337997842127224, -0.030288020819375466, -0.030238043720903211, -0.030188066546836291, -0.030138089297299202, -0.030088111972416894, -0.030038134572313861, +-0.029988157097115935, -0.029938179546947614, -0.029888201921933404, -0.029838224222199131, -0.029788246447869298, -0.029738268599068848, -0.029688290675922283, -0.029638312678555434, +-0.029588334607092807, -0.029538356461659341, -0.029488378242379539, -0.029438399949379235, -0.029388421582782934, -0.029338443142715578, -0.029288464629301670, -0.029238486042667045, +-0.029188507382936203, -0.029138528650234096, -0.029088549844685219, -0.029038570966415416, -0.028988592015549181, -0.028938612992211024, -0.028888633896526780, -0.028838654728620950, +-0.028788675488618482, -0.028738696176643885, -0.028688716792822987, -0.028638737337280298, -0.028588757810140770, -0.028538778211528899, -0.028488798541570527, -0.028438818800390162, +-0.028388838988112744, -0.028338859104862790, -0.028288879150766128, -0.028238899125947271, -0.028188919030531168, -0.028138938864642318, -0.028088958628406571, -0.028038978321948422, +-0.027988997945392387, -0.027939017498864301, -0.027889036982488669, -0.027839056396390446, -0.027789075740694134, -0.027739095015525583, -0.027689114221009292, -0.027639133357270213, +-0.027589152424432859, -0.027539171422623070, -0.027489190351965349, -0.027439209212584654, -0.027389228004605491, -0.027339246728153702, -0.027289265383353797, -0.027239283970330725, +-0.027189302489209005, -0.027139320940114467, -0.027089339323171632, -0.027039357638505446, -0.026989375886240421, -0.026939394066502403, -0.026889412179415897, -0.026839430225105418, +-0.026789448203696806, -0.026739466115314577, -0.026689483960083679, -0.026639501738128631, -0.026589519449575268, -0.026539537094548111, -0.026489554673172107, -0.026439572185571775, +-0.026389589631872955, -0.026339607012200162, -0.026289624326678352, -0.026239641575432036, -0.026189658758587062, -0.026139675876267938, -0.026089692928599625, -0.026039709915706640, +-0.025989726837714819, -0.025939743694748683, -0.025889760486932745, -0.025839777214392848, -0.025789793877253508, -0.025739810475639682, -0.025689827009675890, -0.025639843479487973, +-0.025589859885200444, -0.025539876226938270, -0.025489892504825959, -0.025439908718989358, -0.025389924869552990, -0.025339940956641806, -0.025289956980380328, -0.025239972940894403, +-0.025189988838308544, -0.025140004672747712, -0.025090020444336423, -0.025040036153200530, -0.024990051799464546, -0.024940067383252988, -0.024890082904691704, -0.024840098363905216, +-0.024790113761018480, -0.024740129096156017, -0.024690144369443674, -0.024640159581005971, -0.024590174730967869, -0.024540189819453884, -0.024490204846589869, -0.024440219812500344, +-0.024390234717310270, -0.024340249561144164, -0.024290264344127878, -0.024240279066385931, -0.024190293728043284, -0.024140308329224463, -0.024090322870055313, -0.024040337350660357, +-0.023990351771164112, -0.023940366131692432, -0.023890380432369837, -0.023840394673321292, -0.023790408854671315, -0.023740422976545758, -0.023690437039069145, -0.023640451042366440, +-0.023590464986562164, -0.023540478871782171, -0.023490492698150980, -0.023440506465793553, -0.023390520174834419, -0.023340533825399429, -0.023290547417613106, -0.023240560951600410, +-0.023190574427485872, -0.023140587845395338, -0.023090601205453337, -0.023040614507784832, -0.022990627752514349, -0.022940640939767738, -0.022890654069669527, -0.022840667142344236, +-0.022790680157917718, -0.022740693116514502, -0.022690706018259555, -0.022640718863277398, -0.022590731651693886, -0.022540744383633547, -0.022490757059221343, -0.022440769678581808, +-0.022390782241840788, -0.022340794749122816, -0.022290807200552855, -0.022240819596255432, -0.022190831936356407, -0.022140844220980300, -0.022090856450252081, -0.022040868624296280, +-0.021990880743238749, -0.021940892807204019, -0.021890904816316611, -0.021840916770702382, -0.021790928670485866, -0.021740940515792024, -0.021690952306745389, -0.021640964043471819, +-0.021590975726095838, -0.021540987354742417, -0.021490998929536084, -0.021441010450602697, -0.021391021918066782, -0.021341033332053314, -0.021291044692686820, -0.021241056000093156, +-0.021191067254396855, -0.021141078455722884, -0.021091089604195774, -0.021041100699941383, -0.020991111743084240, -0.020941122733748874, -0.020891133672061146, -0.020841144558145581, +-0.020791155392127156, -0.020741166174130399, -0.020691176904281173, -0.020641187582704001, -0.020591198209523862, -0.020541208784865282, -0.020491219308854124, -0.020441229781614920, +-0.020391240203272640, -0.020341250573951818, -0.020291260893778310, -0.020241271162876651, -0.020191281381371814, -0.020141291549388329, -0.020091301667052062, -0.020041311734487539, +-0.019991321751819734, -0.019941331719173186, -0.019891341636673748, -0.019841351504445957, -0.019791361322614345, -0.019741371091304773, -0.019691380810641774, -0.019641390480750320, +-0.019591400101754950, -0.019541409673781519, -0.019491419196954567, -0.019441428671399068, -0.019391438097239550, -0.019341447474601883, -0.019291456803610597, -0.019241466084390670, +-0.019191475317066633, -0.019141484501764349, -0.019091493638608358, -0.019041502727723630, -0.018991511769234703, -0.018941520763267439, -0.018891529709946373, -0.018841538609396039, +-0.018791547461742303, -0.018741556267109698, -0.018691565025623205, -0.018641573737407352, -0.018591582402588010, -0.018541591021289713, -0.018491599593637435, -0.018441608119755717, +-0.018391616599770424, -0.018341625033806087, -0.018291633421987689, -0.018241641764439761, -0.018191650061288176, -0.018141658312657464, -0.018091666518672604, -0.018041674679458136, +-0.017991682795139925, -0.017941690865842509, -0.017891698891690420, -0.017841706872809528, -0.017791714809324368, -0.017741722701359919, -0.017691730549040725, -0.017641738352492643, +-0.017591746111840219, -0.017541753827208427, -0.017491761498721808, -0.017441769126506232, -0.017391776710686230, -0.017341784251386785, -0.017291791748732438, -0.017241799202849052, +-0.017191806613861171, -0.017141813981893773, -0.017091821307071396, -0.017041828589519911, -0.016991835829363852, -0.016941843026727764, -0.016891850181737507, -0.016841857294517627, +-0.016791864365193105, -0.016741871393888476, -0.016691878380729611, -0.016641885325841054, -0.016591892229347781, -0.016541899091374334, -0.016491905912046585, -0.016441912691489070, +-0.016391919429826773, -0.016341926127184235, -0.016291932783687322, -0.016241939399460580, -0.016191945974628988, -0.016141952509317090, -0.016091959003650753, -0.016041965457754517, +-0.015991971871753368, -0.015941978245771846, -0.015891984579935823, -0.015841990874369837, -0.015791997129198432, -0.015742003344547475, -0.015692009520541512, -0.015642015657305525, +-0.015592021754964054, -0.015542027813642972, -0.015492033833466822, -0.015442039814560587, -0.015392045757048809, -0.015342051661057361, -0.015292057526710782, -0.015242063354134061, +-0.015192069143451736, -0.015142074894789683, -0.015092080608272444, -0.015042086284025001, -0.014992091922171899, -0.014942097522839011, -0.014892103086150882, -0.014842108612232048, +-0.014792114101208387, -0.014742119553204442, -0.014692124968345198, -0.014642130346755197, -0.014592135688560314, -0.014542140993885093, -0.014492146262854519, -0.014442151495593135, +-0.014392156692226815, -0.014342161852880104, -0.014292166977677989, -0.014242172066745013, -0.014192177120207049, -0.014142182138188644, -0.014092187120814784, -0.014042192068210011, +-0.013992196980500202, -0.013942201857809901, -0.013892206700263652, -0.013842211507987328, -0.013792216281105477, -0.013742221019743085, -0.013692225724024697, -0.013642230394076187, +-0.013592235030022102, -0.013542239631987430, -0.013492244200096714, -0.013442248734475831, -0.013392253235249328, -0.013342257702542191, -0.013292262136478966, -0.013242266537185529, +-0.013192270904786427, -0.013142275239406646, -0.013092279541170733, -0.013042283810204567, -0.012992288046632690, -0.012942292250580094, -0.012892296422171321, -0.012842300561532254, +-0.012792304668787434, -0.012742308744061409, -0.012692312787480056, -0.012642316799167920, -0.012592320779249993, -0.012542324727850820, -0.012492328645096279, -0.012442332531110916, +-0.012392336386019722, -0.012342340209947242, -0.012292344003019358, -0.012242347765360612, -0.012192351497095997, -0.012142355198350059, -0.012092358869248677, -0.012042362509916400, +-0.011992366120478215, -0.011942369701058671, -0.011892373251783646, -0.011842376772777687, -0.011792380264165344, -0.011742383726072494, -0.011692387158623684, -0.011642390561943907, +-0.011592393936157710, -0.011542397281390971, -0.011492400597768239, -0.011442403885414506, -0.011392407144454319, -0.011342410375013557, -0.011292413577216770, -0.011242416751188949, +-0.011192419897054643, -0.011142423014939730, -0.011092426104968760, -0.011042429167266726, -0.010992432201958174, -0.010942435209168985, -0.010892438189023709, -0.010842441141646892, +-0.010792444067164416, -0.010742446965700833, -0.010692449837381129, -0.010642452682329858, -0.010592455500672900, -0.010542458292534803, -0.010492461058040558, -0.010442463797314719, +-0.010392466510483164, -0.010342469197670442, -0.010292471859001548, -0.010242474494601028, -0.010192477104594769, -0.010142479689107316, -0.010092482248263663, -0.010042484782188360, +-0.009992487291007291, -0.009942489774845003, -0.009892492233826490, -0.009842494668076303, -0.009792497077720322, -0.009742499462883100, -0.009692501823689184, -0.009642504160264459, +-0.009592506472733473, -0.009542508761221220, -0.009492511025852251, -0.009442513266752450, -0.009392515484046364, -0.009342517677858991, -0.009292519848314879, -0.009242521995539911, +-0.009192524119658639, -0.009142526220796057, -0.009092528299076714, -0.009042530354626495, -0.008992532387569949, -0.008942534398032073, -0.008892536386137417, -0.008842538352011865, +-0.008792540295779966, -0.008742542217566273, -0.008692544117496667, -0.008642545995695701, -0.008592547852288371, -0.008542549687399228, -0.008492551501154154, -0.008442553293677700, +-0.008392555065094865, -0.008342556815530196, -0.008292558545109581, -0.008242560253957568, -0.008192561942199155, -0.008142563609958894, -0.008092565257362667, -0.008042566884535028, +-0.007992568491600970, -0.007942570078685048, -0.007892571645913145, -0.007842573193409811, -0.007792574721299603, -0.007742576229708400, -0.007692577718760757, -0.007642579188581669, +-0.007592580639295690, -0.007542582071028704, -0.007492583483905262, -0.007442584878050361, -0.007392586253588554, -0.007342587610645725, -0.007292588949346428, -0.007242590269815658, +-0.007192591572177969, -0.007142592856559244, -0.007092594123084038, -0.007042595371877345, -0.006992596603063722, -0.006942597816769049, -0.006892599013117883, -0.006842600192234775, +-0.006792601354245611, -0.006742602499274943, -0.006692603627447769, -0.006642604738888642, -0.006592605833723447, -0.006542606912076737, -0.006492607974073510, -0.006442609019838320, +-0.006392610049497051, -0.006342611063174256, -0.006292612060994934, -0.006242613043083638, -0.006192614009566253, -0.006142614960567333, -0.006092615896211876, -0.006042616816624435, +-0.005992617721930896, -0.005942618612255812, -0.005892619487724183, -0.005842620348460561, -0.005792621194590831, -0.005742622026239549, -0.005692622843531267, -0.005642623646591872, +-0.005592624435545919, -0.005542625210518404, -0.005492625971633882, -0.005442626719018240, -0.005392627452796030, -0.005342628173092252, -0.005292628880031459, -0.005242629573739539, +-0.005192630254341044, -0.005142630921960973, -0.005092631576723882, -0.005042632218755655, -0.004992632848180848, -0.004942633465124459, -0.004892634069711042, -0.004842634662066484, +-0.004792635242315340, -0.004742635810582162, -0.004692636366992840, -0.004642636911671927, -0.004592637444744421, -0.004542637966334878, -0.004492638476569184, -0.004442638975571894, +-0.004392639463468006, -0.004342639940382076, -0.004292640406439990, -0.004242640861766302, -0.004192641306486013, -0.004142641740723677, -0.004092642164605180, -0.004042642578255077, +-0.003992642981798369, -0.003942643375359608, -0.003892643759064683, -0.003842644133038149, -0.003792644497404561, -0.003742644852289805, -0.003692645197818437, -0.003642645534115456, +-0.003592645861305418, -0.003542646179514209, -0.003492646488866384, -0.003442646789486943, -0.003392647081500441, -0.003342647365032765, -0.003292647640208471, -0.003242647907152558, +-0.003192648165989581, -0.003142648416845428, -0.003092648659844654, -0.003042648895112258, -0.002992649122772795, -0.002942649342952154, -0.002892649555774890, -0.002842649761366002, +-0.002792649959850045, -0.002742650151352907, -0.002692650335999144, -0.002642650513913312, -0.002592650685221296, -0.002542650850047655, -0.002492651008517386, -0.002442651160755045, +-0.002392651306886521, -0.002342651447036368, -0.002292651581329587, -0.002242651709890733, -0.002192651832845693, -0.002142651950319024, -0.002092652062435725, -0.002042652169320352, +-0.001992652271098793, -0.001942652367895603, -0.001892652459835782, -0.001842652547043885, -0.001792652629645802, -0.001742652707766087, -0.001692652781529296, -0.001642652851061317, +-0.001592652916486706, -0.001542652977930462, -0.001492653035517143, -0.001442653089372634, -0.001392653139621493, -0.001342653186388719, -0.001292653229798869, -0.001242653269977829, +-0.001192653307050155, -0.001142653341140849, -0.001092653372374465, -0.001042653400876892, -0.000992653426772685, -0.000942653450186845, -0.000892653471243927, -0.000842653490069820, +-0.000792653506789079, -0.000742653521526259, -0.000692653534407251, -0.000642653545556608, -0.000592653555099331, -0.000542653563159977, -0.000492653569864433, -0.000442653575337254, +-0.000392653579703442, -0.000342653583087552, -0.000292653585615472, -0.000242653587411758, -0.000192653588601410, -0.000142653589308984, -0.000092653589660368, -0.000042653589780118, +0.000007346410206766, 0.000057346410175728, 0.000107346410000880, 0.000157346409557666, 0.000207346408721530, 0.000257346407366583, 0.000307346405368271, 0.000357346402601593, +0.000407346398941993, 0.000457346394263583, 0.000507346388441806, 0.000557346381351664, 0.000607346372868600, 0.000657346362866726, 0.000707346351221486, 0.000757346337807880, +0.000807346322501352, 0.000857346305176015, 0.000907346285707312, 0.000957346263970243, 0.001007346239840252, 0.001057346213191452, 0.001107346183899286, 0.001157346151838755, +0.001207346116885302, 0.001257346078913040, 0.001307346037797413, 0.001357345993413865, 0.001407345945636508, 0.001457345894340786, 0.001507345839401699, 0.001557345780694692, +0.001607345718093876, 0.001657345651474696, 0.001707345580712151, 0.001757345505681687, 0.001807345426257415, 0.001857345342314780, 0.001907345253728781, 0.001957345160374863, +0.002007345062127138, 0.002057344958861051, 0.002107344850451600, 0.002157344736774233, 0.002207344617703058, 0.002257344493113523, 0.002307344362881071, 0.002357344226879813, +0.002407344084985194, 0.002457343937072216, 0.002507343783016322, 0.002557343622691624, 0.002607343455973567, 0.002657343282737152, 0.002707343102857823, 0.002757342916209691, +0.002807342722668203, 0.002857342522108357, 0.002907342314405600, 0.002957342099434042, 0.003007341877069129, 0.003057341647185862, 0.003107341409659684, 0.003157341164364709, +0.003207340911176381, 0.003257340649970145, 0.003307340380620113, 0.003357340103001730, 0.003407339816989997, 0.003457339522460358, 0.003507339219286927, 0.003557338907345147, +0.003607338586510021, 0.003657338256656991, 0.003707337917660173, 0.003757337569395009, 0.003807337211736501, 0.003857336844560094, 0.003907336467739902, 0.003957336081151368, +0.004007335684669494, 0.004057335278169725, 0.004107334861526173, 0.004157334434614284, 0.004207333997309060, 0.004257333549485944, 0.004307333091019050, 0.004357332621783824, +0.004407332141655711, 0.004457331650508822, 0.004507331148218605, 0.004557330634660059, 0.004607330109708632, 0.004657329573238434, 0.004707329025124913, 0.004757328465243070, +0.004807327893468349, 0.004857327309674865, 0.004907326713738062, 0.004957326105532942, 0.005007325484934952, 0.005057324851818203, 0.005107324206058143, 0.005157323547529772, +0.005207322876108536, 0.005257322191668548, 0.005307321494085256, 0.005357320783234103, 0.005407320058989205, 0.005457319321226006, 0.005507318569819510, 0.005557317804645160, +0.005607317025577073, 0.005657316232490692, 0.005707315425261022, 0.005757314603763507, 0.005807313767872260, 0.005857312917462730, 0.005907312052409917, 0.005957311172589269, +0.006007310277874899, 0.006057309368142251, 0.006107308443266332, 0.006157307503122585, 0.006207306547585126, 0.006257305576529399, 0.006307304589830853, 0.006357303587363602, +0.006407302569003091, 0.006457301534624325, 0.006507300484102748, 0.006557299417312476, 0.006607298334128956, 0.006657297234427190, 0.006707296118082624, 0.006757294984969375, +0.006807293834962888, 0.006857292667938166, 0.006907291483770657, 0.006957290282334475, 0.007007289063505067, 0.007057287827157437, 0.007107286573167031, 0.007157285301407965, +0.007207284011755685, 0.007257282704085639, 0.007307281378271943, 0.007357280034190043, 0.007407278671714943, 0.007457277290722091, 0.007507275891085601, 0.007557274472680921, +0.007607273035383055, 0.007657271579067451, 0.007707270103608224, 0.007757268608880821, 0.007807267094760247, 0.007857265561121950, 0.007907264007840044, 0.007957262434789978, +0.008007260841846756, 0.008057259228885828, 0.008107257595781304, 0.008157255942408639, 0.008207254268642833, 0.008257252574359336, 0.008307250859432264, 0.008357249123737063, +0.008407247367149184, 0.008457245589542743, 0.008507243790793187, 0.008557241970775523, 0.008607240129365198, 0.008657238266436327, 0.008707236381864362, 0.008757234475524305, +0.008807232547291606, 0.008857230597040383, 0.008907228624646083, 0.008957226629983710, 0.009007224612928716, 0.009057222573355216, 0.009107220511138658, 0.009157218426154051, +0.009207216318276841, 0.009257214187381147, 0.009307212033342416, 0.009357209856036100, 0.009407207655336316, 0.009457205431118511, 0.009507203183257693, 0.009557200911629312, +0.009607198616107484, 0.009657196296567659, 0.009707193952884843, 0.009757191584934488, 0.009807189192590708, 0.009857186775728957, 0.009907184334224238, 0.009957181867952003, +0.010007179376786367, 0.010057176860602784, 0.010107174319276260, 0.010157171752682244, 0.010207169160694854, 0.010257166543189540, 0.010307163900041756, 0.010357161231125615, +0.010407158536316574, 0.010457155815489635, 0.010507153068520252, 0.010557150295282541, 0.010607147495651954, 0.010657144669503498, 0.010707141816712626, 0.010757138937153455, +0.010807136030701436, 0.010857133097231577, 0.010907130136619330, 0.010957127148738812, 0.011007124133465478, 0.011057121090674332, 0.011107118020240829, 0.011157114922039087, +0.011207111795944556, 0.011257108641832247, 0.011307105459577610, 0.011357102249054764, 0.011407099010139164, 0.011457095742706260, 0.011507092446630172, 0.011557089121786353, +0.011607085768049813, 0.011657082385296001, 0.011707078973399039, 0.011757075532234380, 0.011807072061677032, 0.011857068561602449, 0.011907065031884750, 0.011957061472399387, +0.012007057883021371, 0.012057054263626155, 0.012107050614087858, 0.012157046934281936, 0.012207043224083397, 0.012257039483367692, 0.012307035712008946, 0.012357031909882609, +0.012407028076864139, 0.012457024212827652, 0.012507020317648606, 0.012557016391202009, 0.012607012433363315, 0.012657008444006645, 0.012707004423007455, 0.012757000370240754, +0.012806996285581995, 0.012856992168905302, 0.012906988020086128, 0.012956983838999486, 0.013006979625520826, 0.013056975379524275, 0.013106971100885283, 0.013156966789478865, +0.013206962445180475, 0.013256958067864233, 0.013306953657405597, 0.013356949213680020, 0.013406944736561626, 0.013456940225925871, 0.013506935681647764, 0.013556931103602763, +0.013606926491664990, 0.013656921845709900, 0.013706917165612507, 0.013756912451248264, 0.013806907702491296, 0.013856902919217059, 0.013906898101300564, 0.013956893248617269, +0.014006888361041296, 0.014056883438448102, 0.014106878480712700, 0.014156873487710546, 0.014206868459315763, 0.014256863395403810, 0.014306858295850142, 0.014356853160528885, +0.014406847989315495, 0.014456842782084983, 0.014506837538712810, 0.014556832259073098, 0.014606826943041308, 0.014656821590492449, 0.014706816201301980, 0.014756810775344026, +0.014806805312494044, 0.014856799812627051, 0.014906794275618501, 0.014956788701342523, 0.015006783089674571, 0.015056777440489662, 0.015106771753663255, 0.015156766029069473, +0.015206760266583777, 0.015256754466081180, 0.015306748627437141, 0.015356742750525785, 0.015406736835222574, 0.015456730881402963, 0.015506724888941083, 0.015556718857712390, +0.015606712787591900, 0.015656706678455069, 0.015706700530176032, 0.015756694342630242, 0.015806688115692715, 0.015856681849238913, 0.015906675543142960, 0.015956669197280320, +0.016006662811526007, 0.016056656385755482, 0.016106649919842873, 0.016156643413663636, 0.016206636867092790, 0.016256630280005797, 0.016306623652276787, 0.016356616983781214, +0.016406610274394547, 0.016456603523990906, 0.016506596732445759, 0.016556589899634117, 0.016606583025431446, 0.016656576109711874, 0.016706569152350862, 0.016756562153223426, +0.016806555112205031, 0.016856548029169801, 0.016906540903993204, 0.016956533736550251, 0.017006526526716411, 0.017056519274365810, 0.017106511979373910, 0.017156504641615729, +0.017206497260966732, 0.017256489837301048, 0.017306482370494140, 0.017356474860421470, 0.017406467306957166, 0.017456459709976696, 0.017506452069355076, 0.017556444384967770, +0.017606436656688911, 0.017656428884393959, 0.017706421067957934, 0.017756413207256301, 0.017806405302163191, 0.017856397352554065, 0.017906389358303951, 0.017956381319288305, +0.018006373235381259, 0.018056365106458284, 0.018106356932394395, 0.018156348713065058, 0.018206340448344405, 0.018256332138107900, 0.018306323782230564, 0.018356315380587865, +0.018406306933053930, 0.018456298439504231, 0.018506289899814229, 0.018556281313858058, 0.018606272681511184, 0.018656264002648627, 0.018706255277145856, 0.018756246504877002, +0.018806237685717531, 0.018856228819542468, 0.018906219906227276, 0.018956210945646090, 0.019006201937674376, 0.019056192882187156, 0.019106183779059899, 0.019156174628166739, +0.019206165429383144, 0.019256156182584132, 0.019306146887645176, 0.019356137544440408, 0.019406128152845297, 0.019456118712735310, 0.019506109223984578, 0.019556099686468577, +0.019606090100062326, 0.019656080464641294, 0.019706070780079618, 0.019756061046252764, 0.019806051263035755, 0.019856041430304065, 0.019906031547931826, 0.019956021615794507, +0.020006011633767137, 0.020056001601725180, 0.020105991519542774, 0.020155981387095390, 0.020205971204258055, 0.020255960970906234, 0.020305950686914067, 0.020355940352157022, +0.020405929966510569, 0.020455919529848852, 0.020505909042047330, 0.020555898502981042, 0.020605887912525447, 0.020655877270554689, 0.020705866576944239, 0.020755855831569123, +0.020805845034304809, 0.020855834185025440, 0.020905823283606486, 0.020955812329922975, 0.021005801323850375, 0.021055790265262827, 0.021105779154035803, 0.021155767990044334, +0.021205756773163886, 0.021255745503268607, 0.021305734180233959, 0.021355722803935422, 0.021405711374247134, 0.021455699891044566, 0.021505688354202749, 0.021555676763597157, +0.021605665119101929, 0.021655653420592537, 0.021705641667944010, 0.021755629861031824, 0.021805617999730121, 0.021855606083914372, 0.021905594113459607, 0.021955582088241301, +0.022005570008133593, 0.022055557873011965, 0.022105545682751439, 0.022155533437227495, 0.022205521136314271, 0.022255508779887245, 0.022305496367821448, 0.022355483899992354, +0.022405471376274109, 0.022455458796542180, 0.022505446160672050, 0.022555433468537861, 0.022605420720015090, 0.022655407914978765, 0.022705395053304368, 0.022755382134866033, +0.022805369159539249, 0.022855356127199036, 0.022905343037720880, 0.022955329890978923, 0.023005316686848642, 0.023055303425205068, 0.023105290105923677, 0.023155276728878620, +0.023205263293945372, 0.023255249800998964, 0.023305236249914874, 0.023355222640567250, 0.023405208972831573, 0.023455195246583314, 0.023505181461696622, 0.023555167618046980, +0.023605153715509416, 0.023655139753959414, 0.023705125733271118, 0.023755111653320005, 0.023805097513981115, 0.023855083315129925, 0.023905069056640586, 0.023955054738388569, +0.024005040360248919, 0.024055025922097111, 0.024105011423807294, 0.024154996865254946, 0.024204982246315107, 0.024254967566863260, 0.024304952826773547, 0.024354938025921452, +0.024404923164182458, 0.024454908241430710, 0.024504893257541693, 0.024554878212390441, 0.024604863105852439, 0.024654847937801833, 0.024704832708114109, 0.024754817416664302, +0.024804802063327899, 0.024854786647979042, 0.024904771170493223, 0.024954755630745472, 0.025004740028611278, 0.025054724363964789, 0.025104708636681492, 0.025154692846636420, +0.025204676993705061, 0.025254661077761566, 0.025304645098681418, 0.025354629056339659, 0.025404612950611770, 0.025454596781371904, 0.025504580548495547, 0.025554564251858179, +0.025604547891333960, 0.025654531466798372, 0.025704514978126453, 0.025754498425193690, 0.025804481807874240, 0.025854465126043585, 0.025904448379576766, 0.025954431568349270, +0.026004414692235252, 0.026054397751110195, 0.026104380744849144, 0.026154363673327588, 0.026204346536419676, 0.026254329334000900, 0.026304312065946300, 0.026354294732131363, +0.026404277332430247, 0.026454259866718434, 0.026504242334871420, 0.026554224736763353, 0.026604207072269726, 0.026654189341265580, 0.026704171543626403, 0.026754153679226355, +0.026804135747940924, 0.026854117749645152, 0.026904099684214530, 0.026954081551523217, 0.027004063351446696, 0.027054045083860022, 0.027104026748638675, 0.027154008345656819, +0.027203989874789940, 0.027253971335913087, 0.027303952728901751, 0.027353934053630090, 0.027403915309973593, 0.027453896497807748, 0.027503877617006723, 0.027553858667446002, +0.027603839649000633, 0.027653820561546111, 0.027703801404956593, 0.027753782179107570, 0.027803762883874095, 0.027853743519131655, 0.027903724084754410, 0.027953704580617859, +0.028003685006597043, 0.028053665362567461, 0.028103645648403269, 0.028153625863979966, 0.028203606009172596, 0.028253586083856655, 0.028303566087906306, 0.028353546021197041, +0.028403525883604355, 0.028453505675002412, 0.028503485395266703, 0.028553465044272280, 0.028603444621894639, 0.028653424128007941, 0.028703403562487687, 0.028753382925208921, +0.028803362216047141, 0.028853341434876514, 0.028903320581572533, 0.028953299656010248, 0.029003278658065158, 0.029053257587611431, 0.029103236444524557, 0.029153215228679592, +0.029203193939952035, 0.029253172578216049, 0.029303151143347129, 0.029353129635220333, 0.029403108053711158, 0.029453086398693769, 0.029503064670043662, 0.029553042867636336, +0.029603020991345961, 0.029652999041048032, 0.029702977016617609, 0.029752954917930185, 0.029802932744859928, 0.029852910497282344, 0.029902888175072480, 0.029952865778105839, +0.030002843306256591, 0.030052820759400235, 0.030102798137411828, 0.030152775440166868, 0.030202752667539527, 0.030252729819405303, 0.030302706895639252, 0.030352683896116880, +0.030402660820712357, 0.030452637669301178, 0.030502614441758853, 0.030552591137959544, 0.030602567757778761, 0.030652544301091555, 0.030702520767773432, 0.030752497157698566, +0.030802473470742456, 0.030852449706780163, 0.030902425865687186, 0.030952401947337706, 0.031002377951607218, 0.031052353878370784, 0.031102329727503913, 0.031152305498880772, +0.031202281192376866, 0.031252256807867258, 0.031302232345227450, 0.031352207804331622, 0.031402183185055270, 0.031452158487273903, 0.031502133710861698, 0.031552108855694164, +0.031602083921646353, 0.031652058908593773, 0.031702033816410603, 0.031752008644972352, 0.031801983394154076, 0.031851958063831287, 0.031901932653878161, 0.031951907164170200, +0.032001881594582476, 0.032051855944990486, 0.032101830215268419, 0.032151804405291771, 0.032201778514935615, 0.032251752544075453, 0.032301726492585468, 0.032351700360341164, +0.032401674147217611, 0.032451647853090321, 0.032501621477833462, 0.032551595021322551, 0.032601568483433097, 0.032651541864039277, 0.032701515163016601, 0.032751488380240140, +0.032801461515585398, 0.032851434568926564, 0.032901407540139142, 0.032951380429098197, 0.033001353235679251, 0.033051325959756475, 0.033101298601205378, 0.033151271159901040, +0.033201243635718969, 0.033251216028533349, 0.033301188338219684, 0.033351160564653044, 0.033401132707708954, 0.033451104767261583, 0.033501076743186455, 0.033551048635359078, +0.033601020443653630, 0.033650992167945634, 0.033700963808110163, 0.033750935364022717, 0.033800906835557497, 0.033850878222590003, 0.033900849524995322, 0.033950820742648956, +0.034000791875425096, 0.034050762923199251, 0.034100733885846501, 0.034150704763242362, 0.034200675555261018, 0.034250646261777984, 0.034300616882668333, 0.034350587417807589, +0.034400557867069928, 0.034450528230330874, 0.034500498507465942, 0.034550468698349317, 0.034600438802856522, 0.034650408820862635, 0.034700378752243168, 0.034750348596872302, +0.034800318354625576, 0.034850288025378047, 0.034900257609005246, 0.034950227105381357, 0.035000196514381895, 0.035050165835881948, 0.035100135069757024, 0.035150104215881321, +0.035200073274130363, 0.035250042244379214, 0.035300011126503404, 0.035349979920377125, 0.035399948625875900, 0.035449917242875238, 0.035499885771249351, 0.035549854210873741, +0.035599822561623494, 0.035649790823374140, 0.035699758995999864, 0.035749727079376188, 0.035799695073378199, 0.035849662977881412, 0.035899630792760026, 0.035949598517889557, +0.035999566153145098, 0.036049533698402164, 0.036099501153534955, 0.036149468518418992, 0.036199435792929363, 0.036249402976941583, 0.036299370070329851, 0.036349337072969695, +0.036399303984736196, 0.036449270805504877, 0.036499237535149942, 0.036549204173546915, 0.036599170720571318, 0.036649137176097350, 0.036699103540000541, 0.036749069812155970, +0.036799035992439173, 0.036849002080724343, 0.036898968076887001, 0.036948933980802241, 0.036998899792345594, 0.037048865511391249, 0.037098831137814745, 0.037148796671491159, +0.037198762112296030, 0.037248727460103548, 0.037298692714789250, 0.037348657876228215, 0.037398622944295981, 0.037448587918866752, 0.037498552799816044, 0.037548517587019402, +0.037598482280351023, 0.037648446879686437, 0.037698411384900737, 0.037748375795869447, 0.037798340112466779, 0.037848304334568261, 0.037898268462048981, 0.037948232494784469, +0.037998196432648935, 0.038048160275517912, 0.038098124023266490, 0.038148087675770194, 0.038198051232903242, 0.038248014694541158, 0.038297978060559040, 0.038347941330832420, +0.038397904505235503, 0.038447867583643824, 0.038497830565932915, 0.038547793451976994, 0.038597756241651585, 0.038647718934831786, 0.038697681531393135, 0.038747644031209838, +0.038797606434157424, 0.038847568740110999, 0.038897530948946095, 0.038947493060536922, 0.038997455074759012, 0.039047416991487470, 0.039097378810597820, 0.039147340531964288, +0.039197302155462403, 0.039247263680967259, 0.039297225108354407, 0.039347186437498044, 0.039397147668273715, 0.039447108800556512, 0.039497069834221986, 0.039547030769144342, +0.039596991605199118, 0.039646952342261864, 0.039696912980206778, 0.039746873518909417, 0.039796833958244869, 0.039846794298088677, 0.039896754538315059, 0.039946714678799553, +0.039996674719417265, 0.040046634660043733, 0.040096594500553161, 0.040146554240821114, 0.040196513880722679, 0.040246473420133398, 0.040296432858927492, 0.040346392196980503, +0.040396351434167539, 0.040446310570364137, 0.040496269605444515, 0.040546228539284218, 0.040596187371758789, 0.040646146102742454, 0.040696104732110758, 0.040746063259738792, +0.040796021685502115, 0.040845980009274939, 0.040895938230932814, 0.040945896350350841, 0.040995854367404570, 0.041045812281968228, 0.041095770093917343, 0.041145727803127044, +0.041195685409472861, 0.041245642912829027, 0.041295600313071078, 0.041345557610074135, 0.041395514803713743, 0.041445471893864112, 0.041495428880400809, 0.041545385763199376, +0.041595342542134033, 0.041645299217080337, 0.041695255787913388, 0.041745212254508744, 0.041795168616740631, 0.041845124874484593, 0.041895081027615744, 0.041945037076009634, +0.041994993019540489, 0.042044948858083860, 0.042094904591514860, 0.042144860219709042, 0.042194815742540630, 0.042244771159885175, 0.042294726471617798, 0.042344681677614043, +0.042394636777748143, 0.042444591771895655, 0.042494546659932124, 0.042544501441731788, 0.042594456117170200, 0.042644410686122465, 0.042694365148464149, 0.042744319504069483, +0.042794273752814013, 0.042844227894572859, 0.042894181929221578, 0.042944135856634397, 0.042994089676686879, 0.043044043389254140, 0.043093996994211729, 0.043143950491433887, +0.043193903880796164, 0.043243857162173688, 0.043293810335442010, 0.043343763400475362, 0.043393716357149302, 0.043443669205338958, 0.043493621944919882, 0.043543574575766304, +0.043593527097753798, 0.043643479510757907, 0.043693431814652885, 0.043743384009314275, 0.043793336094617205, 0.043843288070437240, 0.043893239936648613, 0.043943191693126889, +0.043993143339747180, 0.044043094876385060, 0.044093046302914753, 0.044142997619211838, 0.044192948825151422, 0.044242899920609084, 0.044292850905459050, 0.044342801779576890, +0.044392752542837727, 0.044442703195117124, 0.044492653736289314, 0.044542604166229877, 0.044592554484814369, 0.044642504691917037, 0.044692454787413440, 0.044742404771178704, +0.044792354643088401, 0.044842304403016765, 0.044892254050839374, 0.044942203586431341, 0.044992153009668252, 0.045042102320424326, 0.045092051518575156, 0.045142000603995848, +0.045191949576561988, 0.045241898436147801, 0.045291847182628880, 0.045341795815880333, 0.045391744335777744, 0.045441692742195346, 0.045491641035008724, 0.045541589214093438, +0.045591537279323732, 0.045641485230575186, 0.045691433067722928, 0.045741380790642536, 0.045791328399208242, 0.045841275893295626, 0.045891223272779821, 0.045941170537536401, +0.045991117687439617, 0.046041064722365035, 0.046091011642187790, 0.046140958446783460, 0.046190905136026292, 0.046240851709791857, 0.046290798167955297, 0.046340744510392183, +0.046390690736976763, 0.046440636847584621, 0.046490582842090886, 0.046540528720371135, 0.046590474482299617, 0.046640420127751915, 0.046690365656603609, 0.046740311068728939, +0.046790256364003496, 0.046840201542302409, 0.046890146603501263, 0.046940091547474312, 0.046990036374097127, 0.047039981083244850, 0.047089925674793066, 0.047139870148616023, +0.047189814504589311, 0.047239758742588053, 0.047289702862487848, 0.047339646864162942, 0.047389590747488913, 0.047439534512340918, 0.047489478158594521, 0.047539421686123989, +0.047589365094804902, 0.047639308384512843, 0.047689251555122075, 0.047739194606508176, 0.047789137538546286, 0.047839080351112000, 0.047889023044079569, 0.047938965617324580, +0.047988908070722182, 0.048038850404147952, 0.048088792617476152, 0.048138734710582373, 0.048188676683341758, 0.048238618535629892, 0.048288560267321035, 0.048338501878290779, +0.048388443368414268, 0.048438384737567092, 0.048488325985623512, 0.048538267112459121, 0.048588208117949498, 0.048638149001968917, 0.048688089764392962, 0.048738030405096777, +0.048787970923955967, 0.048837911320844786, 0.048887851595638819, 0.048937791748213229, 0.048987731778443601, 0.049037671686204203, 0.049087611471370626, 0.049137551133818021, +0.049187490673421978, 0.049237430090056766, 0.049287369383597977, 0.049337308553920767, 0.049387247600900727, 0.049437186524412126, 0.049487125324330562, 0.049537064000531178, +0.049587002552889586, 0.049636940981280041, 0.049686879285578141, 0.049736817465659486, 0.049786755521398343, 0.049836693452670312, 0.049886631259350549, 0.049936568941314652, +0.049986506498436889, 0.050036443930592860, 0.050086381237657719, 0.050136318419507067, 0.050186255476015185, 0.050236192407057650, 0.050286129212509648, 0.050336065892246755, +0.050386002446143260, 0.050435938874074757, 0.050485875175916406, 0.050535811351543815, 0.050585747400831250, 0.050635683323654312, 0.050685619119888614, 0.050735554789408423, +0.050785490332089352, 0.050835425747806542, 0.050885361036435622, 0.050935296197850852, 0.050985231231927844, 0.051035166138541754, 0.051085100917568189, 0.051135035568881437, +0.051184970092357090, 0.051234904487870318, 0.051284838755296734, 0.051334772894510605, 0.051384706905387545, 0.051434640787802716, 0.051484574541631731, 0.051534508166748864, +0.051584441663029730, 0.051634375030349934, 0.051684308268583758, 0.051734241377606807, 0.051784174357294252, 0.051834107207521712, 0.051884039928163456, 0.051933972519095095, +0.051983904980191807, 0.052033837311329205, 0.052083769512381563, 0.052133701583224494, 0.052183633523733175, 0.052233565333783212, 0.052283497013248900, 0.052333428562005839, +0.052383359979929205, 0.052433291266894617, 0.052483222422776359, 0.052533153447450041, 0.052583084340791286, 0.052633015102674381, 0.052682945732974933, 0.052732876231568117, +0.052782806598329561, 0.052832736833133540, 0.052882666935855679, 0.052932596906371150, 0.052982526744555572, 0.053032456450283240, 0.053082386023429760, 0.053132315463870317, +0.053182244771480529, 0.053232173946134685, 0.053282102987708406, 0.053332031896076867, 0.053381960671115697, 0.053431889312699175, 0.053481817820702937, 0.053531746195002151, +0.053581674435472446, 0.053631602541988108, 0.053681530514424765, 0.053731458352658037, 0.053781386056562221, 0.053831313626012942, 0.053881241060885376, 0.053931168361055153, +0.053981095526396565, 0.054031022556785241, 0.054080949452096357, 0.054130876212205546, 0.054180802836987098, 0.054230729326316639, 0.054280655680069366, 0.054330581898120893, +0.054380507980345522, 0.054430433926618879, 0.054480359736816149, 0.054530285410812972, 0.054580210948483629, 0.054630136349703762, 0.054680061614348997, 0.054729986742293638, +0.054779911733413310, 0.054829836587583204, 0.054879761304678948, 0.054929685884574850, 0.054979610327146530, 0.055029534632269186, 0.055079458799818452, 0.055129382829668623, +0.055179306721695340, 0.055229230475773793, 0.055279154091779609, 0.055329077569587097, 0.055379000909071892, 0.055428924110109190, 0.055478847172574612, 0.055528770096342474, +0.055578692881288416, 0.055628615527288067, 0.055678538034215734, 0.055728460401947059, 0.055778382630357233, 0.055828304719321889, 0.055878226668715343, 0.055928148478413230, +0.055978070148290746, 0.056027991678223532, 0.056077913068085891, 0.056127834317753471, 0.056177755427101468, 0.056227676396005517, 0.056277597224339927, 0.056327517911980346, +0.056377438458801978, 0.056427358864680449, 0.056477279129490084, 0.056527199253106515, 0.056577119235404955, 0.056627039076261036, 0.056676958775549076, 0.056726878333144722, +0.056776797748923614, 0.056826717022760063, 0.056876636154529731, 0.056926555144107799, 0.056976473991369923, 0.057026392696190427, 0.057076311258444944, 0.057126229678008678, +0.057176147954757291, 0.057226066088565085, 0.057275984079307708, 0.057325901926860379, 0.057375819631098737, 0.057425737191897107, 0.057475654609131129, 0.057525571882676013, +0.057575489012407409, 0.057625405998199646, 0.057675322839928364, 0.057725239537469220, 0.057775156090696535, 0.057825072499485958, 0.057874988763712699, 0.057924904883252408, +0.057974820857979420, 0.058024736687769370, 0.058074652372497489, 0.058124567912039411, 0.058174483306269474, 0.058224398555063332, 0.058274313658296190, 0.058324228615843708, +0.058374143427580211, 0.058424058093381352, 0.058473972613122351, 0.058523886986678861, 0.058573801213925213, 0.058623715294737061, 0.058673629228990061, 0.058723543016558549, +0.058773456657318174, 0.058823370151144166, 0.058873283497912168, 0.058923196697496523, 0.058973109749772878, 0.059023022654616467, 0.059072935411902942, 0.059122848021506635, +0.059172760483303208, 0.059222672797167877, 0.059272584962976306, 0.059322496980602830, 0.059372408849923120, 0.059422320570812377, 0.059472232143146279, 0.059522143566799163, +0.059572054841646682, 0.059621965967564507, 0.059671876944426980, 0.059721787772109756, 0.059771698450488062, 0.059821608979437564, 0.059871519358832608, 0.059921429588548847, +0.059971339668461514, 0.060021249598446270, 0.060071159378377467, 0.060121069008130759, 0.060170978487581385, 0.060220887816605000, 0.060270796995075961, 0.060320706022869923, +0.060370614899862118, 0.060420523625928230, 0.060470432200942580, 0.060520340624780851, 0.060570248897318275, 0.060620157018430515, 0.060670064987991920, 0.060719972805878167, +0.060769880471964917, 0.060819787986126528, 0.060869695348238669, 0.060919602558176571, 0.060969509615815910, 0.061019416521031038, 0.061069323273697615, 0.061119229873690888, +0.061169136320886532, 0.061219042615158883, 0.061268948756383640, 0.061318854744436012, 0.061368760579191703, 0.061418666260525043, 0.061468571788311714, 0.061518477162426963, +0.061568382382746457, 0.061618287449144556, 0.061668192361496933, 0.061718097119679273, 0.061768001723565925, 0.061817906173032580, 0.061867810467954462, 0.061917714608207261, +0.061967618593665334, 0.062017522424204365, 0.062067426099699584, 0.062117329620026682, 0.062167232985060009, 0.062217136194675254, 0.062267039248747665, 0.062316942147152915, +0.062366844889765370, 0.062416747476460713, 0.062466649907114188, 0.062516552181601473, 0.062566454299796945, 0.062616356261576273, 0.062666258066815167, 0.062716159715387965, +0.062766061207170362, 0.062815962542037598, 0.062865863719865384, 0.062915764740528068, 0.062965665603901336, 0.063015566309860438, 0.063065466858281058, 0.063115367249037588, +0.063165267482005683, 0.063215167557060623, 0.063265067474078077, 0.063314967232932423, 0.063364866833499345, 0.063414766275654108, 0.063464665559272396, 0.063514564684228586, +0.063564463650398348, 0.063614362457656962, 0.063664261105880110, 0.063714159594942157, 0.063764057924718814, 0.063813956095085764, 0.063863854105917384, 0.063913751957089357, +0.063963649648476964, 0.064013547179955888, 0.064063444551400492, 0.064113341762686502, 0.064163238813689141, 0.064213135704284136, 0.064263032434345849, 0.064312929003749963, +0.064362825412371774, 0.064412721660086963, 0.064462617746769896, 0.064512513672296296, 0.064562409436541401, 0.064612305039380924, 0.064662200480689255, 0.064712095760342078, +0.064761990878215103, 0.064811885834182709, 0.064861780628120591, 0.064911675259904031, 0.064961569729408725, 0.065011464036509051, 0.065061358181080720, 0.065111252162998998, +0.065161145982139582, 0.065211039638376850, 0.065260933131586527, 0.065310826461643878, 0.065360719628424602, 0.065410612631803075, 0.065460505471655023, 0.065510398147855711, +0.065560290660280837, 0.065610183008804793, 0.065660075193303302, 0.065709967213652062, 0.065759859069725465, 0.065809750761399208, 0.065859642288548584, 0.065909533651049290, +0.065959424848775733, 0.066009315881603609, 0.066059206749408184, 0.066109097452065196, 0.066158987989449011, 0.066208878361435367, 0.066258768567899529, 0.066308658608717208, +0.066358548483762783, 0.066408438192912006, 0.066458327736040129, 0.066508217113022877, 0.066558106323734628, 0.066607995368051121, 0.066657884245848079, 0.066707772956999867, +0.066757661501382237, 0.066807549878870442, 0.066857438089340221, 0.066907326132665965, 0.066957214008723384, 0.067007101717387774, 0.067056989258534844, 0.067106876632039014, +0.067156763837775982, 0.067206650875621041, 0.067256537745449915, 0.067306424447136998, 0.067356310980558026, 0.067406197345588281, 0.067456083542103487, 0.067505969569978022, +0.067555855429087652, 0.067605741119307644, 0.067655626640513708, 0.067705511992580278, 0.067755397175383064, 0.067805282188797805, 0.067855167032698893, 0.067905051706962066, +0.067954936211462605, 0.068004820546076247, 0.068054704710677399, 0.068104588705141786, 0.068154472529344701, 0.068204356183161882, 0.068254239666467723, 0.068304122979137960, +0.068354006121047903, 0.068403889092073275, 0.068453771892088469, 0.068503654520969237, 0.068553536978590873, 0.068603419264829102, 0.068653301379558357, 0.068703183322654335, +0.068753065093992816, 0.068802946693448178, 0.068852828120896187, 0.068902709376212123, 0.068952590459271726, 0.069002471369949400, 0.069052352108120912, 0.069102232673661529, +0.069152113066447016, 0.069201993286351779, 0.069251873333251557, 0.069301753207021644, 0.069351632907537791, 0.069401512434674420, 0.069451391788307268, 0.069501270968311643, +0.069551149974563270, 0.069601028806936582, 0.069650907465307332, 0.069700785949551244, 0.069750664259542752, 0.069800542395157608, 0.069850420356271092, 0.069900298142758985, +0.069950175754495678, 0.070000053191356937, 0.070049930453218057, 0.070099807539954803, 0.070149684451441582, 0.070199561187554146, 0.070249437748167817, 0.070299314133158333, +0.070349190342400114, 0.070399066375768926, 0.070448942233140077, 0.070498817914389306, 0.070548693419391045, 0.070598568748021062, 0.070648443900154650, 0.070698318875667562, +0.070748193674434245, 0.070798068296330452, 0.070847942741231920, 0.070897817009013084, 0.070947691099549709, 0.070997565012717118, 0.071047438748391048, 0.071097312306445934, +0.071147185686757541, 0.071197058889201192, 0.071246931913652625, 0.071296804759986301, 0.071346677428077959, 0.071396549917802921, 0.071446422229036952, 0.071496294361654486, +0.071546166315531276, 0.071596038090542657, 0.071645909686564396, 0.071695781103470899, 0.071745652341137958, 0.071795523399441341, 0.071845394278255453, 0.071895264977456089, +0.071945135496918555, 0.071995005836518633, 0.072044875996130756, 0.072094745975630689, 0.072144615774893756, 0.072194485393795721, 0.072244354832211033, 0.072294224090015458, +0.072344093167084317, 0.072393962063293391, 0.072443830778517113, 0.072493699312631263, 0.072543567665511163, 0.072593435837032594, 0.072643303827069974, 0.072693171635499113, +0.072743039262195761, 0.072792906707034366, 0.072842773969890709, 0.072892641050640111, 0.072942507949158353, 0.072992374665319881, 0.073042241199000477, 0.073092107550075461, +0.073141973718420628, 0.073191839703910425, 0.073241705506420604, 0.073291571125826530, 0.073341436562003981, 0.073391301814827378, 0.073441166884172529, 0.073491031769914769, +0.073540896471929865, 0.073590760990092277, 0.073640625324277800, 0.073690489474362186, 0.073740353440219911, 0.073790217221726753, 0.073840080818758050, 0.073889944231189594, +0.073939807458895820, 0.073989670501752536, 0.074039533359635090, 0.074089396032419236, 0.074139258519979448, 0.074189120822191520, 0.074238982938930789, 0.074288844870073048, +0.074338706615492745, 0.074388568175065686, 0.074438429548667195, 0.074488290736173079, 0.074538151737457786, 0.074588012552397123, 0.074637873180866426, 0.074687733622741490, +0.074737593877896774, 0.074787453946208074, 0.074837313827551169, 0.074887173521800562, 0.074937033028832006, 0.074986892348520864, 0.075036751480742944, 0.075086610425372693, +0.075136469182285934, 0.075186327751357987, 0.075236186132464661, 0.075286044325480431, 0.075335902330281090, 0.075385760146742004, 0.075435617774738950, 0.075485475214146405, +0.075535332464840177, 0.075585189526695615, 0.075635046399588526, 0.075684903083393387, 0.075734759577985977, 0.075784615883242118, 0.075834471999036271, 0.075884327925244244, +0.075934183661741400, 0.075984039208403534, 0.076033894565105134, 0.076083749731721995, 0.076133604708129479, 0.076183459494203395, 0.076233314089818233, 0.076283168494849771, +0.076333022709173387, 0.076382876732664903, 0.076432730565198767, 0.076482584206650814, 0.076532437656896407, 0.076582290915811341, 0.076632143983270104, 0.076681996859148505, +0.076731849543322364, 0.076781702035666144, 0.076831554336055680, 0.076881406444366321, 0.076931258360473903, 0.076981110084252888, 0.077030961615579097, 0.077080812954327907, +0.077130664100375113, 0.077180515053595231, 0.077230365813864055, 0.077280216381056963, 0.077330066755049789, 0.077379916935716983, 0.077429766922934393, 0.077479616716577396, +0.077529466316521786, 0.077579315722642067, 0.077629164934814074, 0.077679013952913156, 0.077728862776815150, 0.077778711406394543, 0.077828559841527159, 0.077878408082088818, +0.077928256127954010, 0.077978103978998570, 0.078027951635097861, 0.078077799096127720, 0.078127646361962635, 0.078177493432478443, 0.078227340307550505, 0.078277186987054673, +0.078327033470865420, 0.078376879758858584, 0.078426725850909554, 0.078476571746894153, 0.078526417446686869, 0.078576262950163553, 0.078626108257199581, 0.078675953367670776, +0.078725798281451639, 0.078775642998418008, 0.078825487518445717, 0.078875331841409269, 0.078925175967184485, 0.078975019895646759, 0.079024863626671937, 0.079074707160134511, +0.079124550495910301, 0.079174393633874726, 0.079224236573903609, 0.079274079315871465, 0.079323921859654117, 0.079373764205126957, 0.079423606352165846, 0.079473448300645261, +0.079523290050441064, 0.079573131601428634, 0.079622972953483820, 0.079672814106481138, 0.079722655060296410, 0.079772495814805500, 0.079822336369882896, 0.079872176725404462, +0.079922016881245575, 0.079971856837282099, 0.080021696593388522, 0.080071536149440722, 0.080121375505314077, 0.080171214660884421, 0.080221053616026300, 0.080270892370615549, +0.080320730924527559, 0.080370569277638179, 0.080420407429821941, 0.080470245380954694, 0.080520083130911815, 0.080569920679569182, 0.080619758026801311, 0.080669595172484024, +0.080719432116493212, 0.080769268858703364, 0.080819105398990357, 0.080868941737229569, 0.080918777873296877, 0.080968613807066811, 0.081018449538415194, 0.081068285067217458, +0.081118120393349452, 0.081167955516685708, 0.081217790437102061, 0.081267625154473944, 0.081317459668677219, 0.081367293979586391, 0.081417128087077323, 0.081466961991025447, +0.081516795691306598, 0.081566629187795323, 0.081616462480367483, 0.081666295568898470, 0.081716128453264175, 0.081765961133339116, 0.081815793608999141, 0.081865625880120127, +0.081915457946576620, 0.081965289808244454, 0.082015121464999077, 0.082064952916716324, 0.082114784163270754, 0.082164615204538216, 0.082214446040394157, 0.082264276670714412, +0.082314107095373540, 0.082363937314247390, 0.082413767327211410, 0.082463597134141448, 0.082513426734912049, 0.082563256129399076, 0.082613085317477977, 0.082662914299024601, +0.082712743073913492, 0.082762571642020527, 0.082812400003221584, 0.082862228157391193, 0.082912056104405232, 0.082961883844139134, 0.083011711376468761, 0.083061538701268672, +0.083111365818414731, 0.083161192727782385, 0.083211019429247496, 0.083260845922684623, 0.083310672207969616, 0.083360498284977949, 0.083410324153585472, 0.083460149813666729, +0.083509975265097625, 0.083559800507753579, 0.083609625541510482, 0.083659450366242866, 0.083709274981826634, 0.083759099388137651, 0.083808923585050488, 0.083858747572441009, +0.083908571350184646, 0.083958394918157320, 0.084008218276233559, 0.084058041424289243, 0.084107864362199830, 0.084157687089841199, 0.084207509607087908, 0.084257331913815833, +0.084307154009900437, 0.084356975895217609, 0.084406797569641881, 0.084456619033049171, 0.084506440285314899, 0.084556261326314983, 0.084606082155923967, 0.084655902774017744, +0.084705723180471773, 0.084755543375161918, 0.084805363357962779, 0.084855183128750220, 0.084905002687400158, 0.084954822033787139, 0.085004641167787068, 0.085054460089275391, +0.085104278798128014, 0.085154097294219480, 0.085203915577425723, 0.085253733647622162, 0.085303551504684716, 0.085353369148487956, 0.085403186578907761, 0.085453003795819604, +0.085502820799099377, 0.085552637588621666, 0.085602454164262348, 0.085652270525896898, 0.085702086673401220, 0.085751902606649888, 0.085801718325518792, 0.085851533829883836, +0.085901349119619608, 0.085951164194602012, 0.086000979054706495, 0.086050793699808989, 0.086100608129784040, 0.086150422344507580, 0.086200236343855055, 0.086250050127702399, +0.086299863695924156, 0.086349677048396259, 0.086399490184994182, 0.086449303105593817, 0.086499115810069735, 0.086548928298297884, 0.086598740570153709, 0.086648552625513117, +0.086698364464250707, 0.086748176086242385, 0.086797987491364054, 0.086847798679490329, 0.086897609650497101, 0.086947420404259845, 0.086997230940654480, 0.087047041259555605, +0.087096851360839111, 0.087146661244380502, 0.087196470910055682, 0.087246280357739237, 0.087296089587307099, 0.087345898598634730, 0.087395707391598049, 0.087445515966071669, +0.087495324321931495, 0.087545132459053016, 0.087594940377312150, 0.087644748076583484, 0.087694555556742937, 0.087744362817666469, 0.087794169859228624, 0.087843976681305377, +0.087893783283772176, 0.087943589666504965, 0.087993395829378332, 0.088043201772268209, 0.088093007495050085, 0.088142812997599893, 0.088192618279792218, 0.088242423341502993, +0.088292228182607721, 0.088342032802982307, 0.088391837202501378, 0.088441641381040853, 0.088491445338476221, 0.088541249074683429, 0.088591052589537062, 0.088640855882913067, +0.088690658954686932, 0.088740461804734591, 0.088790264432930657, 0.088840066839151063, 0.088889869023271742, 0.088939670985167307, 0.088989472724713692, 0.089039274241786398, +0.089089075536261358, 0.089138876608013187, 0.089188677456917817, 0.089238478082850764, 0.089288278485687961, 0.089338078665304008, 0.089387878621574865, 0.089437678354376021, +0.089487477863583437, 0.089537277149071698, 0.089587076210716779, 0.089636875048394168, 0.089686673661979813, 0.089736472051348326, 0.089786270216375655, 0.089836068156937759, +0.089885865872909240, 0.089935663364166071, 0.089985460630583741, 0.090035257672038196, 0.090085054488404065, 0.090134851079557293, 0.090184647445373398, 0.090234443585728324, +0.090284239500496716, 0.090334035189554490, 0.090383830652777178, 0.090433625890040739, 0.090483420901219788, 0.090533215686190285, 0.090583010244827747, 0.090632804577008119, +0.090682598682606044, 0.090732392561497469, 0.090782186213558352, 0.090831979638663338, 0.090881772836688371, 0.090931565807508968, 0.090981358551001090, 0.091031151067039379, +0.091080943355499794, 0.091130735416257838, 0.091180527249189500, 0.091230318854169393, 0.091280110231073491, 0.091329901379777312, 0.091379692300156815, 0.091429482992086655, +0.091479273455442781, 0.091529063690100734, 0.091578853695936463, 0.091628643472824622, 0.091678433020641159, 0.091728222339261617, 0.091778011428561970, 0.091827800288416847, +0.091877588918702222, 0.091927377319294068, 0.091977165490067042, 0.092026953430897090, 0.092076741141659743, 0.092126528622231002, 0.092176315872485495, 0.092226102892299197, +0.092275889681547638, 0.092325676240106805, 0.092375462567851327, 0.092425248664657206, 0.092475034530399958, 0.092524820164955557, 0.092574605568198673, 0.092624390740005266, +0.092674175680250895, 0.092723960388811519, 0.092773744865561808, 0.092823529110377723, 0.092873313123135265, 0.092923096903709076, 0.092972880451975159, 0.093022663767809030, +0.093072446851086690, 0.093122229701682782, 0.093172012319473307, 0.093221794704333796, 0.093271576856140237, 0.093321358774767299, 0.093371140460090971, 0.093420921911986782, +0.093470703130330735, 0.093520484114997485, 0.093570264865863020, 0.093620045382802899, 0.093669825665693110, 0.093719605714408322, 0.093769385528824509, 0.093819165108817673, +0.093868944454262485, 0.093918723565034931, 0.093968502441010571, 0.094018281082065405, 0.094068059488074077, 0.094117837658912615, 0.094167615594456550, 0.094217393294581897, +0.094267170759163313, 0.094316947988076813, 0.094366724981197928, 0.094416501738402672, 0.094466278259565731, 0.094516054544563091, 0.094565830593270311, 0.094615606405563407, +0.094665381981317034, 0.094715157320407209, 0.094764932422709933, 0.094814707288099875, 0.094864481916453067, 0.094914256307645037, 0.094964030461551815, 0.095013804378048086, +0.095063578057009823, 0.095113351498312640, 0.095163124701832497, 0.095212897667444119, 0.095262670395023494, 0.095312442884446180, 0.095362215135588208, 0.095411987148324259, +0.095461758922530338, 0.095511530458082028, 0.095561301754855332, 0.095611072812724934, 0.095660843631566850, 0.095710614211256664, 0.095760384551670394, 0.095810154652682708, +0.095859924514169637, 0.095909694136007195, 0.095959463518070082, 0.096009232660234298, 0.096059001562375443, 0.096108770224369519, 0.096158538646091238, 0.096208306827416601, +0.096258074768221208, 0.096307842468381061, 0.096357609927770871, 0.096407377146266654, 0.096457144123743982, 0.096506910860078912, 0.096556677355146114, 0.096606443608821618, +0.096656209620981023, 0.096705975391500332, 0.096755740920254268, 0.096805506207118863, 0.096855271251970118, 0.096905036054682758, 0.096954800615132813, 0.097004564933195855, +0.097054329008747942, 0.097104092841663756, 0.097153856431819341, 0.097203619779090283, 0.097253382883352613, 0.097303145744481054, 0.097352908362351623, 0.097402670736839919, +0.097452432867821986, 0.097502194755172536, 0.097551956398767584, 0.097601717798482743, 0.097651478954194057, 0.097701239865776224, 0.097751000533105301, 0.097800760956057317, +0.097850521134506985, 0.097900281068330347, 0.097950040757403017, 0.097999800201601012, 0.098049559400799083, 0.098099318354873233, 0.098149077063699103, 0.098198835527152722, +0.098248593745108803, 0.098298351717443402, 0.098348109444032134, 0.098397866924751012, 0.098447624159474806, 0.098497381148079516, 0.098547137890440784, 0.098596894386434653, +0.098646650635935834, 0.098696406638820400, 0.098746162394963949, 0.098795917904242525, 0.098845673166530867, 0.098895428181705033, 0.098945182949641067, 0.098994937470213692, +0.099044691743298982, 0.099094445768772535, 0.099144199546510423, 0.099193953076387370, 0.099243706358279435, 0.099293459392062244, 0.099343212177611828, 0.099392964714802953, +0.099442717003511663, 0.099492469043613571, 0.099542220834984763, 0.099591972377499949, 0.099641723671035201, 0.099691474715466161, 0.099741225510668857, 0.099790976056518058, +0.099840726352889819, 0.099890476399660214, 0.099940226196703966, 0.099989975743897147, 0.100039725041115400, 0.100089474088234780, 0.100139222885130020, 0.100188971431677220, +0.100238719727751990, 0.100288467773230390, 0.100338215567987190, 0.100387963111898450, 0.100437710404839800, 0.100487457446687310, 0.100537204237315740, 0.100586950776601170, +0.100636697064419200, 0.100686443100645950, 0.100736188885156130, 0.100785934417825860, 0.100835679698531190, 0.100885424727146870, 0.100935169503549000, 0.100984914027613200, +0.101034658299215550, 0.101084402318230820, 0.101134146084535080, 0.101183889598003980, 0.101233632858513600, 0.101283375865938690, 0.101333118620155340, 0.101382861121039200, +0.101432603368466340, 0.101482345362311540, 0.101532087102450870, 0.101581828588759980, 0.101631569821114970, 0.101681310799390580, 0.101731051523462930, 0.101780791993208080, +0.101830532208500820, 0.101880272169217220, 0.101930011875232930, 0.101979751326424060, 0.102029490522665380, 0.102079229463832970, 0.102128968149802480, 0.102178706580450020, +0.102228444755650350, 0.102278182675279560, 0.102327920339213310, 0.102377657747327720, 0.102427394899497540, 0.102477131795598860, 0.102526868435507360, 0.102576604819099120, +0.102626340946248940, 0.102676076816832900, 0.102725812430726660, 0.102775547787806340, 0.102825282887946720, 0.102875017731023880, 0.102924752316913930, 0.102974486645491680, +0.103024220716633200, 0.103073954530214160, 0.103123688086110680, 0.103173421384197550, 0.103223154424350860, 0.103272887206446280, 0.103322619730359930, 0.103372351995966570, +0.103422084003142360, 0.103471815751762920, 0.103521547241704380, 0.103571278472841550, 0.103621009445050510, 0.103670740158206940, 0.103720470612186980, 0.103770200806865390, +0.103819930742118300, 0.103869660417821820, 0.103919389833850750, 0.103969118990081210, 0.104018847886388880, 0.104068576522649850, 0.104118304898738950, 0.104168033014532290, +0.104217760869905540, 0.104267488464734840, 0.104317215798894970, 0.104366942872262060, 0.104416669684711790, 0.104466396236120290, 0.104516122526362370, 0.104565848555314130, +0.104615574322851280, 0.104665299828849920, 0.104715025073184880, 0.104764750055732270, 0.104814474776368240, 0.104864199234967560, 0.104913923431406400, 0.104963647365560420, +0.105013371037305780, 0.105063094446517260, 0.105112817593071010, 0.105162540476842700, 0.105212263097708490, 0.105261985455543190, 0.105311707550222910, 0.105361429381623360, +0.105411150949620700, 0.105460872254089700, 0.105510593294906530, 0.105560314071946880, 0.105610034585086870, 0.105659754834201360, 0.105709474819166440, 0.105759194539857840, +0.105808913996151690, 0.105858633187922810, 0.105908352115047360, 0.105958070777401460, 0.106007789174859950, 0.106057507307298970, 0.106107225174594210, 0.106156942776621840, +0.106206660113256660, 0.106256377184374850, 0.106306093989852080, 0.106355810529564510, 0.106405526803386980, 0.106455242811195640, 0.106504958552866190, 0.106554674028274790, +0.106604389237296250, 0.106654104179806750, 0.106703818855681980, 0.106753533264798110, 0.106803247407029960, 0.106852961282253690, 0.106902674890345470, 0.106952388231180110, +0.107002101304633790, 0.107051814110582210, 0.107101526648901530, 0.107151238919466610, 0.107200950922153580, 0.107250662656838180, 0.107300374123396550, 0.107350085321703550, +0.107399796251635340, 0.107449506913067640, 0.107499217305876610, 0.107548927429937100, 0.107598637285125270, 0.107648346871316840, 0.107698056188388000, 0.107747765236213570, +0.107797474014669730, 0.107847182523632640, 0.107896890762977150, 0.107946598732579450, 0.107996306432315240, 0.108046013862060700, 0.108095721021690700, 0.108145427911081380, +0.108195134530108500, 0.108244840878648220, 0.108294546956575410, 0.108344252763766220, 0.108393958300096390, 0.108443663565442120, 0.108493368559678250, 0.108543073282680950, +0.108592777734325980, 0.108642481914489500, 0.108692185823046360, 0.108741889459872770, 0.108791592824844460, 0.108841295917837600, 0.108890998738727070, 0.108940701287389030, +0.108990403563699680, 0.109040105567533890, 0.109089807298767840, 0.109139508757277250, 0.109189209942938350, 0.109238910855625980, 0.109288611495216320, 0.109338311861585140, +0.109388011954608620, 0.109437711774161630, 0.109487411320120370, 0.109537110592360570, 0.109586809590758440, 0.109636508315188840, 0.109686206765527970, 0.109735904941651590, +0.109785602843435890, 0.109835300470755720, 0.109884997823487320, 0.109934694901506850, 0.109984391704689220, 0.110034088232910610, 0.110083784486046780, 0.110133480463973910, +0.110183176166566920, 0.110232871593701970, 0.110282566745254860, 0.110332261621101770, 0.110381956221117570, 0.110431650545178490, 0.110481344593160280, 0.110531038364939160, +0.110580731860390000, 0.110630425079389000, 0.110680118021811950, 0.110729810687535040, 0.110779503076433170, 0.110829195188382520, 0.110878887023259350, 0.110928578580938510, +0.110978269861296220, 0.111027960864208260, 0.111077651589550840, 0.111127342037198850, 0.111177032207028500, 0.111226722098915570, 0.111276411712736280, 0.111326101048365520, +0.111375790105679500, 0.111425478884554010, 0.111475167384865260, 0.111524855606488160, 0.111574543549298910, 0.111624231213173300, 0.111673918597987570, 0.111723605703616590, +0.111773292529936600, 0.111822979076823810, 0.111872665344153150, 0.111922351331800810, 0.111972037039642610, 0.112021722467554740, 0.112071407615412120, 0.112121092483090990, +0.112170777070467130, 0.112220461377416770, 0.112270145403814820, 0.112319829149537490, 0.112369512614460600, 0.112419195798460370, 0.112468878701411700, 0.112518561323190840, +0.112568243663673570, 0.112617925722736140, 0.112667607500253450, 0.112717288996101740, 0.112766970210156820, 0.112816651142294900, 0.112866331792390930, 0.112916012160321110, +0.112965692245961720, 0.113015372049187640, 0.113065051569875130, 0.113114730807900010, 0.113164409763138490, 0.113214088435465500, 0.113263766824757310, 0.113313444930889680, +0.113363122753738890, 0.113412800293179850, 0.113462477549088810, 0.113512154521341570, 0.113561831209814390, 0.113611507614382200, 0.113661183734921230, 0.113710859571307300, +0.113760535123416680, 0.113810210391124250, 0.113859885374306320, 0.113909560072839100, 0.113959234486597550, 0.114008908615457910, 0.114058582459296010, 0.114108256017988070, +0.114157929291409070, 0.114207602279435240, 0.114257274981942410, 0.114306947398806830, 0.114356619529903430, 0.114406291375108490, 0.114455962934297830, 0.114505634207347690, +0.114555305194133030, 0.114604975894530100, 0.114654646308414740, 0.114704316435663200, 0.114753986276150440, 0.114803655829752700, 0.114853325096346270, 0.114902994075806080, +0.114952662768008400, 0.115002331172829070, 0.115051999290144360, 0.115101667119829190, 0.115151334661759880, 0.115201001915812220, 0.115250668881862490, 0.115300335559785650, +0.115350001949457980, 0.115399668050755300, 0.115449333863553880, 0.115498999387728700, 0.115548664623156020, 0.115598329569711670, 0.115647994227271940, 0.115697658595711790, +0.115747322674907490, 0.115796986464734880, 0.115846649965070240, 0.115896313175788550, 0.115945976096766060, 0.115995638727879090, 0.116045301069002570, 0.116094963120012790, +0.116144624880785610, 0.116194286351197320, 0.116243947531122850, 0.116293608420438520, 0.116343269019020190, 0.116392929326744110, 0.116442589343485270, 0.116492249069119950, +0.116541908503524010, 0.116591567646573750, 0.116641226498144110, 0.116690885058111410, 0.116740543326351500, 0.116790201302740690, 0.116839858987153920, 0.116889516379467500, +0.116939173479557730, 0.116988830287299590, 0.117038486802569370, 0.117088143025242940, 0.117137798955196590, 0.117187454592305300, 0.117237109936445370, 0.117286764987492670, +0.117336419745323510, 0.117386074209812840, 0.117435728380837000, 0.117485382258271830, 0.117535035841993650, 0.117584689131877430, 0.117634342127799500, 0.117683994829635710, +0.117733647237262370, 0.117783299350554480, 0.117832951169388330, 0.117882602693640260, 0.117932253923185220, 0.117981904857899560, 0.118031555497659130, 0.118081205842340260, +0.118130855891817930, 0.118180505645968460, 0.118230155104667740, 0.118279804267792050, 0.118329453135216420, 0.118379101706817160, 0.118428749982470150, 0.118478397962051690, +0.118528045645436800, 0.118577693032501800, 0.118627340123122570, 0.118676986917175420, 0.118726633414535380, 0.118776279615078740, 0.118825925518681850, 0.118875571125219700, +0.118925216434568620, 0.118974861446604500, 0.119024506161203680, 0.119074150578241140, 0.119123794697593220, 0.119173438519135820, 0.119223082042745270, 0.119272725268296580, +0.119322368195666060, 0.119372010824729630, 0.119421653155363610, 0.119471295187443020, 0.119520936920844190, 0.119570578355443020, 0.119620219491115840, 0.119669860327737670, +0.119719500865184850, 0.119769141103333280, 0.119818781042059300, 0.119868420681237920, 0.119918060020745500, 0.119967699060458360, 0.120017337800251530, 0.120066976240001360, +0.120116614379583750, 0.120166252218875040, 0.120215889757750270, 0.120265526996085770, 0.120315163933757450, 0.120364800570641670, 0.120414436906613440, 0.120464072941549120, +0.120513708675324610, 0.120563344107816270, 0.120612979238899150, 0.120662614068449550, 0.120712248596343440, 0.120761882822457150, 0.120811516746665700, 0.120861150368845450, +0.120910783688872790, 0.120960416706622710, 0.121010049421971590, 0.121059681834795350, 0.121109313944970350, 0.121158945752371610, 0.121208577256875530, 0.121258208458358000, +0.121307839356695370, 0.121357469951762720, 0.121407100243436390, 0.121456730231592310, 0.121506359916106840, 0.121555989296855040, 0.121605618373713250, 0.121655247146557440, +0.121704875615263930, 0.121754503779707800, 0.121804131639765400, 0.121853759195313130, 0.121903386446226020, 0.121953013392380430, 0.122002640033652310, 0.122052266369918030, +0.122101892401052650, 0.122151518126932530, 0.122201143547433620, 0.122250768662432300, 0.122300393471803600, 0.122350017975423940, 0.122399642173169220, 0.122449266064915840, +0.122498889650538840, 0.122548512929914630, 0.122598135902919140, 0.122647758569428740, 0.122697380929318510, 0.122747002982464830, 0.122796624728743640, 0.122846246168031330, +0.122895867300202950, 0.122945488125134920, 0.122995108642703600, 0.123044728852784070, 0.123094348755252730, 0.123143968349985510, 0.123193587636858810, 0.123243206615747700, +0.123292825286528560, 0.123342443649077370, 0.123392061703270510, 0.123441679448983060, 0.123491296886091410, 0.123540914014471510, 0.123590530833999760, 0.123640147344551250, +0.123689763546002390, 0.123739379438229100, 0.123788995021107810, 0.123838610294513580, 0.123888225258322840, 0.123937839912411970, 0.123987454256656070, 0.124037068290931520, +0.124086682015114300, 0.124136295429080820, 0.124185908532706170, 0.124235521325866740, 0.124285133808438500, 0.124334745980297880, 0.124384357841319950, 0.124433969391381110, +0.124483580630357370, 0.124533191558125100, 0.124582802174559430, 0.124632412479536740, 0.124682022472933020, 0.124731632154624680, 0.124781241524486830, 0.124830850582395870, +0.124880459328228240, 0.124930067761859000, 0.124979675883164600, 0.125029283692021010, 0.125078891188304650, 0.125128498371890630, 0.125178105242655350, 0.125227711800474820, +0.125277318045225430, 0.125326923976782330, 0.125376529595021910, 0.125426134899820160, 0.125475739891053510, 0.125525344568597070, 0.125574948932327290, 0.125624552982120140, +0.125674156717852010, 0.125723760139398070, 0.125773363246634740, 0.125822966039438430, 0.125872568517684270, 0.125922170681248670, 0.125971772530007660, 0.126021374063837680, +0.126070975282613800, 0.126120576186212470, 0.126170176774509730, 0.126219777047381960, 0.126269377004704310, 0.126318976646353250, 0.126368575972204720, 0.126418174982135200, +0.126467773676019770, 0.126517372053734950, 0.126566970115156690, 0.126616567860161430, 0.126666165288624320, 0.126715762400421790, 0.126765359195429860, 0.126814955673524990, +0.126864551834582260, 0.126914147678478170, 0.126963743205089160, 0.127013338414290330, 0.127062933305958160, 0.127112527879968660, 0.127162122136198260, 0.127211716074522140, +0.127261309694816720, 0.127310902996958020, 0.127360495980822520, 0.127410088646285340, 0.127459680993222910, 0.127509273021511300, 0.127558864731026960, 0.127608456121645010, +0.127658047193241890, 0.127707637945693670, 0.127757228378876820, 0.127806818492666420, 0.127856408286939010, 0.127905997761570990, 0.127955586916437550, 0.128005175751415150, +0.128054764266379790, 0.128104352461207970, 0.128153940335774850, 0.128203527889956840, 0.128253115123630020, 0.128302702036670880, 0.128352288628954540, 0.128401874900357450, +0.128451460850755680, 0.128501046480025720, 0.128550631788042690, 0.128600216774683060, 0.128649801439822910, 0.128699385783338700, 0.128748969805105580, 0.128798553505000050, +0.128848136882898560, 0.128897719938676270, 0.128947302672209720, 0.128996885083374900, 0.129046467172048290, 0.129096048938105080, 0.129145630381421740, 0.129195211501874350, +0.129244792299339360, 0.129294372773691930, 0.129343952924808600, 0.129393532752565380, 0.129443112256838740, 0.129492691437503920, 0.129542270294437320, 0.129591848827515090, +0.129641427036613660, 0.129691004921608230, 0.129740582482375270, 0.129790159718790880, 0.129839736630731510, 0.129889313218072370, 0.129938889480689930, 0.129988465418460740, +0.130038041031259930, 0.130087616318964010, 0.130137191281449040, 0.130186765918591550, 0.130236340230266700, 0.130285914216351000, 0.130335487876720500, 0.130385061211251760, +0.130434634219819880, 0.130484206902301450, 0.130533779258572490, 0.130583351288509510, 0.130632922991987730, 0.130682494368883630, 0.130732065419073310, 0.130781636142433240, +0.130831206538838670, 0.130880776608166080, 0.130930346350291970, 0.130979915765091550, 0.131029484852441370, 0.131079053612217440, 0.131128622044296340, 0.131178190148553250, +0.131227757924864690, 0.131277325373106710, 0.131326892493155850, 0.131376459284887340, 0.131426025748177690, 0.131475591882902950, 0.131525157688939690, 0.131574723166163090, +0.131624288314449690, 0.131673853133675550, 0.131723417623717250, 0.131772981784449930, 0.131822545615750190, 0.131872109117494500, 0.131921672289558090, 0.131971235131817520, +0.132020797644148870, 0.132070359826428650, 0.132119921678532090, 0.132169483200335720, 0.132219044391715640, 0.132268605252548410, 0.132318165782709220, 0.132367725982074610, +0.132417285850520680, 0.132466845387924000, 0.132516404594159750, 0.132565963469104490, 0.132615522012634300, 0.132665080224625780, 0.132714638104954100, 0.132764195653495810, +0.132813752870127500, 0.132863309754724350, 0.132912866307162950, 0.132962422527319350, 0.133011978415070150, 0.133061533970290580, 0.133111089192857160, 0.133160644082646020, +0.133210198639533710, 0.133259752863395450, 0.133309306754107820, 0.133358860311546920, 0.133408413535589330, 0.133457966426110240, 0.133507518982986240, 0.133557071206093450, +0.133606623095308410, 0.133656174650506360, 0.133705725871563900, 0.133755276758357110, 0.133804827310762600, 0.133854377528655530, 0.133903927411912570, 0.133953476960410180, +0.134003026174023680, 0.134052575052629630, 0.134102123596104130, 0.134151671804323750, 0.134201219677163780, 0.134250767214500740, 0.134300314416210760, 0.134349861282170470, +0.134399407812255070, 0.134448954006341160, 0.134498499864304870, 0.134548045386022750, 0.134597590571370110, 0.134647135420223470, 0.134696679932458980, 0.134746224107953260, +0.134795767946581520, 0.134845311448220350, 0.134894854612746360, 0.134944397440034780, 0.134993939929962230, 0.135043482082404800, 0.135093023897239120, 0.135142565374340440, +0.135192106513585350, 0.135241647314850000, 0.135291187778010940, 0.135340727902943490, 0.135390267689524220, 0.135439807137629290, 0.135489346247135290, 0.135538885017917470, +0.135588423449852450, 0.135637961542816350, 0.135687499296685780, 0.135737036711336050, 0.135786573786643720, 0.135836110522485400, 0.135885646918736340, 0.135935182975273180, +0.135984718691972070, 0.136034254068709590, 0.136083789105361040, 0.136133323801803010, 0.136182858157911670, 0.136232392173563640, 0.136281925848634190, 0.136331459182999910, +0.136380992176536990, 0.136430524829122020, 0.136480057140630300, 0.136529589110938460, 0.136579120739922620, 0.136628652027459440, 0.136678182973424180, 0.136727713577693450, +0.136777243840143450, 0.136826773760650780, 0.136876303339090730, 0.136925832575339940, 0.136975361469274970, 0.137024890020771200, 0.137074418229705170, 0.137123946095953130, +0.137173473619391640, 0.137223000799896020, 0.137272527637342910, 0.137322054131608470, 0.137371580282569350, 0.137421106090100830, 0.137470631554079570, 0.137520156674381690, +0.137569681450883880, 0.137619205883461440, 0.137668729971990980, 0.137718253716348660, 0.137767777116411190, 0.137817300172053820, 0.137866822883153190, 0.137916345249585960, +0.137965867271227420, 0.138015388947954200, 0.138064910279642520, 0.138114431266169010, 0.138163951907408960, 0.138213472203239040, 0.138262992153535460, 0.138312511758174830, +0.138362031017032460, 0.138411549929985030, 0.138461068496908730, 0.138510586717680180, 0.138560104592174740, 0.138609622120269030, 0.138659139301839260, 0.138708656136762090, +0.138758172624912860, 0.138807688766168170, 0.138857204560404710, 0.138906720007497790, 0.138956235107324080, 0.139005749859759780, 0.139055264264681510, 0.139104778321964690, +0.139154292031485910, 0.139203805393121380, 0.139253318406747790, 0.139302831072240480, 0.139352343389476080, 0.139401855358330830, 0.139451366978681350, 0.139500878250403050, +0.139550389173372540, 0.139599899747466060, 0.139649409972560260, 0.139698919848530500, 0.139748429375253450, 0.139797938552605750, 0.139847447380462790, 0.139896955858701180, +0.139946463987197180, 0.139995971765827480, 0.140045479194467410, 0.140094986272993630, 0.140144493001282400, 0.140193999379210370, 0.140243505406652900, 0.140293011083486690, +0.140342516409587920, 0.140392021384833310, 0.140441526009098210, 0.140491030282259290, 0.140540534204192800, 0.140590037774775380, 0.140639540993882480, 0.140689043861390690, +0.140738546377176310, 0.140788048541115980, 0.140837550353085120, 0.140887051812960380, 0.140936552920618440, 0.140986053675934670, 0.141035554078785790, 0.141085054129048010, +0.141134553826598010, 0.141184053171311220, 0.141233552163064300, 0.141283050801733480, 0.141332549087195470, 0.141382047019325660, 0.141431544598000720, 0.141481041823096950, +0.141530538694490980, 0.141580035212058250, 0.141629531375675410, 0.141679027185218740, 0.141728522640564960, 0.141778017741589430, 0.141827512488168860, 0.141877006880179930, +0.141926500917498060, 0.141975994599999930, 0.142025487927561810, 0.142074980900060430, 0.142124473517371150, 0.142173965779370660, 0.142223457685935280, 0.142272949236941700, +0.142322440432265300, 0.142371931271782800, 0.142421421755370450, 0.142470911882905000, 0.142520401654261860, 0.142569891069317670, 0.142619380127948780, 0.142668868830031880, +0.142718357175442350, 0.142767845164056940, 0.142817332795752370, 0.142866820070403990, 0.142916306987888600, 0.142965793548082420, 0.143015279750862200, 0.143064765596103340, +0.143114251083682590, 0.143163736213476170, 0.143213220985360880, 0.143262705399212100, 0.143312189454906540, 0.143361673152320510, 0.143411156491330740, 0.143460639471812620, +0.143510122093642920, 0.143559604356697930, 0.143609086260854340, 0.143658567805987620, 0.143708048991974450, 0.143757529818691190, 0.143807010286014530, 0.143856490393819900, +0.143905970141984060, 0.143955449530383720, 0.144004928558894320, 0.144054407227392600, 0.144103885535754870, 0.144153363483857850, 0.144202841071576990, 0.144252318298789010, +0.144301795165370260, 0.144351271671197460, 0.144400747816146040, 0.144450223600092740, 0.144499699022913870, 0.144549174084486230, 0.144598648784685170, 0.144648123123387510, +0.144697597100469560, 0.144747070715808030, 0.144796543969278410, 0.144846016860757400, 0.144895489390121810, 0.144944961557247040, 0.144994433362009870, 0.145043904804286610, +0.145093375883954050, 0.145142846600887610, 0.145192316954964040, 0.145241786946059690, 0.145291256574051290, 0.145340725838814330, 0.145390194740225550, 0.145439663278161270, +0.145489131452498280, 0.145538599263112020, 0.145588066709879280, 0.145637533792676350, 0.145687000511380030, 0.145736466865865780, 0.145785932856010350, 0.145835398481690550, +0.145884863742781780, 0.145934328639160890, 0.145983793170704150, 0.146033257337288360, 0.146082721138789010, 0.146132184575082870, 0.146181647646046240, 0.146231110351555920, +0.146280572691487420, 0.146330034665717450, 0.146379496274122420, 0.146428957516579080, 0.146478418392962910, 0.146527878903150690, 0.146577339047018810, 0.146626798824443960, +0.146676258235301730, 0.146725717279468810, 0.146775175956822050, 0.146824634267236910, 0.146874092210590200, 0.146923549786758260, 0.146973006995617860, 0.147022463837044510, +0.147071920310915010, 0.147121376417105710, 0.147170832155493400, 0.147220287525953590, 0.147269742528363030, 0.147319197162598140, 0.147368651428535670, 0.147418105326051150, +0.147467558855021390, 0.147517012015322690, 0.147566464806831920, 0.147615917229424550, 0.147665369282977380, 0.147714820967366790, 0.147764272282469580, 0.147813723228161280, +0.147863173804318630, 0.147912624010818510, 0.147962073847536370, 0.148011523314349080, 0.148060972411132950, 0.148110421137764850, 0.148159869494120240, 0.148209317480075960, +0.148258765095508390, 0.148308212340294370, 0.148357659214309350, 0.148407105717430180, 0.148456551849533270, 0.148505997610495400, 0.148555443000192110, 0.148604888018500190, +0.148654332665296070, 0.148703776940456560, 0.148753220843857140, 0.148802664375374700, 0.148852107534886040, 0.148901550322266650, 0.148950992737393400, 0.149000434780142660, +0.149049876450391280, 0.149099317748014740, 0.149148758672889930, 0.149198199224893220, 0.149247639403901460, 0.149297079209790160, 0.149346518642436170, 0.149395957701715880, +0.149445396387506120, 0.149494834699682420, 0.149544272638121640, 0.149593710202700210, 0.149643147393294930, 0.149692584209781320, 0.149742020652036260, 0.149791456719936600, +0.149840892413357850, 0.149890327732176860, 0.149939762676270070, 0.149989197245514290, 0.150038631439785100, 0.150088065258959320, 0.150137498702913370, 0.150186931771524150, +0.150236364464667120, 0.150285796782219210, 0.150335228724056770, 0.150384660290056730, 0.150434091480094590, 0.150483522294047210, 0.150532952731791040, 0.150582382793202910, +0.150631812478158410, 0.150681241786534360, 0.150730670718207200, 0.150780099273053830, 0.150829527450949740, 0.150878955251771860, 0.150928382675397020, 0.150977809721700770, +0.151027236390560010, 0.151076662681851160, 0.151126088595451100, 0.151175514131235370, 0.151224939289080850, 0.151274364068863960, 0.151323788470461630, 0.151373212493749380, +0.151422636138604130, 0.151472059404902240, 0.151521482292520660, 0.151570904801334950, 0.151620326931221960, 0.151669748682058150, 0.151719170053720430, 0.151768591046084340, +0.151818011659026750, 0.151867431892424600, 0.151916851746153410, 0.151966271220090100, 0.152015690314111110, 0.152065109028093340, 0.152114527361912330, 0.152163945315445030, +0.152213362888567880, 0.152262780081157730, 0.152312196893090200, 0.152361613324242170, 0.152411029374490140, 0.152460445043710920, 0.152509860331780210, 0.152559275238574820, +0.152608689763971240, 0.152658103907846370, 0.152707517670075820, 0.152756931050536450, 0.152806344049105200, 0.152855756665657650, 0.152905168900070720, 0.152954580752220880, +0.153003992221984990, 0.153053403309238720, 0.153102814013858920, 0.153152224335722090, 0.153201634274705120, 0.153251043830683640, 0.153300453003534560, 0.153349861793134340, +0.153399270199359890, 0.153448678222086850, 0.153498085861192100, 0.153547493116552140, 0.153596899988043880, 0.153646306475542950, 0.153695712578926220, 0.153745118298070690, +0.153794523632851900, 0.153843928583146800, 0.153893333148831880, 0.153942737329784090, 0.153992141125878970, 0.154041544536993540, 0.154090947563004230, 0.154140350203788000, +0.154189752459220450, 0.154239154329178510, 0.154288555813538700, 0.154337956912177910, 0.154387357624971830, 0.154436757951797320, 0.154486157892530950, 0.154535557447049580, +0.154584956615228920, 0.154634355396945840, 0.154683753792076880, 0.154733151800498990, 0.154782549422087770, 0.154831946656720180, 0.154881343504273160, 0.154930739964622340, +0.154980136037644660, 0.155029531723216650, 0.155078927021215260, 0.155128321931516100, 0.155177716453996140, 0.155227110588531890, 0.155276504335000310, 0.155325897693277010, +0.155375290663238990, 0.155424683244762720, 0.155474075437725210, 0.155523467242002030, 0.155572858657470230, 0.155622249684006260, 0.155671640321487090, 0.155721030569788390, +0.155770420428787110, 0.155819809898360250, 0.155869198978383390, 0.155918587668733540, 0.155967975969287240, 0.156017363879921410, 0.156066751400511770, 0.156116138530935230, +0.156165525271068330, 0.156214911620788070, 0.156264297579970100, 0.156313683148491370, 0.156363068326228430, 0.156412453113058260, 0.156461837508856530, 0.156511221513500190, +0.156560605126865810, 0.156609988348830360, 0.156659371179269510, 0.156708753618060190, 0.156758135665079460, 0.156807517320202950, 0.156856898583307650, 0.156906279454270080, +0.156955659932967260, 0.157005040019274870, 0.157054419713069850, 0.157103799014228800, 0.157153177922628700, 0.157202556438145210, 0.157251934560655310, 0.157301312290035580, +0.157350689626163030, 0.157400066568913280, 0.157449443118163390, 0.157498819273789890, 0.157548195035669770, 0.157597570403678750, 0.157646945377693780, 0.157696319957591450, +0.157745694143248770, 0.157795067934541400, 0.157844441331346370, 0.157893814333540690, 0.157943186941000010, 0.157992559153601360, 0.158041930971221320, 0.158091302393736920, +0.158140673421023780, 0.158190044052958970, 0.158239414289419070, 0.158288784130281050, 0.158338153575420660, 0.158387522624714870, 0.158436891278040250, 0.158486259535273870, +0.158535627396291400, 0.158584994860969860, 0.158634361929185810, 0.158683728600816340, 0.158733094875737060, 0.158782460753825070, 0.158831826234957370, 0.158881191319009660, +0.158930556005858980, 0.158979920295381880, 0.159029284187455430, 0.159078647681955340, 0.159128010778758660, 0.159177373477741910, 0.159226735778782190, 0.159276097681755160, +0.159325459186537900, 0.159374820293007010, 0.159424181001039500, 0.159473541310511090, 0.159522901221298840, 0.159572260733279320, 0.159621619846329610, 0.159670978560325390, +0.159720336875143730, 0.159769694790661660, 0.159819052306754920, 0.159868409423300550, 0.159917766140175170, 0.159967122457255810, 0.160016478374418180, 0.160065833891539390, +0.160115189008495970, 0.160164543725165060, 0.160213898041422330, 0.160263251957144860, 0.160312605472209270, 0.160361958586492580, 0.160411311299870570, 0.160460663612220280, +0.160510015523418340, 0.160559367033341780, 0.160608718141866390, 0.160658068848869180, 0.160707419154227260, 0.160756769057816330, 0.160806118559513490, 0.160855467659195370, +0.160904816356738980, 0.160954164652020140, 0.161003512544915880, 0.161052860035302840, 0.161102207123058090, 0.161151553808057370, 0.161200900090177790, 0.161250245969295960, +0.161299591445288940, 0.161348936518032500, 0.161398281187403710, 0.161447625453279230, 0.161496969315536140, 0.161546312774050150, 0.161595655828698420, 0.161644998479357540, +0.161694340725904580, 0.161743682568215340, 0.161793024006166910, 0.161842365039636340, 0.161891705668499420, 0.161941045892633250, 0.161990385711914460, 0.162039725126220140, +0.162089064135426060, 0.162138402739409330, 0.162187740938046610, 0.162237078731214960, 0.162286416118790160, 0.162335753100649320, 0.162385089676669120, 0.162434425846726630, +0.162483761610697640, 0.162533096968459220, 0.162582431919888080, 0.162631766464861300, 0.162681100603254660, 0.162730434334945270, 0.162779767659810230, 0.162829100577725340, +0.162878433088567700, 0.162927765192213970, 0.162977096888541260, 0.163026428177425380, 0.163075759058743410, 0.163125089532372060, 0.163174419598188430, 0.163223749256068310, +0.163273078505888790, 0.163322407347526590, 0.163371735780858840, 0.163421063805761270, 0.163470391422111060, 0.163519718629784870, 0.163569045428659830, 0.163618371818611720, +0.163667697799517700, 0.163717023371254850, 0.163766348533699040, 0.163815673286727330, 0.163864997630216420, 0.163914321564043480, 0.163963645088084310, 0.164012968202216000, +0.164062290906315300, 0.164111613200259270, 0.164160935083923790, 0.164210256557185990, 0.164259577619922520, 0.164308898272010560, 0.164358218513325910, 0.164407538343745720, +0.164456857763146700, 0.164506176771405940, 0.164555495368399330, 0.164604813554003970, 0.164654131328096560, 0.164703448690554280, 0.164752765641252940, 0.164802082180069670, +0.164851398306881640, 0.164900714021564670, 0.164950029323995940, 0.164999344214052100, 0.165048658691610370, 0.165097972756546560, 0.165147286408737800, 0.165196599648060800, +0.165245912474392770, 0.165295224887609530, 0.165344536887588210, 0.165393848474205550, 0.165443159647338690, 0.165492470406863520, 0.165541780752657160, 0.165591090684596350, +0.165640400202558270, 0.165689709306418740, 0.165739017996054920, 0.165788326271344020, 0.165837634132161850, 0.165886941578385600, 0.165936248609891980, 0.165985555226558200, +0.166034861428260070, 0.166084167214874820, 0.166133472586279110, 0.166182777542350200, 0.166232082082963860, 0.166281386207997340, 0.166330689917327380, 0.166379993210831110, +0.166429296088384420, 0.166478598549864490, 0.166527900595148050, 0.166577202224112320, 0.166626503436633130, 0.166675804232587680, 0.166725104611853160, 0.166774404574305450, +0.166823704119821730, 0.166873003248278750, 0.166922301959553680, 0.166971600253522450, 0.167020898130062180, 0.167070195589049700, 0.167119492630362160, 0.167168789253875430, +0.167218085459466730, 0.167267381247012850, 0.167316676616390940, 0.167365971567476870, 0.167415266100147900, 0.167464560214280770, 0.167513853909752650, 0.167563147186439500, +0.167612440044218440, 0.167661732482966290, 0.167711024502560260, 0.167760316102876230, 0.167809607283791410, 0.167858898045183000, 0.167908188386926890, 0.167957478308900340, +0.168006767810980090, 0.168056056893043340, 0.168105345554966030, 0.168154633796625350, 0.168203921617898100, 0.168253209018661450, 0.168302495998791380, 0.168351782558165050, +0.168401068696659250, 0.168450354414151240, 0.168499639710516870, 0.168548924585633450, 0.168598209039377670, 0.168647493071626830, 0.168696776682256830, 0.168746059871144880, +0.168795342638168200, 0.168844624983202740, 0.168893906906125740, 0.168943188406813940, 0.168992469485144630, 0.169041750140993680, 0.169091030374238370, 0.169140310184755500, +0.169189589572422280, 0.169238868537114650, 0.169288147078709840, 0.169337425197084670, 0.169386702892116350, 0.169435980163680860, 0.169485257011655430, 0.169534533435916850, +0.169583809436342350, 0.169633085012807910, 0.169682360165190750, 0.169731634893368150, 0.169780909197216000, 0.169830183076611600, 0.169879456531431720, 0.169928729561553640, +0.169978002166853300, 0.170027274347207960, 0.170076546102494420, 0.170125817432589980, 0.170175088337370550, 0.170224358816713380, 0.170273628870495320, 0.170322898498593640, +0.170372167700884260, 0.170421436477244480, 0.170470704827551080, 0.170519972751681380, 0.170569240249511310, 0.170618507320918130, 0.170667773965779120, 0.170717040183970240, +0.170766305975368770, 0.170815571339851510, 0.170864836277295790, 0.170914100787577520, 0.170963364870574010, 0.171012628526162060, 0.171061891754219010, 0.171111154554620780, +0.171160416927244650, 0.171209678871967500, 0.171258940388666570, 0.171308201477217870, 0.171357462137498670, 0.171406722369385810, 0.171455982172756570, 0.171505241547486950, +0.171554500493454220, 0.171603759010535230, 0.171653017098607280, 0.171702274757546370, 0.171751531987229760, 0.171800788787534770, 0.171850045158337350, 0.171899301099514850, +0.171948556610944050, 0.171997811692502330, 0.172047066344065640, 0.172096320565511270, 0.172145574356716100, 0.172194827717557450, 0.172244080647911270, 0.172293333147654910, +0.172342585216665210, 0.172391836854819490, 0.172441088061993740, 0.172490338838065250, 0.172539589182910930, 0.172588839096408070, 0.172638088578432660, 0.172687337628862040, +0.172736586247573540, 0.172785834434443120, 0.172835082189348090, 0.172884329512165370, 0.172933576402772270, 0.172982822861044800, 0.173032068886860260, 0.173081314480095530, +0.173130559640627980, 0.173179804368333580, 0.173229048663089690, 0.173278292524773170, 0.173327535953261340, 0.173376778948430230, 0.173426021510157180, 0.173475263638319080, +0.173524505332793260, 0.173573746593455760, 0.173622987420183870, 0.173672227812854930, 0.173721467771345010, 0.173770707295531400, 0.173819946385291050, 0.173869185040501250, +0.173918423261038070, 0.173967661046778830, 0.174016898397600400, 0.174066135313380190, 0.174115371793994220, 0.174164607839319810, 0.174213843449233850, 0.174263078623613760, +0.174312313362335520, 0.174361547665276480, 0.174410781532313600, 0.174460014963324190, 0.174509247958184290, 0.174558480516771310, 0.174607712638962100, 0.174656944324634050, +0.174706175573663190, 0.174755406385926900, 0.174804636761302530, 0.174853866699666160, 0.174903096200895090, 0.174952325264866290, 0.175001553891457110, 0.175050782080543620, +0.175100009832003160, 0.175149237145712680, 0.175198464021549540, 0.175247690459389820, 0.175296916459110860, 0.175346142020589600, 0.175395367143703430, 0.175444591828328420, +0.175493816074341920, 0.175543039881620870, 0.175592263250042680, 0.175641486179483390, 0.175690708669820370, 0.175739930720931030, 0.175789152332691410, 0.175838373504978910, +0.175887594237670470, 0.175936814530643500, 0.175986034383774050, 0.176035253796939520, 0.176084472770016850, 0.176133691302883450, 0.176182909395415370, 0.176232127047490030, +0.176281344258984340, 0.176330561029775760, 0.176379777359740310, 0.176428993248755440, 0.176478208696698090, 0.176527423703445650, 0.176576638268874210, 0.176625852392861160, +0.176675066075283940, 0.176724279316018610, 0.176773492114942590, 0.176822704471932820, 0.176871916386866720, 0.176921127859620410, 0.176970338890071300, 0.177019549478096310, +0.177068759623572910, 0.177117969326377160, 0.177167178586386480, 0.177216387403477870, 0.177265595777528710, 0.177314803708415130, 0.177364011196014530, 0.177413218240203920, +0.177462424840860690, 0.177511630997860990, 0.177560836711082170, 0.177610041980401730, 0.177659246805695730, 0.177708451186841620, 0.177757655123716380, 0.177806858616197440, +0.177856061664160900, 0.177905264267484240, 0.177954466426044370, 0.178003668139718820, 0.178052869408383630, 0.178102070231916290, 0.178151270610193760, 0.178200470543093490, +0.178249670030491610, 0.178298869072265580, 0.178348067668292340, 0.178397265818449390, 0.178446463522612810, 0.178495660780660120, 0.178544857592468240, 0.178594053957914670, +0.178643249876875520, 0.178692445349228230, 0.178741640374850300, 0.178790834953617810, 0.178840029085408220, 0.178889222770098580, 0.178938416007566330, 0.178987608797687580, +0.179036801140339820, 0.179085993035400040, 0.179135184482745740, 0.179184375482253020, 0.179233566033799360, 0.179282756137261800, 0.179331945792517770, 0.179381134999443470, +0.179430323757916290, 0.179479512067813350, 0.179528699929012020, 0.179577887341388520, 0.179627074304820310, 0.179676260819184840, 0.179725446884358290, 0.179774632500218130, +0.179823817666641380, 0.179873002383505510, 0.179922186650686710, 0.179971370468062440, 0.180020553835509740, 0.180069736752906110, 0.180118919220127680, 0.180168101237051990, +0.180217282803556010, 0.180266463919517260, 0.180315644584811920, 0.180364824799317480, 0.180414004562910960, 0.180463183875469890, 0.180512362736870410, 0.180561541146990020, +0.180610719105706200, 0.180659896612895170, 0.180709073668434390, 0.180758250272200940, 0.180807426424072270, 0.180856602123924630, 0.180905777371635460, 0.180954952167081850, +0.181004126510141310, 0.181053300400690010, 0.181102473838605450, 0.181151646823764720, 0.181200819356045290, 0.181249991435323390, 0.181299163061476530, 0.181348334234381740, +0.181397504953916540, 0.181446675219957170, 0.181495845032381090, 0.181545014391065410, 0.181594183295887610, 0.181643351746723940, 0.181692519743451880, 0.181741687285948940, +0.181790854374091370, 0.181840021007756670, 0.181889187186821900, 0.181938352911164610, 0.181987518180661000, 0.182036682995188580, 0.182085847354624460, 0.182135011258846150, +0.182184174707729910, 0.182233337701153190, 0.182282500238993140, 0.182331662321127300, 0.182380823947431850, 0.182429985117784330, 0.182479145832061870, 0.182528306090141950, +0.182577465891900850, 0.182626625237216090, 0.182675784125965190, 0.182724942558024410, 0.182774100533271260, 0.182823258051582870, 0.182872415112836750, 0.182921571716909180, +0.182970727863677660, 0.183019883553019320, 0.183069038784811730, 0.183118193558931110, 0.183167347875254990, 0.183216501733660500, 0.183265655134025180, 0.183314808076225300, +0.183363960560138400, 0.183413112585641610, 0.183462264152612440, 0.183511415260927210, 0.183560565910463440, 0.183609716101098660, 0.183658865832709180, 0.183708015105172540, +0.183757163918365830, 0.183806312272166680, 0.183855460166451300, 0.183904607601097250, 0.183953754575981730, 0.184002901090982220, 0.184052047145975030, 0.184101192740837720, +0.184150337875447430, 0.184199482549681740, 0.184248626763416910, 0.184297770516530510, 0.184346913808899670, 0.184396056640401980, 0.184445199010913750, 0.184494340920312470, +0.184543482368475810, 0.184592623355280010, 0.184641763880602630, 0.184690903944320860, 0.184740043546312240, 0.184789182686453090, 0.184838321364621000, 0.184887459580693080, +0.184936597334546950, 0.184985734626058910, 0.185034871455106530, 0.185084007821566950, 0.185133143725317810, 0.185182279166235360, 0.185231414144197220, 0.185280548659080560, +0.185329682710762940, 0.185378816299120670, 0.185427949424031370, 0.185477082085372220, 0.185526214283020770, 0.185575346016853350, 0.185624477286747580, 0.185673608092581040, +0.185722738434230070, 0.185771868311572250, 0.185820997724484740, 0.185870126672845170, 0.185919255156529850, 0.185968383175416390, 0.186017510729382000, 0.186066637818304240, +0.186115764442059460, 0.186164890600525270, 0.186214016293578840, 0.186263141521097800, 0.186312266282958490, 0.186361390579038530, 0.186410514409215050, 0.186459637773365740, +0.186508760671366900, 0.186557883103096180, 0.186607005068431170, 0.186656126567248200, 0.186705247599424940, 0.186754368164838540, 0.186803488263366650, 0.186852607894885610, +0.186901727059273080, 0.186950845756406190, 0.186999963986162640, 0.187049081748418750, 0.187098199043052170, 0.187147315869940050, 0.187196432228960100, 0.187245548119988640, +0.187294663542903310, 0.187343778497581300, 0.187392892983900300, 0.187442007001736630, 0.187491120550967920, 0.187540233631471880, 0.187589346243124790, 0.187638458385804340, +0.187687570059387770, 0.187736681263752670, 0.187785791998775460, 0.187834902264333780, 0.187884012060304810, 0.187933121386566260, 0.187982230242994490, 0.188031338629467110, +0.188080446545861400, 0.188129553992055030, 0.188178660967924320, 0.188227767473346940, 0.188276873508200160, 0.188325979072361650, 0.188375084165707720, 0.188424188788116090, +0.188473292939464020, 0.188522396619629110, 0.188571499828487810, 0.188620602565917730, 0.188669704831796600, 0.188718806626000770, 0.188767907948407920, 0.188817008798895290, +0.188866109177340590, 0.188915209083620170, 0.188964308517611730, 0.189013407479192510, 0.189062505968240230, 0.189111603984631230, 0.189160701528243210, 0.189209798598953480, +0.189258895196639660, 0.189307991321178150, 0.189357086972446690, 0.189406182150322510, 0.189455276854683300, 0.189504371085405470, 0.189553464842366710, 0.189602558125444710, +0.189651650934515890, 0.189700743269457960, 0.189749835130148150, 0.189798926516464180, 0.189848017428282470, 0.189897107865480720, 0.189946197827936200, 0.189995287315526620, +0.190044376328128400, 0.190093464865619200, 0.190142552927876380, 0.190191640514777600, 0.190240727626199290, 0.190289814262019130, 0.190338900422114460, 0.190387986106362980, +0.190437071314641080, 0.190486156046826500, 0.190535240302796980, 0.190584324082428920, 0.190633407385600060, 0.190682490212187670, 0.190731572562069490, 0.190780654435121960, +0.190829735831222760, 0.190878816750249260, 0.190927897192079120, 0.190976977156588820, 0.191026056643656070, 0.191075135653158170, 0.191124214184972880, 0.191173292238976610, +0.191222369815047120, 0.191271446913061720, 0.191320523532898110, 0.191369599674432760, 0.191418675337543420, 0.191467750522107820, 0.191516825228002420, 0.191565899455104940, +0.191614973203292740, 0.191664046472443510, 0.191713119262433730, 0.191762191573141170, 0.191811263404443130, 0.191860334756217360, 0.191909405628340330, 0.191958476020689770, +0.192007545933143010, 0.192056615365577860, 0.192105684317870700, 0.192154752789899350, 0.192203820781541110, 0.192252888292673760, 0.192301955323173730, 0.192351021872918830, +0.192400087941786370, 0.192449153529654140, 0.192498218636398570, 0.192547283261897460, 0.192596347406028600, 0.192645411068668420, 0.192694474249694710, 0.192743536948984800, +0.192792599166416500, 0.192841660901866270, 0.192890722155211890, 0.192939782926330680, 0.192988843215100490, 0.193037903021397730, 0.193086962345100200, 0.193136021186085280, +0.193185079544230750, 0.193234137419413060, 0.193283194811510050, 0.193332251720399060, 0.193381308145957860, 0.193430364088062970, 0.193479419546592150, 0.193528474521423220, +0.193577529012432660, 0.193626583019498310, 0.193675636542497480, 0.193724689581307980, 0.193773742135806340, 0.193822794205870340, 0.193871845791377370, 0.193920896892205210, +0.193969947508230350, 0.194018997639330640, 0.194068047285383460, 0.194117096446266570, 0.194166145121856510, 0.194215193312031080, 0.194264241016667670, 0.194313288235644090, +0.194362334968836870, 0.194411381216123810, 0.194460426977382720, 0.194509472252490130, 0.194558517041323880, 0.194607561343761310, 0.194656605159680280, 0.194705648488957300, +0.194754691331470190, 0.194803733687096360, 0.194852775555713650, 0.194901816937198550, 0.194950857831428900, 0.194999898238282120, 0.195048938157636020, 0.195097977589367140, +0.195147016533353340, 0.195196054989471960, 0.195245092957600900, 0.195294130437616680, 0.195343167429397110, 0.195392203932819640, 0.195441239947762080, 0.195490275474101000, +0.195539310511714220, 0.195588345060479620, 0.195637379120273710, 0.195686412690974340, 0.195735445772458940, 0.195784478364605390, 0.195833510467290170, 0.195882542080391190, +0.195931573203785870, 0.195980603837352020, 0.196029633980966260, 0.196078663634506410, 0.196127692797849890, 0.196176721470874560, 0.196225749653457020, 0.196274777345475080, +0.196323804546806200, 0.196372831257328270, 0.196421857476917790, 0.196470883205452700, 0.196519908442810810, 0.196568933188868730, 0.196617957443504300, 0.196666981206595010, +0.196716004478018680, 0.196765027257651910, 0.196814049545372540, 0.196863071341058100, 0.196912092644586370, 0.196961113455834000, 0.197010133774678850, 0.197059153600998350, +0.197108172934670390, 0.197157191775571590, 0.197206210123579810, 0.197255227978572510, 0.197304245340427540, 0.197353262209021550, 0.197402278584232400, 0.197451294465937980, +0.197500309854014900, 0.197549324748341030, 0.197598339148793850, 0.197647353055251270, 0.197696366467589870, 0.197745379385687560, 0.197794391809421790, 0.197843403738670490, +0.197892415173310220, 0.197941426113218940, 0.197990436558274090, 0.198039446508353560, 0.198088455963333990, 0.198137464923093280, 0.198186473387508920, 0.198235481356458800, +0.198284488829819560, 0.198333495807469060, 0.198382502289285310, 0.198431508275144830, 0.198480513764925590, 0.198529518758505050, 0.198578523255761170, 0.198627527256570540, +0.198676530760811100, 0.198725533768360300, 0.198774536279096140, 0.198823538292895170, 0.198872539809635400, 0.198921540829194250, 0.198970541351449680, 0.199019541376278340, +0.199068540903558130, 0.199117539933166580, 0.199166538464981590, 0.199215536498879850, 0.199264534034739260, 0.199313531072437320, 0.199362527611852000, 0.199411523652859940, +0.199460519195339050, 0.199509514239167300, 0.199558508784221320, 0.199607502830379090, 0.199656496377518090, 0.199705489425516300, 0.199754481974250330, 0.199803474023598160, +0.199852465573437300, 0.199901456623645720, 0.199950447174100070, 0.199999437224678310, 0.200048426775257940, 0.200097415825716940, 0.200146404375931980, 0.200195392425780990, +0.200244379975141520, 0.200293367023891560, 0.200342353571907720, 0.200391339619067990, 0.200440325165250370, 0.200489310210331480, 0.200538294754189330, 0.200587278796701430, +0.200636262337745790, 0.200685245377199060, 0.200734227914939200, 0.200783209950843780, 0.200832191484790760, 0.200881172516656830, 0.200930153046319980, 0.200979133073657720, +0.201028112598548080, 0.201077091620867730, 0.201126070140494630, 0.201175048157306390, 0.201224025671180940, 0.201273002681994990, 0.201321979189626550, 0.201370955193953590, +0.201419930694852780, 0.201468905692202190, 0.201517880185879290, 0.201566854175762170, 0.201615827661727450, 0.201664800643653160, 0.201713773121416890, 0.201762745094896580, +0.201811716563969010, 0.201860687528512130, 0.201909657988403550, 0.201958627943521260, 0.202007597393741970, 0.202056566338943640, 0.202105534779003950, 0.202154502713800840, +0.202203470143211020, 0.202252437067112540, 0.202301403485382970, 0.202350369397900330, 0.202399334804541310, 0.202448299705183970, 0.202497264099706310, 0.202546227987985050, +0.202595191369898230, 0.202644154245323420, 0.202693116614138690, 0.202742078476220690, 0.202791039831447530, 0.202840000679696760, 0.202888961020846410, 0.202937920854773250, +0.202986880181355270, 0.203035839000470090, 0.203084797311995750, 0.203133755115808970, 0.203182712411787810, 0.203231669199809870, 0.203280625479753200, 0.203329581251494530, +0.203378536514911890, 0.203427491269883350, 0.203476445516285660, 0.203525399253996850, 0.203574352482894540, 0.203623305202856790, 0.203672257413760330, 0.203721209115483220, +0.203770160307903100, 0.203819110990898030, 0.203868061164344720, 0.203917010828121280, 0.203965959982105290, 0.204014908626174860, 0.204063856760206720, 0.204112804384078920, +0.204161751497669130, 0.204210698100855380, 0.204259644193514440, 0.204308589775524410, 0.204357534846763330, 0.204406479407107990, 0.204455423456436440, 0.204504366994626350, +0.204553310021555750, 0.204602252537101460, 0.204651194541141530, 0.204700136033553610, 0.204749077014215800, 0.204798017483004860, 0.204846957439798860, 0.204895896884475490, +0.204944835816912780, 0.204993774236987590, 0.205042712144577920, 0.205091649539561490, 0.205140586421816370, 0.205189522791219350, 0.205238458647648530, 0.205287393990982000, +0.205336328821096540, 0.205385263137870260, 0.205434196941180810, 0.205483130230906310, 0.205532063006923560, 0.205580995269110640, 0.205629927017345250, 0.205678858251505480, +0.205727788971468100, 0.205776719177111270, 0.205825648868312620, 0.205874578044950300, 0.205923506706901100, 0.205972434854043150, 0.206021362486254080, 0.206070289603412060, +0.206119216205393860, 0.206168142292077640, 0.206217067863341070, 0.206265992919062250, 0.206314917459118010, 0.206363841483386490, 0.206412764991745800, 0.206461687984072740, +0.206510610460245490, 0.206559532420141690, 0.206608453863639520, 0.206657374790615770, 0.206706295200948580, 0.206755215094515640, 0.206804134471195110, 0.206853053330863820, +0.206901971673399880, 0.206950889498681010, 0.206999806806585360, 0.207048723596989750, 0.207097639869772340, 0.207146555624810820, 0.207195470861983370, 0.207244385581166780, +0.207293299782239230, 0.207342213465078890, 0.207391126629562550, 0.207440039275568420, 0.207488951402974160, 0.207537863011658000, 0.207586774101496700, 0.207635684672368510, +0.207684594724151070, 0.207733504256722600, 0.207782413269959910, 0.207831321763741220, 0.207880229737944210, 0.207929137192447070, 0.207978044127126640, 0.208026950541861100, +0.208075856436528210, 0.208124761811006090, 0.208173666665171620, 0.208222570998903010, 0.208271474812078390, 0.208320378104574650, 0.208369280876269960, 0.208418183127042080, +0.208467084856769180, 0.208515986065328120, 0.208564886752597100, 0.208613786918453860, 0.208662686562776590, 0.208711585685442180, 0.208760484286328790, 0.208809382365314180, +0.208858279922276570, 0.208907176957092820, 0.208956073469641120, 0.209004969459799270, 0.209053864927445400, 0.209102759872456440, 0.209151654294710580, 0.209200548194085570, +0.209249441570459630, 0.209298334423709650, 0.209347226753713870, 0.209396118560350420, 0.209445009843496260, 0.209493900603029550, 0.209542790838828100, 0.209591680550770130, +0.209640569738732490, 0.209689458402593450, 0.209738346542230750, 0.209787234157522620, 0.209836121248345970, 0.209885007814579030, 0.209933893856099560, 0.209982779372785780, +0.210031664364514650, 0.210080548831164340, 0.210129432772612650, 0.210178316188737810, 0.210227199079416750, 0.210276081444527700, 0.210324963283948900, 0.210373844597557230, +0.210422725385230940, 0.210471605646847860, 0.210520485382286180, 0.210569364591422860, 0.210618243274136140, 0.210667121430303810, 0.210715999059804090, 0.210764876162513960, +0.210813752738311630, 0.210862628787074930, 0.210911504308682080, 0.210960379303010040, 0.211009253769937040, 0.211058127709340900, 0.211107001121099900, 0.211155874005090950, +0.211204746361192320, 0.211253618189282260, 0.211302489489237720, 0.211351360260936950, 0.211400230504257800, 0.211449100219078480, 0.211497969405275990, 0.211546838062728560, +0.211595706191314040, 0.211644573790910700, 0.211693440861395490, 0.211742307402646680, 0.211791173414542090, 0.211840038896960010, 0.211888903849777400, 0.211937768272872530, +0.211986632166123230, 0.212035495529407810, 0.212084358362603200, 0.212133220665587680, 0.212182082438239550, 0.212230943680435800, 0.212279804392054660, 0.212328664572974030, +0.212377524223072180, 0.212426383342226080, 0.212475241930314000, 0.212524099987213830, 0.212572957512803830, 0.212621814506961020, 0.212670670969563690, 0.212719526900489650, +0.212768382299617250, 0.212817237166823440, 0.212866091501986540, 0.212914945304984420, 0.212963798575695390, 0.213012651313996410, 0.213061503519765800, 0.213110355192881430, +0.213159206333221610, 0.213208056940663330, 0.213256907015084930, 0.213305756556364660, 0.213354605564379600, 0.213403454039008010, 0.213452301980127800, 0.213501149387617250, +0.213549996261353400, 0.213598842601214560, 0.213647688407078620, 0.213696533678823880, 0.213745378416327380, 0.213794222619467430, 0.213843066288121940, 0.213891909422169210, +0.213940752021486270, 0.213989594085951450, 0.214038435615442640, 0.214087276609838170, 0.214136117069015090, 0.214184956992851700, 0.214233796381226360, 0.214282635234016080, +0.214331473551099240, 0.214380311332353720, 0.214429148577657820, 0.214477985286888630, 0.214526821459924490, 0.214575657096643310, 0.214624492196923390, 0.214673326760641820, +0.214722160787676920, 0.214770994277906630, 0.214819827231209290, 0.214868659647461930, 0.214917491526542940, 0.214966322868330230, 0.215015153672702130, 0.215063983939535710, +0.215112813668709320, 0.215161642860101370, 0.215210471513588820, 0.215259299629050130, 0.215308127206363190, 0.215356954245406380, 0.215405780746056740, 0.215454606708192640, +0.215503432131692010, 0.215552257016433240, 0.215601081362293420, 0.215649905169150860, 0.215698728436883560, 0.215747551165369870, 0.215796373354486870, 0.215845195004112920, +0.215894016114126010, 0.215942836684404480, 0.215991656714825430, 0.216040476205267230, 0.216089295155607850, 0.216138113565725650, 0.216186931435497750, 0.216235748764802500, +0.216284565553518330, 0.216333381801522310, 0.216382197508692810, 0.216431012674907860, 0.216479827300045780, 0.216528641383983700, 0.216577454926600050, 0.216626267927772730, +0.216675080387380180, 0.216723892305299480, 0.216772703681409080, 0.216821514515586900, 0.216870324807711370, 0.216919134557659630, 0.216967943765310010, 0.217016752430540550, +0.217065560553229620, 0.217114368133254380, 0.217163175170493220, 0.217211981664824550, 0.217260787616125490, 0.217309593024274470, 0.217358397889149430, 0.217407202210628870, +0.217456005988589860, 0.217504809222910820, 0.217553611913469780, 0.217602414060145130, 0.217651215662814030, 0.217700016721354860, 0.217748817235645680, 0.217797617205564870, +0.217846416630989580, 0.217895215511798270, 0.217944013847868910, 0.217992811639079940, 0.218041608885308520, 0.218090405586433080, 0.218139201742332060, 0.218187997352882580, +0.218236792417963120, 0.218285586937451700, 0.218334380911226730, 0.218383174339165380, 0.218431967221146080, 0.218480759557046850, 0.218529551346746180, 0.218578342590121180, +0.218627133287050360, 0.218675923437411680, 0.218724713041083620, 0.218773502097943360, 0.218822290607869310, 0.218871078570739560, 0.218919865986432570, 0.218968652854825450, +0.219017439175796720, 0.219066224949224790, 0.219115010174986890, 0.219163794852961470, 0.219212578983026540, 0.219261362565060620, 0.219310145598940850, 0.219358928084545710, +0.219407710021753270, 0.219456491410441960, 0.219505272250489020, 0.219554052541772880, 0.219602832284171600, 0.219651611477563680, 0.219700390121826320, 0.219749168216837960, +0.219797945762476690, 0.219846722758620970, 0.219895499205148030, 0.219944275101936340, 0.219993050448863970, 0.220041825245809400, 0.220090599492649810, 0.220139373189263740, +0.220188146335529690, 0.220236918931324830, 0.220285690976527640, 0.220334462471016260, 0.220383233414669140, 0.220432003807363520, 0.220480773648977890, 0.220529542939390310, +0.220578311678479300, 0.220627079866122090, 0.220675847502197180, 0.220724614586582660, 0.220773381119157040, 0.220822147099797500, 0.220870912528382620, 0.220919677404790460, +0.220968441728899540, 0.221017205500587070, 0.221065968719731580, 0.221114731386211630, 0.221163493499904410, 0.221212255060688450, 0.221261016068441840, 0.221309776523043120, +0.221358536424369560, 0.221407295772299640, 0.221456054566711470, 0.221504812807483600, 0.221553570494493280, 0.221602327627619030, 0.221651084206738960, 0.221699840231731620, +0.221748595702474210, 0.221797350618845340, 0.221846104980723100, 0.221894858787986010, 0.221943612040511360, 0.221992364738177680, 0.222041116880863500, 0.222089868468446110, +0.222138619500804050, 0.222187369977815440, 0.222236119899358820, 0.222284869265311490, 0.222333618075551990, 0.222382366329958420, 0.222431114028409400, 0.222479861170782140, +0.222528607756955240, 0.222577353786806790, 0.222626099260215430, 0.222674844177058350, 0.222723588537214190, 0.222772332340561040, 0.222821075586977500, 0.222869818276340840, +0.222918560408529640, 0.222967301983422040, 0.223016043000896610, 0.223064783460830640, 0.223113523363102690, 0.223162262707591400, 0.223211001494174000, 0.223259739722729110, +0.223308477393134860, 0.223357214505269850, 0.223405951059011370, 0.223454687054238020, 0.223503422490827970, 0.223552157368659770, 0.223600891687610740, 0.223649625447559510, +0.223698358648384190, 0.223747091289963400, 0.223795823372174460, 0.223844554894895960, 0.223893285858006080, 0.223942016261383440, 0.223990746104905300, 0.224039475388450290, +0.224088204111897030, 0.224136932275122820, 0.224185659878006290, 0.224234386920425600, 0.224283113402259400, 0.224331839323384960, 0.224380564683680920, 0.224429289483025480, +0.224478013721297250, 0.224526737398373560, 0.224575460514133020, 0.224624183068453830, 0.224672905061214600, 0.224721626492292690, 0.224770347361566700, 0.224819067668914850, +0.224867787414215760, 0.224916506597346770, 0.224965225218186540, 0.225013943276613640, 0.225062660772505470, 0.225111377705740660, 0.225160094076197390, 0.225208809883754300, +0.225257525128288780, 0.225306239809679430, 0.225354953927804500, 0.225403667482542590, 0.225452380473771110, 0.225501092901368660, 0.225549804765213470, 0.225598516065184220, +0.225647226801158260, 0.225695936973014210, 0.225744646580630310, 0.225793355623885250, 0.225842064102656340, 0.225890772016822280, 0.225939479366261300, 0.225988186150852060, +0.226036892370471890, 0.226085598024999530, 0.226134303114313600, 0.226183007638291470, 0.226231711596811800, 0.226280414989752880, 0.226329117816993330, 0.226377820078410590, +0.226426521773883280, 0.226475222903289640, 0.226523923466508400, 0.226572623463416940, 0.226621322893893890, 0.226670021757817560, 0.226718720055066570, 0.226767417785518370, +0.226816114949051630, 0.226864811545544610, 0.226913507574875970, 0.226962203036923130, 0.227010897931564810, 0.227059592258679670, 0.227108286018145090, 0.227156979209839820, +0.227205671833642100, 0.227254363889430630, 0.227303055377082790, 0.227351746296477340, 0.227400436647492520, 0.227449126430007060, 0.227497815643898320, 0.227546504289045050, +0.227595192365325520, 0.227643879872618470, 0.227692566810801240, 0.227741253179752630, 0.227789938979350880, 0.227838624209474700, 0.227887308870001550, 0.227935992960810100, +0.227984676481779110, 0.228033359432786020, 0.228082041813709500, 0.228130723624427880, 0.228179404864819910, 0.228228085534762980, 0.228276765634135820, 0.228325445162816780, +0.228374124120684530, 0.228422802507616540, 0.228471480323491540, 0.228520157568187860, 0.228568834241584200, 0.228617510343558040, 0.228666185873988100, 0.228714860832752690, +0.228763535219730560, 0.228812209034799150, 0.228860882277837240, 0.228909554948723530, 0.228958227047335510, 0.229006898573551940, 0.229055569527251120, 0.229104239908311800, +0.229152909716611420, 0.229201578952028810, 0.229250247614442240, 0.229298915703730480, 0.229347583219771000, 0.229396250162442560, 0.229444916531623490, 0.229493582327192550, +0.229542247549027250, 0.229590912197006340, 0.229639576271008120, 0.229688239770911410, 0.229736902696593640, 0.229785565047933630, 0.229834226824809720, 0.229882888027100660, +0.229931548654683960, 0.229980208707438380, 0.230028868185242710, 0.230077527087974440, 0.230126185415512360, 0.230174843167734790, 0.230223500344520580, 0.230272156945747150, +0.230320812971293360, 0.230369468421037530, 0.230418123294858450, 0.230466777592633650, 0.230515431314241880, 0.230564084459561560, 0.230612737028471430, 0.230661389020849040, +0.230710040436573170, 0.230758691275522200, 0.230807341537574960, 0.230855991222608910, 0.230904640330502900, 0.230953288861135700, 0.231001936814384860, 0.231050584190129170, +0.231099230988247030, 0.231147877208617240, 0.231196522851117300, 0.231245167915626080, 0.231293812402021960, 0.231342456310183710, 0.231391099639988880, 0.231439742391316320, +0.231488384564044410, 0.231537026158051940, 0.231585667173216490, 0.231634307609416890, 0.231682947466531510, 0.231731586744439190, 0.231780225443017460, 0.231828863562145190, +0.231877501101701190, 0.231926138061562980, 0.231974774441609440, 0.232023410241718960, 0.232072045461770400, 0.232120680101641270, 0.232169314161210480, 0.232217947640356360, +0.232266580538957820, 0.232315212856892410, 0.232363844594038970, 0.232412475750275900, 0.232461106325482090, 0.232509736319535060, 0.232558365732313700, 0.232606994563696430, +0.232655622813562110, 0.232704250481788280, 0.232752877568253860, 0.232801504072837200, 0.232850129995417240, 0.232898755335871540, 0.232947380094078920, 0.232996004269918290, +0.233044627863267210, 0.233093250874004590, 0.233141873302008810, 0.233190495147158810, 0.233239116409332120, 0.233287737088407640, 0.233336357184263820, 0.233384976696779540, +0.233433595625832380, 0.233482213971301230, 0.233530831733064550, 0.233579448911001240, 0.233628065504988850, 0.233676681514906310, 0.233725296940632040, 0.233773911782044990, +0.233822526039022730, 0.233871139711444130, 0.233919752799188140, 0.233968365302132330, 0.234016977220155600, 0.234065588553136420, 0.234114199300953730, 0.234162809463485080, +0.234211419040609410, 0.234260028032205190, 0.234308636438151360, 0.234357244258325490, 0.234405851492606510, 0.234454458140872870, 0.234503064203003570, 0.234551669678876140, +0.234600274568369540, 0.234648878871362270, 0.234697482587733240, 0.234746085717360050, 0.234794688260121650, 0.234843290215896980, 0.234891891584563640, 0.234940492366000560, +0.234989092560086270, 0.235037692166699670, 0.235086291185718390, 0.235134889617021420, 0.235183487460487200, 0.235232084715994690, 0.235280681383421560, 0.235329277462646700, +0.235377872953548670, 0.235426467856006380, 0.235475062169897470, 0.235523655895100940, 0.235572249031495230, 0.235620841578959350, 0.235669433537370940, 0.235718024906608950, +0.235766615686552330, 0.235815205877078720, 0.235863795478067100, 0.235912384489396000, 0.235960972910944370, 0.236009560742589890, 0.236058147984211490, 0.236106734635687710, +0.236155320696897540, 0.236203906167718640, 0.236252491048029980, 0.236301075337710080, 0.236349659036637900, 0.236398242144691180, 0.236446824661748850, 0.236495406587689440, +0.236543987922391950, 0.236592568665734080, 0.236641148817594770, 0.236689728377852600, 0.236738307346386510, 0.236786885723074240, 0.236835463507794770, 0.236884040700427070, +0.236932617300848800, 0.236981193308939020, 0.237029768724576260, 0.237078343547639490, 0.237126917778006460, 0.237175491415556110, 0.237224064460167030, 0.237272636911718240, +0.237321208770087390, 0.237369780035153550, 0.237418350706795260, 0.237466920784891510, 0.237515490269320030, 0.237564059159959850, 0.237612627456689480, 0.237661195159387990, +0.237709762267933080, 0.237758328782203790, 0.237806894702079080, 0.237855460027436710, 0.237904024758155700, 0.237952588894114610, 0.238001152435192490, 0.238049715381267040, +0.238098277732217340, 0.238146839487921920, 0.238195400648259840, 0.238243961213108810, 0.238292521182347890, 0.238341080555855680, 0.238389639333511180, 0.238438197515192160, +0.238486755100777630, 0.238535312090146220, 0.238583868483176980, 0.238632424279747620, 0.238680979479737210, 0.238729534083024770, 0.238778088089488080, 0.238826641499006150, +0.238875194311457650, 0.238923746526721550, 0.238972298144675690, 0.239020849165199060, 0.239069399588170330, 0.239117949413468510, 0.239166498640971390, 0.239215047270558030, +0.239263595302107060, 0.239312142735497530, 0.239360689570607190, 0.239409235807315160, 0.239457781445500010, 0.239506326485040860, 0.239554870925815460, 0.239603414767702860, +0.239651958010581730, 0.239700500654331160, 0.239749042698828880, 0.239797584143954020, 0.239846124989585600, 0.239894665235601460, 0.239943204881880650, 0.239991743928301830, +0.240040282374744090, 0.240088820221085190, 0.240137357467204240, 0.240185894112979910, 0.240234430158291300, 0.240282965603016150, 0.240331500447033580, 0.240380034690222290, +0.240428568332461320, 0.240477101373628520, 0.240525633813602950, 0.240574165652263310, 0.240622696889488650, 0.240671227525156850, 0.240719757559146990, 0.240768286991338150, +0.240816815821608160, 0.240865344049836120, 0.240913871675900730, 0.240962398699681110, 0.241010925121055040, 0.241059450939901660, 0.241107976156099660, 0.241156500769528160, +0.241205024780064950, 0.241253548187589210, 0.241302070991979560, 0.241350593193115190, 0.241399114790873920, 0.241447635785134840, 0.241496156175776660, 0.241544675962678560, +0.241593195145718310, 0.241641713724775080, 0.241690231699728000, 0.241738749070454890, 0.241787265836834940, 0.241835781998746810, 0.241884297556069630, 0.241932812508681320, +0.241981326856460950, 0.242029840599287280, 0.242078353737039430, 0.242126866269595260, 0.242175378196833930, 0.242223889518634160, 0.242272400234875090, 0.242320910345434600, +0.242369419850191840, 0.242417928749025490, 0.242466437041814780, 0.242514944728437540, 0.242563451808772950, 0.242611958282700160, 0.242660464150097010, 0.242708969410842750, +0.242757474064816040, 0.242805978111896080, 0.242854481551960740, 0.242902984384889190, 0.242951486610560180, 0.242999988228852880, 0.243048489239645200, 0.243096989642816290, +0.243145489438244910, 0.243193988625810240, 0.243242487205390160, 0.243290985176863840, 0.243339482540110090, 0.243387979295008050, 0.243436475441435620, 0.243484970979272020, +0.243533465908396000, 0.243581960228686720, 0.243630453940022110, 0.243678947042281380, 0.243727439535343730, 0.243775931419087020, 0.243824422693390500, 0.243872913358132910, +0.243921403413193490, 0.243969892858450110, 0.244018381693781980, 0.244066869919067920, 0.244115357534187120, 0.244163844539017490, 0.244212330933438250, 0.244260816717328190, +0.244309301890566520, 0.244357786453031130, 0.244406270404601310, 0.244454753745155800, 0.244503236474573840, 0.244551718592733360, 0.244600200099513580, 0.244648680994793750, +0.244697161278451760, 0.244745640950366880, 0.244794120010417890, 0.244842598458484020, 0.244891076294443260, 0.244939553518174790, 0.244988030129557420, 0.245036506128470420, +0.245084981514791720, 0.245133456288400580, 0.245181930449175800, 0.245230403996996610, 0.245278876931740970, 0.245327349253288170, 0.245375820961516970, 0.245424292056306640, +0.245472762537535170, 0.245521232405081810, 0.245569701658825770, 0.245618170298645050, 0.245666638324418900, 0.245715105736026170, 0.245763572533346100, 0.245812038716256680, +0.245860504284637150, 0.245908969238366360, 0.245957433577323580, 0.246005897301386780, 0.246054360410435240, 0.246102822904347790, 0.246151284783003740, 0.246199746046281030, +0.246248206694058950, 0.246296666726216360, 0.246345126142632540, 0.246393584943185470, 0.246442043127754420, 0.246490500696218280, 0.246538957648456320, 0.246587413984346530, +0.246635869703768220, 0.246684324806600630, 0.246732779292721830, 0.246781233162011090, 0.246829686414347240, 0.246878139049609620, 0.246926591067676200, 0.246975042468426330, +0.247023493251738830, 0.247071943417493060, 0.247120392965566980, 0.247168841895839900, 0.247217290208190750, 0.247265737902498780, 0.247314184978642050, 0.247362631436499860, +0.247411077275951070, 0.247459522496875060, 0.247507967099149770, 0.247556411082654580, 0.247604854447268790, 0.247653297192870440, 0.247701739319338840, 0.247750180826552900, +0.247798621714391900, 0.247847061982733960, 0.247895501631458350, 0.247943940660444010, 0.247992379069570220, 0.248040816858715040, 0.248089254027757860, 0.248137690576577500, +0.248186126505053370, 0.248234561813063500, 0.248282996500487210, 0.248331430567203440, 0.248379864013091510, 0.248428296838029500, 0.248476729041896740, 0.248525160624572610, +0.248573591585935120, 0.248622021925863660, 0.248670451644237150, 0.248718880740934960, 0.248767309215835090, 0.248815737068816990, 0.248864164299759520, 0.248912590908542090, +0.248961016895042740, 0.249009442259140850, 0.249057867000715360, 0.249106291119645630, 0.249154714615809740, 0.249203137489087070, 0.249251559739356560, 0.249299981366497560, +0.249348402370388190, 0.249396822750907830, 0.249445242507935820, 0.249493661641350280, 0.249542080151030580, 0.249590498036855680, 0.249638915298704990, 0.249687331936456560, +0.249735747949989790, 0.249784163339183680, 0.249832578103917570, 0.249880992244069590, 0.249929405759519140, 0.249977818650145150, 0.250026230915827040, 0.250074642556442960, +0.250123053571872260, 0.250171463961993910, 0.250219873726687360, 0.250268282865830690, 0.250316691379303290, 0.250365099266984190, 0.250413506528752720, 0.250461913164487130, +0.250510319174066690, 0.250558724557370880, 0.250607129314277870, 0.250655533444667070, 0.250703936948417360, 0.250752339825408290, 0.250800742075517890, 0.250849143698625650, +0.250897544694610560, 0.250945945063352050, 0.250994344804728260, 0.251042743918618580, 0.251091142404902050, 0.251139540263458080, 0.251187937494164850, 0.251236334096901770, +0.251284730071547830, 0.251333125417982530, 0.251381520136084000, 0.251429914225731630, 0.251478307686804900, 0.251526700519182020, 0.251575092722742370, 0.251623484297364970, +0.251671875242929280, 0.251720265559313480, 0.251768655246397020, 0.251817044304058930, 0.251865432732178710, 0.251913820530634380, 0.251962207699305550, 0.252010594238071210, +0.252058980146810770, 0.252107365425402520, 0.252155750073725820, 0.252204134091659700, 0.252252517479083730, 0.252300900235876040, 0.252349282361916060, 0.252397663857083340, +0.252446044721256040, 0.252494424954313570, 0.252542804556135090, 0.252591183526599980, 0.252639561865586500, 0.252687939572974140, 0.252736316648641930, 0.252784693092469370, +0.252833068904334600, 0.252881444084117170, 0.252929818631696170, 0.252978192546951030, 0.253026565829759960, 0.253074938480002510, 0.253123310497557650, 0.253171681882304990, +0.253220052634122730, 0.253268422752890300, 0.253316792238486800, 0.253365161090791770, 0.253413529309683420, 0.253461896895041230, 0.253510263846744690, 0.253558630164672120, +0.253606995848702940, 0.253655360898716260, 0.253703725314591680, 0.253752089096207280, 0.253800452243442720, 0.253848814756176990, 0.253897176634289620, 0.253945537877658940, +0.253993898486164380, 0.254042258459685090, 0.254090617798100600, 0.254138976501289080, 0.254187334569130170, 0.254235692001502920, 0.254284048798286870, 0.254332404959360210, +0.254380760484602620, 0.254429115373893510, 0.254477469627111210, 0.254525823244135200, 0.254574176224844630, 0.254622528569119100, 0.254670880276836760, 0.254719231347877270, +0.254767581782119670, 0.254815931579443600, 0.254864280739727220, 0.254912629262850130, 0.254960977148691480, 0.255009324397130810, 0.255057671008046440, 0.255106016981317850, +0.255154362316824260, 0.255202707014445140, 0.255251051074058820, 0.255299394495544950, 0.255347737278782960, 0.255396079423651220, 0.255444420930029280, 0.255492761797796230, +0.255541102026831780, 0.255589441617014130, 0.255637780568222840, 0.255686118880337150, 0.255734456553236570, 0.255782793586799400, 0.255831129980905290, 0.255879465735433300, +0.255927800850263120, 0.255976135325272970, 0.256024469160342550, 0.256072802355350900, 0.256121134910177680, 0.256169466824701210, 0.256217798098801020, 0.256266128732356820, +0.256314458725246890, 0.256362788077350750, 0.256411116788547670, 0.256459444858717240, 0.256507772287737750, 0.256556099075488820, 0.256604425221849670, 0.256652750726699850, +0.256701075589917780, 0.256749399811382950, 0.256797723390974670, 0.256846046328572500, 0.256894368624054790, 0.256942690277301160, 0.256991011288190800, 0.257039331656603360, +0.257087651382417130, 0.257135970465511790, 0.257184288905766500, 0.257232606703060920, 0.257280923857273410, 0.257329240368283580, 0.257377556235971080, 0.257425871460214280, +0.257474186040892780, 0.257522499977885840, 0.257570813271073060, 0.257619125920332810, 0.257667437925544750, 0.257715749286588140, 0.257764060003342510, 0.257812370075686360, +0.257860679503499280, 0.257908988286660480, 0.257957296425049610, 0.258005603918545100, 0.258053910767026610, 0.258102216970373330, 0.258150522528464930, 0.258198827441179780, +0.258247131708397530, 0.258295435329997940, 0.258343738305859330, 0.258392040635861350, 0.258440342319883280, 0.258488643357804750, 0.258536943749504200, 0.258585243494861340, +0.258633542593755320, 0.258681841046065900, 0.258730138851671400, 0.258778436010451580, 0.258826732522285720, 0.258875028387053400, 0.258923323604633100, 0.258971618174904490, +0.259019912097746830, 0.259068205373039820, 0.259116498000661890, 0.259164789980492690, 0.259213081312411940, 0.259261371996298060, 0.259309662032030760, 0.259357951419489310, +0.259406240158553400, 0.259454528249101420, 0.259502815691013190, 0.259551102484167910, 0.259599388628445280, 0.259647674123723750, 0.259695958969883010, 0.259744243166802390, +0.259792526714361650, 0.259840809612439110, 0.259889091860914520, 0.259937373459667280, 0.259985654408576960, 0.260033934707522120, 0.260082214356382400, 0.260130493355037180, +0.260178771703366170, 0.260227049401247750, 0.260275326448561770, 0.260323602845187850, 0.260371878591004520, 0.260420153685891500, 0.260468428129728090, 0.260516701922394010, +0.260564975063767800, 0.260613247553729110, 0.260661519392157310, 0.260709790578932120, 0.260758061113932070, 0.260806330997036820, 0.260854600228125790, 0.260902868807078640, +0.260951136733773960, 0.260999404008091350, 0.261047670629910300, 0.261095936599110460, 0.261144201915570360, 0.261192466579169780, 0.261240730589788420, 0.261288993947304870, +0.261337256651598790, 0.261385518702549560, 0.261433780100036980, 0.261482040843939500, 0.261530300934136930, 0.261578560370508640, 0.261626819152934340, 0.261675077281292580, +0.261723334755463110, 0.261771591575325310, 0.261819847740758950, 0.261868103251642560, 0.261916358107855910, 0.261964612309278370, 0.262012865855789700, 0.262061118747268450, +0.262109370983594440, 0.262157622564647420, 0.262205873490305890, 0.262254123760449650, 0.262302373374958150, 0.262350622333711150, 0.262398870636587120, 0.262447118283465950, +0.262495365274226950, 0.262543611608750000, 0.262591857286913590, 0.262640102308597520, 0.262688346673681180, 0.262736590382044440, 0.262784833433565790, 0.262833075828125040, +0.262881317565601620, 0.262929558645875310, 0.262977799068824680, 0.263026038834329570, 0.263074277942269790, 0.263122516392523880, 0.263170754184971660, 0.263218991319492560, +0.263267227795966450, 0.263315463614271830, 0.263363698774288500, 0.263411933275895960, 0.263460167118974020, 0.263508400303401220, 0.263556632829057450, 0.263604864695822060, +0.263653095903574940, 0.263701326452194680, 0.263749556341561050, 0.263797785571553590, 0.263846014142052050, 0.263894242052935100, 0.263942469304082490, 0.263990695895373770, +0.264038921826688700, 0.264087147097905870, 0.264135371708905220, 0.264183595659566510, 0.264231818949768440, 0.264280041579390780, 0.264328263548313070, 0.264376484856415070, +0.264424705503575500, 0.264472925489674100, 0.264521144814590440, 0.264569363478204310, 0.264617581480394330, 0.264665798821040410, 0.264714015500021990, 0.264762231517219000, +0.264810446872509990, 0.264858661565774810, 0.264906875596893020, 0.264955088965744490, 0.265003301672207760, 0.265051513716162810, 0.265099725097489470, 0.265147935816066440, +0.265196145871773540, 0.265244355264490250, 0.265292563994096510, 0.265340772060470960, 0.265388979463493490, 0.265437186203043520, 0.265485392279001030, 0.265533597691244680, +0.265581802439654290, 0.265630006524109400, 0.265678209944489930, 0.265726412700674490, 0.265774614792543050, 0.265822816219975060, 0.265871016982850430, 0.265919217081047880, +0.265967416514447220, 0.266015615282928500, 0.266063813386370310, 0.266112010824652580, 0.266160207597654800, 0.266208403705256950, 0.266256599147337680, 0.266304793923776870, +0.266352988034454120, 0.266401181479249290, 0.266449374258041110, 0.266497566370709480, 0.266545757817133910, 0.266593948597194430, 0.266642138710769640, 0.266690328157739460, +0.266738516937983510, 0.266786705051381630, 0.266834892497812610, 0.266883079277156320, 0.266931265389292400, 0.266979450834100680, 0.267027635611459920, 0.267075819721250110, +0.267124003163351110, 0.267172185937641750, 0.267220368044001840, 0.267268549482311100, 0.267316730252449340, 0.267364910354295380, 0.267413089787729100, 0.267461268552630140, +0.267509446648878440, 0.267557624076352640, 0.267605800834932790, 0.267653976924498490, 0.267702152344929610, 0.267750327096104970, 0.267798501177904490, 0.267846674590207780, +0.267894847332894810, 0.267943019405844250, 0.267991190808936190, 0.268039361542050550, 0.268087531605066100, 0.268135700997862820, 0.268183869720320270, 0.268232037772318470, +0.268280205153736180, 0.268328371864453350, 0.268376537904349620, 0.268424703273304920, 0.268472867971198070, 0.268521031997909050, 0.268569195353317470, 0.268617358037303300, +0.268665520049745310, 0.268713681390523540, 0.268761842059517530, 0.268810002056607380, 0.268858161381671790, 0.268906320034590750, 0.268954478015244410, 0.269002635323511430, +0.269050791959271840, 0.269098947922405240, 0.269147103212791730, 0.269195257830310060, 0.269243411774840240, 0.269291565046261840, 0.269339717644455020, 0.269387869569298440, +0.269436020820672200, 0.269484171398455870, 0.269532321302529580, 0.269580470532772070, 0.269628619089063330, 0.269676766971283120, 0.269724914179311330, 0.269773060713026870, +0.269821206572309790, 0.269869351757040080, 0.269917496267096600, 0.269965640102359350, 0.270013783262707970, 0.270061925748022620, 0.270110067558182010, 0.270158208693066230, +0.270206349152554930, 0.270254488936528150, 0.270302628044864770, 0.270350766477444770, 0.270398904234147920, 0.270447041314854200, 0.270495177719442430, 0.270543313447792750, +0.270591448499784780, 0.270639582875298600, 0.270687716574213030, 0.270735849596408170, 0.270783981941763730, 0.270832113610159690, 0.270880244601474970, 0.270928374915589690, +0.270976504552383870, 0.271024633511736330, 0.271072761793527240, 0.271120889397636230, 0.271169016323943410, 0.271217142572327650, 0.271265268142668990, 0.271313393034847190, +0.271361517248742360, 0.271409640784233300, 0.271457763641200110, 0.271505885819522510, 0.271554007319080640, 0.271602128139753320, 0.271650248281420700, 0.271698367743962440, +0.271746486527258690, 0.271794604631188260, 0.271842722055631370, 0.271890838800468100, 0.271938954865577290, 0.271987070250839070, 0.272035184956133210, 0.272083298981339820, +0.272131412326337750, 0.272179524991007120, 0.272227636975227730, 0.272275748278879630, 0.272323858901841740, 0.272371968843994230, 0.272420078105216730, 0.272468186685389520, +0.272516294584391420, 0.272564401802102560, 0.272612508338402730, 0.272660614193172000, 0.272708719366289320, 0.272756823857634890, 0.272804927667088800, 0.272853030794529940, +0.272901133239838500, 0.272949235002894250, 0.272997336083577350, 0.273045436481766710, 0.273093536197342450, 0.273141635230184310, 0.273189733580172570, 0.273237831247186040, +0.273285928231104920, 0.273334024531808990, 0.273382120149178400, 0.273430215083092120, 0.273478309333430310, 0.273526402900072680, 0.273574495782899500, 0.273622587981789680, +0.273670679496623380, 0.273718770327280370, 0.273766860473640850, 0.273814949935583750, 0.273863038712989280, 0.273911126805737650, 0.273959214213707780, 0.274007300936779830, +0.274055386974833670, 0.274103472327749450, 0.274151556995406160, 0.274199640977683960, 0.274247724274462650, 0.274295806885622440, 0.274343888811042270, 0.274391970050602450, +0.274440050604182640, 0.274488130471663150, 0.274536209652922910, 0.274584288147842190, 0.274632365956300690, 0.274680443078178740, 0.274728519513355200, 0.274776595261710390, +0.274824670323124580, 0.274872744697476580, 0.274920818384646770, 0.274968891384514860, 0.275016963696961210, 0.275065035321864710, 0.275113106259105620, 0.275161176508563750, +0.275209246070119370, 0.275257314943651410, 0.275305383129040240, 0.275353450626165560, 0.275401517434907710, 0.275449583555145590, 0.275497648986759550, 0.275545713729629380, +0.275593777783635360, 0.275641841148656470, 0.275689903824572980, 0.275737965811265140, 0.275786027108612000, 0.275834087716493760, 0.275882147634790300, 0.275930206863381880, +0.275978265402147540, 0.276026323250967540, 0.276074380409721710, 0.276122436878290360, 0.276170492656552520, 0.276218547744388420, 0.276266602141677970, 0.276314655848301450, +0.276362708864137830, 0.276410761189067430, 0.276458812822970190, 0.276506863765726310, 0.276554914017214830, 0.276602963577316060, 0.276651012445910340, 0.276699060622876640, +0.276747108108095270, 0.276795154901446180, 0.276843201002809570, 0.276891246412064580, 0.276939291129091440, 0.276987335153770110, 0.277035378485980870, 0.277083421125602750, +0.277131463072516020, 0.277179504326600710, 0.277227544887737040, 0.277275584755804050, 0.277323623930682110, 0.277371662412251140, 0.277419700200391420, 0.277467737294982030, +0.277515773695903300, 0.277563809403035100, 0.277611844416257860, 0.277659878735450560, 0.277707912360493530, 0.277755945291267180, 0.277803977527650510, 0.277852009069523950, +0.277900039916767320, 0.277948070069261030, 0.277996099526884140, 0.278044128289517020, 0.278092156357039600, 0.278140183729332140, 0.278188210406273840, 0.278236236387745030, +0.278284261673625580, 0.278332286263795970, 0.278380310158135140, 0.278428333356523620, 0.278476355858841170, 0.278524377664968350, 0.278572398774784070, 0.278620419188168880, +0.278668438905003040, 0.278716457925165640, 0.278764476248537120, 0.278812493874997400, 0.278860510804426860, 0.278908527036704660, 0.278956542571711100, 0.279004557409326230, +0.279052571549430360, 0.279100584991902660, 0.279148597736623480, 0.279196609783472770, 0.279244621132331010, 0.279292631783077280, 0.279340641735591920, 0.279388650989755020, +0.279436659545446890, 0.279484667402546630, 0.279532674560934780, 0.279580681020491660, 0.279628686781096370, 0.279676691842629390, 0.279724696204970650, 0.279772699868000630, +0.279820702831598430, 0.279868705095644490, 0.279916706660018780, 0.279964707524601670, 0.280012707689272440, 0.280060707153911400, 0.280108705918398590, 0.280156703982614500, +0.280204701346438160, 0.280252698009750060, 0.280300693972430240, 0.280348689234359130, 0.280396683795415880, 0.280444677655480870, 0.280492670814434190, 0.280540663272156270, +0.280588655028526260, 0.280636646083424590, 0.280684636436731750, 0.280732626088326890, 0.280780615038090490, 0.280828603285902530, 0.280876590831643460, 0.280924577675192520, +0.280972563816430150, 0.281020549255236340, 0.281068533991491560, 0.281116518025075090, 0.281164501355867290, 0.281212483983748210, 0.281260465908598380, 0.281308447130296960, +0.281356427648724430, 0.281404407463760780, 0.281452386575286590, 0.281500364983180980, 0.281548342687324480, 0.281596319687597520, 0.281644295983879360, 0.281692271576050480, +0.281740246463990870, 0.281788220647581080, 0.281836194126700360, 0.281884166901229080, 0.281932138971047460, 0.281980110336035870, 0.282028080996073570, 0.282076050951041100, +0.282124020200818500, 0.282171988745286260, 0.282219956584323640, 0.282267923717811120, 0.282315890145628800, 0.282363855867657170, 0.282411820883775420, 0.282459785193864220, +0.282507748797803940, 0.282555711695473830, 0.282603673886754450, 0.282651635371525930, 0.282699596149668720, 0.282747556221062070, 0.282795515585586580, 0.282843474243122280, +0.282891432193549670, 0.282939389436748120, 0.282987345972598060, 0.283035301800979690, 0.283083256921773440, 0.283131211334858630, 0.283179165040115810, 0.283227118037425060, +0.283275070326666930, 0.283323021907720740, 0.283370972780466970, 0.283418922944785770, 0.283466872400557680, 0.283514821147661970, 0.283562769185979220, 0.283610716515389990, +0.283658663135773540, 0.283706609047010390, 0.283754554248980770, 0.283802498741565160, 0.283850442524642920, 0.283898385598094550, 0.283946327961800190, 0.283994269615640450, +0.284042210559494630, 0.284090150793243290, 0.284138090316766510, 0.284186029129945010, 0.284233967232657980, 0.284281904624786030, 0.284329841306209310, 0.284377777276808410, +0.284425712536462650, 0.284473647085052570, 0.284521580922458880, 0.284569514048560730, 0.284617446463238830, 0.284665378166373330, 0.284713309157844820, 0.284761239437532570, +0.284809169005317280, 0.284857097861078990, 0.284905026004698410, 0.284952953436054870, 0.285000880155028950, 0.285048806161500800, 0.285096731455351030, 0.285144656036459050, +0.285192579904705420, 0.285240503059970340, 0.285288425502134460, 0.285336347231077040, 0.285384268246678790, 0.285432188548820240, 0.285480108137380840, 0.285528027012241170, +0.285575945173281440, 0.285623862620382250, 0.285671779353422970, 0.285719695372284250, 0.285767610676846310, 0.285815525266989780, 0.285863439142593990, 0.285911352303539590, +0.285959264749706840, 0.286007176480976290, 0.286055087497227470, 0.286102997798340860, 0.286150907384196740, 0.286198816254675860, 0.286246724409657430, 0.286294631849022260, +0.286342538572650910, 0.286390444580422730, 0.286438349872218500, 0.286486254447918360, 0.286534158307403090, 0.286582061450551930, 0.286629963877245600, 0.286677865587364410, +0.286725766580788970, 0.286773666857398690, 0.286821566417074180, 0.286869465259695810, 0.286917363385144230, 0.286965260793298760, 0.287013157484040160, 0.287061053457248690, +0.287108948712805010, 0.287156843250588490, 0.287204737070479890, 0.287252630172359470, 0.287300522556107830, 0.287348414221604510, 0.287396305168730160, 0.287444195397365430, +0.287492084907389810, 0.287539973698684000, 0.287587861771128270, 0.287635749124603270, 0.287683635758988480, 0.287731521674164600, 0.287779406870011910, 0.287827291346411160, +0.287875175103241730, 0.287923058140384380, 0.287970940457719370, 0.288018822055127410, 0.288066702932487980, 0.288114583089681800, 0.288162462526589170, 0.288210341243090810, +0.288258219239066190, 0.288306096514395980, 0.288353973068960990, 0.288401848902640650, 0.288449724015315660, 0.288497598406866400, 0.288545472077173510, 0.288593345026116550, +0.288641217253576220, 0.288689088759432830, 0.288736959543567150, 0.288784829605858660, 0.288832698946188130, 0.288880567564435810, 0.288928435460482470, 0.288976302634207650, +0.289024169085492060, 0.289072034814216060, 0.289119899820260430, 0.289167764103504590, 0.289215627663829360, 0.289263490501115440, 0.289311352615242380, 0.289359214006090990, +0.289407074673541490, 0.289454934617474790, 0.289502793837770330, 0.289550652334308820, 0.289598510106970740, 0.289646367155636800, 0.289694223480186530, 0.289742079080500650, +0.289789933956459630, 0.289837788107944140, 0.289885641534833820, 0.289933494237009370, 0.289981346214351180, 0.290029197466740050, 0.290077047994055480, 0.290124897796178340, +0.290172746872988880, 0.290220595224368050, 0.290268442850195260, 0.290316289750351400, 0.290364135924717210, 0.290411981373172310, 0.290459826095597400, 0.290507670091872950, +0.290555513361879740, 0.290603355905497300, 0.290651197722606500, 0.290699038813087730, 0.290746879176821740, 0.290794718813688120, 0.290842557723567760, 0.290890395906340970, +0.290938233361888620, 0.290986070090090250, 0.291033906090826740, 0.291081741363978410, 0.291129575909426170, 0.291177409727049590, 0.291225242816729510, 0.291273075178346720, +0.291320906811780800, 0.291368737716912630, 0.291416567893622580, 0.291464397341791580, 0.291512226061299120, 0.291560054052026120, 0.291607881313853010, 0.291655707846660620, +0.291703533650328470, 0.291751358724737560, 0.291799183069768210, 0.291847006685301340, 0.291894829571216540, 0.291942651727394640, 0.291990473153716120, 0.292038293850061860, +0.292086113816311440, 0.292133933052345700, 0.292181751558045600, 0.292229569333290640, 0.292277386377961800, 0.292325202691939510, 0.292373018275104590, 0.292420833127336740, +0.292468647248516790, 0.292516460638525210, 0.292564273297242940, 0.292612085224549510, 0.292659896420325920, 0.292707706884452520, 0.292755516616810320, 0.292803325617278950, +0.292851133885739190, 0.292898941422071620, 0.292946748226157130, 0.292994554297875350, 0.293042359637107170, 0.293090164243733520, 0.293137968117634040, 0.293185771258689660, +0.293233573666780820, 0.293281375341788500, 0.293329176283592290, 0.293376976492073120, 0.293424775967111530, 0.293472574708588450, 0.293520372716383480, 0.293568169990377600, +0.293615966530451300, 0.293663762336485450, 0.293711557408359860, 0.293759351745955300, 0.293807145349152370, 0.293854938217832040, 0.293902730351873920, 0.293950521751158990, +0.293998312415567730, 0.294046102344981130, 0.294093891539278840, 0.294141679998341790, 0.294189467722051010, 0.294237254710286110, 0.294285040962928120, 0.294332826479857480, +0.294380611260955220, 0.294428395306100990, 0.294476178615175830, 0.294523961188060180, 0.294571743024635010, 0.294619524124780100, 0.294667304488376410, 0.294715084115304390, +0.294762863005445130, 0.294810641158678280, 0.294858418574884820, 0.294906195253945350, 0.294953971195740790, 0.295001746400150870, 0.295049520867056550, 0.295097294596338930, +0.295145067587877620, 0.295192839841553590, 0.295240611357247500, 0.295288382134840320, 0.295336152174211770, 0.295383921475242780, 0.295431690037814050, 0.295479457861806460, +0.295527224947099880, 0.295574991293575170, 0.295622756901113000, 0.295670521769594350, 0.295718285898899040, 0.295766049288907930, 0.295813811939501740, 0.295861573850561440, +0.295909335021966760, 0.295957095453598770, 0.296004855145338470, 0.296052614097065570, 0.296100372308661150, 0.296148129780005820, 0.296195886510980610, 0.296243642501465180, +0.296291397751340720, 0.296339152260487740, 0.296386906028787310, 0.296434659056119150, 0.296482411342364360, 0.296530162887403580, 0.296577913691117800, 0.296625663753386780, +0.296673413074091620, 0.296721161653112960, 0.296768909490331800, 0.296816656585627950, 0.296864402938882390, 0.296912148549975890, 0.296959893418789420, 0.297007637545202820, +0.297055380929097110, 0.297103123570353400, 0.297150865468851390, 0.297198606624472280, 0.297246347037096630, 0.297294086706605510, 0.297341825632878750, 0.297389563815797450, +0.297437301255242260, 0.297485037951094210, 0.297532773903233180, 0.297580509111540160, 0.297628243575895900, 0.297675977296181450, 0.297723710272276620, 0.297771442504062570, +0.297819173991419880, 0.297866904734229660, 0.297914634732371730, 0.297962363985727290, 0.298010092494177310, 0.298057820257601690, 0.298105547275881510, 0.298153273548897480, +0.298200999076530690, 0.298248723858660970, 0.298296447895169400, 0.298344171185936760, 0.298391893730844130, 0.298439615529771270, 0.298487336582599460, 0.298535056889209230, +0.298582776449481830, 0.298630495263297050, 0.298678213330536070, 0.298725930651079500, 0.298773647224808540, 0.298821363051603060, 0.298869078131344170, 0.298916792463913010, +0.298964506049189390, 0.299012218887054590, 0.299059930977389200, 0.299107642320074420, 0.299155352914990070, 0.299203062762017360, 0.299250771861036990, 0.299298480211930170, +0.299346187814576670, 0.299393894668857690, 0.299441600774653980, 0.299489306131846710, 0.299537010740315750, 0.299584714599942290, 0.299632417710607000, 0.299680120072191140, +0.299727821684574510, 0.299775522547638340, 0.299823222661263770, 0.299870922025330720, 0.299918620639720410, 0.299966318504313490, 0.300014015618991210, 0.300061711983633520, +0.300109407598121490, 0.300157102462335960, 0.300204796576158120, 0.300252489939467850, 0.300300182552146360, 0.300347874414074400, 0.300395565525133190, 0.300443255885202600, +0.300490945494163940, 0.300538634351897870, 0.300586322458285650, 0.300634009813207200, 0.300681696416543740, 0.300729382268176030, 0.300777067367985260, 0.300824751715851440, +0.300872435311655690, 0.300920118155279360, 0.300967800246602250, 0.301015481585505620, 0.301063162171870350, 0.301110842005577530, 0.301158521086507200, 0.301206199414540630, +0.301253876989558520, 0.301301553811442140, 0.301349229880071400, 0.301396905195327640, 0.301444579757091600, 0.301492253565244560, 0.301539926619666440, 0.301587598920238510, +0.301635270466841580, 0.301682941259356910, 0.301730611297664490, 0.301778280581645460, 0.301825949111181210, 0.301873616886151660, 0.301921283906438080, 0.301968950171921270, +0.302016615682482500, 0.302064280438001760, 0.302111944438360370, 0.302159607683439080, 0.302207270173119210, 0.302254931907280700, 0.302302592885804910, 0.302350253108572610, +0.302397912575465110, 0.302445571286362400, 0.302493229241145800, 0.302540886439696070, 0.302588542881894570, 0.302636198567621310, 0.302683853496757530, 0.302731507669184550, +0.302779161084782370, 0.302826813743432290, 0.302874465645015130, 0.302922116789412330, 0.302969767176503760, 0.303017416806170730, 0.303065065678294220, 0.303112713792755450, +0.303160361149434450, 0.303208007748212600, 0.303255653588970660, 0.303303298671590060, 0.303350942995950780, 0.303398586561934140, 0.303446229369421060, 0.303493871418292820, +0.303541512708429440, 0.303589153239712310, 0.303636793012022290, 0.303684432025240700, 0.303732070279247650, 0.303779707773924380, 0.303827344509152280, 0.303874980484811370, +0.303922615700783050, 0.303970250156948170, 0.304017883853188060, 0.304065516789382870, 0.304113148965413860, 0.304160780381162010, 0.304208411036508590, 0.304256040931333740, +0.304303670065518780, 0.304351298438944650, 0.304398926051492660, 0.304446552903043010, 0.304494178993476920, 0.304541804322675410, 0.304589428890519760, 0.304637052696890180, +0.304684675741667970, 0.304732298024734450, 0.304779919545969780, 0.304827540305255270, 0.304875160302471970, 0.304922779537501190, 0.304970398010223020, 0.305018015720518840, +0.305065632668269640, 0.305113248853356780, 0.305160864275660360, 0.305208478935061810, 0.305256092831442060, 0.305303705964682480, 0.305351318334663220, 0.305398929941265660, +0.305446540784370780, 0.305494150863859950, 0.305541760179613320, 0.305589368731512320, 0.305636976519438330, 0.305684583543271440, 0.305732189802893130, 0.305779795298184330, +0.305827400029026420, 0.305875003995299650, 0.305922607196885350, 0.305970209633664500, 0.306017811305518580, 0.306065412212327690, 0.306113012353973310, 0.306160611730336370, +0.306208210341298300, 0.306255808186739360, 0.306303405266540820, 0.306351001580583810, 0.306398597128749730, 0.306446191910918650, 0.306493785926972180, 0.306541379176791640, +0.306588971660257230, 0.306636563377250370, 0.306684154327652110, 0.306731744511343940, 0.306779333928205940, 0.306826922578119610, 0.306874510460965980, 0.306922097576626470, +0.306969683924981310, 0.307017269505911960, 0.307064854319299420, 0.307112438365025160, 0.307160021642969350, 0.307207604153013570, 0.307255185895038700, 0.307302766868926320, +0.307350347074556610, 0.307397926511811030, 0.307445505180570620, 0.307493083080716880, 0.307540660212130000, 0.307588236574691480, 0.307635812168282790, 0.307683386992784190, +0.307730961048077070, 0.307778534334042560, 0.307826106850562110, 0.307873678597516020, 0.307921249574785670, 0.307968819782252270, 0.308016389219797180, 0.308063957887300730, +0.308111525784644400, 0.308159092911709230, 0.308206659268376760, 0.308254224854527190, 0.308301789670042070, 0.308349353714802490, 0.308396916988689930, 0.308444479491584710, +0.308492041223368210, 0.308539602183922070, 0.308587162373126560, 0.308634721790863040, 0.308682280437012790, 0.308729838311457230, 0.308777395414076670, 0.308824951744752610, +0.308872507303366130, 0.308920062089798890, 0.308967616103930980, 0.309015169345644100, 0.309062721814819250, 0.309110273511338070, 0.309157824435080720, 0.309205374585928890, +0.309252923963763580, 0.309300472568466380, 0.309348020399917540, 0.309395567457998680, 0.309443113742591370, 0.309490659253575770, 0.309538203990833590, 0.309585747954245870, +0.309633291143694200, 0.309680833559058900, 0.309728375200221510, 0.309775916067063170, 0.309823456159465490, 0.309870995477308730, 0.309918534020474480, 0.309966071788843890, +0.310013608782298500, 0.310061145000718740, 0.310108680443986100, 0.310156215111981710, 0.310203749004587250, 0.310251282121683010, 0.310298814463150550, 0.310346346028871010, +0.310393876818726100, 0.310441406832596020, 0.310488936070362430, 0.310536464531906970, 0.310583992217109860, 0.310631519125852850, 0.310679045258016980, 0.310726570613483910, +0.310774095192134060, 0.310821618993848910, 0.310869142018509740, 0.310916664265998120, 0.310964185736194390, 0.311011706428980240, 0.311059226344236830, 0.311106745481845750, +0.311154263841687430, 0.311201781423643410, 0.311249298227594890, 0.311296814253423650, 0.311344329501009880, 0.311391843970235280, 0.311439357660981580, 0.311486870573128960, +0.311534382706559200, 0.311581894061153500, 0.311629404636793510, 0.311676914433359540, 0.311724423450733310, 0.311771931688796020, 0.311819439147429270, 0.311866945826513590, +0.311914451725930460, 0.311961956845561270, 0.312009461185287550, 0.312056964744989780, 0.312104467524549620, 0.312151969523848270, 0.312199470742767440, 0.312246971181187490, +0.312294470838990090, 0.312341969716056990, 0.312389467812268510, 0.312436965127506350, 0.312484461661651840, 0.312531957414586500, 0.312579452386190890, 0.312626946576346710, +0.312674439984935100, 0.312721932611837780, 0.312769424456935290, 0.312816915520109210, 0.312864405801240810, 0.312911895300211850, 0.312959384016902710, 0.313006871951195090, +0.313054359102970300, 0.313101845472110060, 0.313149331058494800, 0.313196815862006210, 0.313244299882525950, 0.313291783119934550, 0.313339265574113680, 0.313386747244944700, +0.313434228132309200, 0.313481708236087730, 0.313529187556161990, 0.313576666092413300, 0.313624143844723370, 0.313671620812972620, 0.313719096997042870, 0.313766572396815320, +0.313814047012171800, 0.313861520842992740, 0.313908993889159880, 0.313956466150554560, 0.314003937627058420, 0.314051408318552050, 0.314098878224917220, 0.314146347346035140, +0.314193815681787610, 0.314241283232055080, 0.314288749996719410, 0.314336215975662250, 0.314383681168764140, 0.314431145575906850, 0.314478609196971680, 0.314526072031840410, +0.314573534080393510, 0.314620995342512810, 0.314668455818079620, 0.314715915506975700, 0.314763374409081590, 0.314810832524278990, 0.314858289852449350, 0.314905746393474410, +0.314953202147234660, 0.315000657113611910, 0.315048111292487550, 0.315095564683743280, 0.315143017287259740, 0.315190469102918590, 0.315237920130601760, 0.315285370370189670, +0.315332819821564140, 0.315380268484606600, 0.315427716359198750, 0.315475163445221250, 0.315522609742555800, 0.315570055251083840, 0.315617499970687170, 0.315664943901246330, +0.315712387042643150, 0.315759829394758940, 0.315807270957475630, 0.315854711730673700, 0.315902151714235020, 0.315949590908040920, 0.315997029311973270, 0.316044466925912650, +0.316091903749740830, 0.316139339783339690, 0.316186775026589820, 0.316234209479372970, 0.316281643141570590, 0.316329076013064540, 0.316376508093735350, 0.316423939383464910, +0.316471369882134650, 0.316518799589626370, 0.316566228505820670, 0.316613656630599370, 0.316661083963843960, 0.316708510505436250, 0.316755936255256830, 0.316803361213187580, +0.316850785379109930, 0.316898208752905750, 0.316945631334455640, 0.316993053123641400, 0.317040474120344530, 0.317087894324446950, 0.317135313735829210, 0.317182732354373110, +0.317230150179960650, 0.317277567212472410, 0.317324983451790220, 0.317372398897795620, 0.317419813550370410, 0.317467227409395260, 0.317514640474751970, 0.317562052746322150, +0.317609464223987610, 0.317656874907629010, 0.317704284797128200, 0.317751693892366680, 0.317799102193226320, 0.317846509699587830, 0.317893916411333020, 0.317941322328343430, +0.317988727450501000, 0.318036131777686300, 0.318083535309781230, 0.318130938046667810, 0.318178339988226590, 0.318225741134339490, 0.318273141484888110, 0.318320541039754270, +0.318367939798818610, 0.318415337761963180, 0.318462734929069350, 0.318510131300019090, 0.318557526874693130, 0.318604921652973330, 0.318652315634741220, 0.318699708819878750, +0.318747101208266600, 0.318794492799786670, 0.318841883594320530, 0.318889273591750070, 0.318936662791956040, 0.318984051194820320, 0.319031438800224940, 0.319078825608050510, +0.319126211618179000, 0.319173596830492010, 0.319220981244871420, 0.319268364861197970, 0.319315747679353610, 0.319363129699219870, 0.319410510920678680, 0.319457891343610860, +0.319505270967898270, 0.319552649793422520, 0.319600027820065580, 0.319647405047708170, 0.319694781476232200, 0.319742157105519290, 0.319789531935451400, 0.319836905965909250, +0.319884279196774870, 0.319931651627930190, 0.319979023259255980, 0.320026394090634210, 0.320073764121946440, 0.320121133353074680, 0.320168501783899660, 0.320215869414303410, +0.320263236244167470, 0.320310602273373880, 0.320357967501803340, 0.320405331929337900, 0.320452695555859090, 0.320500058381249010, 0.320547420405388360, 0.320594781628159130, +0.320642142049442970, 0.320689501669121860, 0.320736860487076560, 0.320784218503189170, 0.320831575717341170, 0.320878932129414710, 0.320926287739290440, 0.320973642546850460, +0.321020996551976800, 0.321068349754550290, 0.321115702154452840, 0.321163053751566120, 0.321210404545772210, 0.321257754536951880, 0.321305103724987160, 0.321352452109759710, +0.321399799691151510, 0.321447146469043380, 0.321494492443317400, 0.321541837613855190, 0.321589181980538820, 0.321636525543249060, 0.321683868301868010, 0.321731210256277270, +0.321778551406358910, 0.321825891751993780, 0.321873231293063890, 0.321920570029451350, 0.321967907961036970, 0.322015245087702850, 0.322062581409330580, 0.322109916925802320, +0.322157251636998820, 0.322204585542802180, 0.322251918643094050, 0.322299250937756580, 0.322346582426670580, 0.322393913109718100, 0.322441242986780840, 0.322488572057740900, +0.322535900322479090, 0.322583227780877560, 0.322630554432817910, 0.322677880278182340, 0.322725205316851670, 0.322772529548707940, 0.322819852973633300, 0.322867175591508630, +0.322914497402216010, 0.322961818405637200, 0.323009138601654200, 0.323056457990147930, 0.323103776571000530, 0.323151094344093730, 0.323198411309309600, 0.323245727466528960, +0.323293042815634090, 0.323340357356506570, 0.323387671089028550, 0.323434984013080960, 0.323482296128545900, 0.323529607435305120, 0.323576917933240730, 0.323624227622233640, +0.323671536502165960, 0.323718844572919440, 0.323766151834376240, 0.323813458286417220, 0.323860763928924600, 0.323908068761780410, 0.323955372784865690, 0.324002675998062540, +0.324049978401252660, 0.324097279994318310, 0.324144580777140310, 0.324191880749600870, 0.324239179911581690, 0.324286478262965030, 0.324333775803631710, 0.324381072533463990, +0.324428368452343570, 0.324475663560152620, 0.324522957856772150, 0.324570251342084230, 0.324617544015970700, 0.324664835878313740, 0.324712126928994320, 0.324759417167894530, +0.324806706594896580, 0.324853995209881510, 0.324901283012731410, 0.324948570003328110, 0.324995856181553850, 0.325043141547289470, 0.325090426100417270, 0.325137709840818970, +0.325184992768376870, 0.325232274882971790, 0.325279556184486120, 0.325326836672801490, 0.325374116347800220, 0.325421395209363200, 0.325468673257372720, 0.325515950491710560, +0.325563226912258970, 0.325610502518898840, 0.325657777311512460, 0.325705051289982120, 0.325752324454188670, 0.325799596804014440, 0.325846868339341180, 0.325894139060051210, +0.325941408966025470, 0.325988678057146150, 0.326035946333295190, 0.326083213794354790, 0.326130480440205930, 0.326177746270730870, 0.326225011285811380, 0.326272275485329890, +0.326319538869167200, 0.326366801437205700, 0.326414063189327200, 0.326461324125413950, 0.326508584245347010, 0.326555843549008570, 0.326603102036280960, 0.326650359707045150, +0.326697616561183460, 0.326744872598577710, 0.326792127819110210, 0.326839382222661960, 0.326886635809115260, 0.326933888578351980, 0.326981140530254400, 0.327028391664703540, +0.327075641981581730, 0.327122891480770780, 0.327170140162153010, 0.327217388025609510, 0.327264635071022550, 0.327311881298273930, 0.327359126707246100, 0.327406371297820020, +0.327453615069877970, 0.327500858023301920, 0.327548100157974140, 0.327595341473775670, 0.327642581970588880, 0.327689821648296020, 0.327737060506778200, 0.327784298545917730, +0.327831535765596540, 0.327878772165696890, 0.327926007746099920, 0.327973242506687910, 0.328020476447342780, 0.328067709567946900, 0.328114941868381360, 0.328162173348528430, +0.328209404008270030, 0.328256633847488600, 0.328303862866065170, 0.328351091063882050, 0.328398318440821180, 0.328445544996764980, 0.328492770731594500, 0.328539995645192040, +0.328587219737440040, 0.328634443008219590, 0.328681665457413010, 0.328728887084902280, 0.328776107890569770, 0.328823327874296520, 0.328870547035965020, 0.328917765375457080, +0.328964982892655190, 0.329012199587440380, 0.329059415459695140, 0.329106630509301330, 0.329153844736141340, 0.329201058140096310, 0.329248270721048670, 0.329295482478880350, +0.329342693413473770, 0.329389903524709980, 0.329437112812471460, 0.329484321276640570, 0.329531528917098470, 0.329578735733727530, 0.329625941726409740, 0.329673146895027580, +0.329720351239462080, 0.329767554759595680, 0.329814757455310470, 0.329861959326488710, 0.329909160373011660, 0.329956360594761740, 0.330003559991620900, 0.330050758563471550, +0.330097956310194900, 0.330145153231673370, 0.330192349327788960, 0.330239544598424080, 0.330286739043459900, 0.330333932662778940, 0.330381125456263080, 0.330428317423794860, +0.330475508565255430, 0.330522698880527210, 0.330569888369492690, 0.330617077032032970, 0.330664264868030630, 0.330711451877367610, 0.330758638059926340, 0.330805823415588120, +0.330853007944235280, 0.330900191645749960, 0.330947374520014550, 0.330994556566910290, 0.331041737786319680, 0.331088918178124690, 0.331136097742207810, 0.331183276478450310, +0.331230454386734540, 0.331277631466942720, 0.331324807718957230, 0.331371983142659250, 0.331419157737931350, 0.331466331504655990, 0.331513504442714320, 0.331560676551988950, +0.331607847832361860, 0.331655018283715570, 0.331702187905931310, 0.331749356698891610, 0.331796524662478500, 0.331843691796574520, 0.331890858101060840, 0.331938023575820080, +0.331985188220734200, 0.332032352035685820, 0.332079515020556100, 0.332126677175227590, 0.332173838499582430, 0.332220998993503050, 0.332268158656870820, 0.332315317489568110, +0.332362475491477570, 0.332409632662480410, 0.332456789002459170, 0.332503944511296000, 0.332551099188873320, 0.332598253035072510, 0.332645406049776050, 0.332692558232866090, +0.332739709584225160, 0.332786860103734540, 0.332834009791276750, 0.332881158646733900, 0.332928306669988630, 0.332975453860922140, 0.333022600219417040, 0.333069745745355470, +0.333116890438619920, 0.333164034299091690, 0.333211177326653400, 0.333258319521187620, 0.333305460882575570, 0.333352601410699890, 0.333399741105442740, 0.333446879966686590, +0.333494017994312890, 0.333541155188204100, 0.333588291548242430, 0.333635427074310490, 0.333682561766289520, 0.333729695624062130, 0.333776828647510570, 0.333823960836517280, +0.333871092190963730, 0.333918222710732400, 0.333965352395705520, 0.334012481245765710, 0.334059609260794250, 0.334106736440673790, 0.334153862785286470, 0.334200988294514940, +0.334248112968240470, 0.334295236806345760, 0.334342359808713350, 0.334389481975224670, 0.334436603305762250, 0.334483723800208300, 0.334530843458445530, 0.334577962280355190, +0.334625080265819940, 0.334672197414721980, 0.334719313726943970, 0.334766429202367210, 0.334813543840874420, 0.334860657642347740, 0.334907770606669870, 0.334954882733722150, +0.335001994023387210, 0.335049104475547310, 0.335096214090085050, 0.335143322866881810, 0.335190430805820280, 0.335237537906783120, 0.335284644169651650, 0.335331749594308610, +0.335378854180636180, 0.335425957928517040, 0.335473060837832570, 0.335520162908465480, 0.335567264140297920, 0.335614364533212690, 0.335661464087091080, 0.335708562801815820, +0.335755660677269200, 0.335802757713333790, 0.335849853909891080, 0.335896949266823790, 0.335944043784014050, 0.335991137461344620, 0.336038230298697000, 0.336085322295953730, +0.336132413452997600, 0.336179503769710060, 0.336226593245973700, 0.336273681881670890, 0.336320769676684280, 0.336367856630895360, 0.336414942744186760, 0.336462028016440820, +0.336509112447540230, 0.336556196037366420, 0.336603278785802150, 0.336650360692729630, 0.336697441758031680, 0.336744521981589660, 0.336791601363286400, 0.336838679903004090, +0.336885757600625500, 0.336932834456032120, 0.336979910469106640, 0.337026985639731380, 0.337074059967789110, 0.337121133453161250, 0.337168206095730560, 0.337215277895379750, +0.337262348851990360, 0.337309418965445030, 0.337356488235626200, 0.337403556662416610, 0.337450624245697660, 0.337497690985352150, 0.337544756881262400, 0.337591821933311220, +0.337638886141380050, 0.337685949505351630, 0.337733012025108410, 0.337780073700533030, 0.337827134531507030, 0.337874194517913230, 0.337921253659633940, 0.337968311956551910, +0.338015369408548700, 0.338062426015507070, 0.338109481777309760, 0.338156536693838380, 0.338203590764975640, 0.338250643990603890, 0.338297696370605970, 0.338344747904863410, +0.338391798593258960, 0.338438848435675010, 0.338485897431994360, 0.338532945582098570, 0.338579992885870430, 0.338627039343192270, 0.338674084953946910, 0.338721129718015990, +0.338768173635282170, 0.338815216705627980, 0.338862258928936120, 0.338909300305088200, 0.338956340833967080, 0.339003380515455480, 0.339050419349435030, 0.339097457335788500, +0.339144494474398320, 0.339191530765147350, 0.339238566207917150, 0.339285600802590510, 0.339332634549049880, 0.339379667447178070, 0.339426699496856720, 0.339473730697968550, +0.339520761050396080, 0.339567790554022140, 0.339614819208728320, 0.339661847014397440, 0.339708873970911930, 0.339755900078154650, 0.339802925336007200, 0.339849949744352450, +0.339896973303072840, 0.339943996012051160, 0.339991017871169140, 0.340038038880309530, 0.340085059039355260, 0.340132078348187930, 0.340179096806690400, 0.340226114414745100, +0.340273131172234950, 0.340320147079041570, 0.340367162135047810, 0.340414176340136150, 0.340461189694189480, 0.340508202197089380, 0.340555213848718790, 0.340602224648960170, +0.340649234597696420, 0.340696243694809160, 0.340743251940181290, 0.340790259333695280, 0.340837265875234050, 0.340884271564679210, 0.340931276401913730, 0.340978280386820430, +0.341025283519281070, 0.341072285799178480, 0.341119287226395170, 0.341166287800814040, 0.341213287522316780, 0.341260286390786320, 0.341307284406105140, 0.341354281568156170, +0.341401277876821060, 0.341448273331982800, 0.341495267933523810, 0.341542261681327060, 0.341589254575274280, 0.341636246615248330, 0.341683237801131800, 0.341730228132807570, +0.341777217610157340, 0.341824206233064090, 0.341871194001410750, 0.341918180915078970, 0.341965166973951800, 0.342012152177911640, 0.342059136526841560, 0.342106120020623180, +0.342153102659139560, 0.342200084442273120, 0.342247065369906960, 0.342294045441922660, 0.342341024658203260, 0.342388003018631320, 0.342434980523089790, 0.342481957171460350, +0.342528932963626020, 0.342575907899469400, 0.342622881978873420, 0.342669855201719780, 0.342716827567891570, 0.342763799077271670, 0.342810769729741840, 0.342857739525185110, +0.342904708463483980, 0.342951676544521580, 0.342998643768179510, 0.343045610134340820, 0.343092575642888140, 0.343139540293704470, 0.343186504086671450, 0.343233467021672230, +0.343280429098589300, 0.343327390317305750, 0.343374350677703330, 0.343421310179664980, 0.343468268823073410, 0.343515226607811530, 0.343562183533761170, 0.343609139600805360, +0.343656094808826750, 0.343703049157708270, 0.343750002647331740, 0.343796955277580250, 0.343843907048336730, 0.343890857959483100, 0.343937808010902290, 0.343984757202476950, +0.344031705534090130, 0.344078653005623620, 0.344125599616960490, 0.344172545367983360, 0.344219490258575290, 0.344266434288618080, 0.344313377457994780, 0.344360319766588040, +0.344407261214280950, 0.344454201800955260, 0.344501141526494030, 0.344548080390780000, 0.344595018393696160, 0.344641955535124390, 0.344688891814947660, 0.344735827233049190, +0.344782761789310720, 0.344829695483615310, 0.344876628315845700, 0.344923560285884890, 0.344970491393614800, 0.345017421638918460, 0.345064351021678590, 0.345111279541778280, +0.345158207199099290, 0.345205133993524820, 0.345252059924937520, 0.345298984993220480, 0.345345909198255590, 0.345392832539925860, 0.345439755018114080, 0.345486676632703330, +0.345533597383575470, 0.345580517270613670, 0.345627436293700910, 0.345674354452719210, 0.345721271747551570, 0.345768188178080800, 0.345815103744189940, 0.345862018445760920, +0.345908932282676830, 0.345955845254820430, 0.346002757362074860, 0.346049668604321960, 0.346096578981444860, 0.346143488493326320, 0.346190397139849500, 0.346237304920896270, +0.346284211836349780, 0.346331117886092720, 0.346378023070008310, 0.346424927387978420, 0.346471830839886250, 0.346518733425614460, 0.346565635145046290, 0.346612535998063580, +0.346659435984549510, 0.346706335104387310, 0.346753233357458830, 0.346800130743647290, 0.346847027262835450, 0.346893922914906390, 0.346940817699742170, 0.346987711617225860, +0.347034604667240290, 0.347081496849668600, 0.347128388164392790, 0.347175278611295990, 0.347222168190260970, 0.347269056901170990, 0.347315944743907920, 0.347362831718355030, +0.347409717824395000, 0.347456603061911170, 0.347503487430785350, 0.347550370930900850, 0.347597253562140830, 0.347644135324387200, 0.347691016217523300, 0.347737896241431870, +0.347784775395996060, 0.347831653681097920, 0.347878531096620650, 0.347925407642447060, 0.347972283318460360, 0.348019158124542540, 0.348066032060576850, 0.348112905126446050, +0.348159777322033400, 0.348206648647220900, 0.348253519101891730, 0.348300388685928830, 0.348347257399215350, 0.348394125241633320, 0.348440992213065960, 0.348487858313396510, +0.348534723542507090, 0.348581587900280760, 0.348628451386600540, 0.348675314001349550, 0.348722175744409890, 0.348769036615664770, 0.348815896614997070, 0.348862755742290030, +0.348909613997425700, 0.348956471380287350, 0.349003327890757830, 0.349050183528720360, 0.349097038294057030, 0.349143892186651150, 0.349190745206385490, 0.349237597353143360, +0.349284448626806850, 0.349331299027259230, 0.349378148554383820, 0.349424997208062580, 0.349471844988178850, 0.349518691894615490, 0.349565537927255810, 0.349612383085981910, +0.349659227370677010, 0.349706070781224070, 0.349752913317506350, 0.349799754979405960, 0.349846595766806160, 0.349893435679589860, 0.349940274717640390, 0.349987112880839830, +0.350033950169071520, 0.350080786582218310, 0.350127622120163520, 0.350174456782789300, 0.350221290569978920, 0.350268123481615290, 0.350314955517581790, 0.350361786677760470, +0.350408616962034740, 0.350455446370287800, 0.350502274902401880, 0.350549102558260270, 0.350595929337745920, 0.350642755240742120, 0.350689580267131040, 0.350736404416795990, +0.350783227689619950, 0.350830050085486290, 0.350876871604277050, 0.350923692245875610, 0.350970512010164940, 0.351017330897028470, 0.351064148906348180, 0.351110966038007570, +0.351157782291889540, 0.351204597667877430, 0.351251412165853430, 0.351298225785700910, 0.351345038527303260, 0.351391850390542600, 0.351438661375302270, 0.351485471481465310, +0.351532280708915070, 0.351579089057533770, 0.351625896527204660, 0.351672703117810900, 0.351719508829235750, 0.351766313661361410, 0.351813117614071300, 0.351859920687248360, +0.351906722880776070, 0.351953524194536570, 0.352000324628413240, 0.352047124182289060, 0.352093922856047570, 0.352140720649570800, 0.352187517562742250, 0.352234313595445270, +0.352281108747562130, 0.352327903018976260, 0.352374696409570590, 0.352421488919228590, 0.352468280547832470, 0.352515071295265600, 0.352561861161411080, 0.352608650146152340, +0.352655438249371570, 0.352702225470952200, 0.352749011810777220, 0.352795797268730170, 0.352842581844693190, 0.352889365538549770, 0.352936148350182940, 0.352982930279476140, +0.353029711326311610, 0.353076491490572800, 0.353123270772142780, 0.353170049170905000, 0.353216826686741650, 0.353263603319536210, 0.353310379069172230, 0.353357153935531850, +0.353403927918498620, 0.353450701017955560, 0.353497473233786160, 0.353544244565872630, 0.353591015014098560, 0.353637784578346880, 0.353684553258501230, 0.353731321054443710, +0.353778087966057920, 0.353824853993226880, 0.353871619135834150, 0.353918383393761970, 0.353965146766893830, 0.354011909255112780, 0.354058670858302390, 0.354105431576344940, +0.354152191409123910, 0.354198950356522770, 0.354245708418423840, 0.354292465594710670, 0.354339221885266340, 0.354385977289974340, 0.354432731808717040, 0.354479485441377860, +0.354526238187839960, 0.354572990047986920, 0.354619741021700960, 0.354666491108865670, 0.354713240309364130, 0.354759988623079890, 0.354806736049895320, 0.354853482589693850, +0.354900228242358730, 0.354946973007773390, 0.354993716885820270, 0.355040459876382830, 0.355087201979344620, 0.355133943194588020, 0.355180683521996610, 0.355227422961453430, +0.355274161512842130, 0.355320899176044980, 0.355367635950945620, 0.355414371837427130, 0.355461106835373190, 0.355507840944666030, 0.355554574165189260, 0.355601306496826090, +0.355648037939460040, 0.355694768492973430, 0.355741498157249980, 0.355788226932172770, 0.355834954817625390, 0.355881681813490220, 0.355928407919650800, 0.355975133135990830, +0.356021857462392620, 0.356068580898739720, 0.356115303444915380, 0.356162025100803190, 0.356208745866285590, 0.356255465741246060, 0.356302184725567850, 0.356348902819134670, +0.356395620021828730, 0.356442336333533780, 0.356489051754133040, 0.356535766283510020, 0.356582479921547180, 0.356629192668128150, 0.356675904523136130, 0.356722615486454790, +0.356769325557966480, 0.356816034737554850, 0.356862743025103120, 0.356909450420494930, 0.356956156923612770, 0.357002862534340160, 0.357049567252560820, 0.357096271078157170, +0.357142974011012860, 0.357189676051011040, 0.357236377198035530, 0.357283077451968580, 0.357329776812694010, 0.357376475280094970, 0.357423172854055120, 0.357469869534456970, +0.357516565321184140, 0.357563260214119880, 0.357609954213147900, 0.357656647318150610, 0.357703339529011730, 0.357750030845614460, 0.357796721267842570, 0.357843410795578410, +0.357890099428705750, 0.357936787167108250, 0.357983474010668380, 0.358030159959269840, 0.358076845012795850, 0.358123529171130220, 0.358170212434155310, 0.358216894801754890, +0.358263576273812220, 0.358310256850211010, 0.358356936530833780, 0.358403615315564190, 0.358450293204285560, 0.358496970196881650, 0.358543646293234820, 0.358590321493228950, +0.358636995796747240, 0.358683669203673450, 0.358730341713890120, 0.358777013327280900, 0.358823684043729550, 0.358870353863118610, 0.358917022785331720, 0.358963690810252310, +0.359010357937764090, 0.359057024167749590, 0.359103689500092530, 0.359150353934676200, 0.359197017471384440, 0.359243680110099660, 0.359290341850705740, 0.359337002693085940, +0.359383662637124070, 0.359430321682702610, 0.359476979829705390, 0.359523637078015660, 0.359570293427517280, 0.359616948878092760, 0.359663603429625830, 0.359710257081999940, +0.359756909835098780, 0.359803561688804950, 0.359850212643002210, 0.359896862697574370, 0.359943511852403920, 0.359990160107374720, 0.360036807462370160, 0.360083453917273920, +0.360130099471968670, 0.360176744126338160, 0.360223387880265810, 0.360270030733635390, 0.360316672686329500, 0.360363313738231880, 0.360409953889226030, 0.360456593139195650, +0.360503231488023430, 0.360549868935593100, 0.360596505481788120, 0.360643141126492260, 0.360689775869588170, 0.360736409710959600, 0.360783042650490440, 0.360829674688063260, +0.360876305823561890, 0.360922936056869760, 0.360969565387870730, 0.361016193816447340, 0.361062821342483460, 0.361109447965862530, 0.361156073686468400, 0.361202698504183680, +0.361249322418892240, 0.361295945430477440, 0.361342567538823210, 0.361389188743812150, 0.361435809045328130, 0.361482428443254570, 0.361529046937475400, 0.361575664527873150, +0.361622281214331760, 0.361668896996735050, 0.361715511874965700, 0.361762125848907600, 0.361808738918444120, 0.361855351083459230, 0.361901962343835590, 0.361948572699457020, +0.361995182150207040, 0.362041790695969480, 0.362088398336627040, 0.362135005072063590, 0.362181610902162670, 0.362228215826808090, 0.362274819845882610, 0.362321422959270060, +0.362368025166853960, 0.362414626468518190, 0.362461226864145390, 0.362507826353619610, 0.362554424936824660, 0.362601022613643190, 0.362647619383959230, 0.362694215247656160, +0.362740810204618010, 0.362787404254727390, 0.362833997397868260, 0.362880589633924170, 0.362927180962778980, 0.362973771384315470, 0.363020360898417490, 0.363066949504968650, +0.363113537203852810, 0.363160123994952730, 0.363206709878152290, 0.363253294853335130, 0.363299878920385180, 0.363346462079185080, 0.363393044329618780, 0.363439625671569950, +0.363486206104922440, 0.363532785629558990, 0.363579364245363580, 0.363625941952220140, 0.363672518750011500, 0.363719094638621510, 0.363765669617933770, 0.363812243687832330, +0.363858816848199820, 0.363905389098920280, 0.363951960439877260, 0.363998530870954800, 0.364045100392035580, 0.364091669003003600, 0.364138236703742400, 0.364184803494136070, +0.364231369374067300, 0.364277934343420150, 0.364324498402078150, 0.364371061549925270, 0.364417623786844390, 0.364464185112719390, 0.364510745527434340, 0.364557305030872080, +0.364603863622916520, 0.364650421303451270, 0.364696978072360400, 0.364743533929526690, 0.364790088874834160, 0.364836642908166360, 0.364883196029407390, 0.364929748238440040, +0.364976299535148260, 0.365022849919415800, 0.365069399391126590, 0.365115947950163440, 0.365162495596410450, 0.365209042329751270, 0.365255588150069810, 0.365302133057249010, +0.365348677051172910, 0.365395220131725480, 0.365441762298789610, 0.365488303552249320, 0.365534843891988310, 0.365581383317890580, 0.365627921829838940, 0.365674459427717540, +0.365720996111409960, 0.365767531880800360, 0.365814066735771440, 0.365860600676207400, 0.365907133701991850, 0.365953665813008920, 0.366000197009141380, 0.366046727290273320, +0.366093256656288450, 0.366139785107070900, 0.366186312642503400, 0.366232839262470190, 0.366279364966854810, 0.366325889755541480, 0.366372413628413000, 0.366418936585353520, +0.366465458626247080, 0.366511979750976550, 0.366558499959426130, 0.366605019251479420, 0.366651537627020570, 0.366698055085932510, 0.366744571628099260, 0.366791087253404650, +0.366837601961732650, 0.366884115752966310, 0.366930628626989610, 0.366977140583686410, 0.367023651622940710, 0.367070161744635470, 0.367116670948654860, 0.367163179234882560, +0.367209686603202750, 0.367256193053498270, 0.367302698585653340, 0.367349203199552050, 0.367395706895077330, 0.367442209672113380, 0.367488711530543910, 0.367535212470253000, +0.367581712491123700, 0.367628211593040160, 0.367674709775886010, 0.367721207039545580, 0.367767703383901630, 0.367814198808838480, 0.367860693314239820, 0.367907186899989860, +0.367953679565971530, 0.368000171312068970, 0.368046662138165950, 0.368093152044146720, 0.368139641029894220, 0.368186129095292580, 0.368232616240226070, 0.368279102464577570, +0.368325587768231320, 0.368372072151071150, 0.368418555612981150, 0.368465038153844350, 0.368511519773545020, 0.368558000471966850, 0.368604480248994060, 0.368650959104509680, +0.368697437038397910, 0.368743914050542580, 0.368790390140827820, 0.368836865309136670, 0.368883339555353410, 0.368929812879361770, 0.368976285281045980, 0.369022756760289120, +0.369069227316975330, 0.369115696950988950, 0.369162165662212830, 0.369208633450531340, 0.369255100315828260, 0.369301566257987820, 0.369348031276893090, 0.369394495372428240, +0.369440958544477230, 0.369487420792924180, 0.369533882117652150, 0.369580342518545430, 0.369626801995487860, 0.369673260548363690, 0.369719718177055960, 0.369766174881448920, +0.369812630661426500, 0.369859085516872850, 0.369905539447671130, 0.369951992453705520, 0.369998444534859920, 0.370044895691018620, 0.370091345922064720, 0.370137795227882430, +0.370184243608356060, 0.370230691063368640, 0.370277137592804560, 0.370323583196547570, 0.370370027874482090, 0.370416471626491050, 0.370462914452458880, 0.370509356352269450, +0.370555797325807010, 0.370602237372954670, 0.370648676493596730, 0.370695114687617120, 0.370741551954900110, 0.370787988295328830, 0.370834423708787550, 0.370880858195160260, +0.370927291754331200, 0.370973724386183530, 0.371020156090601520, 0.371066586867469520, 0.371113016716670690, 0.371159445638089280, 0.371205873631609230, 0.371252300697114960, +0.371298726834489500, 0.371345152043617230, 0.371391576324382080, 0.371437999676668410, 0.371484422100359310, 0.371530843595339170, 0.371577264161491950, 0.371623683798701920, +0.371670102506852280, 0.371716520285827410, 0.371762937135511230, 0.371809353055788160, 0.371855768046541250, 0.371902182107654910, 0.371948595239013520, 0.371995007440500290, +0.372041418711999470, 0.372087829053395160, 0.372134238464571660, 0.372180646945412140, 0.372227054495801070, 0.372273461115622320, 0.372319866804760310, 0.372366271563098210, +0.372412675390520480, 0.372459078286911050, 0.372505480252154300, 0.372551881286133480, 0.372598281388732970, 0.372644680559836680, 0.372691078799329170, 0.372737476107093510, +0.372783872483014200, 0.372830267926975210, 0.372876662438860920, 0.372923056018554580, 0.372969448665940620, 0.373015840380903410, 0.373062231163326210, 0.373108621013093440, +0.373155009930089100, 0.373201397914197650, 0.373247784965302310, 0.373294171083287500, 0.373340556268037300, 0.373386940519436050, 0.373433323837367100, 0.373479706221714780, +0.373526087672363230, 0.373572468189196870, 0.373618847772098920, 0.373665226420953900, 0.373711604135645750, 0.373757980916059050, 0.373804356762076910, 0.373850731673583960, +0.373897105650464520, 0.373943478692601970, 0.373989850799880730, 0.374036221972184780, 0.374082592209398770, 0.374128961511405840, 0.374175329878090490, 0.374221697309336850, +0.374268063805029360, 0.374314429365051270, 0.374360793989287120, 0.374407157677621010, 0.374453520429937400, 0.374499882246119580, 0.374546243126052060, 0.374592603069618950, +0.374638962076704720, 0.374685320147192690, 0.374731677280967350, 0.374778033477913220, 0.374824388737913570, 0.374870743060853000, 0.374917096446615530, 0.374963448895085760, +0.375009800406146950, 0.375056150979683640, 0.375102500615579980, 0.375148849313720440, 0.375195197073988350, 0.375241543896268290, 0.375287889780444420, 0.375334234726401150, +0.375380578734021920, 0.375426921803191260, 0.375473263933793320, 0.375519605125712590, 0.375565945378832420, 0.375612284693037420, 0.375658623068212070, 0.375704960504239790, +0.375751297001005120, 0.375797632558392210, 0.375843967176285600, 0.375890300854568700, 0.375936633593126010, 0.375982965391841730, 0.376029296250600500, 0.376075626169285580, +0.376121955147781570, 0.376168283185972730, 0.376214610283743590, 0.376260936440977470, 0.376307261657559010, 0.376353585933372430, 0.376399909268302300, 0.376446231662231960, +0.376492553115046040, 0.376538873626628750, 0.376585193196864680, 0.376631511825637200, 0.376677829512830960, 0.376724146258330560, 0.376770462062019420, 0.376816776923782070, +0.376863090843502780, 0.376909403821066190, 0.376955715856355680, 0.377002026949255890, 0.377048337099651020, 0.377094646307425730, 0.377140954572463380, 0.377187261894648680, +0.377233568273865780, 0.377279873709999440, 0.377326178202932960, 0.377372481752551060, 0.377418784358737940, 0.377465086021378240, 0.377511386740355450, 0.377557686515554160, +0.377603985346859130, 0.377650283234153670, 0.377696580177322550, 0.377742876176249910, 0.377789171230820560, 0.377835465340917830, 0.377881758506426410, 0.377928050727230680, +0.377974342003215170, 0.378020632334263420, 0.378066921720260070, 0.378113210161089400, 0.378159497656636150, 0.378205784206783750, 0.378252069811416850, 0.378298354470419820, +0.378344638183677310, 0.378390920951072740, 0.378437202772490930, 0.378483483647816530, 0.378529763576932960, 0.378576042559724990, 0.378622320596076920, 0.378668597685873460, +0.378714873828998160, 0.378761149025335590, 0.378807423274770180, 0.378853696577186590, 0.378899968932468410, 0.378946240340500280, 0.378992510801166530, 0.379038780314351900, +0.379085048879939930, 0.379131316497815400, 0.379177583167862490, 0.379223848889966080, 0.379270113664009590, 0.379316377489877900, 0.379362640367455210, 0.379408902296626330, +0.379455163277274800, 0.379501423309285320, 0.379547682392542720, 0.379593940526930520, 0.379640197712333430, 0.379686453948635870, 0.379732709235722610, 0.379778963573477120, +0.379825216961784280, 0.379871469400528350, 0.379917720889594190, 0.379963971428865290, 0.380010221018226460, 0.380056469657562120, 0.380102717346756940, 0.380148964085694600, +0.380195209874259870, 0.380241454712337110, 0.380287698599811100, 0.380333941536565470, 0.380380183522484930, 0.380426424557454400, 0.380472664641357320, 0.380518903774078650, +0.380565141955502730, 0.380611379185514300, 0.380657615463997070, 0.380703850790835740, 0.380750085165914850, 0.380796318589119110, 0.380842551060332210, 0.380888782579438870, +0.380935013146323610, 0.380981242760871250, 0.381027471422965340, 0.381073699132490780, 0.381119925889331970, 0.381166151693373700, 0.381212376544499690, 0.381258600442594740, +0.381304823387543680, 0.381351045379230150, 0.381397266417539020, 0.381443486502354710, 0.381489705633562100, 0.381535923811044840, 0.381582141034687740, 0.381628357304375330, +0.381674572619992380, 0.381720786981422640, 0.381767000388550880, 0.381813212841261630, 0.381859424339439810, 0.381905634882968970, 0.381951844471734080, 0.381998053105619520, +0.382044260784510310, 0.382090467508289950, 0.382136673276843530, 0.382182878090055740, 0.382229081947810410, 0.382275284849992350, 0.382321486796486090, 0.382367687787176500, +0.382413887821947300, 0.382460086900683340, 0.382506285023269220, 0.382552482189589760, 0.382598678399528710, 0.382644873652970950, 0.382691067949801010, 0.382737261289903820, +0.382783453673163020, 0.382829645099463660, 0.382875835568690150, 0.382922025080727420, 0.382968213635459300, 0.383014401232770580, 0.383060587872545880, 0.383106773554670100, +0.383152958279027010, 0.383199142045501540, 0.383245324853978610, 0.383291506704341920, 0.383337687596476460, 0.383383867530266820, 0.383430046505597920, 0.383476224522353530, +0.383522401580418500, 0.383568577679677500, 0.383614752820015450, 0.383660927001316150, 0.383707100223464490, 0.383753272486345110, 0.383799443789842930, 0.383845614133841770, +0.383891783518226560, 0.383937951942881880, 0.383984119407692730, 0.384030285912542850, 0.384076451457317280, 0.384122616041901010, 0.384168779666177800, 0.384214942330032620, +0.384261104033350060, 0.384307264776015180, 0.384353424557911720, 0.384399583378924660, 0.384445741238938710, 0.384491898137838740, 0.384538054075508670, 0.384584209051833440, +0.384630363066697730, 0.384676516119986490, 0.384722668211583570, 0.384768819341373970, 0.384814969509242270, 0.384861118715073610, 0.384907266958751770, 0.384953414240161720, +0.384999560559188550, 0.385045705915716070, 0.385091850309629340, 0.385137993740812920, 0.385184136209151980, 0.385230277714530330, 0.385276418256832900, 0.385322557835944490, +0.385368696451750090, 0.385414834104133520, 0.385460970792979860, 0.385507106518173770, 0.385553241279600330, 0.385599375077143370, 0.385645507910688020, 0.385691639780118830, +0.385737770685321000, 0.385783900626178290, 0.385830029602575900, 0.385876157614398360, 0.385922284661530890, 0.385968410743857290, 0.386014535861262610, 0.386060660013632040, +0.386106783200849460, 0.386152905422799840, 0.386199026679368010, 0.386245146970438990, 0.386291266295896720, 0.386337384655626280, 0.386383502049512330, 0.386429618477440120, +0.386475733939293410, 0.386521848434957350, 0.386567961964316700, 0.386614074527256490, 0.386660186123660770, 0.386706296753414560, 0.386752406416402570, 0.386798515112510010, +0.386844622841620740, 0.386890729603619920, 0.386936835398392690, 0.386982940225822910, 0.387029044085795860, 0.387075146978196170, 0.387121248902909000, 0.387167349859818320, +0.387213449848809230, 0.387259548869766550, 0.387305646922575410, 0.387351744007119750, 0.387397840123284710, 0.387443935270955050, 0.387490029450016040, 0.387536122660351480, +0.387582214901846630, 0.387628306174386210, 0.387674396477855450, 0.387720485812138360, 0.387766574177119960, 0.387812661572685570, 0.387858747998719170, 0.387904833455105850, +0.387950917941730420, 0.387997001458478150, 0.388043084005232960, 0.388089165581880000, 0.388135246188304190, 0.388181325824390690, 0.388227404490023410, 0.388273482185087670, +0.388319558909468180, 0.388365634663050240, 0.388411709445717790, 0.388457783257356030, 0.388503856097849880, 0.388549927967084430, 0.388595998864943840, 0.388642068791313190, +0.388688137746077740, 0.388734205729121600, 0.388780272740329950, 0.388826338779587610, 0.388872403846779790, 0.388918467941790580, 0.388964531064505240, 0.389010593214808520, +0.389056654392585740, 0.389102714597720890, 0.389148773830099270, 0.389194832089605760, 0.389240889376125550, 0.389286945689542700, 0.389333001029742440, 0.389379055396609770, +0.389425108790029780, 0.389471161209886670, 0.389517212656065650, 0.389563263128451580, 0.389609312626929770, 0.389655361151384270, 0.389701408701700390, 0.389747455277763390, +0.389793500879457300, 0.389839545506667500, 0.389885589159278840, 0.389931631837176610, 0.389977673540244870, 0.390023714268368960, 0.390069754021433730, 0.390115792799324570, +0.390161830601925500, 0.390207867429121890, 0.390253903280798560, 0.390299938156840940, 0.390345972057133010, 0.390392004981560180, 0.390438036930007340, 0.390484067902359790, +0.390530097898501680, 0.390576126918318280, 0.390622154961695060, 0.390668182028515940, 0.390714208118666470, 0.390760233232031410, 0.390806257368496170, 0.390852280527944910, +0.390898302710262990, 0.390944323915335230, 0.390990344143047120, 0.391036363393282740, 0.391082381665927400, 0.391128398960866150, 0.391174415277984360, 0.391220430617166050, +0.391266444978296660, 0.391312458361261220, 0.391358470765944990, 0.391404482192232170, 0.391450492640008200, 0.391496502109158320, 0.391542510599566850, 0.391588518111119050, +0.391634524643700020, 0.391680530197195060, 0.391726534771488330, 0.391772538366465310, 0.391818540982010910, 0.391864542618010630, 0.391910543274348490, 0.391956542950910040, +0.392002541647580250, 0.392048539364244500, 0.392094536100786980, 0.392140531857093130, 0.392186526633047980, 0.392232520428536900, 0.392278513243444090, 0.392324505077654980, +0.392370495931054660, 0.392416485803528500, 0.392462474694960710, 0.392508462605236700, 0.392554449534242010, 0.392600435481860740, 0.392646420447978370, 0.392692404432479990, +0.392738387435250970, 0.392784369456175560, 0.392830350495139260, 0.392876330552027090, 0.392922309626724530, 0.392968287719115740, 0.393014264829086250, 0.393060240956521090, +0.393106216101305690, 0.393152190263324430, 0.393198163442462610, 0.393244135638605440, 0.393290106851638340, 0.393336077081445520, 0.393382046327912570, 0.393428014590924860, +0.393473981870366750, 0.393519948166123620, 0.393565913478080680, 0.393611877806123330, 0.393657841150135910, 0.393703803510003840, 0.393749764885612310, 0.393795725276846750, +0.393841684683591490, 0.393887643105731990, 0.393933600543153410, 0.393979556995741220, 0.394025512463379690, 0.394071466945954460, 0.394117420443350520, 0.394163372955453450, +0.394209324482147520, 0.394255275023318310, 0.394301224578851250, 0.394347173148630770, 0.394393120732542400, 0.394439067330471180, 0.394485012942302700, 0.394530957567921280, +0.394576901207212450, 0.394622843860061410, 0.394668785526353650, 0.394714726205973530, 0.394760665898806600, 0.394806604604737930, 0.394852542323653240, 0.394898479055436790, +0.394944414799974110, 0.394990349557150400, 0.395036283326851200, 0.395082216108960880, 0.395128147903365090, 0.395174078709948860, 0.395220008528597840, 0.395265937359196460, +0.395311865201630200, 0.395357792055784640, 0.395403717921544220, 0.395449642798794520, 0.395495566687420750, 0.395541489587308390, 0.395587411498341980, 0.395633332420406990, +0.395679252353388690, 0.395725171297172660, 0.395771089251643280, 0.395817006216686200, 0.395862922192186550, 0.395908837178030050, 0.395954751174101060, 0.396000664180285180, +0.396046576196467660, 0.396092487222534040, 0.396138397258368860, 0.396184306303857650, 0.396230214358886110, 0.396276121423338620, 0.396322027497100830, 0.396367932580057980, +0.396413836672095680, 0.396459739773098400, 0.396505641882951730, 0.396551543001541000, 0.396597443128751780, 0.396643342264468570, 0.396689240408577000, 0.396735137560962350, +0.396781033721510250, 0.396826928890105180, 0.396872823066632740, 0.396918716250978300, 0.396964608443027440, 0.397010499642664660, 0.397056389849775590, 0.397102279064246000, +0.397148167285960310, 0.397194054514804160, 0.397239940750662930, 0.397285825993422210, 0.397331710242966540, 0.397377593499181610, 0.397423475761952690, 0.397469357031165480, +0.397515237306704460, 0.397561116588455330, 0.397606994876303410, 0.397652872170134450, 0.397698748469832890, 0.397744623775284470, 0.397790498086374460, 0.397836371402988610, +0.397882243725011460, 0.397928115052328670, 0.397973985384825980, 0.398019854722387990, 0.398065723064900290, 0.398111590412248360, 0.398157456764317800, 0.398203322120993190, +0.398249186482160290, 0.398295049847704420, 0.398340912217511390, 0.398386773591465570, 0.398432633969452890, 0.398478493351358600, 0.398524351737068520, 0.398570209126467120, +0.398616065519440180, 0.398661920915873100, 0.398707775315651600, 0.398753628718660270, 0.398799481124784920, 0.398845332533910800, 0.398891182945923790, 0.398937032360708380, +0.398982880778150420, 0.399028728198135670, 0.399074574620548680, 0.399120420045275260, 0.399166264472200770, 0.399212107901211030, 0.399257950332190640, 0.399303791765025340, +0.399349632199600570, 0.399395471635802140, 0.399441310073514630, 0.399487147512623820, 0.399532983953015170, 0.399578819394574460, 0.399624653837186260, 0.399670487280736510, +0.399716319725110460, 0.399762151170194040, 0.399807981615871830, 0.399853811062029660, 0.399899639508553400, 0.399945466955327620, 0.399991293402238160, 0.400037118849170480, +0.400082943296010410, 0.400128766742642580, 0.400174589188952820, 0.400220410634826610, 0.400266231080149750, 0.400312050524806950, 0.400357868968683970, 0.400403686411666350, +0.400449502853639890, 0.400495318294489310, 0.400541132734100410, 0.400586946172358680, 0.400632758609149990, 0.400678570044359030, 0.400724380477871620, 0.400770189909573640, +0.400815998339349780, 0.400861805767085970, 0.400907612192667630, 0.400953417615980630, 0.400999222036909740, 0.401045025455340760, 0.401090827871159180, 0.401136629284250980, +0.401182429694500800, 0.401228229101794560, 0.401274027506017710, 0.401319824907056260, 0.401365621304794750, 0.401411416699119280, 0.401457211089915220, 0.401503004477068550, +0.401548796860463910, 0.401594588239987340, 0.401640378615524260, 0.401686167986960660, 0.401731956354181240, 0.401777743717071980, 0.401823530075518690, 0.401869315429406180, +0.401915099778620390, 0.401960883123046840, 0.402006665462571520, 0.402052446797079130, 0.402098227126455600, 0.402144006450586510, 0.402189784769357790, 0.402235562082654260, +0.402281338390361790, 0.402327113692365960, 0.402372887988552750, 0.402418661278806930, 0.402464433563014480, 0.402510204841060870, 0.402555975112832250, 0.402601744378213220, +0.402647512637089870, 0.402693279889348110, 0.402739046134872770, 0.402784811373549770, 0.402830575605264810, 0.402876338829903760, 0.402922101047351490, 0.402967862257493980, +0.403013622460216770, 0.403059381655405950, 0.403105139842946210, 0.403150897022723660, 0.403196653194623890, 0.403242408358532870, 0.403288162514335410, 0.403333915661917560, +0.403379667801164970, 0.403425418931963540, 0.403471169054198220, 0.403516918167754920, 0.403562666272519740, 0.403608413368377490, 0.403654159455214270, 0.403699904532915600, +0.403745648601367580, 0.403791391660455020, 0.403837133710063970, 0.403882874750080110, 0.403928614780389440, 0.403974353800876870, 0.404020091811428390, 0.404065828811929710, +0.404111564802266840, 0.404157299782324670, 0.404203033751989240, 0.404248766711146180, 0.404294498659681640, 0.404340229597480500, 0.404385959524428740, 0.404431688440412500, +0.404477416345316590, 0.404523143239027220, 0.404568869121429920, 0.404614593992410900, 0.404660317851854970, 0.404706040699648220, 0.404751762535676410, 0.404797483359825570, +0.404843203171980640, 0.404888921972027690, 0.404934639759852440, 0.404980356535340980, 0.405026072298378230, 0.405071787048850330, 0.405117500786642940, 0.405163213511642200, +0.405208925223733030, 0.405254635922801530, 0.405300345608733460, 0.405346054281414900, 0.405391761940730840, 0.405437468586567370, 0.405483174218810580, 0.405528878837345510, +0.405574582442058240, 0.405620285032834480, 0.405665986609560440, 0.405711687172121030, 0.405757386720402350, 0.405803085254290260, 0.405848782773670870, 0.405894479278429090, +0.405940174768451120, 0.405985869243622680, 0.406031562703830010, 0.406077255148958040, 0.406122946578892920, 0.406168636993520400, 0.406214326392726750, 0.406260014776396840, +0.406305702144416910, 0.406351388496673130, 0.406397073833050460, 0.406442758153435110, 0.406488441457712850, 0.406534123745769920, 0.406579805017491250, 0.406625485272763100, +0.406671164511471170, 0.406716842733501840, 0.406762519938739910, 0.406808196127071700, 0.406853871298383020, 0.406899545452560070, 0.406945218589487840, 0.406990890709052530, +0.407036561811140060, 0.407082231895636580, 0.407127900962427070, 0.407173569011397840, 0.407219236042435100, 0.407264902055423820, 0.407310567050250320, 0.407356231026800410, +0.407401893984960290, 0.407447555924615070, 0.407493216845650930, 0.407538876747953750, 0.407584535631409840, 0.407630193495904130, 0.407675850341322920, 0.407721506167552150, +0.407767160974477960, 0.407812814761985500, 0.407858467529960970, 0.407904119278290290, 0.407949770006859720, 0.407995419715554310, 0.408041068404260350, 0.408086716072863730, +0.408132362721250750, 0.408178008349306400, 0.408223652956917090, 0.408269296543968980, 0.408314939110347270, 0.408360580655938220, 0.408406221180627750, 0.408451860684302060, +0.408497499166846360, 0.408543136628146900, 0.408588773068089610, 0.408634408486560740, 0.408680042883445500, 0.408725676258630100, 0.408771308612000560, 0.408816939943443150, +0.408862570252842950, 0.408908199540086390, 0.408953827805059290, 0.408999455047648010, 0.409045081267737700, 0.409090706465214670, 0.409136330639965300, 0.409181953791874720, +0.409227575920829200, 0.409273197026714770, 0.409318817109417750, 0.409364436168823340, 0.409410054204817800, 0.409455671217287100, 0.409501287206117610, 0.409546902171194550, +0.409592516112404210, 0.409638129029632590, 0.409683740922766050, 0.409729351791689730, 0.409774961636290070, 0.409820570456452980, 0.409866178252064840, 0.409911785023010900, +0.409957390769177480, 0.410002995490450990, 0.410048599186716600, 0.410094201857860720, 0.410139803503769330, 0.410185404124328860, 0.410231003719424450, 0.410276602288942530, +0.410322199832769070, 0.410367796350790570, 0.410413391842892160, 0.410458986308960270, 0.410504579748880940, 0.410550172162540530, 0.410595763549824300, 0.410641353910618680, +0.410686943244809640, 0.410732531552283620, 0.410778118832925920, 0.410823705086622910, 0.410869290313261030, 0.410914874512725570, 0.410960457684902860, 0.411006039829679040, +0.411051620946940530, 0.411097201036572550, 0.411142780098461560, 0.411188358132493600, 0.411233935138555220, 0.411279511116531550, 0.411325086066309080, 0.411370659987773950, +0.411416232880812530, 0.411461804745310130, 0.411507375581153250, 0.411552945388227900, 0.411598514166420570, 0.411644081915616580, 0.411689648635702400, 0.411735214326564070, +0.411780778988088130, 0.411826342620159820, 0.411871905222665700, 0.411917466795492180, 0.411963027338524580, 0.412008586851649430, 0.412054145334752820, 0.412099702787721230, +0.412145259210439980, 0.412190814602795610, 0.412236368964674190, 0.412281922295962280, 0.412327474596545120, 0.412373025866309250, 0.412418576105140880, 0.412464125312926420, +0.412509673489551250, 0.412555220634901960, 0.412600766748864530, 0.412646311831325660, 0.412691855882170560, 0.412737398901285860, 0.412782940888558050, 0.412828481843872440, +0.412874021767115680, 0.412919560658173870, 0.412965098516933530, 0.413010635343280030, 0.413056171137099970, 0.413101705898279490, 0.413147239626705130, 0.413192772322262260, +0.413238303984837460, 0.413283834614316890, 0.413329364210587190, 0.413374892773533620, 0.413420420303042880, 0.413465946799001060, 0.413511472261294750, 0.413556996689809390, +0.413602520084431490, 0.413648042445047710, 0.413693563771543480, 0.413739084063805270, 0.413784603321719400, 0.413830121545172400, 0.413875638734049700, 0.413921154888237890, +0.413966670007623220, 0.414012184092092230, 0.414057697141530400, 0.414103209155824380, 0.414148720134860260, 0.414194230078524790, 0.414239738986703300, 0.414285246859282530, +0.414330753696148580, 0.414376259497188200, 0.414421764262286720, 0.414467267991330880, 0.414512770684206830, 0.414558272340801230, 0.414603772960999590, 0.414649272544688530, +0.414694771091754680, 0.414740268602083460, 0.414785765075561640, 0.414831260512075360, 0.414876754911511330, 0.414922248273755010, 0.414967740598693120, 0.415013231886211810, +0.415058722136197880, 0.415104211348536700, 0.415149699523114980, 0.415195186659819080, 0.415240672758535550, 0.415286157819149960, 0.415331641841548970, 0.415377124825618890, +0.415422606771246370, 0.415468087678317000, 0.415513567546717310, 0.415559046376334170, 0.415604524167053010, 0.415650000918760530, 0.415695476631343040, 0.415740951304687300, +0.415786424938678730, 0.415831897533204100, 0.415877369088149760, 0.415922839603402370, 0.415968309078847520, 0.416013777514371850, 0.416059244909861740, 0.416104711265203930, +0.416150176580283970, 0.416195640854988560, 0.416241104089204010, 0.416286566282817130, 0.416332027435713400, 0.416377487547779650, 0.416422946618902560, 0.416468404648967670, +0.416513861637861800, 0.416559317585471320, 0.416604772491682870, 0.416650226356382160, 0.416695679179455820, 0.416741130960790300, 0.416786581700272380, 0.416832031397787570, +0.416877480053222730, 0.416922927666464160, 0.416968374237398690, 0.417013819765911840, 0.417059264251890440, 0.417104707695220960, 0.417150150095790040, 0.417195591453483340, +0.417241031768187720, 0.417286471039789890, 0.417331909268175430, 0.417377346453231270, 0.417422782594843720, 0.417468217692899600, 0.417513651747284550, 0.417559084757885390, +0.417604516724588480, 0.417649947647280690, 0.417695377525847620, 0.417740806360176130, 0.417786234150152650, 0.417831660895663930, 0.417877086596595670, 0.417922511252834690, +0.417967934864267480, 0.418013357430780770, 0.418058778952260290, 0.418104199428592890, 0.418149618859664950, 0.418195037245363390, 0.418240454585573850, 0.418285870880183150, +0.418331286129078160, 0.418376700332144580, 0.418422113489269280, 0.418467525600338620, 0.418512936665239590, 0.418558346683857830, 0.418603755656080160, 0.418649163581793160, +0.418694570460883600, 0.418739976293237230, 0.418785381078740910, 0.418830784817281140, 0.418876187508744830, 0.418921589153017640, 0.418966989749986470, 0.419012389299537880, +0.419057787801558670, 0.419103185255934540, 0.419148581662552530, 0.419193977021299400, 0.419239371332060960, 0.419284764594724140, 0.419330156809175350, 0.419375547975301580, +0.419420938092988530, 0.419466327162123120, 0.419511715182591950, 0.419557102154281880, 0.419602488077078620, 0.419647872950869140, 0.419693256775539980, 0.419738639550978120, +0.419784021277069210, 0.419829401953700280, 0.419874781580757810, 0.419920160158128830, 0.419965537685699050, 0.420010914163355400, 0.420056289590984840, 0.420101663968473200, +0.420147037295707400, 0.420192409572573980, 0.420237780798959960, 0.420283150974751110, 0.420328520099834350, 0.420373888174096270, 0.420419255197423900, 0.420464621169702960, +0.420509986090820520, 0.420555349960663070, 0.420600712779117650, 0.420646074546070060, 0.420691435261407290, 0.420736794925015920, 0.420782153536783000, 0.420827511096594220, +0.420872867604336730, 0.420918223059897070, 0.420963577463162210, 0.421008930814018020, 0.421054283112351550, 0.421099634358049700, 0.421144984550998410, 0.421190333691084660, +0.421235681778195040, 0.421281028812216630, 0.421326374793035250, 0.421371719720537940, 0.421417063594611340, 0.421462406415142490, 0.421507748182017190, 0.421553088895122550, +0.421598428554345150, 0.421643767159572140, 0.421689104710689270, 0.421734441207583630, 0.421779776650141880, 0.421825111038251150, 0.421870444371797160, 0.421915776650667150, +0.421961107874748000, 0.422006438043925740, 0.422051767158087400, 0.422097095217119630, 0.422142422220909470, 0.422187748169342900, 0.422233073062306950, 0.422278396899688320, +0.422323719681374110, 0.422369041407250180, 0.422414362077203680, 0.422459681691121250, 0.422505000248890040, 0.422550317750395870, 0.422595634195525980, 0.422640949584166980, +0.422686263916205950, 0.422731577191528930, 0.422776889410022950, 0.422822200571575100, 0.422867510676071420, 0.422912819723398950, 0.422958127713444380, 0.423003434646094910, +0.423048740521236480, 0.423094045338756220, 0.423139349098540780, 0.423184651800477430, 0.423229953444452020, 0.423275254030351710, 0.423320553558063310, 0.423365852027473900, +0.423411149438469410, 0.423456445790937110, 0.423501741084763680, 0.423547035319836280, 0.423592328496040950, 0.423637620613264760, 0.423682911671394940, 0.423728201670317380, +0.423773490609919370, 0.423818778490087640, 0.423864065310709300, 0.423909351071670440, 0.423954635772858250, 0.423999919414159380, 0.424045201995461200, 0.424090483516649570, +0.424135763977611710, 0.424181043378234480, 0.424226321718405020, 0.424271598998009370, 0.424316875216934670, 0.424362150375067860, 0.424407424472296010, 0.424452697508505230, +0.424497969483582700, 0.424543240397415260, 0.424588510249890140, 0.424633779040893280, 0.424679046770312040, 0.424724313438033520, 0.424769579043943860, 0.424814843587930260, +0.424860107069879530, 0.424905369489678940, 0.424950630847214520, 0.424995891142373520, 0.425041150375042810, 0.425086408545109600, 0.425131665652459970, 0.425176921696981180, +0.425222176678560100, 0.425267430597083940, 0.425312683452438830, 0.425357935244512040, 0.425403185973190380, 0.425448435638361160, 0.425493684239910460, 0.425538931777725560, +0.425584178251693700, 0.425629423661701030, 0.425674668007634760, 0.425719911289381860, 0.425765153506829530, 0.425810394659863980, 0.425855634748372400, 0.425900873772241730, +0.425946111731359320, 0.425991348625611170, 0.426036584454884680, 0.426081819219066740, 0.426127052918044650, 0.426172285551704500, 0.426217517119933660, 0.426262747622619060, +0.426307977059647960, 0.426353205430906490, 0.426398432736282030, 0.426443658975661890, 0.426488884148932210, 0.426534108255980320, 0.426579331296693120, 0.426624553270958050, +0.426669774178661140, 0.426714994019689820, 0.426760212793931000, 0.426805430501272120, 0.426850647141599200, 0.426895862714799680, 0.426941077220760470, 0.426986290659368990, +0.427031503030511410, 0.427076714334075010, 0.427121924569946910, 0.427167133738014350, 0.427212341838163530, 0.427257548870281890, 0.427302754834256390, 0.427347959729974360, +0.427393163557322100, 0.427438366316186870, 0.427483568006456150, 0.427528768628016090, 0.427573968180754100, 0.427619166664557240, 0.427664364079312850, 0.427709560424907100, +0.427754755701227510, 0.427799949908161000, 0.427845143045595010, 0.427890335113415790, 0.427935526111510700, 0.427980716039766840, 0.428025904898071520, 0.428071092686311110, +0.428116279404372910, 0.428161465052144030, 0.428206649629511940, 0.428251833136362780, 0.428297015572584040, 0.428342196938063140, 0.428387377232686380, 0.428432556456341150, +0.428477734608914530, 0.428522911690293990, 0.428568087700365810, 0.428613262639017330, 0.428658436506135780, 0.428703609301608450, 0.428748781025321770, 0.428793951677163110, +0.428839121257019560, 0.428884289764778600, 0.428929457200326550, 0.428974623563550820, 0.429019788854338560, 0.429064953072577250, 0.429110116218153090, 0.429155278290953680, +0.429200439290866490, 0.429245599217777770, 0.429290758071575070, 0.429335915852145480, 0.429381072559376460, 0.429426228193154400, 0.429471382753366770, 0.429516536239900660, +0.429561688652643660, 0.429606839991481970, 0.429651990256303180, 0.429697139446994500, 0.429742287563443290, 0.429787434605535980, 0.429832580573160090, 0.429877725466202790, +0.429922869284551530, 0.429968012028092710, 0.430013153696713830, 0.430058294290302510, 0.430103433808744990, 0.430148572251928930, 0.430193709619741460, 0.430238845912070120, +0.430283981128801230, 0.430329115269822370, 0.430374248335020800, 0.430419380324283950, 0.430464511237498240, 0.430509641074551250, 0.430554769835330200, 0.430599897519722610, +0.430645024127614850, 0.430690149658894570, 0.430735274113448920, 0.430780397491165420, 0.430825519791930620, 0.430870641015631940, 0.430915761162156690, 0.430960880231392450, +0.431005998223225610, 0.431051115137543740, 0.431096230974234500, 0.431141345733184300, 0.431186459414280690, 0.431231572017410970, 0.431276683542462740, 0.431321793989322360, +0.431366903357877470, 0.431412011648015400, 0.431457118859623620, 0.431502224992588720, 0.431547330046798240, 0.431592434022139370, 0.431637536918499880, 0.431682638735766120, +0.431727739473825810, 0.431772839132566090, 0.431817937711874710, 0.431863035211638050, 0.431908131631743850, 0.431953226972079720, 0.431998321232532070, 0.432043414412988660, +0.432088506513336690, 0.432133597533463860, 0.432178687473256660, 0.432223776332602730, 0.432268864111389320, 0.432313950809504190, 0.432359036426833760, 0.432404120963265800, +0.432449204418687510, 0.432494286792986570, 0.432539368086049540, 0.432584448297764050, 0.432629527428017470, 0.432674605476697500, 0.432719682443690580, 0.432764758328884500, +0.432809833132166870, 0.432854906853424260, 0.432899979492544440, 0.432945051049414610, 0.432990121523922580, 0.433035190915954830, 0.433080259225399110, 0.433125326452142740, +0.433170392596073480, 0.433215457657077810, 0.433260521635043530, 0.433305584529857900, 0.433350646341408740, 0.433395707069582580, 0.433440766714267120, 0.433485825275349730, +0.433530882752718230, 0.433575939146259080, 0.433620994455860110, 0.433666048681408620, 0.433711101822792430, 0.433756153879898080, 0.433801204852613360, 0.433846254740826000, +0.433891303544422620, 0.433936351263291000, 0.433981397897318490, 0.434026443446392850, 0.434071487910400730, 0.434116531289229890, 0.434161573582767750, 0.434206614790902060, +0.434251654913519410, 0.434296693950507630, 0.434341731901754120, 0.434386768767146660, 0.434431804546571930, 0.434476839239917640, 0.434521872847071280, 0.434566905367920640, +0.434611936802352330, 0.434656967150254150, 0.434701996411513970, 0.434747024586018440, 0.434792051673655310, 0.434837077674312010, 0.434882102587876460, 0.434927126414235250, +0.434972149153276260, 0.435017170804886890, 0.435062191368954960, 0.435107210845367130, 0.435152229234011310, 0.435197246534774930, 0.435242262747545790, 0.435287277872210670, +0.435332291908657300, 0.435377304856773170, 0.435422316716446210, 0.435467327487563060, 0.435512337170011590, 0.435557345763679720, 0.435602353268454030, 0.435647359684222470, +0.435692365010872500, 0.435737369248292040, 0.435782372396367750, 0.435827374454987540, 0.435872375424038890, 0.435917375303409680, 0.435962374092986660, 0.436007371792657690, +0.436052368402310260, 0.436097363921832350, 0.436142358351110650, 0.436187351690032980, 0.436232343938486980, 0.436277335096360520, 0.436322325163540300, 0.436367314139914310, +0.436412302025370400, 0.436457288819795340, 0.436502274523077110, 0.436547259135103120, 0.436592242655761410, 0.436637225084938680, 0.436682206422522920, 0.436727186668401660, +0.436772165822462750, 0.436817143884593080, 0.436862120854680570, 0.436907096732612740, 0.436952071518277580, 0.436997045211561800, 0.437042017812353410, 0.437086989320540020, +0.437131959736009550, 0.437176929058648740, 0.437221897288345650, 0.437266864424987800, 0.437311830468463170, 0.437356795418658570, 0.437401759275462040, 0.437446722038761450, +0.437491683708443660, 0.437536644284396700, 0.437581603766508060, 0.437626562154665890, 0.437671519448756870, 0.437716475648669060, 0.437761430754290030, 0.437806384765507870, +0.437851337682209350, 0.437896289504282440, 0.437941240231614850, 0.437986189864094540, 0.438031138401608340, 0.438076085844044340, 0.438121032191290120, 0.438165977443233660, +0.438210921599761940, 0.438255864660762830, 0.438300806626124530, 0.438345747495733800, 0.438390687269478660, 0.438435625947246830, 0.438480563528926340, 0.438525500014404050, +0.438570435403567990, 0.438615369696305820, 0.438660302892505680, 0.438705234992054330, 0.438750165994839900, 0.438795095900750110, 0.438840024709672930, 0.438884952421495280, +0.438929879036105310, 0.438974804553390610, 0.439019728973239260, 0.439064652295538260, 0.439109574520175570, 0.439154495647039340, 0.439199415676016500, 0.439244334606995130, +0.439289252439862890, 0.439334169174507960, 0.439379084810817170, 0.439423999348678710, 0.439468912787980230, 0.439513825128609870, 0.439558736370454510, 0.439603646513402340, +0.439648555557341060, 0.439693463502158820, 0.439738370347742490, 0.439783276093980210, 0.439828180740759740, 0.439873084287969280, 0.439917986735495650, 0.439962888083227090, +0.440007788331051310, 0.440052687478856400, 0.440097585526529440, 0.440142482473958490, 0.440187378321031720, 0.440232273067636130, 0.440277166713659850, 0.440322059258990650, +0.440366950703516720, 0.440411841047125000, 0.440456730289703670, 0.440501618431140500, 0.440546505471323730, 0.440591391410140250, 0.440636276247478310, 0.440681159983225660, +0.440726042617270550, 0.440770924149499920, 0.440815804579801960, 0.440860683908064540, 0.440905562134175750, 0.440950439258022690, 0.440995315279493540, 0.441040190198476460, +0.441085064014858530, 0.441129936728527900, 0.441174808339372500, 0.441219678847280420, 0.441264548252138790, 0.441309416553835760, 0.441354283752259210, 0.441399149847297330, +0.441444014838837160, 0.441488878726767010, 0.441533741510974630, 0.441578603191348280, 0.441623463767775060, 0.441668323240143160, 0.441713181608340440, 0.441758038872255180, +0.441802895031774390, 0.441847750086786450, 0.441892604037179450, 0.441937456882840580, 0.441982308623658060, 0.442027159259519740, 0.442072008790313940, 0.442116857215927750, +0.442161704536249370, 0.442206550751166770, 0.442251395860568160, 0.442296239864340690, 0.442341082762372610, 0.442385924554551830, 0.442430765240766630, 0.442475604820904090, +0.442520443294852570, 0.442565280662499950, 0.442610116923734530, 0.442654952078443350, 0.442699786126514890, 0.442744619067837300, 0.442789450902297770, 0.442834281629784610, +0.442879111250185750, 0.442923939763389560, 0.442968767169283070, 0.443013593467754650, 0.443058418658692280, 0.443103242741984260, 0.443148065717517750, 0.443192887585181050, +0.443237708344862150, 0.443282527996449350, 0.443327346539829860, 0.443372163974891990, 0.443416980301523660, 0.443461795519613340, 0.443506609629048140, 0.443551422629716360, +0.443596234521506090, 0.443641045304305590, 0.443685854978002110, 0.443730663542483970, 0.443775470997639590, 0.443820277343356110, 0.443865082579521950, 0.443909886706025050, +0.443954689722753870, 0.443999491629595570, 0.444044292426438500, 0.444089092113170770, 0.444133890689680620, 0.444178688155855430, 0.444223484511583440, 0.444268279756752820, +0.444313073891251850, 0.444357866914967810, 0.444402658827789070, 0.444447449629603750, 0.444492239320300130, 0.444537027899765570, 0.444581815367888430, 0.444626601724557150, +0.444671386969658970, 0.444716171103082260, 0.444760954124715220, 0.444805736034446120, 0.444850516832162310, 0.444895296517752230, 0.444940075091103890, 0.444984852552105740, +0.445029628900645070, 0.445074404136610370, 0.445119178259889610, 0.445163951270371280, 0.445208723167942740, 0.445253493952492360, 0.445298263623908230, 0.445343032182078880, +0.445387799626891510, 0.445432565958234660, 0.445477331175996800, 0.445522095280065260, 0.445566858270328380, 0.445611620146674440, 0.445656380908991790, 0.445701140557167810, +0.445745899091091020, 0.445790656510649420, 0.445835412815731640, 0.445880168006224880, 0.445924922082017670, 0.445969675042998230, 0.446014426889054960, 0.446059177620075240, +0.446103927235947550, 0.446148675736560090, 0.446193423121801320, 0.446238169391558580, 0.446282914545720390, 0.446327658584174950, 0.446372401506810790, 0.446417143313515170, +0.446461884004176750, 0.446506623578683980, 0.446551362036924250, 0.446596099378786140, 0.446640835604157740, 0.446685570712927690, 0.446730304704983320, 0.446775037580213140, +0.446819769338505420, 0.446864499979748640, 0.446909229503830220, 0.446953957910638740, 0.446998685200062360, 0.447043411371989610, 0.447088136426308010, 0.447132860362906060, +0.447177583181671940, 0.447222304882494260, 0.447267025465260430, 0.447311744929859030, 0.447356463276178620, 0.447401180504106710, 0.447445896613531850, 0.447490611604342230, +0.447535325476426490, 0.447580038229672020, 0.447624749863967500, 0.447669460379201080, 0.447714169775261410, 0.447758878052035900, 0.447803585209413210, 0.447848291247281540, +0.447892996165529580, 0.447937699964044640, 0.447982402642715550, 0.448027104201430440, 0.448071804640077900, 0.448116503958545520, 0.448161202156721840, 0.448205899234495610, +0.448250595191754140, 0.448295290028386250, 0.448339983744280140, 0.448384676339324440, 0.448429367813406700, 0.448474058166415500, 0.448518747398239160, 0.448563435508766320, +0.448608122497884510, 0.448652808365482440, 0.448697493111448300, 0.448742176735670850, 0.448786859238037520, 0.448831540618437110, 0.448876220876757770, 0.448920900012888310, +0.448965578026716220, 0.449010254918130180, 0.449054930687018520, 0.449099605333269870, 0.449144278856771880, 0.449188951257413150, 0.449233622535082420, 0.449278292689667290, +0.449322961721056400, 0.449367629629138120, 0.449412296413801150, 0.449456962074933020, 0.449501626612422540, 0.449546290026157980, 0.449590952316028080, 0.449635613481920380, +0.449680273523723640, 0.449724932441326270, 0.449769590234616930, 0.449814246903483210, 0.449858902447813900, 0.449903556867497330, 0.449948210162422260, 0.449992862332476260, +0.450037513377548100, 0.450082163297526590, 0.450126812092299270, 0.450171459761754880, 0.450216106305781850, 0.450260751724268990, 0.450305396017103790, 0.450350039184175150, +0.450394681225371410, 0.450439322140581360, 0.450483961929692590, 0.450528600592593920, 0.450573238129173770, 0.450617874539320900, 0.450662509822922940, 0.450707143979868720, +0.450751777010046650, 0.450796408913345490, 0.450841039689652940, 0.450885669338857820, 0.450930297860848930, 0.450974925255513860, 0.451019551522741480, 0.451064176662420210, +0.451108800674438930, 0.451153423558685210, 0.451198045315047980, 0.451242665943415610, 0.451287285443676970, 0.451331903815719690, 0.451376521059432710, 0.451421137174704390, +0.451465752161423650, 0.451510366019478140, 0.451554978748756660, 0.451599590349147760, 0.451644200820540300, 0.451688810162821920, 0.451733418375881550, 0.451778025459607990, +0.451822631413889010, 0.451867236238613410, 0.451911839933669730, 0.451956442498946900, 0.452001043934332490, 0.452045644239715490, 0.452090243414984440, 0.452134841460028080, +0.452179438374734290, 0.452224034158991870, 0.452268628812689420, 0.452313222335715750, 0.452357814727958610, 0.452402405989306980, 0.452446996119649280, 0.452491585118874550, +0.452536172986870430, 0.452580759723525850, 0.452625345328729390, 0.452669929802369970, 0.452714513144335360, 0.452759095354514420, 0.452803676432796180, 0.452848256379068340, +0.452892835193219820, 0.452937412875139220, 0.452981989424715510, 0.453026564841836450, 0.453071139126390960, 0.453115712278267580, 0.453160284297355390, 0.453204855183542030, +0.453249424936716550, 0.453293993556767530, 0.453338561043583890, 0.453383127397053500, 0.453427692617065230, 0.453472256703507770, 0.453516819656270050, 0.453561381475239890, +0.453605942160306250, 0.453650501711358180, 0.453695060128283480, 0.453739617410971070, 0.453784173559309670, 0.453828728573188230, 0.453873282452494530, 0.453917835197117650, +0.453962386806946230, 0.454006937281869190, 0.454051486621774410, 0.454096034826550920, 0.454140581896087300, 0.454185127830272710, 0.454229672628994830, 0.454274216292142820, +0.454318758819605210, 0.454363300211271140, 0.454407840467028420, 0.454452379586766100, 0.454496917570373250, 0.454541454417737630, 0.454585990128748450, 0.454630524703294290, +0.454675058141264190, 0.454719590442546060, 0.454764121607028950, 0.454808651634601550, 0.454853180525152890, 0.454897708278570900, 0.454942234894744610, 0.454986760373562780, +0.455031284714914440, 0.455075807918687460, 0.455120329984770980, 0.455164850913053700, 0.455209370703424650, 0.455253889355771770, 0.455298406869984180, 0.455342923245950600, +0.455387438483560110, 0.455431952582700580, 0.455476465543261210, 0.455520977365131030, 0.455565488048198080, 0.455609997592351320, 0.455654505997479640, 0.455699013263472060, +0.455743519390216570, 0.455788024377602240, 0.455832528225517900, 0.455877030933852620, 0.455921532502494340, 0.455966032931332250, 0.456010532220255120, 0.456055030369151960, +0.456099527377910930, 0.456144023246421000, 0.456188517974571050, 0.456233011562250210, 0.456277504009346410, 0.456321995315748910, 0.456366485481346780, 0.456410974506028020, +0.456455462389681820, 0.456499949132196990, 0.456544434733462730, 0.456588919193366920, 0.456633402511798850, 0.456677884688647230, 0.456722365723801320, 0.456766845617149090, +0.456811324368579800, 0.456855801977982150, 0.456900278445245390, 0.456944753770257510, 0.456989227952907810, 0.457033700993084990, 0.457078172890678370, 0.457122643645575870, +0.457167113257666790, 0.457211581726840290, 0.457256049052984450, 0.457300515235988530, 0.457344980275741280, 0.457389444172132010, 0.457433906925048710, 0.457478368534380620, +0.457522829000016620, 0.457567288321845960, 0.457611746499756670, 0.457656203533638060, 0.457700659423378900, 0.457745114168868480, 0.457789567769994910, 0.457834020226647380, +0.457878471538714800, 0.457922921706086510, 0.457967370728650460, 0.458011818606295970, 0.458056265338912360, 0.458100710926387660, 0.458145155368611220, 0.458189598665471880, +0.458234040816858920, 0.458278481822660510, 0.458322921682765840, 0.458367360397063940, 0.458411797965443960, 0.458456234387794090, 0.458500669664003660, 0.458545103793961570, +0.458589536777557090, 0.458633968614678420, 0.458678399305214760, 0.458722828849055130, 0.458767257246088860, 0.458811684496204020, 0.458856110599289990, 0.458900535555235630, +0.458944959363930370, 0.458989382025262290, 0.459033803539120820, 0.459078223905395160, 0.459122643123973610, 0.459167061194745370, 0.459211478117599550, 0.459255893892425380, +0.459300308519111130, 0.459344721997546060, 0.459389134327619240, 0.459433545509219940, 0.459477955542236360, 0.459522364426557920, 0.459566772162073590, 0.459611178748672690, +0.459655584186243470, 0.459699988474675300, 0.459744391613857160, 0.459788793603678410, 0.459833194444027260, 0.459877594134793180, 0.459921992675865480, 0.459966390067132410, +0.460010786308483350, 0.460055181399807330, 0.460099575340993770, 0.460143968131930870, 0.460188359772508050, 0.460232750262614340, 0.460277139602139120, 0.460321527790970690, +0.460365914828998410, 0.460410300716111330, 0.460454685452198920, 0.460499069037149430, 0.460543451470852240, 0.460587832753196420, 0.460632212884071410, 0.460676591863365460, +0.460720969690968040, 0.460765346366768640, 0.460809721890655390, 0.460854096262517890, 0.460898469482245170, 0.460942841549726650, 0.460987212464850580, 0.461031582227506560, +0.461075950837583510, 0.461120318294971020, 0.461164684599557340, 0.461209049751231950, 0.461253413749883930, 0.461297776595402780, 0.461342138287676780, 0.461386498826595440, +0.461430858212047880, 0.461475216443923530, 0.461519573522110760, 0.461563929446499040, 0.461608284216977530, 0.461652637833435690, 0.461696990295761830, 0.461741341603845560, +0.461785691757576280, 0.461830040756842360, 0.461874388601533400, 0.461918735291538430, 0.461963080826747030, 0.462007425207047520, 0.462051768432329420, 0.462096110502481950, +0.462140451417394570, 0.462184791176955710, 0.462229129781054790, 0.462273467229581130, 0.462317803522424130, 0.462362138659472290, 0.462406472640615070, 0.462450805465741690, +0.462495137134741660, 0.462539467647503420, 0.462583797003916500, 0.462628125203870480, 0.462672452247253730, 0.462716778133955840, 0.462761102863866070, 0.462805426436873890, +0.462849748852867780, 0.462894070111737280, 0.462938390213371580, 0.462982709157660320, 0.463027026944491940, 0.463071343573755900, 0.463115659045341580, 0.463159973359138500, +0.463204286515035040, 0.463248598512920880, 0.463292909352685240, 0.463337219034217760, 0.463381527557406800, 0.463425834922142010, 0.463470141128313030, 0.463514446175808340, +0.463558750064517470, 0.463603052794329780, 0.463647354365134820, 0.463691654776821120, 0.463735954029278250, 0.463780252122395490, 0.463824549056062520, 0.463868844830167770, +0.463913139444600890, 0.463957432899251180, 0.464001725194008290, 0.464046016328760690, 0.464090306303398040, 0.464134595117809630, 0.464178882771885130, 0.464223169265512990, +0.464267454598582980, 0.464311738770984690, 0.464356021782606710, 0.464400303633338620, 0.464444584323069790, 0.464488863851689910, 0.464533142219087480, 0.464577419425152180, +0.464621695469773330, 0.464665970352840630, 0.464710244074242610, 0.464754516633869020, 0.464798788031609070, 0.464843058267352620, 0.464887327340988090, 0.464931595252405240, +0.464975862001493380, 0.465020127588142260, 0.465064392012240480, 0.465108655273677670, 0.465152917372343270, 0.465197178308126960, 0.465241438080917280, 0.465285696690603990, +0.465329954137076900, 0.465374210420224530, 0.465418465539936600, 0.465462719496102520, 0.465506972288612040, 0.465551223917353760, 0.465595474382217380, 0.465639723683092310, +0.465683971819868370, 0.465728218792434090, 0.465772464600679230, 0.465816709244493250, 0.465860952723765880, 0.465905195038385730, 0.465949436188242580, 0.465993676173225850, +0.466037914993225330, 0.466082152648129630, 0.466126389137828560, 0.466170624462211860, 0.466214858621168240, 0.466259091614587510, 0.466303323442358970, 0.466347554104372560, +0.466391783600516860, 0.466436011930681740, 0.466480239094756550, 0.466524465092631180, 0.466568689924194260, 0.466612913589335600, 0.466657136087944620, 0.466701357419911260, +0.466745577585124080, 0.466789796583472970, 0.466834014414847340, 0.466878231079137060, 0.466922446576230830, 0.466966660906018520, 0.467010874068389930, 0.467055086063233700, +0.467099296890439830, 0.467143506549897670, 0.467187715041497200, 0.467231922365127010, 0.467276128520677010, 0.467320333508036700, 0.467364537327095930, 0.467408739977743400, +0.467452941459869100, 0.467497141773362380, 0.467541340918113220, 0.467585538894010330, 0.467629735700943570, 0.467673931338802470, 0.467718125807476960, 0.467762319106855730, +0.467806511236828700, 0.467850702197285420, 0.467894891988115740, 0.467939080609208410, 0.467983268060453430, 0.468027454341740650, 0.468071639452958880, 0.468115823393997990, +0.468160006164747510, 0.468204187765097420, 0.468248368194936480, 0.468292547454154660, 0.468336725542641390, 0.468380902460286740, 0.468425078206979480, 0.468469252782609480, +0.468513426187066370, 0.468557598420240030, 0.468601769482019370, 0.468645939372294260, 0.468690108090954290, 0.468734275637889440, 0.468778442012988570, 0.468822607216141550, +0.468866771247238360, 0.468910934106167910, 0.468955095792820130, 0.468999256307084560, 0.469043415648851270, 0.469087573818009030, 0.469131730814447920, 0.469175886638057430, +0.469220041288727630, 0.469264194766347340, 0.469308347070806540, 0.469352498201994870, 0.469396648159802370, 0.469440796944117830, 0.469484944554831360, 0.469529090991832490, +0.469573236255011240, 0.469617380344256540, 0.469661523259458420, 0.469705665000506870, 0.469749805567290730, 0.469793944959700120, 0.469838083177624650, 0.469882220220954330, +0.469926356089578110, 0.469970490783385930, 0.470014624302267590, 0.470058756646113070, 0.470102887814811240, 0.470147017808252190, 0.470191146626325660, 0.470235274268921590, +0.470279400735928940, 0.470323526027237810, 0.470367650142737900, 0.470411773082319180, 0.470455894845870690, 0.470500015433282460, 0.470544134844444570, 0.470588253079245960, +0.470632370137576690, 0.470676486019326550, 0.470720600724385540, 0.470764714252642660, 0.470808826603987980, 0.470852937778311220, 0.470897047775502560, 0.470941156595450830, +0.470985264238046260, 0.471029370703178460, 0.471073475990737680, 0.471117580100612830, 0.471161683032694010, 0.471205784786870970, 0.471249885363033860, 0.471293984761071650, +0.471338082980874480, 0.471382180022332120, 0.471426275885334700, 0.471470370569771200, 0.471514464075531770, 0.471558556402506550, 0.471602647550584560, 0.471646737519655910, +0.471690826309610460, 0.471734913920338340, 0.471779000351728540, 0.471823085603671260, 0.471867169676056240, 0.471911252568773700, 0.471955334281712600, 0.471999414814763210, +0.472043494167815270, 0.472087572340758990, 0.472131649333483390, 0.472175725145878630, 0.472219799777834570, 0.472263873229241460, 0.472307945499988220, 0.472352016589965120, +0.472396086499062400, 0.472440155227169030, 0.472484222774175290, 0.472528289139971030, 0.472572354324446390, 0.472616418327490460, 0.472660481148993510, 0.472704542788845380, +0.472748603246936290, 0.472792662523155270, 0.472836720617392570, 0.472880777529538110, 0.472924833259482090, 0.472968887807113600, 0.473012941172322900, 0.473056993354999840, +0.473101044355034640, 0.473145094172316480, 0.473189142806735570, 0.473233190258182220, 0.473277236526545520, 0.473321281611715660, 0.473365325513582680, 0.473409368232036720, +0.473453409766966930, 0.473497450118263660, 0.473541489285816740, 0.473585527269516530, 0.473629564069252050, 0.473673599684913740, 0.473717634116391340, 0.473761667363575280, +0.473805699426354700, 0.473849730304619850, 0.473893759998260670, 0.473937788507167450, 0.473981815831229390, 0.474025841970336810, 0.474069866924379580, 0.474113890693248110, +0.474157913276831540, 0.474201934675020140, 0.474245954887704320, 0.474289973914773230, 0.474333991756117180, 0.474378008411626200, 0.474422023881190540, 0.474466038164699460, +0.474510051262043260, 0.474554063173111940, 0.474598073897795850, 0.474642083435984190, 0.474686091787567320, 0.474730098952435230, 0.474774104930478280, 0.474818109721585670, +0.474862113325647820, 0.474906115742554650, 0.474950116972196580, 0.474994117014462810, 0.475038115869243830, 0.475082113536429870, 0.475126110015910260, 0.475170105307575360, +0.475214099411315210, 0.475258092327020210, 0.475302084054579580, 0.475346074593883780, 0.475390063944822750, 0.475434052107286950, 0.475478039081165650, 0.475522024866349200, +0.475566009462727760, 0.475609992870191680, 0.475653975088630170, 0.475697956117933750, 0.475741935957992470, 0.475785914608696680, 0.475829892069935760, 0.475873868341600110, +0.475917843423580180, 0.475961817315765260, 0.476005790018045770, 0.476049761530311810, 0.476093731852453850, 0.476137700984361150, 0.476181668925924170, 0.476225635677033080, +0.476269601237578280, 0.476313565607449090, 0.476357528786535980, 0.476401490774728990, 0.476445451571918750, 0.476489411177994430, 0.476533369592846650, 0.476577326816365390, +0.476621282848441190, 0.476665237688963410, 0.476709191337822580, 0.476753143794909070, 0.476797095060112420, 0.476841045133322980, 0.476884994014430910, 0.476928941703326780, +0.476972888199899860, 0.477016833504040780, 0.477060777615639590, 0.477104720534586800, 0.477148662260771850, 0.477192602794085260, 0.477236542134417190, 0.477280480281658090, +0.477324417235697460, 0.477368352996425770, 0.477412287563733160, 0.477456220937510280, 0.477500153117646430, 0.477544084104032150, 0.477588013896557750, 0.477631942495113650, +0.477675869899589320, 0.477719796109875310, 0.477763721125862180, 0.477807644947439380, 0.477851567574497430, 0.477895489006926630, 0.477939409244617470, 0.477983328287459370, +0.478027246135342980, 0.478071162788158480, 0.478115078245796410, 0.478158992508146310, 0.478202905575098700, 0.478246817446543850, 0.478290728122372330, 0.478334637602473630, +0.478378545886738280, 0.478422452975056590, 0.478466358867319200, 0.478510263563415470, 0.478554167063236110, 0.478598069366671710, 0.478641970473611730, 0.478685870383946830, +0.478729769097567260, 0.478773666614363710, 0.478817562934225560, 0.478861458057043500, 0.478905351982707780, 0.478949244711109060, 0.478993136242136910, 0.479037026575681870, +0.479080915711634250, 0.479124803649884750, 0.479168690390322840, 0.479212575932839220, 0.479256460277324160, 0.479300343423668340, 0.479344225371761250, 0.479388106121493630, +0.479431985672756130, 0.479475864025438240, 0.479519741179430690, 0.479563617134623810, 0.479607491890908290, 0.479651365448173660, 0.479695237806310570, 0.479739108965209440, +0.479782978924760910, 0.479826847684854510, 0.479870715245381000, 0.479914581606230740, 0.479958446767294380, 0.480002310728461560, 0.480046173489622920, 0.480090035050668830, +0.480133895411490100, 0.480177754571976200, 0.480221612532017890, 0.480265469291505600, 0.480309324850330010, 0.480353179208380720, 0.480397032365548480, 0.480440884321724050, +0.480484735076797010, 0.480528584630658120, 0.480572432983197790, 0.480616280134306790, 0.480660126083874650, 0.480703970831792230, 0.480747814377949890, 0.480791656722238390, +0.480835497864547380, 0.480879337804767600, 0.480923176542789490, 0.480967014078503790, 0.481010850411800190, 0.481054685542569470, 0.481098519470702040, 0.481142352196088700, +0.481186183718619100, 0.481230014038184000, 0.481273843154674310, 0.481317671067979570, 0.481361497777990700, 0.481405323284598060, 0.481449147587692470, 0.481492970687163680, +0.481536792582902440, 0.481580613274799230, 0.481624432762744860, 0.481668251046629030, 0.481712068126342540, 0.481755884001775940, 0.481799698672819960, 0.481843512139364380, +0.481887324401300000, 0.481931135458517290, 0.481974945310907180, 0.482018753958359300, 0.482062561400764530, 0.482106367638013730, 0.482150172669996660, 0.482193976496604120, +0.482237779117726690, 0.482281580533255150, 0.482325380743079290, 0.482369179747089980, 0.482412977545177760, 0.482456774137233420, 0.482500569523146790, 0.482544363702808730, +0.482588156676109710, 0.482631948442940770, 0.482675739003191550, 0.482719528356752970, 0.482763316503515560, 0.482807103443370240, 0.482850889176206780, 0.482894673701916130, +0.482938457020389120, 0.482982239131515670, 0.483026020035186520, 0.483069799731292380, 0.483113578219724120, 0.483157355500371530, 0.483201131573125550, 0.483244906437876760, +0.483288680094516090, 0.483332452542933280, 0.483376223783019370, 0.483419993814664940, 0.483463762637760860, 0.483507530252197000, 0.483551296657864340, 0.483595061854653400, +0.483638825842455210, 0.483682588621159590, 0.483726350190657460, 0.483770110550839460, 0.483813869701596620, 0.483857627642818640, 0.483901384374396670, 0.483945139896221570, +0.483988894208183250, 0.484032647310172700, 0.484076399202080510, 0.484120149883797760, 0.484163899355214200, 0.484207647616220930, 0.484251394666708520, 0.484295140506568020, +0.484338885135689230, 0.484382628553963300, 0.484426370761280760, 0.484470111757532680, 0.484513851542608950, 0.484557590116400590, 0.484601327478798250, 0.484645063629693010, +0.484688798568974680, 0.484732532296534350, 0.484776264812263100, 0.484819996116050810, 0.484863726207788500, 0.484907455087366880, 0.484951182754677020, 0.484994909209608800, +0.485038634452053310, 0.485082358481901290, 0.485126081299043720, 0.485169802903370530, 0.485213523294772850, 0.485257242473141390, 0.485300960438367180, 0.485344677190340190, +0.485388392728951510, 0.485432107054091900, 0.485475820165652330, 0.485519532063522830, 0.485563242747594550, 0.485606952217758510, 0.485650660473904710, 0.485694367515924260, +0.485738073343707940, 0.485781777957146780, 0.485825481356130790, 0.485869183540551090, 0.485912884510298460, 0.485956584265263950, 0.486000282805337640, 0.486043980130410610, +0.486087676240373630, 0.486131371135117840, 0.486175064814533260, 0.486218757278510990, 0.486262448526941840, 0.486306138559716940, 0.486349827376726330, 0.486393514977861150, +0.486437201363012160, 0.486480886532070560, 0.486524570484926370, 0.486568253221470740, 0.486611934741594860, 0.486655615045188780, 0.486699294132143630, 0.486742972002350280, +0.486786648655699870, 0.486830324092082490, 0.486873998311389280, 0.486917671313511050, 0.486961343098339050, 0.487005013665763260, 0.487048683015675000, 0.487092351147965010, +0.487136018062524490, 0.487179683759243590, 0.487223348238013440, 0.487267011498724980, 0.487310673541269330, 0.487354334365536600, 0.487397993971418090, 0.487441652358804930, +0.487485309527587280, 0.487528965477656340, 0.487572620208902960, 0.487616273721218460, 0.487659926014492870, 0.487703577088617500, 0.487747226943483160, 0.487790875578981150, +0.487834522995001520, 0.487878169191435620, 0.487921814168174320, 0.487965457925108810, 0.488009100462129310, 0.488052741779127050, 0.488096381875992970, 0.488140020752618310, +0.488183658408893160, 0.488227294844708890, 0.488270930059956810, 0.488314564054526950, 0.488358196828310720, 0.488401828381199000, 0.488445458713083090, 0.488489087823853140, +0.488532715713400510, 0.488576342381616070, 0.488619967828391120, 0.488663592053615870, 0.488707215057181680, 0.488750836838979460, 0.488794457398900480, 0.488838076736835050, +0.488881694852674350, 0.488925311746309430, 0.488968927417631650, 0.489012541866531150, 0.489056155092899290, 0.489099767096627390, 0.489143377877605760, 0.489186987435725640, +0.489230595770878070, 0.489274202882954420, 0.489317808771844830, 0.489361413437440720, 0.489405016879633110, 0.489448619098313330, 0.489492220093371620, 0.489535819864699350, +0.489579418412187550, 0.489623015735727530, 0.489666611835209650, 0.489710206710525230, 0.489753800361565240, 0.489797392788221210, 0.489840983990383280, 0.489884573967942880, +0.489928162720791040, 0.489971750248819230, 0.490015336551917590, 0.490058921629977660, 0.490102505482890800, 0.490146088110547270, 0.490189669512838540, 0.490233249689655650, +0.490276828640890010, 0.490320406366431930, 0.490363982866172780, 0.490407558140003700, 0.490451132187816110, 0.490494705009500320, 0.490538276604947750, 0.490581846974049500, +0.490625416116697020, 0.490668984032780590, 0.490712550722191720, 0.490756116184821510, 0.490799680420561320, 0.490843243429301580, 0.490886805210933750, 0.490930365765349260, +0.490973925092438530, 0.491017483192092930, 0.491061040064203650, 0.491104595708662110, 0.491148150125358730, 0.491191703314184990, 0.491235255275031980, 0.491278806007791170, +0.491322355512353040, 0.491365903788608950, 0.491409450836450160, 0.491452996655768080, 0.491496541246453140, 0.491540084608396880, 0.491583626741490360, 0.491627167645625200, +0.491670707320691740, 0.491714245766581460, 0.491757782983185950, 0.491801318970395640, 0.491844853728102050, 0.491888387256196270, 0.491931919554569940, 0.491975450623113430, +0.492018980461718270, 0.492062509070275660, 0.492106036448677180, 0.492149562596813190, 0.492193087514575360, 0.492236611201854750, 0.492280133658543060, 0.492323654884530560, +0.492367174879708990, 0.492410693643969500, 0.492454211177203620, 0.492497727479301820, 0.492541242550155740, 0.492584756389656540, 0.492628268997695800, 0.492671780374164040, +0.492715290518952800, 0.492758799431953720, 0.492802307113057280, 0.492845813562155070, 0.492889318779138330, 0.492932822763898660, 0.492976325516326590, 0.493019827036313640, +0.493063327323751190, 0.493106826378530760, 0.493150324200542890, 0.493193820789679220, 0.493237316145831000, 0.493280810268889870, 0.493324303158746310, 0.493367794815292030, +0.493411285238418260, 0.493454774428016610, 0.493498262383977700, 0.493541749106193080, 0.493585234594554500, 0.493628718848952490, 0.493672201869278630, 0.493715683655424290, +0.493759164207281110, 0.493802643524739630, 0.493846121607691530, 0.493889598456028140, 0.493933074069641150, 0.493976548448421090, 0.494020021592259660, 0.494063493501048170, +0.494106964174678360, 0.494150433613040730, 0.494193901816027010, 0.494237368783528530, 0.494280834515437030, 0.494324299011643040, 0.494367762272038320, 0.494411224296514570, +0.494454685084962380, 0.494498144637273480, 0.494541602953339210, 0.494585060033051300, 0.494628515876300410, 0.494671970482978170, 0.494715423852976070, 0.494758875986185730, +0.494802326882497870, 0.494845776541804170, 0.494889224963996010, 0.494932672148965190, 0.494976118096602300, 0.495019562806799100, 0.495063006279447050, 0.495106448514437800, +0.495149889511662060, 0.495193329271011620, 0.495236767792378240, 0.495280205075652570, 0.495323641120726350, 0.495367075927491070, 0.495410509495838420, 0.495453941825659160, +0.495497372916845040, 0.495540802769287470, 0.495584231382878330, 0.495627658757508190, 0.495671084893068880, 0.495714509789451860, 0.495757933446549000, 0.495801355864250890, +0.495844777042449390, 0.495888196981035980, 0.495931615679902400, 0.495975033138939430, 0.496018449358038900, 0.496061864337092210, 0.496105278075991250, 0.496148690574626740, +0.496192101832890480, 0.496235511850674380, 0.496278920627869100, 0.496322328164366500, 0.496365734460058050, 0.496409139514835730, 0.496452543328590120, 0.496495945901213150, +0.496539347232596350, 0.496582747322631520, 0.496626146171209480, 0.496669543778222090, 0.496712940143560770, 0.496756335267117540, 0.496799729148783060, 0.496843121788449300, +0.496886513186007680, 0.496929903341350230, 0.496973292254367590, 0.497016679924951690, 0.497060066352994550, 0.497103451538386810, 0.497146835481020450, 0.497190218180787010, +0.497233599637578410, 0.497276979851285380, 0.497320358821799920, 0.497363736549013610, 0.497407113032818320, 0.497450488273104840, 0.497493862269765160, 0.497537235022690870, +0.497580606531773830, 0.497623976796904840, 0.497667345817976000, 0.497710713594878730, 0.497754080127505110, 0.497797445415745890, 0.497840809459493050, 0.497884172258638570, +0.497927533813073250, 0.497970894122689130, 0.498014253187377740, 0.498057611007031160, 0.498100967581540100, 0.498144322910796690, 0.498187676994692410, 0.498231029833119340, +0.498274381425968360, 0.498317731773131380, 0.498361080874500100, 0.498404428729966430, 0.498447775339421360, 0.498491120702756860, 0.498534464819864580, 0.498577807690636480, +0.498621149314963490, 0.498664489692737580, 0.498707828823850510, 0.498751166708194250, 0.498794503345659670, 0.498837838736138790, 0.498881172879523770, 0.498924505775705410, +0.498967837424575730, 0.499011167826026560, 0.499054496979949800, 0.499097824886236390, 0.499141151544778450, 0.499184476955467640, 0.499227801118195980, 0.499271124032854450, +0.499314445699335140, 0.499357766117529690, 0.499401085287330240, 0.499444403208627650, 0.499487719881314070, 0.499531035305281200, 0.499574349480421120, 0.499617662406624750, +0.499660974083784290, 0.499704284511791720, 0.499747593690538060, 0.499790901619915460, 0.499834208299815560, 0.499877513730130560, 0.499920817910751380, 0.499964120841570160, +0.500007422522478650, 0.500050722953368940, 0.500094022134132010, 0.500137320064660050, 0.500180616744844820, 0.500223912174578400, 0.500267206353751880, 0.500310499282257240, +0.500353790959986440, 0.500397081386831480, 0.500440370562683420, 0.500483658487434480, 0.500526945160976840, 0.500570230583201380, 0.500613514754000400, 0.500656797673265540, +0.500700079340889110, 0.500743359756762100, 0.500786638920776680, 0.500829916832824740, 0.500873193492798350, 0.500916468900588500, 0.500959743056087590, 0.501003015959187280, +0.501046287609779870, 0.501089558007756230, 0.501132827153008780, 0.501176095045429260, 0.501219361684909880, 0.501262627071341730, 0.501305891204616990, 0.501349154084627550, +0.501392415711265580, 0.501435676084422190, 0.501478935203989560, 0.501522193069860120, 0.501565449681924620, 0.501608705040075710, 0.501651959144204910, 0.501695211994204530, +0.501738463589965880, 0.501781713931380930, 0.501824963018341790, 0.501868210850740630, 0.501911457428468540, 0.501954702751417850, 0.501997946819480400, 0.502041189632548400, +0.502084431190513050, 0.502127671493266650, 0.502170910540701070, 0.502214148332708610, 0.502257384869180370, 0.502300620150008650, 0.502343854175085760, 0.502387086944302900, +0.502430318457552370, 0.502473548714725940, 0.502516777715716010, 0.502560005460413910, 0.502603231948711590, 0.502646457180501380, 0.502689681155675250, 0.502732903874124610, +0.502776125335741670, 0.502819345540418520, 0.502862564488047340, 0.502905782178519330, 0.502948998611726930, 0.502992213787561980, 0.503035427705916800, 0.503078640366682820, +0.503121851769752100, 0.503165061915017200, 0.503208270802369300, 0.503251478431700710, 0.503294684802903400, 0.503337889915869810, 0.503381093770491010, 0.503424296366659530, +0.503467497704267350, 0.503510697783206780, 0.503553896603369020, 0.503597094164646600, 0.503640290466931480, 0.503683485510115880, 0.503726679294091320, 0.503769871818749990, +0.503813063083983990, 0.503856253089685730, 0.503899441835746420, 0.503942629322058580, 0.503985815548514520, 0.504029000515005430, 0.504072184221423970, 0.504115366667661990, +0.504158547853612030, 0.504201727779165280, 0.504244906444214160, 0.504288083848650870, 0.504331259992367720, 0.504374434875256020, 0.504417608497208180, 0.504460780858116410, +0.504503951957873010, 0.504547121796369400, 0.504590290373498010, 0.504633457689150800, 0.504676623743220420, 0.504719788535598070, 0.504762952066176160, 0.504806114334847010, +0.504849275341502810, 0.504892435086035210, 0.504935593568336390, 0.504978750788299010, 0.505021906745814380, 0.505065061440775010, 0.505108214873072890, 0.505151367042600660, +0.505194517949249630, 0.505237667592912330, 0.505280815973480960, 0.505323963090847820, 0.505367108944904330, 0.505410253535543140, 0.505453396862656330, 0.505496538926136440, +0.505539679725874770, 0.505582819261763850, 0.505625957533695990, 0.505669094541563500, 0.505712230285258020, 0.505755364764671870, 0.505798497979697670, 0.505841629930226970, +0.505884760616152060, 0.505927890037365380, 0.505971018193759230, 0.506014145085225240, 0.506057270711655850, 0.506100395072943240, 0.506143518168980070, 0.506186639999657740, +0.506229760564868790, 0.506272879864505530, 0.506315997898460380, 0.506359114666624750, 0.506402230168891410, 0.506445344405152540, 0.506488457375300680, 0.506531569079227250, +0.506574679516825000, 0.506617788687986350, 0.506660896592602830, 0.506704003230567080, 0.506747108601771300, 0.506790212706108250, 0.506833315543469110, 0.506876417113746870, +0.506919517416833500, 0.506962616452621640, 0.507005714221002930, 0.507048810721869910, 0.507091905955114890, 0.507134999920630490, 0.507178092618308260, 0.507221184048040730, +0.507264274209720200, 0.507307363103239430, 0.507350450728489830, 0.507393537085364170, 0.507436622173754630, 0.507479705993553960, 0.507522788544653600, 0.507565869826946180, +0.507608949840324560, 0.507652028584680170, 0.507695106059905750, 0.507738182265893510, 0.507781257202536310, 0.507824330869725450, 0.507867403267353800, 0.507910474395313670, +0.507953544253497700, 0.507996612841797530, 0.508039680160105810, 0.508082746208314840, 0.508125810986317480, 0.508168874494005160, 0.508211936731270630, 0.508254997698006310, +0.508298057394104830, 0.508341115819457840, 0.508384172973957990, 0.508427228857498250, 0.508470283469969920, 0.508513336811265980, 0.508556388881278630, 0.508599439679900730, +0.508642489207023820, 0.508685537462540640, 0.508728584446343720, 0.508771630158325720, 0.508814674598378150, 0.508857717766393990, 0.508900759662265450, 0.508943800285885480, +0.508986839637145640, 0.509029877715938660, 0.509072914522156970, 0.509115950055693430, 0.509158984316439580, 0.509202017304288270, 0.509245049019132260, 0.509288079460863300, +0.509331108629374140, 0.509374136524557210, 0.509417163146305360, 0.509460188494510140, 0.509503212569064500, 0.509546235369860880, 0.509589256896791910, 0.509632277149749570, +0.509675296128626500, 0.509718313833315120, 0.509761330263708400, 0.509804345419697880, 0.509847359301176640, 0.509890371908036880, 0.509933383240171570, 0.509976393297472460, +0.510019402079832430, 0.510062409587144220, 0.510105415819299580, 0.510148420776191490, 0.510191424457712260, 0.510234426863754860, 0.510277427994211050, 0.510320427848973580, +0.510363426427935200, 0.510406423730988550, 0.510449419758025380, 0.510492414508938790, 0.510535407983621070, 0.510578400181965210, 0.510621391103863060, 0.510664380749207390, +0.510707369117890720, 0.510750356209806020, 0.510793342024845170, 0.510836326562900790, 0.510879309823865760, 0.510922291807632710, 0.510965272514093630, 0.511008251943141260, +0.511051230094668680, 0.511094206968567780, 0.511137182564731170, 0.511180156883051740, 0.511223129923422230, 0.511266101685734500, 0.511309072169881640, 0.511352041375755960, +0.511395009303250660, 0.511437975952257370, 0.511480941322669190, 0.511523905414378640, 0.511566868227278700, 0.511609829761261240, 0.511652790016219220, 0.511695748992045170, +0.511738706688632080, 0.511781663105871920, 0.511824618243657660, 0.511867572101882160, 0.511910524680437300, 0.511953475979216250, 0.511996425998111460, 0.512039374737016000, +0.512082322195821620, 0.512125268374421520, 0.512168213272708230, 0.512211156890574840, 0.512254099227913100, 0.512297040284616200, 0.512339980060576570, 0.512382918555687520, +0.512425855769840680, 0.512468791702929250, 0.512511726354845880, 0.512554659725483530, 0.512597591814734080, 0.512640522622490710, 0.512683452148646520, 0.512726380393093150, +0.512769307355723900, 0.512812233036431420, 0.512855157435108680, 0.512898080551647760, 0.512941002385941540, 0.512983922937882860, 0.513026842207364720, 0.513069760194279080, +0.513112676898519030, 0.513155592319977320, 0.513198506458547030, 0.513241419314120150, 0.513284330886589650, 0.513327241175848270, 0.513370150181789220, 0.513413057904304470, +0.513455964343287000, 0.513498869498629660, 0.513541773370225550, 0.513584675957966530, 0.513627577261745900, 0.513670477281456650, 0.513713376016990850, 0.513756273468241710, +0.513799169635101750, 0.513842064517464280, 0.513884958115221280, 0.513927850428265940, 0.513970741456490910, 0.514013631199789380, 0.514056519658053430, 0.514099406831176160, +0.514142292719050430, 0.514185177321569320, 0.514228060638624920, 0.514270942670110310, 0.514313823415918360, 0.514356702875942260, 0.514399581050074000, 0.514442457938206750, +0.514485333540233740, 0.514528207856047140, 0.514571080885539820, 0.514613952628604990, 0.514656823085135610, 0.514699692255023660, 0.514742560138162660, 0.514785426734445160, +0.514828292043764460, 0.514871156066012640, 0.514914018801083010, 0.514956880248868320, 0.514999740409261770, 0.515042599282155460, 0.515085456867442780, 0.515128313165016280, +0.515171168174769490, 0.515214021896594380, 0.515256874330384250, 0.515299725476032310, 0.515342575333430640, 0.515385423902472550, 0.515428271183050900, 0.515471117175058890, +0.515513961878388720, 0.515556805292933680, 0.515599647418586660, 0.515642488255240950, 0.515685327802788530, 0.515728166061122820, 0.515771003030136680, 0.515813838709723420, +0.515856673099775230, 0.515899506200185320, 0.515942338010846660, 0.515985168531652550, 0.516027997762495080, 0.516070825703267680, 0.516113652353863530, 0.516156477714174940, +0.516199301784095010, 0.516242124563517040, 0.516284946052333990, 0.516327766250438190, 0.516370585157723050, 0.516413402774081430, 0.516456219099406640, 0.516499034133591000, +0.516541847876527680, 0.516584660328109790, 0.516627471488230740, 0.516670281356782500, 0.516713089933658500, 0.516755897218751930, 0.516798703211955870, 0.516841507913162750, +0.516884311322265870, 0.516927113439158090, 0.516969914263733070, 0.517012713795882760, 0.517055512035500710, 0.517098308982480330, 0.517141104636713700, 0.517183898998094360, +0.517226692066515280, 0.517269483841869770, 0.517312274324050250, 0.517355063512950020, 0.517397851408462060, 0.517440638010480010, 0.517483423318895850, 0.517526207333603220, +0.517568990054494970, 0.517611771481464760, 0.517654551614404660, 0.517697330453208200, 0.517740107997768370, 0.517782884247978690, 0.517825659203731360, 0.517868432864920010, +0.517911205231437850, 0.517953976303177300, 0.517996746080031880, 0.518039514561894570, 0.518082281748658780, 0.518125047640217050, 0.518167812236462580, 0.518210575537288660, +0.518253337542588620, 0.518296098252254870, 0.518338857666180820, 0.518381615784259680, 0.518424372606384960, 0.518467128132448770, 0.518509882362344850, 0.518552635295966290, +0.518595386933206390, 0.518638137273957690, 0.518680886318113710, 0.518723634065567870, 0.518766380516212490, 0.518809125669941200, 0.518851869526647190, 0.518894612086223780, +0.518937353348563500, 0.518980093313559760, 0.519022831981105880, 0.519065569351095270, 0.519108305423420350, 0.519151040197974640, 0.519193773674651360, 0.519236505853344020, +0.519279236733945050, 0.519321966316347970, 0.519364694600445990, 0.519407421586132620, 0.519450147273300410, 0.519492871661842770, 0.519535594751652900, 0.519578316542624540, +0.519621037034649900, 0.519663756227622730, 0.519706474121436560, 0.519749190715983690, 0.519791906011157990, 0.519834620006852430, 0.519877332702960770, 0.519920044099375420, +0.519962754195989920, 0.520005462992697560, 0.520048170489391890, 0.520090876685965430, 0.520133581582311710, 0.520176285178324150, 0.520218987473896170, 0.520261688468920400, +0.520304388163290390, 0.520347086556899430, 0.520389783649641060, 0.520432479441407910, 0.520475173932093530, 0.520517867121591650, 0.520560559009794700, 0.520603249596596320, +0.520645938881889810, 0.520688626865568830, 0.520731313547526000, 0.520773998927654750, 0.520816683005848600, 0.520859365782001090, 0.520902047256004860, 0.520944727427753440, +0.520987406297140130, 0.521030083864058800, 0.521072760128401870, 0.521115435090062970, 0.521158108748935530, 0.521200781104913190, 0.521243452157888590, 0.521286121907755250, +0.521328790354407050, 0.521371457497736390, 0.521414123337637150, 0.521456787874002630, 0.521499451106726570, 0.521542113035701420, 0.521584773660821010, 0.521627432981978670, +0.521670090999068140, 0.521712747711981950, 0.521755403120613970, 0.521798057224857390, 0.521840710024606080, 0.521883361519752680, 0.521926011710190820, 0.521968660595813930, +0.522011308176515750, 0.522053954452188940, 0.522096599422727240, 0.522139243088024510, 0.522181885447973170, 0.522224526502467200, 0.522267166251399790, 0.522309804694665040, +0.522352441832155230, 0.522395077663764360, 0.522437712189385840, 0.522480345408913420, 0.522522977322239730, 0.522565607929258550, 0.522608237229863380, 0.522650865223947990, +0.522693491911405130, 0.522736117292128430, 0.522778741366011550, 0.522821364132948110, 0.522863985592830980, 0.522906605745553810, 0.522949224591010120, 0.522991842129093780, +0.523034458359697420, 0.523077073282714910, 0.523119686898040110, 0.523162299205565780, 0.523204910205185670, 0.523247519896793190, 0.523290128280282430, 0.523332735355545810, +0.523375341122477520, 0.523417945580970770, 0.523460548730919630, 0.523503150572216640, 0.523545751104755760, 0.523588350328430540, 0.523630948243134830, 0.523673544848761390, +0.523716140145204070, 0.523758734132356410, 0.523801326810112270, 0.523843918178364510, 0.523886508237006890, 0.523929096985933370, 0.523971684425036720, 0.524014270554210900, +0.524056855373349450, 0.524099438882346110, 0.524142021081093870, 0.524184601969486570, 0.524227181547417760, 0.524269759814781410, 0.524312336771470270, 0.524354912417378300, +0.524397486752398940, 0.524440059776426380, 0.524482631489353260, 0.524525201891073430, 0.524567770981480770, 0.524610338760469030, 0.524652905227930950, 0.524695470383760740, +0.524738034227852150, 0.524780596760098140, 0.524823157980392590, 0.524865717888629240, 0.524908276484701840, 0.524950833768503490, 0.524993389739928040, 0.525035944398869030, +0.525078497745220640, 0.525121049778875530, 0.525163600499727880, 0.525206149907671120, 0.525248698002599430, 0.525291244784405700, 0.525333790252983770, 0.525376334408227400, +0.525418877250030560, 0.525461418778286120, 0.525503958992888150, 0.525546497893730310, 0.525589035480706570, 0.525631571753709890, 0.525674106712634260, 0.525716640357373750, +0.525759172687821240, 0.525801703703870800, 0.525844233405416080, 0.525886761792351170, 0.525929288864569020, 0.525971814621963630, 0.526014339064428740, 0.526056862191858320, +0.526099384004145350, 0.526141904501184030, 0.526184423682867890, 0.526226941549091000, 0.526269458099746460, 0.526311973334728230, 0.526354487253930080, 0.526396999857246080, +0.526439511144569220, 0.526482021115793560, 0.526524529770813320, 0.526567037109521240, 0.526609543131811630, 0.526652047837578240, 0.526694551226715050, 0.526737053299115020, +0.526779554054672470, 0.526822053493280930, 0.526864551614834700, 0.526907048419226750, 0.526949543906351180, 0.526992038076101620, 0.527034530928372490, 0.527077022463056540, +0.527119512680048090, 0.527162001579240870, 0.527204489160529090, 0.527246975423805610, 0.527289460368964740, 0.527331943995900550, 0.527374426304506150, 0.527416907294675610, +0.527459386966302900, 0.527501865319282110, 0.527544342353506220, 0.527586818068869420, 0.527629292465265690, 0.527671765542589100, 0.527714237300732640, 0.527756707739590600, +0.527799176859056860, 0.527841644659025500, 0.527884111139389710, 0.527926576300043580, 0.527969040140881090, 0.528011502661796310, 0.528053963862682330, 0.528096423743433570, +0.528138882303944010, 0.528181339544106950, 0.528223795463816590, 0.528266250062966680, 0.528308703341451520, 0.528351155299164210, 0.528393605935999040, 0.528436055251849780, +0.528478503246610830, 0.528520949920175290, 0.528563395272437230, 0.528605839303290860, 0.528648282012630140, 0.528690723400348390, 0.528733163466339810, 0.528775602210498350, +0.528818039632718230, 0.528860475732892630, 0.528902910510915870, 0.528945343966681800, 0.528987776100084740, 0.529030206911017880, 0.529072636399375520, 0.529115064565051970, +0.529157491407940330, 0.529199916927935000, 0.529242341124929850, 0.529284763998819300, 0.529327185549496430, 0.529369605776855550, 0.529412024680790630, 0.529454442261196090, +0.529496858517965020, 0.529539273450991830, 0.529581687060170500, 0.529624099345395230, 0.529666510306559420, 0.529708919943557290, 0.529751328256282910, 0.529793735244630580, +0.529836140908493510, 0.529878545247766010, 0.529920948262342590, 0.529963349952116470, 0.530005750316981940, 0.530048149356833090, 0.530090547071564110, 0.530132943461068540, +0.530175338525240460, 0.530217732263974170, 0.530260124677163880, 0.530302515764702890, 0.530344905526485500, 0.530387293962406030, 0.530429681072358550, 0.530472066856236600, +0.530514451313934490, 0.530556834445346180, 0.530599216250366210, 0.530641596728887780, 0.530683975880805400, 0.530726353706013400, 0.530768730204405180, 0.530811105375875170, +0.530853479220317340, 0.530895851737626210, 0.530938222927695100, 0.530980592790418430, 0.531022961325690270, 0.531065328533405050, 0.531107694413456180, 0.531150058965737970, +0.531192422190144730, 0.531234784086570770, 0.531277144654909490, 0.531319503895055330, 0.531361861806902370, 0.531404218390345240, 0.531446573645277140, 0.531488927571592610, +0.531531280169185720, 0.531573631437951000, 0.531615981377781880, 0.531658329988572760, 0.531700677270218190, 0.531743023222611580, 0.531785367845647450, 0.531827711139219780, +0.531870053103223330, 0.531912393737551280, 0.531954733042098280, 0.531997071016758530, 0.532039407661426320, 0.532081742975995420, 0.532124076960360020, 0.532166409614414420, +0.532208740938053260, 0.532251070931169750, 0.532293399593658620, 0.532335726925413980, 0.532378052926330450, 0.532420377596301450, 0.532462700935221410, 0.532505022942984960, +0.532547343619485640, 0.532589662964617960, 0.532631980978276130, 0.532674297660354790, 0.532716613010747240, 0.532758927029348130, 0.532801239716051760, 0.532843551070752650, +0.532885861093344350, 0.532928169783721260, 0.532970477141777920, 0.533012783167408630, 0.533055087860507040, 0.533097391220967780, 0.533139693248684930, 0.533181993943553370, +0.533224293305466280, 0.533266591334318530, 0.533308888030004760, 0.533351183392418270, 0.533393477421453930, 0.533435770117005830, 0.533478061478968700, 0.533520351507236090, +0.533562640201702520, 0.533604927562262410, 0.533647213588810290, 0.533689498281239790, 0.533731781639445570, 0.533774063663321920, 0.533816344352763370, 0.533858623707663680, +0.533900901727917490, 0.533943178413418870, 0.533985453764062810, 0.534027727779742720, 0.534070000460353240, 0.534112271805789240, 0.534154541815944130, 0.534196810490712660, +0.534239077829989250, 0.534281343833668430, 0.534323608501643840, 0.534365871833810350, 0.534408133830062030, 0.534450394490293860, 0.534492653814399370, 0.534534911802273080, +0.534577168453809650, 0.534619423768903700, 0.534661677747448660, 0.534703930389339610, 0.534746181694470630, 0.534788431662736490, 0.534830680294031020, 0.534872927588248780, +0.534915173545284280, 0.534957418165032280, 0.534999661447386200, 0.535041903392241110, 0.535084143999491560, 0.535126383269031280, 0.535168621200755030, 0.535210857794557240, +0.535253093050332750, 0.535295326967975100, 0.535337559547379050, 0.535379790788439220, 0.535422020691050270, 0.535464249255105830, 0.535506476480500760, 0.535548702367129590, +0.535590926914886970, 0.535633150123666750, 0.535675371993363570, 0.535717592523871970, 0.535759811715086690, 0.535802029566901590, 0.535844246079211440, 0.535886461251911080, +0.535928675084894060, 0.535970887578055440, 0.536013098731289660, 0.536055308544491350, 0.536097517017554480, 0.536139724150373810, 0.536181929942843860, 0.536224134394859500, +0.536266337506314360, 0.536308539277103310, 0.536350739707120990, 0.536392938796262260, 0.536435136544420770, 0.536477332951491360, 0.536519528017368690, 0.536561721741947490, +0.536603914125121760, 0.536646105166786120, 0.536688294866835670, 0.536730483225164030, 0.536772670241666190, 0.536814855916236790, 0.536857040248770460, 0.536899223239161280, +0.536941404887304020, 0.536983585193093190, 0.537025764156423780, 0.537067941777189640, 0.537110118055285630, 0.537152292990606290, 0.537194466583046590, 0.537236638832500390, +0.537278809738862660, 0.537320979302027820, 0.537363147521890850, 0.537405314398345710, 0.537447479931287280, 0.537489644120610180, 0.537531806966209280, 0.537573968467978560, +0.537616128625812870, 0.537658287439607200, 0.537700444909255500, 0.537742601034652660, 0.537784755815693290, 0.537826909252272500, 0.537869061344283920, 0.537911212091622850, +0.537953361494183600, 0.537995509551861370, 0.538037656264550020, 0.538079801632144530, 0.538121945654539520, 0.538164088331630100, 0.538206229663310000, 0.538248369649474310, +0.538290508290017680, 0.538332645584835290, 0.538374781533820790, 0.538416916136869370, 0.538459049393876010, 0.538501181304734680, 0.538543311869340350, 0.538585441087587770, +0.538627568959372030, 0.538669695484586870, 0.538711820663127620, 0.538753944494888670, 0.538796066979765340, 0.538838188117651380, 0.538880307908442100, 0.538922426352031910, +0.538964543448316010, 0.539006659197188490, 0.539048773598544310, 0.539090886652278110, 0.539132998358285100, 0.539175108716459240, 0.539217217726695620, 0.539259325388889320, +0.539301431702934320, 0.539343536668725700, 0.539385640286158320, 0.539427742555127150, 0.539469843475526290, 0.539511943047250810, 0.539554041270195460, 0.539596138144255330, +0.539638233669324620, 0.539680327845298180, 0.539722420672070990, 0.539764512149538130, 0.539806602277593690, 0.539848691056132650, 0.539890778485049850, 0.539932864564240500, +0.539974949293598680, 0.540017032673019480, 0.540059114702397980, 0.540101195381628370, 0.540143274710605750, 0.540185352689225070, 0.540227429317381210, 0.540269504594968470, +0.540311578521882050, 0.540353651098016590, 0.540395722323267380, 0.540437792197528520, 0.540479860720695200, 0.540521927892662180, 0.540563993713324640, 0.540606058182576900, +0.540648121300313920, 0.540690183066430690, 0.540732243480822380, 0.540774302543382990, 0.540816360254007920, 0.540858416612591930, 0.540900471619030320, 0.540942525273217180, +0.540984577575047590, 0.541026628524417070, 0.541068678121219500, 0.541110726365350290, 0.541152773256704300, 0.541194818795176610, 0.541236862980661650, 0.541278905813054490, +0.541320947292250000, 0.541362987418143590, 0.541405026190629360, 0.541447063609602490, 0.541489099674957950, 0.541531134386591170, 0.541573167744396010, 0.541615199748267990, +0.541657230398101990, 0.541699259693793290, 0.541741287635236100, 0.541783314222325620, 0.541825339454957260, 0.541867363333025210, 0.541909385856424790, 0.541951407025050850, +0.541993426838798700, 0.542035445297562650, 0.542077462401238000, 0.542119478149719720, 0.542161492542903130, 0.542203505580682310, 0.542245517262952890, 0.542287527589609630, +0.542329536560547830, 0.542371544175661910, 0.542413550434847070, 0.542455555337998390, 0.542497558885011280, 0.542539561075779720, 0.542581561910199350, 0.542623561388165480, +0.542665559509572290, 0.542707556274315220, 0.542749551682289330, 0.542791545733389840, 0.542833538427511140, 0.542875529764548560, 0.542917519744397170, 0.542959508366952390, +0.543001495632108420, 0.543043481539760790, 0.543085466089804350, 0.543127449282134630, 0.543169431116645950, 0.543211411593233720, 0.543253390711792910, 0.543295368472219040, +0.543337344874406440, 0.543379319918250280, 0.543421293603645990, 0.543463265930488770, 0.543505236898673030, 0.543547206508094180, 0.543589174758647760, 0.543631141650227970, +0.543673107182730320, 0.543715071356049910, 0.543757034170082250, 0.543798995624721560, 0.543840955719863350, 0.543882914455402820, 0.543924871831235390, 0.543966827847255360, +0.544008782503358270, 0.544050735799439190, 0.544092687735393770, 0.544134638311116080, 0.544176587526501890, 0.544218535381446270, 0.544260481875844640, 0.544302427009591420, +0.544344370782582130, 0.544386313194712310, 0.544428254245876380, 0.544470193935969740, 0.544512132264887700, 0.544554069232525580, 0.544596004838778010, 0.544637939083540410, +0.544679871966707860, 0.544721803488176120, 0.544763733647839480, 0.544805662445593470, 0.544847589881333420, 0.544889515954954610, 0.544931440666351690, 0.544973364015420180, +0.545015286002055290, 0.545057206626152540, 0.545099125887606450, 0.545141043786312450, 0.545182960322166290, 0.545224875495062270, 0.545266789304896140, 0.545308701751562990, +0.545350612834958450, 0.545392522554977060, 0.545434430911514330, 0.545476337904465590, 0.545518243533726240, 0.545560147799191040, 0.545602050700755400, 0.545643952238314630, +0.545685852411764370, 0.545727751220999150, 0.545769648665914490, 0.545811544746405700, 0.545853439462368420, 0.545895332813697290, 0.545937224800287720, 0.545979115422035480, +0.546021004678835080, 0.546062892570582160, 0.546104779097172030, 0.546146664258500230, 0.546188548054461490, 0.546230430484951460, 0.546272311549865220, 0.546314191249098640, +0.546356069582546120, 0.546397946550103540, 0.546439822151666090, 0.546481696387129400, 0.546523569256388120, 0.546565440759337880, 0.546607310895874000, 0.546649179665892330, +0.546691047069287280, 0.546732913105954620, 0.546774777775789640, 0.546816641078688210, 0.546858503014544750, 0.546900363583255000, 0.546942222784714720, 0.546984080618818420, +0.547025937085462100, 0.547067792184540820, 0.547109645915950460, 0.547151498279585650, 0.547193349275342020, 0.547235198903115010, 0.547277047162800460, 0.547318894054292900, +0.547360739577488100, 0.547402583732281340, 0.547444426518568620, 0.547486267936244440, 0.547528107985204570, 0.547569946665344420, 0.547611783976559850, 0.547653619918745390, +0.547695454491796910, 0.547737287695610140, 0.547779119530079740, 0.547820949995101560, 0.547862779090571020, 0.547904606816383980, 0.547946433172434970, 0.547988258158619850, +0.548030081774834140, 0.548071904020973610, 0.548113724896932890, 0.548155544402607940, 0.548197362537894080, 0.548239179302687170, 0.548280994696881960, 0.548322808720374310, +0.548364621373059520, 0.548406432654833690, 0.548448242565591330, 0.548490051105228300, 0.548531858273640590, 0.548573664070722830, 0.548615468496370990, 0.548657271550480390, +0.548699073232947090, 0.548740873543665630, 0.548782672482531990, 0.548824470049441680, 0.548866266244290580, 0.548908061066973430, 0.548949854517386200, 0.548991646595424320, +0.549033437300983640, 0.549075226633959020, 0.549117014594246330, 0.549158801181741100, 0.549200586396339170, 0.549242370237935430, 0.549284152706425830, 0.549325933801705800, +0.549367713523671420, 0.549409491872217210, 0.549451268847239380, 0.549493044448633780, 0.549534818676295170, 0.549576591530119400, 0.549618363010002220, 0.549660133115839610, +0.549701901847526210, 0.549743669204957990, 0.549785435188030690, 0.549827199796640190, 0.549868963030681220, 0.549910724890049880, 0.549952485374641810, 0.549994244484352750, +0.550036002219077780, 0.550077758578712880, 0.550119513563153470, 0.550161267172295740, 0.550203019406034440, 0.550244770264265550, 0.550286519746885140, 0.550328267853788080, +0.550370014584870340, 0.550411759940027560, 0.550453503919155710, 0.550495246522149760, 0.550536987748905690, 0.550578727599319140, 0.550620466073286190, 0.550662203170701690, +0.550703938891461630, 0.550745673235461750, 0.550787406202598030, 0.550829137792765540, 0.550870868005860050, 0.550912596841777510, 0.550954324300413800, 0.550996050381663880, +0.551037775085423950, 0.551079498411589870, 0.551121220360056620, 0.551162940930720380, 0.551204660123476800, 0.551246377938221950, 0.551288094374850710, 0.551329809433259270, +0.551371523113343360, 0.551413235414998980, 0.551454946338121090, 0.551496655882605880, 0.551538364048348990, 0.551580070835246630, 0.551621776243193750, 0.551663480272086340, +0.551705182921820250, 0.551746884192291560, 0.551788584083395370, 0.551830282595027640, 0.551871979727084240, 0.551913675479461240, 0.551955369852053620, 0.551997062844757690, +0.552038754457469420, 0.552080444690083880, 0.552122133542497280, 0.552163821014605370, 0.552205507106304230, 0.552247191817488940, 0.552288875148055690, 0.552330557097900240, +0.552372237666918680, 0.552413916855006290, 0.552455594662059070, 0.552497271087972860, 0.552538946132643870, 0.552580619795967070, 0.552622292077838750, 0.552663962978154680, +0.552705632496811150, 0.552747300633703140, 0.552788967388726850, 0.552830632761778570, 0.552872296752753290, 0.552913959361547300, 0.552955620588056360, 0.552997280432176770, +0.553038938893803620, 0.553080595972833100, 0.553122251669161070, 0.553163905982683830, 0.553205558913296370, 0.553247210460895090, 0.553288860625375860, 0.553330509406634750, +0.553372156804566970, 0.553413802819068820, 0.553455447450036160, 0.553497090697365300, 0.553538732560951320, 0.553580373040690520, 0.553622012136479100, 0.553663649848212370, +0.553705286175786400, 0.553746921119097290, 0.553788554678041220, 0.553830186852513400, 0.553871817642410220, 0.553913447047627350, 0.553955075068061300, 0.553996701703607150, +0.554038326954161330, 0.554079950819619580, 0.554121573299878430, 0.554163194394832860, 0.554204814104379380, 0.554246432428413870, 0.554288049366832620, 0.554329664919530950, +0.554371279086405040, 0.554412891867351320, 0.554454503262264970, 0.554496113271042420, 0.554537721893579530, 0.554579329129772700, 0.554620934979517250, 0.554662539442709490, +0.554704142519245270, 0.554745744209021120, 0.554787344511932230, 0.554828943427874920, 0.554870540956745370, 0.554912137098439780, 0.554953731852853460, 0.554995325219882820, +0.555036917199423940, 0.555078507791373020, 0.555120096995625590, 0.555161684812077730, 0.555203271240625850, 0.555244856281166040, 0.555286439933593830, 0.555328022197805420, +0.555369603073697320, 0.555411182561164950, 0.555452760660104520, 0.555494337370412210, 0.555535912691984430, 0.555577486624716510, 0.555619059168504850, 0.555660630323245640, +0.555702200088835090, 0.555743768465168710, 0.555785335452142930, 0.555826901049653820, 0.555868465257597810, 0.555910028075870310, 0.555951589504367740, 0.555993149542986180, +0.556034708191622040, 0.556076265450170860, 0.556117821318528940, 0.556159375796592910, 0.556200928884257980, 0.556242480581420780, 0.556284030887977400, 0.556325579803824240, +0.556367127328856850, 0.556408673462971630, 0.556450218206064660, 0.556491761558032590, 0.556533303518770730, 0.556574844088175590, 0.556616383266143270, 0.556657921052570500, +0.556699457447352500, 0.556740992450385770, 0.556782526061566640, 0.556824058280791620, 0.556865589107956030, 0.556907118542956490, 0.556948646585689430, 0.556990173236050490, +0.557031698493936080, 0.557073222359242390, 0.557114744831866070, 0.557156265911702530, 0.557197785598648300, 0.557239303892599570, 0.557280820793452980, 0.557322336301103950, +0.557363850415449110, 0.557405363136384670, 0.557446874463807140, 0.557488384397612060, 0.557529892937696060, 0.557571400083955340, 0.557612905836286420, 0.557654410194584840, +0.557695913158747340, 0.557737414728670000, 0.557778914904249470, 0.557820413685381270, 0.557861911071962150, 0.557903407063888520, 0.557944901661056040, 0.557986394863361320, +0.558027886670700580, 0.558069377082970550, 0.558110866100066660, 0.558152353721885540, 0.558193839948323610, 0.558235324779277510, 0.558276808214642650, 0.558318290254315790, +0.558359770898193110, 0.558401250146171480, 0.558442727998146320, 0.558484204454014370, 0.558525679513671940, 0.558567153177015660, 0.558608625443941080, 0.558650096314344920, +0.558691565788123960, 0.558733033865173700, 0.558774500545390800, 0.558815965828671770, 0.558857429714913030, 0.558898892204010460, 0.558940353295860670, 0.558981812990359870, +0.559023271287405030, 0.559064728186891570, 0.559106183688716340, 0.559147637792775650, 0.559189090498966260, 0.559230541807183680, 0.559271991717324890, 0.559313440229285970, +0.559354887342963900, 0.559396333058254200, 0.559437777375053740, 0.559479220293259140, 0.559520661812766160, 0.559562101933471560, 0.559603540655271630, 0.559644977978063230, +0.559686413901742010, 0.559727848426204820, 0.559769281551347970, 0.559810713277068220, 0.559852143603261410, 0.559893572529824190, 0.559935000056653090, 0.559976426183644740, +0.560017850910695110, 0.560059274237700740, 0.560100696164558260, 0.560142116691164430, 0.560183535817414870, 0.560224953543206450, 0.560266369868436030, 0.560307784792999360, +0.560349198316793200, 0.560390610439714050, 0.560432021161658800, 0.560473430482523070, 0.560514838402203730, 0.560556244920597300, 0.560597650037600650, 0.560639053753109520, +0.560680456067020770, 0.560721856979230830, 0.560763256489636650, 0.560804654598134000, 0.560846051304619620, 0.560887446608990260, 0.560928840511142560, 0.560970233010972370, +0.561011624108376570, 0.561053013803251790, 0.561094402095494770, 0.561135788985001490, 0.561177174471668590, 0.561218558555393270, 0.561259941236071040, 0.561301322513599100, +0.561342702387873760, 0.561384080858791990, 0.561425457926249760, 0.561466833590143820, 0.561508207850370810, 0.561549580706827700, 0.561590952159410240, 0.561632322208015400, +0.561673690852539710, 0.561715058092880250, 0.561756423928932660, 0.561797788360594020, 0.561839151387760970, 0.561880513010330370, 0.561921873228198200, 0.561963232041261310, +0.562004589449416670, 0.562045945452560260, 0.562087300050588930, 0.562128653243399330, 0.562170005030888540, 0.562211355412952310, 0.562252704389487710, 0.562294051960391280, +0.562335398125560220, 0.562376742884890260, 0.562418086238278380, 0.562459428185621340, 0.562500768726816090, 0.562542107861758510, 0.562583445590345680, 0.562624781912474230, +0.562666116828041240, 0.562707450336942580, 0.562748782439075220, 0.562790113134336360, 0.562831442422621730, 0.562872770303828650, 0.562914096777853530, 0.562955421844593570, +0.562996745503944740, 0.563038067755804010, 0.563079388600068120, 0.563120708036634050, 0.563162026065397890, 0.563203342686256710, 0.563244657899107160, 0.563285971703846310, +0.563327284100370140, 0.563368595088575840, 0.563409904668359940, 0.563451212839619740, 0.563492519602251110, 0.563533824956151230, 0.563575128901216750, 0.563616431437344740, +0.563657732564431410, 0.563699032282373610, 0.563740330591068650, 0.563781627490412610, 0.563822922980302340, 0.563864217060634830, 0.563905509731307150, 0.563946800992215390, +0.563988090843256520, 0.564029379284327500, 0.564070666315325320, 0.564111951936146160, 0.564153236146687110, 0.564194518946845030, 0.564235800336516880, 0.564277080315598980, +0.564318358883988400, 0.564359636041581900, 0.564400911788276560, 0.564442186123968680, 0.564483459048555350, 0.564524730561933640, 0.564566000663999870, 0.564607269354651000, +0.564648536633784000, 0.564689802501295970, 0.564731066957083190, 0.564772330001042660, 0.564813591633071320, 0.564854851853066280, 0.564896110660923820, 0.564937368056541160, +0.564978624039815020, 0.565019878610642620, 0.565061131768920260, 0.565102383514545000, 0.565143633847413730, 0.565184882767423850, 0.565226130274471330, 0.565267376368453590, +0.565308621049267710, 0.565349864316809890, 0.565391106170977430, 0.565432346611667190, 0.565473585638776480, 0.565514823252201370, 0.565556059451839290, 0.565597294237586980, +0.565638527609341860, 0.565679759567000010, 0.565720990110458730, 0.565762219239615120, 0.565803446954366240, 0.565844673254608300, 0.565885898140238820, 0.565927121611154550, +0.565968343667252790, 0.566009564308429860, 0.566050783534582940, 0.566092001345609550, 0.566133217741405680, 0.566174432721868850, 0.566215646286895910, 0.566256858436384180, +0.566298069170229960, 0.566339278488330540, 0.566380486390583030, 0.566421692876884600, 0.566462897947131560, 0.566504101601221330, 0.566545303839050770, 0.566586504660517300, +0.566627704065517320, 0.566668902053947930, 0.566710098625706430, 0.566751293780690000, 0.566792487518794960, 0.566833679839918720, 0.566874870743958260, 0.566916060230810980, +0.566957248300373200, 0.566998434952542210, 0.567039620187215650, 0.567080804004289620, 0.567121986403661520, 0.567163167385228540, 0.567204346948887990, 0.567245525094536180, +0.567286701822070530, 0.567327877131388100, 0.567369051022386440, 0.567410223494961730, 0.567451394549011500, 0.567492564184432840, 0.567533732401123040, 0.567574899198978520, +0.567616064577896820, 0.567657228537774890, 0.567698391078510280, 0.567739552199999390, 0.567780711902139630, 0.567821870184828330, 0.567863027047962100, 0.567904182491438260, +0.567945336515154000, 0.567986489119006730, 0.568027640302892880, 0.568068790066709850, 0.568109938410354950, 0.568151085333725490, 0.568192230836717990, 0.568233374919229980, +0.568274517581158430, 0.568315658822401090, 0.568356798642854160, 0.568397937042415150, 0.568439074020981370, 0.568480209578450250, 0.568521343714718300, 0.568562476429682940, +0.568603607723241810, 0.568644737595291220, 0.568685866045728790, 0.568726993074451740, 0.568768118681357570, 0.568809242866342710, 0.568850365629304800, 0.568891486970140910, +0.568932606888748690, 0.568973725385024550, 0.569014842458866130, 0.569055958110170620, 0.569097072338835550, 0.569138185144757450, 0.569179296527833940, 0.569220406487962130, +0.569261515025039630, 0.569302622138963100, 0.569343727829629940, 0.569384832096937470, 0.569425934940783310, 0.569467036361063880, 0.569508136357676830, 0.569549234930519900, +0.569590332079489500, 0.569631427804483280, 0.569672522105398430, 0.569713614982132690, 0.569754706434582590, 0.569795796462645670, 0.569836885066219210, 0.569877972245200980, +0.569919057999487390, 0.569960142328976180, 0.570001225233564670, 0.570042306713150370, 0.570083386767630040, 0.570124465396901200, 0.570165542600861160, 0.570206618379407670, +0.570247692732437250, 0.570288765659847650, 0.570329837161536400, 0.570370907237400250, 0.570411975887336830, 0.570453043111243450, 0.570494108909017860, 0.570535173280556700, +0.570576236225757480, 0.570617297744517750, 0.570658357836735020, 0.570699416502306160, 0.570740473741128680, 0.570781529553100130, 0.570822583938118020, 0.570863636896079110, +0.570904688426881140, 0.570945738530421410, 0.570986787206597680, 0.571027834455306690, 0.571068880276446090, 0.571109924669913620, 0.571150967635605910, 0.571192009173420940, +0.571233049283255800, 0.571274087965008450, 0.571315125218575530, 0.571356161043854890, 0.571397195440743740, 0.571438228409139940, 0.571479259948940220, 0.571520290060042460, +0.571561318742343840, 0.571602345995742330, 0.571643371820134690, 0.571684396215418560, 0.571725419181491330, 0.571766440718251000, 0.571807460825594190, 0.571848479503418770, +0.571889496751622480, 0.571930512570102080, 0.571971526958755420, 0.572012539917479910, 0.572053551446173540, 0.572094561544732820, 0.572135570213055720, 0.572176577451039670, +0.572217583258582520, 0.572258587635581020, 0.572299590581933140, 0.572340592097536290, 0.572381592182288230, 0.572422590836085930, 0.572463588058827130, 0.572504583850409250, +0.572545578210730380, 0.572586571139687250, 0.572627562637177620, 0.572668552703099020, 0.572709541337349530, 0.572750528539825780, 0.572791514310425630, 0.572832498649047170, +0.572873481555587040, 0.572914463029943200, 0.572955443072013180, 0.572996421681694960, 0.573037398858885380, 0.573078374603482210, 0.573119348915383190, 0.573160321794486060, +0.573201293240687800, 0.573242263253886280, 0.573283231833979220, 0.573324198980864290, 0.573365164694438660, 0.573406128974599970, 0.573447091821245980, 0.573488053234274760, +0.573529013213582850, 0.573569971759068540, 0.573610928870629590, 0.573651884548163070, 0.573692838791566740, 0.573733791600738340, 0.573774742975575850, 0.573815692915976120, +0.573856641421837120, 0.573897588493056500, 0.573938534129532330, 0.573979478331161470, 0.574020421097841900, 0.574061362429471260, 0.574102302325947610, 0.574143240787167830, +0.574184177813029880, 0.574225113403431520, 0.574266047558270820, 0.574306980277444530, 0.574347911560850850, 0.574388841408387750, 0.574429769819952200, 0.574470696795442160, +0.574511622334755500, 0.574552546437790080, 0.574593469104442870, 0.574634390334612060, 0.574675310128195280, 0.574716228485090520, 0.574757145405194850, 0.574798060888406350, +0.574838974934622660, 0.574879887543741970, 0.574920798715661150, 0.574961708450278270, 0.575002616747491200, 0.575043523607197900, 0.575084429029295460, 0.575125333013681960, +0.575166235560255150, 0.575207136668913100, 0.575248036339552790, 0.575288934572072420, 0.575329831366370060, 0.575370726722342800, 0.575411620639888710, 0.575452513118905550, +0.575493404159291510, 0.575534293760943560, 0.575575181923759890, 0.575616068647638260, 0.575656953932476840, 0.575697837778172630, 0.575738720184623910, 0.575779601151728330, +0.575820480679384070, 0.575861358767488340, 0.575902235415939100, 0.575943110624634320, 0.575983984393472200, 0.576024856722349600, 0.576065727611165030, 0.576106597059816370, +0.576147465068200910, 0.576188331636216860, 0.576229196763761830, 0.576270060450734260, 0.576310922697031210, 0.576351783502550790, 0.576392642867190940, 0.576433500790849870, +0.576474357273424660, 0.576515212314813510, 0.576556065914914370, 0.576596918073625450, 0.576637768790843830, 0.576678618066467810, 0.576719465900395250, 0.576760312292524450, +0.576801157242752380, 0.576842000750977470, 0.576882842817098010, 0.576923683441010970, 0.576964522622614770, 0.577005360361807270, 0.577046196658486670, 0.577087031512550250, +0.577127864923896230, 0.577168696892422560, 0.577209527418027560, 0.577250356500608300, 0.577291184140063200, 0.577332010336290110, 0.577372835089187460, 0.577413658398652220, +0.577454480264582900, 0.577495300686877380, 0.577536119665433940, 0.577576937200149910, 0.577617753290923460, 0.577658567937653020, 0.577699381140235780, 0.577740192898570150, +0.577781003212553990, 0.577821812082085720, 0.577862619507062520, 0.577903425487382720, 0.577944230022944480, 0.577985033113645910, 0.578025834759384520, 0.578066634960058390, +0.578107433715565830, 0.578148231025804930, 0.578189026890673090, 0.578229821310068730, 0.578270614283889820, 0.578311405812034770, 0.578352195894400790, 0.578392984530886280, +0.578433771721389430, 0.578474557465808450, 0.578515341764040620, 0.578556124615984600, 0.578596906021538570, 0.578637685980599840, 0.578678464493066920, 0.578719241558837920, +0.578760017177811110, 0.578800791349883940, 0.578841564074954800, 0.578882335352921660, 0.578923105183683170, 0.578963873567136410, 0.579004640503180120, 0.579045405991712170, +0.579086170032630960, 0.579126932625834150, 0.579167693771219900, 0.579208453468686430, 0.579249211718132150, 0.579289968519454580, 0.579330723872552020, 0.579371477777323010, +0.579412230233664950, 0.579452981241476260, 0.579493730800655140, 0.579534478911100100, 0.579575225572708570, 0.579615970785378850, 0.579656714549009240, 0.579697456863498270, +0.579738197728743240, 0.579778937144642680, 0.579819675111094780, 0.579860411627998170, 0.579901146695250060, 0.579941880312749070, 0.579982612480393510, 0.580023343198081690, +0.580064072465711120, 0.580104800283180340, 0.580145526650387990, 0.580186251567231470, 0.580226975033609320, 0.580267697049419720, 0.580308417614561310, 0.580349136728931400, +0.580389854392428630, 0.580430570604951290, 0.580471285366397920, 0.580511998676665810, 0.580552710535653830, 0.580593420943260050, 0.580634129899383120, 0.580674837403920450, +0.580715543456770790, 0.580756248057832100, 0.580796951207003250, 0.580837652904181660, 0.580878353149265950, 0.580919051942154320, 0.580959749282745410, 0.581000445170936850, +0.581041139606627070, 0.581081832589714910, 0.581122524120097680, 0.581163214197674250, 0.581203902822342800, 0.581244589994001860, 0.581285275712549070, 0.581325959977883170, +0.581366642789902350, 0.581407324148505270, 0.581448004053589540, 0.581488682505053810, 0.581529359502796380, 0.581570035046715890, 0.581610709136709870, 0.581651381772677170, +0.581692052954515980, 0.581732722682125060, 0.581773390955401930, 0.581814057774245440, 0.581854723138554020, 0.581895387048225520, 0.581936049503158470, 0.581976710503251390, +0.582017370048402820, 0.582058028138510490, 0.582098684773473040, 0.582139339953189010, 0.582179993677556910, 0.582220645946474490, 0.582261296759840400, 0.582301946117553040, +0.582342594019511270, 0.582383240465612630, 0.582423885455755850, 0.582464528989839360, 0.582505171067762010, 0.582545811689421320, 0.582586450854716050, 0.582627088563545060, +0.582667724815805980, 0.582708359611397550, 0.582748992950218200, 0.582789624832166790, 0.582830255257140940, 0.582870884225039520, 0.582911511735760830, 0.582952137789203630, +0.582992762385265870, 0.583033385523846090, 0.583074007204842930, 0.583114627428155120, 0.583155246193680310, 0.583195863501317470, 0.583236479350964900, 0.583277093742521570, +0.583317706675885010, 0.583358318150954290, 0.583398928167628170, 0.583439536725804290, 0.583480143825381600, 0.583520749466258540, 0.583561353648333950, 0.583601956371505690, +0.583642557635672410, 0.583683157440732850, 0.583723755786585750, 0.583764352673128760, 0.583804948100261070, 0.583845542067880970, 0.583886134575887230, 0.583926725624178020, +0.583967315212651880, 0.584007903341207450, 0.584048490009743570, 0.584089075218158120, 0.584129658966350050, 0.584170241254217790, 0.584210822081660310, 0.584251401448575460, +0.584291979354861990, 0.584332555800419100, 0.584373130785144300, 0.584413704308936690, 0.584454276371694890, 0.584494846973317770, 0.584535416113703080, 0.584575983792749890, +0.584616550010356840, 0.584657114766422680, 0.584697678060845380, 0.584738239893523800, 0.584778800264356800, 0.584819359173243010, 0.584859916620080520, 0.584900472604768300, +0.584941027127204750, 0.584981580187289070, 0.585022131784919130, 0.585062681919993890, 0.585103230592412200, 0.585143777802072050, 0.585184323548872510, 0.585224867832712210, +0.585265410653490030, 0.585305952011104020, 0.585346491905453070, 0.585387030336435910, 0.585427567303951620, 0.585468102807897960, 0.585508636848174110, 0.585549169424678610, +0.585589700537310520, 0.585630230185967830, 0.585670758370549600, 0.585711285090954490, 0.585751810347081460, 0.585792334138828590, 0.585832856466094950, 0.585873377328779420, +0.585913896726780180, 0.585954414659996090, 0.585994931128326010, 0.586035446131669020, 0.586075959669922990, 0.586116471742987090, 0.586156982350759970, 0.586197491493140820, +0.586237999170027500, 0.586278505381319200, 0.586319010126914670, 0.586359513406713000, 0.586400015220612140, 0.586440515568511290, 0.586481014450309090, 0.586521511865904840, +0.586562007815196300, 0.586602502298082750, 0.586642995314463070, 0.586683486864236100, 0.586723976947300160, 0.586764465563554330, 0.586804952712897570, 0.586845438395228070, +0.586885922610445030, 0.586926405358447200, 0.586966886639133770, 0.587007366452402590, 0.587047844798153080, 0.587088321676284000, 0.587128797086694520, 0.587169271029282620, +0.587209743503947500, 0.587250214510588010, 0.587290684049103450, 0.587331152119391800, 0.587371618721352130, 0.587412083854883530, 0.587452547519885070, 0.587493009716254950, +0.587533470443892150, 0.587573929702696170, 0.587614387492564890, 0.587654843813397720, 0.587695298665093510, 0.587735752047551240, 0.587776203960669320, 0.587816654404346940, +0.587857103378482850, 0.587897550882976460, 0.587937996917725750, 0.587978441482630010, 0.588018884577588220, 0.588059326202499570, 0.588099766357262240, 0.588140205041775550, +0.588180642255938250, 0.588221077999649730, 0.588261512272808210, 0.588301945075312860, 0.588342376407063110, 0.588382806267956910, 0.588423234657893810, 0.588463661576772550, +0.588504087024492530, 0.588544511000951950, 0.588584933506050010, 0.588625354539685790, 0.588665774101758580, 0.588706192192166580, 0.588746608810808980, 0.588787023957584980, +0.588827437632393760, 0.588867849835133520, 0.588908260565703780, 0.588948669824003290, 0.588989077609931470, 0.589029483923386610, 0.589069888764268130, 0.589110292132475230, +0.589150694027906210, 0.589191094450460470, 0.589231493400037000, 0.589271890876535200, 0.589312286879853260, 0.589352681409890610, 0.589393074466546210, 0.589433466049719580, +0.589473856159308920, 0.589514244795213530, 0.589554631957332600, 0.589595017645565430, 0.589635401859810340, 0.589675784599966720, 0.589716165865933780, 0.589756545657610600, +0.589796923974895800, 0.589837300817688700, 0.589877676185888270, 0.589918050079394130, 0.589958422498104370, 0.589998793441918630, 0.590039162910736330, 0.590079530904455640, +0.590119897422976210, 0.590160262466197020, 0.590200626034017460, 0.590240988126336070, 0.590281348743052160, 0.590321707884064910, 0.590362065549273620, 0.590402421738576930, +0.590442776451874260, 0.590483129689064470, 0.590523481450047290, 0.590563831734721160, 0.590604180542985360, 0.590644527874739090, 0.590684873729881880, 0.590725218108312020, +0.590765561009929270, 0.590805902434632930, 0.590846242382321420, 0.590886580852894360, 0.590926917846250840, 0.590967253362290390, 0.591007587400911530, 0.591047919962013560, +0.591088251045495780, 0.591128580651257840, 0.591168908779198030, 0.591209235429216000, 0.591249560601210810, 0.591289884295082110, 0.591330206510728430, 0.591370527248049060, +0.591410846506943530, 0.591451164287311150, 0.591491480589050540, 0.591531795412061130, 0.591572108756242780, 0.591612420621493660, 0.591652731007713540, 0.591693039914801490, +0.591733347342657370, 0.591773653291179370, 0.591813957760267350, 0.591854260749820390, 0.591894562259738130, 0.591934862289919090, 0.591975160840262920, 0.592015457910668900, +0.592055753501036450, 0.592096047611264440, 0.592136340241252170, 0.592176631390899040, 0.592216921060104820, 0.592257209248767900, 0.592297495956787930, 0.592337781184064220, +0.592378064930496380, 0.592418347195983070, 0.592458627980423810, 0.592498907283718460, 0.592539185105765420, 0.592579461446464340, 0.592619736305714740, 0.592660009683416140, +0.592700281579467080, 0.592740551993767410, 0.592780820926216310, 0.592821088376713550, 0.592861354345157630, 0.592901618831448430, 0.592941881835485020, 0.592982143357167370, +0.593022403396394000, 0.593062661953064670, 0.593102919027078680, 0.593143174618335660, 0.593183428726734460, 0.593223681352174630, 0.593263932494555890, 0.593304182153777000, +0.593344430329737720, 0.593384677022337330, 0.593424922231475580, 0.593465165957051230, 0.593505408198963910, 0.593545648957113040, 0.593585888231398460, 0.593626126021718830, +0.593666362327973870, 0.593706597150062910, 0.593746830487885900, 0.593787062341341490, 0.593827292710329300, 0.593867521594748980, 0.593907748994500160, 0.593947974909481700, +0.593988199339593240, 0.594028422284734630, 0.594068643744804610, 0.594108863719702950, 0.594149082209329160, 0.594189299213583100, 0.594229514732363300, 0.594269728765569830, +0.594309941313102000, 0.594350152374859660, 0.594390361950741570, 0.594430570040647590, 0.594470776644477120, 0.594510981762130130, 0.594551185393505380, 0.594591387538502600, +0.594631588197021330, 0.594671787368961540, 0.594711985054221850, 0.594752181252702240, 0.594792375964302460, 0.594832569188921470, 0.594872760926459020, 0.594912951176814640, +0.594953139939888300, 0.594993327215578740, 0.595033513003785820, 0.595073697304409180, 0.595113880117348560, 0.595154061442502940, 0.595194241279772160, 0.595234419629055770, +0.595274596490253720, 0.595314771863264870, 0.595354945747988970, 0.595395118144325770, 0.595435289052175130, 0.595475458471435900, 0.595515626402008060, 0.595555792843791120, +0.595595957796685060, 0.595636121260588740, 0.595676283235402120, 0.595716443721025170, 0.595756602717356640, 0.595796760224296730, 0.595836916241744950, 0.595877070769601170, +0.595917223807764350, 0.595957375356134470, 0.595997525414611150, 0.596037673983094370, 0.596077821061483100, 0.596117966649677200, 0.596158110747576410, 0.596198253355080810, +0.596238394472089040, 0.596278534098501400, 0.596318672234217420, 0.596358808879137060, 0.596398944033159410, 0.596439077696184320, 0.596479209868111980, 0.596519340548841150, +0.596559469738272010, 0.596599597436304200, 0.596639723642837790, 0.596679848357771660, 0.596719971581005870, 0.596760093312440290, 0.596800213551974770, 0.596840332299508280, +0.596880449554941020, 0.596920565318172720, 0.596960679589103260, 0.597000792367631710, 0.597040903653658250, 0.597081013447082530, 0.597121121747804630, 0.597161228555723620, +0.597201333870739480, 0.597241437692752290, 0.597281540021661230, 0.597321640857366280, 0.597361740199767290, 0.597401838048764340, 0.597441934404256300, 0.597482029266143580, +0.597522122634325690, 0.597562214508702840, 0.597602304889174100, 0.597642393775639660, 0.597682481167999160, 0.597722567066152900, 0.597762651469999850, 0.597802734379440090, +0.597842815794373590, 0.597882895714700320, 0.597922974140319470, 0.597963051071131240, 0.598003126507035350, 0.598043200447932020, 0.598083272893720320, 0.598123343844300440, +0.598163413299572570, 0.598203481259435790, 0.598243547723790290, 0.598283612692535940, 0.598323676165572920, 0.598363738142800310, 0.598403798624118410, 0.598443857609427090, +0.598483915098626310, 0.598523971091615480, 0.598564025588294690, 0.598604078588563900, 0.598644130092323200, 0.598684180099471890, 0.598724228609910040, 0.598764275623537730, +0.598804321140254950, 0.598844365159961090, 0.598884407682556350, 0.598924448707940930, 0.598964488236014000, 0.599004526266675890, 0.599044562799826430, 0.599084597835365830, +0.599124631373193490, 0.599164663413209620, 0.599204693955313950, 0.599244722999407010, 0.599284750545387880, 0.599324776593156860, 0.599364801142613920, 0.599404824193659370, +0.599444845746192280, 0.599484865800113180, 0.599524884355321920, 0.599564901411718810, 0.599604916969203040, 0.599644931027674910, 0.599684943587034950, 0.599724954647182230, +0.599764964208017060, 0.599804972269439520, 0.599844978831349910, 0.599884983893647530, 0.599924987456232680, 0.599964989519005340, 0.600004990081865920, 0.600044989144713600, +0.600084986707448810, 0.600124982769971620, 0.600164977332182330, 0.600204970393980240, 0.600244961955265670, 0.600284952015938680, 0.600324940575899690, 0.600364927635048010, +0.600404913193284040, 0.600444897250507760, 0.600484879806619580, 0.600524860861518790, 0.600564840415105940, 0.600604818467281310, 0.600644795017944320, 0.600684770066995280, +0.600724743614334370, 0.600764715659861890, 0.600804686203477380, 0.600844655245081020, 0.600884622784573110, 0.600924588821853960, 0.600964553356822970, 0.601004516389380680, +0.601044477919427060, 0.601084437946862500, 0.601124396471586550, 0.601164353493499730, 0.601204309012501880, 0.601244263028493650, 0.601284215541374460, 0.601324166551044700, +0.601364116057404810, 0.601404064060354400, 0.601444010559793680, 0.601483955555623060, 0.601523899047742840, 0.601563841036052540, 0.601603781520452690, 0.601643720500843250, +0.601683657977124970, 0.601723593949197170, 0.601763528416960460, 0.601803461380314820, 0.601843392839160880, 0.601883322793398180, 0.601923251242927120, 0.601963178187648000, +0.602003103627461230, 0.602043027562266350, 0.602082949991963880, 0.602122870916454330, 0.602162790335637350, 0.602202708249413470, 0.602242624657682630, 0.602282539560345720, +0.602322452957302020, 0.602362364848452290, 0.602402275233696600, 0.602442184112935600, 0.602482091486068680, 0.602521997352996610, 0.602561901713619560, 0.602601804567838070, +0.602641705915551770, 0.602681605756661190, 0.602721504091066510, 0.602761400918668590, 0.602801296239366620, 0.602841190053061580, 0.602881082359653760, 0.602920973159043030, +0.602960862451129790, 0.603000750235814450, 0.603040636512997550, 0.603080521282578720, 0.603120404544458480, 0.603160286298537350, 0.603200166544715870, 0.603240045282893540, +0.603279922512971130, 0.603319798234848940, 0.603359672448427590, 0.603399545153606720, 0.603439416350286970, 0.603479286038368650, 0.603519154217752480, 0.603559020888338130, +0.603598886050026100, 0.603638749702717030, 0.603678611846311330, 0.603718472480708760, 0.603758331605810050, 0.603798189221515850, 0.603838045327725780, 0.603877899924340600, +0.603917753011260720, 0.603957604588386760, 0.603997454655618490, 0.604037303212856540, 0.604077150260001310, 0.604116995796953550, 0.604156839823613010, 0.604196682339880330, +0.604236523345656030, 0.604276362840840740, 0.604316200825334100, 0.604356037299037090, 0.604395872261849880, 0.604435705713673330, 0.604475537654407310, 0.604515368083952340, +0.604555197002209280, 0.604595024409077860, 0.604634850304458960, 0.604674674688252870, 0.604714497560360550, 0.604754318920681540, 0.604794138769116700, 0.604833957105566640, +0.604873773929931910, 0.604913589242112470, 0.604953403042009060, 0.604993215329522100, 0.605033026104552450, 0.605072835366999960, 0.605112643116765270, 0.605152449353749010, +0.605192254077852040, 0.605232057288974110, 0.605271858987015960, 0.605311659171878460, 0.605351457843461560, 0.605391255001666020, 0.605431050646392240, 0.605470844777541320, +0.605510637395012870, 0.605550428498707770, 0.605590218088526640, 0.605630006164370350, 0.605669792726138630, 0.605709577773732470, 0.605749361307052370, 0.605789143325999310, +0.605828923830472930, 0.605868702820374190, 0.605908480295603850, 0.605948256256062520, 0.605988030701650300, 0.606027803632267940, 0.606067575047816050, 0.606107344948195630, +0.606147113333306510, 0.606186880203049560, 0.606226645557325750, 0.606266409396035040, 0.606306171719078190, 0.606345932526356050, 0.606385691817769360, 0.606425449593218090, +0.606465205852603220, 0.606504960595825260, 0.606544713822785300, 0.606584465533383190, 0.606624215727520010, 0.606663964405096180, 0.606703711566012880, 0.606743457210169870, +0.606783201337468210, 0.606822943947808670, 0.606862685041091980, 0.606902424617218330, 0.606942162676088580, 0.606981899217603700, 0.607021634241663780, 0.607061367748169770, +0.607101099737022420, 0.607140830208122590, 0.607180559161370370, 0.607220286596666710, 0.607260012513912370, 0.607299736913008310, 0.607339459793854620, 0.607379181156352250, +0.607418901000401860, 0.607458619325904610, 0.607498336132760500, 0.607538051420870580, 0.607577765190135510, 0.607617477440456350, 0.607657188171733090, 0.607696897383866900, +0.607736605076758860, 0.607776311250308950, 0.607816015904418250, 0.607855719038987500, 0.607895420653917770, 0.607935120749109160, 0.607974819324462850, 0.608014516379879360, +0.608054211915259990, 0.608093905930504720, 0.608133598425514620, 0.608173289400190660, 0.608212978854433710, 0.608252666788144050, 0.608292353201222660, 0.608332038093570390, +0.608371721465088440, 0.608411403315676780, 0.608451083645236700, 0.608490762453669180, 0.608530439740874400, 0.608570115506753550, 0.608609789751207390, 0.608649462474137090, +0.608689133675442860, 0.608728803355025770, 0.608768471512786570, 0.608808138148626670, 0.608847803262446030, 0.608887466854145850, 0.608927128923626990, 0.608966789470790750, +0.609006448495537090, 0.609046105997767430, 0.609085761977382400, 0.609125416434283310, 0.609165069368370340, 0.609204720779544790, 0.609244370667707310, 0.609284019032759310, +0.609323665874600960, 0.609363311193133360, 0.609402954988257920, 0.609442597259874600, 0.609482238007884920, 0.609521877232189650, 0.609561514932689950, 0.609601151109286140, +0.609640785761879520, 0.609680418890370830, 0.609720050494661490, 0.609759680574651690, 0.609799309130242720, 0.609838936161335440, 0.609878561667831160, 0.609918185649630070, +0.609957808106633690, 0.609997429038742660, 0.610037048445858380, 0.610076666327881160, 0.610116282684712300, 0.610155897516253100, 0.610195510822403750, 0.610235122603065670, +0.610274732858139820, 0.610314341587527400, 0.610353948791128810, 0.610393554468845360, 0.610433158620578010, 0.610472761246228180, 0.610512362345696060, 0.610551961918882950, +0.610591559965690030, 0.610631156486018510, 0.610670751479768790, 0.610710344946842180, 0.610749936887139630, 0.610789527300562680, 0.610829116187011520, 0.610868703546387560, +0.610908289378592210, 0.610947873683525880, 0.610987456461089760, 0.611027037711185050, 0.611066617433713040, 0.611106195628574160, 0.611145772295669800, 0.611185347434900940, +0.611224921046169210, 0.611264493129374700, 0.611304063684419030, 0.611343632711203180, 0.611383200209628550, 0.611422766179595680, 0.611462330621005750, 0.611501893533760050, +0.611541454917760020, 0.611581014772905940, 0.611620573099099340, 0.611660129896241410, 0.611699685164233340, 0.611739238902975770, 0.611778791112370100, 0.611818341792317870, +0.611857890942719360, 0.611897438563476110, 0.611936984654489310, 0.611976529215660480, 0.612016072246889810, 0.612055613748079040, 0.612095153719129260, 0.612134692159941980, +0.612174229070417520, 0.612213764450457500, 0.612253298299963110, 0.612292830618835770, 0.612332361406976110, 0.612371890664285430, 0.612411418390665040, 0.612450944586016570, +0.612490469250240310, 0.612529992383237800, 0.612569513984910770, 0.612609034055159540, 0.612648552593885840, 0.612688069600990650, 0.612727585076375590, 0.612767099019941310, +0.612806611431589320, 0.612846122311220710, 0.612885631658737220, 0.612925139474039150, 0.612964645757028360, 0.613004150507605930, 0.613043653725673490, 0.613083155411131560, +0.613122655563881790, 0.613162154183825250, 0.613201651270863790, 0.613241146824897830, 0.613280640845829010, 0.613320133333558950, 0.613359624287988070, 0.613399113709018230, +0.613438601596550610, 0.613478087950486860, 0.613517572770727490, 0.613557056057174250, 0.613596537809728340, 0.613636018028291490, 0.613675496712764110, 0.613714973863048070, +0.613754449479044560, 0.613793923560655320, 0.613833396107780980, 0.613872867120323070, 0.613912336598183010, 0.613951804541262410, 0.613991270949461930, 0.614030735822683420, +0.614070199160828280, 0.614109660963797380, 0.614149121231492230, 0.614188579963814370, 0.614228037160665430, 0.614267492821945930, 0.614306946947557830, 0.614346399537402220, +0.614385850591381070, 0.614425300109394890, 0.614464748091345550, 0.614504194537134230, 0.614543639446662790, 0.614583082819831980, 0.614622524656543430, 0.614661964956698560, +0.614701403720199100, 0.614740840946945810, 0.614780276636840430, 0.614819710789784260, 0.614859143405679260, 0.614898574484426090, 0.614938004025926350, 0.614977432030082040, +0.615016858496793770, 0.615056283425963410, 0.615095706817492260, 0.615135128671282280, 0.615174548987234120, 0.615213967765249500, 0.615253385005230080, 0.615292800707077480, +0.615332214870692450, 0.615371627495976960, 0.615411038582832410, 0.615450448131160680, 0.615489856140862380, 0.615529262611839490, 0.615568667543993420, 0.615608070937226030, +0.615647472791438060, 0.615686873106531470, 0.615726271882408030, 0.615765669118968570, 0.615805064816114970, 0.615844458973748730, 0.615883851591771610, 0.615923242670084580, +0.615962632208589380, 0.616002020207187640, 0.616041406665781110, 0.616080791584270870, 0.616120174962558550, 0.616159556800545790, 0.616198937098134560, 0.616238315855225590, +0.616277693071720760, 0.616317068747521790, 0.616356442882530550, 0.616395815476647680, 0.616435186529775470, 0.616474556041815450, 0.616513924012668800, 0.616553290442237390, +0.616592655330422620, 0.616632018677126690, 0.616671380482250340, 0.616710740745695430, 0.616750099467363810, 0.616789456647157230, 0.616828812284976660, 0.616868166380723950, +0.616907518934300960, 0.616946869945609540, 0.616986219414550560, 0.617025567341025980, 0.617064913724937550, 0.617104258566187110, 0.617143601864675760, 0.617182943620305350, +0.617222283832977610, 0.617261622502594420, 0.617300959629056960, 0.617340295212267080, 0.617379629252126750, 0.617418961748537050, 0.617458292701399850, 0.617497622110616980, +0.617536949976090430, 0.617576276297721160, 0.617615601075411140, 0.617654924309062210, 0.617694245998576250, 0.617733566143854330, 0.617772884744798520, 0.617812201801310470, +0.617851517313292240, 0.617890831280644930, 0.617930143703270480, 0.617969454581070780, 0.618008763913947660, 0.618048071701802430, 0.618087377944536830, 0.618126682642053280, +0.618165985794252640, 0.618205287401037080, 0.618244587462308150, 0.618283885977968240, 0.618323182947918220, 0.618362478372060260, 0.618401772250296130, 0.618441064582527900, +0.618480355368656640, 0.618519644608584440, 0.618558932302213260, 0.618598218449444960, 0.618637503050180840, 0.618676786104322970, 0.618716067611773110, 0.618755347572433450, +0.618794625986205050, 0.618833902852990110, 0.618873178172690720, 0.618912451945208050, 0.618951724170444310, 0.618990994848301220, 0.619030263978680990, 0.619069531561484700, +0.619108797596614640, 0.619148062083972550, 0.619187325023460740, 0.619226586414980180, 0.619265846258433170, 0.619305104553721560, 0.619344361300747550, 0.619383616499412320, +0.619422870149617940, 0.619462122251266400, 0.619501372804259990, 0.619540621808499780, 0.619579869263887970, 0.619619115170326860, 0.619658359527717640, 0.619697602335962490, +0.619736843594963280, 0.619776083304622420, 0.619815321464840970, 0.619854558075521140, 0.619893793136565010, 0.619933026647874750, 0.619972258609351570, 0.620011489020897640, +0.620050717882415060, 0.620089945193806000, 0.620129170954971780, 0.620168395165814680, 0.620207617826236460, 0.620246838936139630, 0.620286058495425400, 0.620325276503995940, +0.620364492961753330, 0.620403707868599770, 0.620442921224436670, 0.620482133029166220, 0.620521343282690820, 0.620560551984911670, 0.620599759135731180, 0.620638964735051200, +0.620678168782774260, 0.620717371278801560, 0.620756572223035370, 0.620795771615377800, 0.620834969455731130, 0.620874165743996680, 0.620913360480076840, 0.620952553663873590, +0.620991745295289220, 0.621030935374225270, 0.621070123900583910, 0.621109310874267240, 0.621148496295177650, 0.621187680163216460, 0.621226862478286180, 0.621266043240289000, +0.621305222449126340, 0.621344400104700600, 0.621383576206913980, 0.621422750755668660, 0.621461923750866170, 0.621501095192408810, 0.621540265080198770, 0.621579433414138350, +0.621618600194129070, 0.621657765420073340, 0.621696929091873020, 0.621736091209430850, 0.621775251772648140, 0.621814410781427180, 0.621853568235670280, 0.621892724135279850, +0.621931878480157190, 0.621971031270204810, 0.622010182505325250, 0.622049332185419910, 0.622088480310391210, 0.622127626880141230, 0.622166771894572590, 0.622205915353586710, +0.622245057257086010, 0.622284197604972670, 0.622323336397149210, 0.622362473633517040, 0.622401609313978700, 0.622440743438436250, 0.622479876006792440, 0.622519007018948470, +0.622558136474807070, 0.622597264374270210, 0.622636390717240640, 0.622675515503619770, 0.622714638733310010, 0.622753760406213660, 0.622792880522233360, 0.622831999081270400, +0.622871116083227540, 0.622910231528007170, 0.622949345415510950, 0.622988457745641270, 0.623027568518300550, 0.623066677733391190, 0.623105785390814740, 0.623144891490473920, +0.623183996032270810, 0.623223099016108060, 0.623262200441887290, 0.623301300309510920, 0.623340398618881350, 0.623379495369901120, 0.623418590562471840, 0.623457684196496050, +0.623496776271876050, 0.623535866788514470, 0.623574955746312830, 0.623614043145173880, 0.623653128985000140, 0.623692213265693130, 0.623731295987155710, 0.623770377149290070, +0.623809456751998730, 0.623848534795183430, 0.623887611278746810, 0.623926686202591170, 0.623965759566619150, 0.624004831370732480, 0.624043901614833580, 0.624082970298824980, +0.624122037422609300, 0.624161102986088290, 0.624200166989164360, 0.624239229431740040, 0.624278290313718070, 0.624317349634999960, 0.624356407395488590, 0.624395463595086350, +0.624434518233695330, 0.624473571311217830, 0.624512622827556490, 0.624551672782613920, 0.624590721176291890, 0.624629768008492900, 0.624668813279119610, 0.624707856988074630, +0.624746899135259600, 0.624785939720577390, 0.624824978743930280, 0.624864016205221140, 0.624903052104351600, 0.624942086441224400, 0.624981119215741950, 0.625020150427807120, +0.625059180077321530, 0.625098208164187930, 0.625137234688309170, 0.625176259649587120, 0.625215283047924290, 0.625254304883223310, 0.625293325155386830, 0.625332343864316800, +0.625371361009915860, 0.625410376592086540, 0.625449390610731570, 0.625488403065752820, 0.625527413957053020, 0.625566423284534710, 0.625605431048100740, 0.625644437247652840, +0.625683441883093770, 0.625722444954326160, 0.625761446461252760, 0.625800446403775410, 0.625839444781796870, 0.625878441595219770, 0.625917436843946960, 0.625956430527880190, +0.625995422646922320, 0.626034413200976300, 0.626073402189943780, 0.626112389613727840, 0.626151375472230990, 0.626190359765355970, 0.626229342493004660, 0.626268323655080010, +0.626307303251484540, 0.626346281282121220, 0.626385257746891910, 0.626424232645699350, 0.626463205978446180, 0.626502177745035470, 0.626541147945368860, 0.626580116579349420, +0.626619083646879680, 0.626658049147862610, 0.626697013082200050, 0.626735975449794980, 0.626774936250550250, 0.626813895484367830, 0.626852853151150800, 0.626891809250801460, +0.626930763783223100, 0.626969716748317360, 0.627008668145987440, 0.627047617976135840, 0.627086566238665430, 0.627125512933478290, 0.627164458060477490, 0.627203401619565450, +0.627242343610645240, 0.627281284033618820, 0.627320222888389290, 0.627359160174859150, 0.627398095892931380, 0.627437030042508060, 0.627475962623492260, 0.627514893635786830, +0.627553823079293750, 0.627592750953916200, 0.627631677259556820, 0.627670601996118460, 0.627709525163503310, 0.627748446761614340, 0.627787366790354300, 0.627826285249626140, +0.627865202139331950, 0.627904117459374800, 0.627943031209657220, 0.627981943390082510, 0.628020854000552630, 0.628059763040970550, 0.628098670511239020, 0.628137576411261220, +0.628176480740939120, 0.628215383500175810, 0.628254284688874120, 0.628293184306937040, 0.628332082354266520, 0.628370978830765870, 0.628409873736338160, 0.628448767070885370, +0.628487658834310790, 0.628526549026516950, 0.628565437647407020, 0.628604324696883320, 0.628643210174848700, 0.628682094081206010, 0.628720976415858560, 0.628759857178708190, +0.628798736369658330, 0.628837613988611490, 0.628876490035470970, 0.628915364510138960, 0.628954237412518550, 0.628993108742512460, 0.629031978500024010, 0.629070846684955160, +0.629109713297209330, 0.629148578336689470, 0.629187441803297890, 0.629226303696937660, 0.629265164017511760, 0.629304022764923140, 0.629342879939074230, 0.629381735539868090, +0.629420589567207590, 0.629459442020996020, 0.629498292901135460, 0.629537142207529100, 0.629575989940080020, 0.629614836098691180, 0.629653680683264990, 0.629692523693704540, +0.629731365129912900, 0.629770204991793040, 0.629809043279247470, 0.629847879992179170, 0.629886715130491550, 0.629925548694086790, 0.629964380682868200, 0.630003211096738620, +0.630042039935601370, 0.630080867199358740, 0.630119692887913920, 0.630158517001169760, 0.630197339539029790, 0.630236160501395970, 0.630274979888171830, 0.630313797699260330, +0.630352613934564540, 0.630391428593986890, 0.630430241677430780, 0.630469053184798960, 0.630507863115994940, 0.630546671470920810, 0.630585478249480080, 0.630624283451575950, +0.630663087077110830, 0.630701889125987900, 0.630740689598110360, 0.630779488493381390, 0.630818285811703290, 0.630857081552979590, 0.630895875717113140, 0.630934668304007350, +0.630973459313564520, 0.631012248745688060, 0.631051036600280950, 0.631089822877246580, 0.631128607576487370, 0.631167390697906620, 0.631206172241407400, 0.631244952206893030, +0.631283730594266010, 0.631322507403429660, 0.631361282634287040, 0.631400056286741560, 0.631438828360695540, 0.631477598856052480, 0.631516367772715800, 0.631555135110587810, +0.631593900869572010, 0.631632665049571500, 0.631671427650489560, 0.631710188672228830, 0.631748948114692510, 0.631787705977783890, 0.631826462261406370, 0.631865216965462270, +0.631903970089855220, 0.631942721634488170, 0.631981471599264770, 0.632020219984087190, 0.632058966788859200, 0.632097712013483750, 0.632136455657864360, 0.632175197721903450, +0.632213938205504530, 0.632252677108571250, 0.632291414431005780, 0.632330150172711880, 0.632368884333592510, 0.632407616913551300, 0.632446347912490770, 0.632485077330314230, +0.632523805166925080, 0.632562531422226850, 0.632601256096121830, 0.632639979188513670, 0.632678700699305650, 0.632717420628401190, 0.632756138975702820, 0.632794855741114050, +0.632833570924538180, 0.632872284525878740, 0.632910996545038240, 0.632949706981920320, 0.632988415836428400, 0.633027123108465100, 0.633065828797934050, 0.633104532904738340, +0.633143235428781700, 0.633181936369966560, 0.633220635728196650, 0.633259333503375150, 0.633298029695405610, 0.633336724304190630, 0.633375417329633980, 0.633414108771638620, +0.633452798630108390, 0.633491486904945830, 0.633530173596054570, 0.633568858703337900, 0.633607542226699350, 0.633646224166041660, 0.633684904521268470, 0.633723583292282950, +0.633762260478988760, 0.633800936081288620, 0.633839610099086180, 0.633878282532285060, 0.633916953380787800, 0.633955622644498230, 0.633994290323319550, 0.634032956417155510, +0.634071620925908740, 0.634110283849482980, 0.634148945187781420, 0.634187604940707920, 0.634226263108164990, 0.634264919690056490, 0.634303574686285620, 0.634342228096756220, +0.634380879921370820, 0.634419530160033270, 0.634458178812646880, 0.634496825879115380, 0.634535471359341520, 0.634574115253228930, 0.634612757560681360, 0.634651398281601660, +0.634690037415893360, 0.634728674963460080, 0.634767310924205350, 0.634805945298032030, 0.634844578084843960, 0.634883209284544340, 0.634921838897037020, 0.634960466922224740, +0.634999093360011370, 0.635037718210300190, 0.635076341472995190, 0.635114963147998870, 0.635153583235215200, 0.635192201734547490, 0.635230818645899700, 0.635269433969174570, +0.635308047704275740, 0.635346659851107170, 0.635385270409571600, 0.635423879379572900, 0.635462486761014470, 0.635501092553800160, 0.635539696757832840, 0.635578299373016240, +0.635616900399253780, 0.635655499836449530, 0.635694097684506240, 0.635732693943327650, 0.635771288612817290, 0.635809881692879000, 0.635848473183415750, 0.635887063084331290, +0.635925651395529260, 0.635964238116913380, 0.636002823248386530, 0.636041406789852660, 0.636079988741215630, 0.636118569102378180, 0.636157147873244400, 0.636195725053717690, +0.636234300643702120, 0.636272874643100340, 0.636311447051816410, 0.636350017869753870, 0.636388587096816670, 0.636427154732907670, 0.636465720777930730, 0.636504285231789480, +0.636542848094387880, 0.636581409365628790, 0.636619969045416180, 0.636658527133653670, 0.636697083630245240, 0.636735638535093740, 0.636774191848103020, 0.636812743569176940, +0.636851293698219360, 0.636889842235133120, 0.636928389179822310, 0.636966934532190890, 0.637005478292141710, 0.637044020459578970, 0.637082561034406080, 0.637121100016527110, +0.637159637405845140, 0.637198173202264020, 0.637236707405687500, 0.637275240016019540, 0.637313771033163110, 0.637352300457022290, 0.637390828287500710, 0.637429354524502330, +0.637467879167930350, 0.637506402217688510, 0.637544923673680760, 0.637583443535811090, 0.637621961803982450, 0.637660478478098810, 0.637698993558064480, 0.637737507043782180, +0.637776018935156230, 0.637814529232090140, 0.637853037934488110, 0.637891545042253090, 0.637930050555289290, 0.637968554473500320, 0.638007056796790260, 0.638045557525062310, +0.638084056658220430, 0.638122554196168370, 0.638161050138810300, 0.638199544486049210, 0.638238037237789380, 0.638276528393934340, 0.638315017954388390, 0.638353505919054490, +0.638391992287836940, 0.638430477060639600, 0.638468960237365880, 0.638507441817919630, 0.638545921802204820, 0.638584400190125520, 0.638622876981584930, 0.638661352176487120, +0.638699825774735940, 0.638738297776235590, 0.638776768180889130, 0.638815236988600650, 0.638853704199274230, 0.638892169812813830, 0.638930633829122630, 0.638969096248104830, +0.639007557069664280, 0.639046016293705280, 0.639084473920130790, 0.639122929948845230, 0.639161384379752230, 0.639199837212756190, 0.639238288447760210, 0.639276738084668450, +0.639315186123385230, 0.639353632563813720, 0.639392077405858130, 0.639430520649422300, 0.639468962294410530, 0.639507402340726010, 0.639545840788272920, 0.639584277636955360, +0.639622712886677380, 0.639661146537342300, 0.639699578588854290, 0.639738009041117440, 0.639776437894035820, 0.639814865147512850, 0.639853290801452590, 0.639891714855759240, +0.639930137310336880, 0.639968558165088800, 0.640006977419919300, 0.640045395074732790, 0.640083811129432470, 0.640122225583922510, 0.640160638438107110, 0.640199049691890340, +0.640237459345175730, 0.640275867397867350, 0.640314273849869390, 0.640352678701086030, 0.640391081951420690, 0.640429483600777560, 0.640467883649060710, 0.640506282096174660, +0.640544678942022380, 0.640583074186508510, 0.640621467829536880, 0.640659859871012040, 0.640698250310837050, 0.640736639148916540, 0.640775026385154820, 0.640813412019455080, +0.640851796051721820, 0.640890178481859140, 0.640928559309771330, 0.640966938535361800, 0.641005316158534840, 0.641043692179194660, 0.641082066597245650, 0.641120439412591000, +0.641158810625135360, 0.641197180234782560, 0.641235548241437250, 0.641273914645002720, 0.641312279445383380, 0.641350642642483430, 0.641389004236207150, 0.641427364226457960, +0.641465722613140390, 0.641504079396158940, 0.641542434575416820, 0.641580788150818760, 0.641619140122268620, 0.641657490489671020, 0.641695839252929280, 0.641734186411948020, +0.641772531966631310, 0.641810875916883570, 0.641849218262608320, 0.641887559003709970, 0.641925898140092820, 0.641964235671661170, 0.642002571598318640, 0.642040905919969650, +0.642079238636518390, 0.642117569747869490, 0.642155899253926240, 0.642194227154593180, 0.642232553449774590, 0.642270878139375000, 0.642309201223297820, 0.642347522701447680, +0.642385842573729100, 0.642424160840045500, 0.642462477500301610, 0.642500792554401400, 0.642539106002249620, 0.642577417843749670, 0.642615728078806290, 0.642654036707323460, +0.642692343729205920, 0.642730649144357290, 0.642768952952681880, 0.642807255154084210, 0.642845555748468690, 0.642883854735738950, 0.642922152115799510, 0.642960447888554780, +0.642998742053909170, 0.643037034611766420, 0.643075325562031170, 0.643113614904607830, 0.643151902639400140, 0.643190188766312730, 0.643228473285249790, 0.643266756196116060, +0.643305037498815070, 0.643343317193251550, 0.643381595279329700, 0.643419871756954140, 0.643458146626028630, 0.643496419886457780, 0.643534691538145800, 0.643572961580997420, +0.643611230014916380, 0.643649496839807210, 0.643687762055574320, 0.643726025662122340, 0.643764287659355010, 0.643802548047176960, 0.643840806825492830, 0.643879063994206360, +0.643917319553222180, 0.643955573502444810, 0.643993825841778780, 0.644032076571127820, 0.644070325690396680, 0.644108573199489780, 0.644146819098311730, 0.644185063386766400, +0.644223306064758310, 0.644261547132191970, 0.644299786588972130, 0.644338024435002430, 0.644376260670187720, 0.644414495294432290, 0.644452728307641000, 0.644490959709717590, +0.644529189500566810, 0.644567417680092960, 0.644605644248200990, 0.644643869204794440, 0.644682092549778370, 0.644720314283057320, 0.644758534404535230, 0.644796752914116640, +0.644834969811706290, 0.644873185097208920, 0.644911398770528050, 0.644949610831568880, 0.644987821280235570, 0.645026030116433110, 0.645064237340065130, 0.645102442951036690, +0.645140646949252110, 0.645178849334616220, 0.645217050107032790, 0.645255249266406870, 0.645293446812642780, 0.645331642745645360, 0.645369837065318590, 0.645408029771567190, +0.645446220864296040, 0.645484410343408980, 0.645522598208810860, 0.645560784460406320, 0.645598969098100220, 0.645637152121796290, 0.645675333531399390, 0.645713513326814260, +0.645751691507945650, 0.645789868074697520, 0.645828043026974720, 0.645866216364681670, 0.645904388087723550, 0.645942558196004100, 0.645980726689428300, 0.646018893567900650, +0.646057058831326030, 0.646095222479608490, 0.646133384512652900, 0.646171544930364220, 0.646209703732646300, 0.646247860919404000, 0.646286016490542180, 0.646324170445965680, +0.646362322785578370, 0.646400473509285310, 0.646438622616991030, 0.646476770108600500, 0.646514915984017670, 0.646553060243147630, 0.646591202885894890, 0.646629343912164530, +0.646667483321860530, 0.646705621114887720, 0.646743757291150860, 0.646781891850555010, 0.646820024793004040, 0.646858156118403030, 0.646896285826656590, 0.646934413917669810, +0.646972540391346660, 0.647010665247592100, 0.647048788486311200, 0.647086910107408150, 0.647125030110787700, 0.647163148496354700, 0.647201265264014220, 0.647239380413670130, +0.647277493945227710, 0.647315605858591490, 0.647353716153666550, 0.647391824830357070, 0.647429931888567900, 0.647468037328204020, 0.647506141149170380, 0.647544243351371060, +0.647582343934711040, 0.647620442899095260, 0.647658540244428590, 0.647696635970615330, 0.647734730077560440, 0.647772822565169100, 0.647810913433345400, 0.647849002681994300, +0.647887090311020760, 0.647925176320329870, 0.647963260709825680, 0.648001343479413290, 0.648039424628997550, 0.648077504158483640, 0.648115582067775640, 0.648153658356778630, +0.648191733025397450, 0.648229806073537420, 0.648267877501102370, 0.648305947307997730, 0.648344015494128120, 0.648382082059398850, 0.648420147003714090, 0.648458210326978920, +0.648496272029098650, 0.648534332109977240, 0.648572390569520100, 0.648610447407631850, 0.648648502624217920, 0.648686556219182360, 0.648724608192430500, 0.648762658543867050, +0.648800707273397230, 0.648838754380925420, 0.648876799866356600, 0.648914843729595850, 0.648952885970548340, 0.648990926589118280, 0.649028965585210840, 0.649067002958731100, +0.649105038709584140, 0.649143072837674250, 0.649181105342906630, 0.649219136225186570, 0.649257165484418360, 0.649295193120507320, 0.649333219133358170, 0.649371243522876450, +0.649409266288966220, 0.649447287431532790, 0.649485306950481120, 0.649523324845716620, 0.649561341117143360, 0.649599355764666760, 0.649637368788191890, 0.649675380187623830, +0.649713389962866980, 0.649751398113826650, 0.649789404640407910, 0.649827409542515940, 0.649865412820055170, 0.649903414472930760, 0.649941414501047920, 0.649979412904311830, +0.650017409682626780, 0.650055404835898300, 0.650093398364031680, 0.650131390266931230, 0.650169380544502240, 0.650207369196649790, 0.650245356223279280, 0.650283341624295020, +0.650321325399602520, 0.650359307549106540, 0.650397288072712800, 0.650435266970325390, 0.650473244241849820, 0.650511219887191180, 0.650549193906254760, 0.650587166298945090, +0.650625137065167450, 0.650663106204827040, 0.650701073717829150, 0.650739039604078200, 0.650777003863479700, 0.650814966495939060, 0.650852927501360590, 0.650890886879649910, +0.650928844630711880, 0.650966800754452120, 0.651004755250775060, 0.651042708119586090, 0.651080659360790400, 0.651118608974293300, 0.651156556959999410, 0.651194503317814140, +0.651232448047642580, 0.651270391149390230, 0.651308332622961620, 0.651346272468262160, 0.651384210685197030, 0.651422147273671650, 0.651460082233590530, 0.651498015564859310, +0.651535947267383290, 0.651573877341067200, 0.651611805785816230, 0.651649732601535910, 0.651687657788131540, 0.651725581345507730, 0.651763503273569910, 0.651801423572223370, +0.651839342241373520, 0.651877259280925100, 0.651915174690783420, 0.651953088470853870, 0.651991000621041980, 0.652028911141252170, 0.652066820031390050, 0.652104727291360930, +0.652142632921070440, 0.652180536920422880, 0.652218439289323990, 0.652256340027679070, 0.652294239135393640, 0.652332136612372220, 0.652370032458520430, 0.652407926673744030, +0.652445819257947420, 0.652483710211036130, 0.652521599532915660, 0.652559487223491660, 0.652597373282668420, 0.652635257710351800, 0.652673140506447090, 0.652711021670859810, +0.652748901203494600, 0.652786779104257200, 0.652824655373052900, 0.652862530009787220, 0.652900403014364920, 0.652938274386691610, 0.652976144126672600, 0.653014012234213510, +0.653051878709219100, 0.653089743551594990, 0.653127606761246930, 0.653165468338079420, 0.653203328281998340, 0.653241186592908860, 0.653279043270716730, 0.653316898315326690, +0.653354751726644480, 0.653392603504575290, 0.653430453649024970, 0.653468302159898150, 0.653506149037100580, 0.653543994280537670, 0.653581837890115040, 0.653619679865737550, +0.653657520207310830, 0.653695358914740290, 0.653733195987931780, 0.653771031426789830, 0.653808865231220390, 0.653846697401129110, 0.653884527936420710, 0.653922356837000950, +0.653960184102775340, 0.653998009733649630, 0.654035833729528560, 0.654073656090317980, 0.654111476815923080, 0.654149295906249930, 0.654187113361203280, 0.654224929180688750, +0.654262743364611880, 0.654300555912878500, 0.654338366825393480, 0.654376176102062450, 0.654413983742791030, 0.654451789747484970, 0.654489594116049120, 0.654527396848389230, +0.654565197944411150, 0.654602997404019840, 0.654640795227121040, 0.654678591413620170, 0.654716385963423190, 0.654754178876434940, 0.654791970152561190, 0.654829759791707540, +0.654867547793779870, 0.654905334158682910, 0.654943118886322730, 0.654980901976604630, 0.655018683429434700, 0.655056463244717670, 0.655094241422359500, 0.655132017962265830, +0.655169792864342290, 0.655207566128494070, 0.655245337754626790, 0.655283107742646200, 0.655320876092458260, 0.655358642803967720, 0.655396407877080640, 0.655434171311702900, +0.655471933107739320, 0.655509693265095890, 0.655547451783678240, 0.655585208663392320, 0.655622963904143100, 0.655660717505836320, 0.655698469468377840, 0.655736219791673510, +0.655773968475628300, 0.655811715520148280, 0.655849460925138850, 0.655887204690506100, 0.655924946816154990, 0.655962687301991590, 0.656000426147921420, 0.656038163353850460, +0.656075898919683880, 0.656113632845327530, 0.656151365130687390, 0.656189095775668530, 0.656226824780176910, 0.656264552144118160, 0.656302277867398480, 0.656340001949922700, +0.656377724391596920, 0.656415445192326860, 0.656453164352018610, 0.656490881870576910, 0.656528597747908170, 0.656566311983917910, 0.656604024578512190, 0.656641735531595990, +0.656679444843075500, 0.656717152512856450, 0.656754858540844810, 0.656792562926945770, 0.656830265671065280, 0.656867966773109440, 0.656905666232983300, 0.656943364050593060, +0.656981060225844350, 0.657018754758643350, 0.657056447648895150, 0.657094138896505810, 0.657131828501381190, 0.657169516463427250, 0.657207202782549290, 0.657244887458653170, +0.657282570491644960, 0.657320251881430620, 0.657357931627915230, 0.657395609731005190, 0.657433286190605930, 0.657470961006623940, 0.657508634178964100, 0.657546305707532810, +0.657583975592235690, 0.657621643832978940, 0.657659310429667740, 0.657696975382208280, 0.657734638690506750, 0.657772300354468210, 0.657809960373998970, 0.657847618749004880, +0.657885275479392020, 0.657922930565065570, 0.657960584005931940, 0.657998235801896760, 0.658035885952866330, 0.658073534458745830, 0.658111181319441570, 0.658148826534859290, +0.658186470104905390, 0.658224112029484830, 0.658261752308504030, 0.658299390941868960, 0.658337027929485560, 0.658374663271259370, 0.658412296967096580, 0.658449929016903250, +0.658487559420584900, 0.658525188178047500, 0.658562815289197250, 0.658600440753940310, 0.658638064572181770, 0.658675686743828260, 0.658713307268785410, 0.658750926146959740, +0.658788543378256320, 0.658826158962581570, 0.658863772899841440, 0.658901385189942120, 0.658938995832789140, 0.658976604828288570, 0.659014212176346480, 0.659051817876869280, +0.659089421929762160, 0.659127024334931530, 0.659164625092283570, 0.659202224201723810, 0.659239821663158420, 0.659277417476493600, 0.659315011641635420, 0.659352604158489400, +0.659390195026961940, 0.659427784246959030, 0.659465371818386830, 0.659502957741150970, 0.659540542015157770, 0.659578124640313180, 0.659615705616523500, 0.659653284943694350, +0.659690862621731930, 0.659728438650542430, 0.659766013030032020, 0.659803585760106340, 0.659841156840671680, 0.659878726271634570, 0.659916294052900200, 0.659953860184375070, +0.659991424665965280, 0.660028987497577320, 0.660066548679116630, 0.660104108210489480, 0.660141666091601960, 0.660179222322360810, 0.660216776902671110, 0.660254329832439590, +0.660291881111572110, 0.660329430739975410, 0.660366978717554680, 0.660404525044216540, 0.660442069719867190, 0.660479612744412910, 0.660517154117759240, 0.660554693839812690, +0.660592231910479440, 0.660629768329665910, 0.660667303097277610, 0.660704836213221180, 0.660742367677402910, 0.660779897489728320, 0.660817425650104040, 0.660854952158436260, +0.660892477014631390, 0.660930000218594940, 0.660967521770233550, 0.661005041669453290, 0.661042559916160790, 0.661080076510261570, 0.661117591451662160, 0.661155104740268840, +0.661192616375988030, 0.661230126358725360, 0.661267634688387340, 0.661305141364880170, 0.661342646388110580, 0.661380149757984090, 0.661417651474407120, 0.661455151537286400, +0.661492649946527460, 0.661530146702036910, 0.661567641803720960, 0.661605135251486230, 0.661642627045238350, 0.661680117184883950, 0.661717605670329220, 0.661755092501480790, +0.661792577678244290, 0.661830061200526340, 0.661867543068233370, 0.661905023281271650, 0.661942501839547280, 0.661979978742966440, 0.662017453991435740, 0.662054927584861840, +0.662092399523150130, 0.662129869806207470, 0.662167338433940600, 0.662204805406254930, 0.662242270723057190, 0.662279734384253800, 0.662317196389751510, 0.662354656739455820, +0.662392115433273480, 0.662429572471110890, 0.662467027852874700, 0.662504481578470640, 0.662541933647805230, 0.662579384060785090, 0.662616832817316870, 0.662654279917306190, +0.662691725360659790, 0.662729169147284080, 0.662766611277085800, 0.662804051749970700, 0.662841490565845400, 0.662878927724616320, 0.662916363226190410, 0.662953797070473190, +0.662991229257371420, 0.663028659786791930, 0.663066088658640580, 0.663103515872823900, 0.663140941429248400, 0.663178365327820930, 0.663215787568447230, 0.663253208151034060, +0.663290627075487800, 0.663328044341715330, 0.663365459949622480, 0.663402873899115900, 0.663440286190102200, 0.663477696822488140, 0.663515105796179450, 0.663552513111082990, +0.663589918767105270, 0.663627322764153040, 0.663664725102132260, 0.663702125780949560, 0.663739524800512020, 0.663776922160725260, 0.663814317861496140, 0.663851711902731290, +0.663889104284337450, 0.663926495006220590, 0.663963884068287440, 0.664001271470444520, 0.664038657212598920, 0.664076041294656140, 0.664113423716523380, 0.664150804478107040, +0.664188183579314080, 0.664225561020050260, 0.664262936800222530, 0.664300310919737510, 0.664337683378501960, 0.664375054176421950, 0.664412423313404330, 0.664449790789355950, +0.664487156604182670, 0.664524520757791670, 0.664561883250089250, 0.664599244080982480, 0.664636603250377210, 0.664673960758180530, 0.664711316604298940, 0.664748670788639310, +0.664786023311107700, 0.664823374171611080, 0.664860723370055970, 0.664898070906349450, 0.664935416780397360, 0.664972760992106780, 0.665010103541384230, 0.665047444428136790, +0.665084783652270420, 0.665122121213692070, 0.665159457112308730, 0.665196791348026450, 0.665234123920752210, 0.665271454830392630, 0.665308784076854790, 0.665346111660044540, +0.665383437579869170, 0.665420761836235110, 0.665458084429049520, 0.665495405358218270, 0.665532724623648650, 0.665570042225247180, 0.665607358162920940, 0.665644672436575880, +0.665681985046119310, 0.665719295991457630, 0.665756605272498140, 0.665793912889146800, 0.665831218841310580, 0.665868523128896330, 0.665905825751811230, 0.665943126709961140, +0.665980426003253250, 0.666017723631594620, 0.666055019594891330, 0.666092313893050570, 0.666129606525978970, 0.666166897493583600, 0.666204186795770760, 0.666241474432447410, +0.666278760403520410, 0.666316044708896830, 0.666353327348482850, 0.666390608322185440, 0.666427887629911670, 0.666465165271568400, 0.666502441247061930, 0.666539715556299320, +0.666576988199187430, 0.666614259175633330, 0.666651528485543430, 0.666688796128824590, 0.666726062105384100, 0.666763326415128140, 0.666800589057963800, 0.666837850033798030, +0.666875109342538020, 0.666912366984089840, 0.666949622958360800, 0.666986877265257630, 0.667024129904687620, 0.667061380876557090, 0.667098630180772870, 0.667135877817242260, +0.667173123785872240, 0.667210368086569080, 0.667247610719239990, 0.667284851683791810, 0.667322090980131840, 0.667359328608166380, 0.667396564567802610, 0.667433798858947710, +0.667471031481507990, 0.667508262435390740, 0.667545491720502810, 0.667582719336751510, 0.667619945284043000, 0.667657169562284710, 0.667694392171383380, 0.667731613111246510, +0.667768832381780310, 0.667806049982891950, 0.667843265914488390, 0.667880480176477050, 0.667917692768764340, 0.667954903691257210, 0.667992112943862850, 0.668029320526488670, +0.668066526439040740, 0.668103730681426480, 0.668140933253552950, 0.668178134155327340, 0.668215333386656170, 0.668252530947446630, 0.668289726837606010, 0.668326921057040830, +0.668364113605658390, 0.668401304483365540, 0.668438493690069800, 0.668475681225677580, 0.668512867090096050, 0.668550051283232420, 0.668587233804993960, 0.668624414655287100, +0.668661593834019240, 0.668698771341097340, 0.668735947176428920, 0.668773121339920170, 0.668810293831478720, 0.668847464651011530, 0.668884633798426000, 0.668921801273628550, +0.668958967076526580, 0.668996131207027500, 0.669033293665037830, 0.669070454450464870, 0.669107613563215800, 0.669144771003198020, 0.669181926770317960, 0.669219080864483120, +0.669256233285600580, 0.669293384033577740, 0.669330533108321140, 0.669367680509738160, 0.669404826237736120, 0.669441970292222190, 0.669479112673103120, 0.669516253380286200, +0.669553392413678620, 0.669590529773188000, 0.669627665458720660, 0.669664799470184090, 0.669701931807485940, 0.669739062470532610, 0.669776191459231620, 0.669813318773490150, +0.669850444413215730, 0.669887568378314870, 0.669924690668695090, 0.669961811284263580, 0.669998930224927850, 0.670036047490594420, 0.670073163081170930, 0.670110276996564560, +0.670147389236682820, 0.670184499801432240, 0.670221608690720450, 0.670258715904454630, 0.670295821442542290, 0.670332925304890080, 0.670370027491405620, 0.670407128001996420, +0.670444226836569010, 0.670481323995031130, 0.670518419477289850, 0.670555513283252800, 0.670592605412826730, 0.670629695865919140, 0.670666784642437340, 0.670703871742288850, +0.670740957165380400, 0.670778040911619520, 0.670815122980913610, 0.670852203373170090, 0.670889282088295790, 0.670926359126198360, 0.670963434486784970, 0.671000508169963260, +0.671037580175640080, 0.671074650503722840, 0.671111719154119050, 0.671148786126736230, 0.671185851421481130, 0.671222915038261370, 0.671259976976984700, 0.671297037237557850, +0.671334095819888230, 0.671371152723883480, 0.671408207949451220, 0.671445261496497970, 0.671482313364931690, 0.671519363554659580, 0.671556412065589360, 0.671593458897627780, +0.671630504050682590, 0.671667547524661180, 0.671704589319471190, 0.671741629435019360, 0.671778667871213540, 0.671815704627960920, 0.671852739705169450, 0.671889773102745890, +0.671926804820597750, 0.671963834858632980, 0.672000863216758340, 0.672037889894881450, 0.672074914892909940, 0.672111938210751440, 0.672148959848312690, 0.672185979805501650, +0.672222998082225520, 0.672260014678392360, 0.672297029593908800, 0.672334042828682590, 0.672371054382621350, 0.672408064255632820, 0.672445072447623750, 0.672482078958501980, +0.672519083788175040, 0.672556086936550780, 0.672593088403535930, 0.672630088189038360, 0.672667086292965900, 0.672704082715225300, 0.672741077455724650, 0.672778070514371220, +0.672815061891072990, 0.672852051585736800, 0.672889039598270400, 0.672926025928581420, 0.672963010576577700, 0.672999993542166110, 0.673036974825254600, 0.673073954425750580, +0.673110932343562120, 0.673147908578595850, 0.673184883130759970, 0.673221855999961760, 0.673258827186109300, 0.673295796689109330, 0.673332764508870030, 0.673369730645298700, +0.673406695098303420, 0.673443657867791030, 0.673480618953669620, 0.673517578355846910, 0.673554536074229880, 0.673591492108726600, 0.673628446459244580, 0.673665399125691680, +0.673702350107975080, 0.673739299406002520, 0.673776247019681640, 0.673813192948920610, 0.673850137193626190, 0.673887079753706430, 0.673924020629069090, 0.673960959819621900, +0.673997897325272040, 0.674034833145927380, 0.674071767281495650, 0.674108699731884920, 0.674145630497002050, 0.674182559576755100, 0.674219486971052050, 0.674256412679799970, +0.674293336702906920, 0.674330259040280430, 0.674367179691828690, 0.674404098657458650, 0.674441015937078390, 0.674477931530595540, 0.674514845437918180, 0.674551757658953480, +0.674588668193609300, 0.674625577041793490, 0.674662484203414010, 0.674699389678378060, 0.674736293466593580, 0.674773195567968440, 0.674810095982410600, 0.674846994709827120, +0.674883891750126310, 0.674920787103216010, 0.674957680769003420, 0.674994572747396600, 0.675031463038303300, 0.675068351641631810, 0.675105238557288990, 0.675142123785183120, +0.675179007325221960, 0.675215889177313680, 0.675252769341365240, 0.675289647817284840, 0.675326524604980440, 0.675363399704359990, 0.675400273115330680, 0.675437144837800820, +0.675474014871678020, 0.675510883216870470, 0.675547749873285360, 0.675584614840830990, 0.675621478119415310, 0.675658339708945730, 0.675695199609330220, 0.675732057820476630, +0.675768914342293360, 0.675805769174687490, 0.675842622317567090, 0.675879473770840120, 0.675916323534414890, 0.675953171608198460, 0.675990017992099120, 0.676026862686024740, +0.676063705689883500, 0.676100547003582800, 0.676137386627030600, 0.676174224560134980, 0.676211060802804020, 0.676247895354945230, 0.676284728216466680, 0.676321559387276230, +0.676358388867282280, 0.676395216656392020, 0.676432042754513630, 0.676468867161555630, 0.676505689877424990, 0.676542510902030210, 0.676579330235279050, 0.676616147877080020, +0.676652963827340190, 0.676689778085967970, 0.676726590652871440, 0.676763401527958660, 0.676800210711136940, 0.676837018202314900, 0.676873824001400170, 0.676910628108301270, +0.676947430522925390, 0.676984231245181030, 0.677021030274976070, 0.677057827612218780, 0.677094623256816690, 0.677131417208677980, 0.677168209467711170, 0.677205000033823450, +0.677241788906923100, 0.677278576086918440, 0.677315361573717630, 0.677352145367228100, 0.677388927467358130, 0.677425707874015900, 0.677462486587109720, 0.677499263606547000, +0.677536038932236130, 0.677572812564085190, 0.677609584502002480, 0.677646354745895520, 0.677683123295672600, 0.677719890151242010, 0.677756655312511840, 0.677793418779389920, +0.677830180551784340, 0.677866940629603620, 0.677903699012755160, 0.677940455701147580, 0.677977210694688860, 0.678013963993287390, 0.678050715596850710, 0.678087465505287200, +0.678124213718505060, 0.678160960236412700, 0.678197705058917630, 0.678234448185928260, 0.678271189617352780, 0.678307929353099690, 0.678344667393076420, 0.678381403737191470, +0.678418138385353030, 0.678454871337469510, 0.678491602593448540, 0.678528332153198630, 0.678565060016627860, 0.678601786183644750, 0.678638510654156810, 0.678675233428072570, +0.678711954505300640, 0.678748673885748440, 0.678785391569324600, 0.678822107555937300, 0.678858821845495060, 0.678895534437905400, 0.678932245333076940, 0.678968954530917770, +0.679005662031336720, 0.679042367834240990, 0.679079071939539420, 0.679115774347140210, 0.679152475056951870, 0.679189174068882020, 0.679225871382839190, 0.679262566998731780, +0.679299260916468190, 0.679335953135956180, 0.679372643657104260, 0.679409332479821050, 0.679446019604014180, 0.679482705029592290, 0.679519388756463560, 0.679556070784536730, +0.679592751113719420, 0.679629429743920270, 0.679666106675047450, 0.679702781907009830, 0.679739455439714810, 0.679776127273071130, 0.679812797406987190, 0.679849465841371630, +0.679886132576131950, 0.679922797611177020, 0.679959460946415130, 0.679996122581754790, 0.680032782517103970, 0.680069440752371080, 0.680106097287464960, 0.680142752122293250, +0.680179405256764680, 0.680216056690787660, 0.680252706424270710, 0.680289354457121800, 0.680326000789249320, 0.680362645420562020, 0.680399288350968300, 0.680435929580376130, +0.680472569108694140, 0.680509206935830610, 0.680545843061694520, 0.680582477486193380, 0.680619110209236160, 0.680655741230731030, 0.680692370550586960, 0.680728998168711690, +0.680765624085013840, 0.680802248299402280, 0.680838870811784850, 0.680875491622070060, 0.680912110730166660, 0.680948728135983390, 0.680985343839427880, 0.681021957840408980, +0.681058570138835200, 0.681095180734615390, 0.681131789627657190, 0.681168396817869670, 0.681205002305161010, 0.681241606089440290, 0.681278208170615130, 0.681314808548594500, +0.681351407223286800, 0.681388004194600990, 0.681424599462444820, 0.681461193026727140, 0.681497784887356460, 0.681534375044241640, 0.681570963497290520, 0.681607550246412060, +0.681644135291515020, 0.681680718632507340, 0.681717300269297890, 0.681753880201795060, 0.681790458429908040, 0.681827034953544460, 0.681863609772613290, 0.681900182887023030, +0.681936754296682770, 0.681973324001500240, 0.682009892001384400, 0.682046458296243770, 0.682083022885987320, 0.682119585770523120, 0.682156146949759900, 0.682192706423606190, +0.682229264191971160, 0.682265820254762680, 0.682302374611889580, 0.682338927263260840, 0.682375478208784520, 0.682412027448369480, 0.682448574981924350, 0.682485120809358190, +0.682521664930578860, 0.682558207345495330, 0.682594748054016320, 0.682631287056050700, 0.682667824351506640, 0.682704359940292990, 0.682740893822318400, 0.682777425997491920, +0.682813956465721520, 0.682850485226916270, 0.682887012280984810, 0.682923537627836200, 0.682960061267378290, 0.682996583199520280, 0.683033103424171230, 0.683069621941238990, +0.683106138750632750, 0.683142653852261140, 0.683179167246033110, 0.683215678931856970, 0.683252188909641680, 0.683288697179295750, 0.683325203740728580, 0.683361708593847930, +0.683398211738563080, 0.683434713174782660, 0.683471212902415860, 0.683507710921370640, 0.683544207231556180, 0.683580701832881220, 0.683617194725254730, 0.683653685908585000, +0.683690175382781100, 0.683726663147751660, 0.683763149203405970, 0.683799633549652010, 0.683836116186399060, 0.683872597113556080, 0.683909076331031260, 0.683945553838733790, +0.683982029636572400, 0.684018503724456270, 0.684054976102293600, 0.684091446769993450, 0.684127915727464790, 0.684164382974616570, 0.684200848511356980, 0.684237312337595440, +0.684273774453240560, 0.684310234858201530, 0.684346693552386530, 0.684383150535704980, 0.684419605808065380, 0.684456059369377150, 0.684492511219548460, 0.684528961358488510, +0.684565409786106470, 0.684601856502310540, 0.684638301507010110, 0.684674744800113810, 0.684711186381530950, 0.684747626251169810, 0.684784064408939570, 0.684820500854749330, +0.684856935588508020, 0.684893368610124060, 0.684929799919506750, 0.684966229516564830, 0.685002657401207800, 0.685039083573343750, 0.685075508032881860, 0.685111930779731430, +0.685148351813801290, 0.685184771135000090, 0.685221188743236900, 0.685257604638421000, 0.685294018820460930, 0.685330431289265630, 0.685366842044744410, 0.685403251086806330, +0.685439658415359810, 0.685476064030314140, 0.685512467931578270, 0.685548870119061630, 0.685585270592672490, 0.685621669352320050, 0.685658066397913600, 0.685694461729362210, +0.685730855346574410, 0.685767247249459370, 0.685803637437926270, 0.685840025911884420, 0.685876412671242220, 0.685912797715908850, 0.685949181045793940, 0.685985562660805680, +0.686021942560853580, 0.686058320745846610, 0.686094697215694050, 0.686131071970304540, 0.686167445009587370, 0.686203816333451510, 0.686240185941806470, 0.686276553834560650, +0.686312920011623360, 0.686349284472903890, 0.686385647218311520, 0.686422008247754680, 0.686458367561142760, 0.686494725158384940, 0.686531081039390760, 0.686567435204068380, +0.686603787652327550, 0.686640138384077230, 0.686676487399226820, 0.686712834697684850, 0.686749180279360830, 0.686785524144164160, 0.686821866292003480, 0.686858206722787970, +0.686894545436427030, 0.686930882432830070, 0.686967217711905500, 0.687003551273563050, 0.687039883117711580, 0.687076213244260710, 0.687112541653119080, 0.687148868344195970, +0.687185193317400800, 0.687221516572642970, 0.687257838109830990, 0.687294157928874380, 0.687330476029682450, 0.687366792412164580, 0.687403107076229420, 0.687439420021786600, +0.687475731248745390, 0.687512040757014660, 0.687548348546503710, 0.687584654617122040, 0.687620958968778950, 0.687657261601383190, 0.687693562514844150, 0.687729861709071360, +0.687766159183974100, 0.687802454939461240, 0.687838748975442280, 0.687875041291826310, 0.687911331888523160, 0.687947620765441250, 0.687983907922490420, 0.688020193359579760, +0.688056477076618880, 0.688092759073516640, 0.688129039350182330, 0.688165317906525800, 0.688201594742455680, 0.688237869857881600, 0.688274143252712860, 0.688310414926858960, +0.688346684880228770, 0.688382953112731900, 0.688419219624277660, 0.688455484414775660, 0.688491747484134550, 0.688528008832264170, 0.688564268459073700, 0.688600526364473000, +0.688636782548370570, 0.688673037010676170, 0.688709289751299190, 0.688745540770149380, 0.688781790067135360, 0.688818037642166870, 0.688854283495153210, 0.688890527626004220, +0.688926770034628540, 0.688963010720936020, 0.688999249684836280, 0.689035486926238060, 0.689071722445051100, 0.689107956241184930, 0.689144188314549040, 0.689180418665052530, +0.689216647292604900, 0.689252874197115670, 0.689289099378494470, 0.689325322836650270, 0.689361544571492790, 0.689397764582931450, 0.689433982870875980, 0.689470199435235240, +0.689506414275919080, 0.689542627392836780, 0.689578838785898320, 0.689615048455012420, 0.689651256400088840, 0.689687462621037530, 0.689723667117767110, 0.689759869890187670, +0.689796070938208490, 0.689832270261739430, 0.689868467860689450, 0.689904663734968170, 0.689940857884485340, 0.689977050309150690, 0.690013241008872960, 0.690049429983562220, +0.690085617233128000, 0.690121802757479920, 0.690157986556527050, 0.690194168630179240, 0.690230348978346010, 0.690266527600937210, 0.690302704497861800, 0.690338879669029630, +0.690375053114350550, 0.690411224833733520, 0.690447394827088390, 0.690483563094324790, 0.690519729635352690, 0.690555894450080810, 0.690592057538419350, 0.690628218900277590, +0.690664378535565730, 0.690700536444192490, 0.690736692626067960, 0.690772847081101760, 0.690808999809203740, 0.690845150810282860, 0.690881300084249080, 0.690917447631012040, +0.690953593450481800, 0.690989737542567210, 0.691025879907178230, 0.691062020544224610, 0.691098159453616300, 0.691134296635262160, 0.691170432089072360, 0.691206565814956760, +0.691242697812824440, 0.691278828082585340, 0.691314956624149210, 0.691351083437426020, 0.691387208522324830, 0.691423331878755490, 0.691459453506627960, 0.691495573405851990, +0.691531691576336870, 0.691567808017992560, 0.691603922730728570, 0.691640035714455200, 0.691676146969081420, 0.691712256494517290, 0.691748364290672440, 0.691784470357457050, +0.691820574694780090, 0.691856677302551850, 0.691892778180682070, 0.691928877329080150, 0.691964974747655950, 0.692001070436319420, 0.692037164394980420, 0.692073256623548240, +0.692109347121932950, 0.692145435890044290, 0.692181522927792340, 0.692217608235086160, 0.692253691811836050, 0.692289773657951750, 0.692325853773343320, 0.692361932157919970, +0.692398008811591750, 0.692434083734268400, 0.692470156925860340, 0.692506228386276400, 0.692542298115427000, 0.692578366113222100, 0.692614432379571100, 0.692650496914383850, +0.692686559717570540, 0.692722620789041010, 0.692758680128704670, 0.692794737736471600, 0.692830793612251640, 0.692866847755955080, 0.692902900167491120, 0.692938950846769820, +0.692974999793701250, 0.693011047008195380, 0.693047092490161610, 0.693083136239510230, 0.693119178256150880, 0.693155218539993840, 0.693191257090948640, 0.693227293908925120, +0.693263328993833810, 0.693299362345583760, 0.693335393964085390, 0.693371423849248440, 0.693407452000983300, 0.693443478419199180, 0.693479503103806460, 0.693515526054714890, +0.693551547271834880, 0.693587566755075600, 0.693623584504347470, 0.693659600519560330, 0.693695614800624580, 0.693731627347449420, 0.693767638159945240, 0.693803647238021900, +0.693839654581589800, 0.693875660190558240, 0.693911664064837620, 0.693947666204337680, 0.693983666608969040, 0.694019665278640780, 0.694055662213263420, 0.694091657412747250, +0.694127650877001570, 0.694163642605936770, 0.694199632599462930, 0.694235620857490240, 0.694271607379928210, 0.694307592166687140, 0.694343575217677200, 0.694379556532808470, +0.694415536111990690, 0.694451513955133940, 0.694487490062148490, 0.694523464432944550, 0.694559437067431730, 0.694595407965520330, 0.694631377127120310, 0.694667344552142190, +0.694703310240495480, 0.694739274192090360, 0.694775236406837470, 0.694811196884646100, 0.694847155625426760, 0.694883112629089640, 0.694919067895544920, 0.694955021424702220, +0.694990973216472070, 0.695026923270764430, 0.695062871587489810, 0.695098818166557610, 0.695134763007878460, 0.695170706111362340, 0.695206647476919850, 0.695242587104460410, +0.695278524993894420, 0.695314461145132180, 0.695350395558084090, 0.695386328232659780, 0.695422259168769540, 0.695458188366324000, 0.695494115825232680, 0.695530041545405990, +0.695565965526754320, 0.695601887769188080, 0.695637808272616680, 0.695673727036950850, 0.695709644062100560, 0.695745559347976660, 0.695781472894488440, 0.695817384701546530, +0.695853294769061210, 0.695889203096943020, 0.695925109685101350, 0.695961014533447050, 0.695996917641890090, 0.696032819010341310, 0.696068718638710000, 0.696104616526906920, +0.696140512674842450, 0.696176407082426900, 0.696212299749570000, 0.696248190676182380, 0.696284079862174550, 0.696319967307456270, 0.696355853011938140, 0.696391736975530250, +0.696427619198143440, 0.696463499679687130, 0.696499378420072150, 0.696535255419208800, 0.696571130677007490, 0.696607004193378070, 0.696642875968231160, 0.696678746001477170, +0.696714614293026500, 0.696750480842789010, 0.696786345650675320, 0.696822208716595730, 0.696858070040460960, 0.696893929622180660, 0.696929787461665560, 0.696965643558826400, +0.697001497913572690, 0.697037350525815390, 0.697073201395464580, 0.697109050522431110, 0.697144897906624710, 0.697180743547956010, 0.697216587446335520, 0.697252429601673880, +0.697288270013880830, 0.697324108682867090, 0.697359945608543090, 0.697395780790819540, 0.697431614229606200, 0.697467445924813910, 0.697503275876352970, 0.697539104084134110, +0.697574930548067180, 0.697610755268062930, 0.697646578244032200, 0.697682399475884620, 0.697718218963531030, 0.697754036706881850, 0.697789852705848030, 0.697825666960339210, +0.697861479470266220, 0.697897290235539480, 0.697933099256069830, 0.697968906531767130, 0.698004712062542220, 0.698040515848305510, 0.698076317888967850, 0.698112118184438970, +0.698147916734629950, 0.698183713539451080, 0.698219508598813210, 0.698255301912626300, 0.698291093480801090, 0.698326883303248440, 0.698362671379878290, 0.698398457710601490, +0.698434242295328470, 0.698470025133970270, 0.698505806226436650, 0.698541585572638460, 0.698577363172486310, 0.698613139025891170, 0.698648913132762780, 0.698684685493012100, +0.698720456106549760, 0.698756224973286600, 0.698791992093132590, 0.698827757465998460, 0.698863521091795060, 0.698899282970433130, 0.698935043101822640, 0.698970801485874650, +0.699006558122499570, 0.699042313011608460, 0.699078066153111190, 0.699113817546918810, 0.699149567192942190, 0.699185315091091280, 0.699221061241277140, 0.699256805643410420, +0.699292548297401950, 0.699328289203161700, 0.699364028360600740, 0.699399765769629810, 0.699435501430159760, 0.699471235342100650, 0.699506967505363340, 0.699542697919858680, +0.699578426585497630, 0.699614153502190140, 0.699649878669847290, 0.699685602088379820, 0.699721323757698580, 0.699757043677713740, 0.699792761848336280, 0.699828478269477250, +0.699864192941046630, 0.699899905862955580, 0.699935617035114750, 0.699971326457435210, 0.700007034129827010, 0.700042740052201350, 0.700078444224468740, 0.700114146646540370, +0.700149847318326300, 0.700185546239737500, 0.700221243410684920, 0.700256938831079640, 0.700292632500831620, 0.700328324419852040, 0.700364014588051640, 0.700399703005341490, +0.700435389671631770, 0.700471074586833550, 0.700506757750858020, 0.700542439163615250, 0.700578118825016420, 0.700613796734972260, 0.700649472893393970, 0.700685147300191600, +0.700720819955276460, 0.700756490858559180, 0.700792160009951040, 0.700827827409362230, 0.700863493056703810, 0.700899156951886650, 0.700934819094821910, 0.700970479485419800, +0.701006138123591470, 0.701041795009247790, 0.701077450142299940, 0.701113103522658210, 0.701148755150233670, 0.701184405024937290, 0.701220053146680230, 0.701255699515372700, +0.701291344130925860, 0.701326986993251020, 0.701362628102258360, 0.701398267457859160, 0.701433905059964280, 0.701469540908485010, 0.701505175003331540, 0.701540807344415040, +0.701576437931646700, 0.701612066764937480, 0.701647693844197780, 0.701683319169338790, 0.701718942740271580, 0.701754564556907320, 0.701790184619156320, 0.701825802926929860, +0.701861419480138920, 0.701897034278694760, 0.701932647322507600, 0.701968258611488930, 0.702003868145549830, 0.702039475924600810, 0.702075081948553060, 0.702110686217317650, +0.702146288730805870, 0.702181889488928010, 0.702217488491595380, 0.702253085738719140, 0.702288681230210380, 0.702324274965979710, 0.702359866945938220, 0.702395457169997180, +0.702431045638067800, 0.702466632350060460, 0.702502217305886580, 0.702537800505457110, 0.702573381948683460, 0.702608961635476040, 0.702644539565746240, 0.702680115739405360, +0.702715690156363930, 0.702751262816533220, 0.702786833719824420, 0.702822402866148830, 0.702857970255416850, 0.702893535887540000, 0.702929099762429340, 0.702964661879996180, +0.703000222240151130, 0.703035780842805490, 0.703071337687870330, 0.703106892775257180, 0.703142446104876530, 0.703177997676639690, 0.703213547490457950, 0.703249095546242600, +0.703284641843904270, 0.703320186383354250, 0.703355729164504060, 0.703391270187264330, 0.703426809451546340, 0.703462346957261400, 0.703497882704320790, 0.703533416692635250, +0.703568948922116190, 0.703604479392674680, 0.703640008104222340, 0.703675535056669690, 0.703711060249928130, 0.703746583683908970, 0.703782105358523700, 0.703817625273682750, +0.703853143429297830, 0.703888659825280040, 0.703924174461540760, 0.703959687337990970, 0.703995198454541840, 0.704030707811104660, 0.704066215407591070, 0.704101721243911680, +0.704137225319978020, 0.704172727635701490, 0.704208228190992940, 0.704243726985763760, 0.704279224019925150, 0.704314719293388960, 0.704350212806065690, 0.704385704557866750, +0.704421194548703560, 0.704456682778487830, 0.704492169247129980, 0.704527653954541640, 0.704563136900634320, 0.704598618085319430, 0.704634097508507580, 0.704669575170110530, +0.704705051070039560, 0.704740525208206290, 0.704775997584521360, 0.704811468198896510, 0.704846937051243240, 0.704882404141472410, 0.704917869469495420, 0.704953333035223890, +0.704988794838569240, 0.705024254879442310, 0.705059713157754730, 0.705095169673417900, 0.705130624426343560, 0.705166077416442220, 0.705201528643625730, 0.705236978107805390, +0.705272425808892930, 0.705307871746799100, 0.705343315921435510, 0.705378758332713800, 0.705414198980545360, 0.705449637864841160, 0.705485074985512830, 0.705520510342472210, +0.705555943935629930, 0.705591375764897830, 0.705626805830187220, 0.705662234131410050, 0.705697660668476830, 0.705733085441299530, 0.705768508449789560, 0.705803929693858520, +0.705839349173417400, 0.705874766888377910, 0.705910182838651590, 0.705945597024150050, 0.705981009444784150, 0.706016420100465720, 0.706051828991106410, 0.706087236116617720, +0.706122641476910620, 0.706158045071896940, 0.706193446901488110, 0.706228846965595960, 0.706264245264131450, 0.706299641797006330, 0.706335036564132320, 0.706370429565420510, +0.706405820800782620, 0.706441210270130180, 0.706476597973374920, 0.706511983910427910, 0.706547368081201000, 0.706582750485605700, 0.706618131123553760, 0.706653509994956130, +0.706688887099724770, 0.706724262437771200, 0.706759636009007370, 0.706795007813344030, 0.706830377850693250, 0.706865746120966420, 0.706901112624075620, 0.706936477359931700, +0.706971840328446620, 0.707007201529532110, 0.707042560963099480, 0.707077918629060330, 0.707113274527326420, 0.707148628657809700, 0.707183981020421020, 0.707219331615072330, +0.707254680441675390, 0.707290027500142030, 0.707325372790383320, 0.707360716312311120, 0.707396058065837270, 0.707431398050873520, 0.707466736267330920, 0.707502072715121440, +0.707537407394156830, 0.707572740304349020, 0.707608071445609110, 0.707643400817848930, 0.707678728420980560, 0.707714054254915180, 0.707749378319564530, 0.707784700614840450, +0.707820021140655010, 0.707855339896919180, 0.707890656883544910, 0.707925972100444060, 0.707961285547528570, 0.707996597224709530, 0.708031907131899120, 0.708067215269008840, +0.708102521635950890, 0.708137826232636210, 0.708173129058977110, 0.708208430114885100, 0.708243729400272470, 0.708279026915049960, 0.708314322659130080, 0.708349616632424570, +0.708384908834844840, 0.708420199266302730, 0.708455487926710200, 0.708490774815979220, 0.708526059934020960, 0.708561343280747600, 0.708596624856070890, 0.708631904659902890, +0.708667182692154900, 0.708702458952738870, 0.708737733441566760, 0.708773006158550540, 0.708808277103601610, 0.708843546276631930, 0.708878813677553340, 0.708914079306278030, +0.708949343162717290, 0.708984605246783080, 0.709019865558387470, 0.709055124097442420, 0.709090380863859230, 0.709125635857550280, 0.709160889078427340, 0.709196140526401900, +0.709231390201386260, 0.709266638103291940, 0.709301884232031440, 0.709337128587515960, 0.709372371169657570, 0.709407611978368320, 0.709442851013560300, 0.709478088275144910, +0.709513323763034220, 0.709548557477140300, 0.709583789417375210, 0.709619019583650370, 0.709654247975877950, 0.709689474593970030, 0.709724699437838670, 0.709759922507395170, +0.709795143802551930, 0.709830363323221140, 0.709865581069314190, 0.709900797040743270, 0.709936011237420230, 0.709971223659257580, 0.710006434306166610, 0.710041643178059510, +0.710076850274848240, 0.710112055596445190, 0.710147259142761670, 0.710182460913710070, 0.710217660909202240, 0.710252859129150590, 0.710288055573466530, 0.710323250242062330, +0.710358443134849970, 0.710393634251741850, 0.710428823592649250, 0.710464011157484700, 0.710499196946160260, 0.710534380958587670, 0.710569563194679120, 0.710604743654346560, +0.710639922337502620, 0.710675099244058470, 0.710710274373926530, 0.710745447727018980, 0.710780619303248100, 0.710815789102525300, 0.710850957124763090, 0.710886123369873450, +0.710921287837768870, 0.710956450528360760, 0.710991611441561420, 0.711026770577283140, 0.711061927935438210, 0.711097083515938260, 0.711132237318695460, 0.711167389343622110, +0.711202539590630620, 0.711237688059632390, 0.711272834750540040, 0.711307979663265870, 0.711343122797721490, 0.711378264153819220, 0.711413403731471330, 0.711448541530590230, +0.711483677551087550, 0.711518811792875570, 0.711553944255866600, 0.711589074939973030, 0.711624203845106610, 0.711659330971179500, 0.711694456318104240, 0.711729579885793000, +0.711764701674157510, 0.711799821683110400, 0.711834939912563640, 0.711870056362429840, 0.711905171032620520, 0.711940283923048420, 0.711975395033625840, 0.712010504364264500, +0.712045611914876810, 0.712080717685375180, 0.712115821675672000, 0.712150923885679020, 0.712186024315308640, 0.712221122964473370, 0.712256219833085510, 0.712291314921056680, +0.712326408228299730, 0.712361499754726620, 0.712396589500250200, 0.712431677464781980, 0.712466763648234470, 0.712501848050520080, 0.712536930671551440, 0.712572011511240170, +0.712607090569498780, 0.712642167846240020, 0.712677243341375610, 0.712712317054817970, 0.712747388986479600, 0.712782459136273030, 0.712817527504110090, 0.712852594089903310, +0.712887658893564870, 0.712922721915007830, 0.712957783154143600, 0.712992842610884800, 0.713027900285144070, 0.713062956176833800, 0.713098010285865840, 0.713133062612152810, +0.713168113155607130, 0.713203161916141530, 0.713238208893667740, 0.713273254088098390, 0.713308297499346210, 0.713343339127322950, 0.713378378971941450, 0.713413417033113890, +0.713448453310753130, 0.713483487804770890, 0.713518520515080020, 0.713553551441592830, 0.713588580584222030, 0.713623607942879490, 0.713658633517477940, 0.713693657307929770, +0.713728679314147740, 0.713763699536043680, 0.713798717973530560, 0.713833734626520440, 0.713868749494926400, 0.713903762578660170, 0.713938773877634600, 0.713973783391761980, +0.714008791120955280, 0.714043797065126220, 0.714078801224187650, 0.714113803598052540, 0.714148804186632510, 0.714183802989840410, 0.714218800007588860, 0.714253795239790600, +0.714288788686357590, 0.714323780347202670, 0.714358770222238150, 0.714393758311377080, 0.714428744614531320, 0.714463729131613710, 0.714498711862536770, 0.714533692807213350, +0.714568671965555290, 0.714603649337475780, 0.714638624922886990, 0.714673598721701890, 0.714708570733832650, 0.714743540959191790, 0.714778509397692610, 0.714813476049246610, +0.714848440913767090, 0.714883403991166460, 0.714918365281357550, 0.714953324784252440, 0.714988282499764090, 0.715023238427805020, 0.715058192568288060, 0.715093144921125410, +0.715128095486229800, 0.715163044263514070, 0.715197991252890960, 0.715232936454272660, 0.715267879867571900, 0.715302821492701520, 0.715337761329574270, 0.715372699378102440, +0.715407635638198870, 0.715442570109776410, 0.715477502792747240, 0.715512433687024440, 0.715547362792520400, 0.715582290109148420, 0.715617215636820240, 0.715652139375449140, +0.715687061324947640, 0.715721981485228810, 0.715756899856204720, 0.715791816437788330, 0.715826731229892490, 0.715861644232430040, 0.715896555445313170, 0.715931464868455050, +0.715966372501768090, 0.716001278345165690, 0.716036182398559600, 0.716071084661863200, 0.716105985134989020, 0.716140883817850240, 0.716175780710358810, 0.716210675812428030, +0.716245569123970970, 0.716280460644899470, 0.716315350375126950, 0.716350238314566010, 0.716385124463129850, 0.716420008820730430, 0.716454891387281130, 0.716489772162694490, +0.716524651146883800, 0.716559528339761220, 0.716594403741239730, 0.716629277351232270, 0.716664149169651930, 0.716699019196410880, 0.716733887431422190, 0.716768753874598930, +0.716803618525854060, 0.716838481385099870, 0.716873342452249430, 0.716908201727215920, 0.716943059209911640, 0.716977914900249650, 0.717012768798142910, 0.717047620903504600, +0.717082471216246910, 0.717117319736283010, 0.717152166463525860, 0.717187011397888540, 0.717221854539283440, 0.717256695887623640, 0.717291535442822090, 0.717326373204792090, +0.717361209173445920, 0.717396043348696550, 0.717430875730457160, 0.717465706318640930, 0.717500535113160030, 0.717535362113927880, 0.717570187320857530, 0.717605010733861400, +0.717639832352852890, 0.717674652177744620, 0.717709470208450220, 0.717744286444881750, 0.717779100886952510, 0.717813913534575580, 0.717848724387664230, 0.717883533446130650, +0.717918340709888250, 0.717953146178849980, 0.717987949852929240, 0.718022751732038330, 0.718057551816090430, 0.718092350104998720, 0.718127146598676490, 0.718161941297035920, +0.718196734199990640, 0.718231525307453820, 0.718266314619337760, 0.718301102135556090, 0.718335887856021540, 0.718370671780647620, 0.718405453909346740, 0.718440234242032180, +0.718475012778617030, 0.718509789519014790, 0.718544564463137640, 0.718579337610899090, 0.718614108962212230, 0.718648878516990330, 0.718683646275146030, 0.718718412236592610, +0.718753176401243030, 0.718787938769010930, 0.718822699339808580, 0.718857458113549620, 0.718892215090146890, 0.718926970269514020, 0.718961723651563410, 0.718996475236208470, +0.719031225023362590, 0.719065973012938400, 0.719100719204849300, 0.719135463599008370, 0.719170206195329120, 0.719204946993724060, 0.719239685994106480, 0.719274423196389790, +0.719309158600487390, 0.719343892206311790, 0.719378624013776390, 0.719413354022794490, 0.719448082233279500, 0.719482808645143910, 0.719517533258301370, 0.719552256072665040, +0.719586977088148340, 0.719621696304663880, 0.719656413722125190, 0.719691129340445770, 0.719725843159538250, 0.719760555179316030, 0.719795265399692520, 0.719829973820581110, +0.719864680441894440, 0.719899385263546130, 0.719934088285449360, 0.719968789507517530, 0.720003488929663590, 0.720038186551800850, 0.720072882373842700, 0.720107576395702550, +0.720142268617293250, 0.720176959038528300, 0.720211647659320890, 0.720246334479584640, 0.720281019499232290, 0.720315702718177350, 0.720350384136333570, 0.720385063753613440, +0.720419741569930610, 0.720454417585198570, 0.720489091799330630, 0.720523764212239740, 0.720558434823839410, 0.720593103634042940, 0.720627770642764180, 0.720662435849915630, +0.720697099255410920, 0.720731760859163460, 0.720766420661086980, 0.720801078661094110, 0.720835734859098460, 0.720870389255013570, 0.720905041848753040, 0.720939692640229500, +0.720974341629356810, 0.721008988816048250, 0.721043634200217550, 0.721078277781777350, 0.721112919560641610, 0.721147559536723710, 0.721182197709936750, 0.721216834080194210, +0.721251468647409520, 0.721286101411496630, 0.721320732372368050, 0.721355361529937730, 0.721389988884118980, 0.721424614434825530, 0.721459238181970220, 0.721493860125466900, +0.721528480265228870, 0.721563098601169960, 0.721597715133203030, 0.721632329861241820, 0.721666942785199720, 0.721701553904990690, 0.721736163220527250, 0.721770770731723580, +0.721805376438493300, 0.721839980340749140, 0.721874582438405190, 0.721909182731374610, 0.721943781219571480, 0.721978377902908640, 0.722012972781299830, 0.722047565854658460, +0.722082157122898580, 0.722116746585933060, 0.722151334243675610, 0.722185920096039770, 0.722220504142939480, 0.722255086384287700, 0.722289666819998070, 0.722324245449984410, +0.722358822274160370, 0.722393397292438900, 0.722427970504734060, 0.722462541910959600, 0.722497111511028360, 0.722531679304854510, 0.722566245292351250, 0.722600809473432860, +0.722635371848012080, 0.722669932416002860, 0.722704491177318830, 0.722739048131873840, 0.722773603279580960, 0.722808156620354140, 0.722842708154106780, 0.722877257880753080, +0.722911805800205860, 0.722946351912379100, 0.722980896217186530, 0.723015438714541990, 0.723049979404358560, 0.723084518286550180, 0.723119055361030830, 0.723153590627713560, +0.723188124086512230, 0.723222655737340680, 0.723257185580112650, 0.723291713614741430, 0.723326239841140970, 0.723360764259224910, 0.723395286868907190, 0.723429807670101010, +0.723464326662720310, 0.723498843846678730, 0.723533359221890440, 0.723567872788268280, 0.723602384545726670, 0.723636894494178890, 0.723671402633539350, 0.723705908963720780, +0.723740413484637690, 0.723774916196203380, 0.723809417098332130, 0.723843916190937130, 0.723878413473932230, 0.723912908947231700, 0.723947402610748410, 0.723981894464396760, +0.724016384508090360, 0.724050872741743400, 0.724085359165268730, 0.724119843778580850, 0.724154326581593290, 0.724188807574220220, 0.724223286756374820, 0.724257764127971160, +0.724292239688923090, 0.724326713439144790, 0.724361185378549430, 0.724395655507050980, 0.724430123824563510, 0.724464590331000970, 0.724499055026276760, 0.724533517910304850, +0.724567978982999410, 0.724602438244273730, 0.724636895694041990, 0.724671351332217940, 0.724705805158715850, 0.724740257173449030, 0.724774707376331430, 0.724809155767277110, +0.724843602346200270, 0.724878047113014070, 0.724912490067632700, 0.724946931209970220, 0.724981370539940610, 0.725015808057457360, 0.725050243762434540, 0.725084677654786120, +0.725119109734426280, 0.725153540001268420, 0.725187968455226710, 0.725222395096215330, 0.725256819924147590, 0.725291242938937990, 0.725325664140500150, 0.725360083528748480, +0.725394501103596380, 0.725428916864957920, 0.725463330812747160, 0.725497742946878410, 0.725532153267265060, 0.725566561773821280, 0.725600968466461050, 0.725635373345098760, +0.725669776409647690, 0.725704177660022260, 0.725738577096136320, 0.725772974717904250, 0.725807370525239470, 0.725841764518056150, 0.725876156696268590, 0.725910547059790860, +0.725944935608536460, 0.725979322342419690, 0.726013707261354950, 0.726048090365255640, 0.726082471654036170, 0.726116851127610370, 0.726151228785892890, 0.726185604628796890, +0.726219978656237000, 0.726254350868127170, 0.726288721264381600, 0.726323089844914120, 0.726357456609638800, 0.726391821558469930, 0.726426184691321810, 0.726460546008107830, +0.726494905508742520, 0.726529263193139930, 0.726563619061214580, 0.726597973112879770, 0.726632325348050110, 0.726666675766639900, 0.726701024368562650, 0.726735371153732880, +0.726769716122064760, 0.726804059273472580, 0.726838400607869970, 0.726872740125171330, 0.726907077825290850, 0.726941413708142910, 0.726975747773641270, 0.727010080021700200, +0.727044410452233890, 0.727078739065156960, 0.727113065860382820, 0.727147390837825980, 0.727181713997400610, 0.727216035339021350, 0.727250354862601700, 0.727284672568056180, +0.727318988455299300, 0.727353302524244570, 0.727387614774806620, 0.727421925206899630, 0.727456233820438110, 0.727490540615335800, 0.727524845591506990, 0.727559148748866180, +0.727593450087327680, 0.727627749606805320, 0.727662047307213620, 0.727696343188466770, 0.727730637250479370, 0.727764929493165070, 0.727799219916438480, 0.727833508520213890, +0.727867795304405710, 0.727902080268927780, 0.727936363413694610, 0.727970644738620940, 0.728004924243620290, 0.728039201928607270, 0.728073477793496400, 0.728107751838201980, +0.728142024062637950, 0.728176294466718830, 0.728210563050359030, 0.728244829813473160, 0.728279094755974850, 0.728313357877778840, 0.728347619178799420, 0.728381878658951100, +0.728416136318148060, 0.728450392156304470, 0.728484646173334970, 0.728518898369154180, 0.728553148743675830, 0.728587397296814540, 0.728621644028484840, 0.728655888938601230, +0.728690132027077660, 0.728724373293828780, 0.728758612738769300, 0.728792850361812960, 0.728827086162874500, 0.728861320141868330, 0.728895552298709060, 0.728929782633310760, +0.728964011145587950, 0.728998237835455030, 0.729032462702826840, 0.729066685747617240, 0.729100906969740950, 0.729135126369112370, 0.729169343945646250, 0.729203559699256540, +0.729237773629857870, 0.729271985737364740, 0.729306196021692000, 0.729340404482753390, 0.729374611120463870, 0.729408815934738050, 0.729443018925489910, 0.729477220092634270, +0.729511419436085550, 0.729545616955758590, 0.729579812651567240, 0.729614006523426450, 0.729648198571250520, 0.729682388794954510, 0.729716577194452150, 0.729750763769658420, +0.729784948520487700, 0.729819131446854950, 0.729853312548674030, 0.729887491825859880, 0.729921669278327020, 0.729955844905990190, 0.729990018708763570, 0.730024190686561880, +0.730058360839299980, 0.730092529166891820, 0.730126695669252480, 0.730160860346296350, 0.730195023197938280, 0.730229184224092330, 0.730263343424673580, 0.730297500799596320, +0.730331656348775730, 0.730365810072125640, 0.730399961969561030, 0.730434112040996510, 0.730468260286347040, 0.730502406705526570, 0.730536551298450190, 0.730570694065032390, +0.730604835005188020, 0.730638974118831390, 0.730673111405877320, 0.730707246866240450, 0.730741380499835720, 0.730775512306577340, 0.730809642286380120, 0.730843770439159050, +0.730877896764828390, 0.730912021263302790, 0.730946143934497310, 0.730980264778326670, 0.731014383794705180, 0.731048500983547570, 0.731082616344768790, 0.731116729878283800, +0.731150841584006670, 0.731184951461852470, 0.731219059511735820, 0.731253165733571910, 0.731287270127274680, 0.731321372692759320, 0.731355473429940560, 0.731389572338733360, +0.731423669419051900, 0.731457764670811360, 0.731491858093926690, 0.731525949688312080, 0.731560039453882590, 0.731594127390552960, 0.731628213498238370, 0.731662297776852880, +0.731696380226311670, 0.731730460846529480, 0.731764539637421500, 0.731798616598901890, 0.731832691730885610, 0.731866765033287740, 0.731900836506023220, 0.731934906149006360, +0.731968973962152100, 0.732003039945375520, 0.732037104098591570, 0.732071166421714550, 0.732105226914659620, 0.732139285577342090, 0.732173342409675800, 0.732207397411576370, +0.732241450582958310, 0.732275501923736920, 0.732309551433826480, 0.732343599113142170, 0.732377644961598960, 0.732411688979111910, 0.732445731165595190, 0.732479771520964330, +0.732513810045133940, 0.732547846738019310, 0.732581881599534750, 0.732615914629595630, 0.732649945828116600, 0.732683975195013050, 0.732718002730199160, 0.732752028433590440, +0.732786052305101520, 0.732820074344647800, 0.732854094552143560, 0.732888112927504220, 0.732922129470644720, 0.732956144181479700, 0.732990157059924320, 0.733024168105893550, +0.733058177319302560, 0.733092184700065990, 0.733126190248098770, 0.733160193963316220, 0.733194195845633390, 0.733228195894964910, 0.733262194111225840, 0.733296190494331260, +0.733330185044196560, 0.733364177760736040, 0.733398168643865200, 0.733432157693498790, 0.733466144909552420, 0.733500130291940280, 0.733534113840577870, 0.733568095555380490, +0.733602075436262440, 0.733636053483139430, 0.733670029695926100, 0.733704004074538060, 0.733737976618889620, 0.733771947328896390, 0.733805916204473220, 0.733839883245535620, +0.733873848451997880, 0.733907811823775620, 0.733941773360783810, 0.733975733062937950, 0.734009690930152340, 0.734043646962342590, 0.734077601159423660, 0.734111553521310970, +0.734145504047919230, 0.734179452739163630, 0.734213399594959790, 0.734247344615222010, 0.734281287799865900, 0.734315229148806650, 0.734349168661959650, 0.734383106339239310, +0.734417042180561360, 0.734450976185840760, 0.734484908354992920, 0.734518838687932550, 0.734552767184575180, 0.734586693844835770, 0.734620618668629930, 0.734654541655872300, +0.734688462806478260, 0.734722382120363230, 0.734756299597442370, 0.734790215237630440, 0.734824129040843040, 0.734858041006995700, 0.734891951136002810, 0.734925859427780100, +0.734959765882242880, 0.734993670499306310, 0.735027573278885460, 0.735061474220895630, 0.735095373325251990, 0.735129270591870390, 0.735163166020665120, 0.735197059611552130, +0.735230951364446380, 0.735264841279263500, 0.735298729355918330, 0.735332615594326280, 0.735366499994402730, 0.735400382556063210, 0.735434263279222460, 0.735468142163796080, +0.735502019209699260, 0.735535894416847640, 0.735569767785156150, 0.735603639314540200, 0.735637509004915310, 0.735671376856196440, 0.735705242868299190, 0.735739107041138760, +0.735772969374630880, 0.735806829868690280, 0.735840688523232590, 0.735874545338173200, 0.735908400313427750, 0.735942253448911070, 0.735976104744538560, 0.736009954200225970, +0.736043801815888690, 0.736077647591441670, 0.736111491526800550, 0.736145333621880620, 0.736179173876597700, 0.736213012290866550, 0.736246848864602900, 0.736280683597722360, +0.736314516490139900, 0.736348347541771030, 0.736382176752531370, 0.736416004122336540, 0.736449829651101400, 0.736483653338741770, 0.736517475185172850, 0.736551295190310710, +0.736585113354069950, 0.736618929676366330, 0.736652744157115460, 0.736686556796233070, 0.736720367593633910, 0.736754176549233920, 0.736787983662948510, 0.736821788934693300, +0.736855592364383360, 0.736889393951934530, 0.736923193697262450, 0.736956991600282050, 0.736990787660909200, 0.737024581879059390, 0.737058374254648490, 0.737092164787591320, +0.737125953477803740, 0.737159740325201260, 0.737193525329699620, 0.737227308491213980, 0.737261089809660100, 0.737294869284953470, 0.737328646917009940, 0.737362422705744480, +0.737396196651073030, 0.737429968752911000, 0.737463739011174350, 0.737497507425778130, 0.737531273996638090, 0.737565038723669850, 0.737598801606789370, 0.737632562645911590, +0.737666321840952380, 0.737700079191827670, 0.737733834698452440, 0.737767588360742630, 0.737801340178613870, 0.737835090151982120, 0.737868838280762220, 0.737902584564870230, +0.737936329004221900, 0.737970071598732960, 0.738003812348318580, 0.738037551252894610, 0.738071288312376780, 0.738105023526681060, 0.738138756895722500, 0.738172488419416960, +0.738206218097680280, 0.738239945930428300, 0.738273671917576200, 0.738307396059039940, 0.738341118354735480, 0.738374838804577880, 0.738408557408483210, 0.738442274166367100, +0.738475989078145710, 0.738509702143734010, 0.738543413363047960, 0.738577122736003510, 0.738610830262516500, 0.738644535942502010, 0.738678239775876320, 0.738711941762554950, +0.738745641902454060, 0.738779340195488850, 0.738813036641575160, 0.738846731240628940, 0.738880423992566150, 0.738914114897302080, 0.738947803954752680, 0.738981491164834030, +0.739015176527461400, 0.739048860042550770, 0.739082541710018080, 0.739116221529779290, 0.739149899501749590, 0.739183575625845250, 0.739217249901981900, 0.739250922330075830, +0.739284592910042000, 0.739318261641796810, 0.739351928525255890, 0.739385593560335510, 0.739419256746950750, 0.739452918085018010, 0.739486577574452800, 0.739520235215171520, +0.739553891007089350, 0.739587544950122470, 0.739621197044187050, 0.739654847289198280, 0.739688495685072440, 0.739722142231725280, 0.739755786929073180, 0.739789429777031220, +0.739823070775515790, 0.739856709924442520, 0.739890347223727930, 0.739923982673287070, 0.739957616273036360, 0.739991248022891510, 0.740024877922768830, 0.740058505972583710, +0.740092132172252340, 0.740125756521690660, 0.740159379020814740, 0.740192999669540220, 0.740226618467783150, 0.740260235415459600, 0.740293850512485640, 0.740327463758776780, +0.740361075154249320, 0.740394684698819530, 0.740428292392402600, 0.740461898234915040, 0.740495502226272690, 0.740529104366391850, 0.740562704655188030, 0.740596303092577400, +0.740629899678476030, 0.740663494412800110, 0.740697087295465240, 0.740730678326387610, 0.740764267505483410, 0.740797854832668690, 0.740831440307859190, 0.740865023930970870, +0.740898605701920230, 0.740932185620623240, 0.740965763686995520, 0.740999339900953350, 0.741032914262413240, 0.741066486771290390, 0.741100057427501400, 0.741133626230962240, +0.741167193181589410, 0.741200758279298210, 0.741234321524005150, 0.741267882915626290, 0.741301442454078030, 0.741335000139275780, 0.741368555971136050, 0.741402109949575010, +0.741435662074508950, 0.741469212345853390, 0.741502760763524950, 0.741536307327439470, 0.741569852037513580, 0.741603394893662670, 0.741636935895803370, 0.741670475043851970, +0.741704012337724090, 0.741737547777336250, 0.741771081362604500, 0.741804613093445360, 0.741838142969774350, 0.741871670991508080, 0.741905197158562510, 0.741938721470854270, +0.741972243928298970, 0.742005764530813130, 0.742039283278312700, 0.742072800170714530, 0.742106315207933910, 0.742139828389887570, 0.742173339716491690, 0.742206849187662780, +0.742240356803316350, 0.742273862563369140, 0.742307366467737100, 0.742340868516337070, 0.742374368709084690, 0.742407867045896230, 0.742441363526688440, 0.742474858151376930, +0.742508350919878210, 0.742541841832108700, 0.742575330887984890, 0.742608818087422410, 0.742642303430337880, 0.742675786916647710, 0.742709268546268180, 0.742742748319115350, +0.742776226235105530, 0.742809702294155220, 0.742843176496180920, 0.742876648841098390, 0.742910119328824230, 0.742943587959274840, 0.742977054732366640, 0.743010519648015680, +0.743043982706138250, 0.743077443906651200, 0.743110903249470270, 0.743144360734512070, 0.743177816361693000, 0.743211270130929690, 0.743244722042137870, 0.743278172095234390, +0.743311620290135310, 0.743345066626757480, 0.743378511105016740, 0.743411953724829820, 0.743445394486112800, 0.743478833388782730, 0.743512270432755250, 0.743545705617947080, +0.743579138944274740, 0.743612570411654740, 0.743646000020003030, 0.743679427769236350, 0.743712853659271420, 0.743746277690023990, 0.743779699861410900, 0.743813120173348550, +0.743846538625753780, 0.743879955218542220, 0.743913369951630930, 0.743946782824936090, 0.743980193838374660, 0.744013602991862370, 0.744047010285316170, 0.744080415718652350, +0.744113819291787880, 0.744147221004638480, 0.744180620857121110, 0.744214018849152170, 0.744247414980648500, 0.744280809251525950, 0.744314201661701370, 0.744347592211091590, +0.744380980899612580, 0.744414367727181060, 0.744447752693713550, 0.744481135799127110, 0.744514517043337490, 0.744547896426261510, 0.744581273947815920, 0.744614649607917340, +0.744648023406481840, 0.744681395343426260, 0.744714765418667210, 0.744748133632121560, 0.744781499983705350, 0.744814864473335340, 0.744848227100928130, 0.744881587866400690, +0.744914946769668960, 0.744948303810649910, 0.744981658989260050, 0.745015012305416340, 0.745048363759034830, 0.745081713350032370, 0.745115061078325920, 0.745148406943831660, +0.745181750946466210, 0.745215093086146420, 0.745248433362789230, 0.745281771776310720, 0.745315108326627730, 0.745348443013656880, 0.745381775837315350, 0.745415106797518990, +0.745448435894184860, 0.745481763127229690, 0.745515088496570440, 0.745548412002123070, 0.745581733643804760, 0.745615053421532110, 0.745648371335222100, 0.745681687384790900, +0.745715001570155470, 0.745748313891232750, 0.745781624347939040, 0.745814932940191190, 0.745848239667906030, 0.745881544531000640, 0.745914847529391080, 0.745948148662994410, +0.745981447931727270, 0.746014745335506820, 0.746048040874249360, 0.746081334547871620, 0.746114626356290670, 0.746147916299423450, 0.746181204377186050, 0.746214490589495630, +0.746247774936269040, 0.746281057417423340, 0.746314338032874720, 0.746347616782540140, 0.746380893666336860, 0.746414168684181090, 0.746447441835989880, 0.746480713121680070, +0.746513982541168850, 0.746547250094372170, 0.746580515781207540, 0.746613779601591590, 0.746647041555441370, 0.746680301642673410, 0.746713559863204650, 0.746746816216951940, +0.746780070703832570, 0.746813323323762710, 0.746846574076659440, 0.746879822962439820, 0.746913069981020920, 0.746946315132319020, 0.746979558416251410, 0.747012799832734830, +0.747046039381686570, 0.747079277063022910, 0.747112512876661140, 0.747145746822518330, 0.747178978900510880, 0.747212209110555970, 0.747245437452570440, 0.747278663926471690, +0.747311888532176010, 0.747345111269600570, 0.747378332138662340, 0.747411551139278600, 0.747444768271365630, 0.747477983534840850, 0.747511196929621090, 0.747544408455623530, +0.747577618112764800, 0.747610825900961950, 0.747644031820131950, 0.747677235870192300, 0.747710438051059190, 0.747743638362650010, 0.747776836804882050, 0.747810033377671710, +0.747843228080936170, 0.747876420914592720, 0.747909611878558420, 0.747942800972749900, 0.747975988197084220, 0.748009173551478670, 0.748042357035850420, 0.748075538650116110, +0.748108718394192800, 0.748141896267997760, 0.748175072271448300, 0.748208246404460820, 0.748241418666952820, 0.748274589058841140, 0.748307757580043310, 0.748340924230475930, +0.748374089010056090, 0.748407251918701390, 0.748440412956328240, 0.748473572122854040, 0.748506729418195850, 0.748539884842271300, 0.748573038394996670, 0.748606190076289370, +0.748639339886066680, 0.748672487824245890, 0.748705633890743630, 0.748738778085477170, 0.748771920408363930, 0.748805060859321080, 0.748838199438265350, 0.748871336145114030, +0.748904470979784410, 0.748937603942194000, 0.748970735032259190, 0.749003864249897510, 0.749036991595026570, 0.749070117067562770, 0.749103240667423730, 0.749136362394526520, +0.749169482248788770, 0.749202600230126970, 0.749235716338458760, 0.749268830573701190, 0.749301942935771900, 0.749335053424587280, 0.749368162040065290, 0.749401268782122650, +0.749434373650677330, 0.749467476645645610, 0.749500577766945340, 0.749533677014493580, 0.749566774388207850, 0.749599869888004980, 0.749632963513802380, 0.749666055265517440, +0.749699145143067570, 0.749732233146369610, 0.749765319275341070, 0.749798403529899460, 0.749831485909961630, 0.749864566415444970, 0.749897645046266990, 0.749930721802345210, +0.749963796683596250, 0.749996869689937840, 0.750029940821287270, 0.750063010077562150, 0.750096077458679120, 0.750129142964556020, 0.750162206595110010, 0.750195268350258740, +0.750228328229919030, 0.750261386234008510, 0.750294442362444580, 0.750327496615144750, 0.750360548992025980, 0.750393599493005770, 0.750426648118001860, 0.750459694866930980, +0.750492739739710980, 0.750525782736259030, 0.750558823856492970, 0.750591863100329550, 0.750624900467686480, 0.750657935958481070, 0.750690969572631260, 0.750724001310053680, +0.750757031170666060, 0.750790059154385900, 0.750823085261130840, 0.750856109490817820, 0.750889131843364590, 0.750922152318688420, 0.750955170916707160, 0.750988187637337660, +0.751021202480497860, 0.751054215446105180, 0.751087226534076780, 0.751120235744330180, 0.751153243076783110, 0.751186248531353180, 0.751219252107957370, 0.751252253806513390, +0.751285253626938760, 0.751318251569151330, 0.751351247633067930, 0.751384241818606520, 0.751417234125684400, 0.751450224554219500, 0.751483213104128800, 0.751516199775330020, +0.751549184567740780, 0.751582167481278820, 0.751615148515861200, 0.751648127671405650, 0.751681104947829800, 0.751714080345051490, 0.751747053862987680, 0.751780025501556310, +0.751812995260675130, 0.751845963140261090, 0.751878929140232240, 0.751911893260506000, 0.751944855501000430, 0.751977815861632260, 0.752010774342319670, 0.752043730942980160, +0.752076685663531470, 0.752109638503890900, 0.752142589463976270, 0.752175538543705110, 0.752208485742995370, 0.752241431061764110, 0.752274374499929290, 0.752307316057408530, +0.752340255734119780, 0.752373193529980220, 0.752406129444907480, 0.752439063478819840, 0.752471995631634140, 0.752504925903268560, 0.752537854293640620, 0.752570780802668370, +0.752603705430268780, 0.752636628176360010, 0.752669549040859700, 0.752702468023685680, 0.752735385124755350, 0.752768300343986450, 0.752801213681296820, 0.752834125136604530, +0.752867034709826520, 0.752899942400880980, 0.752932848209685650, 0.752965752136158350, 0.752998654180216500, 0.753031554341777930, 0.753064452620760830, 0.753097349017082250, +0.753130243530660270, 0.753163136161412840, 0.753196026909257690, 0.753228915774112330, 0.753261802755894600, 0.753294687854522360, 0.753327571069913660, 0.753360452401985790, +0.753393331850656820, 0.753426209415844370, 0.753459085097466840, 0.753491958895441290, 0.753524830809685800, 0.753557700840118190, 0.753590568986656770, 0.753623435249218490, +0.753656299627721630, 0.753689162122084370, 0.753722022732223880, 0.753754881458058470, 0.753787738299505740, 0.753820593256483980, 0.753853446328910380, 0.753886297516703220, +0.753919146819780340, 0.753951994238059810, 0.753984839771459030, 0.754017683419896170, 0.754050525183289080, 0.754083365061556040, 0.754116203054614240, 0.754149039162381960, +0.754181873384777050, 0.754214705721717780, 0.754247536173121350, 0.754280364738906250, 0.754313191418990110, 0.754346016213291340, 0.754378839121727210, 0.754411660144215900, +0.754444479280675930, 0.754477296531024360, 0.754510111895179580, 0.754542925373059450, 0.754575736964582360, 0.754608546669665590, 0.754641354488227560, 0.754674160420185980, +0.754706964465459370, 0.754739766623965140, 0.754772566895621440, 0.754805365280346250, 0.754838161778057960, 0.754870956388674070, 0.754903749112112780, 0.754936539948292020, +0.754969328897130200, 0.755002115958544830, 0.755034901132454190, 0.755067684418776590, 0.755100465817429400, 0.755133245328331150, 0.755166022951399670, 0.755198798686553490, +0.755231572533710090, 0.755264344492787680, 0.755297114563704410, 0.755329882746378580, 0.755362649040727810, 0.755395413446670490, 0.755428175964124590, 0.755460936593008500, +0.755493695333239850, 0.755526452184736910, 0.755559207147417870, 0.755591960221201010, 0.755624711406004070, 0.755657460701745330, 0.755690208108343200, 0.755722953625715290, +0.755755697253780000, 0.755788438992455400, 0.755821178841660110, 0.755853916801311530, 0.755886652871328060, 0.755919387051628090, 0.755952119342129910, 0.755984849742751040, +0.756017578253410210, 0.756050304874025360, 0.756083029604515010, 0.756115752444796780, 0.756148473394789300, 0.756181192454410510, 0.756213909623579040, 0.756246624902212620, +0.756279338290229530, 0.756312049787548070, 0.756344759394086850, 0.756377467109763390, 0.756410172934496310, 0.756442876868204110, 0.756475578910804410, 0.756508279062215630, +0.756540977322356260, 0.756573673691144810, 0.756606368168498800, 0.756639060754336850, 0.756671751448577350, 0.756704440251138700, 0.756737127161938640, 0.756769812180895670, +0.756802495307928310, 0.756835176542954740, 0.756867855885893110, 0.756900533336662520, 0.756933208895179900, 0.756965882561364320, 0.756998554335134080, 0.757031224216407450, +0.757063892205102730, 0.757096558301138310, 0.757129222504433040, 0.757161884814904100, 0.757194545232470540, 0.757227203757050550, 0.757259860388562520, 0.757292515126924970, +0.757325167972055960, 0.757357818923874220, 0.757390467982298370, 0.757423115147245810, 0.757455760418635380, 0.757488403796385710, 0.757521045280414970, 0.757553684870641560, +0.757586322566983990, 0.757618958369360550, 0.757651592277690410, 0.757684224291890640, 0.757716854411880410, 0.757749482637577910, 0.757782108968901750, 0.757814733405770320, +0.757847355948102040, 0.757879976595815960, 0.757912595348829270, 0.757945212207061240, 0.757977827170430050, 0.758010440238854440, 0.758043051412252700, 0.758075660690543220, +0.758108268073644620, 0.758140873561476080, 0.758173477153954670, 0.758206078850999440, 0.758238678652529140, 0.758271276558462160, 0.758303872568717010, 0.758336466683212200, +0.758369058901866680, 0.758401649224597960, 0.758434237651325120, 0.758466824181966760, 0.758499408816441290, 0.758531991554667330, 0.758564572396563270, 0.758597151342047970, +0.758629728391040260, 0.758662303543457650, 0.758694876799219320, 0.758727448158243780, 0.758760017620449530, 0.758792585185755430, 0.758825150854079760, 0.758857714625341130, +0.758890276499458950, 0.758922836476350390, 0.758955394555934750, 0.758987950738130630, 0.759020505022856670, 0.759053057410031480, 0.759085607899573580, 0.759118156491402240, +0.759150703185434980, 0.759183247981590980, 0.759215790879788740, 0.759248331879947110, 0.759280870981984600, 0.759313408185819940, 0.759345943491371740, 0.759378476898559310, +0.759411008407300140, 0.759443538017513410, 0.759476065729117740, 0.759508591542031990, 0.759541115456174860, 0.759573637471464780, 0.759606157587820690, 0.759638675805161760, +0.759671192123405610, 0.759703706542471440, 0.759736219062277950, 0.759768729682744000, 0.759801238403788100, 0.759833745225329200, 0.759866250147286590, 0.759898753169577670, +0.759931254292121830, 0.759963753514838030, 0.759996250837644660, 0.760028746260460690, 0.760061239783204940, 0.760093731405796060, 0.760126221128153420, 0.760158708950194660, +0.760191194871839170, 0.760223678893005570, 0.760256161013612820, 0.760288641233579750, 0.760321119552825000, 0.760353595971268060, 0.760386070488826560, 0.760418543105419900, +0.760451013820966800, 0.760483482635386230, 0.760515949548596910, 0.760548414560517800, 0.760580877671067520, 0.760613338880165690, 0.760645798187730040, 0.760678255593679740, +0.760710711097933870, 0.760743164700411260, 0.760775616401030640, 0.760808066199711090, 0.760840514096371320, 0.760872960090930860, 0.760905404183307430, 0.760937846373420430, +0.760970286661188820, 0.761002725046531550, 0.761035161529367450, 0.761067596109615390, 0.761100028787194960, 0.761132459562023910, 0.761164888434021750, 0.761197315403107310, +0.761229740469199560, 0.761262163632217440, 0.761294584892080020, 0.761327004248706030, 0.761359421702015090, 0.761391837251925160, 0.761424250898355530, 0.761456662641225250, +0.761489072480453390, 0.761521480415958800, 0.761553886447660530, 0.761586290575478220, 0.761618692799329480, 0.761651093119134040, 0.761683491534810850, 0.761715888046278880, +0.761748282653457290, 0.761780675356264920, 0.761813066154620970, 0.761845455048444810, 0.761877842037654520, 0.761910227122169600, 0.761942610301909130, 0.761974991576792050, +0.762007370946737540, 0.762039748411664660, 0.762072123971492380, 0.762104497626140300, 0.762136869375526490, 0.762169239219570470, 0.762201607158191300, 0.762233973191308150, +0.762266337318840080, 0.762298699540706170, 0.762331059856826140, 0.762363418267117840, 0.762395774771501000, 0.762428129369894680, 0.762460482062218060, 0.762492832848390200, +0.762525181728330280, 0.762557528701957480, 0.762589873769191410, 0.762622216929950030, 0.762654558184153180, 0.762686897531719810, 0.762719234972569330, 0.762751570506620680, +0.762783904133793160, 0.762816235854005820, 0.762848565667178510, 0.762880893573229190, 0.762913219572077580, 0.762945543663642980, 0.762977865847844550, 0.763010186124601360, +0.763042504493832820, 0.763074820955458530, 0.763107135509396680, 0.763139448155566890, 0.763171758893888550, 0.763204067724280840, 0.763236374646662830, 0.763268679660954020, +0.763300982767073480, 0.763333283964941050, 0.763365583254474790, 0.763397880635594660, 0.763430176108219730, 0.763462469672269380, 0.763494761327662920, 0.763527051074319510, +0.763559338912159100, 0.763591624841099660, 0.763623908861061240, 0.763656190971963020, 0.763688471173724400, 0.763720749466264560, 0.763753025849502780, 0.763785300323358450, +0.763817572887751430, 0.763849843542599990, 0.763882112287823880, 0.763914379123342590, 0.763946644049075200, 0.763978907064941310, 0.764011168170860120, 0.764043427366751020, +0.764075684652533840, 0.764107940028126990, 0.764140193493450190, 0.764172445048422970, 0.764204694692964700, 0.764236942426994580, 0.764269188250432220, 0.764301432163197350, +0.764333674165208370, 0.764365914256385230, 0.764398152436647220, 0.764430388705913950, 0.764462623064104620, 0.764494855511138720, 0.764527086046935760, 0.764559314671415580, +0.764591541384496590, 0.764623766186098730, 0.764655989076141520, 0.764688210054544240, 0.764720429121226510, 0.764752646276107620, 0.764784861519107180, 0.764817074850145160, +0.764849286269139840, 0.764881495776011390, 0.764913703370679100, 0.764945909053062590, 0.764978112823081370, 0.765010314680654720, 0.765042514625702940, 0.765074712658144310, +0.765106908777898890, 0.765139102984886190, 0.765171295279025830, 0.765203485660237100, 0.765235674128439740, 0.765267860683553120, 0.765300045325497450, 0.765332228054191100, +0.765364408869554260, 0.765396587771506320, 0.765428764759966910, 0.765460939834855520, 0.765493112996091910, 0.765525284243596000, 0.765557453577286440, 0.765589620997083050, +0.765621786502905800, 0.765653950094673960, 0.765686111772307280, 0.765718271535725360, 0.765750429384847720, 0.765782585319594530, 0.765814739339884310, 0.765846891445637330, +0.765879041636773120, 0.765911189913211170, 0.765943336274871430, 0.765975480721673210, 0.766007623253536330, 0.766039763870380970, 0.766071902572125650, 0.766104039358690540, +0.766136174229995360, 0.766168307185959740, 0.766200438226503300, 0.766232567351545880, 0.766264694561007540, 0.766296819854806910, 0.766328943232864160, 0.766361064695099130, +0.766393184241431440, 0.766425301871780710, 0.766457417586066780, 0.766489531384209280, 0.766521643266128590, 0.766553753231743240, 0.766585861280973390, 0.766617967413739000, +0.766650071629959570, 0.766682173929555070, 0.766714274312445100, 0.766746372778549400, 0.766778469327788370, 0.766810563960080630, 0.766842656675346460, 0.766874747473505700, +0.766906836354477980, 0.766938923318183250, 0.766971008364541130, 0.767003091493472120, 0.767035172704894740, 0.767067251998729490, 0.767099329374896110, 0.767131404833314430, +0.767163478373904200, 0.767195549996585240, 0.767227619701277510, 0.767259687487901190, 0.767291753356375120, 0.767323817306619690, 0.767355879338554650, 0.767387939452100040, +0.767419997647175500, 0.767452053923700970, 0.767484108281596860, 0.767516160720781880, 0.767548211241176560, 0.767580259842700730, 0.767612306525274240, 0.767644351288816920, +0.767676394133248730, 0.767708435058489620, 0.767740474064460000, 0.767772511151078580, 0.767804546318265890, 0.767836579565941870, 0.767868610894026360, 0.767900640302439320, +0.767932667791100700, 0.767964693359930340, 0.767996717008848860, 0.768028738737775110, 0.768060758546629360, 0.768092776435331800, 0.768124792403802380, 0.768156806451960830, +0.768188818579727320, 0.768220828787022360, 0.768252837073764680, 0.768284843439875020, 0.768316847885273210, 0.768348850409879210, 0.768380851013613200, 0.768412849696395010, +0.768444846458144700, 0.768476841298782800, 0.768508834218228240, 0.768540825216401660, 0.768572814293222990, 0.768604801448612210, 0.768636786682489580, 0.768668769994774850, +0.768700751385388180, 0.768732730854250310, 0.768764708401279970, 0.768796684026397890, 0.768828657729524020, 0.768860629510578650, 0.768892599369481620, 0.768924567306153110, +0.768956533320513720, 0.768988497412482540, 0.769020459581979950, 0.769052419828926360, 0.769084378153241600, 0.769116334554845960, 0.769148289033659500, 0.769180241589602300, +0.769212192222595070, 0.769244140932556770, 0.769276087719408030, 0.769308032583069230, 0.769339975523460230, 0.769371916540501410, 0.769403855634112730, 0.769435792804214920, +0.769467728050727160, 0.769499661373570070, 0.769531592772663810, 0.769563522247928570, 0.769595449799284510, 0.769627375426651830, 0.769659299129950680, 0.769691220909101910, +0.769723140764024480, 0.769755058694639230, 0.769786974700866320, 0.769818888782625940, 0.769850800939838380, 0.769882711172423790, 0.769914619480302490, 0.769946525863395070, +0.769978430321620940, 0.770010332854900610, 0.770042233463154480, 0.770074132146302830, 0.770106028904265830, 0.770137923736963660, 0.770169816644317380, 0.770201707626245850, +0.770233596682670110, 0.770265483813510450, 0.770297369018686950, 0.770329252298120220, 0.770361133651730200, 0.770393013079437420, 0.770424890581162590, 0.770456766156825010, +0.770488639806345520, 0.770520511529644400, 0.770552381326642060, 0.770584249197258760, 0.770616115141414810, 0.770647979159031160, 0.770679841250026980, 0.770711701414323210, +0.770743559651840270, 0.770775415962498320, 0.770807270346217770, 0.770839122802919220, 0.770870973332522750, 0.770902821934949410, 0.770934668610118500, 0.770966513357950860, +0.770998356178366980, 0.771030197071287170, 0.771062036036631930, 0.771093873074321530, 0.771125708184276500, 0.771157541366417790, 0.771189372620664670, 0.771221201946938000, +0.771253029345158380, 0.771284854815246220, 0.771316678357121920, 0.771348499970705870, 0.771380319655919240, 0.771412137412681220, 0.771443953240912750, 0.771475767140534450, +0.771507579111466830, 0.771539389153630180, 0.771571197266945010, 0.771603003451331930, 0.771634807706711890, 0.771666610033004190, 0.771698410430130100, 0.771730208898009920, +0.771762005436564150, 0.771793800045713410, 0.771825592725378210, 0.771857383475478940, 0.771889172295936900, 0.771920959186671360, 0.771952744147603290, 0.771984527178653510, +0.772016308279742320, 0.772048087450790340, 0.772079864691718190, 0.772111640002446920, 0.772143413382896050, 0.772175184832986530, 0.772206954352639200, 0.772238721941774340, +0.772270487600312800, 0.772302251328174980, 0.772334013125281490, 0.772365772991553620, 0.772397530926910660, 0.772429286931273880, 0.772461041004563920, 0.772492793146701380, +0.772524543357606900, 0.772556291637200960, 0.772588037985404870, 0.772619782402138130, 0.772651524887322030, 0.772683265440876950, 0.772715004062723860, 0.772746740752783160, +0.772778475510975670, 0.772810208337221920, 0.772841939231443290, 0.772873668193559290, 0.772905395223491000, 0.772937120321159240, 0.772968843486484760, 0.773000564719388050, +0.773032284019790070, 0.773064001387611330, 0.773095716822773120, 0.773127430325195040, 0.773159141894798400, 0.773190851531503910, 0.773222559235232310, 0.773254265005904330, +0.773285968843440590, 0.773317670747762590, 0.773349370718789840, 0.773381068756443630, 0.773412764860644810, 0.773444459031313980, 0.773476151268372100, 0.773507841571739800, +0.773539529941337790, 0.773571216377087700, 0.773602900878908930, 0.773634583446722870, 0.773666264080450360, 0.773697942780012250, 0.773729619545329260, 0.773761294376322130, +0.773792967272911910, 0.773824638235019790, 0.773856307262565490, 0.773887974355470410, 0.773919639513655390, 0.773951302737041270, 0.773982964025549000, 0.774014623379099210, +0.774046280797613400, 0.774077936281011400, 0.774109589829214520, 0.774141241442143690, 0.774172891119719760, 0.774204538861863580, 0.774236184668496090, 0.774267828539538130, +0.774299470474911100, 0.774331110474534840, 0.774362748538330870, 0.774394384666220010, 0.774426018858123230, 0.774457651113961370, 0.774489281433655360, 0.774520909817126620, +0.774552536264295210, 0.774584160775082300, 0.774615783349409170, 0.774647403987196450, 0.774679022688365300, 0.774710639452836470, 0.774742254280531120, 0.774773867171370760, +0.774805478125275120, 0.774837087142165700, 0.774868694221963690, 0.774900299364589930, 0.774931902569965360, 0.774963503838011050, 0.774995103168647950, 0.775026700561797680, +0.775058296017380190, 0.775089889535316880, 0.775121481115528810, 0.775153070757937050, 0.775184658462462650, 0.775216244229026570, 0.775247828057550550, 0.775279409947954300, +0.775310989900159450, 0.775342567914087290, 0.775374143989658650, 0.775405718126794600, 0.775437290325416310, 0.775468860585444730, 0.775500428906801600, 0.775531995289406860, +0.775563559733182140, 0.775595122238048500, 0.775626682803926990, 0.775658241430738920, 0.775689798118405100, 0.775721352866846850, 0.775752905675985760, 0.775784456545741910, +0.775816005476036800, 0.775847552466791820, 0.775879097517927830, 0.775910640629366210, 0.775942181801027920, 0.775973721032834800, 0.776005258324706680, 0.776036793676565530, +0.776068327088332400, 0.776099858559928360, 0.776131388091274800, 0.776162915682292680, 0.776194441332903270, 0.776225965043028320, 0.776257486812587880, 0.776289006641503800, +0.776320524529697130, 0.776352040477089280, 0.776383554483601190, 0.776415066549154260, 0.776446576673670230, 0.776478084857069150, 0.776509591099272870, 0.776541095400202660, +0.776572597759779710, 0.776604098177925310, 0.776635596654560610, 0.776667093189606920, 0.776698587782986060, 0.776730080434618110, 0.776761571144425010, 0.776793059912327940, +0.776824546738248300, 0.776856031622107260, 0.776887514563826100, 0.776918995563326220, 0.776950474620529350, 0.776981951735355780, 0.777013426907727340, 0.777044900137565330, +0.777076371424791020, 0.777107840769325820, 0.777139308171091000, 0.777170773630008530, 0.777202237145998450, 0.777233698718982850, 0.777265158348883100, 0.777296616035620280, +0.777328071779116000, 0.777359525579291550, 0.777390977436068330, 0.777422427349368170, 0.777453875319111360, 0.777485321345219860, 0.777516765427615050, 0.777548207566218340, +0.777579647760951230, 0.777611086011734900, 0.777642522318490850, 0.777673956681141030, 0.777705389099605740, 0.777736819573807030, 0.777768248103666290, 0.777799674689104940, +0.777831099330044350, 0.777862522026406040, 0.777893942778111970, 0.777925361585082520, 0.777956778447239650, 0.777988193364504750, 0.778019606336799450, 0.778051017364045140, +0.778082426446163320, 0.778113833583075400, 0.778145238774703430, 0.778176642020967810, 0.778208043321790610, 0.778239442677093220, 0.778270840086797260, 0.778302235550824230, +0.778333629069095640, 0.778365020641533460, 0.778396410268058280, 0.778427797948591960, 0.778459183683056220, 0.778490567471372460, 0.778521949313462410, 0.778553329209247360, +0.778584707158649030, 0.778616083161589480, 0.778647457217989110, 0.778678829327770220, 0.778710199490854180, 0.778741567707162630, 0.778772933976617180, 0.778804298299139440, +0.778835660674650930, 0.778867021103073820, 0.778898379584328500, 0.778929736118337380, 0.778961090705021840, 0.778992443344303620, 0.779023794036104220, 0.779055142780345380, +0.779086489576949370, 0.779117834425836380, 0.779149177326928900, 0.779180518280148450, 0.779211857285416750, 0.779243194342655320, 0.779274529451785990, 0.779305862612730270, +0.779337193825410450, 0.779368523089747130, 0.779399850405662510, 0.779431175773078300, 0.779462499191916010, 0.779493820662097600, 0.779525140183544570, 0.779556457756179320, +0.779587773379922360, 0.779619087054695850, 0.779650398780421750, 0.779681708557021570, 0.779713016384417150, 0.779744322262530210, 0.779775626191282490, 0.779806928170596160, +0.779838228200392060, 0.779869526280592360, 0.779900822411118800, 0.779932116591893210, 0.779963408822837320, 0.779994699103872980, 0.780025987434921800, 0.780057273815906280, +0.780088558246746940, 0.780119840727366290, 0.780151121257685930, 0.780182399837627830, 0.780213676467113700, 0.780244951146065510, 0.780276223874405320, 0.780307494652054180, +0.780338763478934160, 0.780370030354967330, 0.780401295280075400, 0.780432558254180230, 0.780463819277203650, 0.780495078349067510, 0.780526335469694190, 0.780557590639004540, +0.780588843856920960, 0.780620095123365170, 0.780651344438259230, 0.780682591801524880, 0.780713837213084070, 0.780745080672858640, 0.780776322180771090, 0.780807561736742150, +0.780838799340694330, 0.780870034992549480, 0.780901268692229640, 0.780932500439656560, 0.780963730234752180, 0.780994958077439130, 0.781026183967638010, 0.781057407905271560, +0.781088629890261510, 0.781119849922529920, 0.781151068001998630, 0.781182284128589810, 0.781213498302225200, 0.781244710522827400, 0.781275920790317270, 0.781307129104617300, +0.781338335465649570, 0.781369539873335910, 0.781400742327598490, 0.781431942828359260, 0.781463141375540630, 0.781494337969063650, 0.781525532608850830, 0.781556725294824120, +0.781587916026905580, 0.781619104805017280, 0.781650291629081280, 0.781681476499019530, 0.781712659414754540, 0.781743840376207480, 0.781775019383300740, 0.781806196435956500, +0.781837371534096710, 0.781868544677643550, 0.781899715866518960, 0.781930885100645230, 0.781962052379944650, 0.781993217704338490, 0.782024381073749280, 0.782055542488099160, +0.782086701947310110, 0.782117859451304300, 0.782149015000003890, 0.782180168593331500, 0.782211320231208100, 0.782242469913556390, 0.782273617640298570, 0.782304763411356690, +0.782335907226652800, 0.782367049086109210, 0.782398188989648080, 0.782429326937191920, 0.782460462928662000, 0.782491596963980740, 0.782522729043070630, 0.782553859165853630, +0.782584987332252120, 0.782616113542187960, 0.782647237795583650, 0.782678360092361690, 0.782709480432443370, 0.782740598815751310, 0.782771715242207790, 0.782802829711734980, +0.782833942224255060, 0.782865052779690210, 0.782896161377963360, 0.782927268018995590, 0.782958372702709630, 0.782989475429027750, 0.783020576197872130, 0.783051675009165060, +0.783082771862828820, 0.783113866758785690, 0.783144959696958410, 0.783176050677268250, 0.783207139699637840, 0.783238226763989690, 0.783269311870245950, 0.783300395018328930, +0.783331476208160900, 0.783362555439664710, 0.783393632712761630, 0.783424708027374410, 0.783455781383425530, 0.783486852780837070, 0.783517922219531540, 0.783548989699431210, +0.783580055220458370, 0.783611118782535980, 0.783642180385585200, 0.783673240029528980, 0.783704297714289730, 0.783735353439789730, 0.783766407205951250, 0.783797459012696820, +0.783828508859948700, 0.783859556747629860, 0.783890602675661690, 0.783921646643966910, 0.783952688652468030, 0.783983728701087460, 0.784014766789747460, 0.784045802918370670, +0.784076837086879920, 0.784107869295196380, 0.784138899543243340, 0.784169927830942970, 0.784200954158217780, 0.784231978524990270, 0.784263000931182730, 0.784294021376717780, +0.784325039861518250, 0.784356056385505540, 0.784387070948602720, 0.784418083550732280, 0.784449094191816520, 0.784480102871778160, 0.784511109590539490, 0.784542114348023010, +0.784573117144151900, 0.784604117978847330, 0.784635116852032470, 0.784666113763629820, 0.784697108713561910, 0.784728101701751330, 0.784759092728120390, 0.784790081792592240, +0.784821068895088400, 0.784852054035531820, 0.784883037213845220, 0.784914018429950900, 0.784944997683771570, 0.784975974975229860, 0.785006950304248050, 0.785037923670749540, +0.785068895074655600, 0.785099864515889420, 0.785130831994373610, 0.785161797510030680, 0.785192761062783350, 0.785223722652554020, 0.785254682279265980, 0.785285639942840620, +0.785316595643201330, 0.785347549380270400, 0.785378501153970570, 0.785409450964224540, 0.785440398810954950, 0.785471344694084310, 0.785502288613535880, 0.785533230569231080, +0.785564170561093290, 0.785595108589045130, 0.785626044653009110, 0.785656978752907960, 0.785687910888664410, 0.785718841060201070, 0.785749769267441220, 0.785780695510306380, +0.785811619788719720, 0.785842542102604070, 0.785873462451882050, 0.785904380836476400, 0.785935297256309840, 0.785966211711305540, 0.785997124201385120, 0.786028034726471980, +0.786058943286488620, 0.786089849881357990, 0.786120754511002830, 0.786151657175345630, 0.786182557874309350, 0.786213456607817160, 0.786244353375790910, 0.786275248178153750, +0.786306141014828320, 0.786337031885737670, 0.786367920790804420, 0.786398807729951410, 0.786429692703101260, 0.786460575710177580, 0.786491456751101770, 0.786522335825797450, +0.786553212934187230, 0.786584088076193950, 0.786614961251740460, 0.786645832460749590, 0.786676701703144630, 0.786707568978847420, 0.786738434287781230, 0.786769297629869020, +0.786800159005033640, 0.786831018413197690, 0.786861875854284350, 0.786892731328216240, 0.786923584834916870, 0.786954436374307950, 0.786985285946313010, 0.787016133550854760, +0.787046979187856270, 0.787077822857240260, 0.787108664558929690, 0.787139504292848070, 0.787170342058917120, 0.787201177857060340, 0.787232011687200580, 0.787262843549260790, +0.787293673443163920, 0.787324501368832810, 0.787355327326190510, 0.787386151315160430, 0.787416973335664410, 0.787447793387625940, 0.787478611470967980, 0.787509427585613490, +0.787540241731485510, 0.787571053908506900, 0.787601864116600600, 0.787632672355690230, 0.787663478625697520, 0.787694282926546310, 0.787725085258159210, 0.787755885620459510, +0.787786684013370040, 0.787817480436813990, 0.787848274890714630, 0.787879067374994020, 0.787909857889575900, 0.787940646434383000, 0.787971433009338580, 0.788002217614365510, +0.788033000249386940, 0.788063780914325830, 0.788094559609105790, 0.788125336333648900, 0.788156111087878640, 0.788186883871717980, 0.788217654685090310, 0.788248423527918350, +0.788279190400125400, 0.788309955301634950, 0.788340718232369180, 0.788371479192251590, 0.788402238181205250, 0.788432995199153330, 0.788463750246018890, 0.788494503321725100, +0.788525254426195030, 0.788556003559352400, 0.788586750721119280, 0.788617495911419280, 0.788648239130175450, 0.788678980377310990, 0.788709719652749160, 0.788740456956413040, +0.788771192288225790, 0.788801925648111020, 0.788832657035990930, 0.788863386451789220, 0.788894113895429070, 0.788924839366833550, 0.788955562865925940, 0.788986284392629520, +0.789017003946867910, 0.789047721528563170, 0.789078437137639140, 0.789109150774019110, 0.789139862437626130, 0.789170572128383490, 0.789201279846214470, 0.789231985591042130, +0.789262689362790540, 0.789293391161381530, 0.789324090986739170, 0.789354788838786510, 0.789385484717446850, 0.789416178622643570, 0.789446870554299740, 0.789477560512338860, +0.789508248496684550, 0.789538934507259090, 0.789569618543986220, 0.789600300606789430, 0.789630980695591790, 0.789661658810316690, 0.789692334950887530, 0.789723009117228040, +0.789753681309260490, 0.789784351526908730, 0.789815019770096050, 0.789845686038745830, 0.789876350332781470, 0.789907012652126150, 0.789937672996703370, 0.789968331366436960, +0.789998987761249110, 0.790029642181063750, 0.790060294625804400, 0.790090945095394240, 0.790121593589756750, 0.790152240108815240, 0.790182884652493760, 0.790213527220714470, +0.790244167813401340, 0.790274806430477870, 0.790305443071867230, 0.790336077737493150, 0.790366710427278800, 0.790397341141147680, 0.790427969879023750, 0.790458596640829290, +0.790489221426488480, 0.790519844235924470, 0.790550465069060900, 0.790581083925821270, 0.790611700806128860, 0.790642315709907170, 0.790672928637080160, 0.790703539587570450, +0.790734148561301750, 0.790764755558197810, 0.790795360578181890, 0.790825963621177630, 0.790856564687108410, 0.790887163775898290, 0.790917760887469790, 0.790948356021746850, +0.790978949178653080, 0.791009540358111880, 0.791040129560046880, 0.791070716784381460, 0.791101302031039340, 0.791131885299944490, 0.791162466591019410, 0.791193045904188040, +0.791223623239374120, 0.791254198596501150, 0.791284771975492740, 0.791315343376272410, 0.791345912798763650, 0.791376480242890650, 0.791407045708575900, 0.791437609195743570, +0.791468170704317190, 0.791498730234220460, 0.791529287785376790, 0.791559843357710010, 0.791590396951144080, 0.791620948565601610, 0.791651498201006890, 0.791682045857283300, +0.791712591534354690, 0.791743135232144570, 0.791773676950576540, 0.791804216689574350, 0.791834754449062260, 0.791865290228962570, 0.791895824029199780, 0.791926355849697390, +0.791956885690379140, 0.791987413551168640, 0.792017939431989610, 0.792048463332766350, 0.792078985253421350, 0.792109505193878790, 0.792140023154062510, 0.792170539133896230, +0.792201053133303580, 0.792231565152208270, 0.792262075190534150, 0.792292583248205280, 0.792323089325144390, 0.792353593421275870, 0.792384095536523340, 0.792414595670810520, +0.792445093824061250, 0.792475589996199270, 0.792506084187148300, 0.792536576396832610, 0.792567066625174950, 0.792597554872099600, 0.792628041137530490, 0.792658525421391150, +0.792689007723605620, 0.792719488044097420, 0.792749966382791160, 0.792780442739609460, 0.792810917114476490, 0.792841389507316420, 0.792871859918052760, 0.792902328346609450, +0.792932794792910340, 0.792963259256879270, 0.792993721738440630, 0.793024182237517030, 0.793054640754033090, 0.793085097287912430, 0.793115551839079110, 0.793146004407456860, +0.793176454992969630, 0.793206903595541360, 0.793237350215096230, 0.793267794851557180, 0.793298237504848740, 0.793328678174894610, 0.793359116861618860, 0.793389553564945340, +0.793419988284797870, 0.793450421021100970, 0.793480851773777470, 0.793511280542751880, 0.793541707327948150, 0.793572132129290010, 0.793602554946701620, 0.793632975780106830, +0.793663394629429590, 0.793693811494594500, 0.793724226375524200, 0.793754639272143400, 0.793785050184376060, 0.793815459112146020, 0.793845866055377320, 0.793876271013993940, +0.793906673987920470, 0.793937074977079770, 0.793967473981396440, 0.793997871000794330, 0.794028266035197610, 0.794058659084530220, 0.794089050148716110, 0.794119439227679360, +0.794149826321344680, 0.794180211429634800, 0.794210594552474450, 0.794240975689787580, 0.794271354841498240, 0.794301732007530630, 0.794332107187808560, 0.794362480382256320, +0.794392851590798310, 0.794423220813357700, 0.794453588049858990, 0.794483953300226360, 0.794514316564383870, 0.794544677842255580, 0.794575037133765540, 0.794605394438838490, +0.794635749757397480, 0.794666103089366920, 0.794696454434671300, 0.794726803793234460, 0.794757151164980580, 0.794787496549833830, 0.794817839947718370, 0.794848181358558840, +0.794878520782278280, 0.794908858218801420, 0.794939193668052440, 0.794969527129955500, 0.794999858604434670, 0.795030188091414350, 0.795060515590818360, 0.795090841102571780, +0.795121164626597430, 0.795151486162820280, 0.795181805711164370, 0.795212123271553880, 0.795242438843913210, 0.795272752428166420, 0.795303064024238230, 0.795333373632051810, +0.795363681251532010, 0.795393986882602990, 0.795424290525189040, 0.795454592179214330, 0.795484891844603140, 0.795515189521279750, 0.795545485209168900, 0.795575778908193860, +0.795606070618279260, 0.795636360339349590, 0.795666648071328920, 0.795696933814141750, 0.795727217567712140, 0.795757499331965050, 0.795787779106823740, 0.795818056892212860, +0.795848332688056990, 0.795878606494280110, 0.795908878310806810, 0.795939148137561390, 0.795969415974468020, 0.795999681821451640, 0.796029945678435550, 0.796060207545344570, +0.796090467422103100, 0.796120725308635420, 0.796150981204865940, 0.796181235110719030, 0.796211487026118990, 0.796241736950990760, 0.796271984885257740, 0.796302230828844660, +0.796332474781676130, 0.796362716743676310, 0.796392956714769730, 0.796423194694880760, 0.796453430683934260, 0.796483664681853720, 0.796513896688564090, 0.796544126703989660, +0.796574354728054820, 0.796604580760684190, 0.796634804801802150, 0.796665026851333000, 0.796695246909201900, 0.796725464975332030, 0.796755681049648670, 0.796785895132075980, +0.796816107222538590, 0.796846317320960900, 0.796876525427267390, 0.796906731541382700, 0.796936935663231650, 0.796967137792737650, 0.796997337929825860, 0.797027536074420780, +0.797057732226446820, 0.797087926385828480, 0.797118118552490370, 0.797148308726357560, 0.797178496907353320, 0.797208683095402940, 0.797238867290430810, 0.797269049492361550, +0.797299229701119660, 0.797329407916629650, 0.797359584138816140, 0.797389758367604170, 0.797419930602917380, 0.797450100844680600, 0.797480269092818660, 0.797510435347256070, +0.797540599607917340, 0.797570761874727200, 0.797600922147610580, 0.797631080426491220, 0.797661236711294070, 0.797691391001943860, 0.797721543298365200, 0.797751693600482700, +0.797781841908220880, 0.797811988221504450, 0.797842132540258710, 0.797872274864407040, 0.797902415193874610, 0.797932553528586270, 0.797962689868466410, 0.797992824213439980, +0.798022956563431360, 0.798053086918365410, 0.798083215278167280, 0.798113341642760600, 0.798143466012070530, 0.798173588386021820, 0.798203708764539050, 0.798233827147547090, +0.798263943534970540, 0.798294057926734690, 0.798324170322763150, 0.798354280722981200, 0.798384389127313470, 0.798414495535684890, 0.798444599948019970, 0.798474702364243560, +0.798504802784280490, 0.798534901208055810, 0.798564997635493490, 0.798595092066518570, 0.798625184501055910, 0.798655274939030320, 0.798685363380366550, 0.798715449824989430, +0.798745534272824130, 0.798775616723794490, 0.798805697177825790, 0.798835775634842870, 0.798865852094770570, 0.798895926557533500, 0.798925999023056720, 0.798956069491264960, +0.798986137962083510, 0.799016204435436190, 0.799046268911248300, 0.799076331389444890, 0.799106391869950580, 0.799136450352690210, 0.799166506837588830, 0.799196561324571060, +0.799226613813562530, 0.799256664304486830, 0.799286712797269590, 0.799316759291835540, 0.799346803788109520, 0.799376846286016460, 0.799406886785481440, 0.799436925286429620, +0.799466961788785070, 0.799496996292472950, 0.799527028797418440, 0.799557059303546370, 0.799587087810781580, 0.799617114319049140, 0.799647138828273870, 0.799677161338381290, +0.799707181849295350, 0.799737200360941420, 0.799767216873244480, 0.799797231386129460, 0.799827243899521310, 0.799857254413345210, 0.799887262927525880, 0.799917269441988930, +0.799947273956658320, 0.799977276471459440, 0.800007276986317350, 0.800037275501157220, 0.800067272015903770, 0.800097266530482190, 0.800127259044817960, 0.800157249558835160, +0.800187238072459060, 0.800217224585614950, 0.800247209098227770, 0.800277191610222590, 0.800307172121524470, 0.800337150632058240, 0.800367127141749850, 0.800397101650523020, +0.800427074158303500, 0.800457044665016220, 0.800487013170586350, 0.800516979674939070, 0.800546944177999210, 0.800576906679692500, 0.800606867179943120, 0.800636825678676440, +0.800666782175817770, 0.800696736671292040, 0.800726689165024650, 0.800756639656940440, 0.800786588146964570, 0.800816534635022890, 0.800846479121039230, 0.800876421604939440, +0.800906362086648560, 0.800936300566091770, 0.800966237043194250, 0.800996171517881160, 0.801026103990077680, 0.801056034459709410, 0.801085962926700420, 0.801115889390976670, +0.801145813852463200, 0.801175736311085070, 0.801205656766767690, 0.801235575219436220, 0.801265491669016280, 0.801295406115432040, 0.801325318558609330, 0.801355228998473330, +0.801385137434949210, 0.801415043867962360, 0.801444948297437840, 0.801474850723300940, 0.801504751145477370, 0.801534649563891530, 0.801564545978468930, 0.801594440389135080, +0.801624332795815020, 0.801654223198434270, 0.801684111596917880, 0.801713997991191140, 0.801743882381180110, 0.801773764766808730, 0.801803645148002950, 0.801833523524688060, +0.801863399896789340, 0.801893274264232180, 0.801923146626941750, 0.801953016984844000, 0.801982885337863220, 0.802012751685925230, 0.802042616028955440, 0.802072478366878890, +0.802102338699621330, 0.802132197027107920, 0.802162053349263940, 0.802191907666015340, 0.802221759977286510, 0.802251610283003290, 0.802281458583090970, 0.802311304877475040, +0.802341149166080900, 0.802370991448833840, 0.802400831725659790, 0.802430669996483160, 0.802460506261229890, 0.802490340519825260, 0.802520172772194900, 0.802550003018264070, +0.802579831257958180, 0.802609657491202830, 0.802639481717923760, 0.802669303938045480, 0.802699124151493910, 0.802728942358194590, 0.802758758558072880, 0.802788572751054310, +0.802818384937064260, 0.802848195116028340, 0.802878003287872400, 0.802907809452520830, 0.802937613609899900, 0.802967415759934800, 0.802997215902551240, 0.803027014037674620, +0.803056810165230450, 0.803086604285144890, 0.803116396397342220, 0.803146186501748520, 0.803175974598289380, 0.803205760686890200, 0.803235544767476830, 0.803265326839974430, +0.803295106904308830, 0.803324884960405880, 0.803354661008190310, 0.803384435047587940, 0.803414207078524620, 0.803443977100925630, 0.803473745114716810, 0.803503511119823650, +0.803533275116171670, 0.803563037103687040, 0.803592797082294250, 0.803622555051919480, 0.803652311012488350, 0.803682064963926470, 0.803711816906159450, 0.803741566839112800, +0.803771314762712800, 0.803801060676883950, 0.803830804581552540, 0.803860546476644070, 0.803890286362084150, 0.803920024237798620, 0.803949760103713000, 0.803979493959752990, +0.804009225805844770, 0.804038955641912860, 0.804068683467883740, 0.804098409283682810, 0.804128133089235810, 0.804157854884468560, 0.804187574669306680, 0.804217292443676350, +0.804247008207502280, 0.804276721960710650, 0.804306433703227300, 0.804336143434977830, 0.804365851155887880, 0.804395556865883490, 0.804425260564890050, 0.804454962252834080, +0.804484661929640190, 0.804514359595234650, 0.804544055249543090, 0.804573748892491560, 0.804603440524005560, 0.804633130144010940, 0.804662817752433530, 0.804692503349199620, +0.804722186934233920, 0.804751868507462720, 0.804781548068811860, 0.804811225618207170, 0.804840901155574380, 0.804870574680839330, 0.804900246193928410, 0.804929915694766350, +0.804959583183279430, 0.804989248659393590, 0.805018912123034670, 0.805048573574128400, 0.805078233012600840, 0.805107890438377490, 0.805137545851385080, 0.805167199251548230, +0.805196850638793430, 0.805226500013046410, 0.805256147374233230, 0.805285792722279630, 0.805315436057111640, 0.805345077378654910, 0.805374716686836130, 0.805404353981580060, +0.805433989262812950, 0.805463622530461000, 0.805493253784449910, 0.805522883024705760, 0.805552510251154370, 0.805582135463722260, 0.805611758662334250, 0.805641379846916860, +0.805670999017396030, 0.805700616173697700, 0.805730231315747720, 0.805759844443472260, 0.805789455556797260, 0.805819064655649010, 0.805848671739952670, 0.805878276809634640, +0.805907879864620870, 0.805937480904837410, 0.805967079930210330, 0.805996676940665460, 0.806026271936129410, 0.806055864916527250, 0.806085455881785370, 0.806115044831829830, +0.806144631766586680, 0.806174216685981990, 0.806203799589941710, 0.806233380478391990, 0.806262959351259360, 0.806292536208468750, 0.806322111049946780, 0.806351683875619510, +0.806381254685413110, 0.806410823479253640, 0.806440390257066930, 0.806469955018779380, 0.806499517764317500, 0.806529078493606110, 0.806558637206572170, 0.806588193903141630, +0.806617748583240530, 0.806647301246795180, 0.806676851893731510, 0.806706400523976240, 0.806735947137454450, 0.806765491734092730, 0.806795034313817380, 0.806824574876554350, +0.806854113422230010, 0.806883649950770220, 0.806913184462101470, 0.806942716956150160, 0.806972247432841570, 0.807001775892102420, 0.807031302333858780, 0.807060826758036810, +0.807090349164562900, 0.807119869553363120, 0.807149387924364080, 0.807178904277491170, 0.807208418612670900, 0.807237930929829650, 0.807267441228893490, 0.807296949509788810, +0.807326455772441660, 0.807355960016778450, 0.807385462242725890, 0.807414962450209160, 0.807444460639154980, 0.807473956809489630, 0.807503450961139400, 0.807532943094030560, +0.807562433208089290, 0.807591921303241980, 0.807621407379415460, 0.807650891436534900, 0.807680373474527040, 0.807709853493318250, 0.807739331492834830, 0.807768807473003060, +0.807798281433749320, 0.807827753375000350, 0.807857223296681530, 0.807886691198719700, 0.807916157081041030, 0.807945620943572030, 0.807975082786238970, 0.808004542608968150, +0.808034000411686050, 0.808063456194319410, 0.808092909956793730, 0.808122361699035620, 0.808151811420971700, 0.808181259122528140, 0.808210704803631550, 0.808240148464208110, +0.808269590104184420, 0.808299029723487220, 0.808328467322041890, 0.808357902899775380, 0.808387336456614200, 0.808416767992484630, 0.808446197507313170, 0.808475625001026100, +0.808505050473550590, 0.808534473924811930, 0.808563895354737050, 0.808593314763252470, 0.808622732150284570, 0.808652147515759870, 0.808681560859604850, 0.808710972181745810, +0.808740381482109920, 0.808769788760622550, 0.808799194017210790, 0.808828597251800900, 0.808857998464319610, 0.808887397654693310, 0.808916794822848510, 0.808946189968712260, +0.808975583092209960, 0.809004974193268780, 0.809034363271815100, 0.809063750327775550, 0.809093135361076520, 0.809122518371644730, 0.809151899359406680, 0.809181278324289430, +0.809210655266218380, 0.809240030185120700, 0.809269403080922990, 0.809298773953551760, 0.809328142802933530, 0.809357509628995000, 0.809386874431662800, 0.809416237210863750, +0.809445597966523710, 0.809474956698569610, 0.809504313406928190, 0.809533668091525940, 0.809563020752289480, 0.809592371389145530, 0.809621720002021150, 0.809651066590841960, +0.809680411155535130, 0.809709753696027160, 0.809739094212244880, 0.809768432704114920, 0.809797769171563870, 0.809827103614518260, 0.809856436032905580, 0.809885766426651220, +0.809915094795682470, 0.809944421139925930, 0.809973745459308340, 0.810003067753756410, 0.810032388023196770, 0.810061706267556250, 0.810091022486761900, 0.810120336680739570, +0.810149648849416320, 0.810178958992718970, 0.810208267110574140, 0.810237573202908790, 0.810266877269649410, 0.810296179310723400, 0.810325479326056360, 0.810354777315575700, +0.810384073279208030, 0.810413367216880290, 0.810442659128519090, 0.810471949014051170, 0.810501236873403360, 0.810530522706503050, 0.810559806513275970, 0.810589088293649280, +0.810618368047549830, 0.810647645774904560, 0.810676921475640190, 0.810706195149683450, 0.810735466796961730, 0.810764736417400880, 0.810794004010928160, 0.810823269577470420, +0.810852533116954490, 0.810881794629307320, 0.810911054114455520, 0.810940311572326160, 0.810969567002846610, 0.810998820405942510, 0.811028071781541460, 0.811057321129570190, +0.811086568449955530, 0.811115813742624650, 0.811145057007504060, 0.811174298244520920, 0.811203537453602520, 0.811232774634674690, 0.811262009787664940, 0.811291242912500320, +0.811320474009107450, 0.811349703077413390, 0.811378930117345190, 0.811408155128830020, 0.811437378111794060, 0.811466599066164700, 0.811495817991868760, 0.811525034888833210, +0.811554249756985200, 0.811583462596251470, 0.811612673406559180, 0.811641882187835620, 0.811671088940006950, 0.811700293663000450, 0.811729496356743300, 0.811758697021162320, +0.811787895656184700, 0.811817092261737260, 0.811846286837747180, 0.811875479384141840, 0.811904669900847310, 0.811933858387791090, 0.811963044844900230, 0.811992229272101680, +0.812021411669322620, 0.812050592036489990, 0.812079770373531520, 0.812108946680373030, 0.812138120956942160, 0.812167293203166050, 0.812196463418971560, 0.812225631604286070, +0.812254797759036420, 0.812283961883149770, 0.812313123976553750, 0.812342284039174410, 0.812371442070939360, 0.812400598071775780, 0.812429752041610610, 0.812458903980371130, +0.812488053887984290, 0.812517201764377920, 0.812546347609477970, 0.812575491423212170, 0.812604633205507690, 0.812633772956291580, 0.812662910675491010, 0.812692046363033270, +0.812721180018845300, 0.812750311642854940, 0.812779441234988350, 0.812808568795173050, 0.812837694323336410, 0.812866817819405510, 0.812895939283307500, 0.812925058714969670, +0.812954176114319300, 0.812983291481283900, 0.813012404815789740, 0.813041516117764650, 0.813070625387135700, 0.813099732623830170, 0.813128837827775450, 0.813157940998898490, +0.813187042137127230, 0.813216141242387950, 0.813245238314608150, 0.813274333353715350, 0.813303426359636710, 0.813332517332299500, 0.813361606271631010, 0.813390693177558520, +0.813419778050009760, 0.813448860888911000, 0.813477941694190190, 0.813507020465774500, 0.813536097203591210, 0.813565171907567720, 0.813594244577631300, 0.813623315213709230, +0.813652383815729460, 0.813681450383618170, 0.813710514917303280, 0.813739577416712100, 0.813768637881771890, 0.813797696312410170, 0.813826752708554200, 0.813855807070131940, +0.813884859397069560, 0.813913909689295000, 0.813942957946735660, 0.813972004169319030, 0.814001048356972290, 0.814030090509623050, 0.814059130627198480, 0.814088168709626640, +0.814117204756833800, 0.814146238768748030, 0.814175270745296610, 0.814204300686407030, 0.814233328592006700, 0.814262354462023110, 0.814291378296384090, 0.814320400095016050, +0.814349419857847150, 0.814378437584804550, 0.814407453275815870, 0.814436466930808620, 0.814465478549710300, 0.814494488132448180, 0.814523495678950330, 0.814552501189143240, +0.814581504662954870, 0.814610506100312830, 0.814639505501144500, 0.814668502865377290, 0.814697498192938910, 0.814726491483756870, 0.814755482737759000, 0.814784471954871910, +0.814813459135023680, 0.814842444278141790, 0.814871427384153860, 0.814900408452987280, 0.814929387484569670, 0.814958364478829190, 0.814987339435692240, 0.815016312355086870, +0.815045283236940810, 0.815074252081181560, 0.815103218887736620, 0.815132183656533620, 0.815161146387500150, 0.815190107080564390, 0.815219065735652840, 0.815248022352693560, +0.815276976931614270, 0.815305929472342590, 0.815334879974806030, 0.815363828438932290, 0.815392774864649450, 0.815421719251884220, 0.815450661600564670, 0.815479601910618520, +0.815508540181973270, 0.815537476414556650, 0.815566410608296490, 0.815595342763120180, 0.815624272878956110, 0.815653200955730790, 0.815682126993372390, 0.815711050991808740, +0.815739972950967560, 0.815768892870776360, 0.815797810751162870, 0.815826726592054910, 0.815855640393380650, 0.815884552155066830, 0.815913461877041610, 0.815942369559232720, +0.815971275201567870, 0.816000178803974800, 0.816029080366381330, 0.816057979888715760, 0.816086877370904570, 0.816115772812876280, 0.816144666214558610, 0.816173557575879170, +0.816202446896765910, 0.816231334177146440, 0.816260219416948710, 0.816289102616100990, 0.816317983774529910, 0.816346862892163850, 0.816375739968930760, 0.816404615004758250, +0.816433487999574160, 0.816462358953306320, 0.816491227865882680, 0.816520094737231420, 0.816548959567279460, 0.816577822355955110, 0.816606683103186180, 0.816635541808900520, +0.816664398473026080, 0.816693253095490570, 0.816722105676222500, 0.816750956215148590, 0.816779804712197350, 0.816808651167296510, 0.816837495580374110, 0.816866337951357990, +0.816895178280175990, 0.816924016566756060, 0.816952852811026590, 0.816981687012914510, 0.817010519172348130, 0.817039349289255480, 0.817068177363564520, 0.817097003395203080, +0.817125827384099110, 0.817154649330181120, 0.817183469233375930, 0.817212287093612160, 0.817241102910817640, 0.817269916684920330, 0.817298728415848270, 0.817327538103529430, +0.817356345747891620, 0.817385151348863470, 0.817413954906372030, 0.817442756420345700, 0.817471555890712410, 0.817500353317400230, 0.817529148700337220, 0.817557942039451310, +0.817586733334670580, 0.817615522585923520, 0.817644309793137070, 0.817673094956239850, 0.817701878075159930, 0.817730659149825350, 0.817759438180164170, 0.817788215166104230, +0.817816990107574360, 0.817845763004501510, 0.817874533856814300, 0.817903302664440670, 0.817932069427308780, 0.817960834145346700, 0.817989596818482600, 0.818018357446644530, +0.818047116029760990, 0.818075872567759270, 0.818104627060567750, 0.818133379508114710, 0.818162129910328220, 0.818190878267136430, 0.818219624578467420, 0.818248368844249340, +0.818277111064410920, 0.818305851238879110, 0.818334589367582740, 0.818363325450449870, 0.818392059487408670, 0.818420791478387310, 0.818449521423314060, 0.818478249322117430, +0.818506975174724700, 0.818535698981064490, 0.818564420741065170, 0.818593140454654590, 0.818621858121761360, 0.818650573742313310, 0.818679287316238960, 0.818707998843466900, +0.818736708323924200, 0.818765415757539810, 0.818794121144241880, 0.818822824483958710, 0.818851525776618460, 0.818880225022149300, 0.818908922220480170, 0.818937617371538140, +0.818966310475252150, 0.818995001531550360, 0.819023690540361060, 0.819052377501612640, 0.819081062415233150, 0.819109745281150990, 0.819138426099294990, 0.819167104869592540, +0.819195781591972150, 0.819224456266362420, 0.819253128892691530, 0.819281799470887860, 0.819310468000879590, 0.819339134482595210, 0.819367798915963560, 0.819396461300911820, +0.819425121637368910, 0.819453779925263250, 0.819482436164523100, 0.819511090355076850, 0.819539742496852910, 0.819568392589780200, 0.819597040633785910, 0.819625686628798980, +0.819654330574747900, 0.819682972471560970, 0.819711612319166670, 0.819740250117493300, 0.819768885866469230, 0.819797519566023540, 0.819826151216083490, 0.819854780816578140, +0.819883408367435780, 0.819912033868584910, 0.819940657319953910, 0.819969278721471300, 0.819997898073065560, 0.820026515374665530, 0.820055130626198720, 0.820083743827594080, +0.820112354978779990, 0.820140964079685180, 0.820169571130237810, 0.820198176130366610, 0.820226779080000410, 0.820255379979066830, 0.820283978827494710, 0.820312575625212760, +0.820341170372149260, 0.820369763068232840, 0.820398353713392090, 0.820426942307555420, 0.820455528850651870, 0.820484113342609070, 0.820512695783355840, 0.820541276172821020, +0.820569854510933010, 0.820598430797620290, 0.820627005032811500, 0.820655577216435670, 0.820684147348420430, 0.820712715428694840, 0.820741281457187500, 0.820769845433826920, +0.820798407358541700, 0.820826967231260470, 0.820855525051911840, 0.820884080820424860, 0.820912634536727250, 0.820941186200747960, 0.820969735812415720, 0.820998283371659250, +0.821026828878406940, 0.821055372332587630, 0.821083913734129920, 0.821112453082962880, 0.821140990379014220, 0.821169525622213130, 0.821198058812488090, 0.821226589949768050, +0.821255119033981410, 0.821283646065057100, 0.821312171042924090, 0.821340693967510190, 0.821369214838744480, 0.821397733656555770, 0.821426250420872810, 0.821454765131624190, +0.821483277788738640, 0.821511788392144780, 0.821540296941772110, 0.821568803437548120, 0.821597307879402110, 0.821625810267262890, 0.821654310601059200, 0.821682808880719650, +0.821711305106173070, 0.821739799277348190, 0.821768291394174400, 0.821796781456579310, 0.821825269464492300, 0.821853755417842110, 0.821882239316557570, 0.821910721160567400, +0.821939200949800440, 0.821967678684185970, 0.821996154363651810, 0.822024627988127250, 0.822053099557541130, 0.822081569071822280, 0.822110036530899420, 0.822138501934701500, +0.822166965283157470, 0.822195426576196380, 0.822223885813746280, 0.822252342995736460, 0.822280798122095760, 0.822309251192753000, 0.822337702207637240, 0.822366151166677220, +0.822394598069802200, 0.822423042916940240, 0.822451485708020740, 0.822479926442972520, 0.822508365121724430, 0.822536801744205400, 0.822565236310344390, 0.822593668820070350, +0.822622099273312650, 0.822650527669999130, 0.822678954010059300, 0.822707378293422000, 0.822735800520016380, 0.822764220689771290, 0.822792638802615550, 0.822821054858478230, +0.822849468857288820, 0.822877880798975280, 0.822906290683466880, 0.822934698510692900, 0.822963104280582060, 0.822991507993063530, 0.823019909648066260, 0.823048309245519640, +0.823076706785351830, 0.823105102267492230, 0.823133495691869780, 0.823161887058413640, 0.823190276367052890, 0.823218663617716340, 0.823247048810333170, 0.823275431944832880, +0.823303813021143420, 0.823332192039194500, 0.823360568998915190, 0.823388943900234320, 0.823417316743081160, 0.823445687527384670, 0.823474056253074460, 0.823502422920078690, +0.823530787528326760, 0.823559150077747940, 0.823587510568271170, 0.823615868999825640, 0.823644225372340500, 0.823672579685744810, 0.823700931939968070, 0.823729282134938570, +0.823757630270585790, 0.823785976346839030, 0.823814320363627340, 0.823842662320879770, 0.823871002218525610, 0.823899340056493900, 0.823927675834714270, 0.823956009553115100, +0.823984341211625780, 0.824012670810175710, 0.824040998348693930, 0.824069323827109620, 0.824097647245352060, 0.824125968603350860, 0.824154287901034180, 0.824182605138331860, +0.824210920315172960, 0.824239233431486750, 0.824267544487202520, 0.824295853482249430, 0.824324160416556650, 0.824352465290054020, 0.824380768102669690, 0.824409068854333520, +0.824437367544974650, 0.824465664174522270, 0.824493958742905870, 0.824522251250054410, 0.824550541695897480, 0.824578830080364590, 0.824607116403384130, 0.824635400664885940, +0.824663682864799190, 0.824691963003053250, 0.824720241079577420, 0.824748517094300970, 0.824776791047153850, 0.824805062938064100, 0.824833332766961690, 0.824861600533776000, +0.824889866238436300, 0.824918129880871990, 0.824946391461012340, 0.824974650978786640, 0.825002908434124830, 0.825031163826955290, 0.825059417157207760, 0.825087668424811850, +0.825115917629696600, 0.825144164771791640, 0.825172409851026250, 0.825200652867330350, 0.825228893820632250, 0.825257132710861980, 0.825285369537948840, 0.825313604301822320, +0.825341837002411820, 0.825370067639646710, 0.825398296213456390, 0.825426522723770820, 0.825454747170518480, 0.825482969553629210, 0.825511189873032620, 0.825539408128658000, +0.825567624320434850, 0.825595838448292650, 0.825624050512160810, 0.825652260511969490, 0.825680468447646860, 0.825708674319123090, 0.825736878126327680, 0.825765079869190120, +0.825793279547639810, 0.825821477161606250, 0.825849672711019500, 0.825877866195808160, 0.825906057615902080, 0.825934246971230860, 0.825962434261724110, 0.825990619487311120, +0.826018802647921710, 0.826046983743485290, 0.826075162773931890, 0.826103339739190030, 0.826131514639189880, 0.826159687473860930, 0.826187858243132790, 0.826216026946934860, +0.826244193585196960, 0.826272358157848610, 0.826300520664819850, 0.826328681106039300, 0.826356839481437010, 0.826384995790942710, 0.826413150034485790, 0.826441302211996080, +0.826469452323403080, 0.826497600368636950, 0.826525746347626320, 0.826553890260301350, 0.826582032106591650, 0.826610171886426940, 0.826638309599736720, 0.826666445246450720, +0.826694578826498550, 0.826722710339810480, 0.826750839786315250, 0.826778967165942790, 0.826807092478622940, 0.826835215724285310, 0.826863336902859740, 0.826891456014275830, +0.826919573058463750, 0.826947688035352120, 0.826975800944871440, 0.827003911786951210, 0.827032020561521140, 0.827060127268511080, 0.827088231907850640, 0.827116334479469640, +0.827144434983298370, 0.827172533419265440, 0.827200629787301240, 0.827228724087335500, 0.827256816319297820, 0.827284906483118140, 0.827312994578726310, 0.827341080606051830, +0.827369164565025290, 0.827397246455575220, 0.827425326277632100, 0.827453404031125660, 0.827481479715985730, 0.827509553332142040, 0.827537624879524540, 0.827565694358063380, +0.827593761767687620, 0.827621827108327320, 0.827649890379912550, 0.827677951582373010, 0.827706010715638540, 0.827734067779639090, 0.827762122774304500, 0.827790175699565140, +0.827818226555349760, 0.827846275341588830, 0.827874322058212210, 0.827902366705149830, 0.827930409282331530, 0.827958449789687130, 0.827986488227146710, 0.828014524594640420, +0.828042558892097440, 0.828070591119448030, 0.828098621276622150, 0.828126649363549740, 0.828154675380160630, 0.828182699326384890, 0.828210721202153000, 0.828238741007393700, +0.828266758742037480, 0.828294774406014400, 0.828322787999254520, 0.828350799521687550, 0.828378808973243560, 0.828406816353852600, 0.828434821663445060, 0.828462824901950000, +0.828490826069297910, 0.828518825165418750, 0.828546822190242450, 0.828574817143699180, 0.828602810025718780, 0.828630800836231860, 0.828658789575167590, 0.828686776242456240, +0.828714760838027860, 0.828742743361812750, 0.828770723813740730, 0.828798702193741850, 0.828826678501746180, 0.828854652737684440, 0.828882624901485450, 0.828910594993079950, +0.828938563012397990, 0.828966528959369510, 0.828994492833924790, 0.829022454635993890, 0.829050414365506750, 0.829078372022394210, 0.829106327606585090, 0.829134281118010240, +0.829162232556599710, 0.829190181922283550, 0.829218129214991940, 0.829246074434655030, 0.829274017581203340, 0.829301958654566240, 0.829329897654674130, 0.829357834581457400, +0.829385769434845990, 0.829413702214770180, 0.829441632921160130, 0.829469561553945910, 0.829497488113058350, 0.829525412598426600, 0.829553335009981300, 0.829581255347652700, +0.829609173611370880, 0.829637089801066210, 0.829665003916668750, 0.829692915958108790, 0.829720825925317150, 0.829748733818222780, 0.829776639636756630, 0.829804543380848970, +0.829832445050429860, 0.829860344645429680, 0.829888242165778610, 0.829916137611407480, 0.829944030982245450, 0.829971922278223360, 0.829999811499271490, 0.830027698645320000, +0.830055583716299390, 0.830083466712139730, 0.830111347632771500, 0.830139226478125320, 0.830167103248130590, 0.830194977942718020, 0.830222850561818100, 0.830250721105361130, +0.830278589573277270, 0.830306455965496900, 0.830334320281950980, 0.830362182522568660, 0.830390042687281000, 0.830417900776018070, 0.830445756788710580, 0.830473610725288580, +0.830501462585682580, 0.830529312369822970, 0.830557160077640470, 0.830585005709064570, 0.830612849264026230, 0.830640690742455830, 0.830668530144283660, 0.830696367469440090, +0.830724202717855630, 0.830752035889460670, 0.830779866984186150, 0.830807696001961470, 0.830835522942717450, 0.830863347806384710, 0.830891170592893640, 0.830918991302174610, +0.830946809934158040, 0.830974626488774960, 0.831002440965954880, 0.831030253365628640, 0.831058063687726830, 0.831085871932179750, 0.831113678098918120, 0.831141482187872200, +0.831169284198972620, 0.831197084132150320, 0.831224881987334800, 0.831252677764457100, 0.831280471463447750, 0.831308263084237110, 0.831336052626755920, 0.831363840090934560, +0.831391625476703530, 0.831419408783994010, 0.831447190012735480, 0.831474969162858900, 0.831502746234294990, 0.831530521226974130, 0.831558294140827050, 0.831586064975784130, +0.831613833731776660, 0.831641600408734030, 0.831669365006587390, 0.831697127525267370, 0.831724887964704560, 0.831752646324829480, 0.831780402605572840, 0.831808156806865150, +0.831835908928637570, 0.831863658970819820, 0.831891406933342740, 0.831919152816137260, 0.831946896619133900, 0.831974638342263260, 0.832002377985456070, 0.832030115548643370, +0.832057851031754890, 0.832085584434721800, 0.832113315757474830, 0.832141044999944460, 0.832168772162061530, 0.832196497243756660, 0.832224220244960570, 0.832251941165604410, +0.832279660005617820, 0.832307376764932160, 0.832335091443478060, 0.832362804041186230, 0.832390514557987400, 0.832418222993812300, 0.832445929348591520, 0.832473633622256570, +0.832501335814736950, 0.832529035925964060, 0.832556733955868490, 0.832584429904381080, 0.832612123771432680, 0.832639815556953990, 0.832667505260876180, 0.832695192883129100, +0.832722878423644120, 0.832750561882351860, 0.832778243259183260, 0.832805922554069040, 0.832833599766939940, 0.832861274897726990, 0.832888947946361260, 0.832916618912772690, +0.832944287796892450, 0.832971954598651590, 0.832999619317980830, 0.833027281954811130, 0.833054942509073080, 0.833082600980698200, 0.833110257369616410, 0.833137911675758900, +0.833165563899056600, 0.833193214039440360, 0.833220862096841210, 0.833248508071189780, 0.833276151962417110, 0.833303793770454600, 0.833331433495232090, 0.833359071136681060, +0.833386706694732250, 0.833414340169316700, 0.833441971560365370, 0.833469600867809080, 0.833497228091578670, 0.833524853231605740, 0.833552476287820250, 0.833580097260153590, +0.833607716148536570, 0.833635332952900380, 0.833662947673175840, 0.833690560309293890, 0.833718170861186050, 0.833745779328782240, 0.833773385712013980, 0.833800990010812320, +0.833828592225108190, 0.833856192354832550, 0.833883790399916450, 0.833911386360290830, 0.833938980235887310, 0.833966572026635710, 0.833994161732467880, 0.834021749353314520, +0.834049334889106710, 0.834076918339775710, 0.834104499705252360, 0.834132078985467820, 0.834159656180353480, 0.834187231289839510, 0.834214804313857530, 0.834242375252338460, +0.834269944105213490, 0.834297510872413770, 0.834325075553870140, 0.834352638149514330, 0.834380198659276480, 0.834407757083088120, 0.834435313420880290, 0.834462867672584260, +0.834490419838131100, 0.834517969917451750, 0.834545517910477600, 0.834573063817140140, 0.834600607637369430, 0.834628149371097310, 0.834655689018254710, 0.834683226578773030, +0.834710762052583210, 0.834738295439616420, 0.834765826739804480, 0.834793355953077460, 0.834820883079366970, 0.834848408118604390, 0.834875931070720670, 0.834903451935647300, +0.834930970713315120, 0.834958487403655640, 0.834986002006600340, 0.835013514522079610, 0.835041024950025080, 0.835068533290367900, 0.835096039543039460, 0.835123543707970930, +0.835151045785093580, 0.835178545774338590, 0.835206043675637670, 0.835233539488921210, 0.835261033214120820, 0.835288524851167890, 0.835316014399993700, 0.835343501860529410, +0.835370987232706420, 0.835398470516456440, 0.835425951711709750, 0.835453430818398290, 0.835480907836453120, 0.835508382765805750, 0.835535855606387430, 0.835563326358129470, +0.835590795020963120, 0.835618261594820330, 0.835645726079631390, 0.835673188475328230, 0.835700648781841910, 0.835728106999104160, 0.835755563127046020, 0.835783017165599000, +0.835810469114694480, 0.835837918974264180, 0.835865366744238720, 0.835892812424549710, 0.835920256015128760, 0.835947697515907140, 0.835975136926816240, 0.836002574247787570, +0.836030009478752940, 0.836057442619642770, 0.836084873670388970, 0.836112302630923070, 0.836139729501176430, 0.836167154281080350, 0.836194576970566430, 0.836221997569566060, +0.836249416078011290, 0.836276832495832290, 0.836304246822961340, 0.836331659059329820, 0.836359069204869020, 0.836386477259510650, 0.836413883223186110, 0.836441287095827210, +0.836468688877364700, 0.836496088567730500, 0.836523486166856010, 0.836550881674672840, 0.836578275091112490, 0.836605666416106340, 0.836633055649586120, 0.836660442791483770, +0.836687827841729790, 0.836715210800256240, 0.836742591666994720, 0.836769970441876620, 0.836797347124833670, 0.836824721715797250, 0.836852094214699080, 0.836879464621471230, +0.836906832936044180, 0.836934199158350100, 0.836961563288320390, 0.836988925325886870, 0.837016285270981040, 0.837043643123534520, 0.837070998883479240, 0.837098352550746160, +0.837125704125267100, 0.837153053606973780, 0.837180400995797820, 0.837207746291670940, 0.837235089494524630, 0.837262430604290510, 0.837289769620900960, 0.837317106544286370, +0.837344441374379130, 0.837371774111110740, 0.837399104754412930, 0.837426433304217290, 0.837453759760455550, 0.837481084123059550, 0.837508406391961220, 0.837535726567091410, +0.837563044648382270, 0.837590360635765530, 0.837617674529172910, 0.837644986328536120, 0.837672296033786900, 0.837699603644857290, 0.837726909161678250, 0.837754212584181920, +0.837781513912300160, 0.837808813145964560, 0.837836110285106850, 0.837863405329658970, 0.837890698279552540, 0.837917989134719820, 0.837945277895091660, 0.837972564560600320, +0.837999849131177530, 0.838027131606755130, 0.838054411987264940, 0.838081690272638680, 0.838108966462808750, 0.838136240557705860, 0.838163512557262400, 0.838190782461410100, +0.838218050270080890, 0.838245315983206510, 0.838272579600718880, 0.838299841122549850, 0.838327100548631580, 0.838354357878895120, 0.838381613113272860, 0.838408866251696530, +0.838436117294097950, 0.838463366240409070, 0.838490613090561940, 0.838517857844488070, 0.838545100502120170, 0.838572341063389070, 0.838599579528227060, 0.838626815896566070, +0.838654050168338050, 0.838681282343474940, 0.838708512421908580, 0.838735740403571460, 0.838762966288394530, 0.838790190076310060, 0.838817411767250220, 0.838844631361146840, +0.838871848857931870, 0.838899064257537350, 0.838926277559895020, 0.838953488764937580, 0.838980697872595990, 0.839007904882802520, 0.839035109795489340, 0.839062312610588390, +0.839089513328031720, 0.839116711947751170, 0.839143908469678900, 0.839171102893747410, 0.839198295219887540, 0.839225485448031990, 0.839252673578112730, 0.839279859610061800, +0.839307043543811250, 0.839334225379293030, 0.839361405116439750, 0.839388582755182470, 0.839415758295453670, 0.839442931737185650, 0.839470103080310110, 0.839497272324759460, +0.839524439470465510, 0.839551604517360550, 0.839578767465376960, 0.839605928314446140, 0.839633087064500350, 0.839660243715471880, 0.839687398267292770, 0.839714550719895200, +0.839741701073211330, 0.839768849327173550, 0.839795995481713240, 0.839823139536763020, 0.839850281492254820, 0.839877421348120930, 0.839904559104293510, 0.839931694760704730, +0.839958828317286740, 0.839985959773972060, 0.840013089130692060, 0.840040216387379360, 0.840067341543966120, 0.840094464600384390, 0.840121585556566690, 0.840148704412444940, +0.840175821167951420, 0.840202935823018750, 0.840230048377578420, 0.840257158831562820, 0.840284267184904450, 0.840311373437535370, 0.840338477589387840, 0.840365579640394160, +0.840392679590486910, 0.840419777439597620, 0.840446873187658760, 0.840473966834602740, 0.840501058380361820, 0.840528147824868290, 0.840555235168054420, 0.840582320409852370, +0.840609403550195090, 0.840636484589013740, 0.840663563526241160, 0.840690640361809740, 0.840717715095651740, 0.840744787727699450, 0.840771858257885140, 0.840798926686141650, +0.840825993012400460, 0.840853057236594200, 0.840880119358655250, 0.840907179378516110, 0.840934237296109060, 0.840961293111366250, 0.840988346824220300, 0.841015398434603930, +0.841042447942448650, 0.841069495347687270, 0.841096540650252080, 0.841123583850075570, 0.841150624947090030, 0.841177663941228060, 0.841204700832421830, 0.841231735620604380, +0.841258768305707120, 0.841285798887662860, 0.841312827366404110, 0.841339853741863370, 0.841366878013972920, 0.841393900182665360, 0.841420920247873520, 0.841447938209528790, +0.841474954067564340, 0.841501967821912440, 0.841528979472505600, 0.841555989019276420, 0.841582996462157170, 0.841610001801080480, 0.841637005035979160, 0.841664006166784940, +0.841691005193430760, 0.841718002115849020, 0.841744996933972200, 0.841771989647732920, 0.841798980257063680, 0.841825968761897080, 0.841852955162165960, 0.841879939457801930, +0.841906921648738150, 0.841933901734906900, 0.841960879716241010, 0.841987855592672970, 0.842014829364135190, 0.842041801030560920, 0.842068770591881570, 0.842095738048030400, +0.842122703398939800, 0.842149666644542490, 0.842176627784770980, 0.842203586819557870, 0.842230543748835880, 0.842257498572537950, 0.842284451290595810, 0.842311401902942510, +0.842338350409510770, 0.842365296810233090, 0.842392241105042180, 0.842419183293870670, 0.842446123376651700, 0.842473061353317010, 0.842499997223799530, 0.842526930988032220, +0.842553862645947450, 0.842580792197478060, 0.842607719642556650, 0.842634644981116070, 0.842661568213089240, 0.842688489338408010, 0.842715408357005540, 0.842742325268814650, +0.842769240073767860, 0.842796152771797980, 0.842823063362837850, 0.842849971846819870, 0.842876878223677520, 0.842903782493342520, 0.842930684655748050, 0.842957584710826820, +0.842984482658511780, 0.843011378498735310, 0.843038272231430570, 0.843065163856530630, 0.843092053373967200, 0.843118940783673660, 0.843145826085582750, 0.843172709279627400, +0.843199590365740100, 0.843226469343853920, 0.843253346213901580, 0.843280220975816340, 0.843307093629530050, 0.843333964174976080, 0.843360832612087160, 0.843387698940796130, +0.843414563161035910, 0.843441425272739240, 0.843468285275839060, 0.843495143170268520, 0.843521998955959810, 0.843548852632845960, 0.843575704200860030, 0.843602553659934860, +0.843629401010003390, 0.843656246250998330, 0.843683089382853080, 0.843709930405499690, 0.843736769318871430, 0.843763606122901360, 0.843790440817522190, 0.843817273402666880, +0.843844103878268470, 0.843870932244259690, 0.843897758500574140, 0.843924582647143760, 0.843951404683901840, 0.843978224610781420, 0.844005042427715460, 0.844031858134636880, +0.844058671731478750, 0.844085483218174340, 0.844112292594655700, 0.844139099860856330, 0.844165905016709290, 0.844192708062147410, 0.844219508997103850, 0.844246307821511440, +0.844273104535303350, 0.844299899138412860, 0.844326691630772230, 0.844353482012314860, 0.844380270282973690, 0.844407056442681990, 0.844433840491372490, 0.844460622428978570, +0.844487402255432950, 0.844514179970669350, 0.844540955574619830, 0.844567729067217890, 0.844594500448396680, 0.844621269718089260, 0.844648036876228580, 0.844674801922747800, +0.844701564857580520, 0.844728325680658920, 0.844755084391916380, 0.844781840991286170, 0.844808595478701460, 0.844835347854095090, 0.844862098117400540, 0.844888846268550650, +0.844915592307479040, 0.844942336234118070, 0.844969078048401270, 0.844995817750261780, 0.845022555339632660, 0.845049290816447200, 0.845076024180638540, 0.845102755432139750, +0.845129484570884660, 0.845156211596805320, 0.845182936509835450, 0.845209659309908210, 0.845236379996956890, 0.845263098570914530, 0.845289815031714520, 0.845316529379290360, +0.845343241613574440, 0.845369951734500470, 0.845396659742001510, 0.845423365636011060, 0.845450069416462060, 0.845476771083287890, 0.845503470636421840, 0.845530168075797620, +0.845556863401347500, 0.845583556613005110, 0.845610247710703920, 0.845636936694377120, 0.845663623563957970, 0.845690308319379750, 0.845716990960576180, 0.845743671487479750, +0.845770349900024090, 0.845797026198142570, 0.845823700381768460, 0.845850372450835160, 0.845877042405275840, 0.845903710245023980, 0.845930375970013300, 0.845957039580176210, +0.845983701075446510, 0.846010360455757620, 0.846037017721042780, 0.846063672871235410, 0.846090325906268870, 0.846116976826076450, 0.846143625630592090, 0.846170272319748170, +0.846196916893478650, 0.846223559351716780, 0.846250199694396080, 0.846276837921449810, 0.846303474032811480, 0.846330108028414910, 0.846356739908192600, 0.846383369672078390, +0.846409997320005880, 0.846436622851908240, 0.846463246267719180, 0.846489867567371880, 0.846516486750800050, 0.846543103817937400, 0.846569718768716450, 0.846596331603071350, +0.846622942320935270, 0.846649550922241920, 0.846676157406924700, 0.846702761774916990, 0.846729364026152510, 0.846755964160565090, 0.846782562178087120, 0.846809158078652870, +0.846835751862195730, 0.846862343528649200, 0.846888933077946770, 0.846915520510022060, 0.846942105824809000, 0.846968689022240210, 0.846995270102249730, 0.847021849064771070, +0.847048425909737720, 0.847075000637083410, 0.847101573246741510, 0.847128143738645640, 0.847154712112729970, 0.847181278368926980, 0.847207842507170850, 0.847234404527395180, +0.847260964429533360, 0.847287522213519220, 0.847314077879286250, 0.847340631426768520, 0.847367182855898740, 0.847393732166611070, 0.847420279358839010, 0.847446824432516290, +0.847473367387576500, 0.847499908223953270, 0.847526446941580300, 0.847552983540391660, 0.847579518020320170, 0.847606050381299770, 0.847632580623264300, 0.847659108746147360, +0.847685634749882680, 0.847712158634403860, 0.847738680399644730, 0.847765200045539240, 0.847791717572020430, 0.847818232979022260, 0.847844746266478430, 0.847871257434322790, +0.847897766482489050, 0.847924273410910920, 0.847950778219522470, 0.847977280908256640, 0.848003781477047690, 0.848030279925829240, 0.848056776254535020, 0.848083270463098950, +0.848109762551454650, 0.848136252519535950, 0.848162740367277120, 0.848189226094610890, 0.848215709701471750, 0.848242191187793200, 0.848268670553509190, 0.848295147798553530, +0.848321622922860060, 0.848348095926362960, 0.848374566808995030, 0.848401035570690800, 0.848427502211383970, 0.848453966731008480, 0.848480429129497950, 0.848506889406786310, +0.848533347562807520, 0.848559803597495830, 0.848586257510784200, 0.848612709302606900, 0.848639158972897770, 0.848665606521590730, 0.848692051948619740, 0.848718495253918630, +0.848744936437421330, 0.848771375499062010, 0.848797812438773950, 0.848824247256491190, 0.848850679952147910, 0.848877110525677940, 0.848903538977015090, 0.848929965306093550, +0.848956389512847460, 0.848982811597209900, 0.849009231559115450, 0.849035649398497850, 0.849062065115291030, 0.849088478709429160, 0.849114890180846070, 0.849141299529475700, +0.849167706755252660, 0.849194111858109780, 0.849220514837981670, 0.849246915694802260, 0.849273314428505620, 0.849299711039025680, 0.849326105526296390, 0.849352497890251910, +0.849378888130826630, 0.849405276247953590, 0.849431662241567410, 0.849458046111602140, 0.849484427857991610, 0.849510807480670200, 0.849537184979571650, 0.849563560354630540, +0.849589933605780170, 0.849616304732955020, 0.849642673736089040, 0.849669040615116280, 0.849695405369971010, 0.849721768000587300, 0.849748128506899070, 0.849774486888841050, +0.849800843146346300, 0.849827197279349410, 0.849853549287784560, 0.849879899171585910, 0.849906246930687390, 0.849932592565023400, 0.849958936074528220, 0.849985277459135320, +0.850011616718779230, 0.850037953853394090, 0.850064288862914070, 0.850090621747273350, 0.850116952506406070, 0.850143281140246400, 0.850169607648728950, 0.850195932031787120, +0.850222254289355380, 0.850248574421368030, 0.850274892427759220, 0.850301208308463230, 0.850327522063414110, 0.850353833692546250, 0.850380143195794360, 0.850406450573091500, +0.850432755824372610, 0.850459058949571860, 0.850485359948623400, 0.850511658821461510, 0.850537955568020480, 0.850564250188235120, 0.850590542682038600, 0.850616833049365750, +0.850643121290150740, 0.850669407404327950, 0.850695691391831770, 0.850721973252596240, 0.850748252986555760, 0.850774530593645160, 0.850800806073797820, 0.850827079426948350, +0.850853350653031250, 0.850879619751980790, 0.850905886723731240, 0.850932151568217000, 0.850958414285372440, 0.850984674875132190, 0.851010933337429830, 0.851037189672200210, +0.851063443879377490, 0.851089695958896280, 0.851115945910690730, 0.851142193734695460, 0.851168439430844970, 0.851194682999073080, 0.851220924439314410, 0.851247163751503440, +0.851273400935574580, 0.851299635991462190, 0.851325868919100780, 0.851352099718424630, 0.851378328389368670, 0.851404554931866510, 0.851430779345852870, 0.851457001631262370, +0.851483221788029270, 0.851509439816088180, 0.851535655715373490, 0.851561869485820130, 0.851588081127361620, 0.851614290639932880, 0.851640498023468420, 0.851666703277902730, +0.851692906403170300, 0.851719107399205640, 0.851745306265943140, 0.851771503003317830, 0.851797697611263340, 0.851823890089714600, 0.851850080438606220, 0.851876268657872470, +0.851902454747448190, 0.851928638707267650, 0.851954820537265680, 0.851981000237377000, 0.852007177807535320, 0.852033353247675820, 0.852059526557732870, 0.852085697737641090, +0.852111866787335080, 0.852138033706749340, 0.852164198495819040, 0.852190361154477770, 0.852216521682660710, 0.852242680080302240, 0.852268836347337080, 0.852294990483699830, +0.852321142489325110, 0.852347292364147520, 0.852373440108102120, 0.852399585721122730, 0.852425729203144300, 0.852451870554101650, 0.852478009773929290, 0.852504146862561930, +0.852530281819934180, 0.852556414645980640, 0.852582545340636600, 0.852608673903835770, 0.852634800335513200, 0.852660924635603610, 0.852687046804041730, 0.852713166840762260, +0.852739284745699930, 0.852765400518789800, 0.852791514159965680, 0.852817625669162750, 0.852843735046315830, 0.852869842291359540, 0.852895947404228580, 0.852922050384857800, +0.852948151233181910, 0.852974249949136070, 0.853000346532654220, 0.853026440983671420, 0.853052533302122610, 0.853078623487942390, 0.853104711541065600, 0.853130797461427060, +0.853156881248962050, 0.853182962903604290, 0.853209042425289170, 0.853235119813951390, 0.853261195069525910, 0.853287268191947330, 0.853313339181150710, 0.853339408037070650, +0.853365474759642530, 0.853391539348800300, 0.853417601804479120, 0.853443662126614040, 0.853469720315139790, 0.853495776369991190, 0.853521830291103180, 0.853547882078410700, +0.853573931731848810, 0.853599979251351780, 0.853626024636854660, 0.853652067888292510, 0.853678109005600260, 0.853704147988712750, 0.853730184837564800, 0.853756219552091800, +0.853782252132227910, 0.853808282577908310, 0.853834310889068140, 0.853860337065642020, 0.853886361107565110, 0.853912383014772350, 0.853938402787198570, 0.853964420424779270, +0.853990435927448500, 0.854016449295141530, 0.854042460527793530, 0.854068469625339330, 0.854094476587713980, 0.854120481414852530, 0.854146484106689810, 0.854172484663161310, +0.854198483084201100, 0.854224479369744770, 0.854250473519727160, 0.854276465534083430, 0.854302455412748520, 0.854328443155657480, 0.854354428762745700, 0.854380412233947560, +0.854406393569198230, 0.854432372768432980, 0.854458349831586860, 0.854484324758594820, 0.854510297549391900, 0.854536268203913370, 0.854562236722094530, 0.854588203103869630, +0.854614167349174280, 0.854640129457943430, 0.854666089430112350, 0.854692047265615980, 0.854718002964389600, 0.854743956526368590, 0.854769907951487220, 0.854795857239681100, +0.854821804390885290, 0.854847749405035050, 0.854873692282065440, 0.854899633021911520, 0.854925571624508550, 0.854951508089792140, 0.854977442417696460, 0.855003374608157230, +0.855029304661109490, 0.855055232576488520, 0.855081158354229490, 0.855107081994267550, 0.855133003496537870, 0.855158922860976280, 0.855184840087516720, 0.855210755176095240, +0.855236668126646780, 0.855262578939106620, 0.855288487613410030, 0.855314394149492290, 0.855340298547288990, 0.855366200806734530, 0.855392100927764520, 0.855417998910314230, +0.855443894754318920, 0.855469788459713890, 0.855495680026434500, 0.855521569454415820, 0.855547456743593670, 0.855573341893902440, 0.855599224905277840, 0.855625105777655160, +0.855650984510969770, 0.855676861105156950, 0.855702735560151860, 0.855728607875890450, 0.855754478052307090, 0.855780346089337510, 0.855806211986917090, 0.855832075744981100, +0.855857937363464940, 0.855883796842303870, 0.855909654181433390, 0.855935509380789220, 0.855961362440305850, 0.855987213359919010, 0.856013062139564180, 0.856038908779176650, +0.856064753278691910, 0.856090595638045240, 0.856116435857172120, 0.856142273936008390, 0.856168109874488440, 0.856193943672548310, 0.856219775330123170, 0.856245604847148730, +0.856271432223560170, 0.856297257459293190, 0.856323080554283410, 0.856348901508465430, 0.856374720321775310, 0.856400536994148310, 0.856426351525520050, 0.856452163915825790, +0.856477974165001150, 0.856503782272981630, 0.856529588239703150, 0.856555392065100120, 0.856581193749108680, 0.856606993291664230, 0.856632790692702370, 0.856658585952158490, +0.856684379069968080, 0.856710170046066870, 0.856735958880390560, 0.856761745572873990, 0.856787530123452990, 0.856813312532063160, 0.856839092798640010, 0.856864870923119250, +0.856890646905436260, 0.856916420745527100, 0.856942192443326370, 0.856967961998770230, 0.856993729411794190, 0.857019494682333850, 0.857045257810324700, 0.857071018795702470, +0.857096777638402640, 0.857122534338361390, 0.857148288895513310, 0.857174041309794470, 0.857199791581140570, 0.857225539709487230, 0.857251285694769940, 0.857277029536924530, +0.857302771235886940, 0.857328510791592000, 0.857354248203975770, 0.857379983472973950, 0.857405716598522160, 0.857431447580556010, 0.857457176419011310, 0.857482903113823690, +0.857508627664929190, 0.857534350072262750, 0.857560070335760430, 0.857585788455357820, 0.857611504430990880, 0.857637218262595090, 0.857662929950106290, 0.857688639493460190, +0.857714346892592850, 0.857740052147439310, 0.857765755257935520, 0.857791456224017420, 0.857817155045620730, 0.857842851722681040, 0.857868546255134310, 0.857894238642916580, +0.857919928885962910, 0.857945616984209350, 0.857971302937591720, 0.857996986746045850, 0.858022668409507580, 0.858048347927912620, 0.858074025301196700, 0.858099700529296290, +0.858125373612146140, 0.858151044549682500, 0.858176713341841310, 0.858202379988558310, 0.858228044489769300, 0.858253706845410250, 0.858279367055416960, 0.858305025119725620, +0.858330681038271370, 0.858356334810990380, 0.858381986437818490, 0.858407635918691740, 0.858433283253545730, 0.858458928442316640, 0.858484571484940730, 0.858510212381352830, +0.858535851131489450, 0.858561487735286510, 0.858587122192679740, 0.858612754503605190, 0.858638384667998800, 0.858664012685796400, 0.858689638556934360, 0.858715262281347870, +0.858740883858973290, 0.858766503289746350, 0.858792120573603210, 0.858817735710479810, 0.858843348700311980, 0.858868959543036330, 0.858894568238587790, 0.858920174786902860, +0.858945779187917480, 0.858971381441567590, 0.858996981547789250, 0.859022579506518500, 0.859048175317691290, 0.859073768981244100, 0.859099360497112110, 0.859124949865231580, +0.859150537085538790, 0.859176122157969570, 0.859201705082460080, 0.859227285858946370, 0.859252864487364380, 0.859278440967650710, 0.859304015299740540, 0.859329587483570250, +0.859355157519075990, 0.859380725406193920, 0.859406291144860000, 0.859431854735010270, 0.859457416176581450, 0.859482975469508580, 0.859508532613728280, 0.859534087609176710, +0.859559640455789920, 0.859585191153503960, 0.859610739702255100, 0.859636286101979290, 0.859661830352613340, 0.859687372454092210, 0.859712912406352730, 0.859738450209331040, +0.859763985862963100, 0.859789519367185280, 0.859815050721933650, 0.859840579927144360, 0.859866106982754120, 0.859891631888698100, 0.859917154644913030, 0.859942675251335160, +0.859968193707900450, 0.859993710014545390, 0.860019224171205910, 0.860044736177818960, 0.860070246034319700, 0.860095753740644730, 0.860121259296730440, 0.860146762702513000, +0.860172263957928670, 0.860197763062913620, 0.860223260017404230, 0.860248754821337110, 0.860274247474647650, 0.860299737977272550, 0.860325226329148210, 0.860350712530210670, +0.860376196580396440, 0.860401678479641660, 0.860427158227883180, 0.860452635825056380, 0.860478111271097970, 0.860503584565944220, 0.860529055709531530, 0.860554524701796280, +0.860579991542674620, 0.860605456232103050, 0.860630918770018180, 0.860656379156355620, 0.860681837391052200, 0.860707293474044180, 0.860732747405267840, 0.860758199184659680, +0.860783648812155970, 0.860809096287693200, 0.860834541611208090, 0.860859984782636150, 0.860885425801914290, 0.860910864668978930, 0.860936301383766310, 0.860961735946212950, +0.860987168356255330, 0.861012598613830170, 0.861038026718873080, 0.861063452671321010, 0.861088876471110210, 0.861114298118177190, 0.861139717612458440, 0.861165134953890470, +0.861190550142409640, 0.861215963177952790, 0.861241374060455640, 0.861266782789855130, 0.861292189366087650, 0.861317593789089560, 0.861342996058797610, 0.861368396175148150, +0.861393794138077710, 0.861419189947523200, 0.861444583603420240, 0.861469975105705890, 0.861495364454316630, 0.861520751649188840, 0.861546136690259260, 0.861571519577464360, +0.861596900310740990, 0.861622278890025070, 0.861647655315253340, 0.861673029586362490, 0.861698401703289150, 0.861723771665969700, 0.861749139474340840, 0.861774505128339200, +0.861799868627901700, 0.861825229972964070, 0.861850589163463350, 0.861875946199336160, 0.861901301080519210, 0.861926653806948880, 0.861952004378562010, 0.861977352795295530, +0.862002699057085150, 0.862028043163868160, 0.862053385115580940, 0.862078724912160310, 0.862104062553542880, 0.862129398039665260, 0.862154731370464280, 0.862180062545876760, +0.862205391565838640, 0.862230718430287090, 0.862256043139158820, 0.862281365692390330, 0.862306686089918450, 0.862332004331679890, 0.862357320417611260, 0.862382634347649830, +0.862407946121731330, 0.862433255739793010, 0.862458563201771610, 0.862483868507603610, 0.862509171657226070, 0.862534472650575590, 0.862559771487589440, 0.862585068168203350, +0.862610362692354580, 0.862635655059979860, 0.862660945271016110, 0.862686233325399840, 0.862711519223068100, 0.862736802963957610, 0.862762084548005400, 0.862787363975147660, +0.862812641245321530, 0.862837916358463740, 0.862863189314511110, 0.862888460113400590, 0.862913728755068890, 0.862938995239452830, 0.862964259566489810, 0.862989521736115650, +0.863014781748267730, 0.863040039602882780, 0.863065295299897840, 0.863090548839249520, 0.863115800220874860, 0.863141049444711260, 0.863166296510694540, 0.863191541418761980, +0.863216784168850610, 0.863242024760897400, 0.863267263194839040, 0.863292499470612480, 0.863317733588154780, 0.863342965547403090, 0.863368195348293570, 0.863393422990763600, +0.863418648474750030, 0.863443871800189780, 0.863469092967020010, 0.863494311975177340, 0.863519528824599480, 0.863544743515222260, 0.863569956046983280, 0.863595166419819260, +0.863620374633667480, 0.863645580688464640, 0.863670784584147920, 0.863695986320654250, 0.863721185897921020, 0.863746383315884380, 0.863771578574481720, 0.863796771673650210, +0.863821962613326780, 0.863847151393448360, 0.863872338013952130, 0.863897522474775030, 0.863922704775854530, 0.863947884917126930, 0.863973062898529600, 0.863998238719999480, +0.864023412381473950, 0.864048583882889740, 0.864073753224184120, 0.864098920405294570, 0.864124085426157260, 0.864149248286709800, 0.864174408986889130, 0.864199567526632520, +0.864224723905876900, 0.864249878124559560, 0.864275030182617420, 0.864300180079988320, 0.864325327816608200, 0.864350473392414780, 0.864375616807345090, 0.864400758061336540, +0.864425897154325940, 0.864451034086250680, 0.864476168857048250, 0.864501301466654940, 0.864526431915008440, 0.864551560202045820, 0.864576686327704240, 0.864601810291921070, +0.864626932094633260, 0.864652051735778190, 0.864677169215293470, 0.864702284533115260, 0.864727397689181390, 0.864752508683429120, 0.864777617515795400, 0.864802724186217840, +0.864827828694633370, 0.864852931040979270, 0.864878031225193360, 0.864903129247211910, 0.864928225106972650, 0.864953318804412840, 0.864978410339469650, 0.865003499712080570, +0.865028586922182650, 0.865053671969713720, 0.865078754854610170, 0.865103835576809700, 0.865128914136249700, 0.865153990532867350, 0.865179064766600110, 0.865204136837385170, +0.865229206745159910, 0.865254274489862030, 0.865279340071428040, 0.865304403489795650, 0.865329464744902350, 0.865354523836685320, 0.865379580765082030, 0.865404635530029780, +0.865429688131465810, 0.865454738569328200, 0.865479786843553310, 0.865504832954078870, 0.865529876900842490, 0.865554918683781200, 0.865579958302832850, 0.865604995757934480, +0.865630031049024030, 0.865655064176038100, 0.865680095138914530, 0.865705123937590690, 0.865730150572004090, 0.865755175042092100, 0.865780197347792100, 0.865805217489041710, +0.865830235465778640, 0.865855251277939610, 0.865880264925462440, 0.865905276408284520, 0.865930285726343450, 0.865955292879576730, 0.865980297867921740, 0.866005300691316430, +0.866030301349697500, 0.866055299843002780, 0.866080296171169770, 0.866105290334135970, 0.866130282331839090, 0.866155272164216390, 0.866180259831205610, 0.866205245332744460, +0.866230228668769860, 0.866255209839219660, 0.866280188844031570, 0.866305165683142860, 0.866330140356491250, 0.866355112864014340, 0.866380083205649630, 0.866405051381335170, +0.866430017391007560, 0.866454981234604960, 0.866479942912064980, 0.866504902423325010, 0.866529859768322860, 0.866554814946996040, 0.866579767959282710, 0.866604718805119360, +0.866629667484444370, 0.866654613997195120, 0.866679558343309340, 0.866704500522724740, 0.866729440535378810, 0.866754378381209280, 0.866779314060154290, 0.866804247572150470, +0.866829178917136180, 0.866854108095048810, 0.866879035105826310, 0.866903959949406170, 0.866928882625725980, 0.866953803134723810, 0.866978721476337480, 0.867003637650503810, +0.867028551657161200, 0.867053463496247120, 0.867078373167699420, 0.867103280671455810, 0.867128186007453890, 0.867153089175632050, 0.867177990175927000, 0.867202889008277020, +0.867227785672619820, 0.867252680168893120, 0.867277572497034740, 0.867302462656982410, 0.867327350648673940, 0.867352236472047510, 0.867377120127040050, 0.867402001613589820, +0.867426880931634560, 0.867451758081112080, 0.867476633061960210, 0.867501505874116790, 0.867526376517520070, 0.867551244992106900, 0.867576111297815640, 0.867600975434584140, +0.867625837402350220, 0.867650697201051700, 0.867675554830626310, 0.867700410291012190, 0.867725263582147410, 0.867750114703969010, 0.867774963656415380, 0.867799810439424340, +0.867824655052933710, 0.867849497496881450, 0.867874337771205480, 0.867899175875843750, 0.867924011810734420, 0.867948845575814640, 0.867973677171022700, 0.867998506596296630, +0.868023333851574260, 0.868048158936793660, 0.868072981851892520, 0.868097802596809460, 0.868122621171481420, 0.868147437575846780, 0.868172251809843590, 0.868197063873409780, +0.868221873766483300, 0.868246681489002080, 0.868271487040904290, 0.868296290422128080, 0.868321091632610840, 0.868345890672290730, 0.868370687541106020, 0.868395482238994540, +0.868420274765894340, 0.868445065121743460, 0.868469853306479970, 0.868494639320042230, 0.868519423162367410, 0.868544204833394120, 0.868568984333060290, 0.868593761661303980, +0.868618536818063340, 0.868643309803276200, 0.868668080616881390, 0.868692849258815850, 0.868717615729018180, 0.868742380027426540, 0.868767142153978880, 0.868791902108613460, +0.868816659891268220, 0.868841415501881320, 0.868866168940391370, 0.868890920206735530, 0.868915669300852290, 0.868940416222680030, 0.868965160972156700, 0.868989903549220340, +0.869014643953809340, 0.869039382185862190, 0.869064118245316040, 0.869088852132109730, 0.869113583846181200, 0.869138313387468720, 0.869163040755910440, 0.869187765951444650, +0.869212488974009380, 0.869237209823543360, 0.869261928499983850, 0.869286645003269460, 0.869311359333338470, 0.869336071490129150, 0.869360781473579650, 0.869385489283628130, +0.869410194920212990, 0.869434898383272700, 0.869459599672744780, 0.869484298788567920, 0.869508995730680190, 0.869533690499020070, 0.869558383093525620, 0.869583073514135330, +0.869607761760787690, 0.869632447833420310, 0.869657131731971680, 0.869681813456380290, 0.869706493006584420, 0.869731170382522230, 0.869755845584132210, 0.869780518611352530, +0.869805189464122000, 0.869829858142378010, 0.869854524646059390, 0.869879188975104520, 0.869903851129451570, 0.869928511109039130, 0.869953168913805360, 0.869977824543688550, +0.870002477998627730, 0.870027129278560300, 0.870051778383424960, 0.870076425313160210, 0.870101070067704430, 0.870125712646996010, 0.870150353050973210, 0.870174991279574980, +0.870199627332738920, 0.870224261210403750, 0.870248892912507950, 0.870273522438989810, 0.870298149789787920, 0.870322774964840780, 0.870347397964086560, 0.870372018787464290, +0.870396637434911580, 0.870421253906367260, 0.870445868201769830, 0.870470480321057670, 0.870495090264169380, 0.870519698031043340, 0.870544303621618500, 0.870568907035832450, +0.870593508273624140, 0.870618107334932060, 0.870642704219694700, 0.870667298927850550, 0.870691891459338230, 0.870716481814096110, 0.870741069992063240, 0.870765655993177230, +0.870790239817377130, 0.870814821464601430, 0.870839400934788730, 0.870863978227877420, 0.870888553343806220, 0.870913126282513610, 0.870937697043938640, 0.870962265628019040, +0.870986832034693740, 0.871011396263901340, 0.871035958315580450, 0.871060518189669670, 0.871085075886107620, 0.871109631404833220, 0.871134184745784410, 0.871158735908900140, +0.871183284894119000, 0.871207831701379610, 0.871232376330620670, 0.871256918781780800, 0.871281459054798700, 0.871305997149613320, 0.871330533066162480, 0.871355066804385350, +0.871379598364220520, 0.871404127745606720, 0.871428654948482650, 0.871453179972786820, 0.871477702818458600, 0.871502223485435600, 0.871526741973657090, 0.871551258283061680, +0.871575772413588190, 0.871600284365175230, 0.871624794137761620, 0.871649301731285960, 0.871673807145687430, 0.871698310380904060, 0.871722811436874910, 0.871747310313538690, +0.871771807010834120, 0.871796301528700130, 0.871820793867075340, 0.871845284025898670, 0.871869772005109070, 0.871894257804644690, 0.871918741424444700, 0.871943222864447810, +0.871967702124592850, 0.871992179204818640, 0.872016654105064020, 0.872041126825268130, 0.872065597365369040, 0.872090065725305900, 0.872114531905017750, 0.872138995904443100, +0.872163457723521000, 0.872187917362190370, 0.872212374820389820, 0.872236830098058860, 0.872261283195135300, 0.872285734111558520, 0.872310182847267470, 0.872334629402200970, +0.872359073776297840, 0.872383515969497150, 0.872407955981737480, 0.872432393812958450, 0.872456829463098100, 0.872481262932095600, 0.872505694219889880, 0.872530123326419990, +0.872554550251624760, 0.872578974995443120, 0.872603397557814580, 0.872627817938677050, 0.872652236137970050, 0.872676652155632390, 0.872701065991603020, 0.872725477645821090, +0.872749887118225430, 0.872774294408755090, 0.872798699517349450, 0.872823102443946560, 0.872847503188486030, 0.872871901750906680, 0.872896298131147550, 0.872920692329147710, +0.872945084344846080, 0.872969474178182270, 0.872993861829094220, 0.873018247297521640, 0.873042630583403370, 0.873067011686678550, 0.873091390607286130, 0.873115767345165380, +0.873140141900255130, 0.873164514272494970, 0.873188884461822970, 0.873213252468178940, 0.873237618291501700, 0.873261981931730440, 0.873286343388804180, 0.873310702662662090, +0.873335059753243210, 0.873359414660487170, 0.873383767384332210, 0.873408117924717730, 0.873432466281583000, 0.873456812454867060, 0.873481156444509080, 0.873505498250448320, +0.873529837872624170, 0.873554175310975010, 0.873578510565440340, 0.873602843635959530, 0.873627174522471520, 0.873651503224915580, 0.873675829743230880, 0.873700154077356570, +0.873724476227232370, 0.873748796192796550, 0.873773113973988710, 0.873797429570748130, 0.873821742983013960, 0.873846054210725360, 0.873870363253821720, 0.873894670112242200, +0.873918974785926280, 0.873943277274812690, 0.873967577578840800, 0.873991875697949890, 0.874016171632079450, 0.874040465381168420, 0.874064756945156400, 0.874089046323982770, +0.874113333517586130, 0.874137618525906210, 0.874161901348882160, 0.874186181986453480, 0.874210460438559210, 0.874234736705138850, 0.874259010786131660, 0.874283282681477370, +0.874307552391114460, 0.874331819914982660, 0.874356085253021330, 0.874380348405169760, 0.874404609371367330, 0.874428868151553300, 0.874453124745667610, 0.874477379153648650, +0.874501631375436350, 0.874525881410969870, 0.874550129260188710, 0.874574374923032140, 0.874598618399439750, 0.874622859689350720, 0.874647098792705080, 0.874671335709441220, +0.874695570439498970, 0.874719802982817820, 0.874744033339337150, 0.874768261508996450, 0.874792487491735100, 0.874816711287492500, 0.874840932896208460, 0.874865152317821800, +0.874889369552272260, 0.874913584599499190, 0.874937797459442220, 0.874962008132040720, 0.874986216617234300, 0.875010422914962670, 0.875034627025164550, 0.875058828947779980, +0.875083028682748230, 0.875107226230008920, 0.875131421589501520, 0.875155614761165660, 0.875179805744940700, 0.875203994540766690, 0.875228181148582140, 0.875252365568327310, +0.875276547799941460, 0.875300727843364320, 0.875324905698535270, 0.875349081365394020, 0.875373254843880070, 0.875397426133933340, 0.875421595235492680, 0.875445762148498010, +0.875469926872888940, 0.875494089408605070, 0.875518249755586010, 0.875542407913771250, 0.875566563883100950, 0.875590717663513820, 0.875614869254949800, 0.875639018657348720, +0.875663165870650070, 0.875687310894793460, 0.875711453729718590, 0.875735594375365080, 0.875759732831673080, 0.875783869098581190, 0.875808003176029690, 0.875832135063958180, +0.875856264762306380, 0.875880392271013890, 0.875904517590020410, 0.875928640719266130, 0.875952761658689740, 0.875976880408231520, 0.876000996967830960, 0.876025111337428000, +0.876049223516962350, 0.876073333506373510, 0.876097441305601410, 0.876121546914586100, 0.876145650333266410, 0.876169751561582720, 0.876193850599474630, 0.876217947446881860, +0.876242042103744350, 0.876266134570001580, 0.876290224845593600, 0.876314312930460360, 0.876338398824541010, 0.876362482527775600, 0.876386564040104070, 0.876410643361466010, +0.876434720491801490, 0.876458795431049990, 0.876482868179152110, 0.876506938736046460, 0.876531007101673640, 0.876555073275973150, 0.876579137258885030, 0.876603199050349110, +0.876627258650305220, 0.876651316058693060, 0.876675371275453140, 0.876699424300524280, 0.876723475133846960, 0.876747523775360800, 0.876771570225005960, 0.876795614482722140, +0.876819656548449400, 0.876843696422127450, 0.876867734103696670, 0.876891769593096120, 0.876915802890266050, 0.876939833995146630, 0.876963862907677580, 0.876987889627798830, +0.877011914155450430, 0.877035936490572650, 0.877059956633104540, 0.877083974582986590, 0.877107990340158740, 0.877132003904560810, 0.877156015276132960, 0.877180024454815020, +0.877204031440547040, 0.877228036233269390, 0.877252038832921240, 0.877276039239443080, 0.877300037452774740, 0.877324033472856260, 0.877348027299627690, 0.877372018933029190, +0.877396008373000910, 0.877419995619482250, 0.877443980672413690, 0.877467963531735060, 0.877491944197386520, 0.877515922669308220, 0.877539898947440000, 0.877563873031722120, +0.877587844922094960, 0.877611814618497800, 0.877635782120871010, 0.877659747429154760, 0.877683710543289200, 0.877707671463214380, 0.877731630188870350, 0.877755586720197270, +0.877779541057135630, 0.877803493199624700, 0.877827443147605080, 0.877851390901016830, 0.877875336459800090, 0.877899279823895040, 0.877923220993241720, 0.877947159967780830, +0.877971096747451660, 0.877995031332194700, 0.878018963721950210, 0.878042893916658240, 0.878066821916258950, 0.878090747720692730, 0.878114671329899620, 0.878138592743820330, +0.878162511962394030, 0.878186428985561540, 0.878210343813262910, 0.878234256445438400, 0.878258166882028290, 0.878282075122972740, 0.878305981168212460, 0.878329885017686830, +0.878353786671336350, 0.878377686129101500, 0.878401583390922450, 0.878425478456739460, 0.878449371326492700, 0.878473262000122550, 0.878497150477569710, 0.878521036758773580, +0.878544920843674750, 0.878568802732213720, 0.878592682424330640, 0.878616559919965790, 0.878640435219059660, 0.878664308321552400, 0.878688179227384740, 0.878712047936496270, +0.878735914448827700, 0.878759778764319210, 0.878783640882911390, 0.878807500804544510, 0.878831358529158830, 0.878855214056695090, 0.878879067387092980, 0.878902918520293230, +0.878926767456236100, 0.878950614194862090, 0.878974458736111570, 0.878998301079924830, 0.879022141226242450, 0.879045979175005040, 0.879069814926152330, 0.879093648479625010, +0.879117479835363700, 0.879141308993308560, 0.879165135953400180, 0.879188960715578950, 0.879212783279785360, 0.879236603645960240, 0.879260421814043180, 0.879284237783975020, +0.879308051555696360, 0.879331863129147460, 0.879355672504268940, 0.879379479681001270, 0.879403284659285300, 0.879427087439060730, 0.879450888020268380, 0.879474686402848870, +0.879498482586742570, 0.879522276571890080, 0.879546068358232010, 0.879569857945708630, 0.879593645334261100, 0.879617430523829010, 0.879641213514353320, 0.879664994305774720, +0.879688772898033490, 0.879712549291070340, 0.879736323484825890, 0.879760095479241060, 0.879783865274255560, 0.879807632869810340, 0.879831398265846110, 0.879855161462303360, +0.879878922459122690, 0.879902681256244710, 0.879926437853610020, 0.879950192251159670, 0.879973944448833370, 0.879997694446572280, 0.880021442244317000, 0.880045187842008030, +0.880068931239586070, 0.880092672436991850, 0.880116411434165860, 0.880140148231049360, 0.880163882827582070, 0.880187615223705030, 0.880211345419358970, 0.880235073414484480, +0.880258799209022390, 0.880282522802913300, 0.880306244196098260, 0.880329963388517210, 0.880353680380111300, 0.880377395170821140, 0.880401107760587550, 0.880424818149351140, +0.880448526337052730, 0.880472232323632920, 0.880495936109033090, 0.880519637693192860, 0.880543337076053590, 0.880567034257556000, 0.880590729237640810, 0.880614422016248730, +0.880638112593320700, 0.880661800968797310, 0.880685487142619850, 0.880709171114728350, 0.880732852885063870, 0.880756532453567220, 0.880780209820179240, 0.880803884984840750, +0.880827557947492570, 0.880851228708075860, 0.880874897266530680, 0.880898563622798280, 0.880922227776819500, 0.880945889728535050, 0.880969549477885970, 0.880993207024812990, +0.881016862369257030, 0.881040515511159250, 0.881064166450459820, 0.881087815187099890, 0.881111461721020510, 0.881135106052162500, 0.881158748180466690, 0.881182388105874010, +0.881206025828325750, 0.881229661347762040, 0.881253294664124160, 0.881276925777353060, 0.881300554687389660, 0.881324181394174790, 0.881347805897649490, 0.881371428197754710, +0.881395048294431830, 0.881418666187620880, 0.881442281877263260, 0.881465895363299890, 0.881489506645671830, 0.881513115724320010, 0.881536722599185360, 0.881560327270208940, +0.881583929737332130, 0.881607530000494970, 0.881631128059639170, 0.881654723914705450, 0.881678317565634860, 0.881701909012368560, 0.881725498254847470, 0.881749085293012990, +0.881772670126805490, 0.881796252756166240, 0.881819833181036410, 0.881843411401356910, 0.881866987417068930, 0.881890561228113490, 0.881914132834431650, 0.881937702235964900, +0.881961269432653520, 0.881984834424438870, 0.882008397211262230, 0.882031957793064540, 0.882055516169786950, 0.882079072341370620, 0.882102626307756600, 0.882126178068886380, +0.882149727624700340, 0.882173274975139980, 0.882196820120146330, 0.882220363059660780, 0.882243903793624270, 0.882267442321977960, 0.882290978644663550, 0.882314512761621210, +0.882338044672792530, 0.882361574378118910, 0.882385101877541160, 0.882408627171000770, 0.882432150258438800, 0.882455671139796500, 0.882479189815015390, 0.882502706284035820, +0.882526220546799630, 0.882549732603247760, 0.882573242453321580, 0.882596750096962370, 0.882620255534111280, 0.882643758764709910, 0.882667259788698750, 0.882690758606019420, +0.882714255216613180, 0.882737749620421290, 0.882761241817385130, 0.882784731807445770, 0.882808219590544670, 0.882831705166623350, 0.882855188535622390, 0.882878669697483410, +0.882902148652147780, 0.882925625399556880, 0.882949099939651760, 0.882972572272374020, 0.882996042397664830, 0.883019510315465880, 0.883042976025717800, 0.883066439528362170, +0.883089900823340600, 0.883113359910594140, 0.883136816790064390, 0.883160271461692510, 0.883183723925420440, 0.883207174181188660, 0.883230622228938890, 0.883254068068612510, +0.883277511700151120, 0.883300953123495770, 0.883324392338588170, 0.883347829345369480, 0.883371264143781750, 0.883394696733765360, 0.883418127115262350, 0.883441555288213890, +0.883464981252561570, 0.883488405008246770, 0.883511826555211100, 0.883535245893395720, 0.883558663022742660, 0.883582077943192550, 0.883605490654687300, 0.883628901157168300, +0.883652309450576930, 0.883675715534854910, 0.883699119409943610, 0.883722521075784860, 0.883745920532319370, 0.883769317779489190, 0.883792712817235590, 0.883816105645500280, +0.883839496264224760, 0.883862884673350390, 0.883886270872818900, 0.883909654862572110, 0.883933036642550740, 0.883956416212696830, 0.883979793572951870, 0.884003168723257350, +0.884026541663554990, 0.884049912393786270, 0.884073280913893140, 0.884096647223816420, 0.884120011323498160, 0.884143373212879720, 0.884166732891902950, 0.884190090360509330, +0.884213445618640460, 0.884236798666238060, 0.884260149503243940, 0.884283498129599170, 0.884306844545245550, 0.884330188750124810, 0.884353530744178660, 0.884376870527348700, +0.884400208099576530, 0.884423543460803870, 0.884446876610972770, 0.884470207550023920, 0.884493536277899730, 0.884516862794541670, 0.884540187099891350, 0.884563509193890710, +0.884586829076481120, 0.884610146747605080, 0.884633462207203070, 0.884656775455217480, 0.884680086491590020, 0.884703395316262300, 0.884726701929176020, 0.884750006330273010, +0.884773308519495090, 0.884796608496784210, 0.884819906262081400, 0.884843201815328830, 0.884866495156468310, 0.884889786285441570, 0.884913075202190310, 0.884936361906656370, +0.884959646398781890, 0.884982928678507920, 0.885006208745776620, 0.885029486600529820, 0.885052762242709350, 0.885076035672256900, 0.885099306889114310, 0.885122575893223520, +0.885145842684526780, 0.885169107262964940, 0.885192369628480360, 0.885215629781014760, 0.885238887720510180, 0.885262143446908350, 0.885285396960151180, 0.885308648260180520, +0.885331897346938730, 0.885355144220366650, 0.885378388880406760, 0.885401631327000890, 0.885424871560090980, 0.885448109579618840, 0.885471345385526520, 0.885494578977756190, +0.885517810356248880, 0.885541039520947200, 0.885564266471792870, 0.885587491208727930, 0.885610713731694200, 0.885633934040633730, 0.885657152135488350, 0.885680368016200540, +0.885703581682711460, 0.885726793134963280, 0.885750002372898250, 0.885773209396458210, 0.885796414205585080, 0.885819616800220920, 0.885842817180307770, 0.885866015345788020, +0.885889211296602700, 0.885912405032694420, 0.885935596554005110, 0.885958785860476830, 0.885981972952051610, 0.886005157828671400, 0.886028340490278790, 0.886051520936814830, +0.886074699168222120, 0.886097875184442610, 0.886121048985418440, 0.886144220571091660, 0.886167389941404320, 0.886190557096298460, 0.886213722035716690, 0.886236884759600160, +0.886260045267891480, 0.886283203560532700, 0.886306359637465850, 0.886329513498633090, 0.886352665143976590, 0.886375814573438840, 0.886398961786961090, 0.886422106784485960, +0.886445249565955500, 0.886468390131312070, 0.886491528480497500, 0.886514664613454180, 0.886537798530124270, 0.886560930230450240, 0.886584059714373370, 0.886607186981836490, +0.886630312032781530, 0.886653434867150870, 0.886676555484886550, 0.886699673885930960, 0.886722790070226030, 0.886745904037714690, 0.886769015788338110, 0.886792125322038990, +0.886815232638759500, 0.886838337738442010, 0.886861440621028670, 0.886884541286461660, 0.886907639734683780, 0.886930735965636430, 0.886953829979262090, 0.886976921775503360, +0.887000011354302180, 0.887023098715601030, 0.887046183859342090, 0.887069266785467710, 0.887092347493920630, 0.887115425984642210, 0.887138502257575290, 0.887161576312662010, +0.887184648149844880, 0.887207717769066150, 0.887230785170268100, 0.887253850353392990, 0.887276913318383760, 0.887299974065181800, 0.887323032593729910, 0.887346088903970490, +0.887369142995845790, 0.887392194869298320, 0.887415244524270230, 0.887438291960704560, 0.887461337178542700, 0.887484380177727460, 0.887507420958201340, 0.887530459519906610, +0.887553495862785760, 0.887576529986781160, 0.887599561891835200, 0.887622591577890810, 0.887645619044889480, 0.887668644292774140, 0.887691667321487190, 0.887714688130971100, +0.887737706721168250, 0.887760723092021140, 0.887783737243472590, 0.887806749175464320, 0.887829758887939250, 0.887852766380839650, 0.887875771654108250, 0.887898774707687300, +0.887921775541519520, 0.887944774155547290, 0.887967770549713540, 0.887990764723959880, 0.888013756678229350, 0.888036746412464440, 0.888059733926607640, 0.888082719220601560, +0.888105702294388680, 0.888128683147911490, 0.888151661781113040, 0.888174638193934940, 0.888197612386320330, 0.888220584358211720, 0.888243554109551580, 0.888266521640282520, +0.888289486950347260, 0.888312450039688620, 0.888335410908248520, 0.888358369555969810, 0.888381325982795180, 0.888404280188667350, 0.888427232173528700, 0.888450181937322060, +0.888473129479989910, 0.888496074801475300, 0.888519017901720170, 0.888541958780667440, 0.888564897438259840, 0.888587833874440070, 0.888610768089150630, 0.888633700082334220, +0.888656629853933680, 0.888679557403891930, 0.888702482732150910, 0.888725405838653560, 0.888748326723342810, 0.888771245386161260, 0.888794161827051510, 0.888817076045956390, +0.888839988042818940, 0.888862897817581210, 0.888885805370186240, 0.888908710700576640, 0.888931613808695340, 0.888954514694485050, 0.888977413357888380, 0.889000309798848250, +0.889023204017307720, 0.889046096013208720, 0.889068985786494630, 0.889091873337107930, 0.889114758664991570, 0.889137641770088360, 0.889160522652341020, 0.889183401311692820, +0.889206277748085690, 0.889229151961462900, 0.889252023951767170, 0.889274893718941420, 0.889297761262928370, 0.889320626583670950, 0.889343489681111990, 0.889366350555194750, +0.889389209205861180, 0.889412065633054530, 0.889434919836717740, 0.889457771816793750, 0.889480621573225270, 0.889503469105955240, 0.889526314414926470, 0.889549157500082340, +0.889571998361365020, 0.889594836998717660, 0.889617673412083090, 0.889640507601404450, 0.889663339566624580, 0.889686169307686290, 0.889708996824532970, 0.889731822117106770, +0.889754645185350970, 0.889777466029208600, 0.889800284648622600, 0.889823101043535900, 0.889845915213891450, 0.889868727159632170, 0.889891536880701440, 0.889914344377041530, +0.889937149648595720, 0.889959952695307030, 0.889982753517118530, 0.890005552113973030, 0.890028348485813690, 0.890051142632583560, 0.890073934554225900, 0.890096724250682980, +0.890119511721898290, 0.890142296967814880, 0.890165079988375680, 0.890187860783523740, 0.890210639353202220, 0.890233415697354480, 0.890256189815922800, 0.890278961708850570, +0.890301731376081040, 0.890324498817557150, 0.890347264033221950, 0.890370027023018710, 0.890392787786890240, 0.890415546324780370, 0.890438302636631150, 0.890461056722386180, +0.890483808581988610, 0.890506558215381380, 0.890529305622507870, 0.890552050803311120, 0.890574793757734630, 0.890597534485720770, 0.890620272987213020, 0.890643009262154560, +0.890665743310488640, 0.890688475132158320, 0.890711204727106850, 0.890733932095277400, 0.890756657236613460, 0.890779380151057510, 0.890802100838553050, 0.890824819299043340, +0.890847535532471650, 0.890870249538781130, 0.890892961317914960, 0.890915670869816380, 0.890938378194429000, 0.890961083291695320, 0.890983786161558930, 0.891006486803962990, +0.891029185218850880, 0.891051881406165870, 0.891074575365851110, 0.891097267097850310, 0.891119956602105970, 0.891142643878561680, 0.891165328927160830, 0.891188011747846680, +0.891210692340562490, 0.891233370705251550, 0.891256046841857110, 0.891278720750323110, 0.891301392430591810, 0.891324061882607040, 0.891346729106312070, 0.891369394101650280, +0.891392056868565150, 0.891414717406999730, 0.891437375716897520, 0.891460031798202320, 0.891482685650856640, 0.891505337274804300, 0.891527986669988560, 0.891550633836352800, +0.891573278773840520, 0.891595921482395080, 0.891618561961960210, 0.891641200212478500, 0.891663836233893780, 0.891686470026149540, 0.891709101589189030, 0.891731730922955880, +0.891754358027393330, 0.891776982902444890, 0.891799605548054370, 0.891822225964164490, 0.891844844150719070, 0.891867460107661490, 0.891890073834935240, 0.891912685332483800, +0.891935294600250670, 0.891957901638179670, 0.891980506446213630, 0.892003109024296250, 0.892025709372371130, 0.892048307490381660, 0.892070903378271440, 0.892093497035984060, +0.892116088463462800, 0.892138677660651800, 0.892161264627493680, 0.892183849363932470, 0.892206431869911550, 0.892229012145374530, 0.892251590190265120, 0.892274166004526580, +0.892296739588102740, 0.892319310940937300, 0.892341880062973320, 0.892364446954154620, 0.892387011614424800, 0.892409574043727450, 0.892432134242006180, 0.892454692209204480, +0.892477247945266510, 0.892499801450135080, 0.892522352723754130, 0.892544901766067270, 0.892567448577018090, 0.892589993156550410, 0.892612535504607620, 0.892635075621133640, +0.892657613506072200, 0.892680149159366440, 0.892702682580960310, 0.892725213770797500, 0.892747742728821510, 0.892770269454976280, 0.892792793949205410, 0.892815316211452940, +0.892837836241661690, 0.892860354039775930, 0.892882869605739260, 0.892905382939495400, 0.892927894040988050, 0.892950402910161030, 0.892972909546957960, 0.892995413951323090, +0.893017916123199250, 0.893040416062530600, 0.893062913769260950, 0.893085409243333910, 0.893107902484693410, 0.893130393493283160, 0.893152882269046990, 0.893175368811928940, +0.893197853121872050, 0.893220335198820600, 0.893242815042718300, 0.893265292653508960, 0.893287768031136300, 0.893310241175544250, 0.893332712086677080, 0.893355180764477730, +0.893377647208890350, 0.893400111419858870, 0.893422573397327110, 0.893445033141239020, 0.893467490651538190, 0.893489945928168770, 0.893512398971074820, 0.893534849780199480, +0.893557298355486920, 0.893579744696881280, 0.893602188804326180, 0.893624630677765650, 0.893647070317143520, 0.893669507722403720, 0.893691942893490520, 0.893714375830347070, +0.893736806532917760, 0.893759235001146400, 0.893781661234976930, 0.893804085234353280, 0.893826506999219510, 0.893848926529519750, 0.893871343825197400, 0.893893758886196600, +0.893916171712461400, 0.893938582303935860, 0.893960990660563780, 0.893983396782289220, 0.894005800669056220, 0.894028202320809040, 0.894050601737491070, 0.894072998919046570, +0.894095393865419470, 0.894117786576553940, 0.894140177052394010, 0.894162565292883630, 0.894184951297967160, 0.894207335067587980, 0.894229716601690370, 0.894252095900218590, +0.894274472963116460, 0.894296847790328250, 0.894319220381797790, 0.894341590737469440, 0.894363958857287370, 0.894386324741195060, 0.894408688389137010, 0.894431049801057140, +0.894453408976899620, 0.894475765916608710, 0.894498120620128350, 0.894520473087402570, 0.894542823318376090, 0.894565171312992180, 0.894587517071195330, 0.894609860592929680, +0.894632201878139300, 0.894654540926768550, 0.894676877738761370, 0.894699212314062460, 0.894721544652615000, 0.894743874754363790, 0.894766202619252880, 0.894788528247226430, +0.894810851638228600, 0.894833172792203760, 0.894855491709095950, 0.894877808388849780, 0.894900122831408740, 0.894922435036717310, 0.894944745004719880, 0.894967052735360590, +0.894989358228583610, 0.895011661484333200, 0.895033962502553740, 0.895056261283189710, 0.895078557826184620, 0.895100852131483160, 0.895123144199029610, 0.895145434028768120, +0.895167721620643060, 0.895190006974598720, 0.895212290090579790, 0.895234570968529760, 0.895256849608393250, 0.895279126010114610, 0.895301400173638130, 0.895323672098908170, +0.895345941785869130, 0.895368209234465140, 0.895390474444641040, 0.895412737416340310, 0.895434998149507780, 0.895457256644087820, 0.895479512900024590, 0.895501766917262690, +0.895524018695746270, 0.895546268235420270, 0.895568515536228180, 0.895590760598114820, 0.895613003421024570, 0.895635244004901800, 0.895657482349690890, 0.895679718455336340, +0.895701952321782400, 0.895724183948974020, 0.895746413336854790, 0.895768640485369530, 0.895790865394462730, 0.895813088064078670, 0.895835308494161930, 0.895857526684656900, +0.895879742635508070, 0.895901956346660260, 0.895924167818057170, 0.895946377049643750, 0.895968584041364260, 0.895990788793163410, 0.896012991304985460, 0.896035191576775140, +0.896057389608477250, 0.896079585400035410, 0.896101778951394650, 0.896123970262499460, 0.896146159333294330, 0.896168346163723760, 0.896190530753732340, 0.896212713103264670, +0.896234893212265570, 0.896257071080678760, 0.896279246708449380, 0.896301420095521830, 0.896323591241840800, 0.896345760147350680, 0.896367926811996290, 0.896390091235722000, +0.896412253418472860, 0.896434413360192690, 0.896456571060826550, 0.896478726520318900, 0.896500879738614590, 0.896523030715657980, 0.896545179451393780, 0.896567325945767050, +0.896589470198721590, 0.896611612210202470, 0.896633751980154270, 0.896655889508521710, 0.896678024795249500, 0.896700157840282120, 0.896722288643564400, 0.896744417205041390, +0.896766543524656900, 0.896788667602356090, 0.896810789438083570, 0.896832909031784140, 0.896855026383402310, 0.896877141492883000, 0.896899254360171260, 0.896921364985210910, +0.896943473367947220, 0.896965579508324780, 0.896987683406288540, 0.897009785061782970, 0.897031884474752910, 0.897053981645143160, 0.897076076572898900, 0.897098169257964040, +0.897120259700283750, 0.897142347899802740, 0.897164433856465940, 0.897186517570218060, 0.897208599041003920, 0.897230678268768230, 0.897252755253456160, 0.897274829995011960, +0.897296902493380570, 0.897318972748507030, 0.897341040760335940, 0.897363106528812350, 0.897385170053880850, 0.897407231335486940, 0.897429290373574550, 0.897451347168088940, +0.897473401718974940, 0.897495454026177470, 0.897517504089641370, 0.897539551909311450, 0.897561597485132650, 0.897583640817050220, 0.897605681905008450, 0.897627720748952360, +0.897649757348826900, 0.897671791704577230, 0.897693823816147930, 0.897715853683484170, 0.897737881306530760, 0.897759906685232980, 0.897781929819535090, 0.897803950709382350, +0.897825969354719700, 0.897847985755492180, 0.897869999911644730, 0.897892011823122170, 0.897914021489870100, 0.897936028911832440, 0.897958034088954800, 0.897980037021182120, +0.898002037708459320, 0.898024036150731340, 0.898046032347943330, 0.898068026300040230, 0.898090018006967530, 0.898112007468669260, 0.898133994685091030, 0.898155979656177880, +0.898177962381874750, 0.898199942862126680, 0.898221921096878710, 0.898243897086076440, 0.898265870829664030, 0.898287842327586850, 0.898309811579790060, 0.898331778586218820, +0.898353743346818060, 0.898375705861533040, 0.898397666130308690, 0.898419624153090620, 0.898441579929822990, 0.898463533460451490, 0.898485484744921180, 0.898507433783177100, +0.898529380575164520, 0.898551325120828360, 0.898573267420114010, 0.898595207472966840, 0.898617145279331230, 0.898639080839152780, 0.898661014152376650, 0.898682945218947870, +0.898704874038811830, 0.898726800611913570, 0.898748724938198800, 0.898770647017611780, 0.898792566850098120, 0.898814484435602970, 0.898836399774071700, 0.898858312865449370, +0.898880223709681350, 0.898902132306712680, 0.898924038656489180, 0.898945942758955010, 0.898967844614056100, 0.898989744221737610, 0.899011641581944690, 0.899033536694622710, +0.899055429559716960, 0.899077320177172900, 0.899099208546935150, 0.899121094668949410, 0.899142978543161050, 0.899164860169515130, 0.899186739547957030, 0.899208616678432100, +0.899230491560885640, 0.899252364195263440, 0.899274234581509790, 0.899296102719570610, 0.899317968609391170, 0.899339832250916850, 0.899361693644092910, 0.899383552788864730, +0.899405409685177680, 0.899427264332977590, 0.899449116732208840, 0.899470966882817250, 0.899492814784748410, 0.899514660437947370, 0.899536503842359720, 0.899558344997930860, +0.899580183904606480, 0.899602020562331290, 0.899623854971051130, 0.899645687130711140, 0.899667517041257030, 0.899689344702634180, 0.899711170114787850, 0.899732993277663760, +0.899754814191207400, 0.899776632855363690, 0.899798449270078460, 0.899820263435297090, 0.899842075350964940, 0.899863885017027740, 0.899885692433430750, 0.899907497600119570, +0.899929300517040010, 0.899951101184136790, 0.899972899601355850, 0.899994695768642660, 0.900016489685942720, 0.900038281353201520, 0.900060070770364760, 0.900081857937378050, +0.900103642854186430, 0.900125425520735600, 0.900147205936971280, 0.900168984102838850, 0.900190760018284020, 0.900212533683252380, 0.900234305097689310, 0.900256074261540860, +0.900277841174751850, 0.900299605837268200, 0.900321368249035640, 0.900343128409999530, 0.900364886320105700, 0.900386641979299630, 0.900408395387527370, 0.900430146544733630, +0.900451895450864570, 0.900473642105865890, 0.900495386509682970, 0.900517128662261630, 0.900538868563547480, 0.900560606213486100, 0.900582341612023660, 0.900604074759104980, +0.900625805654676090, 0.900647534298682610, 0.900669260691070450, 0.900690984831785000, 0.900712706720772190, 0.900734426357977510, 0.900756143743347230, 0.900777858876826150, +0.900799571758360560, 0.900821282387895940, 0.900842990765378100, 0.900864696890752770, 0.900886400763965760, 0.900908102384963110, 0.900929801753689750, 0.900951498870091960, +0.900973193734115440, 0.900994886345705900, 0.901016576704809170, 0.901038264811370950, 0.901059950665337060, 0.901081634266653770, 0.901103315615265910, 0.901124994711119840, +0.901146671554161170, 0.901168346144335940, 0.901190018481589860, 0.901211688565868640, 0.901233356397118210, 0.901255021975284840, 0.901276685300313460, 0.901298346372150450, +0.901320005190741510, 0.901341661756032590, 0.901363316067969490, 0.901384968126498150, 0.901406617931564740, 0.901428265483114390, 0.901449910781093380, 0.901471553825447520, +0.901493194616122870, 0.901514833153065240, 0.901536469436220570, 0.901558103465534670, 0.901579735240953810, 0.901601364762423360, 0.901622992029889380, 0.901644617043298010, +0.901666239802595080, 0.901687860307726520, 0.901709478558638370, 0.901731094555276890, 0.901752708297587250, 0.901774319785515810, 0.901795929019008620, 0.901817535998011620, +0.901839140722470840, 0.901860743192332110, 0.901882343407541590, 0.901903941368045530, 0.901925537073789200, 0.901947130524719090, 0.901968721720781240, 0.901990310661921480, +0.902011897348085960, 0.902033481779220710, 0.902055063955271690, 0.902076643876185470, 0.902098221541907220, 0.902119796952383420, 0.902141370107560130, 0.902162941007383480, +0.902184509651799420, 0.902206076040754090, 0.902227640174193990, 0.902249202052064380, 0.902270761674311750, 0.902292319040882140, 0.902313874151721820, 0.902335427006776820, +0.902356977605993320, 0.902378525949317220, 0.902400072036695260, 0.902421615868072790, 0.902443157443396200, 0.902464696762611760, 0.902486233825665620, 0.902507768632503820, +0.902529301183072620, 0.902550831477318180, 0.902572359515187110, 0.902593885296624650, 0.902615408821577540, 0.902636930089991910, 0.902658449101813920, 0.902679965856989730, +0.902701480355465710, 0.902722992597188470, 0.902744502582103260, 0.902766010310156800, 0.902787515781295240, 0.902809018995465060, 0.902830519952612210, 0.902852018652683050, +0.902873515095623970, 0.902895009281381330, 0.902916501209900860, 0.902937990881129140, 0.902959478295012440, 0.902980963451497030, 0.903002446350529290, 0.903023926992055360, +0.903045405376021960, 0.903066881502374800, 0.903088355371060250, 0.903109826982024910, 0.903131296335215050, 0.903152763430576930, 0.903174228268056820, 0.903195690847601210, +0.903217151169156680, 0.903238609232668970, 0.903260065038084760, 0.903281518585350330, 0.903302969874412160, 0.903324418905216530, 0.903345865677709800, 0.903367310191838470, +0.903388752447549240, 0.903410192444787710, 0.903431630183500810, 0.903453065663634700, 0.903474498885135980, 0.903495929847951020, 0.903517358552026200, 0.903538784997308440, +0.903560209183743250, 0.903581631111277540, 0.903603050779857810, 0.903624468189430430, 0.903645883339941890, 0.903667296231338680, 0.903688706863567170, 0.903710115236574300, +0.903731521350305770, 0.903752925204708400, 0.903774326799728690, 0.903795726135313230, 0.903817123211408500, 0.903838518027960890, 0.903859910584916990, 0.903881300882223630, +0.903902688919826720, 0.903924074697673110, 0.903945458215709260, 0.903966839473881790, 0.903988218472137170, 0.904009595210422120, 0.904030969688683350, 0.904052341906866790, +0.904073711864919470, 0.904095079562787780, 0.904116445000418430, 0.904137808177757910, 0.904159169094752910, 0.904180527751350050, 0.904201884147496140, 0.904223238283137220, +0.904244590158220230, 0.904265939772691650, 0.904287287126498310, 0.904308632219586680, 0.904329975051903600, 0.904351315623395770, 0.904372653934009450, 0.904393989983691360, +0.904415323772388420, 0.904436655300047130, 0.904457984566614190, 0.904479311572036200, 0.904500636316260100, 0.904521958799232690, 0.904543279020900040, 0.904564596981209170, +0.904585912680106800, 0.904607226117539630, 0.904628537293454380, 0.904649846207797870, 0.904671152860516690, 0.904692457251558000, 0.904713759380867840, 0.904735059248393260, +0.904756356854081070, 0.904777652197877870, 0.904798945279730700, 0.904820236099586060, 0.904841524657391210, 0.904862810953092180, 0.904884094986636130, 0.904905376757969890, +0.904926656267040160, 0.904947933513793770, 0.904969208498177520, 0.904990481220138370, 0.905011751679623330, 0.905033019876578470, 0.905054285810951150, 0.905075549482688090, +0.905096810891736100, 0.905118070038042230, 0.905139326921553080, 0.905160581542215900, 0.905181833899977080, 0.905203083994783550, 0.905224331826582350, 0.905245577395320300, +0.905266820700944330, 0.905288061743401370, 0.905309300522638140, 0.905330537038602110, 0.905351771291239340, 0.905373003280497080, 0.905394233006322380, 0.905415460468662170, +0.905436685667463160, 0.905457908602672500, 0.905479129274237130, 0.905500347682104190, 0.905521563826220070, 0.905542777706532130, 0.905563989322987100, 0.905585198675532220, +0.905606405764114220, 0.905627610588680240, 0.905648813149177670, 0.905670013445552650, 0.905691211477752670, 0.905712407245724550, 0.905733600749415450, 0.905754791988772400, +0.905775980963742340, 0.905797167674272320, 0.905818352120309700, 0.905839534301800860, 0.905860714218693190, 0.905881891870933820, 0.905903067258469590, 0.905924240381247750, +0.905945411239215350, 0.905966579832319320, 0.905987746160507370, 0.906008910223725540, 0.906030072021921540, 0.906051231555042300, 0.906072388823034980, 0.906093543825846610, +0.906114696563424470, 0.906135847035716040, 0.906156995242667460, 0.906178141184226460, 0.906199284860340180, 0.906220426270955560, 0.906241565416019970, 0.906262702295480450, +0.906283836909284160, 0.906304969257378690, 0.906326099339710310, 0.906347227156226840, 0.906368352706875210, 0.906389475991602690, 0.906410597010356530, 0.906431715763083790, +0.906452832249732280, 0.906473946470248150, 0.906495058424579230, 0.906516168112672660, 0.906537275534475720, 0.906558380689935550, 0.906579483578999420, 0.906600584201614600, +0.906621682557728680, 0.906642778647288150, 0.906663872470240720, 0.906684964026533650, 0.906706053316114090, 0.906727140338929430, 0.906748225094926920, 0.906769307584053830, +0.906790387806257870, 0.906811465761485520, 0.906832541449684610, 0.906853614870802290, 0.906874686024785830, 0.906895754911582810, 0.906916821531140280, 0.906937885883406180, +0.906958947968326990, 0.906980007785850310, 0.907001065335923730, 0.907022120618494410, 0.907043173633509840, 0.907064224380917270, 0.907085272860664200, 0.907106319072698340, +0.907127363016966280, 0.907148404693415840, 0.907169444101994290, 0.907190481242649230, 0.907211516115327910, 0.907232548719977830, 0.907253579056546360, 0.907274607124981420, +0.907295632925229410, 0.907316656457238470, 0.907337677720955860, 0.907358696716328960, 0.907379713443305370, 0.907400727901832570, 0.907421740091858280, 0.907442750013329190, +0.907463757666193360, 0.907484763050398050, 0.907505766165890850, 0.907526767012619140, 0.907547765590530630, 0.907568761899572700, 0.907589755939693270, 0.907610747710838940, +0.907631737212957870, 0.907652724445997430, 0.907673709409905220, 0.907694692104628610, 0.907715672530115310, 0.907736650686313260, 0.907757626573169160, 0.907778600190631060, +0.907799571538646430, 0.907820540617162890, 0.907841507426127900, 0.907862471965489190, 0.907883434235194350, 0.907904394235191310, 0.907925351965426900, 0.907946307425849030, +0.907967260616405420, 0.907988211537043680, 0.908009160187711490, 0.908030106568356250, 0.908051050678925890, 0.908071992519368210, 0.908092932089630160, 0.908113869389659770, +0.908134804419404750, 0.908155737178812710, 0.908176667667831230, 0.908197595886408250, 0.908218521834491590, 0.908239445512028180, 0.908260366918966170, 0.908281286055253380, +0.908302202920837190, 0.908323117515665630, 0.908344029839686210, 0.908364939892846720, 0.908385847675095340, 0.908406753186378870, 0.908427656426645470, 0.908448557395843070, +0.908469456093919160, 0.908490352520821660, 0.908511246676498300, 0.908532138560896870, 0.908553028173965330, 0.908573915515650920, 0.908594800585901700, 0.908615683384665580, +0.908636563911890070, 0.908657442167523310, 0.908678318151512900, 0.908699191863806990, 0.908720063304352840, 0.908740932473098510, 0.908761799369991800, 0.908782663994980640, +0.908803526348012760, 0.908824386429036070, 0.908845244237998510, 0.908866099774848110, 0.908886953039532150, 0.908907804031998780, 0.908928652752195920, 0.908949499200071400, +0.908970343375573140, 0.908991185278649080, 0.909012024909247370, 0.909032862267315170, 0.909053697352800950, 0.909074530165652320, 0.909095360705817530, 0.909116188973244200, +0.909137014967880460, 0.909157838689674260, 0.909178660138573740, 0.909199479314526270, 0.909220296217480020, 0.909241110847383020, 0.909261923204183310, 0.909282733287828830, +0.909303541098267390, 0.909324346635447260, 0.909345149899316470, 0.909365950889822530, 0.909386749606913680, 0.909407546050537970, 0.909428340220643340, 0.909449132117177930, +0.909469921740089670, 0.909490709089327050, 0.909511494164837230, 0.909532276966568580, 0.909553057494469350, 0.909573835748487490, 0.909594611728570920, 0.909615385434667910, +0.909636156866726500, 0.909656926024694950, 0.909677692908520740, 0.909698457518152370, 0.909719219853537760, 0.909739979914625190, 0.909760737701362570, 0.909781493213698170, +0.909802246451580030, 0.909822997414956650, 0.909843746103775390, 0.909864492517984740, 0.909885236657532960, 0.909905978522367990, 0.909926718112438080, 0.909947455427691400, +0.909968190468076530, 0.909988923233540750, 0.910009653724032640, 0.910030381939500370, 0.910051107879892180, 0.910071831545156250, 0.910092552935240720, 0.910113272050093740, +0.910133988889664010, 0.910154703453898930, 0.910175415742747180, 0.910196125756156830, 0.910216833494076120, 0.910237538956453320, 0.910258242143236700, 0.910278943054374850, +0.910299641689815360, 0.910320338049506630, 0.910341032133397120, 0.910361723941435000, 0.910382413473568630, 0.910403100729746170, 0.910423785709916000, 0.910444468414026710, +0.910465148842025900, 0.910485826993862160, 0.910506502869483870, 0.910527176468839410, 0.910547847791876920, 0.910568516838544780, 0.910589183608791490, 0.910609848102565510, +0.910630510319814570, 0.910651170260487360, 0.910671827924532160, 0.910692483311897450, 0.910713136422531490, 0.910733787256382770, 0.910754435813399880, 0.910775082093530530, +0.910795726096723550, 0.910816367822927190, 0.910837007272089940, 0.910857644444160060, 0.910878279339086270, 0.910898911956816600, 0.910919542297300100, 0.910940170360484360, +0.910960796146318200, 0.910981419654750100, 0.911002040885728450, 0.911022659839201610, 0.911043276515118180, 0.911063890913426880, 0.911084503034075510, 0.911105112877012900, +0.911125720442187540, 0.911146325729547790, 0.911166928739042370, 0.911187529470619540, 0.911208127924227900, 0.911228724099816260, 0.911249317997332440, 0.911269909616725380, +0.911290498957943560, 0.911311086020935360, 0.911331670805649590, 0.911352253312034620, 0.911372833540038950, 0.911393411489611620, 0.911413987160700430, 0.911434560553254220, +0.911455131667221590, 0.911475700502551110, 0.911496267059191510, 0.911516831337091160, 0.911537393336199100, 0.911557953056463140, 0.911578510497832340, 0.911599065660255280, +0.911619618543680570, 0.911640169148056790, 0.911660717473332550, 0.911681263519456550, 0.911701807286377730, 0.911722348774044120, 0.911742887982404550, 0.911763424911407830, +0.911783959561002440, 0.911804491931137220, 0.911825022021760860, 0.911845549832821840, 0.911866075364269220, 0.911886598616051260, 0.911907119588116650, 0.911927638280414230, +0.911948154692892810, 0.911968668825500980, 0.911989180678187460, 0.912009690250901390, 0.912030197543590710, 0.912050702556204460, 0.912071205288691570, 0.912091705741000620, +0.912112203913080340, 0.912132699804879650, 0.912153193416347150, 0.912173684747432100, 0.912194173798082430, 0.912214660568247290, 0.912235145057875510, 0.912255627266915890, +0.912276107195317270, 0.912296584843028340, 0.912317060209998250, 0.912337533296175170, 0.912358004101508250, 0.912378472625946400, 0.912398938869438240, 0.912419402831932790, +0.912439864513378880, 0.912460323913725340, 0.912480781032921300, 0.912501235870914920, 0.912521688427655460, 0.912542138703091750, 0.912562586697172720, 0.912583032409847280, +0.912603475841064160, 0.912623916990772390, 0.912644355858921230, 0.912664792445458840, 0.912685226750334370, 0.912705658773496850, 0.912726088514895230, 0.912746515974478420, +0.912766941152195250, 0.912787364047995100, 0.912807784661826220, 0.912828202993637870, 0.912848619043378990, 0.912869032810998630, 0.912889444296445580, 0.912909853499669020, +0.912930260420617760, 0.912950665059241160, 0.912971067415487610, 0.912991467489306370, 0.913011865280646480, 0.913032260789456980, 0.913052654015686800, 0.913073044959284870, +0.913093433620200460, 0.913113819998382810, 0.913134204093780210, 0.913154585906342130, 0.913174965436017510, 0.913195342682755600, 0.913215717646505220, 0.913236090327215640, +0.913256460724836130, 0.913276828839315160, 0.913297194670602110, 0.913317558218646020, 0.913337919483396040, 0.913358278464801330, 0.913378635162810810, 0.913398989577373870, +0.913419341708439640, 0.913439691555956830, 0.913460039119874720, 0.913480384400142560, 0.913500727396709400, 0.913521068109524380, 0.913541406538536770, 0.913561742683696050, +0.913582076544950490, 0.913602408122249800, 0.913622737415543120, 0.913643064424779490, 0.913663389149908300, 0.913683711590878580, 0.913704031747639590, 0.913724349620140930, +0.913744665208330980, 0.913764978512159430, 0.913785289531575450, 0.913805598266528070, 0.913825904716966900, 0.913846208882840850, 0.913866510764099300, 0.913886810360691860, +0.913907107672567000, 0.913927402699674430, 0.913947695441963300, 0.913967985899383000, 0.913988274071882660, 0.914008559959411660, 0.914028843561919600, 0.914049124879355080, +0.914069403911667800, 0.914089680658807020, 0.914109955120721910, 0.914130227297362040, 0.914150497188676580, 0.914170764794614790, 0.914191030115126480, 0.914211293150160360, +0.914231553899665930, 0.914251812363592540, 0.914272068541889690, 0.914292322434506640, 0.914312574041392880, 0.914332823362497550, 0.914353070397770580, 0.914373315147160580, +0.914393557610617250, 0.914413797788090070, 0.914434035679528410, 0.914454271284881660, 0.914474504604099180, 0.914494735637130910, 0.914514964383925320, 0.914535190844432360, +0.914555415018601380, 0.914575636906381990, 0.914595856507723350, 0.914616073822575150, 0.914636288850886770, 0.914656501592608030, 0.914676712047687750, 0.914696920216075520, +0.914717126097721160, 0.914737329692573820, 0.914757531000583320, 0.914777730021698820, 0.914797926755870460, 0.914818121203046950, 0.914838313363178110, 0.914858503236213430, +0.914878690822102600, 0.914898876120794900, 0.914919059132240140, 0.914939239856387700, 0.914959418293187500, 0.914979594442588360, 0.914999768304540330, 0.915019939878992770, +0.915040109165895510, 0.915060276165197810, 0.915080440876849480, 0.915100603300800120, 0.915120763436999550, 0.915140921285396700, 0.915161076845941500, 0.915181230118583770, +0.915201381103272870, 0.915221529799958410, 0.915241676208590320, 0.915261820329118290, 0.915281962161491380, 0.915302101705659510, 0.915322238961572500, 0.915342373929179720, +0.915362506608431210, 0.915382636999276240, 0.915402765101664850, 0.915422890915546850, 0.915443014440871170, 0.915463135677588080, 0.915483254625647060, 0.915503371284997920, +0.915523485655590390, 0.915543597737374150, 0.915563707530298920, 0.915583815034314740, 0.915603920249370650, 0.915624023175416800, 0.915644123812402900, 0.915664222160278650, +0.915684318218993880, 0.915704411988498280, 0.915724503468742010, 0.915744592659674230, 0.915764679561244850, 0.915784764173403820, 0.915804846496100830, 0.915824926529285820, +0.915845004272908380, 0.915865079726918550, 0.915885152891266260, 0.915905223765900780, 0.915925292350772250, 0.915945358645830490, 0.915965422651025320, 0.915985484366306670, +0.916005543791624240, 0.916025600926928310, 0.916045655772168010, 0.916065708327293620, 0.916085758592254830, 0.916105806567001800, 0.916125852251484130, 0.916145895645651960, +0.916165936749455010, 0.916185975562843540, 0.916206012085766690, 0.916226046318174950, 0.916246078260018030, 0.916266107911245960, 0.916286135271808580, 0.916306160341655910, +0.916326183120737770, 0.916346203609004540, 0.916366221806405480, 0.916386237712890850, 0.916406251328410690, 0.916426262652914820, 0.916446271686353290, 0.916466278428676120, +0.916486282879833580, 0.916506285039775050, 0.916526284908450780, 0.916546282485810710, 0.916566277771804990, 0.916586270766383660, 0.916606261469496530, 0.916626249881093760, +0.916646236001125820, 0.916666219829541880, 0.916686201366292310, 0.916706180611327360, 0.916726157564596860, 0.916746132226051060, 0.916766104595639900, 0.916786074673313410, +0.916806042459022200, 0.916826007952715400, 0.916845971154343630, 0.916865932063857030, 0.916885890681205520, 0.916905847006339260, 0.916925801039208400, 0.916945752779763420, +0.916965702227953710, 0.916985649383729730, 0.917005594247041530, 0.917025536817839490, 0.917045477096073540, 0.917065415081693920, 0.917085350774650700, 0.917105284174894560, +0.917125215282374780, 0.917145144097041950, 0.917165070618846330, 0.917184994847738080, 0.917204916783667220, 0.917224836426584140, 0.917244753776439210, 0.917264668833182140, +0.917284581596763400, 0.917304492067133270, 0.917324400244241780, 0.917344306128039410, 0.917364209718476210, 0.917384111015502430, 0.917404010019068790, 0.917423906729124770, +0.917443801145620960, 0.917463693268507630, 0.917483583097735140, 0.917503470633253660, 0.917523355875013550, 0.917543238822964960, 0.917563119477058710, 0.917582997837244170, +0.917602873903472280, 0.917622747675693180, 0.917642619153857140, 0.917662488337914640, 0.917682355227815830, 0.917702219823511630, 0.917722082124951430, 0.917741942132086040, +0.917761799844865720, 0.917781655263240960, 0.917801508387162120, 0.917821359216579370, 0.917841207751443400, 0.917861053991704590, 0.917880897937312870, 0.917900739588218940, +0.917920578944373180, 0.917940416005725960, 0.917960250772227650, 0.917980083243828740, 0.917999913420479930, 0.918019741302131040, 0.918039566888732780, 0.918059390180235520, +0.918079211176589860, 0.918099029877746280, 0.918118846283654920, 0.918138660394266610, 0.918158472209531950, 0.918178281729400750, 0.918198088953823820, 0.918217893882751660, +0.918237696516134850, 0.918257496853923770, 0.918277294896068910, 0.918297090642520850, 0.918316884093230310, 0.918336675248147330, 0.918356464107222600, 0.918376250670406740, +0.918396034937650320, 0.918415816908903730, 0.918435596584117550, 0.918455373963242840, 0.918475149046229290, 0.918494921833027830, 0.918514692323589180, 0.918534460517863690, +0.918554226415802090, 0.918573990017354960, 0.918593751322472780, 0.918613510331106610, 0.918633267043206360, 0.918653021458722850, 0.918672773577606790, 0.918692523399808890, +0.918712270925279630, 0.918732016153969710, 0.918751759085829730, 0.918771499720810740, 0.918791238058862540, 0.918810974099936400, 0.918830707843982690, 0.918850439290952340, +0.918870168440795830, 0.918889895293463880, 0.918909619848907510, 0.918929342107076770, 0.918949062067922710, 0.918968779731396010, 0.918988495097447290, 0.919008208166027350, +0.919027918937086910, 0.919047627410576770, 0.919067333586447770, 0.919087037464650150, 0.919106739045134850, 0.919126438327852790, 0.919146135312754690, 0.919165829999791130, +0.919185522388913050, 0.919205212480071480, 0.919224900273216570, 0.919244585768299370, 0.919264268965270800, 0.919283949864081460, 0.919303628464682280, 0.919323304767024060, +0.919342978771057530, 0.919362650476733930, 0.919382319884003320, 0.919401986992816940, 0.919421651803125630, 0.919441314314880080, 0.919460974528031330, 0.919480632442530200, +0.919500288058327400, 0.919519941375374180, 0.919539592393620820, 0.919559241113018570, 0.919578887533518130, 0.919598531655070440, 0.919618173477626420, 0.919637813001137010, +0.919657450225553450, 0.919677085150825800, 0.919696717776905540, 0.919716348103743480, 0.919735976131290540, 0.919755601859497670, 0.919775225288315790, 0.919794846417695820, +0.919814465247589030, 0.919834081777945790, 0.919853696008717360, 0.919873307939854670, 0.919892917571308750, 0.919912524903030550, 0.919932129934970980, 0.919951732667081080, +0.919971333099312230, 0.919990931231614680, 0.920010527063939820, 0.920030120596238570, 0.920049711828462070, 0.920069300760561370, 0.920088887392487290, 0.920108471724191410, +0.920128053755624010, 0.920147633486736450, 0.920167210917479880, 0.920186786047805240, 0.920206358877663550, 0.920225929407006090, 0.920245497635783670, 0.920265063563947990, +0.920284627191449210, 0.920304188518238920, 0.920323747544268160, 0.920343304269487960, 0.920362858693849480, 0.920382410817303990, 0.920401960639802730, 0.920421508161296310, +0.920441053381735990, 0.920460596301073130, 0.920480136919258780, 0.920499675236243990, 0.920519211251980110, 0.920538744966418190, 0.920558276379509710, 0.920577805491205270, +0.920597332301456240, 0.920616856810213880, 0.920636379017429450, 0.920655898923053990, 0.920675416527038770, 0.920694931829335150, 0.920714444829894400, 0.920733955528667320, +0.920753463925605200, 0.920772970020659500, 0.920792473813781380, 0.920811975304922090, 0.920831474494032910, 0.920850971381065310, 0.920870465965969890, 0.920889958248698460, +0.920909448229201950, 0.920928935907431970, 0.920948421283339540, 0.920967904356876140, 0.920987385127992940, 0.921006863596641630, 0.921026339762772820, 0.921045813626338190, +0.921065285187289030, 0.921084754445576580, 0.921104221401152330, 0.921123686053967440, 0.921143148403973380, 0.921162608451121860, 0.921182066195363360, 0.921201521636649700, +0.921220974774932370, 0.921240425610162510, 0.921259874142291490, 0.921279320371270920, 0.921298764297052370, 0.921318205919586570, 0.921337645238825220, 0.921357082254719790, +0.921376516967221670, 0.921395949376282220, 0.921415379481852930, 0.921434807283885160, 0.921454232782330740, 0.921473655977140370, 0.921493076868265870, 0.921512495455658720, +0.921531911739270290, 0.921551325719052070, 0.921570737394955540, 0.921590146766932520, 0.921609553834933810, 0.921628958598911140, 0.921648361058816090, 0.921667761214600260, +0.921687159066214900, 0.921706554613611730, 0.921725947856742110, 0.921745338795557980, 0.921764727430010140, 0.921784113760050540, 0.921803497785630640, 0.921822879506701940, +0.921842258923216140, 0.921861636035124610, 0.921881010842379060, 0.921900383344931180, 0.921919753542732150, 0.921939121435733640, 0.921958487023887390, 0.921977850307144960, +0.921997211285457860, 0.922016569958777680, 0.922035926327056440, 0.922055280390245090, 0.922074632148295550, 0.922093981601159410, 0.922113328748788260, 0.922132673591133820, +0.922152016128147680, 0.922171356359781540, 0.922190694285987320, 0.922210029906716080, 0.922229363221919730, 0.922248694231549980, 0.922268022935558430, 0.922287349333896890, +0.922306673426516950, 0.922325995213370330, 0.922345314694409170, 0.922364631869584280, 0.922383946738847830, 0.922403259302151500, 0.922422569559447010, 0.922441877510686070, +0.922461183155820490, 0.922480486494802300, 0.922499787527582550, 0.922519086254113270, 0.922538382674346290, 0.922557676788233420, 0.922576968595726350, 0.922596258096776810, +0.922615545291336600, 0.922634830179357990, 0.922654112760791900, 0.922673393035590480, 0.922692671003705670, 0.922711946665089040, 0.922731220019692660, 0.922750491067468200, +0.922769759808367840, 0.922789026242342820, 0.922808290369345090, 0.922827552189326770, 0.922846811702239480, 0.922866068908035240, 0.922885323806665770, 0.922904576398082990, +0.922923826682239160, 0.922943074659085430, 0.922962320328573950, 0.922981563690656650, 0.923000804745285450, 0.923020043492412290, 0.923039279931989090, 0.923058514063967550, +0.923077745888300160, 0.923096975404937960, 0.923116202613833430, 0.923135427514938380, 0.923154650108204740, 0.923173870393584450, 0.923193088371029540, 0.923212304040492150, +0.923231517401923770, 0.923250728455276560, 0.923269937200502430, 0.923289143637553540, 0.923308347766381820, 0.923327549586939190, 0.923346749099177800, 0.923365946303049690, +0.923385141198506560, 0.923404333785500460, 0.923423524063983540, 0.923442712033907820, 0.923461897695225350, 0.923481081047888060, 0.923500262091848430, 0.923519440827057840, +0.923538617253468640, 0.923557791371033000, 0.923576963179702730, 0.923596132679430080, 0.923615299870167110, 0.923634464751865950, 0.923653627324478870, 0.923672787587957460, +0.923691945542254090, 0.923711101187320800, 0.923730254523109750, 0.923749405549573080, 0.923768554266662930, 0.923787700674331360, 0.923806844772530940, 0.923825986561213060, +0.923845126040330090, 0.923864263209834390, 0.923883398069678120, 0.923902530619813200, 0.923921660860192010, 0.923940788790767020, 0.923959914411489720, 0.923979037722312710, +0.923998158723188020, 0.924017277414067920, 0.924036393794904650, 0.924055507865650380, 0.924074619626257370, 0.924093729076678190, 0.924112836216864240, 0.924131941046768320, +0.924151043566342480, 0.924170143775538970, 0.924189241674310160, 0.924208337262608310, 0.924227430540385590, 0.924246521507594570, 0.924265610164186960, 0.924284696510115240, +0.924303780545331910, 0.924322862269788990, 0.924341941683439080, 0.924361018786234220, 0.924380093578127120, 0.924399166059069470, 0.924418236229013980, 0.924437304087912800, +0.924456369635718420, 0.924475432872383100, 0.924494493797859200, 0.924513552412099090, 0.924532608715055380, 0.924551662706679880, 0.924570714386925170, 0.924589763755743640, +0.924608810813087770, 0.924627855558909810, 0.924646897993162350, 0.924665938115797780, 0.924684975926768240, 0.924704011426026100, 0.924723044613523950, 0.924742075489214280, +0.924761104053049340, 0.924780130304981740, 0.924799154244963730, 0.924818175872948120, 0.924837195188886850, 0.924856212192732510, 0.924875226884437680, 0.924894239263954750, +0.924913249331236310, 0.924932257086234720, 0.924951262528902360, 0.924970265659192270, 0.924989266477056260, 0.925008264982447040, 0.925027261175317080, 0.925046255055618990, +0.925065246623305360, 0.925084235878328440, 0.925103222820641390, 0.925122207450195910, 0.925141189766944930, 0.925160169770841030, 0.925179147461836600, 0.925198122839884340, +0.925217095904936840, 0.925236066656946580, 0.925255035095866370, 0.925274001221648380, 0.925292965034245300, 0.925311926533609830, 0.925330885719694570, 0.925349842592452120, +0.925368797151834950, 0.925387749397795890, 0.925406699330287740, 0.925425646949262550, 0.925444592254673240, 0.925463535246472400, 0.925482475924612750, 0.925501414289046860, +0.925520350339727570, 0.925539284076607680, 0.925558215499639240, 0.925577144608775160, 0.925596071403968380, 0.925614995885171270, 0.925633918052336750, 0.925652837905417410, +0.925671755444366080, 0.925690670669135570, 0.925709583579678140, 0.925728494175946710, 0.925747402457894000, 0.925766308425472810, 0.925785212078635840, 0.925804113417335930, +0.925823012441525980, 0.925841909151158160, 0.925860803546185610, 0.925879695626561030, 0.925898585392237240, 0.925917472843166940, 0.925936357979303070, 0.925955240800598210, +0.925974121307005520, 0.925992999498477350, 0.926011875374966540, 0.926030748936426120, 0.926049620182808790, 0.926068489114067470, 0.926087355730154880, 0.926106220031023940, +0.926125082016627690, 0.926143941686918490, 0.926162799041849390, 0.926181654081373320, 0.926200506805443080, 0.926219357214011610, 0.926238205307031830, 0.926257051084456770, +0.926275894546238710, 0.926294735692331010, 0.926313574522686370, 0.926332411037257830, 0.926351245235998320, 0.926370077118860660, 0.926388906685797870, 0.926407733936763010, +0.926426558871708550, 0.926445381490587750, 0.926464201793353430, 0.926483019779958620, 0.926501835450356250, 0.926520648804499360, 0.926539459842340760, 0.926558268563833830, +0.926577074968931050, 0.926595879057585450, 0.926614680829750180, 0.926633480285378170, 0.926652277424422470, 0.926671072246836090, 0.926689864752572420, 0.926708654941583720, +0.926727442813823350, 0.926746228369244470, 0.926765011607799890, 0.926783792529442870, 0.926802571134126340, 0.926821347421803440, 0.926840121392427440, 0.926858893045950820, +0.926877662382326940, 0.926896429401508850, 0.926915194103449800, 0.926933956488102730, 0.926952716555420770, 0.926971474305357310, 0.926990229737864930, 0.927008982852896900, +0.927027733650406470, 0.927046482130346570, 0.927065228292670570, 0.927083972137331510, 0.927102713664282540, 0.927121452873477030, 0.927140189764867670, 0.927158924338407740, +0.927177656594050490, 0.927196386531749180, 0.927215114151456850, 0.927233839453126760, 0.927252562436712060, 0.927271283102166330, 0.927290001449441960, 0.927308717478492640, +0.927327431189271520, 0.927346142581731870, 0.927364851655826830, 0.927383558411509660, 0.927402262848733950, 0.927420964967452190, 0.927439664767618080, 0.927458362249184760, +0.927477057412105620, 0.927495750256333800, 0.927514440781822550, 0.927533128988525250, 0.927551814876395380, 0.927570498445385750, 0.927589179695449740, 0.927607858626540940, +0.927626535238612380, 0.927645209531617550, 0.927663881505509710, 0.927682551160242120, 0.927701218495768480, 0.927719883512041490, 0.927738546209014750, 0.927757206586641630, +0.927775864644875600, 0.927794520383669830, 0.927813173802977790, 0.927831824902753070, 0.927850473682948480, 0.927869120143517740, 0.927887764284414220, 0.927906406105591270, +0.927925045607002400, 0.927943682788600730, 0.927962317650339990, 0.927980950192173750, 0.927999580414054840, 0.928018208315936840, 0.928036833897773470, 0.928055457159517980, +0.928074078101123860, 0.928092696722544460, 0.928111313023733730, 0.928129927004644360, 0.928148538665230170, 0.928167148005444640, 0.928185755025241250, 0.928204359724573490, +0.928222962103394830, 0.928241562161658650, 0.928260159899318980, 0.928278755316328640, 0.928297348412641330, 0.928315939188210650, 0.928334527642990180, 0.928353113776933410, +0.928371697589993830, 0.928390279082124900, 0.928408858253280680, 0.928427435103414080, 0.928446009632478700, 0.928464581840428460, 0.928483151727216740, 0.928501719292797120, +0.928520284537123100, 0.928538847460148810, 0.928557408061827070, 0.928575966342111810, 0.928594522300956630, 0.928613075938315100, 0.928631627254140950, 0.928650176248387640, +0.928668722921008990, 0.928687267271958830, 0.928705809301190070, 0.928724349008656970, 0.928742886394312910, 0.928761421458111580, 0.928779954200006700, 0.928798484619952070, +0.928817012717901400, 0.928835538493807960, 0.928854061947625650, 0.928872583079308200, 0.928891101888809300, 0.928909618376082550, 0.928928132541081860, 0.928946644383760840, +0.928965153904073530, 0.928983661101972950, 0.929002165977413250, 0.929020668530348150, 0.929039168760731340, 0.929057666668516640, 0.929076162253657860, 0.929094655516108590, +0.929113146455822990, 0.929131635072754200, 0.929150121366856260, 0.929168605338083100, 0.929187086986388410, 0.929205566311726020, 0.929224043314049730, 0.929242517993313700, +0.929260990349470960, 0.929279460382475770, 0.929297928092281960, 0.929316393478843210, 0.929334856542113560, 0.929353317282046840, 0.929371775698596750, 0.929390231791717540, +0.929408685561362470, 0.929427137007485690, 0.929445586130041020, 0.929464032928982390, 0.929482477404263710, 0.929500919555838800, 0.929519359383661590, 0.929537796887686340, +0.929556232067866310, 0.929574664924155640, 0.929593095456508260, 0.929611523664878200, 0.929629949549219400, 0.929648373109485560, 0.929666794345631260, 0.929685213257609670, +0.929703629845374910, 0.929722044108881150, 0.929740456048082310, 0.929758865662932310, 0.929777272953385080, 0.929795677919394770, 0.929814080560915520, 0.929832480877900710, +0.929850878870304820, 0.929869274538081660, 0.929887667881185260, 0.929906058899569790, 0.929924447593189150, 0.929942833961997730, 0.929961218005948780, 0.929979599724996890, +0.929997979119095990, 0.930016356188200220, 0.930034730932263410, 0.930053103351239810, 0.930071473445083560, 0.930089841213748820, 0.930108206657189300, 0.930126569775359120, +0.930144930568212570, 0.930163289035703670, 0.930181645177786560, 0.930199998994415410, 0.930218350485544130, 0.930236699651127430, 0.930255046491118560, 0.930273391005472130, +0.930291733194142270, 0.930310073057083020, 0.930328410594248530, 0.930346745805593070, 0.930365078691071100, 0.930383409250636010, 0.930401737484242490, 0.930420063391844580, +0.930438386973396540, 0.930456708228852510, 0.930475027158166770, 0.930493343761293450, 0.930511658038187030, 0.930529969988801110, 0.930548279613090390, 0.930566586911008910, +0.930584891882510920, 0.930603194527550800, 0.930621494846082590, 0.930639792838060750, 0.930658088503439670, 0.930676381842173050, 0.930694672854215480, 0.930712961539521210, +0.930731247898044620, 0.930749531929739860, 0.930767813634561290, 0.930786093012463510, 0.930804370063400110, 0.930822644787325790, 0.930840917184194930, 0.930859187253961770, +0.930877454996580590, 0.930895720412005860, 0.930913983500191720, 0.930932244261093000, 0.930950502694663400, 0.930968758800857500, 0.930987012579629680, 0.931005264030934310, +0.931023513154725760, 0.931041759950958500, 0.931060004419587140, 0.931078246560565480, 0.931096486373848120, 0.931114723859389650, 0.931132959017144320, 0.931151191847066630, +0.931169422349110820, 0.931187650523231600, 0.931205876369383570, 0.931224099887520420, 0.931242321077597190, 0.931260539939568030, 0.931278756473387540, 0.931296970679010180, +0.931315182556390340, 0.931333392105482600, 0.931351599326241670, 0.931369804218621480, 0.931388006782576720, 0.931406207018061980, 0.931424404925031650, 0.931442600503440410, +0.931460793753242640, 0.931478984674393160, 0.931497173266845890, 0.931515359530555750, 0.931533543465477230, 0.931551725071564810, 0.931569904348773070, 0.931588081297056500, +0.931606255916369810, 0.931624428206667800, 0.931642598167904400, 0.931660765800034540, 0.931678931103012700, 0.931697094076793570, 0.931715254721331650, 0.931733413036581640, +0.931751569022498120, 0.931769722679036020, 0.931787874006149150, 0.931806023003792780, 0.931824169671921280, 0.931842314010489340, 0.931860456019451560, 0.931878595698762750, +0.931896733048377720, 0.931914868068250520, 0.931933000758336180, 0.931951131118589290, 0.931969259148964560, 0.931987384849416790, 0.932005508219900470, 0.932023629260370410, +0.932041747970781650, 0.932059864351088120, 0.932077978401244960, 0.932096090121206870, 0.932114199510928550, 0.932132306570364720, 0.932150411299470070, 0.932168513698199750, +0.932186613766507800, 0.932204711504349360, 0.932222806911679140, 0.932240899988451940, 0.932258990734622480, 0.932277079150145460, 0.932295165234975800, 0.932313248989068530, +0.932331330412377920, 0.932349409504858890, 0.932367486266466260, 0.932385560697155060, 0.932403632796879880, 0.932421702565595640, 0.932439770003257170, 0.932457835109819500, +0.932475897885236990, 0.932493958329464800, 0.932512016442457630, 0.932530072224170390, 0.932548125674558030, 0.932566176793575340, 0.932584225581177590, 0.932602272037318820, +0.932620316161954510, 0.932638357955039350, 0.932656397416528280, 0.932674434546376220, 0.932692469344538090, 0.932710501810968820, 0.932728531945623550, 0.932746559748456660, +0.932764585219423400, 0.932782608358478590, 0.932800629165577380, 0.932818647640674570, 0.932836663783725100, 0.932854677594683880, 0.932872689073506400, 0.932890698220146920, +0.932908705034560580, 0.932926709516702530, 0.932944711666527820, 0.932962711483991130, 0.932980708969047830, 0.932998704121652980, 0.933016696941761040, 0.933034687429327380, +0.933052675584307050, 0.933070661406654960, 0.933088644896326260, 0.933106626053275990, 0.933124604877459070, 0.933142581368830990, 0.933160555527346110, 0.933178527352959920, +0.933196496845627330, 0.933214464005303610, 0.933232428831943570, 0.933250391325502580, 0.933268351485935900, 0.933286309313198000, 0.933304264807244380, 0.933322217968030050, +0.933340168795510180, 0.933358117289639910, 0.933376063450374270, 0.933394007277668520, 0.933411948771478150, 0.933429887931757520, 0.933447824758462220, 0.933465759251547290, +0.933483691410967990, 0.933501621236679460, 0.933519548728636850, 0.933537473886795420, 0.933555396711110540, 0.933573317201536910, 0.933591235358030010, 0.933609151180544990, +0.933627064669037110, 0.933644975823461620, 0.933662884643773560, 0.933680791129928740, 0.933698695281881540, 0.933716597099587650, 0.933734496583002230, 0.933752393732080520, +0.933770288546777900, 0.933788181027049640, 0.933806071172850750, 0.933823958984137170, 0.933841844460863270, 0.933859727602984750, 0.933877608410456970, 0.933895486883235090, +0.933913363021274590, 0.933931236824530610, 0.933949108292958850, 0.933966977426514020, 0.933984844225151820, 0.934002708688827400, 0.934020570817496340, 0.934038430611113800, +0.934056288069635140, 0.934074143193015740, 0.934091995981211400, 0.934109846434176610, 0.934127694551867280, 0.934145540334238800, 0.934163383781246300, 0.934181224892845500, +0.934199063668991530, 0.934216900109639980, 0.934234734214746450, 0.934252565984265760, 0.934270395418153710, 0.934288222516365560, 0.934306047278857020, 0.934323869705583230, +0.934341689796499790, 0.934359507551562500, 0.934377322970726070, 0.934395136053946310, 0.934412946801178810, 0.934430755212378840, 0.934448561287501980, 0.934466365026503820, +0.934484166429339740, 0.934501965495965430, 0.934519762226336040, 0.934537556620407160, 0.934555348678134390, 0.934573138399473200, 0.934590925784379300, 0.934608710832807940, +0.934626493544714940, 0.934644273920055890, 0.934662051958785930, 0.934679827660860880, 0.934697601026236110, 0.934715372054867540, 0.934733140746710320, 0.934750907101720370, +0.934768671119853510, 0.934786432801064550, 0.934804192145309630, 0.934821949152544130, 0.934839703822723740, 0.934857456155804180, 0.934875206151740910, 0.934892953810489760, +0.934910699132006420, 0.934928442116246040, 0.934946182763164550, 0.934963921072717530, 0.934981657044860800, 0.934999390679549960, 0.935017121976740580, 0.935034850936388720, +0.935052577558449390, 0.935070301842878650, 0.935088023789632180, 0.935105743398665590, 0.935123460669934680, 0.935141175603395160, 0.935158888199002610, 0.935176598456713190, +0.935194306376482040, 0.935212011958264980, 0.935229715202018030, 0.935247416107696680, 0.935265114675256860, 0.935282810904654260, 0.935300504795844590, 0.935318196348783990, +0.935335885563427620, 0.935353572439731500, 0.935371256977651440, 0.935388939177143160, 0.935406619038162690, 0.935424296560665610, 0.935441971744608080, 0.935459644589945350, +0.935477315096633450, 0.935494983264628320, 0.935512649093885650, 0.935530312584361480, 0.935547973736011400, 0.935565632548791440, 0.935583289022657750, 0.935600943157565480, +0.935618594953470880, 0.935636244410329780, 0.935653891528098080, 0.935671536306731720, 0.935689178746186400, 0.935706818846418150, 0.935724456607383240, 0.935742092029036800, +0.935759725111335210, 0.935777355854234270, 0.935794984257689920, 0.935812610321658080, 0.935830234046094780, 0.935847855430956170, 0.935865474476197610, 0.935883091181775370, +0.935900705547645370, 0.935918317573763650, 0.935935927260086120, 0.935953534606568830, 0.935971139613167690, 0.935988742279838970, 0.936006342606538030, 0.936023940593221360, +0.936041536239844760, 0.936059129546364390, 0.936076720512736050, 0.936094309138916000, 0.936111895424860510, 0.936129479370524930, 0.936147060975865750, 0.936164640240838790, +0.936182217165400290, 0.936199791749506290, 0.936217363993112730, 0.936234933896175740, 0.936252501458651800, 0.936270066680496280, 0.936287629561665670, 0.936305190102115880, +0.936322748301803070, 0.936340304160683480, 0.936357857678713160, 0.936375408855848130, 0.936392957692044890, 0.936410504187259020, 0.936428048341446770, 0.936445590154564410, +0.936463129626568190, 0.936480666757414040, 0.936498201547058320, 0.936515733995457290, 0.936533264102566760, 0.936550791868342890, 0.936568317292742150, 0.936585840375720680, +0.936603361117234520, 0.936620879517239930, 0.936638395575693170, 0.936655909292550830, 0.936673420667768260, 0.936690929701302190, 0.936708436393108860, 0.936725940743144410, +0.936743442751365010, 0.936760942417727120, 0.936778439742186890, 0.936795934724700800, 0.936813427365224550, 0.936830917663714740, 0.936848405620127720, 0.936865891234419550, +0.936883374506546800, 0.936900855436465510, 0.936918334024132380, 0.936935810269503230, 0.936953284172534430, 0.936970755733182450, 0.936988224951403550, 0.937005691827154210, +0.937023156360390570, 0.937040618551069020, 0.937058078399146230, 0.937075535904577930, 0.937092991067320800, 0.937110443887331220, 0.937127894364565560, 0.937145342498980070, +0.937162788290531350, 0.937180231739175860, 0.937197672844869540, 0.937215111607568980, 0.937232548027230660, 0.937249982103810940, 0.937267413837266420, 0.937284843227553230, +0.937302270274627980, 0.937319694978447360, 0.937337117338967070, 0.937354537356144160, 0.937371955029934870, 0.937389370360295570, 0.937406783347182970, 0.937424193990553430, +0.937441602290363330, 0.937459008246569580, 0.937476411859128000, 0.937493813127995290, 0.937511212053128150, 0.937528608634482950, 0.937546002872016280, 0.937563394765684510, +0.937580784315444670, 0.937598171521252470, 0.937615556383064930, 0.937632938900838430, 0.937650319074529560, 0.937667696904095020, 0.937685072389491060, 0.937702445530674610, +0.937719816327602150, 0.937737184780230050, 0.937754550888514780, 0.937771914652413270, 0.937789276071882010, 0.937806635146877450, 0.937823991877356320, 0.937841346263275310, +0.937858698304591120, 0.937876048001259900, 0.937893395353238570, 0.937910740360483830, 0.937928083022952160, 0.937945423340600270, 0.937962761313384850, 0.937980096941262830, +0.937997430224190350, 0.938014761162124230, 0.938032089755021170, 0.938049416002837870, 0.938066739905531130, 0.938084061463057450, 0.938101380675373630, 0.938118697542436710, +0.938136012064202720, 0.938153324240628690, 0.938170634071671340, 0.938187941557287350, 0.938205246697433660, 0.938222549492066740, 0.938239849941143730, 0.938257148044620900, +0.938274443802455060, 0.938291737214603240, 0.938309028281022030, 0.938326317001668240, 0.938343603376498690, 0.938360887405470080, 0.938378169088539550, 0.938395448425663360, +0.938412725416798540, 0.938430000061901910, 0.938447272360930170, 0.938464542313840360, 0.938481809920589160, 0.938499075181133510, 0.938516338095430340, 0.938533598663436110, +0.938550856885107860, 0.938568112760402530, 0.938585366289276800, 0.938602617471687720, 0.938619866307592090, 0.938637112796947170, 0.938654356939709110, 0.938671598735835170, +0.938688838185282150, 0.938706075288007090, 0.938723310043966810, 0.938740542453118330, 0.938757772515418480, 0.938775000230824500, 0.938792225599292650, 0.938809448620780310, +0.938826669295244280, 0.938843887622641700, 0.938861103602929290, 0.938878317236064190, 0.938895528522003200, 0.938912737460703810, 0.938929944052122160, 0.938947148296215730, +0.938964350192941330, 0.938981549742256230, 0.938998746944117110, 0.939015941798481140, 0.939033134305305660, 0.939050324464547060, 0.939067512276162590, 0.939084697740109390, +0.939101880856344380, 0.939119061624824720, 0.939136240045507440, 0.939153416118349570, 0.939170589843308370, 0.939187761220340420, 0.939204930249403100, 0.939222096930453440, +0.939239261263448480, 0.939256423248345460, 0.939273582885101320, 0.939290740173673640, 0.939307895114018690, 0.939325047706094040, 0.939342197949856740, 0.939359345845263930, +0.939376491392272860, 0.939393634590840470, 0.939410775440924000, 0.939427913942480930, 0.939445050095467750, 0.939462183899841930, 0.939479315355560730, 0.939496444462581180, +0.939513571220860540, 0.939530695630355960, 0.939547817691024580, 0.939564937402824100, 0.939582054765710880, 0.939599169779642530, 0.939616282444576290, 0.939633392760469310, +0.939650500727278850, 0.939667606344962160, 0.939684709613476720, 0.939701810532779240, 0.939718909102827180, 0.939736005323577930, 0.939753099194988620, 0.939770190717016510, +0.939787279889618970, 0.939804366712753250, 0.939821451186376940, 0.939838533310446640, 0.939855613084920050, 0.939872690509754420, 0.939889765584907110, 0.939906838310335280, +0.939923908685996400, 0.939940976711848060, 0.939958042387846970, 0.939975105713950820, 0.939992166690116870, 0.940009225316302490, 0.940026281592465040, 0.940043335518561900, +0.940060387094550420, 0.940077436320388320, 0.940094483196032280, 0.940111527721440020, 0.940128569896569010, 0.940145609721376510, 0.940162647195819990, 0.940179682319856940, +0.940196715093444600, 0.940213745516540690, 0.940230773589102230, 0.940247799311086820, 0.940264822682451930, 0.940281843703154930, 0.940298862373153410, 0.940315878692404630, +0.940332892660866500, 0.940349904278495850, 0.940366913545250480, 0.940383920461087760, 0.940400925025965280, 0.940417927239840410, 0.940434927102670850, 0.940451924614413850, +0.940468919775027450, 0.940485912584468340, 0.940502903042694460, 0.940519891149663390, 0.940536876905332610, 0.940553860309659600, 0.940570841362601940, 0.940587820064117120, +0.940604796414163060, 0.940621770412696790, 0.940638742059676130, 0.940655711355058430, 0.940672678298801630, 0.940689642890863100, 0.940706605131200410, 0.940723565019771500, +0.940740522556533400, 0.940757477741444030, 0.940774430574460860, 0.940791381055541720, 0.940808329184644080, 0.940825274961725630, 0.940842218386744090, 0.940859159459657150, +0.940876098180422060, 0.940893034548996750, 0.940909968565338820, 0.940926900229406060, 0.940943829541155960, 0.940960756500546340, 0.940977681107535100, 0.940994603362079300, +0.941011523264137060, 0.941028440813665990, 0.941045356010623890, 0.941062268854968350, 0.941079179346657080, 0.941096087485647880, 0.941112993271898790, 0.941129896705366950, +0.941146797786010400, 0.941163696513786730, 0.941180592888653860, 0.941197486910569590, 0.941214378579491530, 0.941231267895377590, 0.941248154858185690, 0.941265039467873100, +0.941281921724397950, 0.941298801627718060, 0.941315679177791130, 0.941332554374574970, 0.941349427218027390, 0.941366297708106650, 0.941383165844769780, 0.941400031627975030, +0.941416895057680110, 0.941433756133843060, 0.941450614856421560, 0.941467471225373550, 0.941484325240656950, 0.941501176902229680, 0.941518026210049320, 0.941534873164073800, +0.941551717764261160, 0.941568560010569100, 0.941585399902955760, 0.941602237441378940, 0.941619072625796470, 0.941635905456166600, 0.941652735932446690, 0.941669564054594900, +0.941686389822569250, 0.941703213236327660, 0.941720034295827960, 0.941736853001028160, 0.941753669351886650, 0.941770483348360550, 0.941787294990408250, 0.941804104277987770, +0.941820911211057040, 0.941837715789573980, 0.941854518013496620, 0.941871317882783000, 0.941888115397391370, 0.941904910557279210, 0.941921703362404770, 0.941938493812725990, +0.941955281908200990, 0.941972067648787830, 0.941988851034444520, 0.942005632065129330, 0.942022410740799730, 0.942039187061414210, 0.942055961026930570, 0.942072732637307180, +0.942089501892501850, 0.942106268792472830, 0.942123033337178170, 0.942139795526576120, 0.942156555360624370, 0.942173312839281190, 0.942190067962504820, 0.942206820730253190, +0.942223571142484450, 0.942240319199156850, 0.942257064900228540, 0.942273808245657760, 0.942290549235402120, 0.942307287869420200, 0.942324024147670030, 0.942340758070109860, +0.942357489636697740, 0.942374218847391810, 0.942390945702150760, 0.942407670200931970, 0.942424392343694130, 0.942441112130395160, 0.942457829560993440, 0.942474544635447220, +0.942491257353714640, 0.942507967715753850, 0.942524675721523430, 0.942541381370981090, 0.942558084664085190, 0.942574785600794220, 0.942591484181066200, 0.942608180404859500, +0.942624874272132370, 0.942641565782842970, 0.942658254936949990, 0.942674941734411130, 0.942691626175184870, 0.942708308259229580, 0.942724987986503500, 0.942741665356964910, +0.942758340370572160, 0.942775013027283950, 0.942791683327057760, 0.942808351269852520, 0.942825016855626250, 0.942841680084337550, 0.942858340955944670, 0.942874999470405870, +0.942891655627679630, 0.942908309427724410, 0.942924960870498260, 0.942941609955959660, 0.942958256684067080, 0.942974901054778770, 0.942991543068053330, 0.943008182723848900, +0.943024820022124400, 0.943041454962837530, 0.943058087545947000, 0.943074717771411280, 0.943091345639188730, 0.943107971149237830, 0.943124594301517070, 0.943141215095984810, +0.943157833532599740, 0.943174449611319800, 0.943191063332103790, 0.943207674694910070, 0.943224283699697130, 0.943240890346423560, 0.943257494635047710, 0.943274096565528190, +0.943290696137823680, 0.943307293351892120, 0.943323888207692420, 0.943340480705182840, 0.943357070844322190, 0.943373658625068830, 0.943390244047381370, 0.943406827111218480, +0.943423407816538330, 0.943439986163299600, 0.943456562151460900, 0.943473135780980800, 0.943489707051817890, 0.943506275963930660, 0.943522842517277800, 0.943539406711818130, +0.943555968547509670, 0.943572528024311240, 0.943589085142181540, 0.943605639901079040, 0.943622192300962450, 0.943638742341790460, 0.943655290023521550, 0.943671835346114760, +0.943688378309528010, 0.943704918913720440, 0.943721457158650520, 0.943737993044276860, 0.943754526570558360, 0.943771057737453400, 0.943787586544921230, 0.943804112992919770, +0.943820637081407950, 0.943837158810344580, 0.943853678179688350, 0.943870195189397850, 0.943886709839431900, 0.943903222129749200, 0.943919732060308770, 0.943936239631068650, +0.943952744841987880, 0.943969247693025370, 0.943985748184139720, 0.944002246315289620, 0.944018742086433990, 0.944035235497531770, 0.944051726548541080, 0.944068215239421190, +0.944084701570130690, 0.944101185540628500, 0.944117667150873310, 0.944134146400824050, 0.944150623290439310, 0.944167097819678340, 0.944183569988499280, 0.944200039796861290, +0.944216507244723280, 0.944232972332043950, 0.944249435058782230, 0.944265895424896920, 0.944282353430346830, 0.944298809075091230, 0.944315262359088250, 0.944331713282297150, +0.944348161844676740, 0.944364608046185940, 0.944381051886783560, 0.944397493366428640, 0.944413932485080210, 0.944430369242696740, 0.944446803639237280, 0.944463235674660840, +0.944479665348926250, 0.944496092661992640, 0.944512517613818600, 0.944528940204363400, 0.944545360433586170, 0.944561778301445170, 0.944578193807899760, 0.944594606952908870, +0.944611017736431410, 0.944627426158426430, 0.944643832218852840, 0.944660235917670120, 0.944676637254836420, 0.944693036230311090, 0.944709432844053180, 0.944725827096021710, +0.944742218986175720, 0.944758608514474130, 0.944774995680875970, 0.944791380485340730, 0.944807762927826640, 0.944824143008293200, 0.944840520726699440, 0.944856896083004270, +0.944873269077166960, 0.944889639709146410, 0.944906007978901790, 0.944922373886392440, 0.944938737431576860, 0.944955098614414510, 0.944971457434864330, 0.944987813892885550, +0.945004167988437230, 0.945020519721478380, 0.945036869091968600, 0.945053216099866370, 0.945069560745131150, 0.945085903027722000, 0.945102242947598040, 0.945118580504718530, +0.945134915699042510, 0.945151248530529230, 0.945167578999138170, 0.945183907104827800, 0.945200232847557720, 0.945216556227287060, 0.945232877243974980, 0.945249195897580720, +0.945265512188063430, 0.945281826115382360, 0.945298137679497000, 0.945314446880366140, 0.945330753717949060, 0.945347058192205100, 0.945363360303093540, 0.945379660050573500, +0.945395957434604360, 0.945412252455145600, 0.945428545112155900, 0.945444835405594870, 0.945461123335421760, 0.945477408901595820, 0.945493692104076410, 0.945509972942822690, +0.945526251417794120, 0.945542527528950180, 0.945558801276249580, 0.945575072659652020, 0.945591341679116850, 0.945607608334603220, 0.945623872626070620, 0.945640134553478280, +0.945656394116785930, 0.945672651315952350, 0.945688906150937040, 0.945705158621699570, 0.945721408728199210, 0.945737656470395200, 0.945753901848247150, 0.945770144861714400, +0.945786385510756440, 0.945802623795332310, 0.945818859715401580, 0.945835093270923740, 0.945851324461858160, 0.945867553288164300, 0.945883779749801530, 0.945900003846729230, +0.945916225578907310, 0.945932444946294470, 0.945948661948850630, 0.945964876586535050, 0.945981088859307320, 0.945997298767126790, 0.946013506309953070, 0.946029711487745840, +0.946045914300464030, 0.946062114748067560, 0.946078312830515690, 0.946094508547768110, 0.946110701899784190, 0.946126892886523520, 0.946143081507945680, 0.946159267764010380, +0.946175451654676540, 0.946191633179904180, 0.946207812339652790, 0.946223989133881730, 0.946240163562550810, 0.946256335625619390, 0.946272505323047190, 0.946288672654793990, +0.946304837620818850, 0.946321000221081570, 0.946337160455541840, 0.946353318324159140, 0.946369473826893290, 0.946385626963703650, 0.946401777734550140, 0.946417926139392020, +0.946434072178189090, 0.946450215850900940, 0.946466357157487280, 0.946482496097907690, 0.946498632672121860, 0.946514766880089510, 0.946530898721770540, 0.946547028197124000, +0.946563155306109790, 0.946579280048687850, 0.946595402424817660, 0.946611522434458900, 0.946627640077571390, 0.946643755354115050, 0.946659868264049020, 0.946675978807333340, +0.946692086983927710, 0.946708192793791930, 0.946724296236885590, 0.946740397313168500, 0.946756496022600480, 0.946772592365141440, 0.946788686340750640, 0.946804777949388110, +0.946820867191013770, 0.946836954065587100, 0.946853038573068130, 0.946869120713416560, 0.946885200486592190, 0.946901277892555070, 0.946917352931264440, 0.946933425602680570, +0.946949495906763030, 0.946965563843471750, 0.946981629412766530, 0.946997692614607310, 0.947013753448954110, 0.947029811915766300, 0.947045868015003900, 0.947061921746626840, +0.947077973110594940, 0.947094022106868110, 0.947110068735406260, 0.947126112996169220, 0.947142154889117240, 0.947158194414209560, 0.947174231571406340, 0.947190266360667610, +0.947206298781953170, 0.947222328835223060, 0.947238356520437090, 0.947254381837555170, 0.947270404786537570, 0.947286425367343750, 0.947302443579933870, 0.947318459424267840, +0.947334472900305700, 0.947350484008007370, 0.947366492747332760, 0.947382499118242240, 0.947398503120695290, 0.947414504754651940, 0.947430504020072450, 0.947446500916916620, +0.947462495445144490, 0.947478487604716200, 0.947494477395591670, 0.947510464817731270, 0.947526449871094360, 0.947542432555641410, 0.947558412871332360, 0.947574390818127220, +0.947590366395986150, 0.947606339604869060, 0.947622310444736550, 0.947638278915547860, 0.947654245017263590, 0.947670208749843650, 0.947686170113248180, 0.947702129107437340, +0.947718085732371150, 0.947734039988009650, 0.947749991874313410, 0.947765941391241930, 0.947781888538755560, 0.947797833316814550, 0.947813775725378840, 0.947829715764408780, +0.947845653433864400, 0.947861588733705850, 0.947877521663893720, 0.947893452224387370, 0.947909380415147500, 0.947925306236134140, 0.947941229687307430, 0.947957150768627740, +0.947973069480055110, 0.947988985821550220, 0.948004899793072450, 0.948020811394582500, 0.948036720626040500, 0.948052627487406710, 0.948068531978641270, 0.948084434099704660, +0.948100333850556810, 0.948116231231158510, 0.948132126241469250, 0.948148018881449840, 0.948163909151060190, 0.948179797050260900, 0.948195682579012100, 0.948211565737274050, +0.948227446525007120, 0.948243324942171780, 0.948259200988727960, 0.948275074664636120, 0.948290945969856520, 0.948306814904349650, 0.948322681468075630, 0.948338545660994960, +0.948354407483068210, 0.948370266934255190, 0.948386124014516500, 0.948401978723812490, 0.948417831062103530, 0.948433681029350000, 0.948449528625512240, 0.948465373850550630, +0.948481216704425980, 0.948497057187097870, 0.948512895298527230, 0.948528731038674300, 0.948544564407499570, 0.948560395404963400, 0.948576224031026260, 0.948592050285648750, +0.948607874168791000, 0.948623695680413490, 0.948639514820476700, 0.948655331588941110, 0.948671145985767290, 0.948686958010915520, 0.948702767664346360, 0.948718574946020630, +0.948734379855898150, 0.948750182393939710, 0.948765982560105800, 0.948781780354357010, 0.948797575776653690, 0.948813368826956440, 0.948829159505225840, 0.948844947811422480, +0.948860733745506610, 0.948876517307438830, 0.948892298497179820, 0.948908077314689960, 0.948923853759929940, 0.948939627832860340, 0.948955399533441990, 0.948971168861634800, +0.948986935817399680, 0.949002700400697230, 0.949018462611488030, 0.949034222449732680, 0.949049979915391750, 0.949065735008425840, 0.949081487728795970, 0.949097238076462070, +0.949112986051385050, 0.949128731653525510, 0.949144474882844260, 0.949160215739301760, 0.949175954222858720, 0.949191690333476060, 0.949207424071113910, 0.949223155435733210, +0.949238884427294650, 0.949254611045758810, 0.949270335291086510, 0.949286057163238330, 0.949301776662174970, 0.949317493787857570, 0.949333208540246050, 0.949348920919301560, +0.949364630924984800, 0.949380338557256340, 0.949396043816077120, 0.949411746701407820, 0.949427447213209040, 0.949443145351442030, 0.949458841116066820, 0.949474534507044550, +0.949490225524335930, 0.949505914167901750, 0.949521600437702840, 0.949537284333699770, 0.949552965855853910, 0.949568645004125300, 0.949584321778475070, 0.949599996178864150, +0.949615668205253120, 0.949631337857602900, 0.949647005135874410, 0.949662670040028360, 0.949678332570025980, 0.949693992725827440, 0.949709650507393870, 0.949725305914686290, +0.949740958947665300, 0.949756609606292050, 0.949772257890527220, 0.949787903800331730, 0.949803547335666850, 0.949819188496492720, 0.949834827282770690, 0.949850463694461470, +0.949866097731526190, 0.949881729393925680, 0.949897358681620840, 0.949912985594572820, 0.949928610132742100, 0.949944232296089820, 0.949959852084577010, 0.949975469498164580, +0.949991084536813470, 0.950006697200484580, 0.950022307489139070, 0.950037915402737960, 0.950053520941241850, 0.950069124104611860, 0.950084724892809150, 0.950100323305794530, +0.950115919343529240, 0.950131513005973980, 0.950147104293090350, 0.950162693204838700, 0.950178279741180190, 0.950193863902076050, 0.950209445687487220, 0.950225025097374830, +0.950240602131699920, 0.950256176790423400, 0.950271749073506760, 0.950287318980910460, 0.950302886512595870, 0.950318451668524020, 0.950334014448656170, 0.950349574852953130, +0.950365132881376250, 0.950380688533886460, 0.950396241810445350, 0.950411792711013280, 0.950427341235551730, 0.950442887384021830, 0.950458431156384730, 0.950473972552601460, +0.950489511572633390, 0.950505048216441770, 0.950520582483987190, 0.950536114375231220, 0.950551643890135020, 0.950567171028659620, 0.950582695790766260, 0.950598218176416320, +0.950613738185570710, 0.950629255818191020, 0.950644771074237950, 0.950660283953672970, 0.950675794456457220, 0.950691302582552080, 0.950706808331918560, 0.950722311704518150, +0.950737812700311880, 0.950753311319261440, 0.950768807561327310, 0.950784301426471300, 0.950799792914654440, 0.950815282025838090, 0.950830768759983620, 0.950846253117052180, +0.950861735097005440, 0.950877214699804020, 0.950892691925409590, 0.950908166773783430, 0.950923639244886760, 0.950939109338681090, 0.950954577055127650, 0.950970042394187810, +0.950985505355823050, 0.951000965939994280, 0.951016424146663100, 0.951031879975790860, 0.951047333427338940, 0.951062784501268690, 0.951078233197541370, 0.951093679516118900, +0.951109123456961860, 0.951124565020032060, 0.951140004205290770, 0.951155441012699550, 0.951170875442219680, 0.951186307493812610, 0.951201737167439830, 0.951217164463062930, +0.951232589380642920, 0.951248011920141410, 0.951263432081519870, 0.951278849864739650, 0.951294265269762460, 0.951309678296549550, 0.951325088945062400, 0.951340497215262810, +0.951355903107111710, 0.951371306620570900, 0.951386707755601750, 0.951402106512165950, 0.951417502890224750, 0.951432896889739870, 0.951448288510672980, 0.951463677752985130, +0.951479064616638110, 0.951494449101593310, 0.951509831207812520, 0.951525210935257100, 0.951540588283888660, 0.951555963253668760, 0.951571335844559220, 0.951586706056521070, +0.951602073889516120, 0.951617439343505960, 0.951632802418452270, 0.951648163114316550, 0.951663521431060480, 0.951678877368645540, 0.951694230927033650, 0.951709582106185950, +0.951724930906064360, 0.951740277326630360, 0.951755621367845750, 0.951770963029672010, 0.951786302312070840, 0.951801639215004270, 0.951816973738433210, 0.951832305882319820, +0.951847635646625670, 0.951862963031312460, 0.951878288036341670, 0.951893610661675330, 0.951908930907274910, 0.951924248773102440, 0.951939564259119080, 0.951954877365286830, +0.951970188091567300, 0.951985496437922410, 0.952000802404313730, 0.952016105990702970, 0.952031407197052370, 0.952046706023322860, 0.952062002469476590, 0.952077296535475350, +0.952092588221280960, 0.952107877526855000, 0.952123164452159280, 0.952138448997155720, 0.952153731161806350, 0.952169010946072310, 0.952184288349915860, 0.952199563373298590, +0.952214836016182400, 0.952230106278529220, 0.952245374160300640, 0.952260639661458690, 0.952275902781965390, 0.952291163521782110, 0.952306421880870890, 0.952321677859193640, +0.952336931456712170, 0.952352182673388390, 0.952367431509184130, 0.952382677964061620, 0.952397922037982130, 0.952413163730907790, 0.952428403042800520, 0.952443639973622250, +0.952458874523335000, 0.952474106691900470, 0.952489336479280690, 0.952504563885437800, 0.952519788910333290, 0.952535011553929280, 0.952550231816187700, 0.952565449697070580, +0.952580665196539830, 0.952595878314557390, 0.952611089051085380, 0.952626297406085840, 0.952641503379520250, 0.952656706971350850, 0.952671908181539790, 0.952687107010048990, +0.952702303456840370, 0.952717497521875960, 0.952732689205118110, 0.952747878506528200, 0.952763065426068700, 0.952778249963701530, 0.952793432119388610, 0.952808611893092180, +0.952823789284774290, 0.952838964294396850, 0.952854136921922330, 0.952869307167312110, 0.952884475030528750, 0.952899640511534090, 0.952914803610290350, 0.952929964326759690, +0.952945122660904030, 0.952960278612685840, 0.952975432182066710, 0.952990583369008990, 0.953005732173474730, 0.953020878595426280, 0.953036022634825560, 0.953051164291634830, +0.953066303565816120, 0.953081440457331900, 0.953096574966143860, 0.953111707092214490, 0.953126836835505700, 0.953141964195979850, 0.953157089173599090, 0.953172211768325670, +0.953187331980121730, 0.953202449808949640, 0.953217565254771190, 0.953232678317548880, 0.953247788997244830, 0.953262897293821300, 0.953278003207240540, 0.953293106737464700, +0.953308207884456470, 0.953323306648177440, 0.953338403028590080, 0.953353497025656750, 0.953368588639339710, 0.953383677869601100, 0.953398764716403390, 0.953413849179708730, +0.953428931259479700, 0.953444010955678100, 0.953459088268266530, 0.953474163197207130, 0.953489235742462360, 0.953504305903994600, 0.953519373681765980, 0.953534439075739200, +0.953549502085875970, 0.953564562712139070, 0.953579620954490780, 0.953594676812893450, 0.953609730287309440, 0.953624781377701010, 0.953639830084030750, 0.953654876406261120, +0.953669920344354050, 0.953684961898272120, 0.953700001067977810, 0.953715037853433590, 0.953730072254601600, 0.953745104271444540, 0.953760133903924780, 0.953775161152004890, +0.953790186015646800, 0.953805208494813320, 0.953820228589466690, 0.953835246299569620, 0.953850261625084350, 0.953865274565973480, 0.953880285122199690, 0.953895293293724910, +0.953910299080511840, 0.953925302482523050, 0.953940303499721030, 0.953955302132068250, 0.953970298379527290, 0.953985292242060410, 0.954000283719630750, 0.954015272812200000, +0.954030259519731080, 0.954045243842186470, 0.954060225779528870, 0.954075205331720630, 0.954090182498724460, 0.954105157280502710, 0.954120129677018420, 0.954135099688233510, +0.954150067314110780, 0.954165032554613050, 0.954179995409702550, 0.954194955879342220, 0.954209913963494420, 0.954224869662122170, 0.954239822975187390, 0.954254773902653120, +0.954269722444481830, 0.954284668600636320, 0.954299612371079080, 0.954314553755772900, 0.954329492754680260, 0.954344429367764090, 0.954359363594986740, 0.954374295436310920, +0.954389224891699310, 0.954404151961114610, 0.954419076644519640, 0.954433998941876970, 0.954448918853149530, 0.954463836378299460, 0.954478751517289890, 0.954493664270083420, +0.954508574636642850, 0.954523482616930760, 0.954538388210909970, 0.954553291418543280, 0.954568192239793500, 0.954583090674623100, 0.954597986722994900, 0.954612880384871800, +0.954627771660216400, 0.954642660548991610, 0.954657547051160240, 0.954672431166684880, 0.954687312895528770, 0.954702192237654180, 0.954717069193024010, 0.954731943761601200, +0.954746815943348540, 0.954761685738228840, 0.954776553146205020, 0.954791418167239890, 0.954806280801296150, 0.954821141048336600, 0.954835998908324160, 0.954850854381221750, +0.954865707466992290, 0.954880558165598470, 0.954895406477003220, 0.954910252401169780, 0.954925095938060520, 0.954939937087638360, 0.954954775849866540, 0.954969612224707660, +0.954984446212124750, 0.954999277812080720, 0.955014107024538590, 0.955028933849461300, 0.955043758286811540, 0.955058580336552330, 0.955073399998646710, 0.955088217273057590, +0.955103032159747900, 0.955117844658680660, 0.955132654769819010, 0.955147462493125540, 0.955162267828563280, 0.955177070776095480, 0.955191871335684950, 0.955206669507294830, +0.955221465290887920, 0.955236258686427360, 0.955251049693876530, 0.955265838313197670, 0.955280624544354360, 0.955295408387309310, 0.955310189842025870, 0.955324968908466960, +0.955339745586595510, 0.955354519876375100, 0.955369291777768080, 0.955384061290737830, 0.955398828415247370, 0.955413593151259950, 0.955428355498738390, 0.955443115457646040, +0.955457873027945940, 0.955472628209601330, 0.955487381002575020, 0.955502131406830160, 0.955516879422329990, 0.955531625049037550, 0.955546368286916190, 0.955561109135928840, +0.955575847596038640, 0.955590583667209170, 0.955605317349403020, 0.955620048642583430, 0.955634777546713890, 0.955649504061757300, 0.955664228187676930, 0.955678949924436030, +0.955693669271998060, 0.955708386230325610, 0.955723100799382270, 0.955737812979131070, 0.955752522769535370, 0.955767230170558420, 0.955781935182163370, 0.955796637804313450, +0.955811338036972160, 0.955826035880102290, 0.955840731333667430, 0.955855424397630600, 0.955870115071955300, 0.955884803356604750, 0.955899489251542110, 0.955914172756730740, +0.955928853872134220, 0.955943532597715360, 0.955958208933437640, 0.955972882879264300, 0.955987554435158930, 0.956002223601084560, 0.956016890377004660, 0.956031554762882710, +0.956046216758681730, 0.956060876364365210, 0.956075533579896390, 0.956090188405238850, 0.956104840840355740, 0.956119490885210640, 0.956134138539766700, 0.956148783803987710, +0.956163426677836600, 0.956178067161276850, 0.956192705254271910, 0.956207340956785170, 0.956221974268780190, 0.956236605190220130, 0.956251233721068910, 0.956265859861289420, +0.956280483610845170, 0.956295104969699720, 0.956309723937816550, 0.956324340515159020, 0.956338954701690720, 0.956353566497375020, 0.956368175902175600, 0.956382782916055500, +0.956397387538978410, 0.956411989770907910, 0.956426589611807380, 0.956441187061640500, 0.956455782120370520, 0.956470374787961150, 0.956484965064376080, 0.956499552949578340, +0.956514138443531730, 0.956528721546199830, 0.956543302257546020, 0.956557880577533990, 0.956572456506127320, 0.956587030043289710, 0.956601601188984190, 0.956616169943174780, +0.956630736305824960, 0.956645300276898200, 0.956659861856358320, 0.956674421044168670, 0.956688977840293050, 0.956703532244695180, 0.956718084257338290, 0.956732633878186080, +0.956747181107202360, 0.956761725944350720, 0.956776268389594730, 0.956790808442897990, 0.956805346104224300, 0.956819881373537570, 0.956834414250800850, 0.956848944735978040, +0.956863472829032840, 0.956877998529929050, 0.956892521838630160, 0.956907042755100080, 0.956921561279302610, 0.956936077411200900, 0.956950591150759090, 0.956965102497940760, +0.956979611452709710, 0.956994118015029650, 0.957008622184864270, 0.957023123962177260, 0.957037623346932760, 0.957052120339094040, 0.957066614938624880, 0.957081107145489220, +0.957095596959650850, 0.957110084381073370, 0.957124569409720790, 0.957139052045557050, 0.957153532288545380, 0.957168010138649830, 0.957182485595834300, 0.957196958660062600, +0.957211429331298440, 0.957225897609505720, 0.957240363494648250, 0.957254826986690180, 0.957269288085594750, 0.957283746791326110, 0.957298203103848060, 0.957312657023124510, +0.957327108549119400, 0.957341557681796520, 0.957356004421119680, 0.957370448767053020, 0.957384890719560120, 0.957399330278604910, 0.957413767444151410, 0.957428202216163540, +0.957442634594604990, 0.957457064579440020, 0.957471492170632650, 0.957485917368146140, 0.957500340171944960, 0.957514760581992920, 0.957529178598253930, 0.957543594220692020, +0.957558007449271220, 0.957572418283955340, 0.957586826724708630, 0.957601232771494560, 0.957615636424277490, 0.957630037683021350, 0.957644436547690050, 0.957658833018247610, +0.957673227094658190, 0.957687618776885690, 0.957702008064894360, 0.957716394958647800, 0.957730779458110250, 0.957745161563245630, 0.957759541274018300, 0.957773918590391960, +0.957788293512330860, 0.957802666039799360, 0.957817036172760930, 0.957831403911179820, 0.957845769255020190, 0.957860132204246260, 0.957874492758821970, 0.957888850918711340, +0.957903206683878630, 0.957917560054288190, 0.957931911029903600, 0.957946259610689240, 0.957960605796609240, 0.957974949587627740, 0.957989290983708770, 0.958003629984816700, +0.958017966590915650, 0.958032300801969550, 0.958046632617942650, 0.958060962038799200, 0.958075289064503340, 0.958089613695019330, 0.958103935930311180, 0.958118255770343150, +0.958132573215079830, 0.958146888264484800, 0.958161200918522530, 0.958175511177157270, 0.958189819040353270, 0.958204124508074680, 0.958218427580285860, 0.958232728256950830, +0.958247026538034290, 0.958261322423500040, 0.958275615913312340, 0.958289907007435660, 0.958304195705834250, 0.958318482008472250, 0.958332765915314130, 0.958347047426324260, +0.958361326541466660, 0.958375603260705590, 0.958389877584005620, 0.958404149511330910, 0.958418419042645800, 0.958432686177914770, 0.958446950917101860, 0.958461213260171970, +0.958475473207088700, 0.958489730757816740, 0.958503985912320560, 0.958518238670564290, 0.958532489032512540, 0.958546736998129420, 0.958560982567379870, 0.958575225740227470, +0.958589466516637120, 0.958603704896572980, 0.958617940879999740, 0.958632174466881540, 0.958646405657182950, 0.958660634450868350, 0.958674860847902320, 0.958689084848249000, +0.958703306451872960, 0.958717525658738580, 0.958731742468810430, 0.958745956882052890, 0.958760168898430520, 0.958774378517907700, 0.958788585740449120, 0.958802790566018910, +0.958816992994581780, 0.958831193026102090, 0.958845390660544420, 0.958859585897873230, 0.958873778738053130, 0.958887969181048790, 0.958902157226824370, 0.958916342875344440, +0.958930526126573700, 0.958944706980476620, 0.958958885437017900, 0.958973061496161790, 0.958987235157873210, 0.959001406422116620, 0.959015575288856390, 0.959029741758057110, +0.959043905829683570, 0.959058067503700260, 0.959072226780071760, 0.959086383658762640, 0.959100538139737610, 0.959114690222961470, 0.959128839908398370, 0.959142987196013210, +0.959157132085770580, 0.959171274577635070, 0.959185414671571370, 0.959199552367544170, 0.959213687665518290, 0.959227820565457970, 0.959241951067328120, 0.959256079171093350, +0.959270204876718440, 0.959284328184167980, 0.959298449093406670, 0.959312567604399310, 0.959326683717110720, 0.959340797431505240, 0.959354908747547700, 0.959369017665202880, +0.959383124184435610, 0.959397228305210460, 0.959411330027492240, 0.959425429351245970, 0.959439526276435810, 0.959453620803026870, 0.959467712930983870, 0.959481802660271610, +0.959495889990854890, 0.959509974922698410, 0.959524057455766970, 0.959538137590025710, 0.959552215325438770, 0.959566290661971300, 0.959580363599588090, 0.959594434138254070, +0.959608502277933930, 0.959622568018592470, 0.959636631360194610, 0.959650692302705390, 0.959664750846089270, 0.959678806990311270, 0.959692860735336220, 0.959706912081129020, +0.959720961027654470, 0.959735007574877620, 0.959749051722763480, 0.959763093471276530, 0.959777132820381680, 0.959791169770044080, 0.959805204320228640, 0.959819236470900060, +0.959833266222023470, 0.959847293573563690, 0.959861318525485950, 0.959875341077754630, 0.959889361230334970, 0.959903378983191890, 0.959917394336290420, 0.959931407289595360, +0.959945417843071860, 0.959959425996684820, 0.959973431750399400, 0.959987435104180160, 0.960001436057992490, 0.960015434611801060, 0.960029430765571120, 0.960043424519267500, +0.960057415872855420, 0.960071404826300050, 0.960085391379565940, 0.960099375532618260, 0.960113357285422240, 0.960127336637942700, 0.960141313590144870, 0.960155288141993800, +0.960169260293454510, 0.960183230044492350, 0.960197197395071810, 0.960211162345158240, 0.960225124894716900, 0.960239085043712580, 0.960253042792110660, 0.960266998139876040, +0.960280951086974310, 0.960294901633369840, 0.960308849779028200, 0.960322795523914310, 0.960336738867993530, 0.960350679811230900, 0.960364618353591550, 0.960378554495040730, +0.960392488235543680, 0.960406419575065120, 0.960420348513570610, 0.960434275051025190, 0.960448199187394100, 0.960462120922642490, 0.960476040256735610, 0.960489957189638590, +0.960503871721316900, 0.960517783851735360, 0.960531693580859320, 0.960545600908654040, 0.960559505835084760, 0.960573408360116730, 0.960587308483715210, 0.960601206205845660, +0.960615101526472780, 0.960628994445562270, 0.960642884963079150, 0.960656773078988890, 0.960670658793256640, 0.960684542105847750, 0.960698423016727590, 0.960712301525861510, +0.960726177633214550, 0.960740051338752070, 0.960753922642439420, 0.960767791544241970, 0.960781658044125080, 0.960795522142054100, 0.960809383837994300, 0.960823243131911250, +0.960837100023769760, 0.960850954513535640, 0.960864806601174130, 0.960878656286650590, 0.960892503569930390, 0.960906348450978890, 0.960920190929761890, 0.960934031006244080, +0.960947868680391170, 0.960961703952168620, 0.960975536821541800, 0.960989367288476170, 0.961003195352937100, 0.961017021014890060, 0.961030844274300630, 0.961044665131133960, +0.961058483585355620, 0.961072299636930970, 0.961086113285825610, 0.961099924532004990, 0.961113733375434600, 0.961127539816080120, 0.961141343853906480, 0.961155145488879480, +0.961168944720964700, 0.961182741550127510, 0.961196535976333480, 0.961210327999547980, 0.961224117619736810, 0.961237904836865550, 0.961251689650899350, 0.961265472061803790, +0.961279252069544680, 0.961293029674087360, 0.961306804875397440, 0.961320577673440590, 0.961334348068182300, 0.961348116059588360, 0.961361881647623820, 0.961375644832254680, +0.961389405613446320, 0.961403163991164540, 0.961416919965374820, 0.961430673536042830, 0.961444424703134290, 0.961458173466614550, 0.961471919826449420, 0.961485663782604360, +0.961499405335045190, 0.961513144483737480, 0.961526881228647050, 0.961540615569739240, 0.961554347506980210, 0.961568077040335090, 0.961581804169769790, 0.961595528895249910, +0.961609251216741230, 0.961622971134209470, 0.961636688647620310, 0.961650403756939330, 0.961664116462132570, 0.961677826763165380, 0.961691534660003570, 0.961705240152612940, +0.961718943240959190, 0.961732643925008120, 0.961746342204725320, 0.961760038080077040, 0.961773731551028410, 0.961787422617545350, 0.961801111279593890, 0.961814797537139500, +0.961828481390148200, 0.961842162838585700, 0.961855841882417790, 0.961869518521610510, 0.961883192756129210, 0.961896864585939810, 0.961910534011008340, 0.961924201031300610, +0.961937865646782300, 0.961951527857419330, 0.961965187663177850, 0.961978845064022980, 0.961992500059921210, 0.962006152650838110, 0.962019802836739600, 0.962033450617591600, +0.962047095993359910, 0.962060738964010560, 0.962074379529509580, 0.962088017689822440, 0.962101653444915160, 0.962115286794753890, 0.962128917739304310, 0.962142546278532460, +0.962156172412404250, 0.962169796140885600, 0.962183417463942650, 0.962197036381540970, 0.962210652893646710, 0.962224267000225900, 0.962237878701244220, 0.962251487996668040, +0.962265094886463060, 0.962278699370595510, 0.962292301449031110, 0.962305901121735860, 0.962319498388675920, 0.962333093249817200, 0.962346685705125720, 0.962360275754567510, +0.962373863398108710, 0.962387448635715460, 0.962401031467353230, 0.962414611892988600, 0.962428189912587270, 0.962441765526115600, 0.962455338733539500, 0.962468909534825000, +0.962482477929938460, 0.962496043918845580, 0.962509607501512490, 0.962523168677905440, 0.962536727447990460, 0.962550283811733580, 0.962563837769101040, 0.962577389320058980, +0.962590938464573660, 0.962604485202610660, 0.962618029534136550, 0.962631571459117370, 0.962645110977519150, 0.962658648089308230, 0.962672182794450770, 0.962685715092912670, +0.962699244984660640, 0.962712772469660250, 0.962726297547877970, 0.962739820219279840, 0.962753340483832210, 0.962766858341501330, 0.962780373792253120, 0.962793886836054380, +0.962807397472870590, 0.962820905702668320, 0.962834411525413820, 0.962847914941073250, 0.962861415949612940, 0.962874914550999050, 0.962888410745197820, 0.962901904532175950, +0.962915395911899010, 0.962928884884333480, 0.962942371449445830, 0.962955855607202320, 0.962969337357569070, 0.962982816700512450, 0.962996293635998920, 0.963009768163994750, +0.963023240284466060, 0.963036709997379110, 0.963050177302700480, 0.963063642200396420, 0.963077104690433280, 0.963090564772777320, 0.963104022447395240, 0.963117477714252820, +0.963130930573316670, 0.963144381024553240, 0.963157829067928910, 0.963171274703409910, 0.963184717930962830, 0.963198158750553810, 0.963211597162149770, 0.963225033165716390, +0.963238466761220490, 0.963251897948628420, 0.963265326727906660, 0.963278753099021560, 0.963292177061939480, 0.963305598616627230, 0.963319017763050840, 0.963332434501176890, +0.963345848830971740, 0.963359260752402080, 0.963372670265434160, 0.963386077370034680, 0.963399482066169990, 0.963412884353806790, 0.963426284232911100, 0.963439681703449740, +0.963453076765389270, 0.963466469418695960, 0.963479859663336600, 0.963493247499277450, 0.963506632926485310, 0.963520015944926760, 0.963533396554567930, 0.963546774755375650, +0.963560150547316470, 0.963573523930356890, 0.963586894904463480, 0.963600263469602810, 0.963613629625741710, 0.963626993372846300, 0.963640354710883380, 0.963653713639819660, +0.963667070159621610, 0.963680424270255910, 0.963693775971689150, 0.963707125263887910, 0.963720472146819110, 0.963733816620448990, 0.963747158684744250, 0.963760498339671590, +0.963773835585197690, 0.963787170421289250, 0.963800502847912850, 0.963813832865035190, 0.963827160472623180, 0.963840485670642950, 0.963853808459061660, 0.963867128837845750, +0.963880446806962050, 0.963893762366377250, 0.963907075516058030, 0.963920386255971320, 0.963933694586083470, 0.963947000506361400, 0.963960304016771800, 0.963973605117281360, +0.963986903807857010, 0.964000200088465430, 0.964013493959073210, 0.964026785419647590, 0.964040074470154720, 0.964053361110561720, 0.964066645340835300, 0.964079927160942260, +0.964093206570849400, 0.964106483570523530, 0.964119758159931670, 0.964133030339040300, 0.964146300107816210, 0.964159567466226440, 0.964172832414237680, 0.964186094951816840, +0.964199355078930840, 0.964212612795546380, 0.964225868101630690, 0.964239120997150030, 0.964252371482071660, 0.964265619556362360, 0.964278865219988960, 0.964292108472918350, +0.964305349315117470, 0.964318587746553320, 0.964331823767192840, 0.964345057377002600, 0.964358288575949740, 0.964371517364001170, 0.964384743741123710, 0.964397967707284480, +0.964411189262450290, 0.964424408406588380, 0.964437625139665240, 0.964450839461648000, 0.964464051372503680, 0.964477260872199200, 0.964490467960701700, 0.964503672637977870, +0.964516874903994960, 0.964530074758719990, 0.964543272202119660, 0.964556467234161220, 0.964569659854811470, 0.964582850064037660, 0.964596037861806700, 0.964609223248085730, +0.964622406222841570, 0.964635586786041670, 0.964648764937652610, 0.964661940677641660, 0.964675114005975830, 0.964688284922622150, 0.964701453427547870, 0.964714619520719910, +0.964727783202105620, 0.964740944471671580, 0.964754103329385270, 0.964767259775213600, 0.964780413809123940, 0.964793565431083080, 0.964806714641058380, 0.964819861439016990, +0.964833005824926040, 0.964846147798752440, 0.964859287360463340, 0.964872424510026190, 0.964885559247407820, 0.964898691572575680, 0.964911821485496700, 0.964924948986138450, +0.964938074074467630, 0.964951196750451600, 0.964964317014057600, 0.964977434865252780, 0.964990550304004380, 0.965003663330279650, 0.965016773944045610, 0.965029882145270080, +0.965042987933919520, 0.965056091309961390, 0.965069192273363190, 0.965082290824091920, 0.965095386962114940, 0.965108480687399520, 0.965121571999912890, 0.965134660899622520, +0.965147747386495230, 0.965160831460498690, 0.965173913121599950, 0.965186992369766570, 0.965200069204965590, 0.965213143627164480, 0.965226215636330710, 0.965239285232431300, +0.965252352415433500, 0.965265417185304900, 0.965278479542012850, 0.965291539485524490, 0.965304597015807290, 0.965317652132828610, 0.965330704836556030, 0.965343755126956470, +0.965356803003997510, 0.965369848467646510, 0.965382891517870930, 0.965395932154638150, 0.965408970377915510, 0.965422006187670380, 0.965435039583870560, 0.965448070566482850, +0.965461099135475060, 0.965474125290814440, 0.965487149032468460, 0.965500170360404700, 0.965513189274590510, 0.965526205774993600, 0.965539219861580870, 0.965552231534320130, +0.965565240793178740, 0.965578247638124280, 0.965591252069124220, 0.965604254086146140, 0.965617253689157300, 0.965630250878125600, 0.965643245653017960, 0.965656238013802290, +0.965669227960445960, 0.965682215492916660, 0.965695200611181750, 0.965708183315208910, 0.965721163604965740, 0.965734141480419470, 0.965747116941537920, 0.965760089988288440, +0.965773060620638830, 0.965786028838556580, 0.965798994642009250, 0.965811958030964420, 0.965824919005389910, 0.965837877565252860, 0.965850833710521160, 0.965863787441162300, +0.965876738757144080, 0.965889687658433970, 0.965902634144999660, 0.965915578216808730, 0.965928519873828990, 0.965941459116027910, 0.965954395943373070, 0.965967330355832270, +0.965980262353373090, 0.965993191935963340, 0.966006119103570590, 0.966019043856162770, 0.966031966193707130, 0.966044886116171450, 0.966057803623523670, 0.966070718715731360, +0.966083631392762320, 0.966096541654584140, 0.966109449501164620, 0.966122354932471670, 0.966135257948472550, 0.966148158549135380, 0.966161056734427870, 0.966173952504317590, +0.966186845858772460, 0.966199736797760280, 0.966212625321248960, 0.966225511429205760, 0.966238395121598930, 0.966251276398396030, 0.966264155259564880, 0.966277031705073400, +0.966289905734889380, 0.966302777348980620, 0.966315646547315050, 0.966328513329860140, 0.966341377696584010, 0.966354239647454480, 0.966367099182439240, 0.966379956301506300, +0.966392811004623490, 0.966405663291758590, 0.966418513162879740, 0.966431360617954540, 0.966444205656950770, 0.966457048279836580, 0.966469888486579780, 0.966482726277148150, +0.966495561651509850, 0.966508394609632780, 0.966521225151484530, 0.966534053277033230, 0.966546878986246690, 0.966559702279093050, 0.966572523155540210, 0.966585341615555980, +0.966598157659108390, 0.966610971286165690, 0.966623782496695230, 0.966636591290665370, 0.966649397668044030, 0.966662201628799230, 0.966675003172898890, 0.966687802300311150, +0.966700599011003800, 0.966713393304945210, 0.966726185182102850, 0.966738974642445070, 0.966751761685939790, 0.966764546312555260, 0.966777328522259280, 0.966790108315019990, +0.966802885690805640, 0.966815660649583800, 0.966828433191322830, 0.966841203315990880, 0.966853971023555860, 0.966866736313985900, 0.966879499187249030, 0.966892259643313490, +0.966905017682147540, 0.966917773303718860, 0.966930526507995710, 0.966943277294946220, 0.966956025664538530, 0.966968771616740770, 0.966981515151521090, 0.966994256268847830, +0.967006994968688800, 0.967019731251012150, 0.967032465115786220, 0.967045196562979160, 0.967057925592559100, 0.967070652204494290, 0.967083376398752750, 0.967096098175303060, +0.967108817534112820, 0.967121534475150590, 0.967134248998384520, 0.967146961103782840, 0.967159670791313710, 0.967172378060945470, 0.967185082912646270, 0.967197785346384560, +0.967210485362128170, 0.967223182959845550, 0.967235878139504960, 0.967248570901074740, 0.967261261244523050, 0.967273949169818240, 0.967286634676928770, 0.967299317765822450, +0.967311998436467870, 0.967324676688833260, 0.967337352522887000, 0.967350025938597420, 0.967362696935932690, 0.967375365514861250, 0.967388031675351590, 0.967400695417371610, +0.967413356740889910, 0.967426015645874830, 0.967438672132294730, 0.967451326200117980, 0.967463977849312820, 0.967476627079847830, 0.967489273891691370, 0.967501918284811580, +0.967514560259176930, 0.967527199814755990, 0.967539836951516910, 0.967552471669428370, 0.967565103968458630, 0.967577733848576260, 0.967590361309749400, 0.967602986351946640, +0.967615608975136430, 0.967628229179287150, 0.967640846964367360, 0.967653462330345440, 0.967666075277189730, 0.967678685804869270, 0.967691293913351740, 0.967703899602605940, +0.967716502872600470, 0.967729103723303790, 0.967741702154684250, 0.967754298166710550, 0.967766891759351270, 0.967779482932574540, 0.967792071686349060, 0.967804658020643420, +0.967817241935426180, 0.967829823430665810, 0.967842402506330910, 0.967854979162389940, 0.967867553398811810, 0.967880125215564550, 0.967892694612616960, 0.967905261589937730, +0.967917826147495220, 0.967930388285258240, 0.967942948003195250, 0.967955505301274830, 0.967968060179465910, 0.967980612637736600, 0.967993162676055840, 0.968005710294392090, +0.968018255492714140, 0.968030798270990480, 0.968043338629189900, 0.968055876567281090, 0.968068412085232530, 0.968080945183012800, 0.968093475860590800, 0.968106004117935020, +0.968118529955014240, 0.968131053371797170, 0.968143574368252490, 0.968156092944349010, 0.968168609100055200, 0.968181122835339750, 0.968193634150171570, 0.968206143044519240, +0.968218649518351680, 0.968231153571637360, 0.968243655204345190, 0.968256154416444190, 0.968268651207902510, 0.968281145578689160, 0.968293637528772950, 0.968306127058122690, +0.968318614166707170, 0.968331098854495090, 0.968343581121455350, 0.968356060967556550, 0.968368538392767600, 0.968381013397057290, 0.968393485980394430, 0.968405956142747940, +0.968418423884086500, 0.968430889204378920, 0.968443352103594450, 0.968455812581701330, 0.968468270638668690, 0.968480726274465460, 0.968493179489060330, 0.968505630282422200, +0.968518078654520000, 0.968530524605322960, 0.968542968134799230, 0.968555409242918160, 0.968567847929648560, 0.968580284194959340, 0.968592718038819410, 0.968605149461197690, +0.968617578462063090, 0.968630005041384750, 0.968642429199131240, 0.968654850935271590, 0.968667270249774840, 0.968679687142609880, 0.968692101613745750, 0.968704513663151360, +0.968716923290795620, 0.968729330496647890, 0.968741735280676530, 0.968754137642850900, 0.968766537583139910, 0.968778935101512580, 0.968791330197937840, 0.968803722872384920, +0.968816113124822740, 0.968828500955220220, 0.968840886363546370, 0.968853269349770230, 0.968865649913861040, 0.968878028055787710, 0.968890403775519270, 0.968902777073024860, +0.968915147948273600, 0.968927516401234420, 0.968939882431876340, 0.968952246040168610, 0.968964607226080240, 0.968976965989580390, 0.968989322330638060, 0.969001676249222510, +0.969014027745302870, 0.969026376818848070, 0.969038723469827220, 0.969051067698209700, 0.969063409503964410, 0.969075748887060610, 0.969088085847467420, 0.969100420385154200, +0.969112752500089770, 0.969125082192243470, 0.969137409461584440, 0.969149734308081930, 0.969162056731705080, 0.969174376732423020, 0.969186694310205100, 0.969199009465020580, +0.969211322196838370, 0.969223632505627820, 0.969235940391358190, 0.969248245853998820, 0.969260548893518650, 0.969272849509887240, 0.969285147703073950, 0.969297443473047470, +0.969309736819777390, 0.969322027743233060, 0.969334316243383620, 0.969346602320198310, 0.969358885973646610, 0.969371167203697650, 0.969383446010321000, 0.969395722393485480, +0.969407996353160660, 0.969420267889315900, 0.969432537001920450, 0.969444803690943660, 0.969457067956354780, 0.969469329798123390, 0.969481589216218740, 0.969493846210609970, +0.969506100781266640, 0.969518352928157910, 0.969530602651253460, 0.969542849950522420, 0.969555094825934270, 0.969567337277458590, 0.969579577305064280, 0.969591814908721150, +0.969604050088398450, 0.969616282844065650, 0.969628513175692100, 0.969640741083247270, 0.969652966566700520, 0.969665189626021660, 0.969677410261179600, 0.969689628472144020, +0.969701844258884280, 0.969714057621370080, 0.969726268559570670, 0.969738477073455510, 0.969750683162994510, 0.969762886828156480, 0.969775088068911330, 0.969787286885228420, +0.969799483277077210, 0.969811677244427410, 0.969823868787248360, 0.969836057905509640, 0.969848244599180950, 0.969860428868231540, 0.969872610712630980, 0.969884790132348850, +0.969896967127354850, 0.969909141697618440, 0.969921313843109090, 0.969933483563796490, 0.969945650859650340, 0.969957815730639990, 0.969969978176735030, 0.969982138197905130, +0.969994295794119780, 0.970006450965348770, 0.970018603711561680, 0.970030754032728320, 0.970042901928817700, 0.970055047399799970, 0.970067190445644600, 0.970079331066321160, +0.970091469261799570, 0.970103605032049180, 0.970115738377039790, 0.970127869296741220, 0.970139997791122920, 0.970152123860154480, 0.970164247503805810, 0.970176368722046490, +0.970188487514846210, 0.970200603882174770, 0.970212717824001760, 0.970224829340297190, 0.970236938431030430, 0.970249045096171270, 0.970261149335689410, 0.970273251149554760, +0.970285350537737010, 0.970297447500205750, 0.970309542036931210, 0.970321634147882640, 0.970333723833029850, 0.970345811092342860, 0.970357895925791250, 0.970369978333344930, +0.970382058314973710, 0.970394135870647380, 0.970406211000335750, 0.970418283704008510, 0.970430353981635570, 0.970442421833186740, 0.970454487258631810, 0.970466550257940710, +0.970478610831083220, 0.970490668978029380, 0.970502724698748650, 0.970514777993211180, 0.970526828861386750, 0.970538877303245170, 0.970550923318756480, 0.970562966907890460, +0.970575008070617030, 0.970587046806906220, 0.970599083116727710, 0.970611117000051430, 0.970623148456847270, 0.970635177487085390, 0.970647204090735460, 0.970659228267767630, +0.970671250018151580, 0.970683269341857780, 0.970695286238855480, 0.970707300709114930, 0.970719312752606260, 0.970731322369299270, 0.970743329559163870, 0.970755334322170200, +0.970767336658288520, 0.970779336567488160, 0.970791334049739500, 0.970803329105012550, 0.970815321733277230, 0.970827311934503560, 0.970839299708661670, 0.970851285055721490, +0.970863267975653370, 0.970875248468426880, 0.970887226534012160, 0.970899202172379460, 0.970911175383498690, 0.970923146167340100, 0.970935114523873600, 0.970947080453069210, +0.970959043954897410, 0.970971005029327760, 0.970982963676330630, 0.970994919895876160, 0.971006873687934260, 0.971018825052475280, 0.971030773989469130, 0.971042720498886400, +0.971054664580696560, 0.971066606234870070, 0.971078545461377060, 0.971090482260187680, 0.971102416631272170, 0.971114348574600550, 0.971126278090143070, 0.971138205177870080, +0.971150129837751400, 0.971162052069757360, 0.971173971873858230, 0.971185889250024140, 0.971197804198225320, 0.971209716718432040, 0.971221626810614640, 0.971233534474743030, +0.971245439710787470, 0.971257342518718430, 0.971269242898506020, 0.971281140850120410, 0.971293036373532040, 0.971304929468711050, 0.971316820135627920, 0.971328708374252560, +0.971340594184555430, 0.971352477566506780, 0.971364358520076960, 0.971376237045236230, 0.971388113141954950, 0.971399986810203340, 0.971411858049952000, 0.971423726861170730, +0.971435593243830220, 0.971447457197900710, 0.971459318723352560, 0.971471177820156130, 0.971483034488281770, 0.971494888727700070, 0.971506740538380820, 0.971518589920294830, +0.971530436873412230, 0.971542281397703710, 0.971554123493139300, 0.971565963159689680, 0.971577800397325220, 0.971589635206016380, 0.971601467585733290, 0.971613297536446430, +0.971625125058126480, 0.971636950150743580, 0.971648772814268420, 0.971660593048671250, 0.971672410853922640, 0.971684226229993180, 0.971696039176852990, 0.971707849694472660, +0.971719657782822770, 0.971731463441873670, 0.971743266671595940, 0.971755067471959940, 0.971766865842936590, 0.971778661784495900, 0.971790455296608460, 0.971802246379244950, +0.971814035032375840, 0.971825821255971610, 0.971837605050002720, 0.971849386414439960, 0.971861165349253930, 0.971872941854414750, 0.971884715929893230, 0.971896487575659940, +0.971908256791685350, 0.971920023577940160, 0.971931787934394940, 0.971943549861020380, 0.971955309357786850, 0.971967066424665020, 0.971978821061625480, 0.971990573268638910, +0.972002323045675910, 0.972014070392707040, 0.972025815309703110, 0.972037557796634810, 0.972049297853472380, 0.972061035480186630, 0.972072770676748470, 0.972084503443128240, +0.972096233779296770, 0.972107961685224730, 0.972119687160882820, 0.972131410206241940, 0.972143130821272240, 0.972154849005944730, 0.972166564760230110, 0.972178278084099070, +0.972189988977522400, 0.972201697440470690, 0.972213403472914960, 0.972225107074825570, 0.972236808246173310, 0.972248506986929110, 0.972260203297063530, 0.972271897176547610, +0.972283588625351800, 0.972295277643447140, 0.972306964230804430, 0.972318648387394120, 0.972330330113187150, 0.972342009408154410, 0.972353686272266590, 0.972365360705494510, +0.972377032707809170, 0.972388702279181170, 0.972400369419581630, 0.972412034128980920, 0.972423696407350160, 0.972435356254660150, 0.972447013670881820, 0.972458668655985850, +0.972470321209943260, 0.972481971332725070, 0.972493619024301760, 0.972505264284644460, 0.972516907113723960, 0.972528547511511080, 0.972540185477976940, 0.972551821013092340, +0.972563454116828210, 0.972575084789155550, 0.972586713030045070, 0.972598338839467670, 0.972609962217394600, 0.972621583163796540, 0.972633201678644530, 0.972644817761909470, +0.972656431413562620, 0.972668042633574540, 0.972679651421916260, 0.972691257778558920, 0.972702861703473310, 0.972714463196630690, 0.972726062258001840, 0.972737658887557810, +0.972749253085269940, 0.972760844851108700, 0.972772434185045330, 0.972784021087050870, 0.972795605557096320, 0.972807187595152830, 0.972818767201191310, 0.972830344375182900, +0.972841919117098830, 0.972853491426909800, 0.972865061304586940, 0.972876628750101500, 0.972888193763424500, 0.972899756344526970, 0.972911316493380140, 0.972922874209955160, +0.972934429494222710, 0.972945982346154260, 0.972957532765720940, 0.972969080752893680, 0.972980626307643700, 0.972992169429942270, 0.973003710119760280, 0.973015248377069320, +0.973026784201839970, 0.973038317594043690, 0.973049848553651620, 0.973061377080635000, 0.973072903174964860, 0.973084426836612450, 0.973095948065549000, 0.973107466861745870, +0.973118983225173870, 0.973130497155804460, 0.973142008653608670, 0.973153517718557960, 0.973165024350623460, 0.973176528549776430, 0.973188030315988220, 0.973199529649229730, +0.973211026549472450, 0.973222521016687600, 0.973234013050846450, 0.973245502651920340, 0.973256989819880400, 0.973268474554697890, 0.973279956856344500, 0.973291436724791010, +0.973302914160008910, 0.973314389161969550, 0.973325861730644280, 0.973337331866004240, 0.973348799568020890, 0.973360264836665820, 0.973371727671909830, 0.973383188073724480, +0.973394646042081260, 0.973406101576951290, 0.973417554678306150, 0.973429005346117200, 0.973440453580355580, 0.973451899380993190, 0.973463342748000730, 0.973474783681349990, +0.973486222181012220, 0.973497658246958890, 0.973509091879161460, 0.973520523077591290, 0.973531951842219860, 0.973543378173018730, 0.973554802069958920, 0.973566223533012030, +0.973577642562149740, 0.973589059157343280, 0.973600473318564140, 0.973611885045783780, 0.973623294338973990, 0.973634701198105800, 0.973646105623150790, 0.973657507614080540, +0.973668907170866520, 0.973680304293480180, 0.973691698981893120, 0.973703091236076790, 0.973714481056003000, 0.973725868441642770, 0.973737253392967790, 0.973748635909949760, +0.973760015992560120, 0.973771393640770480, 0.973782768854552390, 0.973794141633877450, 0.973805511978717010, 0.973816879889042860, 0.973828245364826480, 0.973839608406039450, +0.973850969012653440, 0.973862327184639940, 0.973873682921970630, 0.973885036224617420, 0.973896387092551330, 0.973907735525744280, 0.973919081524167840, 0.973930425087793820, +0.973941766216593670, 0.973953104910539100, 0.973964441169601790, 0.973975774993753540, 0.973987106382965710, 0.973998435337210090, 0.974009761856458380, 0.974021085940682260, +0.974032407589853430, 0.974043726803943580, 0.974055043582924610, 0.974066357926767770, 0.974077669835445080, 0.974088979308928240, 0.974100286347189040, 0.974111590950198950, +0.974122893117929990, 0.974134192850353740, 0.974145490147442230, 0.974156785009166910, 0.974168077435499490, 0.974179367426411870, 0.974190654981875850, 0.974201940101863230, +0.974213222786345810, 0.974224503035295290, 0.974235780848683670, 0.974247056226482440, 0.974258329168663510, 0.974269599675198770, 0.974280867746060040, 0.974292133381219230, +0.974303396580648020, 0.974314657344318550, 0.974325915672202170, 0.974337171564271020, 0.974348425020496900, 0.974359676040851830, 0.974370924625307500, 0.974382170773835930, +0.974393414486408820, 0.974404655762998400, 0.974415894603576250, 0.974427131008114290, 0.974438364976584430, 0.974449596508958790, 0.974460825605209080, 0.974472052265307310, +0.974483276489225610, 0.974494498276935570, 0.974505717628409210, 0.974516934543618650, 0.974528149022535710, 0.974539361065132390, 0.974550570671380620, 0.974561777841252530, +0.974572982574720030, 0.974584184871755020, 0.974595384732329540, 0.974606582156415490, 0.974617777143985120, 0.974628969695010230, 0.974640159809462950, 0.974651347487315300, +0.974662532728539420, 0.974673715533107000, 0.974684895900990280, 0.974696073832161390, 0.974707249326592250, 0.974718422384255100, 0.974729593005121740, 0.974740761189164750, +0.974751926936355590, 0.974763090246666520, 0.974774251120069880, 0.974785409556537470, 0.974796565556041660, 0.974807719118554350, 0.974818870244047790, 0.974830018932494210, +0.974841165183865430, 0.974852308998133800, 0.974863450375271330, 0.974874589315250170, 0.974885725818042560, 0.974896859883620740, 0.974907991511956730, 0.974919120703022890, +0.974930247456791020, 0.974941371773233590, 0.974952493652322730, 0.974963613094030680, 0.974974730098329470, 0.974985844665191560, 0.974996956794589200, 0.975008066486494180, +0.975019173740879100, 0.975030278557716070, 0.975041380936977230, 0.975052480878635050, 0.975063578382661670, 0.975074673449029320, 0.975085766077710470, 0.975096856268677040, +0.975107944021901480, 0.975119029337355950, 0.975130112215013000, 0.975141192654844670, 0.975152270656823420, 0.975163346220921600, 0.975174419347111240, 0.975185490035364920, +0.975196558285654770, 0.975207624097953360, 0.975218687472232730, 0.975229748408465550, 0.975240806906623850, 0.975251862966680430, 0.975262916588607090, 0.975273967772376520, +0.975285016517960960, 0.975296062825332880, 0.975307106694464630, 0.975318148125328690, 0.975329187117897290, 0.975340223672143130, 0.975351257788038330, 0.975362289465555250, +0.975373318704666480, 0.975384345505344470, 0.975395369867561590, 0.975406391791290180, 0.975417411276503050, 0.975428428323172230, 0.975439442931270380, 0.975450455100769780, +0.975461464831643200, 0.975472472123862900, 0.975483476977401340, 0.975494479392231220, 0.975505479368324990, 0.975516476905654910, 0.975527472004193650, 0.975538464663913700, +0.975549454884787500, 0.975560442666787760, 0.975571428009886940, 0.975582410914057510, 0.975593391379272260, 0.975604369405503320, 0.975615344992723400, 0.975626318140905170, +0.975637288850021210, 0.975648257120043990, 0.975659222950946090, 0.975670186342700310, 0.975681147295278990, 0.975692105808654620, 0.975703061882800090, 0.975714015517687990, +0.975724966713290790, 0.975735915469581050, 0.975746861786531690, 0.975757805664115300, 0.975768747102304210, 0.975779686101071240, 0.975790622660389070, 0.975801556780230280, +0.975812488460567670, 0.975823417701373820, 0.975834344502621630, 0.975845268864283360, 0.975856190786331900, 0.975867110268740070, 0.975878027311480320, 0.975888941914525580, +0.975899854077848520, 0.975910763801421830, 0.975921671085218320, 0.975932575929210570, 0.975943478333371250, 0.975954378297673290, 0.975965275822089470, 0.975976170906592390, +0.975987063551154830, 0.975997953755749600, 0.976008841520349830, 0.976019726844927660, 0.976030609729456210, 0.976041490173908180, 0.976052368178256470, 0.976063243742473770, +0.976074116866533000, 0.976084987550407180, 0.976095855794068660, 0.976106721597490570, 0.976117584960645600, 0.976128445883506670, 0.976139304366046570, 0.976150160408238320, +0.976161014010054620, 0.976171865171468590, 0.976182713892452700, 0.976193560172980090, 0.976204404013023440, 0.976215245412555890, 0.976226084371550230, 0.976236920889979260, +0.976247754967816020, 0.976258586605033620, 0.976269415801604650, 0.976280242557502010, 0.976291066872698840, 0.976301888747167950, 0.976312708180882340, 0.976323525173814930, +0.976334339725938970, 0.976345151837226920, 0.976355961507652030, 0.976366768737187200, 0.976377573525805560, 0.976388375873479820, 0.976399175780183200, 0.976409973245888740, +0.976420768270569450, 0.976431560854198020, 0.976442350996747700, 0.976453138698191610, 0.976463923958502570, 0.976474706777653690, 0.976485487155618110, 0.976496265092368980, +0.976507040587879070, 0.976517813642121420, 0.976528584255069390, 0.976539352426695760, 0.976550118156973790, 0.976560881445876610, 0.976571642293377120, 0.976582400699448790, +0.976593156664064210, 0.976603910187196830, 0.976614661268819570, 0.976625409908905670, 0.976636156107428270, 0.976646899864360480, 0.976657641179675460, 0.976668380053346550, +0.976679116485346440, 0.976689850475648600, 0.976700582024226050, 0.976711311131052140, 0.976722037796099900, 0.976732762019342560, 0.976743483800753490, 0.976754203140305590, +0.976764920037972110, 0.976775634493726400, 0.976786346507541480, 0.976797056079390820, 0.976807763209247450, 0.976818467897084710, 0.976829170142875960, 0.976839869946594110, +0.976850567308212630, 0.976861262227704750, 0.976871954705043620, 0.976882644740202700, 0.976893332333155010, 0.976904017483874340, 0.976914700192333400, 0.976925380458505630, +0.976936058282364520, 0.976946733663883180, 0.976957406603035090, 0.976968077099793390, 0.976978745154131520, 0.976989410766023080, 0.977000073935440750, 0.977010734662358330, +0.977021392946749060, 0.977032048788586400, 0.977042702187843500, 0.977053353144493930, 0.977064001658510930, 0.977074647729868070, 0.977085291358538500, 0.977095932544495670, +0.977106571287712940, 0.977117207588163780, 0.977127841445821650, 0.977138472860660020, 0.977149101832652240, 0.977159728361771560, 0.977170352447991550, 0.977180974091285790, +0.977191593291627410, 0.977202210048990110, 0.977212824363347330, 0.977223436234672450, 0.977234045662939250, 0.977244652648120660, 0.977255257190190460, 0.977265859289122130, +0.977276458944889130, 0.977287056157464920, 0.977297650926823190, 0.977308243252937300, 0.977318833135780940, 0.977329420575327350, 0.977340005571550210, 0.977350588124422990, +0.977361168233919390, 0.977371745900012860, 0.977382321122676980, 0.977392893901885440, 0.977403464237611490, 0.977414032129828800, 0.977424597578511190, 0.977435160583632000, +0.977445721145164930, 0.977456279263083540, 0.977466834937361420, 0.977477388167972470, 0.977487938954889830, 0.977498487298087300, 0.977509033197538570, 0.977519576653217310, +0.977530117665097120, 0.977540656233151560, 0.977551192357354550, 0.977561726037679430, 0.977572257274100020, 0.977582786066589880, 0.977593312415122820, 0.977603836319672510, +0.977614357780212550, 0.977624876796716720, 0.977635393369158830, 0.977645907497512350, 0.977656419181751060, 0.977666928421848770, 0.977677435217779170, 0.977687939569515940, +0.977698441477032780, 0.977708940940303580, 0.977719437959302270, 0.977729932534002200, 0.977740424664377160, 0.977750914350401180, 0.977761401592047830, 0.977771886389291020, +0.977782368742104560, 0.977792848650462230, 0.977803326114337730, 0.977813801133704860, 0.977824273708537420, 0.977834743838809420, 0.977845211524494440, 0.977855676765566510, +0.977866139561999410, 0.977876599913767080, 0.977887057820843060, 0.977897513283201400, 0.977907966300816000, 0.977918416873660660, 0.977928865001709280, 0.977939310684935780, +0.977949753923313960, 0.977960194716817940, 0.977970633065421200, 0.977981068969097980, 0.977991502427822070, 0.978001933441567380, 0.978012362010307830, 0.978022788134017330, +0.978033211812670110, 0.978043633046239760, 0.978054051834700180, 0.978064468178025610, 0.978074882076189760, 0.978085293529166730, 0.978095702536930460, 0.978106109099454950, +0.978116513216714440, 0.978126914888682310, 0.978137314115333000, 0.978147710896640320, 0.978158105232578400, 0.978168497123121260, 0.978178886568242810, 0.978189273567917410, +0.978199658122118620, 0.978210040230820590, 0.978220419893997550, 0.978230797111623530, 0.978241171883672320, 0.978251544210118400, 0.978261914090935440, 0.978272281526098020, +0.978282646515579610, 0.978293009059354570, 0.978303369157397130, 0.978313726809681090, 0.978324082016180930, 0.978334434776870430, 0.978344785091723850, 0.978355132960715520, +0.978365478383819260, 0.978375821361009200, 0.978386161892259580, 0.978396499977544630, 0.978406835616838390, 0.978417168810115090, 0.978427499557348980, 0.978437827858513960, +0.978448153713584400, 0.978458477122534420, 0.978468798085338260, 0.978479116601970180, 0.978489432672404290, 0.978499746296614740, 0.978510057474576090, 0.978520366206262040, +0.978530672491647050, 0.978540976330705470, 0.978551277723411440, 0.978561576669739200, 0.978571873169662990, 0.978582167223157050, 0.978592458830195970, 0.978602747990753530, +0.978613034704804210, 0.978623318972322350, 0.978633600793282210, 0.978643880167658020, 0.978654157095424030, 0.978664431576555030, 0.978674703611024600, 0.978684973198807540, +0.978695240339877980, 0.978705505034210280, 0.978715767281778890, 0.978726027082558070, 0.978736284436522160, 0.978746539343645750, 0.978756791803902740, 0.978767041817267810, +0.978777289383715220, 0.978787534503219540, 0.978797777175754890, 0.978808017401295860, 0.978818255179817020, 0.978828490511292280, 0.978838723395696330, 0.978848953833003520, +0.978859181823188430, 0.978869407366225300, 0.978879630462088700, 0.978889851110753000, 0.978900069312192870, 0.978910285066382340, 0.978920498373296200, 0.978930709232908700, +0.978940917645194530, 0.978951123610128040, 0.978961327127683690, 0.978971528197836060, 0.978981726820559730, 0.978991922995828930, 0.979002116723618370, 0.979012308003902490, +0.979022496836655880, 0.979032683221853000, 0.979042867159468420, 0.979053048649476840, 0.979063227691852500, 0.979073404286569970, 0.979083578433604050, 0.979093750132929100, +0.979103919384519910, 0.979114086188350830, 0.979124250544396450, 0.979134412452631770, 0.979144571913030840, 0.979154728925568430, 0.979164883490219240, 0.979175035606957840, +0.979185185275758820, 0.979195332496596850, 0.979205477269446620, 0.979215619594282830, 0.979225759471079700, 0.979235896899812270, 0.979246031880455110, 0.979256164412982910, +0.979266294497370240, 0.979276422133591900, 0.979286547321622570, 0.979296670061436720, 0.979306790353009270, 0.979316908196314780, 0.979327023591328060, 0.979337136538023790, +0.979347247036376660, 0.979357355086361350, 0.979367460687952880, 0.979377563841125620, 0.979387664545854350, 0.979397762802113990, 0.979407858609879220, 0.979417951969124840, +0.979428042879825540, 0.979438131341956340, 0.979448217355491590, 0.979458300920406310, 0.979468382036675300, 0.979478460704273360, 0.979488536923175170, 0.979498610693355750, +0.979508682014789690, 0.979518750887452220, 0.979528817311317580, 0.979538881286361020, 0.979548942812557220, 0.979559001889880990, 0.979569058518307330, 0.979579112697810950, +0.979589164428366850, 0.979599213709950070, 0.979609260542534940, 0.979619304926096720, 0.979629346860610320, 0.979639386346050410, 0.979649423382392140, 0.979659457969610290, +0.979669490107680010, 0.979679519796575750, 0.979689547036272760, 0.979699571826745830, 0.979709594167969990, 0.979719614059920140, 0.979729631502571310, 0.979739646495898400, +0.979749659039876540, 0.979759669134480320, 0.979769676779684960, 0.979779681975465500, 0.979789684721796730, 0.979799685018653780, 0.979809682866011560, 0.979819678263845310, +0.979829671212129830, 0.979839661710840030, 0.979849649759951150, 0.979859635359438100, 0.979869618509276010, 0.979879599209439790, 0.979889577459904680, 0.979899553260645710, +0.979909526611637660, 0.979919497512855900, 0.979929465964275330, 0.979939431965871190, 0.979949395517618390, 0.979959356619492070, 0.979969315271467360, 0.979979271473519600, +0.979989225225623480, 0.979999176527754260, 0.980009125379887160, 0.980019071781997210, 0.980029015734059540, 0.980038957236049390, 0.980048896287942010, 0.980058832889712180, +0.980068767041335280, 0.980078698742786520, 0.980088627994040950, 0.980098554795073800, 0.980108479145860300, 0.980118401046375600, 0.980128320496595040, 0.980138237496493540, +0.980148152046046440, 0.980158064145228990, 0.980167973794016320, 0.980177880992383790, 0.980187785740306520, 0.980197688037759750, 0.980207587884718960, 0.980217485281159040, +0.980227380227055470, 0.980237272722383370, 0.980247162767118100, 0.980257050361234890, 0.980266935504709110, 0.980276818197516110, 0.980286698439630900, 0.980296576231028950, +0.980306451571685610, 0.980316324461576130, 0.980326194900675850, 0.980336062888960020, 0.980345928426404110, 0.980355791512983470, 0.980365652148673220, 0.980375510333448830, +0.980385366067285660, 0.980395219350159050, 0.980405070182044480, 0.980414918562917180, 0.980424764492752730, 0.980434607971526260, 0.980444448999213240, 0.980454287575789120, +0.980464123701229260, 0.980473957375509020, 0.980483788598603970, 0.980493617370489460, 0.980503443691141060, 0.980513267560533810, 0.980523088978643490, 0.980532907945445450, +0.980542724460915060, 0.980552538525027880, 0.980562350137759390, 0.980572159299085030, 0.980581966008980400, 0.980591770267420730, 0.980601572074381590, 0.980611371429838560, +0.980621168333767110, 0.980630962786142700, 0.980640754786940900, 0.980650544336137410, 0.980660331433707340, 0.980670116079626510, 0.980679898273870370, 0.980689678016414380, +0.980699455307234350, 0.980709230146305620, 0.980719002533603780, 0.980728772469104610, 0.980738539952783370, 0.980748304984615740, 0.980758067564577400, 0.980767827692643810, +0.980777585368790780, 0.980787340592993660, 0.980797093365228250, 0.980806843685470330, 0.980816591553695050, 0.980826336969878310, 0.980836079933995690, 0.980845820446022980, +0.980855558505935640, 0.980865294113709370, 0.980875027269320080, 0.980884757972743100, 0.980894486223954140, 0.980904212022928990, 0.980913935369643330, 0.980923656264072850, +0.980933374706193240, 0.980943090695980180, 0.980952804233409580, 0.980962515318456680, 0.980972223951097620, 0.980981930131307970, 0.980991633859063520, 0.981001335134339850, +0.981011033957112980, 0.981020730327358700, 0.981030424245052380, 0.981040115710170020, 0.981049804722687320, 0.981059491282580080, 0.981069175389824190, 0.981078857044395350, +0.981088536246269350, 0.981098212995422210, 0.981107887291829410, 0.981117559135466830, 0.981127228526310290, 0.981136895464335800, 0.981146559949519050, 0.981156221981835830, +0.981165881561262050, 0.981175538687773850, 0.981185193361346570, 0.981194845581956240, 0.981204495349578880, 0.981214142664190270, 0.981223787525766330, 0.981233429934282860, +0.981243069889715990, 0.981252707392041290, 0.981262342441234890, 0.981271975037272480, 0.981281605180130300, 0.981291232869784040, 0.981300858106209710, 0.981310480889383220, +0.981320101219280700, 0.981329719095877740, 0.981339334519150450, 0.981348947489074860, 0.981358558005626990, 0.981368166068782630, 0.981377771678517810, 0.981387374834808650, +0.981396975537631170, 0.981406573786961170, 0.981416169582774670, 0.981425762925047680, 0.981435353813756460, 0.981444942248876680, 0.981454528230384590, 0.981464111758256430, +0.981473692832467770, 0.981483271452994850, 0.981492847619813810, 0.981502421332900670, 0.981511992592231320, 0.981521561397782130, 0.981531127749529000, 0.981540691647448280, +0.981550253091515560, 0.981559812081707280, 0.981569368617999370, 0.981578922700368170, 0.981588474328789600, 0.981598023503239880, 0.981607570223695160, 0.981617114490131450, +0.981626656302524990, 0.981636195660851810, 0.981645732565088140, 0.981655267015210220, 0.981664799011194080, 0.981674328553015840, 0.981683855640652080, 0.981693380274078490, +0.981702902453271410, 0.981712422178207090, 0.981721939448861770, 0.981731454265211580, 0.981740966627232760, 0.981750476534901440, 0.981759983988194200, 0.981769488987086710, +0.981778991531555680, 0.981788491621577000, 0.981797989257127130, 0.981807484438182330, 0.981816977164718830, 0.981826467436713090, 0.981835955254140910, 0.981845440616978870, +0.981854923525203320, 0.981864403978790380, 0.981873881977716410, 0.981883357521957770, 0.981892830611490690, 0.981902301246291740, 0.981911769426336840, 0.981921235151602570, +0.981930698422065260, 0.981940159237701060, 0.981949617598486530, 0.981959073504398040, 0.981968526955411810, 0.981977977951504430, 0.981987426492651920, 0.981996872578830840, +0.982006316210017550, 0.982015757386188510, 0.982025196107320090, 0.982034632373388620, 0.982044066184370790, 0.982053497540242630, 0.982062926440980700, 0.982072352886561470, +0.982081776876961410, 0.982091198412156750, 0.982100617492124290, 0.982110034116840170, 0.982119448286281170, 0.982128860000423320, 0.982138269259243410, 0.982147676062717800, +0.982157080410822950, 0.982166482303535430, 0.982175881740831700, 0.982185278722688460, 0.982194673249081830, 0.982204065319988610, 0.982213454935385140, 0.982222842095248020, +0.982232226799553800, 0.982241609048279060, 0.982250988841400270, 0.982260366178894120, 0.982269741060736950, 0.982279113486905440, 0.982288483457376180, 0.982297850972125630, +0.982307216031130470, 0.982316578634367280, 0.982325938781812620, 0.982335296473443310, 0.982344651709235570, 0.982354004489166210, 0.982363354813211910, 0.982372702681349130, +0.982382048093554670, 0.982391391049805000, 0.982400731550077120, 0.982410069594347180, 0.982419405182592080, 0.982428738314788390, 0.982438068990913020, 0.982447397210942320, +0.982456722974853200, 0.982466046282622240, 0.982475367134226450, 0.982484685529641970, 0.982494001468845800, 0.982503314951814530, 0.982512625978525070, 0.982521934548954090, +0.982531240663078180, 0.982540544320874450, 0.982549845522319050, 0.982559144267389110, 0.982568440556061300, 0.982577734388312420, 0.982587025764119160, 0.982596314683458430, +0.982605601146306800, 0.982614885152641390, 0.982624166702438570, 0.982633445795675350, 0.982642722432328530, 0.982651996612374900, 0.982661268335791260, 0.982670537602554410, +0.982679804412641240, 0.982689068766028790, 0.982698330662693520, 0.982707590102612330, 0.982716847085762240, 0.982726101612119930, 0.982735353681662430, 0.982744603294366530, +0.982753850450209350, 0.982763095149167380, 0.982772337391217610, 0.982781577176336960, 0.982790814504502450, 0.982800049375690880, 0.982809281789879140, 0.982818511747044270, +0.982827739247163270, 0.982836964290212720, 0.982846186876169760, 0.982855407005011390, 0.982864624676714540, 0.982873839891255980, 0.982883052648612980, 0.982892262948762200, +0.982901470791681000, 0.982910676177345950, 0.982919879105734200, 0.982929079576822740, 0.982938277590588600, 0.982947473147008810, 0.982956666246060370, 0.982965856887720310, +0.982975045071965540, 0.982984230798773060, 0.982993414068120130, 0.983002594879983540, 0.983011773234340520, 0.983020949131168110, 0.983030122570443200, 0.983039293552143260, +0.983048462076244860, 0.983057628142725350, 0.983066791751561750, 0.983075952902731200, 0.983085111596210700, 0.983094267831977510, 0.983103421610008740, 0.983112572930281310, +0.983121721792772460, 0.983130868197459210, 0.983140012144318900, 0.983149153633328550, 0.983158292664465190, 0.983167429237706280, 0.983176563353028830, 0.983185695010409870, +0.983194824209826620, 0.983203950951256340, 0.983213075234676160, 0.983222197060063310, 0.983231316427395030, 0.983240433336648350, 0.983249547787800830, 0.983258659780829270, +0.983267769315711030, 0.983276876392423340, 0.983285981010943550, 0.983295083171248700, 0.983304182873316220, 0.983313280117123380, 0.983322374902647290, 0.983331467229865200, +0.983340557098754340, 0.983349644509292190, 0.983358729461455970, 0.983367811955222940, 0.983376891990570320, 0.983385969567475590, 0.983395044685915760, 0.983404117345868410, +0.983413187547310770, 0.983422255290220090, 0.983431320574573830, 0.983440383400349230, 0.983449443767523750, 0.983458501676074740, 0.983467557125979330, 0.983476610117214990, +0.983485660649759170, 0.983494708723589240, 0.983503754338682530, 0.983512797495016410, 0.983521838192568440, 0.983530876431315650, 0.983539912211235820, 0.983548945532306100, +0.983557976394504040, 0.983567004797807010, 0.983576030742192580, 0.983585054227637980, 0.983594075254120900, 0.983603093821618480, 0.983612109930108390, 0.983621123579567990, +0.983630134769974740, 0.983639143501306210, 0.983648149773539760, 0.983657153586653180, 0.983666154940623480, 0.983675153835428470, 0.983684150271045500, 0.983693144247452130, +0.983702135764626060, 0.983711124822544520, 0.983720111421185210, 0.983729095560525680, 0.983738077240543410, 0.983747056461215850, 0.983756033222520700, 0.983765007524435410, +0.983773979366937670, 0.983782948750004940, 0.983791915673614790, 0.983800880137745140, 0.983809842142372990, 0.983818801687476370, 0.983827758773032630, 0.983836713399019570, +0.983845665565414640, 0.983854615272195640, 0.983863562519340260, 0.983872507306825740, 0.983881449634629980, 0.983890389502730670, 0.983899326911105270, 0.983908261859731570, +0.983917194348587270, 0.983926124377650040, 0.983935051946897570, 0.983943977056307320, 0.983952899705857090, 0.983961819895524670, 0.983970737625287750, 0.983979652895123900, +0.983988565705010920, 0.983997476054926600, 0.984006383944848630, 0.984015289374754690, 0.984024192344622460, 0.984033092854429750, 0.984041990904154230, 0.984050886493773810, +0.984059779623266180, 0.984068670292609250, 0.984077558501780470, 0.984086444250757750, 0.984095327539519000, 0.984104208368041910, 0.984113086736304380, 0.984121962644283980, +0.984130836091958730, 0.984139707079306540, 0.984148575606304980, 0.984157441672931950, 0.984166305279165380, 0.984175166424982930, 0.984184025110362630, 0.984192881335282270, +0.984201735099719870, 0.984210586403652890, 0.984219435247059570, 0.984228281629917600, 0.984237125552204880, 0.984245967013899440, 0.984254806014979060, 0.984263642555421540, +0.984272476635205230, 0.984281308254307490, 0.984290137412706550, 0.984298964110380200, 0.984307788347306480, 0.984316610123463280, 0.984325429438828500, 0.984334246293380180, +0.984343060687096430, 0.984351872619954940, 0.984360682091933610, 0.984369489103010700, 0.984378293653163980, 0.984387095742371600, 0.984395895370611450, 0.984404692537861670, +0.984413487244100050, 0.984422279489304720, 0.984431069273453700, 0.984439856596525000, 0.984448641458496640, 0.984457423859346650, 0.984466203799053140, 0.984474981277594360, +0.984483756294947890, 0.984492528851091950, 0.984501298946004800, 0.984510066579664330, 0.984518831752048800, 0.984527594463136090, 0.984536354712904460, 0.984545112501332030, +0.984553867828396710, 0.984562620694076740, 0.984571371098350130, 0.984580119041195130, 0.984588864522589870, 0.984597607542512470, 0.984606348100941160, 0.984615086197853870, +0.984623821833228830, 0.984632555007044160, 0.984641285719278230, 0.984650013969909030, 0.984658739758914820, 0.984667463086273730, 0.984676183951964210, 0.984684902355963950, +0.984693618298251530, 0.984702331778805060, 0.984711042797602690, 0.984719751354622750, 0.984728457449843500, 0.984737161083243160, 0.984745862254799760, 0.984754560964491770, +0.984763257212297400, 0.984771950998194810, 0.984780642322162450, 0.984789331184178440, 0.984798017584221030, 0.984806701522268790, 0.984815382998299630, 0.984824062012292000, +0.984832738564224260, 0.984841412654074650, 0.984850084281821530, 0.984858753447443110, 0.984867420150917880, 0.984876084392224290, 0.984884746171340250, 0.984893405488244330, +0.984902062342915000, 0.984910716735330480, 0.984919368665469140, 0.984928018133309440, 0.984936665138829710, 0.984945309682008330, 0.984953951762823520, 0.984962591381253970, +0.984971228537277920, 0.984979863230873720, 0.984988495462019940, 0.984997125230694830, 0.985005752536877170, 0.985014377380544870, 0.985022999761676730, 0.985031619680250990, +0.985040237136246330, 0.985048852129640990, 0.985057464660413550, 0.985066074728542460, 0.985074682334006300, 0.985083287476783200, 0.985091890156852060, 0.985100490374191120, +0.985109088128778840, 0.985117683420594030, 0.985126276249614910, 0.985134866615820280, 0.985143454519188280, 0.985152039959697690, 0.985160622937326980, 0.985169203452054720, +0.985177781503859480, 0.985186357092719730, 0.985194930218614150, 0.985203500881521420, 0.985212069081419670, 0.985220634818287810, 0.985229198092104410, 0.985237758902847930, +0.985246317250497160, 0.985254873135030460, 0.985263426556426850, 0.985271977514664440, 0.985280526009722160, 0.985289072041578560, 0.985297615610212230, 0.985306156715601840, +0.985314695357726090, 0.985323231536563650, 0.985331765252093210, 0.985340296504293220, 0.985348825293142490, 0.985357351618619810, 0.985365875480703650, 0.985374396879372780, +0.985382915814605910, 0.985391432286381820, 0.985399946294679310, 0.985408457839476730, 0.985416966920752980, 0.985425473538486860, 0.985433977692657060, 0.985442479383242250, +0.985450978610221350, 0.985459475373573150, 0.985467969673275990, 0.985476461509309010, 0.985484950881650890, 0.985493437790280310, 0.985501922235176190, 0.985510404216317190, +0.985518883733682240, 0.985527360787250230, 0.985535835376999740, 0.985544307502909560, 0.985552777164958590, 0.985561244363125750, 0.985569709097389830, 0.985578171367729630, +0.985586631174124040, 0.985595088516551860, 0.985603543394991900, 0.985611995809423050, 0.985620445759824220, 0.985628893246174310, 0.985637338268452120, 0.985645780826636560, +0.985654220920706760, 0.985662658550641280, 0.985671093716419140, 0.985679526418019260, 0.985687956655420530, 0.985696384428601970, 0.985704809737542380, 0.985713232582220880, +0.985721652962616270, 0.985730070878707560, 0.985738486330473560, 0.985746899317893390, 0.985755309840945950, 0.985763717899610260, 0.985772123493865230, 0.985780526623690090, +0.985788927289063420, 0.985797325489964460, 0.985805721226372220, 0.985814114498265730, 0.985822505305623880, 0.985830893648425690, 0.985839279526650400, 0.985847662940277040, +0.985856043889284270, 0.985864422373651460, 0.985872798393357620, 0.985881171948381760, 0.985889543038703020, 0.985897911664300410, 0.985906277825152940, 0.985914641521239980, +0.985923002752540300, 0.985931361519033040, 0.985939717820697450, 0.985948071657512530, 0.985956423029457410, 0.985964771936511220, 0.985973118378653310, 0.985981462355862370, +0.985989803868117850, 0.985998142915398890, 0.986006479497684380, 0.986014813614953800, 0.986023145267186150, 0.986031474454360680, 0.986039801176456620, 0.986048125433452990, +0.986056447225329040, 0.986064766552063880, 0.986073083413636860, 0.986081397810027130, 0.986089709741213900, 0.986098019207176550, 0.986106326207893960, 0.986114630743345600, +0.986122932813510600, 0.986131232418368310, 0.986139529557897960, 0.986147824232078810, 0.986156116440890070, 0.986164406184311230, 0.986172693462321170, 0.986180978274899370, +0.986189260622025170, 0.986197540503677690, 0.986205817919836520, 0.986214092870480790, 0.986222365355589710, 0.986230635375142990, 0.986238902929119420, 0.986247168017498680, +0.986255430640260000, 0.986263690797382740, 0.986271948488846250, 0.986280203714629990, 0.986288456474713190, 0.986296706769075220, 0.986304954597695400, 0.986313199960553330, +0.986321442857628130, 0.986329683288899360, 0.986337921254346380, 0.986346156753948660, 0.986354389787685640, 0.986362620355536460, 0.986370848457480800, 0.986379074093498010, +0.986387297263567440, 0.986395517967668780, 0.986403736205781260, 0.986411951977884340, 0.986420165283957710, 0.986428376123980600, 0.986436584497932480, 0.986444790405792920, +0.986452993847541370, 0.986461194823157310, 0.986469393332620400, 0.986477589375910010, 0.986485782953005490, 0.986493974063886610, 0.986502162708532750, 0.986510348886923460, +0.986518532599038320, 0.986526713844856910, 0.986534892624358670, 0.986543068937523300, 0.986551242784330150, 0.986559414164758900, 0.986567583078789110, 0.986575749526400370, +0.986583913507572240, 0.986592075022284300, 0.986600234070516340, 0.986608390652247700, 0.986616544767458080, 0.986624696416127040, 0.986632845598234280, 0.986640992313759460, +0.986649136562682050, 0.986657278344981850, 0.986665417660638640, 0.986673554509631680, 0.986681688891940860, 0.986689820807545860, 0.986697950256426260, 0.986706077238561740, +0.986714201753932100, 0.986722323802517010, 0.986730443384296160, 0.986738560499249020, 0.986746675147355590, 0.986754787328595450, 0.986762897042948280, 0.986771004290393880, +0.986779109070912040, 0.986787211384482550, 0.986795311231084770, 0.986803408610698820, 0.986811503523304380, 0.986819595968881140, 0.986827685947408880, 0.986835773458867420, +0.986843858503236530, 0.986851941080496230, 0.986860021190625770, 0.986868098833605380, 0.986876174009414740, 0.986884246718033540, 0.986892316959441910, 0.986900384733619300, +0.986908450040545840, 0.986916512880201440, 0.986924573252565550, 0.986932631157618200, 0.986940686595339290, 0.986948739565708720, 0.986956790068706180, 0.986964838104311790, +0.986972883672505350, 0.986980926773266650, 0.986988967406575600, 0.986997005572412100, 0.987005041270756170, 0.987013074501587600, 0.987021105264886290, 0.987029133560632270, +0.987037159388805540, 0.987045182749385690, 0.987053203642353050, 0.987061222067687320, 0.987069238025368500, 0.987077251515376620, 0.987085262537691580, 0.987093271092293610, +0.987101277179162180, 0.987109280798277640, 0.987117281949619900, 0.987125280633168960, 0.987133276848904840, 0.987141270596807560, 0.987149261876857030, 0.987157250689033480, +0.987165237033316710, 0.987173220909686840, 0.987181202318123900, 0.987189181258607880, 0.987197157731119050, 0.987205131735637290, 0.987213103272142620, 0.987221072340615400, +0.987229038941035310, 0.987237003073382690, 0.987244964737637560, 0.987252923933779950, 0.987260880661790070, 0.987268834921647960, 0.987276786713333960, 0.987284736036827870, +0.987292682892109920, 0.987300627279160240, 0.987308569197958950, 0.987316508648486300, 0.987324445630722300, 0.987332380144647300, 0.987340312190241430, 0.987348241767484590, +0.987356168876357240, 0.987364093516839400, 0.987372015688911420, 0.987379935392553310, 0.987387852627745420, 0.987395767394467880, 0.987403679692701040, 0.987411589522424800, +0.987419496883619740, 0.987427401776265870, 0.987435304200343420, 0.987443204155832750, 0.987451101642714100, 0.987458996660967810, 0.987466889210573910, 0.987474779291512840, +0.987482666903764740, 0.987490552047310070, 0.987498434722128950, 0.987506314928201730, 0.987514192665508660, 0.987522067934030410, 0.987529940733746780, 0.987537811064638230, +0.987545678926685210, 0.987553544319867970, 0.987561407244166970, 0.987569267699562330, 0.987577125686034730, 0.987584981203564080, 0.987592834252131070, 0.987600684831716040, +0.987608532942299110, 0.987616378583860980, 0.987624221756381870, 0.987632062459842250, 0.987639900694222580, 0.987647736459502990, 0.987655569755664150, 0.987663400582686310, +0.987671228940549930, 0.987679054829235570, 0.987686878248723480, 0.987694699198994220, 0.987702517680028480, 0.987710333691806160, 0.987718147234308060, 0.987725958307514530, +0.987733766911406240, 0.987741573045963440, 0.987749376711166690, 0.987757177906996690, 0.987764976633433540, 0.987772772890458060, 0.987780566678050590, 0.987788357996191690, +0.987796146844861830, 0.987803933224041700, 0.987811717133711740, 0.987819498573852540, 0.987827277544444550, 0.987835054045468340, 0.987842828076904490, 0.987850599638733560, +0.987858368730936130, 0.987866135353492770, 0.987873899506384270, 0.987881661189590750, 0.987889420403093240, 0.987897177146872090, 0.987904931420908070, 0.987912683225181660, +0.987920432559673540, 0.987928179424364280, 0.987935923819234780, 0.987943665744265400, 0.987951405199436690, 0.987959142184729580, 0.987966876700124620, 0.987974608745602500, +0.987982338321143790, 0.987990065426729290, 0.987997790062339680, 0.988005512227955520, 0.988013231923557500, 0.988020949149126530, 0.988028663904643060, 0.988036376190087990, +0.988044086005442020, 0.988051793350685940, 0.988059498225800190, 0.988067200630765810, 0.988074900565563350, 0.988082598030173620, 0.988090293024577400, 0.988097985548755500, +0.988105675602688580, 0.988113363186357670, 0.988121048299743230, 0.988128730942826050, 0.988136411115587140, 0.988144088818007190, 0.988151764050066990, 0.988159436811747450, +0.988167107103029240, 0.988174774923893380, 0.988182440274320560, 0.988190103154291570, 0.988197763563787300, 0.988205421502788670, 0.988213076971276470, 0.988220729969231600, +0.988228380496634970, 0.988236028553467260, 0.988243674139709590, 0.988251317255342650, 0.988258957900347350, 0.988266596074704800, 0.988274231778395680, 0.988281865011401030, +0.988289495773701730, 0.988297124065278700, 0.988304749886112830, 0.988312373236185040, 0.988319994115476330, 0.988327612523967610, 0.988335228461639900, 0.988342841928474210, +0.988350452924451340, 0.988358061449552410, 0.988365667503758210, 0.988373271087049870, 0.988380872199408290, 0.988388470840814600, 0.988396067011249710, 0.988403660710694850, +0.988411251939130600, 0.988418840696538290, 0.988426426982898840, 0.988434010798193370, 0.988441592142402790, 0.988449171015508330, 0.988456747417490900, 0.988464321348331730, +0.988471892808011620, 0.988479461796511800, 0.988487028313813300, 0.988494592359897230, 0.988502153934744720, 0.988509713038336790, 0.988517269670654790, 0.988524823831679390, +0.988532375521391950, 0.988539924739773590, 0.988547471486805440, 0.988555015762468510, 0.988562557566744160, 0.988570096899613280, 0.988577633761057450, 0.988585168151057350, +0.988592700069594210, 0.988600229516649500, 0.988607756492204110, 0.988615280996239410, 0.988622803028736400, 0.988630322589676420, 0.988637839679040840, 0.988645354296810440, +0.988652866442966680, 0.988660376117490800, 0.988667883320363930, 0.988675388051567290, 0.988682890311082250, 0.988690390098890150, 0.988697887414971890, 0.988705382259309040, +0.988712874631882620, 0.988720364532673980, 0.988727851961664460, 0.988735336918835310, 0.988742819404167860, 0.988750299417643470, 0.988757776959243160, 0.988765252028948490, +0.988772724626740600, 0.988780194752601040, 0.988787662406510840, 0.988795127588451560, 0.988802590298404560, 0.988810050536350960, 0.988817508302272220, 0.988824963596149800, +0.988832416417964930, 0.988839866767698970, 0.988847314645333380, 0.988854760050849490, 0.988862202984228780, 0.988869643445452470, 0.988877081434502150, 0.988884516951359040, +0.988891949996004600, 0.988899380568420310, 0.988906808668587600, 0.988914234296487840, 0.988921657452102700, 0.988929078135413200, 0.988936496346401020, 0.988943912085047620, +0.988951325351334450, 0.988958736145242880, 0.988966144466754570, 0.988973550315850990, 0.988980953692513490, 0.988988354596723520, 0.988995753028462650, 0.989003148987712350, +0.989010542474454300, 0.989017933488669840, 0.989025322030340550, 0.989032708099448100, 0.989040091695973730, 0.989047472819899130, 0.989054851471205860, 0.989062227649875500, +0.989069601355889510, 0.989076972589229550, 0.989084341349877110, 0.989091707637813950, 0.989099071453021450, 0.989106432795481270, 0.989113791665174990, 0.989121148062084180, +0.989128501986190620, 0.989135853437475680, 0.989143202415921350, 0.989150548921508780, 0.989157892954219850, 0.989165234514036260, 0.989172573600939580, 0.989179910214911360, +0.989187244355933410, 0.989194576023987420, 0.989201905219055040, 0.989209231941117870, 0.989216556190157580, 0.989223877966155850, 0.989231197269094480, 0.989238514098955020, +0.989245828455719400, 0.989253140339369290, 0.989260449749886140, 0.989267756687251980, 0.989275061151448360, 0.989282363142456990, 0.989289662660259860, 0.989296959704838550, +0.989304254276174850, 0.989311546374250560, 0.989318835999047350, 0.989326123150547020, 0.989333407828731360, 0.989340690033582270, 0.989347969765081440, 0.989355247023210650, +0.989362521807951700, 0.989369794119286610, 0.989377063957196930, 0.989384331321664590, 0.989391596212671360, 0.989398858630199160, 0.989406118574229890, 0.989413376044745220, +0.989420631041727280, 0.989427883565157650, 0.989435133615018340, 0.989442381191291130, 0.989449626293958050, 0.989456868923000890, 0.989464109078401430, 0.989471346760141810, +0.989478581968203930, 0.989485814702569470, 0.989493044963220550, 0.989500272750138850, 0.989507498063306620, 0.989514720902705540, 0.989521941268317720, 0.989529159160125070, +0.989536374578109610, 0.989543587522253130, 0.989550797992537650, 0.989558005988945060, 0.989565211511457600, 0.989572414560057070, 0.989579615134725480, 0.989586813235445060, +0.989594008862197390, 0.989601202014964710, 0.989608392693729130, 0.989615580898472460, 0.989622766629176920, 0.989629949885824420, 0.989637130668396980, 0.989644308976876940, +0.989651484811245870, 0.989658658171486240, 0.989665829057579940, 0.989672997469508990, 0.989680163407255620, 0.989687326870801740, 0.989694487860129810, 0.989701646375221400, +0.989708802416058960, 0.989715955982624520, 0.989723107074900190, 0.989730255692867990, 0.989737401836510270, 0.989744545505809040, 0.989751686700746540, 0.989758825421304670, +0.989765961667465780, 0.989773095439211990, 0.989780226736525440, 0.989787355559388240, 0.989794481907782740, 0.989801605781691070, 0.989808727181095470, 0.989815846105977950, +0.989822962556320740, 0.989830076532106200, 0.989837188033316440, 0.989844297059933710, 0.989851403611940240, 0.989858507689318490, 0.989865609292050250, 0.989872708420117990, +0.989879805073503930, 0.989886899252190310, 0.989893990956159600, 0.989901080185393800, 0.989908166939875380, 0.989915251219586570, 0.989922333024509600, 0.989929412354626730, +0.989936489209920280, 0.989943563590372720, 0.989950635495966180, 0.989957704926683110, 0.989964771882505870, 0.989971836363416570, 0.989978898369397790, 0.989985957900431650, +0.989993014956500610, 0.990000069537587010, 0.990007121643673330, 0.990014171274741780, 0.990021218430774950, 0.990028263111754960, 0.990035305317664260, 0.990042345048485320, +0.990049382304200590, 0.990056417084792310, 0.990063449390243040, 0.990070479220535150, 0.990077506575651190, 0.990084531455573290, 0.990091553860284130, 0.990098573789766070, +0.990105591244001550, 0.990112606222973040, 0.990119618726662990, 0.990126628755054080, 0.990133636308128450, 0.990140641385868770, 0.990147643988257390, 0.990154644115276980, +0.990161641766909910, 0.990168636943138840, 0.990175629643946010, 0.990182619869314330, 0.990189607619226030, 0.990196592893663690, 0.990203575692609750, 0.990210556016047020, +0.990217533863957830, 0.990224509236324770, 0.990231482133130500, 0.990238452554357610, 0.990245420499988540, 0.990252385970005870, 0.990259348964392160, 0.990266309483130100, +0.990273267526202370, 0.990280223093591430, 0.990287176185280060, 0.990294126801250620, 0.990301074941485780, 0.990308020605968340, 0.990314963794680870, 0.990321904507605930, +0.990328842744726210, 0.990335778506024500, 0.990342711791483370, 0.990349642601085380, 0.990356570934813220, 0.990363496792649680, 0.990370420174577440, 0.990377341080579070, +0.990384259510637350, 0.990391175464735210, 0.990398088942854860, 0.990404999944979440, 0.990411908471091400, 0.990418814521173640, 0.990425718095208850, 0.990432619193179710, +0.990439517815069110, 0.990446413960859750, 0.990453307630534300, 0.990460198824075540, 0.990467087541466400, 0.990473973782689420, 0.990480857547727520, 0.990487738836563490, +0.990494617649180120, 0.990501493985560310, 0.990508367845686630, 0.990515239229542100, 0.990522108137109390, 0.990528974568371520, 0.990535838523311060, 0.990542700001911140, +0.990549559004154530, 0.990556415530023940, 0.990563269579502250, 0.990570121152572370, 0.990576970249217310, 0.990583816869419760, 0.990590661013162620, 0.990597502680428900, +0.990604341871201500, 0.990611178585463100, 0.990618012823196840, 0.990624844584385490, 0.990631673869011960, 0.990638500677059390, 0.990645325008510550, 0.990652146863348350, +0.990658966241555810, 0.990665783143115930, 0.990672597568011400, 0.990679409516225460, 0.990686218987741010, 0.990693025982541050, 0.990699830500608500, 0.990706632541926480, +0.990713432106477780, 0.990720229194245410, 0.990727023805212600, 0.990733815939362160, 0.990740605596677200, 0.990747392777140630, 0.990754177480735690, 0.990760959707445380, +0.990767739457252610, 0.990774516730140500, 0.990781291526091960, 0.990788063845090330, 0.990794833687118510, 0.990801601052159530, 0.990808365940196720, 0.990815128351212880, +0.990821888285191240, 0.990828645742114930, 0.990835400721966850, 0.990842153224730460, 0.990848903250388550, 0.990855650798924460, 0.990862395870321320, 0.990869138464562040, +0.990875878581629950, 0.990882616221508080, 0.990889351384179770, 0.990896084069628150, 0.990902814277836220, 0.990909542008787230, 0.990916267262464510, 0.990922990038851090, +0.990929710337930090, 0.990936428159684860, 0.990943143504098620, 0.990949856371154400, 0.990956566760835660, 0.990963274673125620, 0.990969980108007190, 0.990976683065463830, +0.990983383545478770, 0.990990081548035250, 0.990996777073116510, 0.991003470120705890, 0.991010160690786510, 0.991016848783341950, 0.991023534398355110, 0.991030217535809440, +0.991036898195688190, 0.991043576377974690, 0.991050252082652290, 0.991056925309704240, 0.991063596059113870, 0.991070264330864650, 0.991076930124939580, 0.991083593441322240, +0.991090254279995970, 0.991096912640944020, 0.991103568524149820, 0.991110221929596640, 0.991116872857268020, 0.991123521307147200, 0.991130167279217430, 0.991136810773462380, +0.991143451789865180, 0.991150090328409390, 0.991156726389078480, 0.991163359971855670, 0.991169991076724540, 0.991176619703668330, 0.991183245852670590, 0.991189869523714790, +0.991196490716784280, 0.991203109431862520, 0.991209725668933060, 0.991216339427979260, 0.991222950708984580, 0.991229559511932590, 0.991236165836806630, 0.991242769683590260, +0.991249371052266960, 0.991255969942820170, 0.991262566355233580, 0.991269160289490640, 0.991275751745574700, 0.991282340723469320, 0.991288927223158090, 0.991295511244624670, +0.991302092787852310, 0.991308671852824790, 0.991315248439525680, 0.991321822547938440, 0.991328394178046520, 0.991334963329833730, 0.991341530003283400, 0.991348094198379330, +0.991354655915104970, 0.991361215153444110, 0.991367771913380210, 0.991374326194896740, 0.991380877997977470, 0.991387427322606100, 0.991393974168766070, 0.991400518536441070, +0.991407060425614880, 0.991413599836270980, 0.991420136768393250, 0.991426671221964930, 0.991433203196970040, 0.991439732693392140, 0.991446259711214920, 0.991452784250422050, +0.991459306310997100, 0.991465825892924090, 0.991472342996186470, 0.991478857620767930, 0.991485369766652250, 0.991491879433823110, 0.991498386622264300, 0.991504891331959510, +0.991511393562892530, 0.991517893315047140, 0.991524390588407020, 0.991530885382955750, 0.991537377698677340, 0.991543867535555570, 0.991550354893574020, 0.991556839772716580, +0.991563322172967050, 0.991569802094309450, 0.991576279536727110, 0.991582754500204060, 0.991589226984724180, 0.991595696990271170, 0.991602164516829030, 0.991608629564381450, +0.991615092132912320, 0.991621552222405440, 0.991628009832844600, 0.991634464964213810, 0.991640917616496750, 0.991647367789677550, 0.991653815483739760, 0.991660260698667530, +0.991666703434444850, 0.991673143691055190, 0.991679581468482670, 0.991686016766711200, 0.991692449585724670, 0.991698879925507090, 0.991705307786042270, 0.991711733167314200, +0.991718156069306910, 0.991724576492004070, 0.991730994435389810, 0.991737409899448030, 0.991743822884162740, 0.991750233389517950, 0.991756641415497580, 0.991763046962085730, +0.991769450029266090, 0.991775850617022780, 0.991782248725339930, 0.991788644354201440, 0.991795037503591330, 0.991801428173493590, 0.991807816363892370, 0.991814202074771670, +0.991820585306115390, 0.991826966057907540, 0.991833344330132370, 0.991839720122773880, 0.991846093435815980, 0.991852464269242890, 0.991858832623038760, 0.991865198497187460, +0.991871561891673140, 0.991877922806479910, 0.991884281241591890, 0.991890637196993110, 0.991896990672667790, 0.991903341668600060, 0.991909690184773930, 0.991916036221173640, +0.991922379777783080, 0.991928720854586720, 0.991935059451568460, 0.991941395568712640, 0.991947729206003270, 0.991954060363424590, 0.991960389040960840, 0.991966715238596030, +0.991973038956314500, 0.991979360194100270, 0.991985678951937680, 0.991991995229810850, 0.991998309027704140, 0.992004620345601660, 0.992010929183487540, 0.992017235541346130, +0.992023539419161660, 0.992029840816918360, 0.992036139734600360, 0.992042436172192010, 0.992048730129677650, 0.992055021607041620, 0.992061310604267830, 0.992067597121340740, +0.992073881158244690, 0.992080162714964020, 0.992086441791482860, 0.992092718387785570, 0.992098992503856470, 0.992105264139680140, 0.992111533295240380, 0.992117799970521850, +0.992124064165508910, 0.992130325880185680, 0.992136585114536730, 0.992142841868546290, 0.992149096142198820, 0.992155347935478440, 0.992161597248369830, 0.992167844080857120, +0.992174088432924870, 0.992180330304557430, 0.992186569695739040, 0.992192806606454370, 0.992199041036687660, 0.992205272986423360, 0.992211502455645820, 0.992217729444339500, +0.992223953952488860, 0.992230175980078340, 0.992236395527092420, 0.992242612593515540, 0.992248827179332160, 0.992255039284526630, 0.992261248909083520, 0.992267456052987160, +0.992273660716222360, 0.992279862898773240, 0.992286062600624570, 0.992292259821760840, 0.992298454562166370, 0.992304646821825730, 0.992310836600723390, 0.992317023898844130, +0.992323208716172190, 0.992329391052692240, 0.992335570908388860, 0.992341748283246620, 0.992347923177249960, 0.992354095590383460, 0.992360265522631680, 0.992366432973979310, +0.992372597944410790, 0.992378760433910820, 0.992384920442463960, 0.992391077970054770, 0.992397233016667930, 0.992403385582288020, 0.992409535666899600, 0.992415683270487240, +0.992421828393035830, 0.992427971034529730, 0.992434111194953950, 0.992440248874292610, 0.992446384072530830, 0.992452516789652960, 0.992458647025643790, 0.992464774780488110, +0.992470900054170380, 0.992477022846675490, 0.992483143157988130, 0.992489260988092760, 0.992495376336974270, 0.992501489204617340, 0.992507599591006760, 0.992513707496127110, +0.992519812919963160, 0.992525915862499830, 0.992532016323721570, 0.992538114303613270, 0.992544209802159740, 0.992550302819345640, 0.992556393355155770, 0.992562481409574930, +0.992568566982587890, 0.992574650074179550, 0.992580730684334500, 0.992586808813037620, 0.992592884460273720, 0.992598957626027570, 0.992605028310283970, 0.992611096513027920, +0.992617162234244230, 0.992623225473917460, 0.992629286232032610, 0.992635344508574600, 0.992641400303528210, 0.992647453616878340, 0.992653504448609780, 0.992659552798707550, +0.992665598667156530, 0.992671642053941320, 0.992677682959047130, 0.992683721382458640, 0.992689757324160870, 0.992695790784138720, 0.992701821762377090, 0.992707850258860880, +0.992713876273575210, 0.992719899806504660, 0.992725920857634450, 0.992731939426949370, 0.992737955514434440, 0.992743969120074680, 0.992749980243854970, 0.992755988885760330, +0.992761995045775780, 0.992767998723886100, 0.992773999920076530, 0.992779998634331860, 0.992785994866637210, 0.992791988616977710, 0.992797979885338130, 0.992803968671703620, +0.992809954976059170, 0.992815938798389920, 0.992821920138680760, 0.992827898996916700, 0.992833875373082990, 0.992839849267164620, 0.992845820679146620, 0.992851789609014100, +0.992857756056751970, 0.992863720022345570, 0.992869681505779810, 0.992875640507039910, 0.992881597026110780, 0.992887551062977770, 0.992893502617625990, 0.992899451690040240, +0.992905398280205960, 0.992911342388108190, 0.992917284013732030, 0.992923223157062610, 0.992929159818085270, 0.992935093996784920, 0.992941025693146910, 0.992946954907156340, +0.992952881638798360, 0.992958805888058070, 0.992964727654920940, 0.992970646939371870, 0.992976563741396200, 0.992982478060979170, 0.992988389898106010, 0.992994299252761730, +0.993000206124931780, 0.993006110514601190, 0.993012012421755410, 0.993017911846379660, 0.993023808788459080, 0.993029703247979010, 0.993035595224924680, 0.993041484719281330, +0.993047371731034300, 0.993053256260168830, 0.993059138306670140, 0.993065017870523700, 0.993070894951714630, 0.993076769550228500, 0.993082641666050310, 0.993088511299165530, +0.993094378449559500, 0.993100243117217450, 0.993106105302124840, 0.993111965004266910, 0.993117822223629210, 0.993123676960196880, 0.993129529213955360, 0.993135378984890020, +0.993141226272986180, 0.993147071078229300, 0.993152913400604740, 0.993158753240097950, 0.993164590596694370, 0.993170425470379150, 0.993176257861137830, 0.993182087768956000, +0.993187915193818880, 0.993193740135711930, 0.993199562594620720, 0.993205382570530590, 0.993211200063427000, 0.993217015073295410, 0.993222827600121260, 0.993228637643890020, +0.993234445204587260, 0.993240250282198310, 0.993246052876708750, 0.993251852988104140, 0.993257650616369840, 0.993263445761491390, 0.993269238423454380, 0.993275028602244150, +0.993280816297846480, 0.993286601510246720, 0.993292384239430450, 0.993298164485383330, 0.993303942248090710, 0.993309717527538160, 0.993315490323711360, 0.993321260636595870, +0.993327028466177260, 0.993332793812441000, 0.993338556675372850, 0.993344317054958290, 0.993350074951182880, 0.993355830364032300, 0.993361583293492110, 0.993367333739548000, +0.993373081702185520, 0.993378827181390370, 0.993384570177148210, 0.993390310689444610, 0.993396048718265150, 0.993401784263595600, 0.993407517325421650, 0.993413247903728760, +0.993418975998502930, 0.993424701609729510, 0.993430424737394510, 0.993436145381483390, 0.993441863541981830, 0.993447579218875610, 0.993453292412150410, 0.993459003121792140, +0.993464711347786240, 0.993470417090118630, 0.993476120348774970, 0.993481821123740950, 0.993487519415002350, 0.993493215222545080, 0.993498908546354700, 0.993504599386417000, +0.993510287742717880, 0.993515973615243020, 0.993521657003978210, 0.993527337908909350, 0.993533016330022000, 0.993538692267302180, 0.993544365720735570, 0.993550036690308170, +0.993555705176005550, 0.993561371177813850, 0.993567034695718500, 0.993572695729705750, 0.993578354279761160, 0.993584010345870630, 0.993589663928020170, 0.993595315026195470, +0.993600963640382640, 0.993606609770567250, 0.993612253416735420, 0.993617894578872950, 0.993623533256965620, 0.993629169450999550, 0.993634803160960530, 0.993640434386834580, +0.993646063128607590, 0.993651689386265360, 0.993657313159793890, 0.993662934449179080, 0.993668553254406950, 0.993674169575463510, 0.993679783412334650, 0.993685394765006390, +0.993691003633464520, 0.993696610017695160, 0.993702213917684320, 0.993707815333417900, 0.993713414264881910, 0.993719010712062480, 0.993724604674945500, 0.993730196153516990, +0.993735785147763060, 0.993741371657669510, 0.993746955683222690, 0.993752537224408370, 0.993758116281212690, 0.993763692853621760, 0.993769266941621600, 0.993774838545198440, +0.993780407664338060, 0.993785974299026600, 0.993791538449250170, 0.993797100114995000, 0.993802659296247000, 0.993808215992992410, 0.993813770205217330, 0.993819321932907780, +0.993824871176049900, 0.993830417934629780, 0.993835962208633680, 0.993841503998047720, 0.993847043302858000, 0.993852580123050560, 0.993858114458611830, 0.993863646309527730, +0.993869175675784480, 0.993874702557368320, 0.993880226954265370, 0.993885748866461970, 0.993891268293944030, 0.993896785236698110, 0.993902299694710110, 0.993907811667966380, +0.993913321156453140, 0.993918828160156530, 0.993924332679062880, 0.993929834713158430, 0.993935334262429420, 0.993940831326862060, 0.993946325906442610, 0.993951818001157280, +0.993957307610992550, 0.993962794735934410, 0.993968279375969320, 0.993973761531083520, 0.993979241201263350, 0.993984718386495160, 0.993990193086765060, 0.993995665302059520, +0.994001135032364760, 0.994006602277667240, 0.994012067037953080, 0.994017529313208860, 0.994022989103420910, 0.994028446408575350, 0.994033901228658760, 0.994039353563657360, +0.994044803413557500, 0.994050250778345750, 0.994055695658008330, 0.994061138052531710, 0.994066577961902230, 0.994072015386106340, 0.994077450325130290, 0.994082882778960730, +0.994088312747583910, 0.994093740230986290, 0.994099165229154310, 0.994104587742074440, 0.994110007769733240, 0.994115425312116940, 0.994120840369212000, 0.994126252941004980, +0.994131663027482350, 0.994137070628630550, 0.994142475744436040, 0.994147878374885500, 0.994153278519965160, 0.994158676179661580, 0.994164071353961340, 0.994169464042850890, +0.994174854246316800, 0.994180241964345620, 0.994185627196923720, 0.994191009944037970, 0.994196390205674520, 0.994201767981820140, 0.994207143272461290, 0.994212516077584650, +0.994217886397176680, 0.994223254231224040, 0.994228619579713310, 0.994233982442630950, 0.994239342819963620, 0.994244700711698020, 0.994250056117820580, 0.994255409038317990, +0.994260759473176940, 0.994266107422383970, 0.994271452885925780, 0.994276795863788920, 0.994282136355960080, 0.994287474362425820, 0.994292809883172920, 0.994298142918188080, +0.994303473467457730, 0.994308801530968790, 0.994314127108707920, 0.994319450200661590, 0.994324770806816690, 0.994330088927159910, 0.994335404561677900, 0.994340717710357260, +0.994346028373184980, 0.994351336550147620, 0.994356642241231770, 0.994361945446424420, 0.994367246165712260, 0.994372544399081850, 0.994377840146520200, 0.994383133408013880, +0.994388424183549670, 0.994393712473114590, 0.994398998276695090, 0.994404281594278070, 0.994409562425850440, 0.994414840771398860, 0.994420116630910120, 0.994425390004371130, +0.994430660891768680, 0.994435929293089660, 0.994441195208320750, 0.994446458637448850, 0.994451719580460750, 0.994456978037343450, 0.994462234008083650, 0.994467487492668220, +0.994472738491084200, 0.994477987003318240, 0.994483233029357370, 0.994488476569188260, 0.994493717622798150, 0.994498956190173590, 0.994504192271301710, 0.994509425866169420, +0.994514656974763600, 0.994519885597070940, 0.994525111733078670, 0.994530335382773690, 0.994535556546142780, 0.994540775223172970, 0.994545991413851250, 0.994551205118164640, +0.994556416336099920, 0.994561625067644120, 0.994566831312784340, 0.994572035071507490, 0.994577236343800460, 0.994582435129650390, 0.994587631429044270, 0.994592825241969130, +0.994598016568411850, 0.994603205408359450, 0.994608391761799050, 0.994613575628717770, 0.994618757009102520, 0.994623935902940290, 0.994629112310218330, 0.994634286230923650, +0.994639457665043140, 0.994644626612564030, 0.994649793073473230, 0.994654957047758080, 0.994660118535405480, 0.994665277536402660, 0.994670434050736630, 0.994675588078394510, +0.994680739619363320, 0.994685888673630390, 0.994691035241182740, 0.994696179322007380, 0.994701320916091650, 0.994706460023422670, 0.994711596643987560, 0.994716730777773340, +0.994721862424767340, 0.994726991584956700, 0.994732118258328630, 0.994737242444870160, 0.994742364144568620, 0.994747483357411140, 0.994752600083385170, 0.994757714322477500, +0.994762826074675590, 0.994767935339966550, 0.994773042118337720, 0.994778146409776240, 0.994783248214269440, 0.994788347531804560, 0.994793444362368830, 0.994798538705949360, +0.994803630562533630, 0.994808719932108840, 0.994813806814662250, 0.994818891210181080, 0.994823973118652670, 0.994829052540064480, 0.994834129474403530, 0.994839203921657260, +0.994844275881813010, 0.994849345354858030, 0.994854412340779760, 0.994859476839565330, 0.994864538851202410, 0.994869598375678010, 0.994874655412979590, 0.994879709963094610, +0.994884762026010280, 0.994889811601714080, 0.994894858690193340, 0.994899903291435520, 0.994904945405427950, 0.994909985032158000, 0.994915022171612980, 0.994920056823780490, +0.994925088988647840, 0.994930118666202400, 0.994935145856431720, 0.994940170559323270, 0.994945192774864370, 0.994950212503042390, 0.994955229743844980, 0.994960244497259390, +0.994965256763273190, 0.994970266541873930, 0.994975273833048960, 0.994980278636785840, 0.994985280953072040, 0.994990280781895000, 0.994995278123242290, 0.995000272977101250, +0.995005265343459680, 0.995010255222304910, 0.995015242613624510, 0.995020227517406040, 0.995025209933636860, 0.995030189862304740, 0.995035167303397140, 0.995040142256901630, +0.995045114722805770, 0.995050084701097130, 0.995055052191763270, 0.995060017194791870, 0.995064979710170270, 0.995069939737886270, 0.995074897277927420, 0.995079852330281400, +0.995084804894935670, 0.995089754971877900, 0.995094702561095890, 0.995099647662577080, 0.995104590276309040, 0.995109530402279560, 0.995114468040476320, 0.995119403190886880, +0.995124335853498910, 0.995129266028300100, 0.995134193715278230, 0.995139118914420750, 0.995144041625715460, 0.995148961849150140, 0.995153879584712350, 0.995158794832389890, +0.995163707592170430, 0.995168617864041870, 0.995173525647991550, 0.995178430944007490, 0.995183333752077350, 0.995188234072188930, 0.995193131904329900, 0.995198027248487940, +0.995202920104650950, 0.995207810472806820, 0.995212698352943010, 0.995217583745047540, 0.995222466649107960, 0.995227347065112400, 0.995232224993048310, 0.995237100432903700, +0.995241973384666360, 0.995246843848324180, 0.995251711823864850, 0.995256577311276150, 0.995261440310546090, 0.995266300821662340, 0.995271158844612920, 0.995276014379385620, +0.995280867425968330, 0.995285717984348730, 0.995290566054514940, 0.995295411636454630, 0.995300254730155820, 0.995305095335606400, 0.995309933452794280, 0.995314769081707240, +0.995319602222333400, 0.995324432874660550, 0.995329261038676470, 0.995334086714369290, 0.995338909901727020, 0.995343730600737330, 0.995348548811388350, 0.995353364533668070, +0.995358177767564300, 0.995362988513065150, 0.995367796770158410, 0.995372602538832310, 0.995377405819074630, 0.995382206610873400, 0.995387004914216720, 0.995391800729092610, +0.995396594055488970, 0.995401384893393690, 0.995406173242795010, 0.995410959103680940, 0.995415742476039480, 0.995420523359858640, 0.995425301755126450, 0.995430077661831230, +0.995434851079960550, 0.995439622009502870, 0.995444390450446080, 0.995449156402778310, 0.995453919866487680, 0.995458680841562190, 0.995463439327990200, 0.995468195325759360, +0.995472948834858150, 0.995477699855274570, 0.995482448386996730, 0.995487194430012770, 0.995491937984310790, 0.995496679049879040, 0.995501417626705520, 0.995506153714778570, +0.995510887314086100, 0.995515618424616440, 0.995520347046357720, 0.995525073179298170, 0.995529796823426020, 0.995534517978729270, 0.995539236645196280, 0.995543952822815160, +0.995548666511574140, 0.995553377711461460, 0.995558086422465350, 0.995562792644574030, 0.995567496377775750, 0.995572197622058840, 0.995576896377411310, 0.995581592643821510, +0.995586286421277780, 0.995590977709768230, 0.995595666509281330, 0.995600352819805190, 0.995605036641328270, 0.995609717973838790, 0.995614396817325000, 0.995619073171775120, +0.995623747037177600, 0.995628418413520680, 0.995633087300792700, 0.995637753698982110, 0.995642417608077150, 0.995647079028066040, 0.995651737958937240, 0.995656394400679100, +0.995661048353280060, 0.995665699816728260, 0.995670348791012350, 0.995674995276120470, 0.995679639272041170, 0.995684280778762810, 0.995688919796273610, 0.995693556324562130, +0.995698190363616840, 0.995702821913426070, 0.995707450973978170, 0.995712077545261700, 0.995716701627265110, 0.995721323219976640, 0.995725942323384960, 0.995730558937478310, +0.995735173062245350, 0.995739784697674430, 0.995744393843754020, 0.995749000500472770, 0.995753604667818930, 0.995758206345781050, 0.995762805534347590, 0.995767402233507240, +0.995771996443248320, 0.995776588163559410, 0.995781177394429060, 0.995785764135845740, 0.995790348387798010, 0.995794930150274430, 0.995799509423263560, 0.995804086206753870, +0.995808660500733910, 0.995813232305192360, 0.995817801620117680, 0.995822368445498650, 0.995826932781323610, 0.995831494627581250, 0.995836053984260120, 0.995840610851348780, +0.995845165228836040, 0.995849717116710330, 0.995854266514960340, 0.995858813423574740, 0.995863357842541990, 0.995867899771850970, 0.995872439211490050, 0.995876976161448100, +0.995881510621713820, 0.995886042592275640, 0.995890572073122480, 0.995895099064242780, 0.995899623565625340, 0.995904145577258810, 0.995908665099132010, 0.995913182131233480, +0.995917696673551900, 0.995922208726076290, 0.995926718288795090, 0.995931225361697090, 0.995935729944770980, 0.995940232038005520, 0.995944731641389520, 0.995949228754911650, +0.995953723378560810, 0.995958215512325660, 0.995962705156194890, 0.995967192310157400, 0.995971676974201970, 0.995976159148317270, 0.995980638832492220, 0.995985116026715470, +0.995989590730976040, 0.995994062945262710, 0.995998532669564060, 0.996002999903869090, 0.996007464648166700, 0.996011926902445670, 0.996016386666694680, 0.996020843940902840, +0.996025298725058960, 0.996029751019151700, 0.996034200823170070, 0.996038648137102970, 0.996043092960939290, 0.996047535294667830, 0.996051975138277480, 0.996056412491757250, +0.996060847355096150, 0.996065279728282740, 0.996069709611306140, 0.996074137004155260, 0.996078561906819090, 0.996082984319286550, 0.996087404241546400, 0.996091821673587900, +0.996096236615399810, 0.996100649066971160, 0.996105059028290720, 0.996109466499347730, 0.996113871480131090, 0.996118273970629800, 0.996122673970832760, 0.996127071480729210, +0.996131466500307820, 0.996135859029557810, 0.996140249068468100, 0.996144636617027790, 0.996149021675225900, 0.996153404243051430, 0.996157784320493400, 0.996162161907541140, +0.996166537004183230, 0.996170909610409110, 0.996175279726207670, 0.996179647351568050, 0.996184012486479250, 0.996188375130930500, 0.996192735284910810, 0.996197092948409190, +0.996201448121414980, 0.996205800803916960, 0.996210150995904600, 0.996214498697366780, 0.996218843908292740, 0.996223186628671600, 0.996227526858492580, 0.996231864597744600, +0.996236199846416980, 0.996240532604498960, 0.996244862871979550, 0.996249190648847870, 0.996253515935093370, 0.996257838730705060, 0.996262159035672170, 0.996266476849983820, +0.996270792173629240, 0.996275105006597770, 0.996279415348878540, 0.996283723200460660, 0.996288028561333580, 0.996292331431486430, 0.996296631810908440, 0.996300929699588830, +0.996305225097516840, 0.996309518004681930, 0.996313808421073090, 0.996318096346679780, 0.996322381781491240, 0.996326664725496910, 0.996330945178685700, 0.996335223141047170, +0.996339498612570650, 0.996343771593245280, 0.996348042083060600, 0.996352310082005750, 0.996356575590070070, 0.996360838607243120, 0.996365099133513900, 0.996369357168871980, +0.996373612713306710, 0.996377865766807420, 0.996382116329363350, 0.996386364400964060, 0.996390609981599010, 0.996394853071257190, 0.996399093669928400, 0.996403331777601760, +0.996407567394266840, 0.996411800519913070, 0.996416031154529700, 0.996420259298106290, 0.996424484950632290, 0.996428708112097050, 0.996432928782490010, 0.996437146961800630, +0.996441362650018370, 0.996445575847132780, 0.996449786553133210, 0.996453994768009220, 0.996458200491750160, 0.996462403724345690, 0.996466604465785170, 0.996470802716058040, +0.996474998475153970, 0.996479191743062430, 0.996483382519772980, 0.996487570805275060, 0.996491756599558130, 0.996495939902611760, 0.996500120714425620, 0.996504299034989160, +0.996508474864291950, 0.996512648202323660, 0.996516819049073630, 0.996520987404531660, 0.996525153268687070, 0.996529316641529660, 0.996533477523048990, 0.996537635913234630, +0.996541791812076140, 0.996545945219563190, 0.996550096135685460, 0.996554244560432400, 0.996558390493793690, 0.996562533935759000, 0.996566674886318120, 0.996570813345460380, +0.996574949313175700, 0.996579082789453620, 0.996583213774283940, 0.996587342267656110, 0.996591468269559910, 0.996595591779985130, 0.996599712798921230, 0.996603831326358210, +0.996607947362285530, 0.996612060906693080, 0.996616171959570310, 0.996620280520907230, 0.996624386590693410, 0.996628490168918630, 0.996632591255572580, 0.996636689850645130, +0.996640785954125860, 0.996644879566004780, 0.996648970686271340, 0.996653059314915550, 0.996657145451927070, 0.996661229097295820, 0.996665310251011350, 0.996669388913063670, +0.996673465083442570, 0.996677538762137830, 0.996681609949139240, 0.996685678644436580, 0.996689744848019640, 0.996693808559878440, 0.996697869780002740, 0.996701928508382240, +0.996705984745007050, 0.996710038489866830, 0.996714089742951610, 0.996718138504251060, 0.996722184773755180, 0.996726228551453870, 0.996730269837336920, 0.996734308631394340, +0.996738344933616130, 0.996742378743991850, 0.996746410062511750, 0.996750438889165590, 0.996754465223943290, 0.996758489066834840, 0.996762510417830150, 0.996766529276919220, +0.996770545644092070, 0.996774559519338470, 0.996778570902648430, 0.996782579794011970, 0.996786586193419090, 0.996790590100859690, 0.996794591516323880, 0.996798590439801570, +0.996802586871282760, 0.996806580810757570, 0.996810572258215900, 0.996814561213647750, 0.996818547677043140, 0.996822531648392300, 0.996826513127685000, 0.996830492114911590, +0.996834468610061750, 0.996838442613125930, 0.996842414124093800, 0.996846383142955820, 0.996850349669701760, 0.996854313704321870, 0.996858275246806260, 0.996862234297144930, +0.996866190855327900, 0.996870144921345510, 0.996874096495187770, 0.996878045576844670, 0.996881992166306570, 0.996885936263563480, 0.996889877868605500, 0.996893816981422880, +0.996897753602005720, 0.996901687730344150, 0.996905619366428300, 0.996909548510248490, 0.996913475161794740, 0.996917399321057270, 0.996921320988026440, 0.996925240162692240, +0.996929156845045020, 0.996933071035074780, 0.996936982732771870, 0.996940891938126520, 0.996944798651128950, 0.996948702871769510, 0.996952604600038210, 0.996956503835925380, +0.996960400579421260, 0.996964294830516180, 0.996968186589200390, 0.996972075855464100, 0.996975962629297660, 0.996979846910691300, 0.996983728699635250, 0.996987607996119960, +0.996991484800135660, 0.996995359111672590, 0.996999230930721180, 0.997003100257271570, 0.997006967091314310, 0.997010831432839750, 0.997014693281837890, 0.997018552638299420, +0.997022409502214550, 0.997026263873573630, 0.997030115752367110, 0.997033965138585220, 0.997037812032218530, 0.997041656433257260, 0.997045498341691760, 0.997049337757512590, +0.997053174680710090, 0.997057009111274590, 0.997060841049196570, 0.997064670494466570, 0.997068497447074820, 0.997072321907011780, 0.997076143874268020, 0.997079963348833860, +0.997083780330699780, 0.997087594819856200, 0.997091406816293710, 0.997095216320002750, 0.997099023330973670, 0.997102827849197020, 0.997106629874663360, 0.997110429407363050, +0.997114226447286760, 0.997118020994424810, 0.997121813048767790, 0.997125602610306360, 0.997129389679030860, 0.997133174254931980, 0.997136956338000040, 0.997140735928225720, +0.997144513025599590, 0.997148287630112210, 0.997152059741754030, 0.997155829360515830, 0.997159596486387970, 0.997163361119361100, 0.997167123259425800, 0.997170882906572740, +0.997174640060792480, 0.997178394722075590, 0.997182146890412850, 0.997185896565794590, 0.997189643748211620, 0.997193388437654590, 0.997197130634113970, 0.997200870337580650, +0.997204607548045070, 0.997208342265498040, 0.997212074489930210, 0.997215804221332050, 0.997219531459694440, 0.997223256205008070, 0.997226978457263490, 0.997230698216451380, +0.997234415482562640, 0.997238130255587830, 0.997241842535517730, 0.997245552322343020, 0.997249259616054370, 0.997252964416642680, 0.997256666724098410, 0.997260366538412660, +0.997264063859575890, 0.997267758687579000, 0.997271451022412660, 0.997275140864067770, 0.997278828212534880, 0.997282513067805020, 0.997286195429868960, 0.997289875298717270, +0.997293552674340940, 0.997297227556730780, 0.997300899945877560, 0.997304569841771960, 0.997308237244405090, 0.997311902153767530, 0.997315564569850270, 0.997319224492643990, +0.997322881922139800, 0.997326536858328390, 0.997330189301200540, 0.997333839250747260, 0.997337486706959320, 0.997341131669827740, 0.997344774139343300, 0.997348414115497020, +0.997352051598279670, 0.997355686587682140, 0.997359319083695350, 0.997362949086310290, 0.997366576595517970, 0.997370201611309070, 0.997373824133674700, 0.997377444162605760, +0.997381061698093370, 0.997384676740128210, 0.997388289288701270, 0.997391899343803680, 0.997395506905426330, 0.997399111973560240, 0.997402714548196400, 0.997406314629325720, +0.997409912216939310, 0.997413507311028070, 0.997417099911583000, 0.997420690018595240, 0.997424277632055770, 0.997427862751955610, 0.997431445378285760, 0.997435025511037470, +0.997438603150201390, 0.997442178295768870, 0.997445750947730910, 0.997449321106078650, 0.997452888770802960, 0.997456453941895080, 0.997460016619346130, 0.997463576803147120, +0.997467134493289160, 0.997470689689763380, 0.997474242392560770, 0.997477792601672690, 0.997481340317090020, 0.997484885538804100, 0.997488428266805950, 0.997491968501086680, +0.997495506241637520, 0.997499041488449590, 0.997502574241514010, 0.997506104500822000, 0.997509632266364800, 0.997513157538133520, 0.997516680316119290, 0.997520200600313430, +0.997523718390706970, 0.997527233687291350, 0.997530746490057460, 0.997534256798996880, 0.997537764614100490, 0.997541269935359850, 0.997544772762765990, 0.997548273096310220, +0.997551770935983680, 0.997555266281777710, 0.997558759133683640, 0.997562249491692700, 0.997565737355796010, 0.997569222725985140, 0.997572705602251200, 0.997576185984585420, +0.997579663872979140, 0.997583139267423700, 0.997586612167910450, 0.997590082574430710, 0.997593550486975730, 0.997597015905536950, 0.997600478830105500, 0.997603939260672920, +0.997607397197230460, 0.997610852639769560, 0.997614305588281460, 0.997617756042757710, 0.997621204003189540, 0.997624649469568300, 0.997628092441885440, 0.997631532920132290, +0.997634970904300420, 0.997638406394381060, 0.997641839390365770, 0.997645269892245780, 0.997648697900012760, 0.997652123413657830, 0.997655546433172670, 0.997658966958548610, +0.997662384989777110, 0.997665800526849720, 0.997669213569757800, 0.997672624118492890, 0.997676032173046350, 0.997679437733409720, 0.997682840799574590, 0.997686241371532280, +0.997689639449274360, 0.997693035032792390, 0.997696428122077820, 0.997699818717122210, 0.997703206817917020, 0.997706592424453810, 0.997709975536724140, 0.997713356154719460, +0.997716734278431440, 0.997720109907851650, 0.997723483042971430, 0.997726853683782670, 0.997730221830276710, 0.997733587482445230, 0.997736950640279670, 0.997740311303771830, +0.997743669472913150, 0.997747025147695310, 0.997750378328109980, 0.997753729014148720, 0.997757077205803090, 0.997760422903064660, 0.997763766105925320, 0.997767106814376530, +0.997770445028409950, 0.997773780748017150, 0.997777113973190130, 0.997780444703920130, 0.997783772940199150, 0.997787098682018650, 0.997790421929370400, 0.997793742682246190, +0.997797060940637580, 0.997800376704536250, 0.997803689973934090, 0.997807000748822670, 0.997810309029193650, 0.997813614815038940, 0.997816918106350200, 0.997820218903119120, +0.997823517205337570, 0.997826813012997250, 0.997830106326089820, 0.997833397144607170, 0.997836685468540980, 0.997839971297883040, 0.997843254632625240, 0.997846535472759260, +0.997849813818276980, 0.997853089669170190, 0.997856363025430680, 0.997859633887050120, 0.997862902254020630, 0.997866168126333890, 0.997869431503981660, 0.997872692386955860, +0.997875950775248380, 0.997879206668850880, 0.997882460067755490, 0.997885710971953890, 0.997888959381438070, 0.997892205296199820, 0.997895448716231040, 0.997898689641523730, +0.997901928072069680, 0.997905164007860780, 0.997908397448888930, 0.997911628395146130, 0.997914856846624180, 0.997918082803315180, 0.997921306265210920, 0.997924527232303400, +0.997927745704584650, 0.997930961682046420, 0.997934175164680860, 0.997937386152479840, 0.997940594645435270, 0.997943800643539380, 0.997947004146783830, 0.997950205155160860, +0.997953403668662360, 0.997956599687280340, 0.997959793211006920, 0.997962984239833870, 0.997966172773753430, 0.997969358812757500, 0.997972542356838300, 0.997975723405987610, +0.997978901960197670, 0.997982078019460480, 0.997985251583768160, 0.997988422653112610, 0.997991591227486040, 0.997994757306880480, 0.997997920891288030, 0.998001081980700810, +0.998004240575110830, 0.998007396674510330, 0.998010550278891300, 0.998013701388245860, 0.998016850002566120, 0.998019996121844330, 0.998023139746072600, 0.998026280875242920, +0.998029419509347650, 0.998032555648378780, 0.998035689292328440, 0.998038820441188970, 0.998041949094952360, 0.998045075253610970, 0.998048198917156900, 0.998051320085582280, +0.998054438758879450, 0.998057554937040400, 0.998060668620057490, 0.998063779807922940, 0.998066888500628970, 0.998069994698167710, 0.998073098400531490, 0.998076199607712540, +0.998079298319703100, 0.998082394536495390, 0.998085488258081740, 0.998088579484454290, 0.998091668215605470, 0.998094754451527510, 0.998097838192212540, 0.998100919437653000, +0.998103998187841230, 0.998107074442769360, 0.998110148202429940, 0.998113219466815080, 0.998116288235917140, 0.998119354509728550, 0.998122418288241550, 0.998125479571448480, +0.998128538359341790, 0.998131594651913590, 0.998134648449156560, 0.998137699751062810, 0.998140748557624910, 0.998143794868835090, 0.998146838684685790, 0.998149880005169350, +0.998152918830278240, 0.998155955160004880, 0.998158988994341520, 0.998162020333280830, 0.998165049176815030, 0.998168075524936580, 0.998171099377637930, 0.998174120734911520, +0.998177139596749920, 0.998180155963145350, 0.998183169834090500, 0.998186181209577580, 0.998189190089599390, 0.998192196474148140, 0.998195200363216300, 0.998198201756796630, +0.998201200654881270, 0.998204197057463110, 0.998207190964534250, 0.998210182376087610, 0.998213171292115400, 0.998216157712610300, 0.998219141637564760, 0.998222123066971450, +0.998225102000822820, 0.998228078439111320, 0.998231052381829740, 0.998234023828970530, 0.998236992780526240, 0.998239959236489450, 0.998242923196852710, 0.998245884661608680, +0.998248843630750060, 0.998251800104269170, 0.998254754082158910, 0.998257705564411730, 0.998260654551020310, 0.998263601041977200, 0.998266545037275080, 0.998269486536906610, +0.998272425540864480, 0.998275362049141250, 0.998278296061729580, 0.998281227578622250, 0.998284156599811730, 0.998287083125290910, 0.998290007155052340, 0.998292928689088810, +0.998295847727392880, 0.998298764269957340, 0.998301678316774970, 0.998304589867838430, 0.998307498923140300, 0.998310405482673470, 0.998313309546430610, 0.998316211114404490, +0.998319110186587810, 0.998322006762973450, 0.998324900843554080, 0.998327792428322370, 0.998330681517271110, 0.998333568110393310, 0.998336452207681520, 0.998339333809128540, +0.998342212914727250, 0.998345089524470540, 0.998347963638350990, 0.998350835256361590, 0.998353704378495130, 0.998356571004744290, 0.998359435135102060, 0.998362296769561340, +0.998365155908114810, 0.998368012550755470, 0.998370866697475990, 0.998373718348269380, 0.998376567503128420, 0.998379414162046120, 0.998382258325015260, 0.998385099992028740, +0.998387939163079550, 0.998390775838160380, 0.998393610017264340, 0.998396441700384330, 0.998399270887513120, 0.998402097578643840, 0.998404921773769160, 0.998407743472882300, +0.998410562675976050, 0.998413379383043420, 0.998416193594077290, 0.998419005309070680, 0.998421814528016590, 0.998424621250908030, 0.998427425477737770, 0.998430227208499050, +0.998433026443184770, 0.998435823181787920, 0.998438617424301400, 0.998441409170718440, 0.998444198421031940, 0.998446985175234890, 0.998449769433320420, 0.998452551195281530, +0.998455330461111350, 0.998458107230802750, 0.998460881504348860, 0.998463653281742800, 0.998466422562977570, 0.998469189348046290, 0.998471953636942080, 0.998474715429658040, +0.998477474726187090, 0.998480231526522540, 0.998482985830657420, 0.998485737638584720, 0.998488486950297790, 0.998491233765789630, 0.998493978085053360, 0.998496719908082090, +0.998499459234869160, 0.998502196065407470, 0.998504930399690350, 0.998507662237710810, 0.998510391579462200, 0.998513118424937620, 0.998515842774130190, 0.998518564627033140, +0.998521283983639710, 0.998524000843943100, 0.998526715207936450, 0.998529427075613100, 0.998532136446966030, 0.998534843321988720, 0.998537547700674380, 0.998540249583016020, +0.998542948969007080, 0.998545645858640810, 0.998548340251910420, 0.998551032148809140, 0.998553721549330200, 0.998556408453467160, 0.998559092861213030, 0.998561774772561030, +0.998564454187504720, 0.998567131106037230, 0.998569805528152000, 0.998572477453842140, 0.998575146883101120, 0.998577813815922260, 0.998580478252298900, 0.998583140192224270, +0.998585799635691830, 0.998588456582694910, 0.998591111033226730, 0.998593762987280860, 0.998596412444850650, 0.998599059405929300, 0.998601703870510390, 0.998604345838587150, +0.998606985310153130, 0.998609622285201560, 0.998612256763726000, 0.998614888745719690, 0.998617518231176280, 0.998620145220089020, 0.998622769712451450, 0.998625391708256930, +0.998628011207498890, 0.998630628210170790, 0.998633242716266190, 0.998635854725778430, 0.998638464238701170, 0.998641071255027660, 0.998643675774751440, 0.998646277797866080, +0.998648877324364910, 0.998651474354241620, 0.998654068887489750, 0.998656660924102660, 0.998659250464073890, 0.998661837507396900, 0.998664422054065470, 0.998667004104072830, +0.998669583657412760, 0.998672160714078830, 0.998674735274064360, 0.998677307337363150, 0.998679876903968640, 0.998682443973874400, 0.998685008547074090, 0.998687570623561170, +0.998690130203329420, 0.998692687286372280, 0.998695241872683550, 0.998697793962256550, 0.998700343555085190, 0.998702890651162910, 0.998705435250483390, 0.998707977353040290, +0.998710516958827290, 0.998713054067837950, 0.998715588680066050, 0.998718120795505150, 0.998720650414148920, 0.998723177535991050, 0.998725702161025300, 0.998728224289245240, +0.998730743920644650, 0.998733261055217200, 0.998735775692956570, 0.998738287833856540, 0.998740797477910780, 0.998743304625112960, 0.998745809275456970, 0.998748311428936390, +0.998750811085545090, 0.998753308245276750, 0.998755802908125050, 0.998758295074083980, 0.998760784743147110, 0.998763271915308230, 0.998765756590561220, 0.998768238768899860, +0.998770718450317840, 0.998773195634809040, 0.998775670322367250, 0.998778142512986360, 0.998780612206660030, 0.998783079403382180, 0.998785544103146570, 0.998788006305947220, +0.998790466011777790, 0.998792923220632180, 0.998795377932504280, 0.998797830147387990, 0.998800279865277090, 0.998802727086165460, 0.998805171810047020, 0.998807614036915650, +0.998810053766765350, 0.998812490999589800, 0.998814925735383110, 0.998817357974138950, 0.998819787715851560, 0.998822214960514600, 0.998824639708122080, 0.998827061958668110, +0.998829481712146360, 0.998831898968550960, 0.998834313727875790, 0.998836725990114860, 0.998839135755262060, 0.998841543023311410, 0.998843947794257000, 0.998846350068092750, +0.998848749844812530, 0.998851147124410370, 0.998853541906880470, 0.998855934192216630, 0.998858323980412970, 0.998860711271463590, 0.998863096065362390, 0.998865478362103380, +0.998867858161680780, 0.998870235464088490, 0.998872610269320500, 0.998874982577371170, 0.998877352388234270, 0.998879719701904030, 0.998882084518374460, 0.998884446837639770, +0.998886806659693870, 0.998889163984530980, 0.998891518812145110, 0.998893871142530590, 0.998896220975681200, 0.998898568311591410, 0.998900913150255200, 0.998903255491666700, +0.998905595335820020, 0.998907932682709390, 0.998910267532328810, 0.998912599884672740, 0.998914929739735060, 0.998917257097510000, 0.998919581957991910, 0.998921904321174890, +0.998924224187053070, 0.998926541555620660, 0.998928856426871900, 0.998931168800801020, 0.998933478677402120, 0.998935786056669660, 0.998938090938597760, 0.998940393323180520, +0.998942693210412290, 0.998944990600287410, 0.998947285492799990, 0.998949577887944360, 0.998951867785714880, 0.998954155186105640, 0.998956440089111110, 0.998958722494725390, +0.998961002402942830, 0.998963279813757770, 0.998965554727164640, 0.998967827143157460, 0.998970097061730790, 0.998972364482878960, 0.998974629406596090, 0.998976891832876750, +0.998979151761715150, 0.998981409193105630, 0.998983664127042540, 0.998985916563520430, 0.998988166502533410, 0.998990413944076060, 0.998992658888142590, 0.998994901334727570, +0.998997141283825220, 0.998999378735429990, 0.999001613689536440, 0.999003846146138690, 0.999006076105231510, 0.999008303566809030, 0.999010528530865800, 0.999012750997396280, +0.999014970966394800, 0.999017188437856030, 0.999019403411774200, 0.999021615888143870, 0.999023825866959480, 0.999026033348215600, 0.999028238331906570, 0.999030440818026940, +0.999032640806571280, 0.999034838297533920, 0.999037033290909540, 0.999039225786692580, 0.999041415784877480, 0.999043603285458940, 0.999045788288431270, 0.999047970793789260, +0.999050150801527260, 0.999052328311639930, 0.999054503324121710, 0.999056675838967290, 0.999058845856171110, 0.999061013375727840, 0.999063178397632030, 0.999065340921878380, +0.999067500948461310, 0.999069658477375390, 0.999071813508615400, 0.999073966042176020, 0.999076116078051580, 0.999078263616236860, 0.999080408656726430, 0.999082551199515060, +0.999084691244597310, 0.999086828791967750, 0.999088963841621270, 0.999091096393552200, 0.999093226447755560, 0.999095354004225670, 0.999097479062957540, 0.999099601623945620, +0.999101721687184810, 0.999103839252669660, 0.999105954320394840, 0.999108066890355250, 0.999110176962545340, 0.999112284536960100, 0.999114389613594110, 0.999116492192442140, +0.999118592273498970, 0.999120689856759390, 0.999122784942217960, 0.999124877529869560, 0.999126967619709090, 0.999129055211731120, 0.999131140305930530, 0.999133222902302000, +0.999135303000840520, 0.999137380601540780, 0.999139455704397550, 0.999141528309405720, 0.999143598416560090, 0.999145666025855420, 0.999147731137286500, 0.999149793750848340, +0.999151853866535710, 0.999153911484343520, 0.999155966604266420, 0.999158019226299430, 0.999160069350437440, 0.999162116976675230, 0.999164162105007800, 0.999166204735429830, +0.999168244867936540, 0.999170282502522490, 0.999172317639182790, 0.999174350277912240, 0.999176380418705820, 0.999178408061558550, 0.999180433206465100, 0.999182455853420690, +0.999184476002420220, 0.999186493653458350, 0.999188508806530430, 0.999190521461631120, 0.999192531618755540, 0.999194539277898590, 0.999196544439055370, 0.999198547102220780, +0.999200547267389830, 0.999202544934557510, 0.999204540103718730, 0.999206532774868710, 0.999208522948002330, 0.999210510623114610, 0.999212495800200660, 0.999214478479255490, +0.999216458660273980, 0.999218436343251470, 0.999220411528182860, 0.999222384215063150, 0.999224354403887460, 0.999226322094651010, 0.999228287287348690, 0.999230249981975630, +0.999232210178526930, 0.999234167876997810, 0.999236123077383190, 0.999238075779678270, 0.999240025983878180, 0.999241973689978020, 0.999243918897972930, 0.999245861607858000, +0.999247801819628470, 0.999249739533279340, 0.999251674748805940, 0.999253607466203400, 0.999255537685466710, 0.999257465406591330, 0.999259390629572250, 0.999261313354404600, +0.999263233581083710, 0.999265151309604800, 0.999267066539962890, 0.999268979272153410, 0.999270889506171490, 0.999272797242012350, 0.999274702479671210, 0.999276605219143190, +0.999278505460423850, 0.999280403203508080, 0.999282298448391450, 0.999284191195068950, 0.999286081443536030, 0.999287969193787930, 0.999289854445819860, 0.999291737199627160, +0.999293617455205170, 0.999295495212549010, 0.999297370471654230, 0.999299243232515950, 0.999301113495129620, 0.999302981259490570, 0.999304846525593930, 0.999306709293435240, +0.999308569563009730, 0.999310427334312860, 0.999312282607339950, 0.999314135382086240, 0.999315985658547290, 0.999317833436718320, 0.999319678716594770, 0.999321521498171990, +0.999323361781445430, 0.999325199566410530, 0.999327034853062510, 0.999328867641396950, 0.999330697931409270, 0.999332525723094830, 0.999334351016449070, 0.999336173811467440, +0.999337994108145390, 0.999339811906478250, 0.999341627206461690, 0.999343440008091060, 0.999345250311361790, 0.999347058116269450, 0.999348863422809370, 0.999350666230977240, +0.999352466540768370, 0.999354264352178330, 0.999356059665202580, 0.999357852479836880, 0.999359642796076360, 0.999361430613916800, 0.999363215933353640, 0.999364998754382450, +0.999366779076998780, 0.999368556901198190, 0.999370332226976130, 0.999372105054328390, 0.999373875383250180, 0.999375643213737400, 0.999377408545785490, 0.999379171379390140, +0.999380931714546780, 0.999382689551251090, 0.999384444889498620, 0.999386197729285160, 0.999387948070606160, 0.999389695913457280, 0.999391441257834190, 0.999393184103732460, +0.999394924451147750, 0.999396662300075730, 0.999398397650512080, 0.999400130502452470, 0.999401860855892550, 0.999403588710827910, 0.999405314067254300, 0.999407036925167410, +0.999408757284563020, 0.999410475145436570, 0.999412190507784070, 0.999413903371601080, 0.999415613736883260, 0.999417321603626510, 0.999419026971826390, 0.999420729841478670, +0.999422430212579150, 0.999424128085123600, 0.999425823459107690, 0.999427516334527200, 0.999429206711378030, 0.999430894589655730, 0.999432579969356190, 0.999434262850475210, +0.999435943233008660, 0.999437621116952220, 0.999439296502301680, 0.999440969389052910, 0.999442639777201710, 0.999444307666743970, 0.999445973057675460, 0.999447635949991970, +0.999449296343689400, 0.999450954238763620, 0.999452609635210320, 0.999454262533025610, 0.999455912932205260, 0.999457560832745060, 0.999459206234641020, 0.999460849137889020, +0.999462489542484840, 0.999464127448424390, 0.999465762855703650, 0.999467395764318530, 0.999469026174264810, 0.999470654085538700, 0.999472279498135770, 0.999473902412052250, +0.999475522827284020, 0.999477140743826990, 0.999478756161677030, 0.999480369080830160, 0.999481979501282370, 0.999483587423029670, 0.999485192846067960, 0.999486795770393340, +0.999488396196001720, 0.999489994122889080, 0.999491589551051440, 0.999493182480484910, 0.999494772911185380, 0.999496360843148860, 0.999497946276371450, 0.999499529210849280, +0.999501109646578230, 0.999502687583554320, 0.999504263021773750, 0.999505835961232550, 0.999507406401926700, 0.999508974343852440, 0.999510539787005660, 0.999512102731382580, +0.999513663176979210, 0.999515221123791650, 0.999516776571816150, 0.999518329521048580, 0.999519879971485280, 0.999521427923122260, 0.999522973375955640, 0.999524516329981630, +0.999526056785196240, 0.999527594741595800, 0.999529130199176330, 0.999530663157934040, 0.999532193617865160, 0.999533721578965690, 0.999535247041231980, 0.999536770004660120, +0.999538290469246360, 0.999539808434986910, 0.999541323901877890, 0.999542836869915520, 0.999544347339096140, 0.999545855309415860, 0.999547360780870920, 0.999548863753457640, +0.999550364227172140, 0.999551862202010750, 0.999553357677969710, 0.999554850655045240, 0.999556341133233660, 0.999557829112531330, 0.999559314592934340, 0.999560797574439050, +0.999562278057041790, 0.999563756040738770, 0.999565231525526450, 0.999566704511401060, 0.999568174998358820, 0.999569642986396170, 0.999571108475509450, 0.999572571465695000, +0.999574031956949050, 0.999575489949268040, 0.999576945442648300, 0.999578398437086180, 0.999579848932578120, 0.999581296929120340, 0.999582742426709410, 0.999584185425341550, +0.999585625925013320, 0.999587063925720940, 0.999588499427460970, 0.999589932430229760, 0.999591362934023620, 0.999592790938839130, 0.999594216444672720, 0.999595639451520630, +0.999597059959379530, 0.999598477968245860, 0.999599893478115840, 0.999601306488986150, 0.999602717000853240, 0.999604125013713540, 0.999605530527563510, 0.999606933542399600, +0.999608334058218360, 0.999609732075016360, 0.999611127592789920, 0.999612520611535830, 0.999613911131250310, 0.999615299151930040, 0.999616684673571450, 0.999618067696171230, +0.999619448219725930, 0.999620826244231870, 0.999622201769685750, 0.999623574796084210, 0.999624945323423720, 0.999626313351700820, 0.999627678880912090, 0.999629041911054280, +0.999630402442123760, 0.999631760474117280, 0.999633116007031420, 0.999634469040862840, 0.999635819575607990, 0.999637167611263530, 0.999638513147826260, 0.999639856185292610, +0.999641196723659480, 0.999642534762923200, 0.999643870303080660, 0.999645203344128430, 0.999646533886063170, 0.999647861928881660, 0.999649187472580360, 0.999650510517156250, +0.999651831062605690, 0.999653149108925660, 0.999654464656112740, 0.999655777704163690, 0.999657088253075200, 0.999658396302843920, 0.999659701853466750, 0.999661004904940250, +0.999662305457261200, 0.999663603510426490, 0.999664899064432680, 0.999666192119276650, 0.999667482674955200, 0.999668770731464980, 0.999670056288802790, 0.999671339346965500, +0.999672619905949910, 0.999673897965752790, 0.999675173526370920, 0.999676446587800970, 0.999677717150040060, 0.999678985213084850, 0.999680250776932120, 0.999681513841578770, +0.999682774407021580, 0.999684032473257540, 0.999685288040283450, 0.999686541108096070, 0.999687791676692310, 0.999689039746069150, 0.999690285316223390, 0.999691528387151810, +0.999692768958851510, 0.999694007031319280, 0.999695242604552000, 0.999696475678546690, 0.999697706253300120, 0.999698934328809300, 0.999700159905071110, 0.999701382982082550, +0.999702603559840530, 0.999703821638342040, 0.999705037217583970, 0.999706250297563210, 0.999707460878277000, 0.999708668959721990, 0.999709874541895420, 0.999711077624794050, +0.999712278208415130, 0.999713476292755420, 0.999714671877812040, 0.999715864963582000, 0.999717055550062180, 0.999718243637249810, 0.999719429225141900, 0.999720612313735320, +0.999721792903027320, 0.999722970993014770, 0.999724146583694680, 0.999725319675064390, 0.999726490267120680, 0.999727658359860880, 0.999728823953281890, 0.999729987047380810, +0.999731147642154760, 0.999732305737600860, 0.999733461333716100, 0.999734614430497830, 0.999735765027942920, 0.999736913126048620, 0.999738058724812140, 0.999739201824230370, +0.999740342424300650, 0.999741480525020100, 0.999742616126385820, 0.999743749228395040, 0.999744879831044870, 0.999746007934332440, 0.999747133538255060, 0.999748256642809860, +0.999749377247993950, 0.999750495353804670, 0.999751610960239120, 0.999752724067294540, 0.999753834674968140, 0.999754942783257160, 0.999756048392158920, 0.999757151501670440, +0.999758252111789040, 0.999759350222512170, 0.999760445833836830, 0.999761538945760360, 0.999762629558279990, 0.999763717671393160, 0.999764803285096980, 0.999765886399388900, +0.999766967014265930, 0.999768045129725610, 0.999769120745765290, 0.999770193862381970, 0.999771264479573320, 0.999772332597336440, 0.999773398215668800, 0.999774461334567600, +0.999775521954030300, 0.999776580074054120, 0.999777635694636510, 0.999778688815774810, 0.999779739437466450, 0.999780787559708670, 0.999781833182498910, 0.999782876305834620, +0.999783916929713130, 0.999784955054131900, 0.999785990679088240, 0.999787023804579510, 0.999788054430603370, 0.999789082557157040, 0.999790108184237970, 0.999791131311843610, +0.999792151939971510, 0.999793170068619010, 0.999794185697783560, 0.999795198827462590, 0.999796209457653680, 0.999797217588354270, 0.999798223219561800, 0.999799226351273720, +0.999800226983487580, 0.999801225116200950, 0.999802220749411270, 0.999803213883115990, 0.999804204517312670, 0.999805192651998850, 0.999806178287172000, 0.999807161422829770, +0.999808142058969620, 0.999809120195589100, 0.999810095832685760, 0.999811068970257290, 0.999812039608301010, 0.999813007746814700, 0.999813973385795920, 0.999814936525242120, +0.999815897165150960, 0.999816855305520110, 0.999817810946347140, 0.999818764087629600, 0.999819714729365150, 0.999820662871551470, 0.999821608514186110, 0.999822551657266740, +0.999823492300790930, 0.999824430444756440, 0.999825366089160840, 0.999826299234001900, 0.999827229879277190, 0.999828158024984370, 0.999829083671121110, 0.999830006817685190, +0.999830927464674280, 0.999831845612086050, 0.999832761259918160, 0.999833674408168390, 0.999834585056834420, 0.999835493205914030, 0.999836398855404870, 0.999837302005304740, +0.999838202655611300, 0.999839100806322430, 0.999839996457435820, 0.999840889608949120, 0.999841780260860240, 0.999842668413166940, 0.999843554065866890, 0.999844437218958100, +0.999845317872438130, 0.999846196026304870, 0.999847071680556090, 0.999847944835189680, 0.999848815490203320, 0.999849683645595010, 0.999850549301362520, 0.999851412457503530, +0.999852273114016140, 0.999853131270898030, 0.999853986928147090, 0.999854840085761200, 0.999855690743738150, 0.999856538902075930, 0.999857384560772330, 0.999858227719825240, +0.999859068379232660, 0.999859906538992370, 0.999860742199102260, 0.999861575359560330, 0.999862406020364470, 0.999863234181512680, 0.999864059843002640, 0.999864883004832560, +0.999865703667000340, 0.999866521829503750, 0.999867337492340910, 0.999868150655509600, 0.999868961319008040, 0.999869769482834010, 0.999870575146985630, 0.999871378311460780, +0.999872178976257460, 0.999872977141373800, 0.999873772806807560, 0.999874565972556970, 0.999875356638619930, 0.999876144804994540, 0.999876930471678690, 0.999877713638670620, +0.999878494305968200, 0.999879272473569560, 0.999880048141472800, 0.999880821309675820, 0.999881591978176830, 0.999882360146973960, 0.999883125816065090, 0.999883888985448440, +0.999884649655122030, 0.999885407825083950, 0.999886163495332440, 0.999886916665865490, 0.999887667336681220, 0.999888415507777850, 0.999889161179153390, 0.999889904350806050, +0.999890645022733950, 0.999891383194935200, 0.999892118867408030, 0.999892852040150550, 0.999893582713160980, 0.999894310886437430, 0.999895036559978020, 0.999895759733781090, +0.999896480407844850, 0.999897198582167300, 0.999897914256746790, 0.999898627431581420, 0.999899338106669530, 0.999900046282009350, 0.999900751957598980, 0.999901455133436760, +0.999902155809520910, 0.999902853985849660, 0.999903549662421340, 0.999904242839234070, 0.999904933516286180, 0.999905621693576000, 0.999906307371101750, 0.999906990548861780, +0.999907671226854310, 0.999908349405077670, 0.999909025083530080, 0.999909698262209990, 0.999910368941115620, 0.999911037120245430, 0.999911702799597510, 0.999912365979170440, +0.999913026658962420, 0.999913684838971810, 0.999914340519197030, 0.999914993699636320, 0.999915644380288130, 0.999916292561150890, 0.999916938242222940, 0.999917581423502620, +0.999918222104988370, 0.999918860286678530, 0.999919495968571550, 0.999920129150665750, 0.999920759832959800, 0.999921388015451830, 0.999922013698140380, 0.999922636881023900, +0.999923257564100940, 0.999923875747369740, 0.999924491430828840, 0.999925104614476700, 0.999925715298311870, 0.999926323482332680, 0.999926929166537800, 0.999927532350925460, +0.999928133035494330, 0.999928731220242950, 0.999929326905169670, 0.999929920090273040, 0.999930510775551620, 0.999931098961003960, 0.999931684646628630, 0.999932267832423950, +0.999932848518388710, 0.999933426704521230, 0.999934002390820310, 0.999934575577284270, 0.999935146263911890, 0.999935714450701620, 0.999936280137652010, 0.999936843324761740, +0.999937404012029350, 0.999937962199453520, 0.999938517887032700, 0.999939071074765650, 0.999939621762650830, 0.999940169950687020, 0.999940715638872770, 0.999941258827206750, +0.999941799515687510, 0.999942337704313840, 0.999942873393084410, 0.999943406581997650, 0.999943937271052460, 0.999944465460247400, 0.999944991149581130, 0.999945514339052430, +0.999946035028659970, 0.999946553218402310, 0.999947068908278450, 0.999947582098286820, 0.999948092788426220, 0.999948600978695420, 0.999949106669093090, 0.999949609859618000, +0.999950110550268830, 0.999950608741044470, 0.999951104431943570, 0.999951597622964930, 0.999952088314107200, 0.999952576505369390, 0.999953062196750060, 0.999953545388248100, +0.999954026079862280, 0.999954504271591380, 0.999954979963434190, 0.999955453155389580, 0.999955923847456350, 0.999956392039633270, 0.999956857731919220, 0.999957320924313000, +0.999957781616813590, 0.999958239809419670, 0.999958695502130120, 0.999959148694943840, 0.999959599387859720, 0.999960047580876530, 0.999960493273993280, 0.999960936467208740, +0.999961377160521910, 0.999961815353931690, 0.999962251047436860, 0.999962684241036400, 0.999963114934729220, 0.999963543128514320, 0.999963968822390580, 0.999964392016356780, +0.999964812710412150, 0.999965230904555470, 0.999965646598785620, 0.999966059793101710, 0.999966470487502650, 0.999966878681987410, 0.999967284376554910, 0.999967687571204240, +0.999968088265934420, 0.999968486460744320, 0.999968882155633070, 0.999969275350599540, 0.999969666045642860, 0.999970054240762020, 0.999970439935956020, 0.999970823131223870, +0.999971203826564680, 0.999971582021977560, 0.999971957717461500, 0.999972330913015410, 0.999972701608638600, 0.999973069804329980, 0.999973435500088770, 0.999973798695913850, +0.999974159391804560, 0.999974517587759790, 0.999974873283778760, 0.999975226479860590, 0.999975577176004270, 0.999975925372209030, 0.999976271068473980, 0.999976614264798220, +0.999976954961181000, 0.999977293157621410, 0.999977628854118450, 0.999977962050671580, 0.999978292747279670, 0.999978620943942080, 0.999978946640658010, 0.999979269837426470, +0.999979590534246790, 0.999979908731118080, 0.999980224428039690, 0.999980537625010710, 0.999980848322030380, 0.999981156519097910, 0.999981462216212650, 0.999981765413373580, +0.999982066110580270, 0.999982364307831610, 0.999982660005127140, 0.999982953202466000, 0.999983243899847500, 0.999983532097270870, 0.999983817794735440, 0.999984100992240440, +0.999984381689785210, 0.999984659887369070, 0.999984935584991130, 0.999985208782650960, 0.999985479480347770, 0.999985747678080910, 0.999986013375849580, 0.999986276573653240, +0.999986537271491230, 0.999986795469362980, 0.999987051167267600, 0.999987304365204670, 0.999987555063173380, 0.999987803261173310, 0.999988048959203680, 0.999988292157263920, +0.999988532855353500, 0.999988771053471730, 0.999989006751617950, 0.999989239949791720, 0.999989470647992370, 0.999989698846219350, 0.999989924544472110, 0.999990147742750080, +0.999990368441052600, 0.999990586639379230, 0.999990802337729410, 0.999991015536102590, 0.999991226234498210, 0.999991434432915720, 0.999991640131354780, 0.999991843329814610, +0.999992044028294890, 0.999992242226795060, 0.999992437925314560, 0.999992631123853060, 0.999992821822409890, 0.999993010020984730, 0.999993195719577120, 0.999993378918186400, +0.999993559616812240, 0.999993737815454200, 0.999993913514111820, 0.999994086712784670, 0.999994257411472300, 0.999994425610174260, 0.999994591308890230, 0.999994754507619650, +0.999994915206362190, 0.999995073405117510, 0.999995229103885050, 0.999995382302664600, 0.999995533001455610, 0.999995681200257840, 0.999995826899070850, 0.999995970097894320, +0.999996110796727900, 0.999996248995571160, 0.999996384694423760, 0.999996517893285470, 0.999996648592155870, 0.999996776791034600, 0.999996902489921460, 0.999997025688815990, +0.999997146387717970, 0.999997264586627080, 0.999997380285543080, 0.999997493484465540, 0.999997604183394340, 0.999997712382329150, 0.999997818081269640, 0.999997921280215580, +0.999998021979166760, 0.999998120178122840, 0.999998215877083600, 0.999998309076048920, 0.999998399775018370, 0.999998487973991820, 0.999998573672969180, 0.999998656871950000, +0.999998737570934160, 0.999998815769921560, 0.999998891468911850, 0.999998964667904940, 0.999999035366900600, 0.999999103565898610, 0.999999169264898960, 0.999999232463901320, +0.999999293162905700, 0.999999351361911760, 0.999999407060919500, 0.999999460259928700, 0.999999510958939240, 0.999999559157951020, 0.999999604856963820, 0.999999648055977740, +0.999999688754992460, 0.999999726954007960, 0.999999762653024150, 0.999999795852040910, 0.999999826551058240, 0.999999854750076020, 0.999999880449094050, 0.999999903648112530, +0.999999924347131140, 0.999999942546149990, 0.999999958245168960, 0.999999971444187950, 0.999999982143207180, 0.999999990342226310, 0.999999996041245560, 0.999999999240264840, +0.999999999939284010, 0.999999998138303310, 0.999999993837322520, 0.999999987036341740, 0.999999977735361090, 0.999999965934380450, 0.999999951633399830, 0.999999934832419330, +0.999999915531439080, 0.999999893730459060, 0.999999869429479270, 0.999999842628499720, 0.999999813327520640, 0.999999781526542010, 0.999999747225563950, 0.999999710424586570, +0.999999671123609770, 0.999999629322633980, 0.999999585021658980, 0.999999538220684990, 0.999999488919712240, 0.999999437118740730, 0.999999382817770680, 0.999999326016802190, +0.999999266715835280, 0.999999204914870270, 0.999999140613907270, 0.999999073812946390, 0.999999004511987750, 0.999998932711031690, 0.999998858410078300, 0.999998781609127700, +0.999998702308180220, 0.999998620507235980, 0.999998536206295090, 0.999998449405357980, 0.999998360104424670, 0.999998268303495470, 0.999998174002570630, 0.999998077201650350, +0.999997977900734860, 0.999997876099824490, 0.999997771798919350, 0.999997664998019790, 0.999997555697126120, 0.999997443896238570, 0.999997329595357360, 0.999997212794482840, +0.999997093493615210, 0.999996971692754920, 0.999996847391902310, 0.999996720591057380, 0.999996591290220780, 0.999996459489392640, 0.999996325188573400, 0.999996188387763390, +0.999996049086962820, 0.999995907286172160, 0.999995762985391720, 0.999995616184621850, 0.999995466883862980, 0.999995315083115450, 0.999995160782379600, 0.999995003981655860, +0.999994844680944570, 0.999994682880246290, 0.999994518579561230, 0.999994351778889850, 0.999994182478232570, 0.999994010677589860, 0.999993836376962150, 0.999993659576349890, +0.999993480275753410, 0.999993298475173260, 0.999993114174609790, 0.999992927374063640, 0.999992738073535170, 0.999992546273024810, 0.999992351972533110, 0.999992155172060530, +0.999991955871607500, 0.999991754071174580, 0.999991549770762320, 0.999991342970371180, 0.999991133670001700, 0.999990921869654440, 0.999990707569329840, 0.999990490769028350, +0.999990271468750750, 0.999990049668497470, 0.999989825368269080, 0.999989598568066020, 0.999989369267889060, 0.999989137467738650, 0.999988903167615460, 0.999988666367519930, +0.999988427067452720, 0.999988185267414510, 0.999987940967405840, 0.999987694167427280, 0.999987444867479480, 0.999987193067563120, 0.999986938767678750, 0.999986681967826920, +0.999986422668008520, 0.999986160868224010, 0.999985896568474140, 0.999985629768759490, 0.999985360469080820, 0.999985088669438690, 0.999984814369833890, 0.999984537570267060, +0.999984258270738780, 0.999983976471249920, 0.999983692171801160, 0.999983405372393160, 0.999983116073026590, 0.999982824273702330, 0.999982529974420940, 0.999982233175183200, +0.999981933875989880, 0.999981632076841760, 0.999981327777739630, 0.999981020978684020, 0.999980711679675950, 0.999980399880716190, 0.999980085581805290, 0.999979768782944260, +0.999979449484133750, 0.999979127685374560, 0.999978803386667670, 0.999978476588013750, 0.999978147289413590, 0.999977815490868170, 0.999977481192378060, 0.999977144393944360, +0.999976805095567740, 0.999976463297249100, 0.999976118998989420, 0.999975772200789260, 0.999975422902649850, 0.999975071104571730, 0.999974716806556030, 0.999974360008603510, +0.999974000710715070, 0.999973638912891700, 0.999973274615134190, 0.999972907817443410, 0.999972538519820490, 0.999972166722266190, 0.999971792424781400, 0.999971415627367240, +0.999971036330024490, 0.999970654532754130, 0.999970270235557180, 0.999969883438434510, 0.999969494141387140, 0.999969102344416050, 0.999968708047522140, 0.999968311250706510, +0.999967911953970170, 0.999967510157314000, 0.999967105860739000, 0.999966699064246290, 0.999966289767836860, 0.999965877971511600, 0.999965463675271730, 0.999965046879118250, +0.999964627583052050, 0.999964205787074350, 0.999963781491186030, 0.999963354695388440, 0.999962925399682350, 0.999962493604068970, 0.999962059308549310, 0.999961622513124480, +0.999961183217795700, 0.999960741422563860, 0.999960297127430290, 0.999959850332395870, 0.999959401037461840, 0.999958949242629290, 0.999958494947899460, 0.999958038153273330, +0.999957578858752140, 0.999957117064336990, 0.999956652770028990, 0.999956185975829470, 0.999955716681739330, 0.999955244887760000, 0.999954770593892590, 0.999954293800138230, +0.999953814506498120, 0.999953332712973490, 0.999952848419565440, 0.999952361626275320, 0.999951872333104340, 0.999951380540053610, 0.999950886247124470, 0.999950389454318130, +0.999949890161635820, 0.999949388369078760, 0.999948884076648280, 0.999948377284345600, 0.999947867992171830, 0.999947356200128530, 0.999946841908216810, 0.999946325116438000, +0.999945805824793310, 0.999945284033284200, 0.999944759741911770, 0.999944232950677580, 0.999943703659582630, 0.999943171868628580, 0.999942637577816540, 0.999942100787147850, +0.999941561496624050, 0.999941019706246270, 0.999940475416015940, 0.999939928625934390, 0.999939379336002960, 0.999938827546223210, 0.999938273256596340, 0.999937716467123820, +0.999937157177806960, 0.999936595388647210, 0.999936031099646020, 0.999935464310804710, 0.999934895022124850, 0.999934323233607650, 0.999933748945254660, 0.999933172157067230, +0.999932592869046900, 0.999932011081195120, 0.999931426793513320, 0.999930840006002960, 0.999930250718665480, 0.999929658931502430, 0.999929064644515140, 0.999928467857705280, +0.999927868571074190, 0.999927266784623400, 0.999926662498354490, 0.999926055712268890, 0.999925446426368270, 0.999924834640653960, 0.999924220355127510, 0.999923603569790490, +0.999922984284644540, 0.999922362499691130, 0.999921738214931800, 0.999921111430368100, 0.999920482146001710, 0.999919850361833950, 0.999919216077866710, 0.999918579294101440, +0.999917940010539570, 0.999917298227183000, 0.999916653944033060, 0.999916007161091640, 0.999915357878360060, 0.999914706095840210, 0.999914051813533540, 0.999913395031441720, +0.999912735749566410, 0.999912073967909270, 0.999911409686471960, 0.999910742905256060, 0.999910073624263430, 0.999909401843495530, 0.999908727562954120, 0.999908050782640890, +0.999907371502557600, 0.999906689722705800, 0.999906005443087280, 0.999905318663703800, 0.999904629384557040, 0.999903937605648660, 0.999903243326980440, 0.999902546548554150, +0.999901847270371460, 0.999901145492434140, 0.999900441214743970, 0.999899734437302730, 0.999899025160112090, 0.999898313383173920, 0.999897599106490010, 0.999896882330062020, +0.999896163053891950, 0.999895441277981360, 0.999894717002332230, 0.999893990226946250, 0.999893260951825290, 0.999892529176971250, 0.999891794902385780, 0.999891058128070890, +0.999890318854028350, 0.999889577080260050, 0.999888832806767770, 0.999888086033553390, 0.999887336760618920, 0.999886584987966010, 0.999885830715596560, 0.999885073943512670, +0.999884314671716010, 0.999883552900208580, 0.999882788628992270, 0.999882021858069070, 0.999881252587440650, 0.999880480817109230, 0.999879706547076590, 0.999878929777344600, +0.999878150507915400, 0.999877368738790740, 0.999876584469972740, 0.999875797701463180, 0.999875008433264270, 0.999874216665377680, 0.999873422397805630, 0.999872625630550020, +0.999871826363612830, 0.999871024596996060, 0.999870220330701830, 0.999869413564731910, 0.999868604299088530, 0.999867792533773670, 0.999866978268789230, 0.999866161504137430, +0.999865342239820270, 0.999864520475839620, 0.999863696212197730, 0.999862869448896570, 0.999862040185938270, 0.999861208423324930, 0.999860374161058550, 0.999859537399141130, +0.999858698137575000, 0.999857856376362040, 0.999857012115504480, 0.999856165355004320, 0.999855316094863780, 0.999854464335084960, 0.999853610075669970, 0.999852753316621050, +0.999851894057940170, 0.999851032299629460, 0.999850168041691360, 0.999849301284127740, 0.999848432026940850, 0.999847560270132880, 0.999846686013705970, 0.999845809257662420, +0.999844930002004360, 0.999844048246734010, 0.999843163991853470, 0.999842277237364960, 0.999841387983270820, 0.999840496229573270, 0.999839601976274420, 0.999838705223376590, +0.999837805970882010, 0.999836904218792790, 0.999835999967111480, 0.999835093215840080, 0.999834183964980920, 0.999833272214536330, 0.999832357964508640, 0.999831441214899970, +0.999830521965712760, 0.999829600216949220, 0.999828675968611580, 0.999827749220702390, 0.999826819973223760, 0.999825888226178020, 0.999824953979567720, 0.999824017233394870, +0.999823077987662120, 0.999822136242371600, 0.999821191997525730, 0.999820245253126960, 0.999819296009177520, 0.999818344265679840, 0.999817390022636250, 0.999816433280049210, +0.999815474037921150, 0.999814512296254400, 0.999813548055051290, 0.999812581314314390, 0.999811612074046010, 0.999810640334248600, 0.999809666094924500, 0.999808689356076360, +0.999807710117706420, 0.999806728379817320, 0.999805744142411300, 0.999804757405490910, 0.999803768169058690, 0.999802776433116990, 0.999801782197668350, 0.999800785462715340, +0.999799786228260270, 0.999798784494305810, 0.999797780260854310, 0.999796773527908410, 0.999795764295470570, 0.999794752563543330, 0.999793738332129260, 0.999792721601230780, +0.999791702370850470, 0.999790680640990970, 0.999789656411654740, 0.999788629682844320, 0.999787600454562390, 0.999786568726811380, 0.999785534499594060, 0.999784497772912890, +0.999783458546770420, 0.999782416821169310, 0.999781372596112110, 0.999780325871601590, 0.999779276647640210, 0.999778224924230630, 0.999777170701375510, 0.999776113979077400, +0.999775054757339080, 0.999773993036163100, 0.999772928815552130, 0.999771862095508830, 0.999770792876035870, 0.999769721157136030, 0.999768646938811730, 0.999767570221065880, +0.999766491003901140, 0.999765409287320160, 0.999764325071325620, 0.999763238355920290, 0.999762149141106840, 0.999761057426888140, 0.999759963213266660, 0.999758866500245260, +0.999757767287826840, 0.999756665576013840, 0.999755561364809250, 0.999754454654215750, 0.999753345444236110, 0.999752233734873100, 0.999751119526129610, 0.999750002818008190, +0.999748883610511840, 0.999747761903643230, 0.999746637697405240, 0.999745510991800650, 0.999744381786832230, 0.999743250082502980, 0.999742115878815450, 0.999740979175772760, +0.999739839973377560, 0.999738698271632750, 0.999737554070541210, 0.999736407370105830, 0.999735258170329380, 0.999734106471214860, 0.999732952272764930, 0.999731795574982820, +0.999730636377871070, 0.999729474681432690, 0.999728310485670790, 0.999727143790588020, 0.999725974596187390, 0.999724802902471790, 0.999723628709444310, 0.999722452017107630, +0.999721272825464860, 0.999720091134518870, 0.999718906944272680, 0.999717720254729270, 0.999716531065891530, 0.999715339377762470, 0.999714145190345070, 0.999712948503642230, +0.999711749317657160, 0.999710547632392640, 0.999709343447851780, 0.999708136764037470, 0.999706927580952920, 0.999705715898601020, 0.999704501716984770, 0.999703285036107280, +0.999702065855971660, 0.999700844176580890, 0.999699619997937880, 0.999698393320045950, 0.999697164142907990, 0.999695932466527100, 0.999694698290906400, 0.999693461616048880, +0.999692222441957770, 0.999690980768636160, 0.999689736596087060, 0.999688489924313580, 0.999687240753318940, 0.999685989083106130, 0.999684734913678370, 0.999683478245038780, +0.999682219077190460, 0.999680957410136630, 0.999679693243880400, 0.999678426578424980, 0.999677157413773390, 0.999675885749929050, 0.999674611586894860, 0.999673334924674250, +0.999672055763270230, 0.999670774102686120, 0.999669489942925040, 0.999668203283990200, 0.999666914125884930, 0.999665622468612350, 0.999664328312175670, 0.999663031656578220, +0.999661732501823220, 0.999660430847913780, 0.999659126694853350, 0.999657820042645140, 0.999656510891292260, 0.999655199240798150, 0.999653885091166040, 0.999652568442399250, +0.999651249294501110, 0.999649927647474730, 0.999648603501323560, 0.999647276856050930, 0.999645947711660040, 0.999644616068154250, 0.999643281925536980, 0.999641945283811560, +0.999640606142981230, 0.999639264503049300, 0.999637920364019330, 0.999636573725894540, 0.999635224588678260, 0.999633872952373940, 0.999632518816985010, 0.999631162182514690, +0.999629803048966540, 0.999628441416343770, 0.999627077284649950, 0.999625710653888500, 0.999624341524062650, 0.999622969895176070, 0.999621595767232090, 0.999620219140234020, +0.999618840014185440, 0.999617458389089770, 0.999616074264950360, 0.999614687641770860, 0.999613298519554610, 0.999611906898305150, 0.999610512778025930, 0.999609116158720390, +0.999607717040392090, 0.999606315423044460, 0.999604911306681050, 0.999603504691305430, 0.999602095576920920, 0.999600683963531300, 0.999599269851139890, 0.999597853239750370, +0.999596434129366160, 0.999595012519990830, 0.999593588411628040, 0.999592161804281230, 0.999590732697954070, 0.999589301092650100, 0.999587866988372880, 0.999586430385125850, +0.999584991282912890, 0.999583549681737460, 0.999582105581602990, 0.999580658982513360, 0.999579209884472130, 0.999577758287482850, 0.999576304191549190, 0.999574847596674700, +0.999573388502863150, 0.999571926910118090, 0.999570462818443200, 0.999568996227842230, 0.999567527138318760, 0.999566055549876430, 0.999564581462518920, 0.999563104876250110, +0.999561625791073440, 0.999560144206992680, 0.999558660124011510, 0.999557173542133800, 0.999555684461363110, 0.999554192881703220, 0.999552698803157890, 0.999551202225730790, +0.999549703149425590, 0.999548201574246290, 0.999546697500196310, 0.999545190927279780, 0.999543681855500130, 0.999542170284861360, 0.999540656215367140, 0.999539139647021240, +0.999537620579827530, 0.999536099013789700, 0.999534574948911740, 0.999533048385197300, 0.999531519322650160, 0.999529987761274330, 0.999528453701073460, 0.999526917142051440, +0.999525378084212270, 0.999523836527559490, 0.999522292472097230, 0.999520745917829130, 0.999519196864759210, 0.999517645312891330, 0.999516091262229400, 0.999514534712777180, +0.999512975664538560, 0.999511414117517540, 0.999509850071718000, 0.999508283527143830, 0.999506714483799020, 0.999505142941687350, 0.999503568900812820, 0.999501992361179430, +0.999500413322790940, 0.999498831785651460, 0.999497247749765010, 0.999495661215135330, 0.999494072181766560, 0.999492480649662560, 0.999490886618827350, 0.999489290089264900, +0.999487691060979340, 0.999486089533974440, 0.999484485508254420, 0.999482878983823150, 0.999481269960684650, 0.999479658438843010, 0.999478044418302130, 0.999476427899066210, +0.999474808881139270, 0.999473187364525280, 0.999471563349228260, 0.999469936835252430, 0.999468307822601650, 0.999466676311280170, 0.999465042301291960, 0.999463405792641150, +0.999461766785331940, 0.999460125279368230, 0.999458481274754120, 0.999456834771493940, 0.999455185769591580, 0.999453534269051370, 0.999451880269877190, 0.999450223772073380, +0.999448564775644030, 0.999446903280593270, 0.999445239286925190, 0.999443572794644020, 0.999441903803753970, 0.999440232314259160, 0.999438558326163680, 0.999436881839471880, +0.999435202854187850, 0.999433521370315820, 0.999431837387860010, 0.999430150906824630, 0.999428461927213800, 0.999426770449031830, 0.999425076472282960, 0.999423379996971390, +0.999421681023101360, 0.999419979550677180, 0.999418275579703090, 0.999416569110183170, 0.999414860142121890, 0.999413148675523440, 0.999411434710392180, 0.999409718246732300, +0.999407999284548150, 0.999406277823843950, 0.999404553864624120, 0.999402827406892790, 0.999401098450654500, 0.999399366995913470, 0.999397633042673930, 0.999395896590940410, +0.999394157640717040, 0.999392416192008360, 0.999390672244818590, 0.999388925799152170, 0.999387176855013440, 0.999385425412406820, 0.999383671471336550, 0.999381915031807180, +0.999380156093822910, 0.999378394657388310, 0.999376630722507820, 0.999374864289185650, 0.999373095357426240, 0.999371323927234270, 0.999369549998613830, 0.999367773571569580, +0.999365994646105980, 0.999364213222227350, 0.999362429299938130, 0.999360642879242870, 0.999358853960146010, 0.999357062542652000, 0.999355268626765270, 0.999353472212490490, +0.999351673299831990, 0.999349871888794320, 0.999348067979381920, 0.999346261571599340, 0.999344452665451130, 0.999342641260941860, 0.999340827358075940, 0.999339010956857950, +0.999337192057292430, 0.999335370659383940, 0.999333546763137020, 0.999331720368556110, 0.999329891475646100, 0.999328060084411220, 0.999326226194856230, 0.999324389806985680, +0.999322550920804240, 0.999320709536316350, 0.999318865653526680, 0.999317019272439770, 0.999315170393060390, 0.999313319015393110, 0.999311465139442580, 0.999309608765213350, +0.999307749892709980, 0.999305888521937360, 0.999304024652899910, 0.999302158285602540, 0.999300289420049670, 0.999298418056246200, 0.999296544194196560, 0.999294667833905640, +0.999292788975377990, 0.999290907618618380, 0.999289023763631490, 0.999287137410422080, 0.999285248558994810, 0.999283357209354350, 0.999281463361505580, 0.999279567015453170, +0.999277668171201780, 0.999275766828756300, 0.999273862988121380, 0.999271956649301680, 0.999270047812302220, 0.999268136477127640, 0.999266222643782620, 0.999264306312272140, +0.999262387482600880, 0.999260466154773600, 0.999258542328795190, 0.999256616004670420, 0.999254687182404180, 0.999252755862001130, 0.999250822043466270, 0.999248885726804260, +0.999246946912020100, 0.999245005599118550, 0.999243061788104510, 0.999241115478982760, 0.999239166671758270, 0.999237215366435840, 0.999235261563020450, 0.999233305261516770, +0.999231346461929900, 0.999229385164264630, 0.999227421368525940, 0.999225455074718720, 0.999223486282847850, 0.999221514992918220, 0.999219541204934840, 0.999217564918902570, +0.999215586134826420, 0.999213604852711270, 0.999211621072562230, 0.999209634794383960, 0.999207646018181790, 0.999205654743960390, 0.999203660971724860, 0.999201664701480200, +0.999199665933231280, 0.999197664666983340, 0.999195660902741150, 0.999193654640509910, 0.999191645880294410, 0.999189634622099860, 0.999187620865931270, 0.999185604611793510, +0.999183585859691800, 0.999181564609631150, 0.999179540861616530, 0.999177514615653070, 0.999175485871745870, 0.999173454629899930, 0.999171420890120340, 0.999169384652412230, +0.999167345916780690, 0.999165304683230730, 0.999163260951767440, 0.999161214722396160, 0.999159165995121780, 0.999157114769949390, 0.999155061046884340, 0.999153004825931500, +0.999150946107096320, 0.999148884890383670, 0.999146821175798780, 0.999144754963346980, 0.999142686253033150, 0.999140615044862620, 0.999138541338840610, 0.999136465134972230, +0.999134386433262690, 0.999132305233717210, 0.999130221536340900, 0.999128135341139090, 0.999126046648116880, 0.999123955457279610, 0.999121861768632380, 0.999119765582180630, +0.999117666897929360, 0.999115565715884000, 0.999113462036049670, 0.999111355858431690, 0.999109247183035290, 0.999107136009865780, 0.999105022338928510, 0.999102906170228680, +0.999100787503771510, 0.999098666339562350, 0.999096542677606610, 0.999094416517909530, 0.999092287860476320, 0.999090156705312430, 0.999088023052423170, 0.999085886901813770, +0.999083748253489780, 0.999081607107456300, 0.999079463463718900, 0.999077317322282780, 0.999075168683153380, 0.999073017546336040, 0.999070863911836190, 0.999068707779659170, +0.999066549149810410, 0.999064388022295250, 0.999062224397119110, 0.999060058274287450, 0.999057889653805600, 0.999055718535679090, 0.999053544919913160, 0.999051368806513460, +0.999049190195485330, 0.999047009086834300, 0.999044825480565610, 0.999042639376684920, 0.999040450775197650, 0.999038259676109150, 0.999036066079425080, 0.999033869985150870, +0.999031671393291960, 0.999029470303853920, 0.999027266716842170, 0.999025060632262150, 0.999022852050119650, 0.999020640970419870, 0.999018427393168600, 0.999016211318371260, +0.999013992746033310, 0.999011771676160510, 0.999009548108758190, 0.999007322043831910, 0.999005093481387440, 0.999002862421430220, 0.999000628863965900, 0.998998392808999940, +0.998996154256537980, 0.998993913206585700, 0.998991669659148540, 0.998989423614232260, 0.998987175071842430, 0.998984924031984690, 0.998982670494664600, 0.998980414459887830, +0.998978155927660040, 0.998975894897986880, 0.998973631370873920, 0.998971365346326910, 0.998969096824351530, 0.998966825804953440, 0.998964552288138190, 0.998962276273911650, +0.998959997762279280, 0.998957716753247070, 0.998955433246820460, 0.998953147243005320, 0.998950858741807330, 0.998948567743232150, 0.998946274247285550, 0.998943978253973300, +0.998941679763301060, 0.998939378775274610, 0.998937075289899830, 0.998934769307182280, 0.998932460827127830, 0.998930149849742150, 0.998927836375031130, 0.998925520403000640, +0.998923201933656250, 0.998920880967003820, 0.998918557503049250, 0.998916231541798210, 0.998913903083256670, 0.998911572127430310, 0.998909238674325130, 0.998906902723946780, +0.998904564276301140, 0.998902223331394110, 0.998899879889231570, 0.998897533949819280, 0.998895185513163140, 0.998892834579269140, 0.998890481148142940, 0.998888125219790650, +0.998885766794217920, 0.998883405871430870, 0.998881042451435270, 0.998878676534237010, 0.998876308119842180, 0.998873937208256460, 0.998871563799486050, 0.998869187893536630, +0.998866809490414180, 0.998864428590124810, 0.998862045192674300, 0.998859659298068750, 0.998857270906313930, 0.998854880017416070, 0.998852486631380930, 0.998850090748214630, +0.998847692367923030, 0.998845291490512270, 0.998842888115988200, 0.998840482244356950, 0.998838073875624510, 0.998835663009796980, 0.998833249646880140, 0.998830833786880200, +0.998828415429803270, 0.998825994575655240, 0.998823571224442210, 0.998821145376170280, 0.998818717030845460, 0.998816286188473850, 0.998813852849061550, 0.998811417012614560, +0.998808978679139090, 0.998806537848641150, 0.998804094521126840, 0.998801648696602370, 0.998799200375073750, 0.998796749556547180, 0.998794296241028560, 0.998791840428524310, +0.998789382119040450, 0.998786921312583180, 0.998784458009158600, 0.998781992208772840, 0.998779523911432100, 0.998777053117142600, 0.998774579825910340, 0.998772104037741750, +0.998769625752642940, 0.998767144970619910, 0.998764661691679210, 0.998762175915826720, 0.998759687643068770, 0.998757196873411690, 0.998754703606861580, 0.998752207843424670, +0.998749709583107270, 0.998747208825915610, 0.998744705571856020, 0.998742199820934600, 0.998739691573157560, 0.998737180828531360, 0.998734667587062310, 0.998732151848756520, +0.998729633613620330, 0.998727112881660050, 0.998724589652882020, 0.998722063927292570, 0.998719535704897910, 0.998717004985704370, 0.998714471769718280, 0.998711936056946080, +0.998709397847394100, 0.998706857141068550, 0.998704313937975870, 0.998701768238122400, 0.998699220041514570, 0.998696669348158590, 0.998694116158061030, 0.998691560471228090, +0.998689002287666330, 0.998686441607382070, 0.998683878430381640, 0.998681312756671490, 0.998678744586258160, 0.998676173919147870, 0.998673600755347170, 0.998671025094862500, +0.998668446937700290, 0.998665866283867000, 0.998663283133368940, 0.998660697486212780, 0.998658109342404730, 0.998655518701951460, 0.998652925564859410, 0.998650329931135120, +0.998647731800784920, 0.998645131173815480, 0.998642528050233120, 0.998639922430044400, 0.998637314313255970, 0.998634703699874170, 0.998632090589905760, 0.998629474983356970, +0.998626856880234560, 0.998624236280545090, 0.998621613184294880, 0.998618987591490700, 0.998616359502139010, 0.998613728916246560, 0.998611095833819680, 0.998608460254865050, +0.998605822179389310, 0.998603181607399030, 0.998600538538900740, 0.998597892973901110, 0.998595244912406700, 0.998592594354424270, 0.998589941299960370, 0.998587285749021560, +0.998584627701614600, 0.998581967157745940, 0.998579304117422460, 0.998576638580650710, 0.998573970547437350, 0.998571300017789150, 0.998568626991712560, 0.998565951469214450, +0.998563273450301490, 0.998560592934980340, 0.998557909923257770, 0.998555224415140330, 0.998552536410634790, 0.998549845909748050, 0.998547152912486640, 0.998544457418857330, +0.998541759428866920, 0.998539058942522040, 0.998536355959829480, 0.998533650480796120, 0.998530942505428620, 0.998528232033733750, 0.998525519065718290, 0.998522803601389120, +0.998520085640752900, 0.998517365183816400, 0.998514642230586500, 0.998511916781069990, 0.998509188835273730, 0.998506458393204510, 0.998503725454869100, 0.998500990020274480, +0.998498252089427220, 0.998495511662334410, 0.998492768739002830, 0.998490023319439370, 0.998487275403650790, 0.998484524991643970, 0.998481772083425920, 0.998479016679003520, +0.998476258778383420, 0.998473498381572730, 0.998470735488578340, 0.998467970099407020, 0.998465202214065870, 0.998462431832561670, 0.998459658954901410, 0.998456883581091970, +0.998454105711140350, 0.998451325345053430, 0.998448542482838210, 0.998445757124501680, 0.998442969270050720, 0.998440178919492330, 0.998437386072833500, 0.998434590730081230, +0.998431792891242510, 0.998428992556324220, 0.998426189725333480, 0.998423384398277270, 0.998420576575162700, 0.998417766255996540, 0.998414953440786010, 0.998412138129538110, +0.998409320322259820, 0.998406500018958360, 0.998403677219640520, 0.998400851924313600, 0.998398024132984400, 0.998395193845660330, 0.998392361062348080, 0.998389525783055070, +0.998386688007788180, 0.998383847736554530, 0.998381004969361330, 0.998378159706215680, 0.998375311947124480, 0.998372461692095150, 0.998369608941134470, 0.998366753694249990, +0.998363895951448480, 0.998361035712737270, 0.998358172978123460, 0.998355307747614270, 0.998352440021216810, 0.998349569798938190, 0.998346697080785610, 0.998343821866766400, +0.998340944156887570, 0.998338063951156430, 0.998335181249580090, 0.998332296052165780, 0.998329408358920810, 0.998326518169852290, 0.998323625484967340, 0.998320730304273480, +0.998317832627777730, 0.998314932455487410, 0.998312029787409850, 0.998309124623552150, 0.998306216963921630, 0.998303306808525530, 0.998300394157371150, 0.998297479010465840, +0.998294561367816800, 0.998291641229431480, 0.998288718595316870, 0.998285793465480630, 0.998282865839929870, 0.998279935718671800, 0.998277003101713970, 0.998274067989063710, +0.998271130380728230, 0.998268190276714980, 0.998265247677031180, 0.998262302581684250, 0.998259354990681640, 0.998256404904030560, 0.998253452321738450, 0.998250497243812870, +0.998247539670260920, 0.998244579601090140, 0.998241617036307870, 0.998238651975921650, 0.998235684419938710, 0.998232714368366580, 0.998229741821212710, 0.998226766778484540, +0.998223789240189400, 0.998220809206334710, 0.998217826676928040, 0.998214841651976830, 0.998211854131488500, 0.998208864115470500, 0.998205871603930370, 0.998202876596875680, +0.998199879094313620, 0.998196879096251990, 0.998193876602698090, 0.998190871613659490, 0.998187864129143730, 0.998184854149158360, 0.998181841673710820, 0.998178826702808660, +0.998175809236459430, 0.998172789274670680, 0.998169766817449950, 0.998166741864804810, 0.998163714416742790, 0.998160684473271550, 0.998157652034398550, 0.998154617100131540, +0.998151579670477850, 0.998148539745445260, 0.998145497325041320, 0.998142452409273570, 0.998139404998149790, 0.998136355091677420, 0.998133302689864220, 0.998130247792717750, +0.998127190400245670, 0.998124130512455630, 0.998121068129355080, 0.998118003250952120, 0.998114935877253970, 0.998111866008268620, 0.998108793644003510, 0.998105718784466520, +0.998102641429665090, 0.998099561579607110, 0.998096479234300230, 0.998093394393752220, 0.998090307057970640, 0.998087217226963360, 0.998084124900737950, 0.998081030079302380, +0.998077932762664100, 0.998074832950830990, 0.998071730643810830, 0.998068625841611380, 0.998065518544240300, 0.998062408751705490, 0.998059296464014590, 0.998056181681175490, +0.998053064403195970, 0.998049944630083670, 0.998046822361846610, 0.998043697598492430, 0.998040570340029130, 0.998037440586464260, 0.998034308337805930, 0.998031173594061680, +0.998028036355239620, 0.998024896621347410, 0.998021754392392930, 0.998018609668384070, 0.998015462449328820, 0.998012312735234830, 0.998009160526110000, 0.998006005821962310, +0.998002848622799530, 0.997999688928629780, 0.997996526739460710, 0.997993362055300310, 0.997990194876156590, 0.997987025202037300, 0.997983853032950560, 0.997980678368904140, +0.997977501209905920, 0.997974321555963990, 0.997971139407086370, 0.997967954763280820, 0.997964767624555330, 0.997961577990918000, 0.997958385862376730, 0.997955191238939500, +0.997951994120614190, 0.997948794507409030, 0.997945592399331780, 0.997942387796390550, 0.997939180698593440, 0.997935971105948340, 0.997932759018463340, 0.997929544436146340, +0.997926327359005550, 0.997923107787048960, 0.997919885720284560, 0.997916661158720460, 0.997913434102364770, 0.997910204551225370, 0.997906972505310570, 0.997903737964628280, +0.997900500929186700, 0.997897261398993820, 0.997894019374057750, 0.997890774854386710, 0.997887527839988690, 0.997884278330871900, 0.997881026327044340, 0.997877771828514230, +0.997874514835289770, 0.997871255347378970, 0.997867993364790040, 0.997864728887531080, 0.997861461915610310, 0.997858192449035950, 0.997854920487815990, 0.997851646031958860, +0.997848369081472560, 0.997845089636365310, 0.997841807696645430, 0.997838523262320920, 0.997835236333400210, 0.997831946909891410, 0.997828654991802620, 0.997825360579142170, +0.997822063671918500, 0.997818764270139600, 0.997815462373813690, 0.997812157982949310, 0.997808851097554350, 0.997805541717637360, 0.997802229843206430, 0.997798915474270020, +0.997795598610836330, 0.997792279252913580, 0.997788957400510210, 0.997785633053634440, 0.997782306212294470, 0.997778976876498860, 0.997775645046255710, 0.997772310721573460, +0.997768973902460550, 0.997765634588925090, 0.997762292780975610, 0.997758948478620340, 0.997755601681867830, 0.997752252390726070, 0.997748900605203830, 0.997745546325309430, +0.997742189551050980, 0.997738830282437260, 0.997735468519476370, 0.997732104262176730, 0.997728737510546800, 0.997725368264595120, 0.997721996524330020, 0.997718622289759940, +0.997715245560893300, 0.997711866337738560, 0.997708484620304150, 0.997705100408598500, 0.997701713702630060, 0.997698324502407470, 0.997694932807938970, 0.997691538619233100, +0.997688141936298510, 0.997684742759143540, 0.997681341087776620, 0.997677936922206410, 0.997674530262441240, 0.997671121108489880, 0.997667709460360760, 0.997664295318062220, +0.997660878681603020, 0.997657459550991720, 0.997654037926236640, 0.997650613807346430, 0.997647187194329770, 0.997643758087195080, 0.997640326485951130, 0.997636892390606270, +0.997633455801169130, 0.997630016717648390, 0.997626575140052710, 0.997623131068390400, 0.997619684502670360, 0.997616235442901120, 0.997612783889091360, 0.997609329841249610, +0.997605873299384440, 0.997602414263504710, 0.997598952733618760, 0.997595488709735580, 0.997592022191863710, 0.997588553180011720, 0.997585081674188360, 0.997581607674402290, +0.997578131180662190, 0.997574652192976810, 0.997571170711354700, 0.997567686735804650, 0.997564200266335520, 0.997560711302955870, 0.997557219845674360, 0.997553725894499870, +0.997550229449441050, 0.997546730510506570, 0.997543229077705320, 0.997539725151046050, 0.997536218730537440, 0.997532709816188250, 0.997529198408007360, 0.997525684506003430, +0.997522168110185240, 0.997518649220561660, 0.997515127837141470, 0.997511603959933430, 0.997508077588946440, 0.997504548724189260, 0.997501017365670760, 0.997497483513399620, +0.997493947167384820, 0.997490408327635030, 0.997486866994159340, 0.997483323166966420, 0.997479776846065260, 0.997476228031464630, 0.997472676723173410, 0.997469122921200490, +0.997465566625554740, 0.997462007836245170, 0.997458446553280530, 0.997454882776669830, 0.997451316506421830, 0.997447747742545630, 0.997444176485050020, 0.997440602733943970, +0.997437026489236380, 0.997433447750936230, 0.997429866519052410, 0.997426282793594020, 0.997422696574569940, 0.997419107861989060, 0.997415516655860480, 0.997411922956193080, +0.997408326762995730, 0.997404728076277670, 0.997401126896047870, 0.997397523222315230, 0.997393917055088730, 0.997390308394377480, 0.997386697240190360, 0.997383083592536580, +0.997379467451425030, 0.997375848816864920, 0.997372227688865130, 0.997368604067434770, 0.997364977952582830, 0.997361349344318530, 0.997357718242650850, 0.997354084647588790, +0.997350448559141680, 0.997346809977318280, 0.997343168902128040, 0.997339525333579720, 0.997335879271682660, 0.997332230716445940, 0.997328579667878580, 0.997324926125989660, +0.997321270090788640, 0.997317611562284380, 0.997313950540485990, 0.997310287025402810, 0.997306621017043930, 0.997302952515418450, 0.997299281520535600, 0.997295608032404580, +0.997291932051034500, 0.997288253576434580, 0.997284572608614140, 0.997280889147582170, 0.997277203193348010, 0.997273514745920740, 0.997269823805309710, 0.997266130371524230, +0.997262434444573410, 0.997258736024466460, 0.997255035111212720, 0.997251331704821280, 0.997247625805301570, 0.997243917412662830, 0.997240206526914250, 0.997236493148065170, +0.997232777276124920, 0.997229058911102580, 0.997225338053007730, 0.997221614701849560, 0.997217888857637290, 0.997214160520380140, 0.997210429690087770, 0.997206696366769400, +0.997202960550434110, 0.997199222241091590, 0.997195481438750920, 0.997191738143421550, 0.997187992355112800, 0.997184244073834100, 0.997180493299594790, 0.997176740032404200, +0.997172984272271860, 0.997169226019206990, 0.997165465273219140, 0.997161702034317530, 0.997157936302511590, 0.997154168077810990, 0.997150397360224930, 0.997146624149762850, +0.997142848446434190, 0.997139070250248390, 0.997135289561215000, 0.997131506379343340, 0.997127720704642840, 0.997123932537123170, 0.997120141876793540, 0.997116348723663730, +0.997112553077742940, 0.997108754939040720, 0.997104954307566740, 0.997101151183330310, 0.997097345566340890, 0.997093537456608230, 0.997089726854141660, 0.997085913758950840, +0.997082098171045320, 0.997078280090434420, 0.997074459517127810, 0.997070636451135030, 0.997066810892465740, 0.997062982841129490, 0.997059152297135710, 0.997055319260493960, +0.997051483731213990, 0.997047645709305370, 0.997043805194777530, 0.997039962187640240, 0.997036116687903040, 0.997032268695575490, 0.997028418210667340, 0.997024565233188160, +0.997020709763147490, 0.997016851800555100, 0.997012991345420540, 0.997009128397753570, 0.997005262957563750, 0.997001395024860740, 0.996997524599654290, 0.996993651681953970, +0.996989776271769660, 0.996985898369110780, 0.996982017973987110, 0.996978135086408420, 0.996974249706384490, 0.996970361833924960, 0.996966471469039380, 0.996962578611737760, +0.996958683262029630, 0.996954785419924770, 0.996950885085432950, 0.996946982258563930, 0.996943076939327490, 0.996939169127733280, 0.996935258823791190, 0.996931346027510990, +0.996927430738902440, 0.996923512957975210, 0.996919592684739180, 0.996915669919204330, 0.996911744661380220, 0.996907816911276720, 0.996903886668903730, 0.996899953934271000, +0.996896018707388420, 0.996892080988265650, 0.996888140776912790, 0.996884198073339610, 0.996880252877555990, 0.996876305189571600, 0.996872355009396530, 0.996868402337040550, +0.996864447172513550, 0.996860489515825400, 0.996856529366986100, 0.996852566726005420, 0.996848601592893350, 0.996844633967659770, 0.996840663850314670, 0.996836691240867820, +0.996832716139329220, 0.996828738545708860, 0.996824758460016720, 0.996820775882262590, 0.996816790812456670, 0.996812803250608610, 0.996808813196728650, 0.996804820650826650, +0.996800825612912500, 0.996796828082996300, 0.996792828061088150, 0.996788825547197830, 0.996784820541335550, 0.996780813043511070, 0.996776803053734730, 0.996772790572016180, +0.996768775598365740, 0.996764758132793420, 0.996760738175309190, 0.996756715725923060, 0.996752690784645230, 0.996748663351485600, 0.996744633426454360, 0.996740601009561410, +0.996736566100817070, 0.996732528700231320, 0.996728488807814280, 0.996724446423575940, 0.996720401547526500, 0.996716354179676080, 0.996712304320034770, 0.996708251968612680, +0.996704197125419910, 0.996700139790466790, 0.996696079963763190, 0.996692017645319450, 0.996687952835145660, 0.996683885533252050, 0.996679815739648590, 0.996675743454345730, +0.996671668677353460, 0.996667591408682000, 0.996663511648341550, 0.996659429396342330, 0.996655344652694560, 0.996651257417408450, 0.996647167690494110, 0.996643075471961850, +0.996638980761822000, 0.996634883560084670, 0.996630783866760180, 0.996626681681858640, 0.996622577005390480, 0.996618469837365790, 0.996614360177794920, 0.996610248026688180, +0.996606133384055790, 0.996602016249908180, 0.996597896624255460, 0.996593774507107950, 0.996589649898476090, 0.996585522798369980, 0.996581393206800170, 0.996577261123776870, +0.996573126549310410, 0.996568989483411110, 0.996564849926089400, 0.996560707877355510, 0.996556563337219870, 0.996552416305692800, 0.996548266782784630, 0.996544114768505910, +0.996539960262866840, 0.996535803265877980, 0.996531643777549440, 0.996527481797891970, 0.996523317326915570, 0.996519150364631010, 0.996514980911048620, 0.996510808966178720, +0.996506634530031850, 0.996502457602618350, 0.996498278183948650, 0.996494096274033400, 0.996489911872882720, 0.996485724980507360, 0.996481535596917770, 0.996477343722124260, +0.996473149356137400, 0.996468952498967610, 0.996464753150625550, 0.996460551311121550, 0.996456346980466150, 0.996452140158669900, 0.996447930845743230, 0.996443719041696820, +0.996439504746541190, 0.996435287960286690, 0.996431068682943950, 0.996426846914523550, 0.996422622655036120, 0.996418395904491990, 0.996414166662902060, 0.996409934930276520, +0.996405700706626260, 0.996401463991961720, 0.996397224786293560, 0.996392983089632200, 0.996388738901988540, 0.996384492223373000, 0.996380243053796240, 0.996375991393268820, +0.996371737241801500, 0.996367480599404720, 0.996363221466089240, 0.996358959841865840, 0.996354695726744950, 0.996350429120737350, 0.996346160023853680, 0.996341888436104610, +0.996337614357500790, 0.996333337788053000, 0.996329058727771670, 0.996324777176667900, 0.996320493134752130, 0.996316206602035130, 0.996311917578527550, 0.996307626064240280, +0.996303332059183980, 0.996299035563369180, 0.996294736576806890, 0.996290435099507770, 0.996286131131482570, 0.996281824672741960, 0.996277515723296920, 0.996273204283158020, +0.996268890352336120, 0.996264573930841890, 0.996260255018686310, 0.996255933615880160, 0.996251609722434090, 0.996247283338358990, 0.996242954463665730, 0.996238623098365080, +0.996234289242467930, 0.996229952895984930, 0.996225614058927070, 0.996221272731305230, 0.996216928913130180, 0.996212582604412810, 0.996208233805164100, 0.996203882515394710, +0.996199528735115520, 0.996195172464337530, 0.996190813703071720, 0.996186452451328860, 0.996182088709119840, 0.996177722476455640, 0.996173353753347040, 0.996168982539805130, +0.996164608835840680, 0.996160232641464800, 0.996155853956688260, 0.996151472781522160, 0.996147089115977380, 0.996142702960064910, 0.996138314313795630, 0.996133923177180520, +0.996129529550230600, 0.996125133432956830, 0.996120734825370340, 0.996116333727481980, 0.996111930139302770, 0.996107524060843800, 0.996103115492115940, 0.996098704433130310, +0.996094290883897890, 0.996089874844429790, 0.996085456314736990, 0.996081035294830500, 0.996076611784721510, 0.996072185784421030, 0.996067757293939930, 0.996063326313289530, +0.996058892842480730, 0.996054456881524830, 0.996050018430432730, 0.996045577489215630, 0.996041134057884530, 0.996036688136450630, 0.996032239724924940, 0.996027788823318660, +0.996023335431642900, 0.996018879549908860, 0.996014421178127660, 0.996009960316310280, 0.996005496964468160, 0.996001031122612180, 0.995996562790753550, 0.995992091968903700, +0.995987618657073530, 0.995983142855274340, 0.995978664563517250, 0.995974183781813570, 0.995969700510174420, 0.995965214748610990, 0.995960726497134410, 0.995956235755756090, +0.995951742524487260, 0.995947246803339010, 0.995942748592322680, 0.995938247891449470, 0.995933744700730710, 0.995929239020177490, 0.995924730849801150, 0.995920220189613010, +0.995915707039624400, 0.995911191399846410, 0.995906673270290480, 0.995902152650967930, 0.995897629541889980, 0.995893103943067850, 0.995888575854513070, 0.995884045276236750, +0.995879512208250440, 0.995874976650565240, 0.995870438603192690, 0.995865898066144010, 0.995861355039430630, 0.995856809523063770, 0.995852261517054860, 0.995847711021415450, +0.995843158036156640, 0.995838602561289980, 0.995834044596826900, 0.995829484142778610, 0.995824921199156550, 0.995820355765972280, 0.995815787843237100, 0.995811217430962460, +0.995806644529159790, 0.995802069137840420, 0.995797491257016000, 0.995792910886697750, 0.995788328026897210, 0.995783742677625930, 0.995779154838895340, 0.995774564510716780, +0.995769971693101770, 0.995765376386062000, 0.995760778589608650, 0.995756178303753400, 0.995751575528507570, 0.995746970263882920, 0.995742362509890900, 0.995737752266542930, +0.995733139533850560, 0.995728524311825350, 0.995723906600478830, 0.995719286399822430, 0.995714663709867940, 0.995710038530626780, 0.995705410862110620, 0.995700780704330770, +0.995696148057299110, 0.995691512921026980, 0.995686875295526130, 0.995682235180808010, 0.995677592576884260, 0.995672947483766670, 0.995668299901466660, 0.995663649829995890, +0.995658997269366020, 0.995654342219588710, 0.995649684680675500, 0.995645024652637930, 0.995640362135487900, 0.995635697129237050, 0.995631029633896940, 0.995626359649479210, +0.995621687175995530, 0.995617012213457770, 0.995612334761877270, 0.995607654821266120, 0.995602972391635750, 0.995598287472997940, 0.995593600065364570, 0.995588910168747070, +0.995584217783157310, 0.995579522908606960, 0.995574825545107790, 0.995570125692671560, 0.995565423351310150, 0.995560718521035120, 0.995556011201858220, 0.995551301393791330, +0.995546589096846240, 0.995541874311034580, 0.995537157036368360, 0.995532437272859120, 0.995527715020518840, 0.995522990279359310, 0.995518263049392280, 0.995513533330629640, +0.995508801123083150, 0.995504066426764480, 0.995499329241685830, 0.995494589567858860, 0.995489847405295340, 0.995485102754007260, 0.995480355614006380, 0.995475605985304600, +0.995470853867913900, 0.995466099261845930, 0.995461342167112790, 0.995456582583726270, 0.995451820511698340, 0.995447055951040880, 0.995442288901765670, 0.995437519363884800, +0.995432747337410160, 0.995427972822353620, 0.995423195818727180, 0.995418416326542710, 0.995413634345812200, 0.995408849876547650, 0.995404062918760930, 0.995399273472464040, +0.995394481537668960, 0.995389687114387690, 0.995384890202632320, 0.995380090802414630, 0.995375288913746710, 0.995370484536640570, 0.995365677671108170, 0.995360868317161640, +0.995356056474812840, 0.995351242144074000, 0.995346425324957100, 0.995341606017474120, 0.995336784221637070, 0.995331959937458040, 0.995327133164949140, 0.995322303904122350, +0.995317472154989890, 0.995312637917563750, 0.995307801191856020, 0.995302961977878710, 0.995298120275644130, 0.995293276085164160, 0.995288429406451010, 0.995283580239516690, +0.995278728584373500, 0.995273874441033550, 0.995269017809508830, 0.995264158689811550, 0.995259297081953930, 0.995254432985948070, 0.995249566401806060, 0.995244697329540240, +0.995239825769162590, 0.995234951720685430, 0.995230075184120880, 0.995225196159481240, 0.995220314646778510, 0.995215430646025020, 0.995210544157232760, 0.995205655180414370, +0.995200763715581750, 0.995195869762747320, 0.995190973321923080, 0.995186074393121570, 0.995181172976354780, 0.995176269071635030, 0.995171362678974550, 0.995166453798385750, +0.995161542429880860, 0.995156628573472090, 0.995151712229171760, 0.995146793396992080, 0.995141872076945490, 0.995136948269044090, 0.995132021973300420, 0.995127093189726700, +0.995122161918335250, 0.995117228159138390, 0.995112291912148450, 0.995107353177377860, 0.995102411954838730, 0.995097468244543590, 0.995092522046504890, 0.995087573360734830, +0.995082622187245860, 0.995077668526050400, 0.995072712377160660, 0.995067753740589200, 0.995062792616348220, 0.995057829004450390, 0.995052862904907910, 0.995047894317733330, +0.995042923242939080, 0.995037949680537490, 0.995032973630541000, 0.995027995092962030, 0.995023014067813020, 0.995018030555106630, 0.995013044554855060, 0.995008056067070880, +0.995003065091766610, 0.994998071628954710, 0.994993075678647590, 0.994988077240857800, 0.994983076315597680, 0.994978072902880100, 0.994973067002717150, 0.994968058615121610, +0.994963047740106020, 0.994958034377682710, 0.994953018527864330, 0.994948000190663320, 0.994942979366092330, 0.994937956054163910, 0.994932930254890710, 0.994927901968285070, +0.994922871194359740, 0.994917837933127270, 0.994912802184600100, 0.994907763948790880, 0.994902723225712380, 0.994897680015377040, 0.994892634317797510, 0.994887586132986330, +0.994882535460956290, 0.994877482301719910, 0.994872426655289740, 0.994867368521678450, 0.994862307900898800, 0.994857244792963450, 0.994852179197884930, 0.994847111115675920, +0.994842040546349280, 0.994836967489917460, 0.994831891946393100, 0.994826813915789090, 0.994821733398118080, 0.994816650393392730, 0.994811564901625810, 0.994806476922829970, +0.994801386457017880, 0.994796293504202290, 0.994791198064395980, 0.994786100137611710, 0.994780999723862140, 0.994775896823160140, 0.994770791435518390, 0.994765683560949630, +0.994760573199466760, 0.994755460351082310, 0.994750345015809280, 0.994745227193660430, 0.994740106884648420, 0.994734984088786240, 0.994729858806086550, 0.994724731036562230, +0.994719600780226030, 0.994714468037090850, 0.994709332807169440, 0.994704195090474810, 0.994699054887019710, 0.994693912196816910, 0.994688767019879410, 0.994683619356219850, +0.994678469205851350, 0.994673316568786550, 0.994668161445038560, 0.994663003834620140, 0.994657843737544290, 0.994652681153823770, 0.994647516083471570, 0.994642348526500570, +0.994637178482923660, 0.994632005952753810, 0.994626830936004010, 0.994621653432687050, 0.994616473442816010, 0.994611290966403770, 0.994606106003463330, 0.994600918554007670, +0.994595728618049570, 0.994590536195602230, 0.994585341286678530, 0.994580143891291460, 0.994574944009454120, 0.994569741641179390, 0.994564536786480270, 0.994559329445369840, +0.994554119617861000, 0.994548907303966940, 0.994543692503700560, 0.994538475217075060, 0.994533255444103310, 0.994528033184798430, 0.994522808439173400, 0.994517581207241320, +0.994512351489015400, 0.994507119284508630, 0.994501884593734010, 0.994496647416704630, 0.994491407753433700, 0.994486165603934210, 0.994480920968219380, 0.994475673846302090, +0.994470424238195760, 0.994465172143913280, 0.994459917563467970, 0.994454660496872810, 0.994449400944141030, 0.994444138905285710, 0.994438874380319970, 0.994433607369257120, +0.994428337872110270, 0.994423065888892620, 0.994417791419617280, 0.994412514464297460, 0.994407235022946260, 0.994401953095577110, 0.994396668682202890, 0.994391381782837150, +0.994386092397492980, 0.994380800526183490, 0.994375506168922010, 0.994370209325721840, 0.994364909996596100, 0.994359608181558110, 0.994354303880620960, 0.994348997093798200, +0.994343687821102940, 0.994338376062548380, 0.994333061818147960, 0.994327745087914880, 0.994322425871862480, 0.994317104170003850, 0.994311779982352540, 0.994306453308921760, +0.994301124149724940, 0.994295792504775290, 0.994290458374086140, 0.994285121757670810, 0.994279782655542730, 0.994274441067715120, 0.994269096994201410, 0.994263750435015030, +0.994258401390169190, 0.994253049859677440, 0.994247695843553100, 0.994242339341809390, 0.994236980354459950, 0.994231618881517900, 0.994226254922996880, 0.994220888478910330, +0.994215519549271450, 0.994210148134093810, 0.994204774233390820, 0.994199397847175810, 0.994194018975462330, 0.994188637618263820, 0.994183253775593690, 0.994177867447465500, +0.994172478633892580, 0.994167087334888570, 0.994161693550466800, 0.994156297280640700, 0.994150898525423820, 0.994145497284829820, 0.994140093558872010, 0.994134687347564050, +0.994129278650919380, 0.994123867468951430, 0.994118453801673850, 0.994113037649100080, 0.994107619011243780, 0.994102197888118380, 0.994096774279737530, 0.994091348186114780, +0.994085919607263560, 0.994080488543197640, 0.994075054993930450, 0.994069618959475540, 0.994064180439846680, 0.994058739435057400, 0.994053295945121260, 0.994047849970051910, +0.994042401509862890, 0.994036950564567870, 0.994031497134180490, 0.994026041218714180, 0.994020582818182950, 0.994015121932600220, 0.994009658561979760, 0.994004192706335110, +0.993998724365679930, 0.993993253540027990, 0.993987780229392830, 0.993982304433788320, 0.993976826153228020, 0.993971345387725690, 0.993965862137294990, 0.993960376401949670, +0.993954888181703300, 0.993949397476569850, 0.993943904286562650, 0.993938408611695910, 0.993932910451983060, 0.993927409807437990, 0.993921906678074450, 0.993916401063906110, +0.993910892964946720, 0.993905382381210070, 0.993899869312709900, 0.993894353759460230, 0.993888835721474570, 0.993883315198766940, 0.993877792191350860, 0.993872266699240450, +0.993866738722449240, 0.993861208260991220, 0.993855675314880170, 0.993850139884130070, 0.993844601968754460, 0.993839061568767450, 0.993833518684182790, 0.993827973315014270, +0.993822425461275860, 0.993816875122981220, 0.993811322300144570, 0.993805766992779560, 0.993800209200900180, 0.993794648924520300, 0.993789086163653690, 0.993783520918314460, +0.993777953188516250, 0.993772382974273390, 0.993766810275599430, 0.993761235092508580, 0.993755657425014480, 0.993750077273131360, 0.993744494636872980, 0.993738909516253430, +0.993733321911286490, 0.993727731821986370, 0.993722139248366830, 0.993716544190441970, 0.993710946648225790, 0.993705346621732270, 0.993699744110975280, 0.993694139115969040, +0.993688531636727320, 0.993682921673264330, 0.993677309225594050, 0.993671694293730480, 0.993666076877687710, 0.993660456977479730, 0.993654834593120650, 0.993649209724624340, +0.993643582372005120, 0.993637952535276980, 0.993632320214453910, 0.993626685409550010, 0.993621048120579500, 0.993615408347556350, 0.993609766090494560, 0.993604121349408340, +0.993598474124311900, 0.993592824415219340, 0.993587172222144650, 0.993581517545102040, 0.993575860384105610, 0.993570200739169570, 0.993564538610307910, 0.993558873997535060, +0.993553206900865020, 0.993547537320311870, 0.993541865255889940, 0.993536190707613340, 0.993530513675496270, 0.993524834159552950, 0.993519152159797360, 0.993513467676244040, +0.993507780708907110, 0.993502091257800650, 0.993496399322938980, 0.993490704904336330, 0.993485008002006900, 0.993479308615964900, 0.993473606746224540, 0.993467902392800360, +0.993462195555706360, 0.993456486234956860, 0.993450774430566170, 0.993445060142548520, 0.993439343370918220, 0.993433624115689470, 0.993427902376876840, 0.993422178154494410, +0.993416451448556500, 0.993410722259077450, 0.993404990586071570, 0.993399256429553290, 0.993393519789536830, 0.993387780666036500, 0.993382039059066750, 0.993376294968641990, +0.993370548394776450, 0.993364799337484560, 0.993359047796780640, 0.993353293772679110, 0.993347537265194420, 0.993341778274340670, 0.993336016800132620, 0.993330252842584580, +0.993324486401710780, 0.993318717477525870, 0.993312946070044170, 0.993307172179280110, 0.993301395805248010, 0.993295616947962420, 0.993289835607437890, 0.993284051783688730, +0.993278265476729480, 0.993272476686574590, 0.993266685413238480, 0.993260891656735590, 0.993255095417080460, 0.993249296694287630, 0.993243495488371650, 0.993237691799346840, +0.993231885627227860, 0.993226076972029140, 0.993220265833765210, 0.993214452212450530, 0.993208636108099730, 0.993202817520727480, 0.993196996450348090, 0.993191172896976340, +0.993185346860626540, 0.993179518341313460, 0.993173687339051540, 0.993167853853855200, 0.993162017885739430, 0.993156179434718680, 0.993150338500807360, 0.993144495084020250, +0.993138649184371890, 0.993132800801876940, 0.993126949936549930, 0.993121096588405530, 0.993115240757458380, 0.993109382443723150, 0.993103521647214490, 0.993097658367947060, +0.993091792605935500, 0.993085924361194360, 0.993080053633738410, 0.993074180423582420, 0.993068304730740930, 0.993062426555228690, 0.993056545897060380, 0.993050662756250760, +0.993044777132814360, 0.993038889026766180, 0.993032998438120540, 0.993027105366892540, 0.993021209813096830, 0.993015311776748070, 0.993009411257861020, 0.993003508256450450, +0.992997602772531020, 0.992991694806117710, 0.992985784357225070, 0.992979871425867970, 0.992973956012061290, 0.992968038115819680, 0.992962117737157920, 0.992956194876090880, +0.992950269532633430, 0.992944341706800130, 0.992938411398606170, 0.992932478608066100, 0.992926543335194810, 0.992920605580007280, 0.992914665342518150, 0.992908722622742320, +0.992902777420694770, 0.992896829736390150, 0.992890879569843570, 0.992884926921069780, 0.992878971790083660, 0.992873014176900100, 0.992867054081533970, 0.992861091504000260, +0.992855126444313730, 0.992849158902489480, 0.992843188878542280, 0.992837216372487230, 0.992831241384339090, 0.992825263914112740, 0.992819283961823280, 0.992813301527485700, +0.992807316611114650, 0.992801329212725570, 0.992795339332332990, 0.992789346969952140, 0.992783352125597980, 0.992777354799285310, 0.992771354991029310, 0.992765352700844980, +0.992759347928747090, 0.992753340674750960, 0.992747330938871570, 0.992741318721123700, 0.992735304021522660, 0.992729286840083320, 0.992723267176820690, 0.992717245031749850, +0.992711220404886020, 0.992705193296244070, 0.992699163705839220, 0.992693131633686440, 0.992687097079800850, 0.992681060044197430, 0.992675020526891380, 0.992668978527897710, +0.992662934047231720, 0.992656887084908400, 0.992650837640942860, 0.992644785715350200, 0.992638731308145510, 0.992632674419344110, 0.992626615048960990, 0.992620553197011150, +0.992614488863510110, 0.992608422048472880, 0.992602352751914550, 0.992596280973850330, 0.992590206714295430, 0.992584129973264950, 0.992578050750774100, 0.992571969046838200, +0.992565884861472460, 0.992559798194691870, 0.992553709046511860, 0.992547617416947640, 0.992541523306014310, 0.992535426713727190, 0.992529327640101380, 0.992523226085152310, +0.992517122048895310, 0.992511015531345350, 0.992504906532517990, 0.992498795052428220, 0.992492681091091570, 0.992486564648523140, 0.992480445724738260, 0.992474324319752350, +0.992468200433580640, 0.992462074066238430, 0.992455945217741050, 0.992449813888103830, 0.992443680077341960, 0.992437543785470890, 0.992431405012506040, 0.992425263758462740, +0.992419120023356190, 0.992412973807201840, 0.992406825110015100, 0.992400673931811310, 0.992394520272605770, 0.992388364132413820, 0.992382205511251110, 0.992376044409132850, +0.992369880826074580, 0.992363714762091510, 0.992357546217199180, 0.992351375191413030, 0.992345201684748270, 0.992339025697220660, 0.992332847228845400, 0.992326666279638060, +0.992320482849614160, 0.992314296938788920, 0.992308108547177990, 0.992301917674796810, 0.992295724321660690, 0.992289528487785400, 0.992283330173186260, 0.992277129377878820, +0.992270926101878500, 0.992264720345200970, 0.992258512107861530, 0.992252301389875860, 0.992246088191259370, 0.992239872512027720, 0.992233654352196460, 0.992227433711781020, +0.992221210590796930, 0.992214984989259860, 0.992208756907185350, 0.992202526344588830, 0.992196293301486070, 0.992190057777892600, 0.992183819773823970, 0.992177579289295840, +0.992171336324323750, 0.992165090878923240, 0.992158842953110080, 0.992152592546899690, 0.992146339660307960, 0.992140084293350320, 0.992133826446042530, 0.992127566118400140, +0.992121303310438800, 0.992115038022174270, 0.992108770253621990, 0.992102500004797940, 0.992096227275717560, 0.992089952066396720, 0.992083674376850970, 0.992077394207095950, +0.992071111557147560, 0.992064826427021320, 0.992058538816732890, 0.992052248726298270, 0.992045956155732990, 0.992039661105052820, 0.992033363574273520, 0.992027063563410860, +0.992020761072480490, 0.992014456101498190, 0.992008148650479700, 0.992001838719440920, 0.991995526308397490, 0.991989211417365290, 0.991982894046360090, 0.991976574195397640, +0.991970251864493720, 0.991963927053664100, 0.991957599762924750, 0.991951269992291440, 0.991944937741779940, 0.991938603011406130, 0.991932265801185760, 0.991925926111134730, +0.991919583941268890, 0.991913239291604020, 0.991906892162156110, 0.991900542552940910, 0.991894190463974420, 0.991887835895272520, 0.991881478846850960, 0.991875119318725740, +0.991868757310912730, 0.991862392823427590, 0.991856025856286740, 0.991849656409505730, 0.991843284483100660, 0.991836910077087300, 0.991830533191481730, 0.991824153826299740, +0.991817771981557290, 0.991811387657270620, 0.991805000853455350, 0.991798611570127610, 0.991792219807303370, 0.991785825564998610, 0.991779428843229230, 0.991773029642011310, +0.991766627961360610, 0.991760223801293580, 0.991753817161825980, 0.991747408042973790, 0.991740996444753110, 0.991734582367179930, 0.991728165810270230, 0.991721746774040120, +0.991715325258505700, 0.991708901263682940, 0.991702474789587950, 0.991696045836236720, 0.991689614403645450, 0.991683180491830130, 0.991676744100806860, 0.991670305230591630, +0.991663863881200760, 0.991657420052650120, 0.991650973744956030, 0.991644524958134490, 0.991638073692201690, 0.991631619947173640, 0.991625163723066530, 0.991618705019896460, +0.991612243837679650, 0.991605780176432310, 0.991599314036170520, 0.991592845416910400, 0.991586374318668140, 0.991579900741460070, 0.991573424685302070, 0.991566946150210570, +0.991560465136201770, 0.991553981643291780, 0.991547495671496800, 0.991541007220833160, 0.991534516291316950, 0.991528022882964490, 0.991521526995791770, 0.991515028629815440, +0.991508527785051500, 0.991502024461516250, 0.991495518659225920, 0.991489010378196810, 0.991482499618445150, 0.991475986379987240, 0.991469470662839300, 0.991462952467017880, +0.991456431792538950, 0.991449908639418950, 0.991443383007674210, 0.991436854897320920, 0.991430324308375630, 0.991423791240854340, 0.991417255694773680, 0.991410717670149990, +0.991404177166999360, 0.991397634185338330, 0.991391088725183220, 0.991384540786550470, 0.991377990369456290, 0.991371437473916980, 0.991364882099949330, 0.991358324247569310, +0.991351763916793580, 0.991345201107638460, 0.991338635820120270, 0.991332068054255560, 0.991325497810060520, 0.991318925087551820, 0.991312349886745880, 0.991305772207659030, +0.991299192050307700, 0.991292609414708430, 0.991286024300877640, 0.991279436708831780, 0.991272846638587280, 0.991266254090160670, 0.991259659063568500, 0.991253061558827200, +0.991246461575953200, 0.991239859114963040, 0.991233254175873270, 0.991226646758700310, 0.991220036863460720, 0.991213424490171020, 0.991206809638847890, 0.991200192309507620, +0.991193572502167000, 0.991186950216842330, 0.991180325453550280, 0.991173698212307390, 0.991167068493130300, 0.991160436296035560, 0.991153801621039830, 0.991147164468159430, +0.991140524837411220, 0.991133882728811640, 0.991127238142377460, 0.991120591078125000, 0.991113941536071130, 0.991107289516232500, 0.991100635018625550, 0.991093978043267040, +0.991087318590173630, 0.991080656659361960, 0.991073992250848470, 0.991067325364650030, 0.991060656000783410, 0.991053984159265160, 0.991047309840111800, 0.991040633043340340, +0.991033953768967190, 0.991027272017009240, 0.991020587787482920, 0.991013901080405210, 0.991007211895792880, 0.991000520233662360, 0.990993826094030640, 0.990987129476914360, +0.990980430382330300, 0.990973728810295110, 0.990967024760825430, 0.990960318233938380, 0.990953609229650480, 0.990946897747978620, 0.990940183788939440, 0.990933467352549830, +0.990926748438826550, 0.990920027047786370, 0.990913303179446150, 0.990906576833822660, 0.990899848010932780, 0.990893116710793280, 0.990886382933420910, 0.990879646678832660, +0.990872907947045300, 0.990866166738075480, 0.990859423051940410, 0.990852676888656750, 0.990845928248241470, 0.990839177130711350, 0.990832423536083250, 0.990825667464374060, +0.990818908915600760, 0.990812147889780110, 0.990805384386929110, 0.990798618407064740, 0.990791849950203750, 0.990785079016363150, 0.990778305605559910, 0.990771529717810790, +0.990764751353132910, 0.990757970511543130, 0.990751187193058440, 0.990744401397695820, 0.990737613125472150, 0.990730822376404530, 0.990724029150509720, 0.990717233447804930, +0.990710435268306930, 0.990703634612033040, 0.990696831478999900, 0.990690025869224830, 0.990683217782724610, 0.990676407219516330, 0.990669594179617090, 0.990662778663043750, +0.990655960669813540, 0.990649140199943430, 0.990642317253450530, 0.990635491830351820, 0.990628663930664290, 0.990621833554405140, 0.990615000701591470, 0.990608165372240170, +0.990601327566368540, 0.990594487283993570, 0.990587644525132480, 0.990580799289802140, 0.990573951578019860, 0.990567101389802750, 0.990560248725167900, 0.990553393584132190, +0.990546535966713270, 0.990539675872927900, 0.990532813302793300, 0.990525948256326780, 0.990519080733545330, 0.990512210734466160, 0.990505338259106470, 0.990498463307483480, +0.990491585879614280, 0.990484705975516190, 0.990477823595206200, 0.990470938738701840, 0.990464051406020010, 0.990457161597178120, 0.990450269312193150, 0.990443374551082670, +0.990436477313863640, 0.990429577600553500, 0.990422675411169460, 0.990415770745728730, 0.990408863604248510, 0.990401953986746130, 0.990395041893238790, 0.990388127323744040, +0.990381210278278860, 0.990374290756860680, 0.990367368759506710, 0.990360444286234380, 0.990353517337061010, 0.990346587912003700, 0.990339656011079980, 0.990332721634307080, +0.990325784781702410, 0.990318845453283410, 0.990311903649067180, 0.990304959369071150, 0.990298012613312850, 0.990291063381809280, 0.990284111674578190, 0.990277157491636920, +0.990270200833002660, 0.990263241698692950, 0.990256280088725130, 0.990249316003116500, 0.990242349441884610, 0.990235380405046880, 0.990228408892620760, 0.990221434904623550, +0.990214458441072810, 0.990207479501985840, 0.990200498087380310, 0.990193514197273420, 0.990186527831682710, 0.990179538990625720, 0.990172547674119890, 0.990165553882182750, +0.990158557614831740, 0.990151558872084280, 0.990144557653957920, 0.990137553960470210, 0.990130547791638450, 0.990123539147480410, 0.990116528028013640, 0.990109514433255460, +0.990102498363223500, 0.990095479817935330, 0.990088458797408480, 0.990081435301660260, 0.990074409330708670, 0.990067380884571020, 0.990060349963264970, 0.990053316566807950, +0.990046280695217720, 0.990039242348511710, 0.990032201526707680, 0.990025158229822950, 0.990018112457875520, 0.990011064210882810, 0.990004013488862360, 0.989996960291831930, +0.989989904619809070, 0.989982846472811540, 0.989975785850856770, 0.989968722753962530, 0.989961657182146460, 0.989954589135426330, 0.989947518613819800, 0.989940445617344400, +0.989933370146017900, 0.989926292199857950, 0.989919211778882090, 0.989912128883108420, 0.989905043512554370, 0.989897955667237820, 0.989890865347176300, 0.989883772552387580, +0.989876677282889530, 0.989869579538699700, 0.989862479319835840, 0.989855376626315840, 0.989848271458157460, 0.989841163815378460, 0.989834053697996490, 0.989826941106029310, +0.989819826039494920, 0.989812708498410740, 0.989805588482794980, 0.989798465992665190, 0.989791341028039230, 0.989784213588934980, 0.989777083675370210, 0.989769951287362670, +0.989762816424930250, 0.989755679088090700, 0.989748539276862020, 0.989741396991262070, 0.989734252231308620, 0.989727104997019440, 0.989719955288412610, 0.989712803105505800, +0.989705648448317100, 0.989698491316864050, 0.989691331711164970, 0.989684169631237510, 0.989677005077099660, 0.989669838048769290, 0.989662668546264280, 0.989655496569602610, +0.989648322118802160, 0.989641145193880910, 0.989633965794856850, 0.989626783921747850, 0.989619599574572020, 0.989612412753347100, 0.989605223458091100, 0.989598031688822100, +0.989590837445557870, 0.989583640728316730, 0.989576441537116440, 0.989569239871974980, 0.989562035732910570, 0.989554829119940970, 0.989547620033084270, 0.989540408472358470, +0.989533194437781760, 0.989525977929372020, 0.989518758947147360, 0.989511537491125860, 0.989504313561325400, 0.989497087157764300, 0.989489858280460430, 0.989482626929431670, +0.989475393104696680, 0.989468156806273090, 0.989460918034179020, 0.989453676788432770, 0.989446433069052330, 0.989439186876055810, 0.989431938209461290, 0.989424687069286770, +0.989417433455550670, 0.989410177368271080, 0.989402918807466000, 0.989395657773153530, 0.989388394265351970, 0.989381128284079540, 0.989373859829354000, 0.989366588901194000, +0.989359315499617530, 0.989352039624642800, 0.989344761276287900, 0.989337480454571150, 0.989330197159510760, 0.989322911391124830, 0.989315623149431440, 0.989308332434449160, +0.989301039246196060, 0.989293743584690350, 0.989286445449950260, 0.989279144841994080, 0.989271841760840040, 0.989264536206506340, 0.989257228179011290, 0.989249917678373230, +0.989242604704610340, 0.989235289257740960, 0.989227971337783400, 0.989220650944755860, 0.989213328078676790, 0.989206002739564160, 0.989198674927436630, 0.989191344642312510, +0.989184011884210010, 0.989176676653147460, 0.989169338949143270, 0.989161998772215670, 0.989154656122383070, 0.989147310999663690, 0.989139963404076280, 0.989132613335638840, +0.989125260794369910, 0.989117905780287800, 0.989110548293410940, 0.989103188333757770, 0.989095825901346370, 0.989088460996195630, 0.989081093618323750, 0.989073723767749050, +0.989066351444490180, 0.989058976648565350, 0.989051599379993100, 0.989044219638791740, 0.989036837424979830, 0.989029452738575900, 0.989022065579598380, 0.989014675948065690, +0.989007283843996280, 0.988999889267408670, 0.988992492218321310, 0.988985092696752830, 0.988977690702721350, 0.988970286236245830, 0.988962879297344610, 0.988955469886036220, +0.988948058002339090, 0.988940643646271880, 0.988933226817853010, 0.988925807517101020, 0.988918385744034570, 0.988910961498672080, 0.988903534781032320, 0.988896105591133720, +0.988888673928994820, 0.988881239794634160, 0.988873803188070500, 0.988866364109322160, 0.988858922558408130, 0.988851478535346610, 0.988844032040156580, 0.988836583072856380, +0.988829131633464750, 0.988821677722000250, 0.988814221338481620, 0.988806762482927200, 0.988799301155356080, 0.988791837355786680, 0.988784371084237780, 0.988776902340727900, +0.988769431125275710, 0.988761957437899960, 0.988754481278619200, 0.988747002647452410, 0.988739521544418020, 0.988732037969534900, 0.988724551922821710, 0.988717063404297100, +0.988709572413979830, 0.988702078951888660, 0.988694583018042140, 0.988687084612459240, 0.988679583735158740, 0.988672080386159170, 0.988664574565479400, 0.988657066273138320, +0.988649555509154450, 0.988642042273546680, 0.988634526566333770, 0.988627008387534700, 0.988619487737168010, 0.988611964615252690, 0.988604439021807390, 0.988596910956850980, +0.988589380420402340, 0.988581847412480120, 0.988574311933103410, 0.988566773982290870, 0.988559233560061480, 0.988551690666433890, 0.988544145301427200, 0.988536597465060060, +0.988529047157351460, 0.988521494378320150, 0.988513939127985130, 0.988506381406365380, 0.988498821213479540, 0.988491258549346830, 0.988483693413985790, 0.988476125807415620, +0.988468555729654970, 0.988460983180723060, 0.988453408160638760, 0.988445830669420930, 0.988438250707088460, 0.988430668273660440, 0.988423083369155630, 0.988415495993593240, +0.988407906146991920, 0.988400313829370880, 0.988392719040749210, 0.988385121781145680, 0.988377522050579270, 0.988369919849069190, 0.988362315176634200, 0.988354708033293510, +0.988347098419065870, 0.988339486333970620, 0.988331871778026620, 0.988324254751253070, 0.988316635253668750, 0.988309013285292860, 0.988301388846144490, 0.988293761936242520, +0.988286132555606270, 0.988278500704254600, 0.988270866382206740, 0.988263229589481760, 0.988255590326098670, 0.988247948592076540, 0.988240304387434710, 0.988232657712191820, +0.988225008566367520, 0.988217356949980590, 0.988209702863050320, 0.988202046305595830, 0.988194387277636200, 0.988186725779190640, 0.988179061810278040, 0.988171395370918030, +0.988163726461129490, 0.988156055080931630, 0.988148381230343650, 0.988140704909384660, 0.988133026118073960, 0.988125344856430670, 0.988117661124473860, 0.988109974922223080, +0.988102286249697310, 0.988094595106915890, 0.988086901493898000, 0.988079205410662740, 0.988071506857229550, 0.988063805833617640, 0.988056102339845980, 0.988048396375934220, +0.988040687941901470, 0.988032977037767050, 0.988025263663550150, 0.988017547819270090, 0.988009829504946200, 0.988002108720597570, 0.987994385466243850, 0.987986659741904140, +0.987978931547597750, 0.987971200883344000, 0.987963467749162330, 0.987955732145071930, 0.987947994071092240, 0.987940253527242460, 0.987932510513542140, 0.987924765030010480, +0.987917017076667010, 0.987909266653530960, 0.987901513760621740, 0.987893758397958680, 0.987886000565561310, 0.987878240263448840, 0.987870477491640810, 0.987862712250156650, +0.987854944539015680, 0.987847174358237320, 0.987839401707841010, 0.987831626587846290, 0.987823848998272360, 0.987816068939138870, 0.987808286410465250, 0.987800501412270830, +0.987792713944575240, 0.987784924007397920, 0.987777131600758200, 0.987769336724675710, 0.987761539379169660, 0.987753739564259940, 0.987745937279965960, 0.987738132526307040, +0.987730325303302740, 0.987722515610972680, 0.987714703449336430, 0.987706888818413180, 0.987699071718222910, 0.987691252148784840, 0.987683430110118720, 0.987675605602244100, +0.987667778625180290, 0.987659949178947170, 0.987652117263564170, 0.987644282879050710, 0.987636446025426660, 0.987628606702711580, 0.987620764910924880, 0.987612920650086320, +0.987605073920215460, 0.987597224721331820, 0.987589373053455290, 0.987581518916605060, 0.987573662310801240, 0.987565803236063240, 0.987557941692410730, 0.987550077679863360, +0.987542211198440770, 0.987534342248162720, 0.987526470829048650, 0.987518596941118540, 0.987510720584391930, 0.987502841758888470, 0.987494960464628040, 0.987487076701630050, +0.987479190469914500, 0.987471301769500930, 0.987463410600408990, 0.987455516962658540, 0.987447620856269470, 0.987439722281261200, 0.987431821237653720, 0.987423917725466670, +0.987416011744719820, 0.987408103295432830, 0.987400192377625660, 0.987392278991317980, 0.987384363136529660, 0.987376444813280460, 0.987368524021590140, 0.987360600761478470, +0.987352675032965310, 0.987344746836070320, 0.987336816170813700, 0.987328883037214890, 0.987320947435293970, 0.987313009365070720, 0.987305068826564880, 0.987297125819796340, +0.987289180344784970, 0.987281232401550520, 0.987273281990113220, 0.987265329110492700, 0.987257373762708830, 0.987249415946781510, 0.987241455662730580, 0.987233492910576160, +0.987225527690337780, 0.987217560002035750, 0.987209589845689740, 0.987201617221319830, 0.987193642128945890, 0.987185664568587810, 0.987177684540265550, 0.987169702043999120, +0.987161717079808270, 0.987153729647713310, 0.987145739747734010, 0.987137747379890350, 0.987129752544202320, 0.987121755240689900, 0.987113755469373190, 0.987105753230271940, +0.987097748523406260, 0.987089741348796350, 0.987081731706462070, 0.987073719596423430, 0.987065705018700500, 0.987057687973313280, 0.987049668460281970, 0.987041646479626220, +0.987033622031366580, 0.987025595115522790, 0.987017565732115080, 0.987009533881163410, 0.987001499562688010, 0.986993462776708740, 0.986985423523245920, 0.986977381802319310, +0.986969337613949450, 0.986961290958156210, 0.986953241834959690, 0.986945190244380210, 0.986937136186437640, 0.986929079661152290, 0.986921020668544040, 0.986912959208633420, +0.986904895281440320, 0.986896828886985160, 0.986888760025287800, 0.986880688696368580, 0.986872614900247580, 0.986864538636945120, 0.986856459906481080, 0.986848378708876100, +0.986840295044150160, 0.986832208912323480, 0.986824120313416380, 0.986816029247448820, 0.986807935714441250, 0.986799839714413870, 0.986791741247386670, 0.986783640313380390, +0.986775536912414930, 0.986767431044510590, 0.986759322709687690, 0.986751211907966550, 0.986743098639367380, 0.986734982903910260, 0.986726864701615860, 0.986718744032504260, +0.986710620896595780, 0.986702495293910850, 0.986694367224469570, 0.986686236688292470, 0.986678103685399770, 0.986669968215811540, 0.986661830279548680, 0.986653689876631160, +0.986645547007079520, 0.986637401670913960, 0.986629253868154810, 0.986621103598822600, 0.986612950862937650, 0.986604795660520170, 0.986596637991590810, 0.986588477856169880, +0.986580315254277700, 0.986572150185934800, 0.986563982651161520, 0.986555812649978270, 0.986547640182405370, 0.986539465248463480, 0.986531287848172900, 0.986523107981554180, +0.986514925648627640, 0.986506740849413810, 0.986498553583933120, 0.986490363852206010, 0.986482171654252890, 0.986473976990094540, 0.986465779859751150, 0.986457580263243370, +0.986449378200591640, 0.986441173671816380, 0.986432966676938250, 0.986424757215977550, 0.986416545288955060, 0.986408330895891310, 0.986400114036806720, 0.986391894711721730, +0.986383672920657100, 0.986375448663633250, 0.986367221940670840, 0.986358992751790180, 0.986350761097012140, 0.986342526976357270, 0.986334290389846100, 0.986326051337499180, +0.986317809819337030, 0.986309565835380430, 0.986301319385650020, 0.986293070470166010, 0.986284819088949490, 0.986276565242021010, 0.986268308929401090, 0.986260050151110400, +0.986251788907169580, 0.986243525197599280, 0.986235259022419930, 0.986226990381652730, 0.986218719275318010, 0.986210445703436410, 0.986202169666028810, 0.986193891163115730, +0.986185610194717950, 0.986177326760856120, 0.986169040861550770, 0.986160752496823000, 0.986152461666693460, 0.986144168371182680, 0.986135872610311440, 0.986127574384100590, +0.986119273692570800, 0.986110970535742700, 0.986102664913637180, 0.986094356826275110, 0.986086046273677130, 0.986077733255864010, 0.986069417772856620, 0.986061099824675600, +0.986052779411341840, 0.986044456532876090, 0.986036131189299230, 0.986027803380632120, 0.986019473106895530, 0.986011140368110220, 0.986002805164296950, 0.985994467495476810, +0.985986127361670460, 0.985977784762898660, 0.985969439699182490, 0.985961092170542730, 0.985952742177000240, 0.985944389718576010, 0.985936034795290680, 0.985927677407165250, +0.985919317554220580, 0.985910955236477650, 0.985902590453957450, 0.985894223206680740, 0.985885853494668400, 0.985877481317941510, 0.985869106676520830, 0.985860729570427470, +0.985852349999682190, 0.985843967964306070, 0.985835583464319990, 0.985827196499745040, 0.985818807070602100, 0.985810415176912150, 0.985802020818696170, 0.985793623995975030, +0.985785224708769840, 0.985776822957101670, 0.985768418740991410, 0.985760012060460040, 0.985751602915528770, 0.985743191306218460, 0.985734777232550210, 0.985726360694544780, +0.985717941692223600, 0.985709520225607650, 0.985701096294717800, 0.985692669899575270, 0.985684241040201140, 0.985675809716616280, 0.985667375928841900, 0.985658939676898990, +0.985650500960808860, 0.985642059780592490, 0.985633616136270980, 0.985625170027865430, 0.985616721455396920, 0.985608270418886660, 0.985599816918355630, 0.985591360953824940, +0.985582902525316110, 0.985574441632849910, 0.985565978276447650, 0.985557512456130440, 0.985549044171919460, 0.985540573423835830, 0.985532100211900630, 0.985523624536135290, +0.985515146396561010, 0.985506665793198790, 0.985498182726069930, 0.985489697195195520, 0.985481209200597010, 0.985472718742295360, 0.985464225820311790, 0.985455730434667830, +0.985447232585384580, 0.985438732272483130, 0.985430229495985020, 0.985421724255911240, 0.985413216552283090, 0.985404706385121900, 0.985396193754448980, 0.985387678660285650, +0.985379161102653000, 0.985370641081572570, 0.985362118597065460, 0.985353593649153090, 0.985345066237856780, 0.985336536363197620, 0.985328004025197270, 0.985319469223876810, +0.985310931959257790, 0.985302392231361400, 0.985293850040209080, 0.985285305385822150, 0.985276758268221920, 0.985268208687429590, 0.985259656643466930, 0.985251102136355140, +0.985242545166115650, 0.985233985732769660, 0.985225423836338820, 0.985216859476844340, 0.985208292654307650, 0.985199723368750280, 0.985191151620193660, 0.985182577408659220, +0.985174000734168280, 0.985165421596742360, 0.985156839996402800, 0.985148255933171240, 0.985139669407068870, 0.985131080418117370, 0.985122488966338250, 0.985113895051752950, +0.985105298674382900, 0.985096699834249630, 0.985088098531374470, 0.985079494765779050, 0.985070888537485030, 0.985062279846513730, 0.985053668692886800, 0.985045055076625650, +0.985036438997751840, 0.985027820456287010, 0.985019199452252580, 0.985010575985669990, 0.985001950056561100, 0.984993321664947350, 0.984984690810850380, 0.984976057494291620, +0.984967421715292720, 0.984958783473875220, 0.984950142770060770, 0.984941499603870900, 0.984932853975327370, 0.984924205884451620, 0.984915555331265510, 0.984906902315790480, +0.984898246838048160, 0.984889588898060220, 0.984880928495848070, 0.984872265631433930, 0.984863600304838990, 0.984854932516085140, 0.984846262265193890, 0.984837589552187030, +0.984828914377086200, 0.984820236739913040, 0.984811556640689200, 0.984802874079436560, 0.984794189056176770, 0.984785501570931480, 0.984776811623722440, 0.984768119214571410, +0.984759424343500060, 0.984750727010530120, 0.984742027215683270, 0.984733324958981470, 0.984724620240446270, 0.984715913060099650, 0.984707203417963250, 0.984698491314058730, +0.984689776748408070, 0.984681059721032810, 0.984672340231955050, 0.984663618281196420, 0.984654893868778800, 0.984646166994723850, 0.984637437659053540, 0.984628705861789630, +0.984619971602954000, 0.984611234882568190, 0.984602495700654500, 0.984593754057234590, 0.984585009952330230, 0.984576263385963490, 0.984567514358155930, 0.984558762868929630, +0.984550008918306350, 0.984541252506308080, 0.984532493632956810, 0.984523732298274170, 0.984514968502282260, 0.984506202245002960, 0.984497433526458130, 0.984488662346669760, +0.984479888705659500, 0.984471112603449770, 0.984462334040062110, 0.984453553015518730, 0.984444769529841500, 0.984435983583052290, 0.984427195175173080, 0.984418404306225960, +0.984409610976232590, 0.984400815185215380, 0.984392016933196220, 0.984383216220196980, 0.984374413046239630, 0.984365607411346270, 0.984356799315538880, 0.984347988758839440, +0.984339175741270060, 0.984330360262852810, 0.984321542323609580, 0.984312721923562560, 0.984303899062733740, 0.984295073741145220, 0.984286245958818970, 0.984277415715776870, +0.984268583012041450, 0.984259747847634590, 0.984250910222578380, 0.984242070136894910, 0.984233227590606160, 0.984224382583734460, 0.984215535116301670, 0.984206685188329990, +0.984197832799841740, 0.984188977950858910, 0.984180120641403590, 0.984171260871497980, 0.984162398641164280, 0.984153533950424600, 0.984144666799300790, 0.984135797187815520, +0.984126925115990870, 0.984118050583848820, 0.984109173591411590, 0.984100294138701480, 0.984091412225740700, 0.984082527852551350, 0.984073641019155510, 0.984064751725575730, +0.984055859971833980, 0.984046965757952700, 0.984038069083953970, 0.984029169949860120, 0.984020268355693230, 0.984011364301475620, 0.984002457787229720, 0.983993548812977630, +0.983984637378741760, 0.983975723484544210, 0.983966807130407410, 0.983957888316353560, 0.983948967042404980, 0.983940043308583870, 0.983931117114912770, 0.983922188461413880, +0.983913257348109530, 0.983904323775022020, 0.983895387742173670, 0.983886449249586900, 0.983877508297284040, 0.983868564885287180, 0.983859619013619180, 0.983850670682302030, +0.983841719891358270, 0.983832766640810100, 0.983823810930680160, 0.983814852760990570, 0.983805892131763730, 0.983796929043022290, 0.983787963494788590, 0.983778995487085030, +0.983770025019933820, 0.983761052093357740, 0.983752076707378850, 0.983743098862019830, 0.983734118557302970, 0.983725135793250940, 0.983716150569886040, 0.983707162887230810, +0.983698172745307580, 0.983689180144138970, 0.983680185083747440, 0.983671187564155500, 0.983662187585385260, 0.983653185147459920, 0.983644180250401460, 0.983635172894232630, +0.983626163078975770, 0.983617150804653620, 0.983608136071288500, 0.983599118878902940, 0.983590099227519720, 0.983581077117161250, 0.983572052547850180, 0.983563025519608840, +0.983553996032459970, 0.983544964086426220, 0.983535929681529920, 0.983526892817793710, 0.983517853495240350, 0.983508811713892480, 0.983499767473772550, 0.983490720774903070, +0.983481671617306930, 0.983472620001006550, 0.983463565926024460, 0.983454509392383660, 0.983445450400106560, 0.983436388949215920, 0.983427325039734180, 0.983418258671684200, +0.983409189845088520, 0.983400118559969890, 0.983391044816350760, 0.983381968614254310, 0.983372889953702870, 0.983363808834719190, 0.983354725257325920, 0.983345639221545940, +0.983336550727401780, 0.983327459774916310, 0.983318366364112070, 0.983309270495011930, 0.983300172167638760, 0.983291071382015100, 0.983281968138163710, 0.983272862436107450, +0.983263754275869100, 0.983254643657471170, 0.983245530580936780, 0.983236415046288450, 0.983227297053549280, 0.983218176602741690, 0.983209053693888780, 0.983199928327013200, +0.983190800502137810, 0.983181670219285260, 0.983172537478478660, 0.983163402279740750, 0.983154264623094300, 0.983145124508562170, 0.983135981936167250, 0.983126836905932390, +0.983117689417880470, 0.983108539472034140, 0.983099387068416600, 0.983090232207050610, 0.983081074887959040, 0.983071915111164870, 0.983062752876690760, 0.983053588184559900, +0.983044421034794840, 0.983035251427418880, 0.983026079362454790, 0.983016904839925540, 0.983007727859854020, 0.982998548422263200, 0.982989366527175950, 0.982980182174615360, +0.982970995364604080, 0.982961806097165440, 0.982952614372322400, 0.982943420190097730, 0.982934223550514630, 0.982925024453595860, 0.982915822899364520, 0.982906618887843480, +0.982897412419056150, 0.982888203493025190, 0.982878992109773810, 0.982869778269324870, 0.982860561971701460, 0.982851343216926690, 0.982842122005023630, 0.982832898336014950, +0.982823672209924280, 0.982814443626774500, 0.982805212586588480, 0.982795979089389540, 0.982786743135200540, 0.982777504724044790, 0.982768263855945180, 0.982759020530924790, +0.982749774749007040, 0.982740526510214820, 0.982731275814571310, 0.982722022662099630, 0.982712767052822840, 0.982703508986764170, 0.982694248463946480, 0.982684985484393430, +0.982675720048127870, 0.982666452155173010, 0.982657181805552060, 0.982647908999288110, 0.982638633736404480, 0.982629356016924140, 0.982620075840870300, 0.982610793208266500, +0.982601508119135600, 0.982592220573501040, 0.982582930571385900, 0.982573638112813400, 0.982564343197806830, 0.982555045826389310, 0.982545745998584130, 0.982536443714414730, +0.982527138973904200, 0.982517831777075860, 0.982508522123952900, 0.982499210014558640, 0.982489895448916290, 0.982480578427049170, 0.982471258948980690, 0.982461937014734050, +0.982452612624332590, 0.982443285777799600, 0.982433956475158410, 0.982424624716432330, 0.982415290501644670, 0.982405953830818630, 0.982396614703977880, 0.982387273121145600, +0.982377929082345110, 0.982368582587599740, 0.982359233636933000, 0.982349882230368120, 0.982340528367928400, 0.982331172049637600, 0.982321813275518820, 0.982312452045595470, +0.982303088359891000, 0.982293722218428810, 0.982284353621232340, 0.982274982568324910, 0.982265609059729930, 0.982256233095471170, 0.982246854675571710, 0.982237473800055110, +0.982228090468944880, 0.982218704682264350, 0.982209316440037170, 0.982199925742286650, 0.982190532589036100, 0.982181136980309510, 0.982171738916129970, 0.982162338396521120, +0.982152935421506390, 0.982143529991109320, 0.982134122105353450, 0.982124711764262080, 0.982115298967859210, 0.982105883716168030, 0.982096466009212080, 0.982087045847015010, +0.982077623229600350, 0.982068198156991530, 0.982058770629212320, 0.982049340646286020, 0.982039908208236500, 0.982030473315087190, 0.982021035966861740, 0.982011596163583690, +0.982002153905276560, 0.981992709191964240, 0.981983262023669810, 0.981973812400417480, 0.981964360322230560, 0.981954905789132800, 0.981945448801147760, 0.981935989358299070, +0.981926527460610380, 0.981917063108105450, 0.981907596300807590, 0.981898127038741020, 0.981888655321929040, 0.981879181150395520, 0.981869704524164000, 0.981860225443258240, +0.981850743907701880, 0.981841259917518690, 0.981831773472732210, 0.981822284573366400, 0.981812793219444810, 0.981803299410991430, 0.981793803148029660, 0.981784304430583400, +0.981774803258676390, 0.981765299632332280, 0.981755793551575050, 0.981746285016428240, 0.981736774026915840, 0.981727260583061480, 0.981717744684888930, 0.981708226332422050, +0.981698705525684500, 0.981689182264700140, 0.981679656549492960, 0.981670128380086600, 0.981660597756505050, 0.981651064678771830, 0.981641529146911050, 0.981631991160946460, +0.981622450720901930, 0.981612907826801000, 0.981603362478667970, 0.981593814676526620, 0.981584264420400700, 0.981574711710314070, 0.981565156546290730, 0.981555598928354420, +0.981546038856529020, 0.981536476330838630, 0.981526911351307100, 0.981517343917958310, 0.981507774030816130, 0.981498201689904540, 0.981488626895247410, 0.981479049646868720, +0.981469469944792230, 0.981459887789042250, 0.981450303179642550, 0.981440716116617100, 0.981431126599989770, 0.981421534629784760, 0.981411940206025850, 0.981402343328736880, +0.981392743997942300, 0.981383142213665850, 0.981373537975931520, 0.981363931284763290, 0.981354322140185360, 0.981344710542221500, 0.981335096490896010, 0.981325479986232430, +0.981315861028255410, 0.981306239616988820, 0.981296615752456520, 0.981286989434682730, 0.981277360663691420, 0.981267729439506690, 0.981258095762152730, 0.981248459631653300, +0.981238821048032950, 0.981229180011315430, 0.981219536521525050, 0.981209890578685790, 0.981200242182821870, 0.981190591333957360, 0.981180938032116150, 0.981171282277322750, +0.981161624069601170, 0.981151963408975480, 0.981142300295469890, 0.981132634729108610, 0.981122966709915720, 0.981113296237915430, 0.981103623313131610, 0.981093947935589020, +0.981084270105311520, 0.981074589822323430, 0.981064907086648730, 0.981055221898311850, 0.981045534257336980, 0.981035844163748120, 0.981026151617569560, 0.981016456618825750, +0.981006759167540880, 0.980997059263739040, 0.980987356907444650, 0.980977652098681710, 0.980967944837474740, 0.980958235123847720, 0.980948522957825310, 0.980938808339431590, +0.980929091268690770, 0.980919371745627380, 0.980909649770265400, 0.980899925342629380, 0.980890198462743500, 0.980880469130631980, 0.980870737346319470, 0.980861003109830150, +0.980851266421188250, 0.980841527280418180, 0.980831785687544370, 0.980822041642591010, 0.980812295145582440, 0.980802546196543280, 0.980792794795497750, 0.980783040942470260, +0.980773284637485140, 0.980763525880566810, 0.980753764671739690, 0.980744001011028100, 0.980734234898456460, 0.980724466334049310, 0.980714695317830950, 0.980704921849825940, +0.980695145930058580, 0.980685367558553400, 0.980675586735334730, 0.980665803460427200, 0.980656017733854910, 0.980646229555642730, 0.980636438925815090, 0.980626645844396180, +0.980616850311410770, 0.980607052326883280, 0.980597251890838020, 0.980587449003299530, 0.980577643664292680, 0.980567835873841550, 0.980558025631970920, 0.980548212938705310, +0.980538397794069040, 0.980528580198086750, 0.980518760150783100, 0.980508937652182390, 0.980499112702309490, 0.980489285301188730, 0.980479455448844850, 0.980469623145302280, +0.980459788390585670, 0.980449951184719670, 0.980440111527728700, 0.980430269419637290, 0.980420424860470320, 0.980410577850252430, 0.980400728389007940, 0.980390876476761710, +0.980381022113538390, 0.980371165299362410, 0.980361306034258310, 0.980351444318251160, 0.980341580151365410, 0.980331713533625690, 0.980321844465056660, 0.980311972945683060, +0.980302098975529560, 0.980292222554620780, 0.980282343682981170, 0.980272462360636030, 0.980262578587609680, 0.980252692363926870, 0.980242803689612360, 0.980232912564690810, +0.980223018989186960, 0.980213122963125460, 0.980203224486531190, 0.980193323559429010, 0.980183420181843460, 0.980173514353799400, 0.980163606075321490, 0.980153695346434590, +0.980143782167163470, 0.980133866537532650, 0.980123948457567450, 0.980114027927292300, 0.980104104946732060, 0.980094179515911600, 0.980084251634855800, 0.980074321303589180, +0.980064388522136840, 0.980054453290523430, 0.980044515608773930, 0.980034575476913190, 0.980024632894966110, 0.980014687862957310, 0.980004740380911900, 0.979994790448854510, +0.979984838066810030, 0.979974883234803640, 0.979964925952860110, 0.979954966221004200, 0.979945004039260880, 0.979935039407655030, 0.979925072326211620, 0.979915102794955530, +0.979905130813911400, 0.979895156383104760, 0.979885179502560160, 0.979875200172302560, 0.979865218392357070, 0.979855234162748450, 0.979845247483501880, 0.979835258354642020, +0.979825266776193970, 0.979815272748182810, 0.979805276270633630, 0.979795277343571080, 0.979785275967020470, 0.979775272141006570, 0.979765265865554570, 0.979755257140689230, +0.979745245966435860, 0.979735232342819450, 0.979725216269864860, 0.979715197747597300, 0.979705176776041740, 0.979695153355223280, 0.979685127485166900, 0.979675099165897460, +0.979665068397440500, 0.979655035179820890, 0.979644999513063720, 0.979634961397193970, 0.979624920832236850, 0.979614877818217430, 0.979604832355160720, 0.979594784443092000, +0.979584734082036390, 0.979574681272018850, 0.979564626013064710, 0.979554568305198940, 0.979544508148446740, 0.979534445542833310, 0.979524380488383640, 0.979514312985123040, +0.979504243033076820, 0.979494170632269960, 0.979484095782727550, 0.979474018484475020, 0.979463938737537450, 0.979453856541939950, 0.979443771897707700, 0.979433684804866140, +0.979423595263440470, 0.979413503273455780, 0.979403408834937260, 0.979393311947910240, 0.979383212612400020, 0.979373110828431480, 0.979363006596030370, 0.979352899915221790, +0.979342790786030930, 0.979332679208483100, 0.979322565182603630, 0.979312448708417600, 0.979302329785950550, 0.979292208415227570, 0.979282084596274080, 0.979271958329115510, +0.979261829613777060, 0.979251698450283930, 0.979241564838661650, 0.979231428778935320, 0.979221290271130360, 0.979211149315272310, 0.979201005911386370, 0.979190860059497960, +0.979180711759632390, 0.979170561011815100, 0.979160407816071280, 0.979150252172426570, 0.979140094080905960, 0.979129933541535320, 0.979119770554339850, 0.979109605119344970, +0.979099437236576000, 0.979089266906058580, 0.979079094127817910, 0.979068918901879410, 0.979058741228268530, 0.979048561107011000, 0.979038378538132030, 0.979028193521657150, +0.979018006057611800, 0.979007816146021390, 0.978997623786911460, 0.978987428980307330, 0.978977231726234740, 0.978967032024719020, 0.978956829875785810, 0.978946625279460520, +0.978936418235768710, 0.978926208744735790, 0.978915996806387300, 0.978905782420748770, 0.978895565587845850, 0.978885346307704070, 0.978875124580348870, 0.978864900405805870, +0.978854673784100740, 0.978844444715258780, 0.978834213199305750, 0.978823979236267070, 0.978813742826168510, 0.978803503969035700, 0.978793262664894080, 0.978783018913769290, +0.978772772715687080, 0.978762524070672770, 0.978752272978752000, 0.978742019439950760, 0.978731763454294580, 0.978721505021808880, 0.978711244142519420, 0.978700980816451850, +0.978690715043631810, 0.978680446824084950, 0.978670176157836910, 0.978659903044913570, 0.978649627485340460, 0.978639349479143220, 0.978629069026347720, 0.978618786126979500, +0.978608500781064210, 0.978598212988627590, 0.978587922749695640, 0.978577630064293880, 0.978567334932447960, 0.978557037354183870, 0.978546737329527020, 0.978536434858503390, +0.978526129941138630, 0.978515822577458510, 0.978505512767488870, 0.978495200511255490, 0.978484885808784120, 0.978474568660100520, 0.978464249065230440, 0.978453927024199870, +0.978443602537034440, 0.978433275603759700, 0.978422946224402070, 0.978412614398987080, 0.978402280127540490, 0.978391943410088280, 0.978381604246656210, 0.978371262637270030, +0.978360918581955620, 0.978350572080739060, 0.978340223133645990, 0.978329871740702520, 0.978319517901934280, 0.978309161617367250, 0.978298802887027310, 0.978288441710940320, +0.978278078089132140, 0.978267712021628880, 0.978257343508456390, 0.978246972549640550, 0.978236599145207220, 0.978226223295182380, 0.978215844999592020, 0.978205464258462000, +0.978195081071818180, 0.978184695439686890, 0.978174307362093880, 0.978163916839065010, 0.978153523870626370, 0.978143128456803960, 0.978132730597623620, 0.978122330293111350, +0.978111927543293460, 0.978101522348195700, 0.978091114707844160, 0.978080704622264820, 0.978070292091483770, 0.978059877115527000, 0.978049459694420480, 0.978039039828190070, +0.978028617516862320, 0.978018192760463090, 0.978007765559018250, 0.977997335912554110, 0.977986903821096540, 0.977976469284671750, 0.977966032303305590, 0.977955592877024600, +0.977945151005854550, 0.977934706689821630, 0.977924259928951930, 0.977913810723271660, 0.977903359072806790, 0.977892904977583520, 0.977882448437627840, 0.977871989452966270, +0.977861528023624690, 0.977851064149629190, 0.977840597831006190, 0.977830129067781550, 0.977819657859981710, 0.977809184207632630, 0.977798708110760420, 0.977788229569391710, +0.977777748583552380, 0.977767265153268620, 0.977756779278566750, 0.977746290959472960, 0.977735800196013360, 0.977725306988214140, 0.977714811336101830, 0.977704313239702530, +0.977693812699042430, 0.977683309714147740, 0.977672804285044770, 0.977662296411759830, 0.977651786094319130, 0.977641273332748860, 0.977630758127075560, 0.977620240477325320, +0.977609720383524450, 0.977599197845699370, 0.977588672863876180, 0.977578145438081410, 0.977567615568341260, 0.977557083254681820, 0.977546548497129960, 0.977536011295711660, +0.977525471650453340, 0.977514929561381420, 0.977504385028522100, 0.977493838051901820, 0.977483288631546770, 0.977472736767483700, 0.977462182459738700, 0.977451625708338320, +0.977441066513308860, 0.977430504874676750, 0.977419940792468410, 0.977409374266710150, 0.977398805297428290, 0.977388233884649680, 0.977377660028400430, 0.977367083728706950, +0.977356504985595900, 0.977345923799093460, 0.977335340169226300, 0.977324754096020600, 0.977314165579503120, 0.977303574619700300, 0.977292981216638550, 0.977282385370344290, +0.977271787080844170, 0.977261186348164500, 0.977250583172331820, 0.977239977553372550, 0.977229369491313560, 0.977218758986181160, 0.977208146038001770, 0.977197530646802040, +0.977186912812608500, 0.977176292535447690, 0.977165669815346140, 0.977155044652330270, 0.977144417046426960, 0.977133786997662510, 0.977123154506063680, 0.977112519571657010, +0.977101882194468920, 0.977091242374526270, 0.977080600111855270, 0.977069955406482890, 0.977059308258435680, 0.977048658667740160, 0.977038006634422970, 0.977027352158510890, +0.977016695240030320, 0.977006035879008030, 0.976995374075470550, 0.976984709829444740, 0.976974043140957150, 0.976963374010034520, 0.976952702436703400, 0.976942028420990540, +0.976931351962922580, 0.976920673062526280, 0.976909991719828060, 0.976899307934855130, 0.976888621707633800, 0.976877933038191040, 0.976867241926553390, 0.976856548372747710, +0.976845852376800550, 0.976835153938738650, 0.976824453058589000, 0.976813749736378250, 0.976803043972133130, 0.976792335765880430, 0.976781625117646770, 0.976770912027459140, +0.976760196495344290, 0.976749478521328650, 0.976738758105439530, 0.976728035247703570, 0.976717309948147430, 0.976706582206798070, 0.976695852023682250, 0.976685119398826850, +0.976674384332258390, 0.976663646824004190, 0.976652906874090900, 0.976642164482545260, 0.976631419649394260, 0.976620672374664770, 0.976609922658383530, 0.976599170500577430, +0.976588415901273320, 0.976577658860498300, 0.976566899378279230, 0.976556137454642760, 0.976545373089616090, 0.976534606283225860, 0.976523837035499160, 0.976513065346462870, +0.976502291216143850, 0.976491514644569180, 0.976480735631765630, 0.976469954177760390, 0.976459170282580220, 0.976448383946252110, 0.976437595168803020, 0.976426803950259830, +0.976416010290649730, 0.976405214189999700, 0.976394415648336510, 0.976383614665687350, 0.976372811242079200, 0.976362005377539030, 0.976351197072093720, 0.976340386325770360, +0.976329573138596140, 0.976318757510598050, 0.976307939441803050, 0.976297118932238140, 0.976286295981930510, 0.976275470590907140, 0.976264642759194780, 0.976253812486821080, +0.976242979773812910, 0.976232144620197250, 0.976221307026001180, 0.976210466991251910, 0.976199624515976530, 0.976188779600202010, 0.976177932243955330, 0.976167082447264020, +0.976156230210154960, 0.976145375532655460, 0.976134518414792370, 0.976123658856593130, 0.976112796858084610, 0.976101932419294220, 0.976091065540248710, 0.976080196220975750, +0.976069324461502410, 0.976058450261855560, 0.976047573622062740, 0.976036694542150920, 0.976025813022147410, 0.976014929062079100, 0.976004042661973710, 0.975993153821858250, +0.975982262541759900, 0.975971368821705880, 0.975960472661723370, 0.975949574061839690, 0.975938673022082150, 0.975927769542477730, 0.975916863623053970, 0.975905955263838170, +0.975895044464857420, 0.975884131226139150, 0.975873215547710450, 0.975862297429598740, 0.975851376871831320, 0.975840453874435190, 0.975829528437438200, 0.975818600560867330, +0.975807670244750010, 0.975796737489113440, 0.975785802293985150, 0.975774864659392230, 0.975763924585361990, 0.975752982071922180, 0.975742037119099900, 0.975731089726922460, +0.975720139895417390, 0.975709187624611900, 0.975698232914533500, 0.975687275765209530, 0.975676316176667060, 0.975665354148934070, 0.975654389682037770, 0.975643422776005350, +0.975632453430864470, 0.975621481646642420, 0.975610507423366750, 0.975599530761064540, 0.975588551659763660, 0.975577570119491420, 0.975566586140275360, 0.975555599722142670, +0.975544610865121120, 0.975533619569238010, 0.975522625834520760, 0.975511629660996920, 0.975500631048694110, 0.975489629997639660, 0.975478626507861210, 0.975467620579386190, +0.975456612212242110, 0.975445601406456530, 0.975434588162056860, 0.975423572479070630, 0.975412554357525610, 0.975401533797449210, 0.975390510798868960, 0.975379485361812400, +0.975368457486307180, 0.975357427172380830, 0.975346394420060660, 0.975335359229374750, 0.975324321600350430, 0.975313281533015330, 0.975302239027396990, 0.975291194083523050, +0.975280146701421160, 0.975269096881118850, 0.975258044622643650, 0.975246989926023540, 0.975235932791285950, 0.975224873218458520, 0.975213811207568890, 0.975202746758644820, +0.975191679871713730, 0.975180610546803490, 0.975169538783941640, 0.975158464583156030, 0.975147387944474310, 0.975136308867924130, 0.975125227353533130, 0.975114143401329070, +0.975103057011339700, 0.975091968183592450, 0.975080876918115400, 0.975069783214936310, 0.975058687074082610, 0.975047588495582260, 0.975036487479463030, 0.975025384025752450, +0.975014278134478500, 0.975003169805668590, 0.974992059039351040, 0.974980945835553280, 0.974969830194303170, 0.974958712115628460, 0.974947591599557020, 0.974936468646116490, +0.974925343255334750, 0.974914215427239770, 0.974903085161859200, 0.974891952459221000, 0.974880817319352940, 0.974869679742282780, 0.974858539728038380, 0.974847397276647710, +0.974836252388138310, 0.974825105062538500, 0.974813955299875910, 0.974802803100178420, 0.974791648463473990, 0.974780491389790390, 0.974769331879155490, 0.974758169931597360, +0.974747005547143550, 0.974735838725822480, 0.974724669467661790, 0.974713497772689450, 0.974702323640933340, 0.974691147072421440, 0.974679968067181600, 0.974668786625241700, +0.974657602746630050, 0.974646416431374400, 0.974635227679502720, 0.974624036491042900, 0.974612842866023010, 0.974601646804471030, 0.974590448306414950, 0.974579247371882510, +0.974568044000902130, 0.974556838193501700, 0.974545629949709170, 0.974534419269552530, 0.974523206153059870, 0.974511990600259280, 0.974500772611178620, 0.974489552185845760, +0.974478329324289350, 0.974467104026537020, 0.974455876292616980, 0.974444646122557210, 0.974433413516385900, 0.974422178474131040, 0.974410940995820480, 0.974399701081482770, +0.974388458731145880, 0.974377213944837780, 0.974365966722586680, 0.974354717064420670, 0.974343464970367830, 0.974332210440456370, 0.974320953474714150, 0.974309694073169700, +0.974298432235851110, 0.974287167962786360, 0.974275901254003760, 0.974264632109531400, 0.974253360529397370, 0.974242086513629870, 0.974230810062257310, 0.974219531175307680, +0.974208249852809290, 0.974196966094790230, 0.974185679901278690, 0.974174391272303100, 0.974163100207891430, 0.974151806708071780, 0.974140510772872890, 0.974129212402322750, +0.974117911596449450, 0.974106608355281510, 0.974095302678846920, 0.974083994567174210, 0.974072684020291460, 0.974061371038226760, 0.974050055621008880, 0.974038737768665790, +0.974027417481225900, 0.974016094758717530, 0.974004769601168880, 0.973993442008608270, 0.973982111981063880, 0.973970779518564480, 0.973959444621138040, 0.973948107288812980, +0.973936767521617730, 0.973925425319580480, 0.973914080682729670, 0.973902733611093700, 0.973891384104700770, 0.973880032163579430, 0.973868677787758100, 0.973857320977265070, +0.973845961732128670, 0.973834600052377430, 0.973823235938039770, 0.973811869389143880, 0.973800500405718190, 0.973789128987791460, 0.973777755135391890, 0.973766378848547890, +0.973755000127288000, 0.973743618971640520, 0.973732235381634110, 0.973720849357296860, 0.973709460898657620, 0.973698070005744820, 0.973686676678586770, 0.973675280917212120, +0.973663882721649280, 0.973652482091926670, 0.973641079028072840, 0.973629673530116090, 0.973618265598085400, 0.973606855232009070, 0.973595442431915650, 0.973584027197833550, +0.973572609529791300, 0.973561189427817660, 0.973549766891940840, 0.973538341922189690, 0.973526914518592860, 0.973515484681178660, 0.973504052409975620, 0.973492617705012610, +0.973481180566318050, 0.973469740993920470, 0.973458298987848410, 0.973446854548130740, 0.973435407674795970, 0.973423958367872650, 0.973412506627389430, 0.973401052453374940, +0.973389595845857940, 0.973378136804866840, 0.973366675330430200, 0.973355211422577080, 0.973343745081335920, 0.973332276306735470, 0.973320805098804250, 0.973309331457571040, +0.973297855383064460, 0.973286376875313050, 0.973274895934346020, 0.973263412560191670, 0.973251926752878750, 0.973240438512436020, 0.973228947838892240, 0.973217454732276050, +0.973205959192616320, 0.973194461219941350, 0.973182960814280570, 0.973171457975662290, 0.973159952704115370, 0.973148444999668570, 0.973136934862350760, 0.973125422292190460, +0.973113907289216540, 0.973102389853457980, 0.973090869984943430, 0.973079347683701750, 0.973067822949761680, 0.973056295783152110, 0.973044766183901680, 0.973033234152039460, +0.973021699687593890, 0.973010162790594270, 0.972998623461069250, 0.972987081699047680, 0.972975537504558340, 0.972963990877630190, 0.972952441818292100, 0.972940890326572940, +0.972929336402501340, 0.972917780046106520, 0.972906221257417330, 0.972894660036462520, 0.972883096383271080, 0.972871530297871990, 0.972859961780293990, 0.972848390830565850, +0.972836817448716970, 0.972825241634776130, 0.972813663388772070, 0.972802082710733870, 0.972790499600690530, 0.972778914058670900, 0.972767326084703950, 0.972755735678818570, +0.972744142841044050, 0.972732547571409030, 0.972720949869942840, 0.972709349736674110, 0.972697747171632040, 0.972686142174845720, 0.972674534746343910, 0.972662924886155580, +0.972651312594310260, 0.972639697870836480, 0.972628080715763570, 0.972616461129120480, 0.972604839110936200, 0.972593214661239820, 0.972581587780060210, 0.972569958467426780, +0.972558326723368500, 0.972546692547914370, 0.972535055941093570, 0.972523416902935090, 0.972511775433468120, 0.972500131532721630, 0.972488485200724620, 0.972476836437506600, +0.972465185243096550, 0.972453531617523570, 0.972441875560816630, 0.972430217073005030, 0.972418556154117990, 0.972406892804184240, 0.972395227023233550, 0.972383558811294790, +0.972371888168397040, 0.972360215094569710, 0.972348539589841690, 0.972336861654242380, 0.972325181287800990, 0.972313498490546380, 0.972301813262508200, 0.972290125603715530, +0.972278435514197570, 0.972266742993983520, 0.972255048043102480, 0.972243350661583960, 0.972231650849457060, 0.972219948606750760, 0.972208243933494810, 0.972196536829718290, +0.972184827295450420, 0.972173115330720480, 0.972161400935557700, 0.972149684109991470, 0.972137964854050800, 0.972126243167765520, 0.972114519051164530, 0.972102792504277220, +0.972091063527133040, 0.972079332119761050, 0.972067598282190800, 0.972055862014451600, 0.972044123316572530, 0.972032382188583340, 0.972020638630513130, 0.972008892642391430, +0.971997144224247430, 0.971985393376110670, 0.971973640098010350, 0.971961884389975880, 0.971950126252036580, 0.971938365684222090, 0.971926602686561720, 0.971914837259084900, +0.971903069401820920, 0.971891299114799320, 0.971879526398049420, 0.971867751251600520, 0.971855973675482490, 0.971844193669724520, 0.971832411234356040, 0.971820626369406470, +0.971808839074905450, 0.971797049350882180, 0.971785257197366410, 0.971773462614387240, 0.971761665601974630, 0.971749866160157900, 0.971738064288966470, 0.971726259988429870, +0.971714453258577640, 0.971702644099439290, 0.971690832511044160, 0.971679018493422090, 0.971667202046602510, 0.971655383170614840, 0.971643561865488840, 0.971631738131253810, +0.971619911967939510, 0.971608083375575360, 0.971596252354190890, 0.971584418903815970, 0.971572583024480020, 0.971560744716212570, 0.971548903979043250, 0.971537060813001730, +0.971525215218117520, 0.971513367194420270, 0.971501516741939410, 0.971489663860704900, 0.971477808550746280, 0.971465950812093190, 0.971454090644775170, 0.971442228048821850, +0.971430363024263110, 0.971418495571128140, 0.971406625689447250, 0.971394753379249740, 0.971382878640565270, 0.971371001473423700, 0.971359121877854560, 0.971347239853887710, +0.971335355401552690, 0.971323468520879140, 0.971311579211897040, 0.971299687474636020, 0.971287793309125850, 0.971275896715396050, 0.971263997693476600, 0.971252096243397260, +0.971240192365187550, 0.971228286058877120, 0.971216377324496280, 0.971204466162074450, 0.971192552571641500, 0.971180636553227060, 0.971168718106861120, 0.971156797232573420, +0.971144873930393390, 0.971132948200351450, 0.971121020042477130, 0.971109089456800300, 0.971097156443350820, 0.971085221002158330, 0.971073283133252810, 0.971061342836664010, +0.971049400112421800, 0.971037454960556160, 0.971025507381096940, 0.971013557374074020, 0.971001604939517150, 0.970989650077456190, 0.970977692787921230, 0.970965733070941810, +0.970953770926548220, 0.970941806354770120, 0.970929839355637700, 0.970917869929180500, 0.970905898075428710, 0.970893923794412190, 0.970881947086160820, 0.970869967950704460, +0.970857986388073300, 0.970846002398297210, 0.970834015981406060, 0.970822027137429930, 0.970810035866398800, 0.970798042168342420, 0.970786046043291000, 0.970774047491274270, +0.970762046512322670, 0.970750043106465950, 0.970738037273734090, 0.970726029014157170, 0.970714018327765050, 0.970702005214588050, 0.970689989674655700, 0.970677971707998630, +0.970665951314646720, 0.970653928494629840, 0.970641903247978170, 0.970629875574721690, 0.970617845474890610, 0.970605812948514780, 0.970593777995624300, 0.970581740616249580, +0.970569700810420600, 0.970557658578167230, 0.970545613919519770, 0.970533566834508310, 0.970521517323162830, 0.970509465385513640, 0.970497411021590590, 0.970485354231424120, +0.970473295015044310, 0.970461233372481360, 0.970449169303765240, 0.970437102808926260, 0.970425033887994390, 0.970412962540999850, 0.970400888767973040, 0.970388812568944050, +0.970376733943943080, 0.970364652893000220, 0.970352569416145670, 0.970340483513409740, 0.970328395184822610, 0.970316304430414280, 0.970304211250215490, 0.970292115644255990, +0.970280017612566330, 0.970267917155176570, 0.970255814272117050, 0.970243708963418050, 0.970231601229109450, 0.970219491069222120, 0.970207378483786130, 0.970195263472831580, +0.970183146036388890, 0.970171026174488360, 0.970158903887160310, 0.970146779174434930, 0.970134652036342420, 0.970122522472913530, 0.970110390484178240, 0.970098256070167090, +0.970086119230910150, 0.970073979966438070, 0.970061838276780940, 0.970049694161969290, 0.970037547622033090, 0.970025398657003320, 0.970013247266909960, 0.970001093451783650, +0.969988937211654470, 0.969976778546552950, 0.969964617456509530, 0.969952453941554380, 0.969940288001718280, 0.969928119637031410, 0.969915948847524300, 0.969903775633227270, +0.969891599994170850, 0.969879421930385340, 0.969867241441901400, 0.969855058528749090, 0.969842873190959300, 0.969830685428562430, 0.969818495241588810, 0.969806302630068950, +0.969794107594033280, 0.969781910133512340, 0.969769710248536750, 0.969757507939136510, 0.969745303205342800, 0.969733096047185830, 0.969720886464696120, 0.969708674457904210, +0.969696460026840620, 0.969684243171535790, 0.969672023892020230, 0.969659802188324820, 0.969647578060479850, 0.969635351508515990, 0.969623122532463740, 0.969610891132353660, +0.969598657308216370, 0.969586421060082420, 0.969574182387982210, 0.969561941291946730, 0.969549697772006500, 0.969537451828191950, 0.969525203460533720, 0.969512952669062570, +0.969500699453809010, 0.969488443814803480, 0.969476185752077060, 0.969463925265660160, 0.969451662355583550, 0.969439397021877650, 0.969427129264573310, 0.969414859083701170, +0.969402586479291890, 0.969390311451375890, 0.969378033999984230, 0.969365754125147690, 0.969353471826896570, 0.969341187105261960, 0.969328899960274270, 0.969316610391964370, +0.969304318400362910, 0.969292023985500410, 0.969279727147408180, 0.969267427886116530, 0.969255126201656330, 0.969242822094058320, 0.969230515563353270, 0.969218206609571920, +0.969205895232744810, 0.969193581432903240, 0.969181265210077750, 0.969168946564298970, 0.969156625495597890, 0.969144302004005250, 0.969131976089551820, 0.969119647752268550, +0.969107316992185890, 0.969094983809335120, 0.969082648203746900, 0.969070310175452090, 0.969057969724481440, 0.969045626850865930, 0.969033281554636310, 0.969020933835823330, +0.969008583694458190, 0.968996231130571650, 0.968983876144194460, 0.968971518735357580, 0.968959158904091900, 0.968946796650428380, 0.968934431974397880, 0.968922064876031050, +0.968909695355359200, 0.968897323412413190, 0.968884949047223890, 0.968872572259822150, 0.968860193050239070, 0.968847811418505510, 0.968835427364652340, 0.968823040888710410, +0.968810651990711040, 0.968798260670685200, 0.968785866928663530, 0.968773470764677350, 0.968761072178757400, 0.968748671170934770, 0.968736267741240220, 0.968723861889705270, +0.968711453616360680, 0.968699042921237430, 0.968686629804366590, 0.968674214265779150, 0.968661796305506200, 0.968649375923578690, 0.968636953120027620, 0.968624527894884400, +0.968612100248179790, 0.968599670179944860, 0.968587237690210930, 0.968574802779008760, 0.968562365446369640, 0.968549925692324680, 0.968537483516904610, 0.968525038920140970, +0.968512591902064850, 0.968500142462707210, 0.968487690602099270, 0.968475236320271990, 0.968462779617256690, 0.968450320493084220, 0.968437858947786220, 0.968425394981393460, +0.968412928593937350, 0.968400459785448860, 0.968387988555959200, 0.968375514905499560, 0.968363038834101130, 0.968350560341794900, 0.968338079428612500, 0.968325596094584910, +0.968313110339743320, 0.968300622164118940, 0.968288131567742960, 0.968275638550646690, 0.968263143112861210, 0.968250645254417950, 0.968238144975348100, 0.968225642275682970, +0.968213137155453650, 0.968200629614691550, 0.968188119653427880, 0.968175607271693830, 0.968163092469520590, 0.968150575246939820, 0.968138055603982580, 0.968125533540680320, +0.968113009057064100, 0.968100482153165460, 0.968087952829015610, 0.968075421084645840, 0.968062886920087240, 0.968050350335371680, 0.968037811330530350, 0.968025269905594340, +0.968012726060595300, 0.968000179795564300, 0.967987631110532990, 0.967975080005532230, 0.967962526480594110, 0.967949970535749600, 0.967937412171030240, 0.967924851386467330, +0.967912288182092300, 0.967899722557936440, 0.967887154514031400, 0.967874584050408160, 0.967862011167098800, 0.967849435864134300, 0.967836858141546300, 0.967824277999366100, +0.967811695437625240, 0.967799110456355140, 0.967786523055587210, 0.967773933235352770, 0.967761340995683780, 0.967748746336611340, 0.967736149258167090, 0.967723549760382440, +0.967710947843288930, 0.967698343506918080, 0.967685736751301100, 0.967673127576470060, 0.967660515982456170, 0.967647901969290960, 0.967635285537006060, 0.967622666685632900, +0.967610045415203120, 0.967597421725748250, 0.967584795617299490, 0.967572167089889020, 0.967559536143548170, 0.967546902778308460, 0.967534266994201420, 0.967521628791258800, +0.967508988169512140, 0.967496345128992630, 0.967483699669732580, 0.967471051791763290, 0.967458401495116420, 0.967445748779823480, 0.967433093645916120, 0.967420436093426090, +0.967407776122385040, 0.967395113732824160, 0.967382448924775870, 0.967369781698271370, 0.967357112053342520, 0.967344439990020730, 0.967331765508337990, 0.967319088608325720, +0.967306409290015770, 0.967293727553439680, 0.967281043398629300, 0.967268356825616400, 0.967255667834432620, 0.967242976425109700, 0.967230282597679290, 0.967217586352173250, +0.967204887688623010, 0.967192186607060630, 0.967179483107517890, 0.967166777190026530, 0.967154068854618080, 0.967141358101324510, 0.967128644930177580, 0.967115929341208940, +0.967103211334450320, 0.967090490909933930, 0.967077768067691300, 0.967065042807754180, 0.967052315130154550, 0.967039585034924040, 0.967026852522094640, 0.967014117591698090, +0.967001380243766030, 0.966988640478330770, 0.966975898295423850, 0.966963153695077130, 0.966950406677322680, 0.966937657242192160, 0.966924905389717430, 0.966912151119930230, +0.966899394432862880, 0.966886635328547130, 0.966873873807014730, 0.966861109868297650, 0.966848343512427770, 0.966835574739437040, 0.966822803549357350, 0.966810029942220430, +0.966797253918058710, 0.966784475476903940, 0.966771694618787870, 0.966758911343742480, 0.966746125651799960, 0.966733337542992070, 0.966720547017350550, 0.966707754074908050, +0.966694958715696000, 0.966682160939746680, 0.966669360747091870, 0.966656558137763740, 0.966643753111794070, 0.966630945669215150, 0.966618135810058620, 0.966605323534356910, +0.966592508842141980, 0.966579691733445710, 0.966566872208300290, 0.966554050266737570, 0.966541225908789880, 0.966528399134488960, 0.966515569943866890, 0.966502738336956210, +0.966489904313788560, 0.966477067874396130, 0.966464229018811130, 0.966451387747065520, 0.966438544059191500, 0.966425697955220820, 0.966412849435186130, 0.966399998499119280, +0.966387145147052480, 0.966374289379017810, 0.966361431195047470, 0.966348570595173540, 0.966335707579428100, 0.966322842147843250, 0.966309974300451510, 0.966297104037284750, +0.966284231358375270, 0.966271356263755270, 0.966258478753456830, 0.966245598827512260, 0.966232716485953660, 0.966219831728812980, 0.966206944556122990, 0.966194054967915660, +0.966181162964223180, 0.966168268545077760, 0.966155371710511690, 0.966142472460557180, 0.966129570795246310, 0.966116666714611720, 0.966103760218685490, 0.966090851307499830, +0.966077939981087040, 0.966065026239479320, 0.966052110082709080, 0.966039191510808640, 0.966026270523809960, 0.966013347121745800, 0.966000421304648360, 0.965987493072549720, +0.965974562425482520, 0.965961629363478740, 0.965948693886571010, 0.965935755994791310, 0.965922815688172400, 0.965909872966746460, 0.965896927830545820, 0.965883980279602870, +0.965871030313950050, 0.965858077933619550, 0.965845123138643900, 0.965832165929055300, 0.965819206304886380, 0.965806244266169460, 0.965793279812936940, 0.965780312945221260, +0.965767343663054830, 0.965754371966469960, 0.965741397855499170, 0.965728421330174780, 0.965715442390529420, 0.965702461036595520, 0.965689477268405480, 0.965676491085991630, +0.965663502489386700, 0.965650511478622910, 0.965637518053732660, 0.965624522214748810, 0.965611523961703690, 0.965598523294629810, 0.965585520213559590, 0.965572514718525570, +0.965559506809560150, 0.965546496486696100, 0.965533483749965500, 0.965520468599401440, 0.965507451035036320, 0.965494431056902470, 0.965481408665032510, 0.965468383859459100, +0.965455356640214650, 0.965442327007331680, 0.965429294960843070, 0.965416260500781220, 0.965403223627178670, 0.965390184340068180, 0.965377142639482160, 0.965364098525453240, +0.965351051998014190, 0.965338003057197190, 0.965324951703035450, 0.965311897935561270, 0.965298841754807400, 0.965285783160806490, 0.965272722153591060, 0.965259658733193750, +0.965246592899647430, 0.965233524652984290, 0.965220453993237640, 0.965207380920439780, 0.965194305434623480, 0.965181227535821470, 0.965168147224066410, 0.965155064499390920, +0.965141979361827550, 0.965128891811409480, 0.965115801848169140, 0.965102709472139390, 0.965089614683352750, 0.965076517481842200, 0.965063417867640270, 0.965050315840779830, +0.965037211401293280, 0.965024104549214060, 0.965010995284574570, 0.964997883607407460, 0.964984769517745810, 0.964971653015622160, 0.964958534101069350, 0.964945412774120270, +0.964932289034807320, 0.964919162883163930, 0.964906034319222730, 0.964892903343016360, 0.964879769954577690, 0.964866634153939700, 0.964853495941135010, 0.964840355316196390, +0.964827212279157130, 0.964814066830049890, 0.964800918968907410, 0.964787768695762660, 0.964774616010648510, 0.964761460913597820, 0.964748303404643460, 0.964735143483818060, +0.964721981151155040, 0.964708816406687150, 0.964695649250447150, 0.964682479682468120, 0.964669307702782810, 0.964656133311424190, 0.964642956508425130, 0.964629777293818820, +0.964616595667638020, 0.964603411629915810, 0.964590225180685160, 0.964577036319978820, 0.964563845047829880, 0.964550651364271430, 0.964537455269335990, 0.964524256763057200, +0.964511055845467810, 0.964497852516600810, 0.964484646776489040, 0.964471438625165820, 0.964458228062663900, 0.964445015089016370, 0.964431799704256190, 0.964418581908416670, +0.964405361701530680, 0.964392139083631310, 0.964378914054751620, 0.964365686614924610, 0.964352456764183350, 0.964339224502560820, 0.964325989830090440, 0.964312752746805060, +0.964299513252737770, 0.964286271347921660, 0.964273027032389930, 0.964259780306175650, 0.964246531169311920, 0.964233279621831580, 0.964220025663768300, 0.964206769295155030, +0.964193510516024750, 0.964180249326410670, 0.964166985726346070, 0.964153719715863940, 0.964140451294997480, 0.964127180463779650, 0.964113907222244220, 0.964100631570423920, +0.964087353508352060, 0.964074073036061850, 0.964060790153586480, 0.964047504860959030, 0.964034217158212690, 0.964020927045381000, 0.964007634522496940, 0.963994339589593910, +0.963981042246704890, 0.963967742493863410, 0.963954440331102450, 0.963941135758455530, 0.963927828775955400, 0.963914519383636040, 0.963901207581530310, 0.963887893369671510, +0.963874576748093070, 0.963861257716828180, 0.963847936275910140, 0.963834612425372050, 0.963821286165247650, 0.963807957495570020, 0.963794626416372480, 0.963781292927688330, +0.963767957029550980, 0.963754618721993860, 0.963741278005050050, 0.963727934878752860, 0.963714589343136030, 0.963701241398232770, 0.963687891044076480, 0.963674538280700380, +0.963661183108137860, 0.963647825526422470, 0.963634465535587510, 0.963621103135666180, 0.963607738326692330, 0.963594371108699050, 0.963581001481719880, 0.963567629445788220, +0.963554255000937500, 0.963540878147201130, 0.963527498884612310, 0.963514117213205010, 0.963500733133012430, 0.963487346644067990, 0.963473957746405210, 0.963460566440057510, +0.963447172725058420, 0.963433776601441360, 0.963420378069239640, 0.963406977128487220, 0.963393573779217300, 0.963380168021463530, 0.963366759855259320, 0.963353349280638200, +0.963339936297633700, 0.963326520906279350, 0.963313103106608450, 0.963299682898655090, 0.963286260282452460, 0.963272835258034200, 0.963259407825433840, 0.963245977984685030, +0.963232545735821180, 0.963219111078875810, 0.963205674013882910, 0.963192234540875770, 0.963178792659888040, 0.963165348370953360, 0.963151901674105250, 0.963138452569377470, +0.963125001056803540, 0.963111547136416780, 0.963098090808251480, 0.963084632072340960, 0.963071170928718860, 0.963057707377418800, 0.963044241418474440, 0.963030773051919530, +0.963017302277787480, 0.963003829096112260, 0.962990353506927630, 0.962976875510267120, 0.962963395106164350, 0.962949912294653100, 0.962936427075767100, 0.962922939449539990, +0.962909449416005310, 0.962895956975197250, 0.962882462127149230, 0.962868964871895110, 0.962855465209468630, 0.962841963139903450, 0.962828458663233410, 0.962814951779492170, +0.962801442488713240, 0.962787930790931060, 0.962774416686179020, 0.962760900174490900, 0.962747381255900650, 0.962733859930441800, 0.962720336198148340, 0.962706810059053900, +0.962693281513192560, 0.962679750560598070, 0.962666217201304190, 0.962652681435344770, 0.962639143262753570, 0.962625602683564670, 0.962612059697811610, 0.962598514305528230, +0.962584966506748850, 0.962571416301507000, 0.962557863689836650, 0.962544308671771540, 0.962530751247345770, 0.962517191416593090, 0.962503629179547350, 0.962490064536242420, +0.962476497486712490, 0.962462928030991320, 0.962449356169112870, 0.962435781901111010, 0.962422205227019710, 0.962408626146872950, 0.962395044660704250, 0.962381460768548250, +0.962367874470438590, 0.962354285766409360, 0.962340694656494300, 0.962327101140727500, 0.962313505219142940, 0.962299906891774580, 0.962286306158656290, 0.962272703019822480, +0.962259097475306910, 0.962245489525143550, 0.962231879169366480, 0.962218266408009780, 0.962204651241107320, 0.962191033668693070, 0.962177413690801450, 0.962163791307466320, +0.962150166518721650, 0.962136539324601640, 0.962122909725140140, 0.962109277720371470, 0.962095643310329600, 0.962082006495048380, 0.962068367274562460, 0.962054725648905480, +0.962041081618111750, 0.962027435182215340, 0.962013786341250340, 0.962000135095250840, 0.961986481444251030, 0.961972825388284770, 0.961959166927386700, 0.961945506061590680, +0.961931842790930910, 0.961918177115441590, 0.961904509035156790, 0.961890838550110590, 0.961877165660337210, 0.961863490365871150, 0.961849812666746300, 0.961836132562996940, +0.961822450054657270, 0.961808765141761500, 0.961795077824343700, 0.961781388102438290, 0.961767695976079250, 0.961754001445301100, 0.961740304510137920, 0.961726605170624030, +0.961712903426793610, 0.961699199278680970, 0.961685492726320310, 0.961671783769745710, 0.961658072408991820, 0.961644358644092810, 0.961630642475082900, 0.961616923901996380, +0.961603202924867560, 0.961589479543730750, 0.961575753758620140, 0.961562025569569930, 0.961548294976614980, 0.961534561979789260, 0.961520826579127070, 0.961507088774662950, +0.961493348566430980, 0.961479605954465690, 0.961465860938801380, 0.961452113519472240, 0.961438363696512920, 0.961424611469957830, 0.961410856839841180, 0.961397099806197360, +0.961383340369060810, 0.961369578528465830, 0.961355814284446720, 0.961342047637038340, 0.961328278586274790, 0.961314507132190580, 0.961300733274820130, 0.961286957014197860, +0.961273178350358080, 0.961259397283335430, 0.961245613813164090, 0.961231827939878940, 0.961218039663514160, 0.961204248984104280, 0.961190455901683840, 0.961176660416287240, +0.961162862527948910, 0.961149062236703600, 0.961135259542585270, 0.961121454445629020, 0.961107646945869140, 0.961093837043340170, 0.961080024738076630, 0.961066210030113060, +0.961052392919483860, 0.961038573406223450, 0.961024751490366920, 0.961010927171948470, 0.960997100451002730, 0.960983271327564230, 0.960969439801667490, 0.960955605873347270, +0.960941769542637990, 0.960927930809573950, 0.960914089674190450, 0.960900246136521700, 0.960886400196602320, 0.960872551854466850, 0.960858701110150150, 0.960844847963686630, +0.960830992415110720, 0.960817134464457600, 0.960803274111761700, 0.960789411357057530, 0.960775546200379860, 0.960761678641763320, 0.960747808681242540, 0.960733936318852290, +0.960720061554626970, 0.960706184388601780, 0.960692304820811030, 0.960678422851289570, 0.960664538480072050, 0.960650651707193210, 0.960636762532687700, 0.960622870956590270, +0.960608976978935440, 0.960595080599758510, 0.960581181819093690, 0.960567280636976050, 0.960553377053440240, 0.960539471068520890, 0.960525562682252860, 0.960511651894670690, +0.960497738705809680, 0.960483823115704350, 0.960469905124389340, 0.960455984731899640, 0.960442061938269980, 0.960428136743535220, 0.960414209147730010, 0.960400279150889100, +0.960386346753047790, 0.960372411954240500, 0.960358474754502200, 0.960344535153867750, 0.960330593152372010, 0.960316648750049740, 0.960302701946935790, 0.960288752743064910, +0.960274801138472410, 0.960260847133192820, 0.960246890727261220, 0.960232931920712350, 0.960218970713581090, 0.960205007105902510, 0.960191041097711030, 0.960177072689042290, +0.960163101879930920, 0.960149128670411690, 0.960135153060519660, 0.960121175050289820, 0.960107194639756910, 0.960093211828956130, 0.960079226617922000, 0.960065239006690160, +0.960051248995295150, 0.960037256583772040, 0.960023261772155690, 0.960009264560481300, 0.959995264948783730, 0.959981262937097730, 0.959967258525458830, 0.959953251713901780, +0.959939242502461540, 0.959925230891173320, 0.959911216880071970, 0.959897200469192580, 0.959883181658570120, 0.959869160448239560, 0.959855136838236200, 0.959841110828595130, +0.959827082419351330, 0.959813051610539650, 0.959799018402195500, 0.959784982794353760, 0.959770944787049500, 0.959756904380317690, 0.959742861574193860, 0.959728816368712880, +0.959714768763909820, 0.959700718759819880, 0.959686666356478150, 0.959672611553919700, 0.959658554352179500, 0.959644494751293210, 0.959630432751295670, 0.959616368352221970, +0.959602301554107420, 0.959588232356987090, 0.959574160760896190, 0.959560086765869900, 0.959546010371943200, 0.959531931579151620, 0.959517850387530240, 0.959503766797114240, +0.959489680807938840, 0.959475592420039210, 0.959461501633450680, 0.959447408448208310, 0.959433312864347190, 0.959419214881903070, 0.959405114500910820, 0.959391011721405840, +0.959376906543423340, 0.959362798966998610, 0.959348688992166850, 0.959334576618963150, 0.959320461847423140, 0.959306344677582130, 0.959292225109475210, 0.959278103143137660, +0.959263978778604920, 0.959249852015912170, 0.959235722855094840, 0.959221591296188000, 0.959207457339227300, 0.959193320984248030, 0.959179182231285510, 0.959165041080375040, +0.959150897531551920, 0.959136751584851450, 0.959122603240309070, 0.959108452497960280, 0.959094299357840410, 0.959080143819984740, 0.959065985884428710, 0.959051825551207830, +0.959037662820357300, 0.959023497691912640, 0.959009330165908950, 0.958995160242382180, 0.958980987921367540, 0.958966813202900450, 0.958952636087016310, 0.958938456573750540, +0.958924274663138680, 0.958910090355216130, 0.958895903650018090, 0.958881714547580530, 0.958867523047938650, 0.958853329151128090, 0.958839132857184140, 0.958824934166142340, +0.958810733078038210, 0.958796529592906950, 0.958782323710784650, 0.958768115431706590, 0.958753904755708210, 0.958739691682825020, 0.958725476213092680, 0.958711258346546690, +0.958697038083222490, 0.958682815423155370, 0.958668590366381520, 0.958654362912936260, 0.958640133062855000, 0.958625900816173490, 0.958611666172927150, 0.958597429133151710, +0.958583189696882610, 0.958568947864155360, 0.958554703635005940, 0.958540457009469880, 0.958526207987582590, 0.958511956569379820, 0.958497702754897100, 0.958483446544170170, +0.958469187937234350, 0.958454926934125710, 0.958440663534879890, 0.958426397739532420, 0.958412129548118940, 0.958397858960675090, 0.958383585977236610, 0.958369310597839140, +0.958355032822518220, 0.958340752651309910, 0.958326470084249650, 0.958312185121373390, 0.958297897762716570, 0.958283608008315020, 0.958269315858204410, 0.958255021312420240, +0.958240724370998830, 0.958226425033975590, 0.958212123301386280, 0.958197819173266740, 0.958183512649652510, 0.958169203730579680, 0.958154892416083650, 0.958140578706200290, +0.958126262600965670, 0.958111944100415340, 0.958097623204585250, 0.958083299913511040, 0.958068974227228590, 0.958054646145773740, 0.958040315669182240, 0.958025982797489740, +0.958011647530732540, 0.957997309868946160, 0.957982969812166460, 0.957968627360429430, 0.957954282513770790, 0.957939935272226540, 0.957925585635832080, 0.957911233604623940, +0.957896879178637750, 0.957882522357909380, 0.957868163142474690, 0.957853801532369540, 0.957839437527629900, 0.957825071128291740, 0.957810702334390580, 0.957796331145962850, +0.957781957563044410, 0.957767581585671100, 0.957753203213878690, 0.957738822447703360, 0.957724439287180980, 0.957710053732347300, 0.957695665783238730, 0.957681275439890900, +0.957666882702339910, 0.957652487570621710, 0.957638090044772290, 0.957623690124827730, 0.957609287810823880, 0.957594883102796610, 0.957580476000782330, 0.957566066504816790, +0.957551654614936190, 0.957537240331176490, 0.957522823653573550, 0.957508404582163690, 0.957493983116982750, 0.957479559258066600, 0.957465133005451770, 0.957450704359174230, +0.957436273319269840, 0.957421839885774780, 0.957407404058725040, 0.957392965838156920, 0.957378525224106050, 0.957364082216609180, 0.957349636815702070, 0.957335189021420900, +0.957320738833801750, 0.957306286252880720, 0.957291831278693990, 0.957277373911277650, 0.957262914150667670, 0.957248451996900670, 0.957233987450012540, 0.957219520510039450, +0.957205051177017490, 0.957190579450982960, 0.957176105331971950, 0.957161628820020650, 0.957147149915165030, 0.957132668617441840, 0.957118184926887050, 0.957103698843536630, +0.957089210367427110, 0.957074719498594460, 0.957060226237075100, 0.957045730582904870, 0.957031232536120550, 0.957016732096758190, 0.957002229264853900, 0.956987724040444190, +0.956973216423565030, 0.956958706414252960, 0.956944194012544050, 0.956929679218474380, 0.956915162032080820, 0.956900642453399340, 0.956886120482466240, 0.956871596119317820, +0.956857069363990400, 0.956842540216520380, 0.956828008676943730, 0.956813474745297320, 0.956798938421617230, 0.956784399705939760, 0.956769858598301330, 0.956755315098738120, +0.956740769207286790, 0.956726220923983520, 0.956711670248864390, 0.956697117181966260, 0.956682561723325440, 0.956668003872978230, 0.956653443630961050, 0.956638880997310090, +0.956624315972062100, 0.956609748555253270, 0.956595178746919790, 0.956580606547098640, 0.956566031955825900, 0.956551454973138200, 0.956536875599071750, 0.956522293833663160, +0.956507709676948870, 0.956493123128965060, 0.956478534189748600, 0.956463942859335890, 0.956449349137763250, 0.956434753025067310, 0.956420154521284480, 0.956405553626451300, +0.956390950340604170, 0.956376344663779410, 0.956361736596014090, 0.956347126137344410, 0.956332513287806880, 0.956317898047438050, 0.956303280416274550, 0.956288660394352790, +0.956274037981709400, 0.956259413178380700, 0.956244785984403660, 0.956230156399814680, 0.956215524424650300, 0.956200890058947150, 0.956186253302741760, 0.956171614156070770, +0.956156972618970370, 0.956142328691477860, 0.956127682373629550, 0.956113033665462080, 0.956098382567011960, 0.956083729078315850, 0.956069073199410480, 0.956054414930332390, +0.956039754271118090, 0.956025091221804570, 0.956010425782428340, 0.955995757953026050, 0.955981087733634330, 0.955966415124289930, 0.955951740125029590, 0.955937062735889520, +0.955922382956907010, 0.955907700788118710, 0.955893016229561020, 0.955878329281270810, 0.955863639943284830, 0.955848948215639700, 0.955834254098372190, 0.955819557591518820, +0.955804858695116890, 0.955790157409202700, 0.955775453733813120, 0.955760747668984890, 0.955746039214754870, 0.955731328371159710, 0.955716615138236250, 0.955701899516021030, +0.955687181504551230, 0.955672461103863500, 0.955657738313994700, 0.955643013134981460, 0.955628285566860750, 0.955613555609669320, 0.955598823263443700, 0.955584088528221300, +0.955569351404038650, 0.955554611890932710, 0.955539869988940140, 0.955525125698098000, 0.955510379018442930, 0.955495629950012030, 0.955480878492841690, 0.955466124646969450, +0.955451368412431950, 0.955436609789265920, 0.955421848777508460, 0.955407085377196320, 0.955392319588366570, 0.955377551411055960, 0.955362780845301130, 0.955348007891139720, +0.955333232548608250, 0.955318454817743690, 0.955303674698583020, 0.955288892191163090, 0.955274107295520980, 0.955259320011693450, 0.955244530339717680, 0.955229738279630760, +0.955214943831469430, 0.955200146995270670, 0.955185347771071670, 0.955170546158909170, 0.955155742158820380, 0.955140935770842030, 0.955126126995011540, 0.955111315831365660, +0.955096502279941580, 0.955081686340776170, 0.955066868013906610, 0.955052047299369880, 0.955037224197202830, 0.955022398707442880, 0.955007570830126990, 0.954992740565292150, +0.954977907912975430, 0.954963072873213910, 0.954948235446044790, 0.954933395631505140, 0.954918553429631610, 0.954903708840462050, 0.954888861864033100, 0.954874012500382060, +0.954859160749546020, 0.954844306611562050, 0.954829450086467360, 0.954814591174299010, 0.954799729875093870, 0.954784866188889800, 0.954770000115723440, 0.954755131655632190, +0.954740260808653040, 0.954725387574823170, 0.954710511954179890, 0.954695633946760160, 0.954680753552601510, 0.954665870771741030, 0.954650985604215800, 0.954636098050063110, +0.954621208109320270, 0.954606315782024370, 0.954591421068212600, 0.954576523967922140, 0.954561624481190530, 0.954546722608054950, 0.954531818348552500, 0.954516911702720460, +0.954502002670596260, 0.954487091252216980, 0.954472177447620030, 0.954457261256842270, 0.954442342679921670, 0.954427421716895210, 0.954412498367800290, 0.954397572632674000, +0.954382644511553860, 0.954367714004477060, 0.954352781111480700, 0.954337845832602730, 0.954322908167880010, 0.954307968117350190, 0.954293025681050340, 0.954278080859017890, +0.954263133651290340, 0.954248184057904900, 0.954233232078898760, 0.954218277714309780, 0.954203320964175150, 0.954188361828532170, 0.954173400307418370, 0.954158436400870950, +0.954143470108927530, 0.954128501431625090, 0.954113530369001710, 0.954098556921094580, 0.954083581087940890, 0.954068602869578400, 0.954053622266044290, 0.954038639277376200, +0.954023653903611550, 0.954008666144787410, 0.953993676000941870, 0.953978683472112120, 0.953963688558335800, 0.953948691259650090, 0.953933691576092760, 0.953918689507701200, +0.953903685054512840, 0.953888678216565090, 0.953873668993895920, 0.953858657386542520, 0.953843643394542420, 0.953828627017933360, 0.953813608256752650, 0.953798587111037930, +0.953783563580826390, 0.953768537666156320, 0.953753509367064930, 0.953738478683589630, 0.953723445615768270, 0.953708410163638280, 0.953693372327237170, 0.953678332106602690, +0.953663289501772150, 0.953648244512783630, 0.953633197139674430, 0.953618147382482300, 0.953603095241244760, 0.953588040715999560, 0.953572983806784240, 0.953557924513636410, +0.953542862836593510, 0.953527798775693710, 0.953512732330974440, 0.953497663502473340, 0.953482592290228140, 0.953467518694276370, 0.953452442714655790, 0.953437364351403920, +0.953422283604558940, 0.953407200474158170, 0.953392114960239350, 0.953377027062840330, 0.953361936781998760, 0.953346844117752280, 0.953331749070138730, 0.953316651639195540, +0.953301551824960900, 0.953286449627472440, 0.953271345046767920, 0.953256238082884950, 0.953241128735861420, 0.953226017005735060, 0.953210902892543400, 0.953195786396324850, +0.953180667517116720, 0.953165546254956860, 0.953150422609883250, 0.953135296581933520, 0.953120168171145640, 0.953105037377557250, 0.953089904201206100, 0.953074768642130370, +0.953059630700367700, 0.953044490375955950, 0.953029347668933100, 0.953014202579336780, 0.952999055107204950, 0.952983905252575480, 0.952968753015486000, 0.952953598395974930, +0.952938441394079790, 0.952923282009838670, 0.952908120243289190, 0.952892956094469560, 0.952877789563417510, 0.952862620650170580, 0.952847449354767510, 0.952832275677245820, +0.952817099617643380, 0.952801921175998160, 0.952786740352348230, 0.952771557146731340, 0.952756371559185690, 0.952741183589748800, 0.952725993238459190, 0.952710800505354620, +0.952695605390473040, 0.952680407893852440, 0.952665208015530780, 0.952650005755546150, 0.952634801113936170, 0.952619594090739600, 0.952604384685993950, 0.952589172899737320, +0.952573958732007790, 0.952558742182843420, 0.952543523252282090, 0.952528301940361980, 0.952513078247120840, 0.952497852172597300, 0.952482623716829120, 0.952467392879854380, +0.952452159661711260, 0.952436924062437630, 0.952421686082071670, 0.952406445720651580, 0.952391202978215000, 0.952375957854800780, 0.952360710350446670, 0.952345460465190750, +0.952330208199071100, 0.952314953552126030, 0.952299696524393610, 0.952284437115911600, 0.952269175326718730, 0.952253911156852980, 0.952238644606352550, 0.952223375675255390, +0.952208104363599820, 0.952192830671423910, 0.952177554598766070, 0.952162276145663950, 0.952146995312156520, 0.952131712098281510, 0.952116426504077240, 0.952101138529581890, +0.952085848174833770, 0.952070555439870960, 0.952055260324731760, 0.952039962829454240, 0.952024662954076950, 0.952009360698638060, 0.951994056063175780, 0.951978749047728390, +0.951963439652334100, 0.951948127877031200, 0.951932813721857670, 0.951917497186852370, 0.951902178272053370, 0.951886856977498970, 0.951871533303227380, 0.951856207249277000, +0.951840878815686020, 0.951825548002492860, 0.951810214809735600, 0.951794879237453100, 0.951779541285683320, 0.951764200954464790, 0.951748858243835700, 0.951733513153834480, +0.951718165684499410, 0.951702815835868800, 0.951687463607981290, 0.951672109000875180, 0.951656752014588770, 0.951641392649160480, 0.951626030904628720, 0.951610666781031900, +0.951595300278408330, 0.951579931396796310, 0.951564560136234800, 0.951549186496761790, 0.951533810478415790, 0.951518432081235320, 0.951503051305258810, 0.951487668150524660, +0.951472282617071290, 0.951456894704937000, 0.951441504414160640, 0.951426111744780640, 0.951410716696835300, 0.951395319270363140, 0.951379919465402680, 0.951364517281992560, +0.951349112720170750, 0.951333705779976450, 0.951318296461447830, 0.951302884764623550, 0.951287470689542110, 0.951272054236241840, 0.951256635404761570, 0.951241214195139630, +0.951225790607414410, 0.951210364641625010, 0.951194936297809710, 0.951179505576007060, 0.951164072476255560, 0.951148636998593980, 0.951133199143060830, 0.951117758909694520, +0.951102316298533700, 0.951086871309617330, 0.951071423942983720, 0.951055974198671610, 0.951040522076719520, 0.951025067577166210, 0.951009610700050190, 0.950994151445409770, +0.950978689813284370, 0.950963225803712180, 0.950947759416731930, 0.950932290652382380, 0.950916819510701950, 0.950901345991729600, 0.950885870095503850, 0.950870391822063120, +0.950854911171446720, 0.950839428143693040, 0.950823942738840740, 0.950808454956928560, 0.950792964797995350, 0.950777472262079650, 0.950761977349220080, 0.950746480059455720, +0.950730980392825220, 0.950715478349367320, 0.950699973929120650, 0.950684467132124070, 0.950668957958416330, 0.950653446408036170, 0.950637932481022240, 0.950622416177413610, +0.950606897497249030, 0.950591376440567130, 0.950575853007406880, 0.950560327197806920, 0.950544799011806110, 0.950529268449443410, 0.950513735510757130, 0.950498200195786900, +0.950482662504571140, 0.950467122437148700, 0.950451579993558560, 0.950436035173839340, 0.950420487978030140, 0.950404938406169350, 0.950389386458296510, 0.950373832134450260, +0.950358275434669330, 0.950342716358992810, 0.950327154907459450, 0.950311591080108210, 0.950296024876977950, 0.950280456298107420, 0.950264885343536040, 0.950249312013302430, +0.950233736307445450, 0.950218158226004190, 0.950202577769017620, 0.950186994936524480, 0.950171409728563950, 0.950155822145174580, 0.950140232186395870, 0.950124639852266690, +0.950109045142825900, 0.950093448058112470, 0.950077848598165350, 0.950062246763023640, 0.950046642552726080, 0.950031035967312200, 0.950015427006820730, 0.949999815671290660, +0.949984201960761050, 0.949968585875270890, 0.949952967414859350, 0.949937346579565410, 0.949921723369427710, 0.949906097784486090, 0.949890469824779200, 0.949874839490346120, +0.949859206781225930, 0.949843571697457700, 0.949827934239080630, 0.949812294406133350, 0.949796652198655610, 0.949781007616686380, 0.949765360660264510, 0.949749711329429200, +0.949734059624219750, 0.949718405544675020, 0.949702749090834410, 0.949687090262736570, 0.949671429060421230, 0.949655765483927380, 0.949640099533294200, 0.949624431208560660, +0.949608760509766060, 0.949593087436949590, 0.949577411990150330, 0.949561734169407370, 0.949546053974760220, 0.949530371406248070, 0.949514686463909910, 0.949498999147785020, +0.949483309457912710, 0.949467617394332050, 0.949451922957082140, 0.949436226146202600, 0.949420526961732620, 0.949404825403711290, 0.949389121472177800, 0.949373415167171660, +0.949357706488731860, 0.949341995436897790, 0.949326282011708540, 0.949310566213203870, 0.949294848041422720, 0.949279127496404420, 0.949263404578188360, 0.949247679286813750, +0.949231951622319990, 0.949216221584746390, 0.949200489174131910, 0.949184754390516420, 0.949169017233939090, 0.949153277704439250, 0.949137535802056180, 0.949121791526829290, +0.949106044878797910, 0.949090295858001200, 0.949074544464478920, 0.949058790698270370, 0.949043034559414860, 0.949027276047951670, 0.949011515163920350, 0.948995751907360190, +0.948979986278310710, 0.948964218276810990, 0.948948447902900890, 0.948932675156619830, 0.948916900038006990, 0.948901122547101910, 0.948885342683944090, 0.948869560448572850, +0.948853775841027370, 0.948837988861347850, 0.948822199509573250, 0.948806407785743210, 0.948790613689897140, 0.948774817222074570, 0.948759018382314910, 0.948743217170657790, +0.948727413587142300, 0.948711607631808510, 0.948695799304695720, 0.948679988605843460, 0.948664175535291250, 0.948648360093078510, 0.948632542279244980, 0.948616722093829970, +0.948600899536872990, 0.948585074608414010, 0.948569247308492350, 0.948553417637147510, 0.948537585594419250, 0.948521751180346870, 0.948505914394970230, 0.948490075238328510, +0.948474233710461800, 0.948458389811409620, 0.948442543541211380, 0.948426694899906830, 0.948410843887535490, 0.948394990504137110, 0.948379134749751220, 0.948363276624417220, +0.948347416128175300, 0.948331553261064770, 0.948315688023125490, 0.948299820414396870, 0.948283950434918750, 0.948268078084730790, 0.948252203363872390, 0.948236326272383630, +0.948220446810304150, 0.948204564977673580, 0.948188680774531560, 0.948172794200917820, 0.948156905256872020, 0.948141013942434110, 0.948125120257643280, 0.948109224202539960, +0.948093325777163540, 0.948077424981553900, 0.948061521815750650, 0.948045616279793560, 0.948029708373722470, 0.948013798097577130, 0.947997885451396960, 0.947981970435222370, +0.947966053049092870, 0.947950133293048340, 0.947934211167128280, 0.947918286671372790, 0.947902359805821600, 0.947886430570514250, 0.947870498965491030, 0.947854564990791570, +0.947838628646455740, 0.947822689932523390, 0.947806748849034260, 0.947790805396028220, 0.947774859573545240, 0.947758911381624710, 0.947742960820307290, 0.947727007889632490, +0.947711052589640060, 0.947695094920370070, 0.947679134881862280, 0.947663172474156770, 0.947647207697293270, 0.947631240551311430, 0.947615271036251870, 0.947599299152154020, +0.947583324899057940, 0.947567348277003620, 0.947551369286030900, 0.947535387926179750, 0.947519404197489810, 0.947503418100001720, 0.947487429633754990, 0.947471438798789810, +0.947455445595145940, 0.947439450022863450, 0.947423452081982420, 0.947407451772542710, 0.947391449094584060, 0.947375444048147110, 0.947359436633271490, 0.947343426849997280, +0.947327414698364570, 0.947311400178413310, 0.947295383290183590, 0.947279364033715040, 0.947263342409048410, 0.947247318416223450, 0.947231292055280120, 0.947215263326258610, +0.947199232229198880, 0.947183198764141140, 0.947167162931125460, 0.947151124730191470, 0.947135084161380040, 0.947119041224730780, 0.947102995920284020, 0.947086948248079820, +0.947070898208158150, 0.947054845800559210, 0.947038791025323290, 0.947022733882490030, 0.947006674372100180, 0.946990612494193700, 0.946974548248810670, 0.946958481635991280, +0.946942412655775610, 0.946926341308203970, 0.946910267593316200, 0.946894191511153060, 0.946878113061754400, 0.946862032245160520, 0.946845949061411510, 0.946829863510547650, +0.946813775592609150, 0.946797685307636190, 0.946781592655668750, 0.946765497636747550, 0.946749400250912700, 0.946733300498204260, 0.946717198378662640, 0.946701093892327930, +0.946684987039240530, 0.946668877819440760, 0.946652766232968460, 0.946636652279864490, 0.946620535960168820, 0.946604417273921970, 0.946588296221163920, 0.946572172801935290, +0.946556047016276050, 0.946539918864226500, 0.946523788345827510, 0.946507655461118920, 0.946491520210141270, 0.946475382592934840, 0.946459242609539950, 0.946443100259996890, +0.946426955544346080, 0.946410808462627710, 0.946394659014882510, 0.946378507201150690, 0.946362353021472540, 0.946346196475888580, 0.946330037564439120, 0.946313876287164570, +0.946297712644105000, 0.946281546635301400, 0.946265378260794040, 0.946249207520623250, 0.946233034414829310, 0.946216858943452870, 0.946200681106534320, 0.946184500904113990, +0.946168318336232160, 0.946152133402929810, 0.946135946104247120, 0.946119756440224500, 0.946103564410902600, 0.946087370016321820, 0.946071173256522460, 0.946054974131545270, +0.946038772641430330, 0.946022568786218820, 0.946006362565950830, 0.945990153980666880, 0.945973943030407600, 0.945957729715213520, 0.945941514035125050, 0.945925295990182490, +0.945909075580427030, 0.945892852805898850, 0.945876627666638490, 0.945860400162686690, 0.945844170294083740, 0.945827938060870510, 0.945811703463087290, 0.945795466500774620, +0.945779227173973560, 0.945762985482724420, 0.945746741427067830, 0.945730495007044310, 0.945714246222694620, 0.945697995074059380, 0.945681741561179010, 0.945665485684094140, +0.945649227442845740, 0.945632966837474330, 0.945616703868020550, 0.945600438534524910, 0.945584170837028170, 0.945567900775571070, 0.945551628350193910, 0.945535353560937990, +0.945519076407843610, 0.945502796890951620, 0.945486515010302560, 0.945470230765937280, 0.945453944157896410, 0.945437655186220690, 0.945421363850950550, 0.945405070152127270, +0.945388774089791270, 0.945372475663983410, 0.945356174874744330, 0.945339871722114760, 0.945323566206135560, 0.945307258326847140, 0.945290948084290930, 0.945274635478507320, +0.945258320509537060, 0.945242003177421020, 0.945225683482200040, 0.945209361423914760, 0.945193037002606150, 0.945176710218314620, 0.945160381071081580, 0.945144049560947660, +0.945127715687953620, 0.945111379452140190, 0.945095040853548450, 0.945078699892219040, 0.945062356568192820, 0.945046010881510520, 0.945029662832213460, 0.945013312420342140, +0.944996959645937660, 0.944980604509040760, 0.944964247009692280, 0.944947887147933210, 0.944931524923804170, 0.944915160337346570, 0.944898793388601170, 0.944882424077608700, +0.944866052404410130, 0.944849678369046540, 0.944833301971558680, 0.944816923211987510, 0.944800542090373900, 0.944784158606759130, 0.944767772761183950, 0.944751384553689340, +0.944734993984316260, 0.944718601053105790, 0.944702205760098780, 0.944685808105336200, 0.944669408088858800, 0.944653005710708200, 0.944636600970925170, 0.944620193869550540, +0.944603784406625400, 0.944587372582190940, 0.944570958396287910, 0.944554541848957260, 0.944538122940240530, 0.944521701670178460, 0.944505278038812120, 0.944488852046182710, +0.944472423692331090, 0.944455992977298430, 0.944439559901125710, 0.944423124463853900, 0.944406686665524520, 0.944390246506178420, 0.944373803985856800, 0.944357359104600500, +0.944340911862450950, 0.944324462259449100, 0.944308010295635710, 0.944291555971052630, 0.944275099285740720, 0.944258640239741040, 0.944242178833094690, 0.944225715065842960, +0.944209248938026930, 0.944192780449687800, 0.944176309600866400, 0.944159836391604500, 0.944143360821942950, 0.944126882891923150, 0.944110402601586070, 0.944093919950972920, +0.944077434940125080, 0.944060947569083650, 0.944044457837889480, 0.944027965746584430, 0.944011471295209570, 0.943994974483805980, 0.943978475312414970, 0.943961973781077820, +0.943945469889835630, 0.943928963638729580, 0.943912455027801300, 0.943895944057091980, 0.943879430726642820, 0.943862915036495000, 0.943846396986689930, 0.943829876577268800, +0.943813353808273030, 0.943796828679743680, 0.943780301191722400, 0.943763771344250490, 0.943747239137369020, 0.943730704571119520, 0.943714167645543280, 0.943697628360681610, +0.943681086716575580, 0.943664542713267160, 0.943647996350797320, 0.943631447629207480, 0.943614896548539140, 0.943598343108833390, 0.943581787310131870, 0.943565229152475870, +0.943548668635906580, 0.943532105760465870, 0.943515540526194800, 0.943498972933135010, 0.943482402981327680, 0.943465830670814460, 0.943449256001636540, 0.943432678973835540, +0.943416099587452540, 0.943399517842529620, 0.943382933739107870, 0.943366347277228790, 0.943349758456933810, 0.943333167278264550, 0.943316573741262210, 0.943299977845968310, +0.943283379592424590, 0.943266778980672570, 0.943250176010753560, 0.943233570682709080, 0.943216962996580640, 0.943200352952409890, 0.943183740550238130, 0.943167125790106860, +0.943150508672057960, 0.943133889196132840, 0.943117267362373000, 0.943100643170819990, 0.943084016621515420, 0.943067387714500720, 0.943050756449817620, 0.943034122827507320, +0.943017486847612000, 0.943000848510172850, 0.942984207815231730, 0.942967564762830060, 0.942950919353009450, 0.942934271585811560, 0.942917621461277670, 0.942900968979450080, +0.942884314140369990, 0.942867656944079150, 0.942850997390619170, 0.942834335480031700, 0.942817671212358490, 0.942801004587640930, 0.942784335605920680, 0.942767664267239900, +0.942750990571639910, 0.942734314519162450, 0.942717636109849160, 0.942700955343741760, 0.942684272220882020, 0.942667586741311350, 0.942650898905072030, 0.942634208712205380, +0.942617516162753240, 0.942600821256757260, 0.942584123994259280, 0.942567424375301060, 0.942550722399924100, 0.942534018068170170, 0.942517311380081440, 0.942500602335699540, +0.942483890935066020, 0.942467177178222810, 0.942450461065211580, 0.942433742596074260, 0.942417021770852630, 0.942400298589588070, 0.942383573052323120, 0.942366845159099300, +0.942350114909958240, 0.942333382304941900, 0.942316647344092150, 0.942299910027450840, 0.942283170355059370, 0.942266428326960280, 0.942249683943195190, 0.942232937203805850, +0.942216188108834120, 0.942199436658321950, 0.942182682852311220, 0.942165926690843760, 0.942149168173961100, 0.942132407301706000, 0.942115644074119740, 0.942098878491244410, +0.942082110553121850, 0.942065340259794050, 0.942048567611302960, 0.942031792607690430, 0.942015015248998000, 0.941998235535268400, 0.941981453466543270, 0.941964669042864470, +0.941947882264273950, 0.941931093130813800, 0.941914301642525880, 0.941897507799451920, 0.941880711601634450, 0.941863913049115320, 0.941847112141936280, 0.941830308880139520, +0.941813503263766890, 0.941796695292860590, 0.941779884967462570, 0.941763072287614580, 0.941746257253359140, 0.941729439864738000, 0.941712620121793350, 0.941695798024567150, +0.941678973573101370, 0.941662146767438200, 0.941645317607619380, 0.941628486093687540, 0.941611652225684550, 0.941594816003652360, 0.941577977427633160, 0.941561136497669040, +0.941544293213802060, 0.941527447576074320, 0.941510599584527650, 0.941493749239204810, 0.941476896540147660, 0.941460041487398150, 0.941443184080998700, 0.941426324320991160, +0.941409462207417840, 0.941392597740320800, 0.941375730919742030, 0.941358861745724250, 0.941341990218309330, 0.941325116337539350, 0.941308240103456710, 0.941291361516103380, +0.941274480575521650, 0.941257597281753400, 0.941240711634841460, 0.941223823634827820, 0.941206933281754530, 0.941190040575664020, 0.941173145516598250, 0.941156248104599750, +0.941139348339710580, 0.941122446221972720, 0.941105541751429130, 0.941088634928121560, 0.941071725752092520, 0.941054814223384110, 0.941037900342038600, 0.941020984108098420, +0.941004065521605760, 0.940987144582602690, 0.940970221291131950, 0.940953295647235730, 0.940936367650956340, 0.940919437302335960, 0.940902504601416890, 0.940885569548241650, +0.940868632142852210, 0.940851692385291430, 0.940834750275601480, 0.940817805813824680, 0.940800859000003320, 0.940783909834179810, 0.940766958316396450, 0.940750004446695760, +0.940733048225119830, 0.940716089651711500, 0.940699128726512960, 0.940682165449566620, 0.940665199820914900, 0.940648231840600090, 0.940631261508664720, 0.940614288825150970, +0.940597313790101700, 0.940580336403559200, 0.940563356665565900, 0.940546374576164080, 0.940529390135396490, 0.940512403343305330, 0.940495414199933100, 0.940478422705322110, +0.940461428859515450, 0.940444432662555060, 0.940427434114483710, 0.940410433215343680, 0.940393429965177610, 0.940376424364028020, 0.940359416411937320, 0.940342406108947700, +0.940325393455102470, 0.940308378450443790, 0.940291361095014100, 0.940274341388856020, 0.940257319332012060, 0.940240294924524770, 0.940223268166436530, 0.940206239057790330, +0.940189207598628670, 0.940172173788993870, 0.940155137628928660, 0.940138099118475570, 0.940121058257677330, 0.940104015046576370, 0.940086969485215080, 0.940069921573636780, +0.940052871311883530, 0.940035818699998190, 0.940018763738023290, 0.940001706426001450, 0.939984646763975310, 0.939967584751987610, 0.939950520390080650, 0.939933453678297610, +0.939916384616681030, 0.939899313205273530, 0.939882239444117640, 0.939865163333256200, 0.939848084872731860, 0.939831004062587020, 0.939813920902864860, 0.939796835393608030, +0.939779747534859040, 0.939762657326660760, 0.939745564769055690, 0.939728469862086800, 0.939711372605796740, 0.939694273000228010, 0.939677171045423810, 0.939660066741426660, +0.939642960088279410, 0.939625851086024810, 0.939608739734705490, 0.939591626034364300, 0.939574509985043770, 0.939557391586787300, 0.939540270839637310, 0.939523147743636770, +0.939506022298828180, 0.939488894505254630, 0.939471764362958870, 0.939454631871983640, 0.939437497032371560, 0.939420359844166050, 0.939403220307409530, 0.939386078422145050, +0.939368934188415380, 0.939351787606263370, 0.939334638675731970, 0.939317487396863830, 0.939300333769701790, 0.939283177794289160, 0.939266019470668570, 0.939248858798882870, +0.939231695778975140, 0.939214530410988120, 0.939197362694964790, 0.939180192630947760, 0.939163020218980570, 0.939145845459105840, 0.939128668351366440, 0.939111488895805310, +0.939094307092465550, 0.939077122941390010, 0.939059936442621650, 0.939042747596203210, 0.939025556402178110, 0.939008362860589200, 0.938991166971479330, 0.938973968734891580, +0.938956768150868930, 0.938939565219454210, 0.938922359940690400, 0.938905152314621020, 0.938887942341288690, 0.938870730020736510, 0.938853515353007540, 0.938836298338144750, +0.938819078976191210, 0.938801857267190010, 0.938784633211183880, 0.938767406808216460, 0.938750178058330500, 0.938732946961569060, 0.938715713517975340, 0.938698477727592300, +0.938681239590463010, 0.938663999106630680, 0.938646756276138030, 0.938629511099028810, 0.938612263575345770, 0.938595013705132100, 0.938577761488430970, 0.938560506925285360, +0.938543250015738460, 0.938525990759833120, 0.938508729157613190, 0.938491465209121410, 0.938474198914400980, 0.938456930273494970, 0.938439659286446680, 0.938422385953299300, +0.938405110274095900, 0.938387832248879450, 0.938370551877693690, 0.938353269160581480, 0.938335984097586230, 0.938318696688751010, 0.938301406934119010, 0.938284114833733420, +0.938266820387637650, 0.938249523595874550, 0.938232224458487860, 0.938214922975520560, 0.938197619147016050, 0.938180312973017520, 0.938163004453568150, 0.938145693588711250, +0.938128380378489890, 0.938111064822947820, 0.938093746922128100, 0.938076426676074050, 0.938059104084828840, 0.938041779148436010, 0.938024451866938610, 0.938007122240380190, +0.937989790268803580, 0.937972455952252760, 0.937955119290770910, 0.937937780284401220, 0.937920438933187000, 0.937903095237171750, 0.937885749196398780, 0.937868400810911160, +0.937851050080752760, 0.937833697005966750, 0.937816341586596550, 0.937798983822685450, 0.937781623714276980, 0.937764261261414320, 0.937746896464141110, 0.937729529322500310, +0.937712159836536000, 0.937694788006291250, 0.937677413831809580, 0.937660037313134410, 0.937642658450309030, 0.937625277243377080, 0.937607893692381960, 0.937590507797366750, +0.937573119558375630, 0.937555728975451700, 0.937538336048638450, 0.937520940777979320, 0.937503543163517810, 0.937486143205297550, 0.937468740903361520, 0.937451336257754010, +0.937433929268518100, 0.937416519935697410, 0.937399108259335480, 0.937381694239475700, 0.937364277876161720, 0.937346859169436940, 0.937329438119344880, 0.937312014725929400, +0.937294588989233900, 0.937277160909302020, 0.937259730486177170, 0.937242297719902970, 0.937224862610523070, 0.937207425158080980, 0.937189985362620100, 0.937172543224184530, +0.937155098742817550, 0.937137651918562800, 0.937120202751464020, 0.937102751241564720, 0.937085297388908440, 0.937067841193538700, 0.937050382655499670, 0.937032921774834660, +0.937015458551587300, 0.936997992985801330, 0.936980525077520390, 0.936963054826788210, 0.936945582233648320, 0.936928107298144130, 0.936910630020320050, 0.936893150400219250, +0.936875668437885720, 0.936858184133362970, 0.936840697486694850, 0.936823208497924890, 0.936805717167096600, 0.936788223494254390, 0.936770727479441570, 0.936753229122701870, +0.936735728424079150, 0.936718225383617150, 0.936700720001359620, 0.936683212277350190, 0.936665702211632480, 0.936648189804250800, 0.936630675055248660, 0.936613157964669820, +0.936595638532558120, 0.936578116758957300, 0.936560592643911230, 0.936543066187463640, 0.936525537389658050, 0.936508006250538980, 0.936490472770149850, 0.936472936948534510, +0.936455398785736910, 0.936437858281800710, 0.936420315436769960, 0.936402770250688080, 0.936385222723599590, 0.936367672855548010, 0.936350120646577300, 0.936332566096731210, +0.936315009206053820, 0.936297449974588860, 0.936279888402380190, 0.936262324489471660, 0.936244758235907470, 0.936227189641731460, 0.936209618706987490, 0.936192045431719410, +0.936174469815971300, 0.936156891859786900, 0.936139311563210400, 0.936121728926285200, 0.936104143949056060, 0.936086556631566590, 0.936068966973860660, 0.936051374975982340, +0.936033780637975600, 0.936016183959884400, 0.935998584941752370, 0.935980983583624250, 0.935963379885543680, 0.935945773847554620, 0.935928165469701150, 0.935910554752027220, +0.935892941694576930, 0.935875326297394340, 0.935857708560523080, 0.935840088484007900, 0.935822466067892430, 0.935804841312220860, 0.935787214217037140, 0.935769584782385370, +0.935751953008309710, 0.935734318894853810, 0.935716682442062410, 0.935699043649979360, 0.935681402518648620, 0.935663759048114390, 0.935646113238420840, 0.935628465089611950, +0.935610814601731900, 0.935593161774824540, 0.935575506608934520, 0.935557849104105780, 0.935540189260382400, 0.935522527077808590, 0.935504862556428400, 0.935487195696286130, +0.935469526497425760, 0.935451854959891360, 0.935434181083727560, 0.935416504868978430, 0.935398826315687940, 0.935381145423900380, 0.935363462193659960, 0.935345776625010950, +0.935328088717997110, 0.935310398472663400, 0.935292705889053670, 0.935275010967212220, 0.935257313707183240, 0.935239614109010910, 0.935221912172739640, 0.935204207898413520, +0.935186501286076610, 0.935168792335773660, 0.935151081047548850, 0.935133367421446260, 0.935115651457510300, 0.935097933155785150, 0.935080212516315230, 0.935062489539144840, +0.935044764224317810, 0.935027036571879240, 0.935009306581872980, 0.934991574254343540, 0.934973839589335110, 0.934956102586892210, 0.934938363247058920, 0.934920621569879430, +0.934902877555398800, 0.934885131203660900, 0.934867382514710130, 0.934849631488590900, 0.934831878125347630, 0.934814122425024710, 0.934796364387666450, 0.934778604013317030, +0.934760841302021310, 0.934743076253823470, 0.934725308868768030, 0.934707539146899300, 0.934689767088261680, 0.934671992692899690, 0.934654215960857400, 0.934636436892179790, +0.934618655486911250, 0.934600871745095980, 0.934583085666778500, 0.934565297252003320, 0.934547506500814970, 0.934529713413257750, 0.934511917989376050, 0.934494120229214740, +0.934476320132818230, 0.934458517700230920, 0.934440712931497220, 0.934422905826661880, 0.934405096385769180, 0.934387284608863780, 0.934369470495989840, 0.934351654047192560, +0.934333835262516010, 0.934316014142005050, 0.934298190685703970, 0.934280364893657400, 0.934262536765909980, 0.934244706302505890, 0.934226873503490320, 0.934209038368907560, +0.934191200898802250, 0.934173361093218910, 0.934155518952202170, 0.934137674475796650, 0.934119827664046890, 0.934101978516997280, 0.934084127034693010, 0.934066273217178500, +0.934048417064498260, 0.934030558576696920, 0.934012697753819230, 0.933994834595909820, 0.933976969103013310, 0.933959101275174120, 0.933941231112437430, 0.933923358614847650, +0.933905483782449530, 0.933887606615287690, 0.933869727113406770, 0.933851845276851610, 0.933833961105666410, 0.933816074599896680, 0.933798185759586840, 0.933780294584781510, +0.933762401075525330, 0.933744505231863250, 0.933726607053839920, 0.933708706541500070, 0.933690803694888110, 0.933672898514049440, 0.933654990999028490, 0.933637081149870100, +0.933619168966619010, 0.933601254449320070, 0.933583337598017930, 0.933565418412757090, 0.933547496893583070, 0.933529573040540290, 0.933511646853673600, 0.933493718333027860, +0.933475787478647680, 0.933457854290578150, 0.933439918768863900, 0.933421980913549550, 0.933404040724680640, 0.933386098202301560, 0.933368153346457290, 0.933350206157192550, +0.933332256634552330, 0.933314304778581460, 0.933296350589324810, 0.933278394066827110, 0.933260435211133550, 0.933242474022288990, 0.933224510500338280, 0.933206544645326260, +0.933188576457297910, 0.933170605936298080, 0.933152633082371400, 0.933134657895563490, 0.933116680375918990, 0.933098700523482650, 0.933080718338299640, 0.933062733820414820, +0.933044746969873160, 0.933026757786719730, 0.933008766270998930, 0.932990772422756630, 0.932972776242037450, 0.932954777728886240, 0.932936776883348080, 0.932918773705468050, +0.932900768195291000, 0.932882760352861770, 0.932864750178225900, 0.932846737671428230, 0.932828722832513720, 0.932810705661527350, 0.932792686158514180, 0.932774664323519410, +0.932756640156587880, 0.932738613657764450, 0.932720584827094860, 0.932702553664623730, 0.932684520170396270, 0.932666484344457540, 0.932648446186852500, 0.932630405697626450, +0.932612362876824360, 0.932594317724490970, 0.932576270240672130, 0.932558220425412700, 0.932540168278757630, 0.932522113800752230, 0.932504056991441450, 0.932485997850870610, +0.932467936379084430, 0.932449872576128660, 0.932431806442048260, 0.932413737976888310, 0.932395667180694110, 0.932377594053510620, 0.932359518595383240, 0.932341440806357060, +0.932323360686476920, 0.932305278235788680, 0.932287193454337300, 0.932269106342167860, 0.932251016899325770, 0.932232925125856090, 0.932214831021804020, 0.932196734587214970, +0.932178635822133780, 0.932160534726606200, 0.932142431300677420, 0.932124325544392510, 0.932106217457796760, 0.932088107040935480, 0.932069994293853840, 0.932051879216597050, +0.932033761809210830, 0.932015642071740150, 0.931997520004230420, 0.931979395606726930, 0.931961268879274880, 0.931943139821919670, 0.931925008434706600, 0.931906874717680740, +0.931888738670887950, 0.931870600294373410, 0.931852459588182300, 0.931834316552360040, 0.931816171186952040, 0.931798023492003580, 0.931779873467559640, 0.931761721113666510, +0.931743566430368930, 0.931725409417712540, 0.931707250075742620, 0.931689088404504480, 0.931670924404043750, 0.931652758074405620, 0.931634589415635260, 0.931616418427778760, +0.931598245110881300, 0.931580069464988170, 0.931561891490144900, 0.931543711186396780, 0.931525528553789560, 0.931507343592368420, 0.931489156302178540, 0.931470966683266230, +0.931452774735676340, 0.931434580459454710, 0.931416383854646420, 0.931398184921297330, 0.931379983659452740, 0.931361780069157820, 0.931343574150458870, 0.931325365903400870, +0.931307155328029550, 0.931288942424390310, 0.931270727192528680, 0.931252509632490290, 0.931234289744320540, 0.931216067528064850, 0.931197842983769180, 0.931179616111479040, +0.931161386911239840, 0.931143155383097110, 0.931124921527096470, 0.931106685343283560, 0.931088446831704000, 0.931070205992402980, 0.931051962825426680, 0.931033717330820520, +0.931015469508630120, 0.930997219358901010, 0.930978966881678920, 0.930960712077009260, 0.930942454944937660, 0.930924195485510090, 0.930905933698772170, 0.930887669584769320, +0.930869403143547380, 0.930851134375151880, 0.930832863279628550, 0.930814589857023030, 0.930796314107380730, 0.930778036030748050, 0.930759755627170170, 0.930741472896692960, +0.930723187839362030, 0.930704900455223140, 0.930686610744322020, 0.930668318706704080, 0.930650024342415620, 0.930631727651502150, 0.930613428634009310, 0.930595127289982840, +0.930576823619468700, 0.930558517622512400, 0.930540209299159820, 0.930521898649456450, 0.930503585673448600, 0.930485270371181780, 0.930466952742701860, 0.930448632788054450, +0.930430310507285530, 0.930411985900440830, 0.930393658967566100, 0.930375329708706960, 0.930356998123909820, 0.930338664213220200, 0.930320327976683850, 0.930301989414346720, +0.930283648526254670, 0.930265305312453440, 0.930246959772988660, 0.930228611907906730, 0.930210261717253300, 0.930191909201074310, 0.930173554359415400, 0.930155197192322760, +0.930136837699842010, 0.930118475882019120, 0.930100111738899840, 0.930081745270530560, 0.930063376476956920, 0.930045005358224870, 0.930026631914380290, 0.930008256145469110, +0.929989878051537320, 0.929971497632630760, 0.929953114888795170, 0.929934729820077190, 0.929916342426522320, 0.929897952708176660, 0.929879560665086040, 0.929861166297296540, +0.929842769604854120, 0.929824370587804430, 0.929805969246194190, 0.929787565580069030, 0.929769159589474930, 0.929750751274457940, 0.929732340635064050, 0.929713927671339310, +0.929695512383329810, 0.929677094771081070, 0.929658674834640040, 0.929640252574052250, 0.929621827989363880, 0.929603401080621010, 0.929584971847869480, 0.929566540291155600, +0.929548106410525100, 0.929529670206024620, 0.929511231677699890, 0.929492790825597210, 0.929474347649762440, 0.929455902150241870, 0.929437454327081470, 0.929419004180327520, +0.929400551710025670, 0.929382096916222870, 0.929363639798964750, 0.929345180358297500, 0.929326718594267300, 0.929308254506920340, 0.929289788096302800, 0.929271319362460660, +0.929252848305439970, 0.929234374925287490, 0.929215899222049170, 0.929197421195770980, 0.929178940846499210, 0.929160458174280170, 0.929141973179159920, 0.929123485861184430, +0.929104996220400550, 0.929086504256854240, 0.929068009970591580, 0.929049513361658970, 0.929031014430102610, 0.929012513175968560, 0.928994009599303340, 0.928975503700152800, +0.928956995478563700, 0.928938484934582200, 0.928919972068254500, 0.928901456879626890, 0.928882939368745550, 0.928864419535656900, 0.928845897380407240, 0.928827372903042510, +0.928808846103609590, 0.928790316982154640, 0.928771785538723860, 0.928753251773363650, 0.928734715686120320, 0.928716177277040140, 0.928697636546169210, 0.928679093493554490, +0.928660548119242040, 0.928642000423278270, 0.928623450405709480, 0.928604898066582090, 0.928586343405942480, 0.928567786423836970, 0.928549227120311630, 0.928530665495413520, +0.928512101549188840, 0.928493535281683880, 0.928474966692945050, 0.928456395783018860, 0.928437822551951620, 0.928419246999789500, 0.928400669126579590, 0.928382088932368070, +0.928363506417201330, 0.928344921581125800, 0.928326334424187880, 0.928307744946434200, 0.928289153147911160, 0.928270559028664950, 0.928251962588742650, 0.928233363828190440, +0.928214762747054720, 0.928196159345382240, 0.928177553623219300, 0.928158945580612400, 0.928140335217608300, 0.928121722534252850, 0.928103107530593550, 0.928084490206676490, +0.928065870562548190, 0.928047248598255160, 0.928028624313844030, 0.928009997709361320, 0.927991368784853330, 0.927972737540367240, 0.927954103975949240, 0.927935468091646070, +0.927916829887504240, 0.927898189363570270, 0.927879546519890800, 0.927860901356512560, 0.927842253873481740, 0.927823604070845520, 0.927804951948650310, 0.927786297506942750, +0.927767640745769450, 0.927748981665177050, 0.927730320265212180, 0.927711656545921250, 0.927692990507351430, 0.927674322149549150, 0.927655651472561020, 0.927636978476433890, +0.927618303161214190, 0.927599625526948750, 0.927580945573684310, 0.927562263301467180, 0.927543578710344650, 0.927524891800363240, 0.927506202571569570, 0.927487511024010390, +0.927468817157732440, 0.927450120972782450, 0.927431422469207070, 0.927412721647052910, 0.927394018506367270, 0.927375313047196560, 0.927356605269587630, 0.927337895173587110, +0.927319182759241860, 0.927300468026598600, 0.927281750975703980, 0.927263031606605170, 0.927244309919348920, 0.927225585913981850, 0.927206859590550710, 0.927188130949102570, +0.927169399989684060, 0.927150666712342030, 0.927131931117123000, 0.927113193204074370, 0.927094452973242890, 0.927075710424675290, 0.927056965558418320, 0.927038218374519050, +0.927019468873024110, 0.927000717053980570, 0.926981962917434950, 0.926963206463434660, 0.926944447692026440, 0.926925686603257030, 0.926906923197173490, 0.926888157473822580, +0.926869389433251260, 0.926850619075506140, 0.926831846400634870, 0.926813071408683960, 0.926794294099700270, 0.926775514473730970, 0.926756732530822800, 0.926737948271022850, +0.926719161694378070, 0.926700372800934980, 0.926681581590741320, 0.926662788063843720, 0.926643992220289150, 0.926625194060124560, 0.926606393583397030, 0.926587590790153400, +0.926568785680440540, 0.926549978254306070, 0.926531168511796730, 0.926512356452959370, 0.926493542077841070, 0.926474725386489010, 0.926455906378950140, 0.926437085055271450, +0.926418261415499770, 0.926399435459682730, 0.926380607187867080, 0.926361776600100000, 0.926342943696428330, 0.926324108476899390, 0.926305270941560230, 0.926286431090457830, +0.926267588923639030, 0.926248744441151570, 0.926229897643042310, 0.926211048529358320, 0.926192197100146660, 0.926173343355454430, 0.926154487295328900, 0.926135628919816930, +0.926116768228966050, 0.926097905222823310, 0.926079039901435920, 0.926060172264850820, 0.926041302313115320, 0.926022430046276490, 0.926003555464381730, 0.925984678567477680, +0.925965799355612180, 0.925946917828832320, 0.925928033987185040, 0.925909147830717760, 0.925890259359477550, 0.925871368573511820, 0.925852475472867530, 0.925833580057591750, +0.925814682327732340, 0.925795782283336250, 0.925776879924450790, 0.925757975251123020, 0.925739068263400360, 0.925720158961329980, 0.925701247344958960, 0.925682333414335030, +0.925663417169505400, 0.925644498610517120, 0.925625577737417600, 0.925606654550254260, 0.925587729049074160, 0.925568801233924820, 0.925549871104853090, 0.925530938661907050, +0.925512003905133550, 0.925493066834580210, 0.925474127450294120, 0.925455185752322660, 0.925436241740713370, 0.925417295415512990, 0.925398346776769800, 0.925379395824530770, +0.925360442558843200, 0.925341486979754490, 0.925322529087312050, 0.925303568881563400, 0.925284606362555720, 0.925265641530336300, 0.925246674384953010, 0.925227704926453120, +0.925208733154883830, 0.925189759070292880, 0.925170782672727450, 0.925151803962235060, 0.925132822938863120, 0.925113839602658920, 0.925094853953670300, 0.925075865991944580, +0.925056875717529260, 0.925037883130471750, 0.925018888230819460, 0.924999891018620010, 0.924980891493920490, 0.924961889656769070, 0.924942885507212930, 0.924923879045299600, +0.924904870271076600, 0.924885859184591320, 0.924866845785891400, 0.924847830075024470, 0.924828812052037600, 0.924809791716978970, 0.924790769069895880, 0.924771744110835850, +0.924752716839846500, 0.924733687256975360, 0.924714655362270040, 0.924695621155777970, 0.924676584637546650, 0.924657545807624160, 0.924638504666057680, 0.924619461212895070, +0.924600415448183830, 0.924581367371971500, 0.924562316984305690, 0.924543264285233810, 0.924524209274804170, 0.924505151953063930, 0.924486092320060850, 0.924467030375842440, +0.924447966120456540, 0.924428899553950690, 0.924409830676372610, 0.924390759487769720, 0.924371685988190080, 0.924352610177681330, 0.924333532056291100, 0.924314451624067000, +0.924295368881056680, 0.924276283827308090, 0.924257196462868300, 0.924238106787785950, 0.924219014802108330, 0.924199920505883180, 0.924180823899158230, 0.924161724981981240, +0.924142623754399820, 0.924123520216461940, 0.924104414368214890, 0.924085306209707190, 0.924066195740986140, 0.924047082962099700, 0.924027967873095490, 0.924008850474021370, +0.923989730764925080, 0.923970608745854570, 0.923951484416857150, 0.923932357777981330, 0.923913228829274620, 0.923894097570784890, 0.923874964002559860, 0.923855828124647390, +0.923836689937095450, 0.923817549439951420, 0.923798406633263850, 0.923779261517080230, 0.923760114091448430, 0.923740964356416390, 0.923721812312031990, 0.923702657958342940, +0.923683501295397340, 0.923664342323242680, 0.923645181041927390, 0.923626017451499190, 0.923606851552005950, 0.923587683343495610, 0.923568512826016040, 0.923549339999615190, +0.923530164864341030, 0.923510987420241070, 0.923491807667364050, 0.923472625605757380, 0.923453441235469240, 0.923434254556547480, 0.923415065569040070, 0.923395874272995080, +0.923376680668460010, 0.923357484755483520, 0.923338286534113320, 0.923319086004397490, 0.923299883166383890, 0.923280678020120590, 0.923261470565655660, 0.923242260803036950, +0.923223048732312310, 0.923203834353530370, 0.923184617666738870, 0.923165398671985770, 0.923146177369319140, 0.923126953758787170, 0.923107727840437820, 0.923088499614318710, +0.923069269080478820, 0.923050036238965640, 0.923030801089827490, 0.923011563633112210, 0.922992323868868090, 0.922973081797143100, 0.922953837417985530, 0.922934590731442910, +0.922915341737564180, 0.922896090436397200, 0.922876836827989820, 0.922857580912390450, 0.922838322689647160, 0.922819062159808020, 0.922799799322921220, 0.922780534179034610, +0.922761266728196920, 0.922741996970456110, 0.922722724905860380, 0.922703450534457680, 0.922684173856296530, 0.922664894871424890, 0.922645613579890610, 0.922626329981742650, +0.922607044077028870, 0.922587755865797550, 0.922568465348096780, 0.922549172523974840, 0.922529877393480020, 0.922510579956660530, 0.922491280213564190, 0.922471978164239980, +0.922452673808735860, 0.922433367147100000, 0.922414058179380820, 0.922394746905626390, 0.922375433325885120, 0.922356117440204960, 0.922336799248634880, 0.922317478751222720, +0.922298155948016900, 0.922278830839065700, 0.922259503424417430, 0.922240173704120370, 0.922220841678222940, 0.922201507346772980, 0.922182170709819670, 0.922162831767410870, +0.922143490519594990, 0.922124146966420420, 0.922104801107935470, 0.922085452944188530, 0.922066102475227910, 0.922046749701101790, 0.922027394621859120, 0.922008037237547870, +0.921988677548216560, 0.921969315553913590, 0.921949951254687370, 0.921930584650586190, 0.921911215741658240, 0.921891844527952590, 0.921872471009517300, 0.921853095186400910, +0.921833717058651690, 0.921814336626318290, 0.921794953889448990, 0.921775568848092200, 0.921756181502296320, 0.921736791852110220, 0.921717399897582170, 0.921698005638760700, +0.921678609075694100, 0.921659210208431000, 0.921639809037019920, 0.921620405561509260, 0.921600999781947320, 0.921581591698383160, 0.921562181310865090, 0.921542768619441510, +0.921523353624160930, 0.921503936325072100, 0.921484516722223420, 0.921465094815663080, 0.921445670605440250, 0.921426244091603340, 0.921406815274200870, 0.921387384153281250, +0.921367950728893210, 0.921348515001085390, 0.921329076969906180, 0.921309636635403880, 0.921290193997627900, 0.921270749056626540, 0.921251301812448190, 0.921231852265141590, +0.921212400414755380, 0.921192946261338190, 0.921173489804938180, 0.921154031045604890, 0.921134569983386500, 0.921115106618331740, 0.921095640950489130, 0.921076172979907510, +0.921056702706635420, 0.921037230130721470, 0.921017755252214300, 0.920998278071162970, 0.920978798587615890, 0.920959316801621910, 0.920939832713229540, 0.920920346322487650, +0.920900857629444960, 0.920881366634150100, 0.920861873336651370, 0.920842377736998400, 0.920822879835239470, 0.920803379631423340, 0.920783877125598730, 0.920764372317814490, +0.920744865208119270, 0.920725355796561560, 0.920705844083190780, 0.920686330068055340, 0.920666813751204180, 0.920647295132685950, 0.920627774212549490, 0.920608250990843540, +0.920588725467617050, 0.920569197642918340, 0.920549667516797010, 0.920530135089301590, 0.920510600360480710, 0.920491063330383330, 0.920471523999058410, 0.920451982366554570, +0.920432438432920770, 0.920412892198205550, 0.920393343662458510, 0.920373792825728070, 0.920354239688063070, 0.920334684249512590, 0.920315126510125370, 0.920295566469950250, +0.920276004129035980, 0.920256439487431970, 0.920236872545186930, 0.920217303302349630, 0.920197731758969130, 0.920178157915094270, 0.920158581770774030, 0.920139003326057360, +0.920119422580992770, 0.920099839535630020, 0.920080254190017710, 0.920060666544204710, 0.920041076598240080, 0.920021484352172680, 0.920001889806051580, 0.919982292959925510, +0.919962693813843990, 0.919943092367855760, 0.919923488622009790, 0.919903882576355030, 0.919884274230940660, 0.919864663585815530, 0.919845050641028840, 0.919825435396629090, +0.919805817852666130, 0.919786198009188590, 0.919766575866245550, 0.919746951423886180, 0.919727324682159340, 0.919707695641114210, 0.919688064300799860, 0.919668430661264910, +0.919648794722559340, 0.919629156484731760, 0.919609515947831250, 0.919589873111906990, 0.919570227977008050, 0.919550580543183500, 0.919530930810482210, 0.919511278778953890, +0.919491624448647400, 0.919471967819611820, 0.919452308891896330, 0.919432647665550110, 0.919412984140622220, 0.919393318317161980, 0.919373650195218000, 0.919353979774840240, +0.919334307056077550, 0.919314632038979010, 0.919294954723594020, 0.919275275109971530, 0.919255593198160970, 0.919235908988211390, 0.919216222480171650, 0.919196533674091710, +0.919176842570020410, 0.919157149168007060, 0.919137453468100830, 0.919117755470350910, 0.919098055174806690, 0.919078352581516930, 0.919058647690531690, 0.919038940501899710, +0.919019231015670510, 0.918999519231893160, 0.918979805150617060, 0.918960088771891390, 0.918940370095765570, 0.918920649122288440, 0.918900925851510060, 0.918881200283479300, +0.918861472418245560, 0.918841742255858240, 0.918822009796366410, 0.918802275039819700, 0.918782537986266860, 0.918762798635758050, 0.918743056988342240, 0.918723313044068730, +0.918703566802987040, 0.918683818265146450, 0.918664067430596250, 0.918644314299385870, 0.918624558871564360, 0.918604801147181790, 0.918585041126287250, 0.918565278808930130, +0.918545514195159730, 0.918525747285025670, 0.918505978078577150, 0.918486206575863660, 0.918466432776934400, 0.918446656681839340, 0.918426878290627640, 0.918407097603348820, +0.918387314620052190, 0.918367529340787250, 0.918347741765603520, 0.918327951894550080, 0.918308159727677100, 0.918288365265033770, 0.918268568506669490, 0.918248769452633780, +0.918228968102976160, 0.918209164457746140, 0.918189358516993240, 0.918169550280766520, 0.918149739749116290, 0.918129926922091720, 0.918110111799742330, 0.918090294382117640, +0.918070474669267280, 0.918050652661240750, 0.918030828358087470, 0.918011001759856840, 0.917991172866599040, 0.917971341678363360, 0.917951508195199220, 0.917931672417156450, +0.917911834344284360, 0.917891993976632790, 0.917872151314250820, 0.917852306357188840, 0.917832459105496160, 0.917812609559222280, 0.917792757718416840, 0.917772903583129570, +0.917753047153410000, 0.917733188429307840, 0.917713327410872300, 0.917693464098153780, 0.917673598491201670, 0.917653730590065610, 0.917633860394795110, 0.917613987905440020, +0.917594113122049970, 0.917574236044674250, 0.917554356673363270, 0.917534475008166430, 0.917514591049133470, 0.917494704796314010, 0.917474816249757690, 0.917454925409514340, +0.917435032275633830, 0.917415136848165220, 0.917395239127159260, 0.917375339112665110, 0.917355436804732640, 0.917335532203411570, 0.917315625308751660, 0.917295716120802630, +0.917275804639614440, 0.917255890865236290, 0.917235974797718790, 0.917216056437111350, 0.917196135783463820, 0.917176212836825930, 0.917156287597247430, 0.917136360064778280, +0.917116430239467870, 0.917096498121366730, 0.917076563710524370, 0.917056627006990640, 0.917036688010815280, 0.917016746722048250, 0.916996803140739280, 0.916976857266938340, +0.916956909100694830, 0.916936958642059490, 0.916917005891081720, 0.916897050847811480, 0.916877093512298620, 0.916857133884593000, 0.916837171964744460, 0.916817207752802730, +0.916797241248818340, 0.916777272452840800, 0.916757301364920170, 0.916737327985106210, 0.916717352313448970, 0.916697374349998320, 0.916677394094804200, 0.916657411547916250, +0.916637426709385190, 0.916617439579260450, 0.916597450157592200, 0.916577458444430390, 0.916557464439824780, 0.916537468143825640, 0.916517469556482720, 0.916497468677845870, +0.916477465507965720, 0.916457460046891770, 0.916437452294674330, 0.916417442251363120, 0.916397429917008340, 0.916377415291660060, 0.916357398375367780, 0.916337379168182480, +0.916317357670153650, 0.916297333881331390, 0.916277307801765860, 0.916257279431507140, 0.916237248770605080, 0.916217215819109980, 0.916197180577071450, 0.916177143044540340, +0.916157103221566290, 0.916137061108199590, 0.916117016704490190, 0.916096970010488290, 0.916076921026243940, 0.916056869751807330, 0.916036816187228100, 0.916016760332557300, +0.915996702187844460, 0.915976641753139980, 0.915956579028493810, 0.915936514013956260, 0.915916446709577390, 0.915896377115407060, 0.915876305231496210, 0.915856231057894490, +0.915836154594652290, 0.915816075841819570, 0.915795994799446730, 0.915775911467583970, 0.915755825846281350, 0.915735737935588820, 0.915715647735557360, 0.915695555246236690, +0.915675460467677230, 0.915655363399929030, 0.915635264043042520, 0.915615162397067750, 0.915595058462054800, 0.915574952238054520, 0.915554843725116860, 0.915534732923292020, +0.915514619832630490, 0.915494504453182260, 0.915474386784997930, 0.915454266828127470, 0.915434144582621070, 0.915414020048529680, 0.915393893225903250, 0.915373764114792100, +0.915353632715246500, 0.915333499027316750, 0.915313363051053370, 0.915293224786506540, 0.915273084233726330, 0.915252941392763700, 0.915232796263668710, 0.915212648846491780, +0.915192499141283200, 0.915172347148093370, 0.915152192866972690, 0.915132036297971240, 0.915111877441139980, 0.915091716296528970, 0.915071552864188730, 0.915051387144169670, +0.915031219136522080, 0.915011048841296470, 0.914990876258543140, 0.914970701388312380, 0.914950524230655150, 0.914930344785621630, 0.914910163053262340, 0.914889979033627570, +0.914869792726767830, 0.914849604132733530, 0.914829413251575410, 0.914809220083343200, 0.914789024628088420, 0.914768826885861140, 0.914748626856711660, 0.914728424540690700, +0.914708219937848680, 0.914688013048235990, 0.914667803871903050, 0.914647592408900920, 0.914627378659279790, 0.914607162623090160, 0.914586944300382680, 0.914566723691207840, +0.914546500795616170, 0.914526275613658290, 0.914506048145384390, 0.914485818390845640, 0.914465586350092450, 0.914445352023175230, 0.914425115410144600, 0.914404876511051180, +0.914384635325945610, 0.914364391854878170, 0.914344146097899930, 0.914323898055061420, 0.914303647726413260, 0.914283395112005850, 0.914263140211890040, 0.914242883026116230, +0.914222623554735380, 0.914202361797797570, 0.914182097755354190, 0.914161831427455550, 0.914141562814152380, 0.914121291915495180, 0.914101018731534930, 0.914080743262322030, +0.914060465507907200, 0.914040185468340980, 0.914019903143674650, 0.913999618533958500, 0.913979331639243390, 0.913959042459579820, 0.913938750995018760, 0.913918457245610720, +0.913898161211406320, 0.913877862892456760, 0.913857562288812540, 0.913837259400524520, 0.913816954227643200, 0.913796646770219660, 0.913776337028304410, 0.913756025001948300, +0.913735710691201850, 0.913715394096116350, 0.913695075216742540, 0.913674754053130920, 0.913654430605332470, 0.913634104873397910, 0.913613776857378100, 0.913593446557323770, +0.913573113973285560, 0.913552779105314960, 0.913532441953462280, 0.913512102517778590, 0.913491760798314620, 0.913471416795121230, 0.913451070508249360, 0.913430721937749430, +0.913410371083673070, 0.913390017946070780, 0.913369662524993410, 0.913349304820491930, 0.913328944832617060, 0.913308582561420000, 0.913288218006951370, 0.913267851169261900, +0.913247482048403110, 0.913227110644425630, 0.913206736957380420, 0.913186360987318310, 0.913165982734290280, 0.913145602198347390, 0.913125219379540050, 0.913104834277920110, +0.913084446893537960, 0.913064057226444790, 0.913043665276691450, 0.913023271044328900, 0.913002874529408310, 0.912982475731980440, 0.912962074652096000, 0.912941671289806740, +0.912921265645163290, 0.912900857718216720, 0.912880447509017980, 0.912860035017618140, 0.912839620244068170, 0.912819203188419250, 0.912798783850721880, 0.912778362231027930, +0.912757938329388120, 0.912737512145853410, 0.912717083680474880, 0.912696652933303710, 0.912676219904390850, 0.912655784593787160, 0.912635347001544360, 0.912614907127713090, +0.912594464972344640, 0.912574020535489970, 0.912553573817200370, 0.912533124817526690, 0.912512673536520320, 0.912492219974231800, 0.912471764130713180, 0.912451306006015090, +0.912430845600188830, 0.912410382913285360, 0.912389917945355950, 0.912369450696451700, 0.912348981166623880, 0.912328509355923250, 0.912308035264401740, 0.912287558892110110, +0.912267080239099530, 0.912246599305421290, 0.912226116091126580, 0.912205630596266580, 0.912185142820892140, 0.912164652765055210, 0.912144160428806640, 0.912123665812197610, +0.912103168915279430, 0.912082669738103370, 0.912062168280720620, 0.912041664543182470, 0.912021158525539780, 0.912000650227844600, 0.911980139650147680, 0.911959626792500530, +0.911939111654954230, 0.911918594237560280, 0.911898074540369750, 0.911877552563433610, 0.911857028306804040, 0.911836501770531880, 0.911815972954668430, 0.911795441859265090, +0.911774908484373150, 0.911754372830043900, 0.911733834896328750, 0.911713294683278660, 0.911692752190945700, 0.911672207419380820, 0.911651660368635430, 0.911631111038760930, +0.911610559429808620, 0.911590005541829900, 0.911569449374876270, 0.911548890928998490, 0.911528330204248950, 0.911507767200678610, 0.911487201918338760, 0.911466634357280920, +0.911446064517556500, 0.911425492399217000, 0.911404918002313380, 0.911384341326897720, 0.911363762373021300, 0.911343181140735430, 0.911322597630091710, 0.911302011841141350, +0.911281423773936060, 0.911260833428527260, 0.911240240804965910, 0.911219645903304290, 0.911199048723593700, 0.911178449265885320, 0.911157847530230990, 0.911137243516681910, +0.911116637225289790, 0.911096028656106060, 0.911075417809181890, 0.911054804684569450, 0.911034189282320160, 0.911013571602485310, 0.910992951645116510, 0.910972329410265400, +0.910951704897983380, 0.910931078108321860, 0.910910449041332890, 0.910889817697067890, 0.910869184075578260, 0.910848548176915740, 0.910827910001131840, 0.910807269548278060, +0.910786626818406280, 0.910765981811567430, 0.910745334527814030, 0.910724684967197380, 0.910704033129768890, 0.910683379015580390, 0.910662722624683400, 0.910642063957129650, +0.910621403012970340, 0.910600739792257970, 0.910580074295043620, 0.910559406521379120, 0.910538736471316220, 0.910518064144906330, 0.910497389542201390, 0.910476712663252920, +0.910456033508112330, 0.910435352076832020, 0.910414668369463280, 0.910393982386057840, 0.910373294126667560, 0.910352603591343960, 0.910331910780138860, 0.910311215693104030, +0.910290518330290840, 0.910269818691751610, 0.910249116777537840, 0.910228412587701370, 0.910207706122293850, 0.910186997381366990, 0.910166286364972650, 0.910145573073162240, +0.910124857505988370, 0.910104139663502230, 0.910083419545755780, 0.910062697152800750, 0.910041972484688990, 0.910021245541472350, 0.910000516323202560, 0.909979784829931140, +0.909959051061710600, 0.909938315018592460, 0.909917576700628450, 0.909896836107870530, 0.909876093240370660, 0.909855348098180360, 0.909834600681351470, 0.909813850989936390, +0.909793099023986640, 0.909772344783554180, 0.909751588268690850, 0.909730829479448610, 0.909710068415879200, 0.909689305078034690, 0.909668539465966490, 0.909647771579727320, +0.909627001419368810, 0.909606228984942700, 0.909585454276501060, 0.909564677294095740, 0.909543898037778800, 0.909523116507602090, 0.909502332703617130, 0.909481546625876880, +0.909460758274432620, 0.909439967649336540, 0.909419174750640490, 0.909398379578396530, 0.909377582132656630, 0.909356782413472400, 0.909335980420896580, 0.909315176154980810, +0.909294369615777140, 0.909273560803337430, 0.909252749717713860, 0.909231936358958490, 0.909211120727123290, 0.909190302822259880, 0.909169482644420990, 0.909148660193658480, +0.909127835470024290, 0.909107008473570620, 0.909086179204349310, 0.909065347662412650, 0.909044513847812490, 0.909023677760600780, 0.909002839400830150, 0.908981998768552570, +0.908961155863819870, 0.908940310686684350, 0.908919463237197970, 0.908898613515413010, 0.908877761521381110, 0.908856907255155220, 0.908836050716786970, 0.908815191906328760, +0.908794330823832430, 0.908773467469350280, 0.908752601842934490, 0.908731733944637240, 0.908710863774510160, 0.908689991332606420, 0.908669116618977650, 0.908648239633676140, +0.908627360376753960, 0.908606478848263400, 0.908585595048256640, 0.908564708976785540, 0.908543820633903040, 0.908522930019661000, 0.908502037134111600, 0.908481141977307120, +0.908460244549299740, 0.908439344850141770, 0.908418442879885490, 0.908397538638582750, 0.908376632126286500, 0.908355723343048590, 0.908334812288921540, 0.908313898963957310, +0.908292983368208410, 0.908272065501727010, 0.908251145364565420, 0.908230222956775690, 0.908209298278410680, 0.908188371329522460, 0.908167442110163430, 0.908146510620385650, +0.908125576860241650, 0.908104640829783700, 0.908083702529063790, 0.908062761958134960, 0.908041819117049180, 0.908020874005858960, 0.907999926624616480, 0.907978976973374150, +0.907958025052184480, 0.907937070861099760, 0.907916114400171840, 0.907895155669454110, 0.907874194668998550, 0.907853231398857430, 0.907832265859083280, 0.907811298049728380, +0.907790327970845250, 0.907769355622486400, 0.907748381004703670, 0.907727404117550370, 0.907706424961078670, 0.907685443535340860, 0.907664459840389350, 0.907643473876276750, +0.907622485643055590, 0.907601495140777700, 0.907580502369496500, 0.907559507329263940, 0.907538510020132750, 0.907517510442155230, 0.907496508595383890, 0.907475504479871350, +0.907454498095670030, 0.907433489442832090, 0.907412478521410830, 0.907391465331458310, 0.907370449873027170, 0.907349432146169810, 0.907328412150938960, 0.907307389887387130, +0.907286365355566390, 0.907265338555530150, 0.907244309487330480, 0.907223278151020110, 0.907202244546651440, 0.907181208674277320, 0.907160170533950040, 0.907139130125722450, +0.907118087449646620, 0.907097042505775830, 0.907075995294162610, 0.907054945814859350, 0.907033894067918680, 0.907012840053393220, 0.906991783771335820, 0.906970725221798890, +0.906949664404834710, 0.906928601320496800, 0.906907535968837440, 0.906886468349909160, 0.906865398463764680, 0.906844326310456750, 0.906823251890038100, 0.906802175202560790, +0.906781096248078460, 0.906760015026643500, 0.906738931538308420, 0.906717845783125980, 0.906696757761149000, 0.906675667472430000, 0.906654574917021950, 0.906633480094977020, +0.906612383006348830, 0.906591283651189680, 0.906570182029552310, 0.906549078141489440, 0.906527971987053930, 0.906506863566298390, 0.906485752879275800, 0.906464639926038430, +0.906443524706639800, 0.906422407221132430, 0.906401287469568940, 0.906380165452002280, 0.906359041168485200, 0.906337914619070540, 0.906316785803810700, 0.906295654722759300, +0.906274521375968760, 0.906253385763491900, 0.906232247885381590, 0.906211107741690670, 0.906189965332471870, 0.906168820657778260, 0.906147673717662250, 0.906126524512177340, +0.906105373041376170, 0.906084219305311580, 0.906063063304036410, 0.906041905037603620, 0.906020744506066070, 0.905999581709476250, 0.905978416647887920, 0.905957249321353460, +0.905936079729925960, 0.905914907873658140, 0.905893733752603180, 0.905872557366813820, 0.905851378716343030, 0.905830197801243520, 0.905809014621568820, 0.905787829177371550, +0.905766641468704780, 0.905745451495621360, 0.905724259258174350, 0.905703064756416710, 0.905681867990401400, 0.905660668960181050, 0.905639467665809380, 0.905618264107339030, +0.905597058284822950, 0.905575850198314320, 0.905554639847866110, 0.905533427233531140, 0.905512212355362390, 0.905490995213413360, 0.905469775807736910, 0.905448554138386100, +0.905427330205413770, 0.905406104008873220, 0.905384875548817300, 0.905363644825299300, 0.905342411838371720, 0.905321176588088530, 0.905299939074502350, 0.905278699297666360, +0.905257457257633620, 0.905236212954457330, 0.905214966388190430, 0.905193717558886110, 0.905172466466597100, 0.905151213111377250, 0.905129957493279510, 0.905108699612356740, +0.905087439468662320, 0.905066177062249230, 0.905044912393170750, 0.905023645461479620, 0.905002376267229680, 0.904981104810473890, 0.904959831091265320, 0.904938555109657150, +0.904917276865702560, 0.904895996359454840, 0.904874713590967160, 0.904853428560292270, 0.904832141267484120, 0.904810851712595680, 0.904789559895680110, 0.904768265816790600, +0.904746969475980540, 0.904725670873302910, 0.904704370008810880, 0.904683066882558170, 0.904661761494597870, 0.904640453844983150, 0.904619143933767190, 0.904597831761003500, +0.904576517326745270, 0.904555200631045660, 0.904533881673957650, 0.904512560455535300, 0.904491236975831670, 0.904469911234899840, 0.904448583232793310, 0.904427252969565280, +0.904405920445269130, 0.904384585659958160, 0.904363248613685330, 0.904341909306504820, 0.904320567738469470, 0.904299223909632690, 0.904277877820047980, 0.904256529469768420, +0.904235178858847630, 0.904213825987338460, 0.904192470855295190, 0.904171113462770680, 0.904149753809818320, 0.904128391896491750, 0.904107027722844010, 0.904085661288928870, +0.904064292594799480, 0.904042921640509030, 0.904021548426111600, 0.904000172951660350, 0.903978795217208590, 0.903957415222809920, 0.903936032968517660, 0.903914648454385410, +0.903893261680466020, 0.903871872646814010, 0.903850481353482230, 0.903829087800524180, 0.903807691987993490, 0.903786293915943670, 0.903764893584427910, 0.903743490993500040, +0.903722086143213030, 0.903700679033621280, 0.903679269664777740, 0.903657858036736040, 0.903636444149549690, 0.903615028003272200, 0.903593609597957200, 0.903572188933658090, +0.903550766010428270, 0.903529340828321810, 0.903507913387392000, 0.903486483687692470, 0.903465051729276710, 0.903443617512198260, 0.903422181036510840, 0.903400742302267520, +0.903379301309522820, 0.903357858058329800, 0.903336412548742080, 0.903314964780813410, 0.903293514754597290, 0.903272062470147460, 0.903250607927517430, 0.903229151126760500, +0.903207692067931060, 0.903186230751082400, 0.903164767176268150, 0.903143301343541930, 0.903121833252957580, 0.903100362904568520, 0.903078890298428690, 0.903057415434591170, +0.903035938313110460, 0.903014458934039980, 0.902992977297433330, 0.902971493403344150, 0.902950007251826390, 0.902928518842933460, 0.902907028176718970, 0.902885535253237230, +0.902864040072541730, 0.902842542634686000, 0.902821042939723980, 0.902799540987709430, 0.902778036778695950, 0.902756530312737390, 0.902735021589887170, 0.902713510610199670, +0.902691997373728410, 0.902670481880527230, 0.902648964130649880, 0.902627444124149970, 0.902605921861081570, 0.902584397341497980, 0.902562870565453700, 0.902541341533002360, +0.902519810244197580, 0.902498276699093220, 0.902476740897743320, 0.902455202840201420, 0.902433662526521680, 0.902412119956757300, 0.902390575130962990, 0.902369028049192280, +0.902347478711498900, 0.902325927117936910, 0.902304373268560170, 0.902282817163422400, 0.902261258802577570, 0.902239698186079300, 0.902218135313982090, 0.902196570186339590, +0.902175002803205620, 0.902153433164634260, 0.902131861270679240, 0.902110287121394520, 0.902088710716833720, 0.902067132057051580, 0.902045551142101500, 0.902023967972037650, +0.902002382546913890, 0.901980794866784060, 0.901959204931702340, 0.901937612741722570, 0.901916018296898380, 0.901894421597284610, 0.901872822642934670, 0.901851221433902730, +0.901829617970242750, 0.901808012252008680, 0.901786404279254720, 0.901764794052034580, 0.901743181570402120, 0.901721566834412070, 0.901699949844118160, 0.901678330599574360, +0.901656709100834730, 0.901635085347953340, 0.901613459340984250, 0.901591831079981090, 0.901570200564998700, 0.901548567796090830, 0.901526932773311640, 0.901505295496714990, +0.901483655966355160, 0.901462014182286220, 0.901440370144562130, 0.901418723853236850, 0.901397075308365100, 0.901375424510000630, 0.901353771458197730, 0.901332116153010230, +0.901310458594492550, 0.901288798782698740, 0.901267136717682440, 0.901245472399498810, 0.901223805828201390, 0.901202137003844550, 0.901180465926482270, 0.901158792596168820, +0.901137117012958510, 0.901115439176905290, 0.901093759088063220, 0.901072076746487040, 0.901050392152230710, 0.901028705305348290, 0.901007016205894180, 0.900985324853922580, +0.900963631249487640, 0.900941935392643670, 0.900920237283444390, 0.900898536921944880, 0.900876834308199090, 0.900855129442261200, 0.900833422324185510, 0.900811712954026290, +0.900790001331837730, 0.900768287457673790, 0.900746571331589530, 0.900724852953638800, 0.900703132323876000, 0.900681409442355310, 0.900659684309131130, 0.900637956924257740, +0.900616227287789450, 0.900594495399780200, 0.900572761260285180, 0.900551024869358120, 0.900529286227053640, 0.900507545333425810, 0.900485802188529250, 0.900464056792418140, +0.900442309145146780, 0.900420559246769340, 0.900398807097340990, 0.900377052696915480, 0.900355296045547430, 0.900333537143291010, 0.900311775990200850, 0.900290012586331230, +0.900268246931736240, 0.900246479026470920, 0.900224708870589470, 0.900202936464146290, 0.900181161807195650, 0.900159384899792190, 0.900137605741990310, 0.900115824333844290, +0.900094040675408440, 0.900072254766737800, 0.900050466607886570, 0.900028676198909140, 0.900006883539860030, 0.899985088630793740, 0.899963291471764680, 0.899941492062827030, +0.899919690404036080, 0.899897886495445780, 0.899876080337110860, 0.899854271929085740, 0.899832461271424910, 0.899810648364183010, 0.899788833207414320, 0.899767015801173350, +0.899745196145515070, 0.899723374240493870, 0.899701550086164260, 0.899679723682580760, 0.899657895029797980, 0.899636064127870340, 0.899614230976852670, 0.899592395576798930, +0.899570557927764750, 0.899548718029804070, 0.899526875882971530, 0.899505031487321860, 0.899483184842909680, 0.899461335949789500, 0.899439484808015500, 0.899417631417643300, +0.899395775778726980, 0.899373917891321150, 0.899352057755480660, 0.899330195371259910, 0.899308330738713750, 0.899286463857896680, 0.899264594728863110, 0.899242723351668440, +0.899220849726366960, 0.899198973853013390, 0.899177095731662380, 0.899155215362368640, 0.899133332745186810, 0.899111447880171610, 0.899089560767377560, 0.899067671406859840, +0.899045779798673060, 0.899023885942871750, 0.899001989839510740, 0.898980091488644770, 0.898958190890328580, 0.898936288044616450, 0.898914382951564120, 0.898892475611225760, +0.898870566023656110, 0.898848654188910250, 0.898826740107042670, 0.898804823778108220, 0.898782905202161640, 0.898760984379257550, 0.898739061309451250, 0.898717135992797460, +0.898695208429350690, 0.898673278619165910, 0.898651346562298060, 0.898629412258801660, 0.898607475708731450, 0.898585536912142930, 0.898563595869090630, 0.898541652579629260, +0.898519707043813790, 0.898497759261699060, 0.898475809233339920, 0.898453856958791210, 0.898431902438107550, 0.898409945671344470, 0.898387986658556460, 0.898366025399798600, +0.898344061895125610, 0.898322096144592570, 0.898300128148254220, 0.898278157906165500, 0.898256185418381040, 0.898234210684956460, 0.898212233705946490, 0.898190254481405770, +0.898168273011389570, 0.898146289295952530, 0.898124303335149920, 0.898102315129036040, 0.898080324677666850, 0.898058331981096750, 0.898036337039380910, 0.898014339852574170, +0.897992340420731620, 0.897970338743908190, 0.897948334822158970, 0.897926328655538450, 0.897904320244102610, 0.897882309587905820, 0.897860296687003400, 0.897838281541450180, +0.897816264151301220, 0.897794244516611610, 0.897772222637436060, 0.897750198513830310, 0.897728172145848990, 0.897706143533547270, 0.897684112676980340, 0.897662079576202920, +0.897640044231270420, 0.897618006642237790, 0.897595966809159760, 0.897573924732092190, 0.897551880411089800, 0.897529833846207770, 0.897507785037501060, 0.897485733985024960, +0.897463680688834530, 0.897441625148984850, 0.897419567365530750, 0.897397507338528080, 0.897375445068031690, 0.897353380554096640, 0.897331313796778220, 0.897309244796131390, +0.897287173552211550, 0.897265100065073320, 0.897243024334772770, 0.897220946361364740, 0.897198866144904180, 0.897176783685446620, 0.897154698983047010, 0.897132612037760620, +0.897110522849642770, 0.897088431418748170, 0.897066337745132890, 0.897044241828851780, 0.897022143669960140, 0.897000043268513010, 0.896977940624565930, 0.896955835738173830, +0.896933728609392240, 0.896911619238275890, 0.896889507624880960, 0.896867393769262170, 0.896845277671474930, 0.896823159331574530, 0.896801038749616140, 0.896778915925655280, +0.896756790859746690, 0.896734663551946420, 0.896712534002309550, 0.896690402210891470, 0.896668268177747250, 0.896646131902932410, 0.896623993386502230, 0.896601852628512000, +0.896579709629016790, 0.896557564388072770, 0.896535416905734790, 0.896513267182058260, 0.896491115217098570, 0.896468961010911000, 0.896446804563551190, 0.896424645875073870, +0.896402484945535320, 0.896380321774990610, 0.896358156363495140, 0.896335988711104200, 0.896313818817873310, 0.896291646683857860, 0.896269472309113360, 0.896247295693694660, +0.896225116837658260, 0.896202935741059030, 0.896180752403952340, 0.896158566826393940, 0.896136379008439010, 0.896114188950143160, 0.896091996651561810, 0.896069802112750110, +0.896047605333764370, 0.896025406314659540, 0.896003205055491140, 0.895981001556314770, 0.895958795817185960, 0.895936587838160100, 0.895914377619292380, 0.895892165160639190, +0.895869950462255480, 0.895847733524196890, 0.895825514346519030, 0.895803292929277410, 0.895781069272527430, 0.895758843376324940, 0.895736615240724790, 0.895714384865783590, +0.895692152251556410, 0.895669917398098870, 0.895647680305466600, 0.895625440973714990, 0.895603199402899900, 0.895580955593076710, 0.895558709544300720, 0.895536461256628450, +0.895514210730114950, 0.895491957964815950, 0.895469702960787100, 0.895447445718083990, 0.895425186236762260, 0.895402924516877090, 0.895380660558485090, 0.895358394361641330, +0.895336125926401660, 0.895313855252821700, 0.895291582340957070, 0.895269307190863510, 0.895247029802596740, 0.895224750176211840, 0.895202468311765640, 0.895180184209313110, +0.895157897868910200, 0.895135609290612530, 0.895113318474475840, 0.895091025420555850, 0.895068730128907860, 0.895046432599588600, 0.895024132832653140, 0.895001830828157320, +0.894979526586156980, 0.894957220106707750, 0.894934911389865580, 0.894912600435685990, 0.894890287244224590, 0.894867971815537900, 0.894845654149681200, 0.894823334246710460, +0.894801012106681390, 0.894778687729649750, 0.894756361115671360, 0.894734032264802080, 0.894711701177097310, 0.894689367852613660, 0.894667032291406650, 0.894644694493532010, +0.894622354459045700, 0.894600012188003450, 0.894577667680461210, 0.894555320936474390, 0.894532971956099710, 0.894510620739392470, 0.894488267286408840, 0.894465911597204450, +0.894443553671835260, 0.894421193510357200, 0.894398831112826250, 0.894376466479297690, 0.894354099609828480, 0.894331730504473900, 0.894309359163290130, 0.894286985586332910, +0.894264609773658180, 0.894242231725321910, 0.894219851441380160, 0.894197468921888340, 0.894175084166903170, 0.894152697176480380, 0.894130307950675830, 0.894107916489545460, +0.894085522793145350, 0.894063126861531440, 0.894040728694759370, 0.894018328292885740, 0.893995925655966420, 0.893973520784057230, 0.893951113677214140, 0.893928704335493430, +0.893906292758950840, 0.893883878947642540, 0.893861462901624270, 0.893839044620952650, 0.893816624105683410, 0.893794201355872620, 0.893771776371576230, 0.893749349152850540, +0.893726919699751380, 0.893704488012334600, 0.893682054090656930, 0.893659617934774220, 0.893637179544742420, 0.893614738920617710, 0.893592296062456050, 0.893569850970313720, +0.893547403644246670, 0.893524954084310870, 0.893502502290562940, 0.893480048263058820, 0.893457592001854590, 0.893435133507006430, 0.893412672778570390, 0.893390209816602670, +0.893367744621159420, 0.893345277192296390, 0.893322807530070540, 0.893300335634537700, 0.893277861505754060, 0.893255385143775670, 0.893232906548658940, 0.893210425720459830, +0.893187942659234400, 0.893165457365039380, 0.893142969837930730, 0.893120480077964740, 0.893097988085197470, 0.893075493859685320, 0.893052997401484360, 0.893030498710650880, +0.893007997787240830, 0.892985494631311160, 0.892962989242917730, 0.892940481622116920, 0.892917971768964810, 0.892895459683517800, 0.892872945365832060, 0.892850428815964100, +0.892827910033969550, 0.892805389019905690, 0.892782865773828370, 0.892760340295793870, 0.892737812585858490, 0.892715282644078620, 0.892692750470510550, 0.892670216065210130, +0.892647679428234640, 0.892625140559639930, 0.892602599459482390, 0.892580056127818320, 0.892557510564704120, 0.892534962770196060, 0.892512412744350670, 0.892489860487223900, +0.892467305998872810, 0.892444749279353470, 0.892422190328722280, 0.892399629147035630, 0.892377065734349940, 0.892354500090721480, 0.892331932216206440, 0.892309362110861870, +0.892286789774744070, 0.892264215207909110, 0.892241638410413710, 0.892219059382314270, 0.892196478123667090, 0.892173894634528790, 0.892151308914955310, 0.892128720965003950, +0.892106130784730780, 0.892083538374192300, 0.892060943733444910, 0.892038346862545240, 0.892015747761549680, 0.891993146430514750, 0.891970542869496620, 0.891947937078552470, +0.891925329057738470, 0.891902718807111140, 0.891880106326726980, 0.891857491616642630, 0.891834874676914580, 0.891812255507598910, 0.891789634108752890, 0.891767010480432940, +0.891744384622695340, 0.891721756535596930, 0.891699126219194000, 0.891676493673543290, 0.891653858898701300, 0.891631221894724320, 0.891608582661669760, 0.891585941199593670, +0.891563297508552680, 0.891540651588603520, 0.891518003439802700, 0.891495353062206840, 0.891472700455872240, 0.891450045620856280, 0.891427388557215260, 0.891404729265005690, +0.891382067744284300, 0.891359403995107710, 0.891336738017532770, 0.891314069811615870, 0.891291399377413310, 0.891268726714982810, 0.891246051824380440, 0.891223374705662930, +0.891200695358887020, 0.891178013784109320, 0.891155329981386580, 0.891132643950775520, 0.891109955692332530, 0.891087265206114920, 0.891064572492179190, 0.891041877550582060, +0.891019180381380280, 0.890996480984630470, 0.890973779360389570, 0.890951075508713660, 0.890928369429660580, 0.890905661123286510, 0.890882950589648390, 0.890860237828802860, +0.890837522840806640, 0.890814805625716690, 0.890792086183589740, 0.890769364514482080, 0.890746640618451550, 0.890723914495554330, 0.890701186145847260, 0.890678455569387300, +0.890655722766231280, 0.890632987736435840, 0.890610250480057930, 0.890587510997154050, 0.890564769287781830, 0.890542025351997560, 0.890519279189858290, 0.890496530801420880, +0.890473780186742060, 0.890451027345878890, 0.890428272278887660, 0.890405514985826210, 0.890382755466750940, 0.890359993721718810, 0.890337229750786660, 0.890314463554011450, +0.890291695131450010, 0.890268924483159420, 0.890246151609196070, 0.890223376509617800, 0.890200599184481020, 0.890177819633842790, 0.890155037857760070, 0.890132253856289690, +0.890109467629488620, 0.890086679177413580, 0.890063888500122190, 0.890041095597671080, 0.890018300470117210, 0.889995503117517630, 0.889972703539929300, 0.889949901737409180, +0.889927097710014330, 0.889904291457801370, 0.889881482980828030, 0.889858672279150940, 0.889835859352827270, 0.889813044201913870, 0.889790226826467910, 0.889767407226546350, +0.889744585402206250, 0.889721761353504340, 0.889698935080498470, 0.889676106583245140, 0.889653275861801650, 0.889630442916224950, 0.889607607746572100, 0.889584770352900290, +0.889561930735266020, 0.889539088893727460, 0.889516244828341130, 0.889493398539164200, 0.889470550026253750, 0.889447699289666940, 0.889424846329460950, 0.889401991145692740, +0.889379133738419260, 0.889356274107698240, 0.889333412253586640, 0.889310548176141410, 0.889287681875419840, 0.889264813351479110, 0.889241942604376280, 0.889219069634168640, +0.889196194440912910, 0.889173317024667060, 0.889150437385487940, 0.889127555523432810, 0.889104671438558650, 0.889081785130922950, 0.889058896600582680, 0.889036005847594790, +0.889013112872017340, 0.888990217673907070, 0.888967320253321260, 0.888944420610317200, 0.888921518744951960, 0.888898614657283040, 0.888875708347367510, 0.888852799815262440, +0.888829889061025670, 0.888806976084714150, 0.888784060886385170, 0.888761143466096140, 0.888738223823904220, 0.888715301959866700, 0.888692377874040540, 0.888669451566483910, +0.888646523037253560, 0.888623592286406970, 0.888600659314001340, 0.888577724120094060, 0.888554786704742530, 0.888531847068004030, 0.888508905209935420, 0.888485961130594970, +0.888463014830039750, 0.888440066308326840, 0.888417115565513840, 0.888394162601658040, 0.888371207416816850, 0.888348250011047560, 0.888325290384407330, 0.888302328536954230, +0.888279364468745340, 0.888256398179838040, 0.888233429670289730, 0.888210458940157930, 0.888187485989499810, 0.888164510818372670, 0.888141533426834660, 0.888118553814942870, +0.888095571982754570, 0.888072587930327510, 0.888049601657718850, 0.888026613164986210, 0.888003622452187000, 0.887980629519378390, 0.887957634366618560, 0.887934636993964690, +0.887911637401474270, 0.887888635589204720, 0.887865631557213540, 0.887842625305558240, 0.887819616834296440, 0.887796606143485210, 0.887773593233182940, 0.887750578103446600, +0.887727560754333790, 0.887704541185902140, 0.887681519398209050, 0.887658495391312250, 0.887635469165268810, 0.887612440720137010, 0.887589410055974140, 0.887566377172837820, +0.887543342070785450, 0.887520304749874870, 0.887497265210163370, 0.887474223451708790, 0.887451179474568310, 0.887428133278800100, 0.887405084864461680, 0.887382034231610550, +0.887358981380304330, 0.887335926310600650, 0.887312869022557240, 0.887289809516231150, 0.887266747791680910, 0.887243683848963900, 0.887220617688137540, 0.887197549309259760, +0.887174478712388080, 0.887151405897580240, 0.887128330864893840, 0.887105253614386190, 0.887082174146115790, 0.887059092460140030, 0.887036008556516540, 0.887012922435302940, +0.886989834096557180, 0.886966743540336670, 0.886943650766699450, 0.886920555775702610, 0.886897458567404760, 0.886874359141863300, 0.886851257499135960, 0.886828153639280470, +0.886805047562354680, 0.886781939268416090, 0.886758828757522320, 0.886735716029732000, 0.886712601085102300, 0.886689483923691070, 0.886666364545556140, 0.886643242950755360, +0.886620119139346350, 0.886596993111387180, 0.886573864866935010, 0.886550734406048590, 0.886527601728785420, 0.886504466835203230, 0.886481329725359870, 0.886458190399313170, +0.886435048857120990, 0.886411905098841160, 0.886388759124531190, 0.886365610934249700, 0.886342460528054210, 0.886319307906002550, 0.886296153068152680, 0.886272996014562440, +0.886249836745289680, 0.886226675260391890, 0.886203511559927830, 0.886180345643954980, 0.886157177512531200, 0.886134007165714550, 0.886110834603562990, 0.886087659826134240, +0.886064482833486270, 0.886041303625676790, 0.886018122202764440, 0.885994938564806710, 0.885971752711861790, 0.885948564643987300, 0.885925374361241520, 0.885902181863682300, +0.885878987151367260, 0.885855790224355010, 0.885832591082703400, 0.885809389726470280, 0.885786186155713700, 0.885762980370491610, 0.885739772370862100, 0.885716562156883210, +0.885693349728612470, 0.885670135086108700, 0.885646918229429650, 0.885623699158633370, 0.885600477873777710, 0.885577254374920960, 0.885554028662121070, 0.885530800735436000, +0.885507570594923690, 0.885484338240642770, 0.885461103672650960, 0.885437866891006450, 0.885414627895767190, 0.885391386686991470, 0.885368143264737230, 0.885344897629062210, +0.885321649780025480, 0.885298399717684430, 0.885275147442097570, 0.885251892953322740, 0.885228636251418120, 0.885205377336442000, 0.885182116208452440, 0.885158852867507170, +0.885135587313665150, 0.885112319546984220, 0.885089049567522430, 0.885065777375337980, 0.885042502970489140, 0.885019226353034090, 0.884995947523030900, 0.884972666480537410, +0.884949383225612780, 0.884926097758314660, 0.884902810078701200, 0.884879520186830800, 0.884856228082761540, 0.884832933766551810, 0.884809637238259230, 0.884786338497942970, +0.884763037545660990, 0.884739734381471240, 0.884716429005432350, 0.884693121417602260, 0.884669811618039370, 0.884646499606801970, 0.884623185383947910, 0.884599868949536350, +0.884576550303625030, 0.884553229446272350, 0.884529906377536700, 0.884506581097476150, 0.884483253606149210, 0.884459923903613720, 0.884436591989928860, 0.884413257865152460, +0.884389921529342930, 0.884366582982558660, 0.884343242224857830, 0.884319899256298950, 0.884296554076940410, 0.884273206686839950, 0.884249857086056860, 0.884226505274649190, +0.884203151252675350, 0.884179795020193500, 0.884156436577262170, 0.884133075923939860, 0.884109713060284740, 0.884086347986354990, 0.884062980702209790, 0.884039611207907080, +0.884016239503505390, 0.883992865589063090, 0.883969489464638600, 0.883946111130290420, 0.883922730586076510, 0.883899347832056260, 0.883875962868287510, 0.883852575694829000, +0.883829186311739010, 0.883805794719075940, 0.883782400916898530, 0.883759004905265040, 0.883735606684233680, 0.883712206253863710, 0.883688803614213200, 0.883665398765340670, +0.883641991707304620, 0.883618582440163670, 0.883595170963976220, 0.883571757278800440, 0.883548341384695620, 0.883524923281720050, 0.883501502969932130, 0.883478080449390470, +0.883454655720153580, 0.883431228782279980, 0.883407799635828380, 0.883384368280856870, 0.883360934717424940, 0.883337498945590550, 0.883314060965412430, 0.883290620776949200, +0.883267178380259370, 0.883243733775401660, 0.883220286962434600, 0.883196837941416350, 0.883173386712406530, 0.883149933275463090, 0.883126477630644890, 0.883103019778010530, +0.883079559717618650, 0.883056097449527840, 0.883032632973796310, 0.883009166290483650, 0.882985697399648050, 0.882962226301348240, 0.882938752995642840, 0.882915277482590580, +0.882891799762250180, 0.882868319834680170, 0.882844837699939040, 0.882821353358086200, 0.882797866809179930, 0.882774378053279070, 0.882750887090442250, 0.882727393920728190, +0.882703898544195620, 0.882680400960903280, 0.882656901170909670, 0.882633399174274080, 0.882609894971055020, 0.882586388561311220, 0.882562879945101520, 0.882539369122484540, +0.882515856093519240, 0.882492340858263780, 0.882468823416777900, 0.882445303769120000, 0.882421781915348810, 0.882398257855523170, 0.882374731589701920, 0.882351203117943790, +0.882327672440307630, 0.882304139556851940, 0.882280604467636340, 0.882257067172719120, 0.882233527672159350, 0.882209985966015740, 0.882186442054347150, 0.882162895937212420, +0.882139347614670060, 0.882115797086779670, 0.882092244353599900, 0.882068689415189460, 0.882045132271607300, 0.882021572922912390, 0.881998011369163450, 0.881974447610419540, +0.881950881646739070, 0.881927313478181870, 0.881903743104806240, 0.881880170526671340, 0.881856595743836010, 0.881833018756359220, 0.881809439564299910, 0.881785858167716930, +0.881762274566668890, 0.881738688761215640, 0.881715100751415680, 0.881691510537327860, 0.881667918119011350, 0.881644323496525000, 0.881620726669927860, 0.881597127639278550, +0.881573526404636710, 0.881549922966061160, 0.881526317323610750, 0.881502709477344550, 0.881479099427321610, 0.881455487173600890, 0.881431872716241460, 0.881408256055301930, +0.881384637190842150, 0.881361016122920840, 0.881337392851596960, 0.881313767376929570, 0.881290139698977850, 0.881266509817800750, 0.881242877733457330, 0.881219243446006330, +0.881195606955507580, 0.881171968262019820, 0.881148327365602220, 0.881124684266313740, 0.881101038964213660, 0.881077391459360810, 0.881053741751814170, 0.881030089841633560, +0.881006435728877710, 0.880982779413605810, 0.880959120895877020, 0.880935460175750310, 0.880911797253285060, 0.880888132128540220, 0.880864464801574650, 0.880840795272448410, +0.880817123541220100, 0.880793449607949030, 0.880769773472694250, 0.880746095135515160, 0.880722414596470720, 0.880698731855619870, 0.880675046913022670, 0.880651359768737760, +0.880627670422824530, 0.880603978875342030, 0.880580285126349670, 0.880556589175906620, 0.880532891024072060, 0.880509190670904830, 0.880485488116464990, 0.880461783360811490, +0.880438076404003510, 0.880414367246100450, 0.880390655887161370, 0.880366942327245660, 0.880343226566412620, 0.880319508604721080, 0.880295788442231110, 0.880272066079001770, +0.880248341515092240, 0.880224614750561910, 0.880200885785469960, 0.880177154619875780, 0.880153421253838330, 0.880129685687417780, 0.880105947920672980, 0.880082207953663430, +0.880058465786448200, 0.880034721419086900, 0.880010974851638710, 0.879987226084163130, 0.879963475116719020, 0.879939721949366760, 0.879915966582165090, 0.879892209015173510, +0.879868449248451530, 0.879844687282058340, 0.879820923116053420, 0.879797156750496190, 0.879773388185445590, 0.879749617420962030, 0.879725844457104440, 0.879702069293932130, +0.879678291931504820, 0.879654512369881680, 0.879630730609122220, 0.879606946649285510, 0.879583160490431950, 0.879559372132620480, 0.879535581575910500, 0.879511788820361630, +0.879487993866033270, 0.879464196712984920, 0.879440397361275990, 0.879416595810965760, 0.879392792062114400, 0.879368986114781090, 0.879345177969025340, 0.879321367624906650, +0.879297555082484530, 0.879273740341818490, 0.879249923402967700, 0.879226104265992570, 0.879202282930952150, 0.879178459397905950, 0.879154633666913710, 0.879130805738034820, +0.879106975611328890, 0.879083143286855550, 0.879059308764673970, 0.879035472044844560, 0.879011633127426360, 0.878987792012479120, 0.878963948700062450, 0.878940103190235860, +0.878916255483059070, 0.878892405578591610, 0.878868553476892630, 0.878844699178022770, 0.878820842682041190, 0.878796983989007520, 0.878773123098981370, 0.878749260012022360, +0.878725394728190220, 0.878701527247544130, 0.878677657570144710, 0.878653785696051130, 0.878629911625323110, 0.878606035358020290, 0.878582156894202380, 0.878558276233929010, +0.878534393377260030, 0.878510508324254700, 0.878486621074973440, 0.878462731629475630, 0.878438839987821020, 0.878414946150069320, 0.878391050116280160, 0.878367151886513490, +0.878343251460828920, 0.878319348839285750, 0.878295444021944590, 0.878271537008864960, 0.878247627800106350, 0.878223716395728720, 0.878199802795791800, 0.878175887000355430, +0.878151969009478890, 0.878128048823222820, 0.878104126441646700, 0.878080201864810170, 0.878056275092773180, 0.878032346125595440, 0.878008414963336930, 0.877984481606057350, +0.877960546053816130, 0.877936608306673970, 0.877912668364690290, 0.877888726227925020, 0.877864781896437800, 0.877840835370288670, 0.877816886649537500, 0.877792935734243660, +0.877768982624467900, 0.877745027320269710, 0.877721069821708940, 0.877697110128845550, 0.877673148241739250, 0.877649184160450120, 0.877625217885038110, 0.877601249415562610, +0.877577278752084360, 0.877553305894662960, 0.877529330843358270, 0.877505353598230230, 0.877481374159338800, 0.877457392526744040, 0.877433408700505680, 0.877409422680683450, +0.877385434467338080, 0.877361444060529070, 0.877337451460316500, 0.877313456666760310, 0.877289459679920450, 0.877265460499856990, 0.877241459126629320, 0.877217455560298510, +0.877193449800924060, 0.877169441848566040, 0.877145431703284410, 0.877121419365139100, 0.877097404834190300, 0.877073388110498060, 0.877049369194121800, 0.877025348085122670, +0.877001324783560080, 0.876977299289494190, 0.876953271602985080, 0.876929241724092810, 0.876905209652877330, 0.876881175389398470, 0.876857138933717200, 0.876833100285892900, +0.876809059445985970, 0.876785016414056370, 0.876760971190164160, 0.876736923774369630, 0.876712874166732710, 0.876688822367313160, 0.876664768376172020, 0.876640712193369030, +0.876616653818964140, 0.876592593253017750, 0.876568530495589690, 0.876544465546740480, 0.876520398406530070, 0.876496329075018180, 0.876472257552265880, 0.876448183838333010, +0.876424107933279630, 0.876400029837166030, 0.876375949550052380, 0.876351867071998750, 0.876327782403065080, 0.876303695543312440, 0.876279606492800460, 0.876255515251589510, +0.876231421819739790, 0.876207326197311450, 0.876183228384364800, 0.876159128380960220, 0.876135026187157220, 0.876110921803017200, 0.876086815228599770, 0.876062706463965330, +0.876038595509174180, 0.876014482364286580, 0.875990367029362730, 0.875966249504462890, 0.875942129789647030, 0.875918007884976310, 0.875893883790510590, 0.875869757506310130, +0.875845629032435240, 0.875821498368946290, 0.875797365515903700, 0.875773230473367190, 0.875749093241398050, 0.875724953820056110, 0.875700812209401770, 0.875676668409495540, +0.875652522420397480, 0.875628374242168220, 0.875604223874868030, 0.875580071318556860, 0.875555916573295900, 0.875531759639145090, 0.875507600516164940, 0.875483439204415850, +0.875459275703958100, 0.875435110014852190, 0.875410942137157980, 0.875386772070936960, 0.875362599816248980, 0.875338425373154540, 0.875314248741713930, 0.875290069921987770, +0.875265888914036450, 0.875241705717920370, 0.875217520333699590, 0.875193332761435410, 0.875169143001187980, 0.875144951053017710, 0.875120756916984990, 0.875096560593150330, +0.875072362081574350, 0.875048161382317450, 0.875023958495439680, 0.874999753421002560, 0.874975546159065920, 0.874951336709690500, 0.874927125072936680, 0.874902911248865100, +0.874878695237536250, 0.874854477039010200, 0.874830256653348350, 0.874806034080610970, 0.874781809320858360, 0.874757582374151350, 0.874733353240550350, 0.874709121920115960, +0.874684888412908700, 0.874660652718988850, 0.874636414838417810, 0.874612174771255750, 0.874587932517563280, 0.874563688077400920, 0.874539441450829290, 0.874515192637909110, +0.874490941638701000, 0.874466688453265030, 0.874442433081662810, 0.874418175523954510, 0.874393915780200760, 0.874369653850462170, 0.874345389734799580, 0.874321123433273390, +0.874296854945944000, 0.874272584272872910, 0.874248311414120290, 0.874224036369746990, 0.874199759139813630, 0.874175479724380810, 0.874151198123509280, 0.874126914337259750, +0.874102628365692520, 0.874078340208869100, 0.874054049866849870, 0.874029757339695570, 0.874005462627466810, 0.873981165730224440, 0.873956866648029180, 0.873932565380941220, +0.873908261929022380, 0.873883956292332840, 0.873859648470933340, 0.873835338464884810, 0.873811026274247890, 0.873786711899083410, 0.873762395339452210, 0.873738076595414580, +0.873713755667032130, 0.873689432554365260, 0.873665107257474930, 0.873640779776421740, 0.873616450111266650, 0.873592118262070390, 0.873567784228893920, 0.873543448011797510, +0.873519109610842890, 0.873494769026090470, 0.873470426257601180, 0.873446081305435880, 0.873421734169655290, 0.873397384850320370, 0.873373033347491500, 0.873348679661230640, +0.873324323791597970, 0.873299965738654540, 0.873275605502461080, 0.873251243083078780, 0.873226878480568240, 0.873202511694990520, 0.873178142726406150, 0.873153771574876840, +0.873129398240463090, 0.873105022723225880, 0.873080645023226020, 0.873056265140524590, 0.873031883075182540, 0.873007498827260810, 0.872983112396819800, 0.872958723783921480, +0.872934332988626330, 0.872909940010995420, 0.872885544851089600, 0.872861147508969930, 0.872836747984697460, 0.872812346278332600, 0.872787942389937290, 0.872763536319572150, +0.872739128067298250, 0.872714717633176430, 0.872690305017267850, 0.872665890219633480, 0.872641473240334480, 0.872617054079431240, 0.872592632736985950, 0.872568209213059000, +0.872543783507711450, 0.872519355621004580, 0.872494925552999230, 0.872470493303756590, 0.872446058873337260, 0.872421622261803200, 0.872397183469215130, 0.872372742495634120, +0.872348299341121240, 0.872323854005737530, 0.872299406489544290, 0.872274956792602470, 0.872250504914972910, 0.872226050856717450, 0.872201594617896810, 0.872177136198572290, +0.872152675598804940, 0.872128212818655820, 0.872103747858186230, 0.872079280717457220, 0.872054811396529630, 0.872030339895465410, 0.872005866214325300, 0.871981390353170570, +0.871956912312062400, 0.871932432091061860, 0.871907949690230330, 0.871883465109628440, 0.871858978349318360, 0.871834489409360810, 0.871809998289816980, 0.871785504990748250, +0.871761009512215690, 0.871736511854280690, 0.871712012017004320, 0.871687510000447530, 0.871663005804672380, 0.871638499429739700, 0.871613990875710900, 0.871589480142646920, +0.871564967230609390, 0.871540452139659360, 0.871515934869858230, 0.871491415421266850, 0.871466893793947370, 0.871442369987960650, 0.871417844003367970, 0.871393315840230720, +0.871368785498610190, 0.871344252978567660, 0.871319718280164080, 0.871295181403461630, 0.871270642348521250, 0.871246101115404240, 0.871221557704171980, 0.871197012114885870, +0.871172464347607200, 0.871147914402397360, 0.871123362279317300, 0.871098807978429200, 0.871074251499794230, 0.871049692843473560, 0.871025132009528580, 0.871000568998020810, +0.870976003809011750, 0.870951436442562120, 0.870926866898734330, 0.870902295177589440, 0.870877721279188720, 0.870853145203593800, 0.870828566950865970, 0.870803986521066720, +0.870779403914257450, 0.870754819130499350, 0.870730232169854570, 0.870705643032384180, 0.870681051718149690, 0.870656458227212600, 0.870631862559634430, 0.870607264715476560, +0.870582664694800500, 0.870558062497667320, 0.870533458124139510, 0.870508851574277930, 0.870484242848144300, 0.870459631945800120, 0.870435018867306790, 0.870410403612725920, +0.870385786182118590, 0.870361166575547300, 0.870336544793072990, 0.870311920834757390, 0.870287294700661910, 0.870262666390848260, 0.870238035905377960, 0.870213403244312510, +0.870188768407713200, 0.870164131395642300, 0.870139492208161110, 0.870114850845331240, 0.870090207307214200, 0.870065561593871720, 0.870040913705365180, 0.870016263641756100, +0.869991611403106660, 0.869966956989478240, 0.869942300400932460, 0.869917641637530940, 0.869892980699335180, 0.869868317586407150, 0.869843652298808220, 0.869818984836599700, +0.869794315199844180, 0.869769643388602850, 0.869744969402937550, 0.869720293242909670, 0.869695614908581160, 0.869670934400013530, 0.869646251717268610, 0.869621566860407590, +0.869596879829493190, 0.869572190624586460, 0.869547499245749370, 0.869522805693043410, 0.869498109966530540, 0.869473412066272380, 0.869448711992330200, 0.869424009744766750, +0.869399305323643180, 0.869374598729021450, 0.869349889960963180, 0.869325179019530100, 0.869300465904784160, 0.869275750616787080, 0.869251033155600150, 0.869226313521286100, +0.869201591713906210, 0.869176867733522430, 0.869152141580196380, 0.869127413253990010, 0.869102682754965160, 0.869077950083183560, 0.869053215238706710, 0.869028478221597120, +0.869003739031916410, 0.868978997669726420, 0.868954254135088870, 0.868929508428065710, 0.868904760548718790, 0.868880010497109500, 0.868855258273300570, 0.868830503877353610, +0.868805747309330250, 0.868780988569292640, 0.868756227657302540, 0.868731464573421870, 0.868706699317712490, 0.868681931890236010, 0.868657162291055050, 0.868632390520231220, +0.868607616577826370, 0.868582840463902550, 0.868558062178521610, 0.868533281721745490, 0.868508499093635700, 0.868483714294255190, 0.868458927323665360, 0.868434138181928270, +0.868409346869105760, 0.868384553385259880, 0.868359757730452600, 0.868334959904745960, 0.868310159908201480, 0.868285357740882000, 0.868260553402849130, 0.868235746894164940, +0.868210938214891370, 0.868186127365090490, 0.868161314344824240, 0.868136499154154690, 0.868111681793143460, 0.868086862261853500, 0.868062040560346300, 0.868037216688684050, +0.868012390646928810, 0.867987562435142520, 0.867962732053387360, 0.867937899501724950, 0.867913064780218240, 0.867888227888928830, 0.867863388827918800, 0.867838547597250320, +0.867813704196985560, 0.867788858627186470, 0.867764010887915220, 0.867739160979233540, 0.867714308901204380, 0.867689454653889470, 0.867664598237350980, 0.867639739651650870, +0.867614878896851520, 0.867590015973014880, 0.867565150880203250, 0.867540283618478240, 0.867515414187903120, 0.867490542588539300, 0.867465668820449180, 0.867440792883694910, +0.867415914778338680, 0.867391034504442550, 0.867366152062068460, 0.867341267451279490, 0.867316380672137340, 0.867291491724704100, 0.867266600609042260, 0.867241707325213880, +0.867216811873281260, 0.867191914253306660, 0.867167014465351720, 0.867142112509479700, 0.867117208385752460, 0.867092302094232160, 0.867067393634981200, 0.867042483008061640, +0.867017570213535870, 0.866992655251465740, 0.866967738121914520, 0.866942818824943840, 0.866917897360616200, 0.866892973728993770, 0.866868047930138830, 0.866843119964113900, +0.866818189830981130, 0.866793257530802390, 0.866768323063641040, 0.866743386429558840, 0.866718447628618160, 0.866693506660881300, 0.866668563526410750, 0.866643618225268810, +0.866618670757517750, 0.866593721123219640, 0.866568769322437650, 0.866543815355233730, 0.866518859221670270, 0.866493900921809670, 0.866468940455714320, 0.866443977823446620, +0.866419013025068520, 0.866394046060643410, 0.866369076930233130, 0.866344105633900070, 0.866319132171706860, 0.866294156543715780, 0.866269178749989320, 0.866244198790589890, +0.866219216665579550, 0.866194232375021580, 0.866169245918978040, 0.866144257297511430, 0.866119266510684160, 0.866094273558558610, 0.866069278441197520, 0.866044281158663170, +0.866019281711017720, 0.865994280098324460, 0.865969276320645580, 0.865944270378043450, 0.865919262270580580, 0.865894251998319600, 0.865869239561323000, 0.865844224959652850, +0.865819208193372660, 0.865794189262544370, 0.865769168167230600, 0.865744144907493960, 0.865719119483396970, 0.865694091895002130, 0.865669062142372050, 0.865644030225568910, +0.865618996144656090, 0.865593959899695900, 0.865568921490750710, 0.865543880917883150, 0.865518838181156050, 0.865493793280631700, 0.865468746216372490, 0.865443696988441920, +0.865418645596902070, 0.865393592041815540, 0.865368536323245170, 0.865343478441253370, 0.865318418395902840, 0.865293356187256220, 0.865268291815375900, 0.865243225280325270, +0.865218156582166500, 0.865193085720962430, 0.865168012696775570, 0.865142937509668750, 0.865117860159704600, 0.865092780646945720, 0.865067698971454410, 0.865042615133294390, +0.865017529132527830, 0.864992440969217460, 0.864967350643425890, 0.864942258155215970, 0.864917163504650530, 0.864892066691791640, 0.864866967716703020, 0.864841866579446950, +0.864816763280086280, 0.864791657818683720, 0.864766550195301910, 0.864741440410003780, 0.864716328462852070, 0.864691214353909170, 0.864666098083238580, 0.864640979650902700, +0.864615859056964480, 0.864590736301486530, 0.864565611384531810, 0.864540484306163040, 0.864515355066443060, 0.864490223665434150, 0.864465090103200270, 0.864439954379803590, +0.864414816495307050, 0.864389676449773490, 0.864364534243265650, 0.864339389875846580, 0.864314243347578560, 0.864289094658525330, 0.864263943808749380, 0.864238790798313560, +0.864213635627280820, 0.864188478295713990, 0.864163318803675920, 0.864138157151229550, 0.864112993338437390, 0.864087827365363160, 0.864062659232069370, 0.864037488938618870, +0.864012316485074710, 0.863987141871499830, 0.863961965097956970, 0.863936786164508860, 0.863911605071219110, 0.863886421818150450, 0.863861236405365720, 0.863836048832927860, +0.863810859100899940, 0.863785667209344800, 0.863760473158325490, 0.863735276947904640, 0.863710078578145970, 0.863684878049112090, 0.863659675360866070, 0.863634470513470860, +0.863609263506989410, 0.863584054341484890, 0.863558843017020130, 0.863533629533657860, 0.863508413891462050, 0.863483196090495060, 0.863457976130820200, 0.863432754012500300, +0.863407529735598640, 0.863382303300178070, 0.863357074706301300, 0.863331843954032290, 0.863306611043433650, 0.863281375974568550, 0.863256138747499960, 0.863230899362291030, +0.863205657819004930, 0.863180414117704630, 0.863155168258452840, 0.863129920241313520, 0.863104670066349500, 0.863079417733623730, 0.863054163243199390, 0.863028906595139760, +0.863003647789507780, 0.862978386826366290, 0.862953123705779260, 0.862927858427809390, 0.862902590992519870, 0.862877321399973860, 0.862852049650234540, 0.862826775743365190, +0.862801499679428870, 0.862776221458488310, 0.862750941080607680, 0.862725658545849710, 0.862700373854277560, 0.862675087005954410, 0.862649798000943660, 0.862624506839308360, +0.862599213521111800, 0.862573918046416810, 0.862548620415287350, 0.862523320627786470, 0.862498018683977240, 0.862472714583922940, 0.862447408327686850, 0.862422099915332250, +0.862396789346921990, 0.862371476622520230, 0.862346161742189700, 0.862320844705993790, 0.862295525513995800, 0.862270204166258880, 0.862244880662846550, 0.862219555003822080, +0.862194227189248210, 0.862168897219189210, 0.862143565093707930, 0.862118230812867760, 0.862092894376732090, 0.862067555785364090, 0.862042215038827280, 0.862016872137184920, +0.861991527080499860, 0.861966179868836500, 0.861940830502257670, 0.861915478980826770, 0.861890125304607070, 0.861864769473662200, 0.861839411488055320, 0.861814051347849500, +0.861788689053109010, 0.861763324603896820, 0.861737958000276310, 0.861712589242310870, 0.861687218330063900, 0.861661845263599010, 0.861636470042979500, 0.861611092668268300, +0.861585713139529810, 0.861560331456827090, 0.861534947620223530, 0.861509561629782540, 0.861484173485567720, 0.861458783187642460, 0.861433390736069730, 0.861407996130914010, +0.861382599372238270, 0.861357200460106110, 0.861331799394580930, 0.861306396175726240, 0.861280990803605540, 0.861255583278282330, 0.861230173599819790, 0.861204761768282200, +0.861179347783732730, 0.861153931646234880, 0.861128513355852280, 0.861103092912648300, 0.861077670316686690, 0.861052245568030840, 0.861026818666743910, 0.861001389612890410, +0.860975958406533400, 0.860950525047736500, 0.860925089536563330, 0.860899651873077380, 0.860874212057342380, 0.860848770089421400, 0.860823325969378830, 0.860797879697278060, +0.860772431273182480, 0.860746980697155940, 0.860721527969261930, 0.860696073089563970, 0.860670616058126000, 0.860645156875010970, 0.860619695540283500, 0.860594232054006760, +0.860568766416244470, 0.860543298627060250, 0.860517828686517830, 0.860492356594680820, 0.860466882351612840, 0.860441405957377280, 0.860415927412038650, 0.860390446715660230, +0.860364963868305630, 0.860339478870038700, 0.860313991720923040, 0.860288502421022280, 0.860263010970399920, 0.860237517369120570, 0.860212021617247300, 0.860186523714844050, +0.860161023661974440, 0.860135521458702310, 0.860110017105091270, 0.860084510601205390, 0.860059001947107600, 0.860033491142862760, 0.860007978188534360, 0.859982463084185910, +0.859956945829881250, 0.859931426425684320, 0.859905904871658740, 0.859880381167868020, 0.859854855314376780, 0.859829327311248390, 0.859803797158546710, 0.859778264856335460, +0.859752730404678590, 0.859727193803639930, 0.859701655053283220, 0.859676114153671960, 0.859650571104870860, 0.859625025906943340, 0.859599478559953330, 0.859573929063964460, +0.859548377419040890, 0.859522823625246350, 0.859497267682644780, 0.859471709591299480, 0.859446149351275500, 0.859420586962636010, 0.859395022425445190, 0.859369455739766750, +0.859343886905664660, 0.859318315923202850, 0.859292742792444830, 0.859267167513455330, 0.859241590086297970, 0.859216010511036690, 0.859190428787735330, 0.859164844916457840, +0.859139258897268280, 0.859113670730230710, 0.859088080415408300, 0.859062487952866220, 0.859036893342667970, 0.859011296584877400, 0.858985697679558680, 0.858960096626775640, +0.858934493426592450, 0.858908888079072950, 0.858883280584280760, 0.858857670942280940, 0.858832059153136760, 0.858806445216912630, 0.858780829133672260, 0.858755210903479840, +0.858729590526399410, 0.858703968002494490, 0.858678343331830240, 0.858652716514469950, 0.858627087550478010, 0.858601456439918360, 0.858575823182854970, 0.858550187779352100, +0.858524550229473720, 0.858498910533283530, 0.858473268690846500, 0.858447624702226350, 0.858421978567487030, 0.858396330286692820, 0.858370679859907890, 0.858345027287196080, +0.858319372568621340, 0.858293715704248620, 0.858268056694141630, 0.858242395538364460, 0.858216732236981360, 0.858191066790056410, 0.858165399197653780, 0.858139729459837630, +0.858114057576671700, 0.858088383548221150, 0.858062707374549590, 0.858037029055721210, 0.858011348591800390, 0.857985665982851090, 0.857959981228937680, 0.857934294330124250, +0.857908605286474720, 0.857882914098054060, 0.857857220764926100, 0.857831525287155120, 0.857805827664805400, 0.857780127897941000, 0.857754425986626320, 0.857728721930925090, +0.857703015730902570, 0.857677307386622510, 0.857651596898149180, 0.857625884265546870, 0.857600169488879850, 0.857574452568212300, 0.857548733503608720, 0.857523012295132840, +0.857497288942849820, 0.857471563446823630, 0.857445835807118530, 0.857420106023798920, 0.857394374096928980, 0.857368640026573090, 0.857342903812795540, 0.857317165455660390, +0.857291424955232690, 0.857265682311576520, 0.857239937524756020, 0.857214190594835830, 0.857188441521880010, 0.857162690305953160, 0.857136936947119120, 0.857111181445443290, +0.857085423800989400, 0.857059664013821940, 0.857033902084005430, 0.857008138011604030, 0.856982371796682350, 0.856956603439304800, 0.856930832939535200, 0.856905060297438960, +0.856879285513080120, 0.856853508586522980, 0.856827729517832150, 0.856801948307072010, 0.856776164954306970, 0.856750379459601090, 0.856724591823019740, 0.856698802044626780, +0.856673010124486930, 0.856647216062664580, 0.856621419859224130, 0.856595621514230080, 0.856569821027747040, 0.856544018399839070, 0.856518213630571350, 0.856492406720008260, +0.856466597668213980, 0.856440786475253350, 0.856414973141190640, 0.856389157666090580, 0.856363340050017570, 0.856337520293035780, 0.856311698395210710, 0.856285874356606300, +0.856260048177287290, 0.856234219857318070, 0.856208389396763360, 0.856182556795687670, 0.856156722054155160, 0.856130885172231240, 0.856105046149980060, 0.856079204987466370, +0.856053361684754650, 0.856027516241909540, 0.856001668658995520, 0.855975818936077440, 0.855949967073219350, 0.855924113070486770, 0.855898256927943970, 0.855872398645655450, +0.855846538223685950, 0.855820675662100180, 0.855794810960962660, 0.855768944120338100, 0.855743075140290690, 0.855717204020886140, 0.855691330762188510, 0.855665455364262640, +0.855639577827173040, 0.855613698150984540, 0.855587816335761750, 0.855561932381568970, 0.855536046288471910, 0.855510158056534630, 0.855484267685821980, 0.855458375176398670, +0.855432480528329430, 0.855406583741678990, 0.855380684816512080, 0.855354783752893090, 0.855328880550887400, 0.855302975210559650, 0.855277067731974430, 0.855251158115196590, +0.855225246360290850, 0.855199332467321940, 0.855173416436354250, 0.855147498267453510, 0.855121577960684000, 0.855095655516110550, 0.855069730933797900, 0.855043804213810990, +0.855017875356214540, 0.854991944361073510, 0.854966011228452060, 0.854940075958416030, 0.854914138551029820, 0.854888199006358260, 0.854862257324466300, 0.854836313505418550, +0.854810367549280080, 0.854784419456115720, 0.854758469225989860, 0.854732516858968230, 0.854706562355115330, 0.854680605714496000, 0.854654646937175190, 0.854628686023217840, +0.854602722972688690, 0.854576757785652230, 0.854550790462174410, 0.854524821002319630, 0.854498849406152730, 0.854472875673738750, 0.854446899805142550, 0.854420921800429060, +0.854394941659663340, 0.854368959382909800, 0.854342974970234260, 0.854316988421701340, 0.854290999737375990, 0.854265008917323150, 0.854239015961607670, 0.854213020870294710, +0.854187023643448780, 0.854161024281135720, 0.854135022783420020, 0.854109019150366850, 0.854083013382041180, 0.854057005478507820, 0.854030995439832070, 0.854004983266078880, +0.853978968957312620, 0.853952952513599480, 0.853926933935003960, 0.853900913221591120, 0.853874890373426010, 0.853848865390573590, 0.853822838273099020, 0.853796809021067470, +0.853770777634543340, 0.853744744113592690, 0.853718708458280240, 0.853692670668671050, 0.853666630744830180, 0.853640588686822690, 0.853614544494713750, 0.853588498168567970, +0.853562449708451410, 0.853536399114428690, 0.853510346386565090, 0.853484291524925550, 0.853458234529575250, 0.853432175400579360, 0.853406114138003160, 0.853380050741911030, +0.853353985212369380, 0.853327917549442700, 0.853301847753196290, 0.853275775823695180, 0.853249701761004680, 0.853223625565189820, 0.853197547236316020, 0.853171466774447880, +0.853145384179651470, 0.853119299451991610, 0.853093212591533590, 0.853067123598342470, 0.853041032472483530, 0.853014939214022050, 0.852988843823022760, 0.852962746299551820, +0.852936646643673970, 0.852910544855454590, 0.852884440934958740, 0.852858334882251820, 0.852832226697399110, 0.852806116380465770, 0.852780003931516760, 0.852753889350618130, +0.852727772637834840, 0.852701653793232040, 0.852675532816875140, 0.852649409708829410, 0.852623284469160250, 0.852597157097932270, 0.852571027595211970, 0.852544895961063980, +0.852518762195553890, 0.852492626298746780, 0.852466488270708140, 0.852440348111503270, 0.852414205821197650, 0.852388061399855900, 0.852361914847544530, 0.852335766164328380, +0.852309615350272720, 0.852283462405443170, 0.852257307329904900, 0.852231150123723300, 0.852204990786963880, 0.852178829319691580, 0.852152665721972570, 0.852126499993871910, +0.852100332135455000, 0.852074162146787330, 0.852047990027934190, 0.852021815778961080, 0.851995639399932950, 0.851969460890916300, 0.851943280251975850, 0.851917097483177340, +0.851890912584585940, 0.851864725556267350, 0.851838536398286990, 0.851812345110710250, 0.851786151693602060, 0.851759956147029150, 0.851733758471056150, 0.851707558665748880, +0.851681356731172730, 0.851655152667393220, 0.851628946474475730, 0.851602738152485880, 0.851576527701488730, 0.851550315121550770, 0.851524100412736960, 0.851497883575113020, +0.851471664608744240, 0.851445443513696330, 0.851419220290034810, 0.851392994937824830, 0.851366767457132800, 0.851340537848023770, 0.851314306110563470, 0.851288072244817400, +0.851261836250851170, 0.851235598128730400, 0.851209357878520480, 0.851183115500286800, 0.851156870994095870, 0.851130624360012630, 0.851104375598102810, 0.851078124708432140, +0.851051871691066220, 0.851025616546070450, 0.850999359273510340, 0.850973099873452150, 0.850946838345961300, 0.850920574691103380, 0.850894308908944020, 0.850868040999548820, +0.850841770962983520, 0.850815498799313840, 0.850789224508604840, 0.850762948090923340, 0.850736669546334530, 0.850710388874903910, 0.850684106076697420, 0.850657821151780680, +0.850631534100219300, 0.850605244922079120, 0.850578953617425300, 0.850552660186324690, 0.850526364628842350, 0.850500066945044100, 0.850473767134995780, 0.850447465198762910, +0.850421161136411420, 0.850394854948006600, 0.850368546633615050, 0.850342236193302180, 0.850315923627133710, 0.850289608935175470, 0.850263292117493190, 0.850236973174152590, +0.850210652105219620, 0.850184328910759570, 0.850158003590839150, 0.850131676145523760, 0.850105346574879130, 0.850079014878971080, 0.850052681057865580, 0.850026345111628330, +0.850000007040325300, 0.849973666844021760, 0.849947324522784430, 0.849920980076678930, 0.849894633505770880, 0.849868284810126220, 0.849841933989810890, 0.849815581044890740, +0.849789225975431160, 0.849762868781498980, 0.849736509463159590, 0.849710148020479060, 0.849683784453522990, 0.849657418762357560, 0.849631050947048600, 0.849604681007661950, +0.849578308944263120, 0.849551934756919040, 0.849525558445695110, 0.849499180010657270, 0.849472799451871490, 0.849446416769403800, 0.849420031963319940, 0.849393645033685530, +0.849367255980567610, 0.849340864804031370, 0.849314471504143080, 0.849288076080968570, 0.849261678534573900, 0.849235278865025030, 0.849208877072388010, 0.849182473156728230, +0.849156067118112760, 0.849129658956607190, 0.849103248672277380, 0.849076836265189480, 0.849050421735409570, 0.849024005083003570, 0.848997586308037460, 0.848971165410577040, +0.848944742390689070, 0.848918317248439360, 0.848891889983893750, 0.848865460597118540, 0.848839029088179540, 0.848812595457143050, 0.848786159704074560, 0.848759721829041140, +0.848733281832108500, 0.848706839713342600, 0.848680395472809490, 0.848653949110575570, 0.848627500626706670, 0.848601050021269070, 0.848574597294328380, 0.848548142445951560, +0.848521685476204550, 0.848495226385153180, 0.848468765172863850, 0.848442301839402500, 0.848415836384835530, 0.848389368809228880, 0.848362899112648390, 0.848336427295161010, +0.848309953356832680, 0.848283477297729460, 0.848256999117917520, 0.848230518817463030, 0.848204036396432380, 0.848177551854891080, 0.848151065192906390, 0.848124576410543950, +0.848098085507870140, 0.848071592484951120, 0.848045097341853180, 0.848018600078642380, 0.847992100695385110, 0.847965599192147200, 0.847939095568995720, 0.847912589825996490, +0.847886081963215800, 0.847859571980719820, 0.847833059878575050, 0.847806545656847540, 0.847780029315603150, 0.847753510854909240, 0.847726990274831560, 0.847700467575436380, +0.847673942756790090, 0.847647415818958860, 0.847620886762009080, 0.847594355586007150, 0.847567822291018790, 0.847541286877111390, 0.847514749344350780, 0.847488209692803360, +0.847461667922535300, 0.847435124033613100, 0.847408578026103140, 0.847382029900071720, 0.847355479655584660, 0.847328927292709480, 0.847302372811511990, 0.847275816212058500, +0.847249257494415490, 0.847222696658649350, 0.847196133704826490, 0.847169568633012740, 0.847143001443275590, 0.847116432135681000, 0.847089860710295240, 0.847063287167184930, +0.847036711506416240, 0.847010133728055890, 0.846983553832170280, 0.846956971818825120, 0.846930387688088150, 0.846903801440025190, 0.846877213074702650, 0.846850622592187130, +0.846824029992545020, 0.846797435275842950, 0.846770838442146730, 0.846744239491523890, 0.846717638424040460, 0.846691035239762860, 0.846664429938757790, 0.846637822521091540, +0.846611212986830840, 0.846584601336042080, 0.846557987568791300, 0.846531371685146030, 0.846504753685172420, 0.846478133568936860, 0.846451511336505870, 0.846424886987946270, +0.846398260523324340, 0.846371631942706810, 0.846345001246159740, 0.846318368433750630, 0.846291733505545540, 0.846265096461611190, 0.846238457302014080, 0.846211816026820830, +0.846185172636097940, 0.846158527129911800, 0.846131879508329690, 0.846105229771418000, 0.846078577919243120, 0.846051923951871900, 0.846025267869370820, 0.845998609671806510, +0.845971949359245800, 0.845945286931754640, 0.845918622389400850, 0.845891955732250400, 0.845865286960370110, 0.845838616073826600, 0.845811943072686480, 0.845785267957016580, +0.845758590726883530, 0.845731911382353490, 0.845705229923494060, 0.845678546350371760, 0.845651860663052870, 0.845625172861604430, 0.845598482946093190, 0.845571790916585520, +0.845545096773148040, 0.845518400515848260, 0.845491702144752440, 0.845465001659927440, 0.845438299061439860, 0.845411594349356530, 0.845384887523744300, 0.845358178584669770, +0.845331467532199340, 0.845304754366400730, 0.845278039087340230, 0.845251321695084660, 0.845224602189700750, 0.845197880571255330, 0.845171156839815250, 0.845144430995446780, +0.845117703038217650, 0.845090972968194350, 0.845064240785443620, 0.845037506490032180, 0.845010770082027070, 0.844984031561495040, 0.844957290928502910, 0.844930548183117080, +0.844903803325405380, 0.844877056355434090, 0.844850307273270260, 0.844823556078980520, 0.844796802772632030, 0.844770047354291510, 0.844743289824025800, 0.844716530181901510, +0.844689768427986270, 0.844663004562346660, 0.844636238585049440, 0.844609470496161750, 0.844582700295750330, 0.844555927983882130, 0.844529153560623640, 0.844502377026042810, +0.844475598380206030, 0.844448817623180140, 0.844422034755032300, 0.844395249775829470, 0.844368462685638370, 0.844341673484526160, 0.844314882172559230, 0.844288088749805650, +0.844261293216331810, 0.844234495572204760, 0.844207695817491440, 0.844180893952258930, 0.844154089976574150, 0.844127283890504180, 0.844100475694115500, 0.844073665387476080, +0.844046852970652520, 0.844020038443711870, 0.843993221806721090, 0.843966403059747240, 0.843939582202857360, 0.843912759236118080, 0.843885934159597450, 0.843859106973361860, +0.843832277677478590, 0.843805446272014590, 0.843778612757037030, 0.843751777132612850, 0.843724939398809210, 0.843698099555692860, 0.843671257603331610, 0.843644413541792320, +0.843617567371142020, 0.843590719091447780, 0.843563868702776660, 0.843537016205195940, 0.843510161598772120, 0.843483304883573480, 0.843456446059666520, 0.843429585127118410, +0.843402722085996430, 0.843375856936367630, 0.843348989678299080, 0.843322120311858160, 0.843295248837111490, 0.843268375254127120, 0.843241499562971790, 0.843214621763712760, +0.843187741856417090, 0.843160859841152190, 0.843133975717984980, 0.843107089486982990, 0.843080201148212800, 0.843053310701742500, 0.843026418147638900, 0.842999523485969290, +0.842972626716800950, 0.842945727840200940, 0.842918826856236650, 0.842891923764974790, 0.842865018566483660, 0.842838111260829970, 0.842811201848081000, 0.842784290328303930, +0.842757376701566250, 0.842730460967935020, 0.842703543127477750, 0.842676623180261150, 0.842649701126353400, 0.842622776965821440, 0.842595850698732440, 0.842568922325153900, +0.842541991845153100, 0.842515059258797220, 0.842488124566153740, 0.842461187767289510, 0.842434248862272690, 0.842407307851170350, 0.842380364734049760, 0.842353419510978090, +0.842326472182023060, 0.842299522747251730, 0.842272571206731160, 0.842245617560529620, 0.842218661808714080, 0.842191703951351900, 0.842164743988510380, 0.842137781920257010, +0.842110817746659190, 0.842083851467784420, 0.842056883083699410, 0.842029912594472800, 0.842002940000171280, 0.841975965300862490, 0.841948988496613810, 0.841922009587492640, +0.841895028573566350, 0.841868045454902130, 0.841841060231568240, 0.841814072903631640, 0.841787083471159940, 0.841760091934220520, 0.841733098292880790, 0.841706102547208460, +0.841679104697270810, 0.841652104743134900, 0.841625102684869120, 0.841598098522540750, 0.841571092256217070, 0.841544083885965580, 0.841517073411854000, 0.841490060833949620, +0.841463046152320150, 0.841436029367032660, 0.841409010478155420, 0.841381989485755820, 0.841354966389901150, 0.841327941190659010, 0.841300913888097130, 0.841273884482282910, +0.841246852973283500, 0.841219819361167520, 0.841192783646001920, 0.841165745827854310, 0.841138705906792410, 0.841111663882883720, 0.841084619756195860, 0.841057573526796440, +0.841030525194752740, 0.841003474760133040, 0.840976422223004730, 0.840949367583435300, 0.840922310841492490, 0.840895251997244020, 0.840868191050757270, 0.840841128002100090, +0.840814062851339640, 0.840786995598544420, 0.840759926243781820, 0.840732854787119340, 0.840705781228624720, 0.840678705568365660, 0.840651627806409900, 0.840624547942824480, +0.840597465977678260, 0.840570381911038390, 0.840543295742972480, 0.840516207473548380, 0.840489117102833690, 0.840462024630896360, 0.840434930057803790, 0.840407833383623570, +0.840380734608424110, 0.840353633732272900, 0.840326530755237560, 0.840299425677386020, 0.840272318498785810, 0.840245209219504740, 0.840218097839610320, 0.840190984359171060, +0.840163868778254330, 0.840136751096927870, 0.840109631315259620, 0.840082509433317300, 0.840055385451168650, 0.840028259368881590, 0.840001131186523310, 0.839974000904162740, +0.839946868521867170, 0.839919734039704440, 0.839892597457742470, 0.839865458776048900, 0.839838317994691660, 0.839811175113738590, 0.839784030133257200, 0.839756883053316190, +0.839729733873982980, 0.839702582595325380, 0.839675429217411450, 0.839648273740308810, 0.839621116164085520, 0.839593956488808970, 0.839566794714548090, 0.839539630841370070, +0.839512464869343060, 0.839485296798534900, 0.839458126629013530, 0.839430954360846800, 0.839403779994102650, 0.839376603528848570, 0.839349424965153520, 0.839322244303084890, +0.839295061542710610, 0.839267876684098750, 0.839240689727317140, 0.839213500672433830, 0.839186309519516340, 0.839159116268633490, 0.839131920919852780, 0.839104723473242390, +0.839077523928870140, 0.839050322286804100, 0.839023118547112200, 0.838995912709862620, 0.838968704775122640, 0.838941494742961420, 0.838914282613446580, 0.838887068386645950, +0.838859852062627590, 0.838832633641459660, 0.838805413123210110, 0.838778190507947110, 0.838750965795738050, 0.838723738986652090, 0.838696510080756850, 0.838669279078120280, +0.838642045978810540, 0.838614810782895680, 0.838587573490443770, 0.838560334101522420, 0.838533092616200680, 0.838505849034546280, 0.838478603356627270, 0.838451355582511830, +0.838424105712267890, 0.838396853745963620, 0.838369599683667310, 0.838342343525446560, 0.838315085271370330, 0.838287824921506440, 0.838260562475923070, 0.838233297934688150, +0.838206031297870080, 0.838178762565536920, 0.838151491737756830, 0.838124218814597530, 0.838096943796128090, 0.838069666682416450, 0.838042387473530550, 0.838015106169538670, +0.837987822770509090, 0.837960537276509880, 0.837933249687608850, 0.837905960003875180, 0.837878668225376710, 0.837851374352181490, 0.837824078384357800, 0.837796780321974020, +0.837769480165098220, 0.837742177913798680, 0.837714873568143230, 0.837687567128201140, 0.837660258594040140, 0.837632947965728400, 0.837605635243334420, 0.837578320426926260, +0.837551003516572300, 0.837523684512340380, 0.837496363414299670, 0.837469040222518110, 0.837441714937063990, 0.837414387558005460, 0.837387058085411030, 0.837359726519348980, +0.837332392859887590, 0.837305057107094800, 0.837277719261039780, 0.837250379321790470, 0.837223037289415160, 0.837195693163982350, 0.837168346945560300, 0.837140998634217310, +0.837113648230021880, 0.837086295733041830, 0.837058941143346560, 0.837031584461003900, 0.837004225686082240, 0.836976864818650080, 0.836949501858775700, 0.836922136806527610, +0.836894769661973740, 0.836867400425183370, 0.836840029096224460, 0.836812655675165610, 0.836785280162074980, 0.836757902557021200, 0.836730522860072660, 0.836703141071297840, +0.836675757190764700, 0.836648371218542630, 0.836620983154699570, 0.836593592999304140, 0.836566200752424720, 0.836538806414129700, 0.836511409984487810, 0.836484011463567320, +0.836456610851436300, 0.836429208148164240, 0.836401803353819200, 0.836374396468469560, 0.836346987492184060, 0.836319576425031070, 0.836292163267079000, 0.836264748018396230, +0.836237330679051930, 0.836209911249114370, 0.836182489728652060, 0.836155066117733490, 0.836127640416427180, 0.836100212624801830, 0.836072782742925960, 0.836045350770867610, +0.836017916708696410, 0.835990480556480400, 0.835963042314288310, 0.835935601982188410, 0.835908159560249660, 0.835880715048540450, 0.835853268447128930, 0.835825819756084830, +0.835798368975476100, 0.835770916105371460, 0.835743461145839530, 0.835716004096948910, 0.835688544958768320, 0.835661083731366380, 0.835633620414811260, 0.835606155009172570, +0.835578687514518470, 0.835551217930917690, 0.835523746258438840, 0.835496272497150530, 0.835468796647121700, 0.835441318708420750, 0.835413838681116070, 0.835386356565277270, +0.835358872360972620, 0.835331386068270730, 0.835303897687240450, 0.835276407217950380, 0.835248914660469240, 0.835221420014865430, 0.835193923281208450, 0.835166424459566790, +0.835138923550008960, 0.835111420552603900, 0.835083915467420220, 0.835056408294526760, 0.835028899033992360, 0.835001387685885170, 0.834973874250275030, 0.834946358727230110, +0.834918841116819350, 0.834891321419111490, 0.834863799634175340, 0.834836275762079640, 0.834808749802893320, 0.834781221756684570, 0.834753691623523310, 0.834726159403477830, +0.834698625096616960, 0.834671088703009430, 0.834643550222724300, 0.834616009655830270, 0.834588467002395640, 0.834560922262490460, 0.834533375436182890, 0.834505826523541880, +0.834478275524636270, 0.834450722439535000, 0.834423167268307010, 0.834395610011021030, 0.834368050667745550, 0.834340489238550420, 0.834312925723504020, 0.834285360122675400, +0.834257792436133290, 0.834230222663946750, 0.834202650806184720, 0.834175076862915480, 0.834147500834209080, 0.834119922720133910, 0.834092342520758920, 0.834064760236153060, +0.834037175866385370, 0.834009589411524700, 0.833982000871639980, 0.833954410246799950, 0.833926817537074210, 0.833899222742531480, 0.833871625863240820, 0.833844026899270950, +0.833816425850691050, 0.833788822717570040, 0.833761217499977000, 0.833733610197980420, 0.833706000811650360, 0.833678389341055310, 0.833650775786264230, 0.833623160147346280, +0.833595542424370280, 0.833567922617405640, 0.833540300726520520, 0.833512676751785200, 0.833485050693268170, 0.833457422551038610, 0.833429792325165340, 0.833402160015717760, +0.833374525622764590, 0.833346889146375220, 0.833319250586618150, 0.833291609943563440, 0.833263967217279690, 0.833236322407835960, 0.833208675515301530, 0.833181026539745350, +0.833153375481236580, 0.833125722339844500, 0.833098067115637500, 0.833070409808685850, 0.833042750419058180, 0.833015088946823630, 0.832987425392051390, 0.832959759754810510, +0.832932092035170270, 0.832904422233199380, 0.832876750348967800, 0.832849076382544460, 0.832821400333998430, 0.832793722203398760, 0.832766041990814940, 0.832738359696315930, +0.832710675319971010, 0.832682988861848990, 0.832655300322019950, 0.832627609700552610, 0.832599916997516340, 0.832572222212980220, 0.832544525347013510, 0.832516826399685490, +0.832489125371065010, 0.832461422261222110, 0.832433717070225730, 0.832406009798145050, 0.832378300445049350, 0.832350589011007780, 0.832322875496089850, 0.832295159900364730, +0.832267442223901140, 0.832239722466769580, 0.832212000629038550, 0.832184276710777660, 0.832156550712055960, 0.832128822632942970, 0.832101092473507940, 0.832073360233820060, +0.832045625913948370, 0.832017889513963160, 0.831990151033933150, 0.831962410473927720, 0.831934667834016370, 0.831906923114268280, 0.831879176314752940, 0.831851427435539080, +0.831823676476697190, 0.831795923438296110, 0.831768168320405230, 0.831740411123093940, 0.831712651846431620, 0.831684890490487660, 0.831657127055331460, 0.831629361541031950, +0.831601593947659530, 0.831573824275283150, 0.831546052523972290, 0.831518278693796130, 0.831490502784824390, 0.831462724797126350, 0.831434944730770950, 0.831407162585828810, +0.831379378362368640, 0.831351592060460170, 0.831323803680172560, 0.831296013221575540, 0.831268220684738490, 0.831240426069730810, 0.831212629376621660, 0.831184830605481430, +0.831157029756379060, 0.831129226829384060, 0.831101421824566140, 0.831073614741994590, 0.831045805581739020, 0.831017994343868920, 0.830990181028453350, 0.830962365635562810, +0.830934548165266350, 0.830906728617633590, 0.830878906992733920, 0.830851083290637060, 0.830823257511412390, 0.830795429655129200, 0.830767599721857870, 0.830739767711667580, +0.830711933624627810, 0.830684097460808180, 0.830656259220278410, 0.830628418903107900, 0.830600576509366470, 0.830572732039122960, 0.830544885492448200, 0.830517036869411250, +0.830489186170081610, 0.830461333394529100, 0.830433478542823120, 0.830405621615033620, 0.830377762611229970, 0.830349901531481470, 0.830322038375858610, 0.830294173144430770, +0.830266305837267460, 0.830238436454438290, 0.830210564996013090, 0.830182691462061580, 0.830154815852652720, 0.830126938167857430, 0.830099058407744670, 0.830071176572384380, +0.830043292661846070, 0.830015406676199550, 0.829987518615514450, 0.829959628479860710, 0.829931736269307270, 0.829903841983924970, 0.829875945623783200, 0.829848047188951440, +0.829820146679499660, 0.829792244095497460, 0.829764339437014660, 0.829736432704120450, 0.829708523896885760, 0.829680613015379650, 0.829652700059672070, 0.829624785029832830, +0.829596867925931460, 0.829568948748037990, 0.829541027496222160, 0.829513104170553350, 0.829485178771102170, 0.829457251297938010, 0.829429321751130820, 0.829401390130750320, +0.829373456436866330, 0.829345520669548590, 0.829317582828867140, 0.829289642914891270, 0.829261700927691800, 0.829233756867338020, 0.829205810733899870, 0.829177862527447180, +0.829149912248049790, 0.829121959895777750, 0.829094005470700220, 0.829066048972888160, 0.829038090402410940, 0.829010129759338630, 0.828982167043740840, 0.828954202255687720, +0.828926235395249120, 0.828898266462494980, 0.828870295457494580, 0.828842322380318960, 0.828814347231037530, 0.828786370009720220, 0.828758390716436980, 0.828730409351257750, +0.828702425914252580, 0.828674440405491320, 0.828646452825043460, 0.828618463172979940, 0.828590471449370260, 0.828562477654284370, 0.828534481787792320, 0.828506483849964060, +0.828478483840869640, 0.828450481760578450, 0.828422477609161540, 0.828394471386688540, 0.828366463093229250, 0.828338452728853870, 0.828310440293632320, 0.828282425787634780, +0.828254409210931080, 0.828226390563590820, 0.828198369845685180, 0.828170347057283540, 0.828142322198456070, 0.828114295269272720, 0.828086266269803750, 0.828058235200119010, +0.828030202060288210, 0.828002166850382420, 0.827974129570471230, 0.827946090220624710, 0.827918048800913020, 0.827890005311406110, 0.827861959752174250, 0.827833912123287500, +0.827805862424815350, 0.827777810656829200, 0.827749756819398440, 0.827721700912593230, 0.827693642936483950, 0.827665582891140450, 0.827637520776632880, 0.827609456593031640, +0.827581390340406340, 0.827553322018827920, 0.827525251628366210, 0.827497179169091490, 0.827469104641073700, 0.827441028044383240, 0.827412949379090160, 0.827384868645264170, +0.827356785842976560, 0.827328700972296940, 0.827300614033295580, 0.827272525026042760, 0.827244433950608540, 0.827216340807063300, 0.827188245595477100, 0.827160148315919890, +0.827132048968462820, 0.827103947553175510, 0.827075844070128460, 0.827047738519391730, 0.827019630901035700, 0.826991521215130530, 0.826963409461746620, 0.826935295640953690, +0.826907179752823020, 0.826879061797424320, 0.826850941774827990, 0.826822819685104400, 0.826794695528323630, 0.826766569304556280, 0.826738441013871840, 0.826710310656341930, +0.826682178232036160, 0.826654043741025020, 0.826625907183378690, 0.826597768559167670, 0.826569627868462110, 0.826541485111332630, 0.826513340287848840, 0.826485193398082240, +0.826457044442102660, 0.826428893419980380, 0.826400740331786010, 0.826372585177589710, 0.826344427957461880, 0.826316268671472560, 0.826288107319693040, 0.826259943902193370, +0.826231778419043720, 0.826203610870314690, 0.826175441256076560, 0.826147269576399830, 0.826119095831355010, 0.826090920021011810, 0.826062742145441950, 0.826034562204715160, +0.826006380198902050, 0.825978196128072880, 0.825950009992298280, 0.825921821791648640, 0.825893631526194440, 0.825865439196005640, 0.825837244801153840, 0.825809048341708870, +0.825780849817741250, 0.825752649229321570, 0.825724446576520220, 0.825696241859407710, 0.825668035078054200, 0.825639826232530960, 0.825611615322908280, 0.825583402349256530, +0.825555187311646230, 0.825526970210148090, 0.825498751044832390, 0.825470529815769850, 0.825442306523030520, 0.825414081166685910, 0.825385853746806060, 0.825357624263461600, +0.825329392716723120, 0.825301159106661130, 0.825272923433346240, 0.825244685696848950, 0.825216445897239640, 0.825188204034589590, 0.825159960108968970, 0.825131714120448610, +0.825103466069098790, 0.825075215954990450, 0.825046963778193980, 0.825018709538779650, 0.824990453236819080, 0.824962194872382320, 0.824933934445540080, 0.824905671956363000, +0.824877407404921770, 0.824849140791287020, 0.824820872115529350, 0.824792601377719150, 0.824764328577927810, 0.824736053716225710, 0.824707776792683370, 0.824679497807371710, +0.824651216760361240, 0.824622933651722790, 0.824594648481526530, 0.824566361249844060, 0.824538071956745780, 0.824509780602302180, 0.824481487186584210, 0.824453191709662580, +0.824424894171607910, 0.824396594572490930, 0.824368292912382120, 0.824339989191352980, 0.824311683409473920, 0.824283375566815520, 0.824255065663448860, 0.824226753699444430, +0.824198439674873160, 0.824170123589805790, 0.824141805444312590, 0.824113485238465390, 0.824085162972334470, 0.824056838645990660, 0.824028512259504690, 0.824000183812947480, +0.823971853306389890, 0.823943520739902070, 0.823915186113555960, 0.823886849427421850, 0.823858510681570680, 0.823830169876073270, 0.823801827011000350, 0.823773482086422870, +0.823745135102411760, 0.823716786059037310, 0.823688434956371340, 0.823660081794484240, 0.823631726573446970, 0.823603369293330450, 0.823575009954205410, 0.823546648556142900, +0.823518285099213760, 0.823489919583488490, 0.823461552009038810, 0.823433182375935320, 0.823404810684248870, 0.823376436934050270, 0.823348061125410700, 0.823319683258400990, +0.823291303333091530, 0.823262921349554260, 0.823234537307859780, 0.823206151208078940, 0.823177763050282670, 0.823149372834542040, 0.823120980560927970, 0.823092586229511420, +0.823064189840363000, 0.823035791393554430, 0.823007390889156530, 0.822978988327240150, 0.822950583707876220, 0.822922177031135900, 0.822893768297090040, 0.822865357505809360, +0.822836944657365790, 0.822808529751829720, 0.822780112789272540, 0.822751693769764870, 0.822723272693378080, 0.822694849560183130, 0.822666424370250950, 0.822637997123652260, +0.822609567820459130, 0.822581136460742050, 0.822552703044572180, 0.822524267572020460, 0.822495830043158070, 0.822467390458056170, 0.822438948816785810, 0.822410505119417490, +0.822382059366023490, 0.822353611556674300, 0.822325161691441100, 0.822296709770394930, 0.822268255793607070, 0.822239799761148580, 0.822211341673090070, 0.822182881529503580, +0.822154419330460070, 0.822125955076030370, 0.822097488766285970, 0.822069020401297700, 0.822040549981136850, 0.822012077505874680, 0.821983602975581820, 0.821955126390330530, +0.821926647750191310, 0.821898167055235440, 0.821869684305534310, 0.821841199501158860, 0.821812712642180370, 0.821784223728669660, 0.821755732760698910, 0.821727239738338830, +0.821698744661660600, 0.821670247530735590, 0.821641748345634860, 0.821613247106429910, 0.821584743813191690, 0.821556238465991130, 0.821527731064900510, 0.821499221609990560, +0.821470710101332550, 0.821442196538997860, 0.821413680923057550, 0.821385163253583130, 0.821356643530645750, 0.821328121754316240, 0.821299597924666890, 0.821271072041768630, +0.821242544105692640, 0.821214014116510400, 0.821185482074292980, 0.821156947979111980, 0.821128411831038020, 0.821099873630143580, 0.821071333376499400, 0.821042791070176970, +0.821014246711247450, 0.820985700299782460, 0.820957151835853050, 0.820928601319530940, 0.820900048750886620, 0.820871494129992830, 0.820842937456920270, 0.820814378731740350, +0.820785817954524540, 0.820757255125344140, 0.820728690244270640, 0.820700123311375320, 0.820671554326729340, 0.820642983290404860, 0.820614410202472940, 0.820585835063004980, +0.820557257872072450, 0.820528678629746770, 0.820500097336099410, 0.820471513991201330, 0.820442928595124910, 0.820414341147941210, 0.820385751649721720, 0.820357160100537720, +0.820328566500460930, 0.820299970849562630, 0.820271373147914430, 0.820242773395587380, 0.820214171592653860, 0.820185567739184830, 0.820156961835252000, 0.820128353880926640, +0.820099743876280480, 0.820071131821384910, 0.820042517716311090, 0.820013901561131410, 0.819985283355916920, 0.819956663100739340, 0.819928040795670050, 0.819899416440780680, +0.819870790036142720, 0.819842161581827880, 0.819813531077907000, 0.819784898524452910, 0.819756263921536550, 0.819727627269229430, 0.819698988567603370, 0.819670347816729760, +0.819641705016680320, 0.819613060167526660, 0.819584413269339840, 0.819555764322192350, 0.819527113326155580, 0.819498460281301020, 0.819469805187700300, 0.819441148045425010, +0.819412488854546870, 0.819383827615137060, 0.819355164327268180, 0.819326498991011400, 0.819297831606438320, 0.819269162173620670, 0.819240490692630050, 0.819211817163538300, +0.819183141586417030, 0.819154463961337290, 0.819125784288372020, 0.819097102567592160, 0.819068418799069660, 0.819039732982876020, 0.819011045119083180, 0.818982355207762640, +0.818953663248986220, 0.818924969242825100, 0.818896273189352100, 0.818867575088638390, 0.818838874940755800, 0.818810172745775940, 0.818781468503770760, 0.818752762214811860, +0.818724053878970510, 0.818695343496319560, 0.818666631066930270, 0.818637916590874370, 0.818609200068223690, 0.818580481499050050, 0.818551760883425070, 0.818523038221420810, +0.818494313513108420, 0.818465586758560740, 0.818436857957849150, 0.818408127111045380, 0.818379394218221260, 0.818350659279448720, 0.818321922294799500, 0.818293183264344970, +0.818264442188157970, 0.818235699066309890, 0.818206953898872550, 0.818178206685917790, 0.818149457427517550, 0.818120706123743660, 0.818091952774668060, 0.818063197380362040, +0.818034439940898530, 0.818005680456348920, 0.817976918926785030, 0.817948155352278940, 0.817919389732902460, 0.817890622068727420, 0.817861852359825890, 0.817833080606269250, +0.817804306808130320, 0.817775530965480720, 0.817746753078392290, 0.817717973146936950, 0.817689191171186660, 0.817660407151213350, 0.817631621087088640, 0.817602832978885250, +0.817574042826674900, 0.817545250630529410, 0.817516456390520730, 0.817487660106720910, 0.817458861779202020, 0.817430061408035980, 0.817401258993294190, 0.817372454535049810, +0.817343648033374340, 0.817314839488339720, 0.817286028900017890, 0.817257216268481130, 0.817228401593801280, 0.817199584876050490, 0.817170766115300150, 0.817141945311623430, +0.817113122465091820, 0.817084297575777390, 0.817055470643752280, 0.817026641669088450, 0.816997810651858060, 0.816968977592132610, 0.816940142489985140, 0.816911305345487390, +0.816882466158711410, 0.816853624929729240, 0.816824781658613050, 0.816795936345434790, 0.816767088990266840, 0.816738239593180590, 0.816709388154249210, 0.816680534673544400, +0.816651679151138230, 0.816622821587102870, 0.816593961981510460, 0.816565100334433190, 0.816536236645942550, 0.816507370916111920, 0.816478503145012800, 0.816449633332717470, +0.816420761479298100, 0.816391887584826730, 0.816363011649375750, 0.816334133673017100, 0.816305253655822740, 0.816276371597865700, 0.816247487499217720, 0.816218601359951060, +0.816189713180137890, 0.816160822959850370, 0.816131930699160900, 0.816103036398141520, 0.816074140056864070, 0.816045241675401710, 0.816016341253826380, 0.815987438792210140, +0.815958534290625260, 0.815929627749144130, 0.815900719167838790, 0.815871808546781320, 0.815842895886044750, 0.815813981185700920, 0.815785064445822110, 0.815756145666480690, +0.815727224847748960, 0.815698301989699060, 0.815669377092403500, 0.815640450155933890, 0.815611521180363730, 0.815582590165764730, 0.815553657112209280, 0.815524722019769670, +0.815495784888518370, 0.815466845718527460, 0.815437904509869530, 0.815408961262616310, 0.815380015976841070, 0.815351068652615970, 0.815322119290013080, 0.815293167889105000, +0.815264214449963890, 0.815235258972662360, 0.815206301457272020, 0.815177341903866590, 0.815148380312517680, 0.815119416683297900, 0.815090451016279530, 0.815061483311535050, +0.815032513569136860, 0.815003541789157460, 0.814974567971668560, 0.814945592116743890, 0.814916614224455160, 0.814887634294874870, 0.814858652328075530, 0.814829668324129620, +0.814800682283109530, 0.814771694205087100, 0.814742704090136050, 0.814713711938328200, 0.814684717749736160, 0.814655721524432220, 0.814626723262488970, 0.814597722963978920, +0.814568720628974670, 0.814539716257547950, 0.814510709849772590, 0.814481701405720400, 0.814452690925463910, 0.814423678409075810, 0.814394663856628400, 0.814365647268194380, +0.814336628643846260, 0.814307607983655980, 0.814278585287697250, 0.814249560556042030, 0.814220533788762910, 0.814191504985932510, 0.814162474147623330, 0.814133441273907970, +0.814104406364858480, 0.814075369420548480, 0.814046330441050010, 0.814017289426435810, 0.813988246376778360, 0.813959201292150160, 0.813930154172624150, 0.813901105018272620, +0.813872053829167940, 0.813843000605383500, 0.813813945346991700, 0.813784888054064900, 0.813755828726675960, 0.813726767364897460, 0.813697703968802030, 0.813668638538461720, +0.813639571073950460, 0.813610501575340320, 0.813581430042703780, 0.813552356476113680, 0.813523280875642740, 0.813494203241363680, 0.813465123573348990, 0.813436041871670960, +0.813406958136403400, 0.813377872367618490, 0.813348784565388840, 0.813319694729787270, 0.813290602860886390, 0.813261508958759040, 0.813232413023477930, 0.813203315055115230, +0.813174215053744760, 0.813145113019438810, 0.813116008952270100, 0.813086902852311330, 0.813057794719635240, 0.813028684554314760, 0.812999572356421950, 0.812970458126030860, +0.812941341863213540, 0.812912223568042820, 0.812883103240591650, 0.812853980880932640, 0.812824856489138710, 0.812795730065282610, 0.812766601609436700, 0.812737471121674830, +0.812708338602069260, 0.812679204050692830, 0.812650067467618360, 0.812620928852918810, 0.812591788206666890, 0.812562645528935420, 0.812533500819796920, 0.812504354079325200, +0.812475205307592540, 0.812446054504671890, 0.812416901670636070, 0.812387746805558030, 0.812358589909510600, 0.812329430982566160, 0.812300270024798770, 0.812271107036280580, +0.812241942017084770, 0.812212774967283950, 0.812183605886951270, 0.812154434776159560, 0.812125261634981780, 0.812096086463490300, 0.812066909261759060, 0.812037730029860680, +0.812008548767867880, 0.811979365475853810, 0.811950180153891200, 0.811920992802053210, 0.811891803420412230, 0.811862612009042190, 0.811833418568015720, 0.811804223097405630, +0.811775025597284980, 0.811745826067726830, 0.811716624508804110, 0.811687420920589760, 0.811658215303156410, 0.811629007656577970, 0.811599797980927070, 0.811570586276276650, +0.811541372542699760, 0.811512156780269440, 0.811482938989058770, 0.811453719169140770, 0.811424497320587860, 0.811395273443474290, 0.811366047537872560, 0.811336819603855620, +0.811307589641496630, 0.811278357650868750, 0.811249123632044930, 0.811219887585097780, 0.811190649510101450, 0.811161409407128550, 0.811132167276252040, 0.811102923117545170, +0.811073676931080900, 0.811044428716932500, 0.811015178475173130, 0.810985926205875170, 0.810956671909112910, 0.810927415584958950, 0.810898157233486570, 0.810868896854768710, +0.810839634448878630, 0.810810370015889510, 0.810781103555874410, 0.810751835068906020, 0.810722564555058530, 0.810693292014404760, 0.810664017447017660, 0.810634740852970490, +0.810605462232336540, 0.810576181585188960, 0.810546898911600370, 0.810517614211644920, 0.810488327485395570, 0.810459038732925460, 0.810429747954307670, 0.810400455149615560, +0.810371160318922200, 0.810341863462300970, 0.810312564579824700, 0.810283263671567440, 0.810253960737602030, 0.810224655778001730, 0.810195348792839720, 0.810166039782189370, +0.810136728746123970, 0.810107415684716230, 0.810078100598040420, 0.810048783486169380, 0.810019464349176380, 0.809990143187134690, 0.809960820000117710, 0.809931494788198700, +0.809902167551450840, 0.809872838289947160, 0.809843507003761840, 0.809814173692967710, 0.809784838357638260, 0.809755500997846660, 0.809726161613666280, 0.809696820205170530, +0.809667476772432670, 0.809638131315525640, 0.809608783834523840, 0.809579434329499970, 0.809550082800527650, 0.809520729247680040, 0.809491373671030630, 0.809462016070652820, +0.809432656446619440, 0.809403294799004860, 0.809373931127882140, 0.809344565433324560, 0.809315197715405500, 0.809285827974198570, 0.809256456209776930, 0.809227082422214310, +0.809197706611583300, 0.809168328777958630, 0.809138948921413140, 0.809109567042020310, 0.809080183139853530, 0.809050797214986290, 0.809021409267492110, 0.808992019297444240, +0.808962627304915970, 0.808933233289981570, 0.808903837252714200, 0.808874439193187130, 0.808845039111473980, 0.808815637007648250, 0.808786232881783420, 0.808756826733952440, +0.808727418564229920, 0.808698008372688900, 0.808668596159402900, 0.808639181924445280, 0.808609765667889780, 0.808580347389809880, 0.808550927090279090, 0.808521504769370570, +0.808492080427158700, 0.808462654063716650, 0.808433225679117910, 0.808403795273436200, 0.808374362846744910, 0.808344928399117760, 0.808315491930627790, 0.808286053441349630, +0.808256612931356200, 0.808227170400721340, 0.808197725849518540, 0.808168279277821530, 0.808138830685703690, 0.808109380073238850, 0.808079927440499950, 0.808050472787561810, +0.808021016114497500, 0.807991557421380620, 0.807962096708284890, 0.807932633975283810, 0.807903169222451310, 0.807873702449860790, 0.807844233657585510, 0.807814762845700200, +0.807785290014277900, 0.807755815163392340, 0.807726338293117350, 0.807696859403526530, 0.807667378494693500, 0.807637895566691520, 0.807608410619595320, 0.807578923653478050, +0.807549434668413560, 0.807519943664475440, 0.807490450641737520, 0.807460955600273420, 0.807431458540156850, 0.807401959461461200, 0.807372458364261190, 0.807342955248629980, +0.807313450114641510, 0.807283942962369270, 0.807254433791887220, 0.807224922603269060, 0.807195409396588630, 0.807165894171919200, 0.807136376929335490, 0.807106857668910880, +0.807077336390719100, 0.807047813094833980, 0.807018287781329220, 0.806988760450278900, 0.806959231101756050, 0.806929699735835730, 0.806900166352591100, 0.806870630952096100, +0.806841093534424570, 0.806811554099650220, 0.806782012647846990, 0.806752469179088720, 0.806722923693448780, 0.806693376191002120, 0.806663826671821900, 0.806634275135982180, +0.806604721583556780, 0.806575166014619540, 0.806545608429244390, 0.806516048827504720, 0.806486487209475470, 0.806456923575229910, 0.806427357924842100, 0.806397790258385980, +0.806368220575935270, 0.806338648877564010, 0.806309075163346160, 0.806279499433355080, 0.806249921687665850, 0.806220341926351840, 0.806190760149486870, 0.806161176357145020, +0.806131590549400200, 0.806102002726326480, 0.806072412887997690, 0.806042821034487320, 0.806013227165870540, 0.805983631282220610, 0.805954033383611600, 0.805924433470117550, +0.805894831541812410, 0.805865227598770110, 0.805835621641064370, 0.805806013668769920, 0.805776403681960570, 0.805746791680710170, 0.805717177665092770, 0.805687561635182400, +0.805657943591053250, 0.805628323532779130, 0.805598701460433770, 0.805569077374092110, 0.805539451273827760, 0.805509823159714760, 0.805480193031827160, 0.805450560890239250, +0.805420926735024860, 0.805391290566257580, 0.805361652384012580, 0.805332012188363480, 0.805302369979384420, 0.805272725757149370, 0.805243079521732460, 0.805213431273207990, +0.805183781011649780, 0.805154128737131770, 0.805124474449728790, 0.805094818149514780, 0.805065159836563570, 0.805035499510949550, 0.805005837172746760, 0.804976172822029380, +0.804946506458871560, 0.804916838083347020, 0.804887167695530810, 0.804857495295496770, 0.804827820883318950, 0.804798144459071610, 0.804768466022828810, 0.804738785574664940, +0.804709103114653600, 0.804679418642869960, 0.804649732159387730, 0.804620043664281300, 0.804590353157624620, 0.804560660639492160, 0.804530966109958000, 0.804501269569096510, +0.804471571016981190, 0.804441870453687540, 0.804412167879289260, 0.804382463293860540, 0.804352756697475630, 0.804323048090208830, 0.804293337472134380, 0.804263624843326590, +0.804233910203859260, 0.804204193553807680, 0.804174474893245560, 0.804144754222247290, 0.804115031540887150, 0.804085306849239400, 0.804055580147378430, 0.804025851435377970, +0.803996120713313390, 0.803966387981258520, 0.803936653239287650, 0.803906916487475140, 0.803877177725895400, 0.803847436954622680, 0.803817694173731390, 0.803787949383295340, +0.803758202583389920, 0.803728453774088970, 0.803698702955466970, 0.803668950127598090, 0.803639195290556940, 0.803609438444417790, 0.803579679589254470, 0.803549918725142480, +0.803520155852155750, 0.803490390970368560, 0.803460624079855410, 0.803430855180690790, 0.803401084272948870, 0.803371311356704370, 0.803341536432031100, 0.803311759499004350, +0.803281980557698280, 0.803252199608187280, 0.803222416650545830, 0.803192631684848220, 0.803162844711169170, 0.803133055729582930, 0.803103264740163470, 0.803073471742986490, +0.803043676738125710, 0.803013879725655850, 0.802984080705651190, 0.802954279678186440, 0.802924476643335880, 0.802894671601173670, 0.802864864551775300, 0.802835055495214830, +0.802805244431566640, 0.802775431360905340, 0.802745616283305430, 0.802715799198841510, 0.802685980107588180, 0.802656159009619290, 0.802626335905010540, 0.802596510793835980, +0.802566683676170120, 0.802536854552087450, 0.802507023421662800, 0.802477190284970550, 0.802447355142085320, 0.802417517993081140, 0.802387678838033750, 0.802357837677017070, +0.802327994510105840, 0.802298149337374640, 0.802268302158898110, 0.802238452974750720, 0.802208601785006750, 0.802178748589741810, 0.802148893389029950, 0.802119036182945890, +0.802089176971564230, 0.802059315754959590, 0.802029452533206790, 0.801999587306380210, 0.801969720074554250, 0.801939850837804390, 0.801909979596205020, 0.801880106349830650, +0.801850231098755970, 0.801820353843055830, 0.801790474582804720, 0.801760593318076920, 0.801730710048948140, 0.801700824775492650, 0.801670937497785060, 0.801641048215900100, +0.801611156929912580, 0.801581263639897120, 0.801551368345928440, 0.801521471048080910, 0.801491571746430150, 0.801461670441050540, 0.801431767132016800, 0.801401861819403540, +0.801371954503285580, 0.801342045183737860, 0.801312133860835000, 0.801282220534651260, 0.801252305205262470, 0.801222387872742910, 0.801192468537167410, 0.801162547198610800, +0.801132623857147670, 0.801102698512853100, 0.801072771165801220, 0.801042841816068000, 0.801012910463727580, 0.800982977108855020, 0.800953041751524930, 0.800923104391812140, +0.800893165029791690, 0.800863223665538300, 0.800833280299126370, 0.800803334930631720, 0.800773387560128840, 0.800743438187692340, 0.800713486813397380, 0.800683533437318570, +0.800653578059530970, 0.800623620680109500, 0.800593661299128350, 0.800563699916663650, 0.800533736532789700, 0.800503771147581420, 0.800473803761113660, 0.800443834373461340, +0.800413862984699520, 0.800383889594902480, 0.800353914204146260, 0.800323936812505240, 0.800293957420054380, 0.800263976026868720, 0.800233992633022970, 0.800204007238592310, +0.800174019843651660, 0.800144030448275420, 0.800114039052539640, 0.800084045656518690, 0.800054050260287640, 0.800024052863921530, 0.799994053467495300, 0.799964052071083900, +0.799934048674761810, 0.799904043278605200, 0.799874035882688350, 0.799844026487086520, 0.799814015091874660, 0.799784001697127600, 0.799753986302920720, 0.799723968909328730, +0.799693949516426360, 0.799663928124289660, 0.799633904732993120, 0.799603879342611790, 0.799573851953220840, 0.799543822564895200, 0.799513791177710040, 0.799483757791740410, +0.799453722407060810, 0.799423685023747390, 0.799393645641874870, 0.799363604261518200, 0.799333560882752430, 0.799303515505652820, 0.799273468130294430, 0.799243418756751870, +0.799213367385101290, 0.799183314015417200, 0.799153258647774980, 0.799123201282249450, 0.799093141918916010, 0.799063080557849690, 0.799033017199125670, 0.799002951842818670, +0.798972884489004720, 0.798942815137758560, 0.798912743789155330, 0.798882670443270330, 0.798852595100178590, 0.798822517759955390, 0.798792438422675890, 0.798762357088414810, +0.798732273757248310, 0.798702188429251110, 0.798672101104498490, 0.798642011783065600, 0.798611920465027710, 0.798581827150460000, 0.798551731839437170, 0.798521634532035510, +0.798491535228329830, 0.798461433928395300, 0.798431330632307090, 0.798401225340140690, 0.798371118051971140, 0.798341008767873840, 0.798310897487923500, 0.798280784212196390, +0.798250668940767350, 0.798220551673711640, 0.798190432411104540, 0.798160311153021440, 0.798130187899537490, 0.798100062650727530, 0.798069935406667930, 0.798039806167433530, +0.798009674933099600, 0.797979541703741520, 0.797949406479434580, 0.797919269260254030, 0.797889130046275490, 0.797858988837573450, 0.797828845634224510, 0.797798700436303410, +0.797768553243885630, 0.797738404057046440, 0.797708252875861220, 0.797678099700405370, 0.797647944530754270, 0.797617787366982740, 0.797587628209167400, 0.797557467057382840, +0.797527303911704790, 0.797497138772208290, 0.797466971638969070, 0.797436802512062390, 0.797406631391563200, 0.797376458277547880, 0.797346283170091490, 0.797316106069269390, +0.797285926975156990, 0.797255745887829770, 0.797225562807363230, 0.797195377733832760, 0.797165190667313280, 0.797135001607881420, 0.797104810555612000, 0.797074617510580510, +0.797044422472862560, 0.797014225442533530, 0.796984026419668920, 0.796953825404343790, 0.796923622396634500, 0.796893417396616230, 0.796863210404364470, 0.796833001419954610, +0.796802790443462250, 0.796772577474963000, 0.796742362514532230, 0.796712145562245010, 0.796681926618177940, 0.796651705682406060, 0.796621482755004990, 0.796591257836050120, +0.796561030925617250, 0.796530802023781680, 0.796500571130619120, 0.796470338246204610, 0.796440103370614770, 0.796409866503924760, 0.796379627646209950, 0.796349386797546190, +0.796319143958008850, 0.796288899127673750, 0.796258652306615860, 0.796228403494911860, 0.796198152692636830, 0.796167899899866470, 0.796137645116676280, 0.796107388343141990, +0.796077129579339290, 0.796046868825343700, 0.796016606081230480, 0.795986341347076130, 0.795956074622956140, 0.795925805908945790, 0.795895535205121020, 0.795865262511557310, +0.795834987828330620, 0.795804711155516320, 0.795774432493189690, 0.795744151841427660, 0.795713869200305180, 0.795683584569897960, 0.795653297950281830, 0.795623009341532410, +0.795592718743725500, 0.795562426156936290, 0.795532131581241590, 0.795501835016716450, 0.795471536463436820, 0.795441235921478310, 0.795410933390916620, 0.795380628871827700, +0.795350322364287270, 0.795320013868370370, 0.795289703384154060, 0.795259390911713380, 0.795229076451124280, 0.795198760002462590, 0.795168441565803910, 0.795138121141224060, +0.795107798728798440, 0.795077474328603870, 0.795047147940715630, 0.795016819565209420, 0.794986489202161310, 0.794956156851646890, 0.794925822513742110, 0.794895486188522790, +0.794865147876064100, 0.794834807576443200, 0.794804465289735250, 0.794774121016016080, 0.794743774755361730, 0.794713426507847820, 0.794683076273550390, 0.794652724052545280, +0.794622369844907860, 0.794592013650714970, 0.794561655470042090, 0.794531295302965070, 0.794500933149559830, 0.794470569009902320, 0.794440202884068250, 0.794409834772133230, +0.794379464674174090, 0.794349092590266310, 0.794318718520485860, 0.794288342464908540, 0.794257964423610410, 0.794227584396667300, 0.794197202384155250, 0.794166818386149780, +0.794136432402727690, 0.794106044433964490, 0.794075654479936220, 0.794045262540718830, 0.794014868616388260, 0.793984472707020550, 0.793954074812691650, 0.793923674933477040, +0.793893273069453790, 0.793862869220697260, 0.793832463387283640, 0.793802055569288840, 0.793771645766788940, 0.793741233979859960, 0.793710820208577190, 0.793680404453018020, +0.793649986713257930, 0.793619566989372750, 0.793589145281438650, 0.793558721589531670, 0.793528295913727980, 0.793497868254103510, 0.793467438610733770, 0.793437006983696010, +0.793406573373065750, 0.793376137778919130, 0.793345700201332100, 0.793315260640380830, 0.793284819096141350, 0.793254375568689270, 0.793223930058101880, 0.793193482564454650, +0.793163033087823650, 0.793132581628285150, 0.793102128185915080, 0.793071672760789830, 0.793041215352985330, 0.793010755962577200, 0.792980294589642810, 0.792949831234257660, +0.792919365896497920, 0.792888898576439740, 0.792858429274159390, 0.792827957989732930, 0.792797484723236520, 0.792767009474745880, 0.792736532244338270, 0.792706053032089410, +0.792675571838075350, 0.792645088662372380, 0.792614603505056640, 0.792584116366204410, 0.792553627245891400, 0.792523136144194780, 0.792492643061190380, 0.792462147996954360, +0.792431650951562980, 0.792401151925092420, 0.792370650917619050, 0.792340147929219030, 0.792309642959968090, 0.792279136009943600, 0.792248627079221170, 0.792218116167877300, +0.792187603275988140, 0.792157088403629860, 0.792126571550878960, 0.792096052717811580, 0.792065531904503570, 0.792035009111032310, 0.792004484337473390, 0.791973957583903320, +0.791943428850398480, 0.791912898137034920, 0.791882365443889120, 0.791851830771036940, 0.791821294118555730, 0.791790755486521220, 0.791760214875009800, 0.791729672284097850, +0.791699127713861860, 0.791668581164377880, 0.791638032635722520, 0.791607482127971610, 0.791576929641202410, 0.791546375175490980, 0.791515818730913480, 0.791485260307546510, +0.791454699905466460, 0.791424137524749600, 0.791393573165471880, 0.791363006827710660, 0.791332438511542110, 0.791301868217042290, 0.791271295944287910, 0.791240721693355240, +0.791210145464320780, 0.791179567257261020, 0.791148987072251670, 0.791118404909370470, 0.791087820768693330, 0.791057234650296540, 0.791026646554256700, 0.790996056480650190, +0.790965464429553620, 0.790934870401043270, 0.790904274395195280, 0.790873676412087170, 0.790843076451794860, 0.790812474514394850, 0.790781870599963630, 0.790751264708577710, +0.790720656840313670, 0.790690046995247480, 0.790659435173456710, 0.790628821375017330, 0.790598205600005820, 0.790567587848498900, 0.790536968120572950, 0.790506346416304680, +0.790475722735770380, 0.790445097079046420, 0.790414469446210080, 0.790383839837337730, 0.790353208252505660, 0.790322574691790570, 0.790291939155269190, 0.790261301643017780, +0.790230662155113170, 0.790200020691631420, 0.790169377252650130, 0.790138731838245460, 0.790108084448493790, 0.790077435083472060, 0.790046783743256650, 0.790016130427924400, +0.789985475137551240, 0.789954817872214890, 0.789924158631991500, 0.789893497416957690, 0.789862834227190170, 0.789832169062765540, 0.789801501923760530, 0.789770832810251730, +0.789740161722315430, 0.789709488660029100, 0.789678813623469140, 0.789648136612712160, 0.789617457627834750, 0.789586776668913750, 0.789556093736025750, 0.789525408829247040, +0.789494721948655330, 0.789464033094326890, 0.789433342266338320, 0.789402649464766350, 0.789371954689687790, 0.789341257941179380, 0.789310559219317700, 0.789279858524179150, +0.789249155855841540, 0.789218451214381060, 0.789187744599874400, 0.789157036012398390, 0.789126325452029760, 0.789095612918845330, 0.789064898412921820, 0.789034181934335610, +0.789003463483164410, 0.788972743059484620, 0.788942020663372930, 0.788911296294906310, 0.788880569954161340, 0.788849841641214860, 0.788819111356143350, 0.788788379099024660, +0.788757644869934940, 0.788726908668951120, 0.788696170496149930, 0.788665430351608520, 0.788634688235403390, 0.788603944147611590, 0.788573198088309280, 0.788542450057574620, +0.788511700055483880, 0.788480948082113780, 0.788450194137541360, 0.788419438221843460, 0.788388680335097010, 0.788357920477378740, 0.788327158648765240, 0.788296394849334340, +0.788265629079162420, 0.788234861338326540, 0.788204091626903410, 0.788173319944970090, 0.788142546292603500, 0.788111770669879920, 0.788080993076877510, 0.788050213513672550, +0.788019431980342080, 0.787988648476963040, 0.787957863003612480, 0.787927075560367120, 0.787896286147304230, 0.787865494764499960, 0.787834701412032490, 0.787803906089978300, +0.787773108798414330, 0.787742309537417640, 0.787711508307065040, 0.787680705107433820, 0.787649899938600240, 0.787619092800642460, 0.787588283693636980, 0.787557472617660740, +0.787526659572790780, 0.787495844559104260, 0.787465027576678130, 0.787434208625589330, 0.787403387705914560, 0.787372564817731880, 0.787341739961117670, 0.787310913136149200, +0.787280084342903420, 0.787249253581457480, 0.787218420851888310, 0.787187586154273200, 0.787156749488688520, 0.787125910855212440, 0.787095070253921670, 0.787064227684893260, +0.787033383148204260, 0.787002536643931830, 0.786971688172152910, 0.786940837732944320, 0.786909985326384230, 0.786879130952549130, 0.786848274611516190, 0.786817416303362550, +0.786786556028165500, 0.786755693786001850, 0.786724829576949110, 0.786693963401083770, 0.786663095258483990, 0.786632225149226480, 0.786601353073388410, 0.786570479031047040, +0.786539603022279320, 0.786508725047162740, 0.786477845105773680, 0.786446963198190630, 0.786416079324490200, 0.786385193484749450, 0.786354305679045850, 0.786323415907456360, +0.786292524170058460, 0.786261630466929210, 0.786230734798145310, 0.786199837163785050, 0.786168937563925360, 0.786138035998643180, 0.786107132468016000, 0.786076226972120980, +0.786045319511035400, 0.786014410084836410, 0.785983498693600960, 0.785952585337407310, 0.785921670016332170, 0.785890752730452840, 0.785859833479846670, 0.785828912264590950, +0.785797989084762840, 0.785767063940439270, 0.785736136831698520, 0.785705207758617520, 0.785674276721273430, 0.785643343719743760, 0.785612408754105650, 0.785581471824436490, +0.785550532930813670, 0.785519592073314010, 0.785488649252015890, 0.785457704466996140, 0.785426757718332260, 0.785395809006101290, 0.785364858330380830, 0.785333905691248390, +0.785302951088781010, 0.785271994523055740, 0.785241035994151070, 0.785210075502143830, 0.785179113047111300, 0.785148148629131070, 0.785117182248280530, 0.785086213904636950, +0.785055243598277270, 0.785024271329279990, 0.784993297097722140, 0.784962320903681010, 0.784931342747234080, 0.784900362628458750, 0.784869380547432600, 0.784838396504232930, +0.784807410498936760, 0.784776422531622610, 0.784745432602367400, 0.784714440711248520, 0.784683446858343680, 0.784652451043730160, 0.784621453267485450, 0.784590453529686700, +0.784559451830412200, 0.784528448169739210, 0.784497442547745010, 0.784466434964507300, 0.784435425420103360, 0.784404413914611020, 0.784373400448107550, 0.784342385020670000, +0.784311367632377080, 0.784280348283305730, 0.784249326973533560, 0.784218303703138050, 0.784187278472196710, 0.784156251280787250, 0.784125222128987160, 0.784094191016873500, +0.784063157944524860, 0.784032122912018290, 0.784001085919431520, 0.783970046966841920, 0.783939006054327200, 0.783907963181965100, 0.783876918349832420, 0.783845871558008000, +0.783814822806569000, 0.783783772095592800, 0.783752719425157230, 0.783721664795339890, 0.783690608206218390, 0.783659549657870440, 0.783628489150372980, 0.783597426683804830, +0.783566362258243050, 0.783535295873765470, 0.783504227530449680, 0.783473157228373300, 0.783442084967613920, 0.783411010748249480, 0.783379934570356820, 0.783348856434014970, +0.783317776339301000, 0.783286694286292500, 0.783255610275067290, 0.783224524305703110, 0.783193436378277540, 0.783162346492867870, 0.783131254649552910, 0.783100160848409830, +0.783069065089516240, 0.783037967372950060, 0.783006867698789020, 0.782975766067110720, 0.782944662477992990, 0.782913556931513100, 0.782882449427749870, 0.782851339966780580, +0.782820228548682830, 0.782789115173534560, 0.782757999841413480, 0.782726882552397420, 0.782695763306563650, 0.782664642103991000, 0.782633518944756630, 0.782602393828938590, +0.782571266756614480, 0.782540137727862350, 0.782509006742759690, 0.782477873801384670, 0.782446738903814330, 0.782415602050127720, 0.782384463240402010, 0.782353322474715230, +0.782322179753145220, 0.782291035075769690, 0.782259888442666470, 0.782228739853913610, 0.782197589309588380, 0.782166436809769720, 0.782135282354535000, 0.782104125943962060, +0.782072967578128720, 0.782041807257113030, 0.782010644980992820, 0.781979480749845470, 0.781948314563749910, 0.781917146422783650, 0.781885976327024390, 0.781854804276550300, +0.781823630271439200, 0.781792454311769030, 0.781761276397617610, 0.781730096529062560, 0.781698914706182800, 0.781667730929055730, 0.781636545197759270, 0.781605357512371590, +0.781574167872970400, 0.781542976279633870, 0.781511782732439820, 0.781480587231465850, 0.781449389776790900, 0.781418190368492470, 0.781386989006648710, 0.781355785691337350, +0.781324580422636530, 0.781293373200624200, 0.781262164025377960, 0.781230952896976860, 0.781199739815498400, 0.781168524781020500, 0.781137307793621450, 0.781106088853378950, +0.781074867960371400, 0.781043645114676500, 0.781012420316372080, 0.780981193565537080, 0.780949964862249100, 0.780918734206586310, 0.780887501598626520, 0.780856267038448130, +0.780825030526128950, 0.780793792061746710, 0.780762551645380550, 0.780731309277107990, 0.780700064957007170, 0.780668818685156250, 0.780637570461633180, 0.780606320286516220, +0.780575068159883420, 0.780543814081812390, 0.780512558052382510, 0.780481300071671160, 0.780450040139756500, 0.780418778256716790, 0.780387514422630100, 0.780356248637574690, +0.780324980901628610, 0.780293711214869570, 0.780262439577376730, 0.780231165989227820, 0.780199890450501090, 0.780168612961274490, 0.780137333521626400, 0.780106052131635090, +0.780074768791377940, 0.780043483500934550, 0.780012196260382320, 0.779980907069799720, 0.779949615929264820, 0.779918322838855870, 0.779887027798651040, 0.779855730808728720, +0.779824431869166500, 0.779793130980043770, 0.779761828141438240, 0.779730523353428070, 0.779699216616091650, 0.779667907929507240, 0.779636597293752900, 0.779605284708907220, +0.779573970175047700, 0.779542653692253840, 0.779511335260603230, 0.779480014880174380, 0.779448692551045540, 0.779417368273294890, 0.779386042047000900, 0.779354713872241200, +0.779323383749095270, 0.779292051677640820, 0.779260717657956350, 0.779229381690120020, 0.779198043774210310, 0.779166703910305400, 0.779135362098483770, 0.779104018338823150, +0.779072672631403120, 0.779041324976301300, 0.779009975373596290, 0.778978623823366250, 0.778947270325689670, 0.778915914880644930, 0.778884557488309760, 0.778853198148763860, +0.778821836862084950, 0.778790473628351410, 0.778759108447641730, 0.778727741320034310, 0.778696372245607390, 0.778665001224439710, 0.778633628256608870, 0.778602253342194570, +0.778570876481274540, 0.778539497673927490, 0.778508116920231590, 0.778476734220265420, 0.778445349574107380, 0.778413962981835960, 0.778382574443529100, 0.778351183959266390, +0.778319791529125670, 0.778288397153185430, 0.778257000831524270, 0.778225602564220690, 0.778194202351352950, 0.778162800192999220, 0.778131396089239090, 0.778099990040150400, +0.778068582045811750, 0.778037172106301630, 0.778005760221698540, 0.777974346392081180, 0.777942930617527840, 0.777911512898116660, 0.777880093233927260, 0.777848671625037680, +0.777817248071526300, 0.777785822573471840, 0.777754395130952900, 0.777722965744047980, 0.777691534412835010, 0.777660101137393700, 0.777628665917802220, 0.777597228754139060, +0.777565789646482930, 0.777534348594912220, 0.777502905599505630, 0.777471460660341900, 0.777440013777498830, 0.777408564951056260, 0.777377114181092340, 0.777345661467685690, +0.777314206810914790, 0.777282750210858460, 0.777251291667595210, 0.777219831181203750, 0.777188368751762120, 0.777156904379350140, 0.777125438064045880, 0.777093969805928040, +0.777062499605075230, 0.777031027461566270, 0.776999553375479660, 0.776968077346893660, 0.776936599375887990, 0.776905119462540820, 0.776873637606930960, 0.776842153809136900, +0.776810668069237490, 0.776779180387311310, 0.776747690763437300, 0.776716199197693520, 0.776684705690159680, 0.776653210240914160, 0.776621712850035560, 0.776590213517602820, +0.776558712243694440, 0.776527209028389230, 0.776495703871766030, 0.776464196773903100, 0.776432687734880170, 0.776401176754775490, 0.776369663833667900, 0.776338148971636110, +0.776306632168759060, 0.776275113425115350, 0.776243592740783250, 0.776212070115842810, 0.776180545550372190, 0.776149019044450220, 0.776117490598155600, 0.776085960211567390, +0.776054427884764200, 0.776022893617824950, 0.775991357410827920, 0.775959819263853050, 0.775928279176978600, 0.775896737150283510, 0.775865193183846500, 0.775833647277746620, +0.775802099432062580, 0.775770549646872640, 0.775738997922256980, 0.775707444258293850, 0.775675888655061980, 0.775644331112640530, 0.775612771631108200, 0.775581210210543940, +0.775549646851026670, 0.775518081552634690, 0.775486514315448020, 0.775454945139545160, 0.775423374025004940, 0.775391800971906190, 0.775360225980328050, 0.775328649050349260, +0.775297070182048850, 0.775265489375505210, 0.775233906630798500, 0.775202321948006980, 0.775170735327209590, 0.775139146768485390, 0.775107556271913300, 0.775075963837572380, +0.775044369465541010, 0.775012773155899230, 0.774981174908725530, 0.774949574724098870, 0.774917972602098270, 0.774886368542802790, 0.774854762546291380, 0.774823154612642950, +0.774791544741936230, 0.774759932934251160, 0.774728319189666230, 0.774696703508260480, 0.774665085890112960, 0.774633466335302830, 0.774601844843908930, 0.774570221416010510, +0.774538596051685960, 0.774506968751015430, 0.774475339514077430, 0.774443708340951220, 0.774412075231715620, 0.774380440186449910, 0.774348803205233030, 0.774317164288143680, +0.774285523435261910, 0.774253880646666340, 0.774222235922436110, 0.774190589262650270, 0.774158940667387880, 0.774127290136728210, 0.774095637670750290, 0.774063983269532740, +0.774032326933155820, 0.774000668661698030, 0.773969008455238640, 0.773937346313856580, 0.773905682237631340, 0.773874016226641760, 0.773842348280966650, 0.773810678400686180, +0.773779006585879060, 0.773747332836624450, 0.773715657153001390, 0.773683979535089270, 0.773652299982967250, 0.773620618496714370, 0.773588935076409470, 0.773557249722132690, +0.773525562433962870, 0.773493873211979150, 0.773462182056260720, 0.773430488966886820, 0.773398793943936740, 0.773367096987489620, 0.773335398097624300, 0.773303697274420940, +0.773271994517958360, 0.773240289828315830, 0.773208583205572510, 0.773176874649807780, 0.773145164161100910, 0.773113451739530500, 0.773081737385177050, 0.773050021098119270, +0.773018302878436430, 0.772986582726207790, 0.772954860641512750, 0.772923136624430570, 0.772891410675040410, 0.772859682793421320, 0.772827952979653570, 0.772796221233815860, +0.772764487555987590, 0.772732751946248130, 0.772701014404676870, 0.772669274931352960, 0.772637533526356000, 0.772605790189764500, 0.772574044921659150, 0.772542297722118690, +0.772510548591222480, 0.772478797529049910, 0.772447044535680360, 0.772415289611193100, 0.772383532755667180, 0.772351773969182980, 0.772320013251819200, 0.772288250603655580, +0.772256486024771150, 0.772224719515245630, 0.772192951075158280, 0.772161180704588610, 0.772129408403615320, 0.772097634172319140, 0.772065858010778870, 0.772034079919073910, +0.772002299897283860, 0.771970517945487880, 0.771938734063765790, 0.771906948252196190, 0.771875160510859800, 0.771843370839835560, 0.771811579239202850, 0.771779785709041160, +0.771747990249430080, 0.771716192860449010, 0.771684393542177440, 0.771652592294694300, 0.771620789118080300, 0.771588984012414270, 0.771557176977775820, 0.771525368014244430, +0.771493557121899600, 0.771461744300820820, 0.771429929551087800, 0.771398112872779260, 0.771366294265976140, 0.771334473730757140, 0.771302651267202100, 0.771270826875390390, +0.771239000555401510, 0.771207172307315280, 0.771175342131210420, 0.771143510027167860, 0.771111675995266530, 0.771079840035585940, 0.771048002148205790, 0.771016162333205690, +0.770984320590665130, 0.770952476920663710, 0.770920631323280590, 0.770888783798596490, 0.770856934346690450, 0.770825082967641960, 0.770793229661530850, 0.770761374428436620, +0.770729517268438970, 0.770697658181617510, 0.770665797168051390, 0.770633934227821340, 0.770602069361006390, 0.770570202567686380, 0.770538333847940790, 0.770506463201849350, +0.770474590629491750, 0.770442716130947170, 0.770410839706296310, 0.770378961355618340, 0.770347081078992970, 0.770315198876499910, 0.770283314748218870, 0.770251428694229580, +0.770219540714611630, 0.770187650809444290, 0.770155758978808500, 0.770123865222783200, 0.770091969541448210, 0.770060071934883350, 0.770028172403168340, 0.769996270946382790, +0.769964367564606180, 0.769932462257919110, 0.769900555026400870, 0.769868645870131260, 0.769836734789190010, 0.769804821783656950, 0.769772906853611880, 0.769740989999134430, +0.769709071220303960, 0.769677150517201540, 0.769645227889906080, 0.769613303338497530, 0.769581376863055830, 0.769549448463660690, 0.769517518140391930, 0.769485585893329270, +0.769453651722552090, 0.769421715628141430, 0.769389777610176460, 0.769357837668737000, 0.769325895803902980, 0.769293952015754230, 0.769262006304370580, 0.769230058669831410, +0.769198109112217640, 0.769166157631608560, 0.769134204228084100, 0.769102248901724070, 0.769070291652608540, 0.769038332480817210, 0.769006371386430020, 0.768974408369526460, +0.768942443430187250, 0.768910476568492100, 0.768878507784520710, 0.768846537078353040, 0.768814564450069020, 0.768782589899748570, 0.768750613427471090, 0.768718635033317720, +0.768686654717367630, 0.768654672479700980, 0.768622688320397710, 0.768590702239537630, 0.768558714237200790, 0.768526724313467250, 0.768494732468416260, 0.768462738702129000, +0.768430743014684950, 0.768398745406163930, 0.768366745876646220, 0.768334744426211520, 0.768302741054940010, 0.768270735762911610, 0.768238728550205810, 0.768206719416903770, +0.768174708363084880, 0.768142695388829290, 0.768110680494216940, 0.768078663679327870, 0.768046644944242240, 0.768014624289039330, 0.767982601713800390, 0.767950577218605050, +0.767918550803533220, 0.767886522468665070, 0.767854492214080530, 0.767822460039859770, 0.767790425946082930, 0.767758389932829300, 0.767726352000180470, 0.767694312148215600, +0.767662270377015070, 0.767630226686658810, 0.767598181077226990, 0.767566133548799660, 0.767534084101457070, 0.767502032735278620, 0.767469979450345790, 0.767437924246737960, +0.767405867124535180, 0.767373808083817940, 0.767341747124666070, 0.767309684247159840, 0.767277619451378850, 0.767245552737404360, 0.767213484105315980, 0.767181413555193980, +0.767149341087118300, 0.767117266701169420, 0.767085190397427290, 0.767053112175972160, 0.767021032036883770, 0.766988949980243250, 0.766956866006130440, 0.766924780114625390, +0.766892692305808480, 0.766860602579759850, 0.766828510936559680, 0.766796417376287560, 0.766764321899025100, 0.766732224504851790, 0.766700125193847890, 0.766668023966093680, +0.766635920821669540, 0.766603815760655500, 0.766571708783131860, 0.766539599889178410, 0.766507489078876560, 0.766475376352306000, 0.766443261709547020, 0.766411145150679870, +0.766379026675784840, 0.766346906284942180, 0.766314783978232380, 0.766282659755734950, 0.766250533617531480, 0.766218405563701690, 0.766186275594325950, 0.766154143709484430, +0.766122009909257500, 0.766089874193725650, 0.766057736562968490, 0.766025597017067630, 0.765993455556102650, 0.765961312180154060, 0.765929166889302240, 0.765897019683627560, +0.765864870563210290, 0.765832719528130810, 0.765800566578468960, 0.765768411714306320, 0.765736254935722620, 0.765704096242798230, 0.765671935635613640, 0.765639773114249240, +0.765607608678785300, 0.765575442329302520, 0.765543274065880410, 0.765511103888600770, 0.765478931797543340, 0.765446757792788590, 0.765414581874416910, 0.765382404042508790, +0.765350224297144610, 0.765318042638404420, 0.765285859066369590, 0.765253673581120180, 0.765221486182736670, 0.765189296871299220, 0.765157105646888660, 0.765124912509585360, +0.765092717459469720, 0.765060520496621770, 0.765028321621123110, 0.764996120833053570, 0.764963918132493760, 0.764931713519524160, 0.764899506994225260, 0.764867298556677570, +0.764835088206961110, 0.764802875945157500, 0.764770661771346670, 0.764738445685609220, 0.764706227688025650, 0.764674007778676450, 0.764641785957642320, 0.764609562225003650, +0.764577336580840480, 0.764545109025234650, 0.764512879558265970, 0.764480648180015150, 0.764448414890562700, 0.764416179689989210, 0.764383942578375160, 0.764351703555801400, +0.764319462622347730, 0.764287219778095990, 0.764254975023126230, 0.764222728357519030, 0.764190479781355010, 0.764158229294714770, 0.764125976897678920, 0.764093722590327600, +0.764061466372742530, 0.764029208245003870, 0.763996948207192110, 0.763964686259387960, 0.763932422401672140, 0.763900156634125250, 0.763867888956828000, 0.763835619369860440, +0.763803347873304390, 0.763771074467239910, 0.763738799151747920, 0.763706521926908800, 0.763674242792803380, 0.763641961749512380, 0.763609678797116500, 0.763577393935695790, +0.763545107165332190, 0.763512818486105860, 0.763480527898097390, 0.763448235401387730, 0.763415940996057360, 0.763383644682187220, 0.763351346459857360, 0.763319046329149710, +0.763286744290144540, 0.763254440342922340, 0.763222134487564150, 0.763189826724150590, 0.763157517052762470, 0.763125205473480510, 0.763092891986385080, 0.763060576591557900, +0.763028259289079360, 0.762995940079030040, 0.762963618961490900, 0.762931295936542850, 0.762898971004266400, 0.762866644164742040, 0.762834315418051690, 0.762801984764275410, +0.762769652203494240, 0.762737317735789010, 0.762704981361240320, 0.762672643079929320, 0.762640302891936630, 0.762607960797342720, 0.762575616796229430, 0.762543270888677020, +0.762510923074766530, 0.762478573354578690, 0.762446221728194430, 0.762413868195694570, 0.762381512757160040, 0.762349155412671230, 0.762316796162310070, 0.762284435006156950, +0.762252071944292680, 0.762219706976798190, 0.762187340103754550, 0.762154971325242570, 0.762122600641342520, 0.762090228052136550, 0.762057853557704950, 0.762025477158128850, +0.761993098853488980, 0.761960718643866390, 0.761928336529342000, 0.761895952509996640, 0.761863566585911030, 0.761831178757166990, 0.761798789023845010, 0.761766397386026030, +0.761734003843791090, 0.761701608397221120, 0.761669211046397180, 0.761636811791400080, 0.761604410632310550, 0.761572007569210400, 0.761539602602180340, 0.761507195731301320, +0.761474786956654160, 0.761442376278320120, 0.761409963696380140, 0.761377549210914720, 0.761345132822005890, 0.761312714529734260, 0.761280294334180980, 0.761247872235426780, +0.761215448233553030, 0.761183022328640550, 0.761150594520770610, 0.761118164810023590, 0.761085733196481650, 0.761053299680225500, 0.761020864261336080, 0.760988426939894440, +0.760955987715981720, 0.760923546589679090, 0.760891103561067040, 0.760858658630227720, 0.760826211797241750, 0.760793763062190380, 0.760761312425154430, 0.760728859886215300, +0.760696405445454030, 0.760663949102951760, 0.760631490858789010, 0.760599030713048130, 0.760566568665809630, 0.760534104717154770, 0.760501638867164600, 0.760469171115920270, +0.760436701463503170, 0.760404229909994230, 0.760371756455474060, 0.760339281100025130, 0.760306803843728060, 0.760274324686664000, 0.760241843628914000, 0.760209360670559550, +0.760176875811681580, 0.760144389052360920, 0.760111900392679730, 0.760079409832718930, 0.760046917372559580, 0.760014423012282950, 0.759981926751970180, 0.759949428591702670, +0.759916928531561560, 0.759884426571627470, 0.759851922711982990, 0.759819416952708710, 0.759786909293885810, 0.759754399735595780, 0.759721888277919640, 0.759689374920938800, +0.759656859664733950, 0.759624342509387480, 0.759591823454980220, 0.759559302501593430, 0.759526779649308370, 0.759494254898206210, 0.759461728248368550, 0.759429199699876540, +0.759396669252811020, 0.759364136907254350, 0.759331602663287360, 0.759299066520991330, 0.759266528480447620, 0.759233988541737630, 0.759201446704942610, 0.759168902970144050, +0.759136357337422680, 0.759103809806860870, 0.759071260378539670, 0.759038709052540230, 0.759006155828944040, 0.758973600707832490, 0.758941043689286830, 0.758908484773388130, +0.758875923960218750, 0.758843361249859520, 0.758810796642391930, 0.758778230137897250, 0.758745661736457080, 0.758713091438152800, 0.758680519243065680, 0.758647945151276760, +0.758615369162868540, 0.758582791277921940, 0.758550211496518360, 0.758517629818739160, 0.758485046244665950, 0.758452460774380110, 0.758419873407963130, 0.758387284145495830, +0.758354692987060930, 0.758322099932739360, 0.758289504982612490, 0.758256908136761830, 0.758224309395268970, 0.758191708758215290, 0.758159106225681720, 0.758126501797750980, +0.758093895474504120, 0.758061287256022400, 0.758028677142387530, 0.757996065133680900, 0.757963451229984100, 0.757930835431378740, 0.757898217737945630, 0.757865598149767620, +0.757832976666925620, 0.757800353289501130, 0.757767728017575750, 0.757735100851231080, 0.757702471790548620, 0.757669840835609510, 0.757637207986496250, 0.757604573243290110, +0.757571936606072470, 0.757539298074924930, 0.757506657649929190, 0.757474015331166760, 0.757441371118719340, 0.757408725012667980, 0.757376077013095280, 0.757343427120082400, +0.757310775333711050, 0.757278121654062720, 0.757245466081219010, 0.757212808615261630, 0.757180149256272310, 0.757147488004331960, 0.757114824859523640, 0.757082159821928060, +0.757049492891627150, 0.757016824068702520, 0.756984153353235770, 0.756951480745308710, 0.756918806245002410, 0.756886129852399670, 0.756853451567581550, 0.756820771390629750, +0.756788089321626110, 0.756755405360652110, 0.756722719507789470, 0.756690031763120220, 0.756657342126725970, 0.756624650598688330, 0.756591957179088780, 0.756559261868009590, +0.756526564665532360, 0.756493865571738590, 0.756461164586709870, 0.756428461710528580, 0.756395756943276100, 0.756363050285034030, 0.756330341735884540, 0.756297631295909210, +0.756264918965189770, 0.756232204743807810, 0.756199488631845610, 0.756166770629384640, 0.756134050736506860, 0.756101328953293520, 0.756068605279827220, 0.756035879716189460, +0.756003152262461840, 0.755970422918726180, 0.755937691685064750, 0.755904958561559040, 0.755872223548290980, 0.755839486645341950, 0.755806747852794670, 0.755774007170730400, +0.755741264599231190, 0.755708520138378530, 0.755675773788254790, 0.755643025548941690, 0.755610275420520620, 0.755577523403074270, 0.755544769496684140, 0.755512013701431950, +0.755479256017399510, 0.755446496444669210, 0.755413734983322760, 0.755380971633441870, 0.755348206395108250, 0.755315439268404390, 0.755282670253412000, 0.755249899350212920, +0.755217126558888730, 0.755184351879522150, 0.755151575312194570, 0.755118796856988130, 0.755086016513984330, 0.755053234283265870, 0.755020450164914260, 0.754987664159011200, +0.754954876265639400, 0.754922086484880350, 0.754889294816815990, 0.754856501261528260, 0.754823705819099410, 0.754790908489611390, 0.754758109273146130, 0.754725308169785230, +0.754692505179611390, 0.754659700302706240, 0.754626893539151910, 0.754594084889030010, 0.754561274352423260, 0.754528461929413250, 0.754495647620082140, 0.754462831424511540, +0.754430013342784140, 0.754397193374981790, 0.754364371521186180, 0.754331547781479930, 0.754298722155944730, 0.754265894644662760, 0.754233065247715830, 0.754200233965186430, +0.754167400797156500, 0.754134565743708070, 0.754101728804922880, 0.754068889980883730, 0.754036049271672340, 0.754003206677370750, 0.753970362198060910, 0.753937515833825510, +0.753904667584746280, 0.753871817450905370, 0.753838965432384600, 0.753806111529266690, 0.753773255741633560, 0.753740398069567270, 0.753707538513149760, 0.753674677072463610, +0.753641813747590760, 0.753608948538613150, 0.753576081445613500, 0.753543212468673510, 0.753510341607875560, 0.753477468863301470, 0.753444594235033960, 0.753411717723155070, +0.753378839327746740, 0.753345959048891120, 0.753313076886670820, 0.753280192841167870, 0.753247306912464440, 0.753214419100642460, 0.753181529405784760, 0.753148637827973140, +0.753115744367290010, 0.753082849023817280, 0.753049951797637560, 0.753017052688833120, 0.752984151697485670, 0.752951248823678140, 0.752918344067492470, 0.752885437429010930, +0.752852528908315550, 0.752819618505489060, 0.752786706220613610, 0.752753792053771350, 0.752720876005044340, 0.752687958074515500, 0.752655038262266650, 0.752622116568380290, +0.752589192992938250, 0.752556267536023670, 0.752523340197718270, 0.752490410978104650, 0.752457479877264630, 0.752424546895281150, 0.752391612032236370, 0.752358675288212320, +0.752325736663291830, 0.752292796157556950, 0.752259853771090060, 0.752226909503973310, 0.752193963356289630, 0.752161015328120960, 0.752128065419549800, 0.752095113630658170, +0.752062159961529030, 0.752029204412244520, 0.751996246982886920, 0.751963287673538480, 0.751930326484282150, 0.751897363415199970, 0.751864398466374320, 0.751831431637887460, +0.751798462929822220, 0.751765492342260980, 0.751732519875285550, 0.751699545528979220, 0.751666569303424010, 0.751633591198702320, 0.751600611214896410, 0.751567629352089320, +0.751534645610363090, 0.751501659989800120, 0.751468672490482880, 0.751435683112494200, 0.751402691855916350, 0.751369698720831810, 0.751336703707322640, 0.751303706815471980, +0.751270708045362110, 0.751237707397075520, 0.751204704870694240, 0.751171700466301660, 0.751138694183979600, 0.751105686023811000, 0.751072675985877790, 0.751039664070263240, +0.751006650277049490, 0.750973634606318940, 0.750940617058154510, 0.750907597632638480, 0.750874576329853440, 0.750841553149881770, 0.750808528092806520, 0.750775501158709830, +0.750742472347674550, 0.750709441659782590, 0.750676409095117460, 0.750643374653761300, 0.750610338335796710, 0.750577300141305860, 0.750544260070372230, 0.750511218123077860, +0.750478174299505470, 0.750445128599737330, 0.750412081023856700, 0.750379031571945740, 0.750345980244087050, 0.750312927040363680, 0.750279871960857990, 0.750246815005652600, +0.750213756174829880, 0.750180695468473100, 0.750147632886664530, 0.750114568429486870, 0.750081502097022510, 0.750048433889354720, 0.750015363806565860, 0.749982291848738440, +0.749949218015955150, 0.749916142308299060, 0.749883064725852640, 0.749849985268698500, 0.749816903936919240, 0.749783820730597910, 0.749750735649816980, 0.749717648694659070, +0.749684559865207210, 0.749651469161543900, 0.749618376583752080, 0.749585282131914000, 0.749552185806112830, 0.749519087606431380, 0.749485987532952150, 0.749452885585757620, +0.749419781764931290, 0.749386676070555310, 0.749353568502712840, 0.749320459061486030, 0.749287347746958490, 0.749254234559212470, 0.749221119498330920, 0.749188002564396220, +0.749154883757491840, 0.749121763077700180, 0.749088640525104270, 0.749055516099786270, 0.749022389801830000, 0.748989261631317630, 0.748956131588331740, 0.748922999672955950, +0.748889865885272510, 0.748856730225364590, 0.748823592693314440, 0.748790453289205570, 0.748757312013120680, 0.748724168865142480, 0.748691023845353460, 0.748657876953837230, +0.748624728190676380, 0.748591577555953620, 0.748558425049751670, 0.748525270672153910, 0.748492114423243040, 0.748458956303101890, 0.748425796311813050, 0.748392634449459910, +0.748359470716125300, 0.748326305111891690, 0.748293137636842580, 0.748259968291060670, 0.748226797074628800, 0.748193623987629670, 0.748160449030146670, 0.748127272202262720, +0.748094093504060530, 0.748060912935622710, 0.748027730497032970, 0.747994546188373910, 0.747961360009728570, 0.747928171961179440, 0.747894982042810240, 0.747861790254703450, +0.747828596596942340, 0.747795401069609290, 0.747762203672788120, 0.747729004406561430, 0.747695803271012040, 0.747662600266223330, 0.747629395392278130, 0.747596188649259360, +0.747562980037249970, 0.747529769556333320, 0.747496557206592360, 0.747463342988109900, 0.747430126900968880, 0.747396908945252790, 0.747363689121044340, 0.747330467428426680, +0.747297243867482750, 0.747264018438295820, 0.747230791140948920, 0.747197561975525000, 0.747164330942106880, 0.747131098040778370, 0.747097863271621980, 0.747064626634720620, +0.747031388130158010, 0.746998147758016980, 0.746964905518380570, 0.746931661411331490, 0.746898415436953680, 0.746865167595329730, 0.746831917886543020, 0.746798666310676150, +0.746765412867812840, 0.746732157558036120, 0.746698900381428830, 0.746665641338074120, 0.746632380428055580, 0.746599117651456030, 0.746565853008358760, 0.746532586498846570, +0.746499318123003190, 0.746466047880911530, 0.746432775772654770, 0.746399501798315710, 0.746366225957978190, 0.746332948251725140, 0.746299668679639370, 0.746266387241804830, +0.746233103938304220, 0.746199818769220920, 0.746166531734637760, 0.746133242834638550, 0.746099952069306240, 0.746066659438724080, 0.746033364942974900, 0.746000068582142630, +0.745966770356310200, 0.745933470265560890, 0.745900168309977630, 0.745866864489644120, 0.745833558804643530, 0.745800251255059000, 0.745766941840973590, 0.745733630562471110, +0.745700317419634610, 0.745667002412546910, 0.745633685541292060, 0.745600366805952990, 0.745567046206613070, 0.745533723743355140, 0.745500399416263230, 0.745467073225420270, +0.745433745170909770, 0.745400415252814420, 0.745367083471218490, 0.745333749826204710, 0.745300414317856760, 0.745267076946257270, 0.745233737711490480, 0.745200396613639350, +0.745167053652787240, 0.745133708829017190, 0.745100362142413150, 0.745067013593058160, 0.745033663181035370, 0.745000310906428710, 0.744966956769321340, 0.744933600769796530, +0.744900242907937440, 0.744866883183827990, 0.744833521597551450, 0.744800158149190980, 0.744766792838829850, 0.744733425666552100, 0.744700056632440770, 0.744666685736579240, +0.744633312979050670, 0.744599938359939210, 0.744566561879327790, 0.744533183537300140, 0.744499803333939060, 0.744466421269328830, 0.744433037343552590, 0.744399651556693740, +0.744366263908835420, 0.744332874400061790, 0.744299483030455900, 0.744266089800101120, 0.744232694709081380, 0.744199297757479840, 0.744165898945380100, 0.744132498272865320, +0.744099095740019530, 0.744065691346926020, 0.744032285093668370, 0.743998876980329630, 0.743965467006994060, 0.743932055173744720, 0.743898641480665310, 0.743865225927838990, +0.743831808515349910, 0.743798389243281340, 0.743764968111716660, 0.743731545120739470, 0.743698120270433580, 0.743664693560882380, 0.743631264992169250, 0.743597834564378110, +0.743564402277592570, 0.743530968131895900, 0.743497532127371570, 0.743464094264103540, 0.743430654542175500, 0.743397212961670720, 0.743363769522672580, 0.743330324225265350, +0.743296877069532290, 0.743263428055557120, 0.743229977183422990, 0.743196524453214270, 0.743163069865014240, 0.743129613418906490, 0.743096155114974510, 0.743062694953302350, +0.743029232933973380, 0.742995769057071210, 0.742962303322679760, 0.742928835730882640, 0.742895366281763340, 0.742861894975405450, 0.742828421811893010, 0.742794946791309640, +0.742761469913738810, 0.742727991179264020, 0.742694510587969540, 0.742661028139938840, 0.742627543835255530, 0.742594057674003110, 0.742560569656265710, 0.742527079782127060, +0.742493588051670650, 0.742460094464979850, 0.742426599022139260, 0.742393101723232140, 0.742359602568341990, 0.742326101557553080, 0.742292598690948880, 0.742259093968613340, +0.742225587390629600, 0.742192078957082280, 0.742158568668054740, 0.742125056523630810, 0.742091542523893870, 0.742058026668928390, 0.742024508958817890, 0.741990989393646050, +0.741957467973496490, 0.741923944698453570, 0.741890419568600800, 0.741856892584021880, 0.741823363744800510, 0.741789833051020970, 0.741756300502766970, 0.741722766100122110, +0.741689229843170090, 0.741655691731995300, 0.741622151766681230, 0.741588609947311460, 0.741555066273970610, 0.741521520746741940, 0.741487973365709600, 0.741454424130956860, +0.741420873042568430, 0.741387320100627910, 0.741353765305219010, 0.741320208656425450, 0.741286650154331590, 0.741253089799021160, 0.741219527590577960, 0.741185963529085720, +0.741152397614628810, 0.741118829847290940, 0.741085260227155930, 0.741051688754307490, 0.741018115428830230, 0.740984540250807620, 0.740950963220323280, 0.740917384337461900, +0.740883803602307100, 0.740850221014942690, 0.740816636575452490, 0.740783050283921000, 0.740749462140431910, 0.740715872145069070, 0.740682280297916380, 0.740648686599058250, +0.740615091048578260, 0.740581493646560670, 0.740547894393089100, 0.740514293288248030, 0.740480690332121270, 0.740447085524792660, 0.740413478866346120, 0.740379870356866250, +0.740346259996436550, 0.740312647785141050, 0.740279033723064140, 0.740245417810289740, 0.740211800046901680, 0.740178180432983890, 0.740144558968620970, 0.740110935653896520, +0.740077310488894910, 0.740043683473699640, 0.740010054608395420, 0.739976423893066060, 0.739942791327795720, 0.739909156912668120, 0.739875520647767850, 0.739841882533178730, +0.739808242568985030, 0.739774600755270350, 0.739740957092119510, 0.739707311579616220, 0.739673664217844750, 0.739640015006888700, 0.739606363946832990, 0.739572711037761340, +0.739539056279757690, 0.739505399672906630, 0.739471741217291980, 0.739438080912998120, 0.739404418760108760, 0.739370754758708500, 0.739337088908881500, 0.739303421210711800, +0.739269751664283100, 0.739236080269680460, 0.739202407026987580, 0.739168731936288630, 0.739135054997667630, 0.739101376211209190, 0.739067695576997470, 0.739034013095116290, +0.739000328765649920, 0.738966642588683050, 0.738932954564299530, 0.738899264692583270, 0.738865572973619210, 0.738831879407491290, 0.738798183994283540, 0.738764486734080130, +0.738730787626965760, 0.738697086673024470, 0.738663383872340320, 0.738629679224997560, 0.738595972731080800, 0.738562264390674180, 0.738528554203861880, 0.738494842170727810, +0.738461128291357130, 0.738427412565833440, 0.738393694994241350, 0.738359975576664660, 0.738326254313188320, 0.738292531203896370, 0.738258806248872750, 0.738225079448202480, +0.738191350801969510, 0.738157620310258110, 0.738123887973152430, 0.738090153790737280, 0.738056417763096720, 0.738022679890315110, 0.737988940172476520, 0.737955198609665960, +0.737921455201967280, 0.737887709949465060, 0.737853962852243250, 0.737820213910386770, 0.737786463123979770, 0.737752710493106640, 0.737718956017851420, 0.737685199698299150, +0.737651441534533880, 0.737617681526639650, 0.737583919674701600, 0.737550155978803690, 0.737516390439030390, 0.737482623055465860, 0.737448853828195030, 0.737415082757302050, +0.737381309842871420, 0.737347535084987180, 0.737313758483734370, 0.737279980039197150, 0.737246199751460110, 0.737212417620607190, 0.737178633646723420, 0.737144847829893310, +0.737111060170200890, 0.737077270667730540, 0.737043479322567420, 0.737009686134795450, 0.736975891104499350, 0.736942094231763270, 0.736908295516672250, 0.736874494959310460, +0.736840692559762030, 0.736806888318112250, 0.736773082234445260, 0.736739274308845560, 0.736705464541397400, 0.736671652932185840, 0.736637839481295130, 0.736604024188809880, +0.736570207054814240, 0.736536388079393370, 0.736502567262631520, 0.736468744604613420, 0.736434920105423000, 0.736401093765145510, 0.736367265583865450, 0.736333435561667080, +0.736299603698634900, 0.736265769994854050, 0.736231934450408690, 0.736198097065383190, 0.736164257839862830, 0.736130416773931760, 0.736096573867674690, 0.736062729121175870, +0.736028882534520480, 0.735995034107792990, 0.735961183841077780, 0.735927331734459460, 0.735893477788023050, 0.735859622001852950, 0.735825764376033750, 0.735791904910649830, +0.735758043605786560, 0.735724180461528100, 0.735690315477959160, 0.735656448655164220, 0.735622579993228440, 0.735588709492236090, 0.735554837152271770, 0.735520962973420730, +0.735487086955767140, 0.735453209099395930, 0.735419329404391360, 0.735385447870838700, 0.735351564498822440, 0.735317679288427390, 0.735283792239737720, 0.735249903352839020, +0.735216012627815330, 0.735182120064751810, 0.735148225663732610, 0.735114329424843120, 0.735080431348167920, 0.735046531433791510, 0.735012629681798480, 0.734978726092274210, +0.734944820665303090, 0.734910913400970030, 0.734877004299359320, 0.734843093360556420, 0.734809180584645730, 0.734775265971711830, 0.734741349521840110, 0.734707431235114950, +0.734673511111621160, 0.734639589151443450, 0.734605665354666980, 0.734571739721376350, 0.734537812251656370, 0.734503882945591550, 0.734469951803267350, 0.734436018824768280, +0.734402084010179150, 0.734368147359584440, 0.734334208873069770, 0.734300268550719500, 0.734266326392618570, 0.734232382398851470, 0.734198436569503790, 0.734164488904660130, +0.734130539404404760, 0.734096588068823390, 0.734062634898000610, 0.734028679892021140, 0.733994723050969800, 0.733960764374931850, 0.733926803863992010, 0.733892841518235190, +0.733858877337746020, 0.733824911322609850, 0.733790943472911410, 0.733756973788735720, 0.733723002270167180, 0.733689028917291490, 0.733655053730193240, 0.733621076708957260, +0.733587097853668380, 0.733553117164412070, 0.733519134641272940, 0.733485150284335700, 0.733451164093685830, 0.733417176069408040, 0.733383186211587380, 0.733349194520308330, +0.733315200995656720, 0.733281205637717040, 0.733247208446574430, 0.733213209422313380, 0.733179208565019720, 0.733145205874777940, 0.733111201351673290, 0.733077194995790160, +0.733043186807214480, 0.733009176786030730, 0.732975164932324060, 0.732941151246179310, 0.732907135727681850, 0.732873118376916600, 0.732839099193968170, 0.732805078178922380, +0.732771055331863820, 0.732737030652877760, 0.732703004142048700, 0.732668975799462440, 0.732634945625203820, 0.732600913619357750, 0.732566879782009180, 0.732532844113243600, +0.732498806613146040, 0.732464767281801320, 0.732430726119294500, 0.732396683125711160, 0.732362638301136020, 0.732328591645654340, 0.732294543159350830, 0.732260492842311430, +0.732226440694620620, 0.732192386716363770, 0.732158330907625610, 0.732124273268492050, 0.732090213799047710, 0.732056152499377500, 0.732022089369567250, 0.731988024409701900, +0.731953957619866370, 0.731919889000145600, 0.731885818550625510, 0.731851746271390710, 0.731817672162526690, 0.731783596224118150, 0.731749518456251020, 0.731715438859009910, +0.731681357432480310, 0.731647274176747020, 0.731613189091895770, 0.731579102178011700, 0.731545013435179750, 0.731510922863484960, 0.731476830463013260, 0.731442736233849370, +0.731408640176078430, 0.731374542289786160, 0.731340442575057480, 0.731306341031977780, 0.731272237660631870, 0.731238132461105690, 0.731204025433484170, 0.731169916577852570, +0.731135805894295940, 0.731101693382900100, 0.731067579043749970, 0.731033462876930830, 0.730999344882527820, 0.730965225060626780, 0.730931103411312620, 0.730896979934670730, +0.730862854630786040, 0.730828727499744590, 0.730794598541631310, 0.730760467756531140, 0.730726335144530230, 0.730692200705713390, 0.730658064440166120, 0.730623926347973350, +0.730589786429221010, 0.730555644683994250, 0.730521501112378460, 0.730487355714458550, 0.730453208490320470, 0.730419059440049480, 0.730384908563730840, 0.730350755861449600, +0.730316601333291790, 0.730282444979342360, 0.730248286799686900, 0.730214126794410450, 0.730179964963598940, 0.730145801307337640, 0.730111635825711700, 0.730077468518806390, +0.730043299386707760, 0.730009128429500830, 0.729974955647270880, 0.729940781040103740, 0.729906604608084650, 0.729872426351299010, 0.729838246269832180, 0.729804064363769880, +0.729769880633197480, 0.729735695078200350, 0.729701507698863660, 0.729667318495273550, 0.729633127467515070, 0.729598934615673930, 0.729564739939835060, 0.729530543440084610, +0.729496345116507740, 0.729462144969190150, 0.729427942998216890, 0.729393739203674010, 0.729359533585646760, 0.729325326144220410, 0.729291116879481120, 0.729256905791513920, +0.729222692880404530, 0.729188478146237990, 0.729154261589100680, 0.729120043209077640, 0.729085823006254570, 0.729051600980716640, 0.729017377132549880, 0.728983151461839900, +0.728948923968671840, 0.728914694653131300, 0.728880463515304220, 0.728846230555276090, 0.728811995773132270, 0.728777759168958150, 0.728743520742840100, 0.728709280494863050, +0.728675038425112610, 0.728640794533674920, 0.728606548820635140, 0.728572301286078970, 0.728538051930091910, 0.728503800752759890, 0.728469547754168390, 0.728435292934403010, +0.728401036293549130, 0.728366777831693010, 0.728332517548919810, 0.728298255445315460, 0.728263991520964990, 0.728229725775955020, 0.728195458210370680, 0.728161188824297700, +0.728126917617821330, 0.728092644591028180, 0.728058369744003290, 0.728024093076832470, 0.727989814589601100, 0.727955534282395570, 0.727921252155301120, 0.727886968208403370, +0.727852682441788360, 0.727818394855541670, 0.727784105449749030, 0.727749814224495920, 0.727715521179868490, 0.727681226315952220, 0.727646929632832840, 0.727612631130595930, +0.727578330809327770, 0.727544028669113720, 0.727509724710039610, 0.727475418932190920, 0.727441111335653920, 0.727406801920514210, 0.727372490686857390, 0.727338177634769160, +0.727303862764335670, 0.727269546075642650, 0.727235227568775460, 0.727200907243820360, 0.727166585100863070, 0.727132261139989410, 0.727097935361284640, 0.727063607764835470, +0.727029278350727170, 0.726994947119045780, 0.726960614069876660, 0.726926279203306320, 0.726891942519420240, 0.726857604018304350, 0.726823263700044130, 0.726788921564726080, +0.726754577612435670, 0.726720231843258850, 0.726685884257281200, 0.726651534854589000, 0.726617183635268060, 0.726582830599403980, 0.726548475747082920, 0.726514119078390700, +0.726479760593413350, 0.726445400292236140, 0.726411038174945790, 0.726376674241627770, 0.726342308492368140, 0.726307940927252480, 0.726273571546367180, 0.726239200349797940, +0.726204827337630810, 0.726170452509951270, 0.726136075866845810, 0.726101697408400250, 0.726067317134700410, 0.726032935045832000, 0.725998551141881610, 0.725964165422934740, +0.725929777889077200, 0.725895388540395480, 0.725860997376975290, 0.725826604398902680, 0.725792209606263120, 0.725757812999143440, 0.725723414577629230, 0.725689014341806440, +0.725654612291760870, 0.725620208427579020, 0.725585802749346700, 0.725551395257149840, 0.725516985951074170, 0.725482574831206370, 0.725448161897632170, 0.725413747150437490, +0.725379330589708160, 0.725344912215530880, 0.725310492027991250, 0.725276070027175420, 0.725241646213169110, 0.725207220586058910, 0.725172793145930750, 0.725138363892870230, +0.725103932826964170, 0.725069499948298280, 0.725035065256958600, 0.725000628753030950, 0.724966190436602040, 0.724931750307757690, 0.724897308366583950, 0.724862864613166620, +0.724828419047592430, 0.724793971669947190, 0.724759522480317050, 0.724725071478787840, 0.724690618665446150, 0.724656164040377910, 0.724621707603669400, 0.724587249355406190, +0.724552789295675240, 0.724518327424562240, 0.724483863742153120, 0.724449398248534710, 0.724414930943792830, 0.724380461828013520, 0.724345990901282820, 0.724311518163687440, +0.724277043615313310, 0.724242567256246470, 0.724208089086572970, 0.724173609106379510, 0.724139127315752030, 0.724104643714776790, 0.724070158303539600, 0.724035671082127300, +0.724001182050625800, 0.723966691209121490, 0.723932198557699970, 0.723897704096448380, 0.723863207825452550, 0.723828709744798290, 0.723794209854572550, 0.723759708154861350, +0.723725204645750850, 0.723690699327327100, 0.723656192199676810, 0.723621683262886120, 0.723587172517041190, 0.723552659962227950, 0.723518145598533560, 0.723483629426043610, +0.723449111444844690, 0.723414591655022640, 0.723380070056664380, 0.723345546649856060, 0.723311021434683840, 0.723276494411233760, 0.723241965579592640, 0.723207434939846740, +0.723172902492082210, 0.723138368236385110, 0.723103832172842460, 0.723069294301540100, 0.723034754622564280, 0.723000213136001820, 0.722965669841938880, 0.722931124740461840, +0.722896577831656620, 0.722862029115610150, 0.722827478592408700, 0.722792926262138650, 0.722758372124885810, 0.722723816180737440, 0.722689258429779490, 0.722654698872098430, +0.722620137507780310, 0.722585574336912170, 0.722551009359580050, 0.722516442575870440, 0.722481873985869380, 0.722447303589664020, 0.722412731387340300, 0.722378157378984480, +0.722343581564683590, 0.722309003944523800, 0.722274424518591470, 0.722239843286972660, 0.722205260249754620, 0.722170675407023510, 0.722136088758865590, 0.722101500305367240, +0.722066910046615380, 0.722032317982696290, 0.721997724113696340, 0.721963128439701900, 0.721928530960799790, 0.721893931677076490, 0.721859330588618290, 0.721824727695511430, +0.721790122997843180, 0.721755516495699470, 0.721720908189166680, 0.721686298078332070, 0.721651686163281570, 0.721617072444102000, 0.721582456920879300, 0.721547839593700830, +0.721513220462652760, 0.721478599527821560, 0.721443976789293620, 0.721409352247156080, 0.721374725901495100, 0.721340097752397380, 0.721305467799948970, 0.721270836044237360, +0.721236202485348590, 0.721201567123369250, 0.721166929958385830, 0.721132290990485260, 0.721097650219754030, 0.721063007646278290, 0.721028363270145410, 0.720993717091441550, +0.720959069110253540, 0.720924419326667510, 0.720889767740770630, 0.720855114352649370, 0.720820459162390460, 0.720785802170079930, 0.720751143375805260, 0.720716482779652720, +0.720681820381709030, 0.720647156182060430, 0.720612490180794210, 0.720577822377996840, 0.720543152773754910, 0.720508481368154820, 0.720473808161283700, 0.720439133153228160, +0.720404456344074800, 0.720369777733909870, 0.720335097322820970, 0.720300415110894270, 0.720265731098216120, 0.720231045284874140, 0.720196357670954360, 0.720161668256543820, +0.720126977041728680, 0.720092284026596530, 0.720057589211233640, 0.720022892595726720, 0.719988194180162240, 0.719953493964627710, 0.719918791949209380, 0.719884088133994070, +0.719849382519068160, 0.719814675104519130, 0.719779965890433580, 0.719745254876897890, 0.719710542063998870, 0.719675827451823790, 0.719641111040459140, 0.719606392829991390, +0.719571672820508050, 0.719536951012095470, 0.719502227404840490, 0.719467501998829580, 0.719432774794150240, 0.719398045790889060, 0.719363314989132750, 0.719328582388967800, +0.719293847990481680, 0.719259111793761010, 0.719224373798892480, 0.719189634005962810, 0.719154892415059250, 0.719120149026268530, 0.719085403839677450, 0.719050656855372510, +0.719015908073441290, 0.718981157493970180, 0.718946405117045990, 0.718911650942756110, 0.718876894971187010, 0.718842137202425730, 0.718807377636558780, 0.718772616273673610, +0.718737853113857070, 0.718703088157195750, 0.718668321403776460, 0.718633552853686690, 0.718598782507013030, 0.718564010363842430, 0.718529236424261470, 0.718494460688357760, +0.718459683156217890, 0.718424903827928780, 0.718390122703577050, 0.718355339783250500, 0.718320555067035400, 0.718285768555019020, 0.718250980247287950, 0.718216190143929680, +0.718181398245030910, 0.718146604550678360, 0.718111809060959620, 0.718077011775961390, 0.718042212695770620, 0.718007411820473900, 0.717972609150159040, 0.717937804684912750, +0.717902998424821750, 0.717868190369973070, 0.717833380520454200, 0.717798568876351960, 0.717763755437753170, 0.717728940204744760, 0.717694123177414320, 0.717659304355848460, +0.717624483740134430, 0.717589661330358840, 0.717554837126609500, 0.717520011128973010, 0.717485183337536190, 0.717450353752386640, 0.717415522373611280, 0.717380689201297050, +0.717345854235530880, 0.717311017476400360, 0.717276178923992310, 0.717241338578393780, 0.717206496439691590, 0.717171652507973540, 0.717136806783326250, 0.717101959265836970, +0.717067109955592530, 0.717032258852680630, 0.716997405957188080, 0.716962551269201940, 0.716927694788809130, 0.716892836516097480, 0.716857976451153680, 0.716823114594064670, +0.716788250944918160, 0.716753385503800970, 0.716718518270800350, 0.716683649246003140, 0.716648778429497150, 0.716613905821369190, 0.716579031421706420, 0.716544155230595780, +0.716509277248125080, 0.716474397474381130, 0.716439515909451210, 0.716404632553422350, 0.716369747406382040, 0.716334860468417430, 0.716299971739615680, 0.716265081220063600, +0.716230188909849240, 0.716195294809059300, 0.716160398917780940, 0.716125501236101750, 0.716090601764108880, 0.716055700501889490, 0.716020797449530620, 0.715985892607119980, +0.715950985974744600, 0.715916077552491760, 0.715881167340448490, 0.715846255338702610, 0.715811341547341050, 0.715776425966451080, 0.715741508596119740, 0.715706589436435060, +0.715671668487483760, 0.715636745749353430, 0.715601821222130900, 0.715566894905903970, 0.715531966800759920, 0.715497036906786010, 0.715462105224069170, 0.715427171752697320, +0.715392236492757630, 0.715357299444336900, 0.715322360607523300, 0.715287419982403860, 0.715252477569065850, 0.715217533367596300, 0.715182587378083160, 0.715147639600613670, +0.715112690035275000, 0.715077738682154410, 0.715042785541339710, 0.715007830612917950, 0.714972873896976720, 0.714937915393603070, 0.714902955102884820, 0.714867993024909220, +0.714833029159763540, 0.714798063507535050, 0.714763096068311790, 0.714728126842180790, 0.714693155829229100, 0.714658183029544760, 0.714623208443215030, 0.714588232070327400, +0.714553253910968690, 0.714518273965227270, 0.714483292233190070, 0.714448308714944800, 0.714413323410578280, 0.714378336320178890, 0.714343347443833540, 0.714308356781629960, +0.714273364333655070, 0.714238370099997130, 0.714203374080743190, 0.714168376275980840, 0.714133376685797350, 0.714098375310280640, 0.714063372149517980, 0.714028367203596640, +0.713993360472604640, 0.713958351956629160, 0.713923341655757990, 0.713888329570077970, 0.713853315699677580, 0.713818300044643860, 0.713783282605064410, 0.713748263381026370, +0.713713242372618020, 0.713678219579926610, 0.713643195003039520, 0.713608168642044240, 0.713573140497028800, 0.713538110568080590, 0.713503078855287080, 0.713468045358735540, +0.713433010078514120, 0.713397973014710310, 0.713362934167411480, 0.713327893536705000, 0.713292851122679150, 0.713257806925421180, 0.713222760945018350, 0.713187713181558940, +0.713152663635130190, 0.713117612305819830, 0.713082559193715100, 0.713047504298904400, 0.713012447621474750, 0.712977389161514100, 0.712942328919109690, 0.712907266894349690, +0.712872203087321580, 0.712837137498112950, 0.712802070126811180, 0.712767000973504540, 0.712731930038280390, 0.712696857321226340, 0.712661782822429980, 0.712626706541979350, +0.712591628479962050, 0.712556548636465340, 0.712521467011577480, 0.712486383605386080, 0.712451298417978610, 0.712416211449442670, 0.712381122699866530, 0.712346032169337450, +0.712310939857943470, 0.712275845765771630, 0.712240749892910640, 0.712205652239447760, 0.712170552805470700, 0.712135451591066950, 0.712100348596324870, 0.712065243821331960, +0.712030137266175920, 0.711995028930944240, 0.711959918815725290, 0.711924806920606560, 0.711889693245675530, 0.711854577791020460, 0.711819460556729070, 0.711784341542888940, +0.711749220749587690, 0.711714098176913670, 0.711678973824954490, 0.711643847693797850, 0.711608719783531240, 0.711573590094243150, 0.711538458626021050, 0.711503325378952890, +0.711468190353126030, 0.711433053548629070, 0.711397914965549380, 0.711362774603975010, 0.711327632463993330, 0.711292488545692820, 0.711257342849161200, 0.711222195374485830, +0.711187046121755320, 0.711151895091057250, 0.711116742282479340, 0.711081587696109410, 0.711046431332035710, 0.711011273190345960, 0.710976113271127970, 0.710940951574469460, +0.710905788100458900, 0.710870622849183790, 0.710835455820732150, 0.710800287015191600, 0.710765116432650500, 0.710729944073196780, 0.710694769936918160, 0.710659594023902330, +0.710624416334237790, 0.710589236868012120, 0.710554055625313490, 0.710518872606229370, 0.710483687810848360, 0.710448501239258180, 0.710413312891546410, 0.710378122767801660, +0.710342930868111510, 0.710307737192564130, 0.710272541741247100, 0.710237344514249140, 0.710202145511657610, 0.710166944733560790, 0.710131742180046380, 0.710096537851202750, +0.710061331747117940, 0.710026123867879780, 0.709990914213575960, 0.709955702784295210, 0.709920489580125100, 0.709885274601153800, 0.709850057847469020, 0.709814839319159450, +0.709779619016312810, 0.709744396939016700, 0.709709173087359920, 0.709673947461430310, 0.709638720061315790, 0.709603490887104060, 0.709568259938884060, 0.709533027216743380, +0.709497792720770070, 0.709462556451051940, 0.709427318407677810, 0.709392078590735390, 0.709356837000312710, 0.709321593636497720, 0.709286348499378990, 0.709251101589044360, +0.709215852905581980, 0.709180602449079770, 0.709145350219626320, 0.709110096217309360, 0.709074840442217020, 0.709039582894437800, 0.709004323574059630, 0.708969062481170640, +0.708933799615858780, 0.708898534978212650, 0.708863268568320160, 0.708828000386269590, 0.708792730432148630, 0.708757458706046120, 0.708722185208050080, 0.708686909938248450, +0.708651632896729280, 0.708616354083581370, 0.708581073498892660, 0.708545791142751070, 0.708510507015244870, 0.708475221116462550, 0.708439933446492360, 0.708404644005422250, +0.708369352793340120, 0.708334059810335040, 0.708298765056494810, 0.708263468531907250, 0.708228170236661400, 0.708192870170845200, 0.708157568334546790, 0.708122264727854110, +0.708086959350856080, 0.708051652203640640, 0.708016343286296150, 0.707981032598910430, 0.707945720141572420, 0.707910405914370040, 0.707875089917391790, 0.707839772150725470, +0.707804452614460010, 0.707769131308683350, 0.707733808233483970, 0.707698483388949700, 0.707663156775169560, 0.707627828392231480, 0.707592498240223630, 0.707557166319234820, +0.707521832629352980, 0.707486497170666690, 0.707451159943263800, 0.707415820947233210, 0.707380480182663200, 0.707345137649641910, 0.707309793348257500, 0.707274447278599010, +0.707239099440754250, 0.707203749834811820, 0.707168398460859770, 0.707133045318986910, 0.707097690409281500, 0.707062333731831800, 0.707026975286726090, 0.706991615074053170, +0.706956253093901200, 0.706920889346358330, 0.706885523831513480, 0.706850156549454820, 0.706814787500270820, 0.706779416684049530, 0.706744044100880100, 0.706708669750850450, +0.706673293634049070, 0.706637915750564230, 0.706602536100484960, 0.706567154683899300, 0.706531771500895630, 0.706496386551562440, 0.706460999835988420, 0.706425611354261960, +0.706390221106471540, 0.706354829092705190, 0.706319435313052080, 0.706284039767600460, 0.706248642456438260, 0.706213243379654960, 0.706177842537338400, 0.706142439929577260, +0.706107035556459820, 0.706071629418075000, 0.706036221514511180, 0.706000811845856720, 0.705965400412199910, 0.705929987213629980, 0.705894572250235110, 0.705859155522103770, +0.705823737029324220, 0.705788316771985610, 0.705752894750176220, 0.705717470963984630, 0.705682045413498990, 0.705646618098808580, 0.705611189020001640, 0.705575758177166780, +0.705540325570392150, 0.705504891199767000, 0.705469455065379720, 0.705434017167318350, 0.705398577505672360, 0.705363136080529920, 0.705327692891979500, 0.705292247940109700, +0.705256801225009560, 0.705221352746767340, 0.705185902505471750, 0.705150450501211170, 0.705114996734074740, 0.705079541204150840, 0.705044083911528060, 0.705008624856294790, +0.704973164038540160, 0.704937701458352770, 0.704902237115821010, 0.704866771011033450, 0.704831303144079160, 0.704795833515046710, 0.704760362124024380, 0.704724888971101300, +0.704689414056366200, 0.704653937379907450, 0.704618458941813520, 0.704582978742173790, 0.704547496781076640, 0.704512013058610660, 0.704476527574864450, 0.704441040329927160, +0.704405551323887380, 0.704370060556833600, 0.704334568028854410, 0.704299073740039080, 0.704263577690476090, 0.704228079880254150, 0.704192580309461750, 0.704157078978188130, +0.704121575886521800, 0.704086071034551340, 0.704050564422365910, 0.704015056050054100, 0.703979545917704620, 0.703944034025405950, 0.703908520373247580, 0.703873004961317880, +0.703837487789705670, 0.703801968858499440, 0.703766448167788550, 0.703730925717661600, 0.703695401508207310, 0.703659875539514260, 0.703624347811671710, 0.703588818324768380, +0.703553287078892970, 0.703517754074134080, 0.703482219310581080, 0.703446682788322560, 0.703411144507447240, 0.703375604468043810, 0.703340062670201660, 0.703304519114009490, +0.703268973799555550, 0.703233426726929570, 0.703197877896220010, 0.703162327307515710, 0.703126774960905250, 0.703091220856478240, 0.703055664994323150, 0.703020107374528910, +0.702984547997184130, 0.702948986862378280, 0.702913423970199850, 0.702877859320737990, 0.702842292914081180, 0.702806724750318800, 0.702771154829539670, 0.702735583151832710, +0.702700009717286520, 0.702664434525990590, 0.702628857578033510, 0.702593278873503980, 0.702557698412491600, 0.702522116195084980, 0.702486532221373030, 0.702450946491444460, +0.702415359005388870, 0.702379769763294860, 0.702344178765251350, 0.702308586011347160, 0.702272991501671770, 0.702237395236314010, 0.702201797215362690, 0.702166197438906510, +0.702130595907035190, 0.702094992619837430, 0.702059387577402160, 0.702023780779818090, 0.701988172227174910, 0.701952561919561240, 0.701916949857065870, 0.701881336039778540, +0.701845720467787700, 0.701810103141182750, 0.701774484060052050, 0.701738863224485640, 0.701703240634571900, 0.701667616290400090, 0.701631990192059020, 0.701596362339638180, +0.701560732733226500, 0.701525101372913020, 0.701489468258786440, 0.701453833390936480, 0.701418196769451940, 0.701382558394421870, 0.701346918265935200, 0.701311276384081420, +0.701275632748949550, 0.701239987360628200, 0.701204340219207300, 0.701168691324775440, 0.701133040677421990, 0.701097388277235560, 0.701061734124305950, 0.701026078218721980, +0.700990420560572810, 0.700954761149947370, 0.700919099986935250, 0.700883437071625370, 0.700847772404107010, 0.700812105984468750, 0.700776437812800630, 0.700740767889191480, +0.700705096213730340, 0.700669422786506120, 0.700633747607608660, 0.700598070677126870, 0.700562391995149910, 0.700526711561766600, 0.700491029377066870, 0.700455345441139520, +0.700419659754073610, 0.700383972315958720, 0.700348283126884020, 0.700312592186938530, 0.700276899496211300, 0.700241205054792150, 0.700205508862769890, 0.700169810920233890, +0.700134111227273090, 0.700098409783977300, 0.700062706590435460, 0.700027001646736920, 0.699991294952970520, 0.699955586509226290, 0.699919876315592940, 0.699884164372160060, +0.699848450679016350, 0.699812735236251760, 0.699777018043955420, 0.699741299102216270, 0.699705578411124130, 0.699669855970768030, 0.699634131781237350, 0.699598405842621010, +0.699562678155008940, 0.699526948718490190, 0.699491217533154020, 0.699455484599089570, 0.699419749916386670, 0.699384013485134350, 0.699348275305422100, 0.699312535377338840, +0.699276793700974510, 0.699241050276418140, 0.699205305103759220, 0.699169558183086790, 0.699133809514490670, 0.699098059098060110, 0.699062306933884050, 0.699026553022052520, +0.698990797362654570, 0.698955039955779680, 0.698919280801516880, 0.698883519899956230, 0.698847757251186640, 0.698811992855297830, 0.698776226712378600, 0.698740458822519230, +0.698704689185808640, 0.698668917802336310, 0.698633144672191400, 0.698597369795463940, 0.698561593172242980, 0.698525814802618110, 0.698490034686678470, 0.698454252824513900, +0.698418469216213870, 0.698382683861867530, 0.698346896761564250, 0.698311107915393970, 0.698275317323445940, 0.698239524985809320, 0.698203730902574150, 0.698167935073829680, +0.698132137499665410, 0.698096338180170470, 0.698060537115435030, 0.698024734305548230, 0.697988929750599560, 0.697953123450678280, 0.697917315405874430, 0.697881505616277380, +0.697845694081976610, 0.697809880803061170, 0.697774065779621420, 0.697738249011746530, 0.697702430499525960, 0.697666610243048990, 0.697630788242405760, 0.697594964497685650, +0.697559139008977810, 0.697523311776372390, 0.697487482799958760, 0.697451652079826400, 0.697415819616064580, 0.697379985408763560, 0.697344149458012490, 0.697308311763901180, +0.697272472326518680, 0.697236631145955240, 0.697200788222300360, 0.697164943555643510, 0.697129097146073850, 0.697093248993681860, 0.697057399098556800, 0.697021547460788150, +0.696985694080465400, 0.696949838957678590, 0.696913982092517310, 0.696878123485070720, 0.696842263135429190, 0.696806401043681970, 0.696770537209918660, 0.696734671634228750, +0.696698804316702500, 0.696662935257429280, 0.696627064456498690, 0.696591191913999990, 0.696555317630023760, 0.696519441604659280, 0.696483563837996140, 0.696447684330123720, +0.696411803081132490, 0.696375920091111710, 0.696340035360151100, 0.696304148888340140, 0.696268260675769080, 0.696232370722527420, 0.696196479028704520, 0.696160585594390650, +0.696124690419675400, 0.696088793504648470, 0.696052894849399140, 0.696016994454017880, 0.695981092318594170, 0.695945188443217730, 0.695909282827978040, 0.695873375472965460, +0.695837466378269380, 0.695801555543979710, 0.695765642970185730, 0.695729728656978020, 0.695693812604445960, 0.695657894812679480, 0.695621975281767830, 0.695586054011801620, +0.695550131002870220, 0.695514206255063550, 0.695478279768470990, 0.695442351543183120, 0.695406421579289220, 0.695370489876879110, 0.695334556436043030, 0.695298621256870590, +0.695262684339451600, 0.695226745683875550, 0.695190805290232920, 0.695154863158613300, 0.695118919289106520, 0.695082973681802160, 0.695047026336790720, 0.695011077254161670, +0.694975126434004940, 0.694939173876410020, 0.694903219581467500, 0.694867263549266980, 0.694831305779898270, 0.694795346273450960, 0.694759385030015660, 0.694723422049681850, +0.694687457332539230, 0.694651490878678170, 0.694615522688188490, 0.694579552761159900, 0.694543581097682220, 0.694507607697845810, 0.694471632561740490, 0.694435655689455980, +0.694399677081082080, 0.694363696736709280, 0.694327714656427290, 0.694291730840325920, 0.694255745288494990, 0.694219758001024980, 0.694183768978005490, 0.694147778219526670, +0.694111785725678110, 0.694075791496550410, 0.694039795532233160, 0.694003797832816180, 0.693967798398389960, 0.693931797229044300, 0.693895794324869030, 0.693859789685954080, +0.693823783312389920, 0.693787775204266380, 0.693751765361673380, 0.693715753784700520, 0.693679740473438720, 0.693643725427977480, 0.693607708648407040, 0.693571690134816900, +0.693535669887297870, 0.693499647905939760, 0.693463624190832410, 0.693427598742065830, 0.693391571559730410, 0.693355542643916190, 0.693319511994712980, 0.693283479612210820, +0.693247445496500190, 0.693211409647670920, 0.693175372065812920, 0.693139332751016690, 0.693103291703372150, 0.693067248922969450, 0.693031204409898290, 0.692995158164249390, +0.692959110186112670, 0.692923060475578060, 0.692887009032735590, 0.692850955857675870, 0.692814900950488810, 0.692778844311264350, 0.692742785940092640, 0.692706725837064160, +0.692670664002268950, 0.692634600435797050, 0.692598535137738390, 0.692562468108183560, 0.692526399347222710, 0.692490328854945440, 0.692454256631442670, 0.692418182676804330, +0.692382106991120460, 0.692346029574481100, 0.692309950426976960, 0.692273869548697850, 0.692237786939734150, 0.692201702600175660, 0.692165616530113210, 0.692129528729636730, +0.692093439198836370, 0.692057347937802160, 0.692021254946624920, 0.691985160225394470, 0.691949063774201180, 0.691912965593134870, 0.691876865682286570, 0.691840764041745990, +0.691804660671603180, 0.691768555571949050, 0.691732448742873540, 0.691696340184467020, 0.691660229896819190, 0.691624117880021090, 0.691588004134162770, 0.691551888659334480, +0.691515771455626040, 0.691479652523128600, 0.691443531861931970, 0.691407409472126530, 0.691371285353802210, 0.691335159507050050, 0.691299031931959960, 0.691262902628622220, +0.691226771597126980, 0.691190638837565150, 0.691154504350026680, 0.691118368134601700, 0.691082230191381040, 0.691046090520454850, 0.691009949121913380, 0.690973805995846790, +0.690937661142345890, 0.690901514561500950, 0.690865366253402220, 0.690829216218139750, 0.690793064455804460, 0.690756910966486610, 0.690720755750276470, 0.690684598807264070, +0.690648440137540560, 0.690612279741195990, 0.690576117618320610, 0.690539953769004680, 0.690503788193339130, 0.690467620891414220, 0.690431451863320110, 0.690395281109147160, +0.690359108628986310, 0.690322934422927580, 0.690286758491061360, 0.690250580833478460, 0.690214401450269130, 0.690178220341523870, 0.690142037507332610, 0.690105852947786590, +0.690069666662976090, 0.690033478652991250, 0.689997288917922450, 0.689961097457860830, 0.689924904272896430, 0.689888709363119630, 0.689852512728620910, 0.689816314369491200, +0.689780114285820640, 0.689743912477699840, 0.689707708945218930, 0.689671503688469080, 0.689635296707540420, 0.689599088002523230, 0.689562877573508650, 0.689526665420586830, +0.689490451543848470, 0.689454235943383510, 0.689418018619283310, 0.689381799571638140, 0.689345578800538480, 0.689309356306074480, 0.689273132088337400, 0.689236906147417510, +0.689200678483405380, 0.689164449096391300, 0.689128217986466280, 0.689091985153720720, 0.689055750598245310, 0.689019514320130200, 0.688983276319466540, 0.688947036596344710, +0.688910795150854960, 0.688874551983088560, 0.688838307093135760, 0.688802060481087270, 0.688765812147033250, 0.688729562091065060, 0.688693310313272860, 0.688657056813747560, +0.688620801592579100, 0.688584544649859080, 0.688548285985677630, 0.688512025600125590, 0.688475763493292980, 0.688439499665271400, 0.688403234116151120, 0.688366966846022610, +0.688330697854976470, 0.688294427143103850, 0.688258154710495230, 0.688221880557241210, 0.688185604683432150, 0.688149327089159320, 0.688113047774513320, 0.688076766739584290, +0.688040483984463710, 0.688004199509241850, 0.687967913314009530, 0.687931625398857110, 0.687895335763875960, 0.687859044409156460, 0.687822751334789320, 0.687786456540865010, +0.687750160027474910, 0.687713861794709390, 0.687677561842659160, 0.687641260171414800, 0.687604956781067480, 0.687568651671707890, 0.687532344843426620, 0.687496036296314170, +0.687459726030461900, 0.687423414045960410, 0.687387100342900070, 0.687350784921372250, 0.687314467781467430, 0.687278148923276540, 0.687241828346889850, 0.687205506052398940, +0.687169182039894300, 0.687132856309466740, 0.687096528861206650, 0.687060199695205600, 0.687023868811553970, 0.686987536210342810, 0.686951201891662370, 0.686914865855604240, +0.686878528102259020, 0.686842188631717420, 0.686805847444070140, 0.686769504539408440, 0.686733159917823020, 0.686696813579404370, 0.686660465524244090, 0.686624115752432540, +0.686587764264060760, 0.686551411059219240, 0.686515056137999460, 0.686478699500492010, 0.686442341146787930, 0.686405981076977590, 0.686369619291152700, 0.686333255789403740, +0.686296890571821640, 0.686260523638496880, 0.686224154989521270, 0.686187784624985200, 0.686151412544979690, 0.686115038749595340, 0.686078663238923750, 0.686042286013055390, +0.686005907072081420, 0.685969526416092320, 0.685933144045179690, 0.685896759959434330, 0.685860374158946630, 0.685823986643808280, 0.685787597414110110, 0.685751206469942810, +0.685714813811397320, 0.685678419438565000, 0.685642023351536570, 0.685605625550403270, 0.685569226035255500, 0.685532824806184940, 0.685496421863282300, 0.685460017206638740, +0.685423610836344730, 0.685387202752491990, 0.685350792955171210, 0.685314381444473540, 0.685277968220489590, 0.685241553283310930, 0.685205136633028510, 0.685168718269732910, +0.685132298193515840, 0.685095876404468010, 0.685059452902680440, 0.685023027688243970, 0.684986600761250290, 0.684950172121789990, 0.684913741769954340, 0.684877309705834050, +0.684840875929520700, 0.684804440441105220, 0.684768003240678660, 0.684731564328331820, 0.684695123704156310, 0.684658681368242930, 0.684622237320682950, 0.684585791561566960, +0.684549344090986890, 0.684512894909033550, 0.684476444015797550, 0.684439991411370690, 0.684403537095843890, 0.684367081069308330, 0.684330623331854680, 0.684294163883574890, +0.684257702724559550, 0.684221239854900020, 0.684184775274687020, 0.684148308984012470, 0.684111840982967180, 0.684075371271642200, 0.684038899850128560, 0.684002426718517850, +0.683965951876901230, 0.683929475325369630, 0.683892997064014070, 0.683856517092926270, 0.683820035412197270, 0.683783552021917760, 0.683747066922179790, 0.683710580113074170, +0.683674091594691950, 0.683637601367124370, 0.683601109430462930, 0.683564615784798880, 0.683528120430223150, 0.683491623366826890, 0.683455124594701810, 0.683418624113939050, +0.683382121924629660, 0.683345618026864550, 0.683309112420735780, 0.683272605106334250, 0.683236096083751240, 0.683199585353077680, 0.683163072914405370, 0.683126558767825460, +0.683090042913429120, 0.683053525351307370, 0.683017006081552140, 0.682980485104254350, 0.682943962419505060, 0.682907438027396290, 0.682870911928018740, 0.682834384121464020, +0.682797854607822940, 0.682761323387187650, 0.682724790459648960, 0.682688255825298350, 0.682651719484226760, 0.682615181436526220, 0.682578641682287660, 0.682542100221602550, +0.682505557054561840, 0.682469012181257550, 0.682432465601780840, 0.682395917316222840, 0.682359367324674730, 0.682322815627228520, 0.682286262223975370, 0.682249707115006210, +0.682213150300412960, 0.682176591780287000, 0.682140031554719580, 0.682103469623801640, 0.682066905987625430, 0.682030340646281870, 0.681993773599862570, 0.681957204848458450, +0.681920634392161660, 0.681884062231063240, 0.681847488365254770, 0.681810912794827080, 0.681774335519872540, 0.681737756540482190, 0.681701175856747390, 0.681664593468759410, +0.681628009376610170, 0.681591423580390930, 0.681554836080192850, 0.681518246876107960, 0.681481655968227520, 0.681445063356642900, 0.681408469041445250, 0.681371873022726840, +0.681335275300578690, 0.681298675875092410, 0.681262074746359030, 0.681225471914470800, 0.681188867379519000, 0.681152261141594880, 0.681115653200789820, 0.681079043557196060, +0.681042432210904660, 0.681005819162007090, 0.680969204410594720, 0.680932587956759590, 0.680895969800593080, 0.680859349942186550, 0.680822728381631380, 0.680786105119019710, +0.680749480154442810, 0.680712853487991820, 0.680676225119759120, 0.680639595049835730, 0.680602963278313490, 0.680566329805283420, 0.680529694630837900, 0.680493057755068080, +0.680456419178065650, 0.680419778899921890, 0.680383136920728940, 0.680346493240578170, 0.680309847859561170, 0.680273200777769200, 0.680236551995294650, 0.680199901512228640, +0.680163249328662900, 0.680126595444688680, 0.680089939860398340, 0.680053282575883160, 0.680016623591234380, 0.679979962906544390, 0.679943300521904550, 0.679906636437406340, +0.679869970653141360, 0.679833303169201650, 0.679796633985678800, 0.679759963102664290, 0.679723290520249600, 0.679686616238526890, 0.679649940257587740, 0.679613262577523750, +0.679576583198426290, 0.679539902120387620, 0.679503219343499220, 0.679466534867852800, 0.679429848693539730, 0.679393160820652380, 0.679356471249282000, 0.679319779979520200, +0.679283087011459340, 0.679246392345190690, 0.679209695980806050, 0.679172997918396910, 0.679136298158055540, 0.679099596699873410, 0.679062893543942340, 0.679026188690353690, +0.678989482139199960, 0.678952773890572400, 0.678916063944562940, 0.678879352301263060, 0.678842638960765130, 0.678805923923160530, 0.678769207188541170, 0.678732488756998430, +0.678695768628624800, 0.678659046803511750, 0.678622323281750760, 0.678585598063434330, 0.678548871148653810, 0.678512142537501250, 0.678475412230067910, 0.678438680226446380, +0.678401946526728140, 0.678365211131005120, 0.678328474039368690, 0.678291735251911330, 0.678254994768724640, 0.678218252589900540, 0.678181508715530510, 0.678144763145706930, +0.678108015880521500, 0.678071266920066030, 0.678034516264432120, 0.677997763913712140, 0.677961009867997790, 0.677924254127381000, 0.677887496691953140, 0.677850737561806920, +0.677813976737033810, 0.677777214217725410, 0.677740450003974430, 0.677703684095872230, 0.677666916493510850, 0.677630147196981780, 0.677593376206377720, 0.677556603521790260, +0.677519829143311210, 0.677483053071032290, 0.677446275305046090, 0.677409495845444190, 0.677372714692318630, 0.677335931845760800, 0.677299147305863600, 0.677262361072718530, +0.677225573146417400, 0.677188783527052250, 0.677151992214715340, 0.677115199209498360, 0.677078404511493150, 0.677041608120792280, 0.677004810037487360, 0.676968010261670420, +0.676931208793433160, 0.676894405632868070, 0.676857600780067070, 0.676820794235122090, 0.676783985998124840, 0.676747176069167790, 0.676710364448342980, 0.676673551135742120, +0.676636736131457140, 0.676599919435580620, 0.676563101048204270, 0.676526280969420140, 0.676489459199320020, 0.676452635737996630, 0.676415810585541680, 0.676378983742046750, +0.676342155207604770, 0.676305324982307330, 0.676268493066246700, 0.676231659459514470, 0.676194824162203330, 0.676157987174405230, 0.676121148496212080, 0.676084308127715810, +0.676047466069009010, 0.676010622320183610, 0.675973776881331640, 0.675936929752544930, 0.675900080933916180, 0.675863230425537200, 0.675826378227500250, 0.675789524339896920, +0.675752668762820140, 0.675715811496361730, 0.675678952540613830, 0.675642091895668040, 0.675605229561617500, 0.675568365538553820, 0.675531499826569020, 0.675494632425755690, +0.675457763336205770, 0.675420892558011410, 0.675384020091264640, 0.675347145936058050, 0.675310270092483570, 0.675273392560633460, 0.675236513340599530, 0.675199632432474610, +0.675162749836350720, 0.675125865552319790, 0.675088979580473980, 0.675052091920905980, 0.675015202573707840, 0.674978311538971700, 0.674941418816789370, 0.674904524407253790, +0.674867628310456990, 0.674830730526490790, 0.674793831055448100, 0.674756929897420750, 0.674720027052501110, 0.674683122520781110, 0.674646216302353660, 0.674609308397310590, +0.674572398805744270, 0.674535487527746720, 0.674498574563410670, 0.674461659912828140, 0.674424743576091500, 0.674387825553292800, 0.674350905844524730, 0.674313984449879440, +0.674277061369449200, 0.674240136603325930, 0.674203210151602670, 0.674166282014371450, 0.674129352191724100, 0.674092420683753750, 0.674055487490552330, 0.674018552612212220, +0.673981616048825340, 0.673944677800484840, 0.673907737867282640, 0.673870796249311010, 0.673833852946662090, 0.673796907959428930, 0.673759961287703430, 0.673723012931577990, +0.673686062891144740, 0.673649111166496730, 0.673612157757725870, 0.673575202664924650, 0.673538245888185010, 0.673501287427600180, 0.673464327283262110, 0.673427365455262830, +0.673390401943695590, 0.673353436748652220, 0.673316469870225310, 0.673279501308506890, 0.673242531063590110, 0.673205559135566900, 0.673168585524529850, 0.673131610230571000, +0.673094633253783380, 0.673057654594259260, 0.673020674252091000, 0.672983692227370760, 0.672946708520191560, 0.672909723130645570, 0.672872736058825360, 0.672835747304822870, +0.672798756868731470, 0.672761764750643090, 0.672724770950650310, 0.672687775468845280, 0.672650778305321160, 0.672613779460170090, 0.672576778933484220, 0.672539776725356700, +0.672502772835879780, 0.672465767265145950, 0.672428760013247250, 0.672391751080277160, 0.672354740466327590, 0.672317728171491160, 0.672280714195860110, 0.672243698539527590, +0.672206681202585870, 0.672169662185127410, 0.672132641487244500, 0.672095619109030260, 0.672058595050576970, 0.672021569311977320, 0.671984541893323240, 0.671947512794708210, +0.671910482016224500, 0.671873449557964130, 0.671836415420020480, 0.671799379602485810, 0.671762342105452710, 0.671725302929013330, 0.671688262073261160, 0.671651219538288210, +0.671614175324187320, 0.671577129431050630, 0.671540081858971400, 0.671503032608042010, 0.671465981678355030, 0.671428929070002730, 0.671391874783078490, 0.671354818817674560, +0.671317761173883530, 0.671280701851797890, 0.671243640851510670, 0.671206578173114470, 0.671169513816701420, 0.671132447782364920, 0.671095380070197310, 0.671058310680291310, +0.671021239612739070, 0.670984166867634180, 0.670947092445068890, 0.670910016345135810, 0.670872938567927400, 0.670835859113536940, 0.670798777982056780, 0.670761695173579750, +0.670724610688198110, 0.670687524526005330, 0.670650436687093680, 0.670613347171555960, 0.670576255979484560, 0.670539163110972840, 0.670502068566113160, 0.670464972344998470, +0.670427874447720900, 0.670390774874373930, 0.670353673625050050, 0.670316570699841740, 0.670279466098842260, 0.670242359822144080, 0.670205251869840040, 0.670168142242022590, +0.670131030938785120, 0.670093917960220000, 0.670056803306420150, 0.670019686977477820, 0.669982568973486740, 0.669945449294539250, 0.669908327940728080, 0.669871204912145800, +0.669834080208885800, 0.669796953831040650, 0.669759825778703080, 0.669722696051965550, 0.669685564650921660, 0.669648431575663890, 0.669611296826284730, 0.669574160402877540, +0.669537022305535130, 0.669499882534350000, 0.669462741089414950, 0.669425597970823350, 0.669388453178667690, 0.669351306713040990, 0.669314158574035640, 0.669277008761745230, +0.669239857276262230, 0.669202704117679680, 0.669165549286090070, 0.669128392781586760, 0.669091234604262670, 0.669054074754210410, 0.669016913231522570, 0.668979750036292840, +0.668942585168613710, 0.668905418628577770, 0.668868250416278620, 0.668831080531808840, 0.668793908975261480, 0.668756735746728890, 0.668719560846304790, 0.668682384274081890, +0.668645206030152870, 0.668608026114610680, 0.668570844527548670, 0.668533661269059550, 0.668496476339236260, 0.668459289738171480, 0.668422101465958820, 0.668384911522690860, +0.668347719908460650, 0.668310526623360770, 0.668273331667484930, 0.668236135040925830, 0.668198936743775950, 0.668161736776129110, 0.668124535138077900, 0.668087331829715360, +0.668050126851134190, 0.668012920202428080, 0.667975711883689540, 0.667938501895011800, 0.667901290236487480, 0.667864076908210260, 0.667826861910272850, 0.667789645242768290, +0.667752426905789290, 0.667715206899429540, 0.667677985223781740, 0.667640761878939060, 0.667603536864994070, 0.667566310182040600, 0.667529081830171340, 0.667491851809479340, +0.667454620120057520, 0.667417386761999350, 0.667380151735397660, 0.667342915040345370, 0.667305676676936080, 0.667268436645262700, 0.667231194945418160, 0.667193951577495280, +0.667156706541587870, 0.667119459837788640, 0.667082211466190840, 0.667044961426887180, 0.667007709719971360, 0.666970456345536310, 0.666933201303675170, 0.666895944594480650, +0.666858686218046560, 0.666821426174465830, 0.666784164463831490, 0.666746901086236470, 0.666709636041774470, 0.666672369330538420, 0.666635100952621020, 0.666597830908116310, +0.666560559197116990, 0.666523285819716320, 0.666486010776007000, 0.666448734066083070, 0.666411455690037240, 0.666374175647962750, 0.666336893939952550, 0.666299610566100430, +0.666262325526499330, 0.666225038821242400, 0.666187750450422560, 0.666150460414133620, 0.666113168712468510, 0.666075875345520490, 0.666038580313382480, 0.666001283616148300, +0.665963985253910980, 0.665926685226763350, 0.665889383534799320, 0.665852080178111820, 0.665814775156794210, 0.665777468470939220, 0.665740160120640970, 0.665702850105992280, +0.665665538427086420, 0.665628225084016420, 0.665590910076876210, 0.665553593405758810, 0.665516275070757280, 0.665478955071964750, 0.665441633409475260, 0.665404310083381630, +0.665366985093777230, 0.665329658440754980, 0.665292330124408910, 0.665255000144832080, 0.665217668502117830, 0.665180335196358890, 0.665143000227649610, 0.665105663596082700, +0.665068325301751420, 0.665030985344749580, 0.664993643725170220, 0.664956300443106940, 0.664918955498652430, 0.664881608891900840, 0.664844260622945330, 0.664806910691879140, +0.664769559098795320, 0.664732205843787890, 0.664694850926950020, 0.664657494348374960, 0.664620136108155850, 0.664582776206386840, 0.664545414643160750, 0.664508051418571170, +0.664470686532711130, 0.664433319985674790, 0.664395951777555060, 0.664358581908445100, 0.664321210378439050, 0.664283837187629960, 0.664246462336111290, 0.664209085823976090, +0.664171707651318610, 0.664134327818231780, 0.664096946324809200, 0.664059563171143900, 0.664022178357329910, 0.663984791883460600, 0.663947403749629240, 0.663910013955929080, +0.663872622502454270, 0.663835229389297840, 0.663797834616553280, 0.663760438184313850, 0.663723040092673690, 0.663685640341725950, 0.663648238931563660, 0.663610835862281200, +0.663573431133971710, 0.663536024746728570, 0.663498616700645030, 0.663461206995815230, 0.663423795632332450, 0.663386382610290260, 0.663348967929781710, 0.663311551590901050, +0.663274133593741540, 0.663236713938396670, 0.663199292624959800, 0.663161869653524970, 0.663124445024185330, 0.663087018737034790, 0.663049590792166190, 0.663012161189674100, +0.662974729929651450, 0.662937297012191730, 0.662899862437389080, 0.662862426205336860, 0.662824988316128460, 0.662787548769857350, 0.662750107566617560, 0.662712664706502700, +0.662675220189606010, 0.662637774016020980, 0.662600326185841860, 0.662562876699162030, 0.662525425556074850, 0.662487972756673820, 0.662450518301053280, 0.662413062189306290, +0.662375604421526760, 0.662338144997807850, 0.662300683918243930, 0.662263221182928240, 0.662225756791954610, 0.662188290745416190, 0.662150823043407330, 0.662113353686021420, +0.662075882673351820, 0.662038410005492910, 0.662000935682537930, 0.661963459704580590, 0.661925982071714270, 0.661888502784033330, 0.661851021841631140, 0.661813539244601400, +0.661776054993037490, 0.661738569087033770, 0.661701081526683610, 0.661663592312080720, 0.661626101443318570, 0.661588608920491540, 0.661551114743692880, 0.661513618913016520, +0.661476121428555720, 0.661438622290404950, 0.661401121498657710, 0.661363619053407240, 0.661326114954748020, 0.661288609202773660, 0.661251101797577730, 0.661213592739253620, +0.661176082027895910, 0.661138569663597960, 0.661101055646453720, 0.661063539976556420, 0.661026022654000570, 0.660988503678879740, 0.660950983051287630, 0.660913460771317630, +0.660875936839064430, 0.660838411254621390, 0.660800884018082240, 0.660763355129540650, 0.660725824589090900, 0.660688292396826580, 0.660650758552841280, 0.660613223057229360, +0.660575685910084420, 0.660538147111500270, 0.660500606661570400, 0.660463064560389390, 0.660425520808050610, 0.660387975404648110, 0.660350428350275350, 0.660312879645026830, +0.660275329288996130, 0.660237777282277060, 0.660200223624963220, 0.660162668317149200, 0.660125111358928480, 0.660087552750394990, 0.660049992491642310, 0.660012430582764930, +0.659974867023856550, 0.659937301815010980, 0.659899734956321820, 0.659862166447883540, 0.659824596289789960, 0.659787024482134550, 0.659749451025011920, 0.659711875918515540, +0.659674299162739560, 0.659636720757777570, 0.659599140703724050, 0.659561559000672700, 0.659523975648717450, 0.659486390647951890, 0.659448803998470720, 0.659411215700367540, +0.659373625753736260, 0.659336034158670590, 0.659298440915265240, 0.659260846023613790, 0.659223249483810170, 0.659185651295948080, 0.659148051460122230, 0.659110449976426320, +0.659072846844953820, 0.659035242065799660, 0.658997635639057330, 0.658960027564820860, 0.658922417843184060, 0.658884806474241520, 0.658847193458086950, 0.658809578794814500, +0.658771962484517640, 0.658734344527291290, 0.658696724923229060, 0.658659103672424970, 0.658621480774972850, 0.658583856230967380, 0.658546230040502170, 0.658508602203671470, +0.658470972720568870, 0.658433341591289190, 0.658395708815926240, 0.658358074394573610, 0.658320438327326120, 0.658282800614277570, 0.658245161255522020, 0.658207520251153140, +0.658169877601265880, 0.658132233305953940, 0.658094587365311350, 0.658056939779432030, 0.658019290548410680, 0.657981639672341020, 0.657943987151317410, 0.657906332985433330, +0.657868677174783920, 0.657831019719462670, 0.657793360619563950, 0.657755699875181450, 0.657718037486410110, 0.657680373453343630, 0.657642707776075920, 0.657605040454701690, +0.657567371489314880, 0.657529700880009730, 0.657492028626879940, 0.657454354730020450, 0.657416679189524960, 0.657379002005487820, 0.657341323178002870, 0.657303642707165010, +0.657265960593067970, 0.657228276835805980, 0.657190591435473090, 0.657152904392163890, 0.657115215705972530, 0.657077525376993150, 0.657039833405319570, 0.657002139791046820, +0.656964444534268610, 0.656926747635079410, 0.656889049093572930, 0.656851348909844200, 0.656813647083987040, 0.656775943616095480, 0.656738238506264340, 0.656700531754587650, +0.656662823361159660, 0.656625113326074210, 0.656587401649426420, 0.656549688331310000, 0.656511973371819440, 0.656474256771048540, 0.656436538529092340, 0.656398818646044880, +0.656361097122000300, 0.656323373957052650, 0.656285649151296950, 0.656247922704827120, 0.656210194617737440, 0.656172464890121930, 0.656134733522075630, 0.656097000513692460, +0.656059265865066470, 0.656021529576292670, 0.655983791647465010, 0.655946052078677950, 0.655908310870025320, 0.655870568021602370, 0.655832823533502920, 0.655795077405821440, +0.655757329638651850, 0.655719580232089320, 0.655681829186227860, 0.655644076501161850, 0.655606322176985330, 0.655568566213793220, 0.655530808611679780, 0.655493049370739380, +0.655455288491065930, 0.655417525972754600, 0.655379761815899520, 0.655341996020594620, 0.655304228586935040, 0.655266459515014940, 0.655228688804928790, 0.655190916456770410, +0.655153142470635160, 0.655115366846617090, 0.655077589584810550, 0.655039810685309700, 0.655002030148209680, 0.654964247973604640, 0.654926464161588840, 0.654888678712256640, +0.654850891625703090, 0.654813102902022210, 0.654775312541308720, 0.654737520543656530, 0.654699726909160900, 0.654661931637915860, 0.654624134730016130, 0.654586336185555620, +0.654548536004629700, 0.654510734187332410, 0.654472930733757900, 0.654435125644001410, 0.654397318918157110, 0.654359510556319580, 0.654321700558582850, 0.654283888925042300, +0.654246075655791960, 0.654208260750926420, 0.654170444210539940, 0.654132626034727660, 0.654094806223583850, 0.654056984777202980, 0.654019161695679310, 0.653981336979108100, +0.653943510627583490, 0.653905682641200190, 0.653867853020052240, 0.653830021764235100, 0.653792188873842830, 0.653754354348969780, 0.653716518189711220, 0.653678680396161280, +0.653640840968414680, 0.653602999906565670, 0.653565157210709510, 0.653527312880940460, 0.653489466917352990, 0.653451619320041700, 0.653413770089101620, 0.653375919224627120, +0.653338066726712800, 0.653300212595453010, 0.653262356830943030, 0.653224499433277090, 0.653186640402549920, 0.653148779738855880, 0.653110917442290220, 0.653073053512947200, +0.653035187950921300, 0.652997320756307680, 0.652959451929200800, 0.652921581469695260, 0.652883709377885420, 0.652845835653866670, 0.652807960297733360, 0.652770083309580080, +0.652732204689501330, 0.652694324437592450, 0.652656442553947610, 0.652618559038661730, 0.652580673891829170, 0.652542787113545190, 0.652504898703904270, 0.652467008663001110, +0.652429116990930090, 0.652391223687786680, 0.652353328753665140, 0.652315432188659950, 0.652277533992866480, 0.652239634166379200, 0.652201732709292830, 0.652163829621701830, +0.652125924903701580, 0.652088018555386450, 0.652050110576851360, 0.652012200968190570, 0.651974289729499670, 0.651936376860873130, 0.651898462362405560, 0.651860546234191430, +0.651822628476326440, 0.651784709088904730, 0.651746788072021350, 0.651708865425770560, 0.651670941150248040, 0.651633015245548060, 0.651595087711765660, 0.651557158548995100, +0.651519227757332060, 0.651481295336870940, 0.651443361287706190, 0.651405425609933420, 0.651367488303647100, 0.651329549368942050, 0.651291608805912750, 0.651253666614654780, +0.651215722795262630, 0.651177777347831220, 0.651139830272455030, 0.651101881569229550, 0.651063931238249460, 0.651025979279609480, 0.650988025693404190, 0.650950070479729190, +0.650912113638679070, 0.650874155170348630, 0.650836195074832480, 0.650798233352226090, 0.650760270002624150, 0.650722305026121270, 0.650684338422812920, 0.650646370192793700, +0.650608400336158630, 0.650570428853002090, 0.650532455743420000, 0.650494481007506620, 0.650456504645357090, 0.650418526657066010, 0.650380547042728850, 0.650342565802440430, +0.650304582936295450, 0.650266598444388830, 0.650228612326815950, 0.650190624583671610, 0.650152635215050620, 0.650114644221047810, 0.650076651601758650, 0.650038657357277950, +0.650000661487700190, 0.649962663993121080, 0.649924664873635430, 0.649886664129338040, 0.649848661760323630, 0.649810657766688000, 0.649772652148525640, 0.649734644905931690, +0.649696636039000740, 0.649658625547828610, 0.649620613432509870, 0.649582599693139580, 0.649544584329812550, 0.649506567342624240, 0.649468548731669590, 0.649430528497043640, +0.649392506638840960, 0.649354483157157380, 0.649316458052087600, 0.649278431323726530, 0.649240402972169230, 0.649202372997511160, 0.649164341399847240, 0.649126308179272080, +0.649088273335881480, 0.649050236869770150, 0.649012198781033330, 0.648974159069765630, 0.648936117736062860, 0.648898074780019820, 0.648860030201731550, 0.648821984001292870, +0.648783936178799590, 0.648745886734346520, 0.648707835668028700, 0.648669782979940930, 0.648631728670179040, 0.648593672738837830, 0.648555615186012460, 0.648517556011797720, +0.648479495216289340, 0.648441432799582330, 0.648403368761771400, 0.648365303102952370, 0.648327235823220050, 0.648289166922669580, 0.648251096401396000, 0.648213024259494900, +0.648174950497061310, 0.648136875114190270, 0.648098798110976810, 0.648060719487516650, 0.648022639243904690, 0.647984557380236080, 0.647946473896605760, 0.647908388793109640, +0.647870302069842530, 0.647832213726899590, 0.647794123764375840, 0.647756032182367210, 0.647717938980968410, 0.647679844160274350, 0.647641747720381080, 0.647603649661383510, +0.647565549983376790, 0.647527448686455840, 0.647489345770716600, 0.647451241236253970, 0.647413135083163230, 0.647375027311539400, 0.647336917921478290, 0.647298806913074840, +0.647260694286424410, 0.647222580041621920, 0.647184464178763300, 0.647146346697943580, 0.647108227599257900, 0.647070106882801310, 0.647031984548669840, 0.646993860596958400, +0.646955735027762050, 0.646917607841176580, 0.646879479037297140, 0.646841348616219000, 0.646803216578037190, 0.646765082922847620, 0.646726947650745340, 0.646688810761825720, +0.646650672256183780, 0.646612532133915340, 0.646574390395115770, 0.646536247039880110, 0.646498102068303490, 0.646459955480481960, 0.646421807276510550, 0.646383657456484630, +0.646345506020499230, 0.646307352968650490, 0.646269198301033240, 0.646231042017743060, 0.646192884118874880, 0.646154724604524830, 0.646116563474788070, 0.646078400729759420, +0.646040236369535230, 0.646002070394210430, 0.645963902803880390, 0.645925733598640250, 0.645887562778586170, 0.645849390343813170, 0.645811216294416730, 0.645773040630491790, +0.645734863352134700, 0.645696684459440400, 0.645658503952504460, 0.645620321831421820, 0.645582138096288840, 0.645543952747200440, 0.645505765784252120, 0.645467577207539110, +0.645429387017157460, 0.645391195213202320, 0.645353001795768930, 0.645314806764953340, 0.645276610120850690, 0.645238411863556570, 0.645200211993166130, 0.645162010509775400, +0.645123807413479630, 0.645085602704374430, 0.645047396382554820, 0.645009188448117170, 0.644970978901156400, 0.644932767741768220, 0.644894554970047880, 0.644856340586091430, +0.644818124589994100, 0.644779906981851390, 0.644741687761758660, 0.644703466929812060, 0.644665244486106850, 0.644627020430738050, 0.644588794763802150, 0.644550567485394190, +0.644512338595609860, 0.644474108094544420, 0.644435875982293900, 0.644397642258953800, 0.644359406924619460, 0.644321169979386380, 0.644282931423350690, 0.644244691256607660, +0.644206449479252980, 0.644168206091381700, 0.644129961093090400, 0.644091714484474000, 0.644053466265628430, 0.644015216436648830, 0.643976964997631570, 0.643938711948671920, +0.643900457289865450, 0.643862201021307420, 0.643823943143094320, 0.643785683655321410, 0.643747422558083810, 0.643709159851478140, 0.643670895535599420, 0.643632629610543570, +0.643594362076405750, 0.643556092933282420, 0.643517822181268850, 0.643479549820460740, 0.643441275850953340, 0.643403000272843140, 0.643364723086225390, 0.643326444291195900, +0.643288163887849930, 0.643249881876283850, 0.643211598256593130, 0.643173313028873370, 0.643135026193220050, 0.643096737749729530, 0.643058447698497070, 0.643020156039618150, +0.642981862773189250, 0.642943567899305620, 0.642905271418063080, 0.642866973329557110, 0.642828673633883960, 0.642790372331139110, 0.642752069421418380, 0.642713764904817130, +0.642675458781431840, 0.642637151051357880, 0.642598841714691060, 0.642560530771526750, 0.642522218221961430, 0.642483904066090680, 0.642445588304010110, 0.642407270935815180, +0.642368951961602490, 0.642330631381467290, 0.642292309195505280, 0.642253985403812840, 0.642215660006485440, 0.642177333003618900, 0.642139004395308580, 0.642100674181651180, +0.642062342362742070, 0.642024008938677060, 0.641985673909551750, 0.641947337275462600, 0.641908999036505110, 0.641870659192775080, 0.641832317744368110, 0.641793974691380660, +0.641755630033908340, 0.641717283772046840, 0.641678935905891870, 0.641640586435539890, 0.641602235361086400, 0.641563882682627320, 0.641525528400258230, 0.641487172514075610, +0.641448815024175060, 0.641410455930652160, 0.641372095233603500, 0.641333732933124570, 0.641295369029311280, 0.641257003522259340, 0.641218636412065110, 0.641180267698824300, +0.641141897382632830, 0.641103525463586290, 0.641065151941781370, 0.641026776817313460, 0.640988400090278580, 0.640950021760772430, 0.640911641828891600, 0.640873260294731570, +0.640834877158388380, 0.640796492419957730, 0.640758106079536200, 0.640719718137219400, 0.640681328593102890, 0.640642937447283400, 0.640604544699856620, 0.640566150350918460, +0.640527754400564640, 0.640489356848891740, 0.640450957695995470, 0.640412556941971740, 0.640374154586916270, 0.640335750630925850, 0.640297345074095970, 0.640258937916522770, +0.640220529158301850, 0.640182118799530020, 0.640143706840302860, 0.640105293280716410, 0.640066878120866380, 0.640028461360849450, 0.639990043000761450, 0.639951623040697970, +0.639913201480755810, 0.639874778321030570, 0.639836353561618500, 0.639797927202615080, 0.639759499244117350, 0.639721069686220670, 0.639682638529021410, 0.639644205772615270, +0.639605771417098850, 0.639567335462568050, 0.639528897909118930, 0.639490458756847180, 0.639452018005849720, 0.639413575656222140, 0.639375131708060600, 0.639336686161460890, +0.639298239016519830, 0.639259790273333240, 0.639221339931996700, 0.639182887992607250, 0.639144434455260590, 0.639105979320052750, 0.639067522587079660, 0.639029064256438240, +0.638990604328223970, 0.638952142802533320, 0.638913679679461890, 0.638875214959106600, 0.638836748641563370, 0.638798280726928120, 0.638759811215296900, 0.638721340106766510, +0.638682867401432760, 0.638644393099391920, 0.638605917200739670, 0.638567439705572950, 0.638528960613987670, 0.638490479926079990, 0.638451997641945710, 0.638413513761681870, +0.638375028285384170, 0.638336541213148530, 0.638298052545071990, 0.638259562281250250, 0.638221070421779670, 0.638182576966755950, 0.638144081916276250, 0.638105585270436260, +0.638067087029332350, 0.638028587193060440, 0.637990085761717340, 0.637951582735398980, 0.637913078114201730, 0.637874571898221390, 0.637836064087555000, 0.637797554682298480, +0.637759043682547990, 0.637720531088399660, 0.637682016899950190, 0.637643501117295840, 0.637604983740532320, 0.637566464769756650, 0.637527944205064870, 0.637489422046553230, +0.637450898294317670, 0.637412372948455210, 0.637373846009061880, 0.637335317476233840, 0.637296787350067230, 0.637258255630658970, 0.637219722318105090, 0.637181187412501850, +0.637142650913945290, 0.637104112822532540, 0.637065573138359430, 0.637027031861522430, 0.636988488992117460, 0.636949944530241670, 0.636911398475990990, 0.636872850829461430, +0.636834301590750160, 0.636795750759953090, 0.636757198337166710, 0.636718644322486930, 0.636680088716010890, 0.636641531517834650, 0.636602972728054550, 0.636564412346766640, +0.636525850374068170, 0.636487286810054950, 0.636448721654823580, 0.636410154908470080, 0.636371586571091500, 0.636333016642783970, 0.636294445123643860, 0.636255872013767320, +0.636217297313251380, 0.636178721022192310, 0.636140143140686340, 0.636101563668829750, 0.636062982606719560, 0.636024399954451920, 0.635985815712122870, 0.635947229879829660, +0.635908642457668430, 0.635870053445735550, 0.635831462844127280, 0.635792870652940540, 0.635754276872271710, 0.635715681502217240, 0.635677084542873190, 0.635638485994336700, +0.635599885856704020, 0.635561284130071740, 0.635522680814535780, 0.635484075910193510, 0.635445469417140970, 0.635406861335474860, 0.635368251665291210, 0.635329640406687270, +0.635291027559759300, 0.635252413124603340, 0.635213797101316760, 0.635175179489995580, 0.635136560290736510, 0.635097939503635690, 0.635059317128790380, 0.635020693166296830, +0.634982067616251420, 0.634943440478750620, 0.634904811753891460, 0.634866181441770430, 0.634827549542483770, 0.634788916056127970, 0.634750280982800170, 0.634711644322596750, +0.634673006075614170, 0.634634366241948800, 0.634595724821697790, 0.634557081814957400, 0.634518437221824110, 0.634479791042394940, 0.634441143276766370, 0.634402493925035000, +0.634363842987296980, 0.634325190463649660, 0.634286536354189410, 0.634247880659012830, 0.634209223378216170, 0.634170564511896790, 0.634131904060150960, 0.634093242023075490, +0.634054578400766510, 0.634015913193321400, 0.633977246400836520, 0.633938578023408580, 0.633899908061133830, 0.633861236514109640, 0.633822563382432370, 0.633783888666198280, +0.633745212365504850, 0.633706534480448450, 0.633667855011125660, 0.633629173957632850, 0.633590491320067510, 0.633551807098525990, 0.633513121293104890, 0.633474433903900680, +0.633435744931010620, 0.633397054374531310, 0.633358362234559320, 0.633319668511191040, 0.633280973204524030, 0.633242276314654570, 0.633203577841679350, 0.633164877785694860, +0.633126176146798560, 0.633087472925086820, 0.633048768120656360, 0.633010061733603640, 0.632971353764026130, 0.632932644212020220, 0.632893933077682380, 0.632855220361109970, +0.632816506062399590, 0.632777790181648040, 0.632739072718951470, 0.632700353674407690, 0.632661633048112960, 0.632622910840164200, 0.632584187050657780, 0.632545461679691280, +0.632506734727361080, 0.632468006193764090, 0.632429276078996680, 0.632390544383156450, 0.632351811106339870, 0.632313076248643750, 0.632274339810164680, 0.632235601791000020, +0.632196862191246380, 0.632158121011000220, 0.632119378250359130, 0.632080633909419490, 0.632041887988278430, 0.632003140487032210, 0.631964391405778540, 0.631925640744613770, +0.631886888503635060, 0.631848134682938660, 0.631809379282622260, 0.631770622302782470, 0.631731863743516200, 0.631693103604919810, 0.631654341887091020, 0.631615578590126400, +0.631576813714122890, 0.631538047259176950, 0.631499279225386180, 0.631460509612847280, 0.631421738421656720, 0.631382965651912210, 0.631344191303710220, 0.631305415377147790, +0.631266637872321510, 0.631227858789328970, 0.631189078128266750, 0.631150295889231770, 0.631111512072320860, 0.631072726677631370, 0.631033939705260230, 0.630995151155304130, +0.630956361027859790, 0.630917569323024900, 0.630878776040896150, 0.630839981181570360, 0.630801184745144350, 0.630762386731715700, 0.630723587141381100, 0.630684785974237490, +0.630645983230381680, 0.630607178909911140, 0.630568373012922680, 0.630529565539513000, 0.630490756489779700, 0.630451945863819470, 0.630413133661729460, 0.630374319883606260, +0.630335504529547560, 0.630296687599650070, 0.630257869094010940, 0.630219049012726740, 0.630180227355895290, 0.630141404123613300, 0.630102579315977680, 0.630063752933085360, +0.630024924975034040, 0.629986095441920410, 0.629947264333841410, 0.629908431650894050, 0.629869597393175830, 0.629830761560783770, 0.629791924153814350, 0.629753085172365500, +0.629714244616533910, 0.629675402486416740, 0.629636558782110670, 0.629597713503713630, 0.629558866651322210, 0.629520018225033670, 0.629481168224944710, 0.629442316651153240, +0.629403463503755980, 0.629364608782850050, 0.629325752488532180, 0.629286894620900370, 0.629248035180051240, 0.629209174166082020, 0.629170311579089650, 0.629131447419171710, +0.629092581686425230, 0.629053714380946930, 0.629014845502834600, 0.628975975052185280, 0.628937103029096000, 0.628898229433663580, 0.628859354265985940, 0.628820477526159880, +0.628781599214282670, 0.628742719330451120, 0.628703837874763140, 0.628664954847315550, 0.628626070248205600, 0.628587184077530110, 0.628548296335387000, 0.628509407021873080, +0.628470516137085710, 0.628431623681121710, 0.628392729654079000, 0.628353834056054380, 0.628314936887144900, 0.628276038147448480, 0.628237137837061920, 0.628198235956082480, +0.628159332504607090, 0.628120427482733780, 0.628081520890559350, 0.628042612728181180, 0.628003702995696080, 0.627964791693202070, 0.627925878820796090, 0.627886964378575390, +0.627848048366636990, 0.627809130785078830, 0.627770211633997710, 0.627731290913491220, 0.627692368623656070, 0.627653444764590400, 0.627614519336391010, 0.627575592339155390, +0.627536663772980450, 0.627497733637964240, 0.627458801934203670, 0.627419868661795670, 0.627380933820838370, 0.627341997411428820, 0.627303059433664270, 0.627264119887641640, +0.627225178773459070, 0.627186236091213600, 0.627147291841002490, 0.627108346022922870, 0.627069398637072670, 0.627030449683549040, 0.626991499162449230, 0.626952547073870380, +0.626913593417910420, 0.626874638194666600, 0.626835681404236070, 0.626796723046716080, 0.626757763122204550, 0.626718801630798630, 0.626679838572595350, 0.626640873947692860, +0.626601907756188180, 0.626562939998178690, 0.626523970673761530, 0.626484999783034850, 0.626446027326095670, 0.626407053303041360, 0.626368077713969070, 0.626329100558976950, +0.626290121838162020, 0.626251141551621870, 0.626212159699453430, 0.626173176281755060, 0.626134191298623690, 0.626095204750156790, 0.626056216636451610, 0.626017226957606200, +0.625978235713717690, 0.625939242904883340, 0.625900248531201080, 0.625861252592768370, 0.625822255089682480, 0.625783256022040550, 0.625744255389940830, 0.625705253193480470, +0.625666249432757060, 0.625627244107867630, 0.625588237218910330, 0.625549228765982620, 0.625510218749181670, 0.625471207168604940, 0.625432194024350570, 0.625393179316515610, +0.625354163045197750, 0.625315145210494140, 0.625276125812503030, 0.625237104851321560, 0.625198082327047320, 0.625159058239777580, 0.625120032589610460, 0.625081005376643350, +0.625041976600973380, 0.625002946262698810, 0.624963914361916780, 0.624924880898725110, 0.624885845873220820, 0.624846809285502180, 0.624807771135666660, 0.624768731423811620, +0.624729690150034430, 0.624690647314433360, 0.624651602917105640, 0.624612556958148990, 0.624573509437660550, 0.624534460355738670, 0.624495409712480740, 0.624456357507984120, +0.624417303742346390, 0.624378248415665690, 0.624339191528039410, 0.624300133079564780, 0.624261073070340180, 0.624222011500462860, 0.624182948370030520, 0.624143883679140530, +0.624104817427891030, 0.624065749616379620, 0.624026680244703760, 0.623987609312960930, 0.623948536821249400, 0.623909462769666520, 0.623870387158310000, 0.623831309987277090, +0.623792231256666270, 0.623753150966574910, 0.623714069117100700, 0.623674985708340900, 0.623635900740394100, 0.623596814213357440, 0.623557726127328400, 0.623518636482405460, +0.623479545278685880, 0.623440452516267450, 0.623401358195247560, 0.623362262315724560, 0.623323164877795930, 0.623284065881559490, 0.623244965327112380, 0.623205863214553290, +0.623166759543979490, 0.623127654315488890, 0.623088547529178750, 0.623049439185147550, 0.623010329283492760, 0.622971217824312200, 0.622932104807703220, 0.622892990233764320, +0.622853874102592960, 0.622814756414286630, 0.622775637168943690, 0.622736516366661610, 0.622697394007538320, 0.622658270091671180, 0.622619144619158680, 0.622580017590098290, +0.622540889004587930, 0.622501758862724960, 0.622462627164607980, 0.622423493910334360, 0.622384359100002120, 0.622345222733708510, 0.622306084811552250, 0.622266945333630810, +0.622227804300041990, 0.622188661710883270, 0.622149517566253250, 0.622110371866249400, 0.622071224610969750, 0.622032075800511560, 0.621992925434973640, 0.621953773514453360, +0.621914620039048180, 0.621875465008856930, 0.621836308423977080, 0.621797150284506330, 0.621757990590542380, 0.621718829342183810, 0.621679666539528220, 0.621640502182673420, +0.621601336271716990, 0.621562168806757630, 0.621522999787892830, 0.621483829215220500, 0.621444657088838230, 0.621405483408844720, 0.621366308175337560, 0.621327131388414560, +0.621287953048173300, 0.621248773154712610, 0.621209591708129950, 0.621170408708523030, 0.621131224155990310, 0.621092038050629620, 0.621052850392538770, 0.621013661181815560, +0.620974470418558470, 0.620935278102865200, 0.620896084234833780, 0.620856888814561690, 0.620817691842147860, 0.620778493317689750, 0.620739293241285410, 0.620700091613032410, +0.620660888433029690, 0.620621683701374600, 0.620582477418165410, 0.620543269583499590, 0.620504060197475950, 0.620464849260192190, 0.620425636771746000, 0.620386422732235990, +0.620347207141759950, 0.620307990000415920, 0.620268771308301600, 0.620229551065515690, 0.620190329272155780, 0.620151105928320230, 0.620111881034106420, 0.620072654589613360, +0.620033426594938540, 0.619994197050180220, 0.619954965955436090, 0.619915733310804850, 0.619876499116384320, 0.619837263372272520, 0.619798026078567150, 0.619758787235367150, +0.619719546842770200, 0.619680304900874330, 0.619641061409777370, 0.619601816369578120, 0.619562569780374270, 0.619523321642263650, 0.619484071955345160, 0.619444820719716400, +0.619405567935475630, 0.619366313602720540, 0.619327057721550060, 0.619287800292061990, 0.619248541314354360, 0.619209280788525000, 0.619170018714672810, 0.619130755092895610, +0.619091489923291550, 0.619052223205958320, 0.619012954940994950, 0.618973685128499150, 0.618934413768569170, 0.618895140861302820, 0.618855866406798900, 0.618816590405155350, +0.618777312856469970, 0.618738033760841690, 0.618698753118368310, 0.618659470929148080, 0.618620187193278710, 0.618580901910859350, 0.618541615081987680, 0.618502326706761970, +0.618463036785280140, 0.618423745317640990, 0.618384452303942460, 0.618345157744282890, 0.618305861638760000, 0.618266563987472930, 0.618227264790519370, 0.618187964047997580, +0.618148661760005600, 0.618109357926642340, 0.618070052548005620, 0.618030745624193470, 0.617991437155304800, 0.617952127141437550, 0.617912815582689960, 0.617873502479159950, +0.617834187830946570, 0.617794871638147720, 0.617755553900861680, 0.617716234619186460, 0.617676913793220870, 0.617637591423063180, 0.617598267508811420, 0.617558942050563610, +0.617519615048418790, 0.617480286502475000, 0.617440956412830480, 0.617401624779583160, 0.617362291602832180, 0.617322956882675470, 0.617283620619210940, 0.617244282812537850, +0.617204943462753900, 0.617165602569957670, 0.617126260134247100, 0.617086916155721200, 0.617047570634478020, 0.617008223570615910, 0.616968874964232920, 0.616929524815428070, +0.616890173124299390, 0.616850819890945370, 0.616811465115463810, 0.616772108797954080, 0.616732750938513980, 0.616693391537242010, 0.616654030594236290, 0.616614668109595750, +0.616575304083418540, 0.616535938515803130, 0.616496571406847440, 0.616457202756650720, 0.616417832565311020, 0.616378460832926360, 0.616339087559595990, 0.616299712745417730, +0.616260336390490380, 0.616220958494911650, 0.616181579058781010, 0.616142198082196390, 0.616102815565256260, 0.616063431508058650, 0.616024045910702920, 0.615984658773287120, +0.615945270095909600, 0.615905879878668520, 0.615866488121663220, 0.615827094824991540, 0.615787699988752270, 0.615748303613043340, 0.615708905697963990, 0.615669506243612390, +0.615630105250086660, 0.615590702717485950, 0.615551298645908630, 0.615511893035452950, 0.615472485886217170, 0.615433077198300650, 0.615393666971801310, 0.615354255206817860, +0.615314841903448430, 0.615275427061792280, 0.615236010681947550, 0.615196592764012730, 0.615157173308086060, 0.615117752314266910, 0.615078329782653310, 0.615038905713343960, +0.614999480106436900, 0.614960052962031490, 0.614920624280226090, 0.614881194061118630, 0.614841762304808580, 0.614802329011394090, 0.614762894180973850, 0.614723457813646010, +0.614684019909509830, 0.614644580468663660, 0.614605139491205990, 0.614565696977235180, 0.614526252926850370, 0.614486807340150040, 0.614447360217232670, 0.614407911558196520, +0.614368461363140940, 0.614329009632164190, 0.614289556365364970, 0.614250101562841430, 0.614210645224693040, 0.614171187351018060, 0.614131727941915060, 0.614092266997482430, +0.614052804517819520, 0.614013340503024470, 0.613973874953195890, 0.613934407868432790, 0.613894939248833760, 0.613855469094497400, 0.613815997405522060, 0.613776524182007010, +0.613737049424050610, 0.613697573131751660, 0.613658095305208430, 0.613618615944520270, 0.613579135049785560, 0.613539652621102990, 0.613500168658571040, 0.613460683162288970, +0.613421196132355240, 0.613381707568868450, 0.613342217471926960, 0.613302725841630480, 0.613263232678077030, 0.613223737981365200, 0.613184241751594360, 0.613144743988862980, +0.613105244693269660, 0.613065743864912970, 0.613026241503892180, 0.612986737610305750, 0.612947232184252620, 0.612907725225830920, 0.612868216735140360, 0.612828706712279180, +0.612789195157346310, 0.612749682070440000, 0.612710167451659960, 0.612670651301104430, 0.612631133618872340, 0.612591614405061930, 0.612552093659772920, 0.612512571383103670, +0.612473047575152640, 0.612433522236019320, 0.612393995365802300, 0.612354466964600160, 0.612314937032511610, 0.612275405569636000, 0.612235872576071930, 0.612196338051918090, +0.612156801997273070, 0.612117264412236460, 0.612077725296906630, 0.612038184651382490, 0.611998642475762630, 0.611959098770146430, 0.611919553534632450, 0.611880006769319640, +0.611840458474306460, 0.611800908649692500, 0.611761357295576240, 0.611721804412056260, 0.611682249999232150, 0.611642694057202400, 0.611603136586065800, 0.611563577585921170, +0.611524017056867870, 0.611484454999004500, 0.611444891412429970, 0.611405326297242980, 0.611365759653542900, 0.611326191481428530, 0.611286621780998680, 0.611247050552351840, +0.611207477795587710, 0.611167903510804970, 0.611128327698102440, 0.611088750357578810, 0.611049171489333580, 0.611009591093465420, 0.610970009170073270, 0.610930425719255710, +0.610890840741112550, 0.610851254235742270, 0.610811666203243450, 0.610772076643715800, 0.610732485557258010, 0.610692892943969000, 0.610653298803947360, 0.610613703137292910, +0.610574105944104110, 0.610534507224480110, 0.610494906978519490, 0.610455305206321850, 0.610415701907986110, 0.610376097083610960, 0.610336490733295320, 0.610296882857138790, +0.610257273455240060, 0.610217662527698050, 0.610178050074611680, 0.610138436096080430, 0.610098820592203110, 0.610059203563078410, 0.610019585008806040, 0.609979964929484700, +0.609940343325213520, 0.609900720196091100, 0.609861095542217120, 0.609821469363690530, 0.609781841660610220, 0.609742212433074910, 0.609702581681184520, 0.609662949405037620, +0.609623315604733370, 0.609583680280370470, 0.609544043432048600, 0.609504405059866810, 0.609464765163923890, 0.609425123744318790, 0.609385480801151180, 0.609345836334519890, +0.609306190344523600, 0.609266542831262250, 0.609226893794834520, 0.609187243235339570, 0.609147591152876090, 0.609107937547544110, 0.609068282419442220, 0.609028625768669560, +0.608988967595325060, 0.608949307899508520, 0.608909646681318640, 0.608869983940854680, 0.608830319678215440, 0.608790653893500730, 0.608750986586809370, 0.608711317758240500, +0.608671647407893040, 0.608631975535866790, 0.608592302142260680, 0.608552627227173740, 0.608512950790704890, 0.608473272832954050, 0.608433593354019920, 0.608393912354001530, +0.608354229832998690, 0.608314545791110330, 0.608274860228435580, 0.608235173145073360, 0.608195484541123490, 0.608155794416684990, 0.608116102771856900, 0.608076409606738260, +0.608036714921428970, 0.607997018716027850, 0.607957320990634150, 0.607917621745346910, 0.607877920980265940, 0.607838218695490040, 0.607798514891118690, 0.607758809567250700, +0.607719102723986100, 0.607679394361423600, 0.607639684479662430, 0.607599973078802310, 0.607560260158942270, 0.607520545720181550, 0.607480829762619080, 0.607441112286355000, +0.607401393291488010, 0.607361672778117590, 0.607321950746342760, 0.607282227196263240, 0.607242502127978260, 0.607202775541586970, 0.607163047437188410, 0.607123317814882490, +0.607083586674768360, 0.607043854016945270, 0.607004119841512150, 0.606964384148569120, 0.606924646938215130, 0.606884908210549190, 0.606845167965671340, 0.606805426203680500, +0.606765682924676140, 0.606725938128757190, 0.606686191816023790, 0.606646443986574970, 0.606606694640509870, 0.606566943777927860, 0.606527191398928740, 0.606487437503611670, +0.606447682092076000, 0.606407925164420770, 0.606368166720746000, 0.606328406761150960, 0.606288645285734780, 0.606248882294596720, 0.606209117787836820, 0.606169351765553980, +0.606129584227847570, 0.606089815174817530, 0.606050044606562870, 0.606010272523183180, 0.605970498924777390, 0.605930723811445750, 0.605890947183287290, 0.605851169040401480, +0.605811389382887370, 0.605771608210845080, 0.605731825524373880, 0.605692041323573020, 0.605652255608541750, 0.605612468379380210, 0.605572679636187550, 0.605532889379063130, +0.605493097608106100, 0.605453304323416710, 0.605413509525094100, 0.605373713213237630, 0.605333915387946560, 0.605294116049321040, 0.605254315197460310, 0.605214512832463410, +0.605174708954430600, 0.605134903563460890, 0.605095096659654000, 0.605055288243109060, 0.605015478313926210, 0.604975666872204720, 0.604935853918043940, 0.604896039451543240, +0.604856223472802880, 0.604816405981921880, 0.604776586978999830, 0.604736766464135990, 0.604696944437430610, 0.604657120898982820, 0.604617295848892340, 0.604577469287258200, +0.604537641214180630, 0.604497811629759130, 0.604457980534092610, 0.604418147927281660, 0.604378313809425190, 0.604338478180622920, 0.604298641040974190, 0.604258802390579160, +0.604218962229537190, 0.604179120557947760, 0.604139277375910220, 0.604099432683524840, 0.604059586480890860, 0.604019738768107880, 0.603979889545275260, 0.603940038812493140, +0.603900186569861110, 0.603860332817478530, 0.603820477555444660, 0.603780620783860080, 0.603740762502823940, 0.603700902712435480, 0.603661041412795200, 0.603621178604002220, +0.603581314286156360, 0.603541448459356870, 0.603501581123704110, 0.603461712279297350, 0.603421841926236270, 0.603381970064620350, 0.603342096694549750, 0.603302221816124030, +0.603262345429442680, 0.603222467534605070, 0.603182588131711770, 0.603142707220861940, 0.603102824802155270, 0.603062940875691230, 0.603023055441570200, 0.602983168499891530, +0.602943280050754930, 0.602903390094259860, 0.602863498630506590, 0.602823605659594590, 0.602783711181623220, 0.602743815196692960, 0.602703917704903060, 0.602664018706353440, +0.602624118201143370, 0.602584216189373410, 0.602544312671142950, 0.602504407646551670, 0.602464501115698940, 0.602424593078685460, 0.602384683535610370, 0.602344772486573590, +0.602304859931674600, 0.602264945871013760, 0.602225030304690550, 0.602185113232804770, 0.602145194655455910, 0.602105274572744320, 0.602065352984769600, 0.602025429891631100, +0.601985505293429420, 0.601945579190264040, 0.601905651582234640, 0.601865722469440700, 0.601825791851982930, 0.601785859729960570, 0.601745926103473660, 0.601705990972621560, +0.601666054337504750, 0.601626116198222820, 0.601586176554875670, 0.601546235407562690, 0.601506292756384560, 0.601466348601440550, 0.601426402942830780, 0.601386455780654640, +0.601346507115012700, 0.601306556946004430, 0.601266605273729440, 0.601226652098288290, 0.601186697419780590, 0.601146741238306030, 0.601106783553964410, 0.601066824366856100, +0.601026863677080690, 0.600986901484738210, 0.600946937789928030, 0.600906972592750940, 0.600867005893306330, 0.600827037691694210, 0.600787067988014290, 0.600747096782366930, +0.600707124074851830, 0.600667149865568910, 0.600627174154617860, 0.600587196942099170, 0.600547218228112410, 0.600507238012757290, 0.600467256296134510, 0.600427273078343540, +0.600387288359484410, 0.600347302139656700, 0.600307314418961010, 0.600267325197497150, 0.600227334475364920, 0.600187342252664010, 0.600147348529495030, 0.600107353305957770, +0.600067356582152040, 0.600027358358177660, 0.599987358634135210, 0.599947357410124390, 0.599907354686245120, 0.599867350462597090, 0.599827344739281120, 0.599787337516396680, +0.599747328794044020, 0.599707318572322620, 0.599667306851333290, 0.599627293631175730, 0.599587278911949520, 0.599547262693755470, 0.599507244976693280, 0.599467225760862980, +0.599427205046364260, 0.599387182833297840, 0.599347159121763510, 0.599307133911861300, 0.599267107203690920, 0.599227078997353060, 0.599187049292947530, 0.599147018090574360, +0.599106985390333360, 0.599066951192325230, 0.599026915496649660, 0.598986878303406800, 0.598946839612696460, 0.598906799424619330, 0.598866757739275220, 0.598826714556763840, +0.598786669877185980, 0.598746623700641580, 0.598706576027230540, 0.598666526857052680, 0.598626476190208920, 0.598586424026798960, 0.598546370366922930, 0.598506315210680540, +0.598466258558172810, 0.598426200409499450, 0.598386140764760490, 0.598346079624055950, 0.598306016987486420, 0.598265952855151940, 0.598225887227152640, 0.598185820103588120, +0.598145751484559510, 0.598105681370166510, 0.598065609760508930, 0.598025536655687700, 0.597985462055802610, 0.597945385960953810, 0.597905308371241230, 0.597865229286765780, +0.597825148707627260, 0.597785066633925830, 0.597744983065761400, 0.597704898003234790, 0.597664811446446010, 0.597624723395495220, 0.597584633850482220, 0.597544542811508040, +0.597504450278672490, 0.597464356252075720, 0.597424260731817870, 0.597384163717999630, 0.597344065210720920, 0.597303965210082110, 0.597263863716183120, 0.597223760729124640, +0.597183656249006930, 0.597143550275929580, 0.597103442809993830, 0.597063333851299390, 0.597023223399946730, 0.596983111456035550, 0.596942998019666990, 0.596902883090940860, +0.596862766669957630, 0.596822648756817120, 0.596782529351620240, 0.596742408454467130, 0.596702286065457940, 0.596662162184692700, 0.596622036812272440, 0.596581909948297070, +0.596541781592866970, 0.596501651746081940, 0.596461520408043230, 0.596421387578850770, 0.596381253258604360, 0.596341117447405260, 0.596300980145353380, 0.596260841352548980, +0.596220701069092080, 0.596180559295083960, 0.596140416030624290, 0.596100271275813660, 0.596060125030751900, 0.596019977295540240, 0.595979828070278720, 0.595939677355067480, +0.595899525150006770, 0.595859371455197630, 0.595819216270739970, 0.595779059596734380, 0.595738901433280680, 0.595698741780480210, 0.595658580638432800, 0.595618418007238580, +0.595578253886998700, 0.595538088277813180, 0.595497921179782400, 0.595457752593006480, 0.595417582517586590, 0.595377410953622620, 0.595337237901215290, 0.595297063360464400, +0.595256887331471200, 0.595216709814335830, 0.595176530809158670, 0.595136350316039840, 0.595096168335080500, 0.595055984866380670, 0.595015799910040940, 0.594975613466161350, +0.594935425534843020, 0.594895236116186220, 0.594855045210291310, 0.594814852817258320, 0.594774658937188730, 0.594734463570182340, 0.594694266716339510, 0.594654068375761400, +0.594613868548548030, 0.594573667234800100, 0.594533464434617520, 0.594493260148101780, 0.594453054375352790, 0.594412847116471130, 0.594372638371557070, 0.594332428140711740, +0.594292216424035400, 0.594252003221628520, 0.594211788533591130, 0.594171572360024710, 0.594131354701029400, 0.594091135556705670, 0.594050914927153780, 0.594010692812474980, +0.593970469212769410, 0.593930244128137220, 0.593890017558679870, 0.593849789504497520, 0.593809559965690630, 0.593769328942359450, 0.593729096434605360, 0.593688862442528500, +0.593648626966229550, 0.593608390005808560, 0.593568151561367000, 0.593527911633005110, 0.593487670220823380, 0.593447427324922170, 0.593407182945402730, 0.593366937082365320, +0.593326689735910630, 0.593286440906138800, 0.593246190593151200, 0.593205938797048190, 0.593165685517929920, 0.593125430755897850, 0.593085174511052140, 0.593044916783493580, +0.593004657573322320, 0.592964396880639730, 0.592924134705546170, 0.592883871048142330, 0.592843605908528360, 0.592803339286805840, 0.592763071183074920, 0.592722801597436290, +0.592682530529990310, 0.592642257980838360, 0.592601983950080900, 0.592561708437818300, 0.592521431444151150, 0.592481152969180800, 0.592440873013007520, 0.592400591575731660, +0.592360308657454810, 0.592320024258277120, 0.592279738378299390, 0.592239451017621880, 0.592199162176346160, 0.592158871854572500, 0.592118580052401700, 0.592078286769934130, +0.592037992007271140, 0.591997695764513110, 0.591957398041760950, 0.591917098839114920, 0.591876798156676490, 0.591836495994546020, 0.591796192352824320, 0.591755887231611880, +0.591715580631009930, 0.591675272551119180, 0.591634962992040100, 0.591594651953873400, 0.591554339436720310, 0.591514025440681430, 0.591473709965857130, 0.591433393012348870, +0.591393074580257250, 0.591352754669682850, 0.591312433280726140, 0.591272110413488820, 0.591231786068071140, 0.591191460244574030, 0.591151132943097960, 0.591110804163744400, +0.591070473906613710, 0.591030142171806940, 0.590989808959424550, 0.590949474269567790, 0.590909138102337470, 0.590868800457834300, 0.590828461336158740, 0.590788120737412380, +0.590747778661695810, 0.590707435109109280, 0.590667090079754600, 0.590626743573732240, 0.590586395591143010, 0.590546046132087390, 0.590505695196666960, 0.590465342784982420, +0.590424988897134460, 0.590384633533223680, 0.590344276693351660, 0.590303918377618860, 0.590263558586126450, 0.590223197318974660, 0.590182834576265300, 0.590142470358098750, +0.590102104664576130, 0.590061737495797820, 0.590021368851865620, 0.589980998732879900, 0.589940627138941350, 0.589900254070151680, 0.589859879526611230, 0.589819503508421160, +0.589779126015681940, 0.589738747048495380, 0.589698366606961840, 0.589657984691182360, 0.589617601301257620, 0.589577216437289220, 0.589536830099377740, 0.589496442287624320, +0.589456053002129330, 0.589415662242994580, 0.589375270010320640, 0.589334876304208550, 0.589294481124758910, 0.589254084472073500, 0.589213686346252820, 0.589173286747397880, +0.589132885675609400, 0.589092483130989050, 0.589052079113637550, 0.589011673623655470, 0.588971266661144520, 0.588930858226205390, 0.588890448318939220, 0.588850036939446490, +0.588809624087829000, 0.588769209764187560, 0.588728793968622990, 0.588688376701236080, 0.588647957962128650, 0.588607537751401290, 0.588567116069155130, 0.588526692915490760, +0.588486268290510100, 0.588445842194313730, 0.588405414627002690, 0.588364985588677780, 0.588324555079440810, 0.588284123099392490, 0.588243689648633380, 0.588203254727265530, +0.588162818335389410, 0.588122380473106390, 0.588081941140516930, 0.588041500337723070, 0.588001058064825390, 0.587960614321925150, 0.587920169109122930, 0.587879722426520650, +0.587839274274219110, 0.587798824652319360, 0.587758373560922200, 0.587717921000129540, 0.587677466970041970, 0.587637011470760750, 0.587596554502386680, 0.587556096065021570, +0.587515636158766230, 0.587475174783721350, 0.587434711939988970, 0.587394247627669900, 0.587353781846865040, 0.587313314597675440, 0.587272845880202900, 0.587232375694548340, +0.587191904040812670, 0.587151430919097050, 0.587110956329503160, 0.587070480272131820, 0.587030002747084280, 0.586989523754461450, 0.586949043294365150, 0.586908561366896180, +0.586868077972155900, 0.586827593110245020, 0.586787106781265440, 0.586746618985318210, 0.586706129722504020, 0.586665638992924900, 0.586625146796681650, 0.586584653133875530, +0.586544158004607460, 0.586503661408979250, 0.586463163347092030, 0.586422663819046840, 0.586382162824944600, 0.586341660364887330, 0.586301156438975850, 0.586260651047311620, +0.586220144189995240, 0.586179635867128960, 0.586139126078813580, 0.586098614825150470, 0.586058102106240320, 0.586017587922185390, 0.585977072273086370, 0.585936555159044750, +0.585896036580161320, 0.585855516536538220, 0.585814995028276390, 0.585774472055476610, 0.585733947618241050, 0.585693421716670600, 0.585652894350866540, 0.585612365520929990, +0.585571835226962770, 0.585531303469066120, 0.585490770247341090, 0.585450235561888800, 0.585409699412811290, 0.585369161800209590, 0.585328622724184840, 0.585288082184838300, +0.585247540182271870, 0.585206996716586600, 0.585166451787883850, 0.585125905396264630, 0.585085357541831000, 0.585044808224683850, 0.585004257444924460, 0.584963705202654730, +0.584923151497975800, 0.584882596330988940, 0.584842039701795270, 0.584801481610496720, 0.584760922057194650, 0.584720361041990210, 0.584679798564984420, 0.584639234626279650, +0.584598669225976700, 0.584558102364177050, 0.584517534040981830, 0.584476964256493090, 0.584436393010812070, 0.584395820304039910, 0.584355246136277980, 0.584314670507628200, +0.584274093418191810, 0.584233514868069740, 0.584192934857364230, 0.584152353386176440, 0.584111770454607830, 0.584071186062759320, 0.584030600210733280, 0.583990012898630730, +0.583949424126553150, 0.583908833894601580, 0.583868242202878360, 0.583827649051484540, 0.583787054440521590, 0.583746458370090540, 0.583705860840293860, 0.583665261851232460, +0.583624661403007840, 0.583584059495721340, 0.583543456129475000, 0.583502851304369960, 0.583462245020507810, 0.583421637277989680, 0.583381028076917940, 0.583340417417393510, +0.583299805299517750, 0.583259191723392690, 0.583218576689119810, 0.583177960196800460, 0.583137342246535790, 0.583096722838428170, 0.583056101972578730, 0.583015479649089060, +0.582974855868060300, 0.582934230629594710, 0.582893603933793640, 0.582852975780758560, 0.582812346170590630, 0.582771715103392210, 0.582731082579264430, 0.582690448598309100, +0.582649813160627140, 0.582609176266321030, 0.582568537915492010, 0.582527898108241350, 0.582487256844671290, 0.582446614124882970, 0.582405969948978200, 0.582365324317058120, +0.582324677229225210, 0.582284028685580490, 0.582243378686225670, 0.582202727231262100, 0.582162074320792030, 0.582121419954916840, 0.582080764133738100, 0.582040106857356960, +0.581999448125876010, 0.581958787939396480, 0.581918126298019980, 0.581877463201847740, 0.581836798650982260, 0.581796132645524660, 0.581755465185576530, 0.581714796271240010, +0.581674125902616470, 0.581633454079807710, 0.581592780802914880, 0.581552106072040440, 0.581511429887285880, 0.581470752248752550, 0.581430073156542160, 0.581389392610756840, +0.581348710611498070, 0.581308027158867540, 0.581267342252966500, 0.581226655893897550, 0.581185968081761930, 0.581145278816661340, 0.581104588098697250, 0.581063895927972030, +0.581023202304587150, 0.580982507228643860, 0.580941810700244640, 0.580901112719490850, 0.580860413286484300, 0.580819712401326350, 0.580779010064119580, 0.580738306274965250, +0.580697601033965060, 0.580656894341220590, 0.580616186196834190, 0.580575476600907360, 0.580534765553541890, 0.580494053054839030, 0.580453339104901490, 0.580412623703830620, +0.580371906851728130, 0.580331188548695480, 0.580290468794835260, 0.580249747590248940, 0.580209024935038120, 0.580168300829304480, 0.580127575273150400, 0.580086848266677450, +0.580046119809986880, 0.580005389903181510, 0.579964658546362590, 0.579923925739632030, 0.579883191483091310, 0.579842455776843010, 0.579801718620988500, 0.579760980015629700, +0.579720239960868080, 0.579679498456806330, 0.579638755503545710, 0.579598011101188250, 0.579557265249835420, 0.579516517949589800, 0.579475769200552880, 0.579435019002826460, +0.579394267356512230, 0.579353514261712670, 0.579312759718529250, 0.579272003727063670, 0.579231246287418400, 0.579190487399695030, 0.579149727063995370, 0.579108965280421110, +0.579068202049074720, 0.579027437370057910, 0.578986671243472470, 0.578945903669420000, 0.578905134648003080, 0.578864364179323410, 0.578823592263482790, 0.578782818900582810, +0.578742044090726160, 0.578701267834014430, 0.578660490130549540, 0.578619710980432970, 0.578578930383767620, 0.578538148340654870, 0.578497364851196290, 0.578456579915494820, +0.578415793533651800, 0.578375005705769380, 0.578334216431949040, 0.578293425712293470, 0.578252633546904370, 0.578211839935883760, 0.578171044879333130, 0.578130248377355160, +0.578089450430051670, 0.578048651037524560, 0.578007850199875440, 0.577967047917207100, 0.577926244189621130, 0.577885439017219450, 0.577844632400103860, 0.577803824338377070, +0.577763014832140760, 0.577722203881496870, 0.577681391486547180, 0.577640577647394290, 0.577599762364139900, 0.577558945636885810, 0.577518127465734830, 0.577477307850788320, +0.577436486792148650, 0.577395664289917400, 0.577354840344197370, 0.577314014955090270, 0.577273188122698010, 0.577232359847122510, 0.577191530128466470, 0.577150698966831580, +0.577109866362319980, 0.577069032315033260, 0.577028196825074450, 0.576987359892545020, 0.576946521517547330, 0.576905681700182860, 0.576864840440554530, 0.576823997738764250, +0.576783153594913500, 0.576742308009105200, 0.576701460981441150, 0.576660612512023500, 0.576619762600953930, 0.576578911248335380, 0.576538058454269420, 0.576497204218858420, +0.576456348542203960, 0.576415491424409070, 0.576374632865575440, 0.576333772865805230, 0.576292911425200230, 0.576252048543863250, 0.576211184221896210, 0.576170318459401140, +0.576129451256479960, 0.576088582613235590, 0.576047712529769610, 0.576006841006184160, 0.575965968042581820, 0.575925093639064630, 0.575884217795734730, 0.575843340512693810, +0.575802461790045020, 0.575761581627890040, 0.575720700026331130, 0.575679816985469990, 0.575638932505409760, 0.575598046586252240, 0.575557159228099580, 0.575516270431053580, +0.575475380195217380, 0.575434488520692680, 0.575393595407581730, 0.575352700855986440, 0.575311804866009860, 0.575270907437753660, 0.575230008571319780, 0.575189108266811360, +0.575148206524330070, 0.575107303343978420, 0.575066398725857960, 0.575025492670071970, 0.574984585176722240, 0.574943676245911030, 0.574902765877740360, 0.574861854072313050, +0.574820940829731120, 0.574780026150096820, 0.574739110033512080, 0.574698192480079920, 0.574657273489902360, 0.574616353063081560, 0.574575431199719540, 0.574534507899919220, +0.574493583163782740, 0.574452656991412240, 0.574411729382909740, 0.574370800338378280, 0.574329869857919890, 0.574288937941636380, 0.574248004589630880, 0.574207069802005420, +0.574166133578862260, 0.574125195920303420, 0.574084256826431940, 0.574043316297349840, 0.574002374333159480, 0.573961430933962680, 0.573920486099862790, 0.573879539830961630, +0.573838592127361660, 0.573797642989164910, 0.573756692416474310, 0.573715740409391990, 0.573674786968020320, 0.573633832092461330, 0.573592875782818150, 0.573551918039192810, +0.573510958861687240, 0.573469998250404680, 0.573429036205447050, 0.573388072726916940, 0.573347107814916160, 0.573306141469548060, 0.573265173690914560, 0.573224204479118150, +0.573183233834260950, 0.573142261756445890, 0.573101288245775220, 0.573060313302351410, 0.573019336926276380, 0.572978359117653380, 0.572937379876584440, 0.572896399203172150, +0.572855417097518420, 0.572814433559726500, 0.572773448589898540, 0.572732462188136560, 0.572691474354543820, 0.572650485089222450, 0.572609494392274820, 0.572568502263803070, +0.572527508703910450, 0.572486513712698990, 0.572445517290271270, 0.572404519436729430, 0.572363520152176730, 0.572322519436715080, 0.572281517290447180, 0.572240513713475170, +0.572199508705902190, 0.572158502267830490, 0.572117494399362550, 0.572076485100600380, 0.572035474371647480, 0.571994462212605860, 0.571953448623578110, 0.571912433604666370, +0.571871417155973890, 0.571830399277602820, 0.571789379969655510, 0.571748359232234990, 0.571707337065443630, 0.571666313469383900, 0.571625288444158050, 0.571584261989869340, +0.571543234106620000, 0.571502204794512520, 0.571461174053649270, 0.571420141884133370, 0.571379108286067080, 0.571338073259553100, 0.571297036804693460, 0.571255998921591730, +0.571214959610349850, 0.571173918871070720, 0.571132876703856370, 0.571091833108810180, 0.571050788086034380, 0.571009741635631340, 0.570968693757704200, 0.570927644452355440, +0.570886593719687420, 0.570845541559802720, 0.570804487972804480, 0.570763432958794950, 0.570722376517876830, 0.570681318650152480, 0.570640259355725150, 0.570599198634697210, +0.570558136487171240, 0.570517072913249600, 0.570476007913035650, 0.570434941486631650, 0.570393873634140290, 0.570352804355663820, 0.570311733651305830, 0.570270661521168450, +0.570229587965354060, 0.570188512983966110, 0.570147436577106760, 0.570106358744878920, 0.570065279487384720, 0.570024198804727770, 0.569983116697010290, 0.569942033164335120, +0.569900948206804370, 0.569859861824521640, 0.569818774017589290, 0.569777684786110020, 0.569736594130186180, 0.569695502049921140, 0.569654408545417380, 0.569613313616777580, +0.569572217264104230, 0.569531119487500570, 0.569490020287069190, 0.569448919662912330, 0.569407817615133590, 0.569366714143835330, 0.569325609249120230, 0.569284502931090790, +0.569243395189850450, 0.569202286025501600, 0.569161175438147040, 0.569120063427889230, 0.569078949994831550, 0.569037835139076580, 0.568996718860726890, 0.568955601159885080, +0.568914482036654730, 0.568873361491138100, 0.568832239523438090, 0.568791116133657070, 0.568749991321898630, 0.568708865088265240, 0.568667737432859700, 0.568626608355784490, +0.568585477857143080, 0.568544345937037950, 0.568503212595571570, 0.568462077832847630, 0.568420941648968390, 0.568379804044036870, 0.568338665018155440, 0.568297524571427680, +0.568256382703956180, 0.568215239415843620, 0.568174094707192710, 0.568132948578106810, 0.568091801028688610, 0.568050652059040930, 0.568009501669266230, 0.567968349859468200, +0.567927196629749220, 0.567886041980212310, 0.567844885910959830, 0.567803728422095590, 0.567762569513721950, 0.567721409185941610, 0.567680247438858030, 0.567639084272573920, +0.567597919687192090, 0.567556753682815000, 0.567515586259546460, 0.567474417417488940, 0.567433247156745370, 0.567392075477418320, 0.567350902379611500, 0.567309727863427370, +0.567268551928968970, 0.567227374576338760, 0.567186195805640450, 0.567145015616976720, 0.567103834010450500, 0.567062650986164260, 0.567021466544221700, 0.566980280684725610, +0.566939093407778370, 0.566897904713483780, 0.566856714601944420, 0.566815523073263220, 0.566774330127542970, 0.566733135764887150, 0.566691939985398570, 0.566650742789180040, +0.566609544176334360, 0.566568344146965220, 0.566527142701175210, 0.566485939839067250, 0.566444735560744150, 0.566403529866309600, 0.566362322755866180, 0.566321114229517030, +0.566279904287364630, 0.566238692929512900, 0.566197480156064300, 0.566156265967122210, 0.566115050362788970, 0.566073833343168410, 0.566032614908363430, 0.565991395058476400, +0.565950173793611340, 0.565908951113870850, 0.565867727019357950, 0.565826501510175330, 0.565785274586426800, 0.565744046248215170, 0.565702816495643360, 0.565661585328814280, +0.565620352747831400, 0.565579118752797760, 0.565537883343816270, 0.565496646520989740, 0.565455408284421980, 0.565414168634215670, 0.565372927570473970, 0.565331685093299560, +0.565290441202796370, 0.565249195899066970, 0.565207949182214290, 0.565166701052342010, 0.565125451509553070, 0.565084200553950480, 0.565042948185636940, 0.565001694404716480, +0.564960439211291800, 0.564919182605466030, 0.564877924587341870, 0.564836665157023350, 0.564795404314613060, 0.564754142060214350, 0.564712878393929920, 0.564671613315863570, +0.564630346826118230, 0.564589078924797040, 0.564547809612002790, 0.564506538887839420, 0.564465266752409600, 0.564423993205816270, 0.564382718248163440, 0.564341441879553710, +0.564300164100090430, 0.564258884909876300, 0.564217604309015350, 0.564176322297610390, 0.564135038875764660, 0.564093754043580970, 0.564052467801163250, 0.564011180148614290, +0.563969891086037460, 0.563928600613535560, 0.563887308731212400, 0.563846015439171120, 0.563804720737514750, 0.563763424626346100, 0.563722127105769410, 0.563680828175887380, +0.563639527836802820, 0.563598226088619870, 0.563556922931441330, 0.563515618365370560, 0.563474312390510270, 0.563433005006964580, 0.563391696214836420, 0.563350386014229040, +0.563309074405245250, 0.563267761387989290, 0.563226446962563740, 0.563185131129072200, 0.563143813887617360, 0.563102495238303470, 0.563061175181233330, 0.563019853716510200, +0.562978530844237100, 0.562937206564517960, 0.562895880877455900, 0.562854553783154080, 0.562813225281715510, 0.562771895373244350, 0.562730564057843270, 0.562689231335615550, +0.562647897206665080, 0.562606561671094910, 0.562565224729008270, 0.562523886380508210, 0.562482546625698850, 0.562441205464683010, 0.562399862897564270, 0.562358518924445440, +0.562317173545430760, 0.562275826760623150, 0.562234478570125870, 0.562193128974042060, 0.562151777972475840, 0.562110425565530150, 0.562069071753308340, 0.562027716535913550, +0.561986359913449920, 0.561945001886020260, 0.561903642453727700, 0.561862281616676510, 0.561820919374969590, 0.561779555728710300, 0.561738190678001900, 0.561696824222948200, +0.561655456363652550, 0.561614087100218320, 0.561572716432748420, 0.561531344361347110, 0.561489970886117410, 0.561448596007162790, 0.561407219724586400, 0.561365842038492270, +0.561324462948983530, 0.561283082456163650, 0.561241700560135670, 0.561200317261003720, 0.561158932558871170, 0.561117546453840820, 0.561076158946016920, 0.561034770035502730, +0.560993379722401490, 0.560951988006816560, 0.560910594888851980, 0.560869200368610880, 0.560827804446196840, 0.560786407121712790, 0.560745008395263200, 0.560703608266951090, +0.560662206736879940, 0.560620803805153000, 0.560579399471874300, 0.560537993737147080, 0.560496586601074930, 0.560455178063760990, 0.560413768125309410, 0.560372356785823420, +0.560330944045406620, 0.560289529904161920, 0.560248114362193910, 0.560206697419605600, 0.560165279076500160, 0.560123859332981810, 0.560082438189153930, 0.560041015645119880, +0.559999591700982900, 0.559958166356847360, 0.559916739612816410, 0.559875311468993610, 0.559833881925482220, 0.559792450982386390, 0.559751018639809470, 0.559709584897855050, +0.559668149756626150, 0.559626713216227370, 0.559585275276761830, 0.559543835938333010, 0.559502395201044280, 0.559460953064999990, 0.559419509530303170, 0.559378064597057410, +0.559336618265366740, 0.559295170535334510, 0.559253721407064310, 0.559212270880659500, 0.559170818956224450, 0.559129365633862290, 0.559087910913676710, 0.559046454795770980, +0.559004997280249440, 0.558963538367215460, 0.558922078056772630, 0.558880616349024200, 0.558839153244074630, 0.558797688742027180, 0.558756222842985540, 0.558714755547052970, +0.558673286854333820, 0.558631816764931450, 0.558590345278949240, 0.558548872396491540, 0.558507398117661590, 0.558465922442563210, 0.558424445371299650, 0.558382966903975260, +0.558341487040693530, 0.558300005781558030, 0.558258523126672230, 0.558217039076140400, 0.558175553630065990, 0.558134066788552820, 0.558092578551703910, 0.558051088919624070, +0.558009597892416440, 0.557968105470184830, 0.557926611653032590, 0.557885116441064310, 0.557843619834383020, 0.557802121833092410, 0.557760622437296960, 0.557719121647099800, +0.557677619462604970, 0.557636115883915600, 0.557594610911136380, 0.557553104544370680, 0.557511596783722090, 0.557470087629294290, 0.557428577081191530, 0.557387065139517300, +0.557345551804375510, 0.557304037075869400, 0.557262520954103560, 0.557221003439181460, 0.557179484531206910, 0.557137964230283170, 0.557096442536514910, 0.557054919450005630, +0.557013394970858890, 0.556971869099178510, 0.556930341835068620, 0.556888813178633040, 0.556847283129974890, 0.556805751689198990, 0.556764218856408810, 0.556722684631707930, +0.556681149015200050, 0.556639612006989640, 0.556598073607180170, 0.556556533815875550, 0.556514992633179270, 0.556473450059195800, 0.556431906094028710, 0.556390360737781920, +0.556348813990558800, 0.556307265852464040, 0.556265716323601110, 0.556224165404073930, 0.556182613093985870, 0.556141059393441720, 0.556099504302544960, 0.556057947821398950, +0.556016389950108600, 0.555974830688777180, 0.555933270037508700, 0.555891707996406640, 0.555850144565575690, 0.555808579745119320, 0.555767013535141690, 0.555725445935746020, +0.555683876947037140, 0.555642306569118500, 0.555600734802094150, 0.555559161646067560, 0.555517587101143520, 0.555476011167425400, 0.555434433845017340, 0.555392855134022810, +0.555351275034546510, 0.555309693546692020, 0.555268110670562920, 0.555226526406263910, 0.555184940753898570, 0.555143353713570930, 0.555101765285384460, 0.555060175469443970, +0.555018584265853040, 0.554976991674715700, 0.554935397696135540, 0.554893802330217120, 0.554852205577064270, 0.554810607436780900, 0.554769007909470700, 0.554727406995238260, +0.554685804694187380, 0.554644201006421980, 0.554602595932045640, 0.554560989471163170, 0.554519381623878370, 0.554477772390294940, 0.554436161770516800, 0.554394549764648640, +0.554352936372794040, 0.554311321595056810, 0.554269705431541640, 0.554228087882352120, 0.554186468947592490, 0.554144848627366240, 0.554103226921778270, 0.554061603830932280, +0.554019979354932190, 0.553978353493881800, 0.553936726247885920, 0.553895097617048250, 0.553853467601472800, 0.553811836201263290, 0.553770203416524610, 0.553728569247360360, +0.553686933693874780, 0.553645296756171360, 0.553603658434355220, 0.553562018728529840, 0.553520377638799020, 0.553478735165267690, 0.553437091308039530, 0.553395446067218580, +0.553353799442908740, 0.553312151435214730, 0.553270502044240330, 0.553228851270089580, 0.553187199112866510, 0.553145545572675700, 0.553103890649621070, 0.553062234343806640, +0.553020576655336330, 0.552978917584314940, 0.552937257130846290, 0.552895595295034400, 0.552853932076983190, 0.552812267476797570, 0.552770601494581240, 0.552728934130438110, +0.552687265384472880, 0.552645595256789580, 0.552603923747492230, 0.552562250856684760, 0.552520576584472070, 0.552478900930957860, 0.552437223896246390, 0.552395545480441560, +0.552353865683648190, 0.552312184505970080, 0.552270501947511590, 0.552228818008376530, 0.552187132688669700, 0.552145445988495130, 0.552103757907956850, 0.552062068447158880, +0.552020377606206040, 0.551978685385202340, 0.551936991784251480, 0.551895296803458610, 0.551853600442927420, 0.551811902702762260, 0.551770203583066940, 0.551728503083946500, +0.551686801205504730, 0.551645097947846110, 0.551603393311074220, 0.551561687295294310, 0.551519979900610190, 0.551478271127126110, 0.551436560974945980, 0.551394849444174720, +0.551353136534916470, 0.551311422247275250, 0.551269706581355210, 0.551227989537261260, 0.551186271115097330, 0.551144551314967760, 0.551102830136976360, 0.551061107581228280, +0.551019383647827430, 0.550977658336877730, 0.550935931648484310, 0.550894203582751100, 0.550852474139782330, 0.550810743319681940, 0.550769011122555160, 0.550727277548505810, +0.550685542597638240, 0.550643806270056490, 0.550602068565865580, 0.550560329485169530, 0.550518589028072600, 0.550476847194678820, 0.550435103985093320, 0.550393359399420020, +0.550351613437763400, 0.550309866100227360, 0.550268117386916940, 0.550226367297936390, 0.550184615833389400, 0.550142862993381330, 0.550101108778015990, 0.550059353187397960, +0.550017596221631160, 0.549975837880820830, 0.549934078165070780, 0.549892317074485600, 0.549850554609169210, 0.549808790769226840, 0.549767025554762530, 0.549725258965880650, +0.549683491002685210, 0.549641721665281360, 0.549599950953773230, 0.549558178868265300, 0.549516405408861490, 0.549474630575667140, 0.549432854368786080, 0.549391076788322550, +0.549349297834381690, 0.549307517507067630, 0.549265735806484750, 0.549223952732737160, 0.549182168285930140, 0.549140382466167590, 0.549098595273554090, 0.549056806708193790, +0.549015016770191820, 0.548973225459652330, 0.548931432776679770, 0.548889638721378190, 0.548847843293852940, 0.548806046494208060, 0.548764248322548110, 0.548722448778977130, +0.548680647863600380, 0.548638845576522090, 0.548597041917846640, 0.548555236887678150, 0.548513430486122000, 0.548471622713282310, 0.548429813569263120, 0.548388003054169790, +0.548346191168106460, 0.548304377911177700, 0.548262563283487550, 0.548220747285141470, 0.548178929916243400, 0.548137111176898010, 0.548095291067209560, 0.548053469587283180, +0.548011646737223130, 0.547969822517134000, 0.547927996927119910, 0.547886169967286230, 0.547844341637737100, 0.547802511938577210, 0.547760680869910590, 0.547718848431842600, +0.547677014624477490, 0.547635179447919510, 0.547593342902274020, 0.547551504987645040, 0.547509665704137390, 0.547467825051855210, 0.547425983030903840, 0.547384139641387430, +0.547342294883410680, 0.547300448757077950, 0.547258601262494370, 0.547216752399764310, 0.547174902168992340, 0.547133050570282720, 0.547091197603740920, 0.547049343269471080, +0.547007487567577890, 0.546965630498165600, 0.546923772061339690, 0.546881912257204280, 0.546840051085863640, 0.546798188547423350, 0.546756324641987530, 0.546714459369661010, +0.546672592730547910, 0.546630724724753600, 0.546588855352382550, 0.546546984613539450, 0.546505112508328450, 0.546463239036855010, 0.546421364199223490, 0.546379487995538590, +0.546337610425904560, 0.546295731490426870, 0.546253851189209880, 0.546211969522358180, 0.546170086489976340, 0.546128202092169500, 0.546086316329042250, 0.546044429200699180, +0.546002540707244630, 0.545960650848784200, 0.545918759625422020, 0.545876867037262680, 0.545834973084411530, 0.545793077766972940, 0.545751181085051610, 0.545709283038751990, +0.545667383628179460, 0.545625482853438590, 0.545583580714633980, 0.545541677211869970, 0.545499772345252150, 0.545457866114885000, 0.545415958520873100, 0.545374049563321030, +0.545332139242334040, 0.545290227558016820, 0.545248314510474060, 0.545206400099810030, 0.545164484326130520, 0.545122567189539660, 0.545080648690142060, 0.545038728828043270, +0.544996807603347570, 0.544954885016159850, 0.544912961066584600, 0.544871035754727280, 0.544829109080692490, 0.544787181044584790, 0.544745251646508780, 0.544703320886570030, +0.544661388764873020, 0.544619455281522450, 0.544577520436623000, 0.544535584230280030, 0.544493646662598030, 0.544451707733682010, 0.544409767443636340, 0.544367825792566710, +0.544325882780577360, 0.544283938407773000, 0.544241992674259210, 0.544200045580140350, 0.544158097125521430, 0.544116147310506950, 0.544074196135202360, 0.544032243599712360, +0.543990289704141650, 0.543948334448594920, 0.543906377833177750, 0.543864419857994610, 0.543822460523150420, 0.543780499828749650, 0.543738537774898110, 0.543696574361700160, +0.543654609589260820, 0.543612643457684560, 0.543570675967076980, 0.543528707117542860, 0.543486736909186470, 0.543444765342113720, 0.543402792416428970, 0.543360818132237240, +0.543318842489643130, 0.543276865488752310, 0.543234887129669270, 0.543192907412499040, 0.543150926337346180, 0.543108943904316410, 0.543066960113514190, 0.543024974965044650, +0.542982988459012270, 0.542941000595522750, 0.542899011374680770, 0.542857020796591260, 0.542815028861358790, 0.542773035569089180, 0.542731040919887000, 0.542689044913857170, +0.542647047551104380, 0.542605048831734330, 0.542563048755851600, 0.542521047323560990, 0.542479044534968090, 0.542437040390177480, 0.542395034889294410, 0.542353028032423250, +0.542311019819670000, 0.542269010251139160, 0.542226999326935850, 0.542184987047164560, 0.542142973411931290, 0.542100958421340540, 0.542058942075497320, 0.542016924374506440, +0.541974905318473700, 0.541932884907503580, 0.541890863141701320, 0.541848840021171400, 0.541806815546019840, 0.541764789716351340, 0.541722762532270360, 0.541680733993882950, +0.541638704101293560, 0.541596672854607550, 0.541554640253929410, 0.541512606299365040, 0.541470570991019140, 0.541428534328996850, 0.541386496313402850, 0.541344456944343080, +0.541302416221921990, 0.541260374146244950, 0.541218330717416650, 0.541176285935542790, 0.541134239800728280, 0.541092192313078150, 0.541050143472697200, 0.541008093279691240, +0.540966041734165070, 0.540923988836223390, 0.540881934585972110, 0.540839878983515930, 0.540797822028960210, 0.540755763722409410, 0.540713704063969680, 0.540671643053745600, +0.540629580691842530, 0.540587516978365050, 0.540545451913419180, 0.540503385497109630, 0.540461317729541650, 0.540419248610820020, 0.540377178141050680, 0.540335106320338320, +0.540293033148788180, 0.540250958626505180, 0.540208882753595130, 0.540166805530162830, 0.540124726956313530, 0.540082647032152030, 0.540040565757784250, 0.539998483133315110, +0.539956399158849410, 0.539914313834493060, 0.539872227160350880, 0.539830139136528220, 0.539788049763129770, 0.539745959040261680, 0.539703866968028520, 0.539661773546535770, +0.539619678775888230, 0.539577582656191930, 0.539535485187551570, 0.539493386370072490, 0.539451286203859630, 0.539409184689018990, 0.539367081825655290, 0.539324977613873880, +0.539282872053779670, 0.539240765145478700, 0.539198656889075760, 0.539156547284675770, 0.539114436332384870, 0.539072324032307870, 0.539030210384550010, 0.538988095389216330, +0.538945979046412730, 0.538903861356244130, 0.538861742318816010, 0.538819621934233050, 0.538777500202601400, 0.538735377124026080, 0.538693252698612230, 0.538651126926465000, +0.538608999807690280, 0.538566871342393010, 0.538524741530678530, 0.538482610372651880, 0.538440477868419090, 0.538398344018085060, 0.538356208821754830, 0.538314072279534540, +0.538271934391528980, 0.538229795157843530, 0.538187654578583310, 0.538145512653854240, 0.538103369383761470, 0.538061224768410230, 0.538019078807905560, 0.537976931502353590, +0.537934782851859250, 0.537892632856528000, 0.537850481516464750, 0.537808328831775760, 0.537766174802565830, 0.537724019428940550, 0.537681862711004820, 0.537639704648864790, +0.537597545242625490, 0.537555384492392040, 0.537513222398270370, 0.537471058960365730, 0.537428894178783480, 0.537386728053628530, 0.537344560585007120, 0.537302391773024410, +0.537260221617785640, 0.537218050119396050, 0.537175877277961570, 0.537133703093587430, 0.537091527566379120, 0.537049350696441550, 0.537007172483880970, 0.536964992928802510, +0.536922812031311540, 0.536880629791513190, 0.536838446209513600, 0.536796261285417910, 0.536754075019331480, 0.536711887411359560, 0.536669698461608390, 0.536627508170182900, +0.536585316537188220, 0.536543123562730600, 0.536500929246915280, 0.536458733589847530, 0.536416536591632690, 0.536374338252376790, 0.536332138572185090, 0.536289937551163050, +0.536247735189415710, 0.536205531487049520, 0.536163326444169420, 0.536121120060881080, 0.536078912337289550, 0.536036703273501060, 0.535994492869620860, 0.535952281125754330, +0.535910068042006800, 0.535867853618484550, 0.535825637855292580, 0.535783420752536150, 0.535741202310321520, 0.535698982528753920, 0.535656761407938830, 0.535614538947981500, +0.535572315148988180, 0.535530090011064000, 0.535487863534314770, 0.535445635718845400, 0.535403406564762260, 0.535361176072170710, 0.535318944241176100, 0.535276711071883900, +0.535234476564400150, 0.535192240718830310, 0.535150003535279860, 0.535107765013854040, 0.535065525154659110, 0.535023283957800410, 0.534981041423383210, 0.534938797551513630, +0.534896552342297160, 0.534854305795839260, 0.534812057912245290, 0.534769808691621380, 0.534727558134073130, 0.534685306239705890, 0.534643053008625020, 0.534600798440937000, +0.534558542536746840, 0.534516285296160350, 0.534474026719282790, 0.534431766806220620, 0.534389505557078980, 0.534347242971963570, 0.534304979050979620, 0.534262713794233620, +0.534220447201830930, 0.534178179273877010, 0.534135910010477330, 0.534093639411738260, 0.534051367477765050, 0.534009094208663050, 0.533966819604538620, 0.533924543665497240, +0.533882266391644490, 0.533839987783085720, 0.533797707839927300, 0.533755426562274700, 0.533713143950233390, 0.533670860003908950, 0.533628574723407740, 0.533586288108835020, +0.533544000160296680, 0.533501710877897880, 0.533459420261745200, 0.533417128311943990, 0.533374835028599950, 0.533332540411818430, 0.533290244461705920, 0.533247947178367880, +0.533205648561909550, 0.533163348612437420, 0.533121047330057050, 0.533078744714873930, 0.533036440766993640, 0.532994135486522640, 0.532951828873566180, 0.532909520928230300, +0.532867211650620120, 0.532824901040842350, 0.532782589099002330, 0.532740275825205890, 0.532697961219558260, 0.532655645282166250, 0.532613328013134990, 0.532571009412570520, +0.532528689480578080, 0.532486368217264250, 0.532444045622734620, 0.532401721697094430, 0.532359396440450270, 0.532317069852907720, 0.532274741934572470, 0.532232412685549880, +0.532190082105946760, 0.532147750195868460, 0.532105416955420680, 0.532063082384709010, 0.532020746483840010, 0.531978409252919170, 0.531936070692052290, 0.531893730801344830, +0.531851389580903500, 0.531809047030833650, 0.531766703151241190, 0.531724357942231500, 0.531682011403911470, 0.531639663536386250, 0.531597314339761540, 0.531554963814144020, +0.531512611959638950, 0.531470258776352460, 0.531427904264389910, 0.531385548423857990, 0.531343191254862180, 0.531300832757508390, 0.531258472931902090, 0.531216111778150090, +0.531173749296357740, 0.531131385486631080, 0.531089020349075460, 0.531046653883797790, 0.531004286090903440, 0.530961916970498330, 0.530919546522688130, 0.530877174747579340, +0.530834801645277740, 0.530792427215889040, 0.530750051459518920, 0.530707674376274090, 0.530665295966260000, 0.530622916229582350, 0.530580535166347730, 0.530538152776661830, +0.530495769060630560, 0.530453384018359510, 0.530410997649955250, 0.530368609955523600, 0.530326220935170460, 0.530283830589001300, 0.530241438917122940, 0.530199045919641070, +0.530156651596661480, 0.530114255948289980, 0.530071858974633160, 0.530029460675796700, 0.529987061051886530, 0.529944660103008450, 0.529902257829269030, 0.529859854230773970, +0.529817449307628970, 0.529775043059940610, 0.529732635487814680, 0.529690226591357230, 0.529647816370673710, 0.529605404825871150, 0.529562991957055030, 0.529520577764331370, +0.529478162247805970, 0.529435745407585530, 0.529393327243775750, 0.529350907756482520, 0.529308486945811780, 0.529266064811870220, 0.529223641354763410, 0.529181216574597490, +0.529138790471478160, 0.529096363045512330, 0.529053934296805470, 0.529011504225463500, 0.528969072831593000, 0.528926640115300000, 0.528884206076690290, 0.528841770715869690, +0.528799334032945100, 0.528756896028022120, 0.528714456701206870, 0.528672016052605160, 0.528629574082323810, 0.528587130790468480, 0.528544686177145340, 0.528502240242460060, +0.528459792986519570, 0.528417344409429670, 0.528374894511296380, 0.528332443292225510, 0.528289990752323750, 0.528247536891697230, 0.528205081710451660, 0.528162625208693170, +0.528120167386528450, 0.528077708244063300, 0.528035247781403430, 0.527992785998655960, 0.527950322895926470, 0.527907858473321110, 0.527865392730945790, 0.527822925668907320, +0.527780457287311600, 0.527737987586264670, 0.527695516565872440, 0.527653044226241820, 0.527610570567478510, 0.527568095589688870, 0.527525619292978480, 0.527483141677454470, +0.527440662743222650, 0.527398182490389170, 0.527355700919059810, 0.527313218029341610, 0.527270733821340380, 0.527228248295162020, 0.527185761450913230, 0.527143273288700140, +0.527100783808628900, 0.527058293010805310, 0.527015800895336280, 0.526973307462327840, 0.526930812711886020, 0.526888316644116950, 0.526845819259127320, 0.526803320557023170, +0.526760820537910850, 0.526718319201895930, 0.526675816549085680, 0.526633312579585900, 0.526590807293502830, 0.526548300690942270, 0.526505792772011480, 0.526463283536816040, +0.526420772985462190, 0.526378261118056630, 0.526335747934705500, 0.526293233435515040, 0.526250717620591060, 0.526208200490040690, 0.526165682043969850, 0.526123162282484680, +0.526080641205691310, 0.526038118813696780, 0.525995595106606870, 0.525953070084527960, 0.525910543747566070, 0.525868016095828120, 0.525825487129420230, 0.525782956848448560, +0.525740425253019120, 0.525697892343238940, 0.525655358119214040, 0.525612822581050470, 0.525570285728855110, 0.525527747562734130, 0.525485208082793750, 0.525442667289140020, +0.525400125181879840, 0.525357581761119460, 0.525315037026965140, 0.525272490979522780, 0.525229943618899630, 0.525187394945201610, 0.525144844958535080, 0.525102293659006180, +0.525059741046721820, 0.525017187121788020, 0.524974631884311370, 0.524932075334397790, 0.524889517472154290, 0.524846958297687130, 0.524804397811102440, 0.524761836012506480, +0.524719272902006260, 0.524676708479707820, 0.524634142745717290, 0.524591575700141810, 0.524549007343087290, 0.524506437674660320, 0.524463866694966810, 0.524421294404114110, +0.524378720802208150, 0.524336145889355400, 0.524293569665661870, 0.524250992131234720, 0.524208413286180170, 0.524165833130604610, 0.524123251664614040, 0.524080668888315840, +0.524038084801815800, 0.523995499405220610, 0.523952912698636310, 0.523910324682170140, 0.523867735355928120, 0.523825144720016400, 0.523782552774542220, 0.523739959519611610, +0.523697364955331040, 0.523654769081806750, 0.523612171899146000, 0.523569573407454690, 0.523526973606839530, 0.523484372497406540, 0.523441770079262960, 0.523399166352514930, +0.523356561317269040, 0.523313954973631310, 0.523271347321709210, 0.523228738361608660, 0.523186128093436230, 0.523143516517298070, 0.523100903633301640, 0.523058289441552860, +0.523015673942157980, 0.522973057135224240, 0.522930439020857900, 0.522887819599165530, 0.522845198870253160, 0.522802576834228150, 0.522759953491196750, 0.522717328841265540, +0.522674702884540540, 0.522632075621129120, 0.522589447051137520, 0.522546817174672330, 0.522504185991839790, 0.522461553502747140, 0.522418919707500540, 0.522376284606206660, +0.522333648198971660, 0.522291010485902980, 0.522248371467106790, 0.522205731142689640, 0.522163089512757810, 0.522120446577418520, 0.522077802336778250, 0.522035156790943030, +0.521992509940020330, 0.521949861784116290, 0.521907212323337700, 0.521864561557790600, 0.521821909487582560, 0.521779256112819720, 0.521736601433608670, 0.521693945450055870, +0.521651288162268470, 0.521608629570352920, 0.521565969674415710, 0.521523308474563300, 0.521480645970902930, 0.521437982163540980, 0.521395317052584020, 0.521352650638138400, +0.521309982920311610, 0.521267313899209770, 0.521224643574939360, 0.521181971947607630, 0.521139299017321030, 0.521096624784186170, 0.521053949248309390, 0.521011272409798050, +0.520968594268758630, 0.520925914825297600, 0.520883234079521530, 0.520840552031537670, 0.520797868681452500, 0.520755184029372600, 0.520712498075404320, 0.520669810819655240, +0.520627122262231620, 0.520584432403240150, 0.520541741242787290, 0.520499048780980410, 0.520456355017925980, 0.520413659953730230, 0.520370963588500660, 0.520328265922343820, +0.520285566955366210, 0.520242866687674280, 0.520200165119375610, 0.520157462250576570, 0.520114758081383740, 0.520072052611903810, 0.520029345842244030, 0.519986637772510860, +0.519943928402811120, 0.519901217733251260, 0.519858505763938660, 0.519815792494979780, 0.519773077926481420, 0.519730362058550050, 0.519687644891293040, 0.519644926424817080, +0.519602206659228290, 0.519559485594634380, 0.519516763231141820, 0.519474039568857290, 0.519431314607887380, 0.519388588348339450, 0.519345860790320080, 0.519303131933936070, +0.519260401779293890, 0.519217670326501010, 0.519174937575664020, 0.519132203526889600, 0.519089468180284340, 0.519046731535955820, 0.519003993594010500, 0.518961254354555090, +0.518918513817696270, 0.518875771983541510, 0.518833028852197290, 0.518790284423770510, 0.518747538698367650, 0.518704791676096290, 0.518662043357063010, 0.518619293741374170, +0.518576542829137570, 0.518533790620459570, 0.518491037115447080, 0.518448282314206590, 0.518405526216845770, 0.518362768823471210, 0.518320010134189710, 0.518277250149107750, +0.518234488868333120, 0.518191726291972190, 0.518148962420131980, 0.518106197252918950, 0.518063430790440930, 0.518020663032804250, 0.517977893980115840, 0.517935123632482400, +0.517892351990011490, 0.517849579052809820, 0.517806804820983620, 0.517764029294640940, 0.517721252473888120, 0.517678474358832190, 0.517635694949579730, 0.517592914246238430, +0.517550132248914770, 0.517507348957715770, 0.517464564372748010, 0.517421778494119300, 0.517378991321936100, 0.517336202856305440, 0.517293413097333900, 0.517250622045129170, +0.517207829699797950, 0.517165036061447040, 0.517122241130183240, 0.517079444906114240, 0.517036647389346630, 0.516993848579986980, 0.516951048478143100, 0.516908247083921580, +0.516865444397429430, 0.516822640418773350, 0.516779835148061030, 0.516737028585399050, 0.516694220730894550, 0.516651411584654110, 0.516608601146785530, 0.516565789417395500, +0.516522976396590950, 0.516480162084478560, 0.516437346481166130, 0.516394529586760460, 0.516351711401368370, 0.516308891925096550, 0.516266071158053010, 0.516223249100344230, +0.516180425752077340, 0.516137601113358930, 0.516094775184297030, 0.516051947964998090, 0.516009119455569040, 0.515966289656117460, 0.515923458566750150, 0.515880626187574240, +0.515837792518696330, 0.515794957560224310, 0.515752121312265000, 0.515709283774925310, 0.515666444948312040, 0.515623604832533000, 0.515580763427694990, 0.515537920733905140, +0.515495076751270040, 0.515452231479897600, 0.515409384919894630, 0.515366537071368150, 0.515323687934424960, 0.515280837509172970, 0.515237985795718890, 0.515195132794169400, +0.515152278504632520, 0.515109422927214840, 0.515066566062023720, 0.515023707909165740, 0.514980848468748920, 0.514937987740879950, 0.514895125725665980, 0.514852262423213910, +0.514809397833631550, 0.514766531957025600, 0.514723664793503400, 0.514680796343171650, 0.514637926606138270, 0.514595055582510060, 0.514552183272394270, 0.514509309675897590, +0.514466434793128040, 0.514423558624192310, 0.514380681169197440, 0.514337802428251110, 0.514294922401460350, 0.514252041088932300, 0.514209158490773750, 0.514166274607092740, +0.514123389437995960, 0.514080502983590760, 0.514037615243983950, 0.513994726219283440, 0.513951835909596030, 0.513908944315029090, 0.513866051435689530, 0.513823157271685040, +0.513780261823122750, 0.513737365090109810, 0.513694467072753010, 0.513651567771160500, 0.513608667185439070, 0.513565765315695530, 0.513522862162038020, 0.513479957724573330, +0.513437052003408720, 0.513394144998651210, 0.513351236710408610, 0.513308327138787930, 0.513265416283896440, 0.513222504145841030, 0.513179590724729740, 0.513136676020669480, +0.513093760033767500, 0.513050842764130820, 0.513007924211867360, 0.512965004377084030, 0.512922083259888310, 0.512879160860386870, 0.512836237178687980, 0.512793312214898540, +0.512750385969125810, 0.512707458441476690, 0.512664529632059330, 0.512621599540980630, 0.512578668168347520, 0.512535735514268120, 0.512492801578849470, 0.512449866362198800, +0.512406929864423040, 0.512363992085630330, 0.512321053025927680, 0.512278112685422340, 0.512235171064221340, 0.512192228162432820, 0.512149283980163790, 0.512106338517521410, +0.512063391774612910, 0.512020443751546320, 0.511977494448428550, 0.511934543865367080, 0.511891592002468920, 0.511848638859842110, 0.511805684437593670, 0.511762728735830730, +0.511719771754661210, 0.511676813494192360, 0.511633853954531430, 0.511590893135785540, 0.511547931038062840, 0.511504967661470240, 0.511462003006115220, 0.511419037072104790, +0.511376069859547200, 0.511333101368549370, 0.511290131599218880, 0.511247160551662640, 0.511204188225988790, 0.511161214622304570, 0.511118239740717350, 0.511075263581334040, +0.511032286144262990, 0.510989307429611240, 0.510946327437485910, 0.510903346167995040, 0.510860363621245870, 0.510817379797345760, 0.510774394696401730, 0.510731408318522260, +0.510688420663814150, 0.510645431732385080, 0.510602441524341980, 0.510559450039793190, 0.510516457278845760, 0.510473463241607140, 0.510430467928184580, 0.510387471338686230, +0.510344473473219100, 0.510301474331890880, 0.510258473914808500, 0.510215472222080410, 0.510172469253813540, 0.510129465010115580, 0.510086459491093550, 0.510043452696855800, +0.510000444627509380, 0.509957435283161510, 0.509914424663920340, 0.509871412769893120, 0.509828399601187420, 0.509785385157910390, 0.509742369440170150, 0.509699352448074070, +0.509656334181729620, 0.509613314641243930, 0.509570293826725250, 0.509527271738280940, 0.509484248376018470, 0.509441223740044970, 0.509398197830468690, 0.509355170647396990, +0.509312142190937460, 0.509269112461197100, 0.509226081458284300, 0.509183049182306390, 0.509140015633370410, 0.509096980811584830, 0.509053944717056670, 0.509010907349893740, +0.508967868710203160, 0.508924828798093310, 0.508881787613671420, 0.508838745157044970, 0.508795701428321310, 0.508752656427608810, 0.508709610155014590, 0.508666562610646470, +0.508623513794611460, 0.508580463707018040, 0.508537412347973560, 0.508494359717585500, 0.508451305815961100, 0.508408250643208940, 0.508365194199436040, 0.508322136484749780, +0.508279077499258600, 0.508236017243069770, 0.508192955716290750, 0.508149892919029120, 0.508106828851393020, 0.508063763513489920, 0.508020696905427390, 0.507977629027312800, +0.507934559879254400, 0.507891489461359650, 0.507848417773736240, 0.507805344816491310, 0.507762270589733440, 0.507719195093569890, 0.507676118328108440, 0.507633040293456240, +0.507589960989721760, 0.507546880417012460, 0.507503798575435480, 0.507460715465099520, 0.507417631086111710, 0.507374545438579740, 0.507331458522611190, 0.507288370338314200, +0.507245280885796460, 0.507202190165165430, 0.507159098176528490, 0.507116004919994200, 0.507072910395669930, 0.507029814603663480, 0.506986717544081980, 0.506943619217034120, +0.506900519622627170, 0.506857418760969010, 0.506814316632166810, 0.506771213236329340, 0.506728108573563760, 0.506685002643977870, 0.506641895447679120, 0.506598786984776010, +0.506555677255375980, 0.506512566259586290, 0.506469453997515640, 0.506426340469271260, 0.506383225674961190, 0.506340109614692560, 0.506296992288574050, 0.506253873696713040, +0.506210753839217430, 0.506167632716194470, 0.506124510327752850, 0.506081386673999930, 0.506038261755043520, 0.505995135570991180, 0.505952008121951290, 0.505908879408031420, +0.505865749429339260, 0.505822618185982510, 0.505779485678069520, 0.505736351905707760, 0.505693216869004810, 0.505650080568069150, 0.505606943003008350, 0.505563804173930100, +0.505520664080941980, 0.505477522724152690, 0.505434380103669480, 0.505391236219600360, 0.505348091072052810, 0.505304944661135290, 0.505261796986955500, 0.505218648049621240, +0.505175497849239990, 0.505132346385920310, 0.505089193659769790, 0.505046039670896230, 0.505002884419407220, 0.504959727905411440, 0.504916570129016250, 0.504873411090329350, +0.504830250789459310, 0.504787089226513610, 0.504743926401600150, 0.504700762314826520, 0.504657596966301300, 0.504614430356132180, 0.504571262484426960, 0.504528093351293230, +0.504484922956839550, 0.504441751301173640, 0.504398578384403380, 0.504355404206636160, 0.504312228767980990, 0.504269052068545110, 0.504225874108436670, 0.504182694887763130, +0.504139514406633290, 0.504096332665154630, 0.504053149663435060, 0.504009965401582380, 0.503966779879705060, 0.503923593097910790, 0.503880405056307160, 0.503837215755002950, +0.503794025194105770, 0.503750833373723390, 0.503707640293963530, 0.503664445954935090, 0.503621250356745430, 0.503578053499502690, 0.503534855383314440, 0.503491656008289380, +0.503448455374535200, 0.503405253482159920, 0.503362050331271130, 0.503318845921977510, 0.503275640254386870, 0.503232433328607120, 0.503189225144745840, 0.503146015702911840, +0.503102805003212920, 0.503059593045756540, 0.503016379830651620, 0.502973165358005740, 0.502929949627926920, 0.502886732640522860, 0.502843514395902250, 0.502800294894172990, +0.502757074135442910, 0.502713852119819780, 0.502670628847412430, 0.502627404318328530, 0.502584178532676010, 0.502540951490562770, 0.502497723192097510, 0.502454493637387920, +0.502411262826542140, 0.502368030759667740, 0.502324797436873750, 0.502281562858267750, 0.502238327023957320, 0.502195089934051600, 0.502151851588658160, 0.502108611987885030, +0.502065371131839910, 0.502022129020631920, 0.501978885654368550, 0.501935641033157910, 0.501892395157107820, 0.501849148026327070, 0.501805899640923480, 0.501762650001005170, +0.501719399106679840, 0.501676146958056400, 0.501632893555242650, 0.501589638898346620, 0.501546382987476110, 0.501503125822739930, 0.501459867404246080, 0.501416607732102060, +0.501373346806416990, 0.501330084627298560, 0.501286821194854900, 0.501243556509193720, 0.501200290570424150, 0.501157023378653750, 0.501113754933990910, 0.501070485236543180, +0.501027214286419720, 0.500983942083728210, 0.500940668628576780, 0.500897393921073350, 0.500854117961326840, 0.500810840749444930, 0.500767562285535980, 0.500724282569707800, +0.500681001602069190, 0.500637719382728160, 0.500594435911792760, 0.500551151189370990, 0.500507865215571670, 0.500464577990502590, 0.500421289514271780, 0.500377999786988160, +0.500334708808759520, 0.500291416579694110, 0.500248123099899740, 0.500204828369485430, 0.500161532388559090, 0.500118235157228860, 0.500074936675602770, 0.500031636943789600, +0.499988335961897460, 0.499945033730034400, 0.499901730248308420, 0.499858425516828460, 0.499815119535702460, 0.499771812305038640, 0.499728503824944940, 0.499685194095530310, +0.499641883116902720, 0.499598570889170030, 0.499555257412441330, 0.499511942686824470, 0.499468626712427750, 0.499425309489359090, 0.499381991017727510, 0.499338671297640980, +0.499295350329207800, 0.499252028112535770, 0.499208704647734150, 0.499165379934910720, 0.499122053974173860, 0.499078726765631480, 0.499035398309392640, 0.498992068605565330, +0.498948737654257850, 0.498905405455578100, 0.498862072009635280, 0.498818737316537250, 0.498775401376391980, 0.498732064189308600, 0.498688725755395080, 0.498645386074759720, +0.498602045147510550, 0.498558702973756600, 0.498515359553605930, 0.498472014887166860, 0.498428668974547350, 0.498385321815856540, 0.498341973411202450, 0.498298623760693450, +0.498255272864437440, 0.498211920722543720, 0.498168567335120100, 0.498125212702275110, 0.498081856824116710, 0.498038499700754090, 0.497995141332295170, 0.497951781718848410, +0.497908420860521780, 0.497865058757424540, 0.497821695409664590, 0.497778330817350070, 0.497734964980590110, 0.497691597899492690, 0.497648229574166320, 0.497604860004718990, +0.497561489191259860, 0.497518117133897040, 0.497474743832738870, 0.497431369287893550, 0.497387993499470100, 0.497344616467576720, 0.497301238192321800, 0.497257858673813390, +0.497214477912160720, 0.497171095907471830, 0.497127712659855230, 0.497084328169418940, 0.497040942436272230, 0.496997555460523210, 0.496954167242279870, 0.496910777781651490, +0.496867387078746170, 0.496823995133672370, 0.496780601946538230, 0.496737207517452930, 0.496693811846524670, 0.496650414933861810, 0.496607016779572590, 0.496563617383766200, +0.496520216746550720, 0.496476814868034740, 0.496433411748326340, 0.496390007387534800, 0.496346601785768230, 0.496303194943135130, 0.496259786859743700, 0.496216377535703130, +0.496172966971121680, 0.496129555166107410, 0.496086142120769620, 0.496042727835216520, 0.495999312309556570, 0.495955895543897910, 0.495912477538349940, 0.495869058293020800, +0.495825637808018970, 0.495782216083452690, 0.495738793119431250, 0.495695368916062810, 0.495651943473455980, 0.495608516791718860, 0.495565088870960900, 0.495521659711290140, +0.495478229312815270, 0.495434797675644470, 0.495391364799886990, 0.495347930685651190, 0.495304495333045490, 0.495261058742178180, 0.495217620913158630, 0.495174181846095020, +0.495130741541095600, 0.495087299998269670, 0.495043857217725480, 0.495000413199571660, 0.494956967943916410, 0.494913521450869200, 0.494870073720538100, 0.494826624753031850, +0.494783174548458660, 0.494739723106927930, 0.494696270428547860, 0.494652816513427130, 0.494609361361673940, 0.494565904973397750, 0.494522447348706820, 0.494478988487709770, +0.494435528390514860, 0.494392067057231540, 0.494348604487968020, 0.494305140682832600, 0.494261675641934680, 0.494218209365382630, 0.494174741853285030, 0.494131273105750220, +0.494087803122887580, 0.494044331904805460, 0.494000859451612480, 0.493957385763416970, 0.493913910840328430, 0.493870434682455060, 0.493826957289905610, 0.493783478662788380, +0.493739998801212890, 0.493696517705287330, 0.493653035375120510, 0.493609551810820720, 0.493566067012497440, 0.493522580980258970, 0.493479093714213670, 0.493435605214471050, +0.493392115481139370, 0.493348624514327430, 0.493305132314143520, 0.493261638880697240, 0.493218144214096770, 0.493174648314451010, 0.493131151181868180, 0.493087652816457890, +0.493044153218328510, 0.493000652387588670, 0.492957150324346840, 0.492913647028712540, 0.492870142500794140, 0.492826636740700320, 0.492783129748539550, 0.492739621524421360, +0.492696112068454100, 0.492652601380746180, 0.492609089461407130, 0.492565576310545430, 0.492522061928269690, 0.492478546314688460, 0.492435029469911250, 0.492391511394046470, +0.492347992087202870, 0.492304471549488920, 0.492260949781014200, 0.492217426781887070, 0.492173902552216440, 0.492130377092110600, 0.492086850401679210, 0.492043322481030720, +0.491999793330273940, 0.491956262949517280, 0.491912731338870310, 0.491869198498441570, 0.491825664428339800, 0.491782129128673470, 0.491738592599552220, 0.491695054841084500, +0.491651515853378740, 0.491607975636544570, 0.491564434190690510, 0.491520891515925320, 0.491477347612357510, 0.491433802480096720, 0.491390256119251470, 0.491346708529930510, +0.491303159712242420, 0.491259609666296840, 0.491216058392202230, 0.491172505890067450, 0.491128952160001080, 0.491085397202112640, 0.491041841016510720, 0.490998283603304220, +0.490954724962601620, 0.490911165094512600, 0.490867603999145700, 0.490824041676609310, 0.490780478127013310, 0.490736913350466040, 0.490693347347076540, 0.490649780116953260, +0.490606211660205900, 0.490562641976942990, 0.490519071067273550, 0.490475498931305990, 0.490431925569150050, 0.490388350980914380, 0.490344775166707770, 0.490301198126638860, +0.490257619860817280, 0.490214040369351730, 0.490170459652351060, 0.490126877709923860, 0.490083294542179800, 0.490039710149227540, 0.489996124531175640, 0.489952537688133790, +0.489908949620210590, 0.489865360327515040, 0.489821769810155680, 0.489778178068242310, 0.489734585101883500, 0.489690990911188170, 0.489647395496265010, 0.489603798857223770, +0.489560200994173020, 0.489516601907221740, 0.489473001596478610, 0.489429400062053320, 0.489385797304054570, 0.489342193322591320, 0.489298588117772160, 0.489254981689706940, +0.489211374038504290, 0.489167765164273180, 0.489124155067122310, 0.489080543747161370, 0.489036931204499150, 0.488993317439244120, 0.488949702451506260, 0.488906086241394140, +0.488862468809016790, 0.488818850154482840, 0.488775230277902210, 0.488731609179383520, 0.488687986859035750, 0.488644363316967640, 0.488600738553289000, 0.488557112568108520, +0.488513485361535270, 0.488469856933677950, 0.488426227284646350, 0.488382596414549170, 0.488338964323495490, 0.488295331011594060, 0.488251696478954610, 0.488208060725686010, +0.488164423751896840, 0.488120785557696950, 0.488077146143195140, 0.488033505508500440, 0.487989863653721660, 0.487946220578968530, 0.487902576284349850, 0.487858930769974770, +0.487815284035951980, 0.487771636082391320, 0.487727986909401610, 0.487684336517091920, 0.487640684905571000, 0.487597032074948760, 0.487553378025333940, 0.487509722756835680, +0.487466066269562680, 0.487422408563624950, 0.487378749639131190, 0.487335089496190140, 0.487291428134911830, 0.487247765555404890, 0.487204101757778560, 0.487160436742141540, +0.487116770508603860, 0.487073103057274250, 0.487029434388261910, 0.486985764501675520, 0.486942093397625180, 0.486898421076219560, 0.486854747537567910, 0.486811072781778990, +0.486767396808962800, 0.486723719619228110, 0.486680041212684100, 0.486636361589439630, 0.486592680749604660, 0.486548998693287940, 0.486505315420598330, 0.486461630931645850, +0.486417945226539310, 0.486374258305387890, 0.486330570168300390, 0.486286880815386900, 0.486243190246756220, 0.486199498462517530, 0.486155805462779700, 0.486112111247652800, +0.486068415817245580, 0.486024719171667340, 0.485981021311026880, 0.485937322235434290, 0.485893621944998360, 0.485849920439828390, 0.485806217720033240, 0.485762513785722940, +0.485718808637006340, 0.485675102273992740, 0.485631394696791010, 0.485587685905511160, 0.485543975900262050, 0.485500264681152650, 0.485456552248292980, 0.485412838601791960, +0.485369123741758830, 0.485325407668302460, 0.485281690381533020, 0.485237971881559260, 0.485194252168490660, 0.485150531242436010, 0.485106809103505400, 0.485063085751807790, +0.485019361187452480, 0.484975635410548390, 0.484931908421205540, 0.484888180219532950, 0.484844450805639930, 0.484800720179635380, 0.484756988341629450, 0.484713255291730980, +0.484669521030049010, 0.484625785556693670, 0.484582048871773810, 0.484538310975398840, 0.484494571867677750, 0.484450831548720540, 0.484407090018636300, 0.484363347277534330, +0.484319603325523600, 0.484275858162714290, 0.484232111789215270, 0.484188364205136000, 0.484144615410585450, 0.484100865405673710, 0.484057114190509840, 0.484013361765203150, +0.483969608129862730, 0.483925853284598640, 0.483882097229519910, 0.483838339964735520, 0.483794581490355700, 0.483750821806489480, 0.483707060913246110, 0.483663298810734780, +0.483619535499065560, 0.483575770978347470, 0.483532005248690000, 0.483488238310202100, 0.483444470162994020, 0.483400700807174730, 0.483356930242853700, 0.483313158470139950, +0.483269385489143720, 0.483225611299973990, 0.483181835902740280, 0.483138059297551550, 0.483094281484518110, 0.483050502463748920, 0.483006722235353460, 0.482962940799440850, +0.482919158156121240, 0.482875374305503760, 0.482831589247697480, 0.482787802982812540, 0.482744015510958190, 0.482700226832243730, 0.482656436946778340, 0.482612645854672230, +0.482568853556034520, 0.482525060050974670, 0.482481265339601780, 0.482437469422026140, 0.482393672298356780, 0.482349873968703270, 0.482306074433174690, 0.482262273691881290, +0.482218471744932260, 0.482174668592436960, 0.482130864234504690, 0.482087058671245570, 0.482043251902768870, 0.481999443929183650, 0.481955634750600160, 0.481911824367127590, +0.481868012778875480, 0.481824199985952940, 0.481780385988470340, 0.481736570786536700, 0.481692754380261660, 0.481648936769754400, 0.481605117955125120, 0.481561297936483060, +0.481517476713937740, 0.481473654287598360, 0.481429830657575220, 0.481386005823977560, 0.481342179786914850, 0.481298352546496280, 0.481254524102832200, 0.481210694456031870, +0.481166863606204360, 0.481123031553460090, 0.481079198297908290, 0.481035363839658450, 0.480991528178819850, 0.480947691315502750, 0.480903853249816490, 0.480860013981870560, +0.480816173511774190, 0.480772331839637860, 0.480728488965570630, 0.480684644889682160, 0.480640799612081730, 0.480596953132879700, 0.480553105452185270, 0.480509256570108070, +0.480465406486757340, 0.480421555202243500, 0.480377702716675740, 0.480333849030163350, 0.480289994142816760, 0.480246138054745140, 0.480202280766058200, 0.480158422276865170, +0.480114562587276470, 0.480070701697401350, 0.480026839607349490, 0.479982976317230140, 0.479939111827153710, 0.479895246137229500, 0.479851379247567210, 0.479807511158276080, +0.479763641869466570, 0.479719771381247940, 0.479675899693729870, 0.479632026807021660, 0.479588152721233780, 0.479544277436475540, 0.479500400952856620, 0.479456523270486270, +0.479412644389475010, 0.479368764309932140, 0.479324883031966960, 0.479281000555689950, 0.479237116881210510, 0.479193232008638230, 0.479149345938082450, 0.479105458669653710, +0.479061570203461350, 0.479017680539615080, 0.478973789678224180, 0.478929897619399190, 0.478886004363249460, 0.478842109909884740, 0.478798214259414380, 0.478754317411948850, +0.478710419367597510, 0.478666520126470150, 0.478622619688676090, 0.478578718054325840, 0.478534815223528810, 0.478490911196394360, 0.478447005973033020, 0.478403099553554200, +0.478359191938067580, 0.478315283126682590, 0.478271373119509850, 0.478227461916658600, 0.478183549518238720, 0.478139635924359600, 0.478095721135131770, 0.478051805150664590, +0.478007887971067970, 0.477963969596451210, 0.477920050026924890, 0.477876129262598480, 0.477832207303581720, 0.477788284149984090, 0.477744359801916100, 0.477700434259487270, +0.477656507522806920, 0.477612579591985660, 0.477568650467132980, 0.477524720148358670, 0.477480788635772200, 0.477436855929484150, 0.477392922029603930, 0.477348986936241390, +0.477305050649506010, 0.477261113169508420, 0.477217174496358030, 0.477173234630164700, 0.477129293571037890, 0.477085351319088250, 0.477041407874425230, 0.476997463237158690, +0.476953517407398110, 0.476909570385254110, 0.476865622170836170, 0.476821672764254190, 0.476777722165617650, 0.476733770375037170, 0.476689817392622280, 0.476645863218482460, +0.476601907852728380, 0.476557951295469520, 0.476513993546815780, 0.476470034606876650, 0.476426074475762850, 0.476382113153583860, 0.476338150640449600, 0.476294186936469580, +0.476250222041754430, 0.476206255956413750, 0.476162288680557430, 0.476118320214295010, 0.476074350557737170, 0.476030379710993490, 0.475986407674173830, 0.475942434447387760, +0.475898460030745980, 0.475854484424358070, 0.475810507628333550, 0.475766529642783150, 0.475722550467816420, 0.475678570103543310, 0.475634588550073400, 0.475590605807517440, +0.475546621875984900, 0.475502636755585850, 0.475458650446429820, 0.475414662948627550, 0.475370674262288630, 0.475326684387523010, 0.475282693324440290, 0.475238701073151190, +0.475194707633765370, 0.475150713006392780, 0.475106717191143060, 0.475062720188126900, 0.475018721997453930, 0.474974722619233790, 0.474930722053577170, 0.474886720300593810, +0.474842717360393630, 0.474798713233086260, 0.474754707918782550, 0.474710701417591970, 0.474666693729624720, 0.474622684854990320, 0.474578674793799620, 0.474534663546162190, +0.474490651112188130, 0.474446637491987070, 0.474402622685669740, 0.474358606693345900, 0.474314589515125560, 0.474270571151118310, 0.474226551601435060, 0.474182530866185450, +0.474138508945479040, 0.474094485839426820, 0.474050461548138350, 0.474006436071723770, 0.473962409410292660, 0.473918381563955940, 0.473874352532823280, 0.473830322317004730, +0.473786290916609950, 0.473742258331749880, 0.473698224562534130, 0.473654189609072850, 0.473610153471475670, 0.473566116149853560, 0.473522077644316090, 0.473478037954973450, +0.473433997081935340, 0.473389955025312610, 0.473345911785215010, 0.473301867361752620, 0.473257821755035170, 0.473213774965173530, 0.473169726992277500, 0.473125677836456760, +0.473081627497822180, 0.473037575976483550, 0.472993523272551010, 0.472949469386134190, 0.472905414317344170, 0.472861358066290590, 0.472817300633083580, 0.472773242017833000, +0.472729182220649640, 0.472685121241643360, 0.472641059080924240, 0.472596995738602140, 0.472552931214787860, 0.472508865509591310, 0.472464798623122630, 0.472420730555491500, +0.472376661306808940, 0.472332590877184770, 0.472288519266728660, 0.472244446475551690, 0.472200372503763620, 0.472156297351474570, 0.472112221018794460, 0.472068143505834150, +0.472024064812703480, 0.471979984939512600, 0.471935903886371410, 0.471891821653390890, 0.471847738240680770, 0.471803653648351310, 0.471759567876512300, 0.471715480925274820, +0.471671392794748620, 0.471627303485043890, 0.471583212996270540, 0.471539121328539590, 0.471495028481960790, 0.471450934456644040, 0.471406839252700330, 0.471362742870239550, +0.471318645309371900, 0.471274546570207230, 0.471230446652856630, 0.471186345557429890, 0.471142243284037250, 0.471098139832788640, 0.471054035203795070, 0.471009929397166460, +0.470965822413012990, 0.470921714251444520, 0.470877604912572250, 0.470833494396505900, 0.470789382703355800, 0.470745269833231890, 0.470701155786245220, 0.470657040562505620, +0.470612924162123410, 0.470568806585208550, 0.470524687831872070, 0.470480567902223810, 0.470436446796373750, 0.470392324514432970, 0.470348201056511430, 0.470304076422719320, +0.470259950613166670, 0.470215823627964550, 0.470171695467222820, 0.470127566131051890, 0.470083435619561620, 0.470039303932863140, 0.469995171071066480, 0.469951037034281820, +0.469906901822619180, 0.469862765436189710, 0.469818627875103310, 0.469774489139470340, 0.469730349229400770, 0.469686208145005670, 0.469642065886395120, 0.469597922453678980, +0.469553777846968450, 0.469509632066373420, 0.469465485112004370, 0.469421336983971150, 0.469377187682385010, 0.469333037207355920, 0.469288885558994230, 0.469244732737409960, +0.469200578742714200, 0.469156423575017020, 0.469112267234428780, 0.469068109721059450, 0.469023951035020260, 0.468979791176421190, 0.468935630145372650, 0.468891467941984660, +0.468847304566368360, 0.468803140018633820, 0.468758974298891020, 0.468714807407251190, 0.468670639343824360, 0.468626470108720940, 0.468582299702050900, 0.468538128123925530, +0.468493955374454820, 0.468449781453749270, 0.468405606361918800, 0.468361430099074770, 0.468317252665327140, 0.468273074060786390, 0.468228894285562580, 0.468184713339766860, +0.468140531223509400, 0.468096347936900640, 0.468052163480050580, 0.468007977853070520, 0.467963791056070500, 0.467919603089160640, 0.467875413952452130, 0.467831223646055120, +0.467787032170080000, 0.467742839524636970, 0.467698645709837210, 0.467654450725790820, 0.467610254572608300, 0.467566057250399740, 0.467521858759276490, 0.467477659099348520, +0.467433458270726470, 0.467389256273520350, 0.467345053107841470, 0.467300848773799960, 0.467256643271506340, 0.467212436601070700, 0.467168228762604390, 0.467124019756217530, +0.467079809582020560, 0.467035598240123690, 0.466991385730638250, 0.466947172053674310, 0.466902957209342110, 0.466858741197752840, 0.466814524019016740, 0.466770305673244350, +0.466726086160545780, 0.466681865481032350, 0.466637643634814300, 0.466593420622002150, 0.466549196442706040, 0.466504971097037370, 0.466460744585106220, 0.466416516907023240, +0.466372288062898540, 0.466328058052843550, 0.466283826876968400, 0.466239594535383660, 0.466195361028199580, 0.466151126355527470, 0.466106890517477560, 0.466062653514160040, +0.466018415345686220, 0.465974176012166450, 0.465929935513711200, 0.465885693850430660, 0.465841451022436350, 0.465797207029838400, 0.465752961872747400, 0.465708715551273630, +0.465664468065528470, 0.465620219415622150, 0.465575969601665250, 0.465531718623768080, 0.465487466482041980, 0.465443213176597200, 0.465398958707544390, 0.465354703074993770, +0.465310446279056820, 0.465266188319843730, 0.465221929197464800, 0.465177668912031440, 0.465133407463653890, 0.465089144852442850, 0.465044881078508550, 0.465000616141962420, +0.464956350042914750, 0.464912082781476220, 0.464867814357757090, 0.464823544771868770, 0.464779274023921660, 0.464735002114026300, 0.464690729042293080, 0.464646454808833430, +0.464602179413757640, 0.464557902857176410, 0.464513625139200030, 0.464469346259939960, 0.464425066219506520, 0.464380785018010440, 0.464336502655562030, 0.464292219132272700, +0.464247934448252850, 0.464203648603612740, 0.464159361598463940, 0.464115073432916750, 0.464070784107081860, 0.464026493621069570, 0.463982201974991510, 0.463937909168957880, +0.463893615203079530, 0.463849320077466710, 0.463805023792230990, 0.463760726347482780, 0.463716427743332660, 0.463672127979891100, 0.463627827057269630, 0.463583524975578590, +0.463539221734928730, 0.463494917335430470, 0.463450611777195260, 0.463406305060333530, 0.463361997184955630, 0.463317688151173190, 0.463273377959096460, 0.463229066608836340, +0.463184754100503080, 0.463140440434208430, 0.463096125610062580, 0.463051809628176490, 0.463007492488660470, 0.462963174191626080, 0.462918854737183800, 0.462874534125444330, +0.462830212356518170, 0.462785889430516850, 0.462741565347550840, 0.462697240107730890, 0.462652913711167460, 0.462608586157972120, 0.462564257448255360, 0.462519927582127510, +0.462475596559700270, 0.462431264381084010, 0.462386931046389620, 0.462342596555727510, 0.462298260909209280, 0.462253924106945380, 0.462209586149046730, 0.462165247035623670, +0.462120906766787910, 0.462076565342649850, 0.462032222763320400, 0.461987879028910030, 0.461943534139530320, 0.461899188095291740, 0.461854840896305240, 0.461810492542681250, +0.461766143034531400, 0.461721792371966200, 0.461677440555096130, 0.461633087584032880, 0.461588733458886850, 0.461544378179769010, 0.461500021746789830, 0.461455664160061010, +0.461411305419693050, 0.461366945525796770, 0.461322584478482790, 0.461278222277862690, 0.461233858924047060, 0.461189494417146790, 0.461145128757272370, 0.461100761944535530, +0.461056393979046800, 0.461012024860917020, 0.460967654590256850, 0.460923283167177960, 0.460878910591790810, 0.460834536864206390, 0.460790161984535260, 0.460745785952889060, +0.460701408769378480, 0.460657030434113930, 0.460612650947207210, 0.460568270308768850, 0.460523888518909850, 0.460479505577740700, 0.460435121485373190, 0.460390736241917900, +0.460346349847485740, 0.460301962302187340, 0.460257573606134400, 0.460213183759437540, 0.460168792762207680, 0.460124400614555510, 0.460080007316592710, 0.460035612868429870, +0.459991217270178000, 0.459946820521947740, 0.459902422623850780, 0.459858023575997750, 0.459813623378499290, 0.459769222031467200, 0.459724819535011990, 0.459680415889244800, +0.459636011094276100, 0.459591605150217800, 0.459547198057180530, 0.459502789815275200, 0.459458380424612510, 0.459413969885304310, 0.459369558197461170, 0.459325145361194120, +0.459280731376613790, 0.459236316243832100, 0.459191899962959560, 0.459147482534107250, 0.459103063957385870, 0.459058644232907260, 0.459014223360782010, 0.458969801341120750, +0.458925378174035450, 0.458880953859636730, 0.458836528398035570, 0.458792101789342710, 0.458747674033670010, 0.458703245131128090, 0.458658815081828040, 0.458614383885880610, +0.458569951543397580, 0.458525518054489710, 0.458481083419268020, 0.458436647637843200, 0.458392210710327210, 0.458347772636830690, 0.458303333417464710, 0.458258893052340020, +0.458214451541568480, 0.458170008885260770, 0.458125565083528090, 0.458081120136481110, 0.458036674044231710, 0.457992226806890610, 0.457947778424568570, 0.457903328897377450, +0.457858878225428030, 0.457814426408831410, 0.457769973447698380, 0.457725519342140730, 0.457681064092269330, 0.457636607698195250, 0.457592150160029240, 0.457547691477883320, +0.457503231651868130, 0.457458770682094840, 0.457414308568674210, 0.457369845311718260, 0.457325380911337680, 0.457280915367643650, 0.457236448680746920, 0.457191980850759460, +0.457147511877792070, 0.457103041761955490, 0.457058570503361740, 0.457014098102121510, 0.456969624558346050, 0.456925149872146160, 0.456880674043633750, 0.456836197072919670, +0.456791718960115110, 0.456747239705330820, 0.456702759308678870, 0.456658277770270020, 0.456613795090215490, 0.456569311268626040, 0.456524826305613700, 0.456480340201289300, +0.456435852955764110, 0.456391364569148810, 0.456346875041555520, 0.456302384373095060, 0.456257892563878280, 0.456213399614017080, 0.456168905523622440, 0.456124410292805480, +0.456079913921677180, 0.456035416410349450, 0.455990917758933190, 0.455946417967539600, 0.455901917036279580, 0.455857414965265220, 0.455812911754607250, 0.455768407404417040, +0.455723901914805380, 0.455679395285884410, 0.455634887517764930, 0.455590378610558230, 0.455545868564375180, 0.455501357379327840, 0.455456845055527140, 0.455412331593083920, +0.455367816992110260, 0.455323301252717080, 0.455278784375015620, 0.455234266359116850, 0.455189747205132780, 0.455145226913174330, 0.455100705483352850, 0.455056182915779150, +0.455011659210565410, 0.454967134367822550, 0.454922608387661850, 0.454878081270194250, 0.454833553015531800, 0.454789023623785480, 0.454744493095066590, 0.454699961429486100, +0.454655428627156080, 0.454610894688187490, 0.454566359612691650, 0.454521823400779570, 0.454477286052563270, 0.454432747568153770, 0.454388207947662050, 0.454343667191200170, +0.454299125298879110, 0.454254582270810230, 0.454210038107104530, 0.454165492807874100, 0.454120946373229970, 0.454076398803283490, 0.454031850098145560, 0.453987300257928440, +0.453942749282743030, 0.453898197172700800, 0.453853643927912660, 0.453809089548490810, 0.453764534034546250, 0.453719977386190300, 0.453675419603534080, 0.453630860686689670, +0.453586300635768100, 0.453541739450880390, 0.453497177132138720, 0.453452613679654120, 0.453408049093537990, 0.453363483373901370, 0.453318916520856370, 0.453274348534514090, +0.453229779414985990, 0.453185209162383030, 0.453140637776817400, 0.453096065258400240, 0.453051491607242900, 0.453006916823456400, 0.452962340907153040, 0.452917763858443790, +0.452873185677440170, 0.452828606364253150, 0.452784025918995030, 0.452739444341776880, 0.452694861632709670, 0.452650277791905750, 0.452605692819476100, 0.452561106715532240, +0.452516519480185180, 0.452471931113547220, 0.452427341615729510, 0.452382750986843380, 0.452338159226999990, 0.452293566336311570, 0.452248972314889250, 0.452204377162844510, +0.452159780880288460, 0.452115183467333310, 0.452070584924090250, 0.452025985250670670, 0.451981384447185770, 0.451936782513747800, 0.451892179450467830, 0.451847575257457450, +0.451802969934827710, 0.451758363482690990, 0.451713755901158360, 0.451669147190340900, 0.451624537350351020, 0.451579926381299730, 0.451535314283298680, 0.451490701056458940, +0.451446086700892810, 0.451401471216711480, 0.451356854604026470, 0.451312236862948970, 0.451267617993591220, 0.451222997996064470, 0.451178376870480180, 0.451133754616949540, +0.451089131235584970, 0.451044506726497540, 0.450999881089798830, 0.450955254325600070, 0.450910626434013530, 0.450865997415150430, 0.450821367269121920, 0.450776735996040460, +0.450732103596017120, 0.450687470069163490, 0.450642835415590800, 0.450598199635411420, 0.450553562728736590, 0.450508924695677770, 0.450464285536346320, 0.450419645250854540, +0.450375003839313610, 0.450330361301835180, 0.450285717638530420, 0.450241072849511810, 0.450196426934890540, 0.450151779894778170, 0.450107131729285960, 0.450062482438526310, +0.450017832022610480, 0.449973180481649640, 0.449928527815756260, 0.449883874025041540, 0.449839219109617160, 0.449794563069594310, 0.449749905905085460, 0.449705247616201900, +0.449660588203055160, 0.449615927665756530, 0.449571266004418550, 0.449526603219152390, 0.449481939310069690, 0.449437274277281750, 0.449392608120901040, 0.449347940841038800, +0.449303272437806660, 0.449258602911316030, 0.449213932261679220, 0.449169260489007630, 0.449124587593412450, 0.449079913575006210, 0.449035238433900200, 0.448990562170206110, +0.448945884784035190, 0.448901206275499950, 0.448856526644711710, 0.448811845891782140, 0.448767164016822600, 0.448722481019945500, 0.448677796901262250, 0.448633111660884430, +0.448588425298923510, 0.448543737815491890, 0.448499049210700880, 0.448454359484662330, 0.448409668637487440, 0.448364976669288760, 0.448320283580177670, 0.448275589370265900, +0.448230894039664710, 0.448186197588486710, 0.448141500016843160, 0.448096801324845530, 0.448052101512606270, 0.448007400580236750, 0.447962698527848760, 0.447917995355553540, +0.447873291063463800, 0.447828585651690810, 0.447783879120346400, 0.447739171469541840, 0.447694462699389780, 0.447649752810001580, 0.447605041801488970, 0.447560329673963360, +0.447515616427537340, 0.447470902062322260, 0.447426186578429920, 0.447381469975971720, 0.447336752255060250, 0.447292033415806920, 0.447247313458323080, 0.447202592382721360, +0.447157870189113130, 0.447113146877610280, 0.447068422448324120, 0.447023696901367340, 0.446978970236851290, 0.446934242454887830, 0.446889513555588370, 0.446844783539065540, +0.446800052405430690, 0.446755320154795740, 0.446710586787272100, 0.446665852302972400, 0.446621116702008050, 0.446576379984490960, 0.446531642150532480, 0.446486903200245260, +0.446442163133740800, 0.446397421951130580, 0.446352679652527170, 0.446307936238042050, 0.446263191707787110, 0.446218446061873770, 0.446173699300414730, 0.446128951423521490, +0.446084202431305810, 0.446039452323879200, 0.445994701101354420, 0.445949948763842860, 0.445905195311456450, 0.445860440744306640, 0.445815685062506130, 0.445770928266166380, +0.445726170355399350, 0.445681411330316470, 0.445636651191030460, 0.445591889937652810, 0.445547127570295460, 0.445502364089069900, 0.445457599494088810, 0.445412833785463700, +0.445368066963306160, 0.445323299027728830, 0.445278529978843260, 0.445233759816761330, 0.445188988541594610, 0.445144216153455840, 0.445099442652456550, 0.445054668038708630, +0.445009892312323630, 0.444965115473414330, 0.444920337522092200, 0.444875558458469210, 0.444830778282656990, 0.444785996994768170, 0.444741214594914390, 0.444696431083207560, +0.444651646459759300, 0.444606860724682250, 0.444562073878088100, 0.444517285920088320, 0.444472496850795760, 0.444427706670321940, 0.444382915378778890, 0.444338122976278120, +0.444293329462932430, 0.444248534838853460, 0.444203739104153120, 0.444158942258943030, 0.444114144303335960, 0.444069345237443570, 0.444024545061377840, 0.443979743775250290, +0.443934941379173830, 0.443890137873259980, 0.443845333257620820, 0.443800527532367930, 0.443755720697614040, 0.443710912753470970, 0.443666103700050110, 0.443621293537464430, +0.443576482265825580, 0.443531669885245450, 0.443486856395835740, 0.443442041797709300, 0.443397226090977810, 0.443352409275753200, 0.443307591352147200, 0.443262772320272560, +0.443217952180241070, 0.443173130932164650, 0.443128308576155040, 0.443083485112324980, 0.443038660540786280, 0.442993834861650890, 0.442949008075030570, 0.442904180181038050, +0.442859351179785140, 0.442814521071383860, 0.442769689855945840, 0.442724857533583980, 0.442680024104410040, 0.442635189568535590, 0.442590353926073600, 0.442545517177135690, +0.442500679321834010, 0.442455840360280240, 0.442411000292587230, 0.442366159118866730, 0.442321316839230870, 0.442276473453791290, 0.442231628962660940, 0.442186783365951520, +0.442141936663775100, 0.442097088856243490, 0.442052239943469540, 0.442007389925564990, 0.441962538802641970, 0.441917686574812170, 0.441872833242188620, 0.441827978804882950, +0.441783123263006890, 0.441738266616673480, 0.441693408865994400, 0.441648550011081780, 0.441603690052047360, 0.441558828989004170, 0.441513966822063900, 0.441469103551338670, +0.441424239176940290, 0.441379373698981730, 0.441334507117574770, 0.441289639432831500, 0.441244770644863730, 0.441199900753784460, 0.441155029759705390, 0.441110157662738810, +0.441065284462996370, 0.441020410160591180, 0.440975534755634950, 0.440930658248239460, 0.440885780638517740, 0.440840901926581540, 0.440796022112543100, 0.440751141196514260, +0.440706259178607900, 0.440661376058935910, 0.440616491837610480, 0.440571606514743420, 0.440526720090447740, 0.440481832564835310, 0.440436943938018240, 0.440392054210108410, +0.440347163381218880, 0.440302271451461450, 0.440257378420948310, 0.440212484289791320, 0.440167589058103490, 0.440122692725996740, 0.440077795293582870, 0.440032896760974900, +0.439987997128284620, 0.439943096395624460, 0.439898194563106080, 0.439853291630842640, 0.439808387598945970, 0.439763482467528330, 0.439718576236701570, 0.439673668906578770, +0.439628760477271840, 0.439583850948892960, 0.439538940321554050, 0.439494028595368240, 0.439449115770447320, 0.439404201846903650, 0.439359286824849040, 0.439314370704396610, +0.439269453485658270, 0.439224535168746270, 0.439179615753772570, 0.439134695240850190, 0.439089773630091110, 0.439044850921607170, 0.438999927115511560, 0.438955002211916080, +0.438910076210933090, 0.438865149112674490, 0.438820220917253480, 0.438775291624781900, 0.438730361235372070, 0.438685429749135940, 0.438640497166186640, 0.438595563486636090, +0.438550628710596630, 0.438505692838180190, 0.438460755869499950, 0.438415817804667820, 0.438370878643796150, 0.438325938386996850, 0.438280997034383110, 0.438236054586066900, +0.438191111042160130, 0.438146166402775980, 0.438101220668026430, 0.438056273838023870, 0.438011325912880170, 0.437966376892708560, 0.437921426777621030, 0.437876475567729910, +0.437831523263147230, 0.437786569863986120, 0.437741615370358550, 0.437696659782376980, 0.437651703100153390, 0.437606745323800890, 0.437561786453431580, 0.437516826489157740, +0.437471865431091510, 0.437426903279345970, 0.437381940034033130, 0.437336975695265140, 0.437292010263155060, 0.437247043737814920, 0.437202076119357190, 0.437157107407893930, +0.437112137603538230, 0.437067166706402220, 0.437022194716598260, 0.436977221634238470, 0.436932247459435990, 0.436887272192302890, 0.436842295832951640, 0.436797318381494220, +0.436752339838043900, 0.436707360202712720, 0.436662379475613150, 0.436617397656857250, 0.436572414746558280, 0.436527430744828250, 0.436482445651779630, 0.436437459467524490, +0.436392472192176080, 0.436347483825846540, 0.436302494368647880, 0.436257503820693390, 0.436212512182095110, 0.436167519452965560, 0.436122525633416860, 0.436077530723562200, +0.436032534723513720, 0.435987537633383880, 0.435942539453284820, 0.435897540183329820, 0.435852539823630980, 0.435807538374300750, 0.435762535835451330, 0.435717532207195890, +0.435672527489646690, 0.435627521682916130, 0.435582514787116400, 0.435537506802360750, 0.435492497728761360, 0.435447487566430310, 0.435402476315480960, 0.435357463976025370, +0.435312450548176190, 0.435267436032045430, 0.435222420427746500, 0.435177403735391540, 0.435132385955093070, 0.435087367086963220, 0.435042347131115340, 0.434997326087661560, +0.434952303956714530, 0.434907280738386300, 0.434862256432790310, 0.434817231040038670, 0.434772204560243900, 0.434727176993518260, 0.434682148339975090, 0.434637118599726540, +0.434592087772884770, 0.434547055859563210, 0.434502022859873990, 0.434456988773929690, 0.434411953601842590, 0.434366917343725960, 0.434321879999692020, 0.434276841569853410, +0.434231802054322270, 0.434186761453212060, 0.434141719766634960, 0.434096676994703500, 0.434051633137529980, 0.434006588195227800, 0.433961542167909110, 0.433916495055686580, +0.433871446858672400, 0.433826397576980050, 0.433781347210721650, 0.433736295760009490, 0.433691243224957000, 0.433646189605676410, 0.433601134902280360, 0.433556079114881090, +0.433511022243591950, 0.433465964288525300, 0.433420905249793760, 0.433375845127509480, 0.433330783921786090, 0.433285721632735650, 0.433240658260470980, 0.433195593805104200, +0.433150528266748880, 0.433105461645517220, 0.433060393941521900, 0.433015325154875230, 0.432970255285690610, 0.432925184334080390, 0.432880112300157160, 0.432835039184033270, +0.432789964985822170, 0.432744889705636180, 0.432699813343587590, 0.432654735899789810, 0.432609657374355250, 0.432564577767396490, 0.432519497079025930, 0.432474415309356990, +0.432429332458502010, 0.432384248526573760, 0.432339163513684450, 0.432294077419947630, 0.432248990245475580, 0.432203901990381110, 0.432158812654776460, 0.432113722238775200, +0.432068630742489630, 0.432023538166032450, 0.431978444509516060, 0.431933349773053920, 0.431888253956758450, 0.431843157060741940, 0.431798059085117920, 0.431752960029998740, +0.431707859895497200, 0.431662758681725540, 0.431617656388797450, 0.431572553016825230, 0.431527448565921570, 0.431482343036198920, 0.431437236427770820, 0.431392128740749610, +0.431347019975248100, 0.431301910131378640, 0.431256799209254750, 0.431211687208988950, 0.431166574130693870, 0.431121459974481980, 0.431076344740466800, 0.431031228428760790, +0.430986111039476320, 0.430940992572726940, 0.430895873028625140, 0.430850752407283600, 0.430805630708814780, 0.430760507933332320, 0.430715384080948560, 0.430670259151776370, +0.430625133145928100, 0.430580006063517430, 0.430534877904656720, 0.430489748669458830, 0.430444618358036160, 0.430399486970502340, 0.430354354506969790, 0.430309220967551360, +0.430264086352359520, 0.430218950661507840, 0.430173813895108780, 0.430128676053275150, 0.430083537136119460, 0.430038397143755360, 0.429993256076295240, 0.429948113933851570, +0.429902970716538050, 0.429857826424467070, 0.429812681057751500, 0.429767534616503850, 0.429722387100837770, 0.429677238510865760, 0.429632088846700620, 0.429586938108454830, +0.429541786296242120, 0.429496633410174970, 0.429451479450366210, 0.429406324416928330, 0.429361168309975060, 0.429316011129618870, 0.429270852875972660, 0.429225693549148910, +0.429180533149261360, 0.429135371676422460, 0.429090209130744690, 0.429045045512341850, 0.428999880821326340, 0.428954715057811190, 0.428909548221908800, 0.428864380313732970, +0.428819211333396180, 0.428774041281011380, 0.428728870156691030, 0.428683697960548950, 0.428638524692697590, 0.428593350353249970, 0.428548174942318560, 0.428502998460017050, +0.428457820906458120, 0.428412642281754570, 0.428367462586019100, 0.428322281819365320, 0.428277099981905830, 0.428231917073753190, 0.428186733095021200, 0.428141548045822330, +0.428096361926269600, 0.428051174736475580, 0.428005986476554020, 0.427960797146617500, 0.427915606746778980, 0.427870415277151030, 0.427825222737847450, 0.427780029128980830, +0.427734834450664130, 0.427689638703009910, 0.427644441886132040, 0.427599244000143040, 0.427554045045155930, 0.427508845021283330, 0.427463643928639000, 0.427418441767335570, +0.427373238537485600, 0.427328034239202960, 0.427282828872600270, 0.427237622437790450, 0.427192414934886190, 0.427147206364001330, 0.427101996725248400, 0.427056786018740530, +0.427011574244590240, 0.426966361402911500, 0.426921147493816770, 0.426875932517419230, 0.426830716473831420, 0.426785499363167230, 0.426740281185539310, 0.426695061941060660, +0.426649841629843930, 0.426604620252003080, 0.426559397807650620, 0.426514174296899640, 0.426468949719862880, 0.426423724076654130, 0.426378497367386090, 0.426333269592171380, +0.426288040751123860, 0.426242810844356280, 0.426197579871981700, 0.426152347834112710, 0.426107114730863320, 0.426061880562346120, 0.426016645328674170, 0.425971409029960280, +0.425926171666318190, 0.425880933237860750, 0.425835693744700930, 0.425790453186951470, 0.425745211564726280, 0.425699968878138100, 0.425654725127299960, 0.425609480312324600, +0.425564234433325970, 0.425518987490416720, 0.425473739483709650, 0.425428490413318590, 0.425383240279356310, 0.425337989081935930, 0.425292736821170190, 0.425247483497173010, +0.425202229110057120, 0.425156973659935660, 0.425111717146921360, 0.425066459571128150, 0.425021200932668820, 0.424975941231656500, 0.424930680468203870, 0.424885418642424960, +0.424840155754432570, 0.424794891804339710, 0.424749626792259250, 0.424704360718305090, 0.424659093582590070, 0.424613825385226910, 0.424568556126329600, 0.424523285806010840, +0.424478014424383930, 0.424432741981561560, 0.424387468477657740, 0.424342193912785270, 0.424296918287057290, 0.424251641600586590, 0.424206363853487200, 0.424161085045871910, +0.424115805177853910, 0.424070524249546000, 0.424025242261062200, 0.423979959212515240, 0.423934675104018440, 0.423889389935684540, 0.423844103707627540, 0.423798816419960310, +0.423753528072795980, 0.423708238666247520, 0.423662948200428770, 0.423617656675452700, 0.423572364091432120, 0.423527070448480980, 0.423481775746712140, 0.423436479986238900, +0.423391183167174060, 0.423345885289631680, 0.423300586353724580, 0.423255286359566000, 0.423209985307268780, 0.423164683196947060, 0.423119380028713580, 0.423074075802681690, +0.423028770518964150, 0.422983464177675130, 0.422938156778927430, 0.422892848322834360, 0.422847538809508760, 0.422802228239064710, 0.422756916611615070, 0.422711603927272810, +0.422666290186151870, 0.422620975388365240, 0.422575659534026150, 0.422530342623247510, 0.422485024656143400, 0.422439705632826790, 0.422394385553410860, 0.422349064418008570, +0.422303742226734060, 0.422258418979700120, 0.422213094677020230, 0.422167769318807120, 0.422122442905175030, 0.422077115436236830, 0.422031786912105800, 0.421986457332894970, +0.421941126698718360, 0.421895795009688930, 0.421850462265919600, 0.421805128467524550, 0.421759793614616680, 0.421714457707309310, 0.421669120745715390, 0.421623782729949050, +0.421578443660123310, 0.421533103536351430, 0.421487762358746350, 0.421442420127422330, 0.421397076842492220, 0.421351732504069430, 0.421306387112266920, 0.421261040667198830, +0.421215693168978170, 0.421170344617718240, 0.421124995013532070, 0.421079644356533780, 0.421034292646836390, 0.420988939884552880, 0.420943586069797430, 0.420898231202682990, +0.420852875283322990, 0.420807518311830390, 0.420762160288319420, 0.420716801212903060, 0.420671441085694650, 0.420626079906807230, 0.420580717676355080, 0.420535354394451060, +0.420489990061208680, 0.420444624676740930, 0.420399258241162030, 0.420353890754585010, 0.420308522217123230, 0.420263152628889750, 0.420217781989998760, 0.420172410300563350, +0.420127037560696910, 0.420081663770512430, 0.420036288930124240, 0.419990913039645310, 0.419945536099188720, 0.419900158108868660, 0.419854779068798260, 0.419809398979090860, +0.419764017839859560, 0.419718635651218640, 0.419673252413281130, 0.419627868126160490, 0.419582482789969740, 0.419537096404823230, 0.419491708970833990, 0.419446320488115420, +0.419400930956780660, 0.419355540376944000, 0.419310148748718530, 0.419264756072217640, 0.419219362347554410, 0.419173967574843260, 0.419128571754197150, 0.419083174885729210, +0.419037776969553740, 0.418992378005783820, 0.418946977994532950, 0.418901576935914290, 0.418856174830042010, 0.418810771677029350, 0.418765367476989720, 0.418719962230036320, +0.418674555936283390, 0.418629148595844050, 0.418583740208831880, 0.418538330775359900, 0.418492920295542530, 0.418447508769492880, 0.418402096197324440, 0.418356682579150370, +0.418311267915084940, 0.418265852205241370, 0.418220435449732810, 0.418175017648673540, 0.418129598802176710, 0.418084178910355870, 0.418038757973324240, 0.417993335991196040, +0.417947912964084570, 0.417902488892103300, 0.417857063775365360, 0.417811637613985210, 0.417766210408075930, 0.417720782157751160, 0.417675352863124020, 0.417629922524308920, +0.417584491141418990, 0.417539058714567810, 0.417493625243868630, 0.417448190729435790, 0.417402755171382420, 0.417357318569822220, 0.417311880924868260, 0.417266442236635060, +0.417221002505235690, 0.417175561730783460, 0.417130119913392720, 0.417084677053176700, 0.417039233150248990, 0.416993788204722770, 0.416948342216712450, 0.416902895186331330, +0.416857447113692940, 0.416811997998910560, 0.416766547842098540, 0.416721096643370200, 0.416675644402839110, 0.416630191120618500, 0.416584736796822790, 0.416539281431565270, +0.416493825024959520, 0.416448367577118840, 0.416402909088157580, 0.416357449558189100, 0.416311988987326580, 0.416266527375684480, 0.416221064723376110, 0.416175601030515040, +0.416130136297214570, 0.416084670523589160, 0.416039203709752060, 0.415993735855817000, 0.415948266961897130, 0.415902797028107060, 0.415857326054559940, 0.415811854041369560, +0.415766380988649100, 0.415720906896513090, 0.415675431765074880, 0.415629955594448040, 0.415584478384745880, 0.415539000136082970, 0.415493520848572550, 0.415448040522327920, +0.415402559157463550, 0.415357076754092840, 0.415311593312329420, 0.415266108832286650, 0.415220623314078940, 0.415175136757819700, 0.415129649163622660, 0.415084160531601080, +0.415038670861869460, 0.414993180154541170, 0.414947688409729950, 0.414902195627549100, 0.414856701808113180, 0.414811206951535500, 0.414765711057929810, 0.414720214127409390, +0.414674716160088890, 0.414629217156081590, 0.414583717115500850, 0.414538216038461190, 0.414492713925076030, 0.414447210775459040, 0.414401706589723640, 0.414356201367984400, +0.414310695110354620, 0.414265187816948100, 0.414219679487878250, 0.414174170123259580, 0.414128659723205510, 0.414083148287829770, 0.414037635817245730, 0.413992122311568010, +0.413946607770910020, 0.413901092195385510, 0.413855575585107830, 0.413810057940191660, 0.413764539260750300, 0.413719019546897600, 0.413673498798746990, 0.413627977016413020, +0.413582454200009050, 0.413536930349648610, 0.413491405465446220, 0.413445879547515330, 0.413400352595969740, 0.413354824610922820, 0.413309295592489300, 0.413263765540782540, +0.413218234455916320, 0.413172702338004130, 0.413127169187160580, 0.413081635003499150, 0.413036099787133570, 0.412990563538177420, 0.412945026256745170, 0.412899487942950450, +0.412853948596906940, 0.412808408218728160, 0.412762866808528810, 0.412717324366422220, 0.412671780892521990, 0.412626236386942680, 0.412580690849797760, 0.412535144281201140, +0.412489596681266280, 0.412444048050107760, 0.412398498387839150, 0.412352947694574310, 0.412307395970426700, 0.412261843215511010, 0.412216289429940710, 0.412170734613829690, +0.412125178767291380, 0.412079621890440560, 0.412034063983390710, 0.411988505046255670, 0.411942945079148970, 0.411897384082185290, 0.411851822055478210, 0.411806258999141140, +0.411760694913288820, 0.411715129798034760, 0.411669563653492890, 0.411623996479776650, 0.411578428277000920, 0.411532859045279030, 0.411487288784725070, 0.411441717495452440, +0.411396145177575890, 0.411350571831209040, 0.411304997456465700, 0.411259422053459500, 0.411213845622305170, 0.411168268163116190, 0.411122689676006570, 0.411077110161089780, +0.411031529618480660, 0.410985948048292690, 0.410940365450639890, 0.410894781825635710, 0.410849197173395020, 0.410803611494031330, 0.410758024787658220, 0.410712437054390420, +0.410666848294341520, 0.410621258507625540, 0.410575667694355990, 0.410530075854647680, 0.410484482988614170, 0.410438889096369500, 0.410393294178027170, 0.410347698233701990, +0.410302101263507580, 0.410256503267557910, 0.410210904245966620, 0.410165304198848450, 0.410119703126316960, 0.410074101028486290, 0.410028497905469910, 0.409982893757382730, +0.409937288584338310, 0.409891682386450240, 0.409846075163833370, 0.409800466916601320, 0.409754857644868130, 0.409709247348747360, 0.409663636028353870, 0.409618023683801350, +0.409572410315203690, 0.409526795922674660, 0.409481180506329030, 0.409435564066280460, 0.409389946602642940, 0.409344328115530180, 0.409298708605056960, 0.409253088071337030, +0.409207466514484360, 0.409161843934612630, 0.409116220331836640, 0.409070595706270130, 0.409024970058026740, 0.408979343387221360, 0.408933715693967580, 0.408888086978379530, +0.408842457240570830, 0.408796826480656410, 0.408751194698749880, 0.408705561894965430, 0.408659928069416640, 0.408614293222218430, 0.408568657353484520, 0.408523020463328950, +0.408477382551865390, 0.408431743619208810, 0.408386103665472840, 0.408340462690771680, 0.408294820695218890, 0.408249177678929490, 0.408203533642017170, 0.408157888584595560, +0.408112242506779630, 0.408066595408683120, 0.408020947290420100, 0.407975298152104370, 0.407929647993850730, 0.407883996815772980, 0.407838344617985290, 0.407792691400601260, +0.407747037163735950, 0.407701381907503050, 0.407655725632016690, 0.407610068337390610, 0.407564410023739780, 0.407518750691177880, 0.407473090339819100, 0.407427428969777240, +0.407381766581167200, 0.407336103174102740, 0.407290438748698020, 0.407244773305066810, 0.407199106843324050, 0.407153439363583500, 0.407107770865959010, 0.407062101350565420, +0.407016430817516650, 0.406970759266926770, 0.406925086698909590, 0.406879413113580110, 0.406833738511052090, 0.406788062891439710, 0.406742386254856810, 0.406696708601418320, +0.406651029931238030, 0.406605350244430230, 0.406559669541108560, 0.406513987821388200, 0.406468305085382840, 0.406422621333206720, 0.406376936564973650, 0.406331250780798630, +0.406285563980795520, 0.406239876165078060, 0.406194187333761340, 0.406148497486959140, 0.406102806624785650, 0.406057114747354790, 0.406011421854781560, 0.405965727947179720, +0.405920033024663620, 0.405874337087346990, 0.405828640135344920, 0.405782942168771310, 0.405737243187740290, 0.405691543192365780, 0.405645842182762780, 0.405600140159045220, +0.405554437121327270, 0.405508733069722850, 0.405463028004347030, 0.405417321925313600, 0.405371614832736480, 0.405325906726730690, 0.405280197607410190, 0.405234487474889160, +0.405188776329281520, 0.405143064170702340, 0.405097350999265470, 0.405051636815085270, 0.405005921618275530, 0.404960205408951390, 0.404914488187226810, 0.404868769953215910, +0.404823050707032730, 0.404777330448792330, 0.404731609178608620, 0.404685886896595900, 0.404640163602868030, 0.404594439297540130, 0.404548713980726170, 0.404502987652540390, +0.404457260313096760, 0.404411531962510400, 0.404365802600895160, 0.404320072228365080, 0.404274340845035160, 0.404228608451019430, 0.404182875046432130, 0.404137140631387280, +0.404091405206000010, 0.404045668770384170, 0.403999931324654170, 0.403954192868923980, 0.403908453403308660, 0.403862712927922200, 0.403816971442878980, 0.403771228948292980, +0.403725485444279220, 0.403679740930951820, 0.403633995408425040, 0.403588248876812830, 0.403542501336230490, 0.403496752786791810, 0.403451003228610880, 0.403405252661802830, +0.403359501086481660, 0.403313748502761750, 0.403267994910757040, 0.403222240310582790, 0.403176484702352900, 0.403130728086181830, 0.403084970462183500, 0.403039211830473200, +0.402993452191164780, 0.402947691544372820, 0.402901929890211170, 0.402856167228795140, 0.402810403560238670, 0.402764638884656190, 0.402718873202161710, 0.402673106512870470, +0.402627338816896440, 0.402581570114353690, 0.402535800405357360, 0.402490029690021570, 0.402444257968460730, 0.402398485240788810, 0.402352711507121100, 0.402306936767571570, +0.402261161022254730, 0.402215384271284560, 0.402169606514776400, 0.402123827752844170, 0.402078047985602370, 0.402032267213165040, 0.401986485435647470, 0.401940702653163670, +0.401894918865828120, 0.401849134073754890, 0.401803348277059160, 0.401757561475855120, 0.401711773670256790, 0.401665984860379350, 0.401620195046337000, 0.401574404228244200, +0.401528612406214900, 0.401482819580364520, 0.401437025750807140, 0.401391230917657100, 0.401345435081028660, 0.401299638241036980, 0.401253840397796210, 0.401208041551420870, +0.401162241702025020, 0.401116440849723980, 0.401070638994631800, 0.401024836136863020, 0.400979032276531750, 0.400933227413753370, 0.400887421548641820, 0.400841614681311800, +0.400795806811877320, 0.400749997940453680, 0.400704188067155080, 0.400658377192095630, 0.400612565315390580, 0.400566752437154170, 0.400520938557500870, 0.400475123676544810, +0.400429307794401330, 0.400383490911184580, 0.400337673027009120, 0.400291854141989090, 0.400246034256239840, 0.400200213369875430, 0.400154391483010570, 0.400108568595759270, +0.400062744708236990, 0.400016919820557810, 0.399971093932836360, 0.399925267045186770, 0.399879439157724390, 0.399833610270563470, 0.399787780383818070, 0.399741949497603610, +0.399696117612034330, 0.399650284727224750, 0.399604450843288990, 0.399558615960342590, 0.399512780078499610, 0.399466943197874680, 0.399421105318581990, 0.399375266440736900, +0.399329426564453690, 0.399283585689846950, 0.399237743817030750, 0.399191900946120670, 0.399146057077230830, 0.399100212210475810, 0.399054366345969860, 0.399008519483828430, +0.398962671624165710, 0.398916822767095840, 0.398870972912734380, 0.398825122061195470, 0.398779270212593740, 0.398733417367043490, 0.398687563524660000, 0.398641708685557710, +0.398595852849851050, 0.398549996017654400, 0.398504138189083200, 0.398458279364251600, 0.398412419543274330, 0.398366558726265580, 0.398320696913340880, 0.398274834104614390, +0.398228970300200820, 0.398183105500214460, 0.398137239704770720, 0.398091372913983890, 0.398045505127968600, 0.397999636346839160, 0.397953766570711020, 0.397907895799698490, +0.397862024033915800, 0.397816151273478470, 0.397770277518500750, 0.397724402769097320, 0.397678527025382480, 0.397632650287471750, 0.397586772555479420, 0.397540893829520130, +0.397495014109708170, 0.397449133396159120, 0.397403251688987210, 0.397357368988307200, 0.397311485294233320, 0.397265600606881150, 0.397219714926364990, 0.397173828252799570, +0.397127940586299130, 0.397082051926979260, 0.397036162274954250, 0.396990271630338450, 0.396944379993247390, 0.396898487363795350, 0.396852593742097080, 0.396806699128266940, +0.396760803522420440, 0.396714906924671980, 0.396669009335136210, 0.396623110753927530, 0.396577211181161460, 0.396531310616952350, 0.396485409061415000, 0.396439506514663700, +0.396393602976814030, 0.396347698447980400, 0.396301792928277500, 0.396255886417819670, 0.396209978916722600, 0.396164070425100550, 0.396118160943067900, 0.396072250470740290, +0.396026339008232030, 0.395980426555657910, 0.395934513113132320, 0.395888598680770920, 0.395842683258687930, 0.395796766846998270, 0.395750849445816290, 0.395704931055257610, +0.395659011675436600, 0.395613091306468050, 0.395567169948466360, 0.395521247601547170, 0.395475324265824820, 0.395429399941414180, 0.395383474628429650, 0.395337548326986870, +0.395291621037200170, 0.395245692759183980, 0.395199763493054020, 0.395153833238924670, 0.395107901996910650, 0.395061969767126540, 0.395016036549687920, 0.394970102344709200, +0.394924167152305160, 0.394878230972590340, 0.394832293805680360, 0.394786355651689620, 0.394740416510733050, 0.394694476382924990, 0.394648535268381120, 0.394602593167215960, +0.394556650079544320, 0.394510706005480600, 0.394464760945140550, 0.394418814898638610, 0.394372867866089600, 0.394326919847608040, 0.394280970843309600, 0.394235020853308690, +0.394189069877719840, 0.394143117916658740, 0.394097164970239830, 0.394051211038577990, 0.394005256121787770, 0.393959300219984760, 0.393913343333283540, 0.393867385461798950, +0.393821426605645450, 0.393775466764938850, 0.393729505939793560, 0.393683544130324470, 0.393637581336646170, 0.393591617558874280, 0.393545652797123390, 0.393499687051508340, +0.393453720322143650, 0.393407752609145070, 0.393361783912627160, 0.393315814232704340, 0.393269843569492410, 0.393223871923105870, 0.393177899293659590, 0.393131925681268260, +0.393085951086047440, 0.393039975508111760, 0.392993998947576200, 0.392948021404555150, 0.392902042879164530, 0.392856063371518740, 0.392810082881732800, 0.392764101409921300, +0.392718118956199900, 0.392672135520683200, 0.392626151103486200, 0.392580165704723370, 0.392534179324510570, 0.392488191962962310, 0.392442203620193160, 0.392396214296318930, +0.392350223991454140, 0.392304232705713800, 0.392258240439212480, 0.392212247192065930, 0.392166252964388780, 0.392120257756296050, 0.392074261567902200, 0.392028264399323150, +0.391982266250673390, 0.391936267122068030, 0.391890267013621510, 0.391844265925449800, 0.391798263857667420, 0.391752260810389330, 0.391706256783730220, 0.391660251777805890, +0.391614245792730910, 0.391568238828620300, 0.391522230885588680, 0.391476221963751920, 0.391430212063224590, 0.391384201184121370, 0.391338189326558010, 0.391292176490649180, +0.391246162676509910, 0.391200147884254830, 0.391154132113999740, 0.391108115365859380, 0.391062097639948700, 0.391016078936382410, 0.390970059255276280, 0.390924038596745070, +0.390878016960903680, 0.390831994347866920, 0.390785970757750510, 0.390739946190669210, 0.390693920646738020, 0.390647894126071650, 0.390601866628785930, 0.390555838154995620, +0.390509808704815220, 0.390463778278360710, 0.390417746875746760, 0.390371714497088520, 0.390325681142500490, 0.390279646812098700, 0.390233611505997780, 0.390187575224312850, +0.390141537967158560, 0.390095499734650850, 0.390049460526904370, 0.390003420344034290, 0.389957379186155200, 0.389911337053383100, 0.389865293945832640, 0.389819249863618930, +0.389773204806856680, 0.389727158775661890, 0.389681111770149140, 0.389635063790433220, 0.389589014836630050, 0.389542964908854370, 0.389496914007221250, 0.389450862131845430, +0.389404809282842880, 0.389358755460328330, 0.389312700664416870, 0.389266644895223220, 0.389220588152863370, 0.389174530437452090, 0.389128471749104480, 0.389082412087935260, +0.389036351454060400, 0.388990289847594710, 0.388944227268653300, 0.388898163717350860, 0.388852099193803420, 0.388806033698125770, 0.388759967230433050, 0.388713899790839980, +0.388667831379462540, 0.388621761996415570, 0.388575691641813770, 0.388529620315773150, 0.388483548018408450, 0.388437474749834920, 0.388391400510167240, 0.388345325299521540, +0.388299249118012500, 0.388253171965755320, 0.388207093842864780, 0.388161014749456970, 0.388114934685646620, 0.388068853651548920, 0.388022771647278660, 0.387976688672951870, +0.387930604728683400, 0.387884519814588380, 0.387838433930781660, 0.387792347077379310, 0.387746259254496020, 0.387700170462246750, 0.387654080700747420, 0.387607989970112870, +0.387561898270458390, 0.387515805601898690, 0.387469711964549930, 0.387423617358526930, 0.387377521783944800, 0.387331425240918510, 0.387285327729564090, 0.387239229249996320, +0.387193129802330450, 0.387147029386681380, 0.387100928003165150, 0.387054825651896580, 0.387008722332990940, 0.386962618046563070, 0.386916512792729090, 0.386870406571603880, +0.386824299383302150, 0.386778191227940160, 0.386732082105632650, 0.386685972016494960, 0.386639860960641900, 0.386593748938189600, 0.386547635949252950, 0.386501521993947220, +0.386455407072387240, 0.386409291184689140, 0.386363174330967840, 0.386317056511338630, 0.386270937725916360, 0.386224817974817110, 0.386178697258155850, 0.386132575576047850, +0.386086452928607990, 0.386040329315952390, 0.385994204738196010, 0.385948079195453710, 0.385901952687841550, 0.385855825215474570, 0.385809696778468050, 0.385763567376936840, +0.385717437010997090, 0.385671305680763800, 0.385625173386352220, 0.385579040127877300, 0.385532905905455190, 0.385486770719200840, 0.385440634569229560, 0.385394497455656240, +0.385348359378597130, 0.385302220338167080, 0.385256080334481500, 0.385209939367655350, 0.385163797437804710, 0.385117654545044600, 0.385071510689490300, 0.385025365871256910, +0.384979220090460430, 0.384933073347215940, 0.384886925641638340, 0.384840776973843890, 0.384794627343947430, 0.384748476752064420, 0.384702325198309820, 0.384656172682799840, +0.384610019205649410, 0.384563864766973910, 0.384517709366888340, 0.384471553005508950, 0.384425395682950640, 0.384379237399328830, 0.384333078154758530, 0.384286917949355930, +0.384240756783236050, 0.384194594656514290, 0.384148431569305670, 0.384102267521726330, 0.384056102513891330, 0.384009936545915640, 0.383963769617915560, 0.383917601730006000, +0.383871432882302520, 0.383825263074919990, 0.383779092307974690, 0.383732920581581700, 0.383686747895856440, 0.383640574250913860, 0.383594399646870250, 0.383548224083840650, +0.383502047561940450, 0.383455870081284790, 0.383409691641989850, 0.383363512244170650, 0.383317331887942700, 0.383271150573420980, 0.383224968300721780, 0.383178785069960230, +0.383132600881251230, 0.383086415734711190, 0.383040229630455090, 0.382994042568598430, 0.382947854549256230, 0.382901665572544850, 0.382855475638579250, 0.382809284747475000, +0.382763092899347120, 0.382716900094311920, 0.382670706332484460, 0.382624511613980260, 0.382578315938914340, 0.382532119307403050, 0.382485921719561420, 0.382439723175505060, +0.382393523675348960, 0.382347323219209450, 0.382301121807201600, 0.382254919439441010, 0.382208716116042620, 0.382162511837122960, 0.382116306602796940, 0.382070100413179790, +0.382023893268387760, 0.381977685168536030, 0.381931476113740060, 0.381885266104115050, 0.381839055139777230, 0.381792843220841780, 0.381746630347424230, 0.381700416519639710, +0.381654201737604500, 0.381607986001433860, 0.381561769311243190, 0.381515551667147730, 0.381469333069263780, 0.381423113517706520, 0.381376893012591480, 0.381330671554033770, +0.381284449142149760, 0.381238225777054680, 0.381192001458863620, 0.381145776187692960, 0.381099549963657860, 0.381053322786873870, 0.381007094657456190, 0.380960865575521170, +0.380914635541183990, 0.380868404554560220, 0.380822172615765060, 0.380775939724914860, 0.380729705882124790, 0.380683471087510440, 0.380637235341187040, 0.380590998643270950, +0.380544760993877350, 0.380498522393121870, 0.380452282841119650, 0.380406042337987140, 0.380359800883839530, 0.380313558478792000, 0.380267315122961020, 0.380221070816461730, +0.380174825559409730, 0.380128579351920290, 0.380082332194109810, 0.380036084086093520, 0.379989835027987000, 0.379943585019905490, 0.379897334061965410, 0.379851082154281980, +0.379804829296970900, 0.379758575490147300, 0.379712320733927690, 0.379666065028427260, 0.379619808373761640, 0.379573550770046120, 0.379527292217397120, 0.379481032715929920, +0.379434772265759720, 0.379388510867002980, 0.379342248519774990, 0.379295985224191330, 0.379249720980367360, 0.379203455788419460, 0.379157189648462960, 0.379110922560613410, +0.379064654524986220, 0.379018385541697760, 0.378972115610863360, 0.378925844732598660, 0.378879572907018960, 0.378833300134240710, 0.378787026414379220, 0.378740751747550120, +0.378694476133868810, 0.378648199573451640, 0.378601922066414020, 0.378555643612871580, 0.378509364212939680, 0.378463083866734720, 0.378416802574372050, 0.378370520335966960, +0.378324237151635990, 0.378277953021494420, 0.378231667945657990, 0.378185381924241950, 0.378139094957362920, 0.378092807045136090, 0.378046518187677260, 0.378000228385101720, +0.377953937637526050, 0.377907645945065540, 0.377861353307835880, 0.377815059725952420, 0.377768765199531790, 0.377722469728689170, 0.377676173313540420, 0.377629875954200780, +0.377583577650786930, 0.377537278403414060, 0.377490978212197630, 0.377444677077254150, 0.377398374998698990, 0.377352071976647880, 0.377305768011216180, 0.377259463102520510, +0.377213157250676170, 0.377166850455798900, 0.377120542718004100, 0.377074234037408360, 0.377027924414127020, 0.376981613848275890, 0.376935302339970360, 0.376888989889326900, +0.376842676496461030, 0.376796362161488430, 0.376750046884524510, 0.376703730665685910, 0.376657413505087970, 0.376611095402846100, 0.376564776359076920, 0.376518456373895750, +0.376472135447418480, 0.376425813579760400, 0.376379490771038270, 0.376333167021367380, 0.376286842330863570, 0.376240516699642260, 0.376194190127820070, 0.376147862615512360, +0.376101534162835040, 0.376055204769903450, 0.376008874436834280, 0.375962543163742890, 0.375916210950745180, 0.375869877797956550, 0.375823543705493590, 0.375777208673471750, +0.375730872702006950, 0.375684535791214520, 0.375638197941211170, 0.375591859152112350, 0.375545519424033410, 0.375499178757091160, 0.375452837151400930, 0.375406494607078590, +0.375360151124239590, 0.375313806703000690, 0.375267461343477220, 0.375221115045785090, 0.375174767810039780, 0.375128419636357960, 0.375082070524855090, 0.375035720475647090, +0.374989369488849310, 0.374943017564578540, 0.374896664702950240, 0.374850310904080270, 0.374803956168084100, 0.374757600495078450, 0.374711243885178850, 0.374664886338500650, +0.374618527855160700, 0.374572168435274410, 0.374525808078957690, 0.374479446786326050, 0.374433084557496240, 0.374386721392583670, 0.374340357291704340, 0.374293992254973670, +0.374247626282508410, 0.374201259374424110, 0.374154891530836700, 0.374108522751861570, 0.374062153037615640, 0.374015782388214260, 0.373969410803773440, 0.373923038284408700, +0.373876664830236740, 0.373830290441373110, 0.373783915117933410, 0.373737538860034300, 0.373691161667791320, 0.373644783541320470, 0.373598404480737220, 0.373552024486158370, +0.373505643557699500, 0.373459261695476500, 0.373412878899604890, 0.373366495170201540, 0.373320110507381950, 0.373273724911262090, 0.373227338381957490, 0.373180950919584980, +0.373134562524260030, 0.373088173196098720, 0.373041782935216560, 0.372995391741730350, 0.372948999615755670, 0.372902606557408090, 0.372856212566804400, 0.372809817644060180, +0.372763421789291390, 0.372717025002613670, 0.372670627284143800, 0.372624228633997360, 0.372577829052290310, 0.372531428539138290, 0.372485027094658140, 0.372438624718965380, +0.372392221412176090, 0.372345817174405850, 0.372299412005771440, 0.372253005906388490, 0.372206598876373080, 0.372160190915840680, 0.372113782024908300, 0.372067372203691400, +0.372020961452306120, 0.371974549770868020, 0.371928137159493910, 0.371881723618299520, 0.371835309147400370, 0.371788893746913370, 0.371742477416954150, 0.371696060157638730, +0.371649641969082730, 0.371603222851403010, 0.371556802804715260, 0.371510381829135540, 0.371463959924779430, 0.371417537091763840, 0.371371113330204390, 0.371324688640217170, +0.371278263021917800, 0.371231836475423180, 0.371185409000849010, 0.371138980598311240, 0.371092551267925670, 0.371046121009809160, 0.370999689824077270, 0.370953257710845810, +0.370906824670231560, 0.370860390702350270, 0.370813955807318020, 0.370767519985250480, 0.370721083236264510, 0.370674645560475860, 0.370628206958000580, 0.370581767428954430, +0.370535326973454200, 0.370488885591615690, 0.370442443283554970, 0.370396000049387720, 0.370349555889230850, 0.370303110803200110, 0.370256664791411620, 0.370210217853981010, +0.370163769991025290, 0.370117321202660170, 0.370070871489001310, 0.370024420850165680, 0.369977969286269030, 0.369931516797427420, 0.369885063383756650, 0.369838609045373580, +0.369792153782394000, 0.369745697594934030, 0.369699240483109430, 0.369652782447037140, 0.369606323486832920, 0.369559863602612840, 0.369513402794492680, 0.369466941062589480, +0.369420478407018920, 0.369374014827897110, 0.369327550325339870, 0.369281084899464210, 0.369234618550385810, 0.369188151278220860, 0.369141683083085090, 0.369095213965095590, +0.369048743924368040, 0.369002272961018170, 0.368955801075163070, 0.368909328266918470, 0.368862854536400550, 0.368816379883725070, 0.368769904309009020, 0.368723427812368220, +0.368676950393918900, 0.368630472053776750, 0.368583992792058830, 0.368537512608880960, 0.368491031504359300, 0.368444549478609660, 0.368398066531749060, 0.368351582663893230, +0.368305097875158530, 0.368258612165660580, 0.368212125535516580, 0.368165637984842250, 0.368119149513753410, 0.368072660122367110, 0.368026169810799160, 0.367979678579165800, +0.367933186427582830, 0.367886693356167300, 0.367840199365035040, 0.367793704454302260, 0.367747208624084830, 0.367700711874499760, 0.367654214205662970, 0.367607715617690570, +0.367561216110698530, 0.367514715684803820, 0.367468214340122330, 0.367421712076770320, 0.367375208894863640, 0.367328704794519290, 0.367282199775853190, 0.367235693838981250, +0.367189186984020420, 0.367142679211086620, 0.367096170520296140, 0.367049660911764830, 0.367003150385609770, 0.366956638941946860, 0.366910126580892280, 0.366863613302562060, +0.366817099107073160, 0.366770583994541540, 0.366724067965083440, 0.366677551018814770, 0.366631033155852660, 0.366584514376312950, 0.366537994680311950, 0.366491474067965510, +0.366444952539390860, 0.366398430094703800, 0.366351906734020240, 0.366305382457457360, 0.366258857265131020, 0.366212331157157510, 0.366165804133652790, 0.366119276194733940, +0.366072747340516920, 0.366026217571118030, 0.365979686886653170, 0.365933155287239520, 0.365886622772993000, 0.365840089344029900, 0.365793555000466180, 0.365747019742418970, +0.365700483570004180, 0.365653946483338210, 0.365607408482536980, 0.365560869567717610, 0.365514329738996110, 0.365467788996488740, 0.365421247340311510, 0.365374704770581590, +0.365328161287414850, 0.365281616890927360, 0.365235071581236190, 0.365188525358457360, 0.365141978222707220, 0.365095430174101730, 0.365048881212758080, 0.365002331338792230, +0.364955780552320530, 0.364909228853458940, 0.364862676242324770, 0.364816122719033850, 0.364769568283702610, 0.364723012936447100, 0.364676456677384410, 0.364629899506630610, +0.364583341424302040, 0.364536782430514740, 0.364490222525385880, 0.364443661709031470, 0.364397099981567440, 0.364350537343111120, 0.364303973793778490, 0.364257409333685890, +0.364210843962949340, 0.364164277681686080, 0.364117710490012180, 0.364071142388043940, 0.364024573375897500, 0.363978003453690020, 0.363931432621537490, 0.363884860879556400, +0.363838288227862790, 0.363791714666573780, 0.363745140195805560, 0.363698564815674470, 0.363651988526296540, 0.363605411327789060, 0.363558833220268110, 0.363512254203849580, +0.363465674278650840, 0.363419093444787960, 0.363372511702377330, 0.363325929051534990, 0.363279345492378230, 0.363232761025023110, 0.363186175649586110, 0.363139589366183290, +0.363093002174931840, 0.363046414075947900, 0.362999825069347970, 0.362953235155248020, 0.362906644333765400, 0.362860052605016190, 0.362813459969116850, 0.362766866426183440, +0.362720271976333270, 0.362673676619682420, 0.362627080356347390, 0.362580483186444200, 0.362533885110090270, 0.362487286127401610, 0.362440686238494290, 0.362394085443485730, +0.362347483742491930, 0.362300881135629420, 0.362254277623014260, 0.362207673204763880, 0.362161067880994280, 0.362114461651822040, 0.362067854517363170, 0.362021246477735150, +0.361974637533053980, 0.361928027683436180, 0.361881416928997950, 0.361834805269856560, 0.361788192706128220, 0.361741579237929320, 0.361694964865376110, 0.361648349588585880, +0.361601733407674760, 0.361555116322758940, 0.361508498333955710, 0.361461879441381250, 0.361415259645152090, 0.361368638945384350, 0.361322017342195430, 0.361275394835701480, +0.361228771426019000, 0.361182147113264240, 0.361135521897554490, 0.361088895779005940, 0.361042268757735150, 0.360995640833858270, 0.360949012007492740, 0.360902382278754650, +0.360855751647760570, 0.360809120114626740, 0.360762487679470560, 0.360715854342408100, 0.360669220103555620, 0.360622584963030460, 0.360575948920948850, 0.360529311977427440, +0.360482674132582280, 0.360436035386530850, 0.360389395739389330, 0.360342755191274290, 0.360296113742302030, 0.360249471392589840, 0.360202828142253960, 0.360156183991411030, +0.360109538940177280, 0.360062892988670000, 0.360016246137005560, 0.359969598385300460, 0.359922949733671000, 0.359876300182234540, 0.359829649731107310, 0.359782998380405620, +0.359736346130246800, 0.359689692980747100, 0.359643038932023210, 0.359596383984191250, 0.359549728137368800, 0.359503071391671980, 0.359456413747217540, 0.359409755204121610, +0.359363095762501690, 0.359316435422474050, 0.359269774184155340, 0.359223112047661770, 0.359176449013110850, 0.359129785080618770, 0.359083120250302260, 0.359036454522277500, +0.358989787896662080, 0.358943120373572120, 0.358896451953124420, 0.358849782635435150, 0.358803112420621790, 0.358756441308800740, 0.358709769300088130, 0.358663096394601480, +0.358616422592457130, 0.358569747893771720, 0.358523072298661480, 0.358476395807244050, 0.358429718419635560, 0.358383040135952850, 0.358336360956312050, 0.358289680880830800, +0.358242999909625330, 0.358196318042812380, 0.358149635280508190, 0.358102951622830350, 0.358056267069895130, 0.358009581621819280, 0.357962895278719000, 0.357916208040711950, +0.357869519907914320, 0.357822830880442530, 0.357776140958414040, 0.357729450141945240, 0.357682758431152770, 0.357636065826152980, 0.357589372327063500, 0.357542677934000520, +0.357495982647080880, 0.357449286466420880, 0.357402589392138090, 0.357355891424348810, 0.357309192563169790, 0.357262492808717360, 0.357215792161109160, 0.357169090620461430, +0.357122388186891020, 0.357075684860514220, 0.357028980641448560, 0.356982275529810540, 0.356935569525716370, 0.356888862629283650, 0.356842154840628810, 0.356795446159868630, +0.356748736587119360, 0.356702026122498680, 0.356655314766122940, 0.356608602518108890, 0.356561889378572970, 0.356515175347632720, 0.356468460425404480, 0.356421744612005150, +0.356375027907551050, 0.356328310312159720, 0.356281591825947710, 0.356234872449031680, 0.356188152181528050, 0.356141431023554440, 0.356094708975227270, 0.356047986036663320, +0.356001262207979010, 0.355954537489291960, 0.355907811880718520, 0.355861085382375150, 0.355814357994379490, 0.355767629716847940, 0.355720900549897360, 0.355674170493644080, +0.355627439548205750, 0.355580707713698870, 0.355533974990240200, 0.355487241377946180, 0.355440506876934460, 0.355393771487321490, 0.355347035209224120, 0.355300298042758700, +0.355253559988042980, 0.355206821045193350, 0.355160081214326630, 0.355113340495559320, 0.355066598889009100, 0.355019856394792390, 0.354973113013025590, 0.354926368743826440, +0.354879623587311340, 0.354832877543597160, 0.354786130612800450, 0.354739382795038750, 0.354692634090428670, 0.354645884499086960, 0.354599134021130140, 0.354552382656675880, +0.354505630405840650, 0.354458877268741370, 0.354412123245494480, 0.354365368336217730, 0.354318612541027530, 0.354271855860040790, 0.354225098293374010, 0.354178339841144880, +0.354131580503469930, 0.354084820280465560, 0.354038059172249620, 0.353991297178938460, 0.353944534300649150, 0.353897770537497990, 0.353851005889602890, 0.353804240357080250, +0.353757473940047030, 0.353710706638619700, 0.353663938452915990, 0.353617169383052430, 0.353570399429145980, 0.353523628591313140, 0.353476856869671620, 0.353430084264337920, +0.353383310775429060, 0.353336536403061510, 0.353289761147353000, 0.353242985008420110, 0.353196207986379300, 0.353149430081348410, 0.353102651293443980, 0.353055871622782900, +0.353009091069481700, 0.352962309633658210, 0.352915527315428970, 0.352868744114910870, 0.352821960032220490, 0.352775175067475630, 0.352728389220792860, 0.352681602492289140, +0.352634814882080930, 0.352588026390286140, 0.352541237017021280, 0.352494446762403320, 0.352447655626548840, 0.352400863609575620, 0.352354070711600240, 0.352307276932739720, +0.352260482273110580, 0.352213686732830600, 0.352166890312016480, 0.352120093010784670, 0.352073294829253040, 0.352026495767538190, 0.351979695825757110, 0.351932895004026360, +0.351886093302463790, 0.351839290721185970, 0.351792487260309930, 0.351745682919952280, 0.351698877700230840, 0.351652071601262160, 0.351605264623163330, 0.351558456766050910, +0.351511648030042810, 0.351464838415255550, 0.351418027921806210, 0.351371216549811350, 0.351324404299388880, 0.351277591170655430, 0.351230777163727580, 0.351183962278723170, +0.351137146515758890, 0.351090329874951760, 0.351043512356418340, 0.350996693960276550, 0.350949874686643070, 0.350903054535634860, 0.350856233507368610, 0.350809411601962220, +0.350762588819532320, 0.350715765160195870, 0.350668940624069670, 0.350622115211271460, 0.350575288921918030, 0.350528461756126340, 0.350481633714013090, 0.350434804795696160, +0.350387975001292210, 0.350341144330917950, 0.350294312784691200, 0.350247480362728680, 0.350200647065147470, 0.350153812892064260, 0.350106977843596900, 0.350060141919862070, +0.350013305120976890, 0.349966467447058060, 0.349919628898223480, 0.349872789474589830, 0.349825949176274190, 0.349779108003393240, 0.349732265956064990, 0.349685423034406030, +0.349638579238533530, 0.349591734568564180, 0.349544889024615890, 0.349498042606805340, 0.349451195315249760, 0.349404347150065740, 0.349357498111371230, 0.349310648199283040, +0.349263797413917780, 0.349216945755393470, 0.349170093223826750, 0.349123239819334850, 0.349076385542034410, 0.349029530392043430, 0.348982674369478610, 0.348935817474457070, +0.348888959707095600, 0.348842101067512180, 0.348795241555823480, 0.348748381172146680, 0.348701519916598530, 0.348654657789296940, 0.348607794790358750, 0.348560930919901090, +0.348514066178040650, 0.348467200564895500, 0.348420334080582320, 0.348373466725217850, 0.348326598498920170, 0.348279729401806020, 0.348232859433992510, 0.348185988595596460, +0.348139116886735820, 0.348092244307527440, 0.348045370858088400, 0.347998496538535540, 0.347951621348986880, 0.347904745289559110, 0.347857868360369530, 0.347810990561534810, +0.347764111893173080, 0.347717232355401030, 0.347670351948335900, 0.347623470672094540, 0.347576588526794850, 0.347529705512553690, 0.347482821629487900, 0.347435936877715460, +0.347389051257353140, 0.347342164768518200, 0.347295277411327430, 0.347248389185898900, 0.347201500092349400, 0.347154610130796130, 0.347107719301355980, 0.347060827604146860, +0.347013935039285740, 0.346967041606889740, 0.346920147307075770, 0.346873252139961790, 0.346826356105664700, 0.346779459204301700, 0.346732561435989680, 0.346685662800846670, +0.346638763298989460, 0.346591862930534960, 0.346544961695601230, 0.346498059594305070, 0.346451156626763730, 0.346404252793094170, 0.346357348093414340, 0.346310442527841100, +0.346263536096491800, 0.346216628799483280, 0.346169720636933520, 0.346122811608959520, 0.346075901715678480, 0.346028990957207290, 0.345982079333663980, 0.345935166845165510, +0.345888253491829110, 0.345841339273771700, 0.345794424191111340, 0.345747508243964890, 0.345700591432449690, 0.345653673756682600, 0.345606755216781750, 0.345559835812863980, +0.345512915545046210, 0.345465994413446550, 0.345419072418181980, 0.345372149559369680, 0.345325225837126550, 0.345278301251570830, 0.345231375802819370, 0.345184449490989420, +0.345137522316197930, 0.345090594278563090, 0.345043665378201750, 0.344996735615231250, 0.344949804989768460, 0.344902873501931610, 0.344855941151837600, 0.344809007939603670, +0.344762073865346850, 0.344715138929185260, 0.344668203131235810, 0.344621266471615450, 0.344574328950442320, 0.344527390567833380, 0.344480451323905980, 0.344433511218777020, +0.344386570252564690, 0.344339628425385960, 0.344292685737358110, 0.344245742188598160, 0.344198797779224300, 0.344151852509353370, 0.344104906379102900, 0.344057959388589680, +0.344011011537932010, 0.343964062827246790, 0.343917113256651420, 0.343870162826262870, 0.343823211536199320, 0.343776259386577740, 0.343729306377515090, 0.343682352509129600, +0.343635397781538230, 0.343588442194858350, 0.343541485749206950, 0.343494528444702240, 0.343447570281461220, 0.343400611259601310, 0.343353651379239400, 0.343306690640493850, +0.343259729043481510, 0.343212766588319840, 0.343165803275125860, 0.343118839104017800, 0.343071874075112640, 0.343024908188527820, 0.342977941444380260, 0.342930973842788310, +0.342884005383868870, 0.342837036067739460, 0.342790065894517050, 0.342743094864319860, 0.342696122977264930, 0.342649150233469310, 0.342602176633051200, 0.342555202176127670, +0.342508226862816120, 0.342461250693233630, 0.342414273667498380, 0.342367295785727440, 0.342320317048038280, 0.342273337454547910, 0.342226357005374630, 0.342179375700635450, +0.342132393540447830, 0.342085410524928800, 0.342038426654196650, 0.341991441928368440, 0.341944456347561650, 0.341897469911893290, 0.341850482621481650, 0.341803494476443810, +0.341756505476896840, 0.341709515622959040, 0.341662524914747410, 0.341615533352379490, 0.341568540935972280, 0.341521547665644190, 0.341474553541512180, 0.341427558563693830, +0.341380562732306160, 0.341333566047467450, 0.341286568509294900, 0.341239570117905900, 0.341192570873417530, 0.341145570775948200, 0.341098569825614870, 0.341051568022535170, +0.341004565366826160, 0.340957561858606100, 0.340910557497992150, 0.340863552285101400, 0.340816546220052140, 0.340769539302961550, 0.340722531533947160, 0.340675522913125970, +0.340628513440616400, 0.340581503116535570, 0.340534491941000940, 0.340487479914129700, 0.340440467036040140, 0.340393453306849450, 0.340346438726675080, 0.340299423295634230, +0.340252407013845240, 0.340205389881425240, 0.340158371898491740, 0.340111353065161880, 0.340064333381554120, 0.340017312847785470, 0.339970291463973120, 0.339923269230235470, +0.339876246146689650, 0.339829222213453240, 0.339782197430643310, 0.339735171798378370, 0.339688145316775440, 0.339641117985952150, 0.339594089806025680, 0.339547060777114380, +0.339500030899335450, 0.339453000172806440, 0.339405968597644490, 0.339358936173968060, 0.339311902901894280, 0.339264868781540720, 0.339217833813024620, 0.339170797996464320, +0.339123761331977020, 0.339076723819680290, 0.339029685459691420, 0.338982646252128710, 0.338935606197109330, 0.338888565294750590, 0.338841523545170830, 0.338794480948487240, +0.338747437504817510, 0.338700393214278690, 0.338653348076989320, 0.338606302093066640, 0.338559255262628140, 0.338512207585791150, 0.338465159062673990, 0.338418109693393980, +0.338371059478068670, 0.338324008416815310, 0.338276956509752310, 0.338229903756996960, 0.338182850158666840, 0.338135795714879170, 0.338088740425752430, 0.338041684291403850, +0.337994627311950680, 0.337947569487511310, 0.337900510818202990, 0.337853451304143460, 0.337806390945449840, 0.337759329742240650, 0.337712267694633140, 0.337665204802744980, +0.337618141066693410, 0.337571076486596900, 0.337524011062572680, 0.337476944794738390, 0.337429877683211370, 0.337382809728110080, 0.337335740929551760, 0.337288671287654050, +0.337241600802534290, 0.337194529474310940, 0.337147457303101250, 0.337100384289022500, 0.337053310432193220, 0.337006235732730700, 0.336959160190752500, 0.336912083806376050, +0.336865006579719790, 0.336817928510901030, 0.336770849600037450, 0.336723769847246280, 0.336676689252646160, 0.336629607816354260, 0.336582525538488390, 0.336535442419165780, +0.336488358458504940, 0.336441273656623240, 0.336394188013638350, 0.336347101529667570, 0.336300014204829470, 0.336252926039241340, 0.336205837033020870, 0.336158747186285410, +0.336111656499153480, 0.336064564971742420, 0.336017472604169530, 0.335970379396553390, 0.335923285349011280, 0.335876190461660950, 0.335829094734619750, 0.335781998168006190, +0.335734900761937680, 0.335687802516531910, 0.335640703431906220, 0.335593603508179130, 0.335546502745468100, 0.335499401143890820, 0.335452298703564580, 0.335405195424608000, +0.335358091307138450, 0.335310986351273710, 0.335263880557131020, 0.335216773924829070, 0.335169666454485200, 0.335122558146216780, 0.335075449000142300, 0.335028339016379240, +0.334981228195045390, 0.334934116536257990, 0.334887004040135720, 0.334839890706795930, 0.334792776536356420, 0.334745661528934530, 0.334698545684648960, 0.334651429003617000, +0.334604311485956480, 0.334557193131784720, 0.334510073941220450, 0.334462953914380970, 0.334415833051384110, 0.334368711352347250, 0.334321588817388990, 0.334274465446626810, +0.334227341240178000, 0.334180216198161300, 0.334133090320694050, 0.334085963607894050, 0.334038836059878770, 0.333991707676766780, 0.333944578458675530, 0.333897448405722830, +0.333850317518026130, 0.333803185795704000, 0.333756053238873920, 0.333708919847653720, 0.333661785622160810, 0.333614650562513830, 0.333567514668830220, 0.333520377941227850, +0.333473240379824120, 0.333426101984737710, 0.333378962756086030, 0.333331822693986920, 0.333284681798557860, 0.333237540069917510, 0.333190397508183300, 0.333143254113472680, +0.333096109885904380, 0.333048964825595760, 0.333001818932664730, 0.332954672207228800, 0.332907524649406540, 0.332860376259315470, 0.332813227037073500, 0.332766076982798030, +0.332718926096607750, 0.332671774378620170, 0.332624621828953190, 0.332577468447724180, 0.332530314235051970, 0.332483159191053980, 0.332436003315848050, 0.332388846609551700, +0.332341689072283670, 0.332294530704161430, 0.332247371505302420, 0.332200211475825400, 0.332153050615847820, 0.332105888925487650, 0.332058726404862340, 0.332011563054090630, +0.331964398873290050, 0.331917233862578430, 0.331870068022073310, 0.331822901351893460, 0.331775733852156310, 0.331728565522979860, 0.331681396364481570, 0.331634226376780250, +0.331587055559993290, 0.331539883914238720, 0.331492711439634050, 0.331445538136298010, 0.331398364004348080, 0.331351189043901870, 0.331304013255078080, 0.331256836637994270, +0.331209659192768400, 0.331162480919517890, 0.331115301818361680, 0.331068121889417140, 0.331020941132802340, 0.330973759548634730, 0.330926577137033220, 0.330879393898115160, +0.330832209831998680, 0.330785024938801240, 0.330737839218641690, 0.330690652671637500, 0.330643465297906720, 0.330596277097566840, 0.330549088070736630, 0.330501898217533780, +0.330454707538075710, 0.330407516032481310, 0.330360323700868150, 0.330313130543354150, 0.330265936560056930, 0.330218741751095220, 0.330171546116586720, 0.330124349656649330, +0.330077152371400670, 0.330029954260959550, 0.329982755325443520, 0.329935555564970620, 0.329888354979658400, 0.329841153569625680, 0.329793951334990120, 0.329746748275869690, +0.329699544392381970, 0.329652339684645750, 0.329605134152778760, 0.329557927796898850, 0.329510720617123780, 0.329463512613572260, 0.329416303786362000, 0.329369094135610550, +0.329321883661436830, 0.329274672363958350, 0.329227460243293190, 0.329180247299558970, 0.329133033532874540, 0.329085818943357530, 0.329038603531126020, 0.328991387296297510, +0.328944170238991030, 0.328896952359324040, 0.328849733657414710, 0.328802514133380630, 0.328755293787340700, 0.328708072619412480, 0.328660850629714120, 0.328613627818363230, +0.328566404185478670, 0.328519179731178060, 0.328471954455579140, 0.328424728358800710, 0.328377501440960510, 0.328330273702176540, 0.328283045142566450, 0.328235815762249140, +0.328188585561342340, 0.328141354539964070, 0.328094122698231960, 0.328046890036264970, 0.327999656554180790, 0.327952422252097480, 0.327905187130132610, 0.327857951188405270, +0.327810714427033020, 0.327763476846133990, 0.327716238445825870, 0.327668999226227550, 0.327621759187456730, 0.327574518329631080, 0.327527276652869630, 0.327480034157289880, +0.327432790843010140, 0.327385546710147970, 0.327338301758822340, 0.327291055989150930, 0.327243809401251920, 0.327196561995242940, 0.327149313771243010, 0.327102064729369760, +0.327054814869741360, 0.327007564192475510, 0.326960312697691160, 0.326913060385506050, 0.326865807256038250, 0.326818553309405570, 0.326771298545726900, 0.326724042965119980, +0.326676786567702940, 0.326629529353593520, 0.326582271322910680, 0.326535012475772210, 0.326487752812295750, 0.326440492332600360, 0.326393231036803730, 0.326345968925023990, +0.326298705997378920, 0.326251442253987500, 0.326204177694967510, 0.326156912320437090, 0.326109646130513910, 0.326062379125317050, 0.326015111304964240, 0.325967842669573680, +0.325920573219263100, 0.325873302954151460, 0.325826031874356600, 0.325778759979996610, 0.325731487271189390, 0.325684213748053790, 0.325636939410707700, 0.325589664259268830, +0.325542388293856230, 0.325495111514587600, 0.325447833921581280, 0.325400555514954890, 0.325353276294827580, 0.325305996261317010, 0.325258715414541540, 0.325211433754618810, +0.325164151281667920, 0.325116867995806640, 0.325069583897153180, 0.325022298985825410, 0.324975013261942220, 0.324927726725621590, 0.324880439376981580, 0.324833151216140040, +0.324785862243216090, 0.324738572458327490, 0.324691281861592020, 0.324643990453128750, 0.324596698233055480, 0.324549405201490500, 0.324502111358551610, 0.324454816704357830, +0.324407521239027000, 0.324360224962677410, 0.324312927875426820, 0.324265629977394280, 0.324218331268697700, 0.324171031749455330, 0.324123731419784900, 0.324076430279805590, +0.324029128329635210, 0.323981825569392030, 0.323934521999193810, 0.323887217619159780, 0.323839912429407630, 0.323792606430055310, 0.323745299621221890, 0.323697992003025240, +0.323650683575583580, 0.323603374339014820, 0.323556064293438030, 0.323508753438971060, 0.323461441775732270, 0.323414129303839390, 0.323366816023411660, 0.323319501934566820, +0.323272187037423280, 0.323224871332098870, 0.323177554818712630, 0.323130237497382570, 0.323082919368226860, 0.323035600431363480, 0.322988280686911490, 0.322940960134988850, +0.322893638775713750, 0.322846316609204150, 0.322798993635579180, 0.322751669854956740, 0.322704345267454670, 0.322657019873192170, 0.322609693672287150, 0.322562366664857880, +0.322515038851022280, 0.322467710230899480, 0.322420380804607390, 0.322373050572264400, 0.322325719533988360, 0.322278387689898420, 0.322231055040112510, 0.322183721584748950, +0.322136387323925690, 0.322089052257761850, 0.322041716386375410, 0.321994379709884650, 0.321947042228407590, 0.321899703942063240, 0.321852364850969740, 0.321805024955244820, +0.321757684255007780, 0.321710342750376580, 0.321663000441469450, 0.321615657328404470, 0.321568313411300710, 0.321520968690276190, 0.321473623165449250, 0.321426276836937810, +0.321378929704861150, 0.321331581769337130, 0.321284233030484150, 0.321236883488420170, 0.321189533143264430, 0.321142181995134830, 0.321094830044149740, 0.321047477290427210, +0.321000123734086370, 0.320952769375245250, 0.320905414214021800, 0.320858058250535210, 0.320810701484903480, 0.320763343917244980, 0.320715985547677720, 0.320668626376320930, +0.320621266403292530, 0.320573905628711020, 0.320526544052694260, 0.320479181675361600, 0.320431818496831000, 0.320384454517220860, 0.320337089736649090, 0.320289724155235100, +0.320242357773096790, 0.320194990590352560, 0.320147622607120430, 0.320100253823519640, 0.320052884239668270, 0.320005513855684650, 0.319958142671686820, 0.319910770687794110, +0.319863397904124440, 0.319816024320795810, 0.319768649937927580, 0.319721274755637720, 0.319673898774044730, 0.319626521993266470, 0.319579144413422390, 0.319531766034630460, +0.319484386857009080, 0.319437006880676330, 0.319389626105751500, 0.319342244532352550, 0.319294862160598050, 0.319247478990605900, 0.319200095022495520, 0.319152710256384920, +0.319105324692392560, 0.319057938330636390, 0.319010551171235830, 0.318963163214308950, 0.318915774459973660, 0.318868384908349400, 0.318820994559554150, 0.318773603413706470, +0.318726211470924280, 0.318678818731327030, 0.318631425195032740, 0.318584030862159860, 0.318536635732826480, 0.318489239807151990, 0.318441843085254360, 0.318394445567252100, +0.318347047253263350, 0.318299648143407330, 0.318252248237802240, 0.318204847536566530, 0.318157446039818330, 0.318110043747676870, 0.318062640660260300, 0.318015236777686730, +0.317967832100075450, 0.317920426627544660, 0.317873020360212750, 0.317825613298197860, 0.317778205441619390, 0.317730796790595400, 0.317683387345244430, 0.317635977105684530, +0.317588566072035170, 0.317541154244414370, 0.317493741622940640, 0.317446328207732160, 0.317398913998908290, 0.317351498996587160, 0.317304083200887270, 0.317256666611926750, +0.317209249229824960, 0.317161831054700080, 0.317114412086670180, 0.317066992325854670, 0.317019571772371670, 0.316972150426339750, 0.316924728287877040, 0.316877305357102900, +0.316829881634135560, 0.316782457119093470, 0.316735031812094840, 0.316687605713259050, 0.316640178822704230, 0.316592751140548970, 0.316545322666911380, 0.316497893401910920, +0.316450463345665730, 0.316403032498294430, 0.316355600859915100, 0.316308168430647190, 0.316260735210608820, 0.316213301199918640, 0.316165866398694760, 0.316118430807056710, +0.316070994425122490, 0.316023557253010400, 0.315976119290839850, 0.315928680538729020, 0.315881240996796490, 0.315833800665160370, 0.315786359543940240, 0.315738917633254180, +0.315691474933220810, 0.315644031443958360, 0.315596587165586250, 0.315549142098222660, 0.315501696241986210, 0.315454249596995140, 0.315406802163368800, 0.315359353941225500, +0.315311904930683840, 0.315264455131861960, 0.315217004544879330, 0.315169553169854230, 0.315122101006904850, 0.315074648056150600, 0.315027194317709760, 0.314979739791700910, +0.314932284478242290, 0.314884828377453410, 0.314837371489452400, 0.314789913814358000, 0.314742455352288400, 0.314694996103363040, 0.314647536067700240, 0.314600075245418610, +0.314552613636636340, 0.314505151241472940, 0.314457688060046700, 0.314410224092476210, 0.314362759338879750, 0.314315293799376840, 0.314267827474085660, 0.314220360363124510, +0.314172892466612840, 0.314125423784669010, 0.314077954317411530, 0.314030484064958810, 0.313983013027430310, 0.313935541204944210, 0.313888068597619310, 0.313840595205573840, +0.313793121028927260, 0.313745646067797870, 0.313698170322304400, 0.313650693792565050, 0.313603216478699430, 0.313555738380825730, 0.313508259499062690, 0.313460779833528600, +0.313413299384342980, 0.313365818151624060, 0.313318336135490650, 0.313270853336060970, 0.313223369753454550, 0.313175885387789730, 0.313128400239184810, 0.313080914307759250, +0.313033427593631450, 0.312985940096920050, 0.312938451817743380, 0.312890962756221020, 0.312843472912471220, 0.312795982286612760, 0.312748490878763940, 0.312700998689044330, +0.312653505717572170, 0.312606011964466250, 0.312558517429844920, 0.312511022113827700, 0.312463526016532930, 0.312416029138079310, 0.312368531478585230, 0.312321033038170210, +0.312273533816952660, 0.312226033815050820, 0.312178533032584300, 0.312131031469671470, 0.312083529126431060, 0.312036026002981410, 0.311988522099442110, 0.311941017415931550, +0.311893511952568370, 0.311846005709471020, 0.311798498686759130, 0.311750990884550940, 0.311703482302965240, 0.311655972942120440, 0.311608462802136170, 0.311560951883130710, +0.311513440185222870, 0.311465927708531040, 0.311418414453174750, 0.311370900419272460, 0.311323385606942500, 0.311275870016304520, 0.311228353647476810, 0.311180836500578260, +0.311133318575727180, 0.311085799873043240, 0.311038280392644750, 0.310990760134650600, 0.310943239099179150, 0.310895717286350020, 0.310848194696281550, 0.310800671329092610, +0.310753147184901600, 0.310705622263828140, 0.310658096565990580, 0.310610570091507830, 0.310563042840498180, 0.310515514813081370, 0.310467986009375810, 0.310420456429499840, +0.310372926073573140, 0.310325394941714130, 0.310277863034041590, 0.310230330350674040, 0.310182796891731060, 0.310135262657331050, 0.310087727647592960, 0.310040191862635090, +0.309992655302577140, 0.309945117967537600, 0.309897579857635220, 0.309850040972988460, 0.309802501313717060, 0.309754960879939370, 0.309707419671774340, 0.309659877689340280, +0.309612334932756970, 0.309564791402142820, 0.309517247097616690, 0.309469702019297020, 0.309422156167303510, 0.309374609541754660, 0.309327062142768780, 0.309279513970465710, +0.309231965024963860, 0.309184415306382130, 0.309136864814838870, 0.309089313550453940, 0.309041761513345670, 0.308994208703633030, 0.308946655121434430, 0.308899100766869610, +0.308851545640057010, 0.308803989741115610, 0.308756433070163760, 0.308708875627321300, 0.308661317412706640, 0.308613758426438680, 0.308566198668635880, 0.308518638139417990, +0.308471076838903570, 0.308423514767210970, 0.308375951924460050, 0.308328388310769250, 0.308280823926257440, 0.308233258771043180, 0.308185692845246220, 0.308138126148984950, +0.308090558682378450, 0.308042990445545060, 0.307995421438604640, 0.307947851661675710, 0.307900281114877110, 0.307852709798327410, 0.307805137712146290, 0.307757564856452390, +0.307709991231364550, 0.307662416837001350, 0.307614841673482520, 0.307567265740926580, 0.307519689039452040, 0.307472111569178700, 0.307424533330225070, 0.307376954322710120, +0.307329374546752350, 0.307281794002471580, 0.307234212689986350, 0.307186630609415530, 0.307139047760877750, 0.307091464144492790, 0.307043879760379110, 0.306996294608655800, +0.306948708689441300, 0.306901122002855460, 0.306853534549016820, 0.306805946328044310, 0.306758357340056520, 0.306710767585173290, 0.306663177063513090, 0.306615585775194990, +0.306567993720337490, 0.306520400899060460, 0.306472807311482350, 0.306425212957721850, 0.306377617837898740, 0.306330021952131600, 0.306282425300539400, 0.306234827883240690, +0.306187229700355330, 0.306139630752001960, 0.306092031038299460, 0.306044430559366420, 0.305996829315322790, 0.305949227306287100, 0.305901624532378290, 0.305854020993715000, +0.305806416690417140, 0.305758811622603150, 0.305711205790392180, 0.305663599193902790, 0.305615991833254770, 0.305568383708566820, 0.305520774819957490, 0.305473165167546630, +0.305425554751452830, 0.305377943571795210, 0.305330331628692280, 0.305282718922263880, 0.305235105452628770, 0.305187491219905850, 0.305139876224213790, 0.305092260465672450, +0.305044643944400510, 0.304997026660516920, 0.304949408614140330, 0.304901789805390620, 0.304854170234386490, 0.304806549901246950, 0.304758928806090570, 0.304711306949037250, +0.304663684330205740, 0.304616060949714550, 0.304568436807683640, 0.304520811904231690, 0.304473186239477670, 0.304425559813540250, 0.304377932626539340, 0.304330304678593620, +0.304282675969822170, 0.304235046500343550, 0.304187416270277790, 0.304139785279743450, 0.304092153528859650, 0.304044521017745040, 0.303996887746519560, 0.303949253715301900, +0.303901618924211080, 0.303853983373365780, 0.303806347062885900, 0.303758709992890230, 0.303711072163497300, 0.303663433574827170, 0.303615794226998410, 0.303568154120130160, +0.303520513254341150, 0.303472871629751280, 0.303425229246479190, 0.303377586104644050, 0.303329942204364490, 0.303282297545760530, 0.303234652128950840, 0.303187005954054460, +0.303139359021190210, 0.303091711330477960, 0.303044062882036450, 0.302996413675984730, 0.302948763712441560, 0.302901112991526940, 0.302853461513359570, 0.302805809278058450, +0.302758156285742490, 0.302710502536531480, 0.302662848030544220, 0.302615192767899440, 0.302567536748717110, 0.302519879973115910, 0.302472222441215080, 0.302424564153133180, +0.302376905108990350, 0.302329245308905260, 0.302281584752997050, 0.302233923441384390, 0.302186261374187410, 0.302138598551524750, 0.302090934973515630, 0.302043270640278750, +0.301995605551934050, 0.301947939708600400, 0.301900273110396910, 0.301852605757442270, 0.301804937649856550, 0.301757268787758490, 0.301709599171266830, 0.301661928800501580, +0.301614257675581530, 0.301566585796625870, 0.301518913163753290, 0.301471239777083840, 0.301423565636736280, 0.301375890742829830, 0.301328215095483240, 0.301280538694816520, +0.301232861540948470, 0.301185183633998210, 0.301137504974084650, 0.301089825561327680, 0.301042145395846170, 0.300994464477759290, 0.300946782807185840, 0.300899100384245890, +0.300851417209058110, 0.300803733281741430, 0.300756048602415840, 0.300708363171200090, 0.300660676988213470, 0.300612990053574670, 0.300565302367403860, 0.300517613929819790, +0.300469924740941700, 0.300422234800888370, 0.300374544109779870, 0.300326852667735010, 0.300279160474873020, 0.300231467531312750, 0.300183773837174150, 0.300136079392576140, +0.300088384197637950, 0.300040688252478370, 0.299992991557217540, 0.299945294111974180, 0.299897595916867600, 0.299849896972016580, 0.299802197277541260, 0.299754496833560480, +0.299706795640192980, 0.299659093697558940, 0.299611391005777160, 0.299563687564966930, 0.299515983375246990, 0.299468278436737570, 0.299420572749557470, 0.299372866313825870, +0.299325159129661730, 0.299277451197185130, 0.299229742516514850, 0.299182033087770250, 0.299134322911070170, 0.299086611986534630, 0.299038900314282650, 0.298991187894433350, +0.298943474727105700, 0.298895760812419750, 0.298848046150494430, 0.298800330741448570, 0.298752614585402250, 0.298704897682474440, 0.298657180032784410, 0.298609461636450970, +0.298561742493594300, 0.298514022604333300, 0.298466301968787210, 0.298418580587074990, 0.298370858459316710, 0.298323135585631280, 0.298275411966137990, 0.298227687600955800, +0.298179962490204790, 0.298132236634003840, 0.298084510032472330, 0.298036782685729140, 0.297989054593894410, 0.297941325757087040, 0.297893596175425880, 0.297845865849031220, +0.297798134778021860, 0.297750402962517200, 0.297702670402636090, 0.297654937098498720, 0.297607203050223980, 0.297559468257931280, 0.297511732721739470, 0.297463996441768740, +0.297416259418138040, 0.297368521650966670, 0.297320783140373580, 0.297273043886478960, 0.297225303889401770, 0.297177563149261250, 0.297129821666176460, 0.297082079440267490, +0.297034336471653340, 0.296986592760452920, 0.296938848306786460, 0.296891103110772880, 0.296843357172531520, 0.296795610492181340, 0.296747863069842580, 0.296700114905634140, +0.296652365999675430, 0.296604616352085400, 0.296556865962984200, 0.296509114832490870, 0.296461362960724780, 0.296413610347804830, 0.296365856993851260, 0.296318102898983080, +0.296270348063319590, 0.296222592486979850, 0.296174836170084050, 0.296127079112751160, 0.296079321315100560, 0.296031562777251230, 0.295983803499323460, 0.295936043481436150, +0.295888282723708320, 0.295840521226260200, 0.295792758989210760, 0.295744996012679400, 0.295697232296785180, 0.295649467841648310, 0.295601702647387720, 0.295553936714122890, +0.295506170041972830, 0.295458402631057710, 0.295410634481496630, 0.295362865593408960, 0.295315095966913690, 0.295267325602131090, 0.295219554499180190, 0.295171782658180390, +0.295124010079250760, 0.295076236762511490, 0.295028462708081640, 0.294980687916080180, 0.294932912386627440, 0.294885136119842410, 0.294837359115844580, 0.294789581374752920, +0.294741802896687670, 0.294694023681768000, 0.294646243730113220, 0.294598463041842400, 0.294550681617075870, 0.294502899455932610, 0.294455116558532130, 0.294407332924993440, +0.294359548555436780, 0.294311763449981330, 0.294263977608746400, 0.294216191031851150, 0.294168403719415830, 0.294120615671559500, 0.294072826888401250, 0.294025037370061300, +0.293977247116658790, 0.293929456128313120, 0.293881664405143410, 0.293833871947270010, 0.293786078754811890, 0.293738284827888550, 0.293690490166619080, 0.293642694771123810, +0.293594898641521830, 0.293547101777932580, 0.293499304180475150, 0.293451505849269930, 0.293403706784435890, 0.293355906986092600, 0.293308106454359120, 0.293260305189355810, +0.293212503191201730, 0.293164700460016410, 0.293116896995918860, 0.293069092799029540, 0.293021287869467460, 0.292973482207351750, 0.292925675812802770, 0.292877868685939620, +0.292830060826881730, 0.292782252235748330, 0.292734442912659710, 0.292686632857734940, 0.292638822071093650, 0.292591010552854860, 0.292543198303138910, 0.292495385322065040, +0.292447571609752650, 0.292399757166320940, 0.292351941991890300, 0.292304126086579740, 0.292256309450508900, 0.292208492083796840, 0.292160673986563980, 0.292112855158929430, +0.292065035601012320, 0.292017215312933060, 0.291969394294810720, 0.291921572546764980, 0.291873750068914810, 0.291825926861380700, 0.291778102924281800, 0.291730278257737620, +0.291682452861867340, 0.291634626736791300, 0.291586799882628760, 0.291538972299499210, 0.291491143987521790, 0.291443314946816910, 0.291395485177503800, 0.291347654679701920, +0.291299823453530500, 0.291251991499109960, 0.291204158816559420, 0.291156325405998060, 0.291108491267546340, 0.291060656401323340, 0.291012820807448720, 0.290964984486041690, +0.290917147437222520, 0.290869309661110520, 0.290821471157825310, 0.290773631927485900, 0.290725791970212870, 0.290677951286125390, 0.290630109875342990, 0.290582267737984960, +0.290534424874171580, 0.290486581284022220, 0.290438736967656370, 0.290390891925193300, 0.290343046156753380, 0.290295199662455820, 0.290247352442419890, 0.290199504496765960, +0.290151655825613310, 0.290103806429081510, 0.290055956307289750, 0.290008105460358550, 0.289960253888407070, 0.289912401591554960, 0.289864548569921440, 0.289816694823626930, +0.289768840352790710, 0.289720985157532360, 0.289673129237971170, 0.289625272594227550, 0.289577415226420780, 0.289529557134670430, 0.289481698319095810, 0.289433838779817320, +0.289385978516954250, 0.289338117530626270, 0.289290255820952520, 0.289242393388053580, 0.289194530232048660, 0.289146666353056970, 0.289098801751199060, 0.289050936426594130, +0.289003070379361900, 0.288955203609621510, 0.288907336117493590, 0.288859467903097300, 0.288811598966552340, 0.288763729307977950, 0.288715858927494680, 0.288667987825221740, +0.288620116001278850, 0.288572243455785250, 0.288524370188861460, 0.288476496200626710, 0.288428621491200800, 0.288380746060702850, 0.288332869909253440, 0.288284993036971910, +0.288237115443977450, 0.288189237130390630, 0.288141358096330740, 0.288093478341917400, 0.288045597867269960, 0.287997716672508950, 0.287949834757753650, 0.287901952123123810, +0.287854068768738590, 0.287806184694718690, 0.287758299901183290, 0.287710414388252180, 0.287662528156044540, 0.287614641204681050, 0.287566753534280960, 0.287518865144963940, +0.287470976036849400, 0.287423086210057800, 0.287375195664708480, 0.287327304400920800, 0.287279412418815220, 0.287231519718511130, 0.287183626300128280, 0.287135732163785910, +0.287087837309604630, 0.287039941737703750, 0.286992045448203000, 0.286944148441221740, 0.286896250716880570, 0.286848352275298700, 0.286800453116596020, 0.286752553240891720, +0.286704652648306470, 0.286656751338959630, 0.286608849312970870, 0.286560946570459610, 0.286513043111546350, 0.286465138936350510, 0.286417234044991860, 0.286369328437589670, +0.286321422114264530, 0.286273515075135880, 0.286225607320323040, 0.286177698849946590, 0.286129789664125890, 0.286081879762980720, 0.286033969146630430, 0.285986057815195590, +0.285938145768795670, 0.285890233007550400, 0.285842319531579070, 0.285794405341002370, 0.285746490435939690, 0.285698574816510730, 0.285650658482834940, 0.285602741435032950, +0.285554823673224100, 0.285506905197528190, 0.285458986008064570, 0.285411066104953930, 0.285363145488315590, 0.285315224158268990, 0.285267302114934780, 0.285219379358432280, +0.285171455888881320, 0.285123531706401310, 0.285075606811112940, 0.285027681203135490, 0.284979754882588860, 0.284931827849592420, 0.284883900104266840, 0.284835971646731520, +0.284788042477106260, 0.284740112595510460, 0.284692182002064810, 0.284644250696888700, 0.284596318680101930, 0.284548385951823970, 0.284500452512175480, 0.284452518361275890, +0.284404583499244520, 0.284356647926202130, 0.284308711642268120, 0.284260774647562390, 0.284212836942204230, 0.284164898526314440, 0.284116959400012360, 0.284069019563417900, +0.284021079016650470, 0.283973137759830800, 0.283925195793078230, 0.283877253116512740, 0.283829309730253610, 0.283781365634421690, 0.283733420829136330, 0.283685475314517430, +0.283637529090684400, 0.283589582157757980, 0.283541634515857620, 0.283493686165102730, 0.283445737105614050, 0.283397787337511090, 0.283349836860913580, 0.283301885675941060, +0.283253933782714300, 0.283205981181352650, 0.283158027871976080, 0.283110073854704050, 0.283062119129657170, 0.283014163696955090, 0.282966207556717530, 0.282918250709064070, +0.282870293154115380, 0.282822334891990930, 0.282774375922810680, 0.282726416246694090, 0.282678455863761830, 0.282630494774133490, 0.282582532977928850, 0.282534570475267530, +0.282486607266270120, 0.282438643351056230, 0.282390678729745330, 0.282342713402458150, 0.282294747369314150, 0.282246780630433350, 0.282198813185935090, 0.282150845035940290, +0.282102876180568340, 0.282054906619939210, 0.282006936354172400, 0.281958965383388660, 0.281910993707707500, 0.281863021327248890, 0.281815048242132270, 0.281767074452478450, +0.281719099958406990, 0.281671124760037750, 0.281623148857490240, 0.281575172250885350, 0.281527194940342450, 0.281479216925981210, 0.281431238207922320, 0.281383258786285340, +0.281335278661190240, 0.281287297832756470, 0.281239316301104880, 0.281191334066355050, 0.281143351128626820, 0.281095367488039870, 0.281047383144714840, 0.280999398098771390, +0.280951412350329440, 0.280903425899508560, 0.280855438746429540, 0.280807450891211900, 0.280759462333975640, 0.280711473074840290, 0.280663483113926690, 0.280615492451354360, +0.280567501087242930, 0.280519509021713130, 0.280471516254884530, 0.280423522786877210, 0.280375528617810620, 0.280327533747805610, 0.280279538176981810, 0.280231541905459130, +0.280183544933357230, 0.280135547260796810, 0.280087548887897550, 0.280039549814779460, 0.279991550041562070, 0.279943549568366150, 0.279895548395311440, 0.279847546522517810, +0.279799543950104920, 0.279751540678193580, 0.279703536706903400, 0.279655532036354350, 0.279607526666666050, 0.279559520597959410, 0.279511513830353890, 0.279463506363969220, +0.279415498198926190, 0.279367489335344390, 0.279319479773343930, 0.279271469513044270, 0.279223458554566430, 0.279175446898029870, 0.279127434543554760, 0.279079421491260640, +0.279031407741268330, 0.278983393293697530, 0.278935378148668260, 0.278887362306300120, 0.278839345766713990, 0.278791328530029470, 0.278743310596366700, 0.278695291965845190, +0.278647272638585850, 0.278599252614708360, 0.278551231894332290, 0.278503210477578590, 0.278455188364566840, 0.278407165555417110, 0.278359142050249090, 0.278311117849183610, +0.278263092952340310, 0.278215067359839310, 0.278167041071800240, 0.278119014088343940, 0.278070986409590160, 0.278022958035658850, 0.277974928966669750, 0.277926899202743770, +0.277878868744000530, 0.277830837590560100, 0.277782805742542220, 0.277734773200067670, 0.277686739963256210, 0.277638706032227510, 0.277590671407102420, 0.277542636088000670, +0.277494600075042340, 0.277446563368347050, 0.277398525968035830, 0.277350487874228280, 0.277302449087044490, 0.277254409606604140, 0.277206369433028230, 0.277158328566436410, +0.277110287006948730, 0.277062244754684880, 0.277014201809765880, 0.276966158172311410, 0.276918113842441470, 0.276870068820275870, 0.276822023105935510, 0.276773976699540130, +0.276725929601209790, 0.276677881811064170, 0.276629833329224250, 0.276581784155809810, 0.276533734290940470, 0.276485683734737200, 0.276437632487319730, 0.276389580548808190, +0.276341527919322260, 0.276293474598982900, 0.276245420587909910, 0.276197365886223340, 0.276149310494042950, 0.276101254411489690, 0.276053197638683300, 0.276005140175743900, +0.275957082022791230, 0.275909023179946310, 0.275860963647328820, 0.275812903425058930, 0.275764842513256340, 0.275716780912042050, 0.275668718621535860, 0.275620655641857390, +0.275572591973127780, 0.275524527615466640, 0.275476462568994160, 0.275428396833830140, 0.275380330410095520, 0.275332263297910110, 0.275284195497394020, 0.275236127008667010, +0.275188057831850130, 0.275139987967063070, 0.275091917414426070, 0.275043846174058860, 0.274995774246082400, 0.274947701630616600, 0.274899628327781480, 0.274851554337696870, +0.274803479660483800, 0.274755404296262050, 0.274707328245151370, 0.274659251507272770, 0.274611174082746050, 0.274563095971691370, 0.274515017174228550, 0.274466937690478640, +0.274418857520561330, 0.274370776664596920, 0.274322695122705130, 0.274274612895007040, 0.274226529981622390, 0.274178446382671410, 0.274130362098273910, 0.274082277128550930, +0.274034191473622290, 0.273986105133608100, 0.273938018108628280, 0.273889930398803830, 0.273841842004254540, 0.273793752925100220, 0.273745663161461930, 0.273697572713459510, +0.273649481581213110, 0.273601389764842660, 0.273553297264469090, 0.273505204080212340, 0.273457110212192540, 0.273409015660529500, 0.273360920425344430, 0.273312824506756980, +0.273264727904887540, 0.273216630619855790, 0.273168532651782920, 0.273120434000788730, 0.273072334666993490, 0.273024234650516890, 0.272976133951480240, 0.272928032570003140, +0.272879930506206070, 0.272831827760208650, 0.272783724332132160, 0.272735620222096350, 0.272687515430221020, 0.272639409956627330, 0.272591303801435150, 0.272543196964764700, +0.272495089446735840, 0.272446981247469690, 0.272398872367086040, 0.272350762805705250, 0.272302652563447100, 0.272254541640432780, 0.272206430036782080, 0.272158317752615340, +0.272110204788052310, 0.272062091143214280, 0.272013976818220930, 0.271965861813192710, 0.271917746128249370, 0.271869629763512140, 0.271821512719100770, 0.271773394995135250, +0.271725276591736620, 0.271677157509024820, 0.271629037747120160, 0.271580917306142420, 0.271532796186212840, 0.271484674387451270, 0.271436551909978010, 0.271388428753912950, +0.271340304919377270, 0.271292180406490780, 0.271244055215373870, 0.271195929346146390, 0.271147802798929530, 0.271099675573843120, 0.271051547671007530, 0.271003419090542650, +0.270955289832569670, 0.270907159897208480, 0.270859029284578890, 0.270810897994802240, 0.270762766027998310, 0.270714633384287420, 0.270666500063789560, 0.270618366066625870, +0.270570231392916300, 0.270522096042781100, 0.270473960016340280, 0.270425823313714950, 0.270377685935025090, 0.270329547880390990, 0.270281409149932590, 0.270233269743771150, +0.270185129662026460, 0.270136988904819020, 0.270088847472268630, 0.270040705364496540, 0.269992562581622740, 0.269944419123767490, 0.269896274991050730, 0.269848130183593770, +0.269799984701516500, 0.269751838544938780, 0.269703691713981950, 0.269655544208765860, 0.269607396029410920, 0.269559247176037020, 0.269511097648765460, 0.269462947447716210, +0.269414796573009540, 0.269366645024765430, 0.269318492803105160, 0.269270339908148640, 0.269222186340016320, 0.269174032098828060, 0.269125877184705150, 0.269077721597767550, +0.269029565338135660, 0.268981408405929430, 0.268933250801270120, 0.268885092524277670, 0.268836933575072050, 0.268788773953774540, 0.268740613660505060, 0.268692452695384050, +0.268644291058531490, 0.268596128750068660, 0.268547965770115530, 0.268499802118792430, 0.268451637796219390, 0.268403472802517700, 0.268355307137807360, 0.268307140802208690, +0.268258973795841790, 0.268210806118827860, 0.268162637771286960, 0.268114468753339390, 0.268066299065105260, 0.268018128706705830, 0.267969957678261040, 0.267921785979890970, +0.267873613611716850, 0.267825440573858650, 0.267777266866436940, 0.267729092489571550, 0.267680917443383900, 0.267632741727993950, 0.267584565343522150, 0.267536388290088470, +0.267488210567814300, 0.267440032176819550, 0.267391853117224740, 0.267343673389149880, 0.267295492992716270, 0.267247311928043910, 0.267199130195253320, 0.267150947794464410, +0.267102764725798580, 0.267054580989375840, 0.267006396585316220, 0.266958211513741050, 0.266910025774770350, 0.266861839368524590, 0.266813652295123770, 0.266765464554689300, +0.266717276147341140, 0.266669087073199750, 0.266620897332385250, 0.266572706925018940, 0.266524515851220890, 0.266476324111111500, 0.266428131704810890, 0.266379938632440420, +0.266331744894120040, 0.266283550489970320, 0.266235355420111290, 0.266187159684664330, 0.266138963283749420, 0.266090766217487170, 0.266042568485997500, 0.265994370089401910, +0.265946171027820370, 0.265897971301372940, 0.265849770910181030, 0.265801569854364710, 0.265753368134044430, 0.265705165749340330, 0.265656962700373760, 0.265608758987264770, +0.265560554610133840, 0.265512349569101140, 0.265464143864287960, 0.265415937495814490, 0.265367730463801130, 0.265319522768368010, 0.265271314409636530, 0.265223105387726700, +0.265174895702759210, 0.265126685354853950, 0.265078474344132450, 0.265030262670714780, 0.264982050334721050, 0.264933837336272570, 0.264885623675489510, 0.264837409352492390, +0.264789194367401340, 0.264740978720337690, 0.264692762411421640, 0.264644545440773650, 0.264596327808513890, 0.264548109514763760, 0.264499890559643290, 0.264451670943273150, +0.264403450665773370, 0.264355229727265440, 0.264307008127869390, 0.264258785867705850, 0.264210562946894880, 0.264162339365557940, 0.264114115123815160, 0.264065890221786670, +0.264017664659593920, 0.263969438437356930, 0.263921211555196380, 0.263872984013232390, 0.263824755811586380, 0.263776526950378450, 0.263728297429729200, 0.263680067249758790, +0.263631836410588630, 0.263583604912338900, 0.263535372755130120, 0.263487139939082520, 0.263438906464317450, 0.263390672330955140, 0.263342437539116180, 0.263294202088920680, +0.263245965980490100, 0.263197729213944580, 0.263149491789404780, 0.263101253706990780, 0.263053014966824090, 0.263004775569024910, 0.262956535513713290, 0.262908294801010800, +0.262860053431037580, 0.262811811403914190, 0.262763568719760860, 0.262715325378699070, 0.262667081380848930, 0.262618836726331070, 0.262570591415265730, 0.262522345447774310, +0.262474098823977040, 0.262425851543994500, 0.262377603607946930, 0.262329355015955780, 0.262281105768141230, 0.262232855864623970, 0.262184605305524070, 0.262136354090963140, +0.262088102221061270, 0.262039849695938740, 0.261991596515717020, 0.261943342680516330, 0.261895088190457260, 0.261846833045660030, 0.261798577246246170, 0.261750320792335840, +0.261702063684049690, 0.261653805921508000, 0.261605547504832230, 0.261557288434142550, 0.261509028709559670, 0.261460768331203800, 0.261412507299196410, 0.261364245613657790, +0.261315983274708510, 0.261267720282468860, 0.261219456637060370, 0.261171192338603200, 0.261122927387217650, 0.261074661783025190, 0.261026395526146040, 0.260978128616700940, +0.260929861054810090, 0.260881592840595030, 0.260833323974175970, 0.260785054455673630, 0.260736784285208190, 0.260688513462901230, 0.260640241988872980, 0.260591969863244120, +0.260543697086134950, 0.260495423657666920, 0.260447149577960340, 0.260398874847135920, 0.260350599465313800, 0.260302323432615720, 0.260254046749161750, 0.260205769415072290, +0.260157491430468790, 0.260109212795471560, 0.260060933510201320, 0.260012653574778320, 0.259964372989324120, 0.259916091753958970, 0.259867809868803590, 0.259819527333978280, +0.259771244149604560, 0.259722960315802720, 0.259674675832693490, 0.259626390700397170, 0.259578104919035270, 0.259529818488728140, 0.259481531409596400, 0.259433243681760460, +0.259384955305341840, 0.259336666280460810, 0.259288376607238080, 0.259240086285794040, 0.259191795316250200, 0.259143503698726850, 0.259095211433344350, 0.259046918520224210, +0.258998624959486780, 0.258950330751252790, 0.258902035895642530, 0.258853740392777640, 0.258805444242778400, 0.258757147445765560, 0.258708850001859390, 0.258660551911181540, +0.258612253173852280, 0.258563953789992420, 0.258515653759722240, 0.258467353083163380, 0.258419051760436110, 0.258370749791661190, 0.258322447176959010, 0.258274143916451150, +0.258225840010257890, 0.258177535458499590, 0.258129230261297920, 0.258080924418773170, 0.258032617931046090, 0.257984310798237030, 0.257936003020467650, 0.257887694597858210, +0.257839385530529600, 0.257791075818602060, 0.257742765462197270, 0.257694454461435570, 0.257646142816437720, 0.257597830527324100, 0.257549517594216350, 0.257501204017234750, +0.257452889796500160, 0.257404574932132920, 0.257356259424254720, 0.257307943272985840, 0.257259626478446630, 0.257211309040758840, 0.257162990960042750, 0.257114672236419210, +0.257066352870008510, 0.257018032860932390, 0.256969712209311200, 0.256921390915265670, 0.256873068978916320, 0.256824746400384660, 0.256776423179791160, 0.256728099317256600, +0.256679774812901380, 0.256631449666847140, 0.256583123879214230, 0.256534797450123590, 0.256486470379695460, 0.256438142668051650, 0.256389814315312440, 0.256341485321598670, +0.256293155687030820, 0.256244825411730440, 0.256196494495818050, 0.256148162939414000, 0.256099830742639920, 0.256051497905616320, 0.256003164428463940, 0.255954830311303230, +0.255906495554255880, 0.255858160157442280, 0.255809824120983300, 0.255761487444999270, 0.255713150129611990, 0.255664812174941860, 0.255616473581109670, 0.255568134348235890, +0.255519794476442190, 0.255471453965849030, 0.255423112816577200, 0.255374771028747170, 0.255326428602480620, 0.255278085537898050, 0.255229741835119760, 0.255181397494267600, +0.255133052515461920, 0.255084706898823680, 0.255036360644473160, 0.254988013752532220, 0.254939666223121200, 0.254891318056361060, 0.254842969252372150, 0.254794619811276270, +0.254746269733193860, 0.254697919018245730, 0.254649567666552390, 0.254601215678235570, 0.254552863053415730, 0.254504509792213730, 0.254456155894750010, 0.254407801361146320, +0.254359446191523120, 0.254311090386000920, 0.254262733944701390, 0.254214376867745010, 0.254166019155252720, 0.254117660807344940, 0.254069301824143450, 0.254020942205768650, +0.253972581952341570, 0.253924221063982550, 0.253875859540813430, 0.253827497382954680, 0.253779134590527140, 0.253730771163651390, 0.253682407102449100, 0.253634042407040850, +0.253585677077547420, 0.253537311114089390, 0.253488944516788550, 0.253440577285765300, 0.253392209421140210, 0.253343840923035020, 0.253295471791570190, 0.253247102026866730, +0.253198731629045050, 0.253150360598226990, 0.253101988934533060, 0.253053616638084120, 0.253005243709000680, 0.252956870147404640, 0.252908495953416360, 0.252860121127156830, +0.252811745668746650, 0.252763369578307470, 0.252714992855959890, 0.252666615501824790, 0.252618237516022750, 0.252569858898675560, 0.252521479649903680, 0.252473099769828120, +0.252424719258569410, 0.252376338116249320, 0.252327956342988380, 0.252279573938907100, 0.252231190904127320, 0.252182807238769570, 0.252134422942954790, 0.252086038016803570, +0.252037652460437630, 0.251989266273977610, 0.251940879457544400, 0.251892492011258520, 0.251844103935241930, 0.251795715229615020, 0.251747325894498830, 0.251698935930013860, +0.251650545336282060, 0.251602154113423850, 0.251553762261560230, 0.251505369780811780, 0.251456976671300400, 0.251408582933146500, 0.251360188566470740, 0.251311793571394990, +0.251263397948039700, 0.251215001696525940, 0.251166604816974230, 0.251118207309506460, 0.251069809174243150, 0.251021410411305320, 0.250973011020813540, 0.250924611002889650, +0.250876210357654230, 0.250827809085228280, 0.250779407185732440, 0.250731004659288440, 0.250682601506016960, 0.250634197726038950, 0.250585793319475060, 0.250537388286447060, +0.250488982627075640, 0.250440576341481310, 0.250392169429785980, 0.250343761892110220, 0.250295353728575090, 0.250246944939301110, 0.250198535524410180, 0.250150125484022930, +0.250101714818260380, 0.250053303527243090, 0.250004891611092960, 0.249956479069930650, 0.249908065903877120, 0.249859652113053000, 0.249811237697580150, 0.249762822657579240, +0.249714406993171270, 0.249665990704476840, 0.249617573791617860, 0.249569156254714960, 0.249520738093889170, 0.249472319309261090, 0.249423899900952650, 0.249375479869084450, +0.249327059213777120, 0.249278637935152590, 0.249230216033331450, 0.249181793508434780, 0.249133370360583200, 0.249084946589898630, 0.249036522196501660, 0.248988097180513430, +0.248939671542054490, 0.248891245281246810, 0.248842818398211040, 0.248794390893068210, 0.248745962765938940, 0.248697534016945220, 0.248649104646207680, 0.248600674653847360, +0.248552244039984940, 0.248503812804742320, 0.248455380948240180, 0.248406948470599160, 0.248358515371941200, 0.248310081652386940, 0.248261647312057470, 0.248213212351073460, +0.248164776769556870, 0.248116340567628320, 0.248067903745408910, 0.248019466303019330, 0.247971028240581510, 0.247922589558216110, 0.247874150256044230, 0.247825710334186540, +0.247777269792765040, 0.247728828631900350, 0.247680386851713560, 0.247631944452325420, 0.247583501433857820, 0.247535057796431480, 0.247486613540167040, 0.247438168665186530, +0.247389723171610560, 0.247341277059560330, 0.247292830329156440, 0.247244382980520930, 0.247195935013774430, 0.247147486429038110, 0.247099037226432640, 0.247050587406080020, +0.247002136968100920, 0.246953685912616490, 0.246905234239747420, 0.246856781949615660, 0.246808329042341980, 0.246759875518047460, 0.246711421376852810, 0.246662966618880070, +0.246614511244249910, 0.246566055253083010, 0.246517598645501430, 0.246469141421625850, 0.246420683581577400, 0.246372225125476820, 0.246323766053446110, 0.246275306365605990, +0.246226846062077590, 0.246178385142981650, 0.246129923608440190, 0.246081461458573900, 0.246032998693503980, 0.245984535313351130, 0.245936071318237360, 0.245887606708283410, +0.245839141483610440, 0.245790675644339210, 0.245742209190591700, 0.245693742122488650, 0.245645274440151270, 0.245596806143700270, 0.245548337233257700, 0.245499867708944270, +0.245451397570880750, 0.245402926819189150, 0.245354455453990260, 0.245305983475405220, 0.245257510883554770, 0.245209037678561000, 0.245160563860544630, 0.245112089429626840, +0.245063614385928390, 0.245015138729571340, 0.244966662460676470, 0.244918185579364930, 0.244869708085757480, 0.244821229979976180, 0.244772751262141850, 0.244724271932375610, +0.244675791990798280, 0.244627311437531890, 0.244578830272697200, 0.244530348496415030, 0.244481866108807400, 0.244433383109995130, 0.244384899500099400, 0.244336415279240960, +0.244287930447541930, 0.244239445005123100, 0.244190958952105630, 0.244142472288610330, 0.244093985014759290, 0.244045497130673280, 0.243997008636473530, 0.243948519532280830, +0.243900029818217260, 0.243851539494403640, 0.243803048560961130, 0.243754557018010580, 0.243706064865674090, 0.243657572104072410, 0.243609078733326380, 0.243560584753558100, +0.243512090164888340, 0.243463594967438360, 0.243415099161328970, 0.243366602746682230, 0.243318105723619030, 0.243269608092260530, 0.243221109852727600, 0.243172611005142310, +0.243124111549625520, 0.243075611486298420, 0.243027110815281860, 0.242978609536697980, 0.242930107650667550, 0.242881605157311890, 0.242833102056751740, 0.242784598349109290, +0.242736094034505360, 0.242687589113061150, 0.242639083584897580, 0.242590577450136710, 0.242542070708899380, 0.242493563361306480, 0.242445055407480100, 0.242396546847541060, +0.242348037681610650, 0.242299527909809710, 0.242251017532260420, 0.242202506549083570, 0.242153994960400440, 0.242105482766331900, 0.242056969967000070, 0.242008456562525840, +0.241959942553030440, 0.241911427938634790, 0.241862912719460980, 0.241814396895629890, 0.241765880467262800, 0.241717363434480580, 0.241668845797405380, 0.241620327556158090, +0.241571808710859540, 0.241523289261631880, 0.241474769208596010, 0.241426248551873220, 0.241377727291584350, 0.241329205427851630, 0.241280682960795880, 0.241232159890538420, +0.241183636217200150, 0.241135111940903200, 0.241086587061768500, 0.241038061579917310, 0.240989535495470530, 0.240941008808550320, 0.240892481519277640, 0.240843953627773720, +0.240795425134159500, 0.240746896038557150, 0.240698366341087540, 0.240649836041871600, 0.240601305141031510, 0.240552773638688130, 0.240504241534962830, 0.240455708829976520, +0.240407175523851320, 0.240358641616708220, 0.240310107108668510, 0.240261571999853100, 0.240213036290384180, 0.240164499980382670, 0.240115963069969930, 0.240067425559266830, +0.240018887448395610, 0.239970348737477160, 0.239921809426632850, 0.239873269515983560, 0.239824729005651550, 0.239776187895757720, 0.239727646186423000, 0.239679103877769580, +0.239630560969918390, 0.239582017462990820, 0.239533473357107760, 0.239484928652391430, 0.239436383348962810, 0.239387837446943220, 0.239339290946453620, 0.239290743847616200, +0.239242196150551920, 0.239193647855382160, 0.239145098962227850, 0.239096549471211230, 0.239047999382453250, 0.238999448696075260, 0.238950897412198190, 0.238902345530944330, +0.238853793052434590, 0.238805239976790400, 0.238756686304132660, 0.238708132034583630, 0.238659577168264280, 0.238611021705295550, 0.238562465645799690, 0.238513908989897690, +0.238465351737710880, 0.238416793889360300, 0.238368235444968160, 0.238319676404655400, 0.238271116768543480, 0.238222556536753340, 0.238173995709407200, 0.238125434286626110, +0.238076872268531410, 0.238028309655244130, 0.237979746446886460, 0.237931182643579460, 0.237882618245444520, 0.237834053252602570, 0.237785487665175900, 0.237736921483285540, +0.237688354707052460, 0.237639787336598910, 0.237591219372045890, 0.237542650813514810, 0.237494081661126680, 0.237445511915003790, 0.237396941575267110, 0.237348370642038060, +0.237299799115437670, 0.237251226995588200, 0.237202654282610700, 0.237154080976626520, 0.237105507077756740, 0.237056932586123590, 0.237008357501848150, 0.236959781825051790, +0.236911205555855540, 0.236862628694381710, 0.236814051240751330, 0.236765473195085370, 0.236716894557506160, 0.236668315328134730, 0.236619735507092480, 0.236571155094500500, +0.236522574090481020, 0.236473992495155130, 0.236425410308644250, 0.236376827531069420, 0.236328244162552960, 0.236279660203215890, 0.236231075653179660, 0.236182490512565320, +0.236133904781495180, 0.236085318460090260, 0.236036731548472050, 0.235988144046761610, 0.235939555955081200, 0.235890967273551940, 0.235842378002295240, 0.235793788141432150, +0.235745197691085040, 0.235696606651374930, 0.235648015022422890, 0.235599422804351230, 0.235550829997281000, 0.235502236601333710, 0.235453642616630380, 0.235405048043293400, +0.235356452881443800, 0.235307857131203060, 0.235259260792692220, 0.235210663866033680, 0.235162066351348480, 0.235113468248758120, 0.235064869558383650, 0.235016270280347470, +0.234967670414770570, 0.234919069961774530, 0.234870468921480360, 0.234821867294010440, 0.234773265079485870, 0.234724662278027710, 0.234676058889758320, 0.234627454914798780, +0.234578850353270580, 0.234530245205294860, 0.234481639470993960, 0.234433033150488940, 0.234384426243901350, 0.234335818751352260, 0.234287210672964040, 0.234238602008857790, +0.234189992759155060, 0.234141382923976900, 0.234092772503445730, 0.234044161497682620, 0.233995549906809100, 0.233946937730946300, 0.233898324970216560, 0.233849711624741020, +0.233801097694640750, 0.233752483180038190, 0.233703868081054420, 0.233655252397810960, 0.233606636130428950, 0.233558019279030800, 0.233509401843737590, 0.233460783824670860, +0.233412165221951740, 0.233363546035702670, 0.233314926266044690, 0.233266305913099440, 0.233217684976987970, 0.233169063457832700, 0.233120441355754800, 0.233071818670875790, +0.233023195403316810, 0.232974571553200250, 0.232925947120647290, 0.232877322105779020, 0.232828696508717880, 0.232780070329584980, 0.232731443568501920, 0.232682816225589810, +0.232634188300971100, 0.232585559794766920, 0.232536930707098830, 0.232488301038087990, 0.232439670787856820, 0.232391039956526490, 0.232342408544218530, 0.232293776551054150, +0.232245143977155730, 0.232196510822644480, 0.232147877087641950, 0.232099242772269290, 0.232050607876648940, 0.232001972400902090, 0.231953336345150310, 0.231904699709514740, +0.231856062494117860, 0.231807424699080830, 0.231758786324524790, 0.231710147370572240, 0.231661507837344290, 0.231612867724962620, 0.231564227033548310, 0.231515585763223870, +0.231466943914110460, 0.231418301486329720, 0.231369658480002770, 0.231321014895252110, 0.231272370732198920, 0.231223725990964770, 0.231175080671670920, 0.231126434774439780, +0.231077788299392540, 0.231029141246650860, 0.230980493616335880, 0.230931845408570090, 0.230883196623474670, 0.230834547261170860, 0.230785897321781120, 0.230737246805426620, +0.230688595712228990, 0.230639944042309450, 0.230591291795790490, 0.230542638972793280, 0.230493985573439500, 0.230445331597850300, 0.230396677046148220, 0.230348021918454440, +0.230299366214890610, 0.230250709935577920, 0.230202053080638900, 0.230153395650194740, 0.230104737644367120, 0.230056079063277190, 0.230007419907047510, 0.229958760175799280, +0.229910099869653690, 0.229861438988733320, 0.229812777533159320, 0.229764115503053400, 0.229715452898536760, 0.229666789719731900, 0.229618125966760090, 0.229569461639742960, +0.229520796738801710, 0.229472131264058940, 0.229423465215635840, 0.229374798593654060, 0.229326131398234850, 0.229277463629500770, 0.229228795287573010, 0.229180126372573260, +0.229131456884622780, 0.229082786823844060, 0.229034116190358410, 0.228985444984287440, 0.228936773205752430, 0.228888100854875930, 0.228839427931779170, 0.228790754436583420, +0.228742080369411180, 0.228693405730383770, 0.228644730519622860, 0.228596054737249670, 0.228547378383386760, 0.228498701458155430, 0.228450023961677350, 0.228401345894073770, +0.228352667255467240, 0.228303988045979070, 0.228255308265730930, 0.228206627914844060, 0.228157946993441080, 0.228109265501643200, 0.228060583439572200, 0.228011900807349260, +0.227963217605097020, 0.227914533832936750, 0.227865849490989700, 0.227817164579378480, 0.227768479098224340, 0.227719793047648970, 0.227671106427773720, 0.227622419238721120, +0.227573731480612500, 0.227525043153569530, 0.227476354257713510, 0.227427664793167030, 0.227378974760051420, 0.227330284158488350, 0.227281592988599150, 0.227232901250506410, +0.227184208944331390, 0.227135516070195860, 0.227086822628221110, 0.227038128618529730, 0.226989434041243030, 0.226940738896482310, 0.226892043184370170, 0.226843346905027940, +0.226794650058577350, 0.226745952645139690, 0.226697254664837560, 0.226648556117792330, 0.226599857004125690, 0.226551157323958970, 0.226502457077414790, 0.226453756264614480, +0.226405054885679770, 0.226356352940732000, 0.226307650429893760, 0.226258947353286420, 0.226210243711031680, 0.226161539503250940, 0.226112834730066740, 0.226064129391600480, +0.226015423487973460, 0.225966717019308320, 0.225918009985726390, 0.225869302387349420, 0.225820594224298760, 0.225771885496697050, 0.225723176204665640, 0.225674466348326270, +0.225625755927800320, 0.225577044943210400, 0.225528333394677870, 0.225479621282324520, 0.225430908606271680, 0.225382195366642000, 0.225333481563556810, 0.225284767197137940, +0.225236052267506700, 0.225187336774785780, 0.225138620719096520, 0.225089904100560710, 0.225041186919299700, 0.224992469175436140, 0.224943750869091410, 0.224895032000386880, +0.224846312569445210, 0.224797592576387760, 0.224748872021336310, 0.224700150904412250, 0.224651429225738270, 0.224602706985435690, 0.224553984183626380, 0.224505260820431650, +0.224456536895974200, 0.224407812410375410, 0.224359087363757060, 0.224310361756240610, 0.224261635587948650, 0.224212908859002640, 0.224164181569524330, 0.224115453719635120, +0.224066725309457730, 0.224017996339113540, 0.223969266808723890, 0.223920536718411530, 0.223871806068297850, 0.223823074858504610, 0.223774343089153280, 0.223725610760366510, +0.223676877872265730, 0.223628144424972720, 0.223579410418608960, 0.223530675853297080, 0.223481940729158500, 0.223433205046315090, 0.223384468804888240, 0.223335732005000650, +0.223286994646773710, 0.223238256730329290, 0.223189518255788810, 0.223140779223274970, 0.223092039632909160, 0.223043299484812830, 0.222994558779108680, 0.222945817515918130, +0.222897075695363040, 0.222848333317564820, 0.222799590382646210, 0.222750846890728630, 0.222702102841933920, 0.222653358236383550, 0.222604613074200180, 0.222555867355505280, +0.222507121080420730, 0.222458374249067950, 0.222409626861569650, 0.222360878918047290, 0.222312130418622720, 0.222263381363417420, 0.222214631752554070, 0.222165881586154160, +0.222117130864339540, 0.222068379587231630, 0.222019627754953240, 0.221970875367625780, 0.221922122425370680, 0.221873368928310720, 0.221824614876567350, 0.221775860270262410, +0.221727105109517430, 0.221678349394455080, 0.221629593125196890, 0.221580836301864700, 0.221532078924579990, 0.221483320993465520, 0.221434562508642710, 0.221385803470233540, +0.221337043878359400, 0.221288283733143100, 0.221239523034706090, 0.221190761783170260, 0.221141999978657110, 0.221093237621289380, 0.221044474711188570, 0.220995711248476140, +0.220946947233274850, 0.220898182665706180, 0.220849417545892070, 0.220800651873954010, 0.220751885650014720, 0.220703118874195720, 0.220654351546618940, 0.220605583667405820, +0.220556815236679190, 0.220508046254560520, 0.220459276721171740, 0.220410506636634330, 0.220361736001071090, 0.220312964814603520, 0.220264193077353510, 0.220215420789442620, +0.220166647950993580, 0.220117874562127950, 0.220069100622967170, 0.220020326133634090, 0.219971551094250180, 0.219922775504937410, 0.219873999365817250, 0.219825222677012540, +0.219776445438644770, 0.219727667650835870, 0.219678889313707380, 0.219630110427382120, 0.219581330991981540, 0.219532551007627670, 0.219483770474441980, 0.219434989392547300, +0.219386207762065130, 0.219337425583117470, 0.219288642855825780, 0.219239859580312950, 0.219191075756700440, 0.219142291385110270, 0.219093506465663920, 0.219044720998484240, +0.218995934983692740, 0.218947148421411000, 0.218898361311761800, 0.218849573654866710, 0.218800785450847690, 0.218751996699826260, 0.218703207401925280, 0.218654417557266280, +0.218605627165971230, 0.218556836228161690, 0.218508044743960460, 0.218459252713489150, 0.218410460136869710, 0.218361667014223690, 0.218312873345673920, 0.218264079131341960, +0.218215284371349820, 0.218166489065819040, 0.218117693214872450, 0.218068896818631650, 0.218020099877218150, 0.217971302390754850, 0.217922504359363280, 0.217873705783165480, +0.217824906662282940, 0.217776106996838610, 0.217727306786953980, 0.217678506032751100, 0.217629704734351500, 0.217580902891878090, 0.217532100505452440, 0.217483297575196490, +0.217434494101231920, 0.217385690083681500, 0.217336885522666890, 0.217288080418310050, 0.217239274770732570, 0.217190468580057330, 0.217141661846405960, 0.217092854569899960, +0.217044046750662270, 0.216995238388814460, 0.216946429484478560, 0.216897620037776160, 0.216848810048830140, 0.216799999517762080, 0.216751188444694040, 0.216702376829747580, +0.216653564673045640, 0.216604751974709740, 0.216555938734862010, 0.216507124953623980, 0.216458310631118560, 0.216409495767467370, 0.216360680362792430, 0.216311864417215390, +0.216263047930859100, 0.216214230903845170, 0.216165413336295270, 0.216116595228332240, 0.216067776580077730, 0.216018957391653780, 0.215970137663182020, 0.215921317394785320, +0.215872496586585360, 0.215823675238704130, 0.215774853351263280, 0.215726030924385750, 0.215677207958193120, 0.215628384452807490, 0.215579560408350470, 0.215530735824944950, +0.215481910702712610, 0.215433085041775500, 0.215384258842255230, 0.215335432104274750, 0.215286604827955700, 0.215237777013420150, 0.215188948660789690, 0.215140119770187320, +0.215091290341734630, 0.215042460375553270, 0.214993629871766230, 0.214944798830495080, 0.214895967251861970, 0.214847135135988490, 0.214798302482997610, 0.214749469293010950, +0.214700635566150650, 0.214651801302538300, 0.214602966502296900, 0.214554131165548080, 0.214505295292413940, 0.214456458883016090, 0.214407621937477560, 0.214358784455919970, +0.214309946438465430, 0.214261107885235590, 0.214212268796353380, 0.214163429171940530, 0.214114589012118660, 0.214065748317010750, 0.214016907086738480, 0.213968065321423960, +0.213919223021188790, 0.213870380186156030, 0.213821536816447330, 0.213772692912184760, 0.213723848473490050, 0.213675003500486150, 0.213626157993294740, 0.213577311952037910, +0.213528465376837400, 0.213479618267816140, 0.213430770625095830, 0.213381922448798610, 0.213333073739046140, 0.213284224495961410, 0.213235374719666140, 0.213186524410281990, +0.213137673567931950, 0.213088822192737750, 0.213039970284821490, 0.212991117844304860, 0.212942264871310880, 0.212893411365961240, 0.212844557328378060, 0.212795702758683060, +0.212746847656999220, 0.212697992023448270, 0.212649135858152370, 0.212600279161233170, 0.212551421932813710, 0.212502564173015690, 0.212453705881961250, 0.212404847059772140, +0.212355987706571330, 0.212307127822480540, 0.212258267407621940, 0.212209406462117250, 0.212160544986089470, 0.212111682979660320, 0.212062820442951520, 0.212013957376086140, +0.211965093779185820, 0.211916229652372810, 0.211867364995768750, 0.211818499809496740, 0.211769634093678470, 0.211720767848436130, 0.211671901073891420, 0.211623033770167390, +0.211574165937385790, 0.211525297575668760, 0.211476428685138080, 0.211427559265916720, 0.211378689318126480, 0.211329818841889530, 0.211280947837327590, 0.211232076304563730, +0.211183204243719640, 0.211134331654917130, 0.211085458538279230, 0.211036584893927680, 0.210987710721984660, 0.210938836022571930, 0.210889960795812570, 0.210841085041828270, +0.210792208760741280, 0.210743331952673340, 0.210694454617747500, 0.210645576756085500, 0.210596698367809590, 0.210547819453041460, 0.210498940011904250, 0.210450060044519690, +0.210401179551009950, 0.210352298531496870, 0.210303416986103440, 0.210254534914951500, 0.210205652318162770, 0.210156769195860320, 0.210107885548165980, 0.210059001375201920, +0.210010116677089940, 0.209961231453953070, 0.209912345705913130, 0.209863459433092340, 0.209814572635612460, 0.209765685313596570, 0.209716797467166480, 0.209667909096444390, +0.209619020201552100, 0.209570130782612690, 0.209521240839747960, 0.209472350373080120, 0.209423459382730990, 0.209374567868823610, 0.209325675831479850, 0.209276783270821440, +0.209227890186971490, 0.209178996580051850, 0.209130102450184710, 0.209081207797491870, 0.209032312622096460, 0.208983416924120260, 0.208934520703685510, 0.208885623960914010, +0.208836726695928930, 0.208787828908852000, 0.208738930599805500, 0.208690031768911240, 0.208641132416292340, 0.208592232542070600, 0.208543332146368300, 0.208494431229307220, +0.208445529791010500, 0.208396627831599960, 0.208347725351197830, 0.208298822349925970, 0.208249918827907500, 0.208201014785264200, 0.208152110222117960, 0.208103205138591870, +0.208054299534807750, 0.208005393410887920, 0.207956486766954140, 0.207907579603129580, 0.207858671919536080, 0.207809763716295890, 0.207760854993530860, 0.207711945751364150, +0.207663035989917530, 0.207614125709313370, 0.207565214909673420, 0.207516303591120890, 0.207467391753777600, 0.207418479397765840, 0.207369566523207430, 0.207320653130225550, +0.207271739218942010, 0.207222824789478700, 0.207173909841958770, 0.207124994376504080, 0.207076078393236880, 0.207027161892279070, 0.206978244873753770, 0.206929327337782850, +0.206880409284488640, 0.206831490713992950, 0.206782571626419000, 0.206733652021888590, 0.206684731900524050, 0.206635811262447260, 0.206586890107781390, 0.206537968436648260, +0.206489046249170250, 0.206440123545469150, 0.206391200325668180, 0.206342276589889240, 0.206293352338254160, 0.206244427570886120, 0.206195502287907010, 0.206146576489439150, +0.206097650175604440, 0.206048723346526020, 0.205999796002325790, 0.205950868143126050, 0.205901939769048750, 0.205853010880216990, 0.205804081476752720, 0.205755151558778240, +0.205706221126415480, 0.205657290179787570, 0.205608358719016450, 0.205559426744224420, 0.205510494255533390, 0.205461561253066580, 0.205412627736945850, 0.205363693707293540, +0.205314759164231590, 0.205265824107883130, 0.205216888538370140, 0.205167952455814510, 0.205119015860339430, 0.205070078752066790, 0.205021141131118940, 0.204972202997617840, +0.204923264351686650, 0.204874325193447280, 0.204825385523022120, 0.204776445340533080, 0.204727504646103340, 0.204678563439854830, 0.204629621721909930, 0.204580679492390530, +0.204531736751419860, 0.204482793499119850, 0.204433849735612880, 0.204384905461020810, 0.204335960675466940, 0.204287015379073180, 0.204238069571961420, 0.204189123254254920, +0.204140176426075630, 0.204091229087545900, 0.204042281238787650, 0.203993332879924130, 0.203944384011077280, 0.203895434632369480, 0.203846484743922640, 0.203797534345860040, +0.203748583438303600, 0.203699632021375700, 0.203650680095198290, 0.203601727659894620, 0.203552774715586610, 0.203503821262396690, 0.203454867300446760, 0.203405912829860090, +0.203356957850758660, 0.203308002363264410, 0.203259046367500560, 0.203210089863589100, 0.203161132851652440, 0.203112175331812470, 0.203063217304192520, 0.203014258768914550, +0.202965299726100920, 0.202916340175873590, 0.202867380118355840, 0.202818419553669670, 0.202769458481937420, 0.202720496903281090, 0.202671534817823960, 0.202622572225688020, +0.202573609126995620, 0.202524645521868770, 0.202475681410430740, 0.202426716792803500, 0.202377751669109040, 0.202328786039470660, 0.202279819904010280, 0.202230853262850370, +0.202181886116112870, 0.202132918463921120, 0.202083950306397030, 0.202034981643663100, 0.201986012475841280, 0.201937042803054860, 0.201888072625425820, 0.201839101943076610, +0.201790130756129230, 0.201741159064706910, 0.201692186868931730, 0.201643214168926080, 0.201594240964811930, 0.201545267256712650, 0.201496293044750200, 0.201447318329047000, +0.201398343109725070, 0.201349367386907700, 0.201300391160716930, 0.201251414431274760, 0.201202437198704480, 0.201153459463128100, 0.201104481224668090, 0.201055502483446420, +0.201006523239586450, 0.200957543493210160, 0.200908563244440010, 0.200859582493398030, 0.200810601240207500, 0.200761619484990490, 0.200712637227869420, 0.200663654468966330, +0.200614671208404540, 0.200565687446306070, 0.200516703182793380, 0.200467718417988490, 0.200418733152014750, 0.200369747384994160, 0.200320761117048800, 0.200271774348301960, +0.200222787078875670, 0.200173799308892430, 0.200124811038474240, 0.200075822267744450, 0.200026832996825110, 0.199977843225838700, 0.199928852954907250, 0.199879862184154100, +0.199830870913701280, 0.199781879143671290, 0.199732886874186170, 0.199683894105369270, 0.199634900837342640, 0.199585907070228750, 0.199536912804149650, 0.199487918039228720, +0.199438922775588000, 0.199389927013349510, 0.199340930752636650, 0.199291933993571480, 0.199242936736276440, 0.199193938980873650, 0.199144940727486450, 0.199095941976236900, +0.199046942727247460, 0.198997942980640270, 0.198948942736538630, 0.198899941995064640, 0.198850940756340800, 0.198801939020489180, 0.198752936787633140, 0.198703934057894770, +0.198654930831396540, 0.198605927108260550, 0.198556922888610210, 0.198507918172567520, 0.198458912960255060, 0.198409907251794890, 0.198360901047310380, 0.198311894346923620, +0.198262887150756660, 0.198213879458932960, 0.198164871271574530, 0.198115862588803930, 0.198066853410743230, 0.198017843737515850, 0.197968833569243860, 0.197919822906049790, +0.197870811748055710, 0.197821800095385050, 0.197772787948159890, 0.197723775306502730, 0.197674762170535730, 0.197625748540382260, 0.197576734416164410, 0.197527719798004710, +0.197478704686025300, 0.197429689080349550, 0.197380672981099570, 0.197331656388397480, 0.197282639302366700, 0.197233621723129300, 0.197184603650807870, 0.197135585085524480, +0.197086566027402540, 0.197037546476564210, 0.196988526433132030, 0.196939505897228060, 0.196890484868975780, 0.196841463348497310, 0.196792441335915140, 0.196743418831351460, +0.196694395834929650, 0.196645372346771870, 0.196596348367000660, 0.196547323895738120, 0.196498298933107720, 0.196449273479231580, 0.196400247534231800, 0.196351221098231860, +0.196302194171353860, 0.196253166753720370, 0.196204138845453540, 0.196155110446676770, 0.196106081557512250, 0.196057052178082500, 0.196008022308509720, 0.195958991948917300, +0.195909961099427400, 0.195860929760162620, 0.195811897931245040, 0.195762865612798180, 0.195713832804944140, 0.195664799507805520, 0.195615765721504490, 0.195566731446164460, +0.195517696681907600, 0.195468661428856050, 0.195419625687133310, 0.195370589456861500, 0.195321552738163210, 0.195272515531160600, 0.195223477835977130, 0.195174439652734980, +0.195125400981556730, 0.195076361822564550, 0.195027322175881900, 0.194978282041630920, 0.194929241419934260, 0.194880200310914050, 0.194831158714693750, 0.194782116631395580, +0.194733074061142130, 0.194684031004055540, 0.194634987460259310, 0.194585943429875620, 0.194536898913027080, 0.194487853909835830, 0.194438808420425410, 0.194389762444917960, +0.194340715983435660, 0.194291669036102010, 0.194242621603039180, 0.194193573684369820, 0.194144525280216060, 0.194095476390701430, 0.194046427015948130, 0.193997377156078730, +0.193948326811215490, 0.193899275981481850, 0.193850224667000000, 0.193801172867892610, 0.193752120584281850, 0.193703067816291240, 0.193654014564042940, 0.193604960827659600, +0.193555906607263430, 0.193506851902977920, 0.193457796714925300, 0.193408741043227720, 0.193359684888008750, 0.193310628249390580, 0.193261571127495810, 0.193212513522446700, +0.193163455434366720, 0.193114396863378110, 0.193065337809603530, 0.193016278273165140, 0.192967218254186500, 0.192918157752789810, 0.192869096769097720, 0.192820035303232470, +0.192770973355317570, 0.192721910925475220, 0.192672848013828110, 0.192623784620498420, 0.192574720745609720, 0.192525656389284230, 0.192476591551644150, 0.192427526232813030, +0.192378460432913100, 0.192329394152066980, 0.192280327390396990, 0.192231260148026580, 0.192182192425078060, 0.192133124221674030, 0.192084055537936750, 0.192034986373989770, +0.191985916729955350, 0.191936846605956110, 0.191887776002114320, 0.191838704918553540, 0.191789633355396010, 0.191740561312764350, 0.191691488790780880, 0.191642415789569140, +0.191593342309251350, 0.191544268349950170, 0.191495193911787930, 0.191446118994888110, 0.191397043599373010, 0.191347967725364860, 0.191298891372987220, 0.191249814542362370, +0.191200737233612970, 0.191151659446861300, 0.191102581182230890, 0.191053502439844060, 0.191004423219823440, 0.190955343522291380, 0.190906263347371350, 0.190857182695185670, +0.190808101565857040, 0.190759019959507730, 0.190709937876261280, 0.190660855316240020, 0.190611772279566600, 0.190562688766363310, 0.190513604776753750, 0.190464520310860170, +0.190415435368804840, 0.190366349950711390, 0.190317264056702020, 0.190268177686899520, 0.190219090841426130, 0.190170003520405470, 0.190120915723959780, 0.190071827452211820, +0.190022738705283830, 0.189973649483299450, 0.189924559786380930, 0.189875469614651020, 0.189826378968231980, 0.189777287847247460, 0.189728196251819720, 0.189679104182071460, +0.189630011638125040, 0.189580918620103980, 0.189531825128130660, 0.189482731162327330, 0.189433636722817630, 0.189384541809723810, 0.189335446423168630, 0.189286350563274420, +0.189237254230164770, 0.189188157423961970, 0.189139060144788790, 0.189089962392767510, 0.189040864168021770, 0.188991765470673870, 0.188942666300846550, 0.188893566658662140, +0.188844466544244220, 0.188795365957715180, 0.188746264899197690, 0.188697163368814120, 0.188648061366688050, 0.188598958892941840, 0.188549855947697830, 0.188500752531079590, +0.188451648643209460, 0.188402544284210220, 0.188353439454204190, 0.188304334153314960, 0.188255228381664920, 0.188206122139376820, 0.188157015426572980, 0.188107908243377030, +0.188058800589911280, 0.188009692466298560, 0.187960583872661180, 0.187911474809122760, 0.187862365275805660, 0.187813255272832660, 0.187764144800326050, 0.187715033858409540, +0.187665922447205450, 0.187616810566836540, 0.187567698217425170, 0.187518585399094990, 0.187469472111968350, 0.187420358356167600, 0.187371244131816380, 0.187322129439037060, +0.187273014277952400, 0.187223898648684770, 0.187174782551357860, 0.187125665986093950, 0.187076548953015900, 0.187027431452246040, 0.186978313483908030, 0.186929195048124250, +0.186880076145017480, 0.186830956774710070, 0.186781836937325720, 0.186732716632986770, 0.186683595861816020, 0.186634474623935870, 0.186585352919469930, 0.186536230748540640, +0.186487108111270340, 0.186437985007782690, 0.186388861438200080, 0.186339737402645310, 0.186290612901240770, 0.186241487934110130, 0.186192362501375770, 0.186143236603160510, +0.186094110239586720, 0.186044983410778080, 0.185995856116856980, 0.185946728357946260, 0.185897600134168280, 0.185848471445646730, 0.185799342292504000, 0.185750212674862910, +0.185701082592845870, 0.185651952046576530, 0.185602821036177340, 0.185553689561770650, 0.185504557623480170, 0.185455425221428300, 0.185406292355737860, 0.185357159026531240, +0.185308025233932190, 0.185258890978063060, 0.185209756259046700, 0.185160621077005540, 0.185111485432063240, 0.185062349324342210, 0.185013212753965340, 0.184964075721054970, +0.184914938225734880, 0.184865800268127430, 0.184816661848355460, 0.184767522966541420, 0.184718383622809010, 0.184669243817280640, 0.184620103550079160, 0.184570962821326980, +0.184521821631147830, 0.184472679979664130, 0.184423537866998300, 0.184374395293274040, 0.184325252258613820, 0.184276108763140460, 0.184226964806976370, 0.184177820390245330, +0.184128675513069750, 0.184079530175572440, 0.184030384377875890, 0.183981238120103830, 0.183932091402378650, 0.183882944224823260, 0.183833796587560050, 0.183784648490712800, +0.183735499934403940, 0.183686350918756320, 0.183637201443892390, 0.183588051509935870, 0.183538901117009270, 0.183489750265234920, 0.183440598954736690, 0.183391447185636940, +0.183342294958058540, 0.183293142272124010, 0.183243989127957030, 0.183194835525680110, 0.183145681465416070, 0.183096526947287400, 0.183047371971417850, 0.182998216537929890, +0.182949060646946350, 0.182899904298589740, 0.182850747492983830, 0.182801590230251030, 0.182752432510514230, 0.182703274333895940, 0.182654115700519900, 0.182604956610508570, +0.182555797063984420, 0.182506637061071200, 0.182457476601891410, 0.182408315686567900, 0.182359154315223180, 0.182309992487980990, 0.182260830204963840, 0.182211667466294610, +0.182162504272095770, 0.182113340622491100, 0.182064176517603090, 0.182015011957554650, 0.181965846942468230, 0.181916681472467620, 0.181867515547675330, 0.181818349168214240, +0.181769182334206830, 0.181720015045776890, 0.181670847303046950, 0.181621679106139440, 0.181572510455178170, 0.181523341350285610, 0.181474171791584700, 0.181425001779197930, +0.181375831313249110, 0.181326660393860690, 0.181277489021155620, 0.181228317195256390, 0.181179144916286810, 0.181129972184369380, 0.181080798999627010, 0.181031625362182170, +0.180982451272158760, 0.180933276729679180, 0.180884101734866440, 0.180834926287842980, 0.180785750388732650, 0.180736574037657970, 0.180687397234741840, 0.180638219980106760, +0.180589042273876590, 0.180539864116173790, 0.180490685507120910, 0.180441506446841760, 0.180392326935458840, 0.180343146973095090, 0.180293966559873040, 0.180244785695916540, +0.180195604381348050, 0.180146422616290550, 0.180097240400866550, 0.180048057735199880, 0.179998874619413080, 0.179949691053629100, 0.179900507037970450, 0.179851322572560950, +0.179802137657523180, 0.179752952292980050, 0.179703766479054090, 0.179654580215869160, 0.179605393503547790, 0.179556206342212480, 0.179507018731987100, 0.179457830672994170, +0.179408642165356680, 0.179359453209197130, 0.179310263804639380, 0.179261073951805990, 0.179211883650819890, 0.179162692901803670, 0.179113501704881130, 0.179064310060174870, +0.179015117967807810, 0.178965925427902520, 0.178916732440582840, 0.178867539005971350, 0.178818345124191010, 0.178769150795364370, 0.178719956019615290, 0.178670760797066310, +0.178621565127840000, 0.178572369012060220, 0.178523172449849500, 0.178473975441330870, 0.178424777986626840, 0.178375580085861320, 0.178326381739156850, 0.178277182946636410, +0.178227983708422600, 0.178178784024639270, 0.178129583895408950, 0.178080383320854680, 0.178031182301099020, 0.177981980836265850, 0.177932778926477710, 0.177883576571857630, +0.177834373772528200, 0.177785170528613230, 0.177735966840235350, 0.177686762707517570, 0.177637558130582430, 0.177588353109553810, 0.177539147644554330, 0.177489941735706560, +0.177440735383134350, 0.177391528586960310, 0.177342321347307460, 0.177293113664298340, 0.177243905538056880, 0.177194696968705680, 0.177145487956367730, 0.177096278501165600, +0.177047068603223220, 0.176997858262663180, 0.176948647479608510, 0.176899436254181750, 0.176850224586506840, 0.176801012476706400, 0.176751799924903390, 0.176702586931220460, +0.176653373495781500, 0.176604159618709120, 0.176554945300125890, 0.176505730540155730, 0.176456515338921260, 0.176407299696545480, 0.176358083613151030, 0.176308867088861810, +0.176259650123800400, 0.176210432718089890, 0.176161214871852850, 0.176111996585213200, 0.176062777858293580, 0.176013558691217010, 0.175964339084106110, 0.175915119037084790, +0.175865898550275650, 0.175816677623801790, 0.175767456257785810, 0.175718234452351600, 0.175669012207621820, 0.175619789523719070, 0.175570566400767290, 0.175521342838889090, +0.175472118838207510, 0.175422894398845230, 0.175373669520926150, 0.175324444204572880, 0.175275218449908480, 0.175225992257055620, 0.175176765626138240, 0.175127538557278920, +0.175078311050600760, 0.175029083106226360, 0.174979854724279710, 0.174930625904883420, 0.174881396648160580, 0.174832166954233810, 0.174782936823227040, 0.174733706255262940, +0.174684475250464130, 0.174635243808954590, 0.174586011930856900, 0.174536779616294210, 0.174487546865389140, 0.174438313678265620, 0.174389080055046330, 0.174339845995854340, +0.174290611500812290, 0.174241376570044150, 0.174192141203672570, 0.174142905401820650, 0.174093669164611030, 0.174044432492167640, 0.173995195384613190, 0.173945957842070760, +0.173896719864662990, 0.173847481452513860, 0.173798242605746030, 0.173749003324482560, 0.173699763608846200, 0.173650523458960840, 0.173601282874949160, 0.173552041856933850, +0.173502800405038880, 0.173453558519386900, 0.173404316200101020, 0.173355073447303910, 0.173305830261119560, 0.173256586641670620, 0.173207342589080240, 0.173158098103471050, +0.173108853184967050, 0.173059607833690930, 0.173010362049765780, 0.172961115833314310, 0.172911869184460470, 0.172862622103326950, 0.172813374590036870, 0.172764126644712940, +0.172714878267479110, 0.172665629458458090, 0.172616380217772560, 0.172567130545546510, 0.172517880441902670, 0.172468629906964100, 0.172419378940853520, 0.172370127543694910, +0.172320875715611000, 0.172271623456724890, 0.172222370767159320, 0.172173117647038220, 0.172123864096484340, 0.172074610115620810, 0.172025355704570310, 0.171976100863456850, +0.171926845592403150, 0.171877589891532350, 0.171828333760967090, 0.171779077200831460, 0.171729820211248160, 0.171680562792339840, 0.171631304944230570, 0.171582046667043020, +0.171532787960900380, 0.171483528825925300, 0.171434269262241870, 0.171385009269972740, 0.171335748849241100, 0.171286488000169630, 0.171237226722882410, 0.171187965017502110, +0.171138702884151890, 0.171089440322954480, 0.171040177334033900, 0.170990913917512890, 0.170941650073514580, 0.170892385802161710, 0.170843121103578330, 0.170793855977887130, +0.170744590425211310, 0.170695324445673560, 0.170646058039397950, 0.170596791206507170, 0.170547523947124000, 0.170498256261372440, 0.170448988149375230, 0.170399719611255580, +0.170350450647136160, 0.170301181257141080, 0.170251911441393040, 0.170202641200015210, 0.170153370533130370, 0.170104099440862520, 0.170054827923334400, 0.170005555980669240, +0.169956283612989760, 0.169907010820419980, 0.169857737603082680, 0.169808463961101050, 0.169759189894597820, 0.169709915403697040, 0.169660640488521470, 0.169611365149193870, +0.169562089385838300, 0.169512813198577500, 0.169463536587534690, 0.169414259552832570, 0.169364982094595250, 0.169315704212945480, 0.169266425908006420, 0.169217147179900880, +0.169167868028752920, 0.169118588454685280, 0.169069308457821170, 0.169020028038283340, 0.168970747196195900, 0.168921465931681590, 0.168872184244863580, 0.168822902135864710, +0.168773619604809020, 0.168724336651819270, 0.168675053277018230, 0.168625769480530010, 0.168576485262477370, 0.168527200622983510, 0.168477915562171200, 0.168428630080164570, +0.168379344177086330, 0.168330057853059740, 0.168280771108207580, 0.168231483942653910, 0.168182196356521540, 0.168132908349933690, 0.168083619923013130, 0.168034331075883950, +0.167985041808668940, 0.167935752121491310, 0.167886462014473880, 0.167837171487740740, 0.167787880541414660, 0.167738589175618460, 0.167689297390476220, 0.167640005186110720, +0.167590712562645210, 0.167541419520202490, 0.167492126058906650, 0.167442832178880510, 0.167393537880247270, 0.167344243163129760, 0.167294948027652070, 0.167245652473937020, +0.167196356502107850, 0.167147060112287330, 0.167097763304599610, 0.167048466079167460, 0.166999168436114150, 0.166949870375562500, 0.166900571897636600, 0.166851273002459280, +0.166801973690153760, 0.166752673960842900, 0.166703373814650780, 0.166654073251700200, 0.166604772272114010, 0.166555470876016350, 0.166506169063530000, 0.166456866834778230, +0.166407564189883840, 0.166358261128970980, 0.166308957652162470, 0.166259653759581570, 0.166210349451351100, 0.166161044727595210, 0.166111739588436700, 0.166062434033998810, +0.166013128064404440, 0.165963821679777660, 0.165914514880241340, 0.165865207665918720, 0.165815900036932640, 0.165766591993407260, 0.165717283535465390, 0.165667974663229880, +0.165618665376824880, 0.165569355676373210, 0.165520045561998150, 0.165470735033822540, 0.165421424091970530, 0.165372112736564960, 0.165322800967729110, 0.165273488785585810, +0.165224176190259230, 0.165174863181872220, 0.165125549760548020, 0.165076235926409550, 0.165026921679580910, 0.164977607020184960, 0.164928291948344990, 0.164878976464183870, +0.164829660567825750, 0.164780344259393450, 0.164731027539009870, 0.164681710406799160, 0.164632392862884170, 0.164583074907388190, 0.164533756540434090, 0.164484437762146050, +0.164435118572646920, 0.164385798972059960, 0.164336478960508100, 0.164287158538115460, 0.164237837705004910, 0.164188516461299810, 0.164139194807122940, 0.164089872742598540, +0.164040550267849440, 0.163991227382998980, 0.163941904088170030, 0.163892580383486720, 0.163843256269072010, 0.163793931745049110, 0.163744606811540960, 0.163695281468671740, +0.163645955716564320, 0.163596629555341540, 0.163547302985127650, 0.163497976006045510, 0.163448648618218420, 0.163399320821769280, 0.163349992616822260, 0.163300664003500270, +0.163251334981926590, 0.163202005552224170, 0.163152675714517160, 0.163103345468928460, 0.163054014815581410, 0.163004683754598870, 0.162955352286105050, 0.162906020410222870, +0.162856688127075660, 0.162807355436786260, 0.162758022339478890, 0.162708688835276500, 0.162659354924301950, 0.162610020606679420, 0.162560685882531860, 0.162511350751982590, +0.162462015215154490, 0.162412679272171790, 0.162363342923157410, 0.162314006168234660, 0.162264669007526450, 0.162215331441157020, 0.162165993469249260, 0.162116655091926520, +0.162067316309311700, 0.162017977121529020, 0.161968637528701390, 0.161919297530952190, 0.161869957128404300, 0.161820616321181940, 0.161771275109408060, 0.161721933493205540, +0.161672591472698630, 0.161623249048010230, 0.161573906219263740, 0.161524562986582020, 0.161475219350089320, 0.161425875309908600, 0.161376530866163190, 0.161327186018976000, +0.161277840768471260, 0.161228495114771970, 0.161179149058001400, 0.161129802598282550, 0.161080455735739620, 0.161031108470495540, 0.160981760802673710, 0.160932412732397030, +0.160883064259789740, 0.160833715384974820, 0.160784366108075590, 0.160735016429215010, 0.160685666348517330, 0.160636315866105470, 0.160586964982102400, 0.160537613696632360, +0.160488262009818280, 0.160438909921783530, 0.160389557432651100, 0.160340204542545190, 0.160290851251588760, 0.160241497559905220, 0.160192143467617480, 0.160142788974849850, +0.160093434081725220, 0.160044078788367020, 0.159994723094898180, 0.159945367001442960, 0.159896010508124350, 0.159846653615065700, 0.159797296322389950, 0.159747938630221440, +0.159698580538683050, 0.159649222047897800, 0.159599863157989910, 0.159550503869082370, 0.159501144181298570, 0.159451784094761490, 0.159402423609595360, 0.159353062725923200, +0.159303701443868350, 0.159254339763553830, 0.159204977685103890, 0.159155615208641520, 0.159106252334290100, 0.159056889062172610, 0.159007525392413330, 0.158958161325135240, +0.158908796860461750, 0.158859431998515820, 0.158810066739421770, 0.158760701083302540, 0.158711335030281120, 0.158661968580481820, 0.158612601734027580, 0.158563234491041820, +0.158513866851647560, 0.158464498815969050, 0.158415130384129330, 0.158365761556251760, 0.158316392332459340, 0.158267022712876380, 0.158217652697625860, 0.158168282286831220, +0.158118911480615440, 0.158069540279102800, 0.158020168682416330, 0.157970796690679430, 0.157921424304015120, 0.157872051522547660, 0.157822678346400070, 0.157773304775695370, +0.157723930810557830, 0.157674556451110480, 0.157625181697476720, 0.157575806549779570, 0.157526431008143340, 0.157477055072691020, 0.157427678743546100, 0.157378302020831500, +0.157328924904671620, 0.157279547395189400, 0.157230169492508340, 0.157180791196751410, 0.157131412508042940, 0.157082033426505920, 0.157032653952263850, 0.156983274085439660, +0.156933893826157770, 0.156884513174541110, 0.156835132130713180, 0.156785750694797000, 0.156736368866916860, 0.156686986647195800, 0.156637604035756860, 0.156588221032724320, +0.156538837638221240, 0.156489453852371040, 0.156440069675296810, 0.156390685107122810, 0.156341300147972100, 0.156291914797968170, 0.156242529057233990, 0.156193142925893920, +0.156143756404070990, 0.156094369491888710, 0.156044982189470020, 0.155995594496939340, 0.155946206414419670, 0.155896817942034470, 0.155847429079906810, 0.155798039828160980, +0.155748650186920080, 0.155699260156307110, 0.155649869736446430, 0.155600478927461090, 0.155551087729474540, 0.155501696142609810, 0.155452304166991300, 0.155402911802742040, +0.155353519049985480, 0.155304125908844680, 0.155254732379444040, 0.155205338461906540, 0.155155944156355700, 0.155106549462914550, 0.155057154381707470, 0.155007758912857510, +0.154958363056488160, 0.154908966812722450, 0.154859570181684750, 0.154810173163498150, 0.154760775758285670, 0.154711377966171680, 0.154661979787279270, 0.154612581221731880, +0.154563182269652630, 0.154513782931165830, 0.154464383206394610, 0.154414983095462390, 0.154365582598492310, 0.154316181715608680, 0.154266780446934620, 0.154217378792593620, +0.154167976752708710, 0.154118574327404310, 0.154069171516803470, 0.154019768321029680, 0.153970364740206060, 0.153920960774456940, 0.153871556423905430, 0.153822151688675050, +0.153772746568888840, 0.153723341064671200, 0.153673935176145190, 0.153624528903433920, 0.153575122246661780, 0.153525715205951820, 0.153476307781427570, 0.153426899973212100, +0.153377491781429840, 0.153328083206203840, 0.153278674247657650, 0.153229264905914320, 0.153179855181098250, 0.153130445073332570, 0.153081034582740750, 0.153031623709445920, +0.152982212453572490, 0.152932800815243490, 0.152883388794582520, 0.152833976391712620, 0.152784563606758240, 0.152735150439842430, 0.152685736891088300, 0.152636322960620300, +0.152586908648561480, 0.152537493955035350, 0.152488078880165080, 0.152438663424075050, 0.152389247586888380, 0.152339831368728560, 0.152290414769718720, 0.152240997789983320, +0.152191580429645400, 0.152142162688828520, 0.152092744567655810, 0.152043326066251680, 0.151993907184739210, 0.151944487923242000, 0.151895068281883120, 0.151845648260787000, +0.151796227860076770, 0.151746807079875530, 0.151697385920307710, 0.151647964381496410, 0.151598542463565220, 0.151549120166637240, 0.151499697490836890, 0.151450274436287280, +0.151400851003112010, 0.151351427191434160, 0.151302003001378190, 0.151252578433067190, 0.151203153486624780, 0.151153728162174010, 0.151104302459839380, 0.151054876379743990, +0.151005449922011430, 0.150956023086764780, 0.150906595874128520, 0.150857168284225770, 0.150807740317179640, 0.150758311973114620, 0.150708883252153810, 0.150659454154420810, +0.150610024680038730, 0.150560594829132010, 0.150511164601823820, 0.150461733998237700, 0.150412303018496840, 0.150362871662725630, 0.150313439931047260, 0.150264007823585260, +0.150214575340462840, 0.150165142481804400, 0.150115709247733100, 0.150066275638372550, 0.150016841653845850, 0.149967407294277490, 0.149917972559790610, 0.149868537450508820, +0.149819101966555210, 0.149769666108054310, 0.149720229875129230, 0.149670793267903170, 0.149621356286500530, 0.149571918931044520, 0.149522481201658700, 0.149473043098466240, +0.149423604621591600, 0.149374165771157970, 0.149324726547288900, 0.149275286950107610, 0.149225846979738510, 0.149176406636304800, 0.149126965919930080, 0.149077524830737520, +0.149028083368851570, 0.148978641534395410, 0.148929199327492660, 0.148879756748266450, 0.148830313796841310, 0.148780870473340380, 0.148731426777886810, 0.148681982710605150, +0.148632538271618510, 0.148583093461050530, 0.148533648279024380, 0.148484202725664540, 0.148434756801094190, 0.148385310505436960, 0.148335863838816030, 0.148286416801355850, +0.148236969393179650, 0.148187521614411010, 0.148138073465173130, 0.148088624945590520, 0.148039176055786340, 0.147989726795884210, 0.147940277166007330, 0.147890827166280190, +0.147841376796825990, 0.147791926057767920, 0.147742474949230460, 0.147693023471336810, 0.147643571624210600, 0.147594119407975040, 0.147544666822754610, 0.147495213868672510, +0.147445760545852370, 0.147396306854417400, 0.147346852794492110, 0.147297398366199680, 0.147247943569663750, 0.147198488405007520, 0.147149032872355510, 0.147099576971830900, +0.147050120703557390, 0.147000664067658100, 0.146951207064257630, 0.146901749693479110, 0.146852291955446220, 0.146802833850282170, 0.146753375378111450, 0.146703916539057320, +0.146654457333242950, 0.146604997760792890, 0.146555537821830310, 0.146506077516478900, 0.146456616844861860, 0.146407155807103700, 0.146357694403327660, 0.146308232633657390, +0.146258770498216090, 0.146209307997128310, 0.146159845130517270, 0.146110381898506610, 0.146060918301219530, 0.146011454338780630, 0.145961990011313080, 0.145912525318940560, +0.145863060261786280, 0.145813594839974770, 0.145764129053629320, 0.145714662902873080, 0.145665196387830630, 0.145615729508625170, 0.145566262265380410, 0.145516794658219540, +0.145467326687267110, 0.145417858352646400, 0.145368389654481010, 0.145318920592894220, 0.145269451168010570, 0.145219981379953320, 0.145170511228846080, 0.145121040714812130, +0.145071569837976010, 0.145022098598460990, 0.144972626996390690, 0.144923155031888410, 0.144873682705078670, 0.144824210016084730, 0.144774736965029820, 0.144725263552038520, +0.144675789777234030, 0.144626315640740110, 0.144576841142679910, 0.144527366283178080, 0.144477891062357840, 0.144428415480342850, 0.144378939537256390, 0.144329463233223040, +0.144279986568365990, 0.144230509542809030, 0.144181032156675300, 0.144131554410089460, 0.144082076303174740, 0.144032597836054820, 0.143983119008852970, 0.143933639821693740, +0.143884160274700440, 0.143834680367996260, 0.143785200101705870, 0.143735719475952460, 0.143686238490859740, 0.143636757146551000, 0.143587275443150780, 0.143537793380782400, +0.143488310959569510, 0.143438828179635440, 0.143389345041104700, 0.143339861544100610, 0.143290377688746890, 0.143240893475166750, 0.143191408903484830, 0.143141923973824410, +0.143092438686309160, 0.143042953041062380, 0.142993467038208640, 0.142943980677871260, 0.142894493960173900, 0.142845006885239880, 0.142795519453193800, 0.142746031664158890, +0.142696543518258470, 0.142647055015617140, 0.142597566156358160, 0.142548076940605280, 0.142498587368481760, 0.142449097440112220, 0.142399607155619920, 0.142350116515128610, +0.142300625518761580, 0.142251134166643390, 0.142201642458897410, 0.142152150395647300, 0.142102657977016380, 0.142053165203129240, 0.142003672074109220, 0.141954178590080000, +0.141904684751164880, 0.141855190557488520, 0.141805696009174170, 0.141756201106345130, 0.141706705849126040, 0.141657210237640160, 0.141607714272011270, 0.141558217952362670, +0.141508721278818940, 0.141459224251503420, 0.141409726870539850, 0.141360229136051510, 0.141310731048163050, 0.141261232606997740, 0.141211733812679370, 0.141162234665331200, +0.141112735165077910, 0.141063235312042760, 0.141013735106349540, 0.140964234548121540, 0.140914733637483390, 0.140865232374558390, 0.140815730759469900, 0.140766228792342520, +0.140716726473299550, 0.140667223802464770, 0.140617720779961490, 0.140568217405914350, 0.140518713680446660, 0.140469209603682200, 0.140419705175744260, 0.140370200396757490, +0.140320695266845240, 0.140271189786131230, 0.140221683954738830, 0.140172177772792640, 0.140122671240416020, 0.140073164357732730, 0.140023657124866090, 0.139974149541940730, +0.139924641609080000, 0.139875133326407660, 0.139825624694047050, 0.139776115712122840, 0.139726606380758320, 0.139677096700076830, 0.139627586670203060, 0.139578076291260320, +0.139528565563372400, 0.139479054486662590, 0.139429543061255630, 0.139380031287274770, 0.139330519164843870, 0.139281006694086220, 0.139231493875126480, 0.139181980708088020, +0.139132467193094580, 0.139082953330269570, 0.139033439119737590, 0.138983924561622040, 0.138934409656046640, 0.138884894403134810, 0.138835378803011170, 0.138785862855799080, +0.138736346561621900, 0.138686829920604300, 0.138637312932869600, 0.138587795598541650, 0.138538277917743760, 0.138488759890600580, 0.138439241517235550, 0.138389722797772400, +0.138340203732334490, 0.138290684321046520, 0.138241164564031850, 0.138191644461414240, 0.138142124013317100, 0.138092603219865110, 0.138043082081181570, 0.137993560597390350, +0.137944038768614770, 0.137894516594979560, 0.137844994076608050, 0.137795471213623590, 0.137745948006150920, 0.137696424454313380, 0.137646900558234780, 0.137597376318038480, +0.137547851733849170, 0.137498326805790240, 0.137448801533985500, 0.137399275918558300, 0.137349749959633370, 0.137300223657334050, 0.137250697011784160, 0.137201170023107110, +0.137151642691427570, 0.137102115016868920, 0.137052586999554970, 0.137003058639609130, 0.136953529937156090, 0.136904000892319220, 0.136854471505221900, 0.136804941775988840, +0.136755411704743420, 0.136705881291609490, 0.136656350536710410, 0.136606819440170890, 0.136557288002114310, 0.136507756222664530, 0.136458224101944910, 0.136408691640080180, +0.136359158837193710, 0.136309625693409350, 0.136260092208850490, 0.136210558383641820, 0.136161024217906770, 0.136111489711769150, 0.136061954865352360, 0.136012419678781140, +0.135962884152178860, 0.135913348285669390, 0.135863812079376090, 0.135814275533423710, 0.135764738647935620, 0.135715201423035250, 0.135665663858847350, 0.135616125955495240, +0.135566587713102840, 0.135517049131793550, 0.135467510211692040, 0.135417970952921800, 0.135368431355606580, 0.135318891419869890, 0.135269351145836380, 0.135219810533629500, +0.135170269583373080, 0.135120728295190560, 0.135071186669206670, 0.135021644705544810, 0.134972102404328830, 0.134922559765682150, 0.134873016789729520, 0.134823473476594350, +0.134773929826400050, 0.134724385839271350, 0.134674841515331710, 0.134625296854704950, 0.134575751857514530, 0.134526206523885140, 0.134476660853940250, 0.134427114847803730, +0.134377568505598950, 0.134328021827450710, 0.134278474813482400, 0.134228927463817900, 0.134179379778580660, 0.134129831757895390, 0.134080283401885550, 0.134030734710675000, +0.133981185684387190, 0.133931636323146840, 0.133882086627077400, 0.133832536596302320, 0.133782986230946310, 0.133733435531132840, 0.133683884496985790, 0.133634333128628600, +0.133584781426185990, 0.133535229389781460, 0.133485677019538840, 0.133436124315581580, 0.133386571278034440, 0.133337017907020900, 0.133287464202664800, 0.133237910165089600, +0.133188355794420070, 0.133138801090779630, 0.133089246054292200, 0.133039690685081230, 0.132990134983271470, 0.132940578948986370, 0.132891022582349800, 0.132841465883485250, +0.132791908852517490, 0.132742351489569950, 0.132692793794766090, 0.132643235768230670, 0.132593677410087180, 0.132544118720459490, 0.132494559699471050, 0.132445000347246660, +0.132395440663909790, 0.132345880649584300, 0.132296320304393670, 0.132246759628462660, 0.132197198621914790, 0.132147637284873890, 0.132098075617463480, 0.132048513619808290, +0.131998951292031850, 0.131949388634258010, 0.131899825646610260, 0.131850262329213400, 0.131800698682190880, 0.131751134705666180, 0.131701570399764070, 0.131652005764608030, +0.131602440800321990, 0.131552875507029400, 0.131503309884855060, 0.131453743933922450, 0.131404177654355470, 0.131354611046277630, 0.131305044109813700, 0.131255476845087120, +0.131205909252221890, 0.131156341331341440, 0.131106773082570540, 0.131057204506032750, 0.131007635601851940, 0.130958066370151590, 0.130908496811056510, 0.130858926924690200, +0.130809356711176130, 0.130759786170639130, 0.130710215303202620, 0.130660644108990610, 0.130611072588126540, 0.130561500740735220, 0.130511928566940160, 0.130462356066865260, +0.130412783240634040, 0.130363210088371290, 0.130313636610200540, 0.130264062806245700, 0.130214488676630240, 0.130164914221478990, 0.130115339440915500, 0.130065764335063620, +0.130016188904046900, 0.129966613147990160, 0.129917037067016880, 0.129867460661250540, 0.129817883930816030, 0.129768306875836790, 0.129718729496436790, 0.129669151792739520, +0.129619573764869820, 0.129569995412951170, 0.129520416737107540, 0.129470837737462430, 0.129421258414140680, 0.129371678767265770, 0.129322098796961660, 0.129272518503351860, +0.129222937886561200, 0.129173356946713200, 0.129123775683931820, 0.129074194098340560, 0.129024612190064230, 0.128975029959226380, 0.128925447405950970, 0.128875864530361510, +0.128826281332582810, 0.128776697812738400, 0.128727113970951820, 0.128677529807347900, 0.128627945322050130, 0.128578360515182510, 0.128528775386868550, 0.128479189937233090, +0.128429604166399670, 0.128380018074492230, 0.128330431661634300, 0.128280844927950720, 0.128231257873565040, 0.128181670498601210, 0.128132082803182780, 0.128082494787434580, +0.128032906451480130, 0.127983317795443420, 0.127933728819447980, 0.127884139523618660, 0.127834549908078960, 0.127784959972952500, 0.127735369718364050, 0.127685779144437160, +0.127636188251295830, 0.127586597039063610, 0.127537005507865310, 0.127487413657824540, 0.127437821489065180, 0.127388229001710870, 0.127338636195886420, 0.127289043071715370, +0.127239449629321710, 0.127189855868828970, 0.127140261790362060, 0.127090667394044480, 0.127041072680000260, 0.126991477648352890, 0.126941882299227260, 0.126892286632746930, +0.126842690649035440, 0.126793094348217700, 0.126743497730417180, 0.126693900795757930, 0.126644303544363510, 0.126594705976358750, 0.126545108091867230, 0.126495509891012940, +0.126445911373919420, 0.126396312540711570, 0.126346713391512930, 0.126297113926447550, 0.126247514145638890, 0.126197914049211910, 0.126148313637290150, 0.126098712909997610, +0.126049111867457820, 0.125999510509795710, 0.125949908837134830, 0.125900306849599160, 0.125850704547312290, 0.125801101930399120, 0.125751498998983160, 0.125701895753188050, +0.125652292193138610, 0.125602688318958460, 0.125553084130771570, 0.125503479628701540, 0.125453874812873230, 0.125404269683410260, 0.125354664240436620, 0.125305058484075860, +0.125255452414452910, 0.125205846031691330, 0.125156239335915100, 0.125106632327247860, 0.125057025005814480, 0.125007417371738540, 0.124957809425144050, 0.124908201166154600, +0.124858592594895080, 0.124808983711489090, 0.124759374516060190, 0.124709765008733290, 0.124660155189632000, 0.124610545058880310, 0.124560934616601810, 0.124511323862921410, +0.124461712797962710, 0.124412101421849730, 0.124362489734706050, 0.124312877736656590, 0.124263265427824940, 0.124213652808335110, 0.124164039878310720, 0.124114426637876680, +0.124064813087156560, 0.124015199226274410, 0.123965585055353820, 0.123915970574519710, 0.123866355783895680, 0.123816740683605310, 0.123767125273773540, 0.123717509554523940, +0.123667893525980580, 0.123618277188267040, 0.123568660541508250, 0.123519043585827810, 0.123469426321349760, 0.123419808748197690, 0.123370190866496560, 0.123320572676369940, +0.123270954177941900, 0.123221335371336020, 0.123171716256677250, 0.123122096834089190, 0.123072477103695880, 0.123022857065620950, 0.122973236719989300, 0.122923616066924580, +0.122873995106550370, 0.122824373838991610, 0.122774752264371910, 0.122725130382815340, 0.122675508194445500, 0.122625885699387330, 0.122576262897764450, 0.122526639789700910, +0.122477016375320320, 0.122427392654747640, 0.122377768628106480, 0.122328144295520900, 0.122278519657114500, 0.122228894713012260, 0.122179269463337780, 0.122129643908215120, +0.122080018047767930, 0.122030391882121110, 0.121980765411398320, 0.121931138635723620, 0.121881511555220630, 0.121831884170014300, 0.121782256480228270, 0.121732628485986150, +0.121683000187412890, 0.121633371584632140, 0.121583742677767960, 0.121534113466943980, 0.121484483952285160, 0.121434854133915140, 0.121385224011957960, 0.121335593586537300, +0.121285962857778100, 0.121236331825803980, 0.121186700490739030, 0.121137068852706890, 0.121087436911832520, 0.121037804668239560, 0.120988172122052100, 0.120938539273393750, +0.120888906122389490, 0.120839272669162970, 0.120789638913837840, 0.120740004856539050, 0.120690370497390230, 0.120640735836515510, 0.120591100874038490, 0.120541465610084160, +0.120491830044776180, 0.120442194178238610, 0.120392558010595120, 0.120342921541970680, 0.120293284772488930, 0.120243647702273970, 0.120194010331449460, 0.120144372660140340, +0.120094734688470300, 0.120045096416563440, 0.119995457844543380, 0.119945818972535120, 0.119896179800662320, 0.119846540329048620, 0.119796900557819010, 0.119747260487097150, +0.119697620117007140, 0.119647979447672640, 0.119598338479218640, 0.119548697211768780, 0.119499055645447190, 0.119449413780377500, 0.119399771616684730, 0.119350129154492540, +0.119300486393925010, 0.119250843335105840, 0.119201199978159990, 0.119151556323211140, 0.119101912370383410, 0.119052268119800450, 0.119002623571587270, 0.118952978725867520, +0.118903333582765320, 0.118853688142404350, 0.118804042404909600, 0.118754396370404750, 0.118704750039013470, 0.118655103410860750, 0.118605456486070270, 0.118555809264766150, +0.118506161747072070, 0.118456513933113020, 0.118406865823012690, 0.118357217416895190, 0.118307568714884210, 0.118257919717104750, 0.118208270423680480, 0.118158620834735550, +0.118108970950393620, 0.118059320770779710, 0.118009670296017490, 0.117960019526231100, 0.117910368461544220, 0.117860717102081850, 0.117811065447967700, 0.117761413499325440, +0.117711761256280080, 0.117662108718955330, 0.117612455887475290, 0.117562802761963690, 0.117513149342545520, 0.117463495629344470, 0.117413841622484680, 0.117364187322089850, +0.117314532728284990, 0.117264877841193800, 0.117215222660940420, 0.117165567187648530, 0.117115911421443180, 0.117066255362448040, 0.117016599010787260, 0.116966942366584540, +0.116917285429964910, 0.116867628201052070, 0.116817970679969710, 0.116768312866842870, 0.116718654761795260, 0.116668996364951000, 0.116619337676433800, 0.116569678696368710, +0.116520019424879410, 0.116470359862090080, 0.116420700008124390, 0.116371039863107400, 0.116321379427162820, 0.116271718700414780, 0.116222057682987000, 0.116172396375004520, +0.116122734776591060, 0.116073072887870750, 0.116023410708967320, 0.115973748240005810, 0.115924085481109930, 0.115874422432403380, 0.115824759094011230, 0.115775095466057170, +0.115725431548665380, 0.115675767341959570, 0.115626102846064780, 0.115576438061104740, 0.115526772987203600, 0.115477107624485080, 0.115427441973074240, 0.115377776033094790, +0.115328109804670910, 0.115278443287926300, 0.115228776482986050, 0.115179109389973830, 0.115129442009013840, 0.115079774340229810, 0.115030106383746790, 0.114980438139688500, +0.114930769608179120, 0.114881100789342370, 0.114831431683303300, 0.114781762290185660, 0.114732092610113180, 0.114682422643210890, 0.114632752389602560, 0.114583081849412350, +0.114533411022763990, 0.114483739909782540, 0.114434068510591740, 0.114384396825315770, 0.114334724854078380, 0.114285052597004600, 0.114235380054218200, 0.114185707225843340, +0.114136034112003780, 0.114086360712824570, 0.114036687028429460, 0.113987013058942630, 0.113937338804487840, 0.113887664265190130, 0.113837989441173270, 0.113788314332560980, +0.113738638939478360, 0.113688963262049140, 0.113639287300397500, 0.113589611054647210, 0.113539934524923340, 0.113490257711349620, 0.113440580614050250, 0.113390903233149020, +0.113341225568770940, 0.113291547621039810, 0.113241869390079810, 0.113192190876014700, 0.113142512078969550, 0.113092832999068110, 0.113043153636434610, 0.112993473991192760, +0.112943794063467690, 0.112894113853383120, 0.112844433361062830, 0.112794752586631890, 0.112745071530214070, 0.112695390191933570, 0.112645708571914170, 0.112596026670280930, +0.112546344487157610, 0.112496662022668450, 0.112446979276937180, 0.112397296250088900, 0.112347612942247390, 0.112297929353536840, 0.112248245484081040, 0.112198561334005050, +0.112148876903432670, 0.112099192192488100, 0.112049507201295080, 0.111999821929978760, 0.111950136378662880, 0.111900450547471660, 0.111850764436528870, 0.111801078045959610, +0.111751391375887660, 0.111701704426436790, 0.111652017197732090, 0.111602329689897350, 0.111552641903056790, 0.111502953837334190, 0.111453265492854630, 0.111403576869741920, +0.111353887968120260, 0.111304198788113440, 0.111254509329846570, 0.111204819593443430, 0.111155129579028230, 0.111105439286724770, 0.111055748716658160, 0.111006057868952170, +0.110956366743731040, 0.110906675341118550, 0.110856983661239810, 0.110807291704218600, 0.110757599470178740, 0.110707906959245320, 0.110658214171542120, 0.110608521107193390, +0.110558827766322920, 0.110509134149055820, 0.110459440255515880, 0.110409746085827350, 0.110360051640114000, 0.110310356918500970, 0.110260661921112040, 0.110210966648071480, +0.110161271099503040, 0.110111575275531860, 0.110061879176281750, 0.110012182801876950, 0.109962486152441240, 0.109912789228099760, 0.109863092028976300, 0.109813394555194690, +0.109763696806880020, 0.109713998784156110, 0.109664300487147200, 0.109614601915977090, 0.109564903070770940, 0.109515203951652510, 0.109465504558746080, 0.109415804892175450, +0.109366104952065740, 0.109316404738540780, 0.109266704251724800, 0.109217003491741610, 0.109167302458716360, 0.109117601152772860, 0.109067899574035360, 0.109018197722627650, +0.108968495598674900, 0.108918793202300910, 0.108869090533629500, 0.108819387592785810, 0.108769684379893640, 0.108719980895077260, 0.108670277138460490, 0.108620573110168470, +0.108570868810325000, 0.108521164239054380, 0.108471459396480400, 0.108421754282728210, 0.108372048897921640, 0.108322343242184940, 0.108272637315641950, 0.108222931118417810, +0.108173224650636330, 0.108123517912421790, 0.108073810903898020, 0.108024103625190170, 0.107974396076422050, 0.107924688257717950, 0.107874980169201680, 0.107825271810998390, +0.107775563183231950, 0.107725854286026130, 0.107676145119506140, 0.107626435683795780, 0.107576725979019320, 0.107527016005300610, 0.107477305762764800, 0.107427595251535740, +0.107377884471737670, 0.107328173423494460, 0.107278462106931260, 0.107228750522171900, 0.107179038669340660, 0.107129326548561390, 0.107079614159959240, 0.107029901503658060, +0.106980188579782120, 0.106930475388455270, 0.106880761929802670, 0.106831048203948160, 0.106781334211015600, 0.106731619951130150, 0.106681905424415640, 0.106632190630996370, +0.106582475570996180, 0.106532760244540240, 0.106483044651752400, 0.106433328792756950, 0.106383612667677730, 0.106333896276639940, 0.106284179619767400, 0.106234462697184410, +0.106184745509014810, 0.106135028055383800, 0.106085310336415220, 0.106035592352233370, 0.105985874102962080, 0.105936155588726560, 0.105886436809650640, 0.105836717765858190, +0.105786998457474400, 0.105737278884623100, 0.105687559047428600, 0.105637838946014780, 0.105588118580506790, 0.105538397951028500, 0.105488677057704220, 0.105438955900657810, +0.105389234480014440, 0.105339512795898000, 0.105289790848432780, 0.105240068637742630, 0.105190346163952740, 0.105140623427187000, 0.105090900427569700, 0.105041177165224710, +0.104991453640277200, 0.104941729852851080, 0.104892005803070620, 0.104842281491059720, 0.104792556916943540, 0.104742832080845980, 0.104693106982890890, 0.104643381623203480, +0.104593656001907610, 0.104543930119127600, 0.104494203974987330, 0.104444477569611990, 0.104394750903125460, 0.104345023975652040, 0.104295296787315630, 0.104245569338241420, +0.104195841628553280, 0.104146113658375530, 0.104096385427832070, 0.104046656937048080, 0.103996928186147450, 0.103947199175254500, 0.103897469904493110, 0.103847740373988490, +0.103798010583864510, 0.103748280534245060, 0.103698550225255360, 0.103648819657019280, 0.103599088829661150, 0.103549357743304860, 0.103499626398075630, 0.103449894794097300, +0.103400162931494260, 0.103350430810390370, 0.103300698430910830, 0.103250965793179560, 0.103201232897320860, 0.103151499743458650, 0.103101766331718120, 0.103052032662223190, +0.103002298735098170, 0.102952564550466960, 0.102902830108454790, 0.102853095409185520, 0.102803360452783100, 0.102753625239372700, 0.102703889769078250, 0.102654154042024060, +0.102604418058334060, 0.102554681818133440, 0.102504945321546140, 0.102455208568696460, 0.102405471559708310, 0.102355734294706930, 0.102305996773816220, 0.102256258997160510, +0.102206520964863710, 0.102156782677051060, 0.102107044133846440, 0.102057305335374230, 0.102007566281758290, 0.101957826973123890, 0.101908087409594920, 0.101858347591295740, +0.101808607518350230, 0.101758867190883660, 0.101709126609019910, 0.101659385772882920, 0.101609644682597890, 0.101559903338288770, 0.101510161740079860, 0.101460419888095120, +0.101410677782459780, 0.101360935423297730, 0.101311192810733350, 0.101261449944890540, 0.101211706825894560, 0.101161963453869310, 0.101112219828939140, 0.101062475951227980, +0.101012731820861080, 0.100962987437962350, 0.100913242802656150, 0.100863497915066410, 0.100813752775318340, 0.100764007383535910, 0.100714261739843020, 0.100664515844364910, +0.100614769697225520, 0.100565023298549190, 0.100515276648459870, 0.100465529747082810, 0.100415782594541910, 0.100366035190961560, 0.100316287536465680, 0.100266539631179510, +0.100216791475227010, 0.100167043068732530, 0.100117294411819990, 0.100067545504614660, 0.100017796347240460, 0.099968046939821781, 0.099918297282482541, 0.099868547375348005, +0.099818797218542088, 0.099769046812188733, 0.099719296156413215, 0.099669545251339448, 0.099619794097091832, 0.099570042693794270, 0.099520291041572048, 0.099470539140549111, +0.099420786990849816, 0.099371034592598120, 0.099321281945919271, 0.099271529050937210, 0.099221775907776338, 0.099172022516560585, 0.099122268877415209, 0.099072514990464169, +0.099022760855831837, 0.098973006473642169, 0.098923251844020413, 0.098873496967090538, 0.098823741842976473, 0.098773986471803507, 0.098724230853695569, 0.098674474988777044, +0.098624718877171905, 0.098574962519005396, 0.098525205914401490, 0.098475449063484558, 0.098425691966378570, 0.098375934623208802, 0.098326177034099183, 0.098276419199174125, +0.098226661118557587, 0.098176902792374829, 0.098127144220749821, 0.098077385403806949, 0.098027626341670171, 0.097977867034464761, 0.097928107482314689, 0.097878347685344355, +0.097828587643677703, 0.097778827357440035, 0.097729066826755279, 0.097679306051747433, 0.097629545032541759, 0.097579783769262213, 0.097530022262033209, 0.097480260510978717, +0.097430498516224012, 0.097380736277893065, 0.097330973796110262, 0.097281211070999601, 0.097231448102686344, 0.097181684891294473, 0.097131921436948376, 0.097082157739772051, +0.097032393799890759, 0.096982629617428498, 0.096932865192509654, 0.096883100525258198, 0.096833335615799446, 0.096783570464257340, 0.096733805070755879, 0.096684039435420352, +0.096634273558374714, 0.096584507439743394, 0.096534741079650363, 0.096484974478220922, 0.096435207635579057, 0.096385440551849152, 0.096335673227155222, 0.096285905661622539, +0.096236137855375103, 0.096186369808537314, 0.096136601521233156, 0.096086832993587945, 0.096037064225725638, 0.095987295217770691, 0.095937525969847046, 0.095887756482080033, +0.095837986754593638, 0.095788216787511829, 0.095738446580959910, 0.095688676135061879, 0.095638905449942163, 0.095589134525724748, 0.095539363362534921, 0.095489591960496695, +0.095439820319734497, 0.095390048440372299, 0.095340276322535417, 0.095290503966347848, 0.095240731371934020, 0.095190958539417919, 0.095141185468924860, 0.095091412160578856, +0.095041638614504306, 0.094991864830825223, 0.094942090809666910, 0.094892316551153377, 0.094842542055409054, 0.094792767322557939, 0.094742992352725333, 0.094693217146035263, +0.094643441702611700, 0.094593666022579972, 0.094543890106064080, 0.094494113953188463, 0.094444337564077122, 0.094394560938855385, 0.094344784077647237, 0.094295006980577134, +0.094245229647769060, 0.094195452079348360, 0.094145674275439031, 0.094095896236165516, 0.094046117961651826, 0.093996339452023278, 0.093946560707403884, 0.093896781727918086, +0.093847002513689881, 0.093797223064844629, 0.093747443381506312, 0.093697663463798944, 0.093647883311847854, 0.093598102925777069, 0.093548322305711015, 0.093498541451773720, +0.093448760364090500, 0.093398979042785393, 0.093349197487982843, 0.093299415699806848, 0.093249633678382751, 0.093199851423834579, 0.093150068936286773, 0.093100286215863359, +0.093050503262689668, 0.093000720076889712, 0.092950936658587974, 0.092901153007908438, 0.092851369124976463, 0.092801585009916060, 0.092751800662851269, 0.092702016083907407, +0.092652231273208499, 0.092602446230879029, 0.092552660957042995, 0.092502875451825742, 0.092453089715351308, 0.092403303747744150, 0.092353517549128294, 0.092303731119629071, +0.092253944459370532, 0.092204157568477135, 0.092154370447072892, 0.092104583095283174, 0.092054795513231993, 0.092005007701043834, 0.091955219658842707, 0.091905431386753972, +0.091855642884901653, 0.091805854153409791, 0.091756065192403730, 0.091706276002007509, 0.091656486582345598, 0.091606696933542037, 0.091556907055722170, 0.091507116949010023, +0.091457326613530107, 0.091407536049406421, 0.091357745256764336, 0.091307954235727878, 0.091258162986421545, 0.091208371508969363, 0.091158579803496689, 0.091108787870127578, +0.091058995708986484, 0.091009203320197463, 0.090959410703885885, 0.090909617860175762, 0.090859824789191607, 0.090810031491057444, 0.090760237965898646, 0.090710444213839253, +0.090660650235003318, 0.090610856029516185, 0.090561061597501921, 0.090511266939084997, 0.090461472054389466, 0.090411676943540686, 0.090361881606662725, 0.090312086043880066, +0.090262290255316735, 0.090212494241098132, 0.090162698001348282, 0.090112901536191697, 0.090063104845752417, 0.090013307930155814, 0.089963510789525941, 0.089913713423987282, +0.089863915833663918, 0.089814118018681194, 0.089764319979163176, 0.089714521715233905, 0.089664723227018781, 0.089614924514641855, 0.089565125578227614, 0.089515326417900110, +0.089465527033784742, 0.089415727426005551, 0.089365927594687047, 0.089316127539953286, 0.089266327261929637, 0.089216526760740170, 0.089166726036509394, 0.089116925089361351, +0.089067123919421440, 0.089017322526813727, 0.088967520911662698, 0.088917719074092433, 0.088867917014228304, 0.088818114732194392, 0.088768312228114751, 0.088718509502114767, +0.088668706554318508, 0.088618903384850484, 0.088569099993834763, 0.088519296381396731, 0.088469492547660455, 0.088419688492750448, 0.088369884216790776, 0.088320079719906838, +0.088270275002222703, 0.088220470063862882, 0.088170664904951443, 0.088120859525613784, 0.088071053925973974, 0.088021248106156524, 0.087971442066285530, 0.087921635806486362, +0.087871829326883102, 0.087822022627600263, 0.087772215708761939, 0.087722408570493501, 0.087672601212919060, 0.087622793636162669, 0.087572985840349726, 0.087523177825604329, +0.087473369592050987, 0.087423561139813769, 0.087373752469018101, 0.087323943579788052, 0.087274134472248133, 0.087224325146522438, 0.087174515602736383, 0.087124705841014033, +0.087074895861479915, 0.087025085664258123, 0.086975275249474057, 0.086925464617251799, 0.086875653767715888, 0.086825842700990391, 0.086776031417200722, 0.086726219916470990, +0.086676408198925262, 0.086626596264688951, 0.086576784113886154, 0.086526971746641396, 0.086477159163078771, 0.086427346363323679, 0.086377533347500229, 0.086327720115732948, +0.086277906668145915, 0.086228093004864573, 0.086178279126012988, 0.086128465031715701, 0.086078650722096819, 0.086028836197281744, 0.085979021457394583, 0.085929206502559863, +0.085879391332901692, 0.085829575948545483, 0.085779760349615333, 0.085729944536235350, 0.085680128508530934, 0.085630312266626193, 0.085580495810645682, 0.085530679140713495, +0.085480862256955045, 0.085431045159494429, 0.085381227848456212, 0.085331410323964491, 0.085281592586144664, 0.085231774635120869, 0.085181956471017645, 0.085132138093959073, +0.085082319504070608, 0.085032500701476346, 0.084982681686300826, 0.084932862458668157, 0.084883043018703780, 0.084833223366531790, 0.084783403502276297, 0.084733583426062742, +0.084683763138015233, 0.084633942638258311, 0.084584121926916098, 0.084534301004114007, 0.084484479869976176, 0.084434658524627143, 0.084384836968191018, 0.084335015200793256, +0.084285193222557939, 0.084235371033609646, 0.084185548634072488, 0.084135726024071891, 0.084085903203731979, 0.084036080173177319, 0.083986256932532005, 0.083936433481921507, +0.083886609821469907, 0.083836785951301798, 0.083786961871541277, 0.083737137582313784, 0.083687313083743456, 0.083637488375954402, 0.083587663459072065, 0.083537838333220579, +0.083488012998524486, 0.083438187455107921, 0.083388361703096339, 0.083338535742613851, 0.083288709573785008, 0.083238883196733962, 0.083189056611586154, 0.083139229818465693, +0.083089402817497160, 0.083039575608804692, 0.082989748192513715, 0.082939920568748368, 0.082890092737633217, 0.082840264699292399, 0.082790436453851354, 0.082740608001434221, +0.082690779342165122, 0.082640950476169525, 0.082591121403571541, 0.082541292124495763, 0.082491462639066315, 0.082441632947408652, 0.082391803049646897, 0.082341972945905645, +0.082292142636309004, 0.082242312120982458, 0.082192481400050130, 0.082142650473636614, 0.082092819341866005, 0.082042988004863801, 0.081993156462754124, 0.081943324715661570, +0.081893492763710246, 0.081843660607025637, 0.081793828245731878, 0.081743995679953108, 0.081694162909814780, 0.081644329935441060, 0.081594496756956500, 0.081544663374485266, +0.081494829788152812, 0.081444995998083289, 0.081395162004401278, 0.081345327807230916, 0.081295493406697672, 0.081245658802925697, 0.081195823996039571, 0.081145988986163445, +0.081096153773422788, 0.081046318357941752, 0.080996482739844916, 0.080946646919256432, 0.080896810896301782, 0.080846974671105090, 0.080797138243790978, 0.080747301614483569, +0.080697464783308345, 0.080647627750389458, 0.080597790515851059, 0.080547953079818629, 0.080498115442416321, 0.080448277603768728, 0.080398439563999988, 0.080348601323235597, +0.080298762881599692, 0.080248924239216896, 0.080199085396211331, 0.080149246352708509, 0.080099407108832565, 0.080049567664708110, 0.079999728020459279, 0.079949888176211584, +0.079900048132089160, 0.079850207888216618, 0.079800367444718120, 0.079750526801719138, 0.079700685959343848, 0.079650844917716387, 0.079601003676962268, 0.079551162237205639, +0.079501320598571096, 0.079451478761182817, 0.079401636725166272, 0.079351794490645652, 0.079301952057745539, 0.079252109426590098, 0.079202266597304824, 0.079152423570013897, +0.079102580344841897, 0.079052736921913017, 0.079002893301352725, 0.078953049483285215, 0.078903205467835066, 0.078853361255126472, 0.078803516845284902, 0.078753672238434561, +0.078703827434699586, 0.078653982434205474, 0.078604137237076419, 0.078554291843437027, 0.078504446253411450, 0.078454600467125199, 0.078404754484702452, 0.078354908306267831, +0.078305061931945474, 0.078255215361860919, 0.078205368596138330, 0.078155521634902303, 0.078105674478277043, 0.078055827126388033, 0.078005979579359452, 0.077956131837315937, +0.077906283900381637, 0.077856435768682078, 0.077806587442341424, 0.077756738921483853, 0.077706890206234891, 0.077657041296718687, 0.077607192193059893, 0.077557342895382672, +0.077507493403812536, 0.077457643718473662, 0.077407793839490688, 0.077357943766987777, 0.077308093501090455, 0.077258243041922900, 0.077208392389609748, 0.077158541544275150, +0.077108690506044658, 0.077058839275042437, 0.077008987851393110, 0.076959136235220882, 0.076909284426651237, 0.076859432425808394, 0.076809580232816976, 0.076759727847801162, +0.076709875270886463, 0.076660022502197084, 0.076610169541857190, 0.076560316389992333, 0.076510463046726679, 0.076460609512184863, 0.076410755786491091, 0.076360901869770861, +0.076311047762148379, 0.076261193463748281, 0.076211338974694759, 0.076161484295113338, 0.076111629425128197, 0.076061774364863971, 0.076011919114444881, 0.075962063673996438, +0.075912208043642834, 0.075862352223508706, 0.075812496213718258, 0.075762640014397004, 0.075712783625669161, 0.075662927047658909, 0.075613070280491787, 0.075563213324291986, +0.075513356179184157, 0.075463498845292479, 0.075413641322742517, 0.075363783611658436, 0.075313925712164900, 0.075264067624386116, 0.075214209348447594, 0.075164350884473555, +0.075114492232588648, 0.075064633392917052, 0.075014774365584319, 0.074964915150714656, 0.074915055748432699, 0.074865196158862668, 0.074815336382130074, 0.074765476418359150, +0.074715616267674090, 0.074665755930200445, 0.074615895406062394, 0.074566034695384600, 0.074516173798291299, 0.074466312714907987, 0.074416451445358897, 0.074366589989768681, +0.074316728348261543, 0.074266866520963037, 0.074217004507997356, 0.074167142309489162, 0.074117279925562676, 0.074067417356343437, 0.074017554601955651, 0.073967691662523968, +0.073917828538172622, 0.073867965229027152, 0.073818101735211764, 0.073768238056851121, 0.073718374194069430, 0.073668510146992258, 0.073618645915743811, 0.073568781500448308, +0.073518916901231288, 0.073469052118216985, 0.073419187151530035, 0.073369322001294687, 0.073319456667636479, 0.073269591150679617, 0.073219725450548792, 0.073169859567368198, +0.073119993501263414, 0.073070127252358633, 0.073020260820778532, 0.072970394206647346, 0.072920527410090613, 0.072870660431232553, 0.072820793270197859, 0.072770925927110722, +0.072721058402096722, 0.072671190695280080, 0.072621322806785016, 0.072571454736737082, 0.072521586485260511, 0.072471718052479983, 0.072421849438519703, 0.072371980643505252, +0.072322111667560848, 0.072272242510811172, 0.072222373173380428, 0.072172503655394210, 0.072122633956976726, 0.072072764078252666, 0.072022894019346237, 0.071973023780383033, +0.071923153361487260, 0.071873282762783611, 0.071823411984396304, 0.071773541026450907, 0.071723669889071667, 0.071673798572382805, 0.071623927076509900, 0.071574055401577158, +0.071524183547709286, 0.071474311515030517, 0.071424439303666404, 0.071374566913741208, 0.071324694345379580, 0.071274821598705781, 0.071224948673845365, 0.071175075570922577, +0.071125202290062098, 0.071075328831388188, 0.071025455195026385, 0.070975581381100938, 0.070925707389736553, 0.070875833221057435, 0.070825958875189193, 0.070776084352256061, +0.070726209652382258, 0.070676334775693378, 0.070626459722313670, 0.070576584492367811, 0.070526709085980036, 0.070476833503275937, 0.070426957744379765, 0.070377081809416195, +0.070327205698509462, 0.070277329411785175, 0.070227452949367553, 0.070177576311381301, 0.070127699497950668, 0.070077822509201235, 0.070027945345257234, 0.069978068006243385, +0.069928190492283909, 0.069878312803504400, 0.069828434940029119, 0.069778556901982744, 0.069728678689489537, 0.069678800302675079, 0.069628921741663616, 0.069579043006579397, +0.069529164097548030, 0.069479285014693734, 0.069429405758141244, 0.069379526328014779, 0.069329646724439961, 0.069279766947541011, 0.069229886997442647, 0.069180006874269132, +0.069130126578146031, 0.069080246109197621, 0.069030365467548593, 0.068980484653323210, 0.068930603666647050, 0.068880722507644390, 0.068830841176439922, 0.068780959673157907, +0.068731077997923939, 0.068681196150862267, 0.068631314132097165, 0.068581431941754228, 0.068531549579957704, 0.068481667046832312, 0.068431784342502300, 0.068381901467093276, +0.068332018420729501, 0.068282135203535682, 0.068232251815636080, 0.068182368257156289, 0.068132484528220572, 0.068082600628953646, 0.068032716559479775, 0.067982832319924566, +0.067932947910412267, 0.067883063331067597, 0.067833178582014833, 0.067783293663379568, 0.067733408575286064, 0.067683523317858596, 0.067633637891222759, 0.067583752295502827, +0.067533866530823522, 0.067483980597309090, 0.067434094495085167, 0.067384208224276002, 0.067334321785006326, 0.067284435177400390, 0.067234548401583813, 0.067184661457680858, +0.067134774345816259, 0.067084887066114277, 0.067034999618700519, 0.066985112003699276, 0.066935224221235240, 0.066885336271432699, 0.066835448154417262, 0.066785559870313205, +0.066735671419245260, 0.066685782801337676, 0.066635894016716088, 0.066586005065504758, 0.066536115947827976, 0.066486226663811349, 0.066436337213579152, 0.066386447597256121, +0.066336557814966515, 0.066286667866835972, 0.066236777752988751, 0.066186887473549588, 0.066136997028642758, 0.066087106418393882, 0.066037215642927236, 0.065987324702367553, +0.065937433596839123, 0.065887542326467541, 0.065837650891377109, 0.065787759291692546, 0.065737867527538144, 0.065687975599039522, 0.065638083506320957, 0.065588191249506739, +0.065538298828722488, 0.065488406244092481, 0.065438513495741465, 0.065388620583793730, 0.065338727508374883, 0.065288834269609214, 0.065238940867621456, 0.065189047302535899, +0.065139153574478179, 0.065089259683572570, 0.065039365629943807, 0.064989471413716193, 0.064939577035015350, 0.064889682493965553, 0.064839787790691550, 0.064789892925317644, +0.064739997897969442, 0.064690102708771235, 0.064640207357847340, 0.064590311845323378, 0.064540416171323625, 0.064490520335972829, 0.064440624339395292, 0.064390728181716650, +0.064340831863061165, 0.064290935383553613, 0.064241038743318282, 0.064191141942480795, 0.064141244981165454, 0.064091347859496994, 0.064041450577599732, 0.063991553135599274, +0.063941655533619940, 0.063891757771786475, 0.063841859850223157, 0.063791961769055647, 0.063742063528408222, 0.063692165128405198, 0.063642266569172212, 0.063592367850833553, +0.063542468973513969, 0.063492569937337776, 0.063442670742430596, 0.063392771388916747, 0.063342871876920961, 0.063292972206567558, 0.063243072377982171, 0.063193172391289090, +0.063143272246613091, 0.063093371944078463, 0.063043471483810856, 0.062993570865934559, 0.062943670090574347, 0.062893769157854496, 0.062843868067900682, 0.062793966820837196, +0.062744065416788786, 0.062694163855879781, 0.062644262138235804, 0.062594360263981172, 0.062544458233240188, 0.062494556046138516, 0.062444653702800446, 0.062394751203350737, +0.062344848547913716, 0.062294945736615009, 0.062245042769578943, 0.062195139646930270, 0.062145236368793301, 0.062095332935293693, 0.062045429346555742, 0.061995525602704223, +0.061945621703863446, 0.061895717650159061, 0.061845813441715379, 0.061795909078657160, 0.061746004561108729, 0.061696099889195728, 0.061646195063042482, 0.061596290082773300, +0.061546384948513840, 0.061496479660388410, 0.061446574218521788, 0.061396668623038289, 0.061346762874063557, 0.061296856971721922, 0.061246950916138139, 0.061197044707436539, +0.061147138345742771, 0.061097231831181154, 0.061047325163876461, 0.060997418343953010, 0.060947511371536457, 0.060897604246751121, 0.060847696969721782, 0.060797789540572751, +0.060747881959429692, 0.060697974226416929, 0.060648066341658792, 0.060598158305280925, 0.060548250117407665, 0.060498341778163781, 0.060448433287673596, 0.060398524646062775, +0.060348615853455634, 0.060298706909976962, 0.060248797815751078, 0.060198888570903643, 0.060148979175558982, 0.060099069629841878, 0.060049159933876654, 0.059999250087788975, +0.059949340091703170, 0.059899429945744015, 0.059849519650035841, 0.059799609204704313, 0.059749698609873760, 0.059699787865668964, 0.059649876972214251, 0.059599965929635290, +0.059550054738056420, 0.059500143397601964, 0.059450231908397592, 0.059400320270567644, 0.059350408484236894, 0.059300496549529680, 0.059250584466571665, 0.059200672235487188, +0.059150759856401038, 0.059100847329437538, 0.059050934654722366, 0.059001021832379853, 0.058951108862534789, 0.058901195745311510, 0.058851282480835689, 0.058801369069231654, +0.058751455510624204, 0.058701541805137661, 0.058651627952897717, 0.058601713954028696, 0.058551799808654957, 0.058501885516902150, 0.058451971078894639, 0.058402056494757194, +0.058352141764614167, 0.058302226888591227, 0.058252311866812720, 0.058202396699403434, 0.058152481386487716, 0.058102565928191234, 0.058052650324638341, 0.058002734575953820, +0.057952818682262014, 0.057902902643688615, 0.057852986460357955, 0.057803070132394822, 0.057753153659923583, 0.057703237043069892, 0.057653320281958118, 0.057603403376712589, +0.057553486327459005, 0.057503569134321697, 0.057453651797425474, 0.057403734316894675, 0.057353816692854984, 0.057303898925430745, 0.057253981014746769, 0.057204062960927393, +0.057154144764098302, 0.057104226424383848, 0.057054307941908827, 0.057004389316797598, 0.056954470549175837, 0.056904551639167897, 0.056854632586898581, 0.056804713392492240, +0.056754794056074552, 0.056704874577769890, 0.056654954957702591, 0.056605035195998347, 0.056555115292781524, 0.056505195248176904, 0.056455275062308859, 0.056405354735303059, +0.056355434267283885, 0.056305513658376119, 0.056255592908704126, 0.056205672018393590, 0.056155750987568885, 0.056105829816354792, 0.056055908504875684, 0.056005987053257253, +0.055956065461623850, 0.055906143730100284, 0.055856221858810916, 0.055806299847881435, 0.055756377697436202, 0.055706455407600032, 0.055656532978497278, 0.055606610410253630, +0.055556687702993462, 0.055506764856841126, 0.055456841871922326, 0.055406918748361414, 0.055356995486283214, 0.055307072085812078, 0.055257148547073705, 0.055207224870192459, +0.055157301055293158, 0.055107377102500153, 0.055057453011939150, 0.055007528783734522, 0.054957604418011063, 0.054907679914893155, 0.054857755274506488, 0.054807830496975435, +0.054757905582424805, 0.054707980530978965, 0.054658055342763620, 0.054608130017903135, 0.054558204556521883, 0.054508278958745562, 0.054458353224698539, 0.054408427354505642, +0.054358501348291226, 0.054308575206181008, 0.054258648928299347, 0.054208722514771060, 0.054158795965720527, 0.054108869281273446, 0.054058942461554196, 0.054009015506687588, +0.053959088416797994, 0.053909161192011126, 0.053859233832451357, 0.053809306338243504, 0.053759378709511939, 0.053709450946382367, 0.053659523048979176, 0.053609595017426730, +0.053559666851850735, 0.053509738552375577, 0.053459810119126074, 0.053409881552226597, 0.053359952851802867, 0.053310024017979254, 0.053260095050880578, 0.053210165950631216, +0.053160236717356889, 0.053110307351181975, 0.053060377852231284, 0.053010448220629211, 0.052960518456501453, 0.052910588559972403, 0.052860658531166886, 0.052810728370209274, +0.052760798077225286, 0.052710867652339302, 0.052660937095676152, 0.052611006407360210, 0.052561075587517200, 0.052511144636271503, 0.052461213553747499, 0.052411282340070905, +0.052361350995366103, 0.052311419519757922, 0.052261487913370749, 0.052211556176330304, 0.052161624308760965, 0.052111692310787570, 0.052061760182534500, 0.052011827924127466, +0.051961895535690868, 0.051911963017349530, 0.051862030369227839, 0.051812097591451521, 0.051762164684144955, 0.051712231647432980, 0.051662298481439980, 0.051612365186291677, +0.051562431762112462, 0.051512498209026723, 0.051462564527160186, 0.051412630716637230, 0.051362696777582706, 0.051312762710120988, 0.051262828514377815, 0.051212894190477566, +0.051162959738545080, 0.051113025158704757, 0.051063090451082309, 0.051013155615802136, 0.050963220652989076, 0.050913285562767523, 0.050863350345263195, 0.050813415000600493, +0.050763479528904254, 0.050713543930298872, 0.050663608204910074, 0.050613672352862252, 0.050563736374279813, 0.050513800269288471, 0.050463864038012632, 0.050413927680577127, +0.050363991197106363, 0.050314054587726066, 0.050264117852560630, 0.050214180991734900, 0.050164244005373275, 0.050114306893601482, 0.050064369656543928, 0.050014432294325444, +0.049964494807070436, 0.049914557194904632, 0.049864619457952439, 0.049814681596338700, 0.049764743610187810, 0.049714805499625501, 0.049664867264776182, 0.049614928905764251, +0.049564990422715442, 0.049515051815754156, 0.049465113085005244, 0.049415174230593099, 0.049365235252643469, 0.049315296151280746, 0.049265356926629783, 0.049215417578814986, +0.049165478107962089, 0.049115538514195499, 0.049065598797640060, 0.049015658958420180, 0.048965718996661592, 0.048915778912488717, 0.048865838706026385, 0.048815898377399018, +0.048765957926732342, 0.048716017354150778, 0.048666076659779171, 0.048616135843741928, 0.048566194906164782, 0.048516253847172154, 0.048466312666888452, 0.048416371365439408, +0.048366429942949436, 0.048316488399543389, 0.048266546735345674, 0.048216604950482043, 0.048166663045076892, 0.048116721019255092, 0.048066778873141036, 0.048016836606860486, +0.047966894220537841, 0.047916951714297953, 0.047867009088265251, 0.047817066342565467, 0.047767123477323016, 0.047717180492662763, 0.047667237388709108, 0.047617294165587805, +0.047567350823423268, 0.047517407362339906, 0.047467463782463477, 0.047417520083918384, 0.047367576266829491, 0.047317632331321212, 0.047267688277519294, 0.047217744105548159, +0.047167799815532666, 0.047117855407597227, 0.047067910881867597, 0.047017966238468184, 0.046968021477523859, 0.046918076599159031, 0.046868131603499459, 0.046818186490669565, +0.046768241260794194, 0.046718295913997780, 0.046668350450406071, 0.046618404870143487, 0.046568459173334444, 0.046518513360104700, 0.046468567430578672, 0.046418621384881224, +0.046368675223136778, 0.046318728945471087, 0.046268782552008579, 0.046218836042874113, 0.046168889418192111, 0.046118942678088332, 0.046068995822687191, 0.046019048852113560, +0.045969101766491868, 0.045919154565947869, 0.045869207250605976, 0.045819259820591068, 0.045769312276027561, 0.045719364617041229, 0.045669416843756479, 0.045619468956298183, +0.045569520954790776, 0.045519572839360006, 0.045469624610130308, 0.045419676267226108, 0.045369727810773156, 0.045319779240895884, 0.045269830557719166, 0.045219881761367424, +0.045169932851966424, 0.045119983829640595, 0.045070034694514802, 0.045020085446713480, 0.044970136086362390, 0.044920186613585961, 0.044870237028509057, 0.044820287331256127, +0.044770337521952919, 0.044720387600723860, 0.044670437567693844, 0.044620487422987284, 0.044570537166729950, 0.044520586799046268, 0.044470636320060680, 0.044420685729898948, +0.044370735028685500, 0.044320784216545214, 0.044270833293602520, 0.044220882259983191, 0.044170931115811655, 0.044120979861212793, 0.044071028496311032, 0.044021077021232147, +0.043971125436100572, 0.043921173741041181, 0.043871221936178414, 0.043821270021638034, 0.043771317997544475, 0.043721365864022629, 0.043671413621196919, 0.043621461269193119, +0.043571508808135664, 0.043521556238149003, 0.043471603559358883, 0.043421650771889760, 0.043371697875866512, 0.043321744871413576, 0.043271791758656718, 0.043221838537720381, +0.043171885208729451, 0.043121931771808356, 0.043071978227082884, 0.043022024574677464, 0.042972070814716982, 0.042922116947325881, 0.042872162972629926, 0.042822208890753569, +0.042772254701821687, 0.042722300405958723, 0.042672346003290458, 0.042622391493941321, 0.042572436878036211, 0.042522482155699565, 0.042472527327057155, 0.042422572392233425, +0.042372617351352823, 0.042322662204541117, 0.042272706951922763, 0.042222751593622633, 0.042172796129765183, 0.042122840560476195, 0.042072884885880096, 0.042022929106101788, +0.041972973221265711, 0.041923017231497647, 0.041873061136922039, 0.041823104937663780, 0.041773148633847318, 0.041723192225598421, 0.041673235713041545, 0.041623279096301584, +0.041573322375502979, 0.041523365550771511, 0.041473408622231631, 0.041423451590007786, 0.041373494454225751, 0.041323537215009983, 0.041273579872485373, 0.041223622426776373, +0.041173664878008755, 0.041123707226306976, 0.041073749471795928, 0.041023791614600062, 0.040973833654845165, 0.040923875592655680, 0.040873917428156506, 0.040823959161472100, +0.040774000792728235, 0.040724042322049368, 0.040674083749560400, 0.040624125075385771, 0.040574166299651278, 0.040524207422481369, 0.040474248444000500, 0.040424289364334454, +0.040374330183607678, 0.040324370901945079, 0.040274411519471115, 0.040224452036311559, 0.040174492452590874, 0.040124532768433960, 0.040074572983965266, 0.040024613099310588, +0.039974653114594375, 0.039924693029941533, 0.039874732845476511, 0.039824772561325099, 0.039774812177611758, 0.039724851694461390, 0.039674891111998449, 0.039624930430348718, +0.039574969649636665, 0.039525008769986741, 0.039475047791524741, 0.039425086714375120, 0.039375125538662785, 0.039325164264512193, 0.039275202892049131, 0.039225241421398063, +0.039175279852683889, 0.039125318186031072, 0.039075356421565406, 0.039025394559411349, 0.038975432599693806, 0.038925470542537234, 0.038875508388067435, 0.038825546136408859, +0.038775583787686425, 0.038725621342024584, 0.038675658799549130, 0.038625696160384533, 0.038575733424655693, 0.038525770592487081, 0.038475807664004477, 0.038425844639332365, +0.038375881518595188, 0.038325918301918754, 0.038275954989427527, 0.038225991581246413, 0.038176028077499875, 0.038126064478313709, 0.038076100783812385, 0.038026136994120802, +0.037976173109363437, 0.037926209129666086, 0.037876245055153211, 0.037826280885949720, 0.037776316622180083, 0.037726352263970100, 0.037676387811444237, 0.037626423264727406, +0.037576458623944070, 0.037526493889220032, 0.037476529060679761, 0.037426564138447721, 0.037376599122649720, 0.037326634013410215, 0.037276668810854126, 0.037226703515105923, +0.037176738126291402, 0.037126772644535039, 0.037076807069961748, 0.037026841402695986, 0.036976875642863574, 0.036926909790588963, 0.036876943845997087, 0.036826977809212402, +0.036777011680360717, 0.036727045459566503, 0.036677079146954679, 0.036627112742649709, 0.036577146246777402, 0.036527179659462228, 0.036477212980828663, 0.036427246211002511, +0.036377279350108239, 0.036327312398270771, 0.036277345355614575, 0.036227378222265468, 0.036177410998347904, 0.036127443683986821, 0.036077476279306686, 0.036027508784433296, +0.035977541199491141, 0.035927573524605134, 0.035877605759899747, 0.035827637905500788, 0.035777669961532733, 0.035727701928120505, 0.035677733805388578, 0.035627765593462764, +0.035577797292467531, 0.035527828902527807, 0.035477860423768062, 0.035427891856314120, 0.035377923200290443, 0.035327954455821514, 0.035277985623033137, 0.035228016702049801, +0.035178047692996428, 0.035128078595997488, 0.035078109411178796, 0.035028140138664829, 0.034978170778580508, 0.034928201331050325, 0.034878231796200074, 0.034828262174154252, +0.034778292465037768, 0.034728322668975110, 0.034678352786092090, 0.034628382816513190, 0.034578412760363331, 0.034528442617766997, 0.034478472388850004, 0.034428502073736822, +0.034378531672551949, 0.034328561185421186, 0.034278590612469018, 0.034228619953820379, 0.034178649209599739, 0.034128678379932928, 0.034078707464944416, 0.034028736464759138, +0.033978765379501570, 0.033928794209297543, 0.033878822954271519, 0.033828851614548447, 0.033778880190252797, 0.033728908681510385, 0.033678937088445708, 0.033628965411183688, +0.033578993649848815, 0.033529021804566891, 0.033479049875462422, 0.033429077862659883, 0.033379105766285090, 0.033329133586462535, 0.033279161323317138, 0.033229188976973405, +0.033179216547557136, 0.033129244035192830, 0.033079271440005414, 0.033029298762119373, 0.032979326001660529, 0.032929353158753373, 0.032879380233522833, 0.032829407226093399, +0.032779434136590888, 0.032729460965139796, 0.032679487711865046, 0.032629514376891135, 0.032579540960343885, 0.032529567462347780, 0.032479593883027312, 0.032429620222508303, +0.032379646480915243, 0.032329672658373068, 0.032279698755006268, 0.032229724770940667, 0.032179750706300754, 0.032129776561211458, 0.032079802335797283, 0.032029828030184046, +0.031979853644496237, 0.031929879178858790, 0.031879904633396204, 0.031829930008234301, 0.031779955303497580, 0.031729980519310960, 0.031680005655798947, 0.031630030713087370, +0.031580055691300707, 0.031530080590563912, 0.031480105411001470, 0.031430130152739211, 0.031380154815901617, 0.031330179400613202, 0.031280203906999780, 0.031230228335185847, +0.031180252685296343, 0.031130276957455762, 0.031080301151789936, 0.031030325268423354, 0.030980349307480962, 0.030930373269087250, 0.030880397153368048, 0.030830420960447857, +0.030780444690451610, 0.030730468343503809, 0.030680491919730282, 0.030630515419255523, 0.030580538842204477, 0.030530562188701638, 0.030480585458872840, 0.030430608652842576, +0.030380631770735349, 0.030330654812676987, 0.030280677778791985, 0.030230700669205291, 0.030180723484041400, 0.030130746223426146, 0.030080768887484025, 0.030030791476339982, +0.029980813990118517, 0.029930836428945458, 0.029880858792945310, 0.029830881082243015, 0.029780903296963073, 0.029730925437231319, 0.029680947503172250, 0.029630969494910810, +0.029580991412571506, 0.029531013256280166, 0.029481035026161291, 0.029431056722339387, 0.029381078344940286, 0.029331099894088487, 0.029281121369908937, 0.029231142772526142, +0.029181164102065935, 0.029131185358652816, 0.029081206542411732, 0.029031227653467190, 0.028981248691945023, 0.028931269657969733, 0.028881290551666269, 0.028831311373159137, +0.028781332122574169, 0.028731352800035869, 0.028681373405669189, 0.028631393939598630, 0.028581414401950032, 0.028531434792847896, 0.028481455112417176, 0.028431475360782370, +0.028381495538069325, 0.028331515644402536, 0.028281535679906517, 0.028231555644707102, 0.028181575538928798, 0.028131595362696556, 0.028081615116134880, 0.028031634799369608, +0.027981654412525252, 0.027931673955726762, 0.027881693429098641, 0.027831712832766729, 0.027781732166855536, 0.027731751431490013, 0.027681770626794666, 0.027631789752895340, +0.027581808809916536, 0.027531827797983213, 0.027481846717219875, 0.027431865567752362, 0.027381884349705187, 0.027331903063202857, 0.027281921708371216, 0.027231940285334769, +0.027181958794218471, 0.027131977235146831, 0.027081995608245691, 0.027032013913639564, 0.026982032151453401, 0.026932050321811715, 0.026882068424840349, 0.026832086460663811, +0.026782104429407053, 0.026732122331194593, 0.026682140166152273, 0.026632157934404599, 0.026582175636076531, 0.026532193271292581, 0.026482210840178589, 0.026432228342859073, +0.026382245779458541, 0.026332263150102841, 0.026282280454916481, 0.026232297694024419, 0.026182314867551168, 0.026132331975622577, 0.026082349018363156, 0.026032365995897859, +0.025982382908351205, 0.025932399755849038, 0.025882416538515873, 0.025832433256476665, 0.025782449909855929, 0.025732466498779513, 0.025682483023371932, 0.025632499483758141, +0.025582515880062658, 0.025532532212411332, 0.025482548480928673, 0.025432564685739199, 0.025382580826968759, 0.025332596904741864, 0.025282612919183479, 0.025232628870418116, +0.025182644758571626, 0.025132660583768524, 0.025082676346133773, 0.025032692045791883, 0.024982707682868709, 0.024932723257488767, 0.024882738769777014, 0.024832754219857971, +0.024782769607857486, 0.024732784933900080, 0.024682800198110710, 0.024632815400613895, 0.024582830541535483, 0.024532845620999999, 0.024482860639132398, 0.024432875596057203, +0.024382890491900264, 0.024332905326786097, 0.024282920100839222, 0.024232934814185494, 0.024182949466949426, 0.024132964059255985, 0.024082978591229692, 0.024032993062996392, +0.023983007474680611, 0.023933021826407313, 0.023883036118301018, 0.023833050350487574, 0.023783064523091504, 0.023733078636237772, 0.023683092690050901, 0.023633106684656742, +0.023583120620179816, 0.023533134496745090, 0.023483148314477082, 0.023433162073501646, 0.023383175773943308, 0.023333189415926586, 0.023283202999577333, 0.023233216525020074, +0.023183229992379772, 0.023133243401780954, 0.023083256753349466, 0.023033270047209842, 0.022983283283487040, 0.022933296462305585, 0.022883309583791336, 0.022833322648068810, +0.022783335655262978, 0.022733348605498364, 0.022683361498900823, 0.022633374335594876, 0.022583387115705494, 0.022533399839357201, 0.022483412506675852, 0.022433425117785972, +0.022383437672812083, 0.022333450171880046, 0.022283462615114383, 0.022233475002640064, 0.022183487334581614, 0.022133499611064887, 0.022083511832214416, 0.022033523998155162, +0.021983536109011652, 0.021933548164909750, 0.021883560165973974, 0.021833572112329301, 0.021783584004100253, 0.021733595841412687, 0.021683607624391133, 0.021633619353160560, +0.021583631027845492, 0.021533642648571792, 0.021483654215463988, 0.021433665728647047, 0.021383677188245496, 0.021333688594385197, 0.021283699947190676, 0.021233711246786462, +0.021183722493298415, 0.021133733686851060, 0.021083744827569369, 0.021033755915577875, 0.020983766951002434, 0.020933777933967578, 0.020883788864598275, 0.020833799743019056, +0.020783810569355781, 0.020733821343732979, 0.020683832066275627, 0.020633842737108249, 0.020583853356356707, 0.020533863924145534, 0.020483874440599698, 0.020433884905843733, +0.020383895320003502, 0.020333905683203531, 0.020283915995568353, 0.020233926257223825, 0.020183936468294486, 0.020133946628905303, 0.020083956739180810, 0.020033966799246870, +0.019983976809228015, 0.019933986769249214, 0.019883996679435006, 0.019834006539911245, 0.019784016350802472, 0.019734026112233658, 0.019684035824329333, 0.019634045487215365, +0.019584055101016278, 0.019534064665857057, 0.019484074181862231, 0.019434083649157663, 0.019384093067867886, 0.019334102438117430, 0.019284111760032165, 0.019234121033736621, +0.019184130259355770, 0.019134139437014152, 0.019084148566837631, 0.019034157648950736, 0.018984166683478448, 0.018934175670545301, 0.018884184610277157, 0.018834193502798552, +0.018784202348234462, 0.018734211146709423, 0.018684219898349300, 0.018634228603278628, 0.018584237261622383, 0.018534245873505103, 0.018484254439052650, 0.018434262958389562, +0.018384271431640373, 0.018334279858930949, 0.018284288240385825, 0.018234296576129981, 0.018184304866287953, 0.018134313110985605, 0.018084321310347474, 0.018034329464498539, +0.017984337573563339, 0.017934345637667739, 0.017884353656936271, 0.017834361631493923, 0.017784369561465226, 0.017734377446976046, 0.017684385288150927, 0.017634393085114840, +0.017584400837992332, 0.017534408546909262, 0.017484416211990171, 0.017434423833360042, 0.017384431411143406, 0.017334438945466137, 0.017284446436452772, 0.017234453884227844, +0.017184461288917225, 0.017134468650645454, 0.017084475969537515, 0.017034483245717939, 0.016984490479312598, 0.016934497670446032, 0.016884504819243220, 0.016834511925828705, +0.016784518990328352, 0.016734526012866704, 0.016684532993568736, 0.016634539932558996, 0.016584546829963350, 0.016534553685906336, 0.016484560500512935, 0.016434567273907692, +0.016384574006216474, 0.016334580697563824, 0.016284587348074274, 0.016234593957873703, 0.016184600527086642, 0.016134607055838083, 0.016084613544252564, 0.016034619992455954, +0.015984626400572792, 0.015934632768728065, 0.015884639097046314, 0.015834645385653406, 0.015784651634673887, 0.015734657844232738, 0.015684664014454501, 0.015634670145465050, +0.015584676237388920, 0.015534682290351100, 0.015484688304476132, 0.015434694279889886, 0.015384700216716904, 0.015334706115081729, 0.015284711975110232, 0.015234717796926953, +0.015184723580656883, 0.015134729326424557, 0.015084735034355853, 0.015034740704575313, 0.014984746337207918, 0.014934751932378216, 0.014884757490212076, 0.014834763010834045, +0.014784768494369103, 0.014734773940941798, 0.014684779350678002, 0.014634784723702257, 0.014584790060139552, 0.014534795360114426, 0.014484800623752755, 0.014434805851179084, +0.014384811042518398, 0.014334816197895240, 0.014284821317435487, 0.014234826401263679, 0.014184831449504361, 0.014134836462283409, 0.014084841439725366, 0.014034846381955219, +0.013984851289097513, 0.013934856161278122, 0.013884860998621591, 0.013834865801252906, 0.013784870569296614, 0.013734875302878589, 0.013684880002123376, 0.013634884667155962, +0.013584889298100894, 0.013534893895084046, 0.013484898458229963, 0.013434902987663635, 0.013384907483509605, 0.013334911945893750, 0.013284916374940616, 0.013234920770774745, +0.013184925133522018, 0.013134929463306978, 0.013084933760254613, 0.013034938024489471, 0.012984942256137427, 0.012934946455323027, 0.012884950622171262, 0.012834954756806675, +0.012784958859355147, 0.012734962929941222, 0.012684966968689888, 0.012634970975725694, 0.012584974951174515, 0.012534978895160901, 0.012484982807809837, 0.012434986689245874, +0.012384990539594886, 0.012334994358981425, 0.012284998147530032, 0.012235001905366588, 0.012185005632615639, 0.012135009329402176, 0.012085012995850746, 0.012035016632087227, +0.011985020238236168, 0.011935023814422557, 0.011885027360770942, 0.011835030877407202, 0.011785034364455887, 0.011735037822041985, 0.011685041250290044, 0.011635044649325946, +0.011585048019274234, 0.011535051360259903, 0.011485054672407499, 0.011435057955842903, 0.011385061210690661, 0.011335064437075324, 0.011285067635122768, 0.011235070804957545, +0.011185073946704644, 0.011135077060488613, 0.011085080146435333, 0.011035083204669355, 0.010985086235315668, 0.010935089238498820, 0.010885092214344695, 0.010835095162977839, +0.010785098084523244, 0.010735100979105461, 0.010685103846850369, 0.010635106687882517, 0.010585109502326899, 0.010535112290308063, 0.010485115051951890, 0.010435117787382930, +0.010385120496726175, 0.010335123180106175, 0.010285125837648811, 0.010235128469478633, 0.010185131075720189, 0.010135133656499361, 0.010085136211940699, 0.010035138742169197, +0.009985141247309405, 0.009935143727487203, 0.009885146182827142, 0.009835148613454215, 0.009785151019492972, 0.009735153401069296, 0.009685155758307737, 0.009635158091333288, +0.009585160400270500, 0.009535162685245254, 0.009485164946382102, 0.009435167183806039, 0.009385169397641613, 0.009335171588014706, 0.009285173755049872, 0.009235175898871659, +0.009185178019605951, 0.009135180117377297, 0.009085182192310694, 0.009035184244530689, 0.008985186274163171, 0.008935188281332685, 0.008885190266164227, 0.008835192228782351, +0.008785194169312938, 0.008735196087880540, 0.008685197984610153, 0.008635199859626325, 0.008585201713054942, 0.008535203545020555, 0.008485205355648159, 0.008435207145062306, +0.008385208913388878, 0.008335210660752429, 0.008285212387277509, 0.008235214093090002, 0.008185215778314459, 0.008135217443075878, 0.008085219087498808, 0.008035220711709135, +0.007985222315831410, 0.007935223899990629, 0.007885225464311346, 0.007835227008919440, 0.007785228533939469, 0.007735230039496426, 0.007685231525714864, 0.007635232992720667, +0.007585234440638388, 0.007535235869593022, 0.007485237279709124, 0.007435238671112575, 0.007385240043927930, 0.007335241398280185, 0.007285242734293892, 0.007235244052094937, +0.007185245351807872, 0.007135246633557249, 0.007085247897468953, 0.007035249143667537, 0.006985250372277999, 0.006935251583424892, 0.006885252777234099, 0.006835253953830174, +0.006785255113338114, 0.006735256255882473, 0.006685257381589134, 0.006635258490582652, 0.006585259582988025, 0.006535260658929804, 0.006485261718533876, 0.006435262761924793, +0.006385263789227553, 0.006335264800566710, 0.006285265796068149, 0.006235266775856423, 0.006185267740056086, 0.006135268688793025, 0.006085269622191791, 0.006035270540377383, +0.005985271443474355, 0.005935272331608592, 0.005885273204904649, 0.005835274063487523, 0.005785274907481767, 0.005735275737013268, 0.005685276552206580, 0.005635277353186701, +0.005585278140078183, 0.005535278913006915, 0.005485279672097450, 0.005435280417474785, 0.005385281149263474, 0.005335281867589406, 0.005285282572577133, 0.005235283264351209, +0.005185283943037521, 0.005135284608760623, 0.005085285261645514, 0.005035285901816748, 0.004985286529400210, 0.004935287144520456, 0.004885287747302485, 0.004835288337870850, +0.004785288916351439, 0.004735289482868805, 0.004685290037547947, 0.004635290580513421, 0.004585291111891111, 0.004535291631805574, 0.004485292140381809, 0.004435292637744368, +0.004385293124019140, 0.004335293599330679, 0.004285294063803541, 0.004235294517563611, 0.004185294960735444, 0.004135295393444041, 0.004085295815813955, 0.004035296227971073, +0.003985296630039951, 0.003935297022145587, 0.003885297404412537, 0.003835297776966687, 0.003785298139932593, 0.003735298493435253, 0.003685298837599223, 0.003635299172550391, +0.003585299498413309, 0.003535299815312980, 0.003485300123373957, 0.003435300422722127, 0.003385300713482047, 0.003335300995778715, 0.003285301269736686, 0.003235301535481848, +0.003185301793138756, 0.003135302042831966, 0.003085302284687364, 0.003035302518829507, 0.002985302745383394, 0.002935302964473579, 0.002885303176225952, 0.002835303380765067, +0.002785303578215922, 0.002735303768703075, 0.002685303952352413, 0.002635304129288491, 0.002585304299636308, 0.002535304463520421, 0.002485304621066716, 0.002435304772399750, +0.002385304917644522, 0.002335305056925588, 0.002285305190368835, 0.002235305318098819, 0.002185305440240096, 0.002135305556918553, 0.002085305668258747, 0.002035305774385676, +0.001985305875423896, 0.001935305971499296, 0.001885306062736431, 0.001835306149260301, 0.001785306231195462, 0.001735306308667801, 0.001685306381801874, 0.001635306450722681, +0.001585306515554778, 0.001535306576424053, 0.001485306633455062, 0.001435306686772804, 0.001385306736501835, 0.001335306782768043, 0.001285306825695984, 0.001235306865410214, +0.001185306902036622, 0.001135306935699761, 0.001085306966524634, 0.001035306994635795, 0.000985307020159133, 0.000935307043219203, 0.000885307063941005, 0.000835307082449096, +0.000785307098869363, 0.000735307113326362, 0.000685307125945094, 0.000635307136850113, 0.000585307146167309, 0.000535307154021237, 0.000485307160536898, 0.000435307165838846, +0.000385307170052970, 0.000335307173303827, 0.000285307175716415, 0.000235307177415291, 0.000185307178526344, 0.000135307179174129, 0.000085307179483201, 0.000035307179579450, +-0.000014692820412569, -0.000064692820367856, -0.000114692820161855, -0.000164692819668678, -0.000214692818763769, -0.000264692817322128, -0.000314692815219199, -0.000364692812329094, +-0.000414692808527257, -0.000464692803688688, -0.000514692797688831, -0.000564692790401798, -0.000614692781703032, -0.000664692771467535, -0.000714692759570750, -0.000764692745886789, +-0.000814692730291096, -0.000864692712659116, -0.000914692692864960, -0.000964692670784071, -0.001014692646291452, -0.001064692619262544, -0.001114692589571461, -0.001164692557093647, +-0.001214692521704101, -0.001264692483278268, -0.001314692441690259, -0.001364692396815520, -0.001414692348529050, -0.001464692296706292, -0.001514692241221360, -0.001564692181949697, +-0.001614692118766304, -0.001664692051546625, -0.001714691980164771, -0.001764691904496188, -0.001814691824416319, -0.001864691739799276, -0.001914691650520504, -0.001964691556455003, +-0.002014691457478216, -0.002064691353464257, -0.002114691244288570, -0.002164691129826155, -0.002214691009952456, -0.002264690884541585, -0.002314690753468987, -0.002364690616609663, +-0.002414690473839055, -0.002464690325031278, -0.002514690170061775, -0.002564690008805546, -0.002614689841138036, -0.002664689666933358, -0.002714689486066956, -0.002764689298414273, +-0.002814689103849424, -0.002864688902247852, -0.002914688693484557, -0.002964688477434985, -0.003014688253973248, -0.003064688022974790, -0.003114687784314611, -0.003164687537868158, +-0.003214687283509542, -0.003264687021114207, -0.003314686750557155, -0.003364686471713830, -0.003414686184458345, -0.003464685888666144, -0.003514685584212229, -0.003564685270972043, +-0.003614684948819701, -0.003664684617630646, -0.003714684277279879, -0.003764683927642846, -0.003814683568593659, -0.003864683200007764, -0.003914682821760604, -0.003964682433726293, +-0.004014682035780276, -0.004064681627797554, -0.004114681209653572, -0.004164680781222442, -0.004214680342379612, -0.004264679893000080, -0.004314679432959292, -0.004364678962131362, +-0.004414678480391734, -0.004464677987615410, -0.004514677483677836, -0.004564676968453123, -0.004614676441816718, -0.004664675903643622, -0.004714675353809280, -0.004764674792187806, +-0.004814674218654644, -0.004864673633085242, -0.004914673035353711, -0.004964672425335498, -0.005014671802905603, -0.005064671167939473, -0.005114670520311221, -0.005164669859896293, +-0.005214669186569690, -0.005264668500206859, -0.005314667800681912, -0.005364667087870295, -0.005414666361647010, -0.005464665621887505, -0.005514664868465890, -0.005564664101257614, +-0.005614663320137677, -0.005664662524981526, -0.005714661715663275, -0.005764660892058370, -0.005814660054042256, -0.005864659201489048, -0.005914658334274192, -0.005964657452272691, +-0.006014656555359989, -0.006064655643410202, -0.006114654716298777, -0.006164653773900714, -0.006214652816091461, -0.006264651842745132, -0.006314650853737174, -0.006364649848942587, +-0.006414648828236821, -0.006464647791493989, -0.006514646738589537, -0.006564645669398468, -0.006614644583796229, -0.006664643481656934, -0.006714642362856032, -0.006764641227268523, +-0.006814640074769854, -0.006864638905234142, -0.006914637718536832, -0.006964636514553373, -0.007014635293157877, -0.007064634054225794, -0.007114632797632125, -0.007164631523252319, +-0.007214630230960490, -0.007264628920632085, -0.007314627592142108, -0.007364626245366005, -0.007414624880177894, -0.007464623496453220, -0.007514622094066987, -0.007564620672894643, +-0.007614619232810304, -0.007664617773689416, -0.007714616295406984, -0.007764614797838455, -0.007814613280857946, -0.007864611744340902, -0.007914610188162774, -0.007964608612197676, +-0.008014607016321057, -0.008064605400407919, -0.008114603764333714, -0.008164602107972555, -0.008214600431199889, -0.008264598733890722, -0.008314597015920503, -0.008364595277163349, +-0.008414593517494705, -0.008464591736789576, -0.008514589934923414, -0.008564588111770332, -0.008614586267205781, -0.008664584401104764, -0.008714582513342728, -0.008764580603793794, +-0.008814578672333408, -0.008864576718837018, -0.008914574743178742, -0.008964572745234031, -0.009014570724877888, -0.009064568681985762, -0.009114566616431770, -0.009164564528091361, +-0.009214562416839541, -0.009264560282551760, -0.009314558125102132, -0.009364555944366110, -0.009414553740218698, -0.009464551512535346, -0.009514549261190171, -0.009564546986058624, +-0.009614544687015707, -0.009664542363936874, -0.009714540016696241, -0.009764537645169259, -0.009814535249231374, -0.009864532828756710, -0.009914530383620711, -0.009964527913698389, +-0.010014525418865189, -0.010064522898995232, -0.010114520353963968, -0.010164517783646403, -0.010214515187917989, -0.010264512566652841, -0.010314509919726413, -0.010364507247013708, +-0.010414504548390180, -0.010464501823729948, -0.010514499072908461, -0.010564496295800726, -0.010614493492282193, -0.010664490662226984, -0.010714487805510547, -0.010764484922007891, +-0.010814482011594467, -0.010864479074144394, -0.010914476109533123, -0.010964473117636106, -0.011014470098327463, -0.011064467051482643, -0.011114463976976656, -0.011164460874684954, +-0.011214457744481654, -0.011264454586242211, -0.011314451399841632, -0.011364448185155368, -0.011414444942057539, -0.011464441670423597, -0.011514438370128553, -0.011564435041047856, +-0.011614431683055627, -0.011664428296027318, -0.011714424879837940, -0.011764421434362944, -0.011814417959476449, -0.011864414455053910, -0.011914410920970779, -0.011964407357101177, +-0.012014403763320554, -0.012064400139503923, -0.012114396485526738, -0.012164392801263114, -0.012214389086588512, -0.012264385341377934, -0.012314381565506839, -0.012364377758849344, +-0.012414373921280905, -0.012464370052676532, -0.012514366152911679, -0.012564362221860465, -0.012614358259398346, -0.012664354265400331, -0.012714350239741875, -0.012764346182297099, +-0.012814342092941456, -0.012864337971550404, -0.012914333817998062, -0.012964329632159885, -0.013014325413910885, -0.013064321163126516, -0.013114316879680898, -0.013164312563449489, +-0.013214308214307299, -0.013264303832129782, -0.013314299416791062, -0.013364294968166593, -0.013414290486131386, -0.013464285970560898, -0.013514281421329251, -0.013564276838311899, +-0.013614272221383856, -0.013664267570420576, -0.013714262885296183, -0.013764258165886134, -0.013814253412065438, -0.013864248623709554, -0.013914243800692604, -0.013964238942890044, +-0.014014234050177330, -0.014064229122428587, -0.014114224159519273, -0.014164219161324397, -0.014214214127719418, -0.014264209058578460, -0.014314203953776979, -0.014364198813189987, +-0.014414193636692942, -0.014464188424159970, -0.014514183175466527, -0.014564177890487626, -0.014614172569098723, -0.014664167211173945, -0.014714161816588750, -0.014764156385218151, +-0.014814150916937604, -0.014864145411621236, -0.014914139869144503, -0.014964134289382865, -0.015014128672210449, -0.015064123017502710, -0.015114117325134664, -0.015164111594981768, +-0.015214105826918149, -0.015264100020819266, -0.015314094176560133, -0.015364088294016209, -0.015414082373061619, -0.015464076413571823, -0.015514070415421837, -0.015564064378487119, +-0.015614058302641795, -0.015664052187761325, -0.015714046033720726, -0.015764039840395455, -0.015814033607659643, -0.015864027335388744, -0.015914021023458222, -0.015964014671742202, +-0.016014008280116145, -0.016064001848455071, -0.016113995376634434, -0.016163988864528363, -0.016213982312012321, -0.016263975718961324, -0.016313969085250832, -0.016363962410754971, +-0.016413955695349206, -0.016463948938908551, -0.016513942141308469, -0.016563935302423088, -0.016613928422127867, -0.016663921500297826, -0.016713914536808424, -0.016763907531533791, +-0.016813900484349390, -0.016863893395130239, -0.016913886263751798, -0.016963879090088198, -0.017013871874014899, -0.017063864615407365, -0.017113857314139724, -0.017163849970087443, +-0.017213842583125534, -0.017263835153129462, -0.017313827679973359, -0.017363820163532689, -0.017413812603682466, -0.017463805000298160, -0.017513797353253893, -0.017563789662425132, +-0.017613781927686898, -0.017663774148914655, -0.017713766325982531, -0.017763758458765991, -0.017813750547140055, -0.017863742590980190, -0.017913734590160522, -0.017963726544556517, +-0.018013718454043638, -0.018063710318496021, -0.018113702137789130, -0.018163693911797979, -0.018213685640398040, -0.018263677323463443, -0.018313668960869653, -0.018363660552491688, +-0.018413652098205020, -0.018463643597883776, -0.018513635051403420, -0.018563626458638981, -0.018613617819465918, -0.018663609133758367, -0.018713600401391792, -0.018763591622241213, +-0.018813582796182105, -0.018863573923088593, -0.018913565002836145, -0.018963556035300231, -0.019013547020354980, -0.019063537957875864, -0.019113528847737902, -0.019163519689816565, +-0.019213510483985979, -0.019263501230121622, -0.019313491928098510, -0.019363482577792111, -0.019413473179076563, -0.019463463731827332, -0.019513454235919443, -0.019563444691228359, +-0.019613435097628223, -0.019663425454994495, -0.019713415763202208, -0.019763406022126822, -0.019813396231642480, -0.019863386391624643, -0.019913376501948788, -0.019963366562489048, +-0.020013356573120887, -0.020063346533719339, -0.020113336444159868, -0.020163326304316612, -0.020213316114065037, -0.020263305873280176, -0.020313295581837493, -0.020363285239611124, +-0.020413274846476547, -0.020463264402308778, -0.020513253906983296, -0.020563243360374236, -0.020613232762357065, -0.020663222112806811, -0.020713211411598948, -0.020763200658607612, +-0.020813189853708274, -0.020863178996775960, -0.020913168087686142, -0.020963157126312963, -0.021013146112531890, -0.021063135046218397, -0.021113123927246621, -0.021163112755492035, +-0.021213101530829667, -0.021263090253134991, -0.021313078922282142, -0.021363067538146596, -0.021413056100603383, -0.021463044609527974, -0.021513033064794511, -0.021563021466278462, +-0.021613009813854861, -0.021662998107399179, -0.021712986346785559, -0.021762974531889471, -0.021812962662585946, -0.021862950738750463, -0.021912938760257156, -0.021962926726981500, +-0.022012914638798974, -0.022062902495583719, -0.022112890297211203, -0.022162878043556464, -0.022212865734494977, -0.022262853369900876, -0.022312840949649644, -0.022362828473616311, +-0.022412815941676351, -0.022462803353703903, -0.022512790709574453, -0.022562778009163020, -0.022612765252345089, -0.022662752438994800, -0.022712739568987630, -0.022762726642198614, +-0.022812713658503223, -0.022862700617775601, -0.022912687519891232, -0.022962674364725585, -0.023012661152152811, -0.023062647882048381, -0.023112634554287335, -0.023162621168745144, +-0.023212607725295958, -0.023262594223815249, -0.023312580664178059, -0.023362567046259858, -0.023412553369934797, -0.023462539635078352, -0.023512525841565560, -0.023562511989271895, +-0.023612498078071507, -0.023662484107839873, -0.023712470078452029, -0.023762455989783451, -0.023812441841708294, -0.023862427634102030, -0.023912413366839698, -0.023962399039796776, +-0.024012384652847413, -0.024062370205867087, -0.024112355698731280, -0.024162341131314140, -0.024212326503491147, -0.024262311815137338, -0.024312297066128193, -0.024362282256337863, +-0.024412267385641825, -0.024462252453915121, -0.024512237461033228, -0.024562222406870299, -0.024612207291301813, -0.024662192114202806, -0.024712176875448768, -0.024762161574913840, +-0.024812146212473508, -0.024862130788002812, -0.024912115301377234, -0.024962099752470924, -0.025012084141159362, -0.025062068467318035, -0.025112052730821094, -0.025162036931544018, +-0.025212021069361851, -0.025262005144150078, -0.025311989155782845, -0.025361973104135641, -0.025411956989083502, -0.025461940810501918, -0.025511924568265034, -0.025561908262248342, +-0.025611891892326877, -0.025661875458376129, -0.025711858960270246, -0.025761842397884715, -0.025811825771094581, -0.025861809079775325, -0.025911792323801100, -0.025961775503047398, +-0.026011758617389698, -0.026061741666702158, -0.026111724650860268, -0.026161707569739061, -0.026211690423214033, -0.026261673211159332, -0.026311655933450449, -0.026361638589962429, +-0.026411621180570753, -0.026461603705149581, -0.026511586163574401, -0.026561568555720252, -0.026611550881462630, -0.026661533140675684, -0.026711515333234907, -0.026761497459015342, +-0.026811479517892475, -0.026861461509740465, -0.026911443434434804, -0.026961425291850975, -0.027011407081863142, -0.027061388804346789, -0.027111370459176967, -0.027161352046229159, +-0.027211333565377530, -0.027261315016497565, -0.027311296399464315, -0.027361277714153264, -0.027411258960438580, -0.027461240138195744, -0.027511221247299811, -0.027561202287626266, +-0.027611183259049273, -0.027661164161444322, -0.027711144994686462, -0.027761125758651181, -0.027811106453212640, -0.027861087078246336, -0.027911067633627315, -0.027961048119231065, +-0.028011028534931755, -0.028061008880604872, -0.028110989156125910, -0.028160969361369033, -0.028210949496209729, -0.028260929560523056, -0.028310909554184499, -0.028360889477068225, +-0.028410869329049730, -0.028460849110004058, -0.028510828819806711, -0.028560808458331845, -0.028610788025454959, -0.028660767521051102, -0.028710746944995771, -0.028760726297163131, +-0.028810705577428673, -0.028860684785667449, -0.028910663921754960, -0.028960642985565367, -0.029010621976974165, -0.029060600895856853, -0.029110579742087594, -0.029160558515541887, +-0.029210537216094783, -0.029260515843621781, -0.029310494397997044, -0.029360472879096072, -0.029410451286793919, -0.029460429620966080, -0.029510407881486723, -0.029560386068231345, +-0.029610364181075002, -0.029660342219893197, -0.029710320184560088, -0.029760298074951178, -0.029810275890941526, -0.029860253632406627, -0.029910231299220651, -0.029960208891259096, +-0.030010186408397463, -0.030060163850509917, -0.030110141217471964, -0.030160118509158659, -0.030210095725445502, -0.030260072866206657, -0.030310049931317636, -0.030360026920653486, +-0.030410003834089715, -0.030459980671500488, -0.030509957432761310, -0.030559934117747239, -0.030609910726333778, -0.030659887258395097, -0.030709863713806695, -0.030759840092443636, +-0.030809816394181417, -0.030859792618894218, -0.030909768766457534, -0.030959744836746430, -0.031009720829636406, -0.031059696745001638, -0.031109672582717626, -0.031159648342659878, +-0.031209624024702565, -0.031259599628721192, -0.031309575154590819, -0.031359550602186953, -0.031409525971383766, -0.031459501262056766, -0.031509476474081012, -0.031559451607332006, +-0.031609426661683933, -0.031659401637012294, -0.031709376533192148, -0.031759351350099004, -0.031809326087607039, -0.031859300745591762, -0.031909275323928225, -0.031959249822491952, +-0.032009224241157104, -0.032059198579799199, -0.032109172838293738, -0.032159147016514907, -0.032209121114338206, -0.032259095131638701, -0.032309069068291903, -0.032359042924171987, +-0.032409016699154469, -0.032458990393114402, -0.032508964005927309, -0.032558937537467358, -0.032608910987610061, -0.032658884356230489, -0.032708857643204151, -0.032758830848405224, +-0.032808803971709224, -0.032858777012991211, -0.032908749972126700, -0.032958722848989867, -0.033008695643456230, -0.033058668355401298, -0.033108640984699247, -0.033158613531225602, +-0.033208585994855419, -0.033258558375464209, -0.033308530672926169, -0.033358502887116795, -0.033408475017911166, -0.033458447065184797, -0.033508419028811860, -0.033558390908667877, +-0.033608362704627921, -0.033658334416567501, -0.033708306044360800, -0.033758277587883329, -0.033808249047010172, -0.033858220421616833, -0.033908191711577496, -0.033958162916767683, +-0.034008134037062911, -0.034058105072337350, -0.034108076022466537, -0.034158046887325523, -0.034208017666789846, -0.034257988360733675, -0.034307958969032534, -0.034357929491561495, +-0.034407899928196074, -0.034457870278810462, -0.034507840543280176, -0.034557810721480287, -0.034607780813286318, -0.034657750818572454, -0.034707720737214204, -0.034757690569086661, +-0.034807660314065333, -0.034857629972024406, -0.034907599542839410, -0.034957569026385416, -0.035007538422537940, -0.035057507731171174, -0.035107476952160634, -0.035157446085381849, +-0.035207415130709012, -0.035257384088017631, -0.035307352957182792, -0.035357321738080011, -0.035407290430583480, -0.035457259034568728, -0.035507227549910828, -0.035557195976485302, +-0.035607164314166342, -0.035657132562829472, -0.035707100722349769, -0.035757068792602757, -0.035807036773462635, -0.035857004664804917, -0.035906972466504691, -0.035956940178437473, +-0.036006907800477460, -0.036056875332500182, -0.036106842774381157, -0.036156810125994580, -0.036206777387215977, -0.036256744557920433, -0.036306711637983477, -0.036356678627279287, +-0.036406645525683408, -0.036456612333070910, -0.036506579049317332, -0.036556545674296857, -0.036606512207885022, -0.036656478649956900, -0.036706445000388034, -0.036756411259052602, +-0.036806377425826146, -0.036856343500583748, -0.036906309483200936, -0.036956275373551908, -0.037006241171512189, -0.037056206876957307, -0.037106172489761467, -0.037156138009800194, +-0.037206103436948579, -0.037256068771082153, -0.037306034012075107, -0.037355999159802970, -0.037405964214140844, -0.037455929174964243, -0.037505894042147381, -0.037555858815565786, +-0.037605823495094538, -0.037655788080609182, -0.037705752571983907, -0.037755716969094251, -0.037805681271815307, -0.037855645480022598, -0.037905609593590336, -0.037955573612394045, +-0.038005537536308823, -0.038055501365210201, -0.038105465098972384, -0.038155428737470895, -0.038205392280581285, -0.038255355728177752, -0.038305319080135826, -0.038355282336330607, +-0.038405245496637624, -0.038455208560931084, -0.038505171529086522, -0.038555134400979026, -0.038605097176484145, -0.038655059855476070, -0.038705022437830354, -0.038754984923422074, +-0.038804947312126782, -0.038854909603818676, -0.038904871798373299, -0.038954833895665737, -0.039004795895571535, -0.039054757797964898, -0.039104719602721369, -0.039154681309716485, +-0.039204642918824452, -0.039254604429920813, -0.039304565842880668, -0.039354527157579547, -0.039404488373891662, -0.039454449491692564, -0.039504410510857332, -0.039554371431261524, +-0.039604332252779345, -0.039654292975286332, -0.039704253598657584, -0.039754214122768652, -0.039804174547493736, -0.039854134872708391, -0.039904095098287698, -0.039954055224107221, +-0.040004015250041158, -0.040053975175965054, -0.040103935001754458, -0.040153894727283583, -0.040203854352427973, -0.040253813877062720, -0.040303773301063384, -0.040353732624304160, +-0.040403691846660615, -0.040453650968007834, -0.040503609988221376, -0.040553568907175444, -0.040603527724745590, -0.040653486440806921, -0.040703445055234974, -0.040753403567903974, +-0.040803361978689466, -0.040853320287466549, -0.040903278494110774, -0.040953236598496368, -0.041003194600498866, -0.041053152499993820, -0.041103110296855448, -0.041153067990959302, +-0.041203025582180482, -0.041252983070394544, -0.041302940455475709, -0.041352897737299520, -0.041402854915741083, -0.041452811990675957, -0.041502768961978360, -0.041552725829523837, +-0.041602682593187494, -0.041652639252844896, -0.041702595808370255, -0.041752552259639121, -0.041802508606526609, -0.041852464848908269, -0.041902420986658327, -0.041952377019652327, +-0.042002332947765383, -0.042052288770873053, -0.042102244488849562, -0.042152200101570454, -0.042202155608911295, -0.042252111010746295, -0.042302066306951019, -0.042352021497400583, +-0.042401976581970535, -0.042451931560535103, -0.042501886432969836, -0.042551841199149856, -0.042601795858950721, -0.042651750412246649, -0.042701704858913204, -0.042751659198825495, +-0.042801613431859079, -0.042851567557888187, -0.042901521576788379, -0.042951475488434761, -0.043001429292702904, -0.043051382989467028, -0.043101336578602698, -0.043151290059985463, +-0.043201243433489564, -0.043251196698990552, -0.043301149856363554, -0.043351102905484121, -0.043401055846226493, -0.043451008678466220, -0.043500961402078424, -0.043550914016938676, +-0.043600866522921194, -0.043650818919901545, -0.043700771207754847, -0.043750723386356667, -0.043800675455581237, -0.043850627415304114, -0.043900579265400426, -0.043950531005745731, +-0.044000482636214269, -0.044050434156681598, -0.044100385567023288, -0.044150336867113567, -0.044200288056828005, -0.044250239136041723, -0.044300190104630280, -0.044350140962467928, +-0.044400091709430219, -0.044450042345392279, -0.044499992870229682, -0.044549943283816659, -0.044599893586028776, -0.044649843776741159, -0.044699793855829374, -0.044749743823167661, +-0.044799693678631590, -0.044849643422096283, -0.044899593053437312, -0.044949542572528915, -0.044999491979246665, -0.045049441273465683, -0.045099390455061540, -0.045149339523908476, +-0.045199288479882069, -0.045249237322857877, -0.045299186052710154, -0.045349134669314464, -0.045399083172545936, -0.045449031562280147, -0.045498979838391330, -0.045548928000755072, +-0.045598876049246485, -0.045648823983741156, -0.045698771804113324, -0.045748719510238560, -0.045798667101991999, -0.045848614579249214, -0.045898561941884450, -0.045948509189773279, +-0.045998456322790836, -0.046048403340812692, -0.046098350243713102, -0.046148297031367629, -0.046198243703651866, -0.046248190260440046, -0.046298136701607748, -0.046348083027030113, +-0.046398029236582712, -0.046447975330139793, -0.046497921307576934, -0.046547867168769276, -0.046597812913592392, -0.046647758541920534, -0.046697704053629274, -0.046747649448593762, +-0.046797594726689568, -0.046847539887790939, -0.046897484931773460, -0.046947429858512274, -0.046997374667882952, -0.047047319359759754, -0.047097263934018259, -0.047147208390534039, +-0.047197152729181360, -0.047247096949835803, -0.047297041052372500, -0.047346985036667039, -0.047396928902593671, -0.047446872650027977, -0.047496816278845104, -0.047546759788920638, +-0.047596703180128826, -0.047646646452345252, -0.047696589605445067, -0.047746532639303854, -0.047796475553795861, -0.047846418348796681, -0.047896361024181454, -0.047946303579825766, +-0.047996246015603879, -0.048046188331391376, -0.048096130527063845, -0.048146072602495545, -0.048196014557562068, -0.048245956392138550, -0.048295898106100583, -0.048345839699322428, +-0.048395781171679676, -0.048445722523047470, -0.048495663753301402, -0.048545604862315725, -0.048595545849966046, -0.048645486716127492, -0.048695427460675671, -0.048745368083484841, +-0.048795308584430583, -0.048845248963388058, -0.048895189220232858, -0.048945129354839231, -0.048995069367082790, -0.049045009256838669, -0.049094949023982475, -0.049144888668388460, +-0.049194828189932226, -0.049244767588489363, -0.049294706863934140, -0.049344646016142149, -0.049394585044988538, -0.049444523950348915, -0.049494462732097538, -0.049544401390110002, +-0.049594339924261460, -0.049644278334427513, -0.049694216620482429, -0.049744154782301805, -0.049794092819760792, -0.049844030732734988, -0.049893968521098668, -0.049943906184727424, +-0.049993843723496419, -0.050043781137281237, -0.050093718425956169, -0.050143655589396804, -0.050193592627478738, -0.050243529540076250, -0.050293466327064940, -0.050343402988319963, +-0.050393339523716926, -0.050443275933130090, -0.050493212216435067, -0.050543148373507013, -0.050593084404221535, -0.050643020308452899, -0.050692956086076713, -0.050742891736968131, +-0.050792827261002774, -0.050842762658054895, -0.050892697928000115, -0.050942633070713589, -0.050992568086070930, -0.051042502973946399, -0.051092437734215616, -0.051142372366754174, +-0.051192306871436367, -0.051242241248137789, -0.051292175496733608, -0.051342109617099431, -0.051392043609109539, -0.051441977472639532, -0.051491911207564592, -0.051541844813760306, +-0.051591778291100975, -0.051641711639462191, -0.051691644858719125, -0.051741577948747397, -0.051791510909421280, -0.051841443740616382, -0.051891376442207877, -0.051941309014071381, +-0.051991241456081159, -0.052041173768112840, -0.052091105950041579, -0.052141038001743002, -0.052190969923091385, -0.052240901713962347, -0.052290833374231495, -0.052340764903773117, +-0.052390696302462826, -0.052440627570175792, -0.052490558706787635, -0.052540489712172643, -0.052590420586206416, -0.052640351328764143, -0.052690281939721438, -0.052740212418952583, +-0.052790142766333197, -0.052840072981738449, -0.052890003065043968, -0.052939933016124034, -0.052989862834854268, -0.053039792521109845, -0.053089722074766380, -0.053139651495698173, +-0.053189580783780832, -0.053239509938889984, -0.053289438960899924, -0.053339367849686257, -0.053389296605124176, -0.053439225227089299, -0.053489153715455907, -0.053539082070099636, +-0.053589010290895661, -0.053638938377719603, -0.053688866330445756, -0.053738794148949741, -0.053788721833106741, -0.053838649382792383, -0.053888576797880956, -0.053938504078248087, +-0.053988431223768958, -0.054038358234319191, -0.054088285109773093, -0.054138211850006272, -0.054188138454894376, -0.054238064924311685, -0.054287991258133828, -0.054337917456236000, +-0.054387843518493816, -0.054437769444781584, -0.054487695234974924, -0.054537620888949027, -0.054587546406579521, -0.054637471787740713, -0.054687397032308217, -0.054737322140157231, +-0.054787247111163381, -0.054837171945200977, -0.054887096642145639, -0.054937021201872556, -0.054986945624257363, -0.055036869909174370, -0.055086794056499196, -0.055136718066107482, +-0.055186641937873530, -0.055236565671672976, -0.055286489267381000, -0.055336412724873253, -0.055386336044024022, -0.055436259224708954, -0.055486182266803241, -0.055536105170182516, +-0.055586027934721081, -0.055635950560294578, -0.055685873046778203, -0.055735795394047584, -0.055785717601977036, -0.055835639670442187, -0.055885561599318248, -0.055935483388480846, +-0.055985405037804289, -0.056035326547164220, -0.056085247916435835, -0.056135169145494775, -0.056185090234215349, -0.056235011182473198, -0.056284931990143956, -0.056334852657101947, +-0.056384773183222804, -0.056434693568381732, -0.056484613812454364, -0.056534533915315023, -0.056584453876839344, -0.056634373696902530, -0.056684293375380224, -0.056734212912146746, +-0.056784132307077732, -0.056834051560048386, -0.056883970670934363, -0.056933889639609964, -0.056983808465950837, -0.057033727149832195, -0.057083645691129677, -0.057133564089717599, +-0.057183482345471610, -0.057233400458267365, -0.057283318427979173, -0.057333236254482681, -0.057383153937653100, -0.057433071477366079, -0.057482988873495934, -0.057532906125918319, +-0.057582823234508439, -0.057632740199141941, -0.057682657019693155, -0.057732573696037723, -0.057782490228050855, -0.057832406615608206, -0.057882322858584100, -0.057932238956854183, +-0.057982154910293668, -0.058032070718778216, -0.058081986382182135, -0.058131901900381096, -0.058181817273250738, -0.058231732500665399, -0.058281647582500727, -0.058331562518631939, +-0.058381477308934684, -0.058431391953283292, -0.058481306451553423, -0.058531220803620290, -0.058581135009359540, -0.058631049068645517, -0.058680962981353869, -0.058730876747359814, +-0.058780790366539007, -0.058830703838765784, -0.058880617163915801, -0.058930530341864275, -0.058980443372486868, -0.059030356255657911, -0.059080268991253057, -0.059130181579147532, +-0.059180094019216999, -0.059230006311335792, -0.059279918455379561, -0.059329830451223982, -0.059379742298743383, -0.059429653997813428, -0.059479565548309334, -0.059529476950106776, +-0.059579388203080078, -0.059629299307104908, -0.059679210262056491, -0.059729121067810496, -0.059779031724241254, -0.059828942231224432, -0.059878852588635248, -0.059928762796349386, +-0.059978672854241168, -0.060028582762186269, -0.060078492520059909, -0.060128402127737769, -0.060178311585094173, -0.060228220892004802, -0.060278130048345320, -0.060328039053990076, +-0.060377947908814726, -0.060427856612694508, -0.060477765165505099, -0.060527673567120827, -0.060577581817417368, -0.060627489916269962, -0.060677397863554271, -0.060727305659144644, +-0.060777213302916751, -0.060827120794745823, -0.060877028134507544, -0.060926935322076242, -0.060976842357327608, -0.061026749240136867, -0.061076655970379694, -0.061126562547930439, +-0.061176468972664780, -0.061226375244458384, -0.061276281363185615, -0.061326187328722137, -0.061376093140943194, -0.061425998799724463, -0.061475904304940286, -0.061525809656466354, +-0.061575714854177899, -0.061625619897950595, -0.061675524787658802, -0.061725429523178194, -0.061775334104384010, -0.061825238531151940, -0.061875142803356327, -0.061925046920872862, +-0.061974950883576775, -0.062024854691343750, -0.062074758344048152, -0.062124661841565655, -0.062174565183771950, -0.062224468370541387, -0.062274371401749649, -0.062324274277271989, +-0.062374176996984082, -0.062424079560760293, -0.062473981968476297, -0.062523884220007361, -0.062573786315229141, -0.062623688254016027, -0.062673590036243676, -0.062723491661787367, +-0.062773393130522756, -0.062823294442324235, -0.062873195597067472, -0.062923096594627720, -0.062972997434880662, -0.063022898117700676, -0.063072798642963432, -0.063122699010544209, +-0.063172599220318676, -0.063222499272161198, -0.063272399165947471, -0.063322298901553192, -0.063372198478852726, -0.063422097897721755, -0.063471997158035545, -0.063521896259669794, +-0.063571795202498851, -0.063621693986398414, -0.063671592611243749, -0.063721491076910539, -0.063771389383273161, -0.063821287530207313, -0.063871185517588247, -0.063921083345291660, +-0.063970981013191916, -0.064020878521164726, -0.064070775869085342, -0.064120673056829447, -0.064170570084271447, -0.064220466951287011, -0.064270363657751850, -0.064320260203540328, +-0.064370156588528168, -0.064420052812590611, -0.064469948875603367, -0.064519844777440813, -0.064569740517978647, -0.064619636097092120, -0.064669531514656958, -0.064719426770547511, +-0.064769321864639504, -0.064819216796808188, -0.064869111566929274, -0.064919006174877142, -0.064968900620527500, -0.065018794903755603, -0.065068689024437160, -0.065118582982446549, +-0.065168476777659481, -0.065218370409951654, -0.065268263879197472, -0.065318157185272632, -0.065368050328052388, -0.065417943307412477, -0.065467836123227249, -0.065517728775372430, +-0.065567621263723300, -0.065617513588155554, -0.065667405748543586, -0.065717297744763106, -0.065767189576689367, -0.065817081244198106, -0.065866972747163702, -0.065916864085461865, +-0.065966755258967863, -0.066016646267557419, -0.066066537111104925, -0.066116427789486079, -0.066166318302576160, -0.066216208650250893, -0.066266098832384657, -0.066315988848853188, +-0.066365878699532171, -0.066415768384296026, -0.066465657903020461, -0.066515547255580745, -0.066565436441852602, -0.066615325461710437, -0.066665214315029947, -0.066715103001686427, +-0.066764991521555586, -0.066814879874511832, -0.066864768060430874, -0.066914656079187992, -0.066964543930658912, -0.067014431614718040, -0.067064319131241085, -0.067114206480103328, +-0.067164093661180507, -0.067213980674347001, -0.067263867519478535, -0.067313754196450859, -0.067363640705138353, -0.067413527045416727, -0.067463413217161303, -0.067513299220247777, +-0.067563185054550570, -0.067613070719945392, -0.067662956216307552, -0.067712841543512745, -0.067762726701435405, -0.067812611689951244, -0.067862496508935555, -0.067912381158264062, +-0.067962265637811173, -0.068012149947452624, -0.068062034087063711, -0.068111918056520143, -0.068161801855696341, -0.068211685484468029, -0.068261568942710946, -0.068311452230299496, +-0.068361335347109420, -0.068411218293016010, -0.068461101067894992, -0.068510983671620784, -0.068560866104069113, -0.068610748365115271, -0.068660630454635010, -0.068710512372502724, +-0.068760394118594165, -0.068810275692784612, -0.068860157094949817, -0.068910038324964187, -0.068959919382703461, -0.069009800268042931, -0.069059680980858351, -0.069109561521024127, +-0.069159441888415996, -0.069209322082909697, -0.069259202104379650, -0.069309081952701607, -0.069358961627750862, -0.069408841129403140, -0.069458720457532888, -0.069508599612015817, +-0.069558478592727263, -0.069608357399542950, -0.069658236032337298, -0.069708114490986059, -0.069757992775364541, -0.069807870885348469, -0.069857748820812290, -0.069907626581631729, +-0.069957504167682108, -0.070007381578839165, -0.070057258814977333, -0.070107135875972351, -0.070157012761699528, -0.070206889472034614, -0.070256766006852031, -0.070306642366027544, +-0.070356518549436878, -0.070406394556954480, -0.070456270388456102, -0.070506146043817039, -0.070556021522913057, -0.070605896825618589, -0.070655771951809360, -0.070705646901360719, +-0.070755521674148392, -0.070805396270046825, -0.070855270688931757, -0.070905144930678524, -0.070955018995162863, -0.071004892882259210, -0.071054766591843330, -0.071104640123790544, +-0.071154513477976578, -0.071204386654275906, -0.071254259652564253, -0.071304132472717399, -0.071354005114609778, -0.071403877578117142, -0.071453749863114799, -0.071503621969478542, +-0.071553493897082779, -0.071603365645803274, -0.071653237215515364, -0.071703108606094801, -0.071752979817416018, -0.071802850849354796, -0.071852721701786443, -0.071902592374586724, +-0.071952462867630088, -0.072002333180792299, -0.072052203313948668, -0.072102073266974973, -0.072151943039745647, -0.072201812632136472, -0.072251682044023213, -0.072301551275280290, +-0.072351420325783497, -0.072401289195408156, -0.072451157884030032, -0.072501026391523574, -0.072550894717764547, -0.072600762862628287, -0.072650630825990561, -0.072700498607725816, +-0.072750366207709818, -0.072800233625817903, -0.072850100861925851, -0.072899967915908109, -0.072949834787640444, -0.072999701476998191, -0.073049567983857130, -0.073099434308091710, +-0.073149300449577695, -0.073199166408190436, -0.073249032183805698, -0.073298897776297930, -0.073348763185542940, -0.073398628411416464, -0.073448493453792979, -0.073498358312548265, +-0.073548222987557657, -0.073598087478696936, -0.073647951785840535, -0.073697815908864275, -0.073747679847643466, -0.073797543602053900, -0.073847407171970039, -0.073897270557267650, +-0.073947133757822095, -0.073996996773509141, -0.074046859604203263, -0.074096722249780228, -0.074146584710115385, -0.074196446985084527, -0.074246309074562103, -0.074296170978423906, +-0.074346032696545730, -0.074395894228802037, -0.074445755575068592, -0.074495616735220774, -0.074545477709134347, -0.074595338496683788, -0.074645199097744877, -0.074695059512192963, +-0.074744919739903853, -0.074794779780751997, -0.074844639634613200, -0.074894499301362799, -0.074944358780876588, -0.074994218073029043, -0.075044077177695956, -0.075093936094752664, +-0.075143794824074975, -0.075193653365537363, -0.075243511719015624, -0.075293369884385536, -0.075343227861521589, -0.075393085650299577, -0.075442943250594835, -0.075492800662283185, +-0.075542657885239090, -0.075592514919338355, -0.075642371764456331, -0.075692228420468813, -0.075742084887250288, -0.075791941164676552, -0.075841797252622967, -0.075891653150965327, +-0.075941508859578108, -0.075991364378337117, -0.076041219707117719, -0.076091074845795706, -0.076140929794245582, -0.076190784552343113, -0.076240639119963691, -0.076290493496983122, +-0.076340347683275869, -0.076390201678717740, -0.076440055483184555, -0.076489909096550790, -0.076539762518692253, -0.076589615749484308, -0.076639468788802775, -0.076689321636522118, +-0.076739174292518156, -0.076789026756666254, -0.076838879028842233, -0.076888731108920583, -0.076938582996777097, -0.076988434692287153, -0.077038286195326558, -0.077088137505769816, +-0.077137988623492720, -0.077187839548370663, -0.077237690280279436, -0.077287540819093559, -0.077337391164688810, -0.077387241316941038, -0.077437091275724720, -0.077486941040915677, +-0.077536790612389273, -0.077586639990021342, -0.077636489173686360, -0.077686338163260163, -0.077736186958618114, -0.077786035559636049, -0.077835883966188443, -0.077885732178151132, +-0.077935580195399493, -0.077985428017809347, -0.078035275645255184, -0.078085123077612825, -0.078134970314757676, -0.078184817356565531, -0.078234664202910906, -0.078284510853669609, +-0.078334357308717489, -0.078384203567929037, -0.078434049631180058, -0.078483895498345974, -0.078533741169302590, -0.078583586643924397, -0.078633431922087257, -0.078683277003666521, +-0.078733121888538038, -0.078782966576576310, -0.078832811067657174, -0.078882655361656007, -0.078932499458448629, -0.078982343357909574, -0.079032187059914660, -0.079082030564339281, +-0.079131873871059258, -0.079181716979949121, -0.079231559890884679, -0.079281402603741780, -0.079331245118394941, -0.079381087434719985, -0.079430929552592316, -0.079480771471887757, +-0.079530613192480823, -0.079580454714247365, -0.079630296037062773, -0.079680137160802883, -0.079729978085342199, -0.079779818810556569, -0.079829659336321399, -0.079879499662512524, +-0.079929339789004461, -0.079979179715673032, -0.080029019442393670, -0.080078858969042196, -0.080128698295493128, -0.080178537421622315, -0.080228376347305161, -0.080278215072417516, +-0.080328053596833884, -0.080377891920430114, -0.080427730043082069, -0.080477567964664251, -0.080527405685052511, -0.080577243204122254, -0.080627080521749328, -0.080676917637808265, +-0.080726754552174915, -0.080776591264724668, -0.080826427775333387, -0.080876264083875590, -0.080926100190227140, -0.080975936094263443, -0.081025771795860346, -0.081075607294892368, +-0.081125442591235386, -0.081175277684764791, -0.081225112575356431, -0.081274947262884867, -0.081324781747225919, -0.081374616028255478, -0.081424450105848034, -0.081474283979879478, +-0.081524117650225214, -0.081573951116761093, -0.081623784379361644, -0.081673617437902746, -0.081723450292259803, -0.081773282942308678, -0.081823115387923889, -0.081872947628981327, +-0.081922779665356396, -0.081972611496924946, -0.082022443123561536, -0.082072274545142015, -0.082122105761541803, -0.082171936772636775, -0.082221767578301463, -0.082271598178411731, +-0.082321428572843441, -0.082371258761471139, -0.082421088744170687, -0.082470918520817518, -0.082520748091287496, -0.082570577455455166, -0.082620406613196390, -0.082670235564386588, +-0.082720064308901650, -0.082769892846616108, -0.082819721177405825, -0.082869549301146248, -0.082919377217713239, -0.082969204926981344, -0.083019032428826439, -0.083068859723123945, +-0.083118686809749751, -0.083168513688578388, -0.083218340359485748, -0.083268166822347264, -0.083317993077038799, -0.083367819123434911, -0.083417644961411463, -0.083467470590844361, +-0.083517296011608136, -0.083567121223578664, -0.083616946226631392, -0.083666771020642211, -0.083716595605485639, -0.083766419981037593, -0.083816244147173494, -0.083866068103769217, +-0.083915891850699337, -0.083965715387839729, -0.084015538715065827, -0.084065361832253521, -0.084115184739277371, -0.084165007436013253, -0.084214829922336629, -0.084264652198123360, +-0.084314474263248021, -0.084364296117586501, -0.084414117761014679, -0.084463939193407125, -0.084513760414639719, -0.084563581424587905, -0.084613402223127590, -0.084663222810133332, +-0.084713043185481007, -0.084762863349046078, -0.084812683300704433, -0.084862503040330634, -0.084912322567800583, -0.084962141882989714, -0.085011960985773946, -0.085061779876027824, +-0.085111598553627252, -0.085161417018447691, -0.085211235270365032, -0.085261053309253834, -0.085310871134990002, -0.085360688747449440, -0.085410506146506721, -0.085460323332037721, +-0.085510140303917931, -0.085559957062023212, -0.085609773606228165, -0.085659589936408695, -0.085709406052440235, -0.085759221954198717, -0.085809037641558686, -0.085858853114396075, +-0.085908668372586330, -0.085958483416005343, -0.086008298244527714, -0.086058112858029348, -0.086107927256385691, -0.086157741439472649, -0.086207555407164821, -0.086257369159338113, +-0.086307182695868415, -0.086356996016630314, -0.086406809121499728, -0.086456622010352119, -0.086506434683063405, -0.086556247139508144, -0.086606059379562284, -0.086655871403101256, +-0.086705683210001008, -0.086755494800136099, -0.086805306173382460, -0.086855117329615553, -0.086904928268711296, -0.086954738990544289, -0.087004549494990410, -0.087054359781925175, +-0.087104169851224475, -0.087153979702762910, -0.087203789336416399, -0.087253598752060416, -0.087303407949570866, -0.087353216928822364, -0.087403025689690814, -0.087452834232052148, +-0.087502642555780955, -0.087552450660753151, -0.087602258546844225, -0.087652066213930097, -0.087701873661885352, -0.087751680890585923, -0.087801487899907299, -0.087851294689725398, +-0.087901101259914807, -0.087950907610351473, -0.088000713740910869, -0.088050519651468928, -0.088100325341900237, -0.088150130812080729, -0.088199936061885906, -0.088249741091191672, +-0.088299545899872656, -0.088349350487804762, -0.088399154854863951, -0.088448959000924796, -0.088498762925863242, -0.088548566629554792, -0.088598370111875366, -0.088648173372699562, +-0.088697976411903343, -0.088747779229362167, -0.088797581824951996, -0.088847384198547416, -0.088897186350024388, -0.088946988279258385, -0.088996789986125355, -0.089046591470499911, +-0.089096392732257987, -0.089146193771275084, -0.089195994587427135, -0.089245795180588755, -0.089295595550635889, -0.089345395697444485, -0.089395195620889142, -0.089444995320845808, +-0.089494794797189997, -0.089544594049797629, -0.089594393078543333, -0.089644191883303068, -0.089693990463952308, -0.089743788820367015, -0.089793586952421817, -0.089843384859992645, +-0.089893182542955016, -0.089942980001184877, -0.089992777234556828, -0.090042574242946857, -0.090092371026230439, -0.090142167584283533, -0.090191963916980769, -0.090241760024198106, +-0.090291555905811033, -0.090341351561695510, -0.090391146991726165, -0.090440942195778959, -0.090490737173729838, -0.090540531925453430, -0.090590326450825695, -0.090640120749722136, +-0.090689914822018727, -0.090739708667590083, -0.090789502286312176, -0.090839295678060511, -0.090889088842711033, -0.090938881780138411, -0.090988674490218580, -0.091038466972827053, +-0.091088259227839807, -0.091138051255131469, -0.091187843054578013, -0.091237634626054942, -0.091287425969438216, -0.091337217084602504, -0.091387007971423725, -0.091436798629777882, +-0.091486589059539603, -0.091536379260584846, -0.091586169232789144, -0.091635958976028470, -0.091685748490177438, -0.091735537775112050, -0.091785326830707809, -0.091835115656840702, +-0.091884904253385344, -0.091934692620217751, -0.091984480757213410, -0.092034268664248312, -0.092084056341197096, -0.092133843787935751, -0.092183631004339794, -0.092233417990285199, +-0.092283204745646608, -0.092332991270300008, -0.092382777564121388, -0.092432563626985362, -0.092482349458767946, -0.092532135059344642, -0.092581920428591452, -0.092631705566383005, +-0.092681490472595301, -0.092731275147103873, -0.092781059589784706, -0.092830843800512444, -0.092880627779163061, -0.092930411525612128, -0.092980195039735591, -0.093029978321408135, +-0.093079761370505720, -0.093129544186903918, -0.093179326770478688, -0.093229109121104700, -0.093278891238657943, -0.093328673123014391, -0.093378454774048728, -0.093428236191636926, +-0.093478017375654518, -0.093527798325977518, -0.093577579042480583, -0.093627359525039699, -0.093677139773530427, -0.093726919787828725, -0.093776699567809305, -0.093826479113348113, +-0.093876258424320735, -0.093926037500603160, -0.093975816342070043, -0.094025594948597385, -0.094075373320060732, -0.094125151456336098, -0.094174929357298140, -0.094224707022822859, +-0.094274484452785814, -0.094324261647062993, -0.094374038605529079, -0.094423815328060073, -0.094473591814531965, -0.094523368064819438, -0.094573144078798480, -0.094622919856344676, +-0.094672695397334014, -0.094722470701641165, -0.094772245769142144, -0.094822020599712509, -0.094871795193228262, -0.094921569549564086, -0.094971343668595984, -0.095021117550199527, +-0.095070891194250703, -0.095120664600624225, -0.095170437769196078, -0.095220210699841851, -0.095269983392437529, -0.095319755846857798, -0.095369528062978687, -0.095419300040676197, +-0.095469071779825013, -0.095518843280301149, -0.095568614541980179, -0.095618385564738118, -0.095668156348449648, -0.095717926892990787, -0.095767697198237120, -0.095817467264064635, +-0.095867237090348043, -0.095917006676963359, -0.095966776023786171, -0.096016545130692466, -0.096066313997556968, -0.096116082624255680, -0.096165851010664188, -0.096215619156658508, +-0.096265387062113336, -0.096315154726904703, -0.096364922150908625, -0.096414689333999798, -0.096464456276054253, -0.096514222976947561, -0.096563989436555753, -0.096613755654753525, +-0.096663521631416921, -0.096713287366421499, -0.096763052859643303, -0.096812818110957044, -0.096862583120238738, -0.096912347887363956, -0.096962112412208770, -0.097011876694647850, +-0.097061640734557239, -0.097111404531812523, -0.097161168086289745, -0.097210931397863590, -0.097260694466410128, -0.097310457291804917, -0.097360219873924000, -0.097409982212642104, +-0.097459744307835244, -0.097509506159379464, -0.097559267767149488, -0.097609029131021333, -0.097658790250870597, -0.097708551126573340, -0.097758311758004271, -0.097808072145039407, +-0.097857832287554375, -0.097907592185425191, -0.097957351838526593, -0.098007111246734613, -0.098056870409924848, -0.098106629327973358, -0.098156388000754852, -0.098206146428145374, +-0.098255904610020539, -0.098305662546256375, -0.098355420236727623, -0.098405177681310310, -0.098454934879880496, -0.098504691832312904, -0.098554448538483580, -0.098604204998268136, +-0.098653961211542615, -0.098703717178181757, -0.098753472898061606, -0.098803228371057775, -0.098852983597046321, -0.098902738575901955, -0.098952493307500750, -0.099002247791718304, +-0.099052002028430675, -0.099101756017512616, -0.099151509758840156, -0.099201263252288924, -0.099251016497734976, -0.099300769495053037, -0.099350522244119194, -0.099400274744809475, +-0.099450026996998619, -0.099499779000562713, -0.099549530755377341, -0.099599282261318603, -0.099649033518261210, -0.099698784526081233, -0.099748535284654286, -0.099798285793856453, +-0.099848036053562461, -0.099897786063648381, -0.099947535823989839, -0.099997285334462893, -0.100047034594942280, -0.100096783605304110, -0.100146532365423950, -0.100196280875177910, +-0.100246029134440740, -0.100295777143088490, -0.100345524900997240, -0.100395272408041730, -0.100445019664098050, -0.100494766669041810, -0.100544513422749100, -0.100594259925094660, +-0.100644006175954580, -0.100693752175204470, -0.100743497922720430, -0.100793243418377210, -0.100842988662050880, -0.100892733653617060, -0.100942478392951870, -0.100992222879930040, +-0.101041967114427640, -0.101091711096320330, -0.101141454825484170, -0.101191198301793950, -0.101240941525125740, -0.101290684495355150, -0.101340427212358310, -0.101390169676009960, +-0.101439911886186170, -0.101489653842763050, -0.101539395545615360, -0.101589136994619190, -0.101638878189650160, -0.101688619130584380, -0.101738359817296620, -0.101788100249662950, +-0.101837840427559030, -0.101887580350860960, -0.101937320019443490, -0.101987059433182720, -0.102036798591954290, -0.102086537495634320, -0.102136276144097570, -0.102186014537220120, +-0.102235752674877630, -0.102285490556946200, -0.102335228183300610, -0.102384965553816950, -0.102434702668371320, -0.102484439526838490, -0.102534176129094550, -0.102583912475015180, +-0.102633648564476460, -0.102683384397353190, -0.102733119973521460, -0.102782855292856910, -0.102832590355235690, -0.102882325160532530, -0.102932059708623570, -0.102981793999384450, +-0.103031528032691310, -0.103081261808418880, -0.103130995326443320, -0.103180728586640250, -0.103230461588885810, -0.103280194333054780, -0.103329926819023250, -0.103379659046667360, +-0.103429391015861880, -0.103479122726482910, -0.103528854178406140, -0.103578585371507690, -0.103628316305662310, -0.103678046980746160, -0.103727777396634880, -0.103777507553204600, +-0.103827237450330110, -0.103876967087887530, -0.103926696465752530, -0.103976425583801230, -0.104026154441908420, -0.104075883039950230, -0.104125611377802340, -0.104175339455340850, +-0.104225067272440570, -0.104274794828977630, -0.104324522124827690, -0.104374249159866900, -0.104423975933970040, -0.104473702447013250, -0.104523428698872630, -0.104573154689423010, +-0.104622880418540500, -0.104672605886100780, -0.104722331091979990, -0.104772056036052940, -0.104821780718195740, -0.104871505138284100, -0.104921229296194130, -0.104970953191800640, +-0.105020676824979770, -0.105070400195607220, -0.105120123303559090, -0.105169846148710220, -0.105219568730936740, -0.105269291050114340, -0.105319013106119140, -0.105368734898825980, +-0.105418456428110980, -0.105468177693850280, -0.105517898695918700, -0.105567619434192360, -0.105617339908546980, -0.105667060118858680, -0.105716780065002310, -0.105766499746853970, +-0.105816219164289390, -0.105865938317184700, -0.105915657205414720, -0.105965375828855610, -0.106015094187383040, -0.106064812280873190, -0.106114530109200870, -0.106164247672242220, +-0.106213964969872950, -0.106263682001969210, -0.106313398768405830, -0.106363115269058950, -0.106412831503804720, -0.106462547472517960, -0.106512263175074850, -0.106561978611351070, +-0.106611693781222790, -0.106661408684564830, -0.106711123321253350, -0.106760837691164070, -0.106810551794173130, -0.106860265630155370, -0.106909979198986940, -0.106959692500543570, +-0.107009405534701410, -0.107059118301335300, -0.107108830800321380, -0.107158543031535390, -0.107208254994853480, -0.107257966690150500, -0.107307678117302600, -0.107357389276185950, +-0.107407100166675370, -0.107456810788647050, -0.107506521141976700, -0.107556231226540500, -0.107605941042213270, -0.107655650588871180, -0.107705359866389970, -0.107755068874645810, +-0.107804777613513540, -0.107854486082869310, -0.107904194282588880, -0.107953902212548390, -0.108003609872622710, -0.108053317262688010, -0.108103024382620010, -0.108152731232294890, +-0.108202437811587520, -0.108252144120374020, -0.108301850158530190, -0.108351555925932170, -0.108401261422454810, -0.108450966647974300, -0.108500671602366820, -0.108550376285507220, +-0.108600080697271670, -0.108649784837535910, -0.108699488706176160, -0.108749192303067220, -0.108798895628085310, -0.108848598681106160, -0.108898301462005950, -0.108948003970659550, +-0.108997706206943140, -0.109047408170732470, -0.109097109861903710, -0.109146811280331740, -0.109196512425892750, -0.109246213298462470, -0.109295913897917100, -0.109345614224131500, +-0.109395314276981860, -0.109445014056344380, -0.109494713562093930, -0.109544412794106690, -0.109594111752258420, -0.109643810436425320, -0.109693508846482240, -0.109743206982305390, +-0.109792904843770520, -0.109842602430753850, -0.109892299743130210, -0.109941996780775830, -0.109991693543566460, -0.110041390031378290, -0.110091086244086200, -0.110140782181566410, +-0.110190477843694650, -0.110240173230347140, -0.110289868341398770, -0.110339563176725720, -0.110389257736204200, -0.110438952019709090, -0.110488646027116610, -0.110538339758302500, +-0.110588033213143010, -0.110637726391512970, -0.110687419293288620, -0.110737111918345720, -0.110786804266560480, -0.110836496337807800, -0.110886188131963880, -0.110935879648904490, +-0.110985570888505830, -0.111035261850642800, -0.111084952535191630, -0.111134642942028070, -0.111184333071028350, -0.111234022922067340, -0.111283712495021280, -0.111333401789765950, +-0.111383090806177550, -0.111432779544130970, -0.111482468003502460, -0.111532156184168220, -0.111581844086003130, -0.111631531708883440, -0.111681219052684920, -0.111730906117283810, +-0.111780592902554970, -0.111830279408374660, -0.111879965634618650, -0.111929651581163160, -0.111979337247883120, -0.112029022634654720, -0.112078707741353770, -0.112128392567856490, +-0.112178077114037780, -0.112227761379773890, -0.112277445364940580, -0.112327129069414110, -0.112376812493069370, -0.112426495635782610, -0.112476178497430040, -0.112525861077886590, +-0.112575543377028490, -0.112625225394731520, -0.112674907130871940, -0.112724588585324640, -0.112774269757965880, -0.112823950648671440, -0.112873631257317560, -0.112923311583779160, +-0.112972991627932490, -0.113022671389653340, -0.113072350868817950, -0.113122030065301240, -0.113171708978979460, -0.113221387609728400, -0.113271065957424310, -0.113320744021942130, +-0.113370421803158080, -0.113420099300948420, -0.113469776515188070, -0.113519453445753270, -0.113569130092519840, -0.113618806455364030, -0.113668482534160760, -0.113718158328786290, +-0.113767833839116410, -0.113817509065027400, -0.113867184006394170, -0.113916858663092990, -0.113966533034999650, -0.114016207121990430, -0.114065880923940240, -0.114115554440725350, +-0.114165227672221580, -0.114214900618305180, -0.114264573278851090, -0.114314245653735560, -0.114363917742834860, -0.114413589546023930, -0.114463261063179010, -0.114512932294175960, +-0.114562603238891000, -0.114612273897199110, -0.114661944268976520, -0.114711614354099070, -0.114761284152443040, -0.114810953663883340, -0.114860622888296270, -0.114910291825557630, +-0.114959960475543720, -0.115009628838129460, -0.115059296913191130, -0.115108964700604540, -0.115158632200246000, -0.115208299411990430, -0.115257966335714100, -0.115307632971292870, +-0.115357299318603000, -0.115406965377519430, -0.115456631147918460, -0.115506296629676330, -0.115555961822668040, -0.115605626726769840, -0.115655291341857580, -0.115704955667807520, +-0.115754619704494630, -0.115804283451795190, -0.115853946909585050, -0.115903610077740480, -0.115953272956136440, -0.116002935544649230, -0.116052597843154660, -0.116102259851529050, +-0.116151921569647360, -0.116201582997385850, -0.116251244134620390, -0.116300904981227260, -0.116350565537081420, -0.116400225802059180, -0.116449885776036810, -0.116499545458889270, +-0.116549204850492890, -0.116598863950723480, -0.116648522759457360, -0.116698181276569490, -0.116747839501936170, -0.116797497435433250, -0.116847155076937020, -0.116896812426322470, +-0.116946469483465880, -0.116996126248243130, -0.117045782720530480, -0.117095438900202960, -0.117145094787136830, -0.117194750381207970, -0.117244405682292660, -0.117294060690265920, +-0.117343715405004000, -0.117393369826383250, -0.117443023954278640, -0.117492677788566450, -0.117542331329122590, -0.117591984575823330, -0.117641637528543660, -0.117691290187159900, +-0.117740942551547920, -0.117790594621584030, -0.117840246397143200, -0.117889897878101770, -0.117939549064335570, -0.117989199955720960, -0.118038850552132900, -0.118088500853447710, +-0.118138150859541280, -0.118187800570289910, -0.118237449985568590, -0.118287099105253660, -0.118336747929220970, -0.118386396457346850, -0.118436044689506300, -0.118485692625575650, +-0.118535340265431190, -0.118584987608947950, -0.118634634656002240, -0.118684281406469940, -0.118733927860227390, -0.118783574017149560, -0.118833219877112820, -0.118882865439993000, +-0.118932510705666470, -0.118982155674008230, -0.119031800344894590, -0.119081444718201470, -0.119131088793805160, -0.119180732571580680, -0.119230376051404390, -0.119280019233152150, +-0.119329662116700310, -0.119379304701923860, -0.119428946988699160, -0.119478588976902530, -0.119528230666408980, -0.119577872057094860, -0.119627513148836060, -0.119677153941508910, +-0.119726794434988450, -0.119776434629150980, -0.119826074523872450, -0.119875714119029160, -0.119925353414496140, -0.119974992410149750, -0.120024631105865860, -0.120074269501520850, +-0.120123907596989720, -0.120173545392148830, -0.120223182886874070, -0.120272820081041790, -0.120322456974527020, -0.120372093567206110, -0.120421729858955410, -0.120471365849649930, +-0.120521001539166050, -0.120570636927379670, -0.120620272014167130, -0.120669906799403470, -0.120719541282965040, -0.120769175464727760, -0.120818809344567980, -0.120868442922360740, +-0.120918076197982390, -0.120967709171308850, -0.121017341842216480, -0.121066974210580310, -0.121116606276276710, -0.121166238039181580, -0.121215869499171320, -0.121265500656120930, +-0.121315131509906790, -0.121364762060405270, -0.121414392307491390, -0.121464022251041540, -0.121513651890931630, -0.121563281227038040, -0.121612910259235790, -0.121662538987401270, +-0.121712167411410420, -0.121761795531139570, -0.121811423346463800, -0.121861050857259470, -0.121910678063402510, -0.121960304964769300, -0.122009931561234890, -0.122059557852675640, +-0.122109183838967500, -0.122158809519986850, -0.122208434895608730, -0.122258059965709510, -0.122307684730165160, -0.122357309188852030, -0.122406933341645190, -0.122456557188421020, +-0.122506180729055890, -0.122555803963424870, -0.122605426891404340, -0.122655049512870230, -0.122704671827698950, -0.122754293835765550, -0.122803915536946420, -0.122853536931117500, +-0.122903158018155170, -0.122952778797934510, -0.123002399270331910, -0.123052019435223300, -0.123101639292485080, -0.123151258841992340, -0.123200878083621430, -0.123250497017248330, +-0.123300115642749440, -0.123349733959999800, -0.123399351968875850, -0.123448969669253950, -0.123498587061009180, -0.123548204144017950, -0.123597820918156200, -0.123647437383300350, +-0.123697053539325460, -0.123746669386107940, -0.123796284923523740, -0.123845900151449280, -0.123895515069759610, -0.123945129678331170, -0.123994743977039900, -0.124044357965762210, +-0.124093971644373190, -0.124143585012749230, -0.124193198070766310, -0.124242810818300840, -0.124292423255227910, -0.124342035381423910, -0.124391647196765260, -0.124441258701127060, +-0.124490869894385710, -0.124540480776417190, -0.124590091347097890, -0.124639701606302940, -0.124689311553908740, -0.124738921189791240, -0.124788530513826890, -0.124838139525890780, +-0.124887748225859310, -0.124937356613608480, -0.124986964689014700, -0.125036572451953040, -0.125086179902299980, -0.125135787039931470, -0.125185393864723910, -0.125235000376552440, +-0.125284606575293470, -0.125334212460822990, -0.125383818033017400, -0.125433423291751830, -0.125483028236902720, -0.125532632868346460, -0.125582237185958180, -0.125631841189614320, +-0.125681444879190830, -0.125731048254564190, -0.125780651315609500, -0.125830254062203160, -0.125879856494221200, -0.125929458611540030, -0.125979060414034780, -0.126028661901581850, +-0.126078263074057310, -0.126127863931337510, -0.126177464473297640, -0.126227064699814100, -0.126276664610762900, -0.126326264206020470, -0.126375863485461950, -0.126425462448963770, +-0.126475061096402390, -0.126524659427652900, -0.126574257442591740, -0.126623855141094980, -0.126673452523038990, -0.126723049588298940, -0.126772646336751250, -0.126822242768271980, +-0.126871838882737510, -0.126921434680023010, -0.126971030160004940, -0.127020625322559280, -0.127070220167562500, -0.127119814694889730, -0.127169408904417410, -0.127219002796021580, +-0.127268596369578680, -0.127318189624963860, -0.127367782562053560, -0.127417375180724240, -0.127466967480851040, -0.127516559462310440, -0.127566151124978430, -0.127615742468731470, +-0.127665333493444720, -0.127714924198994630, -0.127764514585257260, -0.127814104652109020, -0.127863694399425080, -0.127913283827081890, -0.127962872934955510, -0.128012461722922380, +-0.128062050190857670, -0.128111638338637810, -0.128161226166138870, -0.128210813673237310, -0.128260400859808280, -0.128309987725728240, -0.128359574270873660, -0.128409160495119720, +-0.128458746398342870, -0.128508331980419140, -0.128557917241225030, -0.128607502180635690, -0.128657086798527610, -0.128706671094776790, -0.128756255069259750, -0.128805838721851610, +-0.128855422052428890, -0.128905005060867610, -0.128954587747044270, -0.129004170110834010, -0.129053752152113320, -0.129103333870758260, -0.129152915266645300, -0.129202496339649610, +-0.129252077089647670, -0.129301657516515570, -0.129351237620129730, -0.129400817400365380, -0.129450396857098970, -0.129499975990207020, -0.129549554799564680, -0.129599133285048460, +-0.129648711446534420, -0.129698289283899010, -0.129747866797017470, -0.129797443985766230, -0.129847020850021390, -0.129896597389659450, -0.129946173604555570, -0.129995749494586250, +-0.130045325059627570, -0.130094900299556030, -0.130144475214246770, -0.130194049803576320, -0.130243624067420770, -0.130293198005656590, -0.130342771618158960, -0.130392344904804420, +-0.130441917865469460, -0.130491490500029260, -0.130541062808360340, -0.130590634790338750, -0.130640206445841010, -0.130689777774742330, -0.130739348776919200, -0.130788919452247690, +-0.130838489800604340, -0.130888059821864300, -0.130937629515904120, -0.130987198882599850, -0.131036767921828060, -0.131086336633463890, -0.131135905017383870, -0.131185473073464120, +-0.131235040801581100, -0.131284608201610030, -0.131334175273427470, -0.131383742016909890, -0.131433308431932520, -0.131482874518371870, -0.131532440276104060, -0.131582005705005560, +-0.131631570804951610, -0.131681135575818760, -0.131730700017483050, -0.131780264129821020, -0.131829827912707890, -0.131879391366020230, -0.131928954489634040, -0.131978517283425940, +-0.132028079747271100, -0.132077641881046040, -0.132127203684626880, -0.132176765157890170, -0.132226326300711100, -0.132275887112966230, -0.132325447594531600, -0.132375007745283820, +-0.132424567565098100, -0.132474127053850920, -0.132523686211418880, -0.132573245037677200, -0.132622803532502390, -0.132672361695770570, -0.132721919527358290, -0.132771477027140760, +-0.132821034194994550, -0.132870591030795760, -0.132920147534420910, -0.132969703705745290, -0.133019259544645390, -0.133068815050997320, -0.133118370224677680, -0.133167925065561660, +-0.133217479573525840, -0.133267033748446310, -0.133316587590199650, -0.133366141098661070, -0.133415694273707140, -0.133465247115214400, -0.133514799623058120, -0.133564351797114840, +-0.133613903637260670, -0.133663455143372190, -0.133713006315324620, -0.133762557152994540, -0.133812107656258090, -0.133861657824991790, -0.133911207659070910, -0.133960757158372000, +-0.134010306322771190, -0.134059855152145080, -0.134109403646368890, -0.134158951805319170, -0.134208499628872100, -0.134258047116904200, -0.134307594269290760, -0.134357141085908320, +-0.134406687566633460, -0.134456233711341440, -0.134505779519908860, -0.134555324992211820, -0.134604870128126890, -0.134654414927529360, -0.134703959390295810, -0.134753503516302330, +-0.134803047305425560, -0.134852590757540690, -0.134902133872524390, -0.134951676650252730, -0.135001219090602310, -0.135050761193448420, -0.135100302958667620, -0.135149844386136090, +-0.135199385475730350, -0.135248926227325730, -0.135298466640798780, -0.135348006716025680, -0.135397546452882990, -0.135447085851245990, -0.135496624910991260, -0.135546163631995450, +-0.135595702014133760, -0.135645240057282850, -0.135694777761318800, -0.135744315126118260, -0.135793852151556480, -0.135843388837510100, -0.135892925183855230, -0.135942461190468490, +-0.135991996857225160, -0.136041532184001830, -0.136091067170674680, -0.136140601817120290, -0.136190136123213960, -0.136239670088832280, -0.136289203713851450, -0.136338736998148020, +-0.136388269941597330, -0.136437802544075950, -0.136487334805460520, -0.136536866725626320, -0.136586398304449940, -0.136635929541807560, -0.136685460437575790, -0.136734990991629950, +-0.136784521203846600, -0.136834051074101990, -0.136883580602272650, -0.136933109788233950, -0.136982638631862470, -0.137032167133034370, -0.137081695291626310, -0.137131223107513580, +-0.137180750580572770, -0.137230277710680110, -0.137279804497712180, -0.137329330941544310, -0.137378857042053100, -0.137428382799115210, -0.137477908212605890, -0.137527433282401830, +-0.137576958008379160, -0.137626482390414560, -0.137676006428383290, -0.137725530122162020, -0.137775053471626910, -0.137824576476654640, -0.137874099137120450, -0.137923621452901020, +-0.137973143423872540, -0.138022665049911650, -0.138072186330893660, -0.138121707266695200, -0.138171227857192460, -0.138220748102262120, -0.138270268001779440, -0.138319787555621100, +-0.138369306763663710, -0.138418825625782640, -0.138468344141854520, -0.138517862311755500, -0.138567380135362290, -0.138616897612550190, -0.138666414743195830, -0.138715931527175460, +-0.138765447964365680, -0.138814964054641830, -0.138864479797880610, -0.138913995193958140, -0.138963510242751160, -0.139013024944134950, -0.139062539297986180, -0.139112053304181050, +-0.139161566962596240, -0.139211080273107080, -0.139260593235590200, -0.139310105849921840, -0.139359618115978660, -0.139409130033636000, -0.139458641602770520, -0.139508152823258870, +-0.139557663694976410, -0.139607174217799780, -0.139656684391605200, -0.139706194216269370, -0.139755703691667590, -0.139805212817676580, -0.139854721594172500, -0.139904230021032080, +-0.139953738098130660, -0.140003245825344870, -0.140052753202550980, -0.140102260229625660, -0.140151766906444210, -0.140201273232883370, -0.140250779208819340, -0.140300284834128820, +-0.140349790108687120, -0.140399295032370950, -0.140448799605056990, -0.140498303826620600, -0.140547807696938450, -0.140597311215886760, -0.140646814383342260, -0.140696317199180240, +-0.140745819663277450, -0.140795321775510130, -0.140844823535754920, -0.140894324943887230, -0.140943825999783720, -0.140993326703320650, -0.141042827054374710, -0.141092327052821240, +-0.141141826698536980, -0.141191325991398110, -0.141240824931281400, -0.141290323518062170, -0.141339821751617160, -0.141389319631823020, -0.141438817158555140, -0.141488314331690210, +-0.141537811151104500, -0.141587307616674710, -0.141636803728276190, -0.141686299485785680, -0.141735794889079390, -0.141785289938034100, -0.141834784632525110, -0.141884278972429170, +-0.141933772957622550, -0.141983266587981910, -0.142032759863382680, -0.142082252783701540, -0.142131745348814790, -0.142181237558599070, -0.142230729412929860, -0.142280220911683820, +-0.142329712054737210, -0.142379202841966780, -0.142428693273247890, -0.142478183348457270, -0.142527673067471630, -0.142577162430166380, -0.142626651436418200, -0.142676140086103410, +-0.142725628379098720, -0.142775116315279480, -0.142824603894522480, -0.142874091116703960, -0.142923577981700660, -0.142973064489387990, -0.143022550639642610, -0.143072036432340900, +-0.143121521867359520, -0.143171006944573910, -0.143220491663860750, -0.143269976025096390, -0.143319460028157510, -0.143368943672919550, -0.143418426959259240, -0.143467909887053300, +-0.143517392456177150, -0.143566874666507500, -0.143616356517920680, -0.143665838010293400, -0.143715319143501080, -0.143764799917420470, -0.143814280331927860, -0.143863760386899990, +-0.143913240082212260, -0.143962719417741470, -0.144012198393363850, -0.144061677008956200, -0.144111155264393890, -0.144160633159553690, -0.144210110694311920, -0.144259587868545310, +-0.144309064682129310, -0.144358541134940620, -0.144408017226856030, -0.144457492957750950, -0.144506968327502150, -0.144556443335985910, -0.144605917983079040, -0.144655392268656900, +-0.144704866192596290, -0.144754339754773500, -0.144803812955065340, -0.144853285793347160, -0.144902758269495810, -0.144952230383387530, -0.145001702134899130, -0.145051173523906040, +-0.145100644550284990, -0.145150115213912360, -0.145199585514664860, -0.145249055452417950, -0.145298525027048430, -0.145347994238433030, -0.145397463086447190, -0.145446931570967690, +-0.145496399691870890, -0.145545867449033500, -0.145595334842331000, -0.145644801871640190, -0.145694268536837370, -0.145743734837799320, -0.145793200774401470, -0.145842666346520630, +-0.145892131554033130, -0.145941596396815730, -0.145991060874743890, -0.146040524987694430, -0.146089988735543630, -0.146139452118168310, -0.146188915135443940, -0.146238377787247240, +-0.146287840073454630, -0.146337301993942850, -0.146386763548587370, -0.146436224737264980, -0.146485685559852470, -0.146535146016225300, -0.146584606106260280, -0.146634065829833740, +-0.146683525186822480, -0.146732984177101950, -0.146782442800548970, -0.146831901057039890, -0.146881358946451490, -0.146930816468659270, -0.146980273623539990, -0.147029730410970030, +-0.147079186830826160, -0.147128642882983910, -0.147178098567320060, -0.147227553883710950, -0.147277008832033400, -0.147326463412162880, -0.147375917623976200, -0.147425371467350190, +-0.147474824942160270, -0.147524278048283330, -0.147573730785595690, -0.147623183153974130, -0.147672635153294210, -0.147722086783432680, -0.147771538044265930, -0.147820988935670780, +-0.147870439457522730, -0.147919889609698570, -0.147969339392074680, -0.148018788804527900, -0.148068237846933680, -0.148117686519168900, -0.148167134821109880, -0.148216582752633470, +-0.148266030313615150, -0.148315477503931790, -0.148364924323460130, -0.148414370772075750, -0.148463816849655430, -0.148513262556075580, -0.148562707891213010, -0.148612152854943220, +-0.148661597447143050, -0.148711041667688920, -0.148760485516457600, -0.148809928993324600, -0.148859372098166800, -0.148908814830860580, -0.148958257191282750, -0.149007699179308840, +-0.149057140794815690, -0.149106582037679680, -0.149156022907777660, -0.149205463404985140, -0.149254903529178970, -0.149304343280235540, -0.149353782658031680, -0.149403221662442910, +-0.149452660293346110, -0.149502098550618110, -0.149551536434134410, -0.149600973943771860, -0.149650411079406880, -0.149699847840916310, -0.149749284228175680, -0.149798720241061830, +-0.149848155879451220, -0.149897591143220630, -0.149947026032245610, -0.149996460546403060, -0.150045894685569340, -0.150095328449621310, -0.150144761838434530, -0.150194194851885840, +-0.150243627489851680, -0.150293059752208890, -0.150342491638832980, -0.150391923149600870, -0.150441354284389400, -0.150490785043074090, -0.150540215425531810, -0.150589645431639000, +-0.150639075061272530, -0.150688504314307910, -0.150737933190622040, -0.150787361690091330, -0.150836789812592660, -0.150886217558001580, -0.150935644926194930, -0.150985071917049210, +-0.151034498530441210, -0.151083924766246550, -0.151133350624342080, -0.151182776104604230, -0.151232201206909860, -0.151281625931134560, -0.151331050277155210, -0.151380474244848660, +-0.151429897834090470, -0.151479321044757560, -0.151528743876726350, -0.151578166329873700, -0.151627588404075200, -0.151677010099207730, -0.151726431415147740, -0.151775852351772130, +-0.151825272908956420, -0.151874693086577530, -0.151924112884511910, -0.151973532302636470, -0.152022951340826720, -0.152072369998959620, -0.152121788276911580, -0.152171206174559540, +-0.152220623691778990, -0.152270040828446920, -0.152319457584440180, -0.152368873959634360, -0.152418289953906360, -0.152467705567132630, -0.152517120799190080, -0.152566535649954260, +-0.152615950119302120, -0.152665364207110130, -0.152714777913255130, -0.152764191237612760, -0.152813604180059930, -0.152863016740473060, -0.152912428918729110, -0.152961840714703650, +-0.153011252128273570, -0.153060663159315350, -0.153110073807705940, -0.153159484073320890, -0.153208893956037150, -0.153258303455731160, -0.153307712572279850, -0.153357121305558810, +-0.153406529655444990, -0.153455937621815250, -0.153505345204545260, -0.153554752403511910, -0.153604159218591660, -0.153653565649661460, -0.153702971696596890, -0.153752377359274910, +-0.153801782637571990, -0.153851187531365040, -0.153900592040529690, -0.153949996164942840, -0.153999399904481030, -0.154048803259021150, -0.154098206228438810, -0.154147608812610970, +-0.154197011011414090, -0.154246412824725120, -0.154295814252419700, -0.154345215294374730, -0.154394615950467160, -0.154444016220572630, -0.154493416104568040, -0.154542815602329940, +-0.154592214713735190, -0.154641613438659510, -0.154691011776979780, -0.154740409728572500, -0.154789807293314650, -0.154839204471081850, -0.154888601261751050, -0.154937997665198720, +-0.154987393681301850, -0.155036789309936060, -0.155086184550978280, -0.155135579404305060, -0.155184973869793300, -0.155234367947318710, -0.155283761636758170, -0.155333154937988660, +-0.155382547850885840, -0.155431940375326650, -0.155481332511187590, -0.155530724258345660, -0.155580115616676480, -0.155629506586057010, -0.155678897166363770, -0.155728287357473710, +-0.155777677159262500, -0.155827066571607110, -0.155876455594384040, -0.155925844227470270, -0.155975232470741470, -0.156024620324074580, -0.156074007787346120, -0.156123394860433110, +-0.156172781543211150, -0.156222167835557260, -0.156271553737347940, -0.156320939248460160, -0.156370324368769600, -0.156419709098153230, -0.156469093436488040, -0.156518477383649660, +-0.156567860939515110, -0.156617244103960880, -0.156666626876863970, -0.156716009258100090, -0.156765391247546180, -0.156814772845078780, -0.156864154050574880, -0.156913534863910160, +-0.156962915284961620, -0.157012295313605780, -0.157061674949719650, -0.157111054193178860, -0.157160433043860490, -0.157209811501640980, -0.157259189566397420, -0.157308567238005430, +-0.157357944516342020, -0.157407321401284220, -0.157456697892707640, -0.157506073990489330, -0.157555449694505830, -0.157604825004634130, -0.157654199920749970, -0.157703574442730280, +-0.157752948570451660, -0.157802322303791100, -0.157851695642624300, -0.157901068586828260, -0.157950441136279570, -0.157999813290855190, -0.158049185050430830, -0.158098556414883550, +-0.158147927384089840, -0.158197297957926780, -0.158246668136270000, -0.158296037918996570, -0.158345407305983480, -0.158394776297106440, -0.158444144892242460, -0.158493513091268110, +-0.158542880894060430, -0.158592248300495090, -0.158641615310449150, -0.158690981923799160, -0.158740348140422150, -0.158789713960193840, -0.158839079382991240, -0.158888444408690930, +-0.158937809037169970, -0.158987173268304030, -0.159036537101970190, -0.159085900538044970, -0.159135263576405450, -0.159184626216927330, -0.159233988459487660, -0.159283350303963430, +-0.159332711750230390, -0.159382072798165600, -0.159431433447645600, -0.159480793698547480, -0.159530153550746900, -0.159579513004120960, -0.159628872058546260, -0.159678230713899780, +-0.159727588970057290, -0.159776946826895830, -0.159826304284292040, -0.159875661342122890, -0.159925018000264150, -0.159974374258592870, -0.160023730116985650, -0.160073085575319550, +-0.160122440633470310, -0.160171795291314950, -0.160221149548730100, -0.160270503405592820, -0.160319856861778850, -0.160369209917165220, -0.160418562571629040, -0.160467914825045970, +-0.160517266677293130, -0.160566618128247130, -0.160615969177785030, -0.160665319825782550, -0.160714670072116790, -0.160764019916664340, -0.160813369359302290, -0.160862718399906370, +-0.160912067038353650, -0.160961415274520760, -0.161010763108284800, -0.161060110539521460, -0.161109457568107850, -0.161158804193920620, -0.161208150416836780, -0.161257496236732160, +-0.161306841653483770, -0.161356186666968740, -0.161405531277062810, -0.161454875483643040, -0.161504219286586060, -0.161553562685768980, -0.161602905681067580, -0.161652248272358880, +-0.161701590459519600, -0.161750932242426760, -0.161800273620956140, -0.161849614594984870, -0.161898955164389540, -0.161948295329047250, -0.161997635088833800, -0.162046974443626260, +-0.162096313393301270, -0.162145651937735950, -0.162194990076806070, -0.162244327810388690, -0.162293665138360940, -0.162343002060598600, -0.162392338576978740, -0.162441674687378050, +-0.162491010391673600, -0.162540345689741180, -0.162589680581457920, -0.162639015066700450, -0.162688349145345860, -0.162737682817269970, -0.162787016082349880, -0.162836348940462230, +-0.162885681391484180, -0.162935013435291460, -0.162984345071761210, -0.163033676300770120, -0.163083007122195260, -0.163132337535912440, -0.163181667541798770, -0.163230997139730940, +-0.163280326329586060, -0.163329655111239920, -0.163378983484569670, -0.163428311449452360, -0.163477639005763840, -0.163526966153381250, -0.163576292892181230, -0.163625619222040890, +-0.163674945142836090, -0.163724270654443920, -0.163773595756741080, -0.163822920449604700, -0.163872244732910570, -0.163921568606535810, -0.163970892070357140, -0.164020215124251690, +-0.164069537768095240, -0.164118860001764980, -0.164168181825137540, -0.164217503238090090, -0.164266824240498460, -0.164316144832239750, -0.164365465013191130, -0.164414784783228410, +-0.164464104142228700, -0.164513423090068780, -0.164562741626625710, -0.164612059751775340, -0.164661377465394830, -0.164710694767360890, -0.164760011657550610, -0.164809328135839900, +-0.164858644202105860, -0.164907959856225220, -0.164957275098075120, -0.165006589927531370, -0.165055904344471150, -0.165105218348771180, -0.165154531940308600, -0.165203845118959250, +-0.165253157884600290, -0.165302470237108870, -0.165351782176360850, -0.165401093702233350, -0.165450404814603130, -0.165499715513347360, -0.165549025798341830, -0.165598335669463750, +-0.165647645126589800, -0.165696954169597200, -0.165746262798361800, -0.165795571012760710, -0.165844878812670710, -0.165894186197968950, -0.165943493168531270, -0.165992799724234860, +-0.166042105864956460, -0.166091411590573250, -0.166140716900961050, -0.166190021795997070, -0.166239326275558460, -0.166288630339521100, -0.166337933987762170, -0.166387237220158410, +-0.166436540036586980, -0.166485842436923770, -0.166535144421045940, -0.166584445988830270, -0.166633747140153910, -0.166683047874892770, -0.166732348192923980, -0.166781648094124320, +-0.166830947578371000, -0.166880246645539850, -0.166929545295508100, -0.166978843528152480, -0.167028141343350200, -0.167077438740977110, -0.167126735720910440, -0.167176032283026910, +-0.167225328427203750, -0.167274624153316840, -0.167323919461243360, -0.167373214350860530, -0.167422508822044210, -0.167471802874671620, -0.167521096508619540, -0.167570389723765150, +-0.167619682519984330, -0.167668974897154320, -0.167718266855151870, -0.167767558393854180, -0.167816849513137190, -0.167866140212878050, -0.167915430492953540, -0.167964720353240920, +-0.168014009793616050, -0.168063298813956180, -0.168112587414138040, -0.168161875594038860, -0.168211163353534590, -0.168260450692502370, -0.168309737610819490, -0.168359024108361820, +-0.168408310185006570, -0.168457595840630580, -0.168506881075111000, -0.168556165888323810, -0.168605450280146200, -0.168654734250454960, -0.168704017799127300, -0.168753300926039180, +-0.168802583631067820, -0.168851865914089990, -0.168901147774982940, -0.168950429213622580, -0.168999710229886140, -0.169048990823650410, -0.169098270994792660, -0.169147550743188800, +-0.169196830068716050, -0.169246108971251670, -0.169295387450671580, -0.169344665506853010, -0.169393943139672790, -0.169443220349008130, -0.169492497134735020, -0.169541773496730640, +-0.169591049434871830, -0.169640324949035830, -0.169689600039098580, -0.169738874704937340, -0.169788148946428910, -0.169837422763450540, -0.169886696155878180, -0.169935969123589080, +-0.169985241666460060, -0.170034513784368370, -0.170083785477189940, -0.170133056744802090, -0.170182327587081540, -0.170231598003905670, -0.170280867995150330, -0.170330137560692820, +-0.170379406700410410, -0.170428675414179050, -0.170477943701875990, -0.170527211563378110, -0.170576478998562600, -0.170625746007305460, -0.170675012589483950, -0.170724278744974920, +-0.170773544473655640, -0.170822809775402040, -0.170872074650091440, -0.170921339097600630, -0.170970603117806930, -0.171019866710586250, -0.171069129875815930, -0.171118392613372780, +-0.171167654923134100, -0.171216916804975830, -0.171266178258775270, -0.171315439284409700, -0.171364699881755090, -0.171413960050688760, -0.171463219791087500, -0.171512479102828630, +-0.171561737985788140, -0.171610996439843290, -0.171660254464870960, -0.171709512060748410, -0.171758769227351670, -0.171808025964557990, -0.171857282272244260, -0.171906538150287750, +-0.171955793598564470, -0.172005048616951710, -0.172054303205326300, -0.172103557363565580, -0.172152811091545540, -0.172202064389143460, -0.172251317256236660, -0.172300569692701130, +-0.172349821698414200, -0.172399073273252680, -0.172448324417093930, -0.172497575129813920, -0.172546825411289990, -0.172596075261399000, -0.172645324680018250, -0.172694573667023730, +-0.172743822222292810, -0.172793070345702320, -0.172842318037129600, -0.172891565296450640, -0.172940812123542760, -0.172990058518282840, -0.173039304480548240, -0.173088550010214920, +-0.173137795107160240, -0.173187039771261510, -0.173236284002394710, -0.173285527800437240, -0.173334771165265940, -0.173384014096758160, -0.173433256594789890, -0.173482498659238480, +-0.173531740289980810, -0.173580981486894240, -0.173630222249854800, -0.173679462578739780, -0.173728702473426120, -0.173777941933791120, -0.173827180959710840, -0.173876419551062620, +-0.173925657707723340, -0.173974895429570340, -0.174024132716479680, -0.174073369568328670, -0.174122605984994270, -0.174171841966353770, -0.174221077512283220, -0.174270312622659990, +-0.174319547297361400, -0.174368781536263530, -0.174418015339243700, -0.174467248706178800, -0.174516481636946250, -0.174565714131422050, -0.174614946189483560, -0.174664177811007710, +-0.174713408995871840, -0.174762639743952040, -0.174811870055125610, -0.174861099929269510, -0.174910329366261110, -0.174959558365976460, -0.175008786928292890, -0.175058015053087380, +-0.175107242740237230, -0.175156469989618560, -0.175205696801108730, -0.175254923174585080, -0.175304149109923670, -0.175353374607001900, -0.175402599665696680, -0.175451824285885430, +-0.175501048467444160, -0.175550272210250270, -0.175599495514180690, -0.175648718379112830, -0.175697940804922740, -0.175747162791487780, -0.175796384338684910, -0.175845605446391520, +-0.175894826114483680, -0.175944046342838780, -0.175993266131333760, -0.176042485479846020, -0.176091704388251640, -0.176140922856427990, -0.176190140884252440, -0.176239358471601130, +-0.176288575618351430, -0.176337792324380270, -0.176387008589565080, -0.176436224413781930, -0.176485439796908200, -0.176534654738820910, -0.176583869239397400, -0.176633083298513770, +-0.176682296916047420, -0.176731510091875350, -0.176780722825874950, -0.176829935117922300, -0.176879146967894810, -0.176928358375669450, -0.176977569341123630, -0.177026779864133450, +-0.177075989944576320, -0.177125199582329220, -0.177174408777269530, -0.177223617529273430, -0.177272825838218240, -0.177322033703981450, -0.177371241126439150, -0.177420448105468730, +-0.177469654640947190, -0.177518860732751940, -0.177568066380759120, -0.177617271584846110, -0.177666476344889940, -0.177715680660768010, -0.177764884532356450, -0.177814087959532690, +-0.177863290942173680, -0.177912493480156890, -0.177961695573358450, -0.178010897221655750, -0.178060098424925820, -0.178109299183046050, -0.178158499495892630, -0.178207699363342940, +-0.178256898785274450, -0.178306097761563280, -0.178355296292086850, -0.178404494376722210, -0.178453692015346750, -0.178502889207836610, -0.178552085954069270, -0.178601282253921690, +-0.178650478107271360, -0.178699673513994410, -0.178748868473968260, -0.178798062987069930, -0.178847257053176890, -0.178896450672165250, -0.178945643843912510, -0.178994836568295650, +-0.179044028845192160, -0.179093220674478140, -0.179142412056031070, -0.179191602989728390, -0.179240793475446280, -0.179289983513062190, -0.179339173102453150, -0.179388362243496610, +-0.179437550936068700, -0.179486739180046930, -0.179535926975308320, -0.179585114321730330, -0.179634301219189110, -0.179683487667562150, -0.179732673666726460, -0.179781859216559510, +-0.179831044316937500, -0.179880228967737870, -0.179929413168837650, -0.179978596920114360, -0.180027780221444140, -0.180076963072704460, -0.180126145473772810, -0.180175327424525360, +-0.180224508924839570, -0.180273689974592530, -0.180322870573661700, -0.180372050721923280, -0.180421230419254700, -0.180470409665533040, -0.180519588460635820, -0.180568766804439170, +-0.180617944696820630, -0.180667122137657200, -0.180716299126826410, -0.180765475664204450, -0.180814651749668790, -0.180863827383096500, -0.180913002564365070, -0.180962177293350710, +-0.181011351569930900, -0.181060525393982710, -0.181109698765383630, -0.181158871684009900, -0.181208044149738980, -0.181257216162448360, -0.181306387722014290, -0.181355558828314250, +-0.181404729481225300, -0.181453899680624970, -0.181503069426389470, -0.181552238718396260, -0.181601407556522490, -0.181650575940645630, -0.181699743870641860, -0.181748911346388760, +-0.181798078367763380, -0.181847244934643240, -0.181896411046904540, -0.181945576704424820, -0.181994741907081180, -0.182043906654751090, -0.182093070947310810, -0.182142234784637870, +-0.182191398166609760, -0.182240561093102720, -0.182289723563994250, -0.182338885579161500, -0.182388047138481970, -0.182437208241831910, -0.182486368889088780, -0.182535529080129770, +-0.182584688814832360, -0.182633848093072790, -0.182683006914728610, -0.182732165279676890, -0.182781323187795190, -0.182830480638959760, -0.182879637633048150, -0.182928794169937430, +-0.182977950249505140, -0.183027105871627570, -0.183076261036182210, -0.183125415743046640, -0.183174569992097110, -0.183223723783211140, -0.183272877116265860, -0.183322029991138840, +-0.183371182407706280, -0.183420334365845790, -0.183469485865434460, -0.183518636906349840, -0.183567787488468190, -0.183616937611667090, -0.183666087275823620, -0.183715236480815390, +-0.183764385226518640, -0.183813533512810910, -0.183862681339569340, -0.183911828706671530, -0.183960975613993690, -0.184010122061413400, -0.184059268048807820, -0.184108413576054510, +-0.184157558643029740, -0.184206703249611050, -0.184255847395676050, -0.184304991081100990, -0.184354134305763470, -0.184403277069540600, -0.184452419372309970, -0.184501561213947870, +-0.184550702594331840, -0.184599843513339080, -0.184648983970847140, -0.184698123966732300, -0.184747263500872140, -0.184796402573143840, -0.184845541183424970, -0.184894679331591790, +-0.184943817017521940, -0.184992954241092520, -0.185042091002181160, -0.185091227300664160, -0.185140363136419070, -0.185189498509323510, -0.185238633419253760, -0.185287767866087440, +-0.185336901849701700, -0.185386035369974140, -0.185435168426781040, -0.185484301020000050, -0.185533433149508260, -0.185582564815183370, -0.185631696016901600, -0.185680826754540620, +-0.185729957027977570, -0.185779086837090050, -0.185828216181754350, -0.185877345061848160, -0.185926473477248580, -0.185975601427833260, -0.186024728913478490, -0.186073855934061920, +-0.186122982489461130, -0.186172108579552440, -0.186221234204213490, -0.186270359363321450, -0.186319484056753970, -0.186368608284387310, -0.186417732046099150, -0.186466855341766660, +-0.186515978171267440, -0.186565100534477860, -0.186614222431275540, -0.186663343861537660, -0.186712464825141840, -0.186761585321964440, -0.186810705351883070, -0.186859824914774930, +-0.186908944010517660, -0.186958062638987620, -0.187007180800062400, -0.187056298493619680, -0.187105415719535760, -0.187154532477688320, -0.187203648767954530, -0.187252764590212060, +-0.187301879944337250, -0.187350994830207730, -0.187400109247700730, -0.187449223196693910, -0.187498336677063560, -0.187547449688687390, -0.187596562231442610, -0.187645674305206840, +-0.187694785909856440, -0.187743897045269090, -0.187793007711321990, -0.187842117907892820, -0.187891227634857910, -0.187940336892094940, -0.187989445679481120, -0.188038553996894090, +-0.188087661844210270, -0.188136769221307320, -0.188185876128062840, -0.188234982564353250, -0.188284088530056210, -0.188333194025048940, -0.188382299049209140, -0.188431403602413140, +-0.188480507684538640, -0.188529611295462860, -0.188578714435063490, -0.188627817103216910, -0.188676919299800770, -0.188726021024692330, -0.188775122277769300, -0.188824223058908000, +-0.188873323367986150, -0.188922423204881010, -0.188971522569470220, -0.189020621461630210, -0.189069719881238630, -0.189118817828173190, -0.189167915302310280, -0.189217012303527580, +-0.189266108831702330, -0.189315204886712270, -0.189364300468433750, -0.189413395576744470, -0.189462490211521730, -0.189511584372643180, -0.189560678059985220, -0.189609771273425570, +-0.189658864012841520, -0.189707956278110710, -0.189757048069109590, -0.189806139385715860, -0.189855230227806790, -0.189904320595260050, -0.189953410487952080, -0.190002499905760600, +-0.190051588848563300, -0.190100677316236590, -0.190149765308658180, -0.190198852825705370, -0.190247939867255830, -0.190297026433186050, -0.190346112523373660, -0.190395198137696040, +-0.190444283276030830, -0.190493367938254470, -0.190542452124244700, -0.190591535833878810, -0.190640619067034500, -0.190689701823588210, -0.190738784103417660, -0.190787865906400150, +-0.190836947232413430, -0.190886028081333900, -0.190935108453039290, -0.190984188347406910, -0.191033267764314510, -0.191082346703638490, -0.191131425165256610, -0.191180503149046580, +-0.191229580654884880, -0.191278657682649230, -0.191327734232216940, -0.191376810303465730, -0.191425885896272070, -0.191474961010513700, -0.191524035646067930, -0.191573109802812500, +-0.191622183480623850, -0.191671256679379760, -0.191720329398957500, -0.191769401639234890, -0.191818473400088310, -0.191867544681395550, -0.191916615483033960, -0.191965685804881240, +-0.192014755646813860, -0.192063825008709610, -0.192112893890446220, -0.192161962291900160, -0.192211030212949220, -0.192260097653470690, -0.192309164613342350, -0.192358231092440660, +-0.192407297090643390, -0.192456362607827890, -0.192505427643871910, -0.192554492198651920, -0.192603556272045700, -0.192652619863930590, -0.192701682974184390, -0.192750745602683520, +-0.192799807749305770, -0.192848869413928540, -0.192897930596429570, -0.192946991296685300, -0.192996051514573580, -0.193045111249972170, -0.193094170502757540, -0.193143229272807470, +-0.193192287559999340, -0.193241345364210950, -0.193290402685318720, -0.193339459523200500, -0.193388515877733650, -0.193437571748795920, -0.193486627136263830, -0.193535682040015170, +-0.193584736459927330, -0.193633790395878050, -0.193682843847743900, -0.193731896815402590, -0.193780949298731580, -0.193830001297608610, -0.193879052811910200, -0.193928103841514180, +-0.193977154386297870, -0.194026204446139130, -0.194075254020914440, -0.194124303110501610, -0.194173351714778450, -0.194222399833621500, -0.194271447466908530, -0.194320494614516950, +-0.194369541276324580, -0.194418587452207910, -0.194467633142044770, -0.194516678345712540, -0.194565723063089060, -0.194614767294050830, -0.194663811038475690, -0.194712854296241020, +-0.194761897067224660, -0.194810939351303090, -0.194859981148354210, -0.194909022458255340, -0.194958063280884390, -0.195007103616117810, -0.195056143463833490, -0.195105182823909230, +-0.195154221696221600, -0.195203260080648420, -0.195252297977067060, -0.195301335385355410, -0.195350372305389990, -0.195399408737048640, -0.195448444680208750, -0.195497480134748190, +-0.195546515100543490, -0.195595549577472520, -0.195644583565412670, -0.195693617064241790, -0.195742650073836450, -0.195791682594074480, -0.195840714624833300, -0.195889746165990750, +-0.195938777217423420, -0.195987807779009120, -0.196036837850625760, -0.196085867432149870, -0.196134896523459310, -0.196183925124431500, -0.196232953234944330, -0.196281980854874330, +-0.196331007984099390, -0.196380034622496900, -0.196429060769944790, -0.196478086426319590, -0.196527111591499160, -0.196576136265360940, -0.196625160447782830, -0.196674184138641380, +-0.196723207337814480, -0.196772230045179570, -0.196821252260614500, -0.196870273983995870, -0.196919295215201550, -0.196968315954109440, -0.197017336200596080, -0.197066355954539420, +-0.197115375215816850, -0.197164393984306270, -0.197213412259884260, -0.197262430042428740, -0.197311447331817130, -0.197360464127927350, -0.197409480430635970, -0.197458496239820900, +-0.197507511555359590, -0.197556526377129920, -0.197605540705008490, -0.197654554538873230, -0.197703567878601580, -0.197752580724071450, -0.197801593075159430, -0.197850604931743420, +-0.197899616293700900, -0.197948627160909770, -0.197997637533246650, -0.198046647410589420, -0.198095656792816020, -0.198144665679803040, -0.198193674071428380, -0.198242681967569560, +-0.198291689368104460, -0.198340696272909710, -0.198389702681863210, -0.198438708594842440, -0.198487714011725350, -0.198536718932388530, -0.198585723356709930, -0.198634727284567020, +-0.198683730715837700, -0.198732733650398650, -0.198781736088127740, -0.198830738028902500, -0.198879739472600870, -0.198928740419099440, -0.198977740868276160, -0.199026740820008960, +-0.199075740274174460, -0.199124739230650630, -0.199173737689314960, -0.199222735650045360, -0.199271733112718480, -0.199320730077212290, -0.199369726543404260, -0.199418722511172350, +-0.199467717980393200, -0.199516712950944780, -0.199565707422704550, -0.199614701395550490, -0.199663694869359230, -0.199712687844008750, -0.199761680319376550, -0.199810672295340580, +-0.199859663771777500, -0.199908654748565260, -0.199957645225581820, -0.200006635202703810, -0.200055624679809220, -0.200104613656775590, -0.200153602133480850, -0.200202590109801680, +-0.200251577585616010, -0.200300564560801420, -0.200349551035235830, -0.200398537008795950, -0.200447522481359720, -0.200496507452804670, -0.200545491923008800, -0.200594475891848760, +-0.200643459359202550, -0.200692442324947680, -0.200741424788962120, -0.200790406751122590, -0.200839388211307040, -0.200888369169392980, -0.200937349625258470, -0.200986329578780150, +-0.201035309029835990, -0.201084287978304020, -0.201133266424060870, -0.201182244366984560, -0.201231221806952630, -0.201280198743843090, -0.201329175177532630, -0.201378151107899220, +-0.201427126534820450, -0.201476101458174270, -0.201525075877837410, -0.201574049793687870, -0.201623023205603210, -0.201671996113461400, -0.201720968517139190, -0.201769940416514550, +-0.201818911811465080, -0.201867882701868730, -0.201916853087602270, -0.201965822968543650, -0.202014792344570930, -0.202063761215560770, -0.202112729581391230, -0.202161697441939850, +-0.202210664797084660, -0.202259631646702380, -0.202308597990671020, -0.202357563828868190, -0.202406529161171860, -0.202455493987458770, -0.202504458307606940, -0.202553422121493990, +-0.202602385428997890, -0.202651348229995420, -0.202700310524364570, -0.202749272311982920, -0.202798233592728560, -0.202847194366478160, -0.202896154633109780, -0.202945114392501460, +-0.202994073644529900, -0.203043032389073150, -0.203091990626008830, -0.203140948355214980, -0.203189905576568320, -0.203238862289946890, -0.203287818495228310, -0.203336774192290600, +-0.203385729381010540, -0.203434684061266140, -0.203483638232935050, -0.203532591895895290, -0.203581545050023600, -0.203630497695198090, -0.203679449831296290, -0.203728401458196320, +-0.203777352575774920, -0.203826303183910120, -0.203875253282480020, -0.203924202871361320, -0.203973151950432140, -0.204022100519570070, -0.204071048578653190, -0.204119996127558240, +-0.204168943166163320, -0.204217889694346010, -0.204266835711984450, -0.204315781218955360, -0.204364726215136790, -0.204413670700406420, -0.204462614674642300, -0.204511558137721230, +-0.204560501089521230, -0.204609443529920000, -0.204658385458795610, -0.204707326876024800, -0.204756267781485670, -0.204805208175055880, -0.204854148056613510, -0.204903087426035330, +-0.204952026283199450, -0.205000964627983890, -0.205049902460265530, -0.205098839779922380, -0.205147776586832170, -0.205196712880872930, -0.205245648661921460, -0.205294583929855890, +-0.205343518684553860, -0.205392452925893450, -0.205441386653751500, -0.205490319868006060, -0.205539252568534840, -0.205588184755215900, -0.205637116427926060, -0.205686047586543460, +-0.205734978230945720, -0.205783908361010990, -0.205832837976616030, -0.205881767077638970, -0.205930695663957970, -0.205979623735449760, -0.206028551291992490, -0.206077478333463850, +-0.206126404859741960, -0.206175330870703610, -0.206224256366226930, -0.206273181346189600, -0.206322105810469780, -0.206371029758944250, -0.206419953191491150, -0.206468876107988140, +-0.206517798508313420, -0.206566720392343720, -0.206615641759957250, -0.206664562611031670, -0.206713482945445120, -0.206762402763074420, -0.206811322063797740, -0.206860240847493160, +-0.206909159114037540, -0.206958076863309030, -0.207006994095185330, -0.207055910809544580, -0.207104827006263620, -0.207153742685220600, -0.207202657846293210, -0.207251572489359630, +-0.207300486614296650, -0.207349400220982470, -0.207398313309294810, -0.207447225879111770, -0.207496137930310240, -0.207545049462768390, -0.207593960476363890, -0.207642870970974950, +-0.207691780946478360, -0.207740690402752340, -0.207789599339674590, -0.207838507757123290, -0.207887415654975260, -0.207936323033108690, -0.207985229891401780, -0.208034136229731330, +-0.208083042047975560, -0.208131947346012170, -0.208180852123719340, -0.208229756380973960, -0.208278660117654200, -0.208327563333637780, -0.208376466028802890, -0.208425368203026370, +-0.208474269856186470, -0.208523170988160870, -0.208572071598827790, -0.208620971688064090, -0.208669871255747960, -0.208718770301757170, -0.208767668825969870, -0.208816566828262970, +-0.208865464308514630, -0.208914361266603090, -0.208963257702405200, -0.209012153615799200, -0.209061049006662780, -0.209109943874874170, -0.209158838220310280, -0.209207732042849290, +-0.209256625342368970, -0.209305518118747540, -0.209354410371861840, -0.209403302101590140, -0.209452193307810200, -0.209501083990400180, -0.209549974149237040, -0.209598863784198950, +-0.209647752895163710, -0.209696641482009500, -0.209745529544613290, -0.209794417082853210, -0.209843304096607560, -0.209892190585753200, -0.209941076550168360, -0.209989961989730830, +-0.210038846904318840, -0.210087731293809280, -0.210136615158080410, -0.210185498497010010, -0.210234381310476280, -0.210283263598356170, -0.210332145360527910, -0.210381026596869270, +-0.210429907307258500, -0.210478787491572530, -0.210527667149689600, -0.210576546281487480, -0.210625424886844440, -0.210674302965637410, -0.210723180517744630, -0.210772057543044320, +-0.210820934041413420, -0.210869810012730200, -0.210918685456872450, -0.210967560373718440, -0.211016434763145080, -0.211065308625030620, -0.211114181959252910, -0.211163054765690170, +-0.211211927044219370, -0.211260798794718730, -0.211309670017066100, -0.211358540711139740, -0.211407410876816610, -0.211456280513974910, -0.211505149622492530, -0.211554018202247730, +-0.211602886253117430, -0.211651753774979910, -0.211700620767713010, -0.211749487231194990, -0.211798353165302820, -0.211847218569914790, -0.211896083444909120, -0.211944947790162820, +-0.211993811605554140, -0.212042674890960930, -0.212091537646261460, -0.212140399871332740, -0.212189261566053000, -0.212238122730300100, -0.212286983363952350, -0.212335843466886690, +-0.212384703038981440, -0.212433562080114410, -0.212482420590163920, -0.212531278569006940, -0.212580136016521790, -0.212628992932586270, -0.212677849317078700, -0.212726705169876100, +-0.212775560490856720, -0.212824415279898870, -0.212873269536879540, -0.212922123261677060, -0.212970976454169240, -0.213019829114234450, -0.213068681241749630, -0.213117532836593100, +-0.213166383898642760, -0.213215234427776870, -0.213264084423872490, -0.213312933886807890, -0.213361782816460930, -0.213410631212709980, -0.213459479075432000, -0.213508326404505320, +-0.213557173199807830, -0.213606019461217850, -0.213654865188612380, -0.213703710381869750, -0.213752555040868260, -0.213801399165484960, -0.213850242755598160, -0.213899085811085770, +-0.213947928331826100, -0.213996770317696150, -0.214045611768574280, -0.214094452684338410, -0.214143293064866820, -0.214192132910036550, -0.214240972219725960, -0.214289810993812950, +-0.214338649232175830, -0.214387486934691670, -0.214436324101238780, -0.214485160731695070, -0.214533996825938930, -0.214582832383847340, -0.214631667405298650, -0.214680501890170820, +-0.214729335838342170, -0.214778169249689730, -0.214827002124091860, -0.214875834461426940, -0.214924666261572000, -0.214973497524405390, -0.215022328249805020, -0.215071158437649290, +-0.215119988087815210, -0.215168817200181160, -0.215217645774625070, -0.215266473811025320, -0.215315301309258940, -0.215364128269204290, -0.215412954690739340, -0.215461780573742430, +-0.215510605918090630, -0.215559430723662320, -0.215608254990335420, -0.215657078717988340, -0.215705901906498100, -0.215754724555743130, -0.215803546665601780, -0.215852368235951140, +-0.215901189266669540, -0.215950009757635010, -0.215998829708725860, -0.216047649119819220, -0.216096467990793460, -0.216145286321526520, -0.216194104111896800, -0.216242921361781390, +-0.216291738071058670, -0.216340554239606600, -0.216389369867303590, -0.216438184954026700, -0.216486999499654360, -0.216535813504064530, -0.216584626967135600, -0.216633439888744670, +-0.216682252268770140, -0.216731064107090390, -0.216779875403582570, -0.216828686158125060, -0.216877496370595830, -0.216926306040873290, -0.216975115168834550, -0.217023923754358030, +-0.217072731797321700, -0.217121539297603970, -0.217170346255081970, -0.217219152669634100, -0.217267958541138340, -0.217316763869473130, -0.217365568654515560, -0.217414372896144070, +-0.217463176594236670, -0.217511979748671730, -0.217560782359326440, -0.217609584426079170, -0.217658385948808370, -0.217707186927391190, -0.217755987361706040, -0.217804787251630910, +-0.217853586597044240, -0.217902385397823200, -0.217951183653846160, -0.217999981364991190, -0.218048778531136690, -0.218097575152159800, -0.218146371227938980, -0.218195166758352240, +-0.218243961743278010, -0.218292756182593440, -0.218341550076177000, -0.218390343423906670, -0.218439136225660910, -0.218487928481316870, -0.218536720190753010, -0.218585511353847380, +-0.218634301970478370, -0.218683092040523190, -0.218731881563860280, -0.218780670540368090, -0.218829458969923780, -0.218878246852405840, -0.218927034187692300, -0.218975820975661570, +-0.219024607216190880, -0.219073392909158670, -0.219122178054442950, -0.219170962651922260, -0.219219746701473710, -0.219268530202975790, -0.219317313156306540, -0.219366095561344450, +-0.219414877417966700, -0.219463658726051750, -0.219512439485477630, -0.219561219696122860, -0.219609999357864630, -0.219658778470581380, -0.219707557034151600, -0.219756335048452520, +-0.219805112513362600, -0.219853889428759890, -0.219902665794522890, -0.219951441610528790, -0.220000216876656110, -0.220048991592782850, -0.220097765758787590, -0.220146539374547450, +-0.220195312439940950, -0.220244084954846210, -0.220292856919141660, -0.220341628332704540, -0.220390399195413370, -0.220439169507146180, -0.220487939267781490, -0.220536708477196530, +-0.220585477135269800, -0.220634245241879830, -0.220683012796903780, -0.220731779800220210, -0.220780546251707200, -0.220829312151243270, -0.220878077498705580, -0.220926842293972750, +-0.220975606536922780, -0.221024370227434240, -0.221073133365384340, -0.221121895950651600, -0.221170657983114140, -0.221219419462650450, -0.221268180389137760, -0.221316940762454640, +-0.221365700582479170, -0.221414459849089890, -0.221463218562164030, -0.221511976721580100, -0.221560734327216240, -0.221609491378950970, -0.221658247876661550, -0.221707003820226510, +-0.221755759209524390, -0.221804514044432440, -0.221853268324829210, -0.221902022050592810, -0.221950775221601780, -0.221999527837733380, -0.222048279898866160, -0.222097031404878240, +-0.222145782355648160, -0.222194532751053220, -0.222243282590971920, -0.222292031875282460, -0.222340780603863310, -0.222389528776591790, -0.222438276393346460, -0.222487023454005420, +-0.222535769958447260, -0.222584515906549240, -0.222633261298189920, -0.222682006133247900, -0.222730750411600430, -0.222779494133126060, -0.222828237297702990, -0.222876979905209740, +-0.222925721955523600, -0.222974463448523170, -0.223023204384086570, -0.223071944762092410, -0.223120684582417930, -0.223169423844941760, -0.223218162549542020, -0.223266900696097310, +-0.223315638284484920, -0.223364375314583450, -0.223413111786271020, -0.223461847699426230, -0.223510583053926400, -0.223559317849650140, -0.223608052086475970, -0.223656785764281270, +-0.223705518882944600, -0.223754251442344120, -0.223802983442358470, -0.223851714882864900, -0.223900445763742070, -0.223949176084868110, -0.223997905846121640, -0.224046635047379980, +-0.224095363688521730, -0.224144091769425070, -0.224192819289968620, -0.224241546250029680, -0.224290272649486870, -0.224338998488218390, -0.224387723766102830, -0.224436448483017550, +-0.224485172638841130, -0.224533896233452240, -0.224582619266728150, -0.224631341738547510, -0.224680063648788540, -0.224728784997329820, -0.224777505784048700, -0.224826226008823850, +-0.224874945671533400, -0.224923664772056050, -0.224972383310269090, -0.225021101286051160, -0.225069818699280500, -0.225118535549835710, -0.225167251837594150, -0.225215967562434450, +-0.225264682724234860, -0.225313397322873980, -0.225362111358229170, -0.225410824830179070, -0.225459537738601950, -0.225508250083376380, -0.225556961864379760, -0.225605673081490740, +-0.225654383734587990, -0.225703093823548810, -0.225751803348251930, -0.225800512308575510, -0.225849220704398250, -0.225897928535597540, -0.225946635802051960, -0.225995342503639810, +-0.226044048640239750, -0.226092754211729110, -0.226141459217986620, -0.226190163658890440, -0.226238867534319320, -0.226287570844150580, -0.226336273588262920, -0.226384975766534570, +-0.226433677378844210, -0.226482378425069240, -0.226531078905088310, -0.226579778818780140, -0.226628478166022050, -0.226677176946692790, -0.226725875160670580, -0.226774572807834110, +-0.226823269888060790, -0.226871966401229280, -0.226920662347217890, -0.226969357725905240, -0.227018052537168780, -0.227066746780887170, -0.227115440456938710, -0.227164133565202070, +-0.227212826105554680, -0.227261518077875200, -0.227310209482041950, -0.227358900317933600, -0.227407590585427560, -0.227456280284402540, -0.227504969414737270, -0.227553657976309140, +-0.227602345968996870, -0.227651033392678700, -0.227699720247233420, -0.227748406532538390, -0.227797092248472330, -0.227845777394913570, -0.227894461971740790, -0.227943145978831420, +-0.227991829416064160, -0.228040512283317370, -0.228089194580469700, -0.228137876307398620, -0.228186557463982860, -0.228235238050100680, -0.228283918065630860, -0.228332597510450820, +-0.228381276384439250, -0.228429954687474540, -0.228478632419435330, -0.228527309580199120, -0.228575986169644640, -0.228624662187650650, -0.228673337634094530, -0.228722012508855100, +-0.228770686811810620, -0.228819360542839860, -0.228868033701820270, -0.228916706288630590, -0.228965378303149140, -0.229014049745254690, -0.229062720614824690, -0.229111390911737880, +-0.229160060635872580, -0.229208729787107570, -0.229257398365320300, -0.229306066370389560, -0.229354733802193620, -0.229403400660611300, -0.229452066945520030, -0.229500732656798600, +-0.229549397794325760, -0.229598062357979000, -0.229646726347637080, -0.229695389763178350, -0.229744052604481580, -0.229792714871424250, -0.229841376563885150, -0.229890037681742570, +-0.229938698224875340, -0.229987358193160930, -0.230036017586478150, -0.230084676404705310, -0.230133334647721200, -0.230181992315403340, -0.230230649407630490, -0.230279305924281000, +-0.230327961865233720, -0.230376617230366070, -0.230425272019556870, -0.230473926232684950, -0.230522579869627760, -0.230571232930264130, -0.230619885414472430, -0.230668537322131440, +-0.230717188653118660, -0.230765839407312930, -0.230814489584592580, -0.230863139184836450, -0.230911788207922050, -0.230960436653728170, -0.231009084522133200, -0.231057731813015950, +-0.231106378526253930, -0.231155024661725970, -0.231203670219310460, -0.231252315198886200, -0.231300959600330700, -0.231349603423522810, -0.231398246668341360, -0.231446889334663840, +-0.231495531422369120, -0.231544172931335560, -0.231592813861442010, -0.231641454212565990, -0.231690093984586310, -0.231738733177381420, -0.231787371790830120, -0.231836009824809950, +-0.231884647279199770, -0.231933284153877980, -0.231981920448723400, -0.232030556163613590, -0.232079191298427380, -0.232127825853043200, -0.232176459827339890, -0.232225093221195000, +-0.232273726034487370, -0.232322358267095440, -0.232370989918898010, -0.232419620989772700, -0.232468251479598350, -0.232516881388253770, -0.232565510715616600, -0.232614139461565620, +-0.232662767625979290, -0.232711395208736490, -0.232760022209714760, -0.232808648628792970, -0.232857274465849560, -0.232905899720763390, -0.232954524393412050, -0.233003148483674400, +-0.233051771991428870, -0.233100394916554350, -0.233149017258928420, -0.233197639018429940, -0.233246260194937350, -0.233294880788329550, -0.233343500798484120, -0.233392120225279940, +-0.233440739068595890, -0.233489357328309550, -0.233537975004299820, -0.233586592096445170, -0.233635208604624440, -0.233683824528715280, -0.233732439868596570, -0.233781054624146750, +-0.233829668795244690, -0.233878282381768080, -0.233926895383595730, -0.233975507800606160, -0.234024119632678250, -0.234072730879689610, -0.234121341541519120, -0.234169951618045300, +-0.234218561109147020, -0.234267170014701900, -0.234315778334588890, -0.234364386068686840, -0.234412993216873390, -0.234461599779027450, -0.234510205755027540, -0.234558811144752520, +-0.234607415948080040, -0.234656020164889040, -0.234704623795057990, -0.234753226838465810, -0.234801829294990110, -0.234850431164509850, -0.234899032446903520, -0.234947633142050030, +-0.234996233249827050, -0.235044832770113450, -0.235093431702787790, -0.235142030047728990, -0.235190627804814640, -0.235239224973923770, -0.235287821554934830, -0.235336417547726750, +-0.235385012952177200, -0.235433607768165130, -0.235482201995569460, -0.235530795634267850, -0.235579388684139250, -0.235627981145062200, -0.235676573016915610, -0.235725164299577160, +-0.235773754992925800, -0.235822345096840050, -0.235870934611198870, -0.235919523535879920, -0.235968111870762160, -0.236016699615724130, -0.236065286770644780, -0.236113873335401760, +-0.236162459309874090, -0.236211044693940250, -0.236259629487479250, -0.236308213690368720, -0.236356797302487680, -0.236405380323715050, -0.236453962753928580, -0.236502544593007180, +-0.236551125840829410, -0.236599706497274270, -0.236648286562219420, -0.236696866035543850, -0.236745444917126120, -0.236794023206845230, -0.236842600904578810, -0.236891178010205930, +-0.236939754523605080, -0.236988330444655280, -0.237036905773234250, -0.237085480509220900, -0.237134054652493900, -0.237182628202932180, -0.237231201160413440, -0.237279773524816720, +-0.237328345296020980, -0.237376916473903960, -0.237425487058344630, -0.237474057049221620, -0.237522626446413860, -0.237571195249799110, -0.237619763459256390, -0.237668331074664230, +-0.237716898095901710, -0.237765464522846500, -0.237814030355377630, -0.237862595593373670, -0.237911160236713660, -0.237959724285275310, -0.238008287738937670, -0.238056850597579310, +-0.238105412861079250, -0.238153974529315220, -0.238202535602166250, -0.238251096079511370, -0.238299655961228350, -0.238348215247196150, -0.238396773937293440, -0.238445332031399200, +-0.238493889529391210, -0.238542446431148520, -0.238591002736549710, -0.238639558445473800, -0.238688113557798560, -0.238736668073403050, -0.238785221992165870, -0.238833775313966070, +-0.238882328038681400, -0.238930880166190910, -0.238979431696373200, -0.239027982629107380, -0.239076532964271140, -0.239125082701743570, -0.239173631841403310, -0.239222180383129400, +-0.239270728326799580, -0.239319275672292970, -0.239367822419488590, -0.239416368568264230, -0.239464914118498930, -0.239513459070071380, -0.239562003422860580, -0.239610547176744350, +-0.239659090331601770, -0.239707632887311450, -0.239756174843752470, -0.239804716200802630, -0.239853256958341000, -0.239901797116246230, -0.239950336674397390, -0.239998875632672280, +-0.240047413990949980, -0.240095951749109170, -0.240144488907028890, -0.240193025464586960, -0.240241561421662450, -0.240290096778134480, -0.240338631533880850, -0.240387165688780630, +-0.240435699242712490, -0.240484232195555540, -0.240532764547187580, -0.240581296297487700, -0.240629827446334600, -0.240678357993607340, -0.240726887939183760, -0.240775417282942970, +-0.240823946024763620, -0.240872474164524840, -0.240921001702104450, -0.240969528637381580, -0.241018054970234850, -0.241066580700543430, -0.241115105828185130, -0.241163630353039060, +-0.241212154274984350, -0.241260677593898830, -0.241309200309661580, -0.241357722422151370, -0.241406243931247270, -0.241454764836827120, -0.241503285138770060, -0.241551804836954820, +-0.241600323931260460, -0.241648842421564870, -0.241697360307747190, -0.241745877589686080, -0.241794394267260740, -0.241842910340348970, -0.241891425808829910, -0.241939940672582290, +-0.241988454931485270, -0.242036968585416650, -0.242085481634255640, -0.242133994077880920, -0.242182505916171630, -0.242231017149005660, -0.242279527776262130, -0.242328037797820220, +-0.242376547213557810, -0.242425056023353990, -0.242473564227087550, -0.242522071824637640, -0.242570578815882090, -0.242619085200700140, -0.242667590978970420, -0.242716096150572190, +-0.242764600715383280, -0.242813104673282880, -0.242861608024149720, -0.242910110767862950, -0.242958612904300490, -0.243007114433341470, -0.243055615354864700, -0.243104115668749290, +-0.243152615374873180, -0.243201114473115540, -0.243249612963355540, -0.243298110845471070, -0.243346608119341310, -0.243395104784845050, -0.243443600841861450, -0.243492096290268410, +-0.243540591129945140, -0.243589085360770400, -0.243637578982623370, -0.243686071995381950, -0.243734564398925350, -0.243783056193132370, -0.243831547377882150, -0.243880037953052630, +-0.243928527918523040, -0.243977017274172120, -0.244025506019879070, -0.244073994155521830, -0.244122481680979640, -0.244170968596131630, -0.244219454900855780, -0.244267940595031320, +-0.244316425678536980, -0.244364910151252030, -0.244413394013054340, -0.244461877263823210, -0.244510359903437340, -0.244558841931776020, -0.244607323348717180, -0.244655804154140010, +-0.244704284347923350, -0.244752763929946380, -0.244801242900087090, -0.244849721258224710, -0.244898199004238010, -0.244946676138006250, -0.244995152659407360, -0.245043628568320570, +-0.245092103864625150, -0.245140578548199070, -0.245189052618921520, -0.245237526076671350, -0.245285998921327770, -0.245334471152768770, -0.245382942770873610, -0.245431413775521080, +-0.245479884166590450, -0.245528353943959690, -0.245576823107508030, -0.245625291657114300, -0.245673759592657800, -0.245722226914016460, -0.245770693621069540, -0.245819159713695920, +-0.245867625191774800, -0.245916090055184190, -0.245964554303803370, -0.246013017937511150, -0.246061480956186820, -0.246109943359708370, -0.246158405147955030, -0.246206866320806160, +-0.246255326878139640, -0.246303786819834840, -0.246352246145770560, -0.246400704855826070, -0.246449162949879420, -0.246497620427809840, -0.246546077289496230, -0.246594533534817860, +-0.246642989163652710, -0.246691444175880100, -0.246739898571378870, -0.246788352350028330, -0.246836805511706480, -0.246885258056292610, -0.246933709983665590, -0.246982161293704730, +-0.247030611986288030, -0.247079062061294820, -0.247127511518604380, -0.247175960358094720, -0.247224408579645170, -0.247272856183134580, -0.247321303168442310, -0.247369749535446330, +-0.247418195284025980, -0.247466640414060140, -0.247515084925428120, -0.247563528818007970, -0.247611972091679010, -0.247660414746320110, -0.247708856781810590, -0.247757298198028520, +-0.247805738994853200, -0.247854179172163510, -0.247902618729838820, -0.247951057667757160, -0.247999495985797850, -0.248047933683840230, -0.248096370761762360, -0.248144807219443540, +-0.248193243056762710, -0.248241678273599190, -0.248290112869831050, -0.248338546845337650, -0.248386980199997860, -0.248435412933691060, -0.248483845046295310, -0.248532276537689920, +-0.248580707407753840, -0.248629137656366430, -0.248677567283405760, -0.248725996288751170, -0.248774424672281590, -0.248822852433876360, -0.248871279573413570, -0.248919706090772600, +-0.248968131985832340, -0.249016557258472190, -0.249064981908570240, -0.249113405936005810, -0.249161829340658310, -0.249210252122405800, -0.249258674281127630, -0.249307095816702820, +-0.249355516729010680, -0.249403937017929320, -0.249452356683338120, -0.249500775725116030, -0.249549194143142420, -0.249597611937295400, -0.249646029107454370, -0.249694445653498240, +-0.249742861575306450, -0.249791276872757070, -0.249839691545729490, -0.249888105594102680, -0.249936519017756040, -0.249984931816567670, -0.250033343990416990, -0.250081755539183330, +-0.250130166462744890, -0.250178576760981040, -0.250226986433770730, -0.250275395480993370, -0.250323803902527120, -0.250372211698251360, -0.250420618868045060, -0.250469025411787620, +-0.250517431329357220, -0.250565836620633250, -0.250614241285494640, -0.250662645323820930, -0.250711048735490110, -0.250759451520381700, -0.250807853678374660, -0.250856255209348400, +-0.250904656113181080, -0.250953056389752130, -0.251001456038940970, -0.251049855060625720, -0.251098253454685840, -0.251146651221000330, -0.251195048359448670, -0.251243444869908910, +-0.251291840752260520, -0.251340236006382560, -0.251388630632154440, -0.251437024629454280, -0.251485417998161600, -0.251533810738155340, -0.251582202849314980, -0.251630594331518740, +-0.251678985184645930, -0.251727375408575700, -0.251775765003187490, -0.251824153968359440, -0.251872542303970940, -0.251920930009901120, -0.251969317086029430, -0.252017703532234020, +-0.252066089348394310, -0.252114474534389790, -0.252162859090098720, -0.252211243015400430, -0.252259626310174120, -0.252308008974299110, -0.252356391007653670, -0.252404772410117220, +-0.252453153181568910, -0.252501533321888070, -0.252549912830953020, -0.252598291708643170, -0.252646669954837590, -0.252695047569415740, -0.252743424552255900, -0.252791800903237440, +-0.252840176622239510, -0.252888551709141540, -0.252936926163821800, -0.252985299986159710, -0.253033673176034810, -0.253082045733325320, -0.253130417657910720, -0.253178788949670050, +-0.253227159608482850, -0.253275529634227280, -0.253323899026782930, -0.253372267786028840, -0.253420635911844490, -0.253469003404108110, -0.253517370262699220, -0.253565736487496920, +-0.253614102078380750, -0.253662467035228820, -0.253710831357920770, -0.253759195046335650, -0.253807558100352940, -0.253855920519850900, -0.253904282304709070, -0.253952643454806950, +-0.254001003970022840, -0.254049363850236190, -0.254097723095326130, -0.254146081705172170, -0.254194439679652610, -0.254242797018646940, -0.254291153722034310, -0.254339509789694160, +-0.254387865221504860, -0.254436220017345840, -0.254484574177096360, -0.254532927700635790, -0.254581280587842520, -0.254629632838596020, -0.254677984452775450, -0.254726335430260350, +-0.254774685770928990, -0.254823035474660900, -0.254871384541335620, -0.254919732970831480, -0.254968080763028020, -0.255016427917804380, -0.255064774435040050, -0.255113120314613360, +-0.255161465556403900, -0.255209810160290760, -0.255258154126153550, -0.255306497453870460, -0.255354840143321220, -0.255403182194384790, -0.255451523606940900, -0.255499864380867750, +-0.255548204516044930, -0.255596544012351600, -0.255644882869667300, -0.255693221087870400, -0.255741558666840450, -0.255789895606456650, -0.255838231906598490, -0.255886567567144290, +-0.255934902587973740, -0.255983236968966300, -0.256031570710000380, -0.256079903810955520, -0.256128236271710890, -0.256176568092146120, -0.256224899272139480, -0.256273229811570640, +-0.256321559710318670, -0.256369888968263240, -0.256418217585282720, -0.256466545561256590, -0.256514872896064120, -0.256563199589584840, -0.256611525641697200, -0.256659851052280730, +-0.256708175821214630, -0.256756499948378510, -0.256804823433650740, -0.256853146276910860, -0.256901468478038570, -0.256949790036912210, -0.256998110953411350, -0.257046431227415220, +-0.257094750858803400, -0.257143069847454330, -0.257191388193247550, -0.257239705896062320, -0.257288022955778240, -0.257336339372273680, -0.257384655145428300, -0.257432970275121240, +-0.257481284761232170, -0.257529598603639500, -0.257577911802222840, -0.257626224356861390, -0.257674536267434750, -0.257722847533821410, -0.257771158155900960, -0.257819468133553000, +-0.257867777466655960, -0.257916086155089490, -0.257964394198732740, -0.258012701597465480, -0.258061008351166080, -0.258109314459714080, -0.258157619922988860, -0.258205924740869950, +-0.258254228913235850, -0.258302532439966200, -0.258350835320940160, -0.258399137556037490, -0.258447439145136570, -0.258495740088116990, -0.258544040384858120, -0.258592340035239570, +-0.258640639039139700, -0.258688937396438280, -0.258737235107014460, -0.258785532170748010, -0.258833828587517360, -0.258882124357202040, -0.258930419479681870, -0.258978713954835240, +-0.259027007782541840, -0.259075300962680890, -0.259123593495132140, -0.259171885379773980, -0.259220176616486110, -0.259268467205147730, -0.259316757145638680, -0.259365046437837310, +-0.259413335081623290, -0.259461623076875980, -0.259509910423474990, -0.259558197121298790, -0.259606483170227160, -0.259654768570139250, -0.259703053320914920, -0.259751337422432450, +-0.259799620874571700, -0.259847903677212280, -0.259896185830232720, -0.259944467333512670, -0.259992748186931470, -0.260041028390368800, -0.260089307943703110, -0.260137586846814210, +-0.260185865099581300, -0.260234142701884160, -0.260282419653601270, -0.260330695954612280, -0.260378971604796560, -0.260427246604033880, -0.260475520952202610, -0.260523794649182570, +-0.260572067694853030, -0.260620340089093790, -0.260668611831783190, -0.260716882922801150, -0.260765153362027270, -0.260813423149340080, -0.260861692284619360, -0.260909960767744360, +-0.260958228598594970, -0.261006495777049490, -0.261054762302987850, -0.261103028176289220, -0.261151293396833520, -0.261199557964499120, -0.261247821879165840, -0.261296085140713010, +-0.261344347749020380, -0.261392609703966490, -0.261440871005431060, -0.261489131653293410, -0.261537391647433390, -0.261585650987729460, -0.261633909674061420, -0.261682167706309030, +-0.261730425084350790, -0.261778681808066460, -0.261826937877335460, -0.261875193292037510, -0.261923448052051140, -0.261971702157256180, -0.262019955607532000, -0.262068208402758300, +-0.262116460542813680, -0.262164712027577910, -0.262212962856930350, -0.262261213030750780, -0.262309462548917790, -0.262357711411311150, -0.262405959617810210, -0.262454207168294820, +-0.262502454062643440, -0.262550700300735960, -0.262598945882451750, -0.262647190807670570, -0.262695435076271020, -0.262743678688132860, -0.262791921643135920, -0.262840163941158720, +-0.262888405582081150, -0.262936646565782580, -0.262984886892142780, -0.263033126561040390, -0.263081365572355120, -0.263129603925966520, -0.263177841621754280, -0.263226078659597020, +-0.263274315039374540, -0.263322550760966280, -0.263370785824252110, -0.263419020229110510, -0.263467253975421370, -0.263515487063064100, -0.263563719491918540, -0.263611951261863210, +-0.263660182372778050, -0.263708412824542830, -0.263756642617036190, -0.263804871750137950, -0.263853100223727490, -0.263901328037684730, -0.263949555191888230, -0.263997781686217790, +-0.264046007520552960, -0.264094232694773500, -0.264142457208758060, -0.264190681062386470, -0.264238904255538140, -0.264287126788093020, -0.264335348659929640, -0.264383569870927870, +-0.264431790420967210, -0.264480010309927520, -0.264528229537687340, -0.264576448104126560, -0.264624666009125150, -0.264672883252561610, -0.264721099834315850, -0.264769315754267380, +-0.264817531012295990, -0.264865745608280410, -0.264913959542100400, -0.264962172813635540, -0.265010385422765670, -0.265058597369369430, -0.265106808653326640, -0.265155019274516850, +-0.265203229232819970, -0.265251438528114560, -0.265299647160280590, -0.265347855129197450, -0.265396062434745120, -0.265444269076802240, -0.265492475055248640, -0.265540680369963870, +-0.265588885020827840, -0.265637089007719150, -0.265685292330517740, -0.265733494989103540, -0.265781696983355130, -0.265829898313152510, -0.265878098978375170, -0.265926298978902960, +-0.265974498314614620, -0.266022696985390050, -0.266070894991108700, -0.266119092331650540, -0.266167289006894240, -0.266215485016719710, -0.266263680361006450, -0.266311875039634440, +-0.266360069052482270, -0.266408262399430000, -0.266456455080357040, -0.266504647095143320, -0.266552838443667620, -0.266601029125809800, -0.266649219141449840, -0.266697408490466410, +-0.266745597172739430, -0.266793785188148500, -0.266841972536573550, -0.266890159217893160, -0.266938345231987450, -0.266986530578735840, -0.267034715258018310, -0.267082899269713630, +-0.267131082613701660, -0.267179265289861970, -0.267227447298074570, -0.267275628638218130, -0.267323809310172580, -0.267371989313817560, -0.267420168649032950, -0.267468347315697520, +-0.267516525313691190, -0.267564702642894000, -0.267612879303184610, -0.267661055294443060, -0.267709230616548830, -0.267757405269381970, -0.267805579252821170, -0.267853752566746370, +-0.267901925211037280, -0.267950097185573720, -0.267998268490234560, -0.268046439124899670, -0.268094609089448710, -0.268142778383761660, -0.268190947007717230, -0.268239114961195460, +-0.268287282244075890, -0.268335448856238500, -0.268383614797562060, -0.268431780067926620, -0.268479944667212140, -0.268528108595297410, -0.268576271852062400, -0.268624434437386650, +-0.268672596351150320, -0.268720757593232000, -0.268768918163511840, -0.268817078061869390, -0.268865237288184620, -0.268913395842336370, -0.268961553724204610, -0.269009710933668990, +-0.269057867470609500, -0.269106023334904910, -0.269154178526435250, -0.269202333045080180, -0.269250486890719680, -0.269298640063232560, -0.269346792562498830, -0.269394944388398060, +-0.269443095540810420, -0.269491246019614610, -0.269539395824690660, -0.269587544955918690, -0.269635693413177390, -0.269683841196346860, -0.269731988305306760, -0.269780134739937120, +-0.269828280500116650, -0.269876425585725550, -0.269924569996643330, -0.269972713732750170, -0.270020856793924740, -0.270068999180047230, -0.270117140890997140, -0.270165281926654680, +-0.270213422286898600, -0.270261561971608940, -0.270309700980665370, -0.270357839313948020, -0.270405976971335620, -0.270454113952708240, -0.270502250257946050, -0.270550385886927760, +-0.270598520839533560, -0.270646655115643010, -0.270694788715136300, -0.270742921637892150, -0.270791053883790710, -0.270839185452711630, -0.270887316344535000, -0.270935446559139700, +-0.270983576096405720, -0.271031704956212870, -0.271079833138441140, -0.271127960642969400, -0.271176087469677750, -0.271224213618445900, -0.271272339089153940, -0.271320463881680740, +-0.271368587995906350, -0.271416711431710920, -0.271464834188973270, -0.271512956267573550, -0.271561077667391400, -0.271609198388307050, -0.271657318430199250, -0.271705437792948150, +-0.271753556476433400, -0.271801674480535270, -0.271849791805132470, -0.271897908450105250, -0.271946024415333220, -0.271994139700696580, -0.272042254306074090, -0.272090368231346020, +-0.272138481476392080, -0.272186594041092300, -0.272234705925325620, -0.272282817128972180, -0.272330927651911690, -0.272379037494024310, -0.272427146655188910, -0.272475255135285640, +-0.272523362934194660, -0.272571470051794830, -0.272619576487966360, -0.272667682242588970, -0.272715787315542750, -0.272763891706706620, -0.272811995415960800, -0.272860098443184980, +-0.272908200788259340, -0.272956302451062780, -0.273004403431475470, -0.273052503729377120, -0.273100603344647970, -0.273148702277166870, -0.273196800526814050, -0.273244898093469190, +-0.273292994977012480, -0.273341091177322910, -0.273389186694280580, -0.273437281527765750, -0.273485375677657240, -0.273533469143835360, -0.273581561926179770, -0.273629654024570680, +-0.273677745438887070, -0.273725836169009030, -0.273773926214816440, -0.273822015576189460, -0.273870104253007010, -0.273918192245149350, -0.273966279552496140, -0.274014366174927690, +-0.274062452112322890, -0.274110537364561980, -0.274158621931524680, -0.274206705813091310, -0.274254789009140690, -0.274302871519553130, -0.274350953344208840, -0.274399034482986690, +-0.274447114935766960, -0.274495194702429500, -0.274543273782854420, -0.274591352176920770, -0.274639429884508680, -0.274687506905498090, -0.274735583239769100, -0.274783658887200740, +-0.274831733847673290, -0.274879808121066440, -0.274927881707260510, -0.274975954606134440, -0.275024026817568550, -0.275072098341442530, -0.275120169177636710, -0.275168239326030020, +-0.275216308786502720, -0.275264377558935120, -0.275312445643206120, -0.275360513039196010, -0.275408579746784620, -0.275456645765852210, -0.275504711096277780, -0.275552775737941570, +-0.275600839690723350, -0.275648902954503560, -0.275696965529161010, -0.275745027414576070, -0.275793088610628570, -0.275841149117198760, -0.275889208934165690, -0.275937268061409560, +-0.275985326498810250, -0.276033384246248070, -0.276081441303602020, -0.276129497670752340, -0.276177553347578930, -0.276225608333962040, -0.276273662629780700, -0.276321716234915250, +-0.276369769149245880, -0.276417821372651700, -0.276465872905012950, -0.276513923746209530, -0.276561973896121750, -0.276610023354628590, -0.276658072121610370, -0.276706120196946960, +-0.276754167580518680, -0.276802214272204530, -0.276850260271884860, -0.276898305579439560, -0.276946350194748890, -0.276994394117691940, -0.277042437348149040, -0.277090479886000000, +-0.277138521731125190, -0.277186562883403650, -0.277234603342715710, -0.277282643108941680, -0.277330682181960660, -0.277378720561652860, -0.277426758247898310, -0.277474795240577280, +-0.277522831539568860, -0.277570867144753320, -0.277618902056010640, -0.277666936273221090, -0.277714969796263810, -0.277763002625019070, -0.277811034759366860, -0.277859066199187490, +-0.277907096944360050, -0.277955126994764820, -0.278003156350281780, -0.278051185010791290, -0.278099212976172410, -0.278147240246305490, -0.278195266821070930, -0.278243292700347700, +-0.278291317884016290, -0.278339342371956620, -0.278387366164048970, -0.278435389260172470, -0.278483411660207510, -0.278531433364034020, -0.278579454371532420, -0.278627474682581700, +-0.278675494297062290, -0.278723513214854170, -0.278771531435837720, -0.278819548959891970, -0.278867565786897360, -0.278915581916733820, -0.278963597349281780, -0.279011612084420320, +-0.279059626122029840, -0.279107639461990240, -0.279155652104182030, -0.279203664048484230, -0.279251675294777290, -0.279299685842941570, -0.279347695692856220, -0.279395704844401630, +-0.279443713297457760, -0.279491721051905060, -0.279539728107622620, -0.279587734464490810, -0.279635740122389730, -0.279683745081199700, -0.279731749340799920, -0.279779752901070710, +-0.279827755761892170, -0.279875757923144620, -0.279923759384707260, -0.279971760146460520, -0.280019760208284400, -0.280067759570059250, -0.280115758231664290, -0.280163756192979950, +-0.280211753453886660, -0.280259750014263510, -0.280307745873991040, -0.280355741032949190, -0.280403735491018380, -0.280451729248077870, -0.280499722304007990, -0.280547714658688830, +-0.280595706312000760, -0.280643697263823040, -0.280691687514036060, -0.280739677062519900, -0.280787665909154940, -0.280835654053820380, -0.280883641496396660, -0.280931628236763880, +-0.280979614274802450, -0.281027599610391590, -0.281075584243411670, -0.281123568173743290, -0.281171551401265480, -0.281219533925858860, -0.281267515747403330, -0.281315496865779500, +-0.281363477280866470, -0.281411456992544770, -0.281459436000694450, -0.281507414305195940, -0.281555391905928430, -0.281603368802772480, -0.281651344995608120, -0.281699320484315780, +-0.281747295268774730, -0.281795269348865450, -0.281843242724468030, -0.281891215395462860, -0.281939187361729290, -0.281987158623147720, -0.282035129179598660, -0.282083099030961400, +-0.282131068177116360, -0.282179036617943630, -0.282227004353323820, -0.282274971383136010, -0.282322937707260750, -0.282370903325578180, -0.282418868237968750, -0.282466832444311760, +-0.282514795944487700, -0.282562758738376610, -0.282610720825859030, -0.282658682206814280, -0.282706642881122790, -0.282754602848664720, -0.282802562109320530, -0.282850520662969510, +-0.282898478509492230, -0.282946435648768760, -0.282994392080679560, -0.283042347805104010, -0.283090302821922550, -0.283138257131015810, -0.283186210732262970, -0.283234163625544600, +-0.283282115810740810, -0.283330067287732190, -0.283378018056397950, -0.283425968116618690, -0.283473917468274490, -0.283521866111245970, -0.283569814045412320, -0.283617761270654080, +-0.283665707786851520, -0.283713653593885060, -0.283761598691634090, -0.283809543079979080, -0.283857486758800240, -0.283905429727978110, -0.283953371987391960, -0.284001313536922370, +-0.284049254376449960, -0.284097194505853970, -0.284145133925015000, -0.284193072633813220, -0.284241010632129140, -0.284288947919842110, -0.284336884496832750, -0.284384820362981130, +-0.284432755518167930, -0.284480689962272380, -0.284528623695175120, -0.284576556716756300, -0.284624489026896520, -0.284672420625475100, -0.284720351512372570, -0.284768281687469200, +-0.284816211150645590, -0.284864139901781000, -0.284912067940756020, -0.284959995267451360, -0.285007921881746230, -0.285055847783521330, -0.285103772972656820, -0.285151697449033290, +-0.285199621212530060, -0.285247544263027790, -0.285295466600406720, -0.285343388224547360, -0.285391309135329060, -0.285439229332632550, -0.285487148816337970, -0.285535067586325910, +-0.285582985642475750, -0.285630902984668140, -0.285678819612783300, -0.285726735526701800, -0.285774650726303090, -0.285822565211467710, -0.285870478982075900, -0.285918392038008340, +-0.285966304379144390, -0.286014216005364640, -0.286062126916549810, -0.286110037112579210, -0.286157946593333550, -0.286205855358693030, -0.286253763408538250, -0.286301670742748650, +-0.286349577361204920, -0.286397483263787170, -0.286445388450376200, -0.286493292920851290, -0.286541196675093200, -0.286589099712982080, -0.286637002034398620, -0.286684903639222280, +-0.286732804527333630, -0.286780704698613000, -0.286828604152941040, -0.286876502890197120, -0.286924400910261950, -0.286972298213016230, -0.287020194798339350, -0.287068090666111940, +-0.287115985816214280, -0.287163880248527130, -0.287211773962929850, -0.287259666959303110, -0.287307559237527210, -0.287355450797482870, -0.287403341639049460, -0.287451231762107680, +-0.287499121166537810, -0.287547009852220590, -0.287594897819035410, -0.287642785066862970, -0.287690671595583590, -0.287738557405077980, -0.287786442495225500, -0.287834326865906930, +-0.287882210517002970, -0.287930093448393100, -0.287977975659957920, -0.288025857151577860, -0.288073737923133570, -0.288121617974504530, -0.288169497305571400, -0.288217375916214550, +-0.288265253806314680, -0.288313130975751230, -0.288361007424404960, -0.288408883152156240, -0.288456758158885660, -0.288504632444472770, -0.288552506008798340, -0.288600378851742610, +-0.288648250973186360, -0.288696122373009070, -0.288743993051091440, -0.288791863007314300, -0.288839732241557070, -0.288887600753700460, -0.288935468543624900, -0.288983335611211090, +-0.289031201956338520, -0.289079067578887900, -0.289126932478739660, -0.289174796655774500, -0.289222660109871910, -0.289270522840912700, -0.289318384848777140, -0.289366246133346050, +-0.289414106694498960, -0.289461966532116590, -0.289509825646079240, -0.289557684036267860, -0.289605541702561750, -0.289653398644841850, -0.289701254862988420, -0.289749110356882280, +-0.289796965126402960, -0.289844819171431180, -0.289892672491847800, -0.289940525087532370, -0.289988376958365550, -0.290036228104227860, -0.290084078524999960, -0.290131928220561440, +-0.290179777190793130, -0.290227625435575400, -0.290275472954789000, -0.290323319748313490, -0.290371165816029670, -0.290419011157817930, -0.290466855773559130, -0.290514699663132760, +-0.290562542826419580, -0.290610385263300130, -0.290658226973655060, -0.290706067957364030, -0.290753908214307850, -0.290801747744367340, -0.290849586547421990, -0.290897424623352660, +-0.290945261972039850, -0.290993098593364250, -0.291040934487205470, -0.291088769653444380, -0.291136604091961350, -0.291184437802637250, -0.291232270785351630, -0.291280103039985310, +-0.291327934566418760, -0.291375765364532800, -0.291423595434206980, -0.291471424775322170, -0.291519253387758800, -0.291567081271397740, -0.291614908426118590, -0.291662734851802110, +-0.291710560548329220, -0.291758385515579530, -0.291806209753433850, -0.291854033261772670, -0.291901856040476800, -0.291949678089425900, -0.291997499408500780, -0.292045319997581930, +-0.292093139856550170, -0.292140958985285190, -0.292188777383667770, -0.292236595051578400, -0.292284411988897990, -0.292332228195506140, -0.292380043671283670, -0.292427858416111130, +-0.292475672429869380, -0.292523485712438020, -0.292571298263697930, -0.292619110083529590, -0.292666921171813920, -0.292714731528430470, -0.292762541153260280, -0.292810350046184110, +-0.292858158207081610, -0.292905965635833760, -0.292953772332321010, -0.293001578296424200, -0.293049383528023070, -0.293097188026998470, -0.293144991793230840, -0.293192794826601210, +-0.293240597126989190, -0.293288398694275640, -0.293336199528341110, -0.293383999629066470, -0.293431798996331480, -0.293479597630016910, -0.293527395530003400, -0.293575192696171830, +-0.293622989128401790, -0.293670784826574330, -0.293718579790570370, -0.293766374020269450, -0.293814167515552670, -0.293861960276300400, -0.293909752302393690, -0.293957543593712180, +-0.294005334150136800, -0.294053123971548090, -0.294100913057827040, -0.294148701408853240, -0.294196489024507680, -0.294244275904670890, -0.294292062049223870, -0.294339847458046260, +-0.294387632131018980, -0.294435416068022650, -0.294483199268938230, -0.294530981733645390, -0.294578763462025050, -0.294626544453958250, -0.294674324709324700, -0.294722104228005320, +-0.294769883009880660, -0.294817661054831700, -0.294865438362738210, -0.294913214933481100, -0.294960990766940930, -0.295008765862998730, -0.295056540221534210, -0.295104313842428300, +-0.295152086725561650, -0.295199858870815180, -0.295247630278068660, -0.295295400947203020, -0.295343170878098920, -0.295390940070637320, -0.295438708524697890, -0.295486476240161780, +-0.295534243216909850, -0.295582009454821880, -0.295629774953778900, -0.295677539713661450, -0.295725303734350630, -0.295773067015726090, -0.295820829557668920, -0.295868591360059610, +-0.295916352422779310, -0.295964112745707660, -0.296011872328725780, -0.296059631171714190, -0.296107389274553930, -0.296155146637124780, -0.296202903259307760, -0.296250659140983530, +-0.296298414282033020, -0.296346168682336040, -0.296393922341773700, -0.296441675260226520, -0.296489427437575560, -0.296537178873700620, -0.296584929568482760, -0.296632679521803000, +-0.296680428733541060, -0.296728177203578080, -0.296775924931794670, -0.296823671918071850, -0.296871418162289460, -0.296919163664328520, -0.296966908424069640, -0.297014652441393910, +-0.297062395716181150, -0.297110138248312390, -0.297157880037668300, -0.297205621084129960, -0.297253361387577080, -0.297301100947890810, -0.297348839764951800, -0.297396577838641150, +-0.297444315168838570, -0.297492051755425260, -0.297539787598282200, -0.297587522697289280, -0.297635257052327520, -0.297682990663277640, -0.297730723530020670, -0.297778455652436550, +-0.297826187030406200, -0.297873917663810440, -0.297921647552530310, -0.297969376696445580, -0.298017105095437440, -0.298064832749386550, -0.298112559658174010, -0.298160285821679640, +-0.298208011239784580, -0.298255735912369420, -0.298303459839315390, -0.298351183020502290, -0.298398905455811210, -0.298446627145123320, -0.298494348088318430, -0.298542068285277680, +-0.298589787735881740, -0.298637506440011750, -0.298685224397547580, -0.298732941608370330, -0.298780658072360760, -0.298828373789399910, -0.298876088759367780, -0.298923802982145380, +-0.298971516457613500, -0.299019229185653210, -0.299066941166144460, -0.299114652398968340, -0.299162362884005610, -0.299210072621137410, -0.299257781610243580, -0.299305489851205250, +-0.299353197343903250, -0.299400904088218680, -0.299448610084031450, -0.299496315331222620, -0.299544019829673490, -0.299591723579263890, -0.299639426579874910, -0.299687128831387430, +-0.299734830333682530, -0.299782531086640160, -0.299830231090141400, -0.299877930344067120, -0.299925628848298430, -0.299973326602715200, -0.300021023607198680, -0.300068719861629580, +-0.300116415365889180, -0.300164110119857220, -0.300211804123415080, -0.300259497376443360, -0.300307189878823320, -0.300354881630434940, -0.300402572631159330, -0.300450262880877670, +-0.300497952379469970, -0.300545641126817360, -0.300593329122800680, -0.300641016367301120, -0.300688702860198550, -0.300736388601374250, -0.300784073590708970, -0.300831757828083910, +-0.300879441313379010, -0.300927124046475590, -0.300974806027254290, -0.301022487255596440, -0.301070167731381900, -0.301117847454491990, -0.301165526424807430, -0.301213204642209520, +-0.301260882106578140, -0.301308558817794560, -0.301356234775740030, -0.301403909980294430, -0.301451584431339130, -0.301499258128754830, -0.301546931072422810, -0.301594603262223040, +-0.301642274698036730, -0.301689945379744750, -0.301737615307228370, -0.301785284480367510, -0.301832952899043440, -0.301880620563136970, -0.301928287472529370, -0.301975953627100670, +-0.302023619026732030, -0.302071283671304370, -0.302118947560698900, -0.302166610694795670, -0.302214273073475930, -0.302261934696620880, -0.302309595564110630, -0.302357255675826330, +-0.302404915031648960, -0.302452573631459660, -0.302500231475138550, -0.302547888562566810, -0.302595544893625390, -0.302643200468195480, -0.302690855286157190, -0.302738509347391770, +-0.302786162651780040, -0.302833815199203380, -0.302881466989541710, -0.302929118022676410, -0.302976768298488300, -0.303024417816858680, -0.303072066577667610, -0.303119714580796340, +-0.303167361826125860, -0.303215008313537320, -0.303262654042910860, -0.303310299014127760, -0.303357943227069380, -0.303405586681615660, -0.303453229377648010, -0.303500871315047270, +-0.303548512493694740, -0.303596152913470580, -0.303643792574256000, -0.303691431475931920, -0.303739069618379710, -0.303786707001479420, -0.303834343625112360, -0.303881979489159400, +-0.303929614593501930, -0.303977248938020030, -0.304024882522594960, -0.304072515347107720, -0.304120147411439610, -0.304167778715470680, -0.304215409259082360, -0.304263039042155900, +-0.304310668064571410, -0.304358296326210250, -0.304405923826953360, -0.304453550566682110, -0.304501176545276530, -0.304548801762618000, -0.304596426218587510, -0.304644049913066370, +-0.304691672845934620, -0.304739295017073750, -0.304786916426364630, -0.304834537073688630, -0.304882156958925900, -0.304929776081957700, -0.304977394442665140, -0.305025012040929470, +-0.305072628876630890, -0.305120244949650680, -0.305167860259870300, -0.305215474807169870, -0.305263088591430750, -0.305310701612533930, -0.305358313870360720, -0.305405925364791330, +-0.305453536095707130, -0.305501146062989120, -0.305548755266518590, -0.305596363706175820, -0.305643971381842130, -0.305691578293398490, -0.305739184440726340, -0.305786789823705770, +-0.305834394442218270, -0.305881998296144760, -0.305929601385366680, -0.305977203709764220, -0.306024805269218710, -0.306072406063611190, -0.306120006092823080, -0.306167605356734480, +-0.306215203855226940, -0.306262801588181810, -0.306310398555479200, -0.306357994757000650, -0.306405590192627090, -0.306453184862239990, -0.306500778765719460, -0.306548371902947040, +-0.306595964273803650, -0.306643555878170770, -0.306691146715928620, -0.306738736786958570, -0.306786326091141700, -0.306833914628359410, -0.306881502398491930, -0.306929089401420720, +-0.306976675637026740, -0.307024261105191540, -0.307071845805795220, -0.307119429738719310, -0.307167012903845240, -0.307214595301053220, -0.307262176930224670, -0.307309757791240760, +-0.307357337883982780, -0.307404917208331130, -0.307452495764167110, -0.307500073551371880, -0.307547650569826910, -0.307595226819412370, -0.307642802300009790, -0.307690377011500150, +-0.307737950953765050, -0.307785524126684580, -0.307833096530140350, -0.307880668164013380, -0.307928239028185170, -0.307975809122535920, -0.308023378446947160, -0.308070947001300330, +-0.308118514785475750, -0.308166081799354900, -0.308213648042818810, -0.308261213515749030, -0.308308778218025830, -0.308356342149530670, -0.308403905310144610, -0.308451467699749240, +-0.308499029318224820, -0.308546590165452770, -0.308594150241314260, -0.308641709545690810, -0.308689268078462640, -0.308736825839511290, -0.308784382828717900, -0.308831939045964010, +-0.308879494491129780, -0.308927049164096860, -0.308974603064746280, -0.309022156192959640, -0.309069708548617210, -0.309117260131600460, -0.309164810941791050, -0.309212360979069120, +-0.309259910243316340, -0.309307458734413730, -0.309355006452242950, -0.309402553396684210, -0.309450099567619100, -0.309497644964928710, -0.309545189588494640, -0.309592733438197150, +-0.309640276513917900, -0.309687818815537920, -0.309735360342938800, -0.309782901096000870, -0.309830441074605670, -0.309877980278634390, -0.309925518707968580, -0.309973056362488510, +-0.310020593242075870, -0.310068129346612100, -0.310115664675977620, -0.310163199230053980, -0.310210733008722370, -0.310258266011864290, -0.310305798239360160, -0.310353329691091530, +-0.310400860366939590, -0.310448390266785890, -0.310495919390510800, -0.310543447737995910, -0.310590975309122440, -0.310638502103771920, -0.310686028121824720, -0.310733553363162440, +-0.310781077827666290, -0.310828601515217850, -0.310876124425697510, -0.310923646558986850, -0.310971167914967540, -0.311018688493519820, -0.311066208294525410, -0.311113727317865460, +-0.311161245563421670, -0.311208763031074250, -0.311256279720705020, -0.311303795632195010, -0.311351310765425990, -0.311398825120278280, -0.311446338696633460, -0.311493851494372810, +-0.311541363513377970, -0.311588874753529250, -0.311636385214708380, -0.311683894896796540, -0.311731403799675400, -0.311778911923225320, -0.311826419267327960, -0.311873925831864960, +-0.311921431616716760, -0.311968936621764950, -0.312016440846890840, -0.312063944291975980, -0.312111446956900910, -0.312158948841547160, -0.312206449945796050, -0.312253950269529290, +-0.312301449812627200, -0.312348948574971470, -0.312396446556443390, -0.312443943756924580, -0.312491440176295490, -0.312538935814437870, -0.312586430671232820, -0.312633924746562150, +-0.312681418040306300, -0.312728910552346860, -0.312776402282565150, -0.312823893230842810, -0.312871383397060390, -0.312918872781099480, -0.312966361382841780, -0.313013849202167790, +-0.313061336238959150, -0.313108822493097240, -0.313156307964463640, -0.313203792652938850, -0.313251276558404570, -0.313298759680742110, -0.313346242019833190, -0.313393723575558230, +-0.313441204347798930, -0.313488684336436670, -0.313536163541353050, -0.313583641962428660, -0.313631119599545150, -0.313678596452583890, -0.313726072521426480, -0.313773547805953510, +-0.313821022306046690, -0.313868496021587670, -0.313915968952457050, -0.313963441098536470, -0.314010912459707300, -0.314058383035851260, -0.314105852826848890, -0.314153321832581820, +-0.314200790052931500, -0.314248257487779630, -0.314295724137006630, -0.314343190000494380, -0.314390655078124140, -0.314438119369777670, -0.314485582875335510, -0.314533045594679370, +-0.314580507527690620, -0.314627968674251020, -0.314675429034241060, -0.314722888607542550, -0.314770347394037200, -0.314817805393605600, -0.314865262606129510, -0.314912719031490210, +-0.314960174669569600, -0.315007629520248080, -0.315055083583407500, -0.315102536858929190, -0.315149989346694970, -0.315197441046585370, -0.315244891958482150, -0.315292342082266750, +-0.315339791417820870, -0.315387239965025100, -0.315434687723761210, -0.315482134693910620, -0.315529580875355150, -0.315577026267975240, -0.315624470871652800, -0.315671914686269210, +-0.315719357711706230, -0.315766799947844400, -0.315814241394565600, -0.315861682051751640, -0.315909121919283000, -0.315956560997041610, -0.316003999284908800, -0.316051436782766370, +-0.316098873490494980, -0.316146309407976390, -0.316193744535092030, -0.316241178871723700, -0.316288612417752020, -0.316336045173058860, -0.316383477137525520, -0.316430908311033930, +-0.316478338693464640, -0.316525768284699530, -0.316573197084620010, -0.316620625093107900, -0.316668052310043750, -0.316715478735309530, -0.316762904368787010, -0.316810329210356840, +-0.316857753259900840, -0.316905176517300440, -0.316952598982437550, -0.317000020655192670, -0.317047441535447780, -0.317094861623084310, -0.317142280917984080, -0.317189699420027730, +-0.317237117129097130, -0.317284534045073780, -0.317331950167839490, -0.317379365497274860, -0.317426780033261860, -0.317474193775681920, -0.317521606724416870, -0.317569018879347410, +-0.317616430240355410, -0.317663840807322740, -0.317711250580130060, -0.317758659558659280, -0.317806067742791800, -0.317853475132409580, -0.317900881727393280, -0.317948287527624770, +-0.317995692532985540, -0.318043096743357460, -0.318090500158621280, -0.318137902778658780, -0.318185304603351590, -0.318232705632581550, -0.318280105866229290, -0.318327505304176750, +-0.318374903946305520, -0.318422301792497360, -0.318469698842633100, -0.318517095096594590, -0.318564490554263720, -0.318611885215521250, -0.318659279080249050, -0.318706672148328600, +-0.318754064419641940, -0.318801455894069720, -0.318848846571493820, -0.318896236451795820, -0.318943625534857610, -0.318991013820560000, -0.319038401308784800, -0.319085787999413560, +-0.319133173892328310, -0.319180558987409770, -0.319227943284539740, -0.319275326783599880, -0.319322709484472110, -0.319370091387037200, -0.319417472491177020, -0.319464852796773170, +-0.319512232303707620, -0.319559611011861030, -0.319606988921115440, -0.319654366031352780, -0.319701742342453800, -0.319749117854300490, -0.319796492566774340, -0.319843866479757380, +-0.319891239593130370, -0.319938611906775250, -0.319985983420573550, -0.320033354134407370, -0.320080724048157410, -0.320128093161705600, -0.320175461474933530, -0.320222828987723250, +-0.320270195699955460, -0.320317561611512200, -0.320364926722275070, -0.320412291032125980, -0.320459654540945770, -0.320507017248616470, -0.320554379155020000, -0.320601740260037130, +-0.320649100563549950, -0.320696460065440000, -0.320743818765589380, -0.320791176663878740, -0.320838533760190170, -0.320885890054405270, -0.320933245546406010, -0.320980600236073280, +-0.321027954123289050, -0.321075307207934920, -0.321122659489892940, -0.321170010969043910, -0.321217361645269820, -0.321264711518452320, -0.321312060588473500, -0.321359408855214080, +-0.321406756318556140, -0.321454102978381730, -0.321501448834571660, -0.321548793887007970, -0.321596138135572310, -0.321643481580146660, -0.321690824220611960, -0.321738166056850130, +-0.321785507088742930, -0.321832847316172340, -0.321880186739019300, -0.321927525357165730, -0.321974863170493340, -0.322022200178884220, -0.322069536382219190, -0.322116871780380290, +-0.322164206373249270, -0.322211540160708130, -0.322258873142637680, -0.322306205318920070, -0.322353536689436950, -0.322400867254070410, -0.322448197012701330, -0.322495525965211690, +-0.322542854111483700, -0.322590181451398120, -0.322637507984837090, -0.322684833711682330, -0.322732158631815870, -0.322779482745118580, -0.322826806051472630, -0.322874128550759590, +-0.322921450242861730, -0.322968771127659760, -0.323016091205035880, -0.323063410474871800, -0.323110728937049620, -0.323158046591450140, -0.323205363437955580, -0.323252679476447650, +-0.323299994706808370, -0.323347309128918740, -0.323394622742660790, -0.323441935547916730, -0.323489247544567430, -0.323536558732494980, -0.323583869111581160, -0.323631178681708040, +-0.323678487442756620, -0.323725795394608940, -0.323773102537146750, -0.323820408870252260, -0.323867714393806350, -0.323915019107691100, -0.323962323011788340, -0.324009626105980160, +-0.324056928390147550, -0.324104229864172530, -0.324151530527936990, -0.324198830381323080, -0.324246129424211600, -0.324293427656484830, -0.324340725078024920, -0.324388021688712780, +-0.324435317488430570, -0.324482612477060120, -0.324529906654483500, -0.324577200020581710, -0.324624492575236900, -0.324671784318330880, -0.324719075249745800, -0.324766365369362650, +-0.324813654677063520, -0.324860943172730340, -0.324908230856245150, -0.324955517727488990, -0.325002803786344050, -0.325050089032692110, -0.325097373466415320, -0.325144657087394710, +-0.325191939895512430, -0.325239221890650740, -0.325286503072690580, -0.325333783441514200, -0.325381062997003310, -0.325428341739040170, -0.325475619667505770, -0.325522896782282360, +-0.325570173083251650, -0.325617448570295950, -0.325664723243296260, -0.325711997102134660, -0.325759270146693150, -0.325806542376853860, -0.325853813792497780, -0.325901084393507180, +-0.325948354179763870, -0.325995623151150100, -0.326042891307546820, -0.326090158648836340, -0.326137425174900460, -0.326184690885621460, -0.326231955780880270, -0.326279219860559240, +-0.326326483124540550, -0.326373745572705210, -0.326421007204935550, -0.326468268021113340, -0.326515528021120880, -0.326562787204839220, -0.326610045572150560, -0.326657303122936780, +-0.326704559857080190, -0.326751815774461770, -0.326799070874963790, -0.326846325158468120, -0.326893578624857130, -0.326940831274011690, -0.326988083105814230, -0.327035334120146510, +-0.327082584316890910, -0.327129833695928460, -0.327177082257141370, -0.327224330000412010, -0.327271576925621420, -0.327318823032651920, -0.327366068321385320, -0.327413312791703940, +-0.327460556443488930, -0.327507799276622490, -0.327555041290986500, -0.327602282486463390, -0.327649522862934140, -0.327696762420281120, -0.327744001158386140, -0.327791239077131590, +-0.327838476176398550, -0.327885712456069290, -0.327932947916025730, -0.327980182556150250, -0.328027416376323930, -0.328074649376429000, -0.328121881556347920, -0.328169112915961680, +-0.328216343455152660, -0.328263573173802840, -0.328310802071794420, -0.328358030149008610, -0.328405257405327780, -0.328452483840633750, -0.328499709454808940, -0.328546934247734400, +-0.328594158219292550, -0.328641381369365330, -0.328688603697835090, -0.328735825204582890, -0.328783045889491090, -0.328830265752441730, -0.328877484793317130, -0.328924703011998330, +-0.328971920408367870, -0.329019136982307560, -0.329066352733699830, -0.329113567662425780, -0.329160781768367830, -0.329207995051408350, -0.329255207511428450, -0.329302419148310540, +-0.329349629961936560, -0.329396839952188940, -0.329444049118948810, -0.329491257462098560, -0.329538464981520170, -0.329585671677096010, -0.329632877548707240, -0.329680082596236320, +-0.329727286819565200, -0.329774490218576240, -0.329821692793150660, -0.329868894543170870, -0.329916095468518800, -0.329963295569076940, -0.330010494844726390, -0.330057693295349620, +-0.330104890920829060, -0.330152087721045820, -0.330199283695882360, -0.330246478845220740, -0.330293673168943260, -0.330340866666931240, -0.330388059339067060, -0.330435251185232700, +-0.330482442205310640, -0.330529632399182040, -0.330576821766729370, -0.330624010307834670, -0.330671198022380320, -0.330718384910247630, -0.330765570971318920, -0.330812756205476290, +-0.330859940612602150, -0.330907124192577780, -0.330954306945285600, -0.331001488870608100, -0.331048669968426410, -0.331095850238623090, -0.331143029681080110, -0.331190208295679970, +-0.331237386082303910, -0.331284563040834420, -0.331331739171153440, -0.331378914473143600, -0.331426088946686010, -0.331473262591663210, -0.331520435407957280, -0.331567607395450660, +-0.331614778554024600, -0.331661948883561600, -0.331709118383943740, -0.331756287055053500, -0.331803454896772100, -0.331850621908982070, -0.331897788091565890, -0.331944953444404890, +-0.331992117967381430, -0.332039281660377720, -0.332086444523276180, -0.332133606555958140, -0.332180767758306070, -0.332227928130202130, -0.332275087671528750, -0.332322246382167230, +-0.332369404262000070, -0.332416561310909460, -0.332463717528777850, -0.332510872915486480, -0.332558027470917950, -0.332605181194954360, -0.332652334087478240, -0.332699486148370860, +-0.332746637377514750, -0.332793787774792070, -0.332840937340085350, -0.332888086073275860, -0.332935233974246130, -0.332982381042878750, -0.333029527279054990, -0.333076672682657450, +-0.333123817253568210, -0.333170960991669820, -0.333218103896843640, -0.333265245968972170, -0.333312387207937600, -0.333359527613622470, -0.333406667185908110, -0.333453805924677100, +-0.333500943829811550, -0.333548080901194090, -0.333595217138705990, -0.333642352542229850, -0.333689487111647810, -0.333736620846842470, -0.333783753747695200, -0.333830885814088480, +-0.333878017045905030, -0.333925147443026090, -0.333972277005334270, -0.334019405732711830, -0.334066533625041180, -0.334113660682203880, -0.334160786904082350, -0.334207912290558910, +-0.334255036841516080, -0.334302160556835260, -0.334349283436399030, -0.334396405480089590, -0.334443526687789540, -0.334490647059380250, -0.334537766594744380, -0.334584885293764070, +-0.334632003156321970, -0.334679120182299390, -0.334726236371579110, -0.334773351724043600, -0.334820466239574290, -0.334867579918053830, -0.334914692759364420, -0.334961804763388660, +-0.335008915930008030, -0.335056026259105080, -0.335103135750562050, -0.335150244404261610, -0.335197352220085180, -0.335244459197915350, -0.335291565337634320, -0.335338670639124870, +-0.335385775102268250, -0.335432878726947270, -0.335479981513044030, -0.335527083460441300, -0.335574184569020380, -0.335621284838664050, -0.335668384269254490, -0.335715482860674430, +-0.335762580612805230, -0.335809677525529540, -0.335856773598730120, -0.335903868832288290, -0.335950963226086810, -0.335998056780007940, -0.336045149493934380, -0.336092241367747460, +-0.336139332401329980, -0.336186422594564160, -0.336233511947332700, -0.336280600459517020, -0.336327688130999840, -0.336374774961663460, -0.336421860951390590, -0.336468946100062620, +-0.336516030407562280, -0.336563113873771860, -0.336610196498574040, -0.336657278281850380, -0.336704359223483520, -0.336751439323356110, -0.336798518581349740, -0.336845596997347060, +-0.336892674571230400, -0.336939751302882450, -0.336986827192184760, -0.337033902239019910, -0.337080976443270400, -0.337128049804818810, -0.337175122323546680, -0.337222193999336730, +-0.337269264832071310, -0.337316334821633200, -0.337363403967903760, -0.337410472270765820, -0.337457539730101730, -0.337504606345794210, -0.337551672117724740, -0.337598737045776090, +-0.337645801129831000, -0.337692864369771030, -0.337739926765478870, -0.337786988316836900, -0.337834049023727880, -0.337881108886033340, -0.337928167903636000, -0.337975226076418220, +-0.338022283404262820, -0.338069339887051350, -0.338116395524666440, -0.338163450316990580, -0.338210504263906530, -0.338257557365295780, -0.338304609621041090, -0.338351661031024930, +-0.338398711595130020, -0.338445761313237950, -0.338492810185231420, -0.338539858210993310, -0.338586905390405150, -0.338633951723349700, -0.338680997209709400, -0.338728041849367000, +-0.338775085642204100, -0.338822128588103460, -0.338869170686947550, -0.338916211938619090, -0.338963252342999680, -0.339010291899972120, -0.339057330609418840, -0.339104368471222720, +-0.339151405485265180, -0.339198441651429150, -0.339245476969597000, -0.339292511439651610, -0.339339545061474510, -0.339386577834948580, -0.339433609759956180, -0.339480640836380130, +-0.339527671064102090, -0.339574700443004920, -0.339621728972971330, -0.339668756653883070, -0.339715783485622870, -0.339762809468073250, -0.339809834601117020, -0.339856858884635790, +-0.339903882318512370, -0.339950904902629300, -0.339997926636869340, -0.340044947521114190, -0.340091967555246620, -0.340138986739149160, -0.340186005072704630, -0.340233022555794740, +-0.340280039188302240, -0.340327054970109620, -0.340374069901099810, -0.340421083981154390, -0.340468097210156310, -0.340515109587988360, -0.340562121114532210, -0.340609131789670780, +-0.340656141613286500, -0.340703150585262290, -0.340750158705479810, -0.340797165973821930, -0.340844172390171120, -0.340891177954410320, -0.340938182666421120, -0.340985186526086450, +-0.341032189533288840, -0.341079191687911230, -0.341126192989835150, -0.341173193438943590, -0.341220193035119080, -0.341267191778244490, -0.341314189668201540, -0.341361186704873030, +-0.341408182888142060, -0.341455178217890180, -0.341502172694000350, -0.341549166316355070, -0.341596159084837310, -0.341643150999328740, -0.341690142059712320, -0.341737132265870490, +-0.341784121617686290, -0.341831110115041360, -0.341878097757818630, -0.341925084545900650, -0.341972070479170390, -0.342019055557509550, -0.342066039780801080, -0.342113023148927500, +-0.342160005661771790, -0.342206987319215620, -0.342253968121142000, -0.342300948067433440, -0.342347927157972960, -0.342394905392642220, -0.342441882771324200, -0.342488859293901940, +-0.342535834960257080, -0.342582809770272670, -0.342629783723831180, -0.342676756820815720, -0.342723729061107870, -0.342770700444590740, -0.342817670971146850, -0.342864640640659190, +-0.342911609453009580, -0.342958577408080890, -0.343005544505755710, -0.343052510745917140, -0.343099476128446880, -0.343146440653227910, -0.343193404320142890, -0.343240367129074740, +-0.343287329079905220, -0.343334290172517430, -0.343381250406794290, -0.343428209782617620, -0.343475168299870460, -0.343522125958435340, -0.343569082758195370, -0.343616038699032230, +-0.343662993780828980, -0.343709948003468270, -0.343756901366833120, -0.343803853870805310, -0.343850805515267810, -0.343897756300103330, -0.343944706225194910, -0.343991655290424250, +-0.344038603495674500, -0.344085550840828200, -0.344132497325768450, -0.344179442950377060, -0.344226387714537060, -0.344273331618131450, -0.344320274661042150, -0.344367216843152190, +-0.344414158164344120, -0.344461098624501140, -0.344508038223504950, -0.344554976961238660, -0.344601914837584960, -0.344648851852426890, -0.344695788005646210, -0.344742723297126130, +-0.344789657726749240, -0.344836591294398590, -0.344883523999956030, -0.344930455843304730, -0.344977386824327210, -0.345024316942906690, -0.345071246198924930, -0.345118174592265130, +-0.345165102122810210, -0.345212028790442160, -0.345258954595044080, -0.345305879536498550, -0.345352803614688790, -0.345399726829496550, -0.345446649180805030, -0.345493570668496900, +-0.345540491292455230, -0.345587411052561910, -0.345634329948700080, -0.345681247980752390, -0.345728165148602050, -0.345775081452130870, -0.345821996891221950, -0.345868911465758100, +-0.345915825175622300, -0.345962738020696600, -0.346009650000864030, -0.346056561116007360, -0.346103471366009660, -0.346150380750752880, -0.346197289270120110, -0.346244196923994610, +-0.346291103712258130, -0.346338009634793940, -0.346384914691484750, -0.346431818882213640, -0.346478722206862540, -0.346525624665314670, -0.346572526257452770, -0.346619426983159950, +-0.346666326842318130, -0.346713225834810510, -0.346760123960519810, -0.346807021219329210, -0.346853917611120670, -0.346900813135777310, -0.346947707793181900, -0.346994601583217710, +-0.347041494505766550, -0.347088386560711670, -0.347135277747936180, -0.347182168067322160, -0.347229057518752660, -0.347275946102110540, -0.347322833817279020, -0.347369720664139960, +-0.347416606642576560, -0.347463491752471710, -0.347510375993708490, -0.347557259366168940, -0.347604141869736260, -0.347651023504293170, -0.347697904269722970, -0.347744784165907590, +-0.347791663192730300, -0.347838541350073800, -0.347885418637821350, -0.347932295055854990, -0.347979170604057860, -0.348026045282313180, -0.348072919090503030, -0.348119792028510570, +-0.348166664096218600, -0.348213535293510460, -0.348260405620268000, -0.348307275076374550, -0.348354143661712910, -0.348401011376166300, -0.348447878219616760, -0.348494744191947540, +-0.348541609293041450, -0.348588473522781770, -0.348635336881050470, -0.348682199367730820, -0.348729060982705670, -0.348775921725858310, -0.348822781597070750, -0.348869640596226220, +-0.348916498723207570, -0.348963355977898070, -0.349010212360179760, -0.349057067869935960, -0.349103922507049910, -0.349150776271403620, -0.349197629162880390, -0.349244481181363090, +-0.349291332326734980, -0.349338182598878170, -0.349385031997675840, -0.349431880523011000, -0.349478728174766830, -0.349525574952825440, -0.349572420857070130, -0.349619265887383730, +-0.349666110043649610, -0.349712953325749810, -0.349759795733567580, -0.349806637266985910, -0.349853477925888000, -0.349900317710156060, -0.349947156619673240, -0.349993994654323020, +-0.350040831813987370, -0.350087668098549630, -0.350134503507892710, -0.350181338041899990, -0.350228171700453450, -0.350275004483436510, -0.350321836390732110, -0.350368667422223450, +-0.350415497577792780, -0.350462326857323310, -0.350509155260698040, -0.350555982787800310, -0.350602809438512190, -0.350649635212717080, -0.350696460110297810, -0.350743284131137870, +-0.350790107275119280, -0.350836929542125420, -0.350883750932039720, -0.350930571444744150, -0.350977391080122160, -0.351024209838056710, -0.351071027718431130, -0.351117844721127560, +-0.351164660846029430, -0.351211476093019610, -0.351258290461981540, -0.351305103952797290, -0.351351916565350310, -0.351398728299523510, -0.351445539155200330, -0.351492349132262900, +-0.351539158230594560, -0.351585966450078340, -0.351632773790597650, -0.351679580252034550, -0.351726385834272510, -0.351773190537194970, -0.351819994360684010, -0.351866797304623060, +-0.351913599368895100, -0.351960400553383620, -0.352007200857970660, -0.352054000282539750, -0.352100798826973820, -0.352147596491156290, -0.352194393274969320, -0.352241189178296440, +-0.352287984201020530, -0.352334778343025120, -0.352381571604192310, -0.352428363984405630, -0.352475155483548020, -0.352521946101502890, -0.352568735838152510, -0.352615524693380310, +-0.352662312667069270, -0.352709099759102860, -0.352755885969363300, -0.352802671297734020, -0.352849455744098480, -0.352896239308338850, -0.352943021990338670, -0.352989803789980960, +-0.353036584707149100, -0.353083364741725360, -0.353130143893593260, -0.353176922162635740, -0.353223699548736390, -0.353270476051777360, -0.353317251671642070, -0.353364026408213740, +-0.353410800261375720, -0.353457573231010290, -0.353504345317000920, -0.353551116519230710, -0.353597886837583090, -0.353644656271940360, -0.353691424822186020, -0.353738192488203480, +-0.353784959269875080, -0.353831725167084280, -0.353878490179714120, -0.353925254307648210, -0.353972017550768680, -0.354018779908959190, -0.354065541382102670, -0.354112301970082750, +-0.354159061672781660, -0.354205820490082920, -0.354252578421869630, -0.354299335468025330, -0.354346091628432220, -0.354392846902973900, -0.354439601291533510, -0.354486354793994480, +-0.354533107410239190, -0.354579859140151110, -0.354626609983613780, -0.354673359940509520, -0.354720109010721870, -0.354766857194133920, -0.354813604490629260, -0.354860350900090220, +-0.354907096422400260, -0.354953841057442540, -0.355000584805100660, -0.355047327665256870, -0.355094069637794830, -0.355140810722597570, -0.355187550919548680, -0.355234290228530540, +-0.355281028649426620, -0.355327766182120200, -0.355374502826494740, -0.355421238582432570, -0.355467973449817400, -0.355514707428532200, -0.355561440518460730, -0.355608172719485190, +-0.355654904031489190, -0.355701634454356430, -0.355748363987969110, -0.355795092632210870, -0.355841820386964940, -0.355888547252114880, -0.355935273227542980, -0.355981998313132930, +-0.356028722508767880, -0.356075445814331480, -0.356122168229705990, -0.356168889754775120, -0.356215610389422010, -0.356262330133530310, -0.356309048986982350, -0.356355766949661760, +-0.356402484021451750, -0.356449200202235970, -0.356495915491896740, -0.356542629890317760, -0.356589343397382570, -0.356636056012973660, -0.356682767736974600, -0.356729478569268620, +-0.356776188509739360, -0.356822897558269180, -0.356869605714741740, -0.356916312979040360, -0.356963019351048570, -0.357009724830648860, -0.357056429417724750, -0.357103133112159630, +-0.357149835913837090, -0.357196537822639550, -0.357243238838450660, -0.357289938961153630, -0.357336638190632220, -0.357383336526768790, -0.357430033969447000, -0.357476730518550560, +-0.357523426173961880, -0.357570120935564620, -0.357616814803242030, -0.357663507776877890, -0.357710199856354490, -0.357756891041555670, -0.357803581332364560, -0.357850270728664930, +-0.357896959230339210, -0.357943646837271090, -0.357990333549343840, -0.358037019366441220, -0.358083704288445600, -0.358130388315240740, -0.358177071446709900, -0.358223753682736790, +-0.358270435023203880, -0.358317115467994880, -0.358363795016993500, -0.358410473670082220, -0.358457151427144740, -0.358503828288064430, -0.358550504252724940, -0.358597179321008760, +-0.358643853492799650, -0.358690526767980910, -0.358737199146436260, -0.358783870628048170, -0.358830541212700470, -0.358877210900276360, -0.358923879690659640, -0.358970547583732870, +-0.359017214579379680, -0.359063880677483460, -0.359110545877927960, -0.359157210180595650, -0.359203873585370310, -0.359250536092135310, -0.359297197700774400, -0.359343858411170060, +-0.359390518223206110, -0.359437177136766260, -0.359483835151733040, -0.359530492267990220, -0.359577148485421220, -0.359623803803909680, -0.359670458223338320, -0.359717111743590720, +-0.359763764364550380, -0.359810416086101040, -0.359857066908125240, -0.359903716830506810, -0.359950365853129060, -0.359997013975875800, -0.360043661198629630, -0.360090307521274240, +-0.360136952943693130, -0.360183597465770060, -0.360230241087387550, -0.360276883808429480, -0.360323525628779560, -0.360370166548320490, -0.360416806566935920, -0.360463445684509390, +-0.360510083900924650, -0.360556721216064250, -0.360603357629812050, -0.360649993142051480, -0.360696627752666370, -0.360743261461539230, -0.360789894268553960, -0.360836526173593960, +-0.360883157176543010, -0.360929787277283810, -0.360976416475700110, -0.361023044771675410, -0.361069672165093450, -0.361116298655836940, -0.361162924243789650, -0.361209548928835500, +-0.361256172710857030, -0.361302795589738160, -0.361349417565362320, -0.361396038637613270, -0.361442658806373770, -0.361489278071527640, -0.361535896432958250, -0.361582513890549570, +-0.361629130444184210, -0.361675746093746030, -0.361722360839118460, -0.361768974680185370, -0.361815587616829470, -0.361862199648934570, -0.361908810776384200, -0.361955420999062250, +-0.362002030316851300, -0.362048638729635220, -0.362095246237297610, -0.362141852839722280, -0.362188458536791940, -0.362235063328390390, -0.362281667214401640, -0.362328270194708260, +-0.362374872269194240, -0.362421473437743060, -0.362468073700238590, -0.362514673056563490, -0.362561271506601780, -0.362607869050236840, -0.362654465687352660, -0.362701061417831870, +-0.362747656241558470, -0.362794250158415880, -0.362840843168288130, -0.362887435271057820, -0.362934026466608940, -0.362980616754824960, -0.363027206135589920, -0.363073794608786420, +-0.363120382174298430, -0.363166968832009880, -0.363213554581803490, -0.363260139423563280, -0.363306723357172680, -0.363353306382515670, -0.363399888499474970, -0.363446469707934590, +-0.363493050007777980, -0.363539629398889230, -0.363586207881150920, -0.363632785454447160, -0.363679362118661420, -0.363725937873677680, -0.363772512719378660, -0.363819086655648380, +-0.363865659682370390, -0.363912231799428660, -0.363958803006705910, -0.364005373304086170, -0.364051942691453410, -0.364098511168690410, -0.364145078735681080, -0.364191645392309080, +-0.364238211138458390, -0.364284775974011770, -0.364331339898853130, -0.364377902912866200, -0.364424465015934950, -0.364471026207942080, -0.364517586488771690, -0.364564145858307320, +-0.364610704316433000, -0.364657261863031490, -0.364703818497986830, -0.364750374221182620, -0.364796929032502880, -0.364843482931830390, -0.364890035919049230, -0.364936587994042990, +-0.364983139156695670, -0.365029689406890070, -0.365076238744510280, -0.365122787169440300, -0.365169334681562930, -0.365215881280762210, -0.365262426966921790, -0.365308971739925770, +-0.365355515599656840, -0.365402058545999160, -0.365448600578836320, -0.365495141698052360, -0.365541681903530200, -0.365588221195153770, -0.365634759572806830, -0.365681297036373420, +-0.365727833585736290, -0.365774369220779660, -0.365820903941387050, -0.365867437747442570, -0.365913970638829130, -0.365960502615430780, -0.366007033677131550, -0.366053563823814320, +-0.366100093055363170, -0.366146621371661820, -0.366193148772594350, -0.366239675258043570, -0.366286200827893590, -0.366332725482028110, -0.366379249220331220, -0.366425772042685840, +-0.366472293948975960, -0.366518814939085390, -0.366565335012898170, -0.366611854170297240, -0.366658372411166670, -0.366704889735390120, -0.366751406142851790, -0.366797921633434550, +-0.366844436207022510, -0.366890949863499740, -0.366937462602749230, -0.366983974424655020, -0.367030485329100930, -0.367076995315971040, -0.367123504385148180, -0.367170012536516600, +-0.367216519769960000, -0.367263026085362490, -0.367309531482607030, -0.367356035961577730, -0.367402539522158340, -0.367449042164233020, -0.367495543887684680, -0.367542044692397480, +-0.367588544578255130, -0.367635043545141870, -0.367681541592940590, -0.367728038721535420, -0.367774534930810640, -0.367821030220649050, -0.367867524590934910, -0.367914018041551940, +-0.367960510572384330, -0.368007002183315060, -0.368053492874228280, -0.368099982645007760, -0.368146471495537700, -0.368192959425701020, -0.368239446435381980, -0.368285932524464290, +-0.368332417692832200, -0.368378901940368650, -0.368425385266957890, -0.368471867672483630, -0.368518349156830070, -0.368564829719880300, -0.368611309361518420, -0.368657788081628250, +-0.368704265880094030, -0.368750742756798760, -0.368797218711626630, -0.368843693744461850, -0.368890167855187410, -0.368936641043687560, -0.368983113309846120, -0.369029584653547290, +-0.369076055074674110, -0.369122524573110790, -0.369168993148741190, -0.369215460801449460, -0.369261927531118690, -0.369308393337633100, -0.369354858220876490, -0.369401322180733180, +-0.369447785217086160, -0.369494247329819670, -0.369540708518817600, -0.369587168783964140, -0.369633628125142330, -0.369680086542236440, -0.369726544035130780, -0.369773000603708320, +-0.369819456247853400, -0.369865910967449810, -0.369912364762381870, -0.369958817632532580, -0.370005269577786230, -0.370051720598026770, -0.370098170693138380, -0.370144619863004180, +-0.370191068107508400, -0.370237515426534940, -0.370283961819968140, -0.370330407287691010, -0.370376851829587850, -0.370423295445542530, -0.370469738135439430, -0.370516179899161580, +-0.370562620736593300, -0.370609060647618840, -0.370655499632121300, -0.370701937689985050, -0.370748374821093910, -0.370794811025332290, -0.370841246302583190, -0.370887680652731030, +-0.370934114075659630, -0.370980546571253400, -0.371026978139395340, -0.371073408779969860, -0.371119838492860840, -0.371166267277952660, -0.371212695135128390, -0.371259122064272360, +-0.371305548065268550, -0.371351973138001280, -0.371398397282353630, -0.371444820498210040, -0.371491242785454370, -0.371537664143970990, -0.371584084573643060, -0.371630504074354940, +-0.371676922645990950, -0.371723340288434230, -0.371769757001569170, -0.371816172785279730, -0.371862587639450290, -0.371909001563963890, -0.371955414558705070, -0.372001826623557690, +-0.372048237758406120, -0.372094647963133570, -0.372141057237624420, -0.372187465581762580, -0.372233872995432540, -0.372280279478517380, -0.372326685030901490, -0.372373089652468960, +-0.372419493343104040, -0.372465896102690040, -0.372512297931111240, -0.372558698828252150, -0.372605098793995890, -0.372651497828226870, -0.372697895930829140, -0.372744293101687050, +-0.372790689340683820, -0.372837084647703880, -0.372883479022631250, -0.372929872465350310, -0.372976264975744260, -0.373022656553697540, -0.373069047199094230, -0.373115436911818640, +-0.373161825691754100, -0.373208213538785030, -0.373254600452795350, -0.373300986433669600, -0.373347371481290990, -0.373393755595543940, -0.373440138776312940, -0.373486521023481180, +-0.373532902336933090, -0.373579282716552770, -0.373625662162224650, -0.373672040673831920, -0.373718418251259120, -0.373764794894390300, -0.373811170603109870, -0.373857545377301090, +-0.373903919216848510, -0.373950292121636050, -0.373996664091548300, -0.374043035126468530, -0.374089405226281150, -0.374135774390870200, -0.374182142620120280, -0.374228509913914600, +-0.374274876272137620, -0.374321241694673850, -0.374367606181406580, -0.374413969732220300, -0.374460332346999100, -0.374506694025627470, -0.374553054767988670, -0.374599414573967280, +-0.374645773443447290, -0.374692131376313350, -0.374738488372448610, -0.374784844431737710, -0.374831199554064630, -0.374877553739314030, -0.374923906987369100, -0.374970259298114390, +-0.375016610671434050, -0.375062961107212600, -0.375109310605333370, -0.375155659165680780, -0.375202006788139090, -0.375248353472592830, -0.375294699218925220, -0.375341044027020900, +-0.375387387896764350, -0.375433730828038940, -0.375480072820729150, -0.375526413874719240, -0.375572753989893700, -0.375619093166135840, -0.375665431403330250, -0.375711768701361080, +-0.375758105060112920, -0.375804440479469090, -0.375850774959314130, -0.375897108499532230, -0.375943441100007990, -0.375989772760624790, -0.376036103481267090, -0.376082433261819120, +-0.376128762102165500, -0.376175090002189570, -0.376221416961775910, -0.376267742980809120, -0.376314068059172560, -0.376360392196750830, -0.376406715393428130, -0.376453037649089050, +-0.376499358963616970, -0.376545679336896480, -0.376591998768811780, -0.376638317259247510, -0.376684634808087060, -0.376730951415214950, -0.376777267080515510, -0.376823581803873320, +-0.376869895585171750, -0.376916208424295460, -0.376962520321128650, -0.377008831275555960, -0.377055141287460760, -0.377101450356727710, -0.377147758483241390, -0.377194065666885350, +-0.377240371907544110, -0.377286677205101950, -0.377332981559443500, -0.377379284970452140, -0.377425587438012630, -0.377471888962009120, -0.377518189542326350, -0.377564489178847660, +-0.377610787871457740, -0.377657085620040860, -0.377703382424481650, -0.377749678284663600, -0.377795973200471370, -0.377842267171789150, -0.377888560198501760, -0.377934852280492510, +-0.377981143417646100, -0.378027433609846860, -0.378073722856979430, -0.378120011158927290, -0.378166298515575150, -0.378212584926807650, -0.378258870392508330, -0.378305154912561780, +-0.378351438486852320, -0.378397721115264710, -0.378444002797682370, -0.378490283533990060, -0.378536563324072040, -0.378582842167812960, -0.378629120065096410, -0.378675397015807050, +-0.378721673019829230, -0.378767948077047610, -0.378814222187345670, -0.378860495350608230, -0.378906767566719540, -0.378953038835564360, -0.378999309157026120, -0.379045578530989640, +-0.379091846957339660, -0.379138114435959570, -0.379184380966734240, -0.379230646549547970, -0.379276911184285470, -0.379323174870830280, -0.379369437609067160, -0.379415699398880480, +-0.379461960240154940, -0.379508220132774080, -0.379554479076622650, -0.379600737071585040, -0.379646994117546040, -0.379693250214389100, -0.379739505361999020, -0.379785759560260230, +-0.379832012809057430, -0.379878265108274160, -0.379924516457795240, -0.379970766857505470, -0.380017016307288350, -0.380063264807028680, -0.380109512356610830, -0.380155758955919630, +-0.380202004604838660, -0.380248249303252630, -0.380294493051046010, -0.380340735848103520, -0.380386977694308850, -0.380433218589546650, -0.380479458533701460, -0.380525697526658050, +-0.380571935568299930, -0.380618172658512000, -0.380664408797178670, -0.380710643984184690, -0.380756878219413730, -0.380803111502750540, -0.380849343834079980, -0.380895575213285650, +-0.380941805640252370, -0.380988035114864620, -0.381034263637007150, -0.381080491206563620, -0.381126717823418890, -0.381172943487457340, -0.381219168198563830, -0.381265391956622010, +-0.381311614761516700, -0.381357836613132380, -0.381404057511353870, -0.381450277456064800, -0.381496496447150000, -0.381542714484494010, -0.381588931567981630, -0.381635147697496510, +-0.381681362872923540, -0.381727577094147120, -0.381773790361052190, -0.381820002673522340, -0.381866214031442550, -0.381912424434697580, -0.381958633883171190, -0.382004842376748140, +-0.382051049915313080, -0.382097256498750760, -0.382143462126944830, -0.382189666799780340, -0.382235870517141640, -0.382282073278913670, -0.382328275084980130, -0.382374475935225890, +-0.382420675829535430, -0.382466874767793730, -0.382513072749884390, -0.382559269775692430, -0.382605465845102240, -0.382651660957998850, -0.382697855114265850, -0.382744048313788220, +-0.382790240556450890, -0.382836431842137560, -0.382882622170733160, -0.382928811542122160, -0.382974999956189550, -0.383021187412819040, -0.383067373911895600, -0.383113559453303660, +-0.383159744036928260, -0.383205927662653100, -0.383252110330363160, -0.383298292039942870, -0.383344472791277310, -0.383390652584250150, -0.383436831418746290, -0.383483009294650460, +-0.383529186211847450, -0.383575362170221090, -0.383621537169656300, -0.383667711210038060, -0.383713884291250200, -0.383760056413177560, -0.383806227575704820, -0.383852397778716940, +-0.383898567022097630, -0.383944735305731920, -0.383990902629504300, -0.384037068993299920, -0.384083234397002430, -0.384129398840496850, -0.384175562323667790, -0.384221724846400210, +-0.384267886408577900, -0.384314047010085870, -0.384360206650808780, -0.384406365330631550, -0.384452523049437940, -0.384498679807113110, -0.384544835603541520, -0.384590990438608280, +-0.384637144312197140, -0.384683297224193200, -0.384729449174481370, -0.384775600162945490, -0.384821750189470620, -0.384867899253941440, -0.384914047356242850, -0.384960194496258730, +-0.385006340673874180, -0.385052485888973730, -0.385098630141442520, -0.385144773431164270, -0.385190915758024110, -0.385237057121906650, -0.385283197522697020, -0.385329336960278930, +-0.385375475434537480, -0.385421612945357370, -0.385467749492623630, -0.385513885076220140, -0.385560019696031870, -0.385606153351944040, -0.385652286043840330, -0.385698417771605960, +-0.385744548535125580, -0.385790678334284150, -0.385836807168965680, -0.385882935039055190, -0.385929061944437320, -0.385975187884997240, -0.386021312860618750, -0.386067436871187000, +-0.386113559916586690, -0.386159681996702860, -0.386205803111419390, -0.386251923260621470, -0.386298042444193690, -0.386344160662021210, -0.386390277913987950, -0.386436394199978990, +-0.386482509519879450, -0.386528623873573230, -0.386574737260945430, -0.386620849681880820, -0.386666961136264480, -0.386713071623980330, -0.386759181144913480, -0.386805289698948730, +-0.386851397285971120, -0.386897503905864640, -0.386943609558514370, -0.386989714243805070, -0.387035817961621900, -0.387081920711848770, -0.387128022494370890, -0.387174123309072920, +-0.387220223155840040, -0.387266322034556190, -0.387312419945106570, -0.387358516887376270, -0.387404612861249280, -0.387450707866610790, -0.387496801903345510, -0.387542894971338590, +-0.387588987070474070, -0.387635078200637080, -0.387681168361712400, -0.387727257553585170, -0.387773345776139420, -0.387819433029260310, -0.387865519312832640, -0.387911604626741510, +-0.387957688970871020, -0.388003772345106300, -0.388049854749332120, -0.388095936183433740, -0.388142016647295090, -0.388188096140801410, -0.388234174663837470, -0.388280252216288540, +-0.388326328798038580, -0.388372404408972750, -0.388418479048976310, -0.388464552717933290, -0.388510625415728890, -0.388556697142247940, -0.388602767897375630, -0.388648837680996010, +-0.388694906492994320, -0.388740974333255330, -0.388787041201664300, -0.388833107098105260, -0.388879172022463470, -0.388925235974623750, -0.388971298954471360, -0.389017360961890320, +-0.389063421996765860, -0.389109482058982830, -0.389155541148426540, -0.389201599264980940, -0.389247656408531370, -0.389293712578963060, -0.389339767776160080, -0.389385822000007650, +-0.389431875250390690, -0.389477927527194460, -0.389523978830302990, -0.389570029159601540, -0.389616078514975040, -0.389662126896308800, -0.389708174303486750, -0.389754220736394320, +-0.389800266194916370, -0.389846310678938100, -0.389892354188343670, -0.389938396723018330, -0.389984438282847010, -0.390030478867715020, -0.390076518477506410, -0.390122557112106530, +-0.390168594771400650, -0.390214631455272850, -0.390260667163608520, -0.390306701896292460, -0.390352735653210100, -0.390398768434245480, -0.390444800239283960, -0.390490831068210420, +-0.390536860920910170, -0.390582889797267410, -0.390628917697167450, -0.390674944620495120, -0.390720970567135890, -0.390766995536973800, -0.390813019529894280, -0.390859042545782130, +-0.390905064584522840, -0.390951085646000450, -0.390997105730100380, -0.391043124836707500, -0.391089142965707240, -0.391135160116983680, -0.391181176290422260, -0.391227191485908340, +-0.391273205703325970, -0.391319218942560610, -0.391365231203497200, -0.391411242486021100, -0.391457252790016530, -0.391503262115368790, -0.391549270461962920, -0.391595277829684290, +-0.391641284218417040, -0.391687289628046550, -0.391733294058457910, -0.391779297509536380, -0.391825299981166220, -0.391871301473232790, -0.391917301985621140, -0.391963301518216620, +-0.392009300070903450, -0.392055297643567060, -0.392101294236092750, -0.392147289848364890, -0.392193284480268740, -0.392239278131689410, -0.392285270802512300, -0.392331262492621570, +-0.392377253201902700, -0.392423242930240720, -0.392469231677521010, -0.392515219443627830, -0.392561206228446590, -0.392607192031862340, -0.392653176853760500, -0.392699160694025330, +-0.392745143552542250, -0.392791125429196360, -0.392837106323873030, -0.392883086236456510, -0.392929065166832290, -0.392975043114885790, -0.393021020080501330, -0.393066996063564270, +-0.393112971063959700, -0.393158945081573170, -0.393204918116288830, -0.393250890167992200, -0.393296861236568370, -0.393342831321902790, -0.393388800423879690, -0.393434768542384630, +-0.393480735677302630, -0.393526701828519180, -0.393572666995918590, -0.393618631179386340, -0.393664594378807520, -0.393710556594067620, -0.393756517825050890, -0.393802478071642870, +-0.393848437333729100, -0.393894395611193770, -0.393940352903922490, -0.393986309211800330, -0.394032264534712800, -0.394078218872544180, -0.394124172225180040, -0.394170124592505440, +-0.394216075974406000, -0.394262026370765910, -0.394307975781470750, -0.394353924206405690, -0.394399871645456200, -0.394445818098506600, -0.394491763565442520, -0.394537708046148960, +-0.394583651540511560, -0.394629594048414630, -0.394675535569743720, -0.394721476104384020, -0.394767415652220950, -0.394813354213138960, -0.394859291787023610, -0.394905228373760410, +-0.394951163973233770, -0.394997098585329160, -0.395043032209931870, -0.395088964846927400, -0.395134896496200040, -0.395180827157635530, -0.395226756831118910, -0.395272685516535770, +-0.395318613213770540, -0.395364539922708810, -0.395410465643235680, -0.395456390375236830, -0.395502314118596600, -0.395548236873200560, -0.395594158638933930, -0.395640079415682300, +-0.395685999203330090, -0.395731918001762880, -0.395777835810866290, -0.395823752630524660, -0.395869668460623660, -0.395915583301048530, -0.395961497151684830, -0.396007410012416960, +-0.396053321883130580, -0.396099232763710900, -0.396145142654043550, -0.396191051554012910, -0.396236959463504680, -0.396282866382404010, -0.396328772310596600, -0.396374677247966880, +-0.396420581194400430, -0.396466484149782530, -0.396512386113998860, -0.396558287086933750, -0.396604187068473000, -0.396650086058502160, -0.396695984056905650, -0.396741881063569220, +-0.396787777078378090, -0.396833672101217950, -0.396879566131973170, -0.396925459170529520, -0.396971351216772240, -0.397017242270586930, -0.397063132331858140, -0.397109021400471500, +-0.397154909476312320, -0.397200796559266270, -0.397246682649217810, -0.397292567746052700, -0.397338451849656100, -0.397384334959913820, -0.397430217076710280, -0.397476098199931180, +-0.397521978329461840, -0.397567857465188020, -0.397613735606994090, -0.397659612754765800, -0.397705488908388970, -0.397751364067747910, -0.397797238232728500, -0.397843111403215990, +-0.397888983579096130, -0.397934854760253360, -0.397980724946573490, -0.398026594137941780, -0.398072462334244040, -0.398118329535364690, -0.398164195741189500, -0.398210060951603830, +-0.398255925166493440, -0.398301788385742820, -0.398347650609237770, -0.398393511836863560, -0.398439372068505940, -0.398485231304049500, -0.398531089543380010, -0.398576946786383220, +-0.398622803032943620, -0.398668658282947010, -0.398714512536278760, -0.398760365792824640, -0.398806218052469190, -0.398852069315098200, -0.398897919580597060, -0.398943768848851520, +-0.398989617119746120, -0.399035464393166730, -0.399081310668998600, -0.399127155947127670, -0.399173000227438400, -0.399218843509816680, -0.399264685794147810, -0.399310527080317670, +-0.399356367368210790, -0.399402206657712980, -0.399448044948710060, -0.399493882241086620, -0.399539718534728470, -0.399585553829520990, -0.399631388125350100, -0.399677221422100330, +-0.399723053719657440, -0.399768885017906970, -0.399814715316734680, -0.399860544616025220, -0.399906372915664390, -0.399952200215537620, -0.399998026515530740, -0.400043851815528370, +-0.400089676115416400, -0.400135499415080250, -0.400181321714405790, -0.400227143013277550, -0.400272963311581460, -0.400318782609203390, -0.400364600906027990, -0.400410418201941070, +-0.400456234496828050, -0.400502049790574910, -0.400547864083066200, -0.400593677374187880, -0.400639489663825340, -0.400685300951864440, -0.400731111238189940, -0.400776920522687650, +-0.400822728805243060, -0.400868536085742020, -0.400914342364069250, -0.400960147640110620, -0.401005951913751660, -0.401051755184878180, -0.401097557453374940, -0.401143358719127820, +-0.401189158982022230, -0.401234958241944220, -0.401280756498778370, -0.401326553752410660, -0.401372350002726970, -0.401418145249611950, -0.401463939492951620, -0.401509732732631410, +-0.401555524968537300, -0.401601316200553950, -0.401647106428567320, -0.401692895652462910, -0.401738683872126690, -0.401784471087443360, -0.401830257298298800, -0.401876042504578650, +-0.401921826706168770, -0.401967609902953940, -0.402013392094820070, -0.402059173281652750, -0.402104953463337860, -0.402150732639760200, -0.402196510810805710, -0.402242287976360360, +-0.402288064136308850, -0.402333839290537230, -0.402379613438930970, -0.402425386581376110, -0.402471158717757350, -0.402516929847960720, -0.402562699971871770, -0.402608469089376420, +-0.402654237200359530, -0.402700004304707090, -0.402745770402304580, -0.402791535493038090, -0.402837299576792320, -0.402883062653453310, -0.402928824722906640, -0.402974585785038310, +-0.403020345839733120, -0.403066104886877110, -0.403111862926356200, -0.403157619958055210, -0.403203375981860180, -0.403249130997656750, -0.403294885005330840, -0.403340638004767330, +-0.403386389995852250, -0.403432140978471190, -0.403477890952510190, -0.403523639917854000, -0.403569387874388790, -0.403615134822000070, -0.403660880760573880, -0.403706625689995160, +-0.403752369610149820, -0.403798112520923570, -0.403843854422202440, -0.403889595313871310, -0.403935335195816150, -0.403981074067922660, -0.404026811930076890, -0.404072548782163700, +-0.404118284624069120, -0.404164019455679260, -0.404209753276878910, -0.404255486087554180, -0.404301217887590770, -0.404346948676874710, -0.404392678455290870, -0.404438407222725280, +-0.404484134979063710, -0.404529861724192250, -0.404575587457995710, -0.404621312180360180, -0.404667035891171370, -0.404712758590315410, -0.404758480277677080, -0.404804200953142620, +-0.404849920616597640, -0.404895639267928260, -0.404941356907019380, -0.404987073533757070, -0.405032789148027540, -0.405078503749715550, -0.405124217338707400, -0.405169929914888650, +-0.405215641478145480, -0.405261352028362830, -0.405307061565426780, -0.405352770089223050, -0.405398477599637820, -0.405444184096556030, -0.405489889579863760, -0.405535594049446720, +-0.405581297505191170, -0.405626999946981930, -0.405672701374705180, -0.405718401788246700, -0.405764101187492620, -0.405809799572327880, -0.405855496942638620, -0.405901193298311090, +-0.405946888639230120, -0.405992582965281900, -0.406038276276352250, -0.406083968572327310, -0.406129659853092070, -0.406175350118532670, -0.406221039368534880, -0.406266727602984930, +-0.406312414821767720, -0.406358101024769490, -0.406403786211876010, -0.406449470382973470, -0.406495153537946850, -0.406540835676682310, -0.406586516799065710, -0.406632196904983260, +-0.406677875994319870, -0.406723554066961760, -0.406769231122795230, -0.406814907161705210, -0.406860582183577900, -0.406906256188299120, -0.406951929175755120, -0.406997601145830890, +-0.407043272098412680, -0.407088942033386250, -0.407134610950637910, -0.407180278850052650, -0.407225945731516660, -0.407271611594915820, -0.407317276440136320, -0.407362940267063270, +-0.407408603075582850, -0.407454264865580900, -0.407499925636943710, -0.407545585389556320, -0.407591244123304940, -0.407636901838075490, -0.407682558533754180, -0.407728214210226040, +-0.407773868867377380, -0.407819522505094460, -0.407865175123262310, -0.407910826721767260, -0.407956477300495110, -0.408002126859332180, -0.408047775398163500, -0.408093422916875390, +-0.408139069415353770, -0.408184714893484850, -0.408230359351153760, -0.408276002788246720, -0.408321645204649750, -0.408367286600249010, -0.408412926974929650, -0.408458566328578020, +-0.408504204661079950, -0.408549841972321750, -0.408595478262188560, -0.408641113530566650, -0.408686747777342370, -0.408732381002400840, -0.408778013205628340, -0.408823644386910820, +-0.408869274546134590, -0.408914903683184780, -0.408960531797947720, -0.409006158890309280, -0.409051784960155870, -0.409097410007372650, -0.409143034031845820, -0.409188657033461470, +-0.409234279012105850, -0.409279899967664120, -0.409325519900022640, -0.409371138809067390, -0.409416756694684690, -0.409462373556759680, -0.409507989395178740, -0.409553604209828230, +-0.409599218000593290, -0.409644830767360300, -0.409690442510015300, -0.409736053228444530, -0.409781662922533260, -0.409827271592167810, -0.409872879237234200, -0.409918485857618750, +-0.409964091453206720, -0.410009696023884480, -0.410055299569538010, -0.410100902090053620, -0.410146503585316620, -0.410192104055213390, -0.410237703499629850, -0.410283301918452470, +-0.410328899311566410, -0.410374495678858140, -0.410420091020213650, -0.410465685335519300, -0.410511278624660300, -0.410556870887523180, -0.410602462123994210, -0.410648052333958740, +-0.410693641517303090, -0.410739229673913410, -0.410784816803676010, -0.410830402906476160, -0.410875987982200320, -0.410921572030734480, -0.410967155051965130, -0.411012737045777510, +-0.411058318012058000, -0.411103897950692740, -0.411149476861568160, -0.411195054744569410, -0.411240631599583070, -0.411286207426495130, -0.411331782225192120, -0.411377355995559250, +-0.411422928737482930, -0.411468500450849710, -0.411514071135544890, -0.411559640791454850, -0.411605209418465680, -0.411650777016463910, -0.411696343585334800, -0.411741909124964830, +-0.411787473635240100, -0.411833037116047070, -0.411878599567271080, -0.411924160988798580, -0.411969721380515690, -0.412015280742308860, -0.412060839074063430, -0.412106396375665930, +-0.412151952647002380, -0.412197507887959390, -0.412243062098422260, -0.412288615278277430, -0.412334167427411470, -0.412379718545709710, -0.412425268633058670, -0.412470817689344400, +-0.412516365714453550, -0.412561912708271360, -0.412607458670684380, -0.412653003601578750, -0.412698547500841010, -0.412744090368356520, -0.412789632204011770, -0.412835173007693010, +-0.412880712779286670, -0.412926251518678120, -0.412971789225753950, -0.413017325900400360, -0.413062861542503820, -0.413108396151949720, -0.413153929728624640, -0.413199462272415160, +-0.413244993783206560, -0.413290524260885530, -0.413336053705338210, -0.413381582116451100, -0.413427109494109660, -0.413472635838200430, -0.413518161148609620, -0.413563685425223810, +-0.413609208667928390, -0.413654730876609980, -0.413700252051154680, -0.413745772191449200, -0.413791291297378850, -0.413836809368830330, -0.413882326405689730, -0.413927842407843750, +-0.413973357375177710, -0.414018871307578310, -0.414064384204931750, -0.414109896067124620, -0.414155406894042340, -0.414200916685571520, -0.414246425441598840, -0.414291933162009740, +-0.414337439846690750, -0.414382945495528180, -0.414428450108408620, -0.414473953685217560, -0.414519456225841580, -0.414564957730166990, -0.414610458198080400, -0.414655957629467280, +-0.414701456024214270, -0.414746953382207570, -0.414792449703333950, -0.414837944987478780, -0.414883439234528750, -0.414928932444370120, -0.414974424616889550, -0.415019915751972500, +-0.415065405849505690, -0.415110894909375750, -0.415156382931468230, -0.415201869915669710, -0.415247355861866510, -0.415292840769945330, -0.415338324639791590, -0.415383807471292110, +-0.415429289264333090, -0.415474770018801230, -0.415520249734582070, -0.415565728411562310, -0.415611206049628200, -0.415656682648666450, -0.415702158208562660, -0.415747632729203400, +-0.415793106210475110, -0.415838578652264420, -0.415884050054456890, -0.415929520416939260, -0.415974989739598230, -0.416020458022319290, -0.416065925264989200, -0.416111391467494320, +-0.416156856629721410, -0.416202320751555890, -0.416247783832884580, -0.416293245873593840, -0.416338706873570330, -0.416384166832699740, -0.416429625750868670, -0.416475083627963540, +-0.416520540463871100, -0.416565996258476900, -0.416611451011667740, -0.416656904723329950, -0.416702357393350320, -0.416747809021614350, -0.416793259608008840, -0.416838709152420220, +-0.416884157654735240, -0.416929605114839450, -0.416975051532619660, -0.417020496907962610, -0.417065941240753910, -0.417111384530880420, -0.417156826778228410, -0.417202267982684780, +-0.417247708144135030, -0.417293147262466020, -0.417338585337564180, -0.417384022369316270, -0.417429458357607860, -0.417474893302325840, -0.417520327203356580, -0.417565760060586880, +-0.417611191873902440, -0.417656622643189980, -0.417702052368335960, -0.417747481049227210, -0.417792908685749360, -0.417838335277789240, -0.417883760825233710, -0.417929185327968300, +-0.417974608785880000, -0.418020031198855170, -0.418065452566780630, -0.418110872889542070, -0.418156292167026320, -0.418201710399119910, -0.418247127585709530, -0.418292543726680950, +-0.418337958821921040, -0.418383372871316220, -0.418428785874753410, -0.418474197832118200, -0.418519608743297470, -0.418565018608177740, -0.418610427426645890, -0.418655835198587510, +-0.418701241923889580, -0.418746647602438960, -0.418792052234121300, -0.418837455818823530, -0.418882858356432130, -0.418928259846833960, -0.418973660289914730, -0.419019059685561360, +-0.419064458033660330, -0.419109855334098560, -0.419155251586761760, -0.419200646791536850, -0.419246040948310310, -0.419291434056969060, -0.419336826117398810, -0.419382217129486530, +-0.419427607093118660, -0.419472996008182220, -0.419518383874562860, -0.419563770692147560, -0.419609156460822810, -0.419654541180475570, -0.419699924850991610, -0.419745307472257800, +-0.419790689044161170, -0.419836069566587370, -0.419881449039423430, -0.419926827462555830, -0.419972204835871610, -0.420017581159256470, -0.420062956432597330, -0.420108330655780850, +-0.420153703828693940, -0.420199075951222300, -0.420244447023253030, -0.420289817044672660, -0.420335186015368120, -0.420380553935225220, -0.420425920804130940, -0.420471286621971860, +-0.420516651388634920, -0.420562015104005980, -0.420607377767972020, -0.420652739380420030, -0.420698099941235750, -0.420743459450306220, -0.420788817907518100, -0.420834175312758300, +-0.420879531665912630, -0.420924886966868190, -0.420970241215511460, -0.421015594411729590, -0.421060946555408320, -0.421106297646434700, -0.421151647684695260, -0.421196996670077210, +-0.421242344602466180, -0.421287691481749330, -0.421333037307813240, -0.421378382080544960, -0.421423725799830340, -0.421469068465556370, -0.421514410077610150, -0.421559750635877530, +-0.421605090140245500, -0.421650428590600760, -0.421695765986830340, -0.421741102328820060, -0.421786437616457070, -0.421831771849628000, -0.421877105028219900, -0.421922437152118630, +-0.421967768221211240, -0.422013098235384470, -0.422058427194525350, -0.422103755098519720, -0.422149081947254760, -0.422194407740617060, -0.422239732478493720, -0.422285056160770720, +-0.422330378787335040, -0.422375700358073760, -0.422421020872872920, -0.422466340331619450, -0.422511658734200160, -0.422556976080502130, -0.422602292370411300, -0.422647607603814700, +-0.422692921780599080, -0.422738234900651540, -0.422783546963858000, -0.422828857970105660, -0.422874167919281120, -0.422919476811271570, -0.422964784645962930, -0.423010091423242360, +-0.423055397142996560, -0.423100701805112610, -0.423146005409476560, -0.423191307955975480, -0.423236609444496090, -0.423281909874925640, -0.423327209247150000, -0.423372507561056320, +-0.423417804816531800, -0.423463101013462300, -0.423508396151735080, -0.423553690231236900, -0.423598983251854910, -0.423644275213475030, -0.423689566115984460, -0.423734855959269960, +-0.423780144743218730, -0.423825432467716760, -0.423870719132651170, -0.423916004737908800, -0.423961289283376840, -0.424006572768941270, -0.424051855194489240, -0.424097136559907550, +-0.424142416865083470, -0.424187696109902870, -0.424232974294253110, -0.424278251418021280, -0.424323527481093420, -0.424368802483356730, -0.424414076424698080, -0.424459349305004620, +-0.424504621124162370, -0.424549891882058550, -0.424595161578580020, -0.424640430213614030, -0.424685697787046510, -0.424730964298764780, -0.424776229748655590, -0.424821494136606250, +-0.424866757462502800, -0.424912019726232440, -0.424957280927682040, -0.425002541066738790, -0.425047800143288860, -0.425093058157219370, -0.425138315108417650, -0.425183570996769790, +-0.425228825822162930, -0.425274079584484040, -0.425319332283620400, -0.425364583919457970, -0.425409834491884080, -0.425455084000785630, -0.425500332446049840, -0.425545579827562860, +-0.425590826145211880, -0.425636071398883880, -0.425681315588466060, -0.425726558713844570, -0.425771800774906670, -0.425817041771539280, -0.425862281703629720, -0.425907520571064010, +-0.425952758373729530, -0.425997995111513150, -0.426043230784302170, -0.426088465391982700, -0.426133698934442080, -0.426178931411567650, -0.426224162823245430, -0.426269393169362850, +-0.426314622449806780, -0.426359850664464520, -0.426405077813222230, -0.426450303895967280, -0.426495528912586570, -0.426540752862967440, -0.426585975746996030, -0.426631197564559640, +-0.426676418315545310, -0.426721637999840310, -0.426766856617330830, -0.426812074167904180, -0.426857290651447340, -0.426902506067847690, -0.426947720416991360, -0.426992933698765790, +-0.427038145913058220, -0.427083357059754920, -0.427128567138743200, -0.427173776149910090, -0.427218984093142910, -0.427264190968327910, -0.427309396775352400, -0.427354601514103370, +-0.427399805184468300, -0.427445007786333320, -0.427490209319585760, -0.427535409784112700, -0.427580609179801560, -0.427625807506538450, -0.427671004764210830, -0.427716200952705680, +-0.427761396071910490, -0.427806590121711350, -0.427851783101995730, -0.427896975012651120, -0.427942165853563590, -0.427987355624620700, -0.428032544325709420, -0.428077731956717170, +-0.428122918517530150, -0.428168104008035900, -0.428213288428121340, -0.428258471777674010, -0.428303654056580050, -0.428348835264727000, -0.428394015402001840, -0.428439194468292040, +-0.428484372463483810, -0.428529549387464740, -0.428574725240121750, -0.428619900021342310, -0.428665073731012760, -0.428710246369020550, -0.428755417935253070, -0.428800588429596670, +-0.428845757851938790, -0.428890926202166570, -0.428936093480167370, -0.428981259685827570, -0.429026424819034580, -0.429071588879675560, -0.429116751867637980, -0.429161913782808100, +-0.429207074625073460, -0.429252234394321090, -0.429297393090438570, -0.429342550713312180, -0.429387707262829380, -0.429432862738877320, -0.429478017141343480, -0.429523170470114240, +-0.429568322725077060, -0.429613473906119090, -0.429658624013127820, -0.429703773045989560, -0.429748921004591890, -0.429794067888822350, -0.429839213698567200, -0.429884358433714030, +-0.429929502094149930, -0.429974644679762540, -0.430019786190438070, -0.430064926626064210, -0.430110065986527960, -0.430155204271717000, -0.430200341481517590, -0.430245477615817380, +-0.430290612674503410, -0.430335746657463380, -0.430380879564583540, -0.430426011395751480, -0.430471142150854410, -0.430516271829779920, -0.430561400432414310, -0.430606527958645240, +-0.430651654408360170, -0.430696779781445660, -0.430741904077789120, -0.430787027297277860, -0.430832149439799420, -0.430877270505240220, -0.430922390493487850, -0.430967509404429520, +-0.431012627237952750, -0.431057743993944090, -0.431102859672291010, -0.431147974272880820, -0.431193087795601060, -0.431238200240338210, -0.431283311606979860, -0.431328421895413210, +-0.431373531105525900, -0.431418639237204420, -0.431463746290336290, -0.431508852264809170, -0.431553957160509590, -0.431599060977325030, -0.431644163715142910, -0.431689265373850720, +-0.431734365953334980, -0.431779465453483340, -0.431824563874183050, -0.431869661215321720, -0.431914757476785820, -0.431959852658463090, -0.432004946760240700, -0.432050039782006290, +-0.432095131723646440, -0.432140222585048750, -0.432185312366100530, -0.432230401066689360, -0.432275488686701850, -0.432320575226025570, -0.432365660684547900, -0.432410745062156430, +-0.432455828358737750, -0.432500910574179440, -0.432545991708369330, -0.432591071761193770, -0.432636150732540580, -0.432681228622296970, -0.432726305430350730, -0.432771381156588310, +-0.432816455800897450, -0.432861529363165410, -0.432906601843280000, -0.432951673241127650, -0.432996743556596120, -0.433041812789572710, -0.433086880939945180, -0.433131948007600080, +-0.433177013992425090, -0.433222078894307580, -0.433267142713135270, -0.433312205448794670, -0.433357267101173620, -0.433402327670159740, -0.433447387155639690, -0.433492445557501100, +-0.433537502875631480, -0.433582559109918440, -0.433627614260248650, -0.433672668326509800, -0.433717721308589270, -0.433762773206374850, -0.433807824019753100, -0.433852873748611810, +-0.433897922392838310, -0.433942969952320400, -0.433988016426944680, -0.434033061816598900, -0.434078106121170480, -0.434123149340547190, -0.434168191474615610, -0.434213232523263600, +-0.434258272486378880, -0.434303311363848090, -0.434348349155558980, -0.434393385861399030, -0.434438421481256000, -0.434483456015016530, -0.434528489462568450, -0.434573521823799100, +-0.434618553098596370, -0.434663583286846840, -0.434708612388438390, -0.434753640403258370, -0.434798667331194650, -0.434843693172133890, -0.434888717925963840, -0.434933741592572090, +-0.434978764171846280, -0.435023785663673220, -0.435068806067940680, -0.435113825384536580, -0.435158843613347450, -0.435203860754261210, -0.435248876807165340, -0.435293891771947660, +-0.435338905648494870, -0.435383918436694830, -0.435428930136434970, -0.435473940747603210, -0.435518950270086190, -0.435563958703771790, -0.435608966048547490, -0.435653972304301140, +-0.435698977470919510, -0.435743981548290420, -0.435788984536301380, -0.435833986434840280, -0.435878987243793810, -0.435923986963049850, -0.435968985592495970, -0.436013983132020000, +-0.436058979581508630, -0.436103974940849900, -0.436148969209931570, -0.436193962388640440, -0.436238954476864390, -0.436283945474490950, -0.436328935381408100, -0.436373924197502430, +-0.436418911922662020, -0.436463898556774310, -0.436508884099727210, -0.436553868551407540, -0.436598851911703220, -0.436643834180501730, -0.436688815357691050, -0.436733795443157990, +-0.436778774436790360, -0.436823752338475870, -0.436868729148102370, -0.436913704865556640, -0.436958679490726640, -0.437003653023500360, -0.437048625463764550, -0.437093596811407140, +-0.437138567066315760, -0.437183536228378360, -0.437228504297481720, -0.437273471273513850, -0.437318437156362260, -0.437363401945915000, -0.437408365642058870, -0.437453328244681750, +-0.437498289753671390, -0.437543250168915650, -0.437588209490301420, -0.437633167717716600, -0.437678124851048900, -0.437723080890186300, -0.437768035835015610, -0.437812989685424810, +-0.437857942441301940, -0.437902894102533800, -0.437947844669008430, -0.437992794140613480, -0.438037742517236930, -0.438082689798765580, -0.438127635985087580, -0.438172581076090420, +-0.438217525071662230, -0.438262467971689830, -0.438307409776061310, -0.438352350484664200, -0.438397290097386650, -0.438442228614115470, -0.438487166034738700, -0.438532102359144030, +-0.438577037587219500, -0.438621971718851980, -0.438666904753929500, -0.438711836692339760, -0.438756767533970860, -0.438801697278709660, -0.438846625926444190, -0.438891553477062550, +-0.438936479930451650, -0.438981405286499540, -0.439026329545093910, -0.439071252706122850, -0.439116174769473230, -0.439161095735033260, -0.439206015602690460, -0.439250934372333090, +-0.439295852043847970, -0.439340768617123180, -0.439385684092046480, -0.439430598468506020, -0.439475511746388600, -0.439520423925582440, -0.439565335005975220, -0.439610244987455050, +-0.439655153869908830, -0.439700061653224780, -0.439744968337290990, -0.439789873921994310, -0.439834778407223010, -0.439879681792864740, -0.439924584078807690, -0.439969485264938730, +-0.440014385351146060, -0.440059284337317500, -0.440104182223341080, -0.440149079009103770, -0.440193974694493840, -0.440238869279398930, -0.440283762763707230, -0.440328655147305740, +-0.440373546430082590, -0.440418436611925590, -0.440463325692722950, -0.440508213672361540, -0.440553100550729600, -0.440597986327715300, -0.440642871003205650, -0.440687754577088860, +-0.440732637049252640, -0.440777518419585230, -0.440822398687973630, -0.440867277854306020, -0.440912155918470220, -0.440957032880354480, -0.441001908739845680, -0.441046783496832180, +-0.441091657151201690, -0.441136529702842450, -0.441181401151641450, -0.441226271497487000, -0.441271140740266850, -0.441316008879869270, -0.441360875916181280, -0.441405741849091090, +-0.441450606678486900, -0.441495470404255850, -0.441540333026286090, -0.441585194544465490, -0.441630054958682350, -0.441674914268823600, -0.441719772474777620, -0.441764629576432200, +-0.441809485573675610, -0.441854340466394880, -0.441899194254478320, -0.441944046937813810, -0.441988898516289530, -0.442033748989792640, -0.442078598358211340, -0.442123446621433550, +-0.442168293779347580, -0.442213139831840460, -0.442257984778800460, -0.442302828620115550, -0.442347671355673930, -0.442392512985362750, -0.442437353509070260, -0.442482192926684780, +-0.442527031238093450, -0.442571868443184580, -0.442616704541845980, -0.442661539533966030, -0.442706373419431810, -0.442751206198131690, -0.442796037869953580, -0.442840868434785710, +-0.442885697892515310, -0.442930526243030640, -0.442975353486219690, -0.443020179621970770, -0.443065004650170960, -0.443109828570708630, -0.443154651383471760, -0.443199473088348620, +-0.443244293685226440, -0.443289113173993500, -0.443333931554538210, -0.443378748826747660, -0.443423564990510280, -0.443468380045713930, -0.443513193992247030, -0.443558006829996800, +-0.443602818558851530, -0.443647629178699210, -0.443692438689428200, -0.443737247090925710, -0.443782054383080100, -0.443826860565779360, -0.443871665638911890, -0.443916469602364800, +-0.443961272456026570, -0.444006074199785160, -0.444050874833528950, -0.444095674357145200, -0.444140472770522210, -0.444185270073548470, -0.444230066266111110, -0.444274861348098630, +-0.444319655319398990, -0.444364448179900620, -0.444409239929490720, -0.444454030568057710, -0.444498820095489630, -0.444543608511674900, -0.444588395816500730, -0.444633182009855580, +-0.444677967091627490, -0.444722751061704890, -0.444767533919974980, -0.444812315666326290, -0.444857096300646740, -0.444901875822824920, -0.444946654232747980, -0.444991431530304400, +-0.445036207715382210, -0.445080982787869950, -0.445125756747654810, -0.445170529594625270, -0.445215301328669820, -0.445260071949675760, -0.445304841457531460, -0.445349609852125070, +-0.445394377133345070, -0.445439143301078700, -0.445483908355214510, -0.445528672295640530, -0.445573435122245230, -0.445618196834915990, -0.445662957433541280, -0.445707716918009140, +-0.445752475288208110, -0.445797232544025480, -0.445841988685349800, -0.445886743712069160, -0.445931497624072030, -0.445976250421245720, -0.446021002103478840, -0.446065752670659840, +-0.446110502122676060, -0.446155250459416010, -0.446199997680767850, -0.446244743786620100, -0.446289488776860090, -0.446334232651376340, -0.446378975410057060, -0.446423717052790660, +-0.446468457579464630, -0.446513196989967440, -0.446557935284187250, -0.446602672462012630, -0.446647408523330900, -0.446692143468030710, -0.446736877296000090, -0.446781610007127740, +-0.446826341601300910, -0.446871072078408260, -0.446915801438338310, -0.446960529680978490, -0.447005256806217330, -0.447049982813943040, -0.447094707704044190, -0.447139431476408170, +-0.447184154130923550, -0.447228875667478540, -0.447273596085961730, -0.447318315386260600, -0.447363033568263620, -0.447407750631859060, -0.447452466576935550, -0.447497181403380460, +-0.447541895111082440, -0.447586607699929640, -0.447631319169810750, -0.447676029520613140, -0.447720738752225510, -0.447765446864536340, -0.447810153857433220, -0.447854859730804740, +-0.447899564484539050, -0.447944268118524890, -0.447988970632649640, -0.448033672026801940, -0.448078372300870110, -0.448123071454742730, -0.448167769488307280, -0.448212466401452400, +-0.448257162194066310, -0.448301856866037800, -0.448346550417254190, -0.448391242847604180, -0.448435934156976130, -0.448480624345258590, -0.448525313412339140, -0.448570001358106370, +-0.448614688182448600, -0.448659373885254510, -0.448704058466411590, -0.448748741925808550, -0.448793424263334020, -0.448838105478875540, -0.448882785572321810, -0.448927464543561080, +-0.448972142392482120, -0.449016819118972400, -0.449061494722920620, -0.449106169204215140, -0.449150842562744570, -0.449195514798396590, -0.449240185911059740, -0.449284855900622450, +-0.449329524766973410, -0.449374192510000160, -0.449418859129591450, -0.449463524625635600, -0.449508188998021310, -0.449552852246636160, -0.449597514371368910, -0.449642175372108210, +-0.449686835248741700, -0.449731494001158140, -0.449776151629245780, -0.449820808132893490, -0.449865463511988750, -0.449910117766420370, -0.449954770896076720, -0.449999422900846490, +-0.450044073780617340, -0.450088723535277960, -0.450133372164716830, -0.450178019668822650, -0.450222666047483010, -0.450267311300586730, -0.450311955428022100, -0.450356598429678070, +-0.450401240305442100, -0.450445881055203000, -0.450490520678849650, -0.450535159176269630, -0.450579796547351640, -0.450624432791984160, -0.450669067910056060, -0.450713701901454820, +-0.450758334766069360, -0.450802966503788090, -0.450847597114499730, -0.450892226598092080, -0.450936854954453790, -0.450981482183473390, -0.451026108285039640, -0.451070733259040290, +-0.451115357105364050, -0.451159979823899440, -0.451204601414535280, -0.451249221877159210, -0.451293841211660110, -0.451338459417926390, -0.451383076495846910, -0.451427692445309340, +-0.451472307266202580, -0.451516920958415390, -0.451561533521835530, -0.451606144956351820, -0.451650755261852780, -0.451695364438227220, -0.451739972485362910, -0.451784579403148590, +-0.451829185191472860, -0.451873789850224580, -0.451918393379291410, -0.451962995778562250, -0.452007597047925590, -0.452052197187270350, -0.452096796196484240, -0.452141394075456120, +-0.452185990824074510, -0.452230586442228300, -0.452275180929805290, -0.452319774286694290, -0.452364366512784220, -0.452408957607962900, -0.452453547572119140, -0.452498136405141530, +-0.452542724106918980, -0.452587310677339210, -0.452631896116291180, -0.452676480423663370, -0.452721063599344830, -0.452765645643223190, -0.452810226555187430, -0.452854806335126090, +-0.452899384982928140, -0.452943962498481350, -0.452988538881674670, -0.453033114132396610, -0.453077688250536180, -0.453122261235981090, -0.453166833088620380, -0.453211403808343020, +-0.453255973395036700, -0.453300541848590480, -0.453345109168892870, -0.453389675355832910, -0.453434240409298360, -0.453478804329178200, -0.453523367115361060, -0.453567928767735880, +-0.453612489286190470, -0.453657048670613850, -0.453701606920894620, -0.453746164036921750, -0.453790720018583060, -0.453835274865767580, -0.453879828578363950, -0.453924381156261100, +-0.453968932599346900, -0.454013482907510420, -0.454058032080640610, -0.454102580118625310, -0.454147127021353510, -0.454191672788713970, -0.454236217420595610, -0.454280760916886350, +-0.454325303277475110, -0.454369844502250650, -0.454414384591102010, -0.454458923543916980, -0.454503461360584670, -0.454547998040993660, -0.454592533585033100, -0.454637067992590740, +-0.454681601263555780, -0.454726133397816810, -0.454770664395262870, -0.454815194255781870, -0.454859722979262910, -0.454904250565594640, -0.454948777014666130, -0.454993302326365310, +-0.455037826500581220, -0.455082349537202950, -0.455126871436118410, -0.455171392197216700, -0.455215911820386450, -0.455260430305516880, -0.455304947652495850, -0.455349463861212440, +-0.455393978931555370, -0.455438492863413700, -0.455483005656675430, -0.455527517311229700, -0.455572027826965150, -0.455616537203770880, -0.455661045441534910, -0.455705552540146330, +-0.455750058499493850, -0.455794563319466610, -0.455839066999952580, -0.455883569540840920, -0.455928070942020700, -0.455972571203379860, -0.456017070324807650, -0.456061568306192770, +-0.456106065147424360, -0.456150560848390340, -0.456195055408979980, -0.456239548829081960, -0.456284041108585450, -0.456328532247378460, -0.456373022245350150, -0.456417511102389260, +-0.456461998818385010, -0.456506485393225360, -0.456550970826799460, -0.456595455118996190, -0.456639938269704610, -0.456684420278812840, -0.456728901146210010, -0.456773380871785370, +-0.456817859455426800, -0.456862336897023660, -0.456906813196464590, -0.456951288353638960, -0.456995762368434700, -0.457040235240741000, -0.457084706970446730, -0.457129177557441090, +-0.457173647001612120, -0.457218115302849000, -0.457262582461040620, -0.457307048476076170, -0.457351513347843690, -0.457395977076232470, -0.457440439661131240, -0.457484901102429340, +-0.457529361400014820, -0.457573820553776880, -0.457618278563604370, -0.457662735429386620, -0.457707191151011550, -0.457751645728368570, -0.457796099161346840, -0.457840551449834490, +-0.457885002593720720, -0.457929452592894470, -0.457973901447244980, -0.458018349156660340, -0.458062795721029810, -0.458107241140242320, -0.458151685414187100, -0.458196128542752320, +-0.458240570525827170, -0.458285011363300580, -0.458329451055061900, -0.458373889600999170, -0.458418327001001770, -0.458462763254958490, -0.458507198362758720, -0.458551632324290530, +-0.458596065139443290, -0.458640496808106310, -0.458684927330167640, -0.458729356705516680, -0.458773784934042310, -0.458818212015633890, -0.458862637950179560, -0.458907062737568590, +-0.458951486377690010, -0.458995908870433070, -0.459040330215686020, -0.459084750413338070, -0.459129169463278310, -0.459173587365395990, -0.459218004119579300, -0.459262419725717570, +-0.459306834183699890, -0.459351247493415440, -0.459395659654752490, -0.459440070667600400, -0.459484480531848540, -0.459528889247385050, -0.459573296814099360, -0.459617703231880390, +-0.459662108500617620, -0.459706512620199130, -0.459750915590514400, -0.459795317411452350, -0.459839718082902470, -0.459884117604752840, -0.459928515976892880, -0.459972913199211690, +-0.460017309271598620, -0.460061704193941820, -0.460106097966130830, -0.460150490588054570, -0.460194882059602460, -0.460239272380662760, -0.460283661551124880, -0.460328049570878250, +-0.460372436439811070, -0.460416822157812820, -0.460461206724772530, -0.460505590140579620, -0.460549972405122300, -0.460594353518290090, -0.460638733479971970, -0.460683112290057430, +-0.460727489948434710, -0.460771866454993300, -0.460816241809622160, -0.460860616012210840, -0.460904989062647600, -0.460949360960821840, -0.460993731706622720, -0.461038101299939660, +-0.461082469740660970, -0.461126837028676070, -0.461171203163874110, -0.461215568146144510, -0.461259931975375570, -0.461304294651456840, -0.461348656174277780, -0.461393016543726660, +-0.461437375759693010, -0.461481733822065920, -0.461526090730734860, -0.461570446485588200, -0.461614801086515480, -0.461659154533405670, -0.461703506826148410, -0.461747857964632020, +-0.461792207948745930, -0.461836556778379310, -0.461880904453421730, -0.461925250973761530, -0.461969596339288140, -0.462013940549890760, -0.462058283605458970, -0.462102625505881050, +-0.462146966251046560, -0.462191305840845060, -0.462235644275164890, -0.462279981553895600, -0.462324317676926390, -0.462368652644146780, -0.462412986455445100, -0.462457319110710970, +-0.462501650609833560, -0.462545980952702440, -0.462590310139205930, -0.462634638169233670, -0.462678965042674810, -0.462723290759418930, -0.462767615319354400, -0.462811938722370860, +-0.462856260968357470, -0.462900582057203800, -0.462944901988798340, -0.462989220763030560, -0.463033538379790170, -0.463077854838965520, -0.463122170140446210, -0.463166484284121550, +-0.463210797269881010, -0.463255109097613080, -0.463299419767207400, -0.463343729278553160, -0.463388037631540020, -0.463432344826056330, -0.463476650861991860, -0.463520955739235680, +-0.463565259457677570, -0.463609562017205880, -0.463653863417710310, -0.463698163659080060, -0.463742462741204790, -0.463786760663973010, -0.463831057427274320, -0.463875353030997920, +-0.463919647475033610, -0.463963940759269720, -0.464008232883596050, -0.464052523847902130, -0.464096813652076560, -0.464141102296008910, -0.464185389779588560, -0.464229676102705100, +-0.464273961265247060, -0.464318245267104080, -0.464362528108165530, -0.464406809788321050, -0.464451090307459120, -0.464495369665469500, -0.464539647862241440, -0.464583924897664650, +-0.464628200771627640, -0.464672475484020130, -0.464716749034731480, -0.464761021423651330, -0.464805292650668220, -0.464849562715671900, -0.464893831618552020, -0.464938099359197220, +-0.464982365937497140, -0.465026631353341160, -0.465070895606618960, -0.465115158697219200, -0.465159420625031460, -0.465203681389945220, -0.465247940991850180, -0.465292199430634880, +-0.465336456706189060, -0.465380712818402100, -0.465424967767163800, -0.465469221552362640, -0.465513474173888440, -0.465557725631630560, -0.465601975925478750, -0.465646225055321610, +-0.465690473021048930, -0.465734719822550440, -0.465778965459714760, -0.465823209932431650, -0.465867453240590530, -0.465911695384081170, -0.465955936362792200, -0.466000176176613320, +-0.466044414825434070, -0.466088652309144150, -0.466132888627632250, -0.466177123780788070, -0.466221357768501100, -0.466265590590661140, -0.466309822247156780, -0.466354052737877890, +-0.466398282062713830, -0.466442510221554530, -0.466486737214288520, -0.466530963040805660, -0.466575187700995820, -0.466619411194747590, -0.466663633521950840, -0.466707854682494980, +-0.466752074676269890, -0.466796293503164210, -0.466840511163067850, -0.466884727655870190, -0.466928942981461090, -0.466973157139729200, -0.467017370130564490, -0.467061581953856330, +-0.467105792609494590, -0.467150002097368010, -0.467194210417366360, -0.467238417569379230, -0.467282623553296470, -0.467326828369006740, -0.467371032016399900, -0.467415234495365540, +-0.467459435805793470, -0.467503635947572380, -0.467547834920592260, -0.467592032724742920, -0.467636229359913110, -0.467680424825992700, -0.467724619122871220, -0.467768812250438650, +-0.467813004208583630, -0.467857194997196080, -0.467901384616165540, -0.467945573065381930, -0.467989760344734000, -0.468033946454111670, -0.468078131393404480, -0.468122315162502360, +-0.468166497761294040, -0.468210679189669520, -0.468254859447518270, -0.468299038534730260, -0.468343216451194260, -0.468387393196800230, -0.468431568771438100, -0.468475743174996680, +-0.468519916407365900, -0.468564088468435280, -0.468608259358094910, -0.468652429076233450, -0.468696597622740910, -0.468740764997506890, -0.468784931200421360, -0.468829096231373090, +-0.468873260090252100, -0.468917422776947920, -0.468961584291350600, -0.469005744633348930, -0.469049903802832900, -0.469094061799692150, -0.469138218623816610, -0.469182374275095070, +-0.469226528753417640, -0.469270682058674340, -0.469314834190753870, -0.469358985149546330, -0.469403134934941350, -0.469447283546828910, -0.469491430985097820, -0.469535577249638240, +-0.469579722340339620, -0.469623866257092180, -0.469668008999784610, -0.469712150568307060, -0.469756290962549120, -0.469800430182400860, -0.469844568227751110, -0.469888705098489960, +-0.469932840794507030, -0.469976975315692440, -0.470021108661934970, -0.470065240833124730, -0.470109371829151410, -0.470153501649905050, -0.470197630295274500, -0.470241757765149930, +-0.470285884059421340, -0.470330009177977630, -0.470374133120708910, -0.470418255887504850, -0.470462377478255590, -0.470506497892849930, -0.470550617131178070, -0.470594735193129670, +-0.470638852078594790, -0.470682967787462380, -0.470727082319622570, -0.470771195674965060, -0.470815307853379940, -0.470859418854756180, -0.470903528678983880, -0.470947637325952740, +-0.470991744795552890, -0.471035851087673320, -0.471079956202204050, -0.471124060139035350, -0.471168162898056080, -0.471212264479156430, -0.471256364882226110, -0.471300464107155260, +-0.471344562153832860, -0.471388659022149050, -0.471432754711993580, -0.471476849223256610, -0.471520942555827160, -0.471565034709595320, -0.471609125684450960, -0.471653215480284100, +-0.471697304096983850, -0.471741391534440340, -0.471785477792543320, -0.471829562871183050, -0.471873646770248460, -0.471917729489629730, -0.471961811029217080, -0.472005891388899480, +-0.472049970568567230, -0.472094048568109990, -0.472138125387418010, -0.472182201026380370, -0.472226275484887210, -0.472270348762828360, -0.472314420860094060, -0.472358491776573300, +-0.472402561512156260, -0.472446630066732880, -0.472490697440193290, -0.472534763632426580, -0.472578828643322960, -0.472622892472772230, -0.472666955120664700, -0.472711016586889410, +-0.472755076871336500, -0.472799135973895950, -0.472843193894457950, -0.472887250632911590, -0.472931306189147080, -0.472975360563054730, -0.473019413754523550, -0.473063465763443820, +-0.473107516589705460, -0.473151566233198710, -0.473195614693812660, -0.473239661971437520, -0.473283708065963260, -0.473327752977280140, -0.473371796705277180, -0.473415839249844760, +-0.473459880610872800, -0.473503920788251490, -0.473547959781869980, -0.473591997591618520, -0.473636034217387150, -0.473680069659066060, -0.473724103916544400, -0.473768136989712490, +-0.473812168878460560, -0.473856199582677880, -0.473900229102254710, -0.473944257437080960, -0.473988284587046950, -0.474032310552041870, -0.474076335331955980, -0.474120358926679250, +-0.474164381336102000, -0.474208402560113430, -0.474252422598603840, -0.474296441451463210, -0.474340459118581860, -0.474384475599848980, -0.474428490895154880, -0.474472505004389590, +-0.474516517927443430, -0.474560529664205530, -0.474604540214566380, -0.474648549578416230, -0.474692557755644280, -0.474736564746141010, -0.474780570549796280, -0.474824575166500560, +-0.474868578596142950, -0.474912580838613930, -0.474956581893803460, -0.475000581761601930, -0.475044580441898510, -0.475088577934583700, -0.475132574239547410, -0.475176569356680070, +-0.475220563285870920, -0.475264556027010400, -0.475308547579988470, -0.475352537944695560, -0.475396527121020870, -0.475440515108854930, -0.475484501908088050, -0.475528487518609540, +-0.475572471940309830, -0.475616455173078930, -0.475660437216807230, -0.475704418071384140, -0.475748397736699910, -0.475792376212644750, -0.475836353499109020, -0.475880329595982030, +-0.475924304503154210, -0.475968278220515630, -0.476012250747956720, -0.476056222085366800, -0.476100192232636330, -0.476144161189655410, -0.476188128956314460, -0.476232095532502790, +-0.476276060918110870, -0.476320025113028790, -0.476363988117147090, -0.476407949930355010, -0.476451910552543050, -0.476495869983601660, -0.476539828223420280, -0.476583785271889270, +-0.476627741128898830, -0.476671695794339430, -0.476715649268100390, -0.476759601550072190, -0.476803552640145010, -0.476847502538209340, -0.476891451244154550, -0.476935398757871110, +-0.476979345079249220, -0.477023290208179300, -0.477067234144550770, -0.477111176888254160, -0.477155118439179630, -0.477199058797217690, -0.477242997962257660, -0.477286935934190190, +-0.477330872712905750, -0.477374808298293760, -0.477418742690244760, -0.477462675888648880, -0.477506607893396660, -0.477550538704377580, -0.477594468321482170, -0.477638396744600570, +-0.477682323973623370, -0.477726250008439930, -0.477770174848940910, -0.477814098495016440, -0.477858020946557100, -0.477901942203452330, -0.477945862265592710, -0.477989781132868440, +-0.478033698805170100, -0.478077615282387130, -0.478121530564410090, -0.478165444651129650, -0.478209357542435210, -0.478253269238217370, -0.478297179738366330, -0.478341089042772730, +-0.478384997151326040, -0.478428904063916860, -0.478472809780435440, -0.478516714300772360, -0.478560617624817110, -0.478604519752460320, -0.478648420683592200, -0.478692320418103450, +-0.478736218955883470, -0.478780116296822990, -0.478824012440812240, -0.478867907387741760, -0.478911801137501200, -0.478955693689981140, -0.478999585045071790, -0.479043475202663880, +-0.479087364162646910, -0.479131251924911570, -0.479175138489348450, -0.479219023855847080, -0.479262908024298160, -0.479306790994591950, -0.479350672766619190, -0.479394553340269370, +-0.479438432715433130, -0.479482310892000830, -0.479526187869863120, -0.479570063648909530, -0.479613938229030810, -0.479657811610117280, -0.479701683792059570, -0.479745554774747280, +-0.479789424558071110, -0.479833293141921360, -0.479877160526188730, -0.479921026710762870, -0.479964891695534410, -0.480008755480394120, -0.480052618065231580, -0.480096479449937440, +-0.480140339634402170, -0.480184198618516360, -0.480228056402169760, -0.480271912985252960, -0.480315768367656380, -0.480359622549270780, -0.480403475529985690, -0.480447327309691970, +-0.480491177888279890, -0.480535027265640290, -0.480578875441662720, -0.480622722416237940, -0.480666568189256400, -0.480710412760608770, -0.480754256130184800, -0.480798098297875120, +-0.480841939263570610, -0.480885779027160840, -0.480929617588536640, -0.480973454947588420, -0.481017291104206930, -0.481061126058281830, -0.481104959809703910, -0.481148792358363550, +-0.481192623704151670, -0.481236453846957790, -0.481280282786672790, -0.481324110523187130, -0.481367937056391530, -0.481411762386175670, -0.481455586512430480, -0.481499409435046270, +-0.481543231153913950, -0.481587051668923130, -0.481630870979964710, -0.481674689086929510, -0.481718505989707220, -0.481762321688188610, -0.481806136182264200, -0.481849949471824910, +-0.481893761556760280, -0.481937572436961280, -0.481981382112318340, -0.482025190582722360, -0.482068997848062950, -0.482112803908231080, -0.482156608763117220, -0.482200412412612240, +-0.482244214856605790, -0.482288016094988840, -0.482331816127651860, -0.482375614954485670, -0.482419412575380120, -0.482463208990225990, -0.482507004198913850, -0.482550798201334620, +-0.482594590997377950, -0.482638382586934870, -0.482682172969896180, -0.482725962146151650, -0.482769750115592260, -0.482813536878108460, -0.482857322433591250, -0.482901106781930320, +-0.482944889923016600, -0.482988671856740660, -0.483032452582993430, -0.483076232101664730, -0.483120010412645410, -0.483163787515826060, -0.483207563411097660, -0.483251338098349910, +-0.483295111577473850, -0.483338883848360050, -0.483382654910899380, -0.483426424764981710, -0.483470193410497960, -0.483513960847339110, -0.483557727075394960, -0.483601492094556500, +-0.483645255904714300, -0.483689018505759400, -0.483732779897581510, -0.483776540080071700, -0.483820299053120520, -0.483864056816619040, -0.483907813370456960, -0.483951568714525380, +-0.483995322848714880, -0.484039075772916440, -0.484082827487019920, -0.484126577990916350, -0.484170327284496330, -0.484214075367650880, -0.484257822240269860, -0.484301567902244270, +-0.484345312353465170, -0.484389055593822390, -0.484432797623206960, -0.484476538441509560, -0.484520278048621190, -0.484564016444431760, -0.484607753628832240, -0.484651489601713340, +-0.484695224362966140, -0.484738957912480510, -0.484782690250147420, -0.484826421375857630, -0.484870151289502230, -0.484913879990970960, -0.484957607480155100, -0.485001333756945150, +-0.485045058821232280, -0.485088782672906340, -0.485132505311858480, -0.485176226737979330, -0.485219946951160050, -0.485263665951290450, -0.485307383738261770, -0.485351100311964930, +-0.485394815672289980, -0.485438529819128000, -0.485482242752369730, -0.485525954471906160, -0.485569664977627380, -0.485613374269424410, -0.485657082347188070, -0.485700789210809340, +-0.485744494860178290, -0.485788199295185960, -0.485831902515723170, -0.485875604521680990, -0.485919305312949410, -0.485963004889419570, -0.486006703250982220, -0.486050400397528500, +-0.486094096328948400, -0.486137791045133050, -0.486181484545973600, -0.486225176831360070, -0.486268867901183570, -0.486312557755334940, -0.486356246393705280, -0.486399933816184630, +-0.486443620022664110, -0.486487305013034610, -0.486530988787187150, -0.486574671345011870, -0.486618352686399910, -0.486662032811242100, -0.486705711719429560, -0.486749389410852380, +-0.486793065885401720, -0.486836741142968380, -0.486880415183443550, -0.486924088006717330, -0.486967759612680910, -0.487011430001225430, -0.487055099172241050, -0.487098767125618890, +-0.487142433861249780, -0.487186099379025020, -0.487229763678834580, -0.487273426760569780, -0.487317088624121380, -0.487360749269380670, -0.487404408696237690, -0.487448066904583640, +-0.487491723894309500, -0.487535379665306410, -0.487579034217464460, -0.487622687550674950, -0.487666339664828700, -0.487709990559817010, -0.487753640235529920, -0.487797288691858790, +-0.487840935928694760, -0.487884581945928040, -0.487928226743449880, -0.487971870321151140, -0.488015512678923120, -0.488059153816655930, -0.488102793734240810, -0.488146432431568740, +-0.488190069908530980, -0.488233706165017660, -0.488277341200920090, -0.488320975016129140, -0.488364607610536130, -0.488408238984031240, -0.488451869136505730, -0.488495498067850590, +-0.488539125777957050, -0.488582752266715330, -0.488626377534016720, -0.488670001579752160, -0.488713624403813000, -0.488757246006089390, -0.488800866386472630, -0.488844485544854160, +-0.488888103481124050, -0.488931720195173670, -0.488975335686894000, -0.489018949956176400, -0.489062563002911010, -0.489106174826989200, -0.489149785428302010, -0.489193394806740680, +-0.489237002962195520, -0.489280609894557790, -0.489324215603718640, -0.489367820089569250, -0.489411423351999940, -0.489455025390902130, -0.489498626206166690, -0.489542225797685080, +-0.489585824165347520, -0.489629421309045410, -0.489673017228670180, -0.489716611924111980, -0.489760205395262220, -0.489803797642011980, -0.489847388664252650, -0.489890978461874400, +-0.489934567034768730, -0.489978154382826660, -0.490021740505939610, -0.490065325403997780, -0.490108909076892640, -0.490152491524515290, -0.490196072746757030, -0.490239652743508230, +-0.490283231514660300, -0.490326809060104290, -0.490370385379731600, -0.490413960473432610, -0.490457534341098730, -0.490501106982621340, -0.490544678397890840, -0.490588248586798670, +-0.490631817549235850, -0.490675385285093860, -0.490718951794263000, -0.490762517076634820, -0.490806081132100340, -0.490849643960550970, -0.490893205561877160, -0.490936765935970350, +-0.490980325082721600, -0.491023883002022430, -0.491067439693763150, -0.491110995157835300, -0.491154549394129950, -0.491198102402538640, -0.491241654182951630, -0.491285204735260550, +-0.491328754059356390, -0.491372302155130780, -0.491415849022474040, -0.491459394661277640, -0.491502939071433160, -0.491546482252830930, -0.491590024205362520, -0.491633564928919020, +-0.491677104423392020, -0.491720642688671830, -0.491764179724650090, -0.491807715531217880, -0.491851250108266750, -0.491894783455687100, -0.491938315573370530, -0.491981846461208180, +-0.492025376119091580, -0.492068904546911160, -0.492112431744558430, -0.492155957711924660, -0.492199482448901380, -0.492243005955379010, -0.492286528231249130, -0.492330049276403340, +-0.492373569090731990, -0.492417087674126730, -0.492460605026478760, -0.492504121147679660, -0.492547636037619860, -0.492591149696191000, -0.492634662123284270, -0.492678173318791210, +-0.492721683282602410, -0.492765192014609330, -0.492808699514703350, -0.492852205782775940, -0.492895710818717640, -0.492939214622420070, -0.492982717193774510, -0.493026218532672480, +-0.493069718639004560, -0.493113217512662290, -0.493156715153537430, -0.493200211561520330, -0.493243706736502750, -0.493287200678375890, -0.493330693387031390, -0.493374184862359840, +-0.493417675104252770, -0.493461164112601490, -0.493504651887297750, -0.493548138428231980, -0.493591623735295800, -0.493635107808380660, -0.493678590647378070, -0.493722072252178620, +-0.493765552622674020, -0.493809031758755510, -0.493852509660314800, -0.493895986327242460, -0.493939461759430150, -0.493982935956769560, -0.494026408919151280, -0.494069880646466950, +-0.494113351138607880, -0.494156820395465880, -0.494200288416931420, -0.494243755202896210, -0.494287220753251650, -0.494330685067889410, -0.494374148146700050, -0.494417609989575350, +-0.494461070596406650, -0.494504529967085600, -0.494547988101502910, -0.494591444999550210, -0.494634900661118870, -0.494678355086100700, -0.494721808274386280, -0.494765260225867310, +-0.494808710940435160, -0.494852160417981630, -0.494895608658397320, -0.494939055661574030, -0.494982501427403470, -0.495025945955776260, -0.495069389246584170, -0.495112831299718610, +-0.495156272115071350, -0.495199711692533070, -0.495243150031995480, -0.495286587133350000, -0.495330022996488480, -0.495373457621301470, -0.495416891007680830, -0.495460323155517970, +-0.495503754064704700, -0.495547183735131620, -0.495590612166690650, -0.495634039359273080, -0.495677465312770850, -0.495720890027074530, -0.495764313502076000, -0.495807735737667070, +-0.495851156733738420, -0.495894576490181930, -0.495937995006888900, -0.495981412283751370, -0.496024828320659860, -0.496068243117506250, -0.496111656674182110, -0.496155068990579150, +-0.496198480066588180, -0.496241889902101000, -0.496285298497009090, -0.496328705851204310, -0.496372111964577370, -0.496415516837020180, -0.496458920468424160, -0.496502322858681230, +-0.496545724007682150, -0.496589123915318730, -0.496632522581482880, -0.496675920006065360, -0.496719316188958040, -0.496762711130052380, -0.496806104829240370, -0.496849497286412760, +-0.496892888501461350, -0.496936278474277680, -0.496979667204753780, -0.497023054692780300, -0.497066440938249140, -0.497109825941051960, -0.497153209701080510, -0.497196592218225710, +-0.497239973492379420, -0.497283353523433220, -0.497326732311278940, -0.497370109855807540, -0.497413486156910830, -0.497456861214480350, -0.497500235028408180, -0.497543607598585010, +-0.497586978924902830, -0.497630349007253560, -0.497673717845528050, -0.497717085439618230, -0.497760451789415750, -0.497803816894812460, -0.497847180755699280, -0.497890543371968140, +-0.497933904743510620, -0.497977264870218760, -0.498020623751983360, -0.498063981388696340, -0.498107337780249400, -0.498150692926534520, -0.498194046827442500, -0.498237399482865380, +-0.498280750892694750, -0.498324101056822680, -0.498367449975139880, -0.498410797647538540, -0.498454144073910530, -0.498497489254146780, -0.498540833188139350, -0.498584175875779800, +-0.498627517316960200, -0.498670857511571420, -0.498714196459505540, -0.498757534160654100, -0.498800870614909240, -0.498844205822161820, -0.498887539782303880, -0.498930872495227110, +-0.498974203960823540, -0.499017534178984090, -0.499060863149600740, -0.499104190872565300, -0.499147517347769740, -0.499190842575104990, -0.499234166554463180, -0.499277489285736290, +-0.499320810768815290, -0.499364131003592340, -0.499407449989958950, -0.499450767727807390, -0.499494084217028510, -0.499537399457514460, -0.499580713449156830, -0.499624026191847870, +-0.499667337685478440, -0.499710647929940630, -0.499753956925126250, -0.499797264670927330, -0.499840571167234900, -0.499883876413941000, -0.499927180410937420, -0.499970483158116320, +-0.500013784655368610, -0.500057084902586380, -0.500100383899661830, -0.500143681646486040, -0.500186978142950990, -0.500230273388948430, -0.500273567384370680, -0.500316860129108480, +-0.500360151623054250, -0.500403441866099640, -0.500446730858136730, -0.500490018599056730, -0.500533305088751600, -0.500576590327113210, -0.500619874314033760, -0.500663157049404230, +-0.500706438533116690, -0.500749718765063250, -0.500792997745135750, -0.500836275473225400, -0.500879551949224400, -0.500922827173024500, -0.500966101144518010, -0.501009373863595790, +-0.501052645330150150, -0.501095915544073290, -0.501139184505256190, -0.501182452213591150, -0.501225718668970030, -0.501268983871285050, -0.501312247820427160, -0.501355510516288570, +-0.501398771958761370, -0.501442032147737530, -0.501485291083108240, -0.501528548764765710, -0.501571805192601810, -0.501615060366508710, -0.501658314286377640, -0.501701566952100890, +-0.501744818363570100, -0.501788068520677700, -0.501831317423314660, -0.501874565071373400, -0.501917811464746120, -0.501961056603323910, -0.502004300486999070, -0.502047543115663460, +-0.502090784489209300, -0.502134024607527870, -0.502177263470511390, -0.502220501078051830, -0.502263737430041270, -0.502306972526371020, -0.502350206366933390, -0.502393438951620140, +-0.502436670280323790, -0.502479900352935330, -0.502523129169347160, -0.502566356729451050, -0.502609583033139520, -0.502652808080303660, -0.502696031870835780, -0.502739254404628190, +-0.502782475681572080, -0.502825695701559770, -0.502868914464483230, -0.502912131970234770, -0.502955348218705580, -0.502998563209788090, -0.503041776943374150, -0.503084989419356200, +-0.503128200637625310, -0.503171410598073910, -0.503214619300594080, -0.503257826745078020, -0.503301032931417040, -0.503344237859503440, -0.503387441529229320, -0.503430643940486870, +-0.503473845093167500, -0.503517044987163540, -0.503560243622366840, -0.503603440998670050, -0.503646637115964250, -0.503689831974141860, -0.503733025573095180, -0.503776217912715650, +-0.503819408992895570, -0.503862598813526910, -0.503905787374502200, -0.503948974675712650, -0.503992160717050550, -0.504035345498408120, -0.504078529019677760, -0.504121711280750670, +-0.504164892281519280, -0.504208072021875680, -0.504251250501712270, -0.504294427720920260, -0.504337603679392290, -0.504380778377020330, -0.504423951813696700, -0.504467123989312930, +-0.504510294903761310, -0.504553464556934280, -0.504596632948723260, -0.504639800079020650, -0.504682965947718550, -0.504726130554709380, -0.504769293899884450, -0.504812455983136400, +-0.504855616804357200, -0.504898776363439270, -0.504941934660274040, -0.504985091694754030, -0.505028247466771220, -0.505071401976218250, -0.505114555222986320, -0.505157707206968070, +-0.505200857928055470, -0.505244007386141170, -0.505287155581116370, -0.505330302512873810, -0.505373448181305810, -0.505416592586303780, -0.505459735727760370, -0.505502877605567560, +-0.505546018219617980, -0.505589157569802940, -0.505632295656014970, -0.505675432478146280, -0.505718568036089390, -0.505761702329735720, -0.505804835358977800, -0.505847967123707720, +-0.505891097623818230, -0.505934226859200530, -0.505977354829747260, -0.506020481535350620, -0.506063606975903140, -0.506106731151296340, -0.506149854061422650, -0.506192975706174720, +-0.506236096085443950, -0.506279215199122890, -0.506322333047103830, -0.506365449629279430, -0.506408564945540870, -0.506451678995781030, -0.506494791779891870, -0.506537903297766160, +-0.506581013549295300, -0.506624122534371950, -0.506667230252888290, -0.506710336704736970, -0.506753441889809310, -0.506796545807998160, -0.506839648459195600, -0.506882749843294290, +-0.506925849960185640, -0.506968948809762510, -0.507012046391916990, -0.507055142706541620, -0.507098237753528140, -0.507141331532768970, -0.507184424044156980, -0.507227515287583360, +-0.507270605262941100, -0.507313693970122270, -0.507356781409019630, -0.507399867579524600, -0.507442952481529930, -0.507486036114927930, -0.507529118479611130, -0.507572199575471170, +-0.507615279402400810, -0.507658357960292130, -0.507701435249037990, -0.507744511268529930, -0.507787586018660480, -0.507830659499322160, -0.507873731710407510, -0.507916802651808160, +-0.507959872323416880, -0.508002940725126200, -0.508046007856827850, -0.508089073718414390, -0.508132138309778330, -0.508175201630812310, -0.508218263681407880, -0.508261324461457780, +-0.508304383970854420, -0.508347442209490460, -0.508390499177257430, -0.508433554874048290, -0.508476609299755130, -0.508519662454270940, -0.508562714337487120, -0.508605764949296550, +-0.508648814289591630, -0.508691862358265020, -0.508734909155208360, -0.508777954680314390, -0.508820998933475880, -0.508864041914584560, -0.508907083623533210, -0.508950124060214000, +-0.508993163224519930, -0.509036201116342620, -0.509079237735574730, -0.509122273082108780, -0.509165307155837520, -0.509208339956652710, -0.509251371484446880, -0.509294401739112780, +-0.509337430720542940, -0.509380458428629220, -0.509423484863264280, -0.509466510024340740, -0.509509533911751130, -0.509552556525387450, -0.509595577865142310, -0.509638597930908270, +-0.509681616722578060, -0.509724634240043550, -0.509767650483197280, -0.509810665451932430, -0.509853679146140440, -0.509896691565714270, -0.509939702710546340, -0.509982712580529630, +-0.510025721175555670, -0.510068728495517430, -0.510111734540307340, -0.510154739309818360, -0.510197742803942140, -0.510240745022571550, -0.510283745965599110, -0.510326745632917580, +-0.510369744024418930, -0.510412741139995910, -0.510455736979540940, -0.510498731542947120, -0.510541724830106070, -0.510584716840910670, -0.510627707575253890, -0.510670697033027480, +-0.510713685214124190, -0.510756672118436780, -0.510799657745858120, -0.510842642096279940, -0.510885625169595130, -0.510928606965696200, -0.510971587484476130, -0.511014566725826790, +-0.511057544689641040, -0.511100521375811300, -0.511143496784230770, -0.511186470914791080, -0.511229443767385220, -0.511272415341905710, -0.511315385638245520, -0.511358354656296530, +-0.511401322395951710, -0.511444288857103910, -0.511487254039645010, -0.511530217943467980, -0.511573180568465350, -0.511616141914530200, -0.511659101981554290, -0.511702060769430700, +-0.511745018278051860, -0.511787974507310950, -0.511830929457099630, -0.511873883127311080, -0.511916835517837730, -0.511959786628572780, -0.512002736459407860, -0.512045685010236170, +-0.512088632280950250, -0.512131578271443180, -0.512174522981606710, -0.512217466411333920, -0.512260408560517910, -0.512303349429050540, -0.512346289016824660, -0.512389227323733150, +-0.512432164349668980, -0.512475100094523910, -0.512518034558191230, -0.512560967740563370, -0.512603899641533410, -0.512646830260993450, -0.512689759598836340, -0.512732687654954830, +-0.512775614429242020, -0.512818539921589770, -0.512861464131891260, -0.512904387060038940, -0.512947308705926090, -0.512990229069444690, -0.513033148150487620, -0.513076065948947610, +-0.513118982464717990, -0.513161897697690380, -0.513204811647758110, -0.513247724314814140, -0.513290635698750550, -0.513333545799460330, -0.513376454616836230, -0.513419362150771330, +-0.513462268401157720, -0.513505173367888370, -0.513548077050856140, -0.513590979449954130, -0.513633880565074310, -0.513676780396109640, -0.513719678942953120, -0.513762576205497810, +-0.513805472183635700, -0.513848366877259770, -0.513891260286263090, -0.513934152410538530, -0.513977043249978170, -0.514019932804475330, -0.514062821073922980, -0.514105708058213210, +-0.514148593757239090, -0.514191478170893610, -0.514234361299069740, -0.514277243141659570, -0.514320123698556400, -0.514363002969652870, -0.514405880954842190, -0.514448757654016430, +-0.514491633067068690, -0.514534507193891930, -0.514577380034379360, -0.514620251588422950, -0.514663121855915780, -0.514705990836750950, -0.514748858530821420, -0.514791724938019390, +-0.514834590058238060, -0.514877453891370740, -0.514920316437309290, -0.514963177695947020, -0.515006037667176900, -0.515048896350892020, -0.515091753746984460, -0.515134609855347540, +-0.515177464675874220, -0.515220318208457480, -0.515263170452989640, -0.515306021409363880, -0.515348871077472960, -0.515391719457210300, -0.515434566548467980, -0.515477412351139310, +-0.515520256865117040, -0.515563100090294490, -0.515605942026563850, -0.515648782673818310, -0.515691622031950850, -0.515734460100854660, -0.515777296880421950, -0.515820132370546030, +-0.515862966571120190, -0.515905799482036520, -0.515948631103188340, -0.515991461434468610, -0.516034290475770650, -0.516077118226986540, -0.516119944688009590, -0.516162769858732770, +-0.516205593739049510, -0.516248416328851770, -0.516291237628033080, -0.516334057636486210, -0.516376876354104670, -0.516419693780780560, -0.516462509916407080, -0.516505324760877520, +-0.516548138314084860, -0.516590950575921530, -0.516633761546280820, -0.516676571225056170, -0.516719379612139650, -0.516762186707424580, -0.516804992510804140, -0.516847797022171650, +-0.516890600241419200, -0.516933402168440300, -0.516976202803127840, -0.517019002145375330, -0.517061800195074860, -0.517104596952119970, -0.517147392416403510, -0.517190186587819010, +-0.517232979466258680, -0.517275771051615820, -0.517318561343783510, -0.517361350342655290, -0.517404138048123240, -0.517446924460080890, -0.517489709578421550, -0.517532493403037640, +-0.517575275933822470, -0.517618057170669000, -0.517660837113470880, -0.517703615762120320, -0.517746393116510610, -0.517789169176534950, -0.517831943942086870, -0.517874717413058460, +-0.517917489589343140, -0.517960260470834210, -0.518003030057425100, -0.518045798349007880, -0.518088565345476200, -0.518131331046723150, -0.518174095452642150, -0.518216858563125490, +-0.518259620378066720, -0.518302380897359250, -0.518345140120895500, -0.518387898048568880, -0.518430654680272500, -0.518473410015899860, -0.518516164055343290, -0.518558916798496310, +-0.518601668245252110, -0.518644418395504010, -0.518687167249144650, -0.518729914806067230, -0.518772661066165040, -0.518815406029331630, -0.518858149695459290, -0.518900892064441570, +-0.518943633136171640, -0.518986372910543060, -0.519029111387448120, -0.519071848566780350, -0.519114584448432950, -0.519157319032299560, -0.519200052318272490, -0.519242784306245260, +-0.519285514996111420, -0.519328244387763370, -0.519370972481094870, -0.519413699275998790, -0.519456424772368860, -0.519499148970097520, -0.519541871869078300, -0.519584593469204490, +-0.519627313770369530, -0.519670032772465820, -0.519712750475387120, -0.519755466879026520, -0.519798181983277540, -0.519840895788032830, -0.519883608293185920, -0.519926319498629890, +-0.519969029404258490, -0.520011738009964030, -0.520054445315640380, -0.520097151321180950, -0.520139856026478280, -0.520182559431425880, -0.520225261535917190, -0.520267962339845620, +-0.520310661843103820, -0.520353360045585410, -0.520396056947183490, -0.520438752547791930, -0.520481446847303020, -0.520524139845610520, -0.520566831542607740, -0.520609521938188210, +-0.520652211032244460, -0.520694898824670240, -0.520737585315358630, -0.520780270504203610, -0.520822954391097490, -0.520865636975933910, -0.520908318258606730, -0.520950998239008260, +-0.520993676917032360, -0.521036354292572330, -0.521079030365521720, -0.521121705135773160, -0.521164378603220290, -0.521207050767756530, -0.521249721629275520, -0.521292391187669790, +-0.521335059442833090, -0.521377726394658850, -0.521420392043040580, -0.521463056387870940, -0.521505719429043670, -0.521548381166452080, -0.521591041599989920, -0.521633700729549840, +-0.521676358555025480, -0.521719015076310240, -0.521761670293297790, -0.521804324205880850, -0.521846976813952980, -0.521889628117408130, -0.521932278116138850, -0.521974926810038880, +-0.522017574199001630, -0.522060220282920760, -0.522102865061688900, -0.522145508535199920, -0.522188150703347230, -0.522230791566024480, -0.522273431123124410, -0.522316069374540780, +-0.522358706320166900, -0.522401341959896740, -0.522443976293622710, -0.522486609321238800, -0.522529241042638430, -0.522571871457715330, -0.522614500566362050, -0.522657128368472670, +-0.522699754863940710, -0.522742380052659050, -0.522785003934521430, -0.522827626509421380, -0.522870247777252550, -0.522912867737907790, -0.522955486391280750, -0.522998103737265070, +-0.523040719775754500, -0.523083334506641790, -0.523125947929820700, -0.523168560045184750, -0.523211170852627800, -0.523253780352042510, -0.523296388543322720, -0.523338995426362090, +-0.523381601001054240, -0.523424205267292050, -0.523466808224969380, -0.523509409873979980, -0.523552010214216710, -0.523594609245573440, -0.523637206967943690, -0.523679803381221220, +-0.523722398485298890, -0.523764992280070560, -0.523807584765429770, -0.523850175941270480, -0.523892765807485230, -0.523935354363968100, -0.523977941610612620, -0.524020527547312650, +-0.524063112173960950, -0.524105695490451500, -0.524148277496677810, -0.524190858192533860, -0.524233437577912300, -0.524276015652707210, -0.524318592416812000, -0.524361167870120770, +-0.524403742012526150, -0.524446314843922230, -0.524488886364202990, -0.524531456573261060, -0.524574025470990520, -0.524616593057284810, -0.524659159332038110, -0.524701724295143060, +-0.524744287946493750, -0.524786850285983820, -0.524829411313507020, -0.524871971028956330, -0.524914529432225720, -0.524957086523208720, -0.524999642301799520, -0.525042196767890660, +-0.525084749921376440, -0.525127301762150280, -0.525169852290106380, -0.525212401505137370, -0.525254949407137350, -0.525297495996000290, -0.525340041271619150, -0.525382585233887920, +-0.525425127882700240, -0.525467669217950070, -0.525510209239530400, -0.525552747947335200, -0.525595285341258100, -0.525637821421193200, -0.525680356187033350, -0.525722889638672640, +-0.525765421776004720, -0.525807952598923540, -0.525850482107322210, -0.525893010301094590, -0.525935537180134420, -0.525978062744335890, -0.526020586993591780, -0.526063109927796150, +-0.526105631546843200, -0.526148151850625690, -0.526190670839037920, -0.526233188511973430, -0.526275704869326290, -0.526318219910989590, -0.526360733636857310, -0.526403246046823200, +-0.526445757140781350, -0.526488266918624710, -0.526530775380247400, -0.526573282525543140, -0.526615788354406140, -0.526658292866729270, -0.526700796062406610, -0.526743297941332010, +-0.526785798503399460, -0.526828297748502150, -0.526870795676534050, -0.526913292287389260, -0.526955787580960950, -0.526998281557143120, -0.527040774215829620, -0.527083265556914650, +-0.527125755580290960, -0.527168244285852960, -0.527210731673494410, -0.527253217743109290, -0.527295702494590900, -0.527338185927833100, -0.527380668042729980, -0.527423148839175520, +-0.527465628317062670, -0.527508106476285880, -0.527550583316738870, -0.527593058838315640, -0.527635533040909490, -0.527678005924414490, -0.527720477488724530, -0.527762947733733670, +-0.527805416659335110, -0.527847884265422950, -0.527890350551891490, -0.527932815518633800, -0.527975279165543990, -0.528017741492516010, -0.528060202499444190, -0.528102662186221370, +-0.528145120552741880, -0.528187577598899560, -0.528230033324588730, -0.528272487729702480, -0.528314940814134990, -0.528357392577780140, -0.528399843020532110, -0.528442292142284220, +-0.528484739942930550, -0.528527186422364960, -0.528569631580481870, -0.528612075417174250, -0.528654517932336530, -0.528696959125862790, -0.528739398997646330, -0.528781837547581460, +-0.528824274775561820, -0.528866710681482060, -0.528909145265235030, -0.528951578526715150, -0.528994010465816290, -0.529036441082432860, -0.529078870376457840, -0.529121298347785760, +-0.529163724996310370, -0.529206150321926080, -0.529248574324525990, -0.529290997004004500, -0.529333418360255600, -0.529375838393173370, -0.529418257102651340, -0.529460674488583470, +-0.529503090550864420, -0.529545505289387260, -0.529587918704046310, -0.529630330794735540, -0.529672741561349360, -0.529715151003780970, -0.529757559121924680, -0.529799965915674460, +-0.529842371384924740, -0.529884775529568700, -0.529927178349500760, -0.529969579844614790, -0.530011980014805320, -0.530054378859965540, -0.530096776379989750, -0.530139172574772060, +-0.530181567444206750, -0.530223960988187250, -0.530266353206607750, -0.530308744099362350, -0.530351133666345560, -0.530393521907450480, -0.530435908822571740, -0.530478294411603430, +-0.530520678674439080, -0.530563061610973110, -0.530605443221099370, -0.530647823504712400, -0.530690202461705620, -0.530732580091973220, -0.530774956395409390, -0.530817331371908560, +-0.530859705021364040, -0.530902077343670230, -0.530944448338721230, -0.530986818006411450, -0.531029186346634320, -0.531071553359284240, -0.531113919044255200, -0.531156283401441720, +-0.531198646430737220, -0.531241008132036120, -0.531283368505232830, -0.531325727550220780, -0.531368085266894390, -0.531410441655147730, -0.531452796714875440, -0.531495150445970730, +-0.531537502848328130, -0.531579853921841820, -0.531622203666406220, -0.531664552081914770, -0.531706899168261860, -0.531749244925341810, -0.531791589353048930, -0.531833932451276750, +-0.531876274219919790, -0.531918614658872020, -0.531960953768028210, -0.532003291547281540, -0.532045627996526770, -0.532087963115658200, -0.532130296904569370, -0.532172629363154790, +-0.532214960491308680, -0.532257290288925430, -0.532299618755898710, -0.532341945892122910, -0.532384271697492250, -0.532426596171901250, -0.532468919315243320, -0.532511241127413220, +-0.532553561608305030, -0.532595880757813170, -0.532638198575831390, -0.532680515062254000, -0.532722830216975310, -0.532765144039889950, -0.532807456530891450, -0.532849767689874240, +-0.532892077516732950, -0.532934386011361120, -0.532976693173653370, -0.533018999003503800, -0.533061303500807160, -0.533103606665456860, -0.533145908497347550, -0.533188208996373540, +-0.533230508162429340, -0.533272805995408380, -0.533315102495205530, -0.533357397661714970, -0.533399691494831130, -0.533441983994447870, -0.533484275160459490, -0.533526564992760520, +-0.533568853491245500, -0.533611140655807950, -0.533653426486342510, -0.533695710982743600, -0.533737994144905640, -0.533780275972722480, -0.533822556466088560, -0.533864835624898610, +-0.533907113449046180, -0.533949389938426000, -0.533991665092932390, -0.534033938912459980, -0.534076211396902310, -0.534118482546154130, -0.534160752360109740, -0.534203020838663780, +-0.534245287981709890, -0.534287553789142940, -0.534329818260857010, -0.534372081396746860, -0.534414343196706220, -0.534456603660629640, -0.534498862788411630, -0.534541120579946740, +-0.534583377035128700, -0.534625632153852280, -0.534667885936012110, -0.534710138381501940, -0.534752389490216310, -0.534794639262049730, -0.534836887696896970, -0.534879134794651550, +-0.534921380555208330, -0.534963624978461730, -0.535005868064306390, -0.535048109812635950, -0.535090350223345280, -0.535132589296328680, -0.535174827031481120, -0.535217063428696020, +-0.535259298487868240, -0.535301532208892210, -0.535343764591662770, -0.535385995636073590, -0.535428225342019280, -0.535470453709394940, -0.535512680738093990, -0.535554906428011400, +-0.535597130779041470, -0.535639353791079190, -0.535681575464018070, -0.535723795797752980, -0.535766014792178450, -0.535808232447189340, -0.535850448762679180, -0.535892663738542830, +-0.535934877374674930, -0.535977089670970240, -0.536019300627322390, -0.536061510243626250, -0.536103718519776340, -0.536145925455667640, -0.536188131051193670, -0.536230335306249310, +-0.536272538220729180, -0.536314739794528040, -0.536356940027539750, -0.536399138919659070, -0.536441336470780850, -0.536483532680798960, -0.536525727549608260, -0.536567921077103270, +-0.536610113263178870, -0.536652304107728680, -0.536694493610647800, -0.536736681771830760, -0.536778868591172300, -0.536821054068566280, -0.536863238203907690, -0.536905420997090930, +-0.536947602448011100, -0.536989782556561820, -0.537031961322638090, -0.537074138746134520, -0.537116314826945880, -0.537158489564966150, -0.537200662960090170, -0.537242835012212820, +-0.537285005721228170, -0.537327175087030870, -0.537369343109515670, -0.537411509788577550, -0.537453675124110240, -0.537495839116008730, -0.537538001764167660, -0.537580163068481890, +-0.537622323028845380, -0.537664481645153130, -0.537706638917299530, -0.537748794845179790, -0.537790949428687770, -0.537833102667718220, -0.537875254562166010, -0.537917405111925980, +-0.537959554316892130, -0.538001702176959420, -0.538043848692022710, -0.538085993861976090, -0.538128137686714410, -0.538170280166132440, -0.538212421300125140, -0.538254561088586490, +-0.538296699531411350, -0.538338836628494470, -0.538380972379730820, -0.538423106785014480, -0.538465239844240330, -0.538507371557302990, -0.538549501924097670, -0.538591630944518230, +-0.538633758618459750, -0.538675884945816860, -0.538718009926484550, -0.538760133560356900, -0.538802255847328880, -0.538844376787295690, -0.538886496380151070, -0.538928614625790230, +-0.538970731524107900, -0.539012847074999080, -0.539054961278357840, -0.539097074134079150, -0.539139185642057760, -0.539181295802188760, -0.539223404614366130, -0.539265512078485050, +-0.539307618194440170, -0.539349722962126690, -0.539391826381438460, -0.539433928452270670, -0.539476029174517980, -0.539518128548075680, -0.539560226572837640, -0.539602323248699060, +-0.539644418575554670, -0.539686512553299690, -0.539728605181827970, -0.539770696461034700, -0.539812786390815090, -0.539854874971063210, -0.539896962201674050, -0.539939048082542560, +-0.539981132613563840, -0.540023215794631860, -0.540065297625641820, -0.540107378106488570, -0.540149457237067200, -0.540191535017271910, -0.540233611446997660, -0.540275686526139440, +-0.540317760254592440, -0.540359832632250630, -0.540401903659009200, -0.540443973334763020, -0.540486041659407280, -0.540528108632836070, -0.540570174254944690, -0.540612238525628120, +-0.540654301444780550, -0.540696363012297290, -0.540738423228073200, -0.540780482092003360, -0.540822539603981860, -0.540864595763904110, -0.540906650571664870, -0.540948704027159330, +-0.540990756130281690, -0.541032806880927140, -0.541074856278990550, -0.541116904324367210, -0.541158951016951220, -0.541200996356637990, -0.541243040343322160, -0.541285082976899030, +-0.541327124257262930, -0.541369164184308920, -0.541411202757932530, -0.541453239978027630, -0.541495275844489640, -0.541537310357213530, -0.541579343516094490, -0.541621375321026610, +-0.541663405771905420, -0.541705434868625660, -0.541747462611082750, -0.541789488999170790, -0.541831514032785070, -0.541873537711820560, -0.541915560036172580, -0.541957581005735320, +-0.541999600620404200, -0.542041618880073960, -0.542083635784640140, -0.542125651333996820, -0.542167665528039410, -0.542209678366662780, -0.542251689849762350, -0.542293699977232310, +-0.542335708748967970, -0.542377716164864850, -0.542419722224816940, -0.542461726928719860, -0.542503730276468370, -0.542545732267957880, -0.542587732903082820, -0.542629732181738380, +-0.542671730103819530, -0.542713726669221800, -0.542755721877839380, -0.542797715729567700, -0.542839708224301610, -0.542881699361936750, -0.542923689142367220, -0.542965677565488410, +-0.543007664631195430, -0.543049650339383680, -0.543091634689947480, -0.543133617682782120, -0.543175599317783140, -0.543217579594844730, -0.543259558513862430, -0.543301536074731310, +-0.543343512277346560, -0.543385487121602730, -0.543427460607395220, -0.543469432734619010, -0.543511403503169510, -0.543553372912941260, -0.543595340963829550, -0.543637307655729480, +-0.543679272988536470, -0.543721236962144920, -0.543763199576450360, -0.543805160831347670, -0.543847120726732580, -0.543889079262499300, -0.543931036438543240, -0.543972992254760030, +-0.544014946711043890, -0.544056899807290440, -0.544098851543394770, -0.544140801919252290, -0.544182750934757430, -0.544224698589805710, -0.544266644884292220, -0.544308589818112590, +-0.544350533391161020, -0.544392475603333150, -0.544434416454524060, -0.544476355944629290, -0.544518294073543240, -0.544560230841161560, -0.544602166247379230, -0.544644100292091870, +-0.544686032975193910, -0.544727964296580770, -0.544769894256148190, -0.544811822853790480, -0.544853750089403290, -0.544895675962881580, -0.544937600474121100, -0.544979523623016270, +-0.545021445409462620, -0.545063365833355460, -0.545105284894590090, -0.545147202593061260, -0.545189118928664400, -0.545231033901294680, -0.545272947510847760, -0.545314859757218160, +-0.545356770640301410, -0.545398680159992600, -0.545440588316187580, -0.545482495108780770, -0.545524400537667600, -0.545566304602743470, -0.545608207303904020, -0.545650108641043570, +-0.545692008614057980, -0.545733907222842650, -0.545775804467292120, -0.545817700347302150, -0.545859594862767920, -0.545901488013585070, -0.545943379799648240, -0.545985270220852860, +-0.546027159277094220, -0.546069046968268190, -0.546110933294269070, -0.546152818254992730, -0.546194701850334250, -0.546236584080189490, -0.546278464944452760, -0.546320344443019910, +-0.546362222575786260, -0.546404099342647440, -0.546445974743497880, -0.546487848778233530, -0.546529721446749830, -0.546571592748941510, -0.546613462684704120, -0.546655331253933170, +-0.546697198456524200, -0.546739064292371960, -0.546780928761371960, -0.546822791863419640, -0.546864653598410740, -0.546906513966239790, -0.546948372966802650, -0.546990230599994520, +-0.547032086865711250, -0.547073941763847270, -0.547115795294298550, -0.547157647456960270, -0.547199498251728310, -0.547241347678497190, -0.547283195737162660, -0.547325042427620590, +-0.547366887749765500, -0.547408731703493130, -0.547450574288699030, -0.547492415505278830, -0.547534255353127270, -0.547576093832140010, -0.547617930942212450, -0.547659766683240570, +-0.547701601055118890, -0.547743434057743170, -0.547785265691008830, -0.547827095954811720, -0.547868924849046480, -0.547910752373608980, -0.547952578528394520, -0.547994403313299070, +-0.548036226728217170, -0.548078048773044780, -0.548119869447677210, -0.548161688752010430, -0.548203506685938980, -0.548245323249358710, -0.548287138442165590, -0.548328952264254270, +-0.548370764715520490, -0.548412575795859890, -0.548454385505168120, -0.548496193843340030, -0.548538000810271490, -0.548579806405858020, -0.548621610629995260, -0.548663413482578190, +-0.548705214963502550, -0.548747015072663880, -0.548788813809958140, -0.548830611175279870, -0.548872407168525140, -0.548914201789589380, -0.548955995038368450, -0.548997786914757200, +-0.549039577418651390, -0.549081366549947100, -0.549123154308539090, -0.549164940694323090, -0.549206725707194750, -0.549248509347049940, -0.549290291613783620, -0.549332072507291440, +-0.549373852027469130, -0.549415630174212470, -0.549457406947416520, -0.549499182346976920, -0.549540956372789440, -0.549582729024749920, -0.549624500302753230, -0.549666270206695230, +-0.549708038736471560, -0.549749805891978190, -0.549791571673109990, -0.549833336079762810, -0.549875099111832630, -0.549916860769214420, -0.549958621051803930, -0.550000379959497020, +-0.550042137492189440, -0.550083893649776170, -0.550125648432153170, -0.550167401839216090, -0.550209153870860780, -0.550250904526982330, -0.550292653807476500, -0.550334401712239130, +-0.550376148241166100, -0.550417893394152260, -0.550459637171093810, -0.550501379571886160, -0.550543120596425520, -0.550584860244606620, -0.550626598516325670, -0.550668335411478530, +-0.550710070929960160, -0.550751805071666660, -0.550793537836493650, -0.550835269224337120, -0.550876999235092150, -0.550918727868654590, -0.550960455124920200, -0.551002181003785060, +-0.551043905505144150, -0.551085628628893430, -0.551127350374928550, -0.551169070743145810, -0.551210789733439950, -0.551252507345707190, -0.551294223579843030, -0.551335938435743800, +-0.551377651913304350, -0.551419364012420750, -0.551461074732988670, -0.551502784074904380, -0.551544492038062660, -0.551586198622359800, -0.551627903827691780, -0.551669607653953560, +-0.551711310101041460, -0.551753011168851000, -0.551794710857278380, -0.551836409166218570, -0.551878106095567870, -0.551919801645221810, -0.551961495815076590, -0.552003188605027280, +-0.552044880014970100, -0.552086570044800660, -0.552128258694415060, -0.552169945963708610, -0.552211631852577160, -0.552253316360916680, -0.552294999488623370, -0.552336681235592100, +-0.552378361601719160, -0.552420040586900640, -0.552461718191031630, -0.552503394414008420, -0.552545069255726660, -0.552586742716082550, -0.552628414794971270, -0.552670085492289020, +-0.552711754807931440, -0.552753422741794950, -0.552795089293774410, -0.552836754463766230, -0.552878418251666170, -0.552920080657370420, -0.552961741680774050, -0.553003401321773390, +-0.553045059580264180, -0.553086716456142710, -0.553128371949304090, -0.553170026059644600, -0.553211678787060350, -0.553253330131446510, -0.553294980092699400, -0.553336628670714760, +-0.553378275865389010, -0.553419921676617130, -0.553461566104295530, -0.553503209148319960, -0.553544850808586730, -0.553586491084991030, -0.553628129977429050, -0.553669767485796770, +-0.553711403609990490, -0.553753038349905190, -0.553794671705437500, -0.553836303676482960, -0.553877934262938080, -0.553919563464698060, -0.553961191281659100, -0.554002817713717070, +-0.554044442760768470, -0.554086066422708410, -0.554127688699433070, -0.554169309590838990, -0.554210929096821240, -0.554252547217276130, -0.554294163952099740, -0.554335779301188160, +-0.554377393264436910, -0.554419005841742090, -0.554460617032999760, -0.554502226838106350, -0.554543835256956940, -0.554585442289447840, -0.554627047935475240, -0.554668652194935440, +-0.554710255067723530, -0.554751856553736040, -0.554793456652868940, -0.554835055365018540, -0.554876652690080130, -0.554918248627950030, -0.554959843178524760, -0.555001436341699410, +-0.555043028117370610, -0.555084618505434110, -0.555126207505786560, -0.555167795118323040, -0.555209381342940070, -0.555250966179533620, -0.555292549628000120, -0.555334131688234870, +-0.555375712360134280, -0.555417291643594440, -0.555458869538511760, -0.555500446044781440, -0.555542021162300110, -0.555583594890963760, -0.555625167230668680, -0.555666738181310400, +-0.555708307742785230, -0.555749875914989700, -0.555791442697818990, -0.555833008091169760, -0.555874572094938070, -0.555916134709020240, -0.555957695933311680, -0.555999255767708920, +-0.556040814212108050, -0.556082371266405470, -0.556123926930496610, -0.556165481204278000, -0.556207034087645600, -0.556248585580496060, -0.556290135682724560, -0.556331684394227870, +-0.556373231714901830, -0.556414777644643200, -0.556456322183347170, -0.556497865330910390, -0.556539407087229270, -0.556580947452199330, -0.556622486425716990, -0.556664024007678340, +-0.556705560197980120, -0.556747094996517530, -0.556788628403187320, -0.556830160417885470, -0.556871691040508600, -0.556913220270952140, -0.556954748109112610, -0.556996274554886210, +-0.557037799608169570, -0.557079323268858010, -0.557120845536848150, -0.557162366412036090, -0.557203885894318570, -0.557245403983591010, -0.557286920679749830, -0.557328435982691440, +-0.557369949892312260, -0.557411462408507810, -0.557452973531174840, -0.557494483260209670, -0.557535991595508040, -0.557577498536966360, -0.557619004084480950, -0.557660508237948330, +-0.557702010997264130, -0.557743512362324890, -0.557785012333026910, -0.557826510909266830, -0.557868008090939950, -0.557909503877943140, -0.557950998270172470, -0.557992491267524810, +-0.558033982869895470, -0.558075473077181190, -0.558116961889278280, -0.558158449306083270, -0.558199935327491790, -0.558241419953400490, -0.558282903183705990, -0.558324385018303840, +-0.558365865457090770, -0.558407344499962990, -0.558448822146817240, -0.558490298397549050, -0.558531773252055160, -0.558573246710231790, -0.558614718771975770, -0.558656189437182430, +-0.558697658705748720, -0.558739126577570850, -0.558780593052545570, -0.558822058130568400, -0.558863521811536090, -0.558904984095344950, -0.558946444981891720, -0.558987904471071940, +-0.559029362562782570, -0.559070819256920040, -0.559112274553380080, -0.559153728452059460, -0.559195180952854590, -0.559236632055662100, -0.559278081760377630, -0.559319530066897940, +-0.559360976975119550, -0.559402422484938990, -0.559443866596252000, -0.559485309308955350, -0.559526750622945430, -0.559568190538118900, -0.559609629054371730, -0.559651066171600320, +-0.559692501889701320, -0.559733936208571480, -0.559775369128106330, -0.559816800648202830, -0.559858230768757290, -0.559899659489666580, -0.559941086810826330, -0.559982512732133290, +-0.560023937253484430, -0.560065360374775390, -0.560106782095902810, -0.560148202416763440, -0.560189621337253810, -0.560231038857269770, -0.560272454976708190, -0.560313869695465480, +-0.560355283013438400, -0.560396694930522800, -0.560438105446615430, -0.560479514561612820, -0.560520922275411730, -0.560562328587908000, -0.560603733498998500, -0.560645137008579650, +-0.560686539116548310, -0.560727939822800230, -0.560769339127232260, -0.560810737029741380, -0.560852133530223340, -0.560893528628574890, -0.560934922324692660, -0.560976314618473420, +-0.561017705509813110, -0.561059094998608510, -0.561100483084756130, -0.561141869768152950, -0.561183255048694710, -0.561224638926278390, -0.561266021400800400, -0.561307402472157820, +-0.561348782140246190, -0.561390160404962810, -0.561431537266203870, -0.561472912723866570, -0.561514286777846540, -0.561555659428040870, -0.561597030674346300, -0.561638400516658920, +-0.561679768954875370, -0.561721135988892510, -0.561762501618607190, -0.561803865843915280, -0.561845228664713650, -0.561886590080898920, -0.561927950092368180, -0.561969308699017070, +-0.562010665900742780, -0.562052021697441840, -0.562093376089011110, -0.562134729075346670, -0.562176080656345390, -0.562217430831903900, -0.562258779601919170, -0.562300126966287170, +-0.562341472924904770, -0.562382817477669160, -0.562424160624476090, -0.562465502365222640, -0.562506842699805330, -0.562548181628121370, -0.562589519150066610, -0.562630855265538020, +-0.562672189974432360, -0.562713523276646480, -0.562754855172076460, -0.562796185660619400, -0.562837514742171810, -0.562878842416630780, -0.562920168683892270, -0.562961493543853390, +-0.563002816996410640, -0.563044139041461330, -0.563085459678901330, -0.563126778908627610, -0.563168096730537030, -0.563209413144526440, -0.563250728150492040, -0.563292041748330810, +-0.563333353937939930, -0.563374664719215160, -0.563415974092053800, -0.563457282056352480, -0.563498588612008300, -0.563539893758917330, -0.563581197496976550, -0.563622499826082920, +-0.563663800746133310, -0.563705100257023810, -0.563746398358651590, -0.563787695050913420, -0.563828990333706260, -0.563870284206926310, -0.563911576670470760, -0.563952867724236140, +-0.563994157368119750, -0.564035445602017570, -0.564076732425826900, -0.564118017839444600, -0.564159301842766970, -0.564200584435691100, -0.564241865618113740, -0.564283145389932180, +-0.564324423751042300, -0.564365700701341290, -0.564406976240726110, -0.564448250369093850, -0.564489523086340590, -0.564530794392363640, -0.564572064287059530, -0.564613332770325660, +-0.564654599842058120, -0.564695865502154120, -0.564737129750510490, -0.564778392587024340, -0.564819654011591730, -0.564860914024110090, -0.564902172624476620, -0.564943429812587270, +-0.564984685588339360, -0.565025939951629640, -0.565067192902355520, -0.565108444440413080, -0.565149694565699520, -0.565190943278111700, -0.565232190577546810, -0.565273436463901160, +-0.565314680937071930, -0.565355923996956000, -0.565397165643450660, -0.565438405876452000, -0.565479644695857320, -0.565520882101563480, -0.565562118093467790, -0.565603352671466550, +-0.565644585835456850, -0.565685817585335760, -0.565727047921000370, -0.565768276842347100, -0.565809504349273130, -0.565850730441675780, -0.565891955119451120, -0.565933178382496680, +-0.565974400230709220, -0.566015620663986250, -0.566056839682223760, -0.566098057285319150, -0.566139273473169500, -0.566180488245671910, -0.566221701602722780, -0.566262913544219430, +-0.566304124070058810, -0.566345333180138240, -0.566386540874353920, -0.566427747152603240, -0.566468952014783200, -0.566510155460791200, -0.566551357490523430, -0.566592558103877320, +-0.566633757300750050, -0.566674955081038160, -0.566716151444638830, -0.566757346391449040, -0.566798539921366310, -0.566839732034286840, -0.566880922730108150, -0.566922112008727000, +-0.566963299870041020, -0.567004486313946400, -0.567045671340340560, -0.567086854949120590, -0.567128037140183780, -0.567169217913426560, -0.567210397268746340, -0.567251575206040080, +-0.567292751725205210, -0.567333926826138150, -0.567375100508736190, -0.567416272772896970, -0.567457443618516580, -0.567498613045492650, -0.567539781053722160, -0.567580947643102630, +-0.567622112813530370, -0.567663276564902790, -0.567704438897116970, -0.567745599810070440, -0.567786759303659630, -0.567827917377781820, -0.567869074032334330, -0.567910229267214460, +-0.567951383082318630, -0.567992535477544360, -0.568033686452788730, -0.568074836007949280, -0.568115984142922300, -0.568157130857605440, -0.568198276151896110, -0.568239420025690720, +-0.568280562478886810, -0.568321703511381450, -0.568362843123072170, -0.568403981313855500, -0.568445118083628850, -0.568486253432289310, -0.568527387359734630, -0.568568519865861100, +-0.568609650950566260, -0.568650780613747190, -0.568691908855301630, -0.568733035675125900, -0.568774161073117620, -0.568815285049173890, -0.568856407603192340, -0.568897528735069380, +-0.568938648444702650, -0.568979766731989240, -0.569020883596826900, -0.569061999039111810, -0.569103113058741840, -0.569144225655614400, -0.569185336829626130, -0.569226446580674450, +-0.569267554908656550, -0.569308661813470280, -0.569349767295011970, -0.569390871353179120, -0.569431973987869270, -0.569473075198979720, -0.569514174986407110, -0.569555273350049180, +-0.569596370289802920, -0.569637465805566180, -0.569678559897235480, -0.569719652564708250, -0.569760743807882000, -0.569801833626654150, -0.569842922020921460, -0.569884008990581340, +-0.569925094535531640, -0.569966178655668900, -0.570007261350890640, -0.570048342621094160, -0.570089422466177220, -0.570130500886036450, -0.570171577880569380, -0.570212653449673310, +-0.570253727593246110, -0.570294800311184070, -0.570335871603385170, -0.570376941469746490, -0.570418009910165890, -0.570459076924539790, -0.570500142512766150, -0.570541206674742060, +-0.570582269410365270, -0.570623330719532530, -0.570664390602141470, -0.570705449058089730, -0.570746506087274060, -0.570787561689592100, -0.570828615864941270, -0.570869668613219190, +-0.570910719934322630, -0.570951769828149210, -0.570992818294596470, -0.571033865333562040, -0.571074910944942450, -0.571115955128635670, -0.571156997884539000, -0.571198039212550190, +-0.571239079112566000, -0.571280117584484050, -0.571321154628201770, -0.571362190243617010, -0.571403224430626410, -0.571444257189127720, -0.571485288519018360, -0.571526318420196300, +-0.571567346892557950, -0.571608373936001170, -0.571649399550423930, -0.571690423735722760, -0.571731446491795640, -0.571772467818539850, -0.571813487715853160, -0.571854506183632540, +-0.571895523221775500, -0.571936538830179810, -0.571977553008742980, -0.572018565757361990, -0.572059577075934580, -0.572100586964358280, -0.572141595422530850, -0.572182602450349020, +-0.572223608047710660, -0.572264612214513410, -0.572305614950654910, -0.572346616256032000, -0.572387616130542560, -0.572428614574084450, -0.572469611586554410, -0.572510607167850290, +-0.572551601317869750, -0.572592594036510530, -0.572633585323669480, -0.572674575179244470, -0.572715563603133030, -0.572756550595233000, -0.572797536155441380, -0.572838520283655780, +-0.572879502979773860, -0.572920484243693570, -0.572961464075311790, -0.573002442474526250, -0.573043419441234600, -0.573084394975334810, -0.573125369076723730, -0.573166341745299120, +-0.573207312980959060, -0.573248282783600400, -0.573289251153120900, -0.573330218089418420, -0.573371183592390700, -0.573412147661934600, -0.573453110297948210, -0.573494071500329050, +-0.573535031268975090, -0.573575989603783090, -0.573616946504651230, -0.573657901971476920, -0.573698856004158260, -0.573739808602591990, -0.573780759766676310, -0.573821709496308730, +-0.573862657791387230, -0.573903604651808670, -0.573944550077471140, -0.573985494068272260, -0.574026436624110010, -0.574067377744881260, -0.574108317430484070, -0.574149255680816540, +-0.574190192495775410, -0.574231127875258870, -0.574272061819164460, -0.574312994327390250, -0.574353925399833210, -0.574394855036391320, -0.574435783236962320, -0.574476710001444290, +-0.574517635329733990, -0.574558559221729710, -0.574599481677328990, -0.574640402696429910, -0.574681322278929540, -0.574722240424725750, -0.574763157133716400, -0.574804072405799560, +-0.574844986240872210, -0.574885898638832330, -0.574926809599578090, -0.574967719123006480, -0.575008627209015470, -0.575049533857503010, -0.575090439068366990, -0.575131342841504580, +-0.575172245176813760, -0.575213146074192380, -0.575254045533538430, -0.575294943554749080, -0.575335840137722320, -0.575376735282356000, -0.575417628988548200, -0.575458521256195900, +-0.575499412085197390, -0.575540301475450320, -0.575581189426852880, -0.575622075939302040, -0.575662961012695980, -0.575703844646933030, -0.575744726841910030, -0.575785607597525170, +-0.575826486913676330, -0.575867364790261570, -0.575908241227178100, -0.575949116224323990, -0.575989989781597100, -0.576030861898895630, -0.576071732576116660, -0.576112601813158380, +-0.576153469609918530, -0.576194335966295320, -0.576235200882186050, -0.576276064357488680, -0.576316926392101190, -0.576357786985921660, -0.576398646138847390, -0.576439503850776470, +-0.576480360121607190, -0.576521214951236650, -0.576562068339563030, -0.576602920286484190, -0.576643770791898550, -0.576684619855702960, -0.576725467477795960, -0.576766313658075180, +-0.576807158396439150, -0.576848001692784720, -0.576888843547010310, -0.576929683959013780, -0.576970522928693440, -0.577011360455946360, -0.577052196540670970, -0.577093031182765000, +-0.577133864382126880, -0.577174696138653800, -0.577215526452243830, -0.577256355322795180, -0.577297182750205920, -0.577338008734373350, -0.577378833275195790, -0.577419656372571420, +-0.577460478026397660, -0.577501298236572590, -0.577542117002994400, -0.577582934325561180, -0.577623750204170340, -0.577664564638720070, -0.577705377629108450, -0.577746189175233680, +-0.577786999276993170, -0.577827807934285010, -0.577868615147007490, -0.577909420915058700, -0.577950225238336060, -0.577991028116737750, -0.578031829550161970, -0.578072629538506910, +-0.578113428081669990, -0.578154225179549400, -0.578195020832043660, -0.578235815039050080, -0.578276607800466860, -0.578317399116192180, -0.578358188986124340, -0.578398977410160660, +-0.578439764388199550, -0.578480549920138980, -0.578521334005877460, -0.578562116645312210, -0.578602897838341730, -0.578643677584863900, -0.578684455884777350, -0.578725232737979270, +-0.578766008144368070, -0.578806782103841840, -0.578847554616299000, -0.578888325681636950, -0.578929095299754120, -0.578969863470548910, -0.579010630193918630, -0.579051395469761810, +-0.579092159297976530, -0.579132921678461090, -0.579173682611113130, -0.579214442095830840, -0.579255200132512530, -0.579295956721056600, -0.579336711861360380, -0.579377465553322370, +-0.579418217796840660, -0.579458968591813780, -0.579499717938139150, -0.579540465835715280, -0.579581212284440150, -0.579621957284212400, -0.579662700834929320, -0.579703442936489570, +-0.579744183588791210, -0.579784922791732770, -0.579825660545211670, -0.579866396849126330, -0.579907131703375380, -0.579947865107856340, -0.579988597062467530, -0.580029327567107230, +-0.580070056621673990, -0.580110784226065320, -0.580151510380179650, -0.580192235083915150, -0.580232958337170480, -0.580273680139843040, -0.580314400491831360, -0.580355119393033750, +-0.580395836843348610, -0.580436552842673590, -0.580477267390907210, -0.580517980487947560, -0.580558692133693380, -0.580599402328042190, -0.580640111070892420, -0.580680818362142690, +-0.580721524201690650, -0.580762228589434710, -0.580802931525273180, -0.580843633009104800, -0.580884333040826870, -0.580925031620338150, -0.580965728747536820, -0.581006424422321640, +-0.581047118644589910, -0.581087811414240480, -0.581128502731171450, -0.581169192595281550, -0.581209881006468310, -0.581250567964630370, -0.581291253469665930, -0.581331937521473830, +-0.581372620119951500, -0.581413301264997570, -0.581453980956510800, -0.581494659194388700, -0.581535335978530020, -0.581576011308832850, -0.581616685185196160, -0.581657357607517360, +-0.581698028575695080, -0.581738698089627860, -0.581779366149214110, -0.581820032754351680, -0.581860697904939220, -0.581901361600874910, -0.581942023842057620, -0.581982684628384870, +-0.582023343959755410, -0.582064001836067550, -0.582104658257220130, -0.582145313223110690, -0.582185966733637870, -0.582226618788700630, -0.582267269388196400, -0.582307918532024020, +-0.582348566220081910, -0.582389212452268600, -0.582429857228482060, -0.582470500548620710, -0.582511142412583280, -0.582551782820268200, -0.582592421771573440, -0.582633059266397520, +-0.582673695304638970, -0.582714329886196540, -0.582754963010967960, -0.582795594678852000, -0.582836224889746960, -0.582876853643551800, -0.582917480940164160, -0.582958106779482790, +-0.582998731161406100, -0.583039354085832960, -0.583079975552661110, -0.583120595561789300, -0.583161214113116390, -0.583201831206540120, -0.583242446841959140, -0.583283061019272190, +-0.583323673738377790, -0.583364284999174030, -0.583404894801559440, -0.583445503145432640, -0.583486110030692400, -0.583526715457236560, -0.583567319424963980, -0.583607921933773090, +-0.583648522983562620, -0.583689122574230670, -0.583729720705675750, -0.583770317377796610, -0.583810912590492110, -0.583851506343659900, -0.583892098637198930, -0.583932689471007960, +-0.583973278844985070, -0.584013866759028890, -0.584054453213038060, -0.584095038206911440, -0.584135621740547010, -0.584176203813843390, -0.584216784426699220, -0.584257363579013590, +-0.584297941270684130, -0.584338517501609700, -0.584379092271689160, -0.584419665580821150, -0.584460237428903630, -0.584500807815835470, -0.584541376741515410, -0.584581944205842200, +-0.584622510208713700, -0.584663074750028990, -0.584703637829687040, -0.584744199447585490, -0.584784759603623530, -0.584825318297699680, -0.584865875529712810, -0.584906431299560990, +-0.584946985607142980, -0.584987538452357620, -0.585028089835103680, -0.585068639755279230, -0.585109188212783130, -0.585149735207514120, -0.585190280739371070, -0.585230824808252060, +-0.585271367414055830, -0.585311908556681250, -0.585352448236027280, -0.585392986451991890, -0.585433523204473950, -0.585474058493372200, -0.585514592318585710, -0.585555124680012360, +-0.585595655577551110, -0.585636185011101150, -0.585676712980560450, -0.585717239485827880, -0.585757764526802170, -0.585798288103382530, -0.585838810215466690, -0.585879330862953960, +-0.585919850045742760, -0.585960367763732390, -0.586000884016820710, -0.586041398804906800, -0.586081912127889400, -0.586122423985667610, -0.586162934378139380, -0.586203443305203910, +-0.586243950766759720, -0.586284456762706020, -0.586324961292940870, -0.586365464357363250, -0.586405965955872350, -0.586446466088366150, -0.586486964754743820, -0.586527461954904130, +-0.586567957688746030, -0.586608451956167730, -0.586648944757068300, -0.586689436091346610, -0.586729925958901610, -0.586770414359631400, -0.586810901293435160, -0.586851386760211650, +-0.586891870759860160, -0.586932353292278440, -0.586972834357366020, -0.587013313955021430, -0.587053792085143860, -0.587094268747631600, -0.587134743942383520, -0.587175217669299030, +-0.587215689928276110, -0.587256160719213940, -0.587296630042011380, -0.587337097896567630, -0.587377564282780760, -0.587418029200549970, -0.587458492649774120, -0.587498954630352400, +-0.587539415142182890, -0.587579874185164890, -0.587620331759197260, -0.587660787864179080, -0.587701242500008550, -0.587741695666584960, -0.587782147363807070, -0.587822597591574290, +-0.587863046349784590, -0.587903493638337270, -0.587943939457131530, -0.587984383806065660, -0.588024826685038860, -0.588065268093949880, -0.588105708032698130, -0.588146146501181800, +-0.588186583499300090, -0.588227019026951850, -0.588267453084036500, -0.588307885670452110, -0.588348316786098110, -0.588388746430873240, -0.588429174604676810, -0.588469601307407110, +-0.588510026538963450, -0.588550450299244690, -0.588590872588150240, -0.588631293405578180, -0.588671712751427930, -0.588712130625598350, -0.588752547027988850, -0.588792961958497510, +-0.588833375417023850, -0.588873787403467190, -0.588914197917725590, -0.588954606959698480, -0.588995014529284930, -0.589035420626384140, -0.589075825250894520, -0.589116228402715270, +-0.589156630081745460, -0.589197030287884500, -0.589237429021030490, -0.589277826281083050, -0.589318222067940930, -0.589358616381503660, -0.589399009221669430, -0.589439400588337770, +-0.589479790481407530, -0.589520178900778240, -0.589560565846348080, -0.589600951318016490, -0.589641335315682970, -0.589681717839245720, -0.589722098888604160, -0.589762478463657370, +-0.589802856564304760, -0.589843233190444630, -0.589883608341976400, -0.589923982018799140, -0.589964354220812280, -0.590004724947914230, -0.590045094200004280, -0.590085461976981640, +-0.590125828278745710, -0.590166193105194910, -0.590206556456228550, -0.590246918331745810, -0.590287278731646210, -0.590327637655827960, -0.590367995104190690, -0.590408351076633700, +-0.590448705573055510, -0.590489058593355540, -0.590529410137432990, -0.590569760205187260, -0.590610108796516650, -0.590650455911320930, -0.590690801549499040, -0.590731145710950420, +-0.590771488395573700, -0.590811829603268170, -0.590852169333933030, -0.590892507587467920, -0.590932844363771140, -0.590973179662742210, -0.591013513484280440, -0.591053845828285130, +-0.591094176694654920, -0.591134506083289210, -0.591174833994087320, -0.591215160426948550, -0.591255485381771640, -0.591295808858456010, -0.591336130856901180, -0.591376451377005790, +-0.591416770418669140, -0.591457087981790530, -0.591497404066269720, -0.591537718672004890, -0.591578031798895900, -0.591618343446841720, -0.591658653615741990, -0.591698962305495460, +-0.591739269516001310, -0.591779575247159180, -0.591819879498868380, -0.591860182271027440, -0.591900483563536190, -0.591940783376293630, -0.591981081709199500, -0.592021378562152420, +-0.592061673935051710, -0.592101967827797340, -0.592142260240287600, -0.592182551172422130, -0.592222840624100360, -0.592263128595221900, -0.592303415085685180, -0.592343700095390060, +-0.592383983624235500, -0.592424265672121480, -0.592464546238946400, -0.592504825324609910, -0.592545102929011410, -0.592585379052050440, -0.592625653693625740, -0.592665926853636950, +-0.592706198531983250, -0.592746468728564400, -0.592786737443279140, -0.592827004676026890, -0.592867270426707500, -0.592907534695219730, -0.592947797481462980, -0.592988058785336780, +-0.593028318606740770, -0.593068576945573690, -0.593108833801735070, -0.593149089175124430, -0.593189343065641310, -0.593229595473184550, -0.593269846397653900, -0.593310095838948450, +-0.593350343796968270, -0.593390590271611780, -0.593430835262778840, -0.593471078770368870, -0.593511320794281480, -0.593551561334415450, -0.593591800390670610, -0.593632037962946500, +-0.593672274051141980, -0.593712508655156790, -0.593752741774890350, -0.593792973410242400, -0.593833203561111580, -0.593873432227397860, -0.593913659409000540, -0.593953885105819370, +-0.593994109317753200, -0.594034332044701690, -0.594074553286564330, -0.594114773043241010, -0.594154991314630450, -0.594195208100632310, -0.594235423401146210, -0.594275637216071910, +-0.594315849545308140, -0.594356060388754660, -0.594396269746311100, -0.594436477617877320, -0.594476684003351850, -0.594516888902634770, -0.594557092315625700, -0.594597294242223630, +-0.594637494682328400, -0.594677693635839330, -0.594717891102656380, -0.594758087082678410, -0.594798281575805170, -0.594838474581936170, -0.594878666100971510, -0.594918856132809700, +-0.594959044677350720, -0.594999231734494200, -0.595039417304140010, -0.595079601386186760, -0.595119783980534670, -0.595159965087083020, -0.595200144705731900, -0.595240322836379950, +-0.595280499478927250, -0.595320674633273650, -0.595360848299318010, -0.595401020476960310, -0.595441191166099950, -0.595481360366637010, -0.595521528078470360, -0.595561694301499860, +-0.595601859035625130, -0.595642022280746140, -0.595682184036761650, -0.595722344303571740, -0.595762503081076030, -0.595802660369174290, -0.595842816167765690, -0.595882970476749980, +-0.595923123296026810, -0.595963274625496250, -0.596003424465057160, -0.596043572814609400, -0.596083719674053160, -0.596123865043287180, -0.596164008922211660, -0.596204151310726020, +-0.596244292208730430, -0.596284431616123660, -0.596324569532805880, -0.596364705958676740, -0.596404840893636100, -0.596444974337583030, -0.596485106290417510, -0.596525236752039170, +-0.596565365722348200, -0.596605493201243340, -0.596645619188624910, -0.596685743684392310, -0.596725866688445740, -0.596765988200684160, -0.596806108221007550, -0.596846226749315760, +-0.596886343785508640, -0.596926459329485400, -0.596966573381146000, -0.597006685940390520, -0.597046797007117940, -0.597086906581228430, -0.597127014662621640, -0.597167121251197640, +-0.597207226346855410, -0.597247329949495250, -0.597287432059016690, -0.597327532675319910, -0.597367631798303990, -0.597407729427868910, -0.597447825563914630, -0.597487920206341010, +-0.597528013355047350, -0.597568105009933510, -0.597608195170899580, -0.597648283837845410, -0.597688371010670180, -0.597728456689273990, -0.597768540873557130, -0.597808623563418460, +-0.597848704758758290, -0.597888784459476350, -0.597928862665472740, -0.597968939376646750, -0.598009014592898240, -0.598049088314127290, -0.598089160540233980, -0.598129231271117390, +-0.598169300506677710, -0.598209368246814810, -0.598249434491428870, -0.598289499240418960, -0.598329562493685300, -0.598369624251127720, -0.598409684512646530, -0.598449743278140600, +-0.598489800547510440, -0.598529856320656140, -0.598569910597476770, -0.598609963377872640, -0.598650014661743610, -0.598690064448989980, -0.598730112739510710, -0.598770159533206230, +-0.598810204829976270, -0.598850248629721250, -0.598890290932340250, -0.598930331737733470, -0.598970371045800860, -0.599010408856442740, -0.599050445169558190, -0.599090479985047500, +-0.599130513302810640, -0.599170545122747920, -0.599210575444758420, -0.599250604268742440, -0.599290631594600390, -0.599330657422231350, -0.599370681751535740, -0.599410704582413300, +-0.599450725914764560, -0.599490745748488600, -0.599530764083485820, -0.599570780919656100, -0.599610796256899840, -0.599650810095116120, -0.599690822434205460, -0.599730833274067730, +-0.599770842614603230, -0.599810850455711250, -0.599850856797292220, -0.599890861639246100, -0.599930864981473080, -0.599970866823872570, -0.600010867166344890, -0.600050866008789980, +-0.600090863351108390, -0.600130859193199200, -0.600170853534962910, -0.600210846376299730, -0.600250837717109190, -0.600290827557291570, -0.600330815896746860, -0.600370802735375350, +-0.600410788073076570, -0.600450771909750820, -0.600490754245298190, -0.600530735079618960, -0.600570714412612560, -0.600610692244179400, -0.600650668574219450, -0.600690643402633230, +-0.600730616729320040, -0.600770588554180310, -0.600810558877114100, -0.600850527698021940, -0.600890495016802920, -0.600930460833357770, -0.600970425147586810, -0.601010387959389440, +-0.601050349268666180, -0.601090309075316910, -0.601130267379242240, -0.601170224180341610, -0.601210179478515410, -0.601250133273663720, -0.601290085565687080, -0.601330036354484900, +-0.601369985639957580, -0.601409933422005330, -0.601449879700528540, -0.601489824475426760, -0.601529767746600390, -0.601569709513949610, -0.601609649777374970, -0.601649588536775750, +-0.601689525792052590, -0.601729461543106030, -0.601769395789835460, -0.601809328532141310, -0.601849259769923870, -0.601889189503083680, -0.601929117731520140, -0.601969044455133770, +-0.602008969673824890, -0.602048893387493790, -0.602088815596040220, -0.602128736299364590, -0.602168655497367090, -0.602208573189948250, -0.602248489377007700, -0.602288404058445970, +-0.602328317234163140, -0.602368228904059940, -0.602408139068035810, -0.602448047725991250, -0.602487954877826690, -0.602527860523442540, -0.602567764662738310, -0.602607667295614770, +-0.602647568421972420, -0.602687468041710690, -0.602727366154730440, -0.602767262760931620, -0.602807157860215100, -0.602847051452480300, -0.602886943537627840, -0.602926834115558140, +-0.602966723186171620, -0.603006610749367900, -0.603046496805047740, -0.603086381353111210, -0.603126264393459180, -0.603166145925991160, -0.603206025950607790, -0.603245904467209270, +-0.603285781475696340, -0.603325656975968630, -0.603365530967926780, -0.603405403451471530, -0.603445274426502310, -0.603485143892919960, -0.603525011850624680, -0.603564878299517330, +-0.603604743239497420, -0.603644606670465600, -0.603684468592322280, -0.603724329004968090, -0.603764187908302770, -0.603804045302226980, -0.603843901186641110, -0.603883755561445800, +-0.603923608426540800, -0.603963459781826750, -0.604003309627203940, -0.604043157962573350, -0.604083004787834500, -0.604122850102888130, -0.604162693907635000, -0.604202536201974730, +-0.604242376985808070, -0.604282216259035550, -0.604322054021557810, -0.604361890273274690, -0.604401725014086730, -0.604441558243894450, -0.604481389962598700, -0.604521220170099130, +-0.604561048866296470, -0.604600876051091140, -0.604640701724384000, -0.604680525886074790, -0.604720348536064270, -0.604760169674252830, -0.604799989300541350, -0.604839807414829570, +-0.604879624017018220, -0.604919439107008180, -0.604959252684699190, -0.604999064749992100, -0.605038875302787220, -0.605078684342985620, -0.605118491870486940, -0.605158297885192040, +-0.605198102387001450, -0.605237905375815900, -0.605277706851535150, -0.605317506814060270, -0.605357305263291570, -0.605397102199129900, -0.605436897621475230, -0.605476691530228210, +-0.605516483925289560, -0.605556274806560050, -0.605596064173939410, -0.605635852027328610, -0.605675638366628300, -0.605715423191739100, -0.605755206502561090, -0.605794988298995030, +-0.605834768580941870, -0.605874547348301480, -0.605914324600974610, -0.605954100338861990, -0.605993874561864490, -0.606033647269881960, -0.606073418462815260, -0.606113188140565030, +-0.606152956303032230, -0.606192722950116610, -0.606232488081719260, -0.606272251697740680, -0.606312013798081750, -0.606351774382642540, -0.606391533451323790, -0.606431291004026260, +-0.606471047040650800, -0.606510801561097380, -0.606550554565267070, -0.606590306053060630, -0.606630056024378140, -0.606669804479120440, -0.606709551417188190, -0.606749296838482550, +-0.606789040742903190, -0.606828783130351270, -0.606868524000727440, -0.606908263353932550, -0.606948001189866690, -0.606987737508430940, -0.607027472309525700, -0.607067205593052270, +-0.607106937358910300, -0.607146667607001090, -0.607186396337225260, -0.607226123549483690, -0.607265849243676550, -0.607305573419704700, -0.607345296077469340, -0.607385017216870330, +-0.607424736837808840, -0.607464454940185420, -0.607504171523901240, -0.607543886588856390, -0.607583600134951720, -0.607623312162088090, -0.607663022670166470, -0.607702731659086950, +-0.607742439128750700, -0.607782145079058260, -0.607821849509910810, -0.607861552421208430, -0.607901253812852090, -0.607940953684742770, -0.607980652036781310, -0.608020348868867910, +-0.608060044180903540, -0.608099737972789160, -0.608139430244425740, -0.608179120995713470, -0.608218810226553330, -0.608258497936846500, -0.608298184126493060, -0.608337868795394200, +-0.608377551943450670, -0.608417233570563650, -0.608456913676633130, -0.608496592261560390, -0.608536269325246070, -0.608575944867591480, -0.608615618888496690, -0.608655291387862900, +-0.608694962365590840, -0.608734631821581720, -0.608774299755735600, -0.608813966167953800, -0.608853631058137170, -0.608893294426186670, -0.608932956272002610, -0.608972616595486180, +-0.609012275396538570, -0.609051932675059970, -0.609091588430951460, -0.609131242664114000, -0.609170895374448800, -0.609210546561856030, -0.609250196226236880, -0.609289844367492230, +-0.609329490985523250, -0.609369136080230240, -0.609408779651514410, -0.609448421699276710, -0.609488062223418230, -0.609527701223839150, -0.609567338700441000, -0.609606974653124410, +-0.609646609081790690, -0.609686241986340140, -0.609725873366673940, -0.609765503222693520, -0.609805131554298940, -0.609844758361391510, -0.609884383643872210, -0.609924007401642210, +-0.609963629634601930, -0.610003250342652570, -0.610042869525695090, -0.610082487183630780, -0.610122103316359850, -0.610161717923783710, -0.610201331005803320, -0.610240942562319870, +-0.610280552593233770, -0.610320161098446220, -0.610359768077858410, -0.610399373531371410, -0.610438977458885650, -0.610478579860302410, -0.610518180735523110, -0.610557780084448050, +-0.610597377906978430, -0.610636974203015440, -0.610676568972460370, -0.610716162215213520, -0.610755753931176320, -0.610795344120249610, -0.610834932782335030, -0.610874519917332660, +-0.610914105525144020, -0.610953689605670090, -0.610993272158812380, -0.611032853184471090, -0.611072432682547630, -0.611112010652943070, -0.611151587095558950, -0.611191162010295440, +-0.611230735397053970, -0.611270307255735720, -0.611309877586242110, -0.611349446388473330, -0.611389013662331000, -0.611428579407716550, -0.611468143624530170, -0.611507706312673480, +-0.611547267472047570, -0.611586827102553850, -0.611626385204092630, -0.611665941776565520, -0.611705496819873520, -0.611745050333918130, -0.611784602318599770, -0.611824152773819960, +-0.611863701699479680, -0.611903249095480550, -0.611942794961722990, -0.611982339298108300, -0.612021882104537900, -0.612061423380913070, -0.612100963127134360, -0.612140501343103270, +-0.612180038028721230, -0.612219573183888750, -0.612259106808507370, -0.612298638902478150, -0.612338169465702740, -0.612377698498081550, -0.612417225999516090, -0.612456751969907560, +-0.612496276409157600, -0.612535799317166510, -0.612575320693835910, -0.612614840539067010, -0.612654358852761430, -0.612693875634819580, -0.612733390885143000, -0.612772904603632980, +-0.612812416790191050, -0.612851927444717730, -0.612891436567114530, -0.612930944157283110, -0.612970450215124090, -0.613009954740538760, -0.613049457733428670, -0.613088959193695220, +-0.613128459121239140, -0.613167957515961760, -0.613207454377764580, -0.613246949706549140, -0.613286443502215840, -0.613325935764666540, -0.613365426493802430, -0.613404915689525040, +-0.613444403351735000, -0.613483889480333940, -0.613523374075223280, -0.613562857136304430, -0.613602338663478130, -0.613641818656645910, -0.613681297115709180, -0.613720774040569570, +-0.613760249431127720, -0.613799723287285160, -0.613839195608943730, -0.613878666396003860, -0.613918135648367390, -0.613957603365935630, -0.613997069548610110, -0.614036534196291670, +-0.614075997308881850, -0.614115458886281940, -0.614154918928393910, -0.614194377435118070, -0.614233834406356370, -0.614273289842010020, -0.614312743741980860, -0.614352196106169530, +-0.614391646934477680, -0.614431096226806690, -0.614470543983058230, -0.614509990203133130, -0.614549434886933140, -0.614588878034359800, -0.614628319645313950, -0.614667759719697340, +-0.614707198257411270, -0.614746635258357600, -0.614786070722436960, -0.614825504649551100, -0.614864937039601540, -0.614904367892490030, -0.614943797208117200, -0.614983224986384910, +-0.615022651227194460, -0.615062075930447820, -0.615101499096045610, -0.615140920723889710, -0.615180340813881400, -0.615219759365922660, -0.615259176379914230, -0.615298591855757750, +-0.615338005793355180, -0.615377418192607270, -0.615416829053415770, -0.615456238375682200, -0.615495646159308410, -0.615535052404195150, -0.615574457110244280, -0.615613860277357210, +-0.615653261905435900, -0.615692661994381110, -0.615732060544094570, -0.615771457554477930, -0.615810853025433040, -0.615850246956860640, -0.615889639348662590, -0.615929030200740410, +-0.615968419512996080, -0.616007807285330330, -0.616047193517645030, -0.616086578209842140, -0.616125961361822410, -0.616165342973487800, -0.616204723044739830, -0.616244101575480370, +-0.616283478565610390, -0.616322854015031620, -0.616362227923645810, -0.616401600291354710, -0.616440971118059290, -0.616480340403661400, -0.616519708148062670, -0.616559074351165080, +-0.616598439012869480, -0.616637802133077730, -0.616677163711691460, -0.616716523748612630, -0.616755882243742120, -0.616795239196981980, -0.616834594608233640, -0.616873948477399180, +-0.616913300804379560, -0.616952651589076750, -0.616992000831392500, -0.617031348531227990, -0.617070694688485080, -0.617110039303065520, -0.617149382374871050, -0.617188723903802970, +-0.617228063889762920, -0.617267402332652760, -0.617306739232374450, -0.617346074588828950, -0.617385408401918250, -0.617424740671544070, -0.617464071397608280, -0.617503400580012070, +-0.617542728218657300, -0.617582054313445820, -0.617621378864279480, -0.617660701871059260, -0.617700023333687340, -0.617739343252065810, -0.617778661626095520, -0.617817978455678540, +-0.617857293740716630, -0.617896607481111750, -0.617935919676765090, -0.617975230327578620, -0.618014539433454080, -0.618053846994293550, -0.618093153009998010, -0.618132457480469630, +-0.618171760405610170, -0.618211061785321590, -0.618250361619504970, -0.618289659908062510, -0.618328956650895820, -0.618368251847907110, -0.618407545498997460, -0.618446837604068930, +-0.618486128163023620, -0.618525417175762700, -0.618564704642188270, -0.618603990562202060, -0.618643274935706140, -0.618682557762601730, -0.618721839042790990, -0.618761118776175570, +-0.618800396962657650, -0.618839673602138540, -0.618878948694520090, -0.618918222239704390, -0.618957494237593500, -0.618996764688088400, -0.619036033591091490, -0.619075300946504430, +-0.619114566754229490, -0.619153831014167770, -0.619193093726221560, -0.619232354890292490, -0.619271614506282990, -0.619310872574094120, -0.619350129093627970, -0.619389384064786830, +-0.619428637487472010, -0.619467889361585480, -0.619507139687029310, -0.619546388463705580, -0.619585635691515590, -0.619624881370361420, -0.619664125500145160, -0.619703368080768870, +-0.619742609112133750, -0.619781848594142200, -0.619821086526695990, -0.619860322909697390, -0.619899557743047720, -0.619938791026649060, -0.619978022760403480, -0.620017252944213170, +-0.620056481577979430, -0.620095708661604460, -0.620134934194990550, -0.620174158178038890, -0.620213380610651900, -0.620252601492731540, -0.620291820824179880, -0.620331038604898470, +-0.620370254834789360, -0.620409469513754640, -0.620448682641696610, -0.620487894218516470, -0.620527104244116610, -0.620566312718399020, -0.620605519641265980, -0.620644725012618800, +-0.620683928832359790, -0.620723131100391010, -0.620762331816614670, -0.620801530980932270, -0.620840728593245910, -0.620879924653458200, -0.620919119161470250, -0.620958312117184440, +-0.620997503520502980, -0.621036693371328050, -0.621075881669561070, -0.621115068415104330, -0.621154253607860030, -0.621193437247730350, -0.621232619334616710, -0.621271799868421630, +-0.621310978849046960, -0.621350156276395230, -0.621389332150367730, -0.621428506470866890, -0.621467679237794780, -0.621506850451053920, -0.621546020110545490, -0.621585188216172040, +-0.621624354767835620, -0.621663519765438650, -0.621702683208882560, -0.621741845098069730, -0.621781005432902600, -0.621820164213282680, -0.621859321439112270, -0.621898477110293670, +-0.621937631226729180, -0.621976783788320220, -0.622015934794969310, -0.622055084246578630, -0.622094232143050490, -0.622133378484286510, -0.622172523270189020, -0.622211666500660290, +-0.622250808175602630, -0.622289948294917680, -0.622329086858507850, -0.622368223866275330, -0.622407359318122630, -0.622446493213951070, -0.622485625553663380, -0.622524756337161980, +-0.622563885564348270, -0.622603013235124900, -0.622642139349393940, -0.622681263907058020, -0.622720386908018560, -0.622759508352178190, -0.622798628239438990, -0.622837746569703590, +-0.622876863342873400, -0.622915978558851170, -0.622955092217538970, -0.622994204318839340, -0.623033314862653900, -0.623072423848885170, -0.623111531277435350, -0.623150637148207060, +-0.623189741461101840, -0.623228844216022320, -0.623267945412870890, -0.623307045051549440, -0.623346143131960240, -0.623385239654005720, -0.623424334617588390, -0.623463428022610010, +-0.623502519868972980, -0.623541610156579610, -0.623580698885332630, -0.623619786055133570, -0.623658871665884960, -0.623697955717489210, -0.623737038209848940, -0.623776119142865680, +-0.623815198516442180, -0.623854276330480630, -0.623893352584883760, -0.623932427279553230, -0.623971500414391530, -0.624010571989301540, -0.624049642004184670, -0.624088710458943760, +-0.624127777353481020, -0.624166842687699170, -0.624205906461499980, -0.624244968674785850, -0.624284029327459410, -0.624323088419423300, -0.624362145950579040, -0.624401201920829370, +-0.624440256330076720, -0.624479309178223810, -0.624518360465172280, -0.624557410190824890, -0.624596458355083930, -0.624635504957852140, -0.624674549999031270, -0.624713593478524070, +-0.624752635396232820, -0.624791675752060400, -0.624830714545908440, -0.624869751777679560, -0.624908787447276740, -0.624947821554601600, -0.624986854099557010, -0.625025885082045150, +-0.625064914501968990, -0.625103942359230170, -0.625142968653731420, -0.625181993385375390, -0.625221016554064590, -0.625260038159700990, -0.625299058202187340, -0.625338076681425940, +-0.625377093597319740, -0.625416108949770400, -0.625455122738680870, -0.625494134963953560, -0.625533145625491120, -0.625572154723195610, -0.625611162256969670, -0.625650168226716150, +-0.625689172632336810, -0.625728175473734600, -0.625767176750811950, -0.625806176463471700, -0.625845174611615710, -0.625884171195146720, -0.625923166213967370, -0.625962159667980410, +-0.626001151557087690, -0.626040141881192060, -0.626079130640196160, -0.626118117834002730, -0.626157103462513740, -0.626196087525631830, -0.626235070023259840, -0.626274050955300420, +-0.626313030321655640, -0.626352008122228240, -0.626390984356921090, -0.626429959025636250, -0.626468932128276480, -0.626507903664744290, -0.626546873634942770, -0.626585842038773650, +-0.626624808876140030, -0.626663774146944300, -0.626702737851089540, -0.626741699988477620, -0.626780660559011380, -0.626819619562593470, -0.626858576999126950, -0.626897532868513570, +-0.626936487170656310, -0.626975439905457900, -0.627014391072821310, -0.627053340672648290, -0.627092288704841900, -0.627131235169304910, -0.627170180065940050, -0.627209123394649510, +-0.627248065155336040, -0.627287005347902830, -0.627325943972251830, -0.627364881028285800, -0.627403816515907710, -0.627442750435020400, -0.627481682785525740, -0.627520613567327020, +-0.627559542780326660, -0.627598470424427850, -0.627637396499532540, -0.627676321005543710, -0.627715243942364110, -0.627754165309896690, -0.627793085108043550, -0.627832003336707740, +-0.627870919995791810, -0.627909835085199040, -0.627948748604831300, -0.627987660554591650, -0.628026570934383190, -0.628065479744107980, -0.628104386983669110, -0.628143292652969200, +-0.628182196751911450, -0.628221099280397820, -0.628260000238331510, -0.628298899625615140, -0.628337797442151900, -0.628376693687843880, -0.628415588362594040, -0.628454481466305230, +-0.628493372998880530, -0.628532262960222130, -0.628571151350233110, -0.628610038168816110, -0.628648923415874420, -0.628687807091310000, -0.628726689195026170, -0.628765569726925880, +-0.628804448686911320, -0.628843326074885690, -0.628882201890751720, -0.628921076134412620, -0.628959948805770440, -0.628998819904728390, -0.629037689431189320, -0.629076557385056410, +-0.629115423766231750, -0.629154288574618410, -0.629193151810119480, -0.629232013472637910, -0.629270873562076120, -0.629309732078336960, -0.629348589021323620, -0.629387444390939080, +-0.629426298187085620, -0.629465150409666330, -0.629504001058584620, -0.629542850133742450, -0.629581697635043240, -0.629620543562389720, -0.629659387915685320, -0.629698230694832000, +-0.629737071899733050, -0.629775911530291550, -0.629814749586410480, -0.629853586067992350, -0.629892420974940140, -0.629931254307156910, -0.629970086064545850, -0.630008916247009280, +-0.630047744854450480, -0.630086571886772200, -0.630125397343877850, -0.630164221225669730, -0.630203043532051030, -0.630241864262924720, -0.630280683418194100, -0.630319500997761350, +-0.630358317001530000, -0.630397131429403120, -0.630435944281283020, -0.630474755557073110, -0.630513565256676230, -0.630552373379995920, -0.630591179926934250, -0.630629984897394640, +-0.630668788291280150, -0.630707590108493870, -0.630746390348938420, -0.630785189012516900, -0.630823986099132480, -0.630862781608688360, -0.630901575541087060, -0.630940367896231650, +-0.630979158674025430, -0.631017947874371710, -0.631056735497172670, -0.631095521542331840, -0.631134306009752510, -0.631173088899337100, -0.631211870210989010, -0.631250649944611220, +-0.631289428100107130, -0.631328204677379160, -0.631366979676330600, -0.631405753096864640, -0.631444524938884700, -0.631483295202293070, -0.631522063886993170, -0.631560830992888070, +-0.631599596519881290, -0.631638360467875140, -0.631677122836773130, -0.631715883626478350, -0.631754642836894090, -0.631793400467922980, -0.631832156519468340, -0.631870910991433670, +-0.631909663883721380, -0.631948415196234900, -0.631987164928877410, -0.632025913081552320, -0.632064659654162140, -0.632103404646610300, -0.632142148058799870, -0.632180889890634480, +-0.632219630142016540, -0.632258368812849580, -0.632297105903036560, -0.632335841412481230, -0.632374575341085880, -0.632413307688754140, -0.632452038455389110, -0.632490767640894290, +-0.632529495245172320, -0.632568221268126510, -0.632606945709660140, -0.632645668569676860, -0.632684389848078950, -0.632723109544770180, -0.632761827659653830, -0.632800544192632650, +-0.632839259143610170, -0.632877972512489450, -0.632916684299174140, -0.632955394503566860, -0.632994103125571030, -0.633032810165089940, -0.633071515622027240, -0.633110219496285320, +-0.633148921787767830, -0.633187622496378170, -0.633226321622019640, -0.633265019164595100, -0.633303715124007960, -0.633342409500161520, -0.633381102292959410, -0.633419793502304150, +-0.633458483128099490, -0.633497171170248840, -0.633535857628655050, -0.633574542503221540, -0.633613225793851710, -0.633651907500449200, -0.633690587622916520, -0.633729266161157430, +-0.633767943115075120, -0.633806618484573310, -0.633845292269554550, -0.633883964469922680, -0.633922635085580780, -0.633961304116432700, -0.633999971562380970, -0.634038637423329440, +-0.634077301699181200, -0.634115964389840080, -0.634154625495208730, -0.634193285015190790, -0.634231942949689990, -0.634270599298608960, -0.634309254061851460, -0.634347907239320770, +-0.634386558830920650, -0.634425208836553840, -0.634463857256124090, -0.634502504089534570, -0.634541149336689150, -0.634579792997490570, -0.634618435071842460, -0.634657075559648340, +-0.634695714460811860, -0.634734351775235630, -0.634772987502823630, -0.634811621643479150, -0.634850254197105950, -0.634888885163606750, -0.634927514542885320, -0.634966142334845500, +-0.635004768539390030, -0.635043393156422550, -0.635082016185846590, -0.635120637627565990, -0.635159257481483390, -0.635197875747502640, -0.635236492425527270, -0.635275107515460900, +-0.635313721017206510, -0.635352332930667840, -0.635390943255748300, -0.635429551992351740, -0.635468159140380910, -0.635506764699739770, -0.635545368670331620, -0.635583971052060440, +-0.635622571844829070, -0.635661171048541140, -0.635699768663100410, -0.635738364688410500, -0.635776959124374370, -0.635815551970895900, -0.635854143227878810, -0.635892732895226080, +-0.635931320972841440, -0.635969907460628540, -0.636008492358491220, -0.636047075666332340, -0.636085657384055760, -0.636124237511564990, -0.636162816048764010, -0.636201392995555670, +-0.636239968351843820, -0.636278542117532100, -0.636317114292524360, -0.636355684876723450, -0.636394253870033340, -0.636432821272357560, -0.636471387083600070, -0.636509951303663830, +-0.636548513932452710, -0.636587074969870550, -0.636625634415820430, -0.636664192270206210, -0.636702748532931520, -0.636741303203900320, -0.636779856283015590, -0.636818407770181060, +-0.636856957665300590, -0.636895505968278040, -0.636934052679016480, -0.636972597797419660, -0.637011141323391430, -0.637049683256835640, -0.637088223597655380, -0.637126762345754490, +-0.637165299501036730, -0.637203835063406050, -0.637242369032765430, -0.637280901409018830, -0.637319432192070430, -0.637357961381822990, -0.637396488978180800, -0.637435014981047270, +-0.637473539390326580, -0.637512062205921710, -0.637550583427736630, -0.637589103055675180, -0.637627621089641220, -0.637666137529537940, -0.637704652375269300, -0.637743165626738940, +-0.637781677283851160, -0.637820187346508800, -0.637858695814615850, -0.637897202688076260, -0.637935707966794000, -0.637974211650672140, -0.638012713739614770, -0.638051214233525620, +-0.638089713132308670, -0.638128210435867200, -0.638166706144105200, -0.638205200256926730, -0.638243692774234980, -0.638282183695933920, -0.638320673021927410, -0.638359160752119630, +-0.638397646886413540, -0.638436131424713340, -0.638474614366922880, -0.638513095712946120, -0.638551575462686370, -0.638590053616047590, -0.638628530172933750, -0.638667005133248920, +-0.638705478496896180, -0.638743950263779840, -0.638782420433803510, -0.638820889006871620, -0.638859355982887010, -0.638897821361754100, -0.638936285143376970, -0.638974747327658800, +-0.639013207914503670, -0.639051666903815650, -0.639090124295498720, -0.639128580089456170, -0.639167034285592180, -0.639205486883810510, -0.639243937884015570, -0.639282387286110420, +-0.639320835089999260, -0.639359281295586060, -0.639397725902774990, -0.639436168911469260, -0.639474610321573160, -0.639513050132990420, -0.639551488345625470, -0.639589924959381500, +-0.639628359974162670, -0.639666793389873310, -0.639705225206416590, -0.639743655423696820, -0.639782084041617850, -0.639820511060084090, -0.639858936478998610, -0.639897360298265940, +-0.639935782517789820, -0.639974203137474550, -0.640012622157223430, -0.640051039576940760, -0.640089455396530500, -0.640127869615896960, -0.640166282234943320, -0.640204693253574100, +-0.640243102671693040, -0.640281510489204560, -0.640319916706012070, -0.640358321322019750, -0.640396724337131910, -0.640435125751251940, -0.640473525564284160, -0.640511923776132640, +-0.640550320386701570, -0.640588715395894460, -0.640627108803615400, -0.640665500609768680, -0.640703890814258490, -0.640742279416988250, -0.640780666417862350, -0.640819051816784780, +-0.640857435613659930, -0.640895817808391110, -0.640934198400882730, -0.640972577391038860, -0.641010954778763910, -0.641049330563961290, -0.641087704746535310, -0.641126077326390040, +-0.641164448303429890, -0.641202817677558270, -0.641241185448679700, -0.641279551616698470, -0.641317916181518010, -0.641356279143042720, -0.641394640501176780, -0.641433000255824610, +-0.641471358406889510, -0.641509714954276110, -0.641548069897888370, -0.641586423237630710, -0.641624774973406750, -0.641663125105120910, -0.641701473632677160, -0.641739820555980110, +-0.641778165874933190, -0.641816509589440810, -0.641854851699407150, -0.641893192204736730, -0.641931531105332960, -0.641969868401100370, -0.642008204091943480, -0.642046538177765690, +-0.642084870658471640, -0.642123201533965400, -0.642161530804151390, -0.642199858468933350, -0.642238184528215570, -0.642276508981902360, -0.642314831829898240, -0.642353153072106610, +-0.642391472708432220, -0.642429790738779040, -0.642468107163051800, -0.642506421981153930, -0.642544735192989940, -0.642583046798464230, -0.642621356797481220, -0.642659665189944440, +-0.642697971975758400, -0.642736277154827950, -0.642774580727056400, -0.642812882692348380, -0.642851183050608180, -0.642889481801740330, -0.642927778945648450, -0.642966074482237080, +-0.643004368411410620, -0.643042660733073480, -0.643080951447129400, -0.643119240553482910, -0.643157528052038410, -0.643195813942700310, -0.643234098225372470, -0.643272380899959310, +-0.643310661966365100, -0.643348941424494720, -0.643387219274251580, -0.643425495515540400, -0.643463770148265500, -0.643502043172331510, -0.643540314587642050, -0.643578584394101870, +-0.643616852591615500, -0.643655119180086670, -0.643693384159420120, -0.643731647529519950, -0.643769909290291100, -0.643808169441637210, -0.643846427983462810, -0.643884684915672300, +-0.643922940238170540, -0.643961193950860930, -0.643999446053648450, -0.644037696546437390, -0.644075945429132270, -0.644114192701637060, -0.644152438363856380, -0.644190682415694550, +-0.644228924857056410, -0.644267165687845590, -0.644305404907966840, -0.644343642517324900, -0.644381878515823630, -0.644420112903367540, -0.644458345679861160, -0.644496576845209330, +-0.644534806399315710, -0.644573034342085020, -0.644611260673421780, -0.644649485393230750, -0.644687708501415660, -0.644725929997881250, -0.644764149882532060, -0.644802368155272810, +-0.644840584816007370, -0.644878799864640360, -0.644917013301076420, -0.644955225125220300, -0.644993435336975730, -0.645031643936247570, -0.645069850922940670, -0.645108056296958890, +-0.645146260058206860, -0.645184462206589200, -0.645222662742010680, -0.645260861664375240, -0.645299058973587520, -0.645337254669552270, -0.645375448752174230, -0.645413641221357140, +-0.645451832077006070, -0.645490021319025330, -0.645528208947319880, -0.645566394961793580, -0.645604579362351380, -0.645642762148897600, -0.645680943321337300, -0.645719122879574340, +-0.645757300823513570, -0.645795477153059850, -0.645833651868117030, -0.645871824968590190, -0.645909996454383740, -0.645948166325402640, -0.645986334581550860, -0.646024501222733140, +-0.646062666248854220, -0.646100829659818960, -0.646138991455531330, -0.646177151635896170, -0.646215310200818130, -0.646253467150202150, -0.646291622483952220, -0.646329776201973180, +-0.646367928304169780, -0.646406078790446760, -0.646444227660708300, -0.646482374914859270, -0.646520520552804290, -0.646558664574448330, -0.646596806979695350, -0.646634947768450430, +-0.646673086940618420, -0.646711224496103410, -0.646749360434810240, -0.646787494756643770, -0.646825627461508850, -0.646863758549309550, -0.646901888019950850, -0.646940015873337380, +-0.646978142109374320, -0.647016266727965420, -0.647054389729015970, -0.647092511112430490, -0.647130630878114070, -0.647168749025970770, -0.647206865555905560, -0.647244980467823190, +-0.647283093761628740, -0.647321205437226150, -0.647359315494520640, -0.647397423933417150, -0.647435530753819770, -0.647473635955633450, -0.647511739538763180, -0.647549841503113790, +-0.647587941848589590, -0.647626040575095430, -0.647664137682536280, -0.647702233170816990, -0.647740327039841860, -0.647778419289515850, -0.647816509919743820, -0.647854598930430850, +-0.647892686321481110, -0.647930772092799590, -0.647968856244291120, -0.648006938775860910, -0.648045019687413020, -0.648083098978852520, -0.648121176650084620, -0.648159252701013490, +-0.648197327131544210, -0.648235399941581640, -0.648273471131030840, -0.648311540699796020, -0.648349608647782350, -0.648387674974894690, -0.648425739681038230, -0.648463802766117040, +-0.648501864230036310, -0.648539924072701000, -0.648577982294016090, -0.648616038893885970, -0.648654093872215840, -0.648692147228910330, -0.648730198963874850, -0.648768249077013470, +-0.648806297568231600, -0.648844344437433880, -0.648882389684525720, -0.648920433309411180, -0.648958475311995580, -0.648996515692184080, -0.649034554449881010, -0.649072591584991530, +-0.649110627097420620, -0.649148660987073470, -0.649186693253854250, -0.649224723897668390, -0.649262752918420620, -0.649300780316016350, -0.649338806090359880, -0.649376830241356280, +-0.649414852768910640, -0.649452873672928250, -0.649490892953313300, -0.649528910609971090, -0.649566926642806690, -0.649604941051725170, -0.649642953836631070, -0.649680964997429560, +-0.649718974534026050, -0.649756982446324630, -0.649794988734230810, -0.649832993397649550, -0.649870996436486160, -0.649908997850644820, -0.649946997640031170, -0.649984995804549830, +-0.650022992344106540, -0.650060987258605280, -0.650098980547951570, -0.650136972212050470, -0.650174962250807290, -0.650212950664126210, -0.650250937451912980, -0.650288922614072230, +-0.650326906150509590, -0.650364888061129350, -0.650402868345836830, -0.650440847004537530, -0.650478824037135750, -0.650516799443536910, -0.650554773223646080, -0.650592745377368660, +-0.650630715904609080, -0.650668684805272620, -0.650706652079264480, -0.650744617726490060, -0.650782581746853770, -0.650820544140261030, -0.650858504906616900, -0.650896464045826910, +-0.650934421557795350, -0.650972377442427750, -0.651010331699629300, -0.651048284329305280, -0.651086235331360230, -0.651124184705699550, -0.651162132452228760, -0.651200078570852270, +-0.651238023061475600, -0.651275965924003940, -0.651313907158342700, -0.651351846764396280, -0.651389784742070320, -0.651427721091269780, -0.651465655811900410, -0.651503588903866500, +-0.651541520367073580, -0.651579450201426940, -0.651617378406831980, -0.651655304983193240, -0.651693229930416230, -0.651731153248406140, -0.651769074937068480, -0.651806994996307900, +-0.651844913426029680, -0.651882830226139350, -0.651920745396542100, -0.651958658937142780, -0.651996570847846790, -0.652034481128559660, -0.652072389779186020, -0.652110296799631390, +-0.652148202189801070, -0.652186105949600580, -0.652224008078934440, -0.652261908577708270, -0.652299807445827380, -0.652337704683197290, -0.652375600289722520, -0.652413494265308920, +-0.652451386609861460, -0.652489277323285880, -0.652527166405486800, -0.652565053856369760, -0.652602939675840150, -0.652640823863803510, -0.652678706420164460, -0.652716587344828620, +-0.652754466637701650, -0.652792344298688270, -0.652830220327694000, -0.652868094724624040, -0.652905967489384340, -0.652943838621879320, -0.652981708122014730, -0.653019575989695840, +-0.653057442224828310, -0.653095306827316870, -0.653133169797067260, -0.653171031133984670, -0.653208890837974730, -0.653246748908942300, -0.653284605346793110, -0.653322460151432250, +-0.653360313322765670, -0.653398164860697910, -0.653436014765134800, -0.653473863035981870, -0.653511709673144090, -0.653549554676526980, -0.653587398046035940, -0.653625239781576830, +-0.653663079883054170, -0.653700918350373920, -0.653738755183441270, -0.653776590382162180, -0.653814423946441180, -0.653852255876184230, -0.653890086171296510, -0.653927914831684000, +-0.653965741857251310, -0.654003567247904320, -0.654041391003548410, -0.654079213124089340, -0.654117033609431850, -0.654154852459481910, -0.654192669674144690, -0.654230485253326280, +-0.654268299196931190, -0.654306111504865400, -0.654343922177034740, -0.654381731213343860, -0.654419538613698610, -0.654457344378004620, -0.654495148506167520, -0.654532950998092280, +-0.654570751853684630, -0.654608551072850100, -0.654646348655494540, -0.654684144601522690, -0.654721938910840520, -0.654759731583353540, -0.654797522618967620, -0.654835312017587490, +-0.654873099779119120, -0.654910885903467910, -0.654948670390539830, -0.654986453240239850, -0.655024234452473710, -0.655062014027147250, -0.655099791964165460, -0.655137568263434170, +-0.655175342924859020, -0.655213115948345750, -0.655250887333799440, -0.655288657081125820, -0.655326425190230650, -0.655364191661019780, -0.655401956493397940, -0.655439719687271330, +-0.655477481242545460, -0.655515241159126180, -0.655552999436918360, -0.655590756075828170, -0.655628511075761030, -0.655666264436623010, -0.655704016158318860, -0.655741766240754750, +-0.655779514683836550, -0.655817261487469330, -0.655855006651558830, -0.655892750176010900, -0.655930492060731400, -0.655968232305625290, -0.656005970910598650, -0.656043707875556990, +-0.656081443200406510, -0.656119176885052060, -0.656156908929399600, -0.656194639333354980, -0.656232368096824060, -0.656270095219711800, -0.656307820701924390, -0.656345544543367350, +-0.656383266743946870, -0.656420987303567900, -0.656458706222136420, -0.656496423499558500, -0.656534139135739210, -0.656571853130584530, -0.656609565484000290, -0.656647276195892360, +-0.656684985266166030, -0.656722692694727160, -0.656760398481481600, -0.656798102626335310, -0.656835805129193480, -0.656873505989962080, -0.656911205208547070, -0.656948902784854180, +-0.656986598718788840, -0.657024293010257000, -0.657061985659164400, -0.657099676665417130, -0.657137366028920370, -0.657175053749580180, -0.657212739827302330, -0.657250424261993090, +-0.657288107053557340, -0.657325788201901350, -0.657363467706931210, -0.657401145568552110, -0.657438821786670120, -0.657476496361190990, -0.657514169292021110, -0.657551840579065350, +-0.657589510222230000, -0.657627178221420920, -0.657664844576544280, -0.657702509287505180, -0.657740172354209670, -0.657777833776563850, -0.657815493554473770, -0.657853151687844640, +-0.657890808176582630, -0.657928463020593490, -0.657966116219783630, -0.658003767774058110, -0.658041417683323140, -0.658079065947485000, -0.658116712566448880, -0.658154357540120970, +-0.658192000868407120, -0.658229642551213740, -0.658267282588445800, -0.658304920980009700, -0.658342557725811180, -0.658380192825756770, -0.658417826279751430, -0.658455458087701560, +-0.658493088249513030, -0.658530716765092120, -0.658568343634344130, -0.658605968857175260, -0.658643592433491460, -0.658681214363198930, -0.658718834646203180, -0.658756453282410280, +-0.658794070271726540, -0.658831685614057360, -0.658869299309308930, -0.658906911357387210, -0.658944521758198620, -0.658982130511648330, -0.659019737617642760, -0.659057343076087760, +-0.659094946886889850, -0.659132549049954220, -0.659170149565187160, -0.659207748432494740, -0.659245345651783390, -0.659282941222958160, -0.659320535145925700, -0.659358127420591860, +-0.659395718046863030, -0.659433307024644640, -0.659470894353842870, -0.659508480034364020, -0.659546064066114160, -0.659583646448998810, -0.659621227182924490, -0.659658806267797270, +-0.659696383703522790, -0.659733959490007350, -0.659771533627157010, -0.659809106114878090, -0.659846676953076190, -0.659884246141657530, -0.659921813680528270, -0.659959379569594830, +-0.659996943808762620, -0.660034506397937930, -0.660072067337027060, -0.660109626625936420, -0.660147184264571310, -0.660184740252838240, -0.660222294590643300, -0.660259847277893000, +-0.660297398314492750, -0.660334947700348950, -0.660372495435368130, -0.660410041519455810, -0.660447585952518290, -0.660485128734461860, -0.660522669865192920, -0.660560209344617010, +-0.660597747172640530, -0.660635283349169770, -0.660672817874111030, -0.660710350747369950, -0.660747881968853030, -0.660785411538466370, -0.660822939456116480, -0.660860465721708980, +-0.660897990335150290, -0.660935513296346590, -0.660973034605204400, -0.661010554261629360, -0.661048072265527980, -0.661085588616806660, -0.661123103315371050, -0.661160616361127770, +-0.661198127753982900, -0.661235637493843060, -0.661273145580613790, -0.661310652014201580, -0.661348156794512750, -0.661385659921453930, -0.661423161394930630, -0.661460661214849370, +-0.661498159381116560, -0.661535655893638500, -0.661573150752321150, -0.661610643957070810, -0.661648135507793890, -0.661685625404397020, -0.661723113646785710, -0.661760600234866600, +-0.661798085168546320, -0.661835568447730620, -0.661873050072325890, -0.661910530042238540, -0.661948008357375110, -0.661985485017641430, -0.662022960022944030, -0.662060433373189210, +-0.662097905068283700, -0.662135375108133030, -0.662172843492643940, -0.662210310221722720, -0.662247775295276120, -0.662285238713209660, -0.662322700475430180, -0.662360160581843880, +-0.662397619032357610, -0.662435075826876880, -0.662472530965308450, -0.662509984447558820, -0.662547436273534410, -0.662584886443141170, -0.662622334956285640, -0.662659781812874660, +-0.662697227012813860, -0.662734670556009990, -0.662772112442369550, -0.662809552671799080, -0.662846991244204320, -0.662884428159492220, -0.662921863417568980, -0.662959297018341440, +-0.662996728961715240, -0.663034159247597340, -0.663071587875893930, -0.663109014846511970, -0.663146440159357090, -0.663183863814336140, -0.663221285811355530, -0.663258706150322010, +-0.663296124831141420, -0.663333541853720510, -0.663370957217966020, -0.663408370923783910, -0.663445782971080810, -0.663483193359763250, -0.663520602089738070, -0.663558009160911120, +-0.663595414573189050, -0.663632818326478470, -0.663670220420686130, -0.663707620855717990, -0.663745019631480690, -0.663782416747880970, -0.663819812204825440, -0.663857206002220090, +-0.663894598139971650, -0.663931988617986860, -0.663969377436172350, -0.664006764594434080, -0.664044150092678810, -0.664081533930813590, -0.664118916108744180, -0.664156296626377540, +-0.664193675483620070, -0.664231052680378850, -0.664268428216559510, -0.664305802092069240, -0.664343174306814440, -0.664380544860701970, -0.664417913753637790, -0.664455280985528970, +-0.664492646556281820, -0.664530010465803400, -0.664567372713999680, -0.664604733300777520, -0.664642092226043420, -0.664679449489704590, -0.664716805091666750, -0.664754159031836770, +-0.664791511310121490, -0.664828861926427760, -0.664866210880661560, -0.664903558172729840, -0.664940903802539560, -0.664978247769996700, -0.665015590075008100, -0.665052930717480620, +-0.665090269697321210, -0.665127607014435630, -0.665164942668731160, -0.665202276660114330, -0.665239608988492100, -0.665276939653770550, -0.665314268655856630, -0.665351595994656990, +-0.665388921670078790, -0.665426245682027910, -0.665463568030411400, -0.665500888715135910, -0.665538207736108610, -0.665575525093235480, -0.665612840786423470, -0.665650154815579760, +-0.665687467180610340, -0.665724777881422150, -0.665762086917922160, -0.665799394290017110, -0.665836699997613300, -0.665874004040617810, -0.665911306418937250, -0.665948607132478830, +-0.665985906181148500, -0.666023203564853450, -0.666060499283500310, -0.666097793336996260, -0.666135085725247490, -0.666172376448160960, -0.666209665505643420, -0.666246952897602160, +-0.666284238623943150, -0.666321522684573560, -0.666358805079400370, -0.666396085808329990, -0.666433364871269360, -0.666470642268125250, -0.666507917998804930, -0.666545192063214500, +-0.666582464461261020, -0.666619735192851450, -0.666657004257892760, -0.666694271656291360, -0.666731537387954210, -0.666768801452788270, -0.666806063850700510, -0.666843324581597450, +-0.666880583645385940, -0.666917841041973050, -0.666955096771265850, -0.666992350833170660, -0.667029603227594530, -0.667066853954444430, -0.667104103013627440, -0.667141350405049960, +-0.667178596128618960, -0.667215840184241960, -0.667253082571824920, -0.667290323291275240, -0.667327562342499790, -0.667364799725405630, -0.667402035439899290, -0.667439269485887720, +-0.667476501863278120, -0.667513732571977550, -0.667550961611892200, -0.667588188982929600, -0.667625414684996480, -0.667662638718000130, -0.667699861081846870, -0.667737081776443860, +-0.667774300801698310, -0.667811518157517270, -0.667848733843807050, -0.667885947860475060, -0.667923160207428480, -0.667960370884573720, -0.667997579891818070, -0.668034787229068390, +-0.668071992896232090, -0.668109196893215460, -0.668146399219925910, -0.668183599876270300, -0.668220798862156020, -0.668257996177489490, -0.668295191822177890, -0.668332385796128300, +-0.668369578099248130, -0.668406768731443670, -0.668443957692622330, -0.668481144982691070, -0.668518330601557190, -0.668555514549127210, -0.668592696825308530, -0.668629877430008350, +-0.668667056363133170, -0.668704233624590310, -0.668741409214286930, -0.668778583132130230, -0.668815755378026840, -0.668852925951884060, -0.668890094853608950, -0.668927262083109040, +-0.668964427640290520, -0.669001591525061000, -0.669038753737327460, -0.669075914276997310, -0.669113073143977170, -0.669150230338174220, -0.669187385859495780, -0.669224539707849230, +-0.669261691883140890, -0.669298842385278370, -0.669335991214169090, -0.669373138369719570, -0.669410283851837100, -0.669447427660428970, -0.669484569795402610, -0.669521710256664400, +-0.669558849044122000, -0.669595986157682450, -0.669633121597253300, -0.669670255362741050, -0.669707387454053120, -0.669744517871096680, -0.669781646613779370, -0.669818773682007480, +-0.669855899075688770, -0.669893022794730290, -0.669930144839039570, -0.669967265208523120, -0.670004383903088470, -0.670041500922643030, -0.670078616267093970, -0.670115729936348160, +-0.670152841930312990, -0.670189952248896100, -0.670227060892003900, -0.670264167859544120, -0.670301273151423960, -0.670338376767550810, -0.670375478707831540, -0.670412578972173550, +-0.670449677560484010, -0.670486774472670690, -0.670523869708640090, -0.670560963268299730, -0.670598055151557130, -0.670635145358319580, -0.670672233888493840, -0.670709320741987640, +-0.670746405918708040, -0.670783489418562810, -0.670820571241458440, -0.670857651387302690, -0.670894729856003180, -0.670931806647466430, -0.670968881761600300, -0.671005955198311850, +-0.671043026957508840, -0.671080097039097990, -0.671117165442986830, -0.671154232169082880, -0.671191297217293540, -0.671228360587525770, -0.671265422279687000, -0.671302482293684720, +-0.671339540629426470, -0.671376597286819090, -0.671413652265770320, -0.671450705566187360, -0.671487757187977820, -0.671524807131048780, -0.671561855395307550, -0.671598901980662080, +-0.671635946887019000, -0.671672990114286160, -0.671710031662370750, -0.671747071531180630, -0.671784109720622410, -0.671821146230604070, -0.671858181061032680, -0.671895214211816310, +-0.671932245682861580, -0.671969275474076140, -0.672006303585367610, -0.672043330016643510, -0.672080354767810920, -0.672117377838777340, -0.672154399229450310, -0.672191418939737660, +-0.672228436969546150, -0.672265453318783510, -0.672302467987357270, -0.672339480975175150, -0.672376492282144020, -0.672413501908171620, -0.672450509853165900, -0.672487516117033500, +-0.672524520699682270, -0.672561523601019840, -0.672598524820953840, -0.672635524359391220, -0.672672522216239740, -0.672709518391407140, -0.672746512884800920, -0.672783505696328050, +-0.672820496825896510, -0.672857486273413690, -0.672894474038787550, -0.672931460121924840, -0.672968444522733520, -0.673005427241121000, -0.673042408276995350, -0.673079387630263200, +-0.673116365300832740, -0.673153341288611600, -0.673190315593506840, -0.673227288215426210, -0.673264259154277460, -0.673301228409968310, -0.673338195982405850, -0.673375161871497820, +-0.673412126077151950, -0.673449088599275990, -0.673486049437777010, -0.673523008592562980, -0.673559966063541400, -0.673596921850620260, -0.673633875953706380, -0.673670828372707970, +-0.673707779107532320, -0.673744728158087720, -0.673781675524280810, -0.673818621206019760, -0.673855565203212550, -0.673892507515766010, -0.673929448143588350, -0.673966387086586960, +-0.674003324344669920, -0.674040259917744300, -0.674077193805717960, -0.674114126008498630, -0.674151056525994390, -0.674187985358112090, -0.674224912504759910, -0.674261837965845380, +-0.674298761741276680, -0.674335683830960650, -0.674372604234805490, -0.674409522952718720, -0.674446439984608630, -0.674483355330381950, -0.674520268989946990, -0.674557180963211600, +-0.674594091250082960, -0.674630999850469150, -0.674667906764277790, -0.674704811991416960, -0.674741715531793850, -0.674778617385316410, -0.674815517551892400, -0.674852416031429980, +-0.674889312823836130, -0.674926207929019030, -0.674963101346886420, -0.674999993077346480, -0.675036883120306070, -0.675073771475673490, -0.675110658143356580, -0.675147543123263190, +-0.675184426415300740, -0.675221308019377190, -0.675258187935400380, -0.675295066163278390, -0.675331942702918410, -0.675368817554228620, -0.675405690717117090, -0.675442562191491010, +-0.675479431977258460, -0.675516300074327390, -0.675553166482605880, -0.675590031202001230, -0.675626894232421390, -0.675663755573774340, -0.675700615225968250, -0.675737473188910310, +-0.675774329462508590, -0.675811184046671180, -0.675848036941306020, -0.675884888146320420, -0.675921737661622670, -0.675958585487120620, -0.675995431622722350, -0.676032276068335270, +-0.676069118823867440, -0.676105959889227170, -0.676142799264321640, -0.676179636949059030, -0.676216472943347520, -0.676253307247094980, -0.676290139860208920, -0.676326970782597510, +-0.676363800014168740, -0.676400627554830660, -0.676437453404490800, -0.676474277563057220, -0.676511100030438020, -0.676547920806541360, -0.676584739891274540, -0.676621557284545870, +-0.676658372986263410, -0.676695186996335240, -0.676731999314668760, -0.676768809941172390, -0.676805618875754300, -0.676842426118321790, -0.676879231668783170, -0.676916035527046600, +-0.676952837693020170, -0.676989638166611290, -0.677026436947728350, -0.677063234036279440, -0.677100029432172620, -0.677136823135315420, -0.677173615145616250, -0.677210405462982950, +-0.677247194087324030, -0.677283981018546700, -0.677320766256559570, -0.677357549801270390, -0.677394331652587780, -0.677431111810418930, -0.677467890274672250, -0.677504667045256030, +-0.677541442122078340, -0.677578215505046710, -0.677614987194069540, -0.677651757189055240, -0.677688525489911210, -0.677725292096545970, -0.677762057008867380, -0.677798820226783950, +-0.677835581750203310, -0.677872341579033530, -0.677909099713183030, -0.677945856152559980, -0.677982610897072120, -0.678019363946627650, -0.678056115301134740, -0.678092864960501920, +-0.678129612924636580, -0.678166359193447250, -0.678203103766842010, -0.678239846644729250, -0.678276587827016720, -0.678313327313612600, -0.678350065104425410, -0.678386801199362900, +-0.678423535598333350, -0.678460268301244840, -0.678496999308006110, -0.678533728618524570, -0.678570456232708620, -0.678607182150466560, -0.678643906371706910, -0.678680628896337180, +-0.678717349724265780, -0.678754068855401020, -0.678790786289651500, -0.678827502026924660, -0.678864216067128990, -0.678900928410172910, -0.678937639055964710, -0.678974348004412140, +-0.679011055255423710, -0.679047760808907940, -0.679084464664772460, -0.679121166822925890, -0.679157867283276320, -0.679194566045732360, -0.679231263110201770, -0.679267958476593050, +-0.679304652144814280, -0.679341344114774310, -0.679378034386380670, -0.679414722959541860, -0.679451409834166300, -0.679488095010162500, -0.679524778487438200, -0.679561460265901920, +-0.679598140345461950, -0.679634818726027050, -0.679671495407504710, -0.679708170389803580, -0.679744843672832500, -0.679781515256498880, -0.679818185140711460, -0.679854853325378650, +-0.679891519810408960, -0.679928184595710140, -0.679964847681190920, -0.680001509066759600, -0.680038168752324810, -0.680074826737794180, -0.680111483023076560, -0.680148137608080240, +-0.680184790492713850, -0.680221441676885250, -0.680258091160502950, -0.680294738943475470, -0.680331385025711550, -0.680368029407118710, -0.680404672087605910, -0.680441313067081330, +-0.680477952345453830, -0.680514589922631140, -0.680551225798522010, -0.680587859973035060, -0.680624492446078140, -0.680661123217560000, -0.680697752287389050, -0.680734379655474120, +-0.680771005321722860, -0.680807629286044100, -0.680844251548346160, -0.680880872108538090, -0.680917490966527430, -0.680954108122223010, -0.680990723575533360, -0.681027337326367220, +-0.681063949374632440, -0.681100559720237750, -0.681137168363091680, -0.681173775303102970, -0.681210380540179570, -0.681246984074230230, -0.681283585905163690, -0.681320186032887800, +-0.681356784457311630, -0.681393381178343360, -0.681429976195891960, -0.681466569509865390, -0.681503161120172280, -0.681539751026721370, -0.681576339229421290, -0.681612925728180220, +-0.681649510522906680, -0.681686093613509400, -0.681722674999897250, -0.681759254681978070, -0.681795832659660710, -0.681832408932853800, -0.681868983501466190, -0.681905556365405840, +-0.681942127524581500, -0.681978696978902230, -0.682015264728275890, -0.682051830772611440, -0.682088395111817290, -0.682124957745802620, -0.682161518674475160, -0.682198077897743890, +-0.682234635415517430, -0.682271191227704740, -0.682307745334213680, -0.682344297734953310, -0.682380848429832270, -0.682417397418759290, -0.682453944701642560, -0.682490490278390930, +-0.682527034148913140, -0.682563576313118040, -0.682600116770913700, -0.682636655522209090, -0.682673192566912720, -0.682709727904933890, -0.682746261536180340, -0.682782793460561030, +-0.682819323677985150, -0.682855852188360650, -0.682892378991596490, -0.682928904087601430, -0.682965427476284300, -0.683001949157553410, -0.683038469131317600, -0.683074987397485620, +-0.683111503955966540, -0.683148018806668310, -0.683184531949500020, -0.683221043384370510, -0.683257553111188630, -0.683294061129862570, -0.683330567440301300, -0.683367072042413650, +-0.683403574936108700, -0.683440076121294430, -0.683476575597880000, -0.683513073365774490, -0.683549569424885870, -0.683586063775123430, -0.683622556416395800, -0.683659047348612050, +-0.683695536571680360, -0.683732024085509820, -0.683768509890009260, -0.683804993985087760, -0.683841476370653510, -0.683877957046615470, -0.683914436012882600, -0.683950913269363860, +-0.683987388815967660, -0.684023862652602840, -0.684060334779178490, -0.684096805195603560, -0.684133273901786240, -0.684169740897635830, -0.684206206183061380, -0.684242669757971100, +-0.684279131622274160, -0.684315591775879310, -0.684352050218695830, -0.684388506950631910, -0.684424961971596750, -0.684461415281499170, -0.684497866880248380, -0.684534316767752670, +-0.684570764943921000, -0.684607211408662540, -0.684643656161886380, -0.684680099203500700, -0.684716540533414800, -0.684752980151537520, -0.684789418057778150, -0.684825854252044900, +-0.684862288734247040, -0.684898721504293760, -0.684935152562093250, -0.684971581907555030, -0.685008009540587710, -0.685044435461100830, -0.685080859669002450, -0.685117282164201980, +-0.685153702946608270, -0.685190122016130610, -0.685226539372677300, -0.685262955016157750, -0.685299368946480690, -0.685335781163555650, -0.685372191667290690, -0.685408600457595330, +-0.685445007534378540, -0.685481412897549380, -0.685517816547016490, -0.685554218482689050, -0.685590618704476020, -0.685627017212286800, -0.685663414006029700, -0.685699809085614120, +-0.685736202450949350, -0.685772594101943690, -0.685808984038506540, -0.685845372260546870, -0.685881758767974190, -0.685918143560696800, -0.685954526638624000, -0.685990908001664960, +-0.686027287649728870, -0.686063665582724250, -0.686100041800560500, -0.686136416303146700, -0.686172789090392140, -0.686209160162205230, -0.686245529518495490, -0.686281897159171870, +-0.686318263084143900, -0.686354627293319860, -0.686390989786609280, -0.686427350563921570, -0.686463709625165230, -0.686500066970249570, -0.686536422599083650, -0.686572776511577110, +-0.686609128707638240, -0.686645479187176560, -0.686681827950101240, -0.686718174996321600, -0.686754520325746240, -0.686790863938284480, -0.686827205833845710, -0.686863546012339230, +-0.686899884473673450, -0.686936221217758100, -0.686972556244502040, -0.687008889553815010, -0.687045221145605400, -0.687081551019782850, -0.687117879176256660, -0.687154205614935340, +-0.687190530335728630, -0.687226853338545610, -0.687263174623295780, -0.687299494189887670, -0.687335812038230800, -0.687372128168234340, -0.687408442579807930, -0.687444755272860200, +-0.687481066247300430, -0.687517375503038150, -0.687553683039982650, -0.687589988858042570, -0.687626292957127630, -0.687662595337146910, -0.687698895998010040, -0.687735194939625540, +-0.687771492161903140, -0.687807787664752040, -0.687844081448081730, -0.687880373511800870, -0.687916663855819070, -0.687952952480045950, -0.687989239384390160, -0.688025524568761200, +-0.688061808033068490, -0.688098089777221640, -0.688134369801129190, -0.688170648104700740, -0.688206924687845720, -0.688243199550473750, -0.688279472692493450, -0.688315744113814460, +-0.688352013814346080, -0.688388281793998020, -0.688424548052678940, -0.688460812590298450, -0.688497075406765970, -0.688533336501991110, -0.688569595875882620, -0.688605853528350130, +-0.688642109459303260, -0.688678363668650870, -0.688714616156302470, -0.688750866922167690, -0.688787115966155940, -0.688823363288176060, -0.688859608888137910, -0.688895852765950670, +-0.688932094921524070, -0.688968335354766980, -0.689004574065589010, -0.689040811053899580, -0.689077046319608420, -0.689113279862624490, -0.689149511682857210, -0.689185741780216190, +-0.689221970154611170, -0.689258196805950800, -0.689294421734145010, -0.689330644939103570, -0.689366866420735080, -0.689403086178949410, -0.689439304213656180, -0.689475520524764800, +-0.689511735112184440, -0.689547947975824750, -0.689584159115595120, -0.689620368531405400, -0.689656576223164560, -0.689692782190782120, -0.689728986434167800, -0.689765188953231360, +-0.689801389747881630, -0.689837588818028370, -0.689873786163581190, -0.689909981784449840, -0.689946175680543170, -0.689982367851771140, -0.690018558298043480, -0.690054747019269170, +-0.690090934015357930, -0.690127119286219280, -0.690163302831763300, -0.690199484651898620, -0.690235664746535300, -0.690271843115582760, -0.690308019758951060, -0.690344194676548840, +-0.690380367868286270, -0.690416539334072650, -0.690452709073818060, -0.690488877087431340, -0.690525043374822460, -0.690561207935901030, -0.690597370770576810, -0.690633531878758870, +-0.690669691260357150, -0.690705848915281080, -0.690742004843440840, -0.690778159044745270, -0.690814311519104220, -0.690850462266427770, -0.690886611286624760, -0.690922758579605280, +-0.690958904145278940, -0.690995047983555600, -0.691031190094344330, -0.691067330477555200, -0.691103469133097610, -0.691139606060881650, -0.691175741260816380, -0.691211874732811760, +-0.691248006476777530, -0.691284136492623550, -0.691320264780258990, -0.691356391339593590, -0.691392516170537320, -0.691428639273000130, -0.691464760646890890, -0.691500880292119870, +-0.691536998208596930, -0.691573114396231150, -0.691609228854932590, -0.691645341584611000, -0.691681452585176330, -0.691717561856537650, -0.691753669398605160, -0.691789775211288480, +-0.691825879294497680, -0.691861981648141940, -0.691898082272131120, -0.691934181166375170, -0.691970278330784060, -0.692006373765266860, -0.692042467469733860, -0.692078559444094580, +-0.692114649688259310, -0.692150738202137020, -0.692186824985637990, -0.692222910038672090, -0.692258993361148710, -0.692295074952977710, -0.692331154814069150, -0.692367232944333000, +-0.692403309343678440, -0.692439384012015550, -0.692475456949254280, -0.692511528155304700, -0.692547597630075900, -0.692583665373478150, -0.692619731385421210, -0.692655795665815250, +-0.692691858214569580, -0.692727919031594140, -0.692763978116798910, -0.692800035470094170, -0.692836091091388880, -0.692872144980593460, -0.692908197137617750, -0.692944247562371720, +-0.692980296254764870, -0.693016343214707180, -0.693052388442108920, -0.693088431936879410, -0.693124473698928930, -0.693160513728167120, -0.693196552024504480, -0.693232588587850080, +-0.693268623418114130, -0.693304656515206670, -0.693340687879037910, -0.693376717509517130, -0.693412745406554620, -0.693448771570060130, -0.693484795999944060, -0.693520818696115700, +-0.693556839658485250, -0.693592858886962650, -0.693628876381458430, -0.693664892141881540, -0.693700906168142390, -0.693736918460151400, -0.693772929017817730, -0.693808937841051800, +-0.693844944929763450, -0.693880950283863100, -0.693916953903260030, -0.693952955787864530, -0.693988955937586800, -0.694024954352336910, -0.694060951032024250, -0.694096945976559350, +-0.694132939185851950, -0.694168930659812560, -0.694204920398350580, -0.694240908401376200, -0.694276894668799600, -0.694312879200531090, -0.694348861996480160, -0.694384843056556900, +-0.694420822380672040, -0.694456799968734660, -0.694492775820655270, -0.694528749936344060, -0.694564722315711200, -0.694600692958666220, -0.694636661865119520, -0.694672629034981170, +-0.694708594468161580, -0.694744558164570150, -0.694780520124117400, -0.694816480346713280, -0.694852438832268330, -0.694888395580691930, -0.694924350591894500, -0.694960303865786330, +-0.694996255402277610, -0.695032205201277950, -0.695068153262697770, -0.695104099586447480, -0.695140044172436690, -0.695175987020575810, -0.695211928130774930, -0.695247867502944540, +-0.695283805136994170, -0.695319741032834340, -0.695355675190375110, -0.695391607609527010, -0.695427538290199540, -0.695463467232303230, -0.695499394435748260, -0.695535319900445150, +-0.695571243626303510, -0.695607165613233660, -0.695643085861145870, -0.695679004369950670, -0.695714921139557680, -0.695750836169877430, -0.695786749460820090, -0.695822661012296170, +-0.695858570824215210, -0.695894478896487920, -0.695930385229024730, -0.695966289821735140, -0.696002192674530010, -0.696038093787319290, -0.696073993160013730, -0.696109890792522720, +-0.696145786684757130, -0.696181680836627010, -0.696217573248043010, -0.696253463918914850, -0.696289352849152940, -0.696325240038667690, -0.696361125487369610, -0.696397009195168340, +-0.696432891161974710, -0.696468771387698690, -0.696504649872251140, -0.696540526615541670, -0.696576401617480910, -0.696612274877979390, -0.696648146396946940, -0.696684016174293990, +-0.696719884209931140, -0.696755750503768810, -0.696791615055716850, -0.696827477865685770, -0.696863338933586100, -0.696899198259328330, -0.696935055842822230, -0.696970911683978510, +-0.697006765782707590, -0.697042618138919990, -0.697078468752525550, -0.697114317623434900, -0.697150164751558550, -0.697186010136807030, -0.697221853779090180, -0.697257695678318630, +-0.697293535834403230, -0.697329374247253720, -0.697365210916780720, -0.697401045842894750, -0.697436879025506440, -0.697472710464525520, -0.697508540159862970, -0.697544368111429060, +-0.697580194319134430, -0.697616018782889040, -0.697651841502603730, -0.697687662478188700, -0.697723481709554780, -0.697759299196611950, -0.697795114939270820, -0.697830928937441920, +-0.697866741191035980, -0.697902551699962960, -0.697938360464133490, -0.697974167483458090, -0.698009972757847600, -0.698045776287211980, -0.698081578071461760, -0.698117378110508000, +-0.698153176404260440, -0.698188972952630050, -0.698224767755527110, -0.698260560812862590, -0.698296352124546330, -0.698332141690489180, -0.698367929510601780, -0.698403715584794750, +-0.698439499912978160, -0.698475282495062850, -0.698511063330959360, -0.698546842420578410, -0.698582619763830180, -0.698618395360625310, -0.698654169210874420, -0.698689941314488470, +-0.698725711671377430, -0.698761480281452020, -0.698797247144623210, -0.698833012260801080, -0.698868775629896350, -0.698904537251819670, -0.698940297126481980, -0.698976055253793140, +-0.699011811633664220, -0.699047566266005840, -0.699083319150728850, -0.699119070287743230, -0.699154819676959920, -0.699190567318289440, -0.699226313211642970, -0.699262057356930480, +-0.699297799754062810, -0.699333540402950590, -0.699369279303504790, -0.699405016455635580, -0.699440751859253810, -0.699476485514270330, -0.699512217420595440, -0.699547947578140090, +-0.699583675986814700, -0.699619402646530550, -0.699655127557197610, -0.699690850718726720, -0.699726572131028850, -0.699762291794014720, -0.699798009707594650, -0.699833725871679580, +-0.699869440286180140, -0.699905152951007410, -0.699940863866071460, -0.699976573031283360, -0.700012280446553840, -0.700047986111793970, -0.700083690026913840, -0.700119392191824400, +-0.700155092606436820, -0.700190791270661190, -0.700226488184408580, -0.700262183347589830, -0.700297876760115790, -0.700333568421896870, -0.700369258332844020, -0.700404946492868000, +-0.700440632901879860, -0.700476317559789900, -0.700512000466509080, -0.700547681621948360, -0.700583361026018700, -0.700619038678630290, -0.700654714579694420, -0.700690388729121590, +-0.700726061126823120, -0.700761731772709280, -0.700797400666691050, -0.700833067808679380, -0.700868733198585340, -0.700904396836319110, -0.700940058721791880, -0.700975718854914830, +-0.701011377235598250, -0.701047033863753110, -0.701082688739290470, -0.701118341862121410, -0.701153993232156100, -0.701189642849305850, -0.701225290713481500, -0.701260936824594230, +-0.701296581182554330, -0.701332223787273000, -0.701367864638661080, -0.701403503736629740, -0.701439141081089400, -0.701474776671951240, -0.701510410509126100, -0.701546042592525290, +-0.701581672922058970, -0.701617301497638570, -0.701652928319175140, -0.701688553386579090, -0.701724176699761730, -0.701759798258633880, -0.701795418063106860, -0.701831036113090940, +-0.701866652408497550, -0.701902266949237410, -0.701937879735221930, -0.701973490766361510, -0.702009100042567220, -0.702044707563750260, -0.702080313329821900, -0.702115917340692340, +-0.702151519596273090, -0.702187120096474990, -0.702222718841209460, -0.702258315830386780, -0.702293911063918250, -0.702329504541715280, -0.702365096263688260, -0.702400686229748490, +-0.702436274439807050, -0.702471860893775220, -0.702507445591563420, -0.702543028533083040, -0.702578609718244930, -0.702614189146960830, -0.702649766819140820, -0.702685342734696410, +-0.702720916893538660, -0.702756489295578880, -0.702792059940727580, -0.702827628828896160, -0.702863195959995690, -0.702898761333937470, -0.702934324950632130, -0.702969886809990840, +-0.703005446911924900, -0.703041005256345720, -0.703076561843163690, -0.703112116672290230, -0.703147669743636740, -0.703183221057113840, -0.703218770612632940, -0.703254318410104990, +-0.703289864449441640, -0.703325408730553270, -0.703360951253351410, -0.703396492017747120, -0.703432031023651930, -0.703467568270976340, -0.703503103759631880, -0.703538637489529610, +-0.703574169460581160, -0.703609699672696930, -0.703645228125788340, -0.703680754819766770, -0.703716279754543650, -0.703751802930029480, -0.703787324346135890, -0.703822844002774170, +-0.703858361899855070, -0.703893878037290090, -0.703929392414990420, -0.703964905032867570, -0.704000415890832070, -0.704035924988795640, -0.704071432326669360, -0.704106937904364740, +-0.704142441721792520, -0.704177943778864220, -0.704213444075491140, -0.704248942611584660, -0.704284439387055540, -0.704319934401815280, -0.704355427655775190, -0.704390919148846880, +-0.704426408880940880, -0.704461896851968920, -0.704497383061842620, -0.704532867510472390, -0.704568350197770090, -0.704603831123646880, -0.704639310288014410, -0.704674787690783400, +-0.704710263331865370, -0.704745737211171620, -0.704781209328613990, -0.704816679684102890, -0.704852148277550160, -0.704887615108866990, -0.704923080177965230, -0.704958543484755400, +-0.704994005029149110, -0.705029464811057880, -0.705064922830393350, -0.705100379087066130, -0.705135833580987970, -0.705171286312070600, -0.705206737280224650, -0.705242186485361850, +-0.705277633927393620, -0.705313079606231570, -0.705348523521786560, -0.705383965673970210, -0.705419406062694040, -0.705454844687869560, -0.705490281549407630, -0.705525716647220080, +-0.705561149981218220, -0.705596581551313770, -0.705632011357417600, -0.705667439399441320, -0.705702865677296560, -0.705738290190894850, -0.705773712940147120, -0.705809133924965140, +-0.705844553145260290, -0.705879970600944430, -0.705915386291928290, -0.705950800218123620, -0.705986212379442370, -0.706021622775795170, -0.706057031407093970, -0.706092438273250190, +-0.706127843374175670, -0.706163246709781140, -0.706198648279978580, -0.706234048084679380, -0.706269446123795390, -0.706304842397237450, -0.706340236904917430, -0.706375629646746720, +-0.706411020622637280, -0.706446409832500070, -0.706481797276246710, -0.706517182953788960, -0.706552566865038530, -0.706587949009906400, -0.706623329388304300, -0.706658708000144300, +-0.706694084845337130, -0.706729459923794880, -0.706764833235428820, -0.706800204780151150, -0.706835574557872490, -0.706870942568505020, -0.706906308811960150, -0.706941673288149830, +-0.706977035996984910, -0.707012396938377590, -0.707047756112239130, -0.707083113518481630, -0.707118469157016040, -0.707153823027754310, -0.707189175130607970, -0.707224525465489080, +-0.707259874032308500, -0.707295220830978180, -0.707330565861410300, -0.707365909123515490, -0.707401250617206050, -0.707436590342393480, -0.707471928298989640, -0.707507264486905710, +-0.707542598906053750, -0.707577931556345190, -0.707613262437692070, -0.707648591550005480, -0.707683918893197480, -0.707719244467179600, -0.707754568271864000, -0.707789890307161660, +-0.707825210572984640, -0.707860529069244460, -0.707895845795853410, -0.707931160752722330, -0.707966473939763310, -0.708001785356888180, -0.708037095004008910, -0.708072402881036570, +-0.708107708987883220, -0.708143013324460950, -0.708178315890680810, -0.708213616686454880, -0.708248915711694900, -0.708284212966312940, -0.708319508450220180, -0.708354802163328690, +-0.708390094105549980, -0.708425384276796580, -0.708460672676979320, -0.708495959306010390, -0.708531244163801530, -0.708566527250264810, -0.708601808565311520, -0.708637088108853730, +-0.708672365880803290, -0.708707641881072160, -0.708742916109571630, -0.708778188566213770, -0.708813459250910880, -0.708848728163573920, -0.708883995304115170, -0.708919260672446370, +-0.708954524268479820, -0.708989786092126590, -0.709025046143298980, -0.709060304421908590, -0.709095560927867850, -0.709130815661087930, -0.709166068621480910, -0.709201319808958730, +-0.709236569223433590, -0.709271816864816770, -0.709307062733020350, -0.709342306827956180, -0.709377549149536660, -0.709412789697672960, -0.709448028472277280, -0.709483265473261790, +-0.709518500700537900, -0.709553734154017680, -0.709588965833613190, -0.709624195739236630, -0.709659423870799170, -0.709694650228213210, -0.709729874811390600, -0.709765097620243650, +-0.709800318654683520, -0.709835537914622730, -0.709870755399973020, -0.709905971110646790, -0.709941185046555350, -0.709976397207610850, -0.710011607593725390, -0.710046816204811250, +-0.710082023040779720, -0.710117228101543210, -0.710152431387013560, -0.710187632897103180, -0.710222832631723370, -0.710258030590786520, -0.710293226774204920, -0.710328421181889880, +-0.710363613813753790, -0.710398804669708730, -0.710433993749666870, -0.710469181053539730, -0.710504366581239720, -0.710539550332678790, -0.710574732307769240, -0.710609912506422580, +-0.710645090928551100, -0.710680267574066880, -0.710715442442882430, -0.710750615534908920, -0.710785786850059000, -0.710820956388244500, -0.710856124149377930, -0.710891290133370820, +-0.710926454340135350, -0.710961616769584140, -0.710996777421628590, -0.711031936296181110, -0.711067093393153770, -0.711102248712458970, -0.711137402254008340, -0.711172554017714060, +-0.711207704003488540, -0.711242852211243950, -0.711277998640892030, -0.711313143292345070, -0.711348286165515260, -0.711383427260315000, -0.711418566576655920, -0.711453704114450300, +-0.711488839873610560, -0.711523973854048860, -0.711559106055677180, -0.711594236478407580, -0.711629365122152690, -0.711664491986824020, -0.711699617072334200, -0.711734740378595410, +-0.711769861905519940, -0.711804981653019640, -0.711840099621006810, -0.711875215809393720, -0.711910330218092910, -0.711945442847016000, -0.711980553696075490, -0.712015662765183470, +-0.712050770054252660, -0.712085875563194690, -0.712120979291921970, -0.712156081240346910, -0.712191181408381780, -0.712226279795938550, -0.712261376402929520, -0.712296471229267420, +-0.712331564274863770, -0.712366655539631300, -0.712401745023482080, -0.712436832726328850, -0.712471918648083240, -0.712507002788657860, -0.712542085147964910, -0.712577165725917120, +-0.712612244522426110, -0.712647321537404400, -0.712682396770764500, -0.712717470222418830, -0.712752541892279210, -0.712787611780258290, -0.712822679886268240, -0.712857746210221800, +-0.712892810752030700, -0.712927873511607690, -0.712962934488864830, -0.712997993683715080, -0.713033051096069960, -0.713068106725842200, -0.713103160572944540, -0.713138212637288720, +-0.713173262918787240, -0.713208311417352640, -0.713243358132897630, -0.713278403065333850, -0.713313446214574150, -0.713348487580530710, -0.713383527163116480, -0.713418564962243100, +-0.713453600977823180, -0.713488635209769350, -0.713523667657994240, -0.713558698322409700, -0.713593727202928350, -0.713628754299462710, -0.713663779611925510, -0.713698803140228490, +-0.713733824884284500, -0.713768844844006270, -0.713803863019305540, -0.713838879410095270, -0.713873894016287760, -0.713908906837795840, -0.713943917874531260, -0.713978927126406980, +-0.714013934593335400, -0.714048940275229250, -0.714083944172000380, -0.714118946283561760, -0.714153946609825670, -0.714188945150705080, -0.714223941906111830, -0.714258936875958650, +-0.714293930060158290, -0.714328921458623260, -0.714363911071265620, -0.714398898897998240, -0.714433884938733940, -0.714468869193384590, -0.714503851661863140, -0.714538832344082000, +-0.714573811239954000, -0.714608788349391340, -0.714643763672306640, -0.714678737208612520, -0.714713708958221840, -0.714748678921046650, -0.714783647096999710, -0.714818613485993630, +-0.714853578087941370, -0.714888540902754780, -0.714923501930346930, -0.714958461170630330, -0.714993418623517840, -0.715028374288921520, -0.715063328166754220, -0.715098280256928680, +-0.715133230559357620, -0.715168179073953250, -0.715203125800628500, -0.715238070739296240, -0.715273013889868410, -0.715307955252257990, -0.715342894826377810, -0.715377832612140610, +-0.715412768609458680, -0.715447702818244660, -0.715482635238411380, -0.715517565869871920, -0.715552494712538230, -0.715587421766323280, -0.715622347031139800, -0.715657270506900640, +-0.715692192193518100, -0.715727112090905120, -0.715762030198974220, -0.715796946517638700, -0.715831861046810400, -0.715866773786402510, -0.715901684736327980, -0.715936593896499000, +-0.715971501266828400, -0.716006406847229160, -0.716041310637614110, -0.716076212637895450, -0.716111112847986450, -0.716146011267799530, -0.716180907897247860, -0.716215802736243630, +-0.716250695784700020, -0.716285587042529540, -0.716320476509645370, -0.716355364185959800, -0.716390250071385900, -0.716425134165836200, -0.716460016469224080, -0.716494896981461520, +-0.716529775702461790, -0.716564652632137870, -0.716599527770402030, -0.716634401117167470, -0.716669272672346810, -0.716704142435853230, -0.716739010407599130, -0.716773876587497360, +-0.716808740975460990, -0.716843603571403090, -0.716878464375235720, -0.716913323386872410, -0.716948180606225670, -0.716983036033208790, -0.717017889667734050, -0.717052741509714540, +-0.717087591559063210, -0.717122439815693240, -0.717157286279516800, -0.717192130950447090, -0.717226973828397400, -0.717261814913280120, -0.717296654205008100, -0.717331491703494530, +-0.717366327408652580, -0.717401161320394440, -0.717435993438633400, -0.717470823763282420, -0.717505652294254670, -0.717540479031462560, -0.717575303974819170, -0.717610127124237440, +-0.717644948479630780, -0.717679768040911490, -0.717714585807992740, -0.717749401780787500, -0.717784215959209050, -0.717819028343169800, -0.717853838932582920, -0.717888647727361500, +-0.717923454727418810, -0.717958259932667040, -0.717993063343019710, -0.718027864958390110, -0.718062664778690410, -0.718097462803834130, -0.718132259033734120, -0.718167053468303780, +-0.718201846107455520, -0.718236636951102620, -0.718271425999158280, -0.718306213251535430, -0.718340998708146940, -0.718375782368905870, -0.718410564233725400, -0.718445344302518720, +-0.718480122575198440, -0.718514899051677870, -0.718549673731870060, -0.718584446615688320, -0.718619217703045150, -0.718653986993853970, -0.718688754488028160, -0.718723520185480140, +-0.718758284086123300, -0.718793046189870720, -0.718827806496635910, -0.718862565006331280, -0.718897321718870110, -0.718932076634165810, -0.718966829752131440, -0.719001581072679860, +-0.719036330595724250, -0.719071078321177780, -0.719105824248953970, -0.719140568378965230, -0.719175310711125170, -0.719210051245346760, -0.719244789981543620, -0.719279526919628040, +-0.719314262059513760, -0.719348995401114080, -0.719383726944341720, -0.719418456689109980, -0.719453184635332030, -0.719487910782921510, -0.719522635131790820, -0.719557357681853580, +-0.719592078433022970, -0.719626797385212400, -0.719661514538334600, -0.719696229892303090, -0.719730943447030810, -0.719765655202431630, -0.719800365158417940, -0.719835073314903370, +-0.719869779671801100, -0.719904484229024640, -0.719939186986486730, -0.719973887944100890, -0.720008587101780280, -0.720043284459438440, -0.720077980016988200, -0.720112673774342960, +-0.720147365731416360, -0.720182055888121010, -0.720216744244370540, -0.720251430800078250, -0.720286115555157650, -0.720320798509521350, -0.720355479663083220, -0.720390159015756320, +-0.720424836567454370, -0.720459512318089910, -0.720494186267576770, -0.720528858415828140, -0.720563528762757640, -0.720598197308278010, -0.720632864052302980, -0.720667528994745730, +-0.720702192135519890, -0.720736853474538420, -0.720771513011714720, -0.720806170746962520, -0.720840826680194670, -0.720875480811324690, -0.720910133140266090, -0.720944783666932270, +-0.720979432391236410, -0.721014079313091800, -0.721048724432412080, -0.721083367749110860, -0.721118009263100880, -0.721152648974295980, -0.721187286882609250, -0.721221922987954840, +-0.721256557290245180, -0.721291189789394100, -0.721325820485315130, -0.721360449377921880, -0.721395076467127190, -0.721429701752844820, -0.721464325234988600, -0.721498946913471160, +-0.721533566788206350, -0.721568184859107680, -0.721602801126088770, -0.721637415589062580, -0.721672028247942850, -0.721706639102643100, -0.721741248153076940, -0.721775855399157450, +-0.721810460840798360, -0.721845064477913080, -0.721879666310415450, -0.721914266338218310, -0.721948864561235530, -0.721983460979380600, -0.722018055592567260, -0.722052648400708490, +-0.722087239403718220, -0.722121828601509970, -0.722156415993997050, -0.722191001581092950, -0.722225585362711420, -0.722260167338766190, -0.722294747509170220, -0.722329325873837360, +-0.722363902432681230, -0.722398477185615670, -0.722433050132553540, -0.722467621273408910, -0.722502190608095060, -0.722536758136526180, -0.722571323858615000, -0.722605887774275590, +-0.722640449883421470, -0.722675010185966470, -0.722709568681823680, -0.722744125370906930, -0.722778680253129860, -0.722813233328406410, -0.722847784596649670, -0.722882334057773360, +-0.722916881711691550, -0.722951427558317210, -0.722985971597564390, -0.723020513829346510, -0.723055054253577740, -0.723089592870170940, -0.723124129679040270, -0.723158664680099150, +-0.723193197873261750, -0.723227729258441140, -0.723262258835551060, -0.723296786604505360, -0.723331312565218100, -0.723365836717602130, -0.723400359061571630, -0.723434879597040230, +-0.723469398323921880, -0.723503915242129870, -0.723538430351577940, -0.723572943652180280, -0.723607455143849940, -0.723641964826500890, -0.723676472700047090, -0.723710978764402270, +-0.723745483019479830, -0.723779985465193620, -0.723814486101457490, -0.723848984928185390, -0.723883481945290510, -0.723917977152686910, -0.723952470550288440, -0.723986962138009170, +-0.724021451915762060, -0.724055939883461290, -0.724090426041020810, -0.724124910388354470, -0.724159392925375570, -0.724193873651998170, -0.724228352568136450, -0.724262829673703480, +-0.724297304968613440, -0.724331778452780180, -0.724366250126117770, -0.724400719988539390, -0.724435188039959320, -0.724469654280291200, -0.724504118709449200, -0.724538581327346610, +-0.724573042133897620, -0.724607501129016060, -0.724641958312616020, -0.724676413684610780, -0.724710867244914510, -0.724745318993440970, -0.724779768930104540, -0.724814217054818410, +-0.724848663367496650, -0.724883107868053320, -0.724917550556402390, -0.724951991432457370, -0.724986430496132430, -0.725020867747341650, -0.725055303185998420, -0.725089736812016940, +-0.725124168625311040, -0.725158598625795130, -0.725193026813382380, -0.725227453187986980, -0.725261877749523000, -0.725296300497904720, -0.725330721433045330, -0.725365140554859120, +-0.725399557863260050, -0.725433973358162400, -0.725468387039479470, -0.725502798907125660, -0.725537208961014810, -0.725571617201061230, -0.725606023627178300, -0.725640428239280320, +-0.725674831037281590, -0.725709232021095390, -0.725743631190636230, -0.725778028545817970, -0.725812424086554890, -0.725846817812760500, -0.725881209724349000, -0.725915599821234550, +-0.725949988103331450, -0.725984374570552980, -0.726018759222813560, -0.726053142060027360, -0.726087523082108440, -0.726121902288970440, -0.726156279680527870, -0.726190655256694460, +-0.726225029017384730, -0.726259400962512070, -0.726293771091991000, -0.726328139405735710, -0.726362505903659810, -0.726396870585677700, -0.726431233451703350, -0.726465594501651270, +-0.726499953735434860, -0.726534311152968630, -0.726568666754166540, -0.726603020538943100, -0.726637372507211830, -0.726671722658887130, -0.726706070993883180, -0.726740417512114270, +-0.726774762213494020, -0.726809105097936840, -0.726843446165357010, -0.726877785415668830, -0.726912122848785810, -0.726946458464622580, -0.726980792263093420, -0.727015124244111970, +-0.727049454407592830, -0.727083782753449980, -0.727118109281597920, -0.727152433991950400, -0.727186756884421690, -0.727221077958926100, -0.727255397215378130, -0.727289714653691410, +-0.727324030273780340, -0.727358344075559220, -0.727392656058942540, -0.727426966223843950, -0.727461274570177950, -0.727495581097858720, -0.727529885806800890, -0.727564188696917970, +-0.727598489768124690, -0.727632789020335120, -0.727667086453463900, -0.727701382067424630, -0.727735675862131840, -0.727769967837500250, -0.727804257993443390, -0.727838546329875990, +-0.727872832846712110, -0.727907117543866500, -0.727941400421252770, -0.727975681478785660, -0.728009960716379250, -0.728044238133948250, -0.728078513731406310, -0.728112787508668150, +-0.728147059465647950, -0.728181329602260450, -0.728215597918419280, -0.728249864414039160, -0.728284129089034390, -0.728318391943319600, -0.728352652976808510, -0.728386912189415760, +-0.728421169581056070, -0.728455425151643080, -0.728489678901091620, -0.728523930829315880, -0.728558180936230810, -0.728592429221749830, -0.728626675685787760, -0.728660920328259020, +-0.728695163149078340, -0.728729404148159340, -0.728763643325416990, -0.728797880680765340, -0.728832116214119360, -0.728866349925392900, -0.728900581814500460, -0.728934811881356560, +-0.728969040125875930, -0.729003266547972430, -0.729037491147560780, -0.729071713924555720, -0.729105934878871100, -0.729140154010421540, -0.729174371319121660, -0.729208586804886090, +-0.729242800467628790, -0.729277012307264490, -0.729311222323707710, -0.729345430516873170, -0.729379636886674730, -0.729413841433027120, -0.729448044155844970, -0.729482245055043000, +-0.729516444130535180, -0.729550641382236130, -0.729584836810060590, -0.729619030413923180, -0.729653222193737960, -0.729687412149419680, -0.729721600280882840, -0.729755786588042300, +-0.729789971070812000, -0.729824153729106690, -0.729858334562841440, -0.729892513571929970, -0.729926690756287240, -0.729960866115827670, -0.729995039650466420, -0.730029211360117230, +-0.730063381244694940, -0.730097549304114190, -0.730131715538289930, -0.730165879947136110, -0.730200042530567470, -0.730234203288498860, -0.730268362220845010, -0.730302519327519880, +-0.730336674608438540, -0.730370828063515390, -0.730404979692665600, -0.730439129495803030, -0.730473277472842520, -0.730507423623699250, -0.730541567948287060, -0.730575710446521030, +-0.730609851118315670, -0.730643989963585930, -0.730678126982245990, -0.730712262174210700, -0.730746395539394800, -0.730780527077713130, -0.730814656789079970, -0.730848784673409970, +-0.730882910730618170, -0.730917034960619330, -0.730951157363327610, -0.730985277938658080, -0.731019396686525270, -0.731053513606844340, -0.731087628699529260, -0.731121741964495090, +-0.731155853401656900, -0.731189963010928760, -0.731224070792225730, -0.731258176745462450, -0.731292280870554200, -0.731326383167414830, -0.731360483635959510, -0.731394582276102990, +-0.731428679087760330, -0.731462774070845700, -0.731496867225273960, -0.731530958550960290, -0.731565048047819410, -0.731599135715765620, -0.731633221554713890, -0.731667305564579260, +-0.731701387745276600, -0.731735468096720190, -0.731769546618825100, -0.731803623311506500, -0.731837698174678470, -0.731871771208256190, -0.731905842412154510, -0.731939911786288590, +-0.731973979330572510, -0.732008045044921450, -0.732042108929250370, -0.732076170983474220, -0.732110231207507400, -0.732144289601264990, -0.732178346164661820, -0.732212400897613190, +-0.732246453800033170, -0.732280504871837050, -0.732314554112939660, -0.732348601523256200, -0.732382647102700850, -0.732416690851188990, -0.732450732768635370, -0.732484772854955170, +-0.732518811110062900, -0.732552847533873400, -0.732586882126302190, -0.732620914887263440, -0.732654945816672450, -0.732688974914444070, -0.732723002180493470, -0.732757027614735160, +-0.732791051217084210, -0.732825072987455690, -0.732859092925764790, -0.732893111031925890, -0.732927127305854190, -0.732961141747464630, -0.732995154356672510, -0.733029165133392220, +-0.733063174077539070, -0.733097181189027890, -0.733131186467774200, -0.733165189913692170, -0.733199191526697100, -0.733233191306704390, -0.733267189253628440, -0.733301185367384530, +-0.733335179647887640, -0.733369172095053030, -0.733403162708795240, -0.733437151489029550, -0.733471138435671020, -0.733505123548634840, -0.733539106827835630, -0.733573088273188680, +-0.733607067884608940, -0.733641045662011830, -0.733675021605311840, -0.733708995714424270, -0.733742967989264310, -0.733776938429747120, -0.733810907035787330, -0.733844873807300240, +-0.733878838744201230, -0.733912801846404950, -0.733946763113826560, -0.733980722546381250, -0.734014680143984520, -0.734048635906550780, -0.734082589833995440, -0.734116541926233550, +-0.734150492183180740, -0.734184440604751300, -0.734218387190860740, -0.734252331941424250, -0.734286274856357220, -0.734320215935574280, -0.734354155178990720, -0.734388092586521820, +-0.734422028158082880, -0.734455961893588750, -0.734489893792954600, -0.734523823856095710, -0.734557752082927620, -0.734591678473364710, -0.734625603027322830, -0.734659525744717050, +-0.734693446625462210, -0.734727365669473830, -0.734761282876666980, -0.734795198246957160, -0.734829111780259110, -0.734863023476488240, -0.734896933335559940, -0.734930841357389510, +-0.734964747541891560, -0.734998651888981950, -0.735032554398575620, -0.735066455070588210, -0.735100353904934330, -0.735134250901529620, -0.735168146060289240, -0.735202039381128820, +-0.735235930863962990, -0.735269820508707370, -0.735303708315277470, -0.735337594283587910, -0.735371478413554550, -0.735405360705092330, -0.735439241158117100, -0.735473119772543370, +-0.735506996548287000, -0.735540871485263040, -0.735574744583387230, -0.735608615842574200, -0.735642485262739680, -0.735676352843798950, -0.735710218585667650, -0.735744082488260510, +-0.735777944551493150, -0.735811804775280850, -0.735845663159539360, -0.735879519704183530, -0.735913374409128850, -0.735947227274290960, -0.735981078299584810, -0.736014927484925810, +-0.736048774830229680, -0.736082620335411830, -0.736116464000387110, -0.736150305825071240, -0.736184145809379630, -0.736217983953227910, -0.736251820256530910, -0.736285654719204370, +-0.736319487341163810, -0.736353318122324740, -0.736387147062602110, -0.736420974161911550, -0.736454799420168560, -0.736488622837289000, -0.736522444413187480, -0.736556264147779860, +-0.736590082040981860, -0.736623898092708340, -0.736657712302875130, -0.736691524671397650, -0.736725335198191610, -0.736759143883171990, -0.736792950726254390, -0.736826755727354570, +-0.736860558886388020, -0.736894360203269820, -0.736928159677915810, -0.736961957310241280, -0.736995753100162190, -0.737029547047593490, -0.737063339152450810, -0.737097129414649890, +-0.737130917834106340, -0.737164704410735340, -0.737198489144452410, -0.737232272035173390, -0.737266053082813900, -0.737299832287289010, -0.737333609648514580, -0.737367385166406430, +-0.737401158840879420, -0.737434930671849620, -0.737468700659232420, -0.737502468802943790, -0.737536235102898670, -0.737569999559013030, -0.737603762171202380, -0.737637522939382560, +-0.737671281863468640, -0.737705038943376580, -0.737738794179021880, -0.737772547570320510, -0.737806299117187430, -0.737840048819538690, -0.737873796677289700, -0.737907542690356630, +-0.737941286858654340, -0.737975029182098900, -0.738008769660606130, -0.738042508294091130, -0.738076245082469830, -0.738109980025658090, -0.738143713123571520, -0.738177444376125420, +-0.738211173783235750, -0.738244901344818130, -0.738278627060788510, -0.738312350931062070, -0.738346072955554660, -0.738379793134182230, -0.738413511466860520, -0.738447227953504700, +-0.738480942594030850, -0.738514655388354700, -0.738548366336392090, -0.738582075438058430, -0.738615782693269440, -0.738649488101941310, -0.738683191663989210, -0.738716893379329110, +-0.738750593247876840, -0.738784291269548250, -0.738817987444258750, -0.738851681771924170, -0.738885374252460480, -0.738919064885783630, -0.738952753671808790, -0.738986440610452160, +-0.739020125701629340, -0.739053808945256520, -0.739087490341248880, -0.739121169889522590, -0.739154847589993280, -0.739188523442577130, -0.739222197447189420, -0.739255869603746230, +-0.739289539912163400, -0.739323208372356880, -0.739356874984242190, -0.739390539747735280, -0.739424202662752330, -0.739457863729208520, -0.739491522947020030, -0.739525180316102810, +-0.739558835836372830, -0.739592489507745590, -0.739626141330137040, -0.739659791303463150, -0.739693439427640210, -0.739727085702583160, -0.739760730128208530, -0.739794372704432050, +-0.739828013431170000, -0.739861652308337450, -0.739895289335850910, -0.739928924513626130, -0.739962557841579270, -0.739996189319625740, -0.740029818947681830, -0.740063446725663600, +-0.740097072653486450, -0.740130696731066570, -0.740164318958320020, -0.740197939335162980, -0.740231557861510740, -0.740265174537279690, -0.740298789362385580, -0.740332402336744910, +-0.740366013460272860, -0.740399622732885840, -0.740433230154499690, -0.740466835725030800, -0.740500439444394480, -0.740534041312507220, -0.740567641329284650, -0.740601239494643400, +-0.740634835808498760, -0.740668430270766900, -0.740702022881364440, -0.740735613640206570, -0.740769202547209570, -0.740802789602289740, -0.740836374805363020, -0.740869958156345270, +-0.740903539655152430, -0.740937119301700810, -0.740970697095906790, -0.741004273037685680, -0.741037847126953860, -0.741071419363627410, -0.741104989747622730, -0.741138558278855220, +-0.741172124957241380, -0.741205689782697300, -0.741239252755139240, -0.741272813874482630, -0.741306373140644070, -0.741339930553539860, -0.741373486113085620, -0.741407039819197640, +-0.741440591671791990, -0.741474141670785180, -0.741507689816092720, -0.741541236107631010, -0.741574780545316230, -0.741608323129064770, -0.741641863858792270, -0.741675402734415120, +-0.741708939755849390, -0.741742474923011710, -0.741776008235817350, -0.741809539694183170, -0.741843069298025130, -0.741876597047259610, -0.741910122941802360, -0.741943646981569780, +-0.741977169166478050, -0.742010689496443780, -0.742044207971382490, -0.742077724591210570, -0.742111239355844780, -0.742144752265200490, -0.742178263319194340, -0.742211772517742510, +-0.742245279860761610, -0.742278785348167160, -0.742312288979875780, -0.742345790755803650, -0.742379290675867280, -0.742412788739982510, -0.742446284948065750, -0.742479779300033170, +-0.742513271795801620, -0.742546762435286390, -0.742580251218404430, -0.742613738145071810, -0.742647223215205040, -0.742680706428719970, -0.742714187785533220, -0.742747667285561190, +-0.742781144928719610, -0.742814620714925320, -0.742848094644094510, -0.742881566716143580, -0.742915036930988590, -0.742948505288545950, -0.742981971788732040, -0.743015436431463620, +-0.743048899216656180, -0.743082360144226460, -0.743115819214090980, -0.743149276426166130, -0.743182731780367870, -0.743216185276612710, -0.743249636914817160, -0.743283086694897730, +-0.743316534616770390, -0.743349980680351630, -0.743383424885558310, -0.743416867232306040, -0.743450307720511570, -0.743483746350091400, -0.743517183120962160, -0.743550618033039680, +-0.743584051086240590, -0.743617482280481410, -0.743650911615678870, -0.743684339091748690, -0.743717764708607730, -0.743751188466172270, -0.743784610364359170, -0.743818030403084250, +-0.743851448582264260, -0.743884864901815710, -0.743918279361655220, -0.743951691961698750, -0.743985102701863020, -0.744018511582064560, -0.744051918602220090, -0.744085323762245570, +-0.744118727062057730, -0.744152128501573420, -0.744185528080708480, -0.744218925799379650, -0.744252321657503440, -0.744285715654996900, -0.744319107791775680, -0.744352498067756720, +-0.744385886482856530, -0.744419273036991850, -0.744452657730078740, -0.744486040562033930, -0.744519421532774170, -0.744552800642215960, -0.744586177890275590, -0.744619553276869680, +-0.744652926801914970, -0.744686298465328190, -0.744719668267025400, -0.744753036206923460, -0.744786402284939200, -0.744819766500988580, -0.744853128854988670, -0.744886489346855860, +-0.744919847976507010, -0.744953204743858400, -0.744986559648826760, -0.745019912691328720, -0.745053263871281120, -0.745086613188600140, -0.745119960643202630, -0.745153306235005200, +-0.745186649963924810, -0.745219991829877420, -0.745253331832780200, -0.745286669972549440, -0.745320006249102550, -0.745353340662355150, -0.745386673212224520, -0.745420003898627390, +-0.745453332721480070, -0.745486659680699380, -0.745519984776202070, -0.745553308007904980, -0.745586629375724400, -0.745619948879577280, -0.745653266519380240, -0.745686582295050360, +-0.745719896206503700, -0.745753208253657320, -0.745786518436427960, -0.745819826754732460, -0.745853133208487230, -0.745886437797609100, -0.745919740522014930, -0.745953041381621770, +-0.745986340376345590, -0.746019637506103560, -0.746052932770812750, -0.746086226170389330, -0.746119517704750380, -0.746152807373812510, -0.746186095177493120, -0.746219381115708070, +-0.746252665188374520, -0.746285947395409320, -0.746319227736729650, -0.746352506212251580, -0.746385782821892270, -0.746419057565568370, -0.746452330443197250, -0.746485601454695000, +-0.746518870599978680, -0.746552137878965240, -0.746585403291571750, -0.746618666837714380, -0.746651928517310440, -0.746685188330276640, -0.746718446276530170, -0.746751702355987200, +-0.746784956568565140, -0.746818208914180940, -0.746851459392750770, -0.746884708004192150, -0.746917954748421600, -0.746951199625356610, -0.746984442634913260, -0.747017683777008830, +-0.747050923051560070, -0.747084160458484470, -0.747117395997698000, -0.747150629669118160, -0.747183861472661690, -0.747217091408245880, -0.747250319475787130, -0.747283545675202500, +-0.747316770006408950, -0.747349992469323880, -0.747383213063863460, -0.747416431789944990, -0.747449648647485860, -0.747482863636402150, -0.747516076756611470, -0.747549288008030440, +-0.747582497390576470, -0.747615704904166070, -0.747648910548716410, -0.747682114324144440, -0.747715316230367470, -0.747748516267301880, -0.747781714434865070, -0.747814910732973900, +-0.747848105161545870, -0.747881297720497160, -0.747914488409745280, -0.747947677229207190, -0.747980864178800160, -0.748014049258440620, -0.748047232468046050, -0.748080413807533650, +-0.748113593276819920, -0.748146770875822260, -0.748179946604457520, -0.748213120462643320, -0.748246292450296060, -0.748279462567333020, -0.748312630813671390, -0.748345797189228450, +-0.748378961693920600, -0.748412124327665460, -0.748445285090380000, -0.748478443981981600, -0.748511601002386780, -0.748544756151513060, -0.748577909429277380, -0.748611060835597140, +-0.748644210370389080, -0.748677358033570490, -0.748710503825058440, -0.748743647744770420, -0.748776789792623080, -0.748809929968533570, -0.748843068272419750, -0.748876204704197910, +-0.748909339263785560, -0.748942471951099750, -0.748975602766058120, -0.749008731708577180, -0.749041858778574430, -0.749074983975967060, -0.749108107300672450, -0.749141228752607360, +-0.749174348331689170, -0.749207466037835170, -0.749240581870962650, -0.749273695830988460, -0.749306807917830110, -0.749339918131404660, -0.749373026471629730, -0.749406132938421950, +-0.749439237531698720, -0.749472340251377770, -0.749505441097375710, -0.749538540069610070, -0.749571637167998130, -0.749604732392457280, -0.749637825742904270, -0.749670917219256720, +-0.749704006821431900, -0.749737094549347340, -0.749770180402919870, -0.749803264382066900, -0.749836346486705720, -0.749869426716753940, -0.749902505072128300, -0.749935581552746420, +-0.749968656158525590, -0.750001728889383430, -0.750034799745236680, -0.750067868726002950, -0.750100935831599760, -0.750134001061943940, -0.750167064416953130, -0.750200125896544720, +-0.750233185500636220, -0.750266243229144480, -0.750299299081987110, -0.750332353059081520, -0.750365405160345330, -0.750398455385695380, -0.750431503735049300, -0.750464550208324370, +-0.750497594805438430, -0.750530637526308220, -0.750563678370851360, -0.750596717338985360, -0.750629754430627740, -0.750662789645695550, -0.750695822984106420, -0.750728854445777640, +-0.750761884030627050, -0.750794911738571490, -0.750827937569528590, -0.750860961523416190, -0.750893983600151140, -0.750927003799651050, -0.750960022121833440, -0.750993038566616030, +-0.751026053133915910, -0.751059065823650450, -0.751092076635737520, -0.751125085570094500, -0.751158092626638570, -0.751191097805287370, -0.751224101105958500, -0.751257102528569700, +-0.751290102073037810, -0.751323099739280580, -0.751356095527215610, -0.751389089436760750, -0.751422081467832960, -0.751455071620349860, -0.751488059894229400, -0.751521046289388430, +-0.751554030805744900, -0.751587013443216320, -0.751619994201720430, -0.751652973081174290, -0.751685950081495750, -0.751718925202602420, -0.751751898444411930, -0.751784869806841450, +-0.751817839289808720, -0.751850806893231470, -0.751883772617027550, -0.751916736461113900, -0.751949698425408260, -0.751982658509828480, -0.752015616714292400, -0.752048573038716860, +-0.752081527483019930, -0.752114480047119560, -0.752147430730932600, -0.752180379534377110, -0.752213326457370600, -0.752246271499831140, -0.752279214661675690, -0.752312155942822190, +-0.752345095343188270, -0.752378032862692000, -0.752410968501250330, -0.752443902258781220, -0.752476834135202280, -0.752509764130431690, -0.752542692244386300, -0.752575618476984180, +-0.752608542828143050, -0.752641465297780870, -0.752674385885814700, -0.752707304592162620, -0.752740221416742460, -0.752773136359471520, -0.752806049420267740, -0.752838960599048760, +-0.752871869895732740, -0.752904777310236860, -0.752937682842478970, -0.752970586492376800, -0.753003488259848420, -0.753036388144811110, -0.753069286147182830, -0.753102182266881300, +-0.753135076503824720, -0.753167968857930030, -0.753200859329115510, -0.753233747917298800, -0.753266634622397960, -0.753299519444330270, -0.753332402383013800, -0.753365283438366400, +-0.753398162610305900, -0.753431039898749820, -0.753463915303616230, -0.753496788824822960, -0.753529660462287530, -0.753562530215928010, -0.753595398085662000, -0.753628264071407930, +-0.753661128173082840, -0.753693990390604920, -0.753726850723892010, -0.753759709172862280, -0.753792565737433030, -0.753825420417522320, -0.753858273213048100, -0.753891124123928450, +-0.753923973150080750, -0.753956820291423080, -0.753989665547873390, -0.754022508919349850, -0.754055350405769650, -0.754088190007051180, -0.754121027723112400, -0.754153863553870930, +-0.754186697499244610, -0.754219529559151610, -0.754252359733510120, -0.754285188022237430, -0.754318014425251810, -0.754350838942471120, -0.754383661573813540, -0.754416482319196670, +-0.754449301178538480, -0.754482118151757030, -0.754514933238770610, -0.754547746439496620, -0.754580557753853240, -0.754613367181758420, -0.754646174723130560, -0.754678980377886830, +-0.754711784145945750, -0.754744586027225490, -0.754777386021643460, -0.754810184129117930, -0.754842980349567090, -0.754875774682908900, -0.754908567129061070, -0.754941357687941910, +-0.754974146359469240, -0.755006933143561490, -0.755039718040136140, -0.755072501049111500, -0.755105282170405620, -0.755138061403936800, -0.755170838749622540, -0.755203614207381250, +-0.755236387777130870, -0.755269159458789810, -0.755301929252275570, -0.755334697157506450, -0.755367463174400620, -0.755400227302876480, -0.755432989542851430, -0.755465749894243870, +-0.755498508356972300, -0.755531264930954130, -0.755564019616107860, -0.755596772412351460, -0.755629523319603540, -0.755662272337781380, -0.755695019466803620, -0.755727764706588310, +-0.755760508057053750, -0.755793249518117770, -0.755825989089698670, -0.755858726771714510, -0.755891462564083900, -0.755924196466724260, -0.755956928479554200, -0.755989658602491790, +-0.756022386835455640, -0.756055113178363050, -0.756087837631132850, -0.756120560193683120, -0.756153280865931920, -0.756185999647797420, -0.756218716539197920, -0.756251431540051920, +-0.756284144650277050, -0.756316855869791920, -0.756349565198514600, -0.756382272636363600, -0.756414978183256650, -0.756447681839112260, -0.756480383603848620, -0.756513083477384330, +-0.756545781459637130, -0.756578477550525320, -0.756611171749967500, -0.756643864057881870, -0.756676554474186360, -0.756709242998799600, -0.756741929631639780, -0.756774614372625050, +-0.756807297221673610, -0.756839978178704080, -0.756872657243635060, -0.756905334416383860, -0.756938009696869420, -0.756970683085009810, -0.757003354580723540, -0.757036024183928900, +-0.757068691894544290, -0.757101357712487880, -0.757134021637678070, -0.757166683670033150, -0.757199343809471510, -0.757232002055911680, -0.757264658409272260, -0.757297312869470660, +-0.757329965436425830, -0.757362616110056620, -0.757395264890280310, -0.757427911777015740, -0.757460556770181540, -0.757493199869695880, -0.757525841075477160, -0.757558480387443890, +-0.757591117805514470, -0.757623753329607190, -0.757656386959640660, -0.757689018695532960, -0.757721648537202810, -0.757754276484569170, -0.757786902537549210, -0.757819526696062010, +-0.757852148960025950, -0.757884769329360110, -0.757917387803981770, -0.757950004383809990, -0.757982619068763190, -0.758015231858759850, -0.758047842753718390, -0.758080451753557320, +-0.758113058858195130, -0.758145664067550350, -0.758178267381541370, -0.758210868800086700, -0.758243468323105410, -0.758276065950515000, -0.758308661682234320, -0.758341255518181990, +-0.758373847458277180, -0.758406437502437080, -0.758439025650580970, -0.758471611902627240, -0.758504196258494520, -0.758536778718101210, -0.758569359281366040, -0.758601937948207410, +-0.758634514718544040, -0.758667089592294340, -0.758699662569376930, -0.758732233649710870, -0.758764802833213680, -0.758797370119804530, -0.758829935509401920, -0.758862499001925040, +-0.758895060597291280, -0.758927620295420050, -0.758960178096229620, -0.758992733999638740, -0.759025288005566120, -0.759057840113930180, -0.759090390324649640, -0.759122938637643240, +-0.759155485052829370, -0.759188029570126880, -0.759220572189454270, -0.759253112910730830, -0.759285651733873970, -0.759318188658803070, -0.759350723685437210, -0.759383256813694010, +-0.759415788043492630, -0.759448317374751820, -0.759480844807390200, -0.759513370341326380, -0.759545893976479310, -0.759578415712767410, -0.759610935550109390, -0.759643453488424210, +-0.759675969527630280, -0.759708483667646430, -0.759740995908391950, -0.759773506249784350, -0.759806014691743140, -0.759838521234186710, -0.759871025877034700, -0.759903528620204490, +-0.759936029463615490, -0.759968528407186430, -0.760001025450835920, -0.760033520594483040, -0.760066013838046170, -0.760098505181444390, -0.760130994624596320, -0.760163482167420800, +-0.760195967809836450, -0.760228451551762880, -0.760260933393117620, -0.760293413333819950, -0.760325891373788700, -0.760358367512943390, -0.760390841751201530, -0.760423314088482630, +-0.760455784524705410, -0.760488253059788730, -0.760520719693651430, -0.760553184426212340, -0.760585647257390310, -0.760618108187104070, -0.760650567215272580, -0.760683024341814780, +-0.760715479566649870, -0.760747932889695780, -0.760780384310871800, -0.760812833830096900, -0.760845281447290470, -0.760877727162370230, -0.760910170975255710, -0.760942612885865730, +-0.760975052894119260, -0.761007490999935140, -0.761039927203232210, -0.761072361503929650, -0.761104793901946080, -0.761137224397200440, -0.761169652989611810, -0.761202079679099140, +-0.761234504465581720, -0.761266927348977500, -0.761299348329205980, -0.761331767406186690, -0.761364184579837340, -0.761396599850077680, -0.761429013216826320, -0.761461424680002550, +-0.761493834239525210, -0.761526241895313260, -0.761558647647285650, -0.761591051495361440, -0.761623453439459700, -0.761655853479499270, -0.761688251615399210, -0.761720647847079050, +-0.761753042174456720, -0.761785434597451850, -0.761817825115983280, -0.761850213729970860, -0.761882600439332200, -0.761914985243987150, -0.761947368143854550, -0.761979749138853580, +-0.762012128228903180, -0.762044505413922550, -0.762076880693830620, -0.762109254068546460, -0.762141625537989140, -0.762173995102077840, -0.762206362760732060, -0.762238728513869760, +-0.762271092361410770, -0.762303454303273950, -0.762335814339379140, -0.762368172469644170, -0.762400528693988780, -0.762432883012332030, -0.762465235424593100, -0.762497585930691060, +-0.762529934530545180, -0.762562281224074320, -0.762594626011197760, -0.762626968891834790, -0.762659309865904240, -0.762691648933326080, -0.762723986094018150, -0.762756321347900280, +-0.762788654694891650, -0.762820986134911890, -0.762853315667879170, -0.762885643293713110, -0.762917969012332890, -0.762950292823657890, -0.762982614727607090, -0.763014934724099760, +-0.763047252813054970, -0.763079568994392220, -0.763111883268030480, -0.763144195633889020, -0.763176506091887140, -0.763208814641944460, -0.763241121283979250, -0.763273426017911150, +-0.763305728843660100, -0.763338029761144290, -0.763370328770283210, -0.763402625870996390, -0.763434921063202990, -0.763467214346822300, -0.763499505721773610, -0.763531795187976090, +-0.763564082745349150, -0.763596368393811950, -0.763628652133283900, -0.763660933963684170, -0.763693213884932610, -0.763725491896947610, -0.763757767999648670, -0.763790042192955430, +-0.763822314476787720, -0.763854584851063500, -0.763886853315702940, -0.763919119870625220, -0.763951384515749620, -0.763983647250995660, -0.764015908076282610, -0.764048166991529660, +-0.764080423996656320, -0.764112679091581980, -0.764144932276225930, -0.764177183550508120, -0.764209432914346840, -0.764241680367661820, -0.764273925910372800, -0.764306169542399380, +-0.764338411263659980, -0.764370651074074650, -0.764402888973562570, -0.764435124962043360, -0.764467359039436300, -0.764499591205660910, -0.764531821460636470, -0.764564049804282500, +-0.764596276236518380, -0.764628500757263520, -0.764660723366438090, -0.764692944063960270, -0.764725162849750010, -0.764757379723726820, -0.764789594685810870, -0.764821807735920340, +-0.764854018873975190, -0.764886228099895150, -0.764918435413599380, -0.764950640815007630, -0.764982844304039290, -0.765015045880613750, -0.765047245544650640, -0.765079443296069470, +-0.765111639134789630, -0.765143833060730640, -0.765176025073812770, -0.765208215173954210, -0.765240403361075020, -0.765272589635095480, -0.765304773995933880, -0.765336956443510410, +-0.765369136977744450, -0.765401315598555730, -0.765433492305863660, -0.765465667099587850, -0.765497839979647930, -0.765530010945963400, -0.765562179998453880, -0.765594347137038780, +-0.765626512361637920, -0.765658675672171380, -0.765690837068557450, -0.765722996550716520, -0.765755154118568090, -0.765787309772032350, -0.765819463511027700, -0.765851615335474520, +-0.765883765245292230, -0.765915913240400540, -0.765948059320718970, -0.765980203486167350, -0.766012345736665210, -0.766044486072132160, -0.766076624492487920, -0.766108760997652240, +-0.766140895587545060, -0.766173028262085110, -0.766205159021192680, -0.766237287864787180, -0.766269414792789210, -0.766301539805117060, -0.766333662901691030, -0.766365784082430830, +-0.766397903347256330, -0.766430020696086900, -0.766462136128842510, -0.766494249645442660, -0.766526361245807310, -0.766558470929856070, -0.766590578697508570, -0.766622684548685210, +-0.766654788483304590, -0.766686890501287020, -0.766718990602552110, -0.766751088787020470, -0.766783185054610410, -0.766815279405242410, -0.766847371838836220, -0.766879462355311680, +-0.766911550954588410, -0.766943637636586240, -0.766975722401225020, -0.767007805248424490, -0.767039886178104370, -0.767071965190184610, -0.767104042284584950, -0.767136117461225790, +-0.767168190720025620, -0.767200262060905080, -0.767232331483784450, -0.767264398988582450, -0.767296464575219380, -0.767328528243615190, -0.767360589993689720, -0.767392649825362700, +-0.767424707738554090, -0.767456763733183720, -0.767488817809171330, -0.767520869966437090, -0.767552920204900510, -0.767584968524481660, -0.767617014925101040, -0.767649059406677270, +-0.767681101969130860, -0.767713142612381660, -0.767745181336350170, -0.767777218140955230, -0.767809253026117130, -0.767841285991756050, -0.767873317037791710, -0.767905346164143960, +-0.767937373370732980, -0.767969398657478490, -0.768001422024300550, -0.768033443471119020, -0.768065462997853940, -0.768097480604425730, -0.768129496290753220, -0.768161510056757040, +-0.768193521902357010, -0.768225531827473770, -0.768257539832026160, -0.768289545915934680, -0.768321550079119290, -0.768353552321500040, -0.768385552642997020, -0.768417551043530040, +-0.768449547523019080, -0.768481542081384420, -0.768513534718545890, -0.768545525434423450, -0.768577514228937720, -0.768609501102007760, -0.768641486053553980, -0.768673469083496430, +-0.768705450191755850, -0.768737429378251180, -0.768769406642902720, -0.768801381985630860, -0.768833355406355560, -0.768865326904996870, -0.768897296481474870, -0.768929264135709610, +-0.768961229867621170, -0.768993193677129590, -0.769025155564155070, -0.769057115528617770, -0.769089073570438100, -0.769121029689535330, -0.769152983885829870, -0.769184936159242550, +-0.769216886509692330, -0.769248834937099950, -0.769280781441385340, -0.769312726022468920, -0.769344668680270630, -0.769376609414710640, -0.769408548225709140, -0.769440485113186300, +-0.769472420077062290, -0.769504353117257180, -0.769536284233691140, -0.769568213426285010, -0.769600140694957750, -0.769632066039630190, -0.769663989460222410, -0.769695910956655240, +-0.769727830528847750, -0.769759748176720660, -0.769791663900194160, -0.769823577699188520, -0.769855489573623930, -0.769887399523420670, -0.769919307548498910, -0.769951213648778830, +-0.769983117824180830, -0.770015020074624860, -0.770046920400032090, -0.770078818800321250, -0.770110715275413530, -0.770142609825228970, -0.770174502449688440, -0.770206393148711090, +-0.770238281922217770, -0.770270168770128770, -0.770302053692364260, -0.770333936688844760, -0.770365817759490310, -0.770397696904221330, -0.770429574122958090, -0.770461449415621000, +-0.770493322782130230, -0.770525194222406730, -0.770557063736369560, -0.770588931323939910, -0.770620796985037830, -0.770652660719584380, -0.770684522527498640, -0.770716382408701660, +-0.770748240363113730, -0.770780096390655150, -0.770811950491246400, -0.770843802664807680, -0.770875652911259480, -0.770907501230522210, -0.770939347622516150, -0.770971192087161690, +-0.771003034624379910, -0.771034875234089870, -0.771066713916212730, -0.771098550670668680, -0.771130385497379000, -0.771162218396262640, -0.771194049367240790, -0.771225878410233820, +-0.771257705525162150, -0.771289530711946170, -0.771321353970506380, -0.771353175300763310, -0.771384994702637220, -0.771416812176048630, -0.771448627720918050, -0.771480441337165870, +-0.771512253024713160, -0.771544062783479310, -0.771575870613385170, -0.771607676514351470, -0.771639480486299160, -0.771671282529147520, -0.771703082642817620, -0.771734880827230070, +-0.771766677082305290, -0.771798471407963870, -0.771830263804126340, -0.771862054270713080, -0.771893842807644610, -0.771925629414841550, -0.771957414092224510, -0.771989196839714450, +-0.772020977657230880, -0.772052756544694740, -0.772084533502026770, -0.772116308529148140, -0.772148081625978030, -0.772179852792437840, -0.772211622028447950, -0.772243389333929000, +-0.772275154708801590, -0.772306918152986240, -0.772338679666403680, -0.772370439248974420, -0.772402196900618950, -0.772433952621258140, -0.772465706410812910, -0.772497458269202800, +-0.772529208196349180, -0.772560956192172470, -0.772592702256593930, -0.772624446389533090, -0.772656188590911120, -0.772687928860648740, -0.772719667198666470, -0.772751403604885030, +-0.772783138079225160, -0.772814870621607360, -0.772846601231952370, -0.772878329910180910, -0.772910056656213710, -0.772941781469971830, -0.772973504351374910, -0.773005225300344320, +-0.773036944316800590, -0.773068661400665100, -0.773100376551857480, -0.773132089770298790, -0.773163801055909870, -0.773195510408611560, -0.773227217828324380, -0.773258923314969150, +-0.773290626868466720, -0.773322328488737610, -0.773354028175702760, -0.773385725929282790, -0.773417421749398540, -0.773449115635971300, -0.773480807588920680, -0.773512497608167980, +-0.773544185693634150, -0.773575871845240350, -0.773607556062906320, -0.773639238346553460, -0.773670918696102380, -0.773702597111474160, -0.773734273592589280, -0.773765948139368830, +-0.773797620751733420, -0.773829291429604100, -0.773860960172901400, -0.773892626981546370, -0.773924291855460410, -0.773955954794563030, -0.773987615798775840, -0.774019274868019580, +-0.774050932002215750, -0.774082587201283980, -0.774114240465145760, -0.774145891793721840, -0.774177541186933380, -0.774209188644700900, -0.774240834166945560, -0.774272477753587980, +-0.774304119404549350, -0.774335759119750390, -0.774367396899112050, -0.774399032742555730, -0.774430666650001380, -0.774462298621370170, -0.774493928656583400, -0.774525556755562230, +-0.774557182918226730, -0.774588807144498180, -0.774620429434297650, -0.774652049787545980, -0.774683668204164340, -0.774715284684073360, -0.774746899227194310, -0.774778511833447920, +-0.774810122502755270, -0.774841731235037300, -0.774873338030215630, -0.774904942888209990, -0.774936545808942000, -0.774968146792332720, -0.774999745838303560, -0.775031342946774450, +-0.775062938117667020, -0.775094531350902340, -0.775126122646401130, -0.775157712004084790, -0.775189299423874050, -0.775220884905690190, -0.775252468449453950, -0.775284050055086720, +-0.775315629722509230, -0.775347207451642760, -0.775378783242408720, -0.775410357094727280, -0.775441929008519830, -0.775473498983708210, -0.775505067020212270, -0.775536633117953620, +-0.775568197276853440, -0.775599759496832800, -0.775631319777812630, -0.775662878119714240, -0.775694434522458680, -0.775725988985967010, -0.775757541510160410, -0.775789092094959830, +-0.775820640740286670, -0.775852187446062440, -0.775883732212207080, -0.775915275038642440, -0.775946815925289690, -0.775978354872070340, -0.776009891878904570, -0.776041426945714100, +-0.776072960072420100, -0.776104491258943650, -0.776136020505206030, -0.776167547811128290, -0.776199073176631730, -0.776230596601637400, -0.776262118086066710, -0.776293637629840600, +-0.776325155232881040, -0.776356670895107960, -0.776388184616443320, -0.776419696396808080, -0.776451206236124290, -0.776482714134311800, -0.776514220091292560, -0.776545724106987860, +-0.776577226181318750, -0.776608726314206630, -0.776640224505572680, -0.776671720755338190, -0.776703215063424320, -0.776734707429752480, -0.776766197854243830, -0.776797686336820340, +-0.776829172877401940, -0.776860657475910710, -0.776892140132267820, -0.776923620846395100, -0.776955099618212850, -0.776986576447642690, -0.777018051334606220, -0.777049524279024630, +-0.777080995280819200, -0.777112464339911210, -0.777143931456222180, -0.777175396629673280, -0.777206859860185890, -0.777238321147681320, -0.777269780492080950, -0.777301237893306740, +-0.777332693351278750, -0.777364146865919150, -0.777395598437149670, -0.777427048064890710, -0.777458495749064120, -0.777489941489591270, -0.777521385286393580, -0.777552827139392330, +-0.777584267048509140, -0.777615705013665280, -0.777647141034782050, -0.777678575111781070, -0.777710007244583610, -0.777741437433111080, -0.777772865677285650, -0.777804291977027380, +-0.777835716332258450, -0.777867138742900140, -0.777898559208874630, -0.777929977730102200, -0.777961394306504680, -0.777992808938003820, -0.778024221624520780, -0.778055632365977300, +-0.778087041162294770, -0.778118448013394580, -0.778149852919198250, -0.778181255879627280, -0.778212656894603280, -0.778244055964048110, -0.778275453087882260, -0.778306848266027700, +-0.778338241498406140, -0.778369632784939420, -0.778401022125548180, -0.778432409520154360, -0.778463794968679460, -0.778495178471045100, -0.778526560027172800, -0.778557939636984050, +-0.778589317300400600, -0.778620693017343710, -0.778652066787735130, -0.778683438611496360, -0.778714808488549570, -0.778746176418815270, -0.778777542402215420, -0.778808906438671840, +-0.778840268528106390, -0.778871628670439800, -0.778902986865594120, -0.778934343113490970, -0.778965697414052080, -0.778997049767198860, -0.779028400172852910, -0.779059748630936080, +-0.779091095141369870, -0.779122439704075910, -0.779153782318975810, -0.779185122985991300, -0.779216461705044550, -0.779247798476056070, -0.779279133298948050, -0.779310466173642860, +-0.779341797100060910, -0.779373126078124370, -0.779404453107755080, -0.779435778188874770, -0.779467101321404840, -0.779498422505267240, -0.779529741740383590, -0.779561059026675610, +-0.779592374364064920, -0.779623687752473260, -0.779654999191822460, -0.779686308682034700, -0.779717616223030600, -0.779748921814732430, -0.779780225457062050, -0.779811527149941620, +-0.779842826893291760, -0.779874124687034880, -0.779905420531092690, -0.779936714425386920, -0.779968006369839430, -0.779999296364371930, -0.780030584408906050, -0.780061870503363840, +-0.780093154647666930, -0.780124436841737160, -0.780155717085496800, -0.780186995378866600, -0.780218271721768940, -0.780249546114125560, -0.780280818555858850, -0.780312089046889530, +-0.780343357587140130, -0.780374624176532250, -0.780405888814987740, -0.780437151502428650, -0.780468412238776500, -0.780499671023953460, -0.780530927857881250, -0.780562182740481610, +-0.780593435671676610, -0.780624686651388510, -0.780655935679538170, -0.780687182756048090, -0.780718427880839890, -0.780749671053836300, -0.780780912274957830, -0.780812151544127200, +-0.780843388861266250, -0.780874624226296720, -0.780905857639140550, -0.780937089099719930, -0.780968318607956460, -0.780999546163772210, -0.781030771767089130, -0.781061995417829170, +-0.781093217115914060, -0.781124436861266650, -0.781155654653807430, -0.781186870493459140, -0.781218084380144280, -0.781249296313783590, -0.781280506294299680, -0.781311714321614500, +-0.781342920395650120, -0.781374124516328370, -0.781405326683571210, -0.781436526897300810, -0.781467725157439120, -0.781498921463908090, -0.781530115816629790, -0.781561308215526160, +-0.781592498660519830, -0.781623687151531740, -0.781654873688484410, -0.781686058271299890, -0.781717240899900800, -0.781748421574207990, -0.781779600294144170, -0.781810777059631310, +-0.781841951870591580, -0.781873124726946920, -0.781904295628619410, -0.781935464575531200, -0.781966631567604380, -0.781997796604760990, -0.782028959686922990, -0.782060120814013220, +-0.782091279985952630, -0.782122437202663830, -0.782153592464068900, -0.782184745770090560, -0.782215897120649760, -0.782247046515669230, -0.782278193955071140, -0.782309339438777560, +-0.782340482966710550, -0.782371624538792390, -0.782402764154945140, -0.782433901815090980, -0.782465037519152080, -0.782496171267050620, -0.782527303058709320, -0.782558432894049140, +-0.782589560772992910, -0.782620686695462700, -0.782651810661381450, -0.782682932670670020, -0.782714052723251230, -0.782745170819047380, -0.782776286957980630, -0.782807401139973160, +-0.782838513364947140, -0.782869623632824860, -0.782900731943528490, -0.782931838296980320, -0.782962942693102630, -0.782994045131817470, -0.783025145613047700, -0.783056244136714600, +-0.783087340702741000, -0.783118435311049410, -0.783149527961561230, -0.783180618654199300, -0.783211707388885790, -0.783242794165542990, -0.783273878984093170, -0.783304961844458750, +-0.783336042746561880, -0.783367121690324960, -0.783398198675670180, -0.783429273702519910, -0.783460346770796350, -0.783491417880422650, -0.783522487031319770, -0.783553554223410660, +-0.783584619456617730, -0.783615682730863680, -0.783646744046070040, -0.783677803402159420, -0.783708860799054330, -0.783739916236677050, -0.783770969714949970, -0.783802021233795500, +-0.783833070793136020, -0.783864118392893830, -0.783895164032991310, -0.783926207713350980, -0.783957249433895550, -0.783988289194546550, -0.784019326995226810, -0.784050362835858720, +-0.784081396716365230, -0.784112428636667750, -0.784143458596689210, -0.784174486596352030, -0.784205512635578690, -0.784236536714291500, -0.784267558832412950, -0.784298578989865440, +-0.784329597186571580, -0.784360613422453780, -0.784391627697434310, -0.784422640011436470, -0.784453650364381310, -0.784484658756192220, -0.784515665186791280, -0.784546669656101870, +-0.784577672164045170, -0.784608672710544350, -0.784639671295521810, -0.784670667918900060, -0.784701662580601700, -0.784732655280549140, -0.784763646018665000, -0.784794634794871660, +-0.784825621609091750, -0.784856606461247890, -0.784887589351262350, -0.784918570279058540, -0.784949549244557620, -0.784980526247682890, -0.785011501288357390, -0.785042474366502650, +-0.785073445482041720, -0.785104414634897110, -0.785135381824991430, -0.785166347052247420, -0.785197310316587460, -0.785228271617934180, -0.785259230956210310, -0.785290188331338350, +-0.785321143743240910, -0.785352097191840630, -0.785383048677060550, -0.785413998198822410, -0.785444945757049260, -0.785475891351663740, -0.785506834982589000, -0.785537776649746670, +-0.785568716353059910, -0.785599654092451250, -0.785630589867843620, -0.785661523679159420, -0.785692455526321390, -0.785723385409252240, -0.785754313327874710, -0.785785239282111300, +-0.785816163271884860, -0.785847085297118440, -0.785878005357733890, -0.785908923453654260, -0.785939839584802400, -0.785970753751101370, -0.786001665952473010, -0.786032576188840370, +-0.786063484460126420, -0.786094390766253650, -0.786125295107145020, -0.786156197482723030, -0.786187097892910640, -0.786217996337630450, -0.786248892816805320, -0.786279787330357970, +-0.786310679878211570, -0.786341570460288080, -0.786372459076510540, -0.786403345726801930, -0.786434230411085510, -0.786465113129282910, -0.786495993881317630, -0.786526872667112300, +-0.786557749486589740, -0.786588624339672800, -0.786619497226284330, -0.786650368146347150, -0.786681237099784100, -0.786712104086517930, -0.786742969106471460, -0.786773832159567530, +-0.786804693245729550, -0.786835552364879340, -0.786866409516940310, -0.786897264701835740, -0.786928117919487470, -0.786958969169818890, -0.786989818452752950, -0.787020665768212390, +-0.787051511116120260, -0.787082354496399290, -0.787113195908972330, -0.787144035353762540, -0.787174872830692650, -0.787205708339685510, -0.787236541880664050, -0.787267373453551910, +-0.787298203058270700, -0.787329030694744030, -0.787359856362894740, -0.787390680062646450, -0.787421501793920900, -0.787452321556641470, -0.787483139350731330, -0.787513955176113330, +-0.787544769032710420, -0.787575580920445660, -0.787606390839241890, -0.787637198789022160, -0.787668004769709440, -0.787698808781226670, -0.787729610823497460, -0.787760410896443660, +-0.787791208999988780, -0.787822005134055980, -0.787852799298568660, -0.787883591493448780, -0.787914381718619940, -0.787945169974005210, -0.787975956259527430, -0.788006740575109890, +-0.788037522920675420, -0.788068303296147190, -0.788099081701448160, -0.788129858136501380, -0.788160632601230040, -0.788191405095557630, -0.788222175619406110, -0.788252944172699310, +-0.788283710755359970, -0.788314475367312030, -0.788345238008477330, -0.788375998678779500, -0.788406757378141700, -0.788437514106486990, -0.788468268863738440, -0.788499021649819330, +-0.788529772464652610, -0.788560521308161460, -0.788591268180268920, -0.788622013080898300, -0.788652756009972760, -0.788683496967415690, -0.788714235953149380, -0.788744972967097560, +-0.788775708009183730, -0.788806441079330180, -0.788837172177460520, -0.788867901303497930, -0.788898628457365580, -0.788929353638986640, -0.788960076848284290, -0.788990798085181800, +-0.789021517349602240, -0.789052234641469010, -0.789082949960705050, -0.789113663307233870, -0.789144374680978980, -0.789175084081862650, -0.789205791509808520, -0.789236496964740080, +-0.789267200446580830, -0.789297901955253070, -0.789328601490680510, -0.789359299052786460, -0.789389994641494170, -0.789420688256726840, -0.789451379898407860, -0.789482069566460390, +-0.789512757260807830, -0.789543442981373360, -0.789574126728080250, -0.789604808500852350, -0.789635488299611830, -0.789666166124282640, -0.789696841974788070, -0.789727515851051940, +-0.789758187752996440, -0.789788857680545520, -0.789819525633622450, -0.789850191612150530, -0.789880855616053150, -0.789911517645253580, -0.789942177699675230, -0.789972835779241490, +-0.790003491883875640, -0.790034146013501080, -0.790064798168041650, -0.790095448347419740, -0.790126096551559190, -0.790156742780383390, -0.790187387033816190, -0.790218029311780090, +-0.790248669614198930, -0.790279307940995990, -0.790309944292094890, -0.790340578667418910, -0.790371211066891450, -0.790401841490436020, -0.790432469937975890, -0.790463096409434680, +-0.790493720904735690, -0.790524343423802960, -0.790554963966558780, -0.790585582532927210, -0.790616199122831650, -0.790646813736196160, -0.790677426372943140, -0.790708037032996520, +-0.790738645716279830, -0.790769252422716450, -0.790799857152230000, -0.790830459904743990, -0.790861060680181690, -0.790891659478466850, -0.790922256299522730, -0.790952851143273070, +-0.790983444009641270, -0.791014034898551380, -0.791044623809925910, -0.791075210743688810, -0.791105795699763690, -0.791136378678074630, -0.791166959678544110, -0.791197538701096210, +-0.791228115745654440, -0.791258690812142400, -0.791289263900483600, -0.791319835010601660, -0.791350404142420080, -0.791380971295862600, -0.791411536470852610, -0.791442099667313710, +-0.791472660885170210, -0.791503220124344490, -0.791533777384760720, -0.791564332666342520, -0.791594885969014060, -0.791625437292697740, -0.791655986637317950, -0.791686534002798090, +-0.791717079389062000, -0.791747622796033170, -0.791778164223635230, -0.791808703671791900, -0.791839241140426810, -0.791869776629463670, -0.791900310138826000, -0.791930841668438190, +-0.791961371218222740, -0.791991898788103830, -0.792022424378005190, -0.792052947987850970, -0.792083469617563820, -0.792113989267068110, -0.792144506936287350, -0.792175022625145390, +-0.792205536333565720, -0.792236048061472300, -0.792266557808788850, -0.792297065575438890, -0.792327571361346350, -0.792358075166434750, -0.792388576990628700, -0.792419076833850490, +-0.792449574696024620, -0.792480070577074920, -0.792510564476925470, -0.792541056395499100, -0.792571546332720090, -0.792602034288512280, -0.792632520262799290, -0.792663004255505070, +-0.792693486266553340, -0.792723966295867830, -0.792754444343372390, -0.792784920408990960, -0.792815394492647150, -0.792845866594264810, -0.792876336713768450, -0.792906804851080670, +-0.792937271006125880, -0.792967735178827900, -0.792998197369111040, -0.793028657576898220, -0.793059115802113860, -0.793089572044681560, -0.793120026304525380, -0.793150478581569170, +-0.793180928875736660, -0.793211377186952000, -0.793241823515138720, -0.793272267860220980, -0.793302710222122510, -0.793333150600767920, -0.793363588996079840, -0.793394025407982760, +-0.793424459836400640, -0.793454892281257870, -0.793485322742477410, -0.793515751219983630, -0.793546177713700400, -0.793576602223551860, -0.793607024749461650, -0.793637445291353940, +-0.793667863849152670, -0.793698280422781680, -0.793728695012165030, -0.793759107617226680, -0.793789518237891010, -0.793819926874081090, -0.793850333525721320, -0.793880738192735750, +-0.793911140875048770, -0.793941541572583450, -0.793971940285264300, -0.794002337013015260, -0.794032731755760390, -0.794063124513423760, -0.794093515285929200, -0.794123904073200990, +-0.794154290875162870, -0.794184675691739120, -0.794215058522853680, -0.794245439368431170, -0.794275818228394440, -0.794306195102668200, -0.794336569991176410, -0.794366942893843800, +-0.794397313810593310, -0.794427682741349450, -0.794458049686036500, -0.794488414644578310, -0.794518777616899150, -0.794549138602923090, -0.794579497602574070, -0.794609854615776490, +-0.794640209642454080, -0.794670562682531220, -0.794700913735931990, -0.794731262802581000, -0.794761609882401190, -0.794791954975317520, -0.794822298081254490, -0.794852639200135050, +-0.794882978331884040, -0.794913315476425630, -0.794943650633684000, -0.794973983803583200, -0.795004314986047400, -0.795034644181000780, -0.795064971388367630, -0.795095296608072100, +-0.795125619840038270, -0.795155941084190300, -0.795186260340453140, -0.795216577608749750, -0.795246892889004850, -0.795277206181142840, -0.795307517485088210, -0.795337826800764370, +-0.795368134128095930, -0.795398439467007170, -0.795428742817422260, -0.795459044179265500, -0.795489343552461150, -0.795519640936933390, -0.795549936332606620, -0.795580229739405010, +-0.795610521157252730, -0.795640810586074720, -0.795671098025794280, -0.795701383476335900, -0.795731666937624200, -0.795761948409583810, -0.795792227892137990, -0.795822505385211710, +-0.795852780888729020, -0.795883054402614420, -0.795913325926792200, -0.795943595461186650, -0.795973863005722150, -0.796004128560322990, -0.796034392124913560, -0.796064653699418030, +-0.796094913283761470, -0.796125170877867160, -0.796155426481659820, -0.796185680095063850, -0.796215931718004310, -0.796246181350404480, -0.796276428992189090, -0.796306674643282640, +-0.796336918303609530, -0.796367159973094150, -0.796397399651660790, -0.796427637339233940, -0.796457873035738120, -0.796488106741097490, -0.796518338455236560, -0.796548568178079950, +-0.796578795909552270, -0.796609021649577250, -0.796639245398079510, -0.796669467154984320, -0.796699686920214870, -0.796729904693696200, -0.796760120475352830, -0.796790334265109030, +-0.796820546062889430, -0.796850755868618530, -0.796880963682220720, -0.796911169503620510, -0.796941373332742400, -0.796971575169510780, -0.797001775013850280, -0.797031972865685830, +-0.797062168724940960, -0.797092362591540700, -0.797122554465409470, -0.797152744346472430, -0.797182932234652970, -0.797213118129876160, -0.797243302032066610, -0.797273483941148720, +-0.797303663857047210, -0.797333841779686470, -0.797364017708991120, -0.797394191644885790, -0.797424363587294960, -0.797454533536143260, -0.797484701491355640, -0.797514867452855820, +-0.797545031420568870, -0.797575193394419290, -0.797605353374332250, -0.797635511360231360, -0.797665667352041590, -0.797695821349687750, -0.797725973353094250, -0.797756123362185930, +-0.797786271376887180, -0.797816417397122830, -0.797846561422817510, -0.797876703453895610, -0.797906843490282070, -0.797936981531901960, -0.797967117578678890, -0.797997251630537920, +-0.798027383687403890, -0.798057513749201860, -0.798087641815855560, -0.798117767887290160, -0.798147891963430390, -0.798178014044200860, -0.798208134129526290, -0.798238252219331420, +-0.798268368313540870, -0.798298482412079350, -0.798328594514871700, -0.798358704621842550, -0.798388812732916620, -0.798418918848019190, -0.798449022967073980, -0.798479125090006180, +-0.798509225216741060, -0.798539323347202350, -0.798569419481315430, -0.798599513619004830, -0.798629605760195590, -0.798659695904812230, -0.798689784052779680, -0.798719870204022690, +-0.798749954358465960, -0.798780036516034350, -0.798810116676652690, -0.798840194840245710, -0.798870271006738800, -0.798900345176055680, -0.798930417348121650, -0.798960487522861530, +-0.798990555700200830, -0.799020621880063290, -0.799050686062374060, -0.799080748247058100, -0.799110808434040370, -0.799140866623245460, -0.799170922814598560, -0.799200977008024280, +-0.799231029203447570, -0.799261079400793270, -0.799291127599986220, -0.799321173800952020, -0.799351218003614190, -0.799381260207898460, -0.799411300413729430, -0.799441338621032840, +-0.799471374829732300, -0.799501409039753310, -0.799531441251020820, -0.799561471463459680, -0.799591499676994940, -0.799621525891551440, -0.799651550107054020, -0.799681572323427850, +-0.799711592540597760, -0.799741610758488600, -0.799771626977025970, -0.799801641196133730, -0.799831653415737480, -0.799861663635761940, -0.799891671856132860, -0.799921678076774060, +-0.799951682297611040, -0.799981684518568880, -0.800011684739572520, -0.800041682960546900, -0.800071679181417080, -0.800101673402108030, -0.800131665622544790, -0.800161655842652530, +-0.800191644062355990, -0.800221630281580330, -0.800251614500251170, -0.800281596718292470, -0.800311576935629710, -0.800341555152188630, -0.800371531367893070, -0.800401505582668650, +-0.800431477796440530, -0.800461448009133660, -0.800491416220673210, -0.800521382430984250, -0.800551346639991830, -0.800581308847621020, -0.800611269053796870, -0.800641227258444670, +-0.800671183461489360, -0.800701137662856550, -0.800731089862470440, -0.800761040060256610, -0.800790988256140150, -0.800820934450046760, -0.800850878641900520, -0.800880820831627040, +-0.800910761019151480, -0.800940699204399140, -0.800970635387294960, -0.801000569567764220, -0.801030501745731980, -0.801060431921123640, -0.801090360093864140, -0.801120286263878660, +-0.801150210431093130, -0.801180132595431530, -0.801210052756819560, -0.801239970915182400, -0.801269887070445890, -0.801299801222534190, -0.801329713371372930, -0.801359623516887390, +-0.801389531659002840, -0.801419437797644350, -0.801449341932737310, -0.801479244064207010, -0.801509144191978500, -0.801539042315977170, -0.801568938436128200, -0.801598832552357420, +-0.801628724664589120, -0.801658614772748910, -0.801688502876762190, -0.801718388976554670, -0.801748273072050770, -0.801778155163176190, -0.801808035249856110, -0.801837913332016040, +-0.801867789409581140, -0.801897663482476820, -0.801927535550628230, -0.801957405613960890, -0.801987273672400080, -0.802017139725870960, -0.802047003774299050, -0.802076865817610170, +-0.802106725855728620, -0.802136583888580220, -0.802166439916090930, -0.802196293938184920, -0.802226145954788250, -0.802255995965826200, -0.802285843971224160, -0.802315689970907520, +-0.802345533964801680, -0.802375375952831930, -0.802405215934923750, -0.802435053911002670, -0.802464889880993740, -0.802494723844822790, -0.802524555802415440, -0.802554385753696200, +-0.802584213698591010, -0.802614039637025160, -0.802643863568924920, -0.802673685494214470, -0.802703505412819650, -0.802733323324666290, -0.802763139229679460, -0.802792953127784870, +-0.802822765018907810, -0.802852574902973900, -0.802882382779908530, -0.802912188649637200, -0.802941992512085420, -0.802971794367179140, -0.803001594214842960, -0.803031392055002740, +-0.803061187887583960, -0.803090981712512810, -0.803120773529713670, -0.803150563339112610, -0.803180351140635130, -0.803210136934206730, -0.803239920719753030, -0.803269702497199530, +-0.803299482266471740, -0.803329260027495270, -0.803359035780195630, -0.803388809524498430, -0.803418581260329720, -0.803448350987614020, -0.803478118706277500, -0.803507884416245650, +-0.803537648117444660, -0.803567409809798900, -0.803597169493234680, -0.803626927167677580, -0.803656682833053140, -0.803686436489286950, -0.803716188136304740, -0.803745937774032030, +-0.803775685402394410, -0.803805431021317630, -0.803835174630727290, -0.803864916230549010, -0.803894655820708960, -0.803924393401131750, -0.803954128971743560, -0.803983862532470560, +-0.804013594083237470, -0.804043323623970240, -0.804073051154594820, -0.804102776675036710, -0.804132500185221640, -0.804162221685075340, -0.804191941174523530, -0.804221658653491820, +-0.804251374121905950, -0.804281087579691630, -0.804310799026774710, -0.804340508463081250, -0.804370215888535970, -0.804399921303065150, -0.804429624706594510, -0.804459326099050460, +-0.804489025480357390, -0.804518722850441900, -0.804548418209229510, -0.804578111556646160, -0.804607802892617460, -0.804637492217069260, -0.804667179529927390, -0.804696864831117460, +-0.804726548120565430, -0.804756229398197020, -0.804785908663938620, -0.804815585917714850, -0.804845261159452210, -0.804874934389076310, -0.804904605606513670, -0.804934274811689000, +-0.804963942004528590, -0.804993607184958380, -0.805023270352904110, -0.805052931508291600, -0.805082590651046930, -0.805112247781095690, -0.805141902898363740, -0.805171556002777120, +-0.805201207094261680, -0.805230856172743700, -0.805260503238148020, -0.805290148290401020, -0.805319791329428770, -0.805349432355157550, -0.805379071367512190, -0.805408708366419090, +-0.805438343351804310, -0.805467976323593680, -0.805497607281713050, -0.805527236226088460, -0.805556863156645760, -0.805586488073310900, -0.805616110976009820, -0.805645731864668480, +-0.805675350739212700, -0.805704967599569220, -0.805734582445662760, -0.805764195277419830, -0.805793806094766920, -0.805823414897628990, -0.805853021685932420, -0.805882626459603400, +-0.805912229218567870, -0.805941829962751650, -0.805971428692080940, -0.806001025406481550, -0.806030620105879780, -0.806060212790201350, -0.806089803459372310, -0.806119392113318840, +-0.806148978751967450, -0.806178563375243070, -0.806208145983072220, -0.806237726575381060, -0.806267305152096100, -0.806296881713142400, -0.806326456258446460, -0.806356028787934330, +-0.806385599301532200, -0.806415167799166000, -0.806444734280761910, -0.806474298746245990, -0.806503861195544290, -0.806533421628582990, -0.806562980045288150, -0.806592536445586370, +-0.806622090829402730, -0.806651643196663830, -0.806681193547295840, -0.806710741881225380, -0.806740288198377510, -0.806769832498678950, -0.806799374782055880, -0.806828915048434350, +-0.806858453297740420, -0.806887989529900480, -0.806917523744840490, -0.806947055942486720, -0.806976586122765350, -0.807006114285602430, -0.807035640430924790, -0.807065164558657510, +-0.807094686668727410, -0.807124206761060450, -0.807153724835583560, -0.807183240892221930, -0.807212754930902050, -0.807242266951550320, -0.807271776954093020, -0.807301284938456210, +-0.807330790904566160, -0.807360294852349170, -0.807389796781731390, -0.807419296692639230, -0.807448794584998740, -0.807478290458736760, -0.807507784313778560, -0.807537276150051000, +-0.807566765967480120, -0.807596253765992870, -0.807625739545514530, -0.807655223305971840, -0.807684705047290950, -0.807714184769398490, -0.807743662472220400, -0.807773138155683300, +-0.807802611819713250, -0.807832083464236740, -0.807861553089179950, -0.807891020694469390, -0.807920486280031100, -0.807949949845792270, -0.807979411391677950, -0.808008870917615200, +-0.808038328423530180, -0.808067783909349970, -0.808097237374999720, -0.808126688820406280, -0.808156138245496260, -0.808185585650195830, -0.808215031034431490, -0.808244474398129520, +-0.808273915741216320, -0.808303355063618390, -0.808332792365262120, -0.808362227646073790, -0.808391660905980470, -0.808421092144907430, -0.808450521362781730, -0.808479948559529650, +-0.808509373735078250, -0.808538796889352820, -0.808568218022280520, -0.808597637133787630, -0.808627054223800660, -0.808656469292245990, -0.808685882339050250, -0.808715293364139720, +-0.808744702367441000, -0.808774109348880500, -0.808803514308384710, -0.808832917245880690, -0.808862318161293840, -0.808891717054551210, -0.808921113925579300, -0.808950508774305080, +-0.808979901600654140, -0.809009292404553330, -0.809038681185929360, -0.809068067944708760, -0.809097452680817900, -0.809126835394183400, -0.809156216084731870, -0.809185594752389710, +-0.809214971397083650, -0.809244346018740180, -0.809273718617286250, -0.809303089192647600, -0.809332457744751270, -0.809361824273523660, -0.809391188778892160, -0.809420551260782050, +-0.809449911719120620, -0.809479270153834360, -0.809508626564849900, -0.809537980952093950, -0.809567333315493020, -0.809596683654973840, -0.809626031970462790, -0.809655378261886830, +-0.809684722529172340, -0.809714064772246060, -0.809743404991035030, -0.809772743185465100, -0.809802079355463220, -0.809831413500956220, -0.809860745621871160, -0.809890075718133760, +-0.809919403789671200, -0.809948729836410090, -0.809978053858277150, -0.810007375855199110, -0.810036695827102580, -0.810066013773914300, -0.810095329695560970, -0.810124643591969340, +-0.810153955463066120, -0.810183265308778600, -0.810212573129032280, -0.810241878923754540, -0.810271182692872240, -0.810300484436312420, -0.810329784154000810, -0.810359081845864800, +-0.810388377511831020, -0.810417671151826280, -0.810446962765777430, -0.810476252353611200, -0.810505539915254310, -0.810534825450633600, -0.810564108959675790, -0.810593390442307720, +-0.810622669898456660, -0.810651947328048460, -0.810681222731010400, -0.810710496107269200, -0.810739767456752360, -0.810769036779385500, -0.810798304075096120, -0.810827569343810950, +-0.810856832585456930, -0.810886093799960680, -0.810915352987249370, -0.810944610147249500, -0.810973865279888240, -0.811003118385092310, -0.811032369462788560, -0.811061618512904370, +-0.811090865535365690, -0.811120110530099690, -0.811149353497033540, -0.811178594436094520, -0.811207833347208470, -0.811237070230302890, -0.811266305085304620, -0.811295537912140490, +-0.811324768710737660, -0.811353997481022770, -0.811383224222922970, -0.811412448936365100, -0.811441671621276120, -0.811470892277582840, -0.811500110905212460, -0.811529327504092350, +-0.811558542074148350, -0.811587754615307970, -0.811616965127498700, -0.811646173610646620, -0.811675380064678990, -0.811704584489522870, -0.811733786885105450, -0.811762987251353430, +-0.811792185588193990, -0.811821381895554080, -0.811850576173360760, -0.811879768421540970, -0.811908958640021770, -0.811938146828730110, -0.811967332987593720, -0.811996517116538420, +-0.812025699215491730, -0.812054879284380910, -0.812084057323133380, -0.812113233331675180, -0.812142407309933920, -0.812171579257836670, -0.812200749175310380, -0.812229917062282310, +-0.812259082918679320, -0.812288246744428790, -0.812317408539457550, -0.812346568303692780, -0.812375726037061650, -0.812404881739491660, -0.812434035410908970, -0.812463187051241210, +-0.812492336660415430, -0.812521484238359350, -0.812550629784999030, -0.812579773300262210, -0.812608914784075930, -0.812638054236367370, -0.812667191657063580, -0.812696327046091960, +-0.812725460403379340, -0.812754591728853230, -0.812783721022440560, -0.812812848284068630, -0.812841973513665050, -0.812871096711156090, -0.812900217876469270, -0.812929337009532070, +-0.812958454110271900, -0.812987569178615140, -0.813016682214489420, -0.813045793217822110, -0.813074902188540170, -0.813104009126571100, -0.813133114031841850, -0.813162216904279920, +-0.813191317743812480, -0.813220416550366700, -0.813249513323869850, -0.813278608064249340, -0.813307700771432660, -0.813336791445346320, -0.813365880085918040, -0.813394966693075430, +-0.813424051266745000, -0.813453133806854360, -0.813482214313331010, -0.813511292786102010, -0.813540369225094870, -0.813569443630236640, -0.813598516001454940, -0.813627586338676930, +-0.813656654641830010, -0.813685720910841350, -0.813714785145638440, -0.813743847346149130, -0.813772907512299580, -0.813801965644017860, -0.813831021741231120, -0.813860075803867430, +-0.813889127831852970, -0.813918177825115770, -0.813947225783583030, -0.813976271707182340, -0.814005315595840880, -0.814034357449486160, -0.814063397268045550, -0.814092435051446460, +-0.814121470799616280, -0.814150504512482390, -0.814179536189972850, -0.814208565832013840, -0.814237593438533410, -0.814266619009459070, -0.814295642544718650, -0.814324664044238640, +-0.814353683507947010, -0.814382700935771140, -0.814411716327638420, -0.814440729683476580, -0.814469741003212790, -0.814498750286774650, -0.814527757534089680, -0.814556762745085370, +-0.814585765919689010, -0.814614767057828870, -0.814643766159431240, -0.814672763224424280, -0.814701758252735280, -0.814730751244292510, -0.814759742199022250, -0.814788731116852680, +-0.814817717997711300, -0.814846702841525610, -0.814875685648223210, -0.814904666417731520, -0.814933645149978240, -0.814962621844890770, -0.814991596502396830, -0.815020569122423820, +-0.815049539704899460, -0.815078508249751700, -0.815107474756907150, -0.815136439226293970, -0.815165401657840240, -0.815194362051472330, -0.815223320407118650, -0.815252276724706680, +-0.815281231004163940, -0.815310183245418150, -0.815339133448396920, -0.815368081613027870, -0.815397027739238610, -0.815425971826956750, -0.815454913876110020, -0.815483853886625920, +-0.815512791858432730, -0.815541727791457060, -0.815570661685627090, -0.815599593540870420, -0.815628523357115330, -0.815657451134288450, -0.815686376872317820, -0.815715300571131290, +-0.815744222230656570, -0.815773141850821280, -0.815802059431553150, -0.815830974972779790, -0.815859888474429030, -0.815888799936428600, -0.815917709358706110, -0.815946616741189960, +-0.815975522083806640, -0.816004425386484540, -0.816033326649151400, -0.816062225871735380, -0.816091123054163430, -0.816120018196363590, -0.816148911298263610, -0.816177802359791540, +-0.816206691380874870, -0.816235578361441450, -0.816264463301419110, -0.816293346200735570, -0.816322227059318670, -0.816351105877096250, -0.816379982653996580, -0.816408857389946510, +-0.816437730084874190, -0.816466600738707580, -0.816495469351374960, -0.816524335922803160, -0.816553200452920570, -0.816582062941654920, -0.816610923388934150, -0.816639781794685990, +-0.816668638158838500, -0.816697492481319290, -0.816726344762056410, -0.816755195000977710, -0.816784043198010900, -0.816812889353084160, -0.816841733466125540, -0.816870575537062220, +-0.816899415565822350, -0.816928253552334450, -0.816957089496525460, -0.816985923398323770, -0.817014755257657210, -0.817043585074453850, -0.817072412848641410, -0.817101238580148050, +-0.817130062268901500, -0.817158883914829830, -0.817187703517860960, -0.817216521077922860, -0.817245336594943360, -0.817274150068851180, -0.817302961499573040, -0.817331770887037460, +-0.817360578231172470, -0.817389383531906490, -0.817418186789166670, -0.817446988002881290, -0.817475787172978420, -0.817504584299386220, -0.817533379382032410, -0.817562172420845280, +-0.817590963415752660, -0.817619752366682610, -0.817648539273563180, -0.817677324136322440, -0.817706106954888880, -0.817734887729189450, -0.817763666459152990, -0.817792443144707230, +-0.817821217785780870, -0.817849990382301000, -0.817878760934196200, -0.817907529441394440, -0.817936295903823880, -0.817965060321412470, -0.817993822694088600, -0.818022583021779990, +-0.818051341304415040, -0.818080097541921680, -0.818108851734228090, -0.818137603881262890, -0.818166353982953230, -0.818195102039227630, -0.818223848050014250, -0.818252592015241810, +-0.818281333934837370, -0.818310073808729550, -0.818338811636846630, -0.818367547419116550, -0.818396281155467700, -0.818425012845828140, -0.818453742490126030, -0.818482470088289560, +-0.818511195640246990, -0.818539919145926390, -0.818568640605255910, -0.818597360018164410, -0.818626077384579040, -0.818654792704428420, -0.818683505977641280, -0.818712217204144890, +-0.818740926383868080, -0.818769633516738820, -0.818798338602685470, -0.818827041641636330, -0.818855742633519570, -0.818884441578263570, -0.818913138475796280, -0.818941833326046200, +-0.818970526128941610, -0.818999216884410690, -0.819027905592382140, -0.819056592252783380, -0.819085276865543220, -0.819113959430589730, -0.819142639947851970, -0.819171318417256990, +-0.819199994838733740, -0.819228669212210600, -0.819257341537615650, -0.819286011814877480, -0.819314680043924160, -0.819343346224684190, -0.819372010357085840, -0.819400672441057520, +-0.819429332476527490, -0.819457990463424600, -0.819486646401676230, -0.819515300291211330, -0.819543952131958080, -0.819572601923845510, -0.819601249666800920, -0.819629895360753260, +-0.819658539005630790, -0.819687180601361920, -0.819715820147875250, -0.819744457645098960, -0.819773093092961420, -0.819801726491391270, -0.819830357840316770, -0.819858987139666430, +-0.819887614389369080, -0.819916239589352110, -0.819944862739544700, -0.819973483839875010, -0.820002102890272200, -0.820030719890663560, -0.820059334840978150, -0.820087947741144460, +-0.820116558591090780, -0.820145167390745830, -0.820173774140037890, -0.820202378838895460, -0.820230981487247160, -0.820259582085021370, -0.820288180632146700, -0.820316777128551440, +-0.820345371574164870, -0.820373963968914380, -0.820402554312728900, -0.820431142605537620, -0.820459728847267920, -0.820488313037848860, -0.820516895177209050, -0.820545475265276990, +-0.820574053301981300, -0.820602629287250470, -0.820631203221013020, -0.820659775103197540, -0.820688344933732660, -0.820716912712546990, -0.820745478439568910, -0.820774042114727710, +-0.820802603737950890, -0.820831163309167610, -0.820859720828306380, -0.820888276295296370, -0.820916829710065080, -0.820945381072541780, -0.820973930382655090, -0.821002477640333520, +-0.821031022845505660, -0.821059565998100370, -0.821088107098046140, -0.821116646145271580, -0.821145183139705530, -0.821173718081276370, -0.821202250969913510, -0.821230781805544540, +-0.821259310588098530, -0.821287837317504320, -0.821316361993691070, -0.821344884616586280, -0.821373405186119340, -0.821401923702218870, -0.821430440164813590, -0.821458954573832220, +-0.821487466929203490, -0.821515977230856120, -0.821544485478718720, -0.821572991672720130, -0.821601495812789070, -0.821629997898854820, -0.821658497930845000, -0.821686995908688990, +-0.821715491832315510, -0.821743985701653750, -0.821772477516631520, -0.821800967277178110, -0.821829454983222350, -0.821857940634692860, -0.821886424231518590, -0.821914905773628130, +-0.821943385260950570, -0.821971862693414490, -0.822000338070948740, -0.822028811393482050, -0.822057282660943470, -0.822085751873262160, -0.822114219030365860, -0.822142684132184160, +-0.822171147178646140, -0.822199608169679850, -0.822228067105214460, -0.822256523985179010, -0.822284978809502130, -0.822313431578112870, -0.822341882290939960, -0.822370330947912450, +-0.822398777548959070, -0.822427222094008650, -0.822455664582990350, -0.822484105015832800, -0.822512543392465490, -0.822540979712816260, -0.822569413976814710, -0.822597846184389470, +-0.822626276335470250, -0.822654704429984780, -0.822683130467862570, -0.822711554449032540, -0.822739976373423550, -0.822768396240964760, -0.822796814051584890, -0.822825229805213000, +-0.822853643501778030, -0.822882055141208930, -0.822910464723434650, -0.822938872248384800, -0.822967277715987210, -0.822995681126171500, -0.823024082478866600, -0.823052481774001920, +-0.823080879011505510, -0.823109274191306970, -0.823137667313335260, -0.823166058377519330, -0.823194447383788220, -0.823222834332071110, -0.823251219222296830, -0.823279602054394430, +-0.823307982828293210, -0.823336361543921870, -0.823364738201210260, -0.823393112800086200, -0.823421485340479430, -0.823449855822318890, -0.823478224245534300, -0.823506590610053490, +-0.823534954915806310, -0.823563317162721800, -0.823591677350728910, -0.823620035479756820, -0.823648391549734680, -0.823676745560591560, -0.823705097512256510, -0.823733447404658810, +-0.823761795237727410, -0.823790141011391590, -0.823818484725580950, -0.823846826380223550, -0.823875165975249010, -0.823903503510587170, -0.823931838986166070, -0.823960172401915330, +-0.823988503757764110, -0.824016833053641710, -0.824045160289477160, -0.824073485465199760, -0.824101808580738670, -0.824130129636022950, -0.824158448630981980, -0.824186765565544930, +-0.824215080439640870, -0.824243393253199730, -0.824271704006149460, -0.824300012698420130, -0.824328319329940550, -0.824356623900640790, -0.824384926410449030, -0.824413226859294860, +-0.824441525247107570, -0.824469821573816540, -0.824498115839350950, -0.824526408043640080, -0.824554698186613200, -0.824582986268199590, -0.824611272288328420, -0.824639556246929200, +-0.824667838143931520, -0.824696117979263790, -0.824724395752855610, -0.824752671464636600, -0.824780945114536370, -0.824809216702483310, -0.824837486228407140, -0.824865753692237360, +-0.824894019093903030, -0.824922282433333760, -0.824950543710458840, -0.824978802925207420, -0.825007060077509120, -0.825035315167293120, -0.825063568194488780, -0.825091819159026070, +-0.825120068060833380, -0.825148314899840420, -0.825176559675976700, -0.825204802389172040, -0.825233043039354960, -0.825261281626455290, -0.825289518150402300, -0.825317752611125610, +-0.825345985008554490, -0.825374215342618460, -0.825402443613246770, -0.825430669820369060, -0.825458893963914700, -0.825487116043813090, -0.825515336059994160, -0.825543554012386440, +-0.825571769900919740, -0.825599983725523790, -0.825628195486128200, -0.825656405182661700, -0.825684612815054230, -0.825712818383235180, -0.825741021887134050, -0.825769223326680350, +-0.825797422701803670, -0.825825620012433430, -0.825853815258499100, -0.825882008439930200, -0.825910199556656340, -0.825938388608607020, -0.825966575595712180, -0.825994760517900330, +-0.826022943375101630, -0.826051124167245580, -0.826079302894262350, -0.826107479556080220, -0.826135654152629350, -0.826163826683839480, -0.826191997149639870, -0.826220165549960360, +-0.826248331884730460, -0.826276496153879770, -0.826304658357337800, -0.826332818495034150, -0.826360976566898440, -0.826389132572860840, -0.826417286512849960, -0.826445438386795740, +-0.826473588194628020, -0.826501735936276740, -0.826529881611670740, -0.826558025220739960, -0.826586166763414120, -0.826614306239622840, -0.826642443649295840, -0.826670578992362740, +-0.826698712268753130, -0.826726843478396760, -0.826754972621223330, -0.826783099697162460, -0.826811224706144320, -0.826839347648097630, -0.826867468522952560, -0.826895587330638840, +-0.826923704071086620, -0.826951818744224630, -0.826979931349983160, -0.827008041888291800, -0.827036150359080290, -0.827064256762278460, -0.827092361097816030, -0.827120463365622620, +-0.827148563565628160, -0.827176661697762160, -0.827204757761954570, -0.827232851758135660, -0.827260943686234040, -0.827289033546180110, -0.827317121337903470, -0.827345207061334630, +-0.827373290716402310, -0.827401372303036680, -0.827429451821167670, -0.827457529270725020, -0.827485604651638560, -0.827513677963838010, -0.827541749207253320, -0.827569818381814310, +-0.827597885487450720, -0.827625950524092380, -0.827654013491669230, -0.827682074390111430, -0.827710133219348050, -0.827738189979309260, -0.827766244669925100, -0.827794297291125750, +-0.827822347842840140, -0.827850396324998680, -0.827878442737531310, -0.827906487080367740, -0.827934529353438030, -0.827962569556671910, -0.827990607689999440, -0.828018643753350440, +-0.828046677746654750, -0.828074709669842420, -0.828102739522843860, -0.828130767305587880, -0.828158793018004990, -0.828186816660025250, -0.828214838231578820, -0.828242857732594870, +-0.828270875163003680, -0.828298890522735420, -0.828326903811719810, -0.828354915029887010, -0.828382924177166970, -0.828410931253489520, -0.828438936258784840, -0.828466939192982750, +-0.828494940056013430, -0.828522938847807140, -0.828550935568292960, -0.828578930217401590, -0.828606922795062760, -0.828634913301207200, -0.828662901735763850, -0.828690888098663200, +-0.828718872389835440, -0.828746854609210380, -0.828774834756718200, -0.828802812832288960, -0.828830788835852710, -0.828858762767339500, -0.828886734626679390, -0.828914704413802330, +-0.828942672128639150, -0.828970637771118680, -0.828998601341171650, -0.829026562838728110, -0.829054522263718670, -0.829082479616072510, -0.829110434895720010, -0.829138388102591550, +-0.829166339236617090, -0.829194288297726680, -0.829222235285850710, -0.829250180200919010, -0.829278123042861970, -0.829306063811609540, -0.829334002507091990, -0.829361939129239390, +-0.829389873677982450, -0.829417806153250340, -0.829445736554973780, -0.829473664883083270, -0.829501591137508210, -0.829529515318179090, -0.829557437425026190, -0.829585357457979790, +-0.829613275416969940, -0.829641191301926820, -0.829669105112780800, -0.829697016849461950, -0.829724926511900660, -0.829752834100026980, -0.829780739613771300, -0.829808643053064230, +-0.829836544417835050, -0.829864443708014490, -0.829892340923532810, -0.829920236064320750, -0.829948129130307690, -0.829976020121424240, -0.830003909037600800, -0.830031795878767520, +-0.830059680644854800, -0.830087563335792810, -0.830115443951511930, -0.830143322491942560, -0.830171198957014740, -0.830199073346658990, -0.830226945660806010, -0.830254815899385320, +-0.830282684062327410, -0.830310550149562900, -0.830338414161022390, -0.830366276096635490, -0.830394135956332820, -0.830421993740044770, -0.830449849447701840, -0.830477703079234300, +-0.830505554634572430, -0.830533404113646620, -0.830561251516387380, -0.830589096842724970, -0.830616940092589910, -0.830644781265912900, -0.830672620362623460, -0.830700457382652520, +-0.830728292325930370, -0.830756125192388060, -0.830783955981954870, -0.830811784694561850, -0.830839611330139280, -0.830867435888617780, -0.830895258369927610, -0.830923078773999400, +-0.830950897100763420, -0.830978713350150170, -0.831006527522090140, -0.831034339616513850, -0.831062149633351680, -0.831089957572534680, -0.831117763433992240, -0.831145567217655420, +-0.831173368923455060, -0.831201168551320870, -0.831228966101183800, -0.831256761572974350, -0.831284554966622900, -0.831312346282060080, -0.831340135519216370, -0.831367922678022400, +-0.831395707758408540, -0.831423490760305530, -0.831451271683643740, -0.831479050528353690, -0.831506827294366650, -0.831534601981611890, -0.831562374590020690, -0.831590145119523560, +-0.831617913570051550, -0.831645679941534380, -0.831673444233902880, -0.831701206447087780, -0.831728966581019690, -0.831756724635629220, -0.831784480610846870, -0.831812234506603350, +-0.831839986322829180, -0.831867736059455190, -0.831895483716411750, -0.831923229293630050, -0.831950972791039910, -0.831978714208572280, -0.832006453546157880, -0.832034190803727870, +-0.832061925981211760, -0.832089659078540930, -0.832117390095646000, -0.832145119032457470, -0.832172845888906280, -0.832200570664922920, -0.832228293360438130, -0.832256013975382510, +-0.832283732509687010, -0.832311448963282130, -0.832339163336099030, -0.832366875628067660, -0.832394585839119070, -0.832422293969183990, -0.832450000018193690, -0.832477703986077790, +-0.832505405872767780, -0.832533105678194160, -0.832560803402287770, -0.832588499044979450, -0.832616192606199900, -0.832643884085879750, -0.832671573483949930, -0.832699260800341290, +-0.832726946034984430, -0.832754629187810070, -0.832782310258749820, -0.832809989247733200, -0.832837666154691680, -0.832865340979556450, -0.832893013722257320, -0.832920684382725710, +-0.832948352960892310, -0.832976019456688200, -0.833003683870043870, -0.833031346200890480, -0.833059006449158650, -0.833086664614779320, -0.833114320697683210, -0.833141974697801490, +-0.833169626615064660, -0.833197276449404440, -0.833224924200750340, -0.833252569869034070, -0.833280213454186350, -0.833307854956138570, -0.833335494374820680, -0.833363131710163960, +-0.833390766962099570, -0.833418400130558120, -0.833446031215470780, -0.833473660216768280, -0.833501287134381650, -0.833528911968241860, -0.833556534718279730, -0.833584155384426320, +-0.833611773966612900, -0.833639390464769650, -0.833667004878827940, -0.833694617208718620, -0.833722227454373300, -0.833749835615722020, -0.833777441692696080, -0.833805045685226400, +-0.833832647593244270, -0.833860247416680520, -0.833887845155466100, -0.833915440809532060, -0.833943034378809460, -0.833970625863229230, -0.833998215262722440, -0.834025802577220590, +-0.834053387806653830, -0.834080970950953460, -0.834108552010050850, -0.834136130983877180, -0.834163707872362710, -0.834191282675439070, -0.834218855393037200, -0.834246426025088140, +-0.834273994571523070, -0.834301561032272930, -0.834329125407269000, -0.834356687696442110, -0.834384247899723650, -0.834411806017044460, -0.834439362048335910, -0.834466915993529290, +-0.834494467852554990, -0.834522017625344390, -0.834549565311829330, -0.834577110911939870, -0.834604654425607610, -0.834632195852763710, -0.834659735193339360, -0.834687272447265590, +-0.834714807614473700, -0.834742340694894840, -0.834769871688460060, -0.834797400595100660, -0.834824927414747680, -0.834852452147332390, -0.834879974792786530, -0.834907495351040140, +-0.834935013822025060, -0.834962530205672460, -0.834990044501914050, -0.835017556710680010, -0.835045066831902050, -0.835072574865511560, -0.835100080811439490, -0.835127584669617230, +-0.835155086439976050, -0.835182586122447110, -0.835210083716961820, -0.835237579223451210, -0.835265072641846680, -0.835292563972079960, -0.835320053214081320, -0.835347540367782580, +-0.835375025433114930, -0.835402508410010290, -0.835429989298398850, -0.835457468098212420, -0.835484944809382400, -0.835512419431839850, -0.835539891965516370, -0.835567362410343240, +-0.835594830766251520, -0.835622297033172920, -0.835649761211038400, -0.835677223299779560, -0.835704683299328120, -0.835732141209614590, -0.835759597030570570, -0.835787050762127670, +-0.835814502404217510, -0.835841951956770690, -0.835869399419718940, -0.835896844792993750, -0.835924288076526410, -0.835951729270248410, -0.835979168374091030, -0.836006605387985660, +-0.836034040311863900, -0.836061473145657040, -0.836088903889296350, -0.836116332542713560, -0.836143759105840380, -0.836171183578607310, -0.836198605960946310, -0.836226026252789190, +-0.836253444454066570, -0.836280860564710400, -0.836308274584651960, -0.836335686513822950, -0.836363096352154670, -0.836390504099578600, -0.836417909756026370, -0.836445313321429350, +-0.836472714795718940, -0.836500114178826860, -0.836527511470684490, -0.836554906671223790, -0.836582299780375350, -0.836609690798071130, -0.836637079724242730, -0.836664466558821980, +-0.836691851301739730, -0.836719233952927800, -0.836746614512317800, -0.836773992979841230, -0.836801369355429810, -0.836828743639014830, -0.836856115830527990, -0.836883485929900920, +-0.836910853937065100, -0.836938219851952160, -0.836965583674494140, -0.836992945404621770, -0.837020305042266880, -0.837047662587361410, -0.837075018039837080, -0.837102371399624840, +-0.837129722666656640, -0.837157071840864080, -0.837184418922178990, -0.837211763910532760, -0.837239106805857110, -0.837266447608083660, -0.837293786317144130, -0.837321122932970120, +-0.837348457455493360, -0.837375789884645890, -0.837403120220358450, -0.837430448462563200, -0.837457774611191860, -0.837485098666176600, -0.837512420627448130, -0.837539740494938510, +-0.837567058268579580, -0.837594373948303050, -0.837621687534040540, -0.837648999025723760, -0.837676308423284550, -0.837703615726654640, -0.837730920935765510, -0.837758224050549230, +-0.837785525070937400, -0.837812823996862190, -0.837840120828254320, -0.837867415565046290, -0.837894708207170160, -0.837921998754556860, -0.837949287207138460, -0.837976573564846890, +-0.838003857827613880, -0.838031139995371150, -0.838058420068050650, -0.838085698045584080, -0.838112973927903290, -0.838140247714940110, -0.838167519406626260, -0.838194789002893570, +-0.838222056503674430, -0.838249321908899670, -0.838276585218501570, -0.838303846432411960, -0.838331105550563340, -0.838358362572886430, -0.838385617499313620, -0.838412870329776740, +-0.838440121064207730, -0.838467369702538320, -0.838494616244700560, -0.838521860690626290, -0.838549103040247320, -0.838576343293495620, -0.838603581450303000, -0.838630817510601980, +-0.838658051474323370, -0.838685283341399690, -0.838712513111762760, -0.838739740785345080, -0.838766966362077590, -0.838794189841892580, -0.838821411224722200, -0.838848630510498180, +-0.838875847699152690, -0.838903062790617550, -0.838930275784824710, -0.838957486681706220, -0.838984695481194030, -0.839011902183220080, -0.839039106787716870, -0.839066309294615340, +-0.839093509703848110, -0.839120708015347110, -0.839147904229044730, -0.839175098344872250, -0.839202290362761950, -0.839229480282645880, -0.839256668104456200, -0.839283853828124760, +-0.839311037453583710, -0.839338218980765110, -0.839365398409601000, -0.839392575740023350, -0.839419750971964200, -0.839446924105355710, -0.839474095140130490, -0.839501264076219390, +-0.839528430913555220, -0.839555595652070500, -0.839582758291696150, -0.839609918832365020, -0.839637077274009160, -0.839664233616560510, -0.839691387859951230, -0.839718540004113610, +-0.839745690048979480, -0.839772837994481320, -0.839799983840550990, -0.839827127587120640, -0.839854269234122430, -0.839881408781489200, -0.839908546229151790, -0.839935681577043130, +-0.839962814825095270, -0.839989945973240730, -0.840017075021410990, -0.840044201969538550, -0.840071326817555470, -0.840098449565394260, -0.840125570212986730, -0.840152688760265390, +-0.840179805207162400, -0.840206919553609710, -0.840234031799539820, -0.840261141944884880, -0.840288249989577520, -0.840315355933549110, -0.840342459776732280, -0.840369561519059280, +-0.840396661160462850, -0.840423758700874380, -0.840450854140226470, -0.840477947478451390, -0.840505038715481430, -0.840532127851248870, -0.840559214885685970, -0.840586299818725120, +-0.840613382650298500, -0.840640463380338380, -0.840667542008777140, -0.840694618535547500, -0.840721692960580860, -0.840748765283809930, -0.840775835505167100, -0.840802903624585210, +-0.840829969641995630, -0.840857033557331100, -0.840884095370523890, -0.840911155081506490, -0.840938212690211180, -0.840965268196570470, -0.840992321600516400, -0.841019372901981700, +-0.841046422100898420, -0.841073469197199160, -0.841100514190816660, -0.841127557081682520, -0.841154597869729350, -0.841181636554889760, -0.841208673137096460, -0.841235707616281080, +-0.841262739992376440, -0.841289770265314930, -0.841316798435029050, -0.841343824501451070, -0.841370848464513600, -0.841397870324149030, -0.841424890080289760, -0.841451907732868270, +-0.841478923281816950, -0.841505936727068300, -0.841532948068555390, -0.841559957306209580, -0.841586964439963950, -0.841613969469750870, -0.841640972395503280, -0.841667973217152810, +-0.841694971934632390, -0.841721968547874620, -0.841748963056811910, -0.841775955461376730, -0.841802945761501720, -0.841829933957119360, -0.841856920048162150, -0.841883904034562590, +-0.841910885916253290, -0.841937865693167200, -0.841964843365236030, -0.841991818932392830, -0.842018792394570000, -0.842045763751700700, -0.842072733003716430, -0.842099700150550360, +-0.842126665192135080, -0.842153628128403110, -0.842180588959287160, -0.842207547684719620, -0.842234504304633200, -0.842261458818960640, -0.842288411227634310, -0.842315361530587060, +-0.842342309727751810, -0.842369255819060300, -0.842396199804445690, -0.842423141683840580, -0.842450081457178150, -0.842477019124389990, -0.842503954685409280, -0.842530888140168630, +-0.842557819488600760, -0.842584748730638380, -0.842611675866214100, -0.842638600895260770, -0.842665523817710760, -0.842692444633497020, -0.842719363342552150, -0.842746279944809440, +-0.842773194440200380, -0.842800106828658470, -0.842827017110116320, -0.842853925284506980, -0.842880831351762390, -0.842907735311815730, -0.842934637164599710, -0.842961536910047160, +-0.842988434548090800, -0.843015330078663250, -0.843042223501697440, -0.843069114817125990, -0.843096004024881830, -0.843122891124897690, -0.843149776117106290, -0.843176659001440900, +-0.843203539777833360, -0.843230418446217040, -0.843257295006524580, -0.843284169458689450, -0.843311041802643380, -0.843337912038319760, -0.843364780165651310, -0.843391646184570850, +-0.843418510095011340, -0.843445371896905600, -0.843472231590186470, -0.843499089174786660, -0.843525944650639130, -0.843552798017676690, -0.843579649275832840, -0.843606498425039320, +-0.843633345465229610, -0.843660190396336550, -0.843687033218293410, -0.843713873931032250, -0.843740712534486460, -0.843767549028588860, -0.843794383413272290, -0.843821215688469910, +-0.843848045854114330, -0.843874873910138820, -0.843901699856476010, -0.843928523693058930, -0.843955345419820650, -0.843982165036694320, -0.844008982543612230, -0.844035797940507650, +-0.844062611227313520, -0.844089422403963450, -0.844116231470389280, -0.844143038426524610, -0.844169843272302270, -0.844196646007655320, -0.844223446632516690, -0.844250245146819570, +-0.844277041550496770, -0.844303835843481450, -0.844330628025706460, -0.844357418097104850, -0.844384206057610330, -0.844410991907154630, -0.844437775645671570, -0.844464557273094110, +-0.844491336789355620, -0.844518114194388380, -0.844544889488125890, -0.844571662670501100, -0.844598433741447160, -0.844625202700897140, -0.844651969548784190, -0.844678734285041250, +-0.844705496909601390, -0.844732257422397880, -0.844759015823363770, -0.844785772112432110, -0.844812526289536400, -0.844839278354609040, -0.844866028307583390, -0.844892776148393090, +-0.844919521876970500, -0.844946265493249030, -0.844973006997161940, -0.844999746388642280, -0.845026483667623340, -0.845053218834038060, -0.845079951887819810, -0.845106682828901780, +-0.845133411657216890, -0.845160138372698540, -0.845186862975279780, -0.845213585464894450, -0.845240305841474580, -0.845267024104954020, -0.845293740255265820, -0.845320454292343810, +-0.845347166216120160, -0.845373876026528690, -0.845400583723502350, -0.845427289306974640, -0.845453992776878720, -0.845480694133147860, -0.845507393375715230, -0.845534090504514110, +-0.845560785519477780, -0.845587478420539380, -0.845614169207632880, -0.845640857880690430, -0.845667544439645870, -0.845694228884432460, -0.845720911214983940, -0.845747591431232570, +-0.845774269533112300, -0.845800945520556400, -0.845827619393498150, -0.845854291151870720, -0.845880960795607710, -0.845907628324642280, -0.845934293738907720, -0.845960957038337400, +-0.845987618222864720, -0.846014277292423510, -0.846040934246946040, -0.846067589086366260, -0.846094241810617540, -0.846120892419633730, -0.846147540913347210, -0.846174187291691800, +-0.846200831554600910, -0.846227473702007900, -0.846254113733846290, -0.846280751650049350, -0.846307387450550560, -0.846334021135283330, -0.846360652704181040, -0.846387282157177070, +-0.846413909494204920, -0.846440534715198420, -0.846467157820090190, -0.846493778808814050, -0.846520397681303830, -0.846547014437492250, -0.846573629077313150, -0.846600241600699910, +-0.846626852007586140, -0.846653460297905220, -0.846680066471590660, -0.846706670528575840, -0.846733272468794370, -0.846759872292179750, -0.846786469998665470, -0.846813065588185030, +-0.846839659060672380, -0.846866250416060120, -0.846892839654282190, -0.846919426775272210, -0.846946011778964110, -0.846972594665290510, -0.846999175434185460, -0.847025754085582340, +-0.847052330619414980, -0.847078905035616780, -0.847105477334121230, -0.847132047514862040, -0.847158615577772720, -0.847185181522786880, -0.847211745349838120, -0.847238307058860380, +-0.847264866649786510, -0.847291424122550430, -0.847317979477085760, -0.847344532713326550, -0.847371083831205630, -0.847397632830657050, -0.847424179711614320, -0.847450724474011150, +-0.847477267117781150, -0.847503807642857930, -0.847530346049175320, -0.847556882336666820, -0.847583416505266030, -0.847609948554906790, -0.847636478485523040, -0.847663006297047720, +-0.847689531989414880, -0.847716055562558140, -0.847742577016411760, -0.847769096350908580, -0.847795613565982540, -0.847822128661567480, -0.847848641637597100, -0.847875152494005140, +-0.847901661230725300, -0.847928167847691320, -0.847954672344836790, -0.847981174722095780, -0.848007674979401660, -0.848034173116688490, -0.848060669133890220, -0.848087163030939890, +-0.848113654807771680, -0.848140144464319730, -0.848166632000517010, -0.848193117416297770, -0.848219600711595630, -0.848246081886344540, -0.848272560940478200, -0.848299037873930460, +-0.848325512686635140, -0.848351985378526070, -0.848378455949536980, -0.848404924399601800, -0.848431390728654260, -0.848457854936628840, -0.848484317023458170, -0.848510776989076730, +-0.848537234833418360, -0.848563690556417450, -0.848590144158006820, -0.848616595638120750, -0.848643044996693190, -0.848669492233658060, -0.848695937348949210, -0.848722380342500580, +-0.848748821214245890, -0.848775259964119180, -0.848801696592054290, -0.848828131097985270, -0.848854563481846290, -0.848880993743570400, -0.848907421883092090, -0.848933847900345210, +-0.848960271795264230, -0.848986693567782110, -0.849013113217833130, -0.849039530745351430, -0.849065946150270980, -0.849092359432525590, -0.849118770592049320, -0.849145179628776110, +-0.849171586542640020, -0.849197991333574880, -0.849224394001514840, -0.849250794546394180, -0.849277192968146080, -0.849303589266705130, -0.849329983442005050, -0.849356375493980580, +-0.849382765422564630, -0.849409153227691840, -0.849435538909296130, -0.849461922467311560, -0.849488303901672180, -0.849514683212312050, -0.849541060399165220, -0.849567435462165730, +-0.849593808401247650, -0.849620179216345140, -0.849646547907392140, -0.849672914474323140, -0.849699278917071420, -0.849725641235571590, -0.849752001429758040, -0.849778359499564040, +-0.849804715444924200, -0.849831069265772450, -0.849857420962043200, -0.849883770533670260, -0.849910117980587910, -0.849936463302730320, -0.849962806500031530, -0.849989147572425720, +-0.850015486519847040, -0.850041823342229660, -0.850068158039508190, -0.850094490611615900, -0.850120821058487300, -0.850147149380056640, -0.850173475576258660, -0.850199799647026520, +-0.850226121592294830, -0.850252441411997850, -0.850278759106069760, -0.850305074674444830, -0.850331388117057110, -0.850357699433840990, -0.850384008624730630, -0.850410315689660190, +-0.850436620628564070, -0.850462923441376750, -0.850489224128031740, -0.850515522688463530, -0.850541819122606620, -0.850568113430395620, -0.850594405611763920, -0.850620695666646220, +-0.850646983594976700, -0.850673269396689750, -0.850699553071719630, -0.850725834620000620, -0.850752114041467000, -0.850778391336053040, -0.850804666503693240, -0.850830939544321760, +-0.850857210457873330, -0.850883479244281430, -0.850909745903480790, -0.850936010435405790, -0.850962272839991370, -0.850988533117170600, -0.851014791266878620, -0.851041047289049610, +-0.851067301183618060, -0.851093552950518250, -0.851119802589684450, -0.851146050101051270, -0.851172295484552870, -0.851198538740123740, -0.851224779867698290, -0.851251018867210880, +-0.851277255738596470, -0.851303490481788330, -0.851329723096721500, -0.851355953583330940, -0.851382181941549910, -0.851408408171313470, -0.851434632272556000, -0.851460854245211900, +-0.851487074089215760, -0.851513291804501860, -0.851539507391004700, -0.851565720848658890, -0.851591932177398700, -0.851618141377158740, -0.851644348447873400, -0.851670553389477610, +-0.851696756201904990, -0.851722956885090480, -0.851749155438968560, -0.851775351863474310, -0.851801546158541090, -0.851827738324104080, -0.851853928360097770, -0.851880116266456540, +-0.851906302043115020, -0.851932485690007790, -0.851958667207069360, -0.851984846594234240, -0.852011023851437010, -0.852037198978612300, -0.852063371975694930, -0.852089542842618730, +-0.852115711579318650, -0.852141878185729280, -0.852168042661785700, -0.852194205007421490, -0.852220365222571830, -0.852246523307171320, -0.852272679261154460, -0.852298833084455860, +-0.852324984777010130, -0.852351134338751980, -0.852377281769616020, -0.852403427069536870, -0.852429570238449120, -0.852455711276287940, -0.852481850182987060, -0.852507986958481510, +-0.852534121602705920, -0.852560254115595550, -0.852586384497084130, -0.852612512747106700, -0.852638638865597990, -0.852664762852492600, -0.852690884707725470, -0.852717004431231000, +-0.852743122022944110, -0.852769237482799310, -0.852795350810731550, -0.852821462006675300, -0.852847571070565410, -0.852873678002337150, -0.852899782801924130, -0.852925885469261620, +-0.852951986004285010, -0.852978084406927910, -0.853004180677125580, -0.853030274814812750, -0.853056366819924250, -0.853082456692394910, -0.853108544432159440, -0.853134630039152460, +-0.853160713513309020, -0.853186794854563830, -0.853212874062851510, -0.853238951138107100, -0.853265026080265780, -0.853291098889261470, -0.853317169565029340, -0.853343238107504340, +-0.853369304516621630, -0.853395368792315260, -0.853421430934520500, -0.853447490943172070, -0.853473548818205030, -0.853499604559553980, -0.853525658167153980, -0.853551709640939850, +-0.853577758980846420, -0.853603806186808640, -0.853629851258761340, -0.853655894196639790, -0.853681935000378140, -0.853707973669911580, -0.853734010205175140, -0.853760044606104110, +-0.853786076872632530, -0.853812107004695790, -0.853838135002228720, -0.853864160865166370, -0.853890184593443570, -0.853916206186995260, -0.853942225645756500, -0.853968242969662230, +-0.853994258158647270, -0.854020271212646680, -0.854046282131595840, -0.854072290915428910, -0.854098297564081180, -0.854124302077487800, -0.854150304455584040, -0.854176304698304080, +-0.854202302805583400, -0.854228298777356950, -0.854254292613559670, -0.854280284314126730, -0.854306273878993160, -0.854332261308093810, -0.854358246601363720, -0.854384229758738180, +-0.854410210780152000, -0.854436189665540250, -0.854462166414838520, -0.854488141027980990, -0.854514113504903030, -0.854540083845540250, -0.854566052049826830, -0.854592018117698250, +-0.854617982049089560, -0.854643943843936050, -0.854669903502172530, -0.854695861023734400, -0.854721816408556600, -0.854747769656574170, -0.854773720767722400, -0.854799669741936220, +-0.854825616579151020, -0.854851561279302170, -0.854877503842323860, -0.854903444268151900, -0.854929382556721350, -0.854955318707967700, -0.854981252721825350, -0.855007184598229890, +-0.855033114337116480, -0.855059041938420190, -0.855084967402076400, -0.855110890728020160, -0.855136811916186730, -0.855162730966511190, -0.855188647878928900, -0.855214562653374920, +-0.855240475289784970, -0.855266385788093440, -0.855292294148235930, -0.855318200370147720, -0.855344104453764410, -0.855370006399020390, -0.855395906205851380, -0.855421803874192640, +-0.855447699403979360, -0.855473592795146790, -0.855499484047630320, -0.855525373161365010, -0.855551260136286350, -0.855577144972329510, -0.855603027669429860, -0.855628908227523130, +-0.855654786646543600, -0.855680662926427080, -0.855706537067108970, -0.855732409068524990, -0.855758278930609410, -0.855784146653298270, -0.855810012236526640, -0.855835875680230120, +-0.855861736984343760, -0.855887596148803160, -0.855913453173543500, -0.855939308058500270, -0.855965160803608740, -0.855991011408804290, -0.856016859874022430, -0.856042706199198760, +-0.856068550384267880, -0.856094392429165630, -0.856120232333827950, -0.856146070098189100, -0.856171905722185160, -0.856197739205751370, -0.856223570548823250, -0.856249399751336290, +-0.856275226813225760, -0.856301051734427170, -0.856326874514875990, -0.856352695154507630, -0.856378513653257460, -0.856404330011061090, -0.856430144227854240, -0.856455956303571740, +-0.856481766238149200, -0.856507574031522330, -0.856533379683626970, -0.856559183194397610, -0.856584984563770410, -0.856610783791680650, -0.856636580878064050, -0.856662375822855870, +-0.856688168625991840, -0.856713959287407350, -0.856739747807037990, -0.856765534184819270, -0.856791318420686680, -0.856817100514576270, -0.856842880466422650, -0.856868658276161770, +-0.856894433943729330, -0.856920207469061280, -0.856945978852092230, -0.856971748092758110, -0.856997515190994760, -0.857023280146737560, -0.857049042959922240, -0.857074803630484270, +-0.857100562158359280, -0.857126318543482870, -0.857152072785790640, -0.857177824885218320, -0.857203574841701840, -0.857229322655175930, -0.857255068325576740, -0.857280811852839890, +-0.857306553236901410, -0.857332292477696160, -0.857358029575160160, -0.857383764529229150, -0.857409497339838620, -0.857435228006924510, -0.857460956530422200, -0.857486682910267530, +-0.857512407146396090, -0.857538129238743730, -0.857563849187245930, -0.857589566991839080, -0.857615282652457790, -0.857640996169038330, -0.857666707541516420, -0.857692416769828100, +-0.857718123853908330, -0.857743828793693260, -0.857769531589118620, -0.857795232240120110, -0.857820930746633570, -0.857846627108594720, -0.857872321325939160, -0.857898013398602940, +-0.857923703326521680, -0.857949391109631090, -0.857975076747867100, -0.858000760241165780, -0.858026441589462170, -0.858052120792692440, -0.858077797850792410, -0.858103472763698360, +-0.858129145531345230, -0.858154816153669180, -0.858180484630606030, -0.858206150962091740, -0.858231815148062020, -0.858257477188452800, -0.858283137083199920, -0.858308794832239100, +-0.858334450435506380, -0.858360103892937490, -0.858385755204468800, -0.858411404370035270, -0.858437051389573270, -0.858462696263018630, -0.858488338990307630, -0.858513979571375430, +-0.858539618006158190, -0.858565254294591960, -0.858590888436612580, -0.858616520432155970, -0.858642150281158090, -0.858667777983554870, -0.858693403539282140, -0.858719026948275840, +-0.858744648210472140, -0.858770267325807080, -0.858795884294216050, -0.858821499115635210, -0.858847111790000730, -0.858872722317248870, -0.858898330697314690, -0.858923936930134800, +-0.858949541015645020, -0.858975142953781300, -0.859000742744479910, -0.859026340387676560, -0.859051935883307300, -0.859077529231308310, -0.859103120431615410, -0.859128709484164750, +-0.859154296388892740, -0.859179881145734510, -0.859205463754626700, -0.859231044215505110, -0.859256622528306370, -0.859282198692965740, -0.859307772709419490, -0.859333344577603910, +-0.859358914297454810, -0.859384481868908590, -0.859410047291901070, -0.859435610566368520, -0.859461171692246890, -0.859486730669472340, -0.859512287497980920, -0.859537842177708790, +-0.859563394708592550, -0.859588945090567380, -0.859614493323569760, -0.859640039407535970, -0.859665583342402620, -0.859691125128104750, -0.859716664764579090, -0.859742202251761790, +-0.859767737589588910, -0.859793270777996720, -0.859818801816921390, -0.859844330706299060, -0.859869857446065920, -0.859895382036158120, -0.859920904476511820, -0.859946424767063730, +-0.859971942907749140, -0.859997458898504650, -0.860022972739266530, -0.860048484429971500, -0.860073993970554730, -0.860099501360953030, -0.860125006601102580, -0.860150509690939540, +-0.860176010630400280, -0.860201509419420970, -0.860227006057937890, -0.860252500545887310, -0.860277992883205500, -0.860303483069828620, -0.860328971105693620, -0.860354456990735650, +-0.860379940724891550, -0.860405422308097580, -0.860430901740290580, -0.860456379021405810, -0.860481854151380120, -0.860507327130149770, -0.860532797957651140, -0.860558266633820510, +-0.860583733158594160, -0.860609197531908450, -0.860634659753699900, -0.860660119823904560, -0.860685577742459020, -0.860711033509299890, -0.860736487124362790, -0.860761938587584540, +-0.860787387898901300, -0.860812835058250130, -0.860838280065566400, -0.860863722920786940, -0.860889163623848150, -0.860914602174686520, -0.860940038573238420, -0.860965472819440140, +-0.860990904913228160, -0.861016334854538990, -0.861041762643309010, -0.861067188279474590, -0.861092611762972140, -0.861118033093738690, -0.861143452271709630, -0.861168869296822010, +-0.861194284169012670, -0.861219696888217090, -0.861245107454372330, -0.861270515867414770, -0.861295922127280900, -0.861321326233907340, -0.861346728187230350, -0.861372127987186540, +-0.861397525633712520, -0.861422921126744570, -0.861448314466219390, -0.861473705652073370, -0.861499094684243570, -0.861524481562665590, -0.861549866287276480, -0.861575248858012510, +-0.861600629274811070, -0.861626007537607430, -0.861651383646338860, -0.861676757600941870, -0.861702129401352930, -0.861727499047508670, -0.861752866539345690, -0.861778231876800580, +-0.861803595059809750, -0.861828956088310120, -0.861854314962237970, -0.861879671681530460, -0.861905026246123420, -0.861930378655953790, -0.861955728910958170, -0.861981077011073740, +-0.862006422956236080, -0.862031766746382490, -0.862057108381449330, -0.862082447861373560, -0.862107785186091550, -0.862133120355540130, -0.862158453369655910, -0.862183784228375490, +-0.862209112931635600, -0.862234439479373060, -0.862259763871524810, -0.862285086108026680, -0.862310406188815830, -0.862335724113828970, -0.862361039883003280, -0.862386353496274570, +-0.862411664953579900, -0.862436974254856100, -0.862462281400039890, -0.862487586389067970, -0.862512889221876970, -0.862538189898403920, -0.862563488418585320, -0.862588784782358010, +-0.862614078989658690, -0.862639371040424210, -0.862664660934591710, -0.862689948672097140, -0.862715234252877770, -0.862740517676870660, -0.862765798944011840, -0.862791078054238600, +-0.862816355007487550, -0.862841629803695720, -0.862866902442799730, -0.862892172924736520, -0.862917441249442810, -0.862942707416855640, -0.862967971426911620, -0.862993233279547580, +-0.863018492974700570, -0.863043750512307750, -0.863069005892305170, -0.863094259114630000, -0.863119510179219170, -0.863144759086010070, -0.863170005834938640, -0.863195250425942140, +-0.863220492858957520, -0.863245733133921610, -0.863270971250771460, -0.863296207209443890, -0.863321441009875730, -0.863346672652004040, -0.863371902135765650, -0.863397129461097480, +-0.863422354627936930, -0.863447577636220040, -0.863472798485884210, -0.863498017176866470, -0.863523233709104000, -0.863548448082533060, -0.863573660297091040, -0.863598870352714760, +-0.863624078249341400, -0.863649283986907880, -0.863674487565351030, -0.863699688984608030, -0.863724888244615910, -0.863750085345311390, -0.863775280286631750, -0.863800473068514370, +-0.863825663690895310, -0.863850852153712050, -0.863876038456901750, -0.863901222600401810, -0.863926404584148270, -0.863951584408078840, -0.863976762072130370, -0.864001937576240000, +-0.864027110920344790, -0.864052282104381790, -0.864077451128288150, -0.864102617992000830, -0.864127782695456980, -0.864152945238593650, -0.864178105621348000, -0.864203263843657530, +-0.864228419905458400, -0.864253573806688210, -0.864278725547284580, -0.864303875127183760, -0.864329022546323160, -0.864354167804640030, -0.864379310902071430, -0.864404451838554630, +-0.864429590614026690, -0.864454727228424760, -0.864479861681686000, -0.864504993973747580, -0.864530124104546660, -0.864555252074020400, -0.864580377882106510, -0.864605501528741270, +-0.864630623013862290, -0.864655742337406720, -0.864680859499312170, -0.864705974499515030, -0.864731087337953010, -0.864756198014563270, -0.864781306529283090, -0.864806412882049620, +-0.864831517072800040, -0.864856619101471710, -0.864881718968001810, -0.864906816672327610, -0.864931912214386480, -0.864957005594115810, -0.864982096811452330, -0.865007185866333630, +-0.865032272758696870, -0.865057357488479890, -0.865082440055619180, -0.865107520460052240, -0.865132598701716550, -0.865157674780549390, -0.865182748696488040, -0.865207820449469760, +-0.865232890039431930, -0.865257957466311960, -0.865283022730047090, -0.865308085830574610, -0.865333146767832350, -0.865358205541756800, -0.865383262152285780, -0.865408316599356460, +-0.865433368882906890, -0.865458419002873570, -0.865483466959194090, -0.865508512751805850, -0.865533556380646440, -0.865558597845653140, -0.865583637146763340, -0.865608674283914410, +-0.865633709257043860, -0.865658742066088950, -0.865683772710987290, -0.865708801191676150, -0.865733827508093470, -0.865758851660175740, -0.865783873647860800, -0.865808893471086800, +-0.865833911129790020, -0.865858926623908510, -0.865883939953379640, -0.865908951118140920, -0.865933960118129840, -0.865958966953283780, -0.865983971623540460, -0.866008974128837150, +-0.866033974469111350, -0.866058972644300650, -0.866083968654342560, -0.866108962499174910, -0.866133954178734400, -0.866158943692959090, -0.866183931041786370, -0.866208916225154280, +-0.866233899242999540, -0.866258880095259980, -0.866283858781873200, -0.866308835302776800, -0.866333809657908290, -0.866358781847205270, -0.866383751870605230, -0.866408719728045900, +-0.866433685419464750, -0.866458648944799400, -0.866483610303987790, -0.866508569496966750, -0.866533526523674320, -0.866558481384048120, -0.866583434078026070, -0.866608384605545010, +-0.866633332966542990, -0.866658279160957720, -0.866683223188726700, -0.866708165049787540, -0.866733104744078050, -0.866758042271535860, -0.866782977632098440, -0.866807910825703630, +-0.866832841852289040, -0.866857770711792820, -0.866882697404151690, -0.866907621929303820, -0.866932544287186910, -0.866957464477739030, -0.866982382500897100, -0.867007298356599180, +-0.867032212044783090, -0.867057123565386330, -0.867082032918346960, -0.867106940103602340, -0.867131845121090430, -0.867156747970748930, -0.867181648652515570, -0.867206547166328060, +-0.867231443512124110, -0.867256337689842120, -0.867281229699418790, -0.867306119540792400, -0.867331007213901110, -0.867355892718681850, -0.867380776055072910, -0.867405657223011990, +-0.867430536222436930, -0.867455413053285550, -0.867480287715495680, -0.867505160209005030, -0.867530030533751550, -0.867554898689672950, -0.867579764676707050, -0.867604628494791810, +-0.867629490143865480, -0.867654349623864900, -0.867679206934728440, -0.867704062076393940, -0.867728915048799790, -0.867753765851882910, -0.867778614485581690, -0.867803460949833850, +-0.867828305244577320, -0.867853147369750060, -0.867877987325289980, -0.867902825111134810, -0.867927660727222720, -0.867952494173491410, -0.867977325449878820, -0.868002154556323460, +-0.868026981492762250, -0.868051806259133470, -0.868076628855375290, -0.868101449281425960, -0.868126267537222550, -0.868151083622703550, -0.868175897537806770, -0.868200709282470170, +-0.868225518856631910, -0.868250326260229800, -0.868275131493201900, -0.868299934555486150, -0.868324735447020600, -0.868349534167743190, -0.868374330717592400, -0.868399125096505300, +-0.868423917304420480, -0.868448707341275770, -0.868473495207009780, -0.868498280901559670, -0.868523064424863710, -0.868547845776860170, -0.868572624957486990, -0.868597401966682340, +-0.868622176804384140, -0.868646949470530450, -0.868671719965059430, -0.868696488287909020, -0.868721254439017490, -0.868746018418322770, -0.868770780225763480, -0.868795539861276780, +-0.868820297324801260, -0.868845052616275430, -0.868869805735636550, -0.868894556682823120, -0.868919305457773290, -0.868944052060425240, -0.868968796490717010, -0.868993538748586760, +-0.869018278833972760, -0.869043016746813060, -0.869067752487045710, -0.869092486054609090, -0.869117217449441150, -0.869141946671480700, -0.869166673720664920, -0.869191398596932400, +-0.869216121300221410, -0.869240841830470680, -0.869265560187617250, -0.869290276371599950, -0.869314990382357040, -0.869339702219826590, -0.869364411883946860, -0.869389119374656130, +-0.869413824691892660, -0.869438527835594500, -0.869463228805700150, -0.869487927602147660, -0.869512624224875850, -0.869537318673822000, -0.869562010948924820, -0.869586701050122590, +-0.869611388977354130, -0.869636074730556710, -0.869660758309669160, -0.869685439714629640, -0.869710118945376530, -0.869734796001848220, -0.869759470883982870, -0.869784143591718740, +-0.869808814124994330, -0.869833482483747920, -0.869858148667917770, -0.869882812677442720, -0.869907474512260140, -0.869932134172308970, -0.869956791657527370, -0.869981446967854290, +-0.870006100103227100, -0.870030751063584630, -0.870055399848865370, -0.870080046459007610, -0.870104690893949710, -0.870129333153630060, -0.870153973237987040, -0.870178611146959160, +-0.870203246880484780, -0.870227880438502190, -0.870252511820949980, -0.870277141027766880, -0.870301768058890480, -0.870326392914259730, -0.870351015593813450, -0.870375636097489020, +-0.870400254425225730, -0.870424870576961610, -0.870449484552635380, -0.870474096352185530, -0.870498705975550350, -0.870523313422668420, -0.870547918693478140, -0.870572521787918220, +-0.870597122705926820, -0.870621721447442760, -0.870646318012404770, -0.870670912400750560, -0.870695504612419070, -0.870720094647348790, -0.870744682505478760, -0.870769268186746490, +-0.870793851691091140, -0.870818433018451190, -0.870843012168765030, -0.870867589141971490, -0.870892163938008830, -0.870916736556815900, -0.870941306998331060, -0.870965875262492920, +-0.870990441349240090, -0.871015005258511720, -0.871039566990245320, -0.871064126544379920, -0.871088683920854370, -0.871113239119607360, -0.871137792140576960, -0.871162342983702100, +-0.871186891648921270, -0.871211438136173190, -0.871235982445396570, -0.871260524576530030, -0.871285064529512270, -0.871309602304281670, -0.871334137900777070, -0.871358671318937290, +-0.871383202558701160, -0.871407731620006510, -0.871432258502792710, -0.871456783206998150, -0.871481305732562110, -0.871505826079422290, -0.871530344247517960, -0.871554860236787740, +-0.871579374047170450, -0.871603885678604700, -0.871628395131029190, -0.871652902404382760, -0.871677407498604010, -0.871701910413631760, -0.871726411149404750, -0.871750909705862110, +-0.871775406082941800, -0.871799900280582960, -0.871824392298724330, -0.871848882137305160, -0.871873369796263400, -0.871897855275538200, -0.871922338575068400, -0.871946819694792710, +-0.871971298634649950, -0.871995775394579060, -0.872020249974518660, -0.872044722374407550, -0.872069192594184690, -0.872093660633788900, -0.872118126493158900, -0.872142590172234060, +-0.872167051670952320, -0.872191510989252850, -0.872215968127074690, -0.872240423084357120, -0.872264875861037960, -0.872289326457056590, -0.872313774872351950, -0.872338221106862880, +-0.872362665160528180, -0.872387107033286920, -0.872411546725077810, -0.872435984235839900, -0.872460419565512010, -0.872484852714032980, -0.872509283681342400, -0.872533712467378100, +-0.872558139072079460, -0.872582563495385540, -0.872606985737235720, -0.872631405797567930, -0.872655823676321660, -0.872680239373435750, -0.872704652888849240, -0.872729064222501180, +-0.872753473374330400, -0.872777880344276060, -0.872802285132276870, -0.872826687738271990, -0.872851088162200470, -0.872875486404001590, -0.872899882463613610, -0.872924276340975910, +-0.872948668036027550, -0.872973057548707910, -0.872997444878955140, -0.873021830026708860, -0.873046212991907990, -0.873070593774491480, -0.873094972374398590, -0.873119348791568270, +-0.873143723025939570, -0.873168095077451520, -0.873192464946043300, -0.873216832631653840, -0.873241198134222740, -0.873265561453688280, -0.873289922589989830, -0.873314281543066670, +-0.873338638312858180, -0.873362992899302640, -0.873387345302339630, -0.873411695521908340, -0.873436043557947790, -0.873460389410397050, -0.873484733079195390, -0.873509074564281840, +-0.873533413865595690, -0.873557750983075980, -0.873582085916661870, -0.873606418666292520, -0.873630749231907640, -0.873655077613445410, -0.873679403810845520, -0.873703727824047040, +-0.873728049652989670, -0.873752369297611910, -0.873776686757853030, -0.873801002033652520, -0.873825315124949540, -0.873849626031683150, -0.873873934753792820, -0.873898241291217630, +-0.873922545643896820, -0.873946847811769680, -0.873971147794775360, -0.873995445592853580, -0.874019741205942840, -0.874044034633982720, -0.874068325876912410, -0.874092614934671830, +-0.874116901807199250, -0.874141186494434510, -0.874165468996316640, -0.874189749312785260, -0.874214027443779410, -0.874238303389238470, -0.874262577149101830, -0.874286848723308750, +-0.874311118111798510, -0.874335385314510490, -0.874359650331384410, -0.874383913162358860, -0.874408173807373460, -0.874432432266367580, -0.874456688539281160, -0.874480942626052580, +-0.874505194526621570, -0.874529444240927600, -0.874553691768910070, -0.874577937110508240, -0.874602180265661610, -0.874626421234309450, -0.874650660016391360, -0.874674896611846500, +-0.874699131020614470, -0.874723363242635000, -0.874747593277846790, -0.874771821126189560, -0.874796046787602700, -0.874820270262026240, -0.874844491549398580, -0.874868710649659760, +-0.874892927562749170, -0.874917142288606290, -0.874941354827170500, -0.874965565178381310, -0.874989773342178200, -0.875013979318500670, -0.875038183107288200, -0.875062384708480300, +-0.875086584122016450, -0.875110781347836600, -0.875134976385879230, -0.875159169236084500, -0.875183359898392350, -0.875207548372741280, -0.875231734659071340, -0.875255918757322120, +-0.875280100667433000, -0.875304280389343710, -0.875328457922993740, -0.875352633268322580, -0.875376806425269830, -0.875400977393775090, -0.875425146173777870, -0.875449312765217760, +-0.875473477168034920, -0.875497639382167850, -0.875521799407556700, -0.875545957244141080, -0.875570112891861040, -0.875594266350655180, -0.875618417620463770, -0.875642566701226200, +-0.875666713592882280, -0.875690858295371630, -0.875715000808633740, -0.875739141132608420, -0.875763279267235180, -0.875787415212453730, -0.875811548968203790, -0.875835680534425400, +-0.875859809911057390, -0.875883937098039800, -0.875908062095312470, -0.875932184902815330, -0.875956305520487310, -0.875980423948268580, -0.876004540186098750, -0.876028654233917630, +-0.876052766091664830, -0.876076875759280060, -0.876100983236703160, -0.876125088523873720, -0.876149191620731680, -0.876173292527216650, -0.876197391243268680, -0.876221487768826910, +-0.876245582103831410, -0.876269674248222000, -0.876293764201938830, -0.876317851964920740, -0.876341937537108100, -0.876366020918440510, -0.876390102108857930, -0.876414181108300160, +-0.876438257916706820, -0.876462332534017950, -0.876486404960173160, -0.876510475195112380, -0.876534543238775440, -0.876558609091102170, -0.876582672752032720, -0.876606734221506260, +-0.876630793499462820, -0.876654850585842920, -0.876678905480585470, -0.876702958183630750, -0.876727008694918710, -0.876751057014389050, -0.876775103141981700, -0.876799147077636730, +-0.876823188821293730, -0.876847228372892860, -0.876871265732373950, -0.876895300899676820, -0.876919333874741520, -0.876943364657508220, -0.876967393247916060, -0.876991419645905550, +-0.877015443851416390, -0.877039465864389080, -0.877063485684762670, -0.877087503312477530, -0.877111518747473620, -0.877135531989690960, -0.877159543039069400, -0.877183551895549090, +-0.877207558559069840, -0.877231563029571610, -0.877255565306994560, -0.877279565391278600, -0.877303563282364140, -0.877327558980190440, -0.877351552484697760, -0.877375543795826160, +-0.877399532913516130, -0.877423519837706940, -0.877447504568338870, -0.877471487105352050, -0.877495467448686560, -0.877519445598282320, -0.877543421554079490, -0.877567395316018130, +-0.877591366884038270, -0.877615336258079970, -0.877639303438083380, -0.877663268423989010, -0.877687231215735890, -0.877711191813264850, -0.877735150216515710, -0.877759106425429200, +-0.877783060439944360, -0.877807012260002020, -0.877830961885542100, -0.877854909316504780, -0.877878854552830210, -0.877902797594458440, -0.877926738441329730, -0.877950677093384150, +-0.877974613550561940, -0.877998547812803070, -0.878022479880047890, -0.878046409752237020, -0.878070337429309620, -0.878094262911206400, -0.878118186197867970, -0.878142107289233590, +-0.878166026185243980, -0.878189942885839290, -0.878213857390959700, -0.878237769700545570, -0.878261679814536960, -0.878285587732874130, -0.878309493455497360, -0.878333396982346800, +-0.878357298313362840, -0.878381197448485530, -0.878405094387655790, -0.878428989130812800, -0.878452881677897370, -0.878476772028849660, -0.878500660183610500, -0.878524546142119280, +-0.878548429904316700, -0.878572311470143030, -0.878596190839538550, -0.878620068012443630, -0.878643942988798550, -0.878667815768543580, -0.878691686351619090, -0.878715554737965370, +-0.878739420927522770, -0.878763284920232150, -0.878787146716032750, -0.878811006314865530, -0.878834863716670740, -0.878858718921389340, -0.878882571928960580, -0.878906422739325510, +-0.878930271352424300, -0.878954117768197430, -0.878977961986585290, -0.879001804007528250, -0.879025643830966710, -0.879049481456841030, -0.879073316885091600, -0.879097150115658920, +-0.879120981148483800, -0.879144809983505860, -0.879168636620665800, -0.879192461059904230, -0.879216283301161860, -0.879240103344378410, -0.879263921189494590, -0.879287736836451120, +-0.879311550285188260, -0.879335361535646510, -0.879359170587766360, -0.879382977441488300, -0.879406782096752710, -0.879430584553500210, -0.879454384811671260, -0.879478182871206380, +-0.879501978732046500, -0.879525772394131210, -0.879549563857401460, -0.879573353121798180, -0.879597140187261210, -0.879620925053731350, -0.879644707721149110, -0.879668488189455200, +-0.879692266458590000, -0.879716042528494110, -0.879739816399108250, -0.879763588070372690, -0.879787357542228250, -0.879811124814615430, -0.879834889887474710, -0.879858652760747260, +-0.879882413434372790, -0.879906171908292230, -0.879929928182446200, -0.879953682256775840, -0.879977434131220870, -0.880001183805722230, -0.880024931280220750, -0.880048676554656790, +-0.880072419628971310, -0.880096160503104690, -0.880119899176997620, -0.880143635650590840, -0.880167369923825050, -0.880191101996640750, -0.880214831868979090, -0.880238559540780010, +-0.880262285011984450, -0.880286008282533230, -0.880309729352367400, -0.880333448221426900, -0.880357164889652650, -0.880380879356985610, -0.880404591623366260, -0.880428301688735540, +-0.880452009553034040, -0.880475715216202490, -0.880499418678181600, -0.880523119938912190, -0.880546818998335090, -0.880570515856391230, -0.880594210513020670, -0.880617902968164670, +-0.880641593221763830, -0.880665281273759540, -0.880688967124091500, -0.880712650772701110, -0.880736332219529070, -0.880760011464516210, -0.880783688507603360, -0.880807363348731220, +-0.880831035987840630, -0.880854706424872510, -0.880878374659767700, -0.880902040692466910, -0.880925704522910970, -0.880949366151041250, -0.880973025576797570, -0.880996682800121440, +-0.881020337820954010, -0.881043990639235330, -0.881067641254906660, -0.881091289667908840, -0.881114935878182900, -0.881138579885669570, -0.881162221690309780, -0.881185861292044350, +-0.881209498690814330, -0.881233133886560660, -0.881256766879224050, -0.881280397668745550, -0.881304026255066430, -0.881327652638126960, -0.881351276817868290, -0.881374898794231370, +-0.881398518567157670, -0.881422136136587260, -0.881445751502461520, -0.881469364664721370, -0.881492975623307750, -0.881516584378161830, -0.881540190929224310, -0.881563795276436470, +-0.881587397419739020, -0.881610997359073110, -0.881634595094379690, -0.881658190625600250, -0.881681783952674820, -0.881705375075545030, -0.881728963994151790, -0.881752550708436500, +-0.881776135218339530, -0.881799717523802150, -0.881823297624765410, -0.881846875521170470, -0.881870451212958370, -0.881894024700070170, -0.881917595982446900, -0.881941165060029620, +-0.881964731932759370, -0.881988296600577320, -0.882011859063425050, -0.882035419321242630, -0.882058977373971650, -0.882082533221553170, -0.882106086863928880, -0.882129638301038970, +-0.882153187532824900, -0.882176734559227850, -0.882200279380188970, -0.882223821995649420, -0.882247362405550350, -0.882270900609832820, -0.882294436608438090, -0.882317970401307220, +-0.882341501988381460, -0.882365031369601870, -0.882388558544910160, -0.882412083514246710, -0.882435606277552910, -0.882459126834770680, -0.882482645185840080, -0.882506161330702920, +-0.882529675269300370, -0.882553187001573590, -0.882576696527463840, -0.882600203846912400, -0.882623708959860420, -0.882647211866249170, -0.882670712566019920, -0.882694211059113830, +-0.882717707345472280, -0.882741201425036870, -0.882764693297747980, -0.882788182963547440, -0.882811670422376400, -0.882835155674176590, -0.882858638718888480, -0.882882119556453790, +-0.882905598186813800, -0.882929074609909770, -0.882952548825683080, -0.882976020834075000, -0.882999490635026920, -0.883022958228480090, -0.883046423614375910, -0.883069886792655630, +-0.883093347763260980, -0.883116806526132670, -0.883140263081212300, -0.883163717428441240, -0.883187169567761330, -0.883210619499113060, -0.883234067222438250, -0.883257512737678270, +-0.883280956044774520, -0.883304397143668370, -0.883327836034301210, -0.883351272716614510, -0.883374707190549560, -0.883398139456047950, -0.883421569513050840, -0.883444997361500390, +-0.883468423001336880, -0.883491846432502450, -0.883515267654938260, -0.883538686668586480, -0.883562103473387370, -0.883585518069283200, -0.883608930456215140, -0.883632340634124770, +-0.883655748602953480, -0.883679154362642880, -0.883702557913134460, -0.883725959254369590, -0.883749358386289760, -0.883772755308836590, -0.883796150021951550, -0.883819542525576480, +-0.883842932819652210, -0.883866320904120650, -0.883889706778923650, -0.883913090444001900, -0.883936471899297470, -0.883959851144751840, -0.883983228180306720, -0.884006603005903390, +-0.884029975621483550, -0.884053346026988820, -0.884076714222360780, -0.884100080207540830, -0.884123443982470780, -0.884146805547092020, -0.884170164901346810, -0.884193522045175650, +-0.884216876978520690, -0.884240229701323540, -0.884263580213526360, -0.884286928515069630, -0.884310274605895730, -0.884333618485946050, -0.884356960155162410, -0.884380299613486300, +-0.884403636860859430, -0.884426971897223520, -0.884450304722520060, -0.884473635336690990, -0.884496963739677790, -0.884520289931422620, -0.884543613911866200, -0.884566935680950790, +-0.884590255238618120, -0.884613572584810210, -0.884636887719467910, -0.884660200642533370, -0.884683511353948400, -0.884706819853654510, -0.884730126141593740, -0.884753430217707580, +-0.884776732081937860, -0.884800031734226280, -0.884823329174514670, -0.884846624402744750, -0.884869917418858560, -0.884893208222797270, -0.884916496814502910, -0.884939783193917420, +-0.884963067360982740, -0.884986349315640020, -0.885009629057831540, -0.885032906587498890, -0.885056181904583910, -0.885079455009028630, -0.885102725900774550, -0.885125994579763820, +-0.885149261045937940, -0.885172525299238950, -0.885195787339608800, -0.885219047166988960, -0.885242304781322040, -0.885265560182548980, -0.885288813370611940, -0.885312064345453290, +-0.885335313107014080, -0.885358559655236580, -0.885381803990062720, -0.885405046111434340, -0.885428286019293350, -0.885451523713581600, -0.885474759194241010, -0.885497992461213630, +-0.885521223514441180, -0.885544452353865700, -0.885567678979429120, -0.885590903391073710, -0.885614125588740640, -0.885637345572372280, -0.885660563341910570, -0.885683778897297880, +-0.885706992238475270, -0.885730203365385220, -0.885753412277969670, -0.885776618976170550, -0.885799823459929910, -0.885823025729189690, -0.885846225783891830, -0.885869423623978580, +-0.885892619249391670, -0.885915812660073240, -0.885939003855965580, -0.885962192837010170, -0.885985379603149160, -0.886008564154324720, -0.886031746490479330, -0.886054926611554160, +-0.886078104517491690, -0.886101280208233870, -0.886124453683722950, -0.886147624943900760, -0.886170793988709680, -0.886193960818091430, -0.886217125431988380, -0.886240287830342590, +-0.886263448013095980, -0.886286605980191160, -0.886309761731569500, -0.886332915267173390, -0.886356066586944990, -0.886379215690826780, -0.886402362578760150, -0.886425507250687580, +-0.886448649706551350, -0.886471789946293390, -0.886494927969856070, -0.886518063777181340, -0.886541197368211460, -0.886564328742888600, -0.886587457901155010, -0.886610584842952630, +-0.886633709568224290, -0.886656832076911150, -0.886679952368956030, -0.886703070444301080, -0.886726186302888800, -0.886749299944660560, -0.886772411369559200, -0.886795520577526750, +-0.886818627568505490, -0.886841732342437680, -0.886864834899265600, -0.886887935238931390, -0.886911033361377330, -0.886934129266545690, -0.886957222954378730, -0.886980314424818620, +-0.887003403677808280, -0.887026490713288980, -0.887049575531203450, -0.887072658131493940, -0.887095738514103170, -0.887118816678972740, -0.887141892626045260, -0.887164966355262980, +-0.887188037866568300, -0.887211107159903590, -0.887234174235211000, -0.887257239092433040, -0.887280301731512070, -0.887303362152390250, -0.887326420355009970, -0.887349476339314160, +-0.887372530105244190, -0.887395581652742900, -0.887418630981752670, -0.887441678092216300, -0.887464722984075300, -0.887487765657272500, -0.887510806111750260, -0.887533844347450970, +-0.887556880364317120, -0.887579914162291090, -0.887602945741315260, -0.887625975101332010, -0.887649002242283940, -0.887672027164113310, -0.887695049866762950, -0.887718070350174690, +-0.887741088614291130, -0.887764104659054860, -0.887787118484408830, -0.887810130090294520, -0.887833139476654990, -0.887856146643432490, -0.887879151590569630, -0.887902154318008900, +-0.887925154825692900, -0.887948153113563900, -0.887971149181564500, -0.887994143029637310, -0.888017134657724690, -0.888040124065769710, -0.888063111253713950, -0.888086096221500480, +-0.888109078969071650, -0.888132059496370640, -0.888155037803339040, -0.888178013889919900, -0.888200987756055600, -0.888223959401688970, -0.888246928826762370, -0.888269896031218420, +-0.888292861014999820, -0.888315823778048960, -0.888338784320308660, -0.888361742641721300, -0.888384698742229580, -0.888407652621776570, -0.888430604280304070, -0.888453553717754920, +-0.888476500934072040, -0.888499445929198160, -0.888522388703075430, -0.888545329255646550, -0.888568267586854480, -0.888591203696641680, -0.888614137584950890, -0.888637069251724810, +-0.888659998696905930, -0.888682925920437180, -0.888705850922261060, -0.888728773702320280, -0.888751694260558000, -0.888774612596916150, -0.888797528711337660, -0.888820442603765470, +-0.888843354274142410, -0.888866263722410730, -0.888889170948513270, -0.888912075952392970, -0.888934978733992410, -0.888957879293254430, -0.888980777630121730, -0.889003673744537150, +-0.889026567636443280, -0.889049459305783160, -0.889072348752499190, -0.889095235976534950, -0.889118120977832050, -0.889141003756333980, -0.889163884311983340, -0.889186762644723410, +-0.889209638754496100, -0.889232512641244700, -0.889255384304912130, -0.889278253745441010, -0.889301120962774250, -0.889323985956854690, -0.889346848727625260, -0.889369709275028670, +-0.889392567599007760, -0.889415423699505440, -0.889438277576464990, -0.889461129229828450, -0.889483978659538990, -0.889506825865539750, -0.889529670847773680, -0.889552513606183150, +-0.889575354140711320, -0.889598192451301010, -0.889621028537895380, -0.889643862400437020, -0.889666694038869110, -0.889689523453134460, -0.889712350643175890, -0.889735175608936560, +-0.889757998350359290, -0.889780818867386910, -0.889803637159963020, -0.889826453228029560, -0.889849267071530000, -0.889872078690407630, -0.889894888084604710, -0.889917695254064610, +-0.889940500198730170, -0.889963302918544530, -0.889986103413450640, -0.890008901683391530, -0.890031697728310140, -0.890054491548149420, -0.890077283142852500, -0.890100072512362450, +-0.890122859656622190, -0.890145644575575210, -0.890168427269163680, -0.890191207737331070, -0.890213985980020440, -0.890236761997175270, -0.890259535788737730, -0.890282307354651410, +-0.890305076694859370, -0.890327843809304520, -0.890350608697930150, -0.890373371360679290, -0.890396131797494880, -0.890418890008320310, -0.890441645993098390, -0.890464399751772380, +-0.890487151284285790, -0.890509900590580880, -0.890532647670601250, -0.890555392524289950, -0.890578135151590680, -0.890600875552445600, -0.890623613726798320, -0.890646349674592000, +-0.890669083395769780, -0.890691814890274940, -0.890714544158050510, -0.890737271199039780, -0.890759996013185780, -0.890782718600431900, -0.890805438960721170, -0.890828157093997210, +-0.890850873000202490, -0.890873586679280520, -0.890896298131174660, -0.890919007355828410, -0.890941714353184370, -0.890964419123185910, -0.890987121665776430, -0.891009821980899170, +-0.891032520068497310, -0.891055215928514220, -0.891077909560893060, -0.891100600965577080, -0.891123290142509570, -0.891145977091633900, -0.891168661812893340, -0.891191344306231480, +-0.891214024571590820, -0.891236702608915190, -0.891259378418148170, -0.891282051999232270, -0.891304723352111190, -0.891327392476728430, -0.891350059373027140, -0.891372724040950580, +-0.891395386480442360, -0.891418046691445640, -0.891440704673903790, -0.891463360427760200, -0.891486013952958230, -0.891508665249441170, -0.891531314317152820, -0.891553961156035800, +-0.891576605766033920, -0.891599248147090570, -0.891621888299149460, -0.891644526222153180, -0.891667161916045670, -0.891689795380770090, -0.891712426616270150, -0.891735055622489230, +-0.891757682399370480, -0.891780306946857610, -0.891802929264894020, -0.891825549353423060, -0.891848167212388240, -0.891870782841733380, -0.891893396241401180, -0.891916007411335480, +-0.891938616351479750, -0.891961223061777940, -0.891983827542172650, -0.892006429792607800, -0.892029029813026790, -0.892051627603373310, -0.892074223163590750, -0.892096816493622600, +-0.892119407593412350, -0.892141996462903710, -0.892164583102039940, -0.892187167510764770, -0.892209749689022110, -0.892232329636754700, -0.892254907353906450, -0.892277482840420850, +-0.892300056096241970, -0.892322627121312610, -0.892345195915576710, -0.892367762478977760, -0.892390326811459360, -0.892412888912965220, -0.892435448783438830, -0.892458006422823800, +-0.892480561831063830, -0.892503115008102420, -0.892525665953883160, -0.892548214668349770, -0.892570761151446290, -0.892593305403115430, -0.892615847423301360, -0.892638387211948100, +-0.892660924768998390, -0.892683460094396360, -0.892705993188085740, -0.892728524050010130, -0.892751052680113230, -0.892773579078338650, -0.892796103244630210, -0.892818625178931400, +-0.892841144881186160, -0.892863662351337960, -0.892886177589330640, -0.892908690595108250, -0.892931201368613700, -0.892953709909791170, -0.892976216218584470, -0.892998720294937540, +-0.893021222138793420, -0.893043721750096160, -0.893066219128789700, -0.893088714274817730, -0.893111207188123870, -0.893133697868652040, -0.893156186316345970, -0.893178672531149460, +-0.893201156513006240, -0.893223638261860130, -0.893246117777655280, -0.893268595060334740, -0.893291070109842770, -0.893313542926123080, -0.893336013509119950, -0.893358481858776420, +-0.893380947975036640, -0.893403411857844550, -0.893425873507143860, -0.893448332922878510, -0.893470790104992420, -0.893493245053429200, -0.893515697768133000, -0.893538148249047430, +-0.893560596496116630, -0.893583042509284660, -0.893605486288494680, -0.893627927833690940, -0.893650367144817490, -0.893672804221818500, -0.893695239064636990, -0.893717671673217470, +-0.893740102047503760, -0.893762530187439790, -0.893784956092969480, -0.893807379764036900, -0.893829801200585750, -0.893852220402560070, -0.893874637369903910, -0.893897052102561100, +-0.893919464600475780, -0.893941874863592110, -0.893964282891853370, -0.893986688685203920, -0.894009092243588040, -0.894031493566949220, -0.894053892655231500, -0.894076289508379140, +-0.894098684126336090, -0.894121076509046260, -0.894143466656453720, -0.894165854568502620, -0.894188240245136770, -0.894210623686300440, -0.894233004891937470, -0.894255383861991990, +-0.894277760596408400, -0.894300135095130070, -0.894322507358101480, -0.894344877385266470, -0.894367245176569740, -0.894389610731954550, -0.894411974051365300, -0.894434335134746130, +-0.894456693982041080, -0.894479050593194210, -0.894501404968149890, -0.894523757106851950, -0.894546107009244640, -0.894568454675272130, -0.894590800104878350, -0.894613143298008120, +-0.894635484254604480, -0.894657822974612270, -0.894680159457975410, -0.894702493704638610, -0.894724825714545150, -0.894747155487639610, -0.894769483023866160, -0.894791808323169070, +-0.894814131385492370, -0.894836452210780450, -0.894858770798977350, -0.894881087150027340, -0.894903401263874580, -0.894925713140463320, -0.894948022779738170, -0.894970330181642630, +-0.894992635346121170, -0.895014938273118180, -0.895037238962578250, -0.895059537414444770, -0.895081833628662450, -0.895104127605175660, -0.895126419343928450, -0.895148708844865190, +-0.895170996107930160, -0.895193281133067730, -0.895215563920222060, -0.895237844469337410, -0.895260122780358160, -0.895282398853228690, -0.895304672687893490, -0.895326944284296270, +-0.895349213642381740, -0.895371480762094610, -0.895393745643378260, -0.895416008286177620, -0.895438268690436970, -0.895460526856100560, -0.895482782783112890, -0.895505036471418210, +-0.895527287920961030, -0.895549537131685610, -0.895571784103536330, -0.895594028836457560, -0.895616271330393790, -0.895638511585289730, -0.895660749601088880, -0.895682985377736270, +-0.895705218915176180, -0.895727450213353430, -0.895749679272211610, -0.895771906091695660, -0.895794130671749960, -0.895816353012318880, -0.895838573113346910, -0.895860790974778550, +-0.895883006596558170, -0.895905219978630370, -0.895927431120939420, -0.895949640023429920, -0.895971846686046680, -0.895994051108733540, -0.896016253291435190, -0.896038453234096140, +-0.896060650936661430, -0.896082846399074760, -0.896105039621280850, -0.896127230603224410, -0.896149419344849930, -0.896171605846101890, -0.896193790106924790, -0.896215972127263230, +-0.896238151907061690, -0.896260329446264880, -0.896282504744817190, -0.896304677802663540, -0.896326848619747980, -0.896349017196015230, -0.896371183531409880, -0.896393347625876970, +-0.896415509479360330, -0.896437669091804890, -0.896459826463155360, -0.896481981593356240, -0.896504134482352110, -0.896526285130087700, -0.896548433536507480, -0.896570579701556290, +-0.896592723625178610, -0.896614865307319150, -0.896637004747922410, -0.896659141946933640, -0.896681276904296660, -0.896703409619956430, -0.896725540093858080, -0.896747668325945550, +-0.896769794316163770, -0.896791918064457460, -0.896814039570771440, -0.896836158835050300, -0.896858275857238760, -0.896880390637281640, -0.896902503175123430, -0.896924613470708950, +-0.896946721523982910, -0.896968827334890140, -0.896990930903375670, -0.897013032229383560, -0.897035131312858720, -0.897057228153746110, -0.897079322751990870, -0.897101415107536940, +-0.897123505220329460, -0.897145593090313160, -0.897167678717432860, -0.897189762101633480, -0.897211843242859630, -0.897233922141056130, -0.897255998796167910, -0.897278073208139570, +-0.897300145376916160, -0.897322215302442720, -0.897344282984663400, -0.897366348423523360, -0.897388411618967430, -0.897410472570940860, -0.897432531279387710, -0.897454587744253240, +-0.897476641965482380, -0.897498693943019840, -0.897520743676810560, -0.897542791166799470, -0.897564836412931280, -0.897586879415151140, -0.897608920173403770, -0.897630958687634100, +-0.897652994957787390, -0.897675028983807800, -0.897697060765640600, -0.897719090303230830, -0.897741117596523750, -0.897763142645463420, -0.897785165449995200, -0.897807186010064150, +-0.897829204325615080, -0.897851220396593040, -0.897873234222942850, -0.897895245804609670, -0.897917255141538420, -0.897939262233673930, -0.897961267080961360, -0.897983269683345520, +-0.898005270040772020, -0.898027268153184900, -0.898049264020529540, -0.898071257642751530, -0.898093249019794930, -0.898115238151605210, -0.898137225038127430, -0.898159209679306510, +-0.898181192075087620, -0.898203172225415790, -0.898225150130235960, -0.898247125789493280, -0.898269099203132800, -0.898291070371099560, -0.898313039293338610, -0.898335005969795540, +-0.898356970400414510, -0.898378932585141010, -0.898400892523920300, -0.898422850216697650, -0.898444805663417450, -0.898466758864025380, -0.898488709818466290, -0.898510658526685440, +-0.898532604988627970, -0.898554549204238940, -0.898576491173463610, -0.898598430896247020, -0.898620368372534340, -0.898642303602270820, -0.898664236585401840, -0.898686167321871900, +-0.898708095811626580, -0.898730022054610940, -0.898751946050770690, -0.898773867800050200, -0.898795787302395070, -0.898817704557750450, -0.898839619566061510, -0.898861532327273500, +-0.898883442841331810, -0.898905351108181370, -0.898927257127767660, -0.898949160900035740, -0.898971062424930860, -0.898992961702398840, -0.899014858732383960, -0.899036753514831920, +-0.899058646049687990, -0.899080536336897880, -0.899102424376406080, -0.899124310168158080, -0.899146193712099470, -0.899168075008175300, -0.899189954056330840, -0.899211830856511680, +-0.899233705408662880, -0.899255577712729790, -0.899277447768657700, -0.899299315576392090, -0.899321181135878560, -0.899343044447061590, -0.899364905509887120, -0.899386764324300310, +-0.899408620890247090, -0.899430475207671830, -0.899452327276520470, -0.899474177096738160, -0.899496024668270500, -0.899517869991062760, -0.899539713065060420, -0.899561553890208640, +-0.899583392466453140, -0.899605228793739050, -0.899627062872012000, -0.899648894701217120, -0.899670724281300570, -0.899692551612206740, -0.899714376693881430, -0.899736199526270370, +-0.899758020109319050, -0.899779838442972380, -0.899801654527176090, -0.899823468361875660, -0.899845279947016570, -0.899867089282544220, -0.899888896368404190, -0.899910701204541970, +-0.899932503790902950, -0.899954304127432710, -0.899976102214076650, -0.899997898050780790, -0.900019691637489740, -0.900041482974149430, -0.900063272060705470, -0.900085058897103660, +-0.900106843483288950, -0.900128625819207050, -0.900150405904803550, -0.900172183740024060, -0.900193959324814160, -0.900215732659119250, -0.900237503742885140, -0.900259272576057200, +-0.900281039158581040, -0.900302803490402370, -0.900324565571467010, -0.900346325401719880, -0.900368082981106930, -0.900389838309573750, -0.900411591387066500, -0.900433342213529660, +-0.900455090788909620, -0.900476837113151850, -0.900498581186201960, -0.900520323008005550, -0.900542062578508440, -0.900563799897656110, -0.900585534965394290, -0.900607267781668660, +-0.900628998346424850, -0.900650726659608880, -0.900672452721165810, -0.900694176531041560, -0.900715898089181840, -0.900737617395532820, -0.900759334450039310, -0.900781049252647460, +-0.900802761803302990, -0.900824472101951600, -0.900846180148539120, -0.900867885943011150, -0.900889589485313500, -0.900911290775391780, -0.900932989813191920, -0.900954686598659520, +-0.900976381131740390, -0.900998073412380810, -0.901019763440525590, -0.901041451216120890, -0.901063136739112650, -0.901084820009446900, -0.901106501027068800, -0.901128179791924390, +-0.901149856303959500, -0.901171530563120050, -0.901193202569351760, -0.901214872322600450, -0.901236539822811930, -0.901258205069932040, -0.901279868063906700, -0.901301528804681730, +-0.901323187292203180, -0.901344843526416420, -0.901366497507267490, -0.901388149234702340, -0.901409798708667110, -0.901431445929107070, -0.901453090895968480, -0.901474733609197050, +-0.901496374068738840, -0.901518012274539650, -0.901539648226545530, -0.901561281924702200, -0.901582913368955690, -0.901604542559251930, -0.901626169495536760, -0.901647794177756530, +-0.901669416605856530, -0.901691036779782910, -0.901712654699481810, -0.901734270364899280, -0.901755883775980820, -0.901777494932672560, -0.901799103834920680, -0.901820710482670980, +-0.901842314875869520, -0.901863917014462220, -0.901885516898395130, -0.901907114527614300, -0.901928709902065640, -0.901950303021695320, -0.901971893886449490, -0.901993482496273650, +-0.902015068851113930, -0.902036652950916730, -0.902058234795628190, -0.902079814385193690, -0.902101391719559610, -0.902122966798672100, -0.902144539622477200, -0.902166110190920970, +-0.902187678503949430, -0.902209244561508640, -0.902230808363544750, -0.902252369910003900, -0.902273929200832160, -0.902295486235975440, -0.902317041015380570, -0.902338593538992590, +-0.902360143806758220, -0.902381691818623820, -0.902403237574534780, -0.902424781074437690, -0.902446322318278590, -0.902467861306003760, -0.902489398037559230, -0.902510932512891160, +-0.902532464731945820, -0.902553994694669350, -0.902575522401007910, -0.902597047850907550, -0.902618571044314640, -0.902640091981175670, -0.902661610661436130, -0.902683127085042500, +-0.902704641251941160, -0.902726153162078490, -0.902747662815400090, -0.902769170211852550, -0.902790675351382020, -0.902812178233934890, -0.902833678859457310, -0.902855177227895430, +-0.902876673339195630, -0.902898167193304290, -0.902919658790167450, -0.902941148129731360, -0.902962635211942870, -0.902984120036747440, -0.903005602604091680, -0.903027082913921970, +-0.903048560966184800, -0.903070036760825980, -0.903091510297792000, -0.903112981577029240, -0.903134450598484070, -0.903155917362102770, -0.903177381867831700, -0.903198844115617130, +-0.903220304105405440, -0.903241761837143000, -0.903263217310776190, -0.903284670526251610, -0.903306121483515080, -0.903327570182513200, -0.903349016623192450, -0.903370460805499540, +-0.903391902729379970, -0.903413342394780770, -0.903434779801648210, -0.903456214949928670, -0.903477647839568520, -0.903499078470514360, -0.903520506842712460, -0.903541932956109290, +-0.903563356810651360, -0.903584778406284930, -0.903606197742956590, -0.903627614820613160, -0.903649029639200350, -0.903670442198664880, -0.903691852498953780, -0.903713260540012550, +-0.903734666321788230, -0.903756069844227290, -0.903777471107276130, -0.903798870110881340, -0.903820266854989280, -0.903841661339546580, -0.903863053564499810, -0.903884443529795360, +-0.903905831235379710, -0.903927216681199570, -0.903948599867201770, -0.903969980793332130, -0.903991359459537460, -0.904012735865764470, -0.904034110011959880, -0.904055481898069720, +-0.904076851524040940, -0.904098218889819890, -0.904119583995353420, -0.904140946840587880, -0.904162307425470100, -0.904183665749946460, -0.904205021813963670, -0.904226375617468330, +-0.904247727160407020, -0.904269076442726800, -0.904290423464373490, -0.904311768225294130, -0.904333110725435430, -0.904354450964744210, -0.904375788943166500, -0.904397124660649370, +-0.904418458117139500, -0.904439789312583400, -0.904461118246927760, -0.904482444920119420, -0.904503769332104970, -0.904525091482831000, -0.904546411372244450, -0.904567729000291700, +-0.904589044366920110, -0.904610357472075520, -0.904631668315705070, -0.904652976897755370, -0.904674283218173670, -0.904695587276905910, -0.904716889073899130, -0.904738188609100160, +-0.904759485882455690, -0.904780780893912450, -0.904802073643417360, -0.904823364130917020, -0.904844652356358360, -0.904865938319687980, -0.904887222020852810, -0.904908503459799560, +-0.904929782636475390, -0.904951059550826440, -0.904972334202799770, -0.904993606592342740, -0.905014876719401280, -0.905036144583922560, -0.905057410185853620, -0.905078673525141040, +-0.905099934601731770, -0.905121193415572730, -0.905142449966610640, -0.905163704254792530, -0.905184956280065120, -0.905206206042375230, -0.905227453541669890, -0.905248698777896380, +-0.905269941751000620, -0.905291182460929990, -0.905312420907631530, -0.905333657091052290, -0.905354891011138640, -0.905376122667837620, -0.905397352061096390, -0.905418579190861770, +-0.905439804057080690, -0.905461026659700070, -0.905482246998666970, -0.905503465073928200, -0.905524680885430700, -0.905545894433121610, -0.905567105716948100, -0.905588314736856410, +-0.905609521492794060, -0.905630725984707840, -0.905651928212545140, -0.905673128176252230, -0.905694325875776580, -0.905715521311065140, -0.905736714482064830, -0.905757905388722690, +-0.905779094030985890, -0.905800280408801230, -0.905821464522115980, -0.905842646370877080, -0.905863825955031450, -0.905885003274526810, -0.905906178329309090, -0.905927351119326100, +-0.905948521644524550, -0.905969689904852160, -0.905990855900255190, -0.906012019630681120, -0.906033181096076890, -0.906054340296389870, -0.906075497231566880, -0.906096651901555190, +-0.906117804306301840, -0.906138954445753990, -0.906160102319858660, -0.906181247928563250, -0.906202391271814570, -0.906223532349560320, -0.906244671161746900, -0.906265807708321880, +-0.906286941989232650, -0.906308074004425590, -0.906329203753848510, -0.906350331237448350, -0.906371456455172360, -0.906392579406967710, -0.906413700092781550, -0.906434818512561250, +-0.906455934666253850, -0.906477048553806620, -0.906498160175166820, -0.906519269530281610, -0.906540376619098590, -0.906561481441564230, -0.906582583997626150, -0.906603684287231700, +-0.906624782310328280, -0.906645878066862590, -0.906666971556782220, -0.906688062780034440, -0.906709151736566520, -0.906730238426325720, -0.906751322849259190, -0.906772405005314530, +-0.906793484894438780, -0.906814562516579330, -0.906835637871683420, -0.906856710959698780, -0.906877781780572100, -0.906898850334250880, -0.906919916620682610, -0.906940980639814880, +-0.906962042391594280, -0.906983101875968640, -0.907004159092885230, -0.907025214042291420, -0.907046266724134460, -0.907067317138361970, -0.907088365284921210, -0.907109411163759430, +-0.907130454774824240, -0.907151496118062780, -0.907172535193423110, -0.907193572000851600, -0.907214606540296180, -0.907235638811704330, -0.907256668815023650, -0.907277696550200960, +-0.907298722017184090, -0.907319745215920290, -0.907340766146357280, -0.907361784808442320, -0.907382801202122780, -0.907403815327346370, -0.907424827184060370, -0.907445836772212240, +-0.907466844091749600, -0.907487849142619820, -0.907508851924770820, -0.907529852438149320, -0.907550850682703140, -0.907571846658380200, -0.907592840365127330, -0.907613831802892350, +-0.907634820971622740, -0.907655807871266100, -0.907676792501770020, -0.907697774863081900, -0.907718754955149310, -0.907739732777919860, -0.907760708331341040, -0.907781681615360550, +-0.907802652629925770, -0.907823621374984730, -0.907844587850484270, -0.907865552056372320, -0.907886513992596570, -0.907907473659104850, -0.907928431055844090, -0.907949386182762330, +-0.907970339039806950, -0.907991289626925880, -0.908012237944066490, -0.908033183991176500, -0.908054127768203600, -0.908075069275095290, -0.908096008511799390, -0.908116945478263490, +-0.908137880174435530, -0.908158812600262540, -0.908179742755692470, -0.908200670640673110, -0.908221596255152420, -0.908242519599077420, -0.908263440672396060, -0.908284359475056040, +-0.908305276007005170, -0.908326190268191170, -0.908347102258561630, -0.908368011978064380, -0.908388919426647120, -0.908409824604257450, -0.908430727510843310, -0.908451628146352720, +-0.908472526510732630, -0.908493422603931290, -0.908514316425896420, -0.908535207976576050, -0.908556097255917350, -0.908576984263868350, -0.908597869000376870, -0.908618751465390840, +-0.908639631658857860, -0.908660509580725750, -0.908681385230942440, -0.908702258609455640, -0.908723129716213160, -0.908743998551162950, -0.908764865114252700, -0.908785729405430560, +-0.908806591424643820, -0.908827451171840610, -0.908848308646969080, -0.908869163849976510, -0.908890016780810940, -0.908910867439420400, -0.908931715825752610, -0.908952561939755600, +-0.908973405781377200, -0.908994247350565220, -0.909015086647267600, -0.909035923671432380, -0.909056758423007260, -0.909077590901940290, -0.909098421108179620, -0.909119249041672630, +-0.909140074702367570, -0.909160898090212170, -0.909181719205155000, -0.909202538047143130, -0.909223354616124910, -0.909244168912048290, -0.909264980934861300, -0.909285790684511760, +-0.909306598160947830, -0.909327403364117440, -0.909348206293968400, -0.909369006950448980, -0.909389805333507330, -0.909410601443090830, -0.909431395279147850, -0.909452186841626430, +-0.909472976130474400, -0.909493763145640010, -0.909514547887071530, -0.909535330354716450, -0.909556110548522920, -0.909576888468439090, -0.909597664114413120, -0.909618437486393040, +-0.909639208584326790, -0.909659977408162510, -0.909680743957848260, -0.909701508233332510, -0.909722270234562760, -0.909743029961487260, -0.909763787414054060, -0.909784542592211530, +-0.909805295495907610, -0.909826046125090880, -0.909846794479708620, -0.909867540559709310, -0.909888284365041210, -0.909909025895652370, -0.909929765151491040, -0.909950502132505280, +-0.909971236838643230, -0.909991969269853040, -0.910012699426082980, -0.910033427307281540, -0.910054152913396200, -0.910074876244375440, -0.910095597300167420, -0.910116316080720520, +-0.910137032585983220, -0.910157746815902890, -0.910178458770428130, -0.910199168449507320, -0.910219875853088610, -0.910240580981120150, -0.910261283833550320, -0.910281984410327150, +-0.910302682711399140, -0.910323378736714320, -0.910344072486221510, -0.910364763959868100, -0.910385453157602890, -0.910406140079373930, -0.910426824725129590, -0.910447507094818250, +-0.910468187188388510, -0.910488865005787960, -0.910509540546965200, -0.910530213811868610, -0.910550884800446550, -0.910571553512647180, -0.910592219948418990, -0.910612884107710130, +-0.910633545990469200, -0.910654205596644670, -0.910674862926184380, -0.910695517979036810, -0.910716170755150540, -0.910736821254473750, -0.910757469476955020, -0.910778115422542940, +-0.910798759091185130, -0.910819400482830500, -0.910840039597427430, -0.910860676434924190, -0.910881310995269140, -0.910901943278411010, -0.910922573284297930, -0.910943201012878400, +-0.910963826464101230, -0.910984449637914250, -0.911005070534266050, -0.911025689153105110, -0.911046305494380040, -0.911066919558039200, -0.911087531344031420, -0.911108140852304400, +-0.911128748082807080, -0.911149353035487830, -0.911169955710295240, -0.911190556107177810, -0.911211154226084010, -0.911231750066962220, -0.911252343629761040, -0.911272934914429070, +-0.911293523920915120, -0.911314110649167010, -0.911334695099133670, -0.911355277270763490, -0.911375857164005150, -0.911396434778807500, -0.911417010115118440, -0.911437583172886920, +-0.911458153952061310, -0.911478722452590430, -0.911499288674422650, -0.911519852617506680, -0.911540414281791110, -0.911560973667224550, -0.911581530773755480, -0.911602085601332930, +-0.911622638149904850, -0.911643188419420160, -0.911663736409827450, -0.911684282121075440, -0.911704825553112720, -0.911725366705888330, -0.911745905579350200, -0.911766442173447270, +-0.911786976488128120, -0.911807508523341690, -0.911828038279036360, -0.911848565755161040, -0.911869090951664240, -0.911889613868494760, -0.911910134505601540, -0.911930652862932730, +-0.911951168940437150, -0.911971682738063730, -0.911992194255761170, -0.912012703493477960, -0.912033210451163480, -0.912053715128765650, -0.912074217526233410, -0.912094717643515680, +-0.912115215480561180, -0.912135711037318610, -0.912156204313736780, -0.912176695309764420, -0.912197184025350330, -0.912217670460443660, -0.912238154614992360, -0.912258636488945780, +-0.912279116082252540, -0.912299593394861550, -0.912320068426721640, -0.912340541177781850, -0.912361011647990330, -0.912381479837296340, -0.912401945745648590, -0.912422409372996010, +-0.912442870719287420, -0.912463329784471530, -0.912483786568497490, -0.912504241071313890, -0.912524693292869670, -0.912545143233114200, -0.912565590891995400, -0.912586036269462660, +-0.912606479365464800, -0.912626920179950730, -0.912647358712869840, -0.912667794964170050, -0.912688228933800860, -0.912708660621711080, -0.912729090027849630, -0.912749517152165460, +-0.912769941994607480, -0.912790364555124630, -0.912810784833665960, -0.912831202830180270, -0.912851618544616940, -0.912872031976924240, -0.912892443127051310, -0.912912851994947430, +-0.912933258580561400, -0.912953662883842500, -0.912974064904739200, -0.912994464643200660, -0.913014862099176040, -0.913035257272614140, -0.913055650163464130, -0.913076040771675030, +-0.913096429097195910, -0.913116815139975560, -0.913137198899963250, -0.913157580377108370, -0.913177959571359050, -0.913198336482664910, -0.913218711110974860, -0.913239083456238170, +-0.913259453518403650, -0.913279821297420910, -0.913300186793238210, -0.913320550005805030, -0.913340910935070530, -0.913361269580983740, -0.913381625943493810, -0.913401980022549800, +-0.913422331818100840, -0.913442681330095980, -0.913463028558484820, -0.913483373503215730, -0.913503716164238200, -0.913524056541501480, -0.913544394634954520, -0.913564730444546560, +-0.913585063970227210, -0.913605395211944730, -0.913625724169648820, -0.913646050843288650, -0.913666375232813240, -0.913686697338171980, -0.913707017159314020, -0.913727334696188390, +-0.913747649948744580, -0.913767962916931850, -0.913788273600698920, -0.913808581999995370, -0.913828888114770250, -0.913849191944972940, -0.913869493490552690, -0.913889792751459100, +-0.913910089727640540, -0.913930384419046840, -0.913950676825627250, -0.913970966947330820, -0.913991254784107030, -0.914011540335905150, -0.914031823602674430, -0.914052104584364030, +-0.914072383280923550, -0.914092659692302360, -0.914112933818449160, -0.914133205659313660, -0.914153475214845020, -0.914173742484992840, -0.914194007469706580, -0.914214270168935080, +-0.914234530582627710, -0.914254788710734180, -0.914275044553203630, -0.914295298109985440, -0.914315549381028990, -0.914335798366283650, -0.914356045065698900, -0.914376289479224000, +-0.914396531606808670, -0.914416771448401720, -0.914437009003952860, -0.914457244273411460, -0.914477477256727010, -0.914497707953848770, -0.914517936364726670, -0.914538162489309300, +-0.914558386327546600, -0.914578607879387940, -0.914598827144782690, -0.914619044123680450, -0.914639258816030480, -0.914659471221782480, -0.914679681340885730, -0.914699889173290260, +-0.914720094718944550, -0.914740297977798660, -0.914760498949802050, -0.914780697634904220, -0.914800894033054650, -0.914821088144203150, -0.914841279968298560, -0.914861469505290790, +-0.914881656755129340, -0.914901841717763790, -0.914922024393143630, -0.914942204781218350, -0.914962382881937650, -0.914982558695250910, -0.915002732221108170, -0.915022903459458250, +-0.915043072410251070, -0.915063239073436120, -0.915083403448963220, -0.915103565536781740, -0.915123725336841720, -0.915143882849091980, -0.915164038073482570, -0.915184191009963070, +-0.915204341658483080, -0.915224490018992200, -0.915244636091440130, -0.915264779875776480, -0.915284921371950940, -0.915305060579913010, -0.915325197499612830, -0.915345332130999220, +-0.915365464474022340, -0.915385594528631770, -0.915405722294777350, -0.915425847772408870, -0.915445970961475400, -0.915466091861926960, -0.915486210473713370, -0.915506326796784230, +-0.915526440831089360, -0.915546552576578240, -0.915566662033200810, -0.915586769200906760, -0.915606874079645690, -0.915626976669367880, -0.915647076970022230, -0.915667174981558920, +-0.915687270703927750, -0.915707364137078210, -0.915727455280960450, -0.915747544135524280, -0.915767630700718980, -0.915787714976494470, -0.915807796962800790, -0.915827876659587650, +-0.915847954066804750, -0.915868029184401910, -0.915888102012329060, -0.915908172550535920, -0.915928240798972840, -0.915948306757588650, -0.915968370426333720, -0.915988431805157880, +-0.916008490894011040, -0.916028547692842920, -0.916048602201603780, -0.916068654420242770, -0.916088704348710040, -0.916108751986955740, -0.916128797334929360, -0.916148840392581150, +-0.916168881159860730, -0.916188919636718110, -0.916208955823103240, -0.916228989718966380, -0.916249021324256670, -0.916269050638924390, -0.916289077662919450, -0.916309102396191790, +-0.916329124838691440, -0.916349144990368570, -0.916369162851172540, -0.916389178421053610, -0.916409191699961710, -0.916429202687846890, -0.916449211384658960, -0.916469217790348070, +-0.916489221904864150, -0.916509223728157130, -0.916529223260177050, -0.916549220500874280, -0.916569215450198090, -0.916589208108098850, -0.916609198474526710, -0.916629186549431480, +-0.916649172332763660, -0.916669155824472500, -0.916689137024508490, -0.916709115932821560, -0.916729092549361970, -0.916749066874079640, -0.916769038906924520, -0.916789008647846960, +-0.916808976096796790, -0.916828941253724160, -0.916848904118579560, -0.916868864691312350, -0.916888822971873020, -0.916908778960211500, -0.916928732656278170, -0.916948684060022940, +-0.916968633171396430, -0.916988579990347890, -0.917008524516827910, -0.917028466750786640, -0.917048406692174240, -0.917068344340940870, -0.917088279697036550, -0.917108212760411550, +-0.917128143531016020, -0.917148072008800440, -0.917167998193714420, -0.917187922085708320, -0.917207843684732400, -0.917227762990736940, -0.917247680003672070, -0.917267594723488290, +-0.917287507150135300, -0.917307417283563460, -0.917327325123723060, -0.917347230670564340, -0.917367133924037570, -0.917387034884093010, -0.917406933550680810, -0.917426829923751240, +-0.917446724003255000, -0.917466615789141570, -0.917486505281361660, -0.917506392479865430, -0.917526277384603240, -0.917546159995525360, -0.917566040312582490, -0.917585918335724000, +-0.917605794064900840, -0.917625667500063250, -0.917645538641161380, -0.917665407488145730, -0.917685274040966450, -0.917705138299574120, -0.917725000263918900, -0.917744859933951160, +-0.917764717309621610, -0.917784572390879960, -0.917804425177676910, -0.917824275669962720, -0.917844123867687880, -0.917863969770803090, -0.917883813379257950, -0.917903654693003390, +-0.917923493711989560, -0.917943330436167160, -0.917963164865486240, -0.917982996999897600, -0.918002826839351300, -0.918022654383798040, -0.918042479633188190, -0.918062302587472350, +-0.918082123246600550, -0.918101941610523280, -0.918121757679191350, -0.918141571452554820, -0.918161382930564480, -0.918181192113171060, -0.918200999000324260, -0.918220803591975000, +-0.918240605888073660, -0.918260405888570830, -0.918280203593417000, -0.918299999002562650, -0.918319792115958380, -0.918339582933554550, -0.918359371455302110, -0.918379157681150970, +-0.918398941611051840, -0.918418723244955440, -0.918438502582812120, -0.918458279624572600, -0.918478054370187810, -0.918497826819607450, -0.918517596972782570, -0.918537364829663640, +-0.918557130390201370, -0.918576893654346140, -0.918596654622048760, -0.918616413293259830, -0.918636169667929710, -0.918655923746009680, -0.918675675527449330, -0.918695425012199920, +-0.918715172200211930, -0.918734917091435950, -0.918754659685822710, -0.918774399983323110, -0.918794137983887320, -0.918813873687466030, -0.918833607094010070, -0.918853338203470150, +-0.918873067015796850, -0.918892793530940890, -0.918912517748852960, -0.918932239669483790, -0.918951959292783950, -0.918971676618704600, -0.918991391647195680, -0.919011104378208210, +-0.919030814811693130, -0.919050522947600920, -0.919070228785882740, -0.919089932326488720, -0.919109633569369810, -0.919129332514476820, -0.919149029161760440, -0.919168723511171630, +-0.919188415562660950, -0.919208105316179140, -0.919227792771677210, -0.919247477929105660, -0.919267160788415860, -0.919286841349557850, -0.919306519612482660, -0.919326195577141130, +-0.919345869243484160, -0.919365540611462580, -0.919385209681027440, -0.919404876452128870, -0.919424540924718260, -0.919444203098746190, -0.919463862974163600, -0.919483520550921420, +-0.919503175828970340, -0.919522828808261420, -0.919542479488745350, -0.919562127870373500, -0.919581773953095930, -0.919601417736863990, -0.919621059221628400, -0.919640698407340310, +-0.919660335293950300, -0.919679969881409990, -0.919699602169669280, -0.919719232158679570, -0.919738859848391770, -0.919758485238756920, -0.919778108329725730, -0.919797729121249350, +-0.919817347613278710, -0.919836963805764520, -0.919856577698658470, -0.919876189291910510, -0.919895798585472100, -0.919915405579294190, -0.919935010273327690, -0.919954612667523760, +-0.919974212761833670, -0.919993810556207660, -0.920013406050597120, -0.920032999244953080, -0.920052590139226470, -0.920072178733368440, -0.920091765027330030, -0.920111349021062170, +-0.920130930714515900, -0.920150510107642260, -0.920170087200392840, -0.920189661992717680, -0.920209234484568480, -0.920228804675896180, -0.920248372566651820, -0.920267938156786980, +-0.920287501446251820, -0.920307062434998050, -0.920326621122976470, -0.920346177510138470, -0.920365731596434870, -0.920385283381817130, -0.920404832866236090, -0.920424380049642890, +-0.920443924931988900, -0.920463467513225280, -0.920483007793302720, -0.920502545772172720, -0.920522081449786310, -0.920541614826094650, -0.920561145901048980, -0.920580674674600810, +-0.920600201146700490, -0.920619725317299850, -0.920639247186349710, -0.920658766753801650, -0.920678284019606500, -0.920697798983715730, -0.920717311646080510, -0.920736822006651860, +-0.920756330065381600, -0.920775835822220220, -0.920795339277119210, -0.920814840430029810, -0.920834339280903300, -0.920853835829691050, -0.920873330076344420, -0.920892822020814240, +-0.920912311663051870, -0.920931799003008810, -0.920951284040636310, -0.920970766775885520, -0.920990247208707810, -0.921009725339054450, -0.921029201166876810, -0.921048674692126590, +-0.921068145914754280, -0.921087614834711580, -0.921107081451949860, -0.921126545766420500, -0.921146007778074650, -0.921165467486864230, -0.921184924892739730, -0.921204379995652970, +-0.921223832795555200, -0.921243283292397910, -0.921262731486132360, -0.921282177376710030, -0.921301620964082300, -0.921321062248200430, -0.921340501229015900, -0.921359937906480520, +-0.921379372280544890, -0.921398804351160950, -0.921418234118279940, -0.921437661581853250, -0.921457086741832800, -0.921476509598169400, -0.921495930150814550, -0.921515348399720050, +-0.921534764344837050, -0.921554177986117160, -0.921573589323511850, -0.921592998356972610, -0.921612405086450810, -0.921631809511898050, -0.921651211633266020, -0.921670611450505660, +-0.921690008963568790, -0.921709404172406880, -0.921728797076971530, -0.921748187677214110, -0.921767575973086560, -0.921786961964539800, -0.921806345651525530, -0.921825727033995460, +-0.921845106111901070, -0.921864482885193960, -0.921883857353825610, -0.921903229517747610, -0.921922599376911460, -0.921941966931269290, -0.921961332180771810, -0.921980695125370950, +-0.922000055765018420, -0.922019414099665700, -0.922038770129264500, -0.922058123853766620, -0.922077475273123230, -0.922096824387286020, -0.922116171196206810, -0.922135515699837200, +-0.922154857898128680, -0.922174197791033160, -0.922193535378502130, -0.922212870660487180, -0.922232203636940470, -0.922251534307812810, -0.922270862673056360, -0.922290188732622810, +-0.922309512486463760, -0.922328833934530910, -0.922348153076776310, -0.922367469913150990, -0.922386784443607110, -0.922406096668096140, -0.922425406586569910, -0.922444714198980220, +-0.922464019505278790, -0.922483322505417200, -0.922502623199347390, -0.922521921587021070, -0.922541217668390150, -0.922560511443405900, -0.922579802912020460, -0.922599092074185330, +-0.922618378929852660, -0.922637663478974250, -0.922656945721501360, -0.922676225657386160, -0.922695503286580450, -0.922714778609035840, -0.922734051624704340, -0.922753322333537800, +-0.922772590735487790, -0.922791856830506460, -0.922811120618545420, -0.922830382099556920, -0.922849641273492120, -0.922868898140303150, -0.922888152699942070, -0.922907404952360570, +-0.922926654897510470, -0.922945902535344140, -0.922965147865812740, -0.922984390888868410, -0.923003631604463080, -0.923022870012548790, -0.923042106113077240, -0.923061339906000480, +-0.923080571391270310, -0.923099800568838780, -0.923119027438658040, -0.923138252000679340, -0.923157474254855060, -0.923176694201137130, -0.923195911839477470, -0.923215127169828010, +-0.923234340192141010, -0.923253550906367850, -0.923272759312460890, -0.923291965410371950, -0.923311169200053180, -0.923330370681456400, -0.923349569854533760, -0.923368766719237070, +-0.923387961275518590, -0.923407153523330470, -0.923426343462624200, -0.923445531093352030, -0.923464716415466010, -0.923483899428918290, -0.923503080133660780, -0.923522258529645870, +-0.923541434616825030, -0.923560608395150530, -0.923579779864574620, -0.923598949025049130, -0.923618115876526310, -0.923637280418958320, -0.923656442652296960, -0.923675602576494610, +-0.923694760191503210, -0.923713915497275220, -0.923733068493762130, -0.923752219180916430, -0.923771367558690050, -0.923790513627035350, -0.923809657385904700, -0.923828798835249490, +-0.923847937975022400, -0.923867074805175380, -0.923886209325660680, -0.923905341536430560, -0.923924471437436940, -0.923943599028632210, -0.923962724309968510, -0.923981847281397980, +-0.924000967942873120, -0.924020086294345510, -0.924039202335767750, -0.924058316067091990, -0.924077427488270380, -0.924096536599255500, -0.924115643399999080, -0.924134747890453470, +-0.924153850070570940, -0.924172949940303860, -0.924192047499604370, -0.924211142748424860, -0.924230235686717360, -0.924249326314434350, -0.924268414631527980, -0.924287500637950950, +-0.924306584333654760, -0.924325665718592200, -0.924344744792715440, -0.924363821555976850, -0.924382896008328570, -0.924401968149723530, -0.924421037980113210, -0.924440105499450330, +-0.924459170707687020, -0.924478233604775990, -0.924497294190669280, -0.924516352465319270, -0.924535408428678540, -0.924554462080699140, -0.924573513421333980, -0.924592562450534670, +-0.924611609168254020, -0.924630653574444290, -0.924649695669057970, -0.924668735452047420, -0.924687772923365350, -0.924706808082963460, -0.924725840930794570, -0.924744871466811170, +-0.924763899690965510, -0.924782925603210070, -0.924801949203497340, -0.924820970491779800, -0.924839989468009720, -0.924859006132139780, -0.924878020484122600, -0.924897032523910090, +-0.924916042251454960, -0.924935049666709700, -0.924954054769626890, -0.924973057560159240, -0.924992058038258570, -0.925011056203877800, -0.925030052056969310, -0.925049045597485800, +-0.925068036825379640, -0.925087025740603420, -0.925106012343109520, -0.925124996632850750, -0.925143978609779370, -0.925162958273848420, -0.925181935625009720, -0.925200910663216190, +-0.925219883388420430, -0.925238853800574910, -0.925257821899632570, -0.925276787685545440, -0.925295751158266230, -0.925314712317747650, -0.925333671163942380, -0.925352627696802930, +-0.925371581916281770, -0.925390533822331830, -0.925409483414905480, -0.925428430693955310, -0.925447375659434580, -0.925466318311295000, -0.925485258649489610, -0.925504196673971100, +-0.925523132384692080, -0.925542065781605250, -0.925560996864663530, -0.925579925633819080, -0.925598852089024700, -0.925617776230233340, -0.925636698057397460, -0.925655617570469770, +-0.925674534769403090, -0.925693449654150120, -0.925712362224663470, -0.925731272480896260, -0.925750180422800550, -0.925769086050329370, -0.925787989363435540, -0.925806890362071640, +-0.925825789046190620, -0.925844685415745380, -0.925863579470688090, -0.925882471210971890, -0.925901360636549490, -0.925920247747373690, -0.925939132543397330, -0.925958015024573090, +-0.925976895190853800, -0.925995773042192270, -0.926014648578541650, -0.926033521799854100, -0.926052392706082750, -0.926071261297180430, -0.926090127573099830, -0.926108991533794110, +-0.926127853179216090, -0.926146712509318130, -0.926165569524053380, -0.926184424223374770, -0.926203276607235120, -0.926222126675587230, -0.926240974428383930, -0.926259819865578370, +-0.926278662987123140, -0.926297503792971270, -0.926316342283076020, -0.926335178457389550, -0.926354012315865120, -0.926372843858455750, -0.926391673085114160, -0.926410499995793830, +-0.926429324590446800, -0.926448146869026550, -0.926466966831485880, -0.926485784477777740, -0.926504599807855270, -0.926523412821671170, -0.926542223519178700, -0.926561031900330570, +-0.926579837965079810, -0.926598641713379800, -0.926617443145182910, -0.926636242260442500, -0.926655039059111290, -0.926673833541142630, -0.926692625706489360, -0.926711415555104830, +-0.926730203086941430, -0.926748988301952510, -0.926767771200091130, -0.926786551781310310, -0.926805330045563200, -0.926824105992802630, -0.926842879622981840, -0.926861650936053880, +-0.926880419931972120, -0.926899186610689040, -0.926917950972157900, -0.926936713016331960, -0.926955472743164140, -0.926974230152607710, -0.926992985244616040, -0.927011738019141500, +-0.927030488476137670, -0.927049236615557600, -0.927067982437354440, -0.927086725941481340, -0.927105467127891440, -0.927124205996537890, -0.927142942547373840, -0.927161676780352660, +-0.927180408695427060, -0.927199138292550410, -0.927217865571675850, -0.927236590532756640, -0.927255313175746050, -0.927274033500597450, -0.927292751507263420, -0.927311467195697570, +-0.927330180565852920, -0.927348891617682970, -0.927367600351140740, -0.927386306766179500, -0.927405010862752510, -0.927423712640812910, -0.927442412100314080, -0.927461109241209610, +-0.927479804063451980, -0.927498496566994790, -0.927517186751791510, -0.927535874617795190, -0.927554560164959520, -0.927573243393236990, -0.927591924302581530, -0.927610602892946170, +-0.927629279164284280, -0.927647953116549240, -0.927666624749694300, -0.927685294063672840, -0.927703961058438110, -0.927722625733943480, -0.927741288090142670, -0.927759948126988250, +-0.927778605844433950, -0.927797261242433220, -0.927815914320939240, -0.927834565079905470, -0.927853213519285740, -0.927871859639032510, -0.927890503439099730, -0.927909144919440650, +-0.927927784080008640, -0.927946420920757300, -0.927965055441639870, -0.927983687642609740, -0.928002317523620390, -0.928020945084625630, -0.928039570325578160, -0.928058193246431800, +-0.928076813847139910, -0.928095432127655990, -0.928114048087933520, -0.928132661727926300, -0.928151273047587040, -0.928169882046869570, -0.928188488725727460, -0.928207093084113980, +-0.928225695121982940, -0.928244294839287610, -0.928262892235981460, -0.928281487312018210, -0.928300080067351540, -0.928318670501934280, -0.928337258615720360, -0.928355844408663370, +-0.928374427880716670, -0.928393009031833970, -0.928411587861969090, -0.928430164371074840, -0.928448738559105150, -0.928467310426013710, -0.928485879971754020, -0.928504447196279560, +-0.928523012099544020, -0.928541574681500890, -0.928560134942103880, -0.928578692881306460, -0.928597248499062670, -0.928615801795325440, -0.928634352770048800, -0.928652901423186130, +-0.928671447754691240, -0.928689991764518160, -0.928708533452619720, -0.928727072818949950, -0.928745609863462440, -0.928764144586110900, -0.928782676986849020, -0.928801207065630520, +-0.928819734822408980, -0.928838260257138000, -0.928856783369771510, -0.928875304160263320, -0.928893822628566570, -0.928912338774635190, -0.928930852598423010, -0.928949364099883710, +-0.928967873278971010, -0.928986380135638940, -0.929004884669840660, -0.929023386881530080, -0.929041886770661020, -0.929060384337187290, -0.929078879581062610, -0.929097372502240670, +-0.929115863100675400, -0.929134351376320390, -0.929152837329129790, -0.929171320959056860, -0.929189802266055630, -0.929208281250079820, -0.929226757911083330, -0.929245232249020000, +-0.929263704263843860, -0.929282173955508160, -0.929300641323967060, -0.929319106369174360, -0.929337569091083780, -0.929356029489649350, -0.929374487564824880, -0.929392943316564190, +-0.929411396744821090, -0.929429847849549850, -0.929448296630703720, -0.929466743088236740, -0.929485187222102940, -0.929503629032256140, -0.929522068518650380, -0.929540505681239690, +-0.929558940519977450, -0.929577373034817800, -0.929595803225714780, -0.929614231092622200, -0.929632656635494100, -0.929651079854284300, -0.929669500748946830, -0.929687919319435620, +-0.929706335565704590, -0.929724749487708110, -0.929743161085399340, -0.929761570358732750, -0.929779977307662150, -0.929798381932141700, -0.929816784232125550, -0.929835184207567170, +-0.929853581858420820, -0.929871977184640430, -0.929890370186180150, -0.929908760862994010, -0.929927149215035830, -0.929945535242259870, -0.929963918944620050, -0.929982300322070520, +-0.930000679374565430, -0.930019056102058370, -0.930037430504503710, -0.930055802581855500, -0.930074172334067640, -0.930092539761094520, -0.930110904862890280, -0.930129267639408400, +-0.930147628090603470, -0.930165986216429430, -0.930184342016840420, -0.930202695491790470, -0.930221046641233950, -0.930239395465124690, -0.930257741963416930, -0.930276086136065160, +-0.930294427983022980, -0.930312767504244520, -0.930331104699684270, -0.930349439569296280, -0.930367772113034670, -0.930386102330853950, -0.930404430222707580, -0.930422755788550160, +-0.930441079028335950, -0.930459399942018980, -0.930477718529553410, -0.930496034790893710, -0.930514348725993810, -0.930532660334808080, -0.930550969617291000, -0.930569276573396280, +-0.930587581203078270, -0.930605883506291250, -0.930624183482989590, -0.930642481133127530, -0.930660776456659570, -0.930679069453539290, -0.930697360123721280, -0.930715648467160040, +-0.930733934483809590, -0.930752218173624300, -0.930770499536558440, -0.930788778572566370, -0.930807055281602350, -0.930825329663620640, -0.930843601718575940, -0.930861871446421960, +-0.930880138847113290, -0.930898403920604300, -0.930916666666849250, -0.930934927085802940, -0.930953185177418870, -0.930971440941651960, -0.930989694378456360, -0.931007945487786540, +-0.931026194269596870, -0.931044440723841740, -0.931062684850475500, -0.931080926649452520, -0.931099166120727180, -0.931117403264254300, -0.931135638079987670, -0.931153870567881790, +-0.931172100727891360, -0.931190328559970640, -0.931208554064074100, -0.931226777240156460, -0.931244998088171520, -0.931263216608074210, -0.931281432799818790, -0.931299646663359740, +-0.931317858198651650, -0.931336067405648890, -0.931354274284305950, -0.931372478834577410, -0.931390681056417870, -0.931408880949781360, -0.931427078514622700, -0.931445273750896250, +-0.931463466658556620, -0.931481657237558380, -0.931499845487856360, -0.931518031409404370, -0.931536215002157220, -0.931554396266069620, -0.931572575201095930, -0.931590751807190980, +-0.931608926084309010, -0.931627098032404730, -0.931645267651432740, -0.931663434941347960, -0.931681599902104200, -0.931699762533656380, -0.931717922835959220, -0.931736080808967300, +-0.931754236452635110, -0.931772389766917670, -0.931790540751768930, -0.931808689407143900, -0.931826835732997070, -0.931844979729283150, -0.931863121395956840, -0.931881260732972730, +-0.931899397740285410, -0.931917532417849580, -0.931935664765620060, -0.931953794783551560, -0.931971922471598320, -0.931990047829715170, -0.932008170857857030, -0.932026291555978380, +-0.932044409924034370, -0.932062525961979030, -0.932080639669767290, -0.932098751047354070, -0.932116860094693860, -0.932134966811741570, -0.932153071198451810, -0.932171173254779490, +-0.932189272980679110, -0.932207370376105570, -0.932225465441013920, -0.932243558175358310, -0.932261648579093880, -0.932279736652175230, -0.932297822394557270, -0.932315905806194720, +-0.932333986887042830, -0.932352065637055530, -0.932370142056188070, -0.932388216144395380, -0.932406287901632050, -0.932424357327853000, -0.932442424423013060, -0.932460489187067140, +-0.932478551619969950, -0.932496611721676640, -0.932514669492141570, -0.932532724931319780, -0.932550778039166190, -0.932568828815635630, -0.932586877260683010, -0.932604923374263480, +-0.932622967156331420, -0.932641008606841850, -0.932659047725749810, -0.932677084513010120, -0.932695118968577710, -0.932713151092407600, -0.932731180884454500, -0.932749208344673560, +-0.932767233473019820, -0.932785256269447640, -0.932803276733912390, -0.932821294866369000, -0.932839310666772280, -0.932857324135077380, -0.932875335271239450, -0.932893344075212850, +-0.932911350546952840, -0.932929354686414470, -0.932947356493552760, -0.932965355968322640, -0.932983353110679150, -0.933001347920577320, -0.933019340397972070, -0.933037330542818450, +-0.933055318355071830, -0.933073303834686560, -0.933091286981618140, -0.933109267795821370, -0.933127246277251520, -0.933145222425863840, -0.933163196241612810, -0.933181167724453810, +-0.933199136874341860, -0.933217103691232010, -0.933235068175079510, -0.933253030325839280, -0.933270990143466480, -0.933288947627916140, -0.933306902779143520, -0.933324855597103990, +-0.933342806081751910, -0.933360754233042880, -0.933378700050931930, -0.933396643535374220, -0.933414584686324990, -0.933432523503739510, -0.933450459987572480, -0.933468394137779270, +-0.933486325954315020, -0.933504255437135000, -0.933522182586194350, -0.933540107401448220, -0.933558029882851860, -0.933575950030360420, -0.933593867843929390, -0.933611783323513470, +-0.933629696469068020, -0.933647607280548300, -0.933665515757909570, -0.933683421901107090, -0.933701325710096340, -0.933719227184832020, -0.933737126325269510, -0.933755023131364270, +-0.933772917603071460, -0.933790809740346450, -0.933808699543144270, -0.933826587011420410, -0.933844472145130110, -0.933862354944228870, -0.933880235408671490, -0.933898113538413450, +-0.933915989333410130, -0.933933862793616900, -0.933951733918989000, -0.933969602709482150, -0.933987469165050820, -0.934005333285650940, -0.934023195071237660, -0.934041054521766450, +-0.934058911637192570, -0.934076766417471390, -0.934094618862558290, -0.934112468972408740, -0.934130316746977880, -0.934148162186221650, -0.934166005290094640, -0.934183846058552650, +-0.934201684491551050, -0.934219520589045230, -0.934237354350990980, -0.934255185777342900, -0.934273014868056920, -0.934290841623088510, -0.934308666042392820, -0.934326488125925560, +-0.934344307873642090, -0.934362125285497780, -0.934379940361448220, -0.934397753101448790, -0.934415563505455290, -0.934433371573422540, -0.934451177305306470, -0.934468980701062320, +-0.934486781760645810, -0.934504580484012300, -0.934522376871117610, -0.934540170921916770, -0.934557962636365480, -0.934575752014419230, -0.934593539056033600, -0.934611323761164180, +-0.934629106129766460, -0.934646886161795920, -0.934664663857208140, -0.934682439215959060, -0.934700212238003590, -0.934717982923297550, -0.934735751271796640, -0.934753517283456240, +-0.934771280958232030, -0.934789042296080060, -0.934806801296955040, -0.934824557960813100, -0.934842312287609720, -0.934860064277300620, -0.934877813929841370, -0.934895561245187470, +-0.934913306223294830, -0.934931048864118820, -0.934948789167615480, -0.934966527133739840, -0.934984262762447950, -0.935001996053695380, -0.935019727007437850, -0.935037455623630940, +-0.935055181902230800, -0.935072905843192360, -0.935090627446471530, -0.935108346712024250, -0.935126063639806100, -0.935143778229772790, -0.935161490481880020, -0.935179200396083490, +-0.935196907972339010, -0.935214613210602290, -0.935232316110829240, -0.935250016672975250, -0.935267714896996120, -0.935285410782847660, -0.935303104330485690, -0.935320795539866360, +-0.935338484410944690, -0.935356170943676730, -0.935373855138018410, -0.935391536993925520, -0.935409216511353670, -0.935426893690258780, -0.935444568530596770, -0.935462241032323230, +-0.935479911195394090, -0.935497579019765600, -0.935515244505392700, -0.935532907652231850, -0.935550568460238540, -0.935568226929368920, -0.935585883059579130, -0.935603536850824200, +-0.935621188303060400, -0.935638837416243760, -0.935656484190329870, -0.935674128625274880, -0.935691770721034600, -0.935709410477564840, -0.935727047894821530, -0.935744682972760590, +-0.935762315711338280, -0.935779946110509850, -0.935797574170231570, -0.935815199890459470, -0.935832823271149250, -0.935850444312256950, -0.935868063013738930, -0.935885679375550340, +-0.935903293397647660, -0.935920905079986710, -0.935938514422523400, -0.935956121425214000, -0.935973726088014100, -0.935991328410880060, -0.936008928393767590, -0.936026526036633170, +-0.936044121339432040, -0.936061714302120600, -0.936079304924654960, -0.936096893206991080, -0.936114479149084850, -0.936132062750892890, -0.936149644012370330, -0.936167222933473650, +-0.936184799514159010, -0.936202373754382310, -0.936219945654099720, -0.936237515213267260, -0.936255082431840970, -0.936272647309777000, -0.936290209847031710, -0.936307770043560580, +-0.936325327899320100, -0.936342883414266190, -0.936360436588355110, -0.936377987421542990, -0.936395535913786210, -0.936413082065040260, -0.936430625875261490, -0.936448167344406280, +-0.936465706472430660, -0.936483243259290780, -0.936500777704942670, -0.936518309809342700, -0.936535839572447020, -0.936553366994211660, -0.936570892074593210, -0.936588414813547270, +-0.936605935211030190, -0.936623453266998360, -0.936640968981407810, -0.936658482354215230, -0.936675993385376100, -0.936693502074847030, -0.936711008422584150, -0.936728512428543820, +-0.936746014092682100, -0.936763513414955450, -0.936781010395319910, -0.936798505033731970, -0.936815997330147640, -0.936833487284523760, -0.936850974896815790, -0.936868460166980330, +-0.936885943094973750, -0.936903423680752300, -0.936920901924272350, -0.936938377825490500, -0.936955851384362330, -0.936973322600844430, -0.936990791474893390, -0.937008258006465260, +-0.937025722195516500, -0.937043184042003490, -0.937060643545882480, -0.937078100707109840, -0.937095555525642390, -0.937113008001435600, -0.937130458134446290, -0.937147905924630930, +-0.937165351371945790, -0.937182794476347230, -0.937200235237791950, -0.937217673656235870, -0.937235109731635490, -0.937252543463947490, -0.937269974853128020, -0.937287403899133560, +-0.937304830601920710, -0.937322254961445720, -0.937339676977665180, -0.937357096650535680, -0.937374513980013150, -0.937391928966054390, -0.937409341608615660, -0.937426751907653680, +-0.937444159863124790, -0.937461565474985830, -0.937478968743192700, -0.937496369667702110, -0.937513768248470550, -0.937531164485454590, -0.937548558378610730, -0.937565949927895440, +-0.937583339133265300, -0.937600725994676810, -0.937618110512086540, -0.937635492685451320, -0.937652872514727060, -0.937670249999870480, -0.937687625140838370, -0.937704997937587210, +-0.937722368390073950, -0.937739736498254260, -0.937757102262085420, -0.937774465681523670, -0.937791826756525840, -0.937809185487048500, -0.937826541873048150, -0.937843895914481360, +-0.937861247611304850, -0.937878596963475310, -0.937895943970949550, -0.937913288633683620, -0.937930630951634430, -0.937947970924758680, -0.937965308553013080, -0.937982643836354100, +-0.937999976774738900, -0.938017307368123390, -0.938034635616464720, -0.938051961519719370, -0.938069285077844040, -0.938086606290795650, -0.938103925158530690, -0.938121241681005860, +-0.938138555858177960, -0.938155867690004030, -0.938173177176440110, -0.938190484317443230, -0.938207789112970090, -0.938225091562977510, -0.938242391667422290, -0.938259689426261260, +-0.938276984839450770, -0.938294277906947860, -0.938311568628709130, -0.938328857004691600, -0.938346143034851870, -0.938363426719146850, -0.938380708057533150, -0.938397987049967800, +-0.938415263696407710, -0.938432537996809150, -0.938449809951129250, -0.938467079559324850, -0.938484346821352730, -0.938501611737169840, -0.938518874306733090, -0.938536134529998960, +-0.938553392406924370, -0.938570647937466360, -0.938587901121581750, -0.938605151959227450, -0.938622400450360160, -0.938639646594936930, -0.938656890392914560, -0.938674131844249970, +-0.938691370948900320, -0.938708607706821960, -0.938725842117972160, -0.938743074182307620, -0.938760303899785490, -0.938777531270362900, -0.938794756293996110, -0.938811978970642500, +-0.938829199300258880, -0.938846417282802380, -0.938863632918229720, -0.938880846206498030, -0.938898057147564140, -0.938915265741385170, -0.938932471987918070, -0.938949675887120080, +-0.938966877438947580, -0.938984076643357920, -0.939001273500308040, -0.939018468009754970, -0.939035660171655740, -0.939052849985967720, -0.939070037452647170, -0.939087222571651560, +-0.939104405342937930, -0.939121585766463210, -0.939138763842184640, -0.939155939570059050, -0.939173112950043690, -0.939190283982095480, -0.939207452666171890, -0.939224619002229420, +-0.939241782990225320, -0.939258944630116830, -0.939276103921861010, -0.939293260865414870, -0.939310415460735900, -0.939327567707780590, -0.939344717606506290, -0.939361865156870260, +-0.939379010358829540, -0.939396153212341380, -0.939413293717362710, -0.939430431873850890, -0.939447567681762960, -0.939464701141056400, -0.939481832251687800, -0.939498961013614630, +-0.939516087426794040, -0.939533211491183300, -0.939550333206739420, -0.939567452573420110, -0.939584569591181860, -0.939601684259982140, -0.939618796579778200, -0.939635906550527310, +-0.939653014172186610, -0.939670119444713460, -0.939687222368064900, -0.939704322942198300, -0.939721421167071020, -0.939738517042640330, -0.939755610568863140, -0.939772701745696940, +-0.939789790573098860, -0.939806877051026390, -0.939823961179437120, -0.939841042958287520, -0.939858122387535300, -0.939875199467137820, -0.939892274197052350, -0.939909346577236240, +-0.939926416607646640, -0.939943484288241150, -0.939960549618976900, -0.939977612599811160, -0.939994673230701850, -0.940011731511605440, -0.940028787442479750, -0.940045841023282150, +-0.940062892253969880, -0.940079941134500330, -0.940096987664831300, -0.940114031844919480, -0.940131073674722590, -0.940148113154198000, -0.940165150283303160, -0.940182185061995470, +-0.940199217490232280, -0.940216247567970950, -0.940233275295169090, -0.940250300671784390, -0.940267323697773550, -0.940284344373094490, -0.940301362697704480, -0.940318378671561090, +-0.940335392294621820, -0.940352403566844350, -0.940369412488185510, -0.940386419058603210, -0.940403423278054820, -0.940420425146497820, -0.940437424663889800, -0.940454421830188240, +-0.940471416645350610, -0.940488409109334510, -0.940505399222097640, -0.940522386983596910, -0.940539372393790260, -0.940556355452635160, -0.940573336160089200, -0.940590314516109970, +-0.940607290520655170, -0.940624264173681830, -0.940641235475147890, -0.940658204425010800, -0.940675171023228170, -0.940692135269757700, -0.940709097164556860, -0.940726056707583250, +-0.940743013898794560, -0.940759968738148270, -0.940776921225602410, -0.940793871361113920, -0.940810819144640710, -0.940827764576140590, -0.940844707655570930, -0.940861648382889770, +-0.940878586758054360, -0.940895522781022290, -0.940912456451751590, -0.940929387770199630, -0.940946316736324230, -0.940963243350083080, -0.940980167611433770, -0.940997089520334010, +-0.941014009076741600, -0.941030926280614470, -0.941047841131909650, -0.941064753630585280, -0.941081663776599080, -0.941098571569908620, -0.941115477010471820, -0.941132380098246620, +-0.941149280833190050, -0.941166179215260360, -0.941183075244415250, -0.941199968920612420, -0.941216860243809680, -0.941233749213964850, -0.941250635831035520, -0.941267520094979710, +-0.941284402005755360, -0.941301281563319710, -0.941318158767630810, -0.941335033618646570, -0.941351906116324690, -0.941368776260623100, -0.941385644051499830, -0.941402509488912240, +-0.941419372572818270, -0.941436233303175940, -0.941453091679942950, -0.941469947703077240, -0.941486801372536710, -0.941503652688279180, -0.941520501650262460, -0.941537348258444930, +-0.941554192512783610, -0.941571034413236750, -0.941587873959762400, -0.941604711152318360, -0.941621545990862560, -0.941638378475353140, -0.941655208605747470, -0.941672036382003810, +-0.941688861804080070, -0.941705684871934180, -0.941722505585524060, -0.941739323944807750, -0.941756139949743050, -0.941772953600288010, -0.941789764896400540, -0.941806573838039010, +-0.941823380425160780, -0.941840184657724010, -0.941856986535686840, -0.941873786059007180, -0.941890583227643410, -0.941907378041552890, -0.941924170500693880, -0.941940960605024410, +-0.941957748354502520, -0.941974533749086350, -0.941991316788733820, -0.942008097473402970, -0.942024875803051940, -0.942041651777638660, -0.942058425397121480, -0.942075196661458110, +-0.942091965570606590, -0.942108732124525280, -0.942125496323172110, -0.942142258166505100, -0.942159017654482840, -0.942175774787062710, -0.942192529564203190, -0.942209281985862290, +-0.942226032051998170, -0.942242779762568980, -0.942259525117532970, -0.942276268116847950, -0.942293008760472390, -0.942309747048364570, -0.942326482980482050, -0.942343216556783440, +-0.942359947777226650, -0.942376676641770050, -0.942393403150371790, -0.942410127302990230, -0.942426849099583190, -0.942443568540108910, -0.942460285624525770, -0.942477000352791920, +-0.942493712724865480, -0.942510422740704850, -0.942527130400268140, -0.942543835703513630, -0.942560538650399790, -0.942577239240884320, -0.942593937474925700, -0.942610633352482300, +-0.942627326873512250, -0.942644018037974040, -0.942660706845825920, -0.942677393297025820, -0.942694077391532210, -0.942710759129303360, -0.942727438510297720, -0.942744115534473350, +-0.942760790201788820, -0.942777462512202290, -0.942794132465672010, -0.942810800062156450, -0.942827465301614210, -0.942844128184003090, -0.942860788709281470, -0.942877446877408040, +-0.942894102688340950, -0.942910756142038790, -0.942927407238459580, -0.942944055977561810, -0.942960702359303850, -0.942977346383644170, -0.942993988050541130, -0.943010627359953110, +-0.943027264311838590, -0.943043898906155810, -0.943060531142863370, -0.943077161021919850, -0.943093788543283180, -0.943110413706911950, -0.943127036512764750, -0.943143656960799940, +-0.943160275050975990, -0.943176890783251620, -0.943193504157584740, -0.943210115173934160, -0.943226723832258250, -0.943243330132515490, -0.943259934074664460, -0.943276535658663650, +-0.943293134884471420, -0.943309731752046350, -0.943326326261347270, -0.943342918412332090, -0.943359508204959510, -0.943376095639188340, -0.943392680714976840, -0.943409263432283600, +-0.943425843791067530, -0.943442421791286570, -0.943458997432899520, -0.943475570715864960, -0.943492141640141500, -0.943508710205687720, -0.943525276412462200, -0.943541840260423430, +-0.943558401749530100, -0.943574960879741020, -0.943591517651014230, -0.943608072063308660, -0.943624624116582880, -0.943641173810795600, -0.943657721145905400, -0.943674266121871110, +-0.943690808738650970, -0.943707348996203680, -0.943723886894488160, -0.943740422433462790, -0.943756955613086370, -0.943773486433317710, -0.943790014894115180, -0.943806540995437700, +-0.943823064737243870, -0.943839586119492590, -0.943856105142142130, -0.943872621805151300, -0.943889136108479020, -0.943905648052083880, -0.943922157635924910, -0.943938664859960250, +-0.943955169724148950, -0.943971672228449690, -0.943988172372821290, -0.944004670157222450, -0.944021165581611870, -0.944037658645948460, -0.944054149350190830, -0.944070637694297890, +-0.944087123678228670, -0.944103607301941320, -0.944120088565394870, -0.944136567468548350, -0.944153044011360240, -0.944169518193789690, -0.944185990015795510, -0.944202459477336160, +-0.944218926578370590, -0.944235391318857700, -0.944251853698756420, -0.944268313718025440, -0.944284771376623590, -0.944301226674510000, -0.944317679611643260, -0.944334130187982510, +-0.944350578403486240, -0.944367024258113590, -0.944383467751823250, -0.944399908884574370, -0.944416347656325540, -0.944432784067036350, -0.944449218116664710, -0.944465649805170120, +-0.944482079132511480, -0.944498506098647490, -0.944514930703537310, -0.944531352947139860, -0.944547772829413930, -0.944564190350318580, -0.944580605509813150, -0.944597018307855810, +-0.944613428744405900, -0.944629836819422470, -0.944646242532864440, -0.944662645884690840, -0.944679046874860930, -0.944695445503333060, -0.944711841770066620, -0.944728235675020510, +-0.944744627218153890, -0.944761016399425670, -0.944777403218794890, -0.944793787676220580, -0.944810169771661880, -0.944826549505077720, -0.944842926876427460, -0.944859301885669580, +-0.944875674532763440, -0.944892044817668200, -0.944908412740342760, -0.944924778300746620, -0.944941141498838230, -0.944957502334576980, -0.944973860807922010, -0.944990216918832340, +-0.945006570667267120, -0.945022922053185500, -0.945039271076546620, -0.945055617737309510, -0.945071962035433310, -0.945088303970877620, -0.945104643543600800, -0.945120980753562430, +-0.945137315600721560, -0.945153648085037320, -0.945169978206469420, -0.945186305964976210, -0.945202631360517190, -0.945218954393051590, -0.945235275062538680, -0.945251593368937600, +-0.945267909312207390, -0.945284222892307510, -0.945300534109197120, -0.945316842962835360, -0.945333149453181700, -0.945349453580194950, -0.945365755343834600, -0.945382054744059790, +-0.945398351780829870, -0.945414646454104110, -0.945430938763841990, -0.945447228710002200, -0.945463516292544330, -0.945479801511427740, -0.945496084366611590, -0.945512364858055230, +-0.945528642985718040, -0.945544918749559150, -0.945561192149538040, -0.945577463185614200, -0.945593731857746420, -0.945609998165894310, -0.945626262110017210, -0.945642523690074400, +-0.945658782906025340, -0.945675039757829630, -0.945691294245445960, -0.945707546368834140, -0.945723796127953430, -0.945740043522763200, -0.945756288553222800, -0.945772531219291720, +-0.945788771520929440, -0.945805009458095090, -0.945821245030748270, -0.945837478238848560, -0.945853709082355000, -0.945869937561227060, -0.945886163675424330, -0.945902387424906180, +-0.945918608809632300, -0.945934827829561620, -0.945951044484653950, -0.945967258774868650, -0.945983470700165200, -0.945999680260502960, -0.946015887455841640, -0.946032092286140600, +-0.946048294751359320, -0.946064494851457270, -0.946080692586394270, -0.946096887956129230, -0.946113080960622080, -0.946129271599832070, -0.946145459873719010, -0.946161645782242490, +-0.946177829325361650, -0.946194010503036200, -0.946210189315225710, -0.946226365761889790, -0.946242539842988010, -0.946258711558479740, -0.946274880908324790, -0.946291047892482640, +-0.946307212510912770, -0.946323374763575310, -0.946339534650428970, -0.946355692171433890, -0.946371847326549550, -0.946388000115735650, -0.946404150538951660, -0.946420298596157620, +-0.946436444287312550, -0.946452587612376380, -0.946468728571308700, -0.946484867164069210, -0.946501003390617600, -0.946517137250913470, -0.946533268744916390, -0.946549397872586300, +-0.946565524633882880, -0.946581649028765400, -0.946597771057193890, -0.946613890719127830, -0.946630008014527120, -0.946646122943351380, -0.946662235505560500, -0.946678345701113870, +-0.946694453529971390, -0.946710558992092670, -0.946726662087437610, -0.946742762815965920, -0.946758861177637300, -0.946774957172411560, -0.946791050800248390, -0.946807142061107940, +-0.946823230954949250, -0.946839317481732560, -0.946855401641417570, -0.946871483433963990, -0.946887562859331840, -0.946903639917480940, -0.946919714608370770, -0.946935786931961230, +-0.946951856888212260, -0.946967924477083670, -0.946983989698535140, -0.947000052552526840, -0.947016113039018230, -0.947032171157969450, -0.947048226909340210, -0.947064280293090640, +-0.947080331309180120, -0.947096379957568790, -0.947112426238216560, -0.947128470151083150, -0.947144511696128900, -0.947160550873313080, -0.947176587682595940, -0.947192622123937290, +-0.947208654197297050, -0.947224683902635260, -0.947240711239911600, -0.947256736209086350, -0.947272758810119190, -0.947288779042970040, -0.947304796907599390, -0.947320812403966370, +-0.947336825532031360, -0.947352836291754150, -0.947368844683095010, -0.947384850706013750, -0.947400854360470610, -0.947416855646424970, -0.947432854563837300, -0.947448851112667410, +-0.947464845292875450, -0.947480837104421440, -0.947496826547265190, -0.947512813621366970, -0.947528798326686680, -0.947544780663184700, -0.947560760630820510, -0.947576738229554460, +-0.947592713459346480, -0.947608686320156710, -0.947624656811945300, -0.947640624934672380, -0.947656590688297770, -0.947672554072781610, -0.947688515088084050, -0.947704473734165330, +-0.947720430010985270, -0.947736383918504230, -0.947752335456682140, -0.947768284625479350, -0.947784231424856020, -0.947800175854771830, -0.947816117915187270, -0.947832057606062370, +-0.947847994927357380, -0.947863929879032340, -0.947879862461047720, -0.947895792673363210, -0.947911720515939300, -0.947927645988736020, -0.947943569091713620, -0.947959489824832250, +-0.947975408188052260, -0.947991324181333690, -0.948007237804636800, -0.948023149057921840, -0.948039057941149290, -0.948054964454278840, -0.948070868597270850, -0.948086770370085820, +-0.948102669772683870, -0.948118566805025490, -0.948134461467070370, -0.948150353758779100, -0.948166243680112040, -0.948182131231029230, -0.948198016411491260, -0.948213899221458160, +-0.948229779660890280, -0.948245657729748000, -0.948261533427991580, -0.948277406755581590, -0.948293277712477730, -0.948309146298640830, -0.948325012514031010, -0.948340876358608640, +-0.948356737832333980, -0.948372596935167960, -0.948388453667070030, -0.948404308028000910, -0.948420160017921180, -0.948436009636790980, -0.948451856884570680, -0.948467701761220860, +-0.948483544266701670, -0.948499384400973700, -0.948515222163997640, -0.948531057555733080, -0.948546890576140940, -0.948562721225181590, -0.948578549502815390, -0.948594375409002820, +-0.948610198943704690, -0.948626020106880690, -0.948641838898491630, -0.948657655318497990, -0.948673469366860260, -0.948689281043538780, -0.948705090348494150, -0.948720897281686850, +-0.948736701843077230, -0.948752504032626120, -0.948768303850293540, -0.948784101296040180, -0.948799896369826530, -0.948815689071613180, -0.948831479401360590, -0.948847267359029580, +-0.948863052944580070, -0.948878836157972970, -0.948894616999168770, -0.948910395468128050, -0.948926171564811400, -0.948941945289179190, -0.948957716641192220, -0.948973485620810960, +-0.948989252227995910, -0.949005016462708070, -0.949020778324907390, -0.949036537814554770, -0.949052294931610810, -0.949068049676036090, -0.949083802047791520, -0.949099552046837160, +-0.949115299673134020, -0.949131044926642460, -0.949146787807323420, -0.949162528315137370, -0.949178266450044990, -0.949194002212007000, -0.949209735600983980, -0.949225466616936630, +-0.949241195259825870, -0.949256921529611830, -0.949272645426255450, -0.949288366949717520, -0.949304086099958640, -0.949319802876939620, -0.949335517280621270, -0.949351229310963940, +-0.949366938967928450, -0.949382646251475730, -0.949398351161566230, -0.949414053698161010, -0.949429753861220640, -0.949445451650705820, -0.949461147066577360, -0.949476840108796290, +-0.949492530777322870, -0.949508219072118240, -0.949523904993142990, -0.949539588540357920, -0.949555269713723840, -0.949570948513202010, -0.949586624938752450, -0.949602298990336320, +-0.949617970667914420, -0.949633639971447670, -0.949649306900896770, -0.949664971456222640, -0.949680633637386080, -0.949696293444347920, -0.949711950877069280, -0.949727605935510530, +-0.949743258619632710, -0.949758908929396740, -0.949774556864763640, -0.949790202425694010, -0.949805845612149200, -0.949821486424089480, -0.949837124861475980, -0.949852760924269730, +-0.949868394612431670, -0.949884025925922470, -0.949899654864703290, -0.949915281428734940, -0.949930905617978440, -0.949946527432394610, -0.949962146871944800, -0.949977763936589280, +-0.949993378626289410, -0.950008990941006100, -0.950024600880700290, -0.950040208445333210, -0.950055813634865350, -0.950071416449258080, -0.950087016888472080, -0.950102614952468620, +-0.950118210641208720, -0.950133803954653190, -0.950149394892763180, -0.950164983455499600, -0.950180569642823600, -0.950196153454696550, -0.950211734891078800, -0.950227313951931610, +-0.950242890637216230, -0.950258464946893590, -0.950274036880924820, -0.950289606439271180, -0.950305173621893370, -0.950320738428752530, -0.950336300859809800, -0.950351860915026440, +-0.950367418594363360, -0.950382973897781700, -0.950398526825242620, -0.950414077376707240, -0.950429625552136950, -0.950445171351492310, -0.950460714774734820, -0.950476255821825490, +-0.950491794492725470, -0.950507330787396020, -0.950522864705798500, -0.950538396247893490, -0.950553925413642590, -0.950569452203006810, -0.950584976615947430, -0.950600498652425570, +-0.950616018312402500, -0.950631535595839460, -0.950647050502697490, -0.950662563032938170, -0.950678073186522090, -0.950693580963410940, -0.950709086363565880, -0.950724589386948040, +-0.950740090033518670, -0.950755588303239360, -0.950771084196070930, -0.950786577711974720, -0.950802068850912010, -0.950817557612844140, -0.950833043997732500, -0.950848528005538100, +-0.950864009636222420, -0.950879488889746720, -0.950894965766072350, -0.950910440265160810, -0.950925912386972880, -0.950941382131470170, -0.950956849498614030, -0.950972314488365720, +-0.950987777100686940, -0.951003237335538490, -0.951018695192881850, -0.951034150672678600, -0.951049603774889900, -0.951065054499477090, -0.951080502846401780, -0.951095948815625200, +-0.951111392407108620, -0.951126833620813740, -0.951142272456701910, -0.951157708914734170, -0.951173142994872210, -0.951188574697077290, -0.951204004021311000, -0.951219430967534700, +-0.951234855535710190, -0.951250277725798070, -0.951265697537760360, -0.951281114971558430, -0.951296530027153750, -0.951311942704507580, -0.951327353003581730, -0.951342760924337450, +-0.951358166466736210, -0.951373569630739820, -0.951388970416309320, -0.951404368823406290, -0.951419764851992420, -0.951435158502029090, -0.951450549773477980, -0.951465938666300690, +-0.951481325180458250, -0.951496709315912460, -0.951512091072625020, -0.951527470450557190, -0.951542847449670880, -0.951558222069927350, -0.951573594311288180, -0.951588964173715190, +-0.951604331657169960, -0.951619696761613620, -0.951635059487008110, -0.951650419833314890, -0.951665777800495660, -0.951681133388512010, -0.951696486597325750, -0.951711837426898020, +-0.951727185877190630, -0.951742531948165380, -0.951757875639783760, -0.951773216952007450, -0.951788555884798050, -0.951803892438117360, -0.951819226611926860, -0.951834558406188360, +-0.951849887820863660, -0.951865214855914020, -0.951880539511301250, -0.951895861786987260, -0.951911181682933540, -0.951926499199102220, -0.951941814335454330, -0.951957127091951900, +-0.951972437468556640, -0.951987745465230240, -0.952003051081934610, -0.952018354318631240, -0.952033655175282050, -0.952048953651848720, -0.952064249748292960, -0.952079543464576790, +-0.952094834800661590, -0.952110123756509270, -0.952125410332081650, -0.952140694527340510, -0.952155976342247690, -0.952171255776765090, -0.952186532830854190, -0.952201807504476920, +-0.952217079797595070, -0.952232349710170570, -0.952247617242165220, -0.952262882393540840, -0.952278145164259130, -0.952293405554282210, -0.952308663563571910, -0.952323919192089810, +-0.952339172439797820, -0.952354423306657980, -0.952369671792631990, -0.952384917897681870, -0.952400161621769660, -0.952415402964856940, -0.952430641926905520, -0.952445878507877650, +-0.952461112707735040, -0.952476344526439590, -0.952491573963953340, -0.952506801020238100, -0.952522025695255900, -0.952537247988968880, -0.952552467901338520, -0.952567685432326950, +-0.952582900581896210, -0.952598113350008100, -0.952613323736624880, -0.952628531741708470, -0.952643737365220570, -0.952658940607123310, -0.952674141467378610, -0.952689339945948620, +-0.952704536042795260, -0.952719729757880550, -0.952734921091166640, -0.952750110042615340, -0.952765296612188670, -0.952780480799849120, -0.952795662605558150, -0.952810842029277900, +-0.952826019070970640, -0.952841193730598280, -0.952856366008123290, -0.952871535903507040, -0.952886703416712000, -0.952901868547700200, -0.952917031296433680, -0.952932191662874570, +-0.952947349646985020, -0.952962505248727050, -0.952977658468062930, -0.952992809304954560, -0.953007957759364420, -0.953023103831254210, -0.953038247520586190, -0.953053388827322600, +-0.953068527751425480, -0.953083664292857070, -0.953098798451579740, -0.953113930227555190, -0.953129059620745790, -0.953144186631113670, -0.953159311258621190, -0.953174433503230390, +-0.953189553364903520, -0.953204670843602720, -0.953219785939290350, -0.953234898651928670, -0.953250008981479490, -0.953265116927905390, -0.953280222491168390, -0.953295325671230880, +-0.953310426468055080, -0.953325524881603380, -0.953340620911837690, -0.953355714558720480, -0.953370805822213900, -0.953385894702280300, -0.953400981198882060, -0.953416065311981310, +-0.953431147041540420, -0.953446226387521630, -0.953461303349887550, -0.953476377928599960, -0.953491450123621350, -0.953506519934914200, -0.953521587362440750, -0.953536652406163250, +-0.953551715066044530, -0.953566775342046150, -0.953581833234130820, -0.953596888742261010, -0.953611941866398860, -0.953626992606506960, -0.953642040962547450, -0.953657086934482920, +-0.953672130522275730, -0.953687171725888130, -0.953702210545282920, -0.953717246980421820, -0.953732281031267730, -0.953747312697782900, -0.953762341979929710, -0.953777368877670950, +-0.953792393390968550, -0.953807415519785210, -0.953822435264083280, -0.953837452623825240, -0.953852467598973570, -0.953867480189490750, -0.953882490395339230, -0.953897498216481510, +-0.953912503652880050, -0.953927506704497550, -0.953942507371296040, -0.953957505653238220, -0.953972501550286680, -0.953987495062403880, -0.954002486189552410, -0.954017474931694860, +-0.954032461288793490, -0.954047445260810870, -0.954062426847709700, -0.954077406049452350, -0.954092382866001620, -0.954107357297319880, -0.954122329343369710, -0.954137299004113810, +-0.954152266279514880, -0.954167231169534950, -0.954182193674137040, -0.954197153793283630, -0.954212111526937300, -0.954227066875060650, -0.954242019837616700, -0.954256970414567360, +-0.954271918605875680, -0.954286864411504120, -0.954301807831415490, -0.954316748865572270, -0.954331687513937150, -0.954346623776472840, -0.954361557653142010, -0.954376489143907490, +-0.954391418248731530, -0.954406344967577040, -0.954421269300406610, -0.954436191247183040, -0.954451110807869040, -0.954466027982427520, -0.954480942770820630, -0.954495855173011390, +-0.954510765188962500, -0.954525672818636760, -0.954540578061996770, -0.954555480919005330, -0.954570381389625240, -0.954585279473819210, -0.954600175171549940, -0.954615068482780550, +-0.954629959407473190, -0.954644847945590900, -0.954659734097096480, -0.954674617861952730, -0.954689499240122810, -0.954704378231568730, -0.954719254836253750, -0.954734129054140680, +-0.954749000885192320, -0.954763870329371380, -0.954778737386640760, -0.954793602056963290, -0.954808464340301870, -0.954823324236619310, -0.954838181745878640, -0.954853036868042240, +-0.954867889603073340, -0.954882739950934640, -0.954897587911589070, -0.954912433484999880, -0.954927276671129310, -0.954942117469940510, -0.954956955881396400, -0.954971791905460000, +-0.954986625542094010, -0.955001456791261580, -0.955016285652925400, -0.955031112127048500, -0.955045936213593900, -0.955060757912524650, -0.955075577223803320, -0.955090394147393050, +-0.955105208683256770, -0.955120020831357390, -0.955134830591658050, -0.955149637964121890, -0.955164442948711280, -0.955179245545389690, -0.955194045754119920, -0.955208843574865020, +-0.955223639007588000, -0.955238432052252010, -0.955253222708819850, -0.955268010977254560, -0.955282796857519600, -0.955297580349577350, -0.955312361453391160, -0.955327140168924060, +-0.955341916496139200, -0.955356690434999490, -0.955371461985468300, -0.955386231147508090, -0.955400997921082460, -0.955415762306154330, -0.955430524302686710, -0.955445283910642760, +-0.955460041129985730, -0.955474795960678520, -0.955489548402684300, -0.955504298455966520, -0.955519046120487660, -0.955533791396211200, -0.955548534283100380, -0.955563274781118130, +-0.955578012890227700, -0.955592748610392450, -0.955607481941575190, -0.955622212883739160, -0.955636941436847520, -0.955651667600863620, -0.955666391375750490, -0.955681112761471500, +-0.955695831757989670, -0.955710548365268250, -0.955725262583270400, -0.955739974411959680, -0.955754683851298800, -0.955769390901251240, -0.955784095561780120, -0.955798797832848820, +-0.955813497714420810, -0.955828195206458790, -0.955842890308926220, -0.955857583021786470, -0.955872273345002690, -0.955886961278538340, -0.955901646822356570, -0.955916329976420620, +-0.955931010740693870, -0.955945689115139550, -0.955960365099721380, -0.955975038694401920, -0.955989709899145000, -0.956004378713913640, -0.956019045138671420, -0.956033709173381600, +-0.956048370818007750, -0.956063030072512700, -0.956077686936860130, -0.956092341411013290, -0.956106993494935660, -0.956121643188590500, -0.956136290491941150, -0.956150935404951220, +-0.956165577927583830, -0.956180218059802800, -0.956194855801571040, -0.956209491152852030, -0.956224124113609350, -0.956238754683806370, -0.956253382863406440, -0.956268008652373380, +-0.956282632050669990, -0.956297253058260080, -0.956311871675107010, -0.956326487901174250, -0.956341101736425280, -0.956355713180823570, -0.956370322234332600, -0.956384928896915730, +-0.956399533168536880, -0.956414135049158840, -0.956428734538745550, -0.956443331637260470, -0.956457926344666980, -0.956472518660928750, -0.956487108586009380, -0.956501696119872010, +-0.956516281262480450, -0.956530864013798170, -0.956545444373788630, -0.956560022342415660, -0.956574597919642500, -0.956589171105432850, -0.956603741899750390, -0.956618310302558510, +-0.956632876313820990, -0.956647439933501210, -0.956662001161562750, -0.956676559997969300, -0.956691116442684340, -0.956705670495672010, -0.956720222156895120, -0.956734771426317800, +-0.956749318303903530, -0.956763862789615890, -0.956778404883418590, -0.956792944585275310, -0.956807481895149750, -0.956822016813005380, -0.956836549338806020, -0.956851079472515460, +-0.956865607214096970, -0.956880132563514560, -0.956894655520731720, -0.956909176085712350, -0.956923694258419940, -0.956938210038818630, -0.956952723426871430, -0.956967234422542500, +-0.956981743025795420, -0.956996249236594100, -0.957010753054902020, -0.957025254480683210, -0.957039753513901140, -0.957054250154519730, -0.957068744402502890, -0.957083236257814000, +-0.957097725720417070, -0.957112212790275700, -0.957126697467353900, -0.957141179751615280, -0.957155659643024070, -0.957170137141543420, -0.957184612247137360, -0.957199084959769800, +-0.957213555279404550, -0.957228023206005420, -0.957242488739536210, -0.957256951879960740, -0.957271412627243020, -0.957285870981346880, -0.957300326942235880, -0.957314780509874060, +-0.957329231684225230, -0.957343680465253420, -0.957358126852922320, -0.957372570847196290, -0.957387012448038480, -0.957401451655413130, -0.957415888469284160, -0.957430322889615490, +-0.957444754916370930, -0.957459184549514620, -0.957473611789010250, -0.957488036634821850, -0.957502459086913450, -0.957516879145249080, -0.957531296809792320, -0.957545712080507210, +-0.957560124957357870, -0.957574535440308240, -0.957588943529322560, -0.957603349224364190, -0.957617752525397490, -0.957632153432386390, -0.957646551945295020, -0.957660948064087080, +-0.957675341788726930, -0.957689733119178380, -0.957704122055405450, -0.957718508597372180, -0.957732892745043030, -0.957747274498381260, -0.957761653857351350, -0.957776030821917310, +-0.957790405392043300, -0.957804777567693110, -0.957819147348831330, -0.957833514735421440, -0.957847879727427690, -0.957862242324814210, -0.957876602527545250, -0.957890960335584740, +-0.957905315748896810, -0.957919668767445610, -0.957934019391195160, -0.957948367620110040, -0.957962713454153620, -0.957977056893290490, -0.957991397937484780, -0.958005736586700410, +-0.958020072840901850, -0.958034406700053240, -0.958048738164118510, -0.958063067233061780, -0.958077393906847540, -0.958091718185439700, -0.958106040068802620, -0.958120359556900340, +-0.958134676649697310, -0.958148991347157470, -0.958163303649245510, -0.958177613555924900, -0.958191921067160330, -0.958206226182916070, -0.958220528903156120, -0.958234829227844860, +-0.958249127156946770, -0.958263422690425640, -0.958277715828245950, -0.958292006570371950, -0.958306294916767890, -0.958320580867398240, -0.958334864422227040, -0.958349145581218640, +-0.958363424344337410, -0.958377700711547710, -0.958391974682813900, -0.958406246258099890, -0.958420515437370390, -0.958434782220589530, -0.958449046607721680, -0.958463308598731520, +-0.958477568193582760, -0.958491825392240090, -0.958506080194667990, -0.958520332600830580, -0.958534582610692350, -0.958548830224217660, -0.958563075441370870, -0.958577318262116450, +-0.958591558686418770, -0.958605796714242290, -0.958620032345551150, -0.958634265580309950, -0.958648496418483150, -0.958662724860035010, -0.958676950904930100, -0.958691174553133020, +-0.958705395804607790, -0.958719614659319100, -0.958733831117231320, -0.958748045178309030, -0.958762256842516590, -0.958776466109818480, -0.958790672980179170, -0.958804877453563240, +-0.958819079529935390, -0.958833279209259540, -0.958847476491500590, -0.958861671376622820, -0.958875863864590890, -0.958890053955369410, -0.958904241648922960, -0.958918426945215670, +-0.958932609844212360, -0.958946790345877380, -0.958960968450175530, -0.958975144157071300, -0.958989317466529160, -0.959003488378513680, -0.959017656892989570, -0.959031823009921510, +-0.959045986729273660, -0.959060148051010810, -0.959074306975097660, -0.959088463501498680, -0.959102617630178570, -0.959116769361102240, -0.959130918694233610, -0.959145065629537720, +-0.959159210166979250, -0.959173352306522680, -0.959187492048132690, -0.959201629391774000, -0.959215764337411290, -0.959229896885009150, -0.959244027034532270, -0.959258154785945560, +-0.959272280139213170, -0.959286403094300130, -0.959300523651171020, -0.959314641809790650, -0.959328757570123920, -0.959342870932135110, -0.959356981895789110, -0.959371090461050620, +-0.959385196627884350, -0.959399300396255090, -0.959413401766127660, -0.959427500737466740, -0.959441597310237040, -0.959455691484403240, -0.959469783259930600, -0.959483872636783250, +-0.959497959614926120, -0.959512044194324120, -0.959526126374942060, -0.959540206156744620, -0.959554283539696960, -0.959568358523763320, -0.959582431108908840, -0.959596501295098210, +-0.959610569082296360, -0.959624634470468090, -0.959638697459578300, -0.959652758049591710, -0.959666816240473230, -0.959680872032187880, -0.959694925424700140, -0.959708976417975150, +-0.959723025011977700, -0.959737071206672620, -0.959751115002024920, -0.959765156397999640, -0.959779195394561360, -0.959793231991674880, -0.959807266189305450, -0.959821297987417890, +-0.959835327385976990, -0.959849354384947780, -0.959863378984295300, -0.959877401183984240, -0.959891420983979950, -0.959905438384246910, -0.959919453384750270, -0.959933465985454930, +-0.959947476186326030, -0.959961483987328280, -0.959975489388427250, -0.959989492389587080, -0.960003492990773370, -0.960017491191950790, -0.960031486993084490, -0.960045480394139510, +-0.960059471395080850, -0.960073459995873460, -0.960087446196482450, -0.960101429996872760, -0.960115411397009840, -0.960129390396858070, -0.960143366996382920, -0.960157341195549300, +-0.960171312994322350, -0.960185282392667320, -0.960199249390548790, -0.960213213987932250, -0.960227176184782590, -0.960241135981064970, -0.960255093376744640, -0.960269048371786500, +-0.960283000966155710, -0.960296951159817500, -0.960310898952736800, -0.960324844344879190, -0.960338787336209250, -0.960352727926692240, -0.960366666116293400, -0.960380601904977980, +-0.960394535292711020, -0.960408466279457970, -0.960422394865183550, -0.960436321049853100, -0.960450244833431890, -0.960464166215885040, -0.960478085197177700, -0.960492001777275230, +-0.960505915956142760, -0.960519827733745560, -0.960533737110048860, -0.960547644085017690, -0.960561548658617430, -0.960575450830813300, -0.960589350601570470, -0.960603247970854280, +-0.960617142938630320, -0.960631035504863060, -0.960644925669518420, -0.960658813432561320, -0.960672698793957220, -0.960686581753671390, -0.960700462311669170, -0.960714340467915710, +-0.960728216222376470, -0.960742089575016830, -0.960755960525801810, -0.960769829074696880, -0.960783695221667290, -0.960797558966678510, -0.960811420309695910, -0.960825279250684950, +-0.960839135789610550, -0.960852989926438310, -0.960866841661133560, -0.960880690993661690, -0.960894537923988160, -0.960908382452078320, -0.960922224577897440, -0.960936064301410990, +-0.960949901622584420, -0.960963736541383340, -0.960977569057772760, -0.960991399171718160, -0.961005226883185020, -0.961019052192138900, -0.961032875098545400, -0.961046695602369440, +-0.961060513703576700, -0.961074329402132670, -0.961088142698002910, -0.961101953591152690, -0.961115762081547700, -0.961129568169153180, -0.961143371853934840, -0.961157173135858020, +-0.961170972014888550, -0.961184768490991330, -0.961198562564132280, -0.961212354234276760, -0.961226143501390350, -0.961239930365438640, -0.961253714826387330, -0.961267496884201430, +-0.961281276538846870, -0.961295053790289120, -0.961308828638493650, -0.961322601083426150, -0.961336371125052210, -0.961350138763337300, -0.961363903998247000, -0.961377666829747230, +-0.961391427257803020, -0.961405185282380280, -0.961418940903444600, -0.961432694120961440, -0.961446444934896730, -0.961460193345216040, -0.961473939351884630, -0.961487682954868310, +-0.961501424154132870, -0.961515162949643900, -0.961528899341366980, -0.961542633329267820, -0.961556364913312090, -0.961570094093465390, -0.961583820869693740, -0.961597545241962280, +-0.961611267210236930, -0.961624986774483490, -0.961638703934667550, -0.961652418690754800, -0.961666131042711260, -0.961679840990502190, -0.961693548534093500, -0.961707253673451000, +-0.961720956408540270, -0.961734656739327230, -0.961748354665777460, -0.961762050187856880, -0.961775743305531170, -0.961789434018766040, -0.961803122327527630, -0.961816808231781170, +-0.961830491731492600, -0.961844172826627930, -0.961857851517152750, -0.961871527803033200, -0.961885201684234640, -0.961898873160722980, -0.961912542232464250, -0.961926208899424040, +-0.961939873161568370, -0.961953535018863050, -0.961967194471273880, -0.961980851518766670, -0.961994506161307330, -0.962008158398862000, -0.962021808231396050, -0.962035455658875600, +-0.962049100681266480, -0.962062743298534580, -0.962076383510645840, -0.962090021317566380, -0.962103656719261680, -0.962117289715697770, -0.962130920306840660, -0.962144548492656290, +-0.962158174273110460, -0.962171797648169290, -0.962185418617798600, -0.962199037181964310, -0.962212653340632770, -0.962226267093769240, -0.962239878441340070, -0.962253487383311290, +-0.962267093919648710, -0.962280698050318460, -0.962294299775286580, -0.962307899094518860, -0.962321496007981340, -0.962335090515640030, -0.962348682617460980, -0.962362272313410320, +-0.962375859603453950, -0.962389444487557920, -0.962403026965688250, -0.962416607037811290, -0.962430184703892520, -0.962443759963898420, -0.962457332817794780, -0.962470903265547850, +-0.962484471307123670, -0.962498036942488590, -0.962511600171608080, -0.962525160994448630, -0.962538719410976350, -0.962552275421157180, -0.962565829024957350, -0.962579380222342910, +-0.962592929013280090, -0.962606475397734920, -0.962620019375673540, -0.962633560947062320, -0.962647100111867050, -0.962660636870053990, -0.962674171221589270, -0.962687703166439150, +-0.962701232704570090, -0.962714759835947680, -0.962728284560538380, -0.962741806878308350, -0.962755326789223710, -0.962768844293250940, -0.962782359390355950, -0.962795872080504990, +-0.962809382363664420, -0.962822890239800500, -0.962836395708879470, -0.962849898770867240, -0.962863399425730290, -0.962876897673434760, -0.962890393513947120, -0.962903886947233610, +-0.962917377973260160, -0.962930866591993340, -0.962944352803399290, -0.962957836607444380, -0.962971318004094970, -0.962984796993317070, -0.962998273575077390, -0.963011747749341840, +-0.963025219516077000, -0.963038688875249350, -0.963052155826824800, -0.963065620370769810, -0.963079082507050770, -0.963092542235634010, -0.963105999556485900, -0.963119454469573030, +-0.963132906974861310, -0.963146357072317330, -0.963159804761907430, -0.963173250043597990, -0.963186692917355480, -0.963200133383146140, -0.963213571440936560, -0.963227007090692980, +-0.963240440332382210, -0.963253871165970050, -0.963267299591423210, -0.963280725608708140, -0.963294149217791330, -0.963307570418639010, -0.963320989211218110, -0.963334405595494440, +-0.963347819571434780, -0.963361231139005510, -0.963374640298173210, -0.963388047048904350, -0.963401451391165400, -0.963414853324922720, -0.963428252850142890, -0.963441649966792490, +-0.963455044674838220, -0.963468436974246110, -0.963481826864982850, -0.963495214347015020, -0.963508599420309200, -0.963521982084832200, -0.963535362340549820, -0.963548740187429200, +-0.963562115625436590, -0.963575488654538790, -0.963588859274702280, -0.963602227485893530, -0.963615593288079220, -0.963628956681226060, -0.963642317665300400, -0.963655676240269150, +-0.963669032406098580, -0.963682386162755370, -0.963695737510206210, -0.963709086448417680, -0.963722432977356600, -0.963735777096989320, -0.963749118807282650, -0.963762458108203050, +-0.963775794999717330, -0.963789129481792180, -0.963802461554394200, -0.963815791217490060, -0.963829118471046350, -0.963842443315029880, -0.963855765749407680, -0.963869085774145650, +-0.963882403389211050, -0.963895718594570350, -0.963909031390190350, -0.963922341776037860, -0.963935649752079680, -0.963948955318282060, -0.963962258474612140, -0.963975559221036620, +-0.963988857557522170, -0.964002153484035620, -0.964015447000543650, -0.964028738107012950, -0.964042026803410560, -0.964055313089703270, -0.964068596965857450, -0.964081878431840230, +-0.964095157487618200, -0.964108434133158280, -0.964121708368427370, -0.964134980193392390, -0.964148249608019700, -0.964161516612276340, -0.964174781206129320, -0.964188043389545220, +-0.964201303162491090, -0.964214560524933710, -0.964227815476839890, -0.964241068018176550, -0.964254318148910720, -0.964267565869008860, -0.964280811178438110, -0.964294054077165400, +-0.964307294565157510, -0.964320532642381380, -0.964333768308804130, -0.964347001564392240, -0.964360232409112840, -0.964373460842932960, -0.964386686865819300, -0.964399910477738990, +-0.964413131678658830, -0.964426350468545970, -0.964439566847367090, -0.964452780815089340, -0.964465992371679960, -0.964479201517105310, -0.964492408251332640, -0.964505612574328870, +-0.964518814486061250, -0.964532013986496680, -0.964545211075601870, -0.964558405753344060, -0.964571598019690280, -0.964584787874607440, -0.964597975318062680, -0.964611160350022920, +-0.964624342970455300, -0.964637523179326830, -0.964650700976604550, -0.964663876362255700, -0.964677049336246980, -0.964690219898545640, -0.964703388049118700, -0.964716553787933310, +-0.964729717114956590, -0.964742878030155790, -0.964756036533497510, -0.964769192624949200, -0.964782346304477790, -0.964795497572050630, -0.964808646427634750, -0.964821792871197180, +-0.964834936902705160, -0.964848078522125840, -0.964861217729426460, -0.964874354524573820, -0.964887488907535400, -0.964900620878278100, -0.964913750436769410, -0.964926877582976240, +-0.964940002316866160, -0.964953124638405770, -0.964966244547562630, -0.964979362044303900, -0.964992477128596700, -0.965005589800408290, -0.965018700059706020, -0.965031807906456930, +-0.965044913340628360, -0.965058016362187690, -0.965071116971101710, -0.965084215167338000, -0.965097310950863820, -0.965110404321646190, -0.965123495279652690, -0.965136583824850680, +-0.965149669957206860, -0.965162753676689020, -0.965175834983264200, -0.965188913876899870, -0.965201990357563160, -0.965215064425221540, -0.965228136079842150, -0.965241205321392570, +-0.965254272149839940, -0.965267336565151850, -0.965280398567295080, -0.965293458156237460, -0.965306515331946110, -0.965319570094388510, -0.965332622443532240, -0.965345672379344100, +-0.965358719901791900, -0.965371765010842760, -0.965384807706464290, -0.965397847988623830, -0.965410885857288740, -0.965423921312426380, -0.965436954354004230, -0.965449984981989750, +-0.965463013196350420, -0.965476038997053480, -0.965489062384066400, -0.965502083357356540, -0.965515101916891600, -0.965528118062638830, -0.965541131794566130, -0.965554143112640210, +-0.965567152016829080, -0.965580158507099990, -0.965593162583420430, -0.965606164245758070, -0.965619163494080280, -0.965632160328354530, -0.965645154748548510, -0.965658146754629690, +-0.965671136346565320, -0.965684123524323090, -0.965697108287870590, -0.965710090637175280, -0.965723070572204860, -0.965736048092926900, -0.965749023199308550, -0.965761995891317730, +-0.965774966168921890, -0.965787934032088620, -0.965800899480785510, -0.965813862514980140, -0.965826823134640190, -0.965839781339733140, -0.965852737130226790, -0.965865690506088500, +-0.965878641467285860, -0.965891590013786660, -0.965904536145558490, -0.965917479862569040, -0.965930421164786110, -0.965943360052176850, -0.965956296524709160, -0.965969230582350740, +-0.965982162225069270, -0.965995091452832470, -0.966008018265607890, -0.966020942663363250, -0.966033864646066220, -0.966046784213684510, -0.966059701366186130, -0.966072616103538230, +-0.966085528425708830, -0.966098438332665620, -0.966111345824376300, -0.966124250900808780, -0.966137153561930530, -0.966150053807709350, -0.966162951638112940, -0.966175847053109220, +-0.966188740052665860, -0.966201630636750690, -0.966214518805331490, -0.966227404558375860, -0.966240287895851810, -0.966253168817727270, -0.966266047323969590, -0.966278923414546800, +-0.966291797089426590, -0.966304668348576980, -0.966317537191965670, -0.966330403619560800, -0.966343267631329610, -0.966356129227240350, -0.966368988407260710, -0.966381845171358610, +-0.966394699519501850, -0.966407551451658350, -0.966420400967796020, -0.966433248067882670, -0.966446092751886420, -0.966458935019774760, -0.966471774871515700, -0.966484612307077270, +-0.966497447326427280, -0.966510279929533640, -0.966523110116364490, -0.966535937886887410, -0.966548763241070530, -0.966561586178881660, -0.966574406700288820, -0.966587224805259940, +-0.966600040493763140, -0.966612853765766110, -0.966625664621237000, -0.966638473060143940, -0.966651279082454410, -0.966664082688136750, -0.966676883877158890, -0.966689682649488850, +-0.966702479005094540, -0.966715272943944330, -0.966728064466005680, -0.966740853571246840, -0.966753640259635840, -0.966766424531140810, -0.966779206385729670, -0.966791985823370560, +-0.966804762844031380, -0.966817537447680400, -0.966830309634285510, -0.966843079403815200, -0.966855846756236810, -0.966868611691518940, -0.966881374209629390, -0.966894134310536500, +-0.966906891994208540, -0.966919647260613080, -0.966932400109718480, -0.966945150541492880, -0.966957898555904420, -0.966970644152921220, -0.966983387332511430, -0.966996128094643080, +-0.967008866439284520, -0.967021602366403780, -0.967034335875969210, -0.967047066967948620, -0.967059795642310260, -0.967072521899022490, -0.967085245738053430, -0.967097967159371240, +-0.967110686162944380, -0.967123402748740530, -0.967136116916728290, -0.967148828666875680, -0.967161537999150940, -0.967174244913522440, -0.967186949409958310, -0.967199651488426790, +-0.967212351148896140, -0.967225048391334830, -0.967237743215710650, -0.967250435621992200, -0.967263125610147600, -0.967275813180145110, -0.967288498331953180, -0.967301181065540310, +-0.967313861380874160, -0.967326539277923340, -0.967339214756656180, -0.967351887817041070, -0.967364558459046120, -0.967377226682639810, -0.967389892487790500, -0.967402555874466440, +-0.967415216842636210, -0.967427875392267710, -0.967440531523329430, -0.967453185235789940, -0.967465836529617480, -0.967478485404780320, -0.967491131861247240, -0.967503775898986170, +-0.967516417517965580, -0.967529056718154030, -0.967541693499519790, -0.967554327862031220, -0.967566959805656990, -0.967579589330365250, -0.967592216436124590, -0.967604841122903350, +-0.967617463390670230, -0.967630083239393370, -0.967642700669041120, -0.967655315679582180, -0.967667928270985020, -0.967680538443218110, -0.967693146196249800, -0.967705751530048560, +-0.967718354444582870, -0.967730954939821420, -0.967743553015732450, -0.967756148672284660, -0.967768741909446510, -0.967781332727186470, -0.967793921125473130, -0.967806507104275290, +-0.967819090663560870, -0.967831671803298770, -0.967844250523457350, -0.967856826824005420, -0.967869400704911450, -0.967881972166144130, -0.967894541207671710, -0.967907107829462990, +-0.967919672031486320, -0.967932233813710630, -0.967944793176104270, -0.967957350118636040, -0.967969904641274300, -0.967982456743987860, -0.967995006426745520, -0.968007553689515410, +-0.968020098532266450, -0.968032640954967220, -0.968045180957586400, -0.968057718540092590, -0.968070253702454700, -0.968082786444640960, -0.968095316766620310, -0.968107844668361310, +-0.968120370149832770, -0.968132893211003260, -0.968145413851841500, -0.968157932072316260, -0.968170447872396140, -0.968182961252050170, -0.968195472211246580, -0.968207980749954180, +-0.968220486868141990, -0.968232990565778500, -0.968245491842832600, -0.968257990699273100, -0.968270487135068470, -0.968282981150187630, -0.968295472744599260, -0.968307961918272290, +-0.968320448671175390, -0.968332933003277270, -0.968345414914546950, -0.968357894404953010, -0.968370371474464360, -0.968382846123050030, -0.968395318350678380, -0.968407788157318430, +-0.968420255542938980, -0.968432720507508950, -0.968445183050997250, -0.968457643173372460, -0.968470100874603500, -0.968482556154659280, -0.968495009013508710, -0.968507459451120600, +-0.968519907467463750, -0.968532353062507290, -0.968544796236219920, -0.968557236988570440, -0.968569675319528200, -0.968582111229061570, -0.968594544717139570, -0.968606975783731230, +-0.968619404428805450, -0.968631830652331270, -0.968644254454277600, -0.968656675834613120, -0.968669094793306980, -0.968681511330328090, -0.968693925445645370, -0.968706337139227940, +-0.968718746411044500, -0.968731153261064290, -0.968743557689256240, -0.968755959695589470, -0.968768359280032580, -0.968780756442554900, -0.968793151183125150, -0.968805543501712660, +-0.968817933398286260, -0.968830320872815180, -0.968842705925268220, -0.968855088555614420, -0.968867468763822900, -0.968879846549862700, -0.968892221913702830, -0.968904594855312550, +-0.968916965374660650, -0.968929333471716390, -0.968941699146449010, -0.968954062398827200, -0.968966423228820210, -0.968978781636397170, -0.968991137621527110, -0.969003491184179280, +-0.969015842324322920, -0.969028191041926720, -0.969040537336960050, -0.969052881209392040, -0.969065222659191820, -0.969077561686328530, -0.969089898290771410, -0.969102232472489500, +-0.969114564231452040, -0.969126893567628040, -0.969139220480987220, -0.969151544971498020, -0.969163867039129930, -0.969176186683852190, -0.969188503905634050, -0.969200818704444860, +-0.969213131080253310, -0.969225441033028990, -0.969237748562741140, -0.969250053669358790, -0.969262356352851410, -0.969274656613188010, -0.969286954450338080, -0.969299249864270740, +-0.969311542854955350, -0.969323833422361170, -0.969336121566457320, -0.969348407287213050, -0.969360690584597840, -0.969372971458580920, -0.969385249909131550, -0.969397525936219310, +-0.969409799539812990, -0.969422070719882180, -0.969434339476396120, -0.969446605809324290, -0.969458869718635930, -0.969471131204300400, -0.969483390266287050, -0.969495646904565240, +-0.969507901119104450, -0.969520152909873810, -0.969532402276842680, -0.969544649219980630, -0.969556893739256910, -0.969569135834640990, -0.969581375506102460, -0.969593612753610220, +-0.969605847577133970, -0.969618079976643070, -0.969630309952106970, -0.969642537503495160, -0.969654762630776990, -0.969666985333921930, -0.969679205612899330, -0.969691423467679000, +-0.969703638898229860, -0.969715851904521590, -0.969728062486523770, -0.969740270644205760, -0.969752476377537030, -0.969764679686487390, -0.969776880571025850, -0.969789079031122100, +-0.969801275066745630, -0.969813468677865890, -0.969825659864452570, -0.969837848626475150, -0.969850034963902980, -0.969862218876705870, -0.969874400364853060, -0.969886579428314580, +-0.969898756067059330, -0.969910930281057350, -0.969923102070277880, -0.969935271434690720, -0.969947438374265670, -0.969959602888971760, -0.969971764978778790, -0.969983924643656460, +-0.969996081883574330, -0.970008236698501890, -0.970020389088408930, -0.970032539053265030, -0.970044686593039770, -0.970056831707702850, -0.970068974397223950, -0.970081114661572430, +-0.970093252500718210, -0.970105387914630750, -0.970117520903279850, -0.970129651466635210, -0.970141779604666520, -0.970153905317343360, -0.970166028604635300, -0.970178149466512150, +-0.970190267902943710, -0.970202383913899570, -0.970214497499349400, -0.970226608659263130, -0.970238717393610230, -0.970250823702360820, -0.970262927585484050, -0.970275029042950040, +-0.970287128074728500, -0.970299224680789000, -0.970311318861101560, -0.970323410615635980, -0.970335499944361630, -0.970347586847248640, -0.970359671324266590, -0.970371753375385390, +-0.970383833000574740, -0.970395910199804650, -0.970407984973044700, -0.970420057320264710, -0.970432127241434910, -0.970444194736524550, -0.970456259805503650, -0.970468322448342140, +-0.970480382665009910, -0.970492440455476670, -0.970504495819712430, -0.970516548757686890, -0.970528599269369850, -0.970540647354731440, -0.970552693013741360, -0.970564736246369520, +-0.970576777052585830, -0.970588815432360200, -0.970600851385662540, -0.970612884912462780, -0.970624916012731040, -0.970636944686436800, -0.970648970933550180, -0.970660994754041110, +-0.970673016147879490, -0.970685035115035680, -0.970697051655479040, -0.970709065769179700, -0.970721077456107690, -0.970733086716233040, -0.970745093549525650, -0.970757097955955550, +-0.970769099935492760, -0.970781099488107090, -0.970793096613768780, -0.970805091312447850, -0.970817083584114120, -0.970829073428737590, -0.970841060846288300, -0.970853045836736480, +-0.970865028400052180, -0.970877008536205180, -0.970888986245165620, -0.970900961526903530, -0.970912934381389150, -0.970924904808592390, -0.970936872808483290, -0.970948838381032080, +-0.970960801526208780, -0.970972762243983430, -0.970984720534326500, -0.970996676397207440, -0.971008629832596730, -0.971020580840464500, -0.971032529420780670, -0.971044475573515700, +-0.971056419298639620, -0.971068360596122340, -0.971080299465934100, -0.971092235908045160, -0.971104169922425650, -0.971116101509045700, -0.971128030667875450, -0.971139957398885150, +-0.971151881702045030, -0.971163803577325350, -0.971175723024695900, -0.971187640044127280, -0.971199554635589490, -0.971211466799052790, -0.971223376534487430, -0.971235283841863860, +-0.971247188721151790, -0.971259091172321900, -0.971270991195344210, -0.971282888790188980, -0.971294783956826560, -0.971306676695227190, -0.971318567005361120, -0.971330454887198710, +-0.971342340340710320, -0.971354223365865850, -0.971366103962635900, -0.971377982130990580, -0.971389857870900380, -0.971401731182335530, -0.971413602065266500, -0.971425470519663330, +-0.971437336545496470, -0.971449200142736170, -0.971461061311353010, -0.971472920051317130, -0.971484776362598890, -0.971496630245168860, -0.971508481698997170, -0.971520330724054190, +-0.971532177320310720, -0.971544021487736550, -0.971555863226302390, -0.971567702535978460, -0.971579539416735360, -0.971591373868543660, -0.971603205891373170, -0.971615035485194790, +-0.971626862649978770, -0.971638687385695590, -0.971650509692315700, -0.971662329569809580, -0.971674147018147580, -0.971685962037300180, -0.971697774627237940, -0.971709584787931460, +-0.971721392519350860, -0.971733197821466720, -0.971745000694249630, -0.971756801137669930, -0.971768599151698330, -0.971780394736305400, -0.971792187891461270, -0.971803978617136740, +-0.971815766913302180, -0.971827552779928270, -0.971839336216985370, -0.971851117224444280, -0.971862895802275250, -0.971874671950449080, -0.971886445668936450, -0.971898216957707390, +-0.971909985816732940, -0.971921752245983430, -0.971933516245429560, -0.971945277815041810, -0.971957036954791190, -0.971968793664647720, -0.971980547944582330, -0.971992299794565470, +-0.972004049214567960, -0.972015796204560250, -0.972027540764513140, -0.972039282894397120, -0.972051022594182860, -0.972062759863841270, -0.972074494703342620, -0.972086227112657690, +-0.972097957091757170, -0.972109684640611870, -0.972121409759192260, -0.972133132447469350, -0.972144852705413400, -0.972156570532995310, -0.972168285930185780, -0.972179998896955610, +-0.972191709433275380, -0.972203417539115880, -0.972215123214447920, -0.972226826459242080, -0.972238527273469160, -0.972250225657100180, -0.972261921610105380, -0.972273615132455800, +-0.972285306224122130, -0.972296994885075260, -0.972308681115286120, -0.972320364914725070, -0.972332046283363010, -0.972343725221170960, -0.972355401728119520, -0.972367075804179580, +-0.972378747449321960, -0.972390416663517550, -0.972402083446736950, -0.972413747798951290, -0.972425409720131360, -0.972437069210247750, -0.972448726269271480, -0.972460380897173350, +-0.972472033093924270, -0.972483682859495160, -0.972495330193857030, -0.972506975096980360, -0.972518617568836290, -0.972530257609395600, -0.972541895218629330, -0.972553530396508270, +-0.972565163143003450, -0.972576793458085680, -0.972588421341725850, -0.972600046793895330, -0.972611669814564370, -0.972623290403704320, -0.972634908561285980, -0.972646524287280380, +-0.972658137581658530, -0.972669748444391470, -0.972681356875449880, -0.972692962874804780, -0.972704566442427420, -0.972716167578288600, -0.972727766282359350, -0.972739362554610690, +-0.972750956395013630, -0.972762547803539210, -0.972774136780158560, -0.972785723324842370, -0.972797307437561880, -0.972808889118288110, -0.972820468366992210, -0.972832045183645080, +-0.972843619568217970, -0.972855191520681670, -0.972866761041007440, -0.972878328129166300, -0.972889892785129270, -0.972901455008867490, -0.972913014800352190, -0.972924572159554300, +-0.972936127086444950, -0.972947679580995260, -0.972959229643176600, -0.972970777272959660, -0.972982322470315800, -0.972993865235216140, -0.973005405567631820, -0.973016943467534200, +-0.973028478934893970, -0.973040011969682590, -0.973051542571871210, -0.973063070741430950, -0.973074596478332940, -0.973086119782548440, -0.973097640654048690, -0.973109159092804820, +-0.973120675098788080, -0.973132188671969930, -0.973143699812320960, -0.973155208519812850, -0.973166714794416630, -0.973178218636103650, -0.973189720044845160, -0.973201219020612520, +-0.973212715563376740, -0.973224209673109080, -0.973235701349780880, -0.973247190593363510, -0.973258677403828100, -0.973270161781146000, -0.973281643725288470, -0.973293123236226850, +-0.973304600313932620, -0.973316074958376800, -0.973327547169530630, -0.973339016947365690, -0.973350484291853220, -0.973361949202964480, -0.973373411680671040, -0.973384871724943920, +-0.973396329335754600, -0.973407784513074530, -0.973419237256874960, -0.973430687567127250, -0.973442135443802870, -0.973453580886873170, -0.973465023896309510, -0.973476464472083470, +-0.973487902614166070, -0.973499338322528880, -0.973510771597143390, -0.973522202437980930, -0.973533630845012990, -0.973545056818211130, -0.973556480357546490, -0.973567901462990660, +-0.973579320134515090, -0.973590736372091150, -0.973602150175690410, -0.973613561545284220, -0.973624970480844290, -0.973636376982341730, -0.973647781049748360, -0.973659182683035750, +-0.973670581882174920, -0.973681978647137680, -0.973693372977895490, -0.973704764874419810, -0.973716154336682460, -0.973727541364654560, -0.973738925958307800, -0.973750308117613650, +-0.973761687842543800, -0.973773065133069720, -0.973784439989162980, -0.973795812410795160, -0.973807182397937730, -0.973818549950562380, -0.973829915068640920, -0.973841277752144350, +-0.973852638001044710, -0.973863995815313350, -0.973875351194922080, -0.973886704139842460, -0.973898054650046310, -0.973909402725504750, -0.973920748366189690, -0.973932091572072720, +-0.973943432343125530, -0.973954770679319790, -0.973966106580627210, -0.973977440047019250, -0.973988771078467710, -0.974000099674944500, -0.974011425836420750, -0.974022749562868500, +-0.974034070854259300, -0.974045389710565090, -0.974056706131757210, -0.974068020117807910, -0.974079331668688320, -0.974090640784370350, -0.974101947464825810, -0.974113251710026380, +-0.974124553519943870, -0.974135852894549960, -0.974147149833816450, -0.974158444337715030, -0.974169736406217620, -0.974181026039295790, -0.974192313236921350, -0.974203597999066080, +-0.974214880325701920, -0.974226160216800530, -0.974237437672333950, -0.974248712692273530, -0.974259985276591300, -0.974271255425259160, -0.974282523138248810, -0.974293788415532270, +-0.974305051257081220, -0.974316311662867470, -0.974327569632863040, -0.974338825167039620, -0.974350078265369350, -0.974361328927823680, -0.974372577154374750, -0.974383822944994260, +-0.974395066299654330, -0.974406307218326880, -0.974417545700983490, -0.974428781747596170, -0.974440015358136960, -0.974451246532577750, -0.974462475270890360, -0.974473701573046800, +-0.974484925439018990, -0.974496146868778830, -0.974507365862298360, -0.974518582419549580, -0.974529796540504200, -0.974541008225134340, -0.974552217473412030, -0.974563424285309070, +-0.974574628660797580, -0.974585830599849710, -0.974597030102437030, -0.974608227168531900, -0.974619421798106120, -0.974630613991131820, -0.974641803747580910, -0.974652991067425530, +-0.974664175950637700, -0.974675358397189440, -0.974686538407052880, -0.974697715980199940, -0.974708891116602530, -0.974720063816233000, -0.974731234079063370, -0.974742401905065560, +-0.974753567294211920, -0.974764730246474250, -0.974775890761824690, -0.974787048840235480, -0.974798204481678530, -0.974809357686126200, -0.974820508453550390, -0.974831656783923250, +-0.974842802677217120, -0.974853946133404040, -0.974865087152456010, -0.974876225734345180, -0.974887361879043900, -0.974898495586524080, -0.974909626856758080, -0.974920755689718250, +-0.974931882085376290, -0.974943006043704650, -0.974954127564675480, -0.974965246648261010, -0.974976363294433380, -0.974987477503164830, -0.974998589274427620, -0.975009698608193980, +-0.975020805504436040, -0.975031909963126280, -0.975043011984236600, -0.975054111567739360, -0.975065208713606800, -0.975076303421811290, -0.975087395692325170, -0.975098485525120460, +-0.975109572920169420, -0.975120657877444510, -0.975131740396917860, -0.975142820478561930, -0.975153898122348980, -0.975164973328251250, -0.975176046096241090, -0.975187116426290860, +-0.975198184318373020, -0.975209249772459490, -0.975220312788522840, -0.975231373366535430, -0.975242431506469500, -0.975253487208297630, -0.975264540471992180, -0.975275591297525170, +-0.975286639684869170, -0.975297685633996550, -0.975308729144879760, -0.975319770217491170, -0.975330808851803120, -0.975341845047787980, -0.975352878805418320, -0.975363910124666720, +-0.975374939005504980, -0.975385965447906010, -0.975396989451842170, -0.975408011017285690, -0.975419030144209280, -0.975430046832585500, -0.975441061082386480, -0.975452072893584710, +-0.975463082266152750, -0.975474089200063070, -0.975485093695288240, -0.975496095751800630, -0.975507095369572810, -0.975518092548577240, -0.975529087288786620, -0.975540079590173080, +-0.975551069452709420, -0.975562056876367990, -0.975573041861121480, -0.975584024406942360, -0.975595004513803320, -0.975605982181676600, -0.975616957410535000, -0.975627930200350880, +-0.975638900551097030, -0.975649868462745930, -0.975660833935270030, -0.975671796968642150, -0.975682757562834850, -0.975693715717820490, -0.975704671433572200, -0.975715624710061900, +-0.975726575547262610, -0.975737523945146900, -0.975748469903687350, -0.975759413422856770, -0.975770354502627500, -0.975781293142972350, -0.975792229343864000, -0.975803163105275040, +-0.975814094427178260, -0.975825023309546120, -0.975835949752351440, -0.975846873755567000, -0.975857795319165280, -0.975868714443119290, -0.975879631127401280, -0.975890545371984160, +-0.975901457176840850, -0.975912366541943690, -0.975923273467265710, -0.975934177952779810, -0.975945079998458140, -0.975955979604273830, -0.975966876770199670, -0.975977771496208120, +-0.975988663782272340, -0.975999553628364770, -0.976010441034458330, -0.976021326000525820, -0.976032208526540160, -0.976043088612473800, -0.976053966258299770, -0.976064841463990750, +-0.976075714229519660, -0.976086584554859300, -0.976097452439982690, -0.976108317884862190, -0.976119180889470920, -0.976130041453781680, -0.976140899577767400, -0.976151755261400860, +-0.976162608504654860, -0.976173459307502430, -0.976184307669916260, -0.976195153591869590, -0.976205997073334770, -0.976216838114285060, -0.976227676714693240, -0.976238512874532120, +-0.976249346593774820, -0.976260177872394270, -0.976271006710363150, -0.976281833107654480, -0.976292657064241290, -0.976303478580096360, -0.976314297655192730, -0.976325114289503420, +-0.976335928483001330, -0.976346740235659370, -0.976357549547450580, -0.976368356418348180, -0.976379160848324660, -0.976389962837353130, -0.976400762385406850, -0.976411559492458610, +-0.976422354158481550, -0.976433146383448580, -0.976443936167332600, -0.976454723510106870, -0.976465508411744400, -0.976476290872217990, -0.976487070891501000, -0.976497848469566220, +-0.976508623606386910, -0.976519396301935960, -0.976530166556186740, -0.976540934369111930, -0.976551699740684790, -0.976562462670878430, -0.976573223159665880, -0.976583981207020280, +-0.976594736812914870, -0.976605489977322440, -0.976616240700216350, -0.976626988981569630, -0.976637734821355410, -0.976648478219546810, -0.976659219176117090, -0.976669957691039370, +-0.976680693764286680, -0.976691427395832480, -0.976702158585649460, -0.976712887333711090, -0.976723613639990500, -0.976734337504460930, -0.976745058927095400, -0.976755777907867500, +-0.976766494446749900, -0.976777208543716080, -0.976787920198739280, -0.976798629411792740, -0.976809336182849490, -0.976820040511882980, -0.976830742398866360, -0.976841441843772860, +-0.976852138846575960, -0.976862833407248550, -0.976873525525764010, -0.976884215202095670, -0.976894902436216790, -0.976905587228100720, -0.976916269577720820, -0.976926949485049990, +-0.976937626950061920, -0.976948301972729640, -0.976958974553026720, -0.976969644690926290, -0.976980312386401820, -0.976990977639426550, -0.977001640449973730, -0.977012300818016930, +-0.977022958743529510, -0.977033614226484600, -0.977044267266855560, -0.977054917864615850, -0.977065566019738930, -0.977076211732198160, -0.977086855001966790, -0.977097495829018170, +-0.977108134213325870, -0.977118770154863260, -0.977129403653603680, -0.977140034709520710, -0.977150663322587490, -0.977161289492777700, -0.977171913220064690, -0.977182534504422050, +-0.977193153345822910, -0.977203769744240840, -0.977214383699649410, -0.977224995212022000, -0.977235604281332270, -0.977246210907553370, -0.977256815090658870, -0.977267416830622460, +-0.977278016127417380, -0.977288612981017320, -0.977299207391395750, -0.977309799358526130, -0.977320388882382040, -0.977330975962936940, -0.977341560600164640, -0.977352142794038260, +-0.977362722544531380, -0.977373299851617800, -0.977383874715270990, -0.977394447135464530, -0.977405017112172090, -0.977415584645366930, -0.977426149735022730, -0.977436712381113180, +-0.977447272583611970, -0.977457830342492450, -0.977468385657728420, -0.977478938529293460, -0.977489488957161030, -0.977500036941305160, -0.977510582481698980, -0.977521125578316390, +-0.977531666231130970, -0.977542204440116300, -0.977552740205246180, -0.977563273526494410, -0.977573804403834230, -0.977584332837239560, -0.977594858826684070, -0.977605382372141450, +-0.977615903473585400, -0.977626422130989490, -0.977636938344327630, -0.977647452113573400, -0.977657963438700480, -0.977668472319682900, -0.977678978756493900, -0.977689482749107500, +-0.977699984297497380, -0.977710483401637240, -0.977720980061501210, -0.977731474277062420, -0.977741966048295000, -0.977752455375172640, -0.977762942257669240, -0.977773426695758400, +-0.977783908689414010, -0.977794388238609760, -0.977804865343319670, -0.977815340003517330, -0.977825812219176860, -0.977836281990271730, -0.977846749316775840, -0.977857214198663010, +-0.977867676635907230, -0.977878136628482440, -0.977888594176362090, -0.977899049279520320, -0.977909501937930910, -0.977919952151567680, -0.977930399920404650, -0.977940845244415600, +-0.977951288123574350, -0.977961728557855010, -0.977972166547231290, -0.977982602091677310, -0.977993035191166650, -0.978003465845673440, -0.978013894055171580, -0.978024319819634890, +-0.978034743139037490, -0.978045164013353400, -0.978055582442556190, -0.978065998426620010, -0.978076411965518870, -0.978086823059226670, -0.978097231707717450, -0.978107637910965220, +-0.978118041668943780, -0.978128442981627270, -0.978138841848989800, -0.978149238271005080, -0.978159632247647350, -0.978170023778890400, -0.978180412864708470, -0.978190799505075480, +-0.978201183699965670, -0.978211565449352730, -0.978221944753210890, -0.978232321611514190, -0.978242696024236640, -0.978253067991352370, -0.978263437512835400, -0.978273804588659870, +-0.978284169218799900, -0.978294531403229640, -0.978304891141922760, -0.978315248434853850, -0.978325603281996690, -0.978335955683325540, -0.978346305638814530, -0.978356653148437890, +-0.978366998212169440, -0.978377340829983510, -0.978387681001854250, -0.978398018727755780, -0.978408354007662240, -0.978418686841547870, -0.978429017229386800, -0.978439345171153050, +-0.978449670666821090, -0.978459993716365050, -0.978470314319758840, -0.978480632476976920, -0.978490948187993310, -0.978501261452782380, -0.978511572271318570, -0.978521880643575480, +-0.978532186569527780, -0.978542490049149620, -0.978552791082415220, -0.978563089669298840, -0.978573385809774820, -0.978583679503817190, -0.978593970751400420, -0.978604259552498750, +-0.978614545907086630, -0.978624829815137880, -0.978635111276627170, -0.978645390291528640, -0.978655666859816530, -0.978665940981465420, -0.978676212656449550, -0.978686481884742940, +-0.978696748666320170, -0.978707013001155480, -0.978717274889223330, -0.978727534330497970, -0.978737791324953750, -0.978748045872565030, -0.978758297973306270, -0.978768547627151930, +-0.978778794834076040, -0.978789039594053060, -0.978799281907057670, -0.978809521773063910, -0.978819759192046450, -0.978829994163979640, -0.978840226688837860, -0.978850456766595320, +-0.978860684397226730, -0.978870909580706440, -0.978881132317008910, -0.978891352606108490, -0.978901570447979650, -0.978911785842596970, -0.978921998789935020, -0.978932209289967830, +-0.978942417342670070, -0.978952622948016330, -0.978962826105981070, -0.978973026816538750, -0.978983225079663950, -0.978993420895331030, -0.979003614263514450, -0.979013805184188900, +-0.979023993657328730, -0.979034179682908730, -0.979044363260903160, -0.979054544391286700, -0.979064723074033920, -0.979074899309119400, -0.979085073096517710, -0.979095244436203220, +-0.979105413328150490, -0.979115579772334320, -0.979125743768729300, -0.979135905317309980, -0.979146064418050740, -0.979156221070926260, -0.979166375275911330, -0.979176527032980410, +-0.979186676342108210, -0.979196823203269400, -0.979206967616438440, -0.979217109581590030, -0.979227249098698850, -0.979237386167739810, -0.979247520788687040, -0.979257652961515570, +-0.979267782686199850, -0.979277909962714690, -0.979288034791034880, -0.979298157171135000, -0.979308277102989620, -0.979318394586573550, -0.979328509621861460, -0.979338622208828170, +-0.979348732347448350, -0.979358840037696580, -0.979368945279547760, -0.979379048072976600, -0.979389148417957990, -0.979399246314466290, -0.979409341762476520, -0.979419434761963360, +-0.979429525312901620, -0.979439613415266090, -0.979449699069031790, -0.979459782274172960, -0.979469863030664630, -0.979479941338481710, -0.979490017197598980, -0.979500090607991150, +-0.979510161569633110, -0.979520230082499670, -0.979530296146565620, -0.979540359761805980, -0.979550420928195330, -0.979560479645708580, -0.979570535914320750, -0.979580589734006410, +-0.979590641104740700, -0.979600690026498520, -0.979610736499254450, -0.979620780522983630, -0.979630822097660730, -0.979640861223260880, -0.979650897899758790, -0.979660932127129460, +-0.979670963905347910, -0.979680993234388840, -0.979691020114227260, -0.979701044544838420, -0.979711066526196770, -0.979721086058277350, -0.979731103141055270, -0.979741117774505450, +-0.979751129958603030, -0.979761139693322680, -0.979771146978639320, -0.979781151814528180, -0.979791154200964190, -0.979801154137922240, -0.979811151625377460, -0.979821146663304780, +-0.979831139251679200, -0.979841129390475850, -0.979851117079669760, -0.979861102319235730, -0.979871085109149000, -0.979881065449384470, -0.979891043339917390, -0.979901018780722670, +-0.979910991771775540, -0.979920962313050700, -0.979930930404523610, -0.979940896046169070, -0.979950859237962320, -0.979960819979878380, -0.979970778271892500, -0.979980734113979570, +-0.979990687506114840, -0.980000638448273560, -0.980010586940430530, -0.980020532982561090, -0.980030476574640260, -0.980040417716643190, -0.980050356408545100, -0.980060292650321350, +-0.980070226441946630, -0.980080157783396410, -0.980090086674645810, -0.980100013115669850, -0.980109937106444010, -0.980119858646943290, -0.980129777737142830, -0.980139694377018090, +-0.980149608566544210, -0.980159520305696090, -0.980169429594449190, -0.980179336432778770, -0.980189240820659950, -0.980199142758068080, -0.980209042244978400, -0.980218939281366050, +-0.980228833867206380, -0.980238726002474530, -0.980248615687145940, -0.980258502921195760, -0.980268387704599450, -0.980278270037332030, -0.980288149919368970, -0.980298027350685610, +-0.980307902331257200, -0.980317774861058980, -0.980327644940066300, -0.980337512568254520, -0.980347377745598990, -0.980357240472075060, -0.980367100747657980, -0.980376958572323100, +-0.980386813946045880, -0.980396666868801560, -0.980406517340565610, -0.980416365361313270, -0.980426210931020110, -0.980436054049661390, -0.980445894717212550, -0.980455732933649180, +-0.980465568698946300, -0.980475402013079480, -0.980485232876024180, -0.980495061287755760, -0.980504887248249690, -0.980514710757481530, -0.980524531815426540, -0.980534350422060160, +-0.980544166577357880, -0.980553980281295150, -0.980563791533847540, -0.980573600334990410, -0.980583406684699340, -0.980593210582949680, -0.980603012029717220, -0.980612811024977100, +-0.980622607568704900, -0.980632401660876170, -0.980642193301466400, -0.980651982490451160, -0.980661769227806230, -0.980671553513506660, -0.980681335347528100, -0.980691114729846270, +-0.980700891660436720, -0.980710666139274930, -0.980720438166336360, -0.980730207741596800, -0.980739974865031730, -0.980749739536616820, -0.980759501756327420, -0.980769261524139350, +-0.980779018840028050, -0.980788773703969220, -0.980798526115938430, -0.980808276075911480, -0.980818023583863720, -0.980827768639770840, -0.980837511243608630, -0.980847251395352560, +-0.980856989094978430, -0.980866724342461800, -0.980876457137778380, -0.980886187480903730, -0.980895915371813640, -0.980905640810484040, -0.980915363796890040, -0.980925084331007670, +-0.980934802412812610, -0.980944518042280560, -0.980954231219387410, -0.980963941944108410, -0.980973650216419580, -0.980983356036296720, -0.980993059403715400, -0.981002760318651410, +-0.981012458781080570, -0.981022154790978540, -0.981031848348321130, -0.981041539453084140, -0.981051228105243480, -0.981060914304774490, -0.981070598051653310, -0.981080279345855620, +-0.981089958187357110, -0.981099634576133920, -0.981109308512161600, -0.981118979995415970, -0.981128649025872820, -0.981138315603508170, -0.981147979728297590, -0.981157641400217110, +-0.981167300619242510, -0.981176957385349710, -0.981186611698514510, -0.981196263558712920, -0.981205912965920520, -0.981215559920113330, -0.981225204421267260, -0.981234846469358210, +-0.981244486064361990, -0.981254123206254710, -0.981263757895011970, -0.981273390130609880, -0.981283019913024250, -0.981292647242231090, -0.981302272118206310, -0.981311894540925820, +-0.981321514510365640, -0.981331132026501680, -0.981340747089310070, -0.981350359698766380, -0.981359969854846860, -0.981369577557527300, -0.981379182806783930, -0.981388785602592460, +-0.981398385944929340, -0.981407983833770040, -0.981417579269090680, -0.981427172250867510, -0.981436762779076320, -0.981446350853693250, -0.981455936474694310, -0.981465519642055530, +-0.981475100355753030, -0.981484678615762610, -0.981494254422060840, -0.981503827774623080, -0.981513398673425910, -0.981522967118445220, -0.981532533109657050, -0.981542096647037730, +-0.981551657730562970, -0.981561216360209210, -0.981570772535952260, -0.981580326257768480, -0.981589877525633760, -0.981599426339524460, -0.981608972699416490, -0.981618516605286210, +-0.981628058057109620, -0.981637597054862980, -0.981647133598522180, -0.981656667688063590, -0.981666199323463330, -0.981675728504697530, -0.981685255231742440, -0.981694779504574400, +-0.981704301323169220, -0.981713820687503350, -0.981723337597552810, -0.981732852053294080, -0.981742364054703050, -0.981751873601756200, -0.981761380694429750, -0.981770885332699740, +-0.981780387516542730, -0.981789887245934520, -0.981799384520851580, -0.981808879341270260, -0.981818371707166680, -0.981827861618517210, -0.981837349075298290, -0.981846834077485740, +-0.981856316625056120, -0.981865796717985790, -0.981875274356250880, -0.981884749539827850, -0.981894222268692940, -0.981903692542822500, -0.981913160362192780, -0.981922625726780240, +-0.981932088636561120, -0.981941549091511660, -0.981951007091608430, -0.981960462636827680, -0.981969915727145760, -0.981979366362539130, -0.981988814542984030, -0.981998260268456820, +-0.982007703538933960, -0.982017144354391910, -0.982026582714806920, -0.982036018620155550, -0.982045452070414050, -0.982054883065558990, -0.982064311605566620, -0.982073737690413730, +-0.982083161320076340, -0.982092582494531020, -0.982102001213754240, -0.982111417477722460, -0.982120831286412370, -0.982130242639799870, -0.982139651537861870, -0.982149057980574720, +-0.982158461967915010, -0.982167863499859070, -0.982177262576383490, -0.982186659197464730, -0.982196053363079360, -0.982205445073203840, -0.982214834327814870, -0.982224221126888560, +-0.982233605470401840, -0.982242987358331040, -0.982252366790652750, -0.982261743767343650, -0.982271118288380210, -0.982280490353738880, -0.982289859963396350, -0.982299227117329200, +-0.982308591815513890, -0.982317954057927100, -0.982327313844545520, -0.982336671175345620, -0.982346026050303970, -0.982355378469397470, -0.982364728432602360, -0.982374075939895450, +-0.982383420991253420, -0.982392763586652730, -0.982402103726070170, -0.982411441409482440, -0.982420776636866000, -0.982430109408197640, -0.982439439723454040, -0.982448767582611790, +-0.982458092985647570, -0.982467415932538170, -0.982476736423260280, -0.982486054457790470, -0.982495370036105650, -0.982504683158182400, -0.982513993823997290, -0.982523302033527330, +-0.982532607786749000, -0.982541911083639200, -0.982551211924174830, -0.982560510308332140, -0.982569806236088250, -0.982579099707419860, -0.982588390722303750, -0.982597679280716620, +-0.982606965382635260, -0.982616249028036570, -0.982625530216897140, -0.982634808949193970, -0.982644085224903980, -0.982653359044003530, -0.982662630406469730, -0.982671899312279270, +-0.982681165761409180, -0.982690429753836250, -0.982699691289537160, -0.982708950368488820, -0.982718206990668030, -0.982727461156051810, -0.982736712864616950, -0.982745962116340240, +-0.982755208911198610, -0.982764453249169060, -0.982773695130228280, -0.982782934554353500, -0.982792171521521210, -0.982801406031708400, -0.982810638084892220, -0.982819867681049340, +-0.982829094820156790, -0.982838319502191690, -0.982847541727130620, -0.982856761494950710, -0.982865978805628980, -0.982875193659142220, -0.982884406055467450, -0.982893615994581690, +-0.982902823476461850, -0.982912028501085060, -0.982921231068428320, -0.982930431178468230, -0.982939628831182240, -0.982948824026547040, -0.982958016764539870, -0.982967207045137630, +-0.982976394868317450, -0.982985580234056240, -0.982994763142331030, -0.983003943593118930, -0.983013121586396980, -0.983022297122142170, -0.983031470200331660, -0.983040640820942450, +-0.983049808983951670, -0.983058974689336450, -0.983068137937073700, -0.983077298727140670, -0.983086457059514360, -0.983095612934171800, -0.983104766351090340, -0.983113917310247000, +-0.983123065811618790, -0.983132211855182960, -0.983141355440916520, -0.983150496568796720, -0.983159635238800680, -0.983168771450905530, -0.983177905205088410, -0.983187036501326660, +-0.983196165339597190, -0.983205291719877580, -0.983214415642144510, -0.983223537106375440, -0.983232656112547510, -0.983241772660637840, -0.983250886750624000, -0.983259998382482790, +-0.983269107556191570, -0.983278214271727570, -0.983287318529068030, -0.983296420328190200, -0.983305519669071430, -0.983314616551688720, -0.983323710976019450, -0.983332802942041060, +-0.983341892449730690, -0.983350979499065470, -0.983360064090022750, -0.983369146222579980, -0.983378225896714310, -0.983387303112403190, -0.983396377869623640, -0.983405450168353120, +-0.983414520008569100, -0.983423587390248710, -0.983432652313369290, -0.983441714777908320, -0.983450774783843130, -0.983459832331150860, -0.983468887419809090, -0.983477940049795270, +-0.983486990221086430, -0.983496037933660030, -0.983505083187493630, -0.983514125982564490, -0.983523166318850060, -0.983532204196327810, -0.983541239614974970, -0.983550272574769010, +-0.983559303075687290, -0.983568331117707470, -0.983577356700806700, -0.983586379824962550, -0.983595400490152480, -0.983604418696353950, -0.983613434443544430, -0.983622447731701270, +-0.983631458560801920, -0.983640466930823960, -0.983649472841744750, -0.983658476293541970, -0.983667477286193080, -0.983676475819675430, -0.983685471893966490, -0.983694465509043940, +-0.983703456664885230, -0.983712445361467850, -0.983721431598769350, -0.983730415376767310, -0.983739396695439190, -0.983748375554762690, -0.983757351954715140, -0.983766325895274240, +-0.983775297376417560, -0.983784266398122550, -0.983793232960366910, -0.983802197063128330, -0.983811158706384140, -0.983820117890112030, -0.983829074614289590, -0.983838028878894600, +-0.983846980683904420, -0.983855930029296720, -0.983864876915049310, -0.983873821341139650, -0.983882763307545540, -0.983891702814244540, -0.983900639861214230, -0.983909574448432300, +-0.983918506575876430, -0.983927436243524300, -0.983936363451353710, -0.983945288199342020, -0.983954210487467230, -0.983963130315706810, -0.983972047684038560, -0.983980962592440280, +-0.983989875040889530, -0.983998785029364110, -0.984007692557841710, -0.984016597626300120, -0.984025500234717130, -0.984034400383070220, -0.984043298071337390, -0.984052193299496230, +-0.984061086067524630, -0.984069976375400390, -0.984078864223101310, -0.984087749610604860, -0.984096632537889040, -0.984105513004931760, -0.984114391011710610, -0.984123266558203480, +-0.984132139644388170, -0.984141010270242590, -0.984149878435744420, -0.984158744140871680, -0.984167607385601940, -0.984176468169913220, -0.984185326493783320, -0.984194182357190140, +-0.984203035760111480, -0.984211886702525350, -0.984220735184409330, -0.984229581205741550, -0.984238424766499810, -0.984247265866661890, -0.984256104506205930, -0.984264940685109720, +-0.984273774403351060, -0.984282605660908080, -0.984291434457758680, -0.984300260793880550, -0.984309084669251710, -0.984317906083850170, -0.984326725037653950, -0.984335541530640850, +-0.984344355562789100, -0.984353167134076280, -0.984361976244480520, -0.984370782893979830, -0.984379587082552240, -0.984388388810175540, -0.984397188076827970, -0.984405984882487430, +-0.984414779227131940, -0.984423571110739530, -0.984432360533288310, -0.984441147494755970, -0.984449931995120870, -0.984458714034360920, -0.984467493612454110, -0.984476270729378710, +-0.984485045385112610, -0.984493817579633830, -0.984502587312920510, -0.984511354584950650, -0.984520119395702500, -0.984528881745153960, -0.984537641633283280, -0.984546399060068580, +-0.984555154025487770, -0.984563906529519190, -0.984572656572140770, -0.984581404153330730, -0.984590149273067090, -0.984598891931328210, -0.984607632128091990, -0.984616369863336890, +-0.984625105137040710, -0.984633837949181690, -0.984642568299738170, -0.984651296188688190, -0.984660021616009960, -0.984668744581681740, -0.984677465085681550, -0.984686183127987840, +-0.984694898708578740, -0.984703611827432160, -0.984712322484526670, -0.984721030679840400, -0.984729736413351490, -0.984738439685038270, -0.984747140494878990, -0.984755838842851780, +-0.984764534728935100, -0.984773228153106970, -0.984781919115345740, -0.984790607615629750, -0.984799293653937260, -0.984807977230246490, -0.984816658344535800, -0.984825336996783650, +-0.984834013186967950, -0.984842686915067270, -0.984851358181059840, -0.984860026984924030, -0.984868693326638070, -0.984877357206180640, -0.984886018623529650, -0.984894677578663560, +-0.984903334071560830, -0.984911988102199710, -0.984920639670558650, -0.984929288776616010, -0.984937935420350130, -0.984946579601739480, -0.984955221320762300, -0.984963860577397270, +-0.984972497371622400, -0.984981131703416280, -0.984989763572757360, -0.984998392979623990, -0.985007019923994750, -0.985015644405847880, -0.985024266425161940, -0.985032885981915300, +-0.985041503076086400, -0.985050117707653830, -0.985058729876595930, -0.985067339582891170, -0.985075946826518000, -0.985084551607455120, -0.985093153925680860, -0.985101753781173710, +-0.985110351173912100, -0.985118946103874630, -0.985127538571039740, -0.985136128575386020, -0.985144716116892250, -0.985153301195536350, -0.985161883811297320, -0.985170463964153530, +-0.985179041654083650, -0.985187616881066150, -0.985196189645079600, -0.985204759946102570, -0.985213327784113630, -0.985221893159091480, -0.985230456071014450, -0.985239016519861340, +-0.985247574505610620, -0.985256130028241080, -0.985264683087731190, -0.985273233684059610, -0.985281781817204940, -0.985290327487145730, -0.985298870693860800, -0.985307411437328580, +-0.985315949717527890, -0.985324485534437300, -0.985333018888035480, -0.985341549778301130, -0.985350078205213140, -0.985358604168749760, -0.985367127668889790, -0.985375648705612120, +-0.985384167278895220, -0.985392683388717990, -0.985401197035059130, -0.985409708217897200, -0.985418216937210880, -0.985426723192979080, -0.985435226985180490, -0.985443728313793900, +-0.985452227178797880, -0.985460723580171340, -0.985469217517892960, -0.985477708991941650, -0.985486198002296090, -0.985494684548934960, -0.985503168631837070, -0.985511650250981310, +-0.985520129406346370, -0.985528606097911260, -0.985537080325654460, -0.985545552089555080, -0.985554021389591690, -0.985562488225743330, -0.985570952597988660, -0.985579414506306710, +-0.985587873950676150, -0.985596330931075900, -0.985604785447484870, -0.985613237499882060, -0.985621687088245930, -0.985630134212555630, -0.985638578872790050, -0.985647021068927880, +-0.985655460800948240, -0.985663898068830150, -0.985672332872552070, -0.985680765212093250, -0.985689195087432470, -0.985697622498548640, -0.985706047445420790, -0.985714469928027910, +-0.985722889946348710, -0.985731307500362420, -0.985739722590047940, -0.985748135215384070, -0.985756545376349710, -0.985764953072924110, -0.985773358305086170, -0.985781761072814790, +-0.985790161376089100, -0.985798559214887900, -0.985806954589190320, -0.985815347498975260, -0.985823737944221960, -0.985832125924909210, -0.985840511441016250, -0.985848894492521890, +-0.985857275079405460, -0.985865653201645880, -0.985874028859222040, -0.985882402052113080, -0.985890772780298130, -0.985899141043756310, -0.985907506842466640, -0.985915870176408250, +-0.985924231045560150, -0.985932589449901360, -0.985940945389411240, -0.985949298864068680, -0.985957649873852810, -0.985965998418742880, -0.985974344498718010, -0.985982688113757220, +-0.985991029263839640, -0.985999367948944720, -0.986007704169051260, -0.986016037924138500, -0.986024369214185680, -0.986032698039171820, -0.986041024399076480, -0.986049348293878360, +-0.986057669723556910, -0.986065988688091370, -0.986074305187460750, -0.986082619221644310, -0.986090930790621490, -0.986099239894371200, -0.986107546532872910, -0.986115850706105630, +-0.986124152414049050, -0.986132451656681840, -0.986140748433983470, -0.986149042745933290, -0.986157334592510430, -0.986165623973694340, -0.986173910889464270, -0.986182195339799230, +-0.986190477324678790, -0.986198756844082090, -0.986207033897988580, -0.986215308486377400, -0.986223580609227990, -0.986231850266519720, -0.986240117458231700, -0.986248382184343520, +-0.986256644444834300, -0.986264904239683490, -0.986273161568870350, -0.986281416432374320, -0.986289668830174770, -0.986297918762251260, -0.986306166228582690, -0.986314411229148760, +-0.986322653763928800, -0.986330893832902180, -0.986339131436048460, -0.986347366573346760, -0.986355599244776670, -0.986363829450317640, -0.986372057189949140, -0.986380282463650280, +-0.986388505271400870, -0.986396725613180040, -0.986404943488967570, -0.986413158898742590, -0.986421371842484910, -0.986429582320173640, -0.986437790331788470, -0.986445995877308750, +-0.986454198956714160, -0.986462399569983940, -0.986470597717097770, -0.986478793398035130, -0.986486986612775450, -0.986495177361298330, -0.986503365643583430, -0.986511551459610000, +-0.986519734809357620, -0.986527915692805960, -0.986536094109934480, -0.986544270060722980, -0.986552443545150590, -0.986560614563197100, -0.986568783114842080, -0.986576949200065110, +-0.986585112818845760, -0.986593273971163590, -0.986601432656998290, -0.986609588876329440, -0.986617742629136480, -0.986625893915399450, -0.986634042735097470, -0.986642189088210440, +-0.986650332974717830, -0.986658474394599530, -0.986666613347834900, -0.986674749834403950, -0.986682883854286040, -0.986691015407460850, -0.986699144493908160, -0.986707271113607560, +-0.986715395266538840, -0.986723516952681570, -0.986731636172015540, -0.986739752924520430, -0.986747867210176040, -0.986755979028961950, -0.986764088380857830, -0.986772195265843480, +-0.986780299683898690, -0.986788401635003030, -0.986796501119136640, -0.986804598136278850, -0.986812692686409480, -0.986820784769508410, -0.986828874385555440, -0.986836961534530270, +-0.986845046216412670, -0.986853128431182450, -0.986861208178819390, -0.986869285459303410, -0.986877360272614190, -0.986885432618731520, -0.986893502497635300, -0.986901569909305220, +-0.986909634853721300, -0.986917697330863430, -0.986925757340711200, -0.986933814883244500, -0.986941869958443350, -0.986949922566287440, -0.986957972706756780, -0.986966020379831170, +-0.986974065585490500, -0.986982108323714690, -0.986990148594483640, -0.986998186397777370, -0.987006221733575440, -0.987014254601857880, -0.987022285002604800, -0.987030312935796020, +-0.987038338401411530, -0.987046361399431030, -0.987054381929834750, -0.987062399992602370, -0.987070415587714130, -0.987078428715149720, -0.987086439374889270, -0.987094447566912780, +-0.987102453291200170, -0.987110456547731440, -0.987118457336486620, -0.987126455657445610, -0.987134451510588430, -0.987142444895895090, -0.987150435813345610, -0.987158424262920110, +-0.987166410244598720, -0.987174393758361020, -0.987182374804187470, -0.987190353382057960, -0.987198329491952520, -0.987206303133851270, -0.987214274307734340, -0.987222243013581640, +-0.987230209251373390, -0.987238173021089740, -0.987246134322710470, -0.987254093156215930, -0.987262049521586140, -0.987270003418801220, -0.987277954847841200, -0.987285903808686530, +-0.987293850301317000, -0.987301794325712740, -0.987309735881854110, -0.987317674969721120, -0.987325611589293880, -0.987333545740552540, -0.987341477423477440, -0.987349406638048710, +-0.987357333384246470, -0.987365257662050850, -0.987373179471442100, -0.987381098812400330, -0.987389015684905780, -0.987396930088938810, -0.987404842024479650, -0.987412751491508090, +-0.987420658490004820, -0.987428563019949860, -0.987436465081323430, -0.987444364674105900, -0.987452261798277390, -0.987460156453818350, -0.987468048640708810, -0.987475938358929220, +-0.987483825608459820, -0.987491710389280850, -0.987499592701372440, -0.987507472544715160, -0.987515349919289240, -0.987523224825075040, -0.987531097262052570, -0.987538967230202400, +-0.987546834729504890, -0.987554699759940260, -0.987562562321488870, -0.987570422414130960, -0.987578280037847090, -0.987586135192617620, -0.987593987878422670, -0.987601838095242930, +-0.987609685843058530, -0.987617531121849800, -0.987625373931597330, -0.987633214272281350, -0.987641052143882310, -0.987648887546380920, -0.987656720479757060, -0.987664550943991420, +-0.987672378939064450, -0.987680204464956520, -0.987688027521648080, -0.987695848109119480, -0.987703666227351400, -0.987711481876324070, -0.987719295056018190, -0.987727105766413870, +-0.987734914007491920, -0.987742719779232560, -0.987750523081616480, -0.987758323914624040, -0.987766122278236010, -0.987773918172432430, -0.987781711597194190, -0.987789502552501530, +-0.987797291038335250, -0.987805077054675570, -0.987812860601503310, -0.987820641678798910, -0.987828420286542940, -0.987836196424715980, -0.987843970093298380, -0.987851741292270940, +-0.987859510021614100, -0.987867276281308440, -0.987875040071334640, -0.987882801391673390, -0.987890560242304930, -0.987898316623210150, -0.987906070534369520, -0.987913821975763720, +-0.987921570947373430, -0.987929317449179110, -0.987937061481161560, -0.987944803043301350, -0.987952542135579150, -0.987960278757975760, -0.987968012910471430, -0.987975744593047160, +-0.987983473805683520, -0.987991200548361200, -0.987998924821061000, -0.988006646623763360, -0.988014365956449090, -0.988022082819098870, -0.988029797211693480, -0.988037509134213620, +-0.988045218586639960, -0.988052925568953190, -0.988060630081134210, -0.988068332123163580, -0.988076031695022340, -0.988083728796690820, -0.988091423428150040, -0.988099115589380680, +-0.988106805280363430, -0.988114492501079410, -0.988122177251508970, -0.988129859531633130, -0.988137539341432670, -0.988145216680888280, -0.988152891549980870, -0.988160563948691340, +-0.988168233877000260, -0.988175901334888640, -0.988183566322337280, -0.988191228839327200, -0.988198888885838840, -0.988206546461853240, -0.988214201567351290, -0.988221854202313900, +-0.988229504366721740, -0.988237152060556070, -0.988244797283797330, -0.988252440036426650, -0.988260080318424830, -0.988267718129772880, -0.988275353470451480, -0.988282986340441870, +-0.988290616739724630, -0.988298244668280980, -0.988305870126091830, -0.988313493113137880, -0.988321113629400120, -0.988328731674859570, -0.988336347249497260, -0.988343960353294080, +-0.988351570986231160, -0.988359179148289080, -0.988366784839449180, -0.988374388059692240, -0.988381988808999300, -0.988389587087351470, -0.988397182894729660, -0.988404776231114780, +-0.988412367096488050, -0.988419955490830390, -0.988427541414123030, -0.988435124866346660, -0.988442705847482390, -0.988450284357511480, -0.988457860396414810, -0.988465433964173630, +-0.988473005060768740, -0.988480573686181250, -0.988488139840392410, -0.988495703523383230, -0.988503264735134720, -0.988510823475628130, -0.988518379744844470, -0.988525933542764750, +-0.988533484869370320, -0.988541033724642300, -0.988548580108561500, -0.988556124021109260, -0.988563665462266820, -0.988571204432015070, -0.988578740930335490, -0.988586274957208970, +-0.988593806512616750, -0.988601335596539950, -0.988608862208959940, -0.988616386349857600, -0.988623908019214400, -0.988631427217011470, -0.988638943943229930, -0.988646458197851020, +-0.988653969980856080, -0.988661479292226140, -0.988668986131942430, -0.988676490499986290, -0.988683992396338970, -0.988691491820981590, -0.988698988773895620, -0.988706483255062160, +-0.988713975264462360, -0.988721464802077680, -0.988728951867889340, -0.988736436461878590, -0.988743918584026770, -0.988751398234315130, -0.988758875412725000, -0.988766350119237860, +-0.988773822353834710, -0.988781292116497010, -0.988788759407206010, -0.988796224225943150, -0.988803686572689690, -0.988811146447427180, -0.988818603850136760, -0.988826058780799770, +-0.988833511239397560, -0.988840961225911590, -0.988848408740323310, -0.988855853782613980, -0.988863296352764930, -0.988870736450757740, -0.988878174076573750, -0.988885609230194310, +-0.988893041911600770, -0.988900472120774590, -0.988907899857697340, -0.988915325122350250, -0.988922747914715020, -0.988930168234772760, -0.988937586082505040, -0.988945001457893440, +-0.988952414360919300, -0.988959824791564190, -0.988967232749809470, -0.988974638235636580, -0.988982041249027220, -0.988989441789962730, -0.988996839858424680, -0.989004235454394530, +-0.989011628577853740, -0.989019019228783880, -0.989026407407166410, -0.989033793112983120, -0.989041176346215250, -0.989048557106844360, -0.989055935394852150, -0.989063311210219950, +-0.989070684552929680, -0.989078055422962570, -0.989085423820300400, -0.989092789744924540, -0.989100153196816880, -0.989107514175958880, -0.989114872682331890, -0.989122228715917820, +-0.989129582276698120, -0.989136933364654580, -0.989144281979768560, -0.989151628122022060, -0.989158971791396340, -0.989166312987873160, -0.989173651711434230, -0.989180987962061110, +-0.989188321739735590, -0.989195653044439240, -0.989202981876153850, -0.989210308234860890, -0.989217632120542260, -0.989224953533179520, -0.989232272472754360, -0.989239588939248570, +-0.989246902932643720, -0.989254214452921610, -0.989261523500064130, -0.989268830074052750, -0.989276134174869260, -0.989283435802495450, -0.989290734956913000, -0.989298031638103810, +-0.989305325846049470, -0.989312617580731750, -0.989319906842132560, -0.989327193630233800, -0.989334477945016830, -0.989341759786463770, -0.989349039154556190, -0.989356316049276100, +-0.989363590470605180, -0.989370862418525340, -0.989378131893018380, -0.989385398894065960, -0.989392663421650110, -0.989399925475752510, -0.989407185056355170, -0.989414442163439880, +-0.989421696796988440, -0.989428948956982860, -0.989436198643404820, -0.989443445856236450, -0.989450690595459310, -0.989457932861055430, -0.989465172653006710, -0.989472409971295150, +-0.989479644815902560, -0.989486877186810830, -0.989494107084001870, -0.989501334507457700, -0.989508559457160100, -0.989515781933091090, -0.989523001935232680, -0.989530219463566780, +-0.989537434518075410, -0.989544647098740350, -0.989551857205543730, -0.989559064838467450, -0.989566269997493530, -0.989573472682603870, -0.989580672893780490, -0.989587870631005510, +-0.989595065894260940, -0.989602258683528580, -0.989609448998790660, -0.989616636840028980, -0.989623822207225780, -0.989631005100363060, -0.989638185519422840, -0.989645363464387030, +-0.989652538935237860, -0.989659711931957560, -0.989666882454527830, -0.989674050502930780, -0.989681216077148650, -0.989688379177163570, -0.989695539802957440, -0.989702697954512710, +-0.989709853631810970, -0.989717006834834660, -0.989724157563565800, -0.989731305817986630, -0.989738451598079160, -0.989745594903825520, -0.989752735735207940, -0.989759874092208450, +-0.989767009974809490, -0.989774143382992850, -0.989781274316740790, -0.989788402776035640, -0.989795528760859410, -0.989802652271194350, -0.989809773307022800, -0.989816891868326780, +-0.989824007955088400, -0.989831121567290140, -0.989838232704914000, -0.989845341367942220, -0.989852447556357150, -0.989859551270141020, -0.989866652509275970, -0.989873751273744220, +-0.989880847563528230, -0.989887941378610030, -0.989895032718972060, -0.989902121584596450, -0.989909207975465440, -0.989916291891561610, -0.989923373332866950, -0.989930452299363830, +-0.989937528791034580, -0.989944602807861560, -0.989951674349827000, -0.989958743416913260, -0.989965810009102550, -0.989972874126377470, -0.989979935768720120, -0.989986994936113080, +-0.989994051628538490, -0.990001105845978670, -0.990008157588416090, -0.990015206855833220, -0.990022253648212280, -0.990029297965535740, -0.990036339807785940, -0.990043379174945230, +-0.990050416066996180, -0.990057450483920910, -0.990064482425702220, -0.990071511892322120, -0.990078538883763400, -0.990085563400008310, -0.990092585441039400, -0.990099605006838910, +-0.990106622097389310, -0.990113636712673270, -0.990120648852673150, -0.990127658517371390, -0.990134665706750570, -0.990141670420792930, -0.990148672659481250, -0.990155672422797780, +-0.990162669710725200, -0.990169664523245840, -0.990176656860342400, -0.990183646721997320, -0.990190634108193080, -0.990197619018912460, -0.990204601454137580, -0.990211581413851240, +-0.990218558898035890, -0.990225533906674230, -0.990232506439748690, -0.990239476497241980, -0.990246444079136530, -0.990253409185414930, -0.990260371816059860, -0.990267331971053770, +-0.990274289650379340, -0.990281244854019250, -0.990288197581956080, -0.990295147834172380, -0.990302095610650750, -0.990309040911374060, -0.990315983736324680, -0.990322924085485280, +-0.990329861958838540, -0.990336797356367260, -0.990343730278054000, -0.990350660723881340, -0.990357588693832060, -0.990364514187888840, -0.990371437206034270, -0.990378357748251110, +-0.990385275814521960, -0.990392191404829810, -0.990399104519157030, -0.990406015157486610, -0.990412923319801130, -0.990419829006083390, -0.990426732216315940, -0.990433632950481700, +-0.990440531208563460, -0.990447426990543780, -0.990454320296405680, -0.990461211126131720, -0.990468099479704710, -0.990474985357107430, -0.990481868758322670, -0.990488749683333220, +-0.990495628132121890, -0.990502504104671560, -0.990509377600964910, -0.990516248620984970, -0.990523117164714310, -0.990529983232135920, -0.990536846823232400, -0.990543707937986850, +-0.990550566576382070, -0.990557422738400970, -0.990564276424026220, -0.990571127633240730, -0.990577976366027400, -0.990584822622369130, -0.990591666402248830, -0.990598507705649390, +-0.990605346532553720, -0.990612182882944610, -0.990619016756805190, -0.990625848154118030, -0.990632677074866350, -0.990639503519032960, -0.990646327486600750, -0.990653148977552740, +-0.990659967991872060, -0.990666784529541270, -0.990673598590543490, -0.990680410174861860, -0.990687219282479050, -0.990694025913378300, -0.990700830067542390, -0.990707631744954460, +-0.990714430945597410, -0.990721227669454360, -0.990728021916508330, -0.990734813686742100, -0.990741602980138800, -0.990748389796681560, -0.990755174136353280, -0.990761955999137300, +-0.990768735385016200, -0.990775512293973320, -0.990782286725991670, -0.990789058681054270, -0.990795828159144240, -0.990802595160244600, -0.990809359684338480, -0.990816121731408980, +-0.990822881301439250, -0.990829638394412290, -0.990836393010311230, -0.990843145149119200, -0.990849894810819200, -0.990856641995394470, -0.990863386702828250, -0.990870128933103670, +-0.990876868686203500, -0.990883605962111340, -0.990890340760810060, -0.990897073082282920, -0.990903802926513140, -0.990910530293483860, -0.990917255183178190, -0.990923977595579490, +-0.990930697530670870, -0.990937414988435460, -0.990944129968856500, -0.990950842471917110, -0.990957552497600760, -0.990964260045890440, -0.990970965116769630, -0.990977667710221220, +-0.990984367826228780, -0.990991065464775330, -0.990997760625844220, -0.991004453309418660, -0.991011143515482030, -0.991017831244017540, -0.991024516495008450, -0.991031199268438190, +-0.991037879564289790, -0.991044557382546820, -0.991051232723192290, -0.991057905586209760, -0.991064575971582480, -0.991071243879293910, -0.991077909309327040, -0.991084572261665350, +-0.991091232736292290, -0.991097890733191210, -0.991104546252345340, -0.991111199293738140, -0.991117849857352850, -0.991124497943173030, -0.991131143551181930, -0.991137786681363100, +-0.991144427333699670, -0.991151065508175220, -0.991157701204773090, -0.991164334423476730, -0.991170965164269610, -0.991177593427134960, -0.991184219212056240, -0.991190842519017120, +-0.991197463348000850, -0.991204081698990880, -0.991210697571970780, -0.991217310966923890, -0.991223921883833680, -0.991230530322683710, -0.991237136283457550, -0.991243739766138440, +-0.991250340770709950, -0.991256939297155640, -0.991263535345458860, -0.991270128915603400, -0.991276720007572610, -0.991283308621350060, -0.991289894756919090, -0.991296478414263490, +-0.991303059593366620, -0.991309638294212150, -0.991316214516783530, -0.991322788261064350, -0.991329359527038270, -0.991335928314688970, -0.991342494623999590, -0.991349058454954020, +-0.991355619807535840, -0.991362178681728600, -0.991368735077515880, -0.991375288994881480, -0.991381840433808730, -0.991388389394281420, -0.991394935876283130, -0.991401479879797430, +-0.991408021404808100, -0.991414560451298720, -0.991421097019252850, -0.991427631108654280, -0.991434162719486810, -0.991440691851733780, -0.991447218505378980, -0.991453742680406200, +-0.991460264376799020, -0.991466783594541100, -0.991473300333616470, -0.991479814594008470, -0.991486326375700890, -0.991492835678677520, -0.991499342502921930, -0.991505846848418140, +-0.991512348715149710, -0.991518848103100430, -0.991525345012253980, -0.991531839442594150, -0.991538331394104850, -0.991544820866769650, -0.991551307860572330, -0.991557792375496790, +-0.991564274411526720, -0.991570753968646130, -0.991577231046838480, -0.991583705646087890, -0.991590177766377920, -0.991596647407692490, -0.991603114570015490, -0.991609579253330710, +-0.991616041457621940, -0.991622501182873100, -0.991628958429068060, -0.991635413196190640, -0.991641865484224620, -0.991648315293154000, -0.991654762622962480, -0.991661207473634070, +-0.991667649845152650, -0.991674089737502260, -0.991680527150666570, -0.991686962084629480, -0.991693394539374990, -0.991699824514887030, -0.991706252011149590, -0.991712677028146360, +-0.991719099565861570, -0.991725519624279020, -0.991731937203382710, -0.991738352303156550, -0.991744764923584430, -0.991751175064650380, -0.991757582726338400, -0.991763987908632520, +-0.991770390611516730, -0.991776790834974830, -0.991783188578991060, -0.991789583843549210, -0.991795976628633500, -0.991802366934227740, -0.991808754760316160, -0.991815140106882650, +-0.991821522973911350, -0.991827903361386260, -0.991834281269291300, -0.991840656697610680, -0.991847029646328430, -0.991853400115428550, -0.991859768104895290, -0.991866133614712650, +-0.991872496644864540, -0.991878857195335200, -0.991885215266108730, -0.991891570857169170, -0.991897923968500740, -0.991904274600087570, -0.991910622751913550, -0.991916968423963040, +-0.991923311616220160, -0.991929652328669140, -0.991935990561293780, -0.991942326314078530, -0.991948659587007400, -0.991954990380064630, -0.991961318693234450, -0.991967644526500990, +-0.991973967879848260, -0.991980288753260720, -0.991986607146722490, -0.991992923060217690, -0.991999236493730560, -0.992005547447245340, -0.992011855920746250, -0.992018161914217540, +-0.992024465427643550, -0.992030766461008300, -0.992037065014296120, -0.992043361087491250, -0.992049654680578040, -0.992055945793540620, -0.992062234426363540, -0.992068520579030610, +-0.992074804251526500, -0.992081085443835330, -0.992087364155941450, -0.992093640387829210, -0.992099914139482840, -0.992106185410886690, -0.992112454202025100, -0.992118720512882410, +-0.992124984343442870, -0.992131245693690820, -0.992137504563610720, -0.992143760953186790, -0.992150014862403510, -0.992156266291245310, -0.992162515239696340, -0.992168761707741040, +-0.992175005695363880, -0.992181247202549190, -0.992187486229281320, -0.992193722775544850, -0.992199956841324000, -0.992206188426603240, -0.992212417531367130, -0.992218644155599900, +-0.992224868299286020, -0.992231089962410050, -0.992237309144956230, -0.992243525846909220, -0.992249740068253510, -0.992255951808973300, -0.992262161069053290, -0.992268367848477830, +-0.992274572147231470, -0.992280773965298570, -0.992286973302663910, -0.992293170159311620, -0.992299364535226600, -0.992305556430393090, -0.992311745844795760, -0.992317932778418950, +-0.992324117231247360, -0.992330299203265430, -0.992336478694457850, -0.992342655704809060, -0.992348830234303650, -0.992355002282926060, -0.992361171850660970, -0.992367338937493070, +-0.992373503543406700, -0.992379665668386530, -0.992385825312417370, -0.992391982475483550, -0.992398137157569750, -0.992404289358660760, -0.992410439078740940, -0.992416586317794950, +-0.992422731075807580, -0.992428873352763310, -0.992435013148647020, -0.992441150463443060, -0.992447285297136220, -0.992453417649711180, -0.992459547521152620, -0.992465674911445220, +-0.992471799820573540, -0.992477922248522380, -0.992484042195276530, -0.992490159660820440, -0.992496274645139120, -0.992502387148216920, -0.992508497170038860, -0.992514604710589500, +-0.992520709769853740, -0.992526812347816030, -0.992532912444461510, -0.992539010059774630, -0.992545105193740170, -0.992551197846342940, -0.992557288017567710, -0.992563375707399280, +-0.992569460915822430, -0.992575543642821860, -0.992581623888382450, -0.992587701652489220, -0.992593776935126510, -0.992599849736279350, -0.992605920055932620, -0.992611987894071010, +-0.992618053250679530, -0.992624116125742970, -0.992630176519246010, -0.992636234431173550, -0.992642289861510600, -0.992648342810241950, -0.992654393277352390, -0.992660441262826820, +-0.992666486766650150, -0.992672529788807270, -0.992678570329283190, -0.992684608388062610, -0.992690643965130510, -0.992696677060471710, -0.992702707674071320, -0.992708735805914120, +-0.992714761455985140, -0.992720784624269270, -0.992726805310751300, -0.992732823515416360, -0.992738839238249460, -0.992744852479235380, -0.992750863238359150, -0.992756871515605770, +-0.992762877310960250, -0.992768880624407490, -0.992774881455932730, -0.992780879805520540, -0.992786875673156270, -0.992792869058824690, -0.992798859962511050, -0.992804848384200240, +-0.992810834323877290, -0.992816817781527310, -0.992822798757135190, -0.992828777250686080, -0.992834753262165080, -0.992840726791557100, -0.992846697838847380, -0.992852666404020920, +-0.992858632487062740, -0.992864596087958180, -0.992870557206691930, -0.992876515843249320, -0.992882471997615480, -0.992888425669775420, -0.992894376859714270, -0.992900325567417250, +-0.992906271792869390, -0.992912215536055800, -0.992918156796961720, -0.992924095575572150, -0.992930031871872450, -0.992935965685847630, -0.992941897017482920, -0.992947825866763440, +-0.992953752233674440, -0.992959676118201020, -0.992965597520328420, -0.992971516440041890, -0.992977432877326430, -0.992983346832167490, -0.992989258304550200, -0.992995167294459800, +-0.993001073801881410, -0.993006977826800250, -0.993012879369201800, -0.993018778429071050, -0.993024675006393350, -0.993030569101153950, -0.993036460713338180, -0.993042349842931380, +-0.993048236489918580, -0.993054120654285110, -0.993060002336016430, -0.993065881535097780, -0.993071758251514390, -0.993077632485251600, -0.993083504236294770, -0.993089373504629110, +-0.993095240290239990, -0.993101104593112850, -0.993106966413232930, -0.993112825750585570, -0.993118682605156120, -0.993124536976930040, -0.993130388865892550, -0.993136238272029240, +-0.993142085195325210, -0.993147929635765920, -0.993153771593336840, -0.993159611068023310, -0.993165448059810880, -0.993171282568684810, -0.993177114594630430, -0.993182944137633310, +-0.993188771197678790, -0.993194595774752330, -0.993200417868839500, -0.993206237479925540, -0.993212054607996000, -0.993217869253036230, -0.993223681415032030, -0.993229491093968410, +-0.993235298289831150, -0.993241103002605600, -0.993246905232277320, -0.993252704978831780, -0.993258502242254540, -0.993264297022531050, -0.993270089319646670, -0.993275879133587170, +-0.993281666464337910, -0.993287451311884560, -0.993293233676212470, -0.993299013557307430, -0.993304790955154780, -0.993310565869740200, -0.993316338301049150, -0.993322108249067300, +-0.993327875713780120, -0.993333640695173270, -0.993339403193232330, -0.993345163207942970, -0.993350920739290650, -0.993356675787261060, -0.993362428351839630, -0.993368178433012280, +-0.993373926030764350, -0.993379671145081740, -0.993385413775949910, -0.993391153923354420, -0.993396891587281280, -0.993402626767715850, -0.993408359464643790, -0.993414089678050780, +-0.993419817407922620, -0.993425542654244880, -0.993431265417003330, -0.993436985696183660, -0.993442703491771440, -0.993448418803752450, -0.993454131632112380, -0.993459841976837010, +-0.993465549837912130, -0.993471255215323310, -0.993476958109056340, -0.993482658519097010, -0.993488356445431100, -0.993494051888044180, -0.993499744846922160, -0.993505435322050710, +-0.993511123313415730, -0.993516808821003130, -0.993522491844798350, -0.993528172384787300, -0.993533850440955770, -0.993539526013289760, -0.993545199101774860, -0.993550869706396940, +-0.993556537827141820, -0.993562203463995490, -0.993567866616943520, -0.993573527285972040, -0.993579185471066610, -0.993584841172213240, -0.993590494389397730, -0.993596145122606080, +-0.993601793371823970, -0.993607439137037530, -0.993613082418232430, -0.993618723215394570, -0.993624361528509860, -0.993629997357564300, -0.993635630702543680, -0.993641261563434130, +-0.993646889940221320, -0.993652515832891270, -0.993658139241430090, -0.993663760165823470, -0.993669378606057420, -0.993674994562117830, -0.993680608033990830, -0.993686219021662430, +-0.993691827525118420, -0.993697433544344810, -0.993703037079327610, -0.993708638130052830, -0.993714236696506380, -0.993719832778674480, -0.993725426376542930, -0.993731017490097730, +-0.993736606119325130, -0.993742192264211010, -0.993747775924741280, -0.993753357100902180, -0.993758935792679710, -0.993764512000059890, -0.993770085723028830, -0.993775656961572550, +-0.993781225715677060, -0.993786791985328600, -0.993792355770513060, -0.993797917071216670, -0.993803475887425460, -0.993809032219125530, -0.993814586066303130, -0.993820137428944150, +-0.993825686307034940, -0.993831232700561510, -0.993836776609509980, -0.993842318033866470, -0.993847856973617110, -0.993853393428748120, -0.993858927399245860, -0.993864458885096110, +-0.993869987886285220, -0.993875514402799310, -0.993881038434624720, -0.993886559981747460, -0.993892079044153780, -0.993897595621830000, -0.993903109714762150, -0.993908621322936560, +-0.993914130446339470, -0.993919637084957010, -0.993925141238775400, -0.993930642907780990, -0.993936142091959910, -0.993941638791298600, -0.993947133005783190, -0.993952624735399910, +-0.993958113980135010, -0.993963600739974810, -0.993969085014905660, -0.993974566804913810, -0.993980046109985470, -0.993985522930107110, -0.993990997265264850, -0.993996469115445260, +-0.994001938480634450, -0.994007405360818660, -0.994012869755984460, -0.994018331666118080, -0.994023791091205760, -0.994029248031234160, -0.994034702486189300, -0.994040154456057760, +-0.994045603940825750, -0.994051050940479740, -0.994056495455006180, -0.994061937484391310, -0.994067377028621580, -0.994072814087683440, -0.994078248661563360, -0.994083680750247670, +-0.994089110353722600, -0.994094537471974850, -0.994099962104990740, -0.994105384252756740, -0.994110803915259300, -0.994116221092484880, -0.994121635784419810, -0.994127047991050670, +-0.994132457712363920, -0.994137864948346110, -0.994143269698983480, -0.994148671964262820, -0.994154071744170360, -0.994159469038692790, -0.994164863847816660, -0.994170256171528210, +-0.994175646009814120, -0.994181033362660950, -0.994186418230055270, -0.994191800611983530, -0.994197180508432200, -0.994202557919387940, -0.994207932844837330, -0.994213305284766810, +-0.994218675239163070, -0.994224042708012680, -0.994229407691302190, -0.994234770189018070, -0.994240130201147100, -0.994245487727675960, -0.994250842768590880, -0.994256195323878770, +-0.994261545393526180, -0.994266892977519690, -0.994272238075845970, -0.994277580688491810, -0.994282920815443560, -0.994288258456688000, -0.994293593612211810, -0.994298926282001560, +-0.994304256466044030, -0.994309584164325910, -0.994314909376833870, -0.994320232103554470, -0.994325552344474620, -0.994330870099580770, -0.994336185368859820, -0.994341498152298330, +-0.994346808449883100, -0.994352116261600800, -0.994357421587438450, -0.994362724427382380, -0.994368024781419390, -0.994373322649536480, -0.994378618031720230, -0.994383910927957420, +-0.994389201338234830, -0.994394489262539260, -0.994399774700857500, -0.994405057653176330, -0.994410338119482430, -0.994415616099762700, -0.994420891594003930, -0.994426164602192910, +-0.994431435124316530, -0.994436703160361590, -0.994441968710314870, -0.994447231774163170, -0.994452492351893480, -0.994457750443492490, -0.994463006048947110, -0.994468259168244220, +-0.994473509801370730, -0.994478757948313420, -0.994484003609059200, -0.994489246783595070, -0.994494487471907830, -0.994499725673984260, -0.994504961389811370, -0.994510194619376180, +-0.994515425362665570, -0.994520653619666240, -0.994525879390365300, -0.994531102674749650, -0.994536323472806290, -0.994541541784522030, -0.994546757609883980, -0.994551970948879040, +-0.994557181801494220, -0.994562390167716410, -0.994567596047532640, -0.994572799440929910, -0.994578000347895120, -0.994583198768415280, -0.994588394702477510, -0.994593588150068820, +-0.994598779111176110, -0.994603967585786400, -0.994609153573886800, -0.994614337075464320, -0.994619518090505970, -0.994624696618998880, -0.994629872660930060, -0.994635046216286510, +-0.994640217285055360, -0.994645385867223730, -0.994650551962778520, -0.994655715571706960, -0.994660876693996170, -0.994666035329633160, -0.994671191478605050, -0.994676345140898980, +-0.994681496316502050, -0.994686645005401380, -0.994691791207584110, -0.994696934923037230, -0.994702076151748100, -0.994707214893703840, -0.994712351148891450, -0.994717484917298280, +-0.994722616198911450, -0.994727744993717970, -0.994732871301705070, -0.994737995122860100, -0.994743116457170060, -0.994748235304622310, -0.994753351665203960, -0.994758465538902240, +-0.994763576925704270, -0.994768685825597410, -0.994773792238568880, -0.994778896164605800, -0.994783997603695510, -0.994789096555825260, -0.994794193020982150, -0.994799286999153650, +-0.994804378490326990, -0.994809467494489290, -0.994814554011627990, -0.994819638041730240, -0.994824719584783470, -0.994829798640774920, -0.994834875209691720, -0.994839949291521420, +-0.994845020886251260, -0.994850089993868590, -0.994855156614360640, -0.994860220747714740, -0.994865282393918360, -0.994870341552958730, -0.994875398224823290, -0.994880452409499410, +-0.994885504106974290, -0.994890553317235530, -0.994895600040270220, -0.994900644276066060, -0.994905686024610160, -0.994910725285890200, -0.994915762059893400, -0.994920796346607130, +-0.994925828146018820, -0.994930857458116050, -0.994935884282886040, -0.994940908620316370, -0.994945930470394370, -0.994950949833107610, -0.994955966708443550, -0.994960981096389530, +-0.994965992996933000, -0.994971002410061420, -0.994976009335762470, -0.994981013774023370, -0.994986015724831920, -0.994991015188175340, -0.994996012164041210, -0.995001006652416970, +-0.995005998653290310, -0.995010988166648680, -0.995015975192479530, -0.995020959730770430, -0.995025941781508940, -0.995030921344682630, -0.995035898420279060, -0.995040873008285590, +-0.995045845108690100, -0.995050814721479830, -0.995055781846642670, -0.995060746484166090, -0.995065708634037540, -0.995070668296244690, -0.995075625470775220, -0.995080580157616690, +-0.995085532356756670, -0.995090482068182850, -0.995095429291882770, -0.995100374027844240, -0.995105316276054700, -0.995110256036501940, -0.995115193309173420, -0.995120128094057030, +-0.995125060391140240, -0.995129990200410820, -0.995134917521856450, -0.995139842355464820, -0.995144764701223480, -0.995149684559120340, -0.995154601929142850, -0.995159516811279010, +-0.995164429205516290, -0.995169339111842470, -0.995174246530245330, -0.995179151460712560, -0.995184053903232060, -0.995188953857791270, -0.995193851324378100, -0.995198746302980330, +-0.995203638793585750, -0.995208528796181930, -0.995213416310756990, -0.995218301337298380, -0.995223183875794120, -0.995228063926231750, -0.995232941488599310, -0.995237816562884460, +-0.995242689149075100, -0.995247559247159020, -0.995252426857124010, -0.995257291978958070, -0.995262154612648780, -0.995267014758184130, -0.995271872415551930, -0.995276727584740060, +-0.995281580265736320, -0.995286430458528830, -0.995291278163105030, -0.995296123379453170, -0.995300966107560910, -0.995305806347416280, -0.995310644099007160, -0.995315479362321340, +-0.995320312137346840, -0.995325142424071660, -0.995329970222483600, -0.995334795532570650, -0.995339618354320610, -0.995344438687721490, -0.995349256532761410, -0.995354071889428040, +-0.995358884757709730, -0.995363695137594040, -0.995368503029069100, -0.995373308432122910, -0.995378111346743480, -0.995382911772918710, -0.995387709710636730, -0.995392505159885420, +-0.995397298120652920, -0.995402088592927110, -0.995406876576696130, -0.995411662071947980, -0.995416445078670550, -0.995421225596852090, -0.995426003626480590, -0.995430779167544190, +-0.995435552220030660, -0.995440322783928240, -0.995445090859225060, -0.995449856445909220, -0.995454619543968630, -0.995459380153391530, -0.995464138274166020, -0.995468893906280130, +-0.995473647049722080, -0.995478397704479880, -0.995483145870541650, -0.995487891547895520, -0.995492634736529710, -0.995497375436432350, -0.995502113647591560, -0.995506849369995450, +-0.995511582603632150, -0.995516313348490000, -0.995521041604557010, -0.995525767371821410, -0.995530490650271330, -0.995535211439895100, -0.995539929740680840, -0.995544645552616790, +-0.995549358875691180, -0.995554069709892020, -0.995558778055207760, -0.995563483911626520, -0.995568187279136650, -0.995572888157726270, -0.995577586547383710, -0.995582282448097100, +-0.995586975859854780, -0.995591666782645100, -0.995596355216456170, -0.995601041161276460, -0.995605724617094070, -0.995610405583897350, -0.995615084061674650, -0.995619760050414300, +-0.995624433550104440, -0.995629104560733610, -0.995633773082289950, -0.995638439114761800, -0.995643102658137600, -0.995647763712405710, -0.995652422277554460, -0.995657078353571980, +-0.995661731940446940, -0.995666383038167460, -0.995671031646722100, -0.995675677766099110, -0.995680321396286930, -0.995684962537274010, -0.995689601189048590, -0.995694237351599340, +-0.995698871024914280, -0.995703502208982180, -0.995708130903791290, -0.995712757109330050, -0.995717380825587030, -0.995722002052550460, -0.995726620790208910, -0.995731237038550710, +-0.995735850797564550, -0.995740462067238650, -0.995745070847561700, -0.995749677138522030, -0.995754280940108090, -0.995758882252308570, -0.995763481075111810, -0.995768077408506370, +-0.995772671252480700, -0.995777262607023370, -0.995781851472122840, -0.995786437847767770, -0.995791021733946510, -0.995795603130647740, -0.995800182037860030, -0.995804758455571700, +-0.995809332383771560, -0.995813903822448170, -0.995818472771589860, -0.995823039231185540, -0.995827603201223430, -0.995832164681692560, -0.995836723672581140, -0.995841280173877850, +-0.995845834185571490, -0.995850385707650390, -0.995854934740103450, -0.995859481282919230, -0.995864025336086200, -0.995868566899593130, -0.995873105973428600, -0.995877642557581380, +-0.995882176652039930, -0.995886708256793150, -0.995891237371829610, -0.995895763997137860, -0.995900288132706920, -0.995904809778525020, -0.995909328934581280, -0.995913845600864040, +-0.995918359777362320, -0.995922871464064660, -0.995927380660959870, -0.995931887368036620, -0.995936391585283580, -0.995940893312689650, -0.995945392550243390, -0.995949889297933710, +-0.995954383555749280, -0.995958875323678880, -0.995963364601711310, -0.995967851389835350, -0.995972335688039780, -0.995976817496313280, -0.995981296814644870, -0.995985773643023100, +-0.995990247981436980, -0.995994719829875200, -0.995999189188326640, -0.996003656056780100, -0.996008120435224350, -0.996012582323648420, -0.996017041722040970, -0.996021498630390910, +-0.996025953048687020, -0.996030404976918420, -0.996034854415073670, -0.996039301363141890, -0.996043745821111880, -0.996048187788972420, -0.996052627266712510, -0.996057064254320950, +-0.996061498751786960, -0.996065930759098990, -0.996070360276246290, -0.996074787303217630, -0.996079211840002140, -0.996083633886588490, -0.996088053442965800, -0.996092470509122970, +-0.996096885085048900, -0.996101297170732700, -0.996105706766163280, -0.996110113871329640, -0.996114518486220570, -0.996118920610825300, -0.996123320245132620, -0.996127717389131750, +-0.996132112042811600, -0.996136504206161180, -0.996140893879169380, -0.996145281061825430, -0.996149665754118230, -0.996154047956036900, -0.996158427667570460, -0.996162804888707900, +-0.996167179619438350, -0.996171551859750930, -0.996175921609634530, -0.996180288869078390, -0.996184653638071520, -0.996189015916602920, -0.996193375704661820, -0.996197733002237460, +-0.996202087809318630, -0.996206440125894540, -0.996210789951954330, -0.996215137287487230, -0.996219482132482240, -0.996223824486928590, -0.996228164350815290, -0.996232501724131690, +-0.996236836606866900, -0.996241168999009830, -0.996245498900549920, -0.996249826311476290, -0.996254151231778070, -0.996258473661444490, -0.996262793600464770, -0.996267111048827920, +-0.996271426006523410, -0.996275738473540230, -0.996280048449867840, -0.996284355935495250, -0.996288660930411800, -0.996292963434606600, -0.996297263448069130, -0.996301560970788370, +-0.996305856002753900, -0.996310148543954610, -0.996314438594380070, -0.996318726154019400, -0.996323011222861820, -0.996327293800896910, -0.996331573888113550, -0.996335851484501430, +-0.996340126590049560, -0.996344399204747380, -0.996348669328584240, -0.996352936961549470, -0.996357202103632210, -0.996361464754822120, -0.996365724915108220, -0.996369982584480170, +-0.996374237762927110, -0.996378490450438360, -0.996382740647003500, -0.996386988352611750, -0.996391233567252450, -0.996395476290915180, -0.996399716523589160, -0.996403954265263850, +-0.996408189515928690, -0.996412422275573030, -0.996416652544186320, -0.996420880321758020, -0.996425105608277460, -0.996429328403734100, -0.996433548708117510, -0.996437766521417020, +-0.996441981843622090, -0.996446194674722290, -0.996450405014706830, -0.996454612863565510, -0.996458818221287680, -0.996463021087862780, -0.996467221463280260, -0.996471419347529700, +-0.996475614740600530, -0.996479807642482450, -0.996483998053164790, -0.996488185972637110, -0.996492371400888980, -0.996496554337910070, -0.996500734783689610, -0.996504912738217290, +-0.996509088201482760, -0.996513261173475500, -0.996517431654185050, -0.996521599643601210, -0.996525765141713200, -0.996529928148510710, -0.996534088663983520, -0.996538246688121080, +-0.996542402220913060, -0.996546555262348920, -0.996550705812418450, -0.996554853871111310, -0.996558999438416860, -0.996563142514325100, -0.996567283098825360, -0.996571421191907450, +-0.996575556793561020, -0.996579689903775660, -0.996583820522541130, -0.996587948649847010, -0.996592074285682970, -0.996596197430038800, -0.996600318082904170, -0.996604436244268640, +-0.996608551914122010, -0.996612665092454160, -0.996616775779254450, -0.996620883974512980, -0.996624989678219220, -0.996629092890363060, -0.996633193610934050, -0.996637291839922110, +-0.996641387577316910, -0.996645480823108220, -0.996649571577285950, -0.996653659839839670, -0.996657745610759260, -0.996661828890034520, -0.996665909677655120, -0.996669987973610950, +-0.996674063777891920, -0.996678137090487580, -0.996682207911388060, -0.996686276240582920, -0.996690342078062170, -0.996694405423815490, -0.996698466277832760, -0.996702524640104000, +-0.996706580510618780, -0.996710633889367200, -0.996714684776339070, -0.996718733171524150, -0.996722779074912470, -0.996726822486493690, -0.996730863406257940, -0.996734901834195110, +-0.996738937770294990, -0.996742971214547470, -0.996747002166942560, -0.996751030627470170, -0.996755056596120180, -0.996759080072882500, -0.996763101057747130, -0.996767119550704070, +-0.996771135551743240, -0.996775149060854520, -0.996779160078027910, -0.996783168603253330, -0.996787174636521000, -0.996791178177820590, -0.996795179227142230, -0.996799177784476020, +-0.996803173849811870, -0.996807167423139680, -0.996811158504449680, -0.996815147093731760, -0.996819133190975930, -0.996823116796172300, -0.996827097909310900, -0.996831076530381720, +-0.996835052659374890, -0.996839026296280410, -0.996842997441088290, -0.996846966093788760, -0.996850932254371710, -0.996854895922827390, -0.996858857099145900, -0.996862815783317150, +-0.996866771975331470, -0.996870725675178870, -0.996874676882849360, -0.996878625598333290, -0.996882571821620540, -0.996886515552701360, -0.996890456791565960, -0.996894395538204360, +-0.996898331792606780, -0.996902265554763470, -0.996906196824664300, -0.996910125602299750, -0.996914051887659910, -0.996917975680734920, -0.996921896981515010, -0.996925815789990290, +-0.996929732106151100, -0.996933645929987570, -0.996937557261489920, -0.996941466100648380, -0.996945372447453180, -0.996949276301894450, -0.996953177663962740, -0.996957076533647960, +-0.996960972910940440, -0.996964866795830520, -0.996968758188308430, -0.996972647088364530, -0.996976533495988910, -0.996980417411172050, -0.996984298833904050, -0.996988177764175370, +-0.996992054201976230, -0.996995928147296980, -0.996999799600127860, -0.997003668560459190, -0.997007535028281430, -0.997011399003584930, -0.997015260486359800, -0.997019119476596490, +-0.997022975974285460, -0.997026829979416940, -0.997030681491981370, -0.997034530511969110, -0.997038377039370480, -0.997042221074175950, -0.997046062616375850, -0.997049901665960640, +-0.997053738222920650, -0.997057572287246340, -0.997061403858928050, -0.997065232937956240, -0.997069059524321450, -0.997072883618013940, -0.997076705219024140, -0.997080524327342730, +-0.997084340942959830, -0.997088155065866230, -0.997091966696052160, -0.997095775833508170, -0.997099582478224830, -0.997103386630192490, -0.997107188289401700, -0.997110987455842920, +-0.997114784129506710, -0.997118578310383420, -0.997122369998463820, -0.997126159193738150, -0.997129945896197300, -0.997133730105831400, -0.997137511822631220, -0.997141291046587330, +-0.997145067777690080, -0.997148842015930240, -0.997152613761298270, -0.997156383013784840, -0.997160149773380410, -0.997163914040075650, -0.997167675813861010, -0.997171435094727280, +-0.997175191882664900, -0.997178946177664450, -0.997182697979716810, -0.997186447288812340, -0.997190194104941810, -0.997193938428095670, -0.997197680258264830, -0.997201419595439730, +-0.997205156439611050, -0.997208890790769460, -0.997212622648905640, -0.997216352014010380, -0.997220078886074220, -0.997223803265087750, -0.997227525151041850, -0.997231244543927090, +-0.997234961443734250, -0.997238675850454000, -0.997242387764077140, -0.997246097184594230, -0.997249804111996150, -0.997253508546273480, -0.997257210487417000, -0.997260909935417610, +-0.997264606890265860, -0.997268301351952550, -0.997271993320468560, -0.997275682795804590, -0.997279369777951510, -0.997283054266899890, -0.997286736262640640, -0.997290415765164530, +-0.997294092774462460, -0.997297767290525110, -0.997301439313343360, -0.997305108842908020, -0.997308775879209850, -0.997312440422239770, -0.997316102471988540, -0.997319762028447190, +-0.997323419091606270, -0.997327073661456900, -0.997330725737989860, -0.997334375321195950, -0.997338022411066170, -0.997341667007591300, -0.997345309110762250, -0.997348948720569890, +-0.997352585837005260, -0.997356220460059120, -0.997359852589722480, -0.997363482225986140, -0.997367109368841100, -0.997370734018278250, -0.997374356174288600, -0.997377975836863050, +-0.997381593005992610, -0.997385207681668050, -0.997388819863880730, -0.997392429552621200, -0.997396036747880580, -0.997399641449649880, -0.997403243657920100, -0.997406843372682150, +-0.997410440593927250, -0.997414035321646080, -0.997417627555829860, -0.997421217296469600, -0.997424804543556310, -0.997428389297081000, -0.997431971557034670, -0.997435551323408440, +-0.997439128596193330, -0.997442703375380550, -0.997446275660960780, -0.997449845452925480, -0.997453412751265420, -0.997456977555971960, -0.997460539867035980, -0.997464099684448710, +-0.997467657008201170, -0.997471211838284470, -0.997474764174689720, -0.997478314017408160, -0.997481861366430690, -0.997485406221748640, -0.997488948583353020, -0.997492488451235060, +-0.997496025825385880, -0.997499560705796710, -0.997503093092458550, -0.997506622985362630, -0.997510150384500300, -0.997513675289862460, -0.997517197701440540, -0.997520717619225560, +-0.997524235043208750, -0.997527749973381340, -0.997531262409734550, -0.997534772352259740, -0.997538279800947890, -0.997541784755790360, -0.997545287216778380, -0.997548787183903160, +-0.997552284657156060, -0.997555779636528080, -0.997559272122010790, -0.997562762113595290, -0.997566249611272830, -0.997569734615034840, -0.997573217124872460, -0.997576697140777010, +-0.997580174662739850, -0.997583649690752310, -0.997587122224805610, -0.997590592264891000, -0.997594059811000020, -0.997597524863123810, -0.997600987421253920, -0.997604447485381460, +-0.997607905055497900, -0.997611360131594570, -0.997614812713662920, -0.997618262801694190, -0.997621710395679710, -0.997625155495611150, -0.997628598101479520, -0.997632038213276510, +-0.997635475830993320, -0.997638910954621430, -0.997642343584152380, -0.997645773719577300, -0.997649201360887970, -0.997652626508075510, -0.997656049161131600, -0.997659469320047450, +-0.997662886984814650, -0.997666302155424730, -0.997669714831868950, -0.997673125014138850, -0.997676532702226120, -0.997679937896121860, -0.997683340595817870, -0.997686740801305480, +-0.997690138512576260, -0.997693533729621660, -0.997696926452433240, -0.997700316681002560, -0.997703704415321080, -0.997707089655380240, -0.997710472401171830, -0.997713852652687080, +-0.997717230409917780, -0.997720605672855370, -0.997723978441491520, -0.997727348715817700, -0.997730716495825450, -0.997734081781506470, -0.997737444572852290, -0.997740804869854500, +-0.997744162672504650, -0.997747517980794420, -0.997750870794715360, -0.997754221114259150, -0.997757568939417360, -0.997760914270181760, -0.997764257106543710, -0.997767597448495080, +-0.997770935296027560, -0.997774270649132600, -0.997777603507801980, -0.997780933872027380, -0.997784261741800460, -0.997787587117112800, -0.997790909997956170, -0.997794230384322360, +-0.997797548276202930, -0.997800863673589560, -0.997804176576474130, -0.997807486984848220, -0.997810794898703720, -0.997814100318032080, -0.997817403242825200, -0.997820703673074850, +-0.997824001608772710, -0.997827297049910580, -0.997830589996480220, -0.997833880448473430, -0.997837168405881880, -0.997840453868697460, -0.997843736836911850, -0.997847017310516840, +-0.997850295289504420, -0.997853570773866160, -0.997856843763593960, -0.997860114258679820, -0.997863382259115310, -0.997866647764892310, -0.997869910776002620, -0.997873171292438240, +-0.997876429314190960, -0.997879684841252560, -0.997882937873615040, -0.997886188411270080, -0.997889436454209580, -0.997892682002425650, -0.997895925055909850, -0.997899165614654300, +-0.997902403678650910, -0.997905639247891440, -0.997908872322367910, -0.997912102902072220, -0.997915330986996250, -0.997918556577131910, -0.997921779672471200, -0.997925000273006120, +-0.997928218378728470, -0.997931433989630360, -0.997934647105703570, -0.997937857726940100, -0.997941065853332090, -0.997944271484871410, -0.997947474621549980, -0.997950675263359900, +-0.997953873410293180, -0.997957069062341720, -0.997960262219497630, -0.997963452881752920, -0.997966641049099490, -0.997969826721529450, -0.997973009899034920, -0.997976190581607910, +-0.997979368769240320, -0.997982544461924360, -0.997985717659651940, -0.997988888362415280, -0.997992056570206510, -0.997995222283017510, -0.997998385500840410, -0.998001546223667320, +-0.998004704451490480, -0.998007860184301880, -0.998011013422093640, -0.998014164164857780, -0.998017312412586510, -0.998020458165271960, -0.998023601422906360, -0.998026742185481710, +-0.998029880452990240, -0.998033016225423950, -0.998036149502775190, -0.998039280285036080, -0.998042408572198720, -0.998045534364255360, -0.998048657661198100, -0.998051778463019290, +-0.998054896769711040, -0.998058012581265590, -0.998061125897675040, -0.998064236718931630, -0.998067345045027700, -0.998070450875955360, -0.998073554211706960, -0.998076655052274610, +-0.998079753397650650, -0.998082849247827310, -0.998085942602796820, -0.998089033462551510, -0.998092121827083510, -0.998095207696385270, -0.998098291070449120, -0.998101371949267180, +-0.998104450332831790, -0.998107526221135190, -0.998110599614169920, -0.998113670511928010, -0.998116738914402000, -0.998119804821584240, -0.998122868233466850, -0.998125929150042280, +-0.998128987571302970, -0.998132043497241160, -0.998135096927849190, -0.998138147863119500, -0.998141196303044430, -0.998144242247616440, -0.998147285696827760, -0.998150326650670940, +-0.998153365109138320, -0.998156401072222250, -0.998159434539915070, -0.998162465512209440, -0.998165493989097710, -0.998168519970572100, -0.998171543456625180, -0.998174564447249500, +-0.998177582942437300, -0.998180598942181250, -0.998183612446473690, -0.998186623455306950, -0.998189631968673830, -0.998192637986566540, -0.998195641508977770, -0.998198642535899740, +-0.998201641067325230, -0.998204637103246580, -0.998207630643656250, -0.998210621688546910, -0.998213610237911110, -0.998216596291741200, -0.998219579850029850, -0.998222560912769400, +-0.998225539479952630, -0.998228515551572100, -0.998231489127620160, -0.998234460208089590, -0.998237428792972840, -0.998240394882262460, -0.998243358475951140, -0.998246319574031430, +-0.998249278176496000, -0.998252234283337200, -0.998255187894547920, -0.998258139010120730, -0.998261087630048060, -0.998264033754322820, -0.998266977382937350, -0.998269918515884540, +-0.998272857153156830, -0.998275793294747030, -0.998278726940647790, -0.998281658090851680, -0.998284586745351480, -0.998287512904139750, -0.998290436567209280, -0.998293357734552630, +-0.998296276406162700, -0.998299192582032040, -0.998302106262153430, -0.998305017446519560, -0.998307926135123090, -0.998310832327956810, -0.998313736025013500, -0.998316637226285720, +-0.998319535931766480, -0.998322432141448330, -0.998325325855324190, -0.998328217073386700, -0.998331105795628670, -0.998333992022042870, -0.998336875752621980, -0.998339756987358990, +-0.998342635726246600, -0.998345511969277680, -0.998348385716445020, -0.998351256967741300, -0.998354125723159400, -0.998356991982692230, -0.998359855746332570, -0.998362717014073310, +-0.998365575785907230, -0.998368432061827240, -0.998371285841826110, -0.998374137125896840, -0.998376985914032230, -0.998379832206225060, -0.998382676002468330, -0.998385517302754930, +-0.998388356107077770, -0.998391192415429730, -0.998394026227803710, -0.998396857544192610, -0.998399686364589310, -0.998402512688986830, -0.998405336517378060, -0.998408157849756010, +-0.998410976686113560, -0.998413793026443620, -0.998416606870739190, -0.998419418218993270, -0.998422227071198880, -0.998425033427348780, -0.998427837287436120, -0.998430638651453980, +-0.998433437519395170, -0.998436233891252800, -0.998439027767019760, -0.998441819146689170, -0.998444608030254140, -0.998447394417707470, -0.998450178309042370, -0.998452959704251740, +-0.998455738603328810, -0.998458515006266590, -0.998461288913057960, -0.998464060323696170, -0.998466829238174200, -0.998469595656485190, -0.998472359578622130, -0.998475121004578250, +-0.998477879934346560, -0.998480636367920170, -0.998483390305292100, -0.998486141746455670, -0.998488890691403790, -0.998491637140129670, -0.998494381092626560, -0.998497122548887450, +-0.998499861508905460, -0.998502597972674040, -0.998505331940185870, -0.998508063411434500, -0.998510792386412940, -0.998513518865114410, -0.998516242847532150, -0.998518964333659160, +-0.998521683323488900, -0.998524399817014350, -0.998527113814228760, -0.998529825315125460, -0.998532534319697460, -0.998535240827938320, -0.998537944839840930, -0.998540646355398740, +-0.998543345374604980, -0.998546041897452770, -0.998548735923935450, -0.998551427454046350, -0.998554116487778700, -0.998556803025125730, -0.998559487066080780, -0.998562168610637070, +-0.998564847658787950, -0.998567524210526640, -0.998570198265846590, -0.998572869824741030, -0.998575538887203410, -0.998578205453226730, -0.998580869522804670, -0.998583531095930450, +-0.998586190172597420, -0.998588846752798800, -0.998591500836528150, -0.998594152423778690, -0.998596801514543890, -0.998599448108817180, -0.998602092206591680, -0.998604733807861080, +-0.998607372912618580, -0.998610009520857660, -0.998612643632571740, -0.998615275247754170, -0.998617904366398410, -0.998620530988497900, -0.998623155114046090, -0.998625776743036430, +-0.998628395875462260, -0.998631012511317030, -0.998633626650594410, -0.998636238293287630, -0.998638847439390350, -0.998641454088895930, -0.998644058241797810, -0.998646659898089540, +-0.998649259057764690, -0.998651855720816610, -0.998654449887238950, -0.998657041557025170, -0.998659630730168720, -0.998662217406663280, -0.998664801586502280, -0.998667383269679300, +-0.998669962456187780, -0.998672539146021390, -0.998675113339173580, -0.998677685035638140, -0.998680254235408400, -0.998682820938478040, -0.998685385144840620, -0.998687946854489810, +-0.998690506067419050, -0.998693062783622020, -0.998695617003092280, -0.998698168725823620, -0.998700717951809480, -0.998703264681043650, -0.998705808913519570, -0.998708350649230910, +-0.998710889888171470, -0.998713426630334690, -0.998715960875714460, -0.998718492624304340, -0.998721021876097900, -0.998723548631088920, -0.998726072889271070, -0.998728594650638120, +-0.998731113915183540, -0.998733630682901330, -0.998736144953784930, -0.998738656727828240, -0.998741166005024830, -0.998743672785368570, -0.998746177068853160, -0.998748678855472250, +-0.998751178145219630, -0.998753674938089090, -0.998756169234074400, -0.998758661033169240, -0.998761150335367500, -0.998763637140662740, -0.998766121449048970, -0.998768603260519860, +-0.998771082575069300, -0.998773559392691080, -0.998776033713378860, -0.998778505537126660, -0.998780974863928140, -0.998783441693777090, -0.998785906026667500, -0.998788367862593170, +-0.998790827201547880, -0.998793284043525630, -0.998795738388520090, -0.998798190236525270, -0.998800639587534840, -0.998803086441542920, -0.998805530798543280, -0.998807972658529720, +-0.998810412021496340, -0.998812848887436820, -0.998815283256345280, -0.998817715128215490, -0.998820144503041460, -0.998822571380816980, -0.998824995761536160, -0.998827417645192780, +-0.998829837031780960, -0.998832253921294490, -0.998834668313727360, -0.998837080209073580, -0.998839489607327050, -0.998841896508481870, -0.998844300912531850, -0.998846702819471190, +-0.998849102229293680, -0.998851499141993450, -0.998853893557564600, -0.998856285476000920, -0.998858674897296410, -0.998861061821445410, -0.998863446248441590, -0.998865828178279180, +-0.998868207610952300, -0.998870584546454830, -0.998872958984780900, -0.998875330925924620, -0.998877700369880000, -0.998880067316641140, -0.998882431766202060, -0.998884793718556870, +-0.998887153173699800, -0.998889510131624860, -0.998891864592326040, -0.998894216555797580, -0.998896566022033580, -0.998898912991028180, -0.998901257462775580, -0.998903599437269700, +-0.998905938914504960, -0.998908275894475280, -0.998910610377174880, -0.998912942362597980, -0.998915271850738810, -0.998917598841591370, -0.998919923335150010, -0.998922245331408720, +-0.998924564830361960, -0.998926881832003730, -0.998929196336328260, -0.998931508343329780, -0.998933817853002610, -0.998936124865340890, -0.998938429380338830, -0.998940731397990670, +-0.998943030918290730, -0.998945327941233140, -0.998947622466812350, -0.998949914495022350, -0.998952204025857720, -0.998954491059312440, -0.998956775595380990, -0.998959057634057680, +-0.998961337175336640, -0.998963614219212310, -0.998965888765678930, -0.998968160814730830, -0.998970430366362240, -0.998972697420567710, -0.998974961977341370, -0.998977224036677660, +-0.998979483598570810, -0.998981740663015260, -0.998983995230005470, -0.998986247299535560, -0.998988496871600070, -0.998990743946193360, -0.998992988523309870, -0.998995230602943820, +-0.998997470185089660, -0.998999707269741970, -0.999001941856894840, -0.999004173946542950, -0.999006403538680640, -0.999008630633302250, -0.999010855230402340, -0.999013077329975240, +-0.999015296932015520, -0.999017514036517510, -0.999019728643475660, -0.999021940752884640, -0.999024150364738680, -0.999026357479032350, -0.999028562095760080, -0.999030764214916430, +-0.999032963836495980, -0.999035160960492940, -0.999037355586902100, -0.999039547715717900, -0.999041737346934800, -0.999043924480547350, -0.999046109116550120, -0.999048291254937550, +-0.999050470895704310, -0.999052648038844860, -0.999054822684353750, -0.999056994832225650, -0.999059164482455020, -0.999061331635036520, -0.999063496289964710, -0.999065658447234160, +-0.999067818106839420, -0.999069975268775060, -0.999072129933035850, -0.999074282099616350, -0.999076431768511130, -0.999078578939714860, -0.999080723613222090, -0.999082865789027500, +-0.999085005467125750, -0.999087142647511530, -0.999089277330179380, -0.999091409515124100, -0.999093539202340230, -0.999095666391822570, -0.999097791083565780, -0.999099913277564420, +-0.999102032973813390, -0.999104150172307140, -0.999106264873040660, -0.999108377076008410, -0.999110486781205290, -0.999112593988625950, -0.999114698698265080, -0.999116800910117450, +-0.999118900624177850, -0.999120997840440950, -0.999123092558901640, -0.999125184779554590, -0.999127274502394580, -0.999129361727416290, -0.999131446454614710, -0.999133528683984420, +-0.999135608415520290, -0.999137685649217230, -0.999139760385070020, -0.999141832623073320, -0.999143902363222040, -0.999145969605510940, -0.999148034349934930, -0.999150096596488900, +-0.999152156345167630, -0.999154213595965900, -0.999156268348878720, -0.999158320603900860, -0.999160370361027230, -0.999162417620252600, -0.999164462381571970, -0.999166504644980140, +-0.999168544410471980, -0.999170581678042620, -0.999172616447686730, -0.999174648719399320, -0.999176678493175260, -0.999178705769009470, -0.999180730546897040, -0.999182752826832670, +-0.999184772608811440, -0.999186789892828280, -0.999188804678878270, -0.999190816966956110, -0.999192826757056900, -0.999194834049175640, -0.999196838843307340, -0.999198841139446900, +-0.999200840937589430, -0.999202838237729820, -0.999204833039863070, -0.999206825343984310, -0.999208815150088410, -0.999210802458170510, -0.999212787268225600, -0.999214769580248690, +-0.999216749394234880, -0.999218726710179310, -0.999220701528076850, -0.999222673847922520, -0.999224643669711640, -0.999226610993439120, -0.999228575819100070, -0.999230538146689610, +-0.999232497976202730, -0.999234455307634660, -0.999236410140980410, -0.999238362476235100, -0.999240312313393940, -0.999242259652452060, -0.999244204493404450, -0.999246146836246350, +-0.999248086680972870, -0.999250024027579230, -0.999251958876060550, -0.999253891226411840, -0.999255821078628540, -0.999257748432705540, -0.999259673288638290, -0.999261595646421920, +-0.999263515506051410, -0.999265432867522120, -0.999267347730829370, -0.999269260095968170, -0.999271169962933750, -0.999273077331721550, -0.999274982202326580, -0.999276884574744170, +-0.999278784448969560, -0.999280681824997960, -0.999282576702824610, -0.999284469082444950, -0.999286358963853980, -0.999288246347047160, -0.999290131232019820, -0.999292013618767070, +-0.999293893507284260, -0.999295770897566720, -0.999297645789609780, -0.999299518183408790, -0.999301388078958960, -0.999303255476255540, -0.999305120375294180, -0.999306982776069890, +-0.999308842678578220, -0.999310700082814420, -0.999312554988773800, -0.999314407396451830, -0.999316257305843840, -0.999318104716945270, -0.999319949629751350, -0.999321792044257640, +-0.999323631960459370, -0.999325469378352090, -0.999327304297931150, -0.999329136719191880, -0.999330966642129730, -0.999332794066740250, -0.999334618993018790, -0.999336441420960790, +-0.999338261350561700, -0.999340078781816850, -0.999341893714721820, -0.999343706149272150, -0.999345516085463180, -0.999347323523290370, -0.999349128462749370, -0.999350930903835420, +-0.999352730846544190, -0.999354528290871120, -0.999356323236811780, -0.999358115684361610, -0.999359905633516070, -0.999361693084270810, -0.999363478036621400, -0.999365260490563290, +-0.999367040446091930, -0.999368817903202980, -0.999370592861892120, -0.999372365322154680, -0.999374135283986330, -0.999375902747382640, -0.999377667712339160, -0.999379430178851560, +-0.999381190146915400, -0.999382947616526130, -0.999384702587679640, -0.999386455060371380, -0.999388205034596910, -0.999389952510352010, -0.999391697487632240, -0.999393439966433150, +-0.999395179946750420, -0.999396917428579830, -0.999398652411916940, -0.999400384896757420, -0.999402114883096940, -0.999403842370931160, -0.999405567360255760, -0.999407289851066420, +-0.999409009843358900, -0.999410727337128880, -0.999412442332372030, -0.999414154829084020, -0.999415864827260640, -0.999417572326897650, -0.999419277327990740, -0.999420979830535570, +-0.999422679834527930, -0.999424377339963590, -0.999426072346838450, -0.999427764855148060, -0.999429454864888210, -0.999431142376054680, -0.999432827388643360, -0.999434509902650040, +-0.999436189918070260, -0.999437867434900150, -0.999439542453135380, -0.999441214972771720, -0.999442884993805070, -0.999444552516231100, -0.999446217540045810, -0.999447880065244990, +-0.999449540091824410, -0.999451197619780070, -0.999452852649107660, -0.999454505179803170, -0.999456155211862370, -0.999457802745281290, -0.999459447780055580, -0.999461090316181240, +-0.999462730353654290, -0.999464367892470400, -0.999466002932625660, -0.999467635474115990, -0.999469265516937040, -0.999470893061085050, -0.999472518106555800, -0.999474140653345280, +-0.999475760701449390, -0.999477378250864130, -0.999478993301585410, -0.999480605853609210, -0.999482215906931430, -0.999483823461548180, -0.999485428517455250, -0.999487031074648870, +-0.999488631133124920, -0.999490228692879400, -0.999491823753908220, -0.999493416316207580, -0.999495006379773290, -0.999496593944601550, -0.999498179010688380, -0.999499761578029670, +-0.999501341646621630, -0.999502919216460170, -0.999504494287541510, -0.999506066859861540, -0.999507636933416380, -0.999509204508202130, -0.999510769584214920, -0.999512332161450750, +-0.999513892239905720, -0.999515449819576070, -0.999517004900457700, -0.999518557482546810, -0.999520107565839640, -0.999521655150332090, -0.999523200236020480, -0.999524742822900820, +-0.999526282910969340, -0.999527820500222040, -0.999529355590655370, -0.999530888182265210, -0.999532418275047800, -0.999533945868999350, -0.999535470964116100, -0.999536993560394160, +-0.999538513657829750, -0.999540031256418990, -0.999541546356158220, -0.999543058957043540, -0.999544569059071190, -0.999546076662237380, -0.999547581766538570, -0.999549084371970650, +-0.999550584478530070, -0.999552082086212930, -0.999553577195015700, -0.999555069804934470, -0.999556559915965590, -0.999558047528105400, -0.999559532641350000, -0.999561015255695740, +-0.999562495371138950, -0.999563972987675960, -0.999565448105303010, -0.999566920724016540, -0.999568390843812660, -0.999569858464687820, -0.999571323586638360, -0.999572786209660610, +-0.999574246333750800, -0.999575703958905490, -0.999577159085120790, -0.999578611712393260, -0.999580061840719240, -0.999581509470095050, -0.999582954600517050, -0.999584397231981780, +-0.999585837364485360, -0.999587274998024470, -0.999588710132595320, -0.999590142768194360, -0.999591572904818150, -0.999593000542462920, -0.999594425681125220, -0.999595848320801510, +-0.999597268461488110, -0.999598686103181480, -0.999600101245878280, -0.999601513889574740, -0.999602924034267430, -0.999604331679952770, -0.999605736826627340, -0.999607139474287590, +-0.999608539622929950, -0.999609937272550990, -0.999611332423147150, -0.999612725074714990, -0.999614115227251080, -0.999615502880751740, -0.999616888035213760, -0.999618270690633580, +-0.999619650847007660, -0.999621028504332540, -0.999622403662605020, -0.999623776321821420, -0.999625146481978310, -0.999626514143072460, -0.999627879305100220, -0.999629241968058360, +-0.999630602131943320, -0.999631959796751790, -0.999633314962480420, -0.999634667629125670, -0.999636017796684320, -0.999637365465152920, -0.999638710634528140, -0.999640053304806540, +-0.999641393475984800, -0.999642731148059570, -0.999644066321027540, -0.999645398994885250, -0.999646729169629600, -0.999648056845257040, -0.999649382021764450, -0.999650704699148300, +-0.999652024877405340, -0.999653342556532490, -0.999654657736526180, -0.999655970417383190, -0.999657280599100310, -0.999658588281674310, -0.999659893465101760, -0.999661196149379430, +-0.999662496334504210, -0.999663794020472670, -0.999665089207281700, -0.999666381894927960, -0.999667672083408340, -0.999668959772719520, -0.999670244962858280, -0.999671527653821390, +-0.999672807845605750, -0.999674085538208020, -0.999675360731625110, -0.999676633425853780, -0.999677903620890930, -0.999679171316733230, -0.999680436513377680, -0.999681699210820950, +-0.999682959409060050, -0.999684217108091740, -0.999685472307912940, -0.999686725008520400, -0.999687975209911040, -0.999689222912081730, -0.999690468115029370, -0.999691710818750860, +-0.999692951023243070, -0.999694188728502910, -0.999695423934527260, -0.999696656641313130, -0.999697886848857300, -0.999699114557156760, -0.999700339766208420, -0.999701562476009160, +-0.999702782686556100, -0.999704000397846020, -0.999705215609876020, -0.999706428322642890, -0.999707638536143750, -0.999708846250375480, -0.999710051465335090, -0.999711254181019580, +-0.999712454397425950, -0.999713652114551210, -0.999714847332392350, -0.999716040050946280, -0.999717230270210200, -0.999718417990181020, -0.999719603210855730, -0.999720785932231460, +-0.999721966154305310, -0.999723143877074170, -0.999724319100535160, -0.999725491824685400, -0.999726662049521870, -0.999727829775041710, -0.999728995001242020, -0.999730157728119790, +-0.999731317955672160, -0.999732475683896230, -0.999733630912789110, -0.999734783642347910, -0.999735933872569870, -0.999737081603451870, -0.999738226834991140, -0.999739369567184900, +-0.999740509800030260, -0.999741647533524350, -0.999742782767664260, -0.999743915502447230, -0.999745045737870490, -0.999746173473931020, -0.999747298710626180, -0.999748421447953170, +-0.999749541685909020, -0.999750659424490930, -0.999751774663696360, -0.999752887403522190, -0.999753997643965890, -0.999755105385024660, -0.999756210626695620, -0.999757313368976000, +-0.999758413611863130, -0.999759511355354240, -0.999760606599446540, -0.999761699344137390, -0.999762789589423880, -0.999763877335303470, -0.999764962581773390, -0.999766045328830840, +-0.999767125576473180, -0.999768203324697740, -0.999769278573501840, -0.999770351322882720, -0.999771421572837720, -0.999772489323364040, -0.999773554574459270, -0.999774617326120610, +-0.999775677578345400, -0.999776735331130980, -0.999777790584474690, -0.999778843338373970, -0.999779893592826150, -0.999780941347828580, -0.999781986603378580, -0.999783029359473720, +-0.999784069616111220, -0.999785107373288630, -0.999786142631003180, -0.999787175389252440, -0.999788205648033720, -0.999789233407344490, -0.999790258667182190, -0.999791281427544250, +-0.999792301688428140, -0.999793319449831190, -0.999794334711750940, -0.999795347474184970, -0.999796357737130600, -0.999797365500585290, -0.999798370764546580, -0.999799373529011940, +-0.999800373793978790, -0.999801371559444820, -0.999802366825407350, -0.999803359591864060, -0.999804349858812280, -0.999805337626249680, -0.999806322894173700, -0.999807305662581910, +-0.999808285931471860, -0.999809263700841110, -0.999810238970687220, -0.999811211741007730, -0.999812182011800220, -0.999813149783062240, -0.999814115054791340, -0.999815077826985200, +-0.999816038099641370, -0.999816995872757410, -0.999817951146330990, -0.999818903920359660, -0.999819854194841100, -0.999820801969772850, -0.999821747245152710, -0.999822690020978120, +-0.999823630297246750, -0.999824568073956370, -0.999825503351104650, -0.999826436128689040, -0.999827366406707440, -0.999828294185157400, -0.999829219464036580, -0.999830142243342770, +-0.999831062523073520, -0.999831980303226730, -0.999832895583799840, -0.999833808364790850, -0.999834718646197330, -0.999835626428016930, -0.999836531710247560, -0.999837434492886760, +-0.999838334775932420, -0.999839232559382230, -0.999840127843234060, -0.999841020627485480, -0.999841910912134260, -0.999842798697178400, -0.999843683982615470, -0.999844566768443350, +-0.999845447054659830, -0.999846324841262790, -0.999847200128249790, -0.999848072915618840, -0.999848943203367700, -0.999849810991494170, -0.999850676279996240, -0.999851539068871480, +-0.999852399358117980, -0.999853257147733430, -0.999854112437715710, -0.999854965228062720, -0.999855815518772340, -0.999856663309842460, -0.999857508601270870, -0.999858351393055460, +-0.999859191685194220, -0.999860029477685040, -0.999860864770525710, -0.999861697563714350, -0.999862527857248610, -0.999863355651126610, -0.999864180945346240, -0.999865003739905390, +-0.999865824034801950, -0.999866641830034040, -0.999867457125599550, -0.999868269921496360, -0.999869080217722580, -0.999869888014276010, -0.999870693311154750, -0.999871496108356790, +-0.999872296405880050, -0.999873094203722610, -0.999873889501882380, -0.999874682300357480, -0.999875472599145780, -0.999876260398245510, -0.999877045697654570, -0.999877828497370950, +-0.999878608797392760, -0.999879386597718130, -0.999880161898344940, -0.999880934699271420, -0.999881705000495560, -0.999882472802015480, -0.999883238103829060, -0.999884000905934660, +-0.999884761208330250, -0.999885519011013970, -0.999886274313983800, -0.999887027117238090, -0.999887777420774610, -0.999888525224591820, -0.999889270528687700, -0.999890013333060490, +-0.999890753637708070, -0.999891491442628900, -0.999892226747820970, -0.999892959553282390, -0.999893689859011500, -0.999894417665006420, -0.999895142971265140, -0.999895865777786110, +-0.999896586084567440, -0.999897303891607360, -0.999898019198903860, -0.999898732006455400, -0.999899442314260090, -0.999900150122316260, -0.999900855430621900, -0.999901558239175480, +-0.999902258547975210, -0.999902956357019200, -0.999903651666305900, -0.999904344475833430, -0.999905034785600110, -0.999905722595604170, -0.999906407905843950, -0.999907090716317670, +-0.999907771027023660, -0.999908448837960260, -0.999909124149125810, -0.999909796960518400, -0.999910467272136620, -0.999911135083978550, -0.999911800396042770, -0.999912463208327500, +-0.999913123520830950, -0.999913781333551690, -0.999914436646487940, -0.999915089459638030, -0.999915739773000520, -0.999916387586573530, -0.999917032900355720, -0.999917675714345200, +-0.999918316028540640, -0.999918953842940160, -0.999919589157542310, -0.999920221972345540, -0.999920852287348170, -0.999921480102548670, -0.999922105417945460, -0.999922728233537010, +-0.999923348549321740, -0.999923966365298120, -0.999924581681464590, -0.999925194497819580, -0.999925804814361550, -0.999926412631089060, -0.999927017948000540, -0.999927620765094450, +-0.999928221082369340, -0.999928818899823660, -0.999929414217455960, -0.999930007035264690, -0.999930597353248410, -0.999931185171405670, -0.999931770489734920, -0.999932353308234710, +-0.999932933626903720, -0.999933511445740280, -0.999934086764743160, -0.999934659583910810, -0.999935229903241800, -0.999935797722734660, -0.999936363042388090, -0.999936925862200620, +-0.999937486182170820, -0.999938044002297240, -0.999938599322578560, -0.999939152143013430, -0.999939702463600420, -0.999940250284338190, -0.999940795605225310, -0.999941338426260430, +-0.999941878747442230, -0.999942416568769250, -0.999942951890240290, -0.999943484711853900, -0.999944015033608860, -0.999944542855503830, -0.999945068177537370, -0.999945590999708260, +-0.999946111322015160, -0.999946629144456760, -0.999947144467031810, -0.999947657289739000, -0.999948167612577100, -0.999948675435544660, -0.999949180758640700, -0.999949683581863650, +-0.999950183905212400, -0.999950681728685730, -0.999951177052282420, -0.999951669876001040, -0.999952160199840570, -0.999952648023799680, -0.999953133347877170, -0.999953616172071790, +-0.999954096496382450, -0.999954574320807810, -0.999955049645346760, -0.999955522469998080, -0.999955992794760550, -0.999956460619633060, -0.999956925944614490, -0.999957388769703530, +-0.999957849094899150, -0.999958306920200050, -0.999958762245605310, -0.999959215071113520, -0.999959665396723870, -0.999960113222434940, -0.999960558548245730, -0.999961001374155110, +-0.999961441700162100, -0.999961879526265360, -0.999962314852464010, -0.999962747678756810, -0.999963178005142780, -0.999963605831620810, -0.999964031158189770, -0.999964453984848680, +-0.999964874311596530, -0.999965292138432100, -0.999965707465354400, -0.999966120292362540, -0.999966530619455400, -0.999966938446631870, -0.999967343773890960, -0.999967746601231780, +-0.999968146928653100, -0.999968544756154150, -0.999968940083733830, -0.999969332911391230, -0.999969723239125140, -0.999970111066934900, -0.999970496394819270, -0.999970879222777500, +-0.999971259550808460, -0.999971637378911260, -0.999972012707085020, -0.999972385535328740, -0.999972755863641430, -0.999973123692022290, -0.999973489020470340, -0.999973851848984690, +-0.999974212177564330, -0.999974570006208490, -0.999974925334916280, -0.999975278163686700, -0.999975628492518860, -0.999975976321412000, -0.999976321650365210, -0.999976664479377610, +-0.999977004808448420, -0.999977342637576650, -0.999977677966761510, -0.999978010796002240, -0.999978341125297930, -0.999978668954647710, -0.999978994284050790, -0.999979317113506520, +-0.999979637443013880, -0.999979955272572110, -0.999980270602180530, -0.999980583431838270, -0.999980893761544420, -0.999981201591298440, -0.999981506921099440, -0.999981809750946750, +-0.999982110080839480, -0.999982407910776860, -0.999982703240758330, -0.999982996070783000, -0.999983286400850100, -0.999983574230959070, -0.999983859561109130, -0.999984142391299510, +-0.999984422721529540, -0.999984700551798560, -0.999984975882105780, -0.999985248712450540, -0.999985519042832170, -0.999985786873250020, -0.999986052203703400, -0.999986315034191660, +-0.999986575364714140, -0.999986833195270150, -0.999987088525859160, -0.999987341356480370, -0.999987591687133250, -0.999987839517817110, -0.999988084848531520, -0.999988327679275590, +-0.999988568010048870, -0.999988805840850700, -0.999989041171680530, -0.999989274002537790, -0.999989504333421820, -0.999989732164332070, -0.999989957495268090, -0.999990180326229110, +-0.999990400657214780, -0.999990618488224350, -0.999990833819257460, -0.999991046650313460, -0.999991256981391800, -0.999991464812492010, -0.999991670143613560, -0.999991872974756000, +-0.999992073305918770, -0.999992271137101210, -0.999992466468303090, -0.999992659299523750, -0.999992849630762850, -0.999993037462019730, -0.999993222793294060, -0.999993405624585390, +-0.999993585955893050, -0.999993763787216830, -0.999993939118556270, -0.999994111949910840, -0.999994282281280070, -0.999994450112663640, -0.999994615444060990, -0.999994778275471900, +-0.999994938606895810, -0.999995096438332400, -0.999995251769781320, -0.999995404601242030, -0.999995554932714190, -0.999995702764197580, -0.999995848095691640, -0.999995990927196040, +-0.999996131258710560, -0.999996269090234650, -0.999996404421768180, -0.999996537253310610, -0.999996667584861720, -0.999996795416421170, -0.999996920747988630, -0.999997043579563760, +-0.999997163911146350, -0.999997281742736050, -0.999997397074332440, -0.999997509905935390, -0.999997620237544570, -0.999997728069159650, -0.999997833400780520, -0.999997936232406740, +-0.999998036564038070, -0.999998134395674420, -0.999998229727315340, -0.999998322558960710, -0.999998412890610310, -0.999998500722263820, -0.999998586053921110, -0.999998668885581980, +-0.999998749217246070, -0.999998827048913410, -0.999998902380583640, -0.999998975212256560, -0.999999045543932150, -0.999999113375609980, -0.999999178707290160, -0.999999241538972350, +-0.999999301870656440, -0.999999359702342220, -0.999999415034029670, -0.999999467865718580, -0.999999518197408730, -0.999999566029100230, -0.999999611360792740, -0.999999654192486150, +-0.999999694524180470, -0.999999732355875580, -0.999999767687571370, -0.999999800519267730, -0.999999830850964670, -0.999999858682661950, -0.999999884014359570, -0.999999906846057440, +-0.999999927177755650, -0.999999945009453990, -0.999999960341152460, -0.999999973172851050, -0.999999983504549660, -0.999999991336248390, -0.999999996667947140, -0.999999999499645800, +-0.999999999831344580, -0.999999997663043260, -0.999999992994741960, -0.999999985826440780, -0.999999976158139510, -0.999999963989838370, -0.999999949321537350, -0.999999932153236350, +-0.999999912484935580, -0.999999890316635050, -0.999999865648334760, -0.999999838480034820, -0.999999808811735340, -0.999999776643436310, -0.999999741975137750, -0.999999704806839970, +-0.999999665138542880, -0.999999622970246580, -0.999999578301951190, -0.999999531133656920, -0.999999481465363880, -0.999999429297072080, -0.999999374628781630, -0.999999317460492860, +-0.999999257792205780, -0.999999195623920480, -0.999999130955637310, -0.999999063787356150, -0.999998994119077440, -0.999998921950801200, -0.999998847282527750, -0.999998770114257090, +-0.999998690445989550, -0.999998608277725240, -0.999998523609464510, -0.999998436441207340, -0.999998346772954180, -0.999998254604705040, -0.999998159936460350, -0.999998062768220230, +-0.999997963099985010, -0.999997860931754800, -0.999997756263530050, -0.999997649095310860, -0.999997539427097460, -0.999997427258890290, -0.999997312590689580, -0.999997195422495540, +-0.999997075754308520, -0.999996953586128830, -0.999996828917956710, -0.999996701749792600, -0.999996572081636610, -0.999996439913489300, -0.999996305245350880, -0.999996168077221690, +-0.999996028409102070, -0.999995886240992340, -0.999995741572892950, -0.999995594404804120, -0.999995444736726410, -0.999995292568660040, -0.999995137900605460, -0.999994980732562990, +-0.999994821064533080, -0.999994658896516180, -0.999994494228512610, -0.999994327060522830, -0.999994157392547160, -0.999993985224586160, -0.999993810556640160, -0.999993633388709610, +-0.999993453720794960, -0.999993271552896750, -0.999993086885015310, -0.999992899717151220, -0.999992710049304790, -0.999992517881476690, -0.999992323213667270, -0.999992126045876950, +-0.999991926378106410, -0.999991724210355980, -0.999991519542626330, -0.999991312374917780, -0.999991102707231020, -0.999990890539566470, -0.999990675871924810, -0.999990458704306360, +-0.999990239036711690, -0.999990016869141570, -0.999989792201596340, -0.999989565034076540, -0.999989335366582970, -0.999989103199116050, -0.999988868531676230, -0.999988631364264410, +-0.999988391696880920, -0.999988149529526530, -0.999987904862201680, -0.999987657694907050, -0.999987408027643300, -0.999987155860411090, -0.999986901193210990, -0.999986644026043540, +-0.999986384358909630, -0.999986122191809600, -0.999985857524744340, -0.999985590357714500, -0.999985320690720550, -0.999985048523763350, -0.999984773856843590, -0.999984496689961920, +-0.999984217023118900, -0.999983934856315430, -0.999983650189552040, -0.999983363022829530, -0.999983073356148670, -0.999982781189510120, -0.999982486522914550, -0.999982189356362850, +-0.999981889689855570, -0.999981587523393720, -0.999981282856977740, -0.999980975690608620, -0.999980666024287150, -0.999980353858013870, -0.999980039191789790, -0.999979722025615580, +-0.999979402359492120, -0.999979080193420080, -0.999978755527400340, -0.999978428361433800, -0.999978098695521120, -0.999977766529663190, -0.999977431863860900, -0.999977094698115020, +-0.999976755032426330, -0.999976412866795840, -0.999976068201224310, -0.999975721035712530, -0.999975371370261490, -0.999975019204872080, -0.999974664539545090, -0.999974307374281390, +-0.999973947709081880, -0.999973585543947660, -0.999973220878879410, -0.999972853713878010, -0.999972484048944570, -0.999972111884079970, -0.999971737219285010, -0.999971360054560670, +-0.999970980389908060, -0.999970598225327860, -0.999970213560821270, -0.999969826396389090, -0.999969436732032310, -0.999969044567752040, -0.999968649903549060, -0.999968252739424580, +-0.999967853075379390, -0.999967450911414590, -0.999967046247531080, -0.999966639083730070, -0.999966229420012340, -0.999965817256379120, -0.999965402592831400, -0.999964985429370070, +-0.999964565765996350, -0.999964143602711240, -0.999963718939515630, -0.999963291776410860, -0.999962862113397800, -0.999962429950477680, -0.999961995287651400, -0.999961558124920160, +-0.999961118462284970, -0.999960676299747050, -0.999960231637307410, -0.999959784474967140, -0.999959334812727470, -0.999958882650589410, -0.999958427988554280, -0.999957970826622970, +-0.999957511164796700, -0.999957049003076690, -0.999956584341464170, -0.999956117179960020, -0.999955647518565690, -0.999955175357282180, -0.999954700696110810, -0.999954223535052590, +-0.999953743874108850, -0.999953261713280810, -0.999952777052569460, -0.999952289891976380, -0.999951800231502430, -0.999951308071148960, -0.999950813410917290, -0.999950316250808660, +-0.999949816590824050, -0.999949314430965020, -0.999948809771232680, -0.999948302611628370, -0.999947792952153300, -0.999947280792808700, -0.999946766133595900, -0.999946248974516120, +-0.999945729315570800, -0.999945207156761160, -0.999944682498088430, -0.999944155339554160, -0.999943625681159350, -0.999943093522905560, -0.999942558864794000, -0.999942021706826000, +-0.999941482049003020, -0.999940939891326260, -0.999940395233797190, -0.999939848076417110, -0.999939298419187490, -0.999938746262109550, -0.999938191605184710, -0.999937634448414550, +-0.999937074791800160, -0.999936512635343110, -0.999935947979044840, -0.999935380822906560, -0.999934811166929950, -0.999934239011116330, -0.999933664355467040, -0.999933087199983640, +-0.999932507544667450, -0.999931925389520030, -0.999931340734542820, -0.999930753579737260, -0.999930163925104810, -0.999929571770646900, -0.999928977116365190, -0.999928379962260920, +-0.999927780308335730, -0.999927178154591090, -0.999926573501028540, -0.999925966347649520, -0.999925356694455590, -0.999924744541448310, -0.999924129888629110, -0.999923512735999550, +-0.999922893083561300, -0.999922270931315800, -0.999921646279264610, -0.999921019127409270, -0.999920389475751350, -0.999919757324292610, -0.999919122673034290, -0.999918485521978260, +-0.999917845871126090, -0.999917203720479210, -0.999916559070039290, -0.999915911919808110, -0.999915262269787000, -0.999914610119977840, -0.999913955470382090, -0.999913298321001510, +-0.999912638671837660, -0.999911976522892210, -0.999911311874166820, -0.999910644725663160, -0.999909975077382880, -0.999909302929327670, -0.999908628281499180, -0.999907951133899080, +-0.999907271486529140, -0.999906589339391030, -0.999905904692486520, -0.999905217545817180, -0.999904527899384780, -0.999903835753191080, -0.999903141107237770, -0.999902443961526610, +-0.999901744316059380, -0.999901042170837750, -0.999900337525863600, -0.999899630381138490, -0.999898920736664310, -0.999898208592442940, -0.999897493948475930, -0.999896776804765300, +-0.999896057161312690, -0.999895335018119890, -0.999894610375188790, -0.999893883232521150, -0.999893153590118770, -0.999892421447983510, -0.999891686806117290, -0.999890949664521740, +-0.999890210023198890, -0.999889467882150500, -0.999888723241378450, -0.999887976100884530, -0.999887226460670740, -0.999886474320738850, -0.999885719681090860, -0.999884962541728430, +-0.999884202902653670, -0.999883440763868370, -0.999882676125374510, -0.999881908987174000, -0.999881139349268590, -0.999880367211660400, -0.999879592574351330, -0.999878815437343250, +-0.999878035800638170, -0.999877253664237850, -0.999876469028144530, -0.999875681892360090, -0.999874892256886310, -0.999874100121725400, -0.999873305486879140, -0.999872508352349750, +-0.999871708718139020, -0.999870906584248930, -0.999870101950681710, -0.999869294817439140, -0.999868485184523430, -0.999867673051936470, -0.999866858419680260, -0.999866041287757020, +-0.999865221656168530, -0.999864399524917120, -0.999863574894004680, -0.999862747763433200, -0.999861918133205020, -0.999861086003321910, -0.999860251373786200, -0.999859414244599790, +-0.999858574615764770, -0.999857732487283490, -0.999856887859157720, -0.999856040731389780, -0.999855191103981800, -0.999854338976935760, -0.999853484350254010, -0.999852627223938420, +-0.999851767597991210, -0.999850905472414730, -0.999850040847210960, -0.999849173722382020, -0.999848304097930130, -0.999847431973857610, -0.999846557350166370, -0.999845680226858820, +-0.999844800603937100, -0.999843918481403300, -0.999843033859259660, -0.999842146737508490, -0.999841257116152020, -0.999840364995192350, -0.999839470374631830, -0.999838573254472560, +-0.999837673634716870, -0.999836771515366980, -0.999835866896425230, -0.999834959777893720, -0.999834050159774890, -0.999833138042070860, -0.999832223424784060, -0.999831306307916610, +-0.999830386691470950, -0.999829464575449410, -0.999828539959854100, -0.999827612844687460, -0.999826683229951830, -0.999825751115649420, -0.999824816501782680, -0.999823879388353930, +-0.999822939775365400, -0.999821997662819540, -0.999821053050718780, -0.999820105939065340, -0.999819156327861560, -0.999818204217109980, -0.999817249606812840, -0.999816292496972570, +-0.999815332887591610, -0.999814370778672300, -0.999813406170217080, -0.999812439062228280, -0.999811469454708450, -0.999810497347659920, -0.999809522741085140, -0.999808545634986560, +-0.999807566029366710, -0.999806583924227830, -0.999805599319572470, -0.999804612215403180, -0.999803622611722400, -0.999802630508532460, -0.999801635905836040, -0.999800638803635460, +-0.999799639201933270, -0.999798637100732020, -0.999797632500034170, -0.999796625399842260, -0.999795615800158740, -0.999794603700986270, -0.999793589102327180, -0.999792572004184250, +-0.999791552406559810, -0.999790530309456420, -0.999789505712876840, -0.999788478616823410, -0.999787449021298790, -0.999786416926305650, -0.999785382331846330, -0.999784345237923590, +-0.999783305644539990, -0.999782263551698190, -0.999781218959400640, -0.999780171867650110, -0.999779122276449160, -0.999778070185800340, -0.999777015595706420, -0.999775958506169850, +-0.999774898917193510, -0.999773836828779850, -0.999772772240931640, -0.999771705153651440, -0.999770635566942010, -0.999769563480806030, -0.999768488895246050, -0.999767411810264960, +-0.999766332225865310, -0.999765250142049760, -0.999764165558821080, -0.999763078476182070, -0.999761988894135370, -0.999760896812683650, -0.999759802231829700, -0.999758705151576280, +-0.999757605571926060, -0.999756503492881810, -0.999755398914446310, -0.999754291836622340, -0.999753182259412570, -0.999752070182819860, -0.999750955606847010, -0.999749838531496790, +-0.999748718956771980, -0.999747596882675340, -0.999746472309209770, -0.999745345236377920, -0.999744215664182810, -0.999743083592627090, -0.999741949021713650, -0.999740811951445370, +-0.999739672381825040, -0.999738530312855640, -0.999737385744539740, -0.999736238676880550, -0.999735089109880630, -0.999733937043542960, -0.999732782477870560, -0.999731625412866200, +-0.999730465848532760, -0.999729303784873120, -0.999728139221890190, -0.999726972159586950, -0.999725802597966280, -0.999724630537031200, -0.999723455976784470, -0.999722278917229090, +-0.999721099358367950, -0.999719917300204150, -0.999718732742740480, -0.999717545685980040, -0.999716356129925710, -0.999715164074580500, -0.999713969519947400, -0.999712772466029410, +-0.999711572912829420, -0.999710370860350530, -0.999709166308595740, -0.999707959257567950, -0.999706749707270360, -0.999705537657705870, -0.999704323108877470, -0.999703106060788270, +-0.999701886513441380, -0.999700664466839690, -0.999699439920986420, -0.999698212875884560, -0.999696983331537110, -0.999695751287947190, -0.999694516745117890, -0.999693279703052330, +-0.999692040161753610, -0.999690798121224740, -0.999689553581468940, -0.999688306542489190, -0.999687057004288620, -0.999685804966870540, -0.999684550430237850, -0.999683293394393770, +-0.999682033859341510, -0.999680771825084190, -0.999679507291624910, -0.999678240258966900, -0.999676970727113260, -0.999675698696067090, -0.999674424165831850, -0.999673147136410420, +-0.999671867607806240, -0.999670585580022310, -0.999669301053061950, -0.999668014026928290, -0.999666724501624640, -0.999665432477154110, -0.999664137953520050, -0.999662840930725660, +-0.999661541408774170, -0.999660239387668790, -0.999658934867412860, -0.999657627848009600, -0.999656318329462220, -0.999655006311774060, -0.999653691794948340, -0.999652374778988500, +-0.999651055263897640, -0.999649733249679210, -0.999648408736336310, -0.999647081723872510, -0.999645752212291020, -0.999644420201595050, -0.999643085691788170, -0.999641748682873480, +-0.999640409174854420, -0.999639067167734320, -0.999637722661516630, -0.999636375656204560, -0.999635026151801550, -0.999633674148311060, -0.999632319645736290, -0.999630962644080800, +-0.999629603143347810, -0.999628241143540870, -0.999626876644663320, -0.999625509646718590, -0.999624140149710130, -0.999622768153641260, -0.999621393658515430, -0.999620016664336200, +-0.999618637171106880, -0.999617255178831040, -0.999615870687512010, -0.999614483697153220, -0.999613094207758350, -0.999611702219330710, -0.999610307731873760, -0.999608910745391040, +-0.999607511259886120, -0.999606109275362420, -0.999604704791823400, -0.999603297809272600, -0.999601888327713680, -0.999600476347149880, -0.999599061867584960, -0.999597644889022360, +-0.999596225411465760, -0.999594803434918470, -0.999593378959384160, -0.999591951984866500, -0.999590522511368930, -0.999589090538895000, -0.999587656067448370, -0.999586219097032710, +-0.999584779627651350, -0.999583337659308070, -0.999581893192006520, -0.999580446225750150, -0.999578996760542740, -0.999577544796387830, -0.999576090333288980, -0.999574633371249970, +-0.999573173910274450, -0.999571711950365870, -0.999570247491528010, -0.999568780533764630, -0.999567311077079190, -0.999565839121475560, -0.999564364666957310, -0.999562887713528080, +-0.999561408261191780, -0.999559926309951830, -0.999558441859812130, -0.999556954910776230, -0.999555465462848130, -0.999553973516031150, -0.999552479070329400, -0.999550982125746330, +-0.999549482682285940, -0.999547980739951770, -0.999546476298747600, -0.999544969358677320, -0.999543459919744580, -0.999541947981953170, -0.999540433545306860, -0.999538916609809540, +-0.999537397175464970, -0.999535875242276830, -0.999534350810248990, -0.999532823879385360, -0.999531294449689580, -0.999529762521165650, -0.999528228093817250, -0.999526691167648250, +-0.999525151742662540, -0.999523609818864010, -0.999522065396256430, -0.999520518474843690, -0.999518969054629670, -0.999517417135618150, -0.999515862717813120, -0.999514305801218470, +-0.999512746385838090, -0.999511184471675750, -0.999509620058735560, -0.999508053147021180, -0.999506483736536830, -0.999504911827286180, -0.999503337419273220, -0.999501760512501950, +-0.999500181106976250, -0.999498599202700120, -0.999497014799677560, -0.999495427897912350, -0.999493838497408690, -0.999492246598170380, -0.999490652200201390, -0.999489055303505850, +-0.999487455908087630, -0.999485854013950850, -0.999484249621099270, -0.999482642729537240, -0.999481033339268520, -0.999479421450297220, -0.999477807062627340, -0.999476190176262990, +-0.999474570791208160, -0.999472948907466960, -0.999471324525043280, -0.999469697643941330, -0.999468068264165120, -0.999466436385718750, -0.999464802008606320, -0.999463165132831950, +-0.999461525758399530, -0.999459883885313370, -0.999458239513577480, -0.999456592643195970, -0.999454943274173060, -0.999453291406512730, -0.999451637040219110, -0.999449980175296520, +-0.999448320811748840, -0.999446658949580510, -0.999444994588795430, -0.999443327729397920, -0.999441658371392090, -0.999439986514782050, -0.999438312159572130, -0.999436635305766430, +-0.999434955953369060, -0.999433274102384360, -0.999431589752816430, -0.999429902904669600, -0.999428213557947980, -0.999426521712655780, -0.999424827368797340, -0.999423130526376770, +-0.999421431185398390, -0.999419729345866430, -0.999418025007785200, -0.999416318171158840, -0.999414608835991760, -0.999412897002288080, -0.999411182670052240, -0.999409465839288360, +-0.999407746510000860, -0.999406024682193970, -0.999404300355872130, -0.999402573531039450, -0.999400844207700260, -0.999399112385859100, -0.999397378065520090, -0.999395641246687560, +-0.999393901929366060, -0.999392160113559800, -0.999390415799273010, -0.999388668986510350, -0.999386919675275930, -0.999385167865574190, -0.999383413557409560, -0.999381656750786380, +-0.999379897445709100, -0.999378135642182030, -0.999376371340209620, -0.999374604539796320, -0.999372835240946440, -0.999371063443664550, -0.999369289147954980, -0.999367512353822150, +-0.999365733061270630, -0.999363951270304750, -0.999362166980928950, -0.999360380193147770, -0.999358590906965550, -0.999356799122386950, -0.999355004839416310, -0.999353208058058160, +-0.999351408778316960, -0.999349607000197260, -0.999347802723703600, -0.999345995948840440, -0.999344186675612200, -0.999342374904023560, -0.999340560634078940, -0.999338743865782920, +-0.999336924599140140, -0.999335102834154940, -0.999333278570831980, -0.999331451809175930, -0.999329622549191110, -0.999327790790882410, -0.999325956534254050, -0.999324119779310900, +-0.999322280526057430, -0.999320438774498280, -0.999318594524638000, -0.999316747776481270, -0.999314898530032520, -0.999313046785296750, -0.999311192542278180, -0.999309335800981800, +-0.999307476561411940, -0.999305614823573500, -0.999303750587470900, -0.999301883853109030, -0.999300014620492450, -0.999298142889625710, -0.999296268660513690, -0.999294391933161050, +-0.999292512707572360, -0.999290630983752480, -0.999288746761705980, -0.999286860041437520, -0.999284970822951980, -0.999283079106254020, -0.999281184891348430, -0.999279288178239740, +-0.999277388966932970, -0.999275487257432650, -0.999273583049743560, -0.999271676343870600, -0.999269767139818410, -0.999267855437591780, -0.999265941237195590, -0.999264024538634500, +-0.999262105341913400, -0.999260183647036950, -0.999258259454010030, -0.999256332762837540, -0.999254403573524240, -0.999252471886074910, -0.999250537700494320, -0.999248601016787470, +-0.999246661834959140, -0.999244720155014090, -0.999242775976957210, -0.999240829300793500, -0.999238880126527620, -0.999236928454164560, -0.999234974283709220, -0.999233017615166360, +-0.999231058448540990, -0.999229096783837980, -0.999227132621062330, -0.999225165960218710, -0.999223196801312220, -0.999221225144347750, -0.999219250989330290, -0.999217274336264620, +-0.999215295185155730, -0.999213313536008730, -0.999211329388828280, -0.999209342743619610, -0.999207353600387590, -0.999205361959137120, -0.999203367819873290, -0.999201371182601110, +-0.999199372047325340, -0.999197370414051210, -0.999195366282783710, -0.999193359653527740, -0.999191350526288380, -0.999189338901070760, -0.999187324777879640, -0.999185308156720240, +-0.999183289037597680, -0.999181267420516720, -0.999179243305482690, -0.999177216692500590, -0.999175187581575310, -0.999173155972712170, -0.999171121865916170, -0.999169085261192300, +-0.999167046158545680, -0.999165004557981520, -0.999162960459504810, -0.999160913863120780, -0.999158864768834420, -0.999156813176650840, -0.999154759086575250, -0.999152702498612880, +-0.999150643412768600, -0.999148581829047750, -0.999146517747455440, -0.999144451167996880, -0.999142382090677180, -0.999140310515501560, -0.999138236442475130, -0.999136159871603090, +-0.999134080802890680, -0.999131999236342990, -0.999129915171965370, -0.999127828609763010, -0.999125739549741040, -0.999123647991904670, -0.999121553936259230, -0.999119457382809940, +-0.999117358331561900, -0.999115256782520560, -0.999113152735691010, -0.999111046191078600, -0.999108937148688650, -0.999106825608526260, -0.999104711570596770, -0.999102595034905620, +-0.999100476001457900, -0.999098354470259080, -0.999096230441314350, -0.999094103914628940, -0.999091974890208400, -0.999089843368057840, -0.999087709348182700, -0.999085572830588300, +-0.999083433815279980, -0.999081292302263060, -0.999079148291542870, -0.999077001783124860, -0.999074852777014350, -0.999072701273216680, -0.999070547271737270, -0.999068390772581470, +-0.999066231775754710, -0.999064070281262430, -0.999061906289109850, -0.999059739799302630, -0.999057570811845990, -0.999055399326745470, -0.999053225344006420, -0.999051048863634270, +-0.999048869885634460, -0.999046688410012650, -0.999044504436773950, -0.999042317965924130, -0.999040128997468410, -0.999037937531412350, -0.999035743567761480, -0.999033547106521370, +-0.999031348147697230, -0.999029146691294830, -0.999026942737319510, -0.999024736285776820, -0.999022527336672290, -0.999020315890011500, -0.999018101945799870, -0.999015885504042970, +-0.999013666564746440, -0.999011445127915620, -0.999009221193556280, -0.999006994761673870, -0.999004765832273930, -0.999002534405362130, -0.999000300480944010, -0.998998064059025140, +-0.998995825139611050, -0.998993583722707410, -0.998991339808319890, -0.998989093396453920, -0.998986844487115280, -0.998984593080309510, -0.998982339176042180, -0.998980082774319160, +-0.998977823875145780, -0.998975562478527920, -0.998973298584471150, -0.998971032192981110, -0.998968763304063590, -0.998966491917724020, -0.998964218033968290, -0.998961941652802050, +-0.998959662774230870, -0.998957381398260620, -0.998955097524896860, -0.998952811154145360, -0.998950522286011890, -0.998948230920502000, -0.998945937057621580, -0.998943640697376400, +-0.998941341839772010, -0.998939040484814410, -0.998936736632509040, -0.998934430282861880, -0.998932121435878730, -0.998929810091565230, -0.998927496249927160, -0.998925179910970410, +-0.998922861074700630, -0.998920539741123830, -0.998918215910245540, -0.998915889582071780, -0.998913560756608310, -0.998911229433860900, -0.998908895613835450, -0.998906559296537710, +-0.998904220481973580, -0.998901879170148940, -0.998899535361069570, -0.998897189054741340, -0.998894840251170260, -0.998892488950361980, -0.998890135152322500, -0.998887778857057710, +-0.998885420064573370, -0.998883058774875600, -0.998880694987970160, -0.998878328703862950, -0.998875959922559840, -0.998873588644066950, -0.998871214868390030, -0.998868838595535210, +-0.998866459825508150, -0.998864078558314940, -0.998861694793961590, -0.998859308532453970, -0.998856919773798090, -0.998854528517999940, -0.998852134765065400, -0.998849738515000580, +-0.998847339767811480, -0.998844938523503870, -0.998842534782084070, -0.998840128543557750, -0.998837719807931230, -0.998835308575210410, -0.998832894845401390, -0.998830478618510040, +-0.998828059894542490, -0.998825638673504710, -0.998823214955402940, -0.998820788740243160, -0.998818360028031370, -0.998815928818773680, -0.998813495112476190, -0.998811058909145010, +-0.998808620208786140, -0.998806179011405670, -0.998803735317009720, -0.998801289125604510, -0.998798840437196020, -0.998796389251790480, -0.998793935569394000, -0.998791479390012670, +-0.998789020713652500, -0.998786559540319920, -0.998784095870020930, -0.998781629702761740, -0.998779161038548360, -0.998776689877387210, -0.998774216219284190, -0.998771740064245740, +-0.998769261412277950, -0.998766780263386830, -0.998764296617578930, -0.998761810474860230, -0.998759321835237080, -0.998756830698715570, -0.998754337065302030, -0.998751840935002470, +-0.998749342307823530, -0.998746841183771110, -0.998744337562851640, -0.998741831445071340, -0.998739322830436430, -0.998736811718953230, -0.998734298110627970, -0.998731782005466970, +-0.998729263403476450, -0.998726742304662850, -0.998724218709032390, -0.998721692616591380, -0.998719164027346170, -0.998716632941303080, -0.998714099358468330, -0.998711563278848360, +-0.998709024702449490, -0.998706483629278050, -0.998703940059340380, -0.998701393992642910, -0.998698845429191850, -0.998696294368993760, -0.998693740812054980, -0.998691184758381810, +-0.998688626207980600, -0.998686065160857890, -0.998683501617020020, -0.998680935576473420, -0.998678367039224410, -0.998675796005279450, -0.998673222474645180, -0.998670646447327730, +-0.998668067923333620, -0.998665486902669430, -0.998662903385341580, -0.998660317371356410, -0.998657728860720350, -0.998655137853440070, -0.998652544349521890, -0.998649948348972360, +-0.998647349851798040, -0.998644748858005250, -0.998642145367600650, -0.998639539380590690, -0.998636930896981800, -0.998634319916780640, -0.998631706439993660, -0.998629090466627510, +-0.998626471996688530, -0.998623851030183360, -0.998621227567118690, -0.998618601607500820, -0.998615973151336540, -0.998613342198632290, -0.998610708749394620, -0.998608072803630180, +-0.998605434361345630, -0.998602793422547430, -0.998600149987242340, -0.998597504055436790, -0.998594855627137570, -0.998592204702351110, -0.998589551281084180, -0.998586895363343440, +-0.998584236949135340, -0.998581576038466760, -0.998578912631344240, -0.998576246727774340, -0.998573578327763830, -0.998570907431319490, -0.998568234038447740, -0.998565558149155490, +-0.998562879763449370, -0.998560198881335960, -0.998557515502822120, -0.998554829627914420, -0.998552141256619730, -0.998549450388944710, -0.998546757024896040, -0.998544061164480360, +-0.998541362807704670, -0.998538661954575520, -0.998535958605099690, -0.998533252759284060, -0.998530544417135180, -0.998527833578660040, -0.998525120243865190, -0.998522404412757640, +-0.998519686085344140, -0.998516965261631250, -0.998514241941626080, -0.998511516125335290, -0.998508787812765640, -0.998506057003924030, -0.998503323698817340, -0.998500587897452330, +-0.998497849599835900, -0.998495108805974700, -0.998492365515875830, -0.998489619729546090, -0.998486871446992220, -0.998484120668221120, -0.998481367393239780, -0.998478611622055090, +-0.998475853354673810, -0.998473092591102840, -0.998470329331349270, -0.998467563575419770, -0.998464795323321440, -0.998462024575061060, -0.998459251330645610, -0.998456475590082100, +-0.998453697353377410, -0.998450916620538420, -0.998448133391572120, -0.998445347666485520, -0.998442559445285480, -0.998439768727979130, -0.998436975514573330, -0.998434179805075210, +-0.998431381599491520, -0.998428580897829270, -0.998425777700095770, -0.998422972006297700, -0.998420163816442270, -0.998417353130536370, -0.998414539948587200, -0.998411724270601540, +-0.998408906096586720, -0.998406085426549520, -0.998403262260497140, -0.998400436598436580, -0.998397608440374950, -0.998394777786319240, -0.998391944636276670, -0.998389108990254240, +-0.998386270848258930, -0.998383430210298070, -0.998380587076378560, -0.998377741446507700, -0.998374893320692400, -0.998372042698939870, -0.998369189581257200, -0.998366333967651620, +-0.998363475858130120, -0.998360615252699920, -0.998357752151368350, -0.998354886554142280, -0.998352018461028940, -0.998349147872035660, -0.998346274787169530, -0.998343399206437550, +-0.998340521129847280, -0.998337640557405590, -0.998334757489119820, -0.998331871924997170, -0.998328983865044760, -0.998326093309270020, -0.998323200257679950, -0.998320304710281990, +-0.998317406667083130, -0.998314506128090810, -0.998311603093312240, -0.998308697562754640, -0.998305789536425350, -0.998302879014331570, -0.998299965996480520, -0.998297050482879530, +-0.998294132473536040, -0.998291211968457160, -0.998288288967650320, -0.998285363471122620, -0.998282435478881620, -0.998279504990934540, -0.998276572007288700, -0.998273636527951310, +-0.998270698552929940, -0.998267758082231780, -0.998264815115864290, -0.998261869653834680, -0.998258921696150380, -0.998255971242818840, -0.998253018293847380, -0.998250062849243340, +-0.998247104909014140, -0.998244144473167230, -0.998241181541709930, -0.998238216114649690, -0.998235248191993830, -0.998232277773749900, -0.998229304859925340, -0.998226329450527360, +-0.998223351545563740, -0.998220371145041700, -0.998217388248968660, -0.998214402857352190, -0.998211414970199720, -0.998208424587518680, -0.998205431709316530, -0.998202436335600910, +-0.998199438466379150, -0.998196438101658810, -0.998193435241447440, -0.998190429885752350, -0.998187422034581330, -0.998184411687941700, -0.998181398845840890, -0.998178383508286800, +-0.998175365675286640, -0.998172345346848070, -0.998169322522978630, -0.998166297203685990, -0.998163269388977480, -0.998160239078860760, -0.998157206273343590, -0.998154170972433310, +-0.998151133176137680, -0.998148092884464160, -0.998145050097420490, -0.998142004815014030, -0.998138957037252750, -0.998135906764143990, -0.998132853995695400, -0.998129798731914760, +-0.998126740972809510, -0.998123680718387530, -0.998120617968656370, -0.998117552723623570, -0.998114484983296910, -0.998111414747684060, -0.998108342016792660, -0.998105266790630390, +-0.998102189069205000, -0.998099108852524180, -0.998096026140595450, -0.998092940933426710, -0.998089853231025730, -0.998086763033399940, -0.998083670340557340, -0.998080575152505590, +-0.998077477469252350, -0.998074377290805390, -0.998071274617172600, -0.998068169448361520, -0.998065061784380040, -0.998061951625235920, -0.998058838970936950, -0.998055723821490770, +-0.998052606176905390, -0.998049486037188460, -0.998046363402347870, -0.998043238272391280, -0.998040110647326560, -0.998036980527161720, -0.998033847911904300, -0.998030712801562410, +-0.998027575196143600, -0.998024435095655860, -0.998021292500107070, -0.998018147409505010, -0.998014999823857660, -0.998011849743172810, -0.998008697167458210, -0.998005542096721990, +-0.998002384530971900, -0.997999224470215830, -0.997996061914461660, -0.997992896863717390, -0.997989729317990790, -0.997986559277289960, -0.997983386741622790, -0.997980211710997040, +-0.997977034185420830, -0.997973854164901920, -0.997970671649448420, -0.997967486639068310, -0.997964299133769490, -0.997961109133559840, -0.997957916638447460, -0.997954721648440350, +-0.997951524163546380, -0.997948324183773550, -0.997945121709129970, -0.997941916739623510, -0.997938709275262400, -0.997935499316054410, -0.997932286862007740, -0.997929071913130290, +-0.997925854469430160, -0.997922634530915450, -0.997919412097594050, -0.997916187169474280, -0.997912959746563910, -0.997909729828871160, -0.997906497416404140, -0.997903262509170830, +-0.997900025107179460, -0.997896785210437900, -0.997893542818954370, -0.997890297932737090, -0.997887050551794050, -0.997883800676133360, -0.997880548305763120, -0.997877293440691650, +-0.997874036080926730, -0.997870776226476910, -0.997867513877350070, -0.997864249033554420, -0.997860981695098180, -0.997857711861989460, -0.997854439534236580, -0.997851164711847430, +-0.997847887394830550, -0.997844607583193710, -0.997841325276945580, -0.997838040476094030, -0.997834753180647400, -0.997831463390613900, -0.997828171106001750, -0.997824876326819040, +-0.997821579053074340, -0.997818279284775620, -0.997814977021931120, -0.997811672264549250, -0.997808365012638250, -0.997805055266206330, -0.997801743025261700, -0.997798428289812690, +-0.997795111059867620, -0.997791791335434830, -0.997788469116522530, -0.997785144403139150, -0.997781817195292800, -0.997778487492991920, -0.997775155296244830, -0.997771820605059870, +-0.997768483419445350, -0.997765143739409610, -0.997761801564961080, -0.997758456896107980, -0.997755109732858750, -0.997751760075221710, -0.997748407923205290, -0.997745053276817950, +-0.997741696136067780, -0.997738336500963550, -0.997734974371513370, -0.997731609747725790, -0.997728242629609240, -0.997724873017171940, -0.997721500910422550, -0.997718126309369510, +-0.997714749214021030, -0.997711369624385670, -0.997707987540471960, -0.997704602962288250, -0.997701215889843060, -0.997697826323144850, -0.997694434262201950, -0.997691039707023000, +-0.997687642657616560, -0.997684243113990950, -0.997680841076154730, -0.997677436544116340, -0.997674029517884420, -0.997670619997467420, -0.997667207982873890, -0.997663793474112380, +-0.997660376471191320, -0.997656956974119270, -0.997653534982904990, -0.997650110497556700, -0.997646683518083280, -0.997643254044493060, -0.997639822076794690, -0.997636387614996840, +-0.997632950659107950, -0.997629511209136790, -0.997626069265091790, -0.997622624826981610, -0.997619177894814800, -0.997615728468600140, -0.997612276548346060, -0.997608822134061430, +-0.997605365225754710, -0.997601905823434550, -0.997598443927109610, -0.997594979536788550, -0.997591512652480030, -0.997588043274192700, -0.997584571401935350, -0.997581097035716620, +-0.997577620175545080, -0.997574140821429480, -0.997570658973378490, -0.997567174631400880, -0.997563687795505310, -0.997560198465700650, -0.997556706641995360, -0.997553212324398420, +-0.997549715512918380, -0.997546216207564010, -0.997542714408344190, -0.997539210115267470, -0.997535703328342850, -0.997532194047578870, -0.997528682272984410, -0.997525168004568360, +-0.997521651242339270, -0.997518131986306120, -0.997514610236477580, -0.997511085992862530, -0.997507559255469740, -0.997504030024308210, -0.997500498299386470, -0.997496964080713530, +-0.997493427368298160, -0.997489888162149230, -0.997486346462275520, -0.997482802268686020, -0.997479255581389500, -0.997475706400394850, -0.997472154725710820, -0.997468600557346540, +-0.997465043895310770, -0.997461484739612380, -0.997457923090260160, -0.997454358947263200, -0.997450792310630390, -0.997447223180370490, -0.997443651556492620, -0.997440077439005650, +-0.997436500827918460, -0.997432921723240050, -0.997429340124979300, -0.997425756033145090, -0.997422169447746640, -0.997418580368792720, -0.997414988796292310, -0.997411394730254530, +-0.997407798170688140, -0.997404199117602250, -0.997400597571005960, -0.997396993530908160, -0.997393386997317940, -0.997389777970244080, -0.997386166449695910, -0.997382552435682300, +-0.997378935928212360, -0.997375316927294970, -0.997371695432939240, -0.997368071445154380, -0.997364444963949380, -0.997360815989333240, -0.997357184521315050, -0.997353550559903820, +-0.997349914105108760, -0.997346275156938970, -0.997342633715403440, -0.997338989780511390, -0.997335343352271810, -0.997331694430693920, -0.997328043015786700, -0.997324389107559490, +-0.997320732706021170, -0.997317073811181180, -0.997313412423048270, -0.997309748541632010, -0.997306082166941390, -0.997302413298985500, -0.997298741937773680, -0.997295068083314810, +-0.997291391735618430, -0.997287712894693530, -0.997284031560549340, -0.997280347733195070, -0.997276661412639930, -0.997272972598893250, -0.997269281291964020, -0.997265587491861560, +-0.997261891198595210, -0.997258192412174060, -0.997254491132607450, -0.997250787359904690, -0.997247081094074890, -0.997243372335127390, -0.997239661083071490, -0.997235947337916320, +-0.997232231099671410, -0.997228512368345870, -0.997224791143949130, -0.997221067426490300, -0.997217341215978940, -0.997213612512424130, -0.997209881315835320, -0.997206147626221840, +-0.997202411443592780, -0.997198672767957930, -0.997194931599326260, -0.997191187937707340, -0.997187441783110470, -0.997183693135545000, -0.997179941995020140, -0.997176188361545650, +-0.997172432235130520, -0.997168673615784430, -0.997164912503516580, -0.997161148898336510, -0.997157382800253460, -0.997153614209277060, -0.997149843125416660, -0.997146069548681460, +-0.997142293479081230, -0.997138514916625200, -0.997134733861323010, -0.997130950313183880, -0.997127164272217370, -0.997123375738432900, -0.997119584711840150, -0.997115791192448310, +-0.997111995180267050, -0.997108196675305810, -0.997104395677574030, -0.997100592187081360, -0.997096786203837130, -0.997092977727850990, -0.997089166759132390, -0.997085353297690770, +-0.997081537343535770, -0.997077718896677070, -0.997073897957123980, -0.997070074524886160, -0.997066248599973170, -0.997062420182394550, -0.997058589272159850, -0.997054755869278720, +-0.997050919973760720, -0.997047081585615390, -0.997043240704852400, -0.997039397331481280, -0.997035551465511590, -0.997031703106953100, -0.997027852255815360, -0.997023998912107910, +-0.997020143075840530, -0.997016284747022860, -0.997012423925664360, -0.997008560611774900, -0.997004694805363910, -0.997000826506441280, -0.996996955715016560, -0.996993082431099410, +-0.996989206654699590, -0.996985328385826760, -0.996981447624490700, -0.996977564370700950, -0.996973678624467290, -0.996969790385799250, -0.996965899654706940, -0.996962006431199920, +-0.996958110715287730, -0.996954212506980350, -0.996950311806287460, -0.996946408613218700, -0.996942502927783970, -0.996938594749993020, -0.996934684079855530, -0.996930770917381360, +-0.996926855262580290, -0.996922937115462090, -0.996919016476036530, -0.996915093344313390, -0.996911167720302530, -0.996907239604013730, -0.996903308995456870, -0.996899375894641730, +-0.996895440301578170, -0.996891502216275980, -0.996887561638744920, -0.996883618568995100, -0.996879673007036280, -0.996875724952878130, -0.996871774406530850, -0.996867821368004000, +-0.996863865837307680, -0.996859907814451660, -0.996855947299445820, -0.996851984292300150, -0.996848018793024430, -0.996844050801628740, -0.996840080318122990, -0.996836107342517040, +-0.996832131874820780, -0.996828153915044090, -0.996824173463197070, -0.996820190519289720, -0.996816205083331800, -0.996812217155333410, -0.996808226735304450, -0.996804233823255000, +-0.996800238419194850, -0.996796240523134200, -0.996792240135082940, -0.996788237255050950, -0.996784231883048430, -0.996780224019085390, -0.996776213663171820, -0.996772200815317590, +-0.996768185475532920, -0.996764167643827800, -0.996760147320212230, -0.996756124504696310, -0.996752099197290130, -0.996748071398003700, -0.996744041106847000, -0.996740008323830250, +-0.996735973048963550, -0.996731935282256790, -0.996727895023720280, -0.996723852273363910, -0.996719807031198110, -0.996715759297232660, -0.996711709071477880, -0.996707656353943760, +-0.996703601144640410, -0.996699543443578250, -0.996695483250767180, -0.996691420566217290, -0.996687355389939020, -0.996683287721942260, -0.996679217562237320, -0.996675144910834310, +-0.996671069767743440, -0.996666992132974830, -0.996662912006538890, -0.996658829388445520, -0.996654744278705150, -0.996650656677328000, -0.996646566584324160, -0.996642473999703740, +-0.996638378923477290, -0.996634281355654910, -0.996630181296246810, -0.996626078745263210, -0.996621973702714440, -0.996617866168610700, -0.996613756142962330, -0.996609643625779640, +-0.996605528617072740, -0.996601411116851970, -0.996597291125127850, -0.996593168641910390, -0.996589043667210020, -0.996584916201037060, -0.996580786243401740, -0.996576653794314480, +-0.996572518853785620, -0.996568381421825470, -0.996564241498444360, -0.996560099083652620, -0.996555954177460680, -0.996551806779878870, -0.996547656890917510, -0.996543504510587040, +-0.996539349638897680, -0.996535192275860070, -0.996531032421484440, -0.996526870075781220, -0.996522705238760850, -0.996518537910433650, -0.996514368090810180, -0.996510195779900850, +-0.996506020977715900, -0.996501843684265980, -0.996497663899561400, -0.996493481623612730, -0.996489296856430400, -0.996485109598024720, -0.996480919848406250, -0.996476727607585430, +-0.996472532875572910, -0.996468335652379020, -0.996464135938014310, -0.996459933732489310, -0.996455729035814470, -0.996451521848000120, -0.996447312169057130, -0.996443099998995830, +-0.996438885337826760, -0.996434668185560590, -0.996430448542207640, -0.996426226407778560, -0.996422001782284020, -0.996417774665734330, -0.996413545058140280, -0.996409312959512410, +-0.996405078369861140, -0.996400841289197260, -0.996396601717531310, -0.996392359654873830, -0.996388115101235370, -0.996383868056626600, -0.996379618521058270, -0.996375366494540950, +-0.996371111977085060, -0.996366854968701480, -0.996362595469400760, -0.996358333479193560, -0.996354068998090540, -0.996349802026102350, -0.996345532563239540, -0.996341260609512890, +-0.996336986164933270, -0.996332709229511120, -0.996328429803257090, -0.996324147886182070, -0.996319863478296600, -0.996315576579611560, -0.996311287190137620, -0.996306995309885420, +-0.996302700938865750, -0.996298404077089250, -0.996294104724566810, -0.996289802881309080, -0.996285498547326840, -0.996281191722630850, -0.996276882407231890, -0.996272570601140720, +-0.996268256304368220, -0.996263939516924930, -0.996259620238821860, -0.996255298470069660, -0.996250974210679320, -0.996246647460661490, -0.996242318220027180, -0.996237986488786920, +-0.996233652266951710, -0.996229315554532420, -0.996224976351539840, -0.996220634657984830, -0.996216290473878160, -0.996211943799230730, -0.996207594634053620, -0.996203242978357380, +-0.996198888832153130, -0.996194532195451510, -0.996190173068263630, -0.996185811450600370, -0.996181447342472600, -0.996177080743891110, -0.996172711654866980, -0.996168340075411110, +-0.996163966005534360, -0.996159589445247630, -0.996155210394562010, -0.996150828853488270, -0.996146444822037510, -0.996142058300220620, -0.996137669288048700, -0.996133277785532510, +-0.996128883792683160, -0.996124487309511530, -0.996120088336028720, -0.996115686872245720, -0.996111282918173410, -0.996106876473823010, -0.996102467539205390, -0.996098056114331550, +-0.996093642199212700, -0.996089225793859610, -0.996084806898283490, -0.996080385512495340, -0.996075961636506250, -0.996071535270327210, -0.996067106413969450, -0.996062675067443840, +-0.996058241230761480, -0.996053804903933580, -0.996049366086971260, -0.996044924779885380, -0.996040480982687270, -0.996036034695388040, -0.996031585917998560, -0.996027134650530170, +-0.996022680892994060, -0.996018224645401130, -0.996013765907762580, -0.996009304680089640, -0.996004840962393500, -0.996000374754685280, -0.995995906056976080, -0.995991434869277100, +-0.995986961191599570, -0.995982485023954590, -0.995978006366353470, -0.995973525218807330, -0.995969041581327370, -0.995964555453924700, -0.995960066836610760, -0.995955575729396640, +-0.995951082132293550, -0.995946586045312720, -0.995942087468465460, -0.995937586401763000, -0.995933082845216640, -0.995928576798837510, -0.995924068262636910, -0.995919557236626060, +-0.995915043720816410, -0.995910527715219150, -0.995906009219845620, -0.995901488234707030, -0.995896964759814710, -0.995892438795179970, -0.995887910340814140, -0.995883379396728550, +-0.995878845962934520, -0.995874310039443380, -0.995869771626266440, -0.995865230723415040, -0.995860687330900610, -0.995856141448734470, -0.995851593076927940, -0.995847042215492360, +-0.995842488864439270, -0.995837933023779990, -0.995833374693525840, -0.995828813873688270, -0.995824250564278700, -0.995819684765308470, -0.995815116476789000, -0.995810545698731620, +-0.995805972431148100, -0.995801396674049540, -0.995796818427447490, -0.995792237691353390, -0.995787654465778770, -0.995783068750734860, -0.995778480546233410, -0.995773889852285770, +-0.995769296668903350, -0.995764700996097710, -0.995760102833880280, -0.995755502182262610, -0.995750899041256240, -0.995746293410872620, -0.995741685291123170, -0.995737074682019550, +-0.995732461583573200, -0.995727845995795780, -0.995723227918698830, -0.995718607352293670, -0.995713984296591970, -0.995709358751605380, -0.995704730717345330, -0.995700100193823490, +-0.995695467181051510, -0.995690831679040710, -0.995686193687802870, -0.995681553207349630, -0.995676910237692450, -0.995672264778842960, -0.995667616830812730, -0.995662966393613620, +-0.995658313467257080, -0.995653658051754650, -0.995649000147118210, -0.995644339753359200, -0.995639676870489270, -0.995635011498520180, -0.995630343637463610, -0.995625673287331200, +-0.995621000448134620, -0.995616325119885510, -0.995611647302595550, -0.995606966996276490, -0.995602284200939990, -0.995597598916597830, -0.995592911143261650, -0.995588220880943230, +-0.995583528129654230, -0.995578832889406410, -0.995574135160211430, -0.995569434942081170, -0.995564732235027280, -0.995560027039061660, -0.995555319354195940, -0.995550609180441910, +-0.995545896517811450, -0.995541181366316090, -0.995536463725967940, -0.995531743596778540, -0.995527020978759670, -0.995522295871923310, -0.995517568276281350, -0.995512838191845330, +-0.995508105618627350, -0.995503370556638960, -0.995498633005892140, -0.995493892966398790, -0.995489150438170770, -0.995484405421219850, -0.995479657915557930, -0.995474907921196750, +-0.995470155438148430, -0.995465400466424730, -0.995460643006037430, -0.995455883056998610, -0.995451120619319950, -0.995446355693013540, -0.995441588278091260, -0.995436818374565100, +-0.995432045982446830, -0.995427271101748330, -0.995422493732481820, -0.995417713874658940, -0.995412931528291910, -0.995408146693392500, -0.995403359369972710, -0.995398569558044510, +-0.995393777257619910, -0.995388982468710880, -0.995384185191329430, -0.995379385425487430, -0.995374583171196980, -0.995369778428470080, -0.995364971197318820, -0.995360161477754970, +-0.995355349269790860, -0.995350534573438250, -0.995345717388709360, -0.995340897715616290, -0.995336075554170810, -0.995331250904385230, -0.995326423766271560, -0.995321594139841780, +-0.995316762025107990, -0.995311927422082410, -0.995307090330776800, -0.995302250751203600, -0.995297408683374800, -0.995292564127302380, -0.995287717082998680, -0.995282867550475570, +-0.995278015529745260, -0.995273161020819970, -0.995268304023711800, -0.995263444538432960, -0.995258582564995440, -0.995253718103411460, -0.995248851153693100, -0.995243981715852710, +-0.995239109789902380, -0.995234235375854090, -0.995229358473720400, -0.995224479083513300, -0.995219597205245000, -0.995214712838927600, -0.995209825984573530, -0.995204936642194780, +-0.995200044811803800, -0.995195150493412670, -0.995190253687033730, -0.995185354392679080, -0.995180452610361140, -0.995175548340091920, -0.995170641581883950, -0.995165732335749340, +-0.995160820601700410, -0.995155906379749270, -0.995150989669908560, -0.995146070472190280, -0.995141148786606980, -0.995136224613170640, -0.995131297951893700, -0.995126368802788600, +-0.995121437165867650, -0.995116503041143070, -0.995111566428627190, -0.995106627328332440, -0.995101685740271020, -0.995096741664455500, -0.995091795100898070, -0.995086846049611170, +-0.995081894510607130, -0.995076940483898390, -0.995071983969497250, -0.995067024967416280, -0.995062063477667680, -0.995057099500263890, -0.995052133035217220, -0.995047164082540350, +-0.995042192642245580, -0.995037218714345360, -0.995032242298852120, -0.995027263395778180, -0.995022282005136200, -0.995017298126938400, -0.995012311761197420, -0.995007322907925480, +-0.995002331567135470, -0.994997337738839470, -0.994992341423050260, -0.994987342619780170, -0.994982341329041730, -0.994977337550847270, -0.994972331285209570, -0.994967322532141150, +-0.994962311291654360, -0.994957297563761720, -0.994952281348475910, -0.994947262645809350, -0.994942241455774700, -0.994937217778384400, -0.994932191613650980, -0.994927162961587230, +-0.994922131822205460, -0.994917098195518430, -0.994912062081538710, -0.994907023480278710, -0.994901982391751090, -0.994896938815968750, -0.994891892752943870, -0.994886844202689360, +-0.994881793165217740, -0.994876739640541570, -0.994871683628673620, -0.994866625129626430, -0.994861564143412650, -0.994856500670045050, -0.994851434709536080, -0.994846366261898600, +-0.994841295327145160, -0.994836221905288530, -0.994831145996341370, -0.994826067600316110, -0.994820986717225960, -0.994815903347083250, -0.994810817489900740, -0.994805729145691320, +-0.994800638314467410, -0.994795544996242010, -0.994790449191027770, -0.994785350898837350, -0.994780250119683630, -0.994775146853579150, -0.994770041100536790, -0.994764932860569440, +-0.994759822133689740, -0.994754708919910470, -0.994749593219244500, -0.994744475031704380, -0.994739354357303210, -0.994734231196053640, -0.994729105547968450, -0.994723977413060510, +-0.994718846791342590, -0.994713713682827680, -0.994708578087528440, -0.994703440005457630, -0.994698299436628240, -0.994693156381053270, -0.994688010838745250, -0.994682862809717290, +-0.994677712293982160, -0.994672559291552740, -0.994667403802441790, -0.994662245826662520, -0.994657085364227590, -0.994651922415149990, -0.994646756979442490, -0.994641589057118190, +-0.994636418648189860, -0.994631245752670480, -0.994626070370572930, -0.994620892501910210, -0.994615712146695310, -0.994610529304941200, -0.994605343976660670, -0.994600156161866920, +-0.994594965860572610, -0.994589773072790840, -0.994584577798534820, -0.994579380037817320, -0.994574179790651320, -0.994568977057049940, -0.994563771837026040, -0.994558564130592740, +-0.994553353937763010, -0.994548141258549960, -0.994542926092966460, -0.994537708441025630, -0.994532488302740660, -0.994527265678124330, -0.994522040567189960, -0.994516812969950430, +-0.994511582886418830, -0.994506350316608280, -0.994501115260531980, -0.994495877718202800, -0.994490637689633970, -0.994485395174838470, -0.994480150173829510, -0.994474902686620200, +-0.994469652713223630, -0.994464400253652900, -0.994459145307921120, -0.994453887876041610, -0.994448627958027350, -0.994443365553891460, -0.994438100663647240, -0.994432833287307690, +-0.994427563424886030, -0.994422291076395460, -0.994417016241849310, -0.994411738921260450, -0.994406459114642320, -0.994401176822008130, -0.994395892043370870, -0.994390604778743970, +-0.994385315028140540, -0.994380022791573670, -0.994374728069056910, -0.994369430860603250, -0.994364131166226020, -0.994358828985938530, -0.994353524319753990, -0.994348217167685510, +-0.994342907529746520, -0.994337595405950350, -0.994332280796310090, -0.994326963700839170, -0.994321644119550930, -0.994316322052458460, -0.994310997499575300, -0.994305670460914560, +-0.994300340936489560, -0.994295008926313840, -0.994289674430400510, -0.994284337448763100, -0.994278997981414840, -0.994273656028369040, -0.994268311589639020, -0.994262964665238340, +-0.994257615255180190, -0.994252263359478030, -0.994246908978145160, -0.994241552111195140, -0.994236192758641170, -0.994230830920496690, -0.994225466596775130, -0.994220099787490040, +-0.994214730492654410, -0.994209358712282220, -0.994203984446386580, -0.994198607694980920, -0.994193228458078780, -0.994187846735693490, -0.994182462527838600, -0.994177075834527630, +-0.994171686655773930, -0.994166294991591150, -0.994160900841992490, -0.994155504206991610, -0.994150105086601950, -0.994144703480837060, -0.994139299389710460, -0.994133892813235390, +-0.994128483751425820, -0.994123072204294970, -0.994117658171856380, -0.994112241654123710, -0.994106822651110500, -0.994101401162830080, -0.994095977189296210, -0.994090550730522440, +-0.994085121786522310, -0.994079690357309360, -0.994074256442897150, -0.994068820043299330, -0.994063381158529440, -0.994057939788601130, -0.994052495933527850, -0.994047049593323460, +-0.994041600768001410, -0.994036149457575350, -0.994030695662058930, -0.994025239381465810, -0.994019780615809530, -0.994014319365103760, -0.994008855629362250, -0.994003389408598670, +-0.993997920702826550, -0.993992449512059670, -0.993986975836311680, -0.993981499675596130, -0.993976021029926990, -0.993970539899317610, -0.993965056283781960, -0.993959570183333700, +-0.993954081597986480, -0.993948590527754080, -0.993943096972650260, -0.993937600932688570, -0.993932102407882990, -0.993926601398247070, -0.993921097903794680, -0.993915591924539600, +-0.993910083460495470, -0.993904572511676190, -0.993899059078095500, -0.993893543159767080, -0.993888024756704900, -0.993882503868922520, -0.993876980496433910, -0.993871454639252970, +-0.993865926297393340, -0.993860395470868910, -0.993854862159693320, -0.993849326363880680, -0.993843788083444760, -0.993838247318399430, -0.993832704068758450, -0.993827158334535610, +-0.993821610115744990, -0.993816059412400370, -0.993810506224515500, -0.993804950552104380, -0.993799392395180780, -0.993793831753758910, -0.993788268627852300, -0.993782703017475180, +-0.993777134922641190, -0.993771564343364440, -0.993765991279658590, -0.993760415731537950, -0.993754837699016180, -0.993749257182107380, -0.993743674180825430, -0.993738088695184320, +-0.993732500725197920, -0.993726910270880340, -0.993721317332245450, -0.993715721909307130, -0.993710124002079700, -0.993704523610576820, -0.993698920734812810, -0.993693315374801320, +-0.993687707530556690, -0.993682097202092550, -0.993676484389423350, -0.993670869092562970, -0.993665251311525390, -0.993659631046324710, -0.993654008296974920, -0.993648383063490130, +-0.993642755345884310, -0.993637125144171680, -0.993631492458366130, -0.993625857288481850, -0.993620219634533060, -0.993614579496533650, -0.993608936874497810, -0.993603291768439640, +-0.993597644178373150, -0.993591994104312650, -0.993586341546272120, -0.993580686504265790, -0.993575028978307630, -0.993569368968411970, -0.993563706474592910, -0.993558041496864660, +-0.993552374035241210, -0.993546704089736780, -0.993541031660365560, -0.993535356747141880, -0.993529679350079740, -0.993523999469193450, -0.993518317104497120, -0.993512632256004950, +-0.993506944923731260, -0.993501255107690270, -0.993495562807896080, -0.993489868024363010, -0.993484170757105270, -0.993478471006137180, -0.993472768771472730, -0.993467064053126460, +-0.993461356851112590, -0.993455647165445210, -0.993449934996138760, -0.993444220343207450, -0.993438503206665600, -0.993432783586527530, -0.993427061482807350, -0.993421336895519700, +-0.993415609824678690, -0.993409880270298640, -0.993404148232393870, -0.993398413710978700, -0.993392676706067570, -0.993386937217674680, -0.993381195245814470, -0.993375450790501270, +-0.993369703851749390, -0.993363954429573370, -0.993358202523987430, -0.993352448135005890, -0.993346691262643300, -0.993340931906914080, -0.993335170067832340, -0.993329405745412730, +-0.993323638939669680, -0.993317869650617520, -0.993312097878270570, -0.993306323622643480, -0.993300546883750690, -0.993294767661606400, -0.993288985956225170, -0.993283201767621420, +-0.993277415095809800, -0.993271625940804540, -0.993265834302620390, -0.993260040181271450, -0.993254243576772500, -0.993248444489137850, -0.993242642918382270, -0.993236838864519970, +-0.993231032327565600, -0.993225223307533710, -0.993219411804438620, -0.993213597818295100, -0.993207781349117580, -0.993201962396920600, -0.993196140961718600, -0.993190317043526450, +-0.993184490642358360, -0.993178661758229110, -0.993172830391153230, -0.993166996541145260, -0.993161160208219650, -0.993155321392391270, -0.993149480093674650, -0.993143636312084240, +-0.993137790047634810, -0.993131941300340880, -0.993126090070217020, -0.993120236357278090, -0.993114380161538410, -0.993108521483012870, -0.993102660321715900, -0.993096796677662370, +-0.993090930550866950, -0.993085061941344050, -0.993079190849108560, -0.993073317274175030, -0.993067441216558320, -0.993061562676272880, -0.993055681653333690, -0.993049798147755180, +-0.993043912159552230, -0.993038023688739500, -0.993032132735331640, -0.993026239299343530, -0.993020343380789820, -0.993014444979685160, -0.993008544096044440, -0.993002640729882420, +-0.992996734881213760, -0.992990826550053220, -0.992984915736415670, -0.992979002440315780, -0.992973086661768420, -0.992967168400788360, -0.992961247657390360, -0.992955324431589180, +-0.992949398723399820, -0.992943470532836820, -0.992937539859915290, -0.992931606704649860, -0.992925671067055320, -0.992919732947146640, -0.992913792344938710, -0.992907849260446280, +-0.992901903693684140, -0.992895955644667370, -0.992890005113410520, -0.992884052099928800, -0.992878096604236870, -0.992872138626349820, -0.992866178166282420, -0.992860215224049440, +-0.992854249799666080, -0.992848281893147000, -0.992842311504507300, -0.992836338633761640, -0.992830363280925220, -0.992824385446012920, -0.992818405129039740, -0.992812422330020430, +-0.992806437048970090, -0.992800449285903610, -0.992794459040836070, -0.992788466313782370, -0.992782471104757480, -0.992776473413776510, -0.992770473240854320, -0.992764470586005920, +-0.992758465449246400, -0.992752457830590630, -0.992746447730053720, -0.992740435147650650, -0.992734420083396520, -0.992728402537306430, -0.992722382509395260, -0.992716359999678220, +-0.992710335008170070, -0.992704307534886250, -0.992698277579841750, -0.992692245143051430, -0.992686210224530520, -0.992680172824294100, -0.992674132942357180, -0.992668090578735060, +-0.992662045733442630, -0.992655998406495100, -0.992649948597907450, -0.992643896307695120, -0.992637841535872980, -0.992631784282456240, -0.992625724547460010, -0.992619662330899490, +-0.992613597632789670, -0.992607530453146090, -0.992601460791983640, -0.992595388649317400, -0.992589314025162820, -0.992583236919534980, -0.992577157332449000, -0.992571075263920080, +-0.992564990713963540, -0.992558903682594360, -0.992552814169828100, -0.992546722175679740, -0.992540627700164600, -0.992534530743297890, -0.992528431305094830, -0.992522329385570610, +-0.992516224984740680, -0.992510118102620240, -0.992504008739224400, -0.992497896894568580, -0.992491782568668100, -0.992485665761538070, -0.992479546473193920, -0.992473424703650850, +-0.992467300452924190, -0.992461173721029270, -0.992455044507981500, -0.992448912813796100, -0.992442778638488400, -0.992436641982073820, -0.992430502844567460, -0.992424361225984990, +-0.992418217126341600, -0.992412070545652720, -0.992405921483933580, -0.992399769941199720, -0.992393615917466330, -0.992387459412748970, -0.992381300427062960, -0.992375138960423620, +-0.992368975012846490, -0.992362808584346890, -0.992356639674940370, -0.992350468284642130, -0.992344294413467830, -0.992338118061432570, -0.992331939228552230, -0.992325757914842010, +-0.992319574120317460, -0.992313387844993900, -0.992307199088886870, -0.992301007852011810, -0.992294814134384250, -0.992288617936019750, -0.992282419256933610, -0.992276218097141280, +-0.992270014456658630, -0.992263808335500870, -0.992257599733683660, -0.992251388651222310, -0.992245175088132590, -0.992238959044429820, -0.992232740520129770, -0.992226519515247870, +-0.992220296029799660, -0.992214070063800690, -0.992207841617266610, -0.992201610690212840, -0.992195377282655060, -0.992189141394608900, -0.992182903026089690, -0.992176662177113420, +-0.992170418847695410, -0.992164173037851430, -0.992157924747596900, -0.992151673976947700, -0.992145420725919160, -0.992139164994527150, -0.992132906782787210, -0.992126646090715100, +-0.992120382918326270, -0.992114117265636590, -0.992107849132661480, -0.992101578519416830, -0.992095305425918280, -0.992089029852181280, -0.992082751798221810, -0.992076471264055510, +-0.992070188249697950, -0.992063902755164980, -0.992057614780472270, -0.992051324325635480, -0.992045031390670350, -0.992038735975592670, -0.992032438080418190, -0.992026137705162680, +-0.992019834849841690, -0.992013529514471190, -0.992007221699066850, -0.992000911403644440, -0.991994598628219810, -0.991988283372808530, -0.991981965637426690, -0.991975645422089820, +-0.991969322726813930, -0.991962997551614770, -0.991956669896507990, -0.991950339761509590, -0.991944007146635330, -0.991937672051901090, -0.991931334477322730, -0.991924994422915930, +-0.991918651888696770, -0.991912306874680790, -0.991905959380884220, -0.991899609407322690, -0.991893256954011980, -0.991886902020968300, -0.991880544608207400, -0.991874184715745070, +-0.991867822343597270, -0.991861457491779900, -0.991855090160308820, -0.991848720349200130, -0.991842348058469600, -0.991835973288133330, -0.991829596038206970, -0.991823216308706730, +-0.991816834099648380, -0.991810449411047900, -0.991804062242921390, -0.991797672595284620, -0.991791280468153680, -0.991784885861544670, -0.991778488775473370, -0.991772089209955850, +-0.991765687165008130, -0.991759282640646060, -0.991752875636885860, -0.991746466153743510, -0.991740054191235010, -0.991733639749376340, -0.991727222828183600, -0.991720803427672880, +-0.991714381547860070, -0.991707957188761260, -0.991701530350392550, -0.991695101032770030, -0.991688669235909810, -0.991682234959827880, -0.991675798204540440, -0.991669358970063360, +-0.991662917256412870, -0.991656473063605270, -0.991650026391656340, -0.991643577240582500, -0.991637125610399630, -0.991630671501123940, -0.991624214912771530, -0.991617755845358610, +-0.991611294298901380, -0.991604830273415840, -0.991598363768918190, -0.991591894785424640, -0.991585423322951410, -0.991578949381514580, -0.991572472961130380, -0.991565994061815000, +-0.991559512683584670, -0.991553028826455460, -0.991546542490443830, -0.991540053675565750, -0.991533562381837650, -0.991527068609275530, -0.991520572357895810, -0.991514073627714600, +-0.991507572418748210, -0.991501068731012740, -0.991494562564524840, -0.991488053919300390, -0.991481542795355940, -0.991475029192707580, -0.991468513111371630, -0.991461994551364300, +-0.991455473512702020, -0.991448949995401230, -0.991442423999477910, -0.991435895524948600, -0.991429364571829510, -0.991422831140137070, -0.991416295229887500, -0.991409756841097220, +-0.991403215973782450, -0.991396672627959720, -0.991390126803645240, -0.991383578500855570, -0.991377027719606900, -0.991370474459915660, -0.991363918721798190, -0.991357360505270900, +-0.991350799810350350, -0.991344236637052730, -0.991337670985394490, -0.991331102855392170, -0.991324532247061960, -0.991317959160420540, -0.991311383595484100, -0.991304805552269190, +-0.991298225030792350, -0.991291642031070010, -0.991285056553118490, -0.991278468596954340, -0.991271878162593990, -0.991265285250053860, -0.991258689859350620, -0.991252091990500680, +-0.991245491643520490, -0.991238888818426590, -0.991232283515235510, -0.991225675733963700, -0.991219065474627570, -0.991212452737243900, -0.991205837521829110, -0.991199219828399540, +-0.991192599656972150, -0.991185977007563170, -0.991179351880189240, -0.991172724274867020, -0.991166094191612720, -0.991159461630443440, -0.991152826591375490, -0.991146189074425420, +-0.991139549079609880, -0.991132906606945530, -0.991126261656448790, -0.991119614228136550, -0.991112964322025220, -0.991106311938131480, -0.991099657076471740, -0.991092999737063110, +-0.991086339919921900, -0.991079677625064880, -0.991073012852508710, -0.991066345602269920, -0.991059675874365160, -0.991053003668811440, -0.991046328985625060, -0.991039651824823010, +-0.991032972186421720, -0.991026290070437970, -0.991019605476888610, -0.991012918405790200, -0.991006228857159390, -0.990999536831013050, -0.990992842327367840, -0.990986145346240630, +-0.990979445887647970, -0.990972743951606840, -0.990966039538133670, -0.990959332647245450, -0.990952623278958940, -0.990945911433290800, -0.990939197110258020, -0.990932480309877130, +-0.990925761032165120, -0.990919039277138650, -0.990912315044814700, -0.990905588335209810, -0.990898859148340860, -0.990892127484224950, -0.990885393342878730, -0.990878656724318960, +-0.990871917628562530, -0.990865176055626410, -0.990858432005527150, -0.990851685478281950, -0.990844936473907590, -0.990838184992420820, -0.990831431033838640, -0.990824674598177800, +-0.990817915685455300, -0.990811154295688000, -0.990804390428892900, -0.990797624085086760, -0.990790855264286450, -0.990784083966509190, -0.990777310191771620, -0.990770533940090850, +-0.990763755211483630, -0.990756974005966960, -0.990750190323558040, -0.990743404164273640, -0.990736615528130640, -0.990729824415146120, -0.990723030825337080, -0.990716234758720500, +-0.990709436215313270, -0.990702635195132460, -0.990695831698195080, -0.990689025724518000, -0.990682217274118430, -0.990675406347013450, -0.990668592943219850, -0.990661777062754710, +-0.990654958705635250, -0.990648137871878220, -0.990641314561500950, -0.990634488774520430, -0.990627660510953630, -0.990620829770817780, -0.990613996554129740, -0.990607160860906830, +-0.990600322691165940, -0.990593482044924260, -0.990586638922198670, -0.990579793323006720, -0.990572945247365280, -0.990566094695291440, -0.990559241666802310, -0.990552386161915210, +-0.990545528180646890, -0.990538667723015020, -0.990531804789036350, -0.990524939378728210, -0.990518071492107690, -0.990511201129192110, -0.990504328289998460, -0.990497452974543950, +-0.990490575182845780, -0.990483694914921160, -0.990476812170787310, -0.990469926950461540, -0.990463039253960840, -0.990456149081302640, -0.990449256432504030, -0.990442361307582120, +-0.990435463706554550, -0.990428563629438210, -0.990421661076250510, -0.990414756047008570, -0.990407848541729810, -0.990400938560431430, -0.990394026103130760, -0.990387111169845010, +-0.990380193760591390, -0.990373273875387210, -0.990366351514250010, -0.990359426677196900, -0.990352499364245190, -0.990345569575412310, -0.990338637310715250, -0.990331702570171890, +-0.990324765353799100, -0.990317825661614530, -0.990310883493635390, -0.990303938849879000, -0.990296991730362790, -0.990290042135104080, -0.990283090064120190, -0.990276135517428660, +-0.990269178495046700, -0.990262218996991850, -0.990255257023281430, -0.990248292573932990, -0.990241325648963720, -0.990234356248391180, -0.990227384372232570, -0.990220410020505650, +-0.990213433193227740, -0.990206453890416280, -0.990199472112088590, -0.990192487858262300, -0.990185501128954650, -0.990178511924183380, -0.990171520243965820, -0.990164526088319290, +-0.990157529457261650, -0.990150530350810130, -0.990143528768982260, -0.990136524711795580, -0.990129518179267640, -0.990122509171415750, -0.990115497688257680, -0.990108483729810860, +-0.990101467296092940, -0.990094448387121240, -0.990087427002913410, -0.990080403143487110, -0.990073376808859760, -0.990066347999048910, -0.990059316714072100, -0.990052282953947200, +-0.990045246718691540, -0.990038208008322760, -0.990031166822858410, -0.990024123162316250, -0.990017077026713600, -0.990010028416068330, -0.990002977330398100, -0.989995923769720340, +-0.989988867734052810, -0.989981809223413060, -0.989974748237818840, -0.989967684777287690, -0.989960618841837390, -0.989953550431485580, -0.989946479546249700, -0.989939406186147730, +-0.989932330351197320, -0.989925252041416020, -0.989918171256821690, -0.989911087997431660, -0.989904002263264140, -0.989896914054336550, -0.989889823370666780, -0.989882730212272350, +-0.989875634579171160, -0.989868536471380840, -0.989861435888919170, -0.989854332831803910, -0.989847227300052810, -0.989840119293683540, -0.989833008812714190, -0.989825895857162190, +-0.989818780427045520, -0.989811662522381840, -0.989804542143188910, -0.989797419289484730, -0.989790293961287040, -0.989783166158613610, -0.989776035881482220, -0.989768903129910840, +-0.989761767903917120, -0.989754630203518950, -0.989747490028734300, -0.989740347379580830, -0.989733202256076420, -0.989726054658239150, -0.989718904586086690, -0.989711752039637020, +-0.989704597018908010, -0.989697439523917420, -0.989690279554683140, -0.989683117111223250, -0.989675952193555640, -0.989668784801698060, -0.989661614935668620, -0.989654442595485070, +-0.989647267781165410, -0.989640090492727610, -0.989632910730189550, -0.989625728493569110, -0.989618543782884500, -0.989611356598153470, -0.989604166939394130, -0.989596974806624340, +-0.989589780199862100, -0.989582583119125280, -0.989575383564432200, -0.989568181535800620, -0.989560977033248520, -0.989553770056794010, -0.989546560606455070, -0.989539348682249800, +-0.989532134284196060, -0.989524917412312080, -0.989517698066615830, -0.989510476247125070, -0.989503251953858350, -0.989496025186833440, -0.989488795946068530, -0.989481564231581620, +-0.989474330043390580, -0.989467093381513950, -0.989459854245969490, -0.989452612636775530, -0.989445368553949930, -0.989438121997510910, -0.989430872967476670, -0.989423621463865200, +-0.989416367486694700, -0.989409111035983170, -0.989401852111748800, -0.989394590714010040, -0.989387326842784630, -0.989380060498091020, -0.989372791679947180, -0.989365520388371330, +-0.989358246623381790, -0.989350970384996530, -0.989343691673233990, -0.989336410488112160, -0.989329126829649240, -0.989321840697863550, -0.989314552092773300, -0.989307261014396590, +-0.989299967462751730, -0.989292671437856930, -0.989285372939730510, -0.989278071968390680, -0.989270768523855650, -0.989263462606143620, -0.989256154215273020, -0.989248843351261950, +-0.989241530014128840, -0.989234214203891900, -0.989226895920569450, -0.989219575164179800, -0.989212251934741160, -0.989204926232271850, -0.989197598056790310, -0.989190267408314730, +-0.989182934286863320, -0.989175598692454750, -0.989168260625107210, -0.989160920084839020, -0.989153577071668510, -0.989146231585613990, -0.989138883626693890, -0.989131533194926640, +-0.989124180290330450, -0.989116824912923960, -0.989109467062725400, -0.989102106739753070, -0.989094743944025520, -0.989087378675561180, -0.989080010934378360, -0.989072640720495390, +-0.989065268033930910, -0.989057892874703250, -0.989050515242830940, -0.989043135138332200, -0.989035752561225780, -0.989028367511529780, -0.989020979989262970, -0.989013589994443780, +-0.989006197527090510, -0.988998802587221840, -0.988991405174856060, -0.988984005290011850, -0.988976602932707620, -0.988969198102961910, -0.988961790800793160, -0.988954381026219800, +-0.988946968779260690, -0.988939554059934060, -0.988932136868258540, -0.988924717204252790, -0.988917295067935020, -0.988909870459324210, -0.988902443378438690, -0.988895013825297100, +-0.988887581799917870, -0.988880147302319770, -0.988872710332521330, -0.988865270890540990, -0.988857828976397620, -0.988850384590109540, -0.988842937731695510, -0.988835488401174190, +-0.988828036598564110, -0.988820582323884030, -0.988813125577152400, -0.988805666358388070, -0.988798204667609370, -0.988790740504835290, -0.988783273870084360, -0.988775804763375230, +-0.988768333184726680, -0.988760859134157230, -0.988753382611685660, -0.988745903617330610, -0.988738422151110740, -0.988730938213044810, -0.988723451803151580, -0.988715962921449700, +-0.988708471567957940, -0.988700977742695050, -0.988693481445679700, -0.988685982676930420, -0.988678481436466420, -0.988670977724306230, -0.988663471540468520, -0.988655962884972150, +-0.988648451757835890, -0.988640938159078500, -0.988633422088718850, -0.988625903546775490, -0.988618382533267390, -0.988610859048213330, -0.988603333091632170, -0.988595804663542690, +-0.988588273763963740, -0.988580740392914100, -0.988573204550412420, -0.988565666236477900, -0.988558125451129200, -0.988550582194385190, -0.988543036466264620, -0.988535488266786610, +-0.988527937595969800, -0.988520384453833170, -0.988512828840395600, -0.988505270755675960, -0.988497710199693010, -0.988490147172465860, -0.988482581674013370, -0.988475013704354530, +-0.988467443263507990, -0.988459870351492850, -0.988452294968328090, -0.988444717114032590, -0.988437136788625330, -0.988429553992125180, -0.988421968724551240, -0.988414380985922270, +-0.988406790776257370, -0.988399198095575530, -0.988391602943895720, -0.988384005321236710, -0.988376405227617830, -0.988368802663058040, -0.988361197627576130, -0.988353590121191280, +-0.988345980143922390, -0.988338367695788420, -0.988330752776808710, -0.988323135387002120, -0.988315515526387630, -0.988307893194984470, -0.988300268392811490, -0.988292641119887900, +-0.988285011376232590, -0.988277379161864870, -0.988269744476803490, -0.988262107321068010, -0.988254467694677170, -0.988246825597650090, -0.988239181030006080, -0.988231533991764000, +-0.988223884482943070, -0.988216232503562500, -0.988208578053641370, -0.988200921133198680, -0.988193261742253860, -0.988185599880825770, -0.988177935548933740, -0.988170268746596860, +-0.988162599473834340, -0.988154927730665160, -0.988147253517108750, -0.988139576833184210, -0.988131897678910740, -0.988124216054307560, -0.988116531959393860, -0.988108845394188640, +-0.988101156358711540, -0.988093464852981440, -0.988085770877017660, -0.988078074430839500, -0.988070375514466190, -0.988062674127916930, -0.988054970271211030, -0.988047263944367590, +-0.988039555147406050, -0.988031843880345480, -0.988024130143205450, -0.988016413936005030, -0.988008695258763670, -0.988000974111500560, -0.987993250494234810, -0.987985524406986170, +-0.987977795849773630, -0.987970064822616620, -0.987962331325534460, -0.987954595358546460, -0.987946856921671950, -0.987939116014930340, -0.987931372638340970, -0.987923626791923140, +-0.987915878475696060, -0.987908127689679500, -0.987900374433892560, -0.987892618708354650, -0.987884860513085330, -0.987877099848103790, -0.987869336713429360, -0.987861571109081680, +-0.987853803035080080, -0.987846032491443980, -0.987838259478192810, -0.987830483995346010, -0.987822706042922990, -0.987814925620943310, -0.987807142729426160, -0.987799357368391080, +-0.987791569537857740, -0.987783779237845440, -0.987775986468373720, -0.987768191229462130, -0.987760393521129880, -0.987752593343396600, -0.987744790696282070, -0.987736985579805380, +-0.987729177993986410, -0.987721367938844350, -0.987713555414398980, -0.987705740420669610, -0.987697922957676000, -0.987690103025437470, -0.987682280623973670, -0.987674455753304150, +-0.987666628413448660, -0.987658798604426510, -0.987650966326257370, -0.987643131578960780, -0.987635294362556260, -0.987627454677063700, -0.987619612522502410, -0.987611767898892160, +-0.987603920806252480, -0.987596071244602910, -0.987588219213963230, -0.987580364714353070, -0.987572507745791860, -0.987564648308299490, -0.987556786401895370, -0.987548922026599390, +-0.987541055182431070, -0.987533185869410080, -0.987525314087556170, -0.987517439836888890, -0.987509563117428100, -0.987501683929193350, -0.987493802272204510, -0.987485918146481120, +-0.987478031552042950, -0.987470142488909630, -0.987462250957100940, -0.987454356956636750, -0.987446460487536590, -0.987438561549820130, -0.987430660143507440, -0.987422756268618080, +-0.987414849925171810, -0.987406941113188500, -0.987399029832687790, -0.987391116083689350, -0.987383199866213260, -0.987375281180279170, -0.987367360025906860, -0.987359436403116190, +-0.987351510311926920, -0.987343581752358810, -0.987335650724431860, -0.987327717228165700, -0.987319781263580110, -0.987311842830695290, -0.987303901929530770, -0.987295958560106550, +-0.987288012722442380, -0.987280064416558250, -0.987272113642473690, -0.987264160400209150, -0.987256204689784140, -0.987248246511218560, -0.987240285864532500, -0.987232322749745590, +-0.987224357166877950, -0.987216389115949440, -0.987208418596979830, -0.987200445609989210, -0.987192470154997450, -0.987184492232024650, -0.987176511841090560, -0.987168528982215190, +-0.987160543655418500, -0.987152555860720260, -0.987144565598140900, -0.987136572867700070, -0.987128577669417750, -0.987120580003314040, -0.987112579869408810, -0.987104577267722160, +-0.987096572198274180, -0.987088564661084630, -0.987080554656173730, -0.987072542183561330, -0.987064527243267650, -0.987056509835312680, -0.987048489959716500, -0.987040467616499000, +-0.987032442805680250, -0.987024415527280490, -0.987016385781319670, -0.987008353567817910, -0.987000318886795290, -0.986992281738271910, -0.986984242122267760, -0.986976200038803040, +-0.986968155487897850, -0.986960108469572160, -0.986952058983846190, -0.986944007030740140, -0.986935952610274110, -0.986927895722468200, -0.986919836367342480, -0.986911774544917190, +-0.986903710255212400, -0.986895643498248430, -0.986887574274045280, -0.986879502582623250, -0.986871428424002550, -0.986863351798203170, -0.986855272705245420, -0.986847191145149520, +-0.986839107117935650, -0.986831020623623820, -0.986822931662234670, -0.986814840233788180, -0.986806746338304560, -0.986798649975804020, -0.986790551146306870, -0.986782449849833320, +-0.986774346086403690, -0.986766239856038170, -0.986758131158757100, -0.986750019994580670, -0.986741906363529210, -0.986733790265623020, -0.986725671700882320, -0.986717550669327430, +-0.986709427170978540, -0.986701301205856200, -0.986693172773980610, -0.986685041875372090, -0.986676908510050970, -0.986668772678037650, -0.986660634379352140, -0.986652493614015300, +-0.986644350382047120, -0.986636204683468130, -0.986628056518298550, -0.986619905886558900, -0.986611752788269510, -0.986603597223450700, -0.986595439192122890, -0.986587278694306510, +-0.986579115730021770, -0.986570950299289430, -0.986562782402129690, -0.986554612038562870, -0.986546439208609740, -0.986538263912290160, -0.986530086149625230, -0.986521905920635040, +-0.986513723225340030, -0.986505538063760730, -0.986497350435917570, -0.986489160341831100, -0.986480967781521720, -0.986472772755009890, -0.986464575262316120, -0.986456375303460750, +-0.986448172878464650, -0.986439967987348120, -0.986431760630131600, -0.986423550806835750, -0.986415338517480980, -0.986407123762087720, -0.986398906540676860, -0.986390686853268580, +-0.986382464699883780, -0.986374240080542640, -0.986366012995266050, -0.986357783444074320, -0.986349551426988210, -0.986341316944028160, -0.986333079995214690, -0.986324840580568680, +-0.986316598700110570, -0.986308354353860990, -0.986300107541840500, -0.986291858264069620, -0.986283606520569120, -0.986275352311359650, -0.986267095636461870, -0.986258836495896300, +-0.986250574889683710, -0.986242310817844640, -0.986234044280399740, -0.986225775277369760, -0.986217503808775380, -0.986209229874637110, -0.986200953474975830, -0.986192674609812300, +-0.986184393279166960, -0.986176109483060670, -0.986167823221514080, -0.986159534494547850, -0.986151243302182960, -0.986142949644439830, -0.986134653521339440, -0.986126354932902350, +-0.986118053879149410, -0.986109750360101290, -0.986101444375778850, -0.986093135926202740, -0.986084825011393830, -0.986076511631372780, -0.986068195786160450, -0.986059877475777720, +-0.986051556700245360, -0.986043233459584000, -0.986034907753814420, -0.986026579582957810, -0.986018248947034600, -0.986009915846065900, -0.986001580280072340, -0.985993242249074920, +-0.985984901753094280, -0.985976558792151400, -0.985968213366267170, -0.985959865475462440, -0.985951515119757870, -0.985943162299174560, -0.985934807013733480, -0.985926449263455300, +-0.985918089048361090, -0.985909726368471520, -0.985901361223807670, -0.985892993614390420, -0.985884623540240760, -0.985876251001379430, -0.985867875997827550, -0.985859498529605970, +-0.985851118596735690, -0.985842736199237570, -0.985834351337132600, -0.985825964010441650, -0.985817574219185920, -0.985809181963386290, -0.985800787243063640, -0.985792390058239040, +-0.985783990408933500, -0.985775588295167760, -0.985767183716963260, -0.985758776674340750, -0.985750367167321340, -0.985741955195926000, -0.985733540760175830, -0.985725123860091700, +-0.985716704495694820, -0.985708282667006270, -0.985699858374046720, -0.985691431616837700, -0.985683002395400190, -0.985674570709755060, -0.985666136559923630, -0.985657699945926780, +-0.985649260867785480, -0.985640819325521280, -0.985632375319154930, -0.985623928848707750, -0.985615479914200730, -0.985607028515654960, -0.985598574653091640, -0.985590118326531870, +-0.985581659535996750, -0.985573198281507580, -0.985564734563085240, -0.985556268380751170, -0.985547799734526550, -0.985539328624432280, -0.985530855050489760, -0.985522379012720000, +-0.985513900511144400, -0.985505419545783970, -0.985496936116660120, -0.985488450223793830, -0.985479961867206540, -0.985471471046919230, -0.985462977762953220, -0.985454482015329810, +-0.985445983804070220, -0.985437483129195550, -0.985428979990727320, -0.985420474388686520, -0.985411966323094690, -0.985403455793972820, -0.985394942801342430, -0.985386427345224410, +-0.985377909425640520, -0.985369389042611950, -0.985360866196159810, -0.985352340886305520, -0.985343813113070290, -0.985335282876475650, -0.985326750176542810, -0.985318215013293090, +-0.985309677386747570, -0.985301137296928140, -0.985292594743855780, -0.985284049727552010, -0.985275502248038060, -0.985266952305335340, -0.985258399899465060, -0.985249845030448990, +-0.985241287698308320, -0.985232727903064490, -0.985224165644738690, -0.985215600923352590, -0.985207033738927480, -0.985198464091484700, -0.985189891981045780, -0.985181317407632040, +-0.985172740371265120, -0.985164160871966450, -0.985155578909757250, -0.985146994484659140, -0.985138407596693580, -0.985129818245881750, -0.985121226432245640, -0.985112632155806470, +-0.985104035416585640, -0.985095436214604710, -0.985086834549885220, -0.985078230422448690, -0.985069623832316550, -0.985061014779510360, -0.985052403264051630, -0.985043789285961700, +-0.985035172845262540, -0.985026553941975360, -0.985017932576121910, -0.985009308747723520, -0.985000682456801720, -0.984992053703378390, -0.984983422487474950, -0.984974788809112930, +-0.984966152668313890, -0.984957514065099460, -0.984948872999491300, -0.984940229471510940, -0.984931583481180040, -0.984922935028520240, -0.984914284113552860, -0.984905630736299890, +-0.984896974896782850, -0.984888316595023520, -0.984879655831043200, -0.984870992604863660, -0.984862326916506880, -0.984853658765994180, -0.984844988153347420, -0.984836315078588150, +-0.984827639541738020, -0.984818961542818890, -0.984810281081852310, -0.984801598158860040, -0.984792912773863720, -0.984784224926885110, -0.984775534617945980, -0.984766841847067980, +-0.984758146614272970, -0.984749448919582490, -0.984740748763018540, -0.984732046144602410, -0.984723341064356440, -0.984714633522302040, -0.984705923518461090, -0.984697211052855350, +-0.984688496125506460, -0.984679778736436530, -0.984671058885666970, -0.984662336573219890, -0.984653611799116700, -0.984644884563379730, -0.984636154866030510, -0.984627422707090920, +-0.984618688086582820, -0.984609951004527860, -0.984601211460948030, -0.984592469455865200, -0.984583724989301250, -0.984574978061278030, -0.984566228671817310, -0.984557476820941080, +-0.984548722508671090, -0.984539965735029330, -0.984531206500037560, -0.984522444803717760, -0.984513680646091900, -0.984504914027181880, -0.984496144947009650, -0.984487373405597000, +-0.984478599402965890, -0.984469822939138100, -0.984461044014135920, -0.984452262627981130, -0.984443478780695820, -0.984434692472301640, -0.984425903702820790, -0.984417112472275260, +-0.984408318780686800, -0.984399522628077620, -0.984390724014469700, -0.984381922939884690, -0.984373119404345130, -0.984364313407872670, -0.984355504950489510, -0.984346694032217530, +-0.984337880653078700, -0.984329064813095340, -0.984320246512289330, -0.984311425750682640, -0.984302602528297490, -0.984293776845155730, -0.984284948701279580, -0.984276118096691020, +-0.984267285031412140, -0.984258449505465150, -0.984249611518871800, -0.984240771071654640, -0.984231928163835420, -0.984223082795436580, -0.984214234966479860, -0.984205384676987590, +-0.984196531926981750, -0.984187676716484770, -0.984178819045518520, -0.984169958914105300, -0.984161096322267110, -0.984152231270026160, -0.984143363757404740, -0.984134493784424860, +-0.984125621351108700, -0.984116746457478380, -0.984107869103556300, -0.984098989289364570, -0.984090107014925390, -0.984081222280260960, -0.984072335085393490, -0.984063445430344960, +-0.984054553315137910, -0.984045658739794660, -0.984036761704337180, -0.984027862208787680, -0.984018960253168710, -0.984010055837502230, -0.984001148961810680, -0.983992239626116150, +-0.983983327830440960, -0.983974413574807640, -0.983965496859238180, -0.983956577683755000, -0.983947656048380410, -0.983938731953136750, -0.983929805398045980, -0.983920876383130860, +-0.983911944908413600, -0.983903010973916530, -0.983894074579661830, -0.983885135725672040, -0.983876194411969270, -0.983867250638576160, -0.983858304405514810, -0.983849355712807850, +-0.983840404560477170, -0.983831450948545740, -0.983822494877035660, -0.983813536345969350, -0.983804575355369140, -0.983795611905257440, -0.983786645995656790, -0.983777677626589520, +-0.983768706798078150, -0.983759733510144900, -0.983750757762812400, -0.983741779556102980, -0.983732798890039060, -0.983723815764643180, -0.983714830179937770, -0.983705842135945140, +-0.983696851632688050, -0.983687858670188820, -0.983678863248469980, -0.983669865367553960, -0.983660865027463300, -0.983651862228220320, -0.983642856969847770, -0.983633849252368190, +-0.983624839075803890, -0.983615826440177530, -0.983606811345511530, -0.983597793791828660, -0.983588773779151220, -0.983579751307501750, -0.983570726376902900, -0.983561698987377330, +-0.983552669138947460, -0.983543636831636040, -0.983534602065465390, -0.983525564840458390, -0.983516525156637230, -0.983507483014024910, -0.983498438412643840, -0.983489391352516780, +-0.983480341833666170, -0.983471289856114760, -0.983462235419885090, -0.983453178524999800, -0.983444119171481560, -0.983435057359352880, -0.983425993088636760, -0.983416926359355630, +-0.983407857171532230, -0.983398785525189110, -0.983389711420349140, -0.983380634857034640, -0.983371555835268700, -0.983362474355073960, -0.983353390416472960, -0.983344304019488470, +-0.983335215164143240, -0.983326123850460030, -0.983317030078461380, -0.983307933848170280, -0.983298835159609360, -0.983289734012801060, -0.983280630407768700, -0.983271524344534690, +-0.983262415823121900, -0.983253304843553110, -0.983244191405850840, -0.983235075510038300, -0.983225957156138030, -0.983216836344172900, -0.983207713074165660, -0.983198587346139190, +-0.983189459160116240, -0.983180328516119580, -0.983171195414172080, -0.983162059854296720, -0.983152921836515930, -0.983143781360853010, -0.983134638427330730, -0.983125493035971740, +-0.983116345186799130, -0.983107194879835560, -0.983098042115103880, -0.983088886892627300, -0.983079729212428370, -0.983070569074530280, -0.983061406478955680, -0.983052241425727560, +-0.983043073914868890, -0.983033903946402440, -0.983024731520351300, -0.983015556636738230, -0.983006379295586320, -0.982997199496918440, -0.982988017240757680, -0.982978832527126810, +-0.982969645356048920, -0.982960455727546640, -0.982951263641643540, -0.982942069098362130, -0.982932872097725620, -0.982923672639756880, -0.982914470724479020, -0.982905266351915000, +-0.982896059522087810, -0.982886850235020430, -0.982877638490735730, -0.982868424289257140, -0.982859207630607520, -0.982849988514809760, -0.982840766941887160, -0.982831542911862590, +-0.982822316424759030, -0.982813087480599810, -0.982803856079407900, -0.982794622221206390, -0.982785385906018270, -0.982776147133866630, -0.982766905904774670, -0.982757662218765480, +-0.982748416075862160, -0.982739167476087690, -0.982729916419465170, -0.982720662906018120, -0.982711406935769300, -0.982702148508742050, -0.982692887624959320, -0.982683624284444330, +-0.982674358487220400, -0.982665090233310500, -0.982655819522737950, -0.982646546355525840, -0.982637270731697380, -0.982627992651275760, -0.982618712114284090, -0.982609429120745670, +-0.982600143670683710, -0.982590855764121200, -0.982581565401081770, -0.982572272581588300, -0.982562977305664220, -0.982553679573332730, -0.982544379384617030, -0.982535076739540210, +-0.982525771638125820, -0.982516464080397060, -0.982507154066377120, -0.982497841596089330, -0.982488526669556880, -0.982479209286803100, -0.982469889447851300, -0.982460567152724780, +-0.982451242401446770, -0.982441915194040780, -0.982432585530529920, -0.982423253410937610, -0.982413918835287280, -0.982404581803602020, -0.982395242315905250, -0.982385900372220510, +-0.982376555972571010, -0.982367209116980060, -0.982357859805471190, -0.982348508038067610, -0.982339153814792750, -0.982329797135670040, -0.982320438000722880, -0.982311076409974390, +-0.982301712363448320, -0.982292345861168090, -0.982282976903156910, -0.982273605489438320, -0.982264231620035730, -0.982254855294972360, -0.982245476514272080, -0.982236095277958080, +-0.982226711586053790, -0.982217325438582870, -0.982207936835568510, -0.982198545777034360, -0.982189152263003740, -0.982179756293500410, -0.982170357868547560, -0.982160956988168630, +-0.982151553652387600, -0.982142147861227550, -0.982132739614712260, -0.982123328912865020, -0.982113915755709390, -0.982104500143269000, -0.982095082075567500, -0.982085661552628220, +-0.982076238574474790, -0.982066813141130760, -0.982057385252619760, -0.982047954908965240, -0.982038522110190830, -0.982029086856320180, -0.982019649147376610, -0.982010208983383980, +-0.982000766364365950, -0.981991321290345940, -0.981981873761347710, -0.981972423777394800, -0.981962971338510520, -0.981953516444719070, -0.981944059096043880, -0.981934599292508480, +-0.981925137034136640, -0.981915672320951890, -0.981906205152978000, -0.981896735530238600, -0.981887263452757340, -0.981877788920557770, -0.981868311933663860, -0.981858832492099150, +-0.981849350595887400, -0.981839866245052260, -0.981830379439617480, -0.981820890179606610, -0.981811398465043620, -0.981801904295952150, -0.981792407672355980, -0.981782908594278750, +-0.981773407061744210, -0.981763903074776230, -0.981754396633398470, -0.981744887737634690, -0.981735376387508520, -0.981725862583044060, -0.981716346324264970, -0.981706827611194990, +-0.981697306443858000, -0.981687782822277750, -0.981678256746477800, -0.981668728216482430, -0.981659197232315210, -0.981649663793999980, -0.981640127901560630, -0.981630589555021030, +-0.981621048754404810, -0.981611505499736080, -0.981601959791038480, -0.981592411628336100, -0.981582861011652490, -0.981573307941011830, -0.981563752416438010, -0.981554194437954660, +-0.981544634005586000, -0.981535071119355450, -0.981525505779287430, -0.981515937985405710, -0.981506367737734030, -0.981496795036296500, -0.981487219881116980, -0.981477642272219450, +-0.981468062209627790, -0.981458479693365860, -0.981448894723457870, -0.981439307299927450, -0.981429717422798940, -0.981420125092096090, -0.981410530307842980, -0.981400933070063490, +-0.981391333378781710, -0.981381731234021390, -0.981372126635806860, -0.981362519584162100, -0.981352910079111070, -0.981343298120677670, -0.981333683708886070, -0.981324066843760280, +-0.981314447525324370, -0.981304825753602230, -0.981295201528617930, -0.981285574850395800, -0.981275945718959710, -0.981266314134333740, -0.981256680096541990, -0.981247043605608550, +-0.981237404661557290, -0.981227763264412740, -0.981218119414198790, -0.981208473110939510, -0.981198824354659100, -0.981189173145381570, -0.981179519483131200, -0.981169863367931880, +-0.981160204799808030, -0.981150543778783410, -0.981140880304882670, -0.981131214378129670, -0.981121545998548730, -0.981111875166163830, -0.981102201880999280, -0.981092526143079070, +-0.981082847952427730, -0.981073167309069240, -0.981063484213027800, -0.981053798664327630, -0.981044110662993020, -0.981034420209048190, -0.981024727302517220, -0.981015031943424430, +-0.981005334131794140, -0.980995633867650320, -0.980985931151017510, -0.980976225981919910, -0.980966518360381730, -0.980956808286427280, -0.980947095760080660, -0.980937380781366500, +-0.980927663350308790, -0.980917943466932060, -0.980908221131260310, -0.980898496343318160, -0.980888769103129610, -0.980879039410719300, -0.980869307266111320, -0.980859572669329990, +-0.980849835620399620, -0.980840096119344860, -0.980830354166189910, -0.980820609760958970, -0.980810862903676580, -0.980801113594367060, -0.980791361833054490, -0.980781607619763740, +-0.980771850954518910, -0.980762091837344530, -0.980752330268264920, -0.980742566247304380, -0.980732799774487570, -0.980723030849838700, -0.980713259473382170, -0.980703485645142430, +-0.980693709365144110, -0.980683930633411530, -0.980674149449969110, -0.980664365814841290, -0.980654579728052590, -0.980644791189627330, -0.980635000199590160, -0.980625206757965500, +-0.980615410864777880, -0.980605612520051740, -0.980595811723811490, -0.980586008476081790, -0.980576202776887060, -0.980566394626251720, -0.980556584024200320, -0.980546770970757600, +-0.980536955465947990, -0.980527137509796030, -0.980517317102326150, -0.980507494243562980, -0.980497668933530850, -0.980487841172254850, -0.980478010959759170, -0.980468178296068470, +-0.980458343181207390, -0.980448505615200360, -0.980438665598072130, -0.980428823129847140, -0.980418978210550240, -0.980409130840205760, -0.980399281018838330, -0.980389428746472950, +-0.980379574023133920, -0.980369716848845880, -0.980359857223633610, -0.980349995147521640, -0.980340130620534710, -0.980330263642697490, -0.980320394214034610, -0.980310522334570830, +-0.980300648004330590, -0.980290771223338850, -0.980280891991620160, -0.980271010309199280, -0.980261126176100730, -0.980251239592349390, -0.980241350557970010, -0.980231459072987250, +-0.980221565137425870, -0.980211668751310490, -0.980201769914666010, -0.980191868627516950, -0.980181964889888400, -0.980172058701804900, -0.980162150063291330, -0.980152238974372310, +-0.980142325435072740, -0.980132409445417240, -0.980122491005430810, -0.980112570115138190, -0.980102646774563930, -0.980092720983733230, -0.980082792742670740, -0.980072862051401210, +-0.980062928909949620, -0.980052993318340620, -0.980043055276598960, -0.980033114784749860, -0.980023171842818060, -0.980013226450828220, -0.980003278608805320, -0.979993328316774330, +-0.979983375574759900, -0.979973420382787120, -0.979963462740880750, -0.979953502649065560, -0.979943540107366730, -0.979933575115809140, -0.979923607674417550, -0.979913637783216940, +-0.979903665442232290, -0.979893690651488240, -0.979883713411010100, -0.979873733720822760, -0.979863751580951070, -0.979853766991420020, -0.979843779952254580, -0.979833790463479630, +-0.979823798525120250, -0.979813804137201320, -0.979803807299747920, -0.979793808012784820, -0.979783806276337320, -0.979773802090430300, -0.979763795455088850, -0.979753786370337940, +-0.979743774836202340, -0.979733760852707470, -0.979723744419878200, -0.979713725537739500, -0.979703704206316580, -0.979693680425634430, -0.979683654195718010, -0.979673625516592540, +-0.979663594388282880, -0.979653560810814340, -0.979643524784211680, -0.979633486308500330, -0.979623445383705380, -0.979613402009851700, -0.979603356186964590, -0.979593307915068930, +-0.979583257194190150, -0.979573204024353220, -0.979563148405583230, -0.979553090337905390, -0.979543029821344890, -0.979532966855926720, -0.979522901441676200, -0.979512833578618510, +-0.979502763266778650, -0.979492690506181710, -0.979482615296853210, -0.979472537638818140, -0.979462457532101700, -0.979452374976729210, -0.979442289972725750, -0.979432202520116420, +-0.979422112618926750, -0.979412020269181730, -0.979401925470906760, -0.979391828224126960, -0.979381728528867510, -0.979371626385153740, -0.979361521793010950, -0.979351414752464340, +-0.979341305263539130, -0.979331193326260730, -0.979321078940654340, -0.979310962106745290, -0.979300842824558760, -0.979290721094120190, -0.979280596915454660, -0.979270470288587710, +-0.979260341213544660, -0.979250209690350810, -0.979240075719031380, -0.979229939299611770, -0.979219800432117320, -0.979209659116573320, -0.979199515353005200, -0.979189369141438280, +-0.979179220481897760, -0.979169069374409400, -0.979158915818998390, -0.979148759815690050, -0.979138601364509810, -0.979128440465482860, -0.979118277118635080, -0.979108111323991560, +-0.979097943081577720, -0.979087772391419090, -0.979077599253540990, -0.979067423667968840, -0.979057245634728180, -0.979047065153844430, -0.979036882225343020, -0.979026696849249260, +-0.979016509025588900, -0.979006318754387150, -0.978996126035669770, -0.978985930869461950, -0.978975733255789240, -0.978965533194677270, -0.978955330686151590, -0.978945125730237510, +-0.978934918326960560, -0.978924708476346380, -0.978914496178420410, -0.978904281433208290, -0.978894064240735330, -0.978883844601027290, -0.978873622514109480, -0.978863397980007770, +-0.978853170998747470, -0.978842941570354340, -0.978832709694853920, -0.978822475372271630, -0.978812238602633000, -0.978801999385963910, -0.978791757722289880, -0.978781513611636340, +-0.978771267054029170, -0.978761018049493780, -0.978750766598055820, -0.978740512699740940, -0.978730256354574780, -0.978719997562582880, -0.978709736323791100, -0.978699472638224990, +-0.978689206505910180, -0.978678937926872330, -0.978668666901137190, -0.978658393428730180, -0.978648117509677400, -0.978637839144004260, -0.978627558331736540, -0.978617275072899970, +-0.978606989367520220, -0.978596701215622920, -0.978586410617233950, -0.978576117572378950, -0.978565822081083450, -0.978555524143373550, -0.978545223759274880, -0.978534920928813110, +-0.978524615652014100, -0.978514307928903480, -0.978503997759506920, -0.978493685143850600, -0.978483370081959960, -0.978473052573861080, -0.978462732619579390, -0.978452410219140980, +-0.978442085372571490, -0.978431758079896800, -0.978421428341142760, -0.978411096156335040, -0.978400761525499480, -0.978390424448662200, -0.978380084925848830, -0.978369742957085230, +-0.978359398542397280, -0.978349051681810740, -0.978338702375351700, -0.978328350623045910, -0.978317996424919230, -0.978307639780997550, -0.978297280691306730, -0.978286919155872740, +-0.978276555174721450, -0.978266188747878850, -0.978255819875370690, -0.978245448557222840, -0.978235074793461610, -0.978224698584112540, -0.978214319929201830, -0.978203938828755340, +-0.978193555282798940, -0.978183169291358510, -0.978172780854460240, -0.978162389972130120, -0.978151996644394010, -0.978141600871277990, -0.978131202652807840, -0.978120801989009750, +-0.978110398879909580, -0.978099993325533430, -0.978089585325907170, -0.978079174881057110, -0.978068761991009120, -0.978058346655789280, -0.978047928875423470, -0.978037508649937880, +-0.978027085979358390, -0.978016660863711310, -0.978006233303022610, -0.977995803297318280, -0.977985370846624400, -0.977974935950967180, -0.977964498610372600, -0.977954058824866750, +-0.977943616594475820, -0.977933171919225570, -0.977922724799142660, -0.977912275234252950, -0.977901823224582410, -0.977891368770157480, -0.977880911871004010, -0.977870452527148100, +-0.977859990738616290, -0.977849526505434550, -0.977839059827628860, -0.977828590705225650, -0.977818119138250900, -0.977807645126730800, -0.977797168670691660, -0.977786689770159590, +-0.977776208425160780, -0.977765724635721310, -0.977755238401867620, -0.977744749723625910, -0.977734258601022250, -0.977723765034083090, -0.977713269022834170, -0.977702770567302370, +-0.977692269667513550, -0.977681766323494130, -0.977671260535270310, -0.977660752302868310, -0.977650241626314420, -0.977639728505634960, -0.977629212940856140, -0.977618694932004260, +-0.977608174479105530, -0.977597651582186480, -0.977587126241273420, -0.977576598456392440, -0.977566068227569970, -0.977555535554832320, -0.977545000438205690, -0.977534462877716730, +-0.977523922873391630, -0.977513380425256710, -0.977502835533338390, -0.977492288197662870, -0.977481738418256700, -0.977471186195146170, -0.977460631528357720, -0.977450074417917420, +-0.977439514863852170, -0.977428952866188140, -0.977418388424951770, -0.977407821540169360, -0.977397252211867350, -0.977386680440072150, -0.977376106224810300, -0.977365529566108340, +-0.977354950463992460, -0.977344368918489190, -0.977333784929625080, -0.977323198497426440, -0.977312609621919790, -0.977302018303131680, -0.977291424541088300, -0.977280828335816530, +-0.977270229687342670, -0.977259628595693260, -0.977249025060894840, -0.977238419082973820, -0.977227810661956520, -0.977217199797869920, -0.977206586490740330, -0.977195970740594280, +-0.977185352547458310, -0.977174731911358950, -0.977164108832322740, -0.977153483310376210, -0.977142855345546010, -0.977132224937858670, -0.977121592087340620, -0.977110956794018830, +-0.977100319057919500, -0.977089678879069500, -0.977079036257495260, -0.977068391193223200, -0.977057743686280400, -0.977047093736693180, -0.977036441344488300, -0.977025786509692300, +-0.977015129232331800, -0.977004469512433580, -0.976993807350024060, -0.976983142745130100, -0.976972475697778230, -0.976961806207995000, -0.976951134275807490, -0.976940459901242120, +-0.976929783084325540, -0.976919103825084620, -0.976908422123545780, -0.976897737979735780, -0.976887051393681700, -0.976876362365409870, -0.976865670894947250, -0.976854976982320380, +-0.976844280627556020, -0.976833581830681030, -0.976822880591722060, -0.976812176910705990, -0.976801470787659110, -0.976790762222608850, -0.976780051215581760, -0.976769337766604350, +-0.976758621875703730, -0.976747903542906530, -0.976737182768239400, -0.976726459551729430, -0.976715733893403380, -0.976705005793288010, -0.976694275251410060, -0.976683542267796520, +-0.976672806842474040, -0.976662068975469590, -0.976651328666809930, -0.976640585916521700, -0.976629840724632330, -0.976619093091168230, -0.976608343016156510, -0.976597590499623910, +-0.976586835541597310, -0.976576078142103340, -0.976565318301169550, -0.976554556018822350, -0.976543791295088730, -0.976533024129995760, -0.976522254523570110, -0.976511482475838850, +-0.976500707986828980, -0.976489931056567230, -0.976479151685080700, -0.976468369872396050, -0.976457585618540680, -0.976446798923541360, -0.976436009787425060, -0.976425218210218770, +-0.976414424191949240, -0.976403627732643780, -0.976392828832329250, -0.976382027491032640, -0.976371223708781040, -0.976360417485601320, -0.976349608821520550, -0.976338797716565840, +-0.976327984170764050, -0.976317168184142380, -0.976306349756727480, -0.976295528888546980, -0.976284705579627650, -0.976273879829996580, -0.976263051639680750, -0.976252221008707340, +-0.976241387937103130, -0.976230552424895650, -0.976219714472111870, -0.976208874078778770, -0.976198031244923440, -0.976187185970573080, -0.976176338255754780, -0.976165488100495530, +-0.976154635504822620, -0.976143780468762930, -0.976132922992344000, -0.976122063075592790, -0.976111200718536300, -0.976100335921201930, -0.976089468683616680, -0.976078599005807510, +-0.976067726887802190, -0.976056852329627360, -0.976045975331310540, -0.976035095892878730, -0.976024214014359240, -0.976013329695779140, -0.976002442937165760, -0.975991553738546180, +-0.975980662099947600, -0.975969768021397570, -0.975958871502923150, -0.975947972544551460, -0.975937071146309900, -0.975926167308225680, -0.975915261030325780, -0.975904352312637950, +-0.975893441155189280, -0.975882527558006970, -0.975871611521118340, -0.975860693044550700, -0.975849772128331240, -0.975838848772487500, -0.975827922977046570, -0.975816994742035760, +-0.975806064067482380, -0.975795130953413970, -0.975784195399857720, -0.975773257406841070, -0.975762316974391200, -0.975751374102535430, -0.975740428791301300, -0.975729481040716220, +-0.975718530850807290, -0.975707578221602150, -0.975696623153128000, -0.975685665645412370, -0.975674705698482580, -0.975663743312365940, -0.975652778487089980, -0.975641811222681900, +-0.975630841519169460, -0.975619869376579850, -0.975608894794940730, -0.975597917774279290, -0.975586938314622950, -0.975575956415999260, -0.975564972078435730, -0.975553985301959800, +-0.975542996086599000, -0.975532004432380640, -0.975521010339332250, -0.975510013807481370, -0.975499014836855420, -0.975488013427481930, -0.975477009579388320, -0.975466003292602250, +-0.975454994567151230, -0.975443983403062710, -0.975432969800364200, -0.975421953759083360, -0.975410935279247380, -0.975399914360884250, -0.975388891004021370, -0.975377865208686190, +-0.975366836974906450, -0.975355806302709570, -0.975344773192123090, -0.975333737643174770, -0.975322699655892130, -0.975311659230302500, -0.975300616366433950, -0.975289571064313800, +-0.975278523323969800, -0.975267473145429390, -0.975256420528720410, -0.975245365473870090, -0.975234307980906600, -0.975223248049857380, -0.975212185680749970, -0.975201120873612100, +-0.975190053628471440, -0.975178983945355740, -0.975167911824292410, -0.975156837265309440, -0.975145760268434360, -0.975134680833694590, -0.975123598961118440, -0.975112514650733230, +-0.975101427902566710, -0.975090338716646630, -0.975079247093000530, -0.975068153031656500, -0.975057056532642070, -0.975045957595985000, -0.975034856221713040, -0.975023752409853950, +-0.975012646160435480, -0.975001537473485390, -0.974990426349031550, -0.974979312787101480, -0.974968196787723060, -0.974957078350924270, -0.974945957476732850, -0.974934834165176460, +-0.974923708416283060, -0.974912580230080320, -0.974901449606595970, -0.974890316545858230, -0.974879181047894620, -0.974868043112733120, -0.974856902740401490, -0.974845759930927590, +-0.974834614684339300, -0.974823467000664470, -0.974812316879930970, -0.974801164322166460, -0.974790009327399340, -0.974778851895657050, -0.974767692026967780, -0.974756529721359180, +-0.974745364978859330, -0.974734197799495770, -0.974723028183296920, -0.974711856130290540, -0.974700681640504610, -0.974689504713966870, -0.974678325350705420, -0.974667143550748130, +-0.974655959314122970, -0.974644772640857910, -0.974633583530980730, -0.974622391984519830, -0.974611198001502870, -0.974600001581957920, -0.974588802725913080, -0.974577601433396110, +-0.974566397704434980, -0.974555191539058120, -0.974543982937293160, -0.974532771899168320, -0.974521558424711550, -0.974510342513950860, -0.974499124166914310, -0.974487903383630010, +-0.974476680164125920, -0.974465454508430140, -0.974454226416570420, -0.974442995888575410, -0.974431762924472980, -0.974420527524291090, -0.974409289688057840, -0.974398049415801220, +-0.974386806707549620, -0.974375561563331050, -0.974364313983173580, -0.974353063967105300, -0.974341811515154420, -0.974330556627348910, -0.974319299303717080, -0.974308039544287020, +-0.974296777349086820, -0.974285512718144450, -0.974274245651488570, -0.974262976149147030, -0.974251704211148040, -0.974240429837519790, -0.974229153028290500, -0.974217873783488120, +-0.974206592103141310, -0.974195307987277940, -0.974184021435926310, -0.974172732449114620, -0.974161441026871190, -0.974150147169223990, -0.974138850876201560, -0.974127552147831980, +-0.974116250984143340, -0.974104947385164180, -0.974093641350922690, -0.974082332881447190, -0.974071021976765760, -0.974059708636906720, -0.974048392861898370, -0.974037074651769140, +-0.974025754006547230, -0.974014430926260940, -0.974003105410938600, -0.973991777460608390, -0.973980447075298850, -0.973969114255038180, -0.973957778999854700, -0.973946441309776590, +-0.973935101184832620, -0.973923758625050760, -0.973912413630459660, -0.973901066201087410, -0.973889716336962530, -0.973878364038113230, -0.973867009304568150, -0.973855652136355500, +-0.973844292533503800, -0.973832930496041360, -0.973821566023996610, -0.973810199117397860, -0.973798829776273740, -0.973787458000652470, -0.973776083790562570, -0.973764707146032250, +-0.973753328067090360, -0.973741946553765110, -0.973730562606085040, -0.973719176224078550, -0.973707787407773970, -0.973696396157200050, -0.973685002472385210, -0.973673606353357870, +-0.973662207800146450, -0.973650806812779600, -0.973639403391285630, -0.973627997535693180, -0.973616589246030780, -0.973605178522326860, -0.973593765364609840, -0.973582349772908580, +-0.973570931747251400, -0.973559511287666930, -0.973548088394183720, -0.973536663066830180, -0.973525235305634950, -0.973513805110626680, -0.973502372481834020, -0.973490937419285270, +-0.973479499923009310, -0.973468059993034540, -0.973456617629389730, -0.973445172832103300, -0.973433725601203890, -0.973422275936720040, -0.973410823838680610, -0.973399369307114240, +-0.973387912342049360, -0.973376452943514710, -0.973364991111538960, -0.973353526846150510, -0.973342060147378450, -0.973330591015251210, -0.973319119449797540, -0.973307645451046090, +-0.973296169019025490, -0.973284690153764510, -0.973273208855291670, -0.973261725123635960, -0.973250238958825680, -0.973238750360890030, -0.973227259329857430, -0.973215765865756750, +-0.973204269968616640, -0.973192771638465850, -0.973181270875332900, -0.973169767679247010, -0.973158262050236700, -0.973146753988330730, -0.973135243493557960, -0.973123730565946920, +-0.973112215205526710, -0.973100697412325850, -0.973089177186373330, -0.973077654527697790, -0.973066129436327980, -0.973054601912292980, -0.973043071955621560, -0.973031539566342360, +-0.973020004744484360, -0.973008467490076190, -0.972996927803146950, -0.972985385683725500, -0.972973841131840490, -0.972962294147521000, -0.972950744730795680, -0.972939192881693500, +-0.972927638600243340, -0.972916081886474160, -0.972904522740414720, -0.972892961162093780, -0.972881397151540650, -0.972869830708783970, -0.972858261833852710, -0.972846690526775860, +-0.972835116787582050, -0.972823540616300720, -0.972811962012960500, -0.972800380977590250, -0.972788797510219180, -0.972777211610876160, -0.972765623279590040, -0.972754032516389810, +-0.972742439321304550, -0.972730843694363250, -0.972719245635594530, -0.972707645145027940, -0.972696042222692240, -0.972684436868616500, -0.972672829082829590, -0.972661218865360610, +-0.972649606216238420, -0.972637991135492430, -0.972626373623151410, -0.972614753679244440, -0.972603131303800720, -0.972591506496849000, -0.972579879258418600, -0.972568249588538490, +-0.972556617487237760, -0.972544982954545280, -0.972533345990490570, -0.972521706595102510, -0.972510064768410180, -0.972498420510442660, -0.972486773821229060, -0.972475124700798330, +-0.972463473149180020, -0.972451819166403000, -0.972440162752496450, -0.972428503907489470, -0.972416842631411260, -0.972405178924291010, -0.972393512786157710, -0.972381844217040660, +-0.972370173216968840, -0.972358499785971770, -0.972346823924078340, -0.972335145631317950, -0.972323464907719700, -0.972311781753312790, -0.972300096168126180, -0.972288408152189640, +-0.972276717705532030, -0.972265024828182560, -0.972253329520170520, -0.972241631781525230, -0.972229931612275890, -0.972218229012451580, -0.972206523982081850, -0.972194816521195770, +-0.972183106629822320, -0.972171394307991490, -0.972159679555732130, -0.972147962373073440, -0.972136242760044960, -0.972124520716675660, -0.972112796242995290, -0.972101069339032840, +-0.972089340004817840, -0.972077608240379360, -0.972065874045746960, -0.972054137420949820, -0.972042398366017360, -0.972030656880978890, -0.972018912965863740, -0.972007166620701190, +-0.971995417845520900, -0.971983666640352070, -0.971971913005224010, -0.971960156940166240, -0.971948398445208080, -0.971936637520378620, -0.971924874165707830, -0.971913108381224910, +-0.971901340166959170, -0.971889569522940140, -0.971877796449197140, -0.971866020945759580, -0.971854243012657100, -0.971842462649918910, -0.971830679857574430, -0.971818894635653410, +-0.971807106984185150, -0.971795316903199090, -0.971783524392724860, -0.971771729452791670, -0.971759932083429030, -0.971748132284666830, -0.971736330056534260, -0.971724525399060850, +-0.971712718312276010, -0.971700908796209520, -0.971689096850890780, -0.971677282476349210, -0.971665465672614470, -0.971653646439715860, -0.971641824777683240, -0.971630000686546150, +-0.971618174166334110, -0.971606345217076560, -0.971594513838803240, -0.971582680031543360, -0.971570843795326990, -0.971559005130183450, -0.971547164036142500, -0.971535320513233550, +-0.971523474561486360, -0.971511626180930450, -0.971499775371595490, -0.971487922133511090, -0.971476066466706920, -0.971464208371212390, -0.971452347847057470, -0.971440484894271710, +-0.971428619512884730, -0.971416751702926300, -0.971404881464425610, -0.971393008797413080, -0.971381133701917920, -0.971369256177969990, -0.971357376225598920, -0.971345493844834370, +-0.971333609035706090, -0.971321721798243830, -0.971309832132477240, -0.971297940038436060, -0.971286045516149830, -0.971274148565648750, -0.971262249186962250, -0.971250347380120060, +-0.971238443145152060, -0.971226536482088010, -0.971214627390957320, -0.971202715871790300, -0.971190801924616600, -0.971178885549465740, -0.971166966746367710, -0.971155045515352260, +-0.971143121856449240, -0.971131195769688430, -0.971119267255099560, -0.971107336312712400, -0.971095402942557030, -0.971083467144663090, -0.971071528919060680, -0.971059588265779320, +-0.971047645184848980, -0.971035699676299320, -0.971023751740160650, -0.971011801376462590, -0.970999848585235030, -0.970987893366507930, -0.970975935720310930, -0.970963975646674250, +-0.970952013145627510, -0.970940048217200810, -0.970928080861423790, -0.970916111078326760, -0.970904138867939360, -0.970892164230291790, -0.970880187165413690, -0.970868207673335150, +-0.970856225754085810, -0.970844241407696210, -0.970832254634195980, -0.970820265433615100, -0.970808273805983670, -0.970796279751331430, -0.970784283269688460, -0.970772284361084870, +-0.970760283025550510, -0.970748279263115470, -0.970736273073809610, -0.970724264457663130, -0.970712253414706130, -0.970700239944968350, -0.970688224048480100, -0.970676205725271020, +-0.970664184975371660, -0.970652161798811750, -0.970640136195621510, -0.970628108165830890, -0.970616077709470120, -0.970604044826569030, -0.970592009517157850, -0.970579971781266650, +-0.970567931618925520, -0.970555889030164430, -0.970543844015013700, -0.970531796573503520, -0.970519746705663660, -0.970507694411524620, -0.970495639691116190, -0.970483582544468540, +-0.970471522971612100, -0.970459460972576850, -0.970447396547392980, -0.970435329696090590, -0.970423260418699970, -0.970411188715251120, -0.970399114585774330, -0.970387038030299690, +-0.970374959048857290, -0.970362877641477660, -0.970350793808190890, -0.970338707549027070, -0.970326618864016610, -0.970314527753189490, -0.970302434216575800, -0.970290338254206410, +-0.970278239866111060, -0.970266139052320060, -0.970254035812863850, -0.970241930147772490, -0.970229822057076200, -0.970217711540805490, -0.970205598598990470, -0.970193483231661210, +-0.970181365438848480, -0.970169245220582340, -0.970157122576893130, -0.970144997507811020, -0.970132870013366460, -0.970120740093589510, -0.970108607748510930, -0.970096472978160820, +-0.970084335782569580, -0.970072196161767430, -0.970060054115784780, -0.970047909644652040, -0.970035762748399530, -0.970023613427057670, -0.970011461680656660, -0.969999307509226800, +-0.969987150912798970, -0.969974991891403240, -0.969962830445069920, -0.969950666573829670, -0.969938500277712450, -0.969926331556749230, -0.969914160410970230, -0.969901986840405740, +-0.969889810845086300, -0.969877632425042320, -0.969865451580304350, -0.969853268310902680, -0.969841082616867860, -0.969828894498230290, -0.969816703955020290, -0.969804510987268830, +-0.969792315595006000, -0.969780117778262340, -0.969767917537068480, -0.969755714871454840, -0.969743509781451630, -0.969731302267089810, -0.969719092328399810, -0.969706879965412160, +-0.969694665178157170, -0.969682447966665580, -0.969670228330967940, -0.969658006271094660, -0.969645781787076280, -0.969633554878943320, -0.969621325546726750, -0.969609093790456790, +-0.969596859610164060, -0.969584623005879220, -0.969572383977632900, -0.969560142525455300, -0.969547898649377630, -0.969535652349430180, -0.969523403625643600, -0.969511152478048420, +-0.969498898906675510, -0.969486642911555290, -0.969474384492718500, -0.969462123650195680, -0.969449860384017370, -0.969437594694214640, -0.969425326580817930, -0.969413056043857860, +-0.969400783083365190, -0.969388507699370460, -0.969376229891904420, -0.969363949660997930, -0.969351667006681520, -0.969339381928985940, -0.969327094427942070, -0.969314804503580320, +-0.969302512155931550, -0.969290217385026520, -0.969277920190895980, -0.969265620573570690, -0.969253318533081050, -0.969241014069458400, -0.969228707182733130, -0.969216397872936120, +-0.969204086140098120, -0.969191771984249660, -0.969179455405422050, -0.969167136403645820, -0.969154814978951620, -0.969142491131370520, -0.969130164860933170, -0.969117836167670330, +-0.969105505051612970, -0.969093171512791840, -0.969080835551237700, -0.969068497166981400, -0.969056156360053930, -0.969043813130486150, -0.969031467478308820, -0.969019119403552900, +-0.969006768906249040, -0.968994415986428100, -0.968982060644121400, -0.968969702879359460, -0.968957342692173260, -0.968944980082593780, -0.968932615050651870, -0.968920247596378290, +-0.968907877719804240, -0.968895505420960370, -0.968883130699877530, -0.968870753556587140, -0.968858373991119850, -0.968845992003506630, -0.968833607593778460, -0.968821220761966200, +-0.968808831508100710, -0.968796439832213420, -0.968784045734334960, -0.968771649214496430, -0.968759250272728690, -0.968746848909062930, -0.968734445123529910, -0.968722038916160930, +-0.968709630286986760, -0.968697219236038350, -0.968684805763347030, -0.968672389868943770, -0.968659971552859540, -0.968647550815125320, -0.968635127655772310, -0.968622702074831140, +-0.968610274072333580, -0.968597843648310250, -0.968585410802792260, -0.968572975535810900, -0.968560537847396930, -0.968548097737581770, -0.968535655206396280, -0.968523210253871670, +-0.968510762880039010, -0.968498313084929290, -0.968485860868573910, -0.968473406231003970, -0.968460949172250450, -0.968448489692344540, -0.968436027791317210, -0.968423563469200110, +-0.968411096726023990, -0.968398627561820160, -0.968386155976619810, -0.968373681970454040, -0.968361205543354140, -0.968348726695351100, -0.968336245426476340, -0.968323761736760940, +-0.968311275626235870, -0.968298787094932890, -0.968286296142882860, -0.968273802770117210, -0.968261306976666900, -0.968248808762563470, -0.968236308127837670, -0.968223805072521370, +-0.968211299596645650, -0.968198791700241590, -0.968186281383340620, -0.968173768645973820, -0.968161253488172720, -0.968148735909968420, -0.968136215911392320, -0.968123693492475400, +-0.968111168653249530, -0.968098641393745800, -0.968086111713995390, -0.968073579614029620, -0.968061045093880020, -0.968048508153577570, -0.968035968793154010, -0.968023427012640550, +-0.968010882812068600, -0.967998336191469360, -0.967985787150874240, -0.967973235690314790, -0.967960681809822200, -0.967948125509427880, -0.967935566789163040, -0.967923005649059420, +-0.967910442089148340, -0.967897876109461210, -0.967885307710029340, -0.967872736890884270, -0.967860163652057070, -0.967847587993579730, -0.967835009915483320, -0.967822429417799500, +-0.967809846500559570, -0.967797261163794940, -0.967784673407537270, -0.967772083231817850, -0.967759490636668220, -0.967746895622119910, -0.967734298188204110, -0.967721698334952810, +-0.967709096062397300, -0.967696491370569010, -0.967683884259499470, -0.967671274729219990, -0.967658662779762650, -0.967646048411158530, -0.967633431623439400, -0.967620812416636560, +-0.967608190790781750, -0.967595566745906520, -0.967582940282042280, -0.967570311399220780, -0.967557680097473450, -0.967545046376831700, -0.967532410237327500, -0.967519771678992390, +-0.967507130701857790, -0.967494487305955330, -0.967481841491316660, -0.967469193257973200, -0.967456542605957040, -0.967443889535299470, -0.967431234046032150, -0.967418576138186710, +-0.967405915811794910, -0.967393253066888280, -0.967380587903498570, -0.967367920321657300, -0.967355250321396130, -0.967342577902746910, -0.967329903065741400, -0.967317225810411020, +-0.967304546136787620, -0.967291864044902860, -0.967279179534788150, -0.967266492606475790, -0.967253803259997210, -0.967241111495384050, -0.967228417312668180, -0.967215720711881220, +-0.967203021693054940, -0.967190320256221200, -0.967177616401411640, -0.967164910128657680, -0.967152201437991850, -0.967139490329445460, -0.967126776803050260, -0.967114060858838220, +-0.967101342496840990, -0.967088621717090090, -0.967075898519617950, -0.967063172904456090, -0.967050444871636270, -0.967037714421190350, -0.967024981553150200, -0.967012246267547450, +-0.966999508564414190, -0.966986768443782170, -0.966974025905683150, -0.966961280950148880, -0.966948533577211670, -0.966935783786903040, -0.966923031579255080, -0.966910276954299430, +-0.966897519912067850, -0.966884760452592750, -0.966871998575905780, -0.966859234282038790, -0.966846467571023660, -0.966833698442892460, -0.966820926897676960, -0.966808152935409120, +-0.966795376556120910, -0.966782597759844320, -0.966769816546610870, -0.966757032916453210, -0.966744246869402970, -0.966731458405492130, -0.966718667524752550, -0.966705874227216430, +-0.966693078512915300, -0.966680280381881700, -0.966667479834147470, -0.966654676869744490, -0.966641871488704840, -0.966629063691060500, -0.966616253476843430, -0.966603440846085850, +-0.966590625798819600, -0.966577808335076560, -0.966564988454889250, -0.966552166158289540, -0.966539341445309290, -0.966526514315980690, -0.966513684770335950, -0.966500852808406590, +-0.966488018430225470, -0.966475181635824240, -0.966462342425234990, -0.966449500798490010, -0.966436656755621180, -0.966423810296660800, -0.966410961421640850, -0.966398110130593510, +-0.966385256423550660, -0.966372400300544830, -0.966359541761608100, -0.966346680806772440, -0.966333817436070050, -0.966320951649533240, -0.966308083447193770, -0.966295212829084260, +-0.966282339795236810, -0.966269464345683500, -0.966256586480456430, -0.966243706199587990, -0.966230823503110290, -0.966217938391055520, -0.966205050863455870, -0.966192160920343550, +-0.966179268561750740, -0.966166373787709860, -0.966153476598253120, -0.966140576993412600, -0.966127674973220720, -0.966114770537709440, -0.966101863686911420, -0.966088954420858740, +-0.966076042739583700, -0.966063128643118500, -0.966050212131495560, -0.966037293204746960, -0.966024371862905240, -0.966011448106002590, -0.965998521934071320, -0.965985593347143400, +-0.965972662345251810, -0.965959728928428630, -0.965946793096706060, -0.965933854850116510, -0.965920914188692080, -0.965907971112465620, -0.965895025621469230, -0.965882077715735310, +-0.965869127395296180, -0.965856174660184140, -0.965843219510431730, -0.965830261946071360, -0.965817301967135220, -0.965804339573655860, -0.965791374765665460, -0.965778407543196770, +-0.965765437906282110, -0.965752465854953890, -0.965739491389244420, -0.965726514509186230, -0.965713535214811620, -0.965700553506153360, -0.965687569383243740, -0.965674582846115070, +-0.965661593894800110, -0.965648602529331050, -0.965635608749740530, -0.965622612556060970, -0.965609613948324900, -0.965596612926564510, -0.965583609490812900, -0.965570603641102250, +-0.965557595377465110, -0.965544584699933870, -0.965531571608541310, -0.965518556103319490, -0.965505538184301510, -0.965492517851519790, -0.965479495105006640, -0.965466469944794900, +-0.965453442370916900, -0.965440412383405280, -0.965427379982292670, -0.965414345167611600, -0.965401307939394600, -0.965388268297674210, -0.965375226242483290, -0.965362181773854360, +-0.965349134891819950, -0.965336085596412710, -0.965323033887665050, -0.965309979765609950, -0.965296923230280050, -0.965283864281707760, -0.965270802919925730, -0.965257739144966820, +-0.965244672956863450, -0.965231604355648480, -0.965218533341354550, -0.965205459914014190, -0.965192384073659930, -0.965179305820325070, -0.965166225154041820, -0.965153142074843040, +-0.965140056582761470, -0.965126968677829430, -0.965113878360080220, -0.965100785629546380, -0.965087690486260530, -0.965074592930255440, -0.965061492961563960, -0.965048390580218630, +-0.965035285786252420, -0.965022178579697850, -0.965009068960588020, -0.964995956928955120, -0.964982842484832680, -0.964969725628253120, -0.964956606359249180, -0.964943484677853740, +-0.964930360584099640, -0.964917234078019440, -0.964904105159646310, -0.964890973829012900, -0.964877840086152070, -0.964864703931096690, -0.964851565363879500, -0.964838424384533490, +-0.964825280993091280, -0.964812135189585970, -0.964798986974050090, -0.964785836346516930, -0.964772683307019150, -0.964759527855589720, -0.964746369992261490, -0.964733209717067220, +-0.964720047030039770, -0.964706881931212460, -0.964693714420617910, -0.964680544498289110, -0.964667372164258910, -0.964654197418560290, -0.964641020261226220, -0.964627840692289570, +-0.964614658711783310, -0.964601474319740190, -0.964588287516193630, -0.964575098301176270, -0.964561906674721190, -0.964548712636861370, -0.964535516187629780, -0.964522317327059180, +-0.964509116055182970, -0.964495912372034030, -0.964482706277645320, -0.964469497772049820, -0.964456286855280510, -0.964443073527370580, -0.964429857788352880, -0.964416639638260630, +-0.964403419077126680, -0.964390196104984000, -0.964376970721866010, -0.964363742927805690, -0.964350512722836010, -0.964337280106989940, -0.964324045080300560, -0.964310807642801190, +-0.964297567794524910, -0.964284325535504580, -0.964271080865773510, -0.964257833785364780, -0.964244584294311480, -0.964231332392646580, -0.964218078080403500, -0.964204821357615090, +-0.964191562224314570, -0.964178300680535230, -0.964165036726310150, -0.964151770361672540, -0.964138501586655480, -0.964125230401292170, -0.964111956805615570, -0.964098680799659210, +-0.964085402383456300, -0.964072121557039810, -0.964058838320442920, -0.964045552673699070, -0.964032264616841330, -0.964018974149902900, -0.964005681272916970, -0.963992385985916740, +-0.963979088288935640, -0.963965788182006960, -0.963952485665163670, -0.963939180738439320, -0.963925873401866860, -0.963912563655479620, -0.963899251499311100, -0.963885936933394530, +-0.963872619957763080, -0.963859300572450060, -0.963845978777488790, -0.963832654572912560, -0.963819327958754800, -0.963805998935048590, -0.963792667501827240, -0.963779333659124380, +-0.963765997406973220, -0.963752658745407050, -0.963739317674459310, -0.963725974194163280, -0.963712628304551950, -0.963699280005659410, -0.963685929297518620, -0.963672576180163000, +-0.963659220653625970, -0.963645862717940840, -0.963632502373141020, -0.963619139619260050, -0.963605774456331220, -0.963592406884387850, -0.963579036903463360, -0.963565664513591490, +-0.963552289714805330, -0.963538912507138520, -0.963525532890624480, -0.963512150865296400, -0.963498766431188040, -0.963485379588332910, -0.963471990336764230, -0.963458598676515620, +-0.963445204607620510, -0.963431808130112420, -0.963418409244024780, -0.963405007949391100, -0.963391604246244930, -0.963378198134619450, -0.963364789614548740, -0.963351378686066130, +-0.963337965349204910, -0.963324549603998940, -0.963311131450481530, -0.963297710888686100, -0.963284287918646510, -0.963270862540396290, -0.963257434753968970, -0.963244004559397960, +-0.963230571956717020, -0.963217136945959560, -0.963203699527159340, -0.963190259700349880, -0.963176817465564490, -0.963163372822837260, -0.963149925772201710, -0.963136476313691260, +-0.963123024447339660, -0.963109570173180440, -0.963096113491247020, -0.963082654401573700, -0.963069192904193680, -0.963055728999140600, -0.963042262686448320, -0.963028793966150260, +-0.963015322838280290, -0.963001849302872030, -0.962988373359959130, -0.962974895009575120, -0.962961414251753970, -0.962947931086529430, -0.962934445513934920, -0.962920957534004420, +-0.962907467146771450, -0.962893974352269640, -0.962880479150533100, -0.962866981541595330, -0.962853481525490110, -0.962839979102251280, -0.962826474271912370, -0.962812967034507360, +-0.962799457390069890, -0.962785945338633820, -0.962772430880232900, -0.962758914014900660, -0.962745394742671290, -0.962731873063578550, -0.962718348977656070, -0.962704822484937720, +-0.962691293585457020, -0.962677762279248390, -0.962664228566345370, -0.962650692446781700, -0.962637153920591350, -0.962623612987808070, -0.962610069648465850, -0.962596523902598420, +-0.962582975750239660, -0.962569425191423410, -0.962555872226183440, -0.962542316854554050, -0.962528759076568760, -0.962515198892261670, -0.962501636301666630, -0.962488071304817390, +-0.962474503901747710, -0.962460934092492120, -0.962447361877084130, -0.962433787255557730, -0.962420210227946880, -0.962406630794285570, -0.962393048954607530, -0.962379464708946970, +-0.962365878057337750, -0.962352288999813620, -0.962338697536408880, -0.962325103667157510, -0.962311507392093370, -0.962297908711250430, -0.962284307624662770, -0.962270704132364040, +-0.962257098234388870, -0.962243489930770910, -0.962229879221544240, -0.962216266106742820, -0.962202650586400750, -0.962189032660552000, -0.962175412329230760, -0.962161789592471010, +-0.962148164450306490, -0.962134536902771840, -0.962120906949900820, -0.962107274591727510, -0.962093639828286110, -0.962080002659610470, -0.962066363085734680, -0.962052721106693150, +-0.962039076722519870, -0.962025429933248910, -0.962011780738914360, -0.961998129139550410, -0.961984475135191030, -0.961970818725870540, -0.961957159911623010, -0.961943498692482520, +-0.961929835068483060, -0.961916169039659260, -0.961902500606045100, -0.961888829767674650, -0.961875156524582110, -0.961861480876801460, -0.961847802824367330, -0.961834122367313690, +-0.961820439505674750, -0.961806754239484700, -0.961793066568777720, -0.961779376493588130, -0.961765684013950130, -0.961751989129897900, -0.961738291841465640, -0.961724592148687440, +-0.961710890051598040, -0.961697185550231430, -0.961683478644621780, -0.961669769334803530, -0.961656057620810740, -0.961642343502677630, -0.961628626980438940, -0.961614908054128640, +-0.961601186723781030, -0.961587462989430540, -0.961573736851111360, -0.961560008308857790, -0.961546277362704260, -0.961532544012684950, -0.961518808258834180, -0.961505070101186580, +-0.961491329539776230, -0.961477586574637550, -0.961463841205804970, -0.961450093433312780, -0.961436343257195180, -0.961422590677486920, -0.961408835694222090, -0.961395078307435310, +-0.961381318517160690, -0.961367556323432850, -0.961353791726286210, -0.961340024725754970, -0.961326255321873660, -0.961312483514676570, -0.961298709304198360, -0.961284932690473550, +-0.961271153673536330, -0.961257372253421230, -0.961243588430162670, -0.961229802203794950, -0.961216013574352930, -0.961202222541870820, -0.961188429106383250, -0.961174633267924630, +-0.961160835026529380, -0.961147034382232040, -0.961133231335067120, -0.961119425885069050, -0.961105618032272570, -0.961091807776711660, -0.961077995118421510, -0.961064180057436430, +-0.961050362593790840, -0.961036542727519370, -0.961022720458656330, -0.961008895787236690, -0.960995068713294760, -0.960981239236865290, -0.960967407357982580, -0.960953573076681500, +-0.960939736392996350, -0.960925897306961980, -0.960912055818612830, -0.960898211927983410, -0.960884365635108370, -0.960870516940022680, -0.960856665842760640, -0.960842812343356890, +-0.960828956441846180, -0.960815098138263050, -0.960801237432641900, -0.960787374325017930, -0.960773508815425560, -0.960759640903899310, -0.960745770590474060, -0.960731897875184320, +-0.960718022758064950, -0.960704145239150380, -0.960690265318475570, -0.960676382996074720, -0.960662498271983250, -0.960648611146235560, -0.960634721618866320, -0.960620829689910250, +-0.960606935359402110, -0.960593038627376330, -0.960579139493868310, -0.960565237958912350, -0.960551334022543330, -0.960537427684796000, -0.960523518945705090, -0.960509607805305370, +-0.960495694263631680, -0.960481778320718680, -0.960467859976601000, -0.960453939231313950, -0.960440016084892050, -0.960426090537370160, -0.960412162588782920, -0.960398232239165320, +-0.960384299488551970, -0.960370364336978090, -0.960356426784478190, -0.960342486831087360, -0.960328544476840240, -0.960314599721771800, -0.960300652565916790, -0.960286703009310180, +-0.960272751051986840, -0.960258796693981620, -0.960244839935329160, -0.960230880776064890, -0.960216919216223320, -0.960202955255839540, -0.960188988894948300, -0.960175020133584360, +-0.960161048971783230, -0.960147075409579330, -0.960133099447007870, -0.960119121084103580, -0.960105140320901440, -0.960091157157436540, -0.960077171593743730, -0.960063183629857870, +-0.960049193265814170, -0.960035200501647260, -0.960021205337392550, -0.960007207773084790, -0.959993207808759070, -0.959979205444450370, -0.959965200680193640, -0.959951193516023650, +-0.959937183951975800, -0.959923171988085190, -0.959909157624386560, -0.959895140860914990, -0.959881121697705560, -0.959867100134793370, -0.959853076172213490, -0.959839049810000900, +-0.959825021048190340, -0.959810989886817570, -0.959796956325917330, -0.959782920365524590, -0.959768882005674670, -0.959754841246402530, -0.959740798087742930, -0.959726752529731720, +-0.959712704572403540, -0.959698654215793590, -0.959684601459937060, -0.959670546304869030, -0.959656488750624590, -0.959642428797238930, -0.959628366444747250, -0.959614301693184400, +-0.959600234542586030, -0.959586164992987100, -0.959572093044422700, -0.959558018696928140, -0.959543941950538490, -0.959529862805288740, -0.959515781261214510, -0.959501697318350890, +-0.959487610976733070, -0.959473522236396150, -0.959459431097375530, -0.959445337559706180, -0.959431241623423640, -0.959417143288562870, -0.959403042555159290, -0.959388939423247880, +-0.959374833892864380, -0.959360725964043760, -0.959346615636821330, -0.959332502911232400, -0.959318387787311930, -0.959304270265095680, -0.959290150344618840, -0.959276028025916610, +-0.959261903309024280, -0.959247776193977280, -0.959233646680810790, -0.959219514769560130, -0.959205380460260710, -0.959191243752947840, -0.959177104647656600, -0.959162963144422950, +-0.959148819243281770, -0.959134672944268570, -0.959120524247418670, -0.959106373152767590, -0.959092219660350190, -0.959078063770202550, -0.959063905482359760, -0.959049744796857120, +-0.959035581713730160, -0.959021416233014290, -0.959007248354744820, -0.958993078078957280, -0.958978905405687090, -0.958964730334969320, -0.958950552866839940, -0.958936373001334270, +-0.958922190738487610, -0.958908006078335480, -0.958893819020913310, -0.958879629566256390, -0.958865437714400580, -0.958851243465381310, -0.958837046819233760, -0.958822847775993690, +-0.958808646335696510, -0.958794442498377640, -0.958780236264072720, -0.958766027632817260, -0.958751816604646480, -0.958737603179596330, -0.958723387357702130, -0.958709169138999620, +-0.958694948523524100, -0.958680725511311230, -0.958666500102396180, -0.958652272296815270, -0.958638042094603680, -0.958623809495796840, -0.958609574500430610, -0.958595337108540390, +-0.958581097320161950, -0.958566855135330580, -0.958552610554082140, -0.958538363576452280, -0.958524114202476190, -0.958509862432190050, -0.958495608265629180, -0.958481351702829440, +-0.958467092743826240, -0.958452831388655000, -0.958438567637352020, -0.958424301489952610, -0.958410032946492410, -0.958395762007007160, -0.958381488671532500, -0.958367212940104190, +-0.958352934812757740, -0.958338654289528910, -0.958324371370453560, -0.958310086055567000, -0.958295798344905530, -0.958281508238504440, -0.958267215736399610, -0.958252920838626790, +-0.958238623545221710, -0.958224323856219810, -0.958210021771657260, -0.958195717291569720, -0.958181410415992810, -0.958167101144962510, -0.958152789478514340, -0.958138475416684290, +-0.958124158959507980, -0.958109840107021270, -0.958095518859259700, -0.958081195216259670, -0.958066869178056610, -0.958052540744686380, -0.958038209916184820, -0.958023876692587710, +-0.958009541073930550, -0.957995203060249880, -0.957980862651581220, -0.957966519847960440, -0.957952174649423280, -0.957937827056005720, -0.957923477067743610, -0.957909124684672820, +-0.957894769906829200, -0.957880412734248400, -0.957866053166966820, -0.957851691205020120, -0.957837326848444140, -0.957822960097274860, -0.957808590951548240, -0.957794219411299830, +-0.957779845476566140, -0.957765469147382810, -0.957751090423785920, -0.957736709305811230, -0.957722325793494700, -0.957707939886872420, -0.957693551585980350, -0.957679160890854250, +-0.957664767801530430, -0.957650372318044290, -0.957635974440432580, -0.957621574168730840, -0.957607171502975250, -0.957592766443201680, -0.957578358989445880, -0.957563949141744590, +-0.957549536900133340, -0.957535122264648210, -0.957520705235325290, -0.957506285812200650, -0.957491863995310280, -0.957477439784690240, -0.957463013180376630, -0.957448584182405420, +-0.957434152790812560, -0.957419719005634610, -0.957405282826907290, -0.957390844254666810, -0.957376403288949130, -0.957361959929790340, -0.957347514177226740, -0.957333066031294420, +-0.957318615492029460, -0.957304162559468040, -0.957289707233646040, -0.957275249514599860, -0.957260789402365590, -0.957246326896979300, -0.957231861998477210, -0.957217394706895150, +-0.957202925022270000, -0.957188452944637390, -0.957173978474033740, -0.957159501610495120, -0.957145022354057740, -0.957130540704757560, -0.957116056662631220, -0.957101570227714800, +-0.957087081400044500, -0.957072590179656400, -0.957058096566586910, -0.957043600560872120, -0.957029102162548330, -0.957014601371651840, -0.957000098188218520, -0.956985592612285220, +-0.956971084643888030, -0.956956574283063020, -0.956942061529846620, -0.956927546384275020, -0.956913028846384410, -0.956898508916211420, -0.956883986593792150, -0.956869461879162890, +-0.956854934772360060, -0.956840405273419850, -0.956825873382378570, -0.956811339099272630, -0.956796802424138340, -0.956782263357011890, -0.956767721897929910, -0.956753178046928720, +-0.956738631804044500, -0.956724083169313790, -0.956709532142772770, -0.956694978724457750, -0.956680422914405470, -0.956665864712652250, -0.956651304119234270, -0.956636741134188060, +-0.956622175757549930, -0.956607607989356400, -0.956593037829643890, -0.956578465278448810, -0.956563890335807580, -0.956549313001756270, -0.956534733276331980, -0.956520151159570790, +-0.956505566651509320, -0.956490979752183890, -0.956476390461630800, -0.956461798779886910, -0.956447204706988630, -0.956432608242972270, -0.956418009387874360, -0.956403408141731530, +-0.956388804504580080, -0.956374198476456660, -0.956359590057397790, -0.956344979247439890, -0.956330366046619250, -0.956315750454972970, -0.956301132472537340, -0.956286512099348900, +-0.956271889335444160, -0.956257264180859660, -0.956242636635631800, -0.956228006699797570, -0.956213374373393380, -0.956198739656455740, -0.956184102549021200, -0.956169463051126380, +-0.956154821162807920, -0.956140176884102470, -0.956125530215046540, -0.956110881155676550, -0.956096229706029590, -0.956081575866142060, -0.956066919636050620, -0.956052261015791880, +-0.956037600005402390, -0.956022936604918770, -0.956008270814378000, -0.955993602633816610, -0.955978932063271110, -0.955964259102778380, -0.955949583752374930, -0.955934906012097630, +-0.955920225881982890, -0.955905543362067790, -0.955890858452388410, -0.955876171152982180, -0.955861481463885610, -0.955846789385135230, -0.955832094916767900, -0.955817398058820380, +-0.955802698811329070, -0.955787997174331270, -0.955773293147863520, -0.955758586731962460, -0.955743877926665040, -0.955729166732007810, -0.955714453148027720, -0.955699737174761530, +-0.955685018812245990, -0.955670298060517840, -0.955655574919613730, -0.955640849389570950, -0.955626121470426030, -0.955611391162215830, -0.955596658464977100, -0.955581923378746480, +-0.955567185903561380, -0.955552446039458210, -0.955537703786474070, -0.955522959144645580, -0.955508212114009710, -0.955493462694603220, -0.955478710886463190, -0.955463956689626360, +-0.955449200104129590, -0.955434441130009640, -0.955419679767303800, -0.955404916016048710, -0.955390149876281350, -0.955375381348038680, -0.955360610431357560, -0.955345837126274630, +-0.955331061432827310, -0.955316283351052340, -0.955301502880986700, -0.955286720022667350, -0.955271934776131150, -0.955257147141415190, -0.955242357118556210, -0.955227564707591400, +-0.955212769908557520, -0.955197972721491870, -0.955183173146431310, -0.955168371183412800, -0.955153566832473430, -0.955138760093650060, -0.955123950966979550, -0.955109139452499530, +-0.955094325550246540, -0.955079509260257750, -0.955064690582570260, -0.955049869517220930, -0.955035046064247050, -0.955020220223685490, -0.955005391995573330, -0.954990561379947530, +-0.954975728376845520, -0.954960892986304270, -0.954946055208360620, -0.954931215043052010, -0.954916372490415280, -0.954901527550487410, -0.954886680223305920, -0.954871830508907780, +-0.954856978407329970, -0.954842123918609790, -0.954827267042784310, -0.954812407779890630, -0.954797546129966030, -0.954782682093047400, -0.954767815669172240, -0.954752946858377080, +-0.954738075660700010, -0.954723202076177670, -0.954708326104847350, -0.954693447746746140, -0.954678567001911120, -0.954663683870379920, -0.954648798352189520, -0.954633910447377110, +-0.954619020155979880, -0.954604127478035140, -0.954589232413580070, -0.954574334962651980, -0.954559435125288070, -0.954544532901525520, -0.954529628291401310, -0.954514721294953410, +-0.954499811912218550, -0.954484900143234280, -0.954469985988037780, -0.954455069446666250, -0.954440150519156870, -0.954425229205547290, -0.954410305505874690, -0.954395379420176270, +-0.954380450948489440, -0.954365520090851520, -0.954350586847299790, -0.954335651217871560, -0.954320713202604140, -0.954305772801534720, -0.954290830014701160, -0.954275884842140540, +-0.954260937283890160, -0.954245987339987560, -0.954231035010469800, -0.954216080295374300, -0.954201123194738820, -0.954186163708600650, -0.954171201836997000, -0.954156237579965260, +-0.954141270937542970, -0.954126301909767550, -0.954111330496676400, -0.954096356698306840, -0.954081380514696150, -0.954066401945882330, -0.954051420991902430, -0.954036437652794000, +-0.954021451928594440, -0.954006463819341400, -0.953991473325071840, -0.953976480445823840, -0.953961485181634590, -0.953946487532541740, -0.953931487498582590, -0.953916485079794760, +-0.953901480276215690, -0.953886473087882990, -0.953871463514833980, -0.953856451557106410, -0.953841437214737460, -0.953826420487765110, -0.953811401376226780, -0.953796379880159970, +-0.953781355999602120, -0.953766329734590630, -0.953751301085163590, -0.953736270051358300, -0.953721236633212400, -0.953706200830763410, -0.953691162644048850, -0.953676122073106370, +-0.953661079117973600, -0.953646033778688170, -0.953630986055287620, -0.953615935947809360, -0.953600883456291460, -0.953585828580771460, -0.953570771321286870, -0.953555711677875340, +-0.953540649650574500, -0.953525585239421770, -0.953510518444455340, -0.953495449265712610, -0.953480377703231240, -0.953465303757048970, -0.953450227427203530, -0.953435148713732360, +-0.953420067616673420, -0.953404984136064230, -0.953389898271942430, -0.953374810024346100, -0.953359719393312650, -0.953344626378880070, -0.953329530981085750, -0.953314433199967670, +-0.953299333035563360, -0.953284230487910780, -0.953269125557047790, -0.953254018243011920, -0.953238908545841030, -0.953223796465572870, -0.953208682002245180, -0.953193565155895820, +-0.953178445926562530, -0.953163324314282860, -0.953148200319095080, -0.953133073941036860, -0.953117945180146030, -0.953102814036460240, -0.953087680510017470, -0.953072544600855220, +-0.953057406309011810, -0.953042265634524990, -0.953027122577432380, -0.953011977137772080, -0.952996829315581830, -0.952981679110899370, -0.952966526523762900, -0.952951371554210060, +-0.952936214202278700, -0.952921054468006570, -0.952905892351432190, -0.952890727852592880, -0.952875560971526920, -0.952860391708271970, -0.952845220062865870, -0.952830046035346930, +-0.952814869625752790, -0.952799690834121530, -0.952784509660491110, -0.952769326104899390, -0.952754140167384360, -0.952738951847983960, -0.952723761146736180, -0.952708568063678980, +-0.952693372598850120, -0.952678174752288110, -0.952662974524030590, -0.952647771914115650, -0.952632566922581360, -0.952617359549465580, -0.952602149794806170, -0.952586937658641660, +-0.952571723141009800, -0.952556506241948650, -0.952541286961496200, -0.952526065299690530, -0.952510841256569710, -0.952495614832171710, -0.952480386026534840, -0.952465154839696630, +-0.952449921271695810, -0.952434685322570140, -0.952419446992357810, -0.952404206281096900, -0.952388963188825490, -0.952373717715581320, -0.952358469861403160, -0.952343219626328840, +-0.952327967010396460, -0.952312712013644200, -0.952297454636110040, -0.952282194877832390, -0.952266932738849100, -0.952251668219198600, -0.952236401318918620, -0.952221132038047920, +-0.952205860376624360, -0.952190586334686230, -0.952175309912271620, -0.952160031109418600, -0.952144749926165380, -0.952129466362550470, -0.952114180418611960, -0.952098892094387920, +-0.952083601389916770, -0.952068308305236480, -0.952053012840385460, -0.952037714995402020, -0.952022414770324230, -0.952007112165190290, -0.951991807180038400, -0.951976499814907280, +-0.951961190069834930, -0.951945877944859520, -0.951930563440019470, -0.951915246555352650, -0.951899927290898120, -0.951884605646693750, -0.951869281622777730, -0.951853955219188700, +-0.951838626435964620, -0.951823295273144020, -0.951807961730765210, -0.951792625808866480, -0.951777287507486250, -0.951761946826662490, -0.951746603766434050, -0.951731258326839250, +-0.951715910507916150, -0.951700560309703400, -0.951685207732239190, -0.951669852775561710, -0.951654495439709810, -0.951639135724721810, -0.951623773630635880, -0.951608409157490450, +-0.951593042305324150, -0.951577673074175070, -0.951562301464081940, -0.951546927475083070, -0.951531551107216540, -0.951516172360521440, -0.951500791235035840, -0.951485407730798370, +-0.951470021847847240, -0.951454633586221180, -0.951439242945958160, -0.951423849927097390, -0.951408454529677040, -0.951393056753735420, -0.951377656599311280, -0.951362254066442930, +-0.951346849155168980, -0.951331441865527870, -0.951316032197558230, -0.951300620151298130, -0.951285205726786880, -0.951269788924062440, -0.951254369743163690, -0.951238948184128910, +-0.951223524246996850, -0.951208097931805610, -0.951192669238594470, -0.951177238167401630, -0.951161804718265720, -0.951146368891225280, -0.951130930686318930, -0.951115490103585310, +-0.951100047143062840, -0.951084601804790370, -0.951069154088806320, -0.951053703995149100, -0.951038251523857900, -0.951022796674971140, -0.951007339448527330, -0.950991879844565240, +-0.950976417863123040, -0.950960953504240260, -0.950945486767954980, -0.950930017654305960, -0.950914546163331930, -0.950899072295071530, -0.950883596049563410, -0.950868117426846400, +-0.950852636426959050, -0.950837153049940100, -0.950821667295827950, -0.950806179164662040, -0.950790688656480530, -0.950775195771322410, -0.950759700509226200, -0.950744202870230870, +-0.950728702854374610, -0.950713200461696940, -0.950697695692236280, -0.950682188546031370, -0.950666679023121080, -0.950651167123543920, -0.950635652847338970, -0.950620136194544880, +-0.950604617165200390, -0.950589095759344140, -0.950573571977015310, -0.950558045818252650, -0.950542517283094910, -0.950526986371580840, -0.950511453083749290, -0.950495917419638790, +-0.950480379379288860, -0.950464838962737920, -0.950449296170024830, -0.950433751001188650, -0.950418203456268040, -0.950402653535301840, -0.950387101238329040, -0.950371546565388580, +-0.950355989516518900, -0.950340430091759500, -0.950324868291149040, -0.950309304114726470, -0.950293737562530550, -0.950278168634600350, -0.950262597330974400, -0.950247023651692340, +-0.950231447596792680, -0.950215869166314290, -0.950200288360296350, -0.950184705178777620, -0.950169119621797180, -0.950153531689393870, -0.950137941381606790, -0.950122348698474890, +-0.950106753640036830, -0.950091156206332110, -0.950075556397399490, -0.950059954213278050, -0.950044349654006640, -0.950028742719624120, -0.950013133410170020, -0.949997521725683190, +-0.949981907666202390, -0.949966291231766900, -0.949950672422415710, -0.949935051238187780, -0.949919427679122300, -0.949903801745258130, -0.949888173436634560, -0.949872542753290250, +-0.949856909695264820, -0.949841274262597120, -0.949825636455326360, -0.949809996273491390, -0.949794353717131390, -0.949778708786285340, -0.949763061480992770, -0.949747411801292520, +-0.949731759747223680, -0.949716105318825550, -0.949700448516137110, -0.949684789339197530, -0.949669127788046020, -0.949653463862721650, -0.949637797563263390, -0.949622128889710870, +-0.949606457842103070, -0.949590784420479170, -0.949575108624878150, -0.949559430455339530, -0.949543749911901940, -0.949528066994605350, -0.949512381703488510, -0.949496694038590720, +-0.949481003999951170, -0.949465311587609160, -0.949449616801603890, -0.949433919641974540, -0.949418220108760420, -0.949402518202000500, -0.949386813921734520, -0.949371107268001560, +-0.949355398240840700, -0.949339686840291460, -0.949323973066392930, -0.949308256919184300, -0.949292538398705200, -0.949276817504994820, -0.949261094238092350, -0.949245368598037210, +-0.949229640584868580, -0.949213910198625890, -0.949198177439348310, -0.949182442307075380, -0.949166704801846390, -0.949150964923700320, -0.949135222672677140, -0.949119478048815910, +-0.949103731052155950, -0.949087981682736670, -0.949072229940597150, -0.949056475825777350, -0.949040719338316240, -0.949024960478253470, -0.949009199245628320, -0.948993435640480110, +-0.948977669662848360, -0.948961901312772360, -0.948946130590291650, -0.948930357495445630, -0.948914582028273390, -0.948898804188815000, -0.948883023977109660, -0.948867241393196670, +-0.948851456437115550, -0.948835669108905600, -0.948819879408606790, -0.948804087336258210, -0.948788292891899370, -0.948772496075569900, -0.948756696887309130, -0.948740895327156660, +-0.948725091395151930, -0.948709285091334450, -0.948693476415743750, -0.948677665368419130, -0.948661851949400560, -0.948646036158727450, -0.948630217996439100, -0.948614397462575360, +-0.948598574557175560, -0.948582749280279080, -0.948566921631925910, -0.948551091612155560, -0.948535259221007450, -0.948519424458521110, -0.948503587324736270, -0.948487747819692470, +-0.948471905943429340, -0.948456061695986400, -0.948440215077403060, -0.948424366087719410, -0.948408514726974850, -0.948392660995209020, -0.948376804892461570, -0.948360946418772110, +-0.948345085574179960, -0.948329222358725300, -0.948313356772447660, -0.948297488815386670, -0.948281618487581970, -0.948265745789073190, -0.948249870719899970, -0.948233993280102160, +-0.948218113469719400, -0.948202231288791330, -0.948186346737357360, -0.948170459815457780, -0.948154570523132120, -0.948138678860420030, -0.948122784827361230, -0.948106888423995150, +-0.948090989650362090, -0.948075088506501680, -0.948059184992453450, -0.948043279108257360, -0.948027370853953060, -0.948011460229580270, -0.947995547235178760, -0.947979631870788490, +-0.947963714136449200, -0.947947794032200200, -0.947931871558082120, -0.947915946714134260, -0.947900019500396600, -0.947884089916908870, -0.947868157963710600, -0.947852223640842210, +-0.947836286948343320, -0.947820347886253690, -0.947804406454613280, -0.947788462653461730, -0.947772516482839110, -0.947756567942785070, -0.947740617033339780, -0.947724663754542780, +-0.947708708106433930, -0.947692750089053630, -0.947676789702441400, -0.947660826946637220, -0.947644861821680950, -0.947628894327612550, -0.947612924464471540, -0.947596952232298670, +-0.947580977631133250, -0.947565000661015460, -0.947549021321985150, -0.947533039614082420, -0.947517055537346890, -0.947501069091818860, -0.947485080277538080, -0.947469089094544410, +-0.947453095542878150, -0.947437099622579270, -0.947421101333687620, -0.947405100676243170, -0.947389097650286120, -0.947373092255855860, -0.947357084492993270, -0.947341074361737870, +-0.947325061862129840, -0.947309046994209150, -0.947293029758015880, -0.947277010153590000, -0.947260988180971600, -0.947244963840200740, -0.947228937131317170, -0.947212908054361540, +-0.947196876609373680, -0.947180842796393590, -0.947164806615461320, -0.947148768066617190, -0.947132727149900710, -0.947116683865352860, -0.947100638213013160, -0.947084590192921900, +-0.947068539805119180, -0.947052487049645060, -0.947036431926539860, -0.947020374435843420, -0.947004314577596150, -0.946988252351838030, -0.946972187758609030, -0.946956120797949890, +-0.946940051469900350, -0.946923979774500710, -0.946907905711791180, -0.946891829281811590, -0.946875750484602710, -0.946859669320204380, -0.946843585788656910, -0.946827499890000480, +-0.946811411624275400, -0.946795320991521640, -0.946779227991779710, -0.946763132625089600, -0.946747034891491700, -0.946730934791025990, -0.946714832323733100, -0.946698727489653220, +-0.946682620288826550, -0.946666510721293260, -0.946650398787093670, -0.946634284486267850, -0.946618167818856660, -0.946602048784899950, -0.946585927384438140, -0.946569803617511530, +-0.946553677484160420, -0.946537548984425100, -0.946521418118345890, -0.946505284885963190, -0.946489149287316980, -0.946473011322448100, -0.946456870991396860, -0.946440728294203340, +-0.946424583230907950, -0.946408435801551210, -0.946392286006172980, -0.946376133844814340, -0.946359979317515480, -0.946343822424316580, -0.946327663165258180, -0.946311501540380570, +-0.946295337549724170, -0.946279171193329490, -0.946263002471236850, -0.946246831383486420, -0.946230657930119290, -0.946214482111175430, -0.946198303926695350, -0.946182123376719590, +-0.946165940461288430, -0.946149755180442200, -0.946133567534221840, -0.946117377522667560, -0.946101185145819870, -0.946084990403719180, -0.946068793296406030, -0.946052593823920820, +-0.946036391986304180, -0.946020187783596640, -0.946003981215838510, -0.945987772283070290, -0.945971560985332750, -0.945955347322666400, -0.945939131295111760, -0.945922912902709130, +-0.945906692145499050, -0.945890469023522470, -0.945874243536819700, -0.945858015685431370, -0.945841785469398010, -0.945825552888760130, -0.945809317943558490, -0.945793080633833380, +-0.945776840959625660, -0.945760598920975860, -0.945744354517924270, -0.945728107750512080, -0.945711858618779600, -0.945695607122767460, -0.945679353262516290, -0.945663097038066840, +-0.945646838449459180, -0.945630577496734850, -0.945614314179934020, -0.945598048499097450, -0.945581780454265770, -0.945565510045479620, -0.945549237272779730, -0.945532962136206630, +-0.945516684635801190, -0.945500404771603800, -0.945484122543655660, -0.945467837951997180, -0.945451550996669110, -0.945435261677712190, -0.945418969995167170, -0.945402675949074340, +-0.945386379539475130, -0.945370080766409940, -0.945353779629919620, -0.945337476130044820, -0.945321170266826380, -0.945304862040304950, -0.945288551450521370, -0.945272238497516400, +-0.945255923181330560, -0.945239605502005250, -0.945223285459580900, -0.945206963054098240, -0.945190638285598350, -0.945174311154121760, -0.945157981659709100, -0.945141649802401780, +-0.945125315582240330, -0.945108978999265600, -0.945092640053518450, -0.945076298745039730, -0.945059955073870190, -0.945043609040050800, -0.945027260643622300, -0.945010909884625770, +-0.944994556763101620, -0.944978201279091380, -0.944961843432635670, -0.944945483223775360, -0.944929120652551300, -0.944912755719004130, -0.944896388423175360, -0.944880018765105630, +-0.944863646744835920, -0.944847272362406950, -0.944830895617859930, -0.944814516511235600, -0.944798135042575040, -0.944781751211919100, -0.944765365019308860, -0.944748976464784840, +-0.944732585548388680, -0.944716192270161010, -0.944699796630142920, -0.944683398628375360, -0.944666998264899190, -0.944650595539755390, -0.944634190452985250, -0.944617783004629730, +-0.944601373194729700, -0.944584961023326340, -0.944568546490460400, -0.944552129596173300, -0.944535710340505760, -0.944519288723498880, -0.944502864745193630, -0.944486438405631400, +-0.944470009704853180, -0.944453578642899800, -0.944437145219812590, -0.944420709435632500, -0.944404271290400280, -0.944387830784157670, -0.944371387916945530, -0.944354942688804930, +-0.944338495099776960, -0.944322045149902810, -0.944305592839223440, -0.944289138167780150, -0.944272681135614020, -0.944256221742765910, -0.944239759989277450, -0.944223295875189720, +-0.944206829400543680, -0.944190360565380530, -0.944173889369741560, -0.944157415813667520, -0.944140939897200270, -0.944124461620380550, -0.944107980983249770, -0.944091497985849130, +-0.944075012628219580, -0.944058524910402650, -0.944042034832439310, -0.944025542394370860, -0.944009047596238600, -0.943992550438083500, -0.943976050919947180, -0.943959549041870850, +-0.943943044803895570, -0.943926538206062760, -0.943910029248413160, -0.943893517930988970, -0.943877004253830810, -0.943860488216980320, -0.943843969820478470, -0.943827449064366770, +-0.943810925948686430, -0.943794400473478730, -0.943777872638785100, -0.943761342444646710, -0.943744809891104650, -0.943728274978201000, -0.943711737705976610, -0.943695198074472770, +-0.943678656083731030, -0.943662111733792660, -0.943645565024698650, -0.943629015956491070, -0.943612464529210990, -0.943595910742899720, -0.943579354597598670, -0.943562796093349140, +-0.943546235230192760, -0.943529672008170730, -0.943513106427324550, -0.943496538487695210, -0.943479968189325000, -0.943463395532254670, -0.943446820516525950, -0.943430243142180270, +-0.943413663409258810, -0.943397081317802980, -0.943380496867854750, -0.943363910059455300, -0.943347320892646060, -0.943330729367468420, -0.943314135483964030, -0.943297539242174410, +-0.943280940642140740, -0.943264339683904880, -0.943247736367507810, -0.943231130692991690, -0.943214522660397740, -0.943197912269767570, -0.943181299521142490, -0.943164684414564250, +-0.943148066950073920, -0.943131447127713800, -0.943114824947525080, -0.943098200409549170, -0.943081573513827930, -0.943064944260402660, -0.943048312649314990, -0.943031678680606560, +-0.943015042354318990, -0.942998403670493810, -0.942981762629172330, -0.942965119230396720, -0.942948473474208290, -0.942931825360648680, -0.942915174889759510, -0.942898522061582090, +-0.942881866876158710, -0.942865209333530680, -0.942848549433739520, -0.942831887176827090, -0.942815222562834900, -0.942798555591804700, -0.942781886263778010, -0.942765214578796700, +-0.942748540536902270, -0.942731864138136260, -0.942715185382540950, -0.942698504270157560, -0.942681820801027910, -0.942665134975193770, -0.942648446792696770, -0.942631756253578310, +-0.942615063357880810, -0.942598368105645680, -0.942581670496914550, -0.942564970531729380, -0.942548268210131600, -0.942531563532163270, -0.942514856497866040, -0.942498147107281640, +-0.942481435360451590, -0.942464721257418200, -0.942448004798222990, -0.942431285982907820, -0.942414564811514420, -0.942397841284084660, -0.942381115400659940, -0.942364387161282790, +-0.942347656565994620, -0.942330923614837280, -0.942314188307852740, -0.942297450645082630, -0.942280710626568930, -0.942263968252353480, -0.942247223522478030, -0.942230476436984320, +-0.942213726995914660, -0.942196975199310670, -0.942180221047214330, -0.942163464539667260, -0.942146705676711660, -0.942129944458389050, -0.942113180884741830, -0.942096414955811530, +-0.942079646671640350, -0.942062876032270010, -0.942046103037742500, -0.942029327688099660, -0.942012549983383570, -0.941995769923636090, -0.941978987508899190, -0.941962202739214490, +-0.941945415614624640, -0.941928626135171140, -0.941911834300896200, -0.941895040111841660, -0.941878243568049170, -0.941861444669561340, -0.941844643416419940, -0.941827839808666910, +-0.941811033846344350, -0.941794225529494210, -0.941777414858158470, -0.941760601832379200, -0.941743786452198360, -0.941726968717658150, -0.941710148628800090, -0.941693326185667030, +-0.941676501388300720, -0.941659674236743130, -0.941642844731036320, -0.941626012871222380, -0.941609178657343170, -0.941592342089441310, -0.941575503167558560, -0.941558661891736980, +-0.941541818262018880, -0.941524972278446230, -0.941508123941060980, -0.941491273249905560, -0.941474420205022030, -0.941457564806452040, -0.941440707054238430, -0.941423846948423070, +-0.941406984489048140, -0.941390119676155710, -0.941373252509787980, -0.941356382989986810, -0.941339511116794920, -0.941322636890254420, -0.941305760310407250, -0.941288881377295610, +-0.941272000090961790, -0.941255116451447990, -0.941238230458796400, -0.941221342113049310, -0.941204451414248470, -0.941187558362436840, -0.941170662957656280, -0.941153765199949090, +-0.941136865089357570, -0.941119962625923790, -0.941103057809689840, -0.941086150640698450, -0.941069241118991820, -0.941052329244612020, -0.941035415017601350, -0.941018498438002230, +-0.941001579505856830, -0.940984658221207470, -0.940967734584096550, -0.940950808594566150, -0.940933880252658560, -0.940916949558416540, -0.940900016511882040, -0.940883081113097600, +-0.940866143362105390, -0.940849203258947610, -0.940832260803667110, -0.940815315996305860, -0.940798368836906370, -0.940781419325511070, -0.940764467462162140, -0.940747513246901980, +-0.940730556679773120, -0.940713597760817870, -0.940696636490078510, -0.940679672867597350, -0.940662706893417360, -0.940645738567580490, -0.940628767890129390, -0.940611794861106240, +-0.940594819480553680, -0.940577841748513780, -0.940560861665029610, -0.940543879230143150, -0.940526894443897140, -0.940509907306333770, -0.940492917817495780, -0.940475925977425350, +-0.940458931786165240, -0.940441935243757630, -0.940424936350245040, -0.940407935105670330, -0.940390931510075800, -0.940373925563503970, -0.940356917265997350, -0.940339906617598360, +-0.940322893618349310, -0.940305878268293370, -0.940288860567472740, -0.940271840515929940, -0.940254818113707480, -0.940237793360848010, -0.940220766257394040, -0.940203736803388200, +-0.940186704998873020, -0.940169670843890800, -0.940152634338484620, -0.940135595482696980, -0.940118554276570210, -0.940101510720147140, -0.940084464813470300, -0.940067416556581990, +-0.940050365949525400, -0.940033312992342940, -0.940016257685077130, -0.939999200027770710, -0.939982140020466320, -0.939965077663206580, -0.939948012956034140, -0.939930945898991620, +-0.939913876492121770, -0.939896804735467000, -0.939879730629070380, -0.939862654172974540, -0.939845575367222020, -0.939828494211855550, -0.939811410706917540, -0.939794324852451400, +-0.939777236648499330, -0.939760146095104280, -0.939743053192308770, -0.939725957940155680, -0.939708860338687610, -0.939691760387947550, -0.939674658087977900, -0.939657553438821740, +-0.939640446440521360, -0.939623337093120180, -0.939606225396660610, -0.939589111351185500, -0.939571994956737600, -0.939554876213359760, -0.939537755121094390, -0.939520631679985010, +-0.939503505890073920, -0.939486377751404200, -0.939469247264018370, -0.939452114427959620, -0.939434979243270460, -0.939417841709993870, -0.939400701828172700, -0.939383559597849470, +-0.939366415019067590, -0.939349268091869690, -0.939332118816298630, -0.939314967192397270, -0.939297813220208560, -0.939280656899774910, -0.939263498231139970, -0.939246337214346360, +-0.939229173849436830, -0.939212008136454330, -0.939194840075441850, -0.939177669666442340, -0.939160496909498540, -0.939143321804653540, -0.939126144351949970, -0.939108964551431340, +-0.939091782403140280, -0.939074597907119780, -0.939057411063412670, -0.939040221872062150, -0.939023030333110740, -0.939005836446602070, -0.938988640212578880, -0.938971441631083930, +-0.938954240702160490, -0.938937037425851440, -0.938919831802199730, -0.938902623831248560, -0.938885413513040780, -0.938868200847619460, -0.938850985835027240, -0.938833768475307970, +-0.938816548768504290, -0.938799326714659150, -0.938782102313815760, -0.938764875566016730, -0.938747646471305930, -0.938730415029725980, -0.938713181241319970, -0.938695945106130970, +-0.938678706624202160, -0.938661465795576630, -0.938644222620297340, -0.938626977098407590, -0.938609729229950340, -0.938592479014968450, -0.938575226453505660, -0.938557971545604830, +-0.938540714291309030, -0.938523454690661560, -0.938506192743705060, -0.938488928450483370, -0.938471661811039360, -0.938454392825416210, -0.938437121493657100, -0.938419847815805230, +-0.938402571791903670, -0.938385293421995730, -0.938368012706124470, -0.938350729644333300, -0.938333444236664870, -0.938316156483163240, -0.938298866383871170, -0.938281573938831940, +-0.938264279148088740, -0.938246982011684880, -0.938229682529663320, -0.938212380702067810, -0.938195076528941300, -0.938177770010327210, -0.938160461146268610, -0.938143149936808810, +-0.938125836381991210, -0.938108520481859000, -0.938091202236455590, -0.938073881645823730, -0.938056558710007480, -0.938039233429049930, -0.938021905802994160, -0.938004575831883790, +-0.937987243515761900, -0.937969908854671570, -0.937952571848656770, -0.937935232497760560, -0.937917890802026260, -0.937900546761497260, -0.937883200376216970, -0.937865851646228600, +-0.937848500571575540, -0.937831147152301310, -0.937813791388448890, -0.937796433280062240, -0.937779072827184530, -0.937761710029859200, -0.937744344888129520, -0.937726977402039030, +-0.937709607571630800, -0.937692235396948790, -0.937674860878036310, -0.937657484014936650, -0.937640104807693220, -0.937622723256349540, -0.937605339360949030, -0.937587953121535200, +-0.937570564538151460, -0.937553173610841340, -0.937535780339648020, -0.937518384724615460, -0.937500986765787080, -0.937483586463206060, -0.937466183816916150, -0.937448778826960540, +-0.937431371493383180, -0.937413961816227490, -0.937396549795536880, -0.937379135431354870, -0.937361718723724980, -0.937344299672690840, -0.937326878278295970, -0.937309454540583900, +-0.937292028459598140, -0.937274600035381990, -0.937257169267979750, -0.937239736157434500, -0.937222300703789980, -0.937204862907089600, -0.937187422767377210, -0.937169980284695890, +-0.937152535459089830, -0.937135088290602550, -0.937117638779277560, -0.937100186925158400, -0.937082732728288790, -0.937065276188712380, -0.937047817306472800, -0.937030356081613560, +-0.937012892514178300, -0.936995426604210980, -0.936977958351755120, -0.936960487756854370, -0.936943014819552440, -0.936925539539892880, -0.936908061917919310, -0.936890581953675810, +-0.936873099647205780, -0.936855614998553080, -0.936838128007761340, -0.936820638674874310, -0.936803146999935720, -0.936785652982989100, -0.936768156624078530, -0.936750657923247190, +-0.936733156880539490, -0.936715653495998830, -0.936698147769669200, -0.936680639701594100, -0.936663129291817390, -0.936645616540382590, -0.936628101447333990, -0.936610584012715240, +-0.936593064236569960, -0.936575542118942010, -0.936558017659875230, -0.936540490859413490, -0.936522961717600410, -0.936505430234479960, -0.936487896410096000, -0.936470360244491930, +-0.936452821737712270, -0.936435280889800550, -0.936417737700800610, -0.936400192170756320, -0.936382644299711300, -0.936365094087709960, -0.936347541534795820, -0.936329986641012860, +-0.936312429406405020, -0.936294869831016060, -0.936277307914889830, -0.936259743658070410, -0.936242177060601640, -0.936224608122527390, -0.936207036843891390, -0.936189463224738060, +-0.936171887265111020, -0.936154308965054360, -0.936136728324611810, -0.936119145343827560, -0.936101560022745030, -0.936083972361409060, -0.936066382359863060, -0.936048790018151110, +-0.936031195336317180, -0.936013598314405230, -0.935995998952459330, -0.935978397250523450, -0.935960793208641560, -0.935943186826857290, -0.935925578105215480, -0.935907967043759670, +-0.935890353642533920, -0.935872737901582430, -0.935855119820948930, -0.935837499400677400, -0.935819876640812450, -0.935802251541397730, -0.935784624102477420, -0.935766994324095600, +-0.935749362206296230, -0.935731727749123500, -0.935714090952621370, -0.935696451816834140, -0.935678810341805330, -0.935661166527579910, -0.935643520374201510, -0.935625871881714310, +-0.935608221050162500, -0.935590567879590160, -0.935572912370041030, -0.935555254521559850, -0.935537594334190590, -0.935519931807977430, -0.935502266942964340, -0.935484599739195620, +-0.935466930196715450, -0.935449258315567910, -0.935431584095797190, -0.935413907537447580, -0.935396228640562820, -0.935378547405187890, -0.935360863831366520, -0.935343177919143010, +-0.935325489668561550, -0.935307799079665990, -0.935290106152501300, -0.935272410887111440, -0.935254713283540480, -0.935237013341832730, -0.935219311062032380, -0.935201606444183820, +-0.935183899488331250, -0.935166190194518960, -0.935148478562791150, -0.935130764593191780, -0.935113048285765910, -0.935095329640557420, -0.935077608657610470, -0.935059885336969600, +-0.935042159678679100, -0.935024431682782710, -0.935006701349325730, -0.934988968678351910, -0.934971233669905640, -0.934953496324031350, -0.934935756640773220, -0.934918014620175760, +-0.934900270262283280, -0.934882523567140190, -0.934864774534790330, -0.934847023165279010, -0.934829269458649970, -0.934811513414947840, -0.934793755034216910, -0.934775994316501600, +-0.934758231261845980, -0.934740465870295130, -0.934722698141893130, -0.934704928076684370, -0.934687155674713280, -0.934669380936024250, -0.934651603860661820, -0.934633824448670380, +-0.934616042700094350, -0.934598258614977920, -0.934580472193366150, -0.934562683435303130, -0.934544892340833490, -0.934527098910001630, -0.934509303142852080, -0.934491505039428790, +-0.934473704599777190, -0.934455901823941230, -0.934438096711965650, -0.934420289263894750, -0.934402479479773060, -0.934384667359645200, -0.934366852903555810, -0.934349036111549180, +-0.934331216983669940, -0.934313395519962290, -0.934295571720471620, -0.934277745585241900, -0.934259917114317880, -0.934242086307744080, -0.934224253165564680, -0.934206417687824970, +-0.934188579874569270, -0.934170739725842080, -0.934152897241688150, -0.934135052422151890, -0.934117205267277930, -0.934099355777111010, -0.934081503951695760, -0.934063649791076700, +-0.934045793295298240, -0.934027934464405570, -0.934010073298443100, -0.933992209797455340, -0.933974343961487150, -0.933956475790583050, -0.933938605284787560, -0.933920732444145750, +-0.933902857268702150, -0.933884979758501490, -0.933867099913588290, -0.933849217734007310, -0.933831333219803380, -0.933813446371021040, -0.933795557187705130, -0.933777665669899950, +-0.933759771817651020, -0.933741875631002530, -0.933723977109999440, -0.933706076254686380, -0.933688173065108210, -0.933670267541309220, -0.933652359683334820, -0.933634449491229650, +-0.933616536965038320, -0.933598622104805600, -0.933580704910576320, -0.933562785382395340, -0.933544863520307300, -0.933526939324357260, -0.933509012794589420, -0.933491083931049400, +-0.933473152733781620, -0.933455219202831030, -0.933437283338242390, -0.933419345140060530, -0.933401404608329990, -0.933383461743096280, -0.933365516544403920, -0.933347569012297650, +-0.933329619146822550, -0.933311666948023480, -0.933293712415945160, -0.933275755550632580, -0.933257796352130580, -0.933239834820484120, -0.933221870955737720, -0.933203904757937020, +-0.933185936227126420, -0.933167965363351120, -0.933149992166655840, -0.933132016637085340, -0.933114038774685020, -0.933096058579499730, -0.933078076051574110, -0.933060091190953460, +-0.933042103997682500, -0.933024114471806330, -0.933006122613369900, -0.932988128422418070, -0.932970131898996020, -0.932952133043148170, -0.932934131854920470, -0.932916128334357330, +-0.932898122481503940, -0.932880114296405160, -0.932862103779106170, -0.932844090929651590, -0.932826075748087180, -0.932808058234457450, -0.932790038388807590, -0.932772016211182660, +-0.932753991701627760, -0.932735964860187840, -0.932717935686907970, -0.932699904181833240, -0.932681870345008490, -0.932663834176479360, -0.932645795676290690, -0.932627754844487460, +-0.932609711681114840, -0.932591666186218030, -0.932573618359841650, -0.932555568202031560, -0.932537515712832610, -0.932519460892289760, -0.932501403740448320, -0.932483344257353460, +-0.932465282443050160, -0.932447218297583590, -0.932429151820999060, -0.932411083013341300, -0.932393011874656170, -0.932374938404988420, -0.932356862604383440, -0.932338784472886320, +-0.932320704010542120, -0.932302621217395930, -0.932284536093493490, -0.932266448638879750, -0.932248358853599800, -0.932230266737699040, -0.932212172291222550, -0.932194075514215630, +-0.932175976406723560, -0.932157874968791540, -0.932139771200464760, -0.932121665101788290, -0.932103556672807980, -0.932085445913568790, -0.932067332824116020, -0.932049217404494870, +-0.932031099654750390, -0.932012979574928460, -0.931994857165074020, -0.931976732425232490, -0.931958605355449170, -0.931940475955769340, -0.931922344226238210, -0.931904210166901280, +-0.931886073777803860, -0.931867935058991240, -0.931849794010508490, -0.931831650632401480, -0.931813504924715490, -0.931795356887495600, -0.931777206520787330, -0.931759053824636090, +-0.931740898799086950, -0.931722741444185760, -0.931704581759977830, -0.931686419746508340, -0.931668255403822920, -0.931650088731966750, -0.931631919730985470, -0.931613748400924370, +-0.931595574741828860, -0.931577398753744010, -0.931559220436716130, -0.931541039790790060, -0.931522856816011550, -0.931504671512425770, -0.931486483880078380, -0.931468293919014420, +-0.931450101629280100, -0.931431907010920490, -0.931413710063981100, -0.931395510788507460, -0.931377309184544980, -0.931359105252139270, -0.931340898991335870, -0.931322690402180190, +-0.931304479484717400, -0.931286266238993800, -0.931268050665054470, -0.931249832762945040, -0.931231612532711030, -0.931213389974397950, -0.931195165088051110, -0.931176937873716690, +-0.931158708331439990, -0.931140476461266410, -0.931122242263241700, -0.931104005737411370, -0.931085766883821050, -0.931067525702516270, -0.931049282193542660, -0.931031036356945950, +-0.931012788192771220, -0.930994537701064880, -0.930976284881872120, -0.930958029735238780, -0.930939772261210270, -0.930921512459832120, -0.930903250331150400, -0.930884985875210620, +-0.930866719092058310, -0.930848449981739210, -0.930830178544299060, -0.930811904779783370, -0.930793628688238010, -0.930775350269708590, -0.930757069524240640, -0.930738786451879800, +-0.930720501052672340, -0.930702213326663590, -0.930683923273899370, -0.930665630894425220, -0.930647336188287100, -0.930629039155530300, -0.930610739796201240, -0.930592438110345200, +-0.930574134098008270, -0.930555827759235840, -0.930537519094073890, -0.930519208102568160, -0.930500894784764390, -0.930482579140708420, -0.930464261170445670, -0.930445940874022550, +-0.930427618251484570, -0.930409293302877580, -0.930390966028247330, -0.930372636427639790, -0.930354304501100240, -0.930335970248675200, -0.930317633670410320, -0.930299294766351310, +-0.930280953536544050, -0.930262609981034380, -0.930244264099868270, -0.930225915893091450, -0.930207565360749890, -0.930189212502889110, -0.930170857319555510, -0.930152499810794840, +-0.930134139976652950, -0.930115777817175690, -0.930097413332408920, -0.930079046522398370, -0.930060677387190450, -0.930042305926830900, -0.930023932141365580, -0.930005556030840450, +-0.929987177595301360, -0.929968796834794390, -0.929950413749365380, -0.929932028339060410, -0.929913640603925340, -0.929895250544005790, -0.929876858159348510, -0.929858463449999010, +-0.929840066416003360, -0.929821667057407650, -0.929803265374257390, -0.929784861366599210, -0.929766455034478970, -0.929748046377942620, -0.929729635397036120, -0.929711222091805460, +-0.929692806462296790, -0.929674388508556100, -0.929655968230629460, -0.929637545628562930, -0.929619120702402160, -0.929600693452193870, -0.929582263877983930, -0.929563831979818290, +-0.929545397757743140, -0.929526961211804450, -0.929508522342048060, -0.929490081148520610, -0.929471637631267940, -0.929453191790336250, -0.929434743625771610, -0.929416293137620090, +-0.929397840325927760, -0.929379385190740930, -0.929360927732105660, -0.929342467950067590, -0.929324005844673780, -0.929305541415969990, -0.929287074664002290, -0.929268605588816850, +-0.929250134190459990, -0.929231660468977430, -0.929213184424416140, -0.929194706056821750, -0.929176225366240670, -0.929157742352718970, -0.929139257016302960, -0.929120769357038800, +-0.929102279374972690, -0.929083787070150930, -0.929065292442619370, -0.929046795492424860, -0.929028296219613470, -0.929009794624231280, -0.928991290706324580, -0.928972784465939670, +-0.928954275903122410, -0.928935765017919860, -0.928917251810377880, -0.928898736280542760, -0.928880218428460800, -0.928861698254178300, -0.928843175757741560, -0.928824650939196860, +-0.928806123798590620, -0.928787594335968910, -0.928769062551378030, -0.928750528444864720, -0.928731992016475160, -0.928713453266255650, -0.928694912194252490, -0.928676368800511630, +-0.928657823085080270, -0.928639275048004360, -0.928620724689330210, -0.928602172009104220, -0.928583617007372910, -0.928565059684182460, -0.928546500039579390, -0.928527938073610000, +-0.928509373786320920, -0.928490807177758000, -0.928472238247968320, -0.928453666996998160, -0.928435093424893720, -0.928416517531701620, -0.928397939317467950, -0.928379358782239650, +-0.928360775926063030, -0.928342190748984500, -0.928323603251050340, -0.928305013432307310, -0.928286421292801700, -0.928267826832580020, -0.928249230051688800, -0.928230630950174550, +-0.928212029528083350, -0.928193425785462380, -0.928174819722357940, -0.928156211338816320, -0.928137600634884260, -0.928118987610608180, -0.928100372266034260, -0.928081754601209790, +-0.928063134616180950, -0.928044512310994160, -0.928025887685696160, -0.928007260740333460, -0.927988631474952700, -0.927969999889600160, -0.927951365984322820, -0.927932729759166630, +-0.927914091214178890, -0.927895450349406010, -0.927876807164894510, -0.927858161660690910, -0.927839513836841930, -0.927820863693393890, -0.927802211230394080, -0.927783556447888570, +-0.927764899345924320, -0.927746239924547740, -0.927727578183805580, -0.927708914123744450, -0.927690247744411110, -0.927671579045852070, -0.927652908028114180, -0.927634234691243620, +-0.927615559035287810, -0.927596881060293030, -0.927578200766306150, -0.927559518153373790, -0.927540833221542240, -0.927522145970858910, -0.927503456401370220, -0.927484764513123010, +-0.927466070306163790, -0.927447373780539430, -0.927428674936296550, -0.927409973773482110, -0.927391270292142630, -0.927372564492325080, -0.927353856374075750, -0.927335145937442040, +-0.927316433182470480, -0.927297718109207910, -0.927279000717700970, -0.927260281007996290, -0.927241558980141160, -0.927222834634182200, -0.927204107970166060, -0.927185378988139690, +-0.927166647688149940, -0.927147914070243550, -0.927129178134467270, -0.927110439880868160, -0.927091699309492870, -0.927072956420388120, -0.927054211213601210, -0.927035463689178770, +-0.927016713847167660, -0.926997961687614840, -0.926979207210567040, -0.926960450416070890, -0.926941691304174030, -0.926922929874922860, -0.926904166128364460, -0.926885400064545560, +-0.926866631683513240, -0.926847860985314240, -0.926829087969995640, -0.926810312637604270, -0.926791534988186890, -0.926772755021790910, -0.926753972738463050, -0.926735188138250400, +-0.926716401221199580, -0.926697611987357890, -0.926678820436771740, -0.926660026569488980, -0.926641230385556120, -0.926622431885020140, -0.926603631067928090, -0.926584827934326950, +-0.926566022484263780, -0.926547214717785560, -0.926528404634939350, -0.926509592235771670, -0.926490777520330380, -0.926471960488662210, -0.926453141140814120, -0.926434319476833190, +-0.926415495496766380, -0.926396669200660550, -0.926377840588563430, -0.926359009660521650, -0.926340176416582390, -0.926321340856792630, -0.926302502981199540, -0.926283662789850190, +-0.926264820282791670, -0.926245975460071150, -0.926227128321735590, -0.926208278867831970, -0.926189427098408010, -0.926170573013510470, -0.926151716613186400, -0.926132857897483120, +-0.926113996866447350, -0.926095133520126960, -0.926076267858568670, -0.926057399881819790, -0.926038529589927270, -0.926019656982938530, -0.926000782060900640, -0.925981904823860780, +-0.925963025271866140, -0.925944143404964000, -0.925925259223201120, -0.925906372726625460, -0.925887483915283860, -0.925868592789223510, -0.925849699348491710, -0.925830803593135630, +-0.925811905523202250, -0.925793005138739410, -0.925774102439794080, -0.925755197426413550, -0.925736290098645000, -0.925717380456535620, -0.925698468500132820, -0.925679554229483890, +-0.925660637644636130, -0.925641718745636390, -0.925622797532532630, -0.925603874005371920, -0.925584948164201560, -0.925566020009068850, -0.925547089540021070, -0.925528156757105200, +-0.925509221660369310, -0.925490284249860240, -0.925471344525625630, -0.925452402487712540, -0.925433458136168510, -0.925414511471040810, -0.925395562492376870, -0.925376611200223960, +-0.925357657594629180, -0.925338701675640700, -0.925319743443305360, -0.925300782897670700, -0.925281820038784120, -0.925262854866692910, -0.925243887381444250, -0.925224917583086230, +-0.925205945471666010, -0.925186971047230800, -0.925167994309828210, -0.925149015259505550, -0.925130033896310430, -0.925111050220290280, -0.925092064231492370, -0.925073075929964350, +-0.925054085315753390, -0.925035092388907470, -0.925016097149473860, -0.924997099597499980, -0.924978099733033350, -0.924959097556121160, -0.924940093066811580, -0.924921086265151680, +-0.924902077151189110, -0.924883065724971360, -0.924864051986545980, -0.924845035935960460, -0.924826017573262330, -0.924806996898499100, -0.924787973911718410, -0.924768948612967550, +-0.924749921002294470, -0.924730891079746710, -0.924711858845371770, -0.924692824299217060, -0.924673787441330330, -0.924654748271758860, -0.924635706790550850, -0.924616662997753470, +-0.924597616893414460, -0.924578568477581460, -0.924559517750302100, -0.924540464711623880, -0.924521409361594440, -0.924502351700261520, -0.924483291727672410, -0.924464229443875410, +-0.924445164848917810, -0.924426097942847250, -0.924407028725711570, -0.924387957197558170, -0.924368883358434700, -0.924349807208389220, -0.924330728747469240, -0.924311647975722520, +-0.924292564893196670, -0.924273479499939320, -0.924254391795998330, -0.924235301781421440, -0.924216209456256150, -0.924197114820550110, -0.924178017874351500, -0.924158918617707940, +-0.924139817050667060, -0.924120713173276710, -0.924101606985584520, -0.924082498487637900, -0.924063387679485480, -0.924044274561174550, -0.924025159132752960, -0.924006041394268450, +-0.923986921345768760, -0.923967798987301860, -0.923948674318915470, -0.923929547340657350, -0.923910418052575340, -0.923891286454717080, -0.923872152547130840, -0.923853016329864160, +-0.923833877802965000, -0.923814736966481200, -0.923795593820460170, -0.923776448364950430, -0.923757300599999720, -0.923738150525655670, -0.923718998141966230, -0.923699843448979370, +-0.923680686446742840, -0.923661527135304580, -0.923642365514712460, -0.923623201585014540, -0.923604035346258230, -0.923584866798492170, -0.923565695941763960, -0.923546522776121480, +-0.923527347301612680, -0.923508169518285630, -0.923488989426187620, -0.923469807025367630, -0.923450622315873050, -0.923431435297751960, -0.923412245971052310, -0.923393054335821970, +-0.923373860392109000, -0.923354664139961480, -0.923335465579427140, -0.923316264710553950, -0.923297061533390310, -0.923277856047984070, -0.923258648254383200, -0.923239438152635760, +-0.923220225742789610, -0.923201011024892600, -0.923181793998993470, -0.923162574665139850, -0.923143353023379690, -0.923124129073761180, -0.923104902816332400, -0.923085674251141410, +-0.923066443378236070, -0.923047210197664780, -0.923027974709475060, -0.923008736913715770, -0.922989496810434520, -0.922970254399679720, -0.922951009681499120, -0.922931762655941120, +-0.922912513323053240, -0.922893261682884550, -0.922874007735482670, -0.922854751480895690, -0.922835492919171880, -0.922816232050359340, -0.922796968874506240, -0.922777703391660760, +-0.922758435601870990, -0.922739165505185090, -0.922719893101650920, -0.922700618391317450, -0.922681341374232300, -0.922662062050443880, -0.922642780420000360, -0.922623496482949500, +-0.922604210239340250, -0.922584921689220460, -0.922565630832638320, -0.922546337669642110, -0.922527042200280150, -0.922507744424600480, -0.922488444342651540, -0.922469141954481490, +-0.922449837260138520, -0.922430530259670590, -0.922411220953126780, -0.922391909340554820, -0.922372595422003120, -0.922353279197519970, -0.922333960667153560, -0.922314639830951970, +-0.922295316688964140, -0.922275991241237940, -0.922256663487821760, -0.922237333428764020, -0.922218001064112890, -0.922198666393916680, -0.922179329418223890, -0.922159990137082830, +-0.922140648550541340, -0.922121304658648610, -0.922101958461452600, -0.922082609959001710, -0.922063259151344350, -0.922043906038528820, -0.922024550620603180, -0.922005192897616510, +-0.921985832869616770, -0.921966470536652480, -0.921947105898772050, -0.921927738956023870, -0.921908369708456350, -0.921888998156117910, -0.921869624299056940, -0.921850248137321530, +-0.921830869670960950, -0.921811488900023070, -0.921792105824556620, -0.921772720444609780, -0.921753332760231190, -0.921733942771468920, -0.921714550478372140, -0.921695155880988940, +-0.921675758979367930, -0.921656359773557420, -0.921636958263606140, -0.921617554449562390, -0.921598148331474690, -0.921578739909391760, -0.921559329183361920, -0.921539916153433340, +-0.921520500819655420, -0.921501083182076130, -0.921481663240744210, -0.921462240995708170, -0.921442816447016200, -0.921423389594717480, -0.921403960438860190, -0.921384528979493190, +-0.921365095216664760, -0.921345659150423550, -0.921326220780818270, -0.921306780107897460, -0.921287337131709630, -0.921267891852303510, -0.921248444269727180, -0.921228994384030280, +-0.921209542195260740, -0.921190087703467440, -0.921170630908698880, -0.921151171811003810, -0.921131710410430400, -0.921112246707028070, -0.921092780700845100, -0.921073312391930240, +-0.921053841780332010, -0.921034368866099240, -0.921014893649280570, -0.920995416129924640, -0.920975936308080170, -0.920956454183795570, -0.920936969757120030, -0.920917483028102170, +-0.920897993996790620, -0.920878502663234010, -0.920859009027481190, -0.920839513089580560, -0.920820014849581430, -0.920800514307532290, -0.920781011463481790, -0.920761506317478880, +-0.920741998869572090, -0.920722489119810360, -0.920702977068242450, -0.920683462714916970, -0.920663946059882670, -0.920644427103188720, -0.920624905844883660, -0.920605382285016430, +-0.920585856423635770, -0.920566328260790430, -0.920546797796528820, -0.920527265030900650, -0.920507729963954360, -0.920488192595738770, -0.920468652926302640, -0.920449110955694820, +-0.920429566683964250, -0.920410020111159800, -0.920390471237330310, -0.920370920062524630, -0.920351366586791290, -0.920331810810179900, -0.920312252732738980, -0.920292692354517490, +-0.920273129675564180, -0.920253564695927670, -0.920233997415657700, -0.920214427834802670, -0.920194855953411550, -0.920175281771533400, -0.920155705289216860, -0.920136126506511220, +-0.920116545423465220, -0.920096962040127810, -0.920077376356548070, -0.920057788372774520, -0.920038198088856780, -0.920018605504843600, -0.919999010620783930, -0.919979413436726730, +-0.919959813952720970, -0.919940212168815390, -0.919920608085059490, -0.919901001701502240, -0.919881393018192380, -0.919861782035178990, -0.919842168752511240, -0.919822553170238090, +-0.919802935288408510, -0.919783315107071560, -0.919763692626276000, -0.919744067846071540, -0.919724440766506950, -0.919704811387631270, -0.919685179709493590, -0.919665545732142880, +-0.919645909455627960, -0.919626270879998600, -0.919606630005303630, -0.919586986831592120, -0.919567341358913050, -0.919547693587315700, -0.919528043516849030, -0.919508391147562330, +-0.919488736479504580, -0.919469079512724720, -0.919449420247272390, -0.919429758683196650, -0.919410094820546480, -0.919390428659371040, -0.919370760199719530, -0.919351089441640790, +-0.919331416385184560, -0.919311741030399920, -0.919292063377335930, -0.919272383426041780, -0.919252701176566660, -0.919233016628959730, -0.919213329783270310, -0.919193640639547560, +-0.919173949197840680, -0.919154255458198620, -0.919134559420671240, -0.919114861085307490, -0.919095160452156560, -0.919075457521267740, -0.919055752292689990, -0.919036044766473160, +-0.919016334942666100, -0.918996622821318330, -0.918976908402479030, -0.918957191686197380, -0.918937472672522790, -0.918917751361504550, -0.918898027753191850, -0.918878301847634190, +-0.918858573644880330, -0.918838843144980430, -0.918819110347983470, -0.918799375253938620, -0.918779637862895400, -0.918759898174903110, -0.918740156190010590, -0.918720411908268140, +-0.918700665329724720, -0.918680916454429510, -0.918661165282432140, -0.918641411813781780, -0.918621656048527860, -0.918601897986719870, -0.918582137628407120, -0.918562374973638570, +-0.918542610022464620, -0.918522842774934010, -0.918503073231096370, -0.918483301391000980, -0.918463527254697380, -0.918443750822234620, -0.918423972093662780, -0.918404191069031040, +-0.918384407748388810, -0.918364622131785600, -0.918344834219270820, -0.918325044010893880, -0.918305251506704390, -0.918285456706751770, -0.918265659611085190, -0.918245860219754850, +-0.918226058532809700, -0.918206254550299580, -0.918186448272273690, -0.918166639698781760, -0.918146828829872860, -0.918127015665597180, -0.918107200206004110, -0.918087382451142850, +-0.918067562401063240, -0.918047740055814800, -0.918027915415446930, -0.918008088480009250, -0.917988259249551300, -0.917968427724122790, -0.917948593903772810, -0.917928757788551760, +-0.917908919378508830, -0.917889078673693510, -0.917869235674155570, -0.917849390379944170, -0.917829542791109620, -0.917809692907701200, -0.917789840729768550, -0.917769986257361390, +-0.917750129490529140, -0.917730270429321650, -0.917710409073788420, -0.917690545423979210, -0.917670679479943740, -0.917650811241731090, -0.917630940709391770, -0.917611067882975080, +-0.917591192762530760, -0.917571315348108430, -0.917551435639757940, -0.917531553637528360, -0.917511669341470330, -0.917491782751633010, -0.917471893868066380, -0.917452002690819950, +-0.917432109219943560, -0.917412213455486850, -0.917392315397499550, -0.917372415046031510, -0.917352512401132140, -0.917332607462851830, -0.917312700231239900, -0.917292790706346280, +-0.917272878888220730, -0.917252964776912980, -0.917233048372472440, -0.917213129674949610, -0.917193208684393910, -0.917173285400855300, -0.917153359824383400, -0.917133431955028170, +-0.917113501792839240, -0.917093569337866680, -0.917073634590160110, -0.917053697549769180, -0.917033758216744270, -0.917013816591135010, -0.916993872672991260, -0.916973926462362750, +-0.916953977959299450, -0.916934027163850860, -0.916914074076067620, -0.916894118695999130, -0.916874161023695340, -0.916854201059206120, -0.916834238802581410, -0.916814274253871190, +-0.916794307413125180, -0.916774338280393450, -0.916754366855725870, -0.916734393139172040, -0.916714417130782500, -0.916694438830606970, -0.916674458238695310, -0.916654475355097590, +-0.916634490179863310, -0.916614502713043120, -0.916594512954686640, -0.916574520904843930, -0.916554526563564950, -0.916534529930899570, -0.916514531006897950, -0.916494529791609950, +-0.916474526285085630, -0.916454520487374970, -0.916434512398527690, -0.916414502018594530, -0.916394489347625020, -0.916374474385669320, -0.916354457132777520, -0.916334437588999130, +-0.916314415754384990, -0.916294391628984850, -0.916274365212848770, -0.916254336506026720, -0.916234305508568880, -0.916214272220525210, -0.916194236641945880, -0.916174198772880980, +-0.916154158613380560, -0.916134116163494380, -0.916114071423273280, -0.916094024392766990, -0.916073975072025700, -0.916053923461099480, -0.916033869560038290, -0.916013813368892200, +-0.915993754887711950, -0.915973694116547280, -0.915953631055448360, -0.915933565704465380, -0.915913498063648520, -0.915893428133047860, -0.915873355912713680, -0.915853281402696060, +-0.915833204603044850, -0.915813125513811110, -0.915793044135044480, -0.915772960466795240, -0.915752874509113580, -0.915732786262049680, -0.915712695725653610, -0.915692602899976120, +-0.915672507785067040, -0.915652410380976670, -0.915632310687755410, -0.915612208705453230, -0.915592104434120650, -0.915571997873807720, -0.915551889024564860, -0.915531777886441910, +-0.915511664459489840, -0.915491548743758710, -0.915471430739298600, -0.915451310446159900, -0.915431187864393040, -0.915411062994047730, -0.915390935835175170, -0.915370806387825310, +-0.915350674652048340, -0.915330540627894760, -0.915310404315414770, -0.915290265714658880, -0.915270124825677270, -0.915249981648520340, -0.915229836183238390, -0.915209688429881600, +-0.915189538388500810, -0.915169386059146330, -0.915149231441868330, -0.915129074536717210, -0.915108915343743060, -0.915088753862997040, -0.915068590094529120, -0.915048424038389600, +-0.915028255694629200, -0.915008085063298000, -0.914987912144446750, -0.914967736938125610, -0.914947559444385110, -0.914927379663275750, -0.914907197594847620, -0.914887013239151890, +-0.914866826596238520, -0.914846637666158150, -0.914826446448961160, -0.914806252944698080, -0.914786057153418990, -0.914765859075175050, -0.914745658710016560, -0.914725456057993820, +-0.914705251119157570, -0.914685043893558090, -0.914664834381246130, -0.914644622582271970, -0.914624408496686250, -0.914604192124539140, -0.914583973465882050, -0.914563752520764830, +-0.914543529289238430, -0.914523303771353050, -0.914503075967159520, -0.914482845876707810, -0.914462613500049430, -0.914442378837234560, -0.914422141888313610, -0.914401902653337430, +-0.914381661132356420, -0.914361417325421310, -0.914341171232582630, -0.914320922853891100, -0.914300672189396810, -0.914280419239151150, -0.914260164003204530, -0.914239906481607580, +-0.914219646674410690, -0.914199384581664830, -0.914179120203420070, -0.914158853539727810, -0.914138584590638570, -0.914118313356202750, -0.914098039836471200, -0.914077764031494540, +-0.914057485941323410, -0.914037205566008650, -0.914016922905600880, -0.913996637960150740, -0.913976350729708730, -0.913956061214326150, -0.913935769414053410, -0.913915475328941240, +-0.913895178959040380, -0.913874880304401230, -0.913854579365075190, -0.913834276141112790, -0.913813970632564640, -0.913793662839481600, -0.913773352761914400, -0.913753040399913790, +-0.913732725753530590, -0.913712408822815680, -0.913692089607819560, -0.913671768108592960, -0.913651444325187300, -0.913631118257653090, -0.913610789906040940, -0.913590459270401940, +-0.913570126350786720, -0.913549791147245880, -0.913529453659830850, -0.913509113888592240, -0.913488771833580790, -0.913468427494847470, -0.913448080872443110, -0.913427731966418470, +-0.913407380776824480, -0.913387027303712130, -0.913366671547131800, -0.913346313507135240, -0.913325953183772740, -0.913305590577095480, -0.913285225687154200, -0.913264858513999860, +-0.913244489057682960, -0.913224117318255260, -0.913203743295767260, -0.913183366990269920, -0.913162988401814200, -0.913142607530450960, -0.913122224376231140, -0.913101838939205820, +-0.913081451219425850, -0.913061061216941970, -0.913040668931805800, -0.913020274364067850, -0.912999877513779310, -0.912979478380991140, -0.912959076965754180, -0.912938673268119170, +-0.912918267288137850, -0.912897859025860850, -0.912877448481339230, -0.912857035654623950, -0.912836620545766090, -0.912816203154816710, -0.912795783481826770, -0.912775361526847460, +-0.912754937289929620, -0.912734510771124220, -0.912714081970482760, -0.912693650888056210, -0.912673217523895520, -0.912652781878051770, -0.912632343950575690, -0.912611903741519130, +-0.912591461250932710, -0.912571016478867740, -0.912550569425375270, -0.912530120090506270, -0.912509668474312030, -0.912489214576843620, -0.912468758398152110, -0.912448299938288800, +-0.912427839197304300, -0.912407376175250700, -0.912386910872178490, -0.912366443288139100, -0.912345973423183580, -0.912325501277363120, -0.912305026850728560, -0.912284550143331760, +-0.912264071155223570, -0.912243589886455260, -0.912223106337078040, -0.912202620507142960, -0.912182132396701320, -0.912161642005804410, -0.912141149334503300, -0.912120654382849060, +-0.912100157150893430, -0.912079657638687480, -0.912059155846282390, -0.912038651773729450, -0.912018145421079840, -0.911997636788384410, -0.911977125875695350, -0.911956612683063490, +-0.911936097210540030, -0.911915579458176470, -0.911895059426023780, -0.911874537114133580, -0.911854012522556930, -0.911833485651345370, -0.911812956500549610, -0.911792425070221960, +-0.911771891360413140, -0.911751355371174580, -0.911730817102557660, -0.911710276554613670, -0.911689733727393700, -0.911669188620949700, -0.911648641235332850, -0.911628091570594210, +-0.911607539626785420, -0.911586985403957770, -0.911566428902162770, -0.911545870121451610, -0.911525309061875790, -0.911504745723486610, -0.911484180106335250, -0.911463612210473890, +-0.911443042035953390, -0.911422469582825360, -0.911401894851141090, -0.911381317840951780, -0.911360738552309590, -0.911340156985265380, -0.911319573139870890, -0.911298987016177510, +-0.911278398614236540, -0.911257807934099720, -0.911237214975818330, -0.911216619739443790, -0.911196022225027820, -0.911175422432621400, -0.911154820362276800, -0.911134216014045210, +-0.911113609387977920, -0.911093000484126670, -0.911072389302542970, -0.911051775843277900, -0.911031160106383740, -0.911010542091911790, -0.910989921799913340, -0.910969299230440120, +-0.910948674383543770, -0.910928047259275560, -0.910907417857687360, -0.910886786178830570, -0.910866152222756460, -0.910845515989517350, -0.910824877479164410, -0.910804236691749260, +-0.910783593627323530, -0.910762948285938840, -0.910742300667646390, -0.910721650772498670, -0.910700998600546650, -0.910680344151842290, -0.910659687426436990, -0.910639028424382380, +-0.910618367145730300, -0.910597703590532380, -0.910577037758840020, -0.910556369650704860, -0.910535699266179050, -0.910515026605314030, -0.910494351668161510, -0.910473674454773010, +-0.910452994965200380, -0.910432313199494800, -0.910411629157708900, -0.910390942839893860, -0.910370254246101520, -0.910349563376383510, -0.910328870230791680, -0.910308174809377530, +-0.910287477112193040, -0.910266777139289830, -0.910246074890719740, -0.910225370366534060, -0.910204663566785310, -0.910183954491524890, -0.910163243140804550, -0.910142529514676110, +-0.910121813613191000, -0.910101095436401720, -0.910080374984359790, -0.910059652257116820, -0.910038927254724790, -0.910018199977235430, -0.909997470424700470, -0.909976738597171870, +-0.909956004494701490, -0.909935268117341050, -0.909914529465142170, -0.909893788538157170, -0.909873045336437870, -0.909852299860035800, -0.909831552109003130, -0.909810802083391490, +-0.909790049783252510, -0.909769295208638700, -0.909748538359601680, -0.909727779236193410, -0.909707017838465640, -0.909686254166470310, -0.909665488220259280, -0.909644719999884610, +-0.909623949505398150, -0.909603176736851430, -0.909582401694297160, -0.909561624377786760, -0.909540844787372400, -0.909520062923105940, -0.909499278785039330, -0.909478492373224200, +-0.909457703687713060, -0.909436912728557760, -0.909416119495810140, -0.909395323989522280, -0.909374526209746130, -0.909353726156533540, -0.909332923829936690, -0.909312119230007540, +-0.909291312356797720, -0.909270503210360070, -0.909249691790746110, -0.909228878098007900, -0.909208062132197400, -0.909187243893366910, -0.909166423381567830, -0.909145600596853120, +-0.909124775539274400, -0.909103948208883740, -0.909083118605733210, -0.909062286729874880, -0.909041452581360820, -0.909020616160243100, -0.908999777466573900, -0.908978936500405290, +-0.908958093261788890, -0.908937247750777670, -0.908916399967423350, -0.908895549911777900, -0.908874697583893720, -0.908853842983822440, -0.908832986111616780, -0.908812126967328720, +-0.908791265551010420, -0.908770401862713850, -0.908749535902491300, -0.908728667670394950, -0.908707797166476980, -0.908686924390789460, -0.908666049343384570, -0.908645172024314270, +-0.908624292433631300, -0.908603410571387720, -0.908582526437635600, -0.908561640032427120, -0.908540751355814580, -0.908519860407849710, -0.908498967188585690, -0.908478071698074150, +-0.908457173936367490, -0.908436273903517890, -0.908415371599577530, -0.908394467024598810, -0.908373560178633910, -0.908352651061735130, -0.908331739673954310, -0.908310826015344520, +-0.908289910085957720, -0.908268991885846090, -0.908248071415061920, -0.908227148673657720, -0.908206223661685130, -0.908185296379197430, -0.908164366826246460, -0.908143435002884640, +-0.908122500909164240, -0.908101564545137460, -0.908080625910856920, -0.908059685006374680, -0.908038741831743380, -0.908017796387014740, -0.907996848672241950, -0.907975898687477190, +-0.907954946432772530, -0.907933991908180580, -0.907913035113753650, -0.907892076049543690, -0.907871114715604000, -0.907850151111986530, -0.907829185238743560, -0.907808217095927740, +-0.907787246683591340, -0.907766274001786890, -0.907745299050566670, -0.907724321829983190, -0.907703342340088980, -0.907682360580935990, -0.907661376552577500, -0.907640390255065600, +-0.907619401688452680, -0.907598410852791250, -0.907577417748133390, -0.907556422374532490, -0.907535424732040410, -0.907514424820709760, -0.907493422640593180, -0.907472418191742960, +-0.907451411474211600, -0.907430402488051850, -0.907409391233316100, -0.907388377710056760, -0.907367361918326120, -0.907346343858177580, -0.907325323529663110, -0.907304300932835210, +-0.907283276067746720, -0.907262248934449960, -0.907241219532997300, -0.907220187863441830, -0.907199153925835940, -0.907178117720232160, -0.907157079246683210, -0.907136038505241380, +-0.907114995495959530, -0.907093950218890170, -0.907072902674086020, -0.907051852861599170, -0.907030800781483020, -0.907009746433789950, -0.906988689818572500, -0.906967630935883280, +-0.906946569785775040, -0.906925506368299940, -0.906904440683511500, -0.906883372731461910, -0.906862302512204010, -0.906841230025790200, -0.906820155272273440, -0.906799078251706250, +-0.906777998964141350, -0.906756917409631380, -0.906735833588228850, -0.906714747499987040, -0.906693659144958470, -0.906672568523195670, -0.906651475634751460, -0.906630380479678480, +-0.906609283058029240, -0.906588183369857250, -0.906567081415214690, -0.906545977194154530, -0.906524870706729380, -0.906503761952991980, -0.906482650932995290, -0.906461537646791830, +-0.906440422094434650, -0.906419304275976390, -0.906398184191469450, -0.906377061840967560, -0.906355937224522900, -0.906334810342188430, -0.906313681194016900, -0.906292549780060800, +-0.906271416100373650, -0.906250280155008080, -0.906229141944016710, -0.906208001467452510, -0.906186858725368420, -0.906165713717817070, -0.906144566444851420, -0.906123416906524430, +-0.906102265102888830, -0.906081111033997240, -0.906059954699903190, -0.906038796100659290, -0.906017635236318400, -0.905996472106933460, -0.905975306712557330, -0.905954139053242510, +-0.905932969129042750, -0.905911796940010560, -0.905890622486198890, -0.905869445767660600, -0.905848266784448740, -0.905827085536616280, -0.905805902024216070, -0.905784716247301060, +-0.905763528205923870, -0.905742337900138250, -0.905721145329996810, -0.905699950495552520, -0.905678753396858330, -0.905657554033967300, -0.905636352406931970, -0.905615148515806160, +-0.905593942360642390, -0.905572733941493850, -0.905551523258413480, -0.905530310311454260, -0.905509095100669350, -0.905487877626111600, -0.905466657887834200, -0.905445435885889770, +-0.905424211620332150, -0.905402985091213970, -0.905381756298588410, -0.905360525242508320, -0.905339291923027090, -0.905318056340197130, -0.905296818494072400, -0.905275578384705630, +-0.905254336012150000, -0.905233091376458470, -0.905211844477684210, -0.905190595315880310, -0.905169343891099930, -0.905148090203396260, -0.905126834252822250, -0.905105576039430870, +-0.905084315563275950, -0.905063052824410130, -0.905041787822886800, -0.905020520558758920, -0.904999251032079450, -0.904977979242902130, -0.904956705191279910, -0.904935428877265860, +-0.904914150300913380, -0.904892869462275430, -0.904871586361405300, -0.904850300998356170, -0.904829013373181330, -0.904807723485933970, -0.904786431336666920, -0.904765136925434250, +-0.904743840252288600, -0.904722541317283470, -0.904701240120471930, -0.904679936661906830, -0.904658630941642340, -0.904637322959731320, -0.904616012716226940, -0.904594700211182600, +-0.904573385444651380, -0.904552068416686780, -0.904530749127341990, -0.904509427576670300, -0.904488103764725100, -0.904466777691559250, -0.904445449357226820, -0.904424118761780750, +-0.904402785905274450, -0.904381450787761110, -0.904360113409294230, -0.904338773769926550, -0.904317431869712470, -0.904296087708704730, -0.904274741286956730, -0.904253392604521980, +-0.904232041661453660, -0.904210688457805280, -0.904189332993630130, -0.904167975268981740, -0.904146615283912940, -0.904125253038478020, -0.904103888532729940, -0.904082521766722210, +-0.904061152740508130, -0.904039781454141210, -0.904018407907674400, -0.903997032101162000, -0.903975654034656960, -0.903954273708212800, -0.903932891121883020, -0.903911506275720920, +-0.903890119169780130, -0.903868729804114030, -0.903847338178776050, -0.903825944293819790, -0.903804548149298230, -0.903783149745265750, -0.903761749081775310, -0.903740346158880550, +-0.903718940976634970, -0.903697533535091630, -0.903676123834304730, -0.903654711874327670, -0.903633297655213720, -0.903611881177016630, -0.903590462439789800, -0.903569041443586740, +-0.903547618188461190, -0.903526192674466540, -0.903504764901656430, -0.903483334870083920, -0.903461902579803520, -0.903440468030868420, -0.903419031223332110, -0.903397592157248240, +-0.903376150832669980, -0.903354707249651720, -0.903333261408246770, -0.903311813308508630, -0.903290362950490920, -0.903268910334247280, -0.903247455459831430, -0.903225998327296890, +-0.903204538936697390, -0.903183077288086560, -0.903161613381517570, -0.903140147217045050, -0.903118678794722070, -0.903097208114602480, -0.903075735176739780, -0.903054259981187820, +-0.903032782527999680, -0.903011302817230080, -0.902989820848932200, -0.902968336623159900, -0.902946850139966560, -0.902925361399406160, -0.902903870401532420, -0.902882377146398960, +-0.902860881634059530, -0.902839383864567520, -0.902817883837977450, -0.902796381554342720, -0.902774877013716950, -0.902753370216154090, -0.902731861161707670, -0.902710349850431300, +-0.902688836282379500, -0.902667320457605560, -0.902645802376163210, -0.902624282038106520, -0.902602759443489000, -0.902581234592364610, -0.902559707484787200, -0.902538178120810500, +-0.902516646500487910, -0.902495112623874050, -0.902473576491022560, -0.902452038101987040, -0.902430497456821470, -0.902408954555579570, -0.902387409398314970, -0.902365861985082170, +-0.902344312315934820, -0.902322760390926630, -0.902301206210111560, -0.902279649773543470, -0.902258091081276190, -0.902236530133363690, -0.902214966929859920, -0.902193401470818720, +-0.902171833756293620, -0.902150263786339330, -0.902128691561009390, -0.902107117080357730, -0.902085540344438330, -0.902063961353304580, -0.902042380107011430, -0.902020796605612190, +-0.901999210849161010, -0.901977622837711880, -0.901956032571318620, -0.901934440050035310, -0.901912845273915910, -0.901891248243014370, -0.901869648957384640, -0.901848047417080580, +-0.901826443622156580, -0.901804837572666610, -0.901783229268664500, -0.901761618710204330, -0.901740005897340160, -0.901718390830125500, -0.901696773508615320, -0.901675153932863130, +-0.901653532102923090, -0.901631908018849290, -0.901610281680695680, -0.901588653088516320, -0.901567022242365400, -0.901545389142296870, -0.901523753788364470, -0.901502116180623150, +-0.901480476319126420, -0.901458834203928580, -0.901437189835083700, -0.901415543212645720, -0.901393894336668610, -0.901372243207207100, -0.901350589824314930, -0.901328934188046380, +-0.901307276298455420, -0.901285616155596330, -0.901263953759523170, -0.901242289110290140, -0.901220622207951410, -0.901198953052560700, -0.901177281644172990, -0.901155607982842110, +-0.901133932068622250, -0.901112253901567460, -0.901090573481732050, -0.901068890809169850, -0.901047205883935830, -0.901025518706083720, -0.901003829275667910, -0.900982137592742480, +-0.900960443657361720, -0.900938747469579800, -0.900917049029451130, -0.900895348337029780, -0.900873645392370030, -0.900851940195525720, -0.900830232746552050, -0.900808523045502740, +-0.900786811092432190, -0.900765096887394590, -0.900743380430443770, -0.900721661721635040, -0.900699940761022110, -0.900678217548659290, -0.900656492084600860, -0.900634764368901330, +-0.900613034401614780, -0.900591302182795710, -0.900569567712498410, -0.900547830990777070, -0.900526092017685850, -0.900504350793279840, -0.900482607317612870, -0.900460861590739460, +-0.900439113612713780, -0.900417363383590460, -0.900395610903423240, -0.900373856172267390, -0.900352099190176890, -0.900330339957206240, -0.900308578473409620, -0.900286814738841650, +-0.900265048753556620, -0.900243280517608930, -0.900221510031053000, -0.900199737293942980, -0.900177962306334070, -0.900156185068280100, -0.900134405579835820, -0.900112623841055390, +-0.900090839851993450, -0.900069053612704060, -0.900047265123242400, -0.900025474383662540, -0.900003681394019090, -0.899981886154366360, -0.899960088664758960, -0.899938288925251300, +-0.899916486935897870, -0.899894682696753320, -0.899872876207871600, -0.899851067469308210, -0.899829256481117000, -0.899807443243352710, -0.899785627756069850, -0.899763810019322820, +-0.899741990033166020, -0.899720167797654510, -0.899698343312842600, -0.899676516578784890, -0.899654687595535800, -0.899632856363150050, -0.899611022881682150, -0.899589187151186740, +-0.899567349171718320, -0.899545508943331520, -0.899523666466080620, -0.899501821740020800, -0.899479974765206580, -0.899458125541692350, -0.899436274069532750, -0.899414420348782160, +-0.899392564379495880, -0.899370706161728210, -0.899348845695533860, -0.899326982980967250, -0.899305118018083220, -0.899283250806936390, -0.899261381347581490, -0.899239509640073150, +-0.899217635684465890, -0.899195759480814320, -0.899173881029173620, -0.899152000329598300, -0.899130117382142990, -0.899108232186862310, -0.899086344743811110, -0.899064455053043550, +-0.899042563114615390, -0.899020668928580790, -0.898998772494994490, -0.898976873813911230, -0.898954972885385840, -0.898933069709472950, -0.898911164286227420, -0.898889256615703960, +-0.898867346697957090, -0.898845434533042110, -0.898823520121013520, -0.898801603461926280, -0.898779684555834900, -0.898757763402794340, -0.898735840002859000, -0.898713914356084500, +-0.898691986462525130, -0.898670056322235840, -0.898648123935271380, -0.898626189301686700, -0.898604252421536410, -0.898582313294875590, -0.898560371921758970, -0.898538428302240950, +-0.898516482436377270, -0.898494534324222440, -0.898472583965831300, -0.898450631361258690, -0.898428676510559470, -0.898406719413788140, -0.898384760071000430, -0.898362798482250870, +-0.898340834647594180, -0.898318868567085540, -0.898296900240779680, -0.898274929668731570, -0.898252956850996150, -0.898230981787628280, -0.898209004478683020, -0.898187024924214870, +-0.898165043124279470, -0.898143059078931550, -0.898121072788225950, -0.898099084252217630, -0.898077093470961320, -0.898055100444512530, -0.898033105172926120, -0.898011107656256800, +-0.897989107894559770, -0.897967105887890080, -0.897945101636302480, -0.897923095139852250, -0.897901086398594120, -0.897879075412583380, -0.897857062181874550, -0.897835046706523480, +-0.897813028986584770, -0.897791009022113510, -0.897768986813164640, -0.897746962359793450, -0.897724935662054360, -0.897702906720003300, -0.897680875533695020, -0.897658842103184580, +-0.897636806428526950, -0.897614768509777390, -0.897592728346990890, -0.897570685940222600, -0.897548641289527490, -0.897526594394960520, -0.897504545256577300, -0.897482493874432800, +-0.897460440248582070, -0.897438384379080300, -0.897416326265982440, -0.897394265909343460, -0.897372203309219190, -0.897350138465664470, -0.897328071378734270, -0.897306002048483990, +-0.897283930474968680, -0.897261856658243540, -0.897239780598363850, -0.897217702295384560, -0.897195621749360740, -0.897173538960348130, -0.897151453928401790, -0.897129366653576790, +-0.897107277135928300, -0.897085185375511740, -0.897063091372381720, -0.897040995126594410, -0.897018896638204670, -0.896996795907267550, -0.896974692933838580, -0.896952587717972820, +-0.896930480259725550, -0.896908370559152070, -0.896886258616307770, -0.896864144431247730, -0.896842028004027010, -0.896819909334701570, -0.896797788423326360, -0.896775665269956670, +-0.896753539874647790, -0.896731412237454670, -0.896709282358433500, -0.896687150237639120, -0.896665015875126810, -0.896642879270951880, -0.896620740425169930, -0.896598599337836030, +-0.896576456009005600, -0.896554310438734130, -0.896532162627076800, -0.896510012574088690, -0.896487860279825970, -0.896465705744343590, -0.896443548967696850, -0.896421389949941360, +-0.896399228691132420, -0.896377065191324870, -0.896354899450575230, -0.896332731468938220, -0.896310561246469350, -0.896288388783224140, -0.896266214079257990, -0.896244037134626300, +-0.896221857949384470, -0.896199676523588010, -0.896177492857291980, -0.896155306950552570, -0.896133118803424940, -0.896110928415964510, -0.896088735788226680, -0.896066540920267160, +-0.896044343812140820, -0.896022144463903940, -0.895999942875611800, -0.895977739047319810, -0.895955532979083370, -0.895933324670958210, -0.895911114122999620, -0.895888901335263330, +-0.895866686307804750, -0.895844469040679160, -0.895822249533942740, -0.895800027787650550, -0.895777803801858450, -0.895755577576621830, -0.895733349111996200, -0.895711118408036850, +-0.895688885464800080, -0.895666650282341160, -0.895644412860715500, -0.895622173199978940, -0.895599931300186890, -0.895577687161394960, -0.895555440783658900, -0.895533192167034200, +-0.895510941311576490, -0.895488688217341070, -0.895466432884384320, -0.895444175312761440, -0.895421915502528140, -0.895399653453740060, -0.895377389166452490, -0.895355122640721810, +-0.895332853876603330, -0.895310582874152770, -0.895288309633425650, -0.895266034154477810, -0.895243756437364870, -0.895221476482142560, -0.895199194288866520, -0.895176909857592570, +-0.895154623188375910, -0.895132334281273030, -0.895110043136339350, -0.895087749753630590, -0.895065454133202490, -0.895043156275110660, -0.895020856179410630, -0.894998553846158780, +-0.894976249275410640, -0.894953942467221820, -0.894931633421648160, -0.894909322138745410, -0.894887008618569290, -0.894864692861175760, -0.894842374866620440, -0.894820054634958840, +-0.894797732166247360, -0.894775407460541740, -0.894753080517897480, -0.894730751338370540, -0.894708419922016770, -0.894686086268891460, -0.894663750379051440, -0.894641412252551890, +-0.894619071889449000, -0.894596729289798280, -0.894574384453655780, -0.894552037381077360, -0.894529688072118860, -0.894507336526836120, -0.894484982745284540, -0.894462626727520970, +-0.894440268473600920, -0.894417907983580120, -0.894395545257514520, -0.894373180295460090, -0.894350813097472330, -0.894328443663607970, -0.894306071993922420, -0.894283698088471750, +-0.894261321947311780, -0.894238943570498600, -0.894216562958087930, -0.894194180110135960, -0.894171795026698520, -0.894149407707831580, -0.894127018153590640, -0.894104626364032650, +-0.894082232339213020, -0.894059836079187930, -0.894037437584013220, -0.894015036853744390, -0.893992633888438530, -0.893970228688151010, -0.893947821252937920, -0.893925411582855320, +-0.893902999677959050, -0.893880585538305410, -0.893858169163950330, -0.893835750554949790, -0.893813329711359850, -0.893790906633236130, -0.893768481320635690, -0.893746053773613940, +-0.893723623992227050, -0.893701191976531200, -0.893678757726582340, -0.893656321242436100, -0.893633882524149550, -0.893611441571778190, -0.893588998385378310, -0.893566552965005870, +-0.893544105310717150, -0.893521655422568120, -0.893499203300614940, -0.893476748944913690, -0.893454292355520320, -0.893431833532491450, -0.893409372475883150, -0.893386909185751370, +-0.893364443662152290, -0.893341975905142080, -0.893319505914776490, -0.893297033691112690, -0.893274559234206180, -0.893252082544113370, -0.893229603620890210, -0.893207122464593220, +-0.893184639075278230, -0.893162153453001760, -0.893139665597819880, -0.893117175509788530, -0.893094683188964570, -0.893072188635403830, -0.893049691849162720, -0.893027192830297300, +-0.893004691578863970, -0.892982188094918470, -0.892959682378517860, -0.892937174429718090, -0.892914664248575460, -0.892892151835146030, -0.892869637189486310, -0.892847120311652480, +-0.892824601201700930, -0.892802079859687740, -0.892779556285669410, -0.892757030479701790, -0.892734502441842050, -0.892711972172145930, -0.892689439670669940, -0.892666904937470360, +-0.892644367972603160, -0.892621828776125390, -0.892599287348093020, -0.892576743688562440, -0.892554197797590040, -0.892531649675232130, -0.892509099321545100, -0.892486546736585340, +-0.892463991920409260, -0.892441434873073040, -0.892418875594632950, -0.892396314085146080, -0.892373750344668370, -0.892351184373256330, -0.892328616170966260, -0.892306045737854770, +-0.892283473073977710, -0.892260898179392360, -0.892238321054154680, -0.892215741698321300, -0.892193160111948600, -0.892170576295092890, -0.892147990247810770, -0.892125401970158770, +-0.892102811462193170, -0.892080218723970140, -0.892057623755546980, -0.892035026556979750, -0.892012427128325070, -0.891989825469639230, -0.891967221580978740, -0.891944615462399890, +-0.891922007113959970, -0.891899396535714930, -0.891876783727721390, -0.891854168690035980, -0.891831551422715090, -0.891808931925815230, -0.891786310199393140, -0.891763686243505330, +-0.891741060058207860, -0.891718431643558130, -0.891695800999612320, -0.891673168126426940, -0.891650533024058720, -0.891627895692564180, -0.891605256131999480, -0.891582614342422030, +-0.891559970323888010, -0.891537324076454140, -0.891514675600176940, -0.891492024895113030, -0.891469371961319030, -0.891446716798851680, -0.891424059407767480, -0.891401399788123160, +-0.891378737939974910, -0.891356073863380230, -0.891333407558395410, -0.891310739025076960, -0.891288068263481730, -0.891265395273665990, -0.891242720055687050, -0.891220042609601410, +-0.891197362935465590, -0.891174681033336410, -0.891151996903270520, -0.891129310545324630, -0.891106621959555480, -0.891083931146019690, -0.891061238104774110, -0.891038542835875140, +-0.891015845339380160, -0.890993145615345480, -0.890970443663828050, -0.890947739484884480, -0.890925033078571070, -0.890902324444945550, -0.890879613584064200, -0.890856900495983870, +-0.890834185180761300, -0.890811467638453200, -0.890788747869116440, -0.890766025872807840, -0.890743301649584150, -0.890720575199502210, -0.890697846522618520, -0.890675115618990490, +-0.890652382488674730, -0.890629647131727990, -0.890606909548207200, -0.890584169738169010, -0.890561427701670130, -0.890538683438767960, -0.890515936949519140, -0.890493188233980490, +-0.890470437292208870, -0.890447684124261120, -0.890424928730194190, -0.890402171110064920, -0.890379411263930280, -0.890356649191846650, -0.890333884893871890, -0.890311118370062270, +-0.890288349620474980, -0.890265578645166760, -0.890242805444194540, -0.890220030017614960, -0.890197252365485750, -0.890174472487863410, -0.890151690384804790, -0.890128906056367080, +-0.890106119502606980, -0.890083330723581590, -0.890060539719347950, -0.890037746489962920, -0.890014951035483120, -0.889992153355966380, -0.889969353451469210, -0.889946551322048700, +-0.889923746967761780, -0.889900940388665520, -0.889878131584816430, -0.889855320556272590, -0.889832507303090270, -0.889809691825326770, -0.889786874123039030, -0.889764054196284020, +-0.889741232045119010, -0.889718407669600860, -0.889695581069786630, -0.889672752245733500, -0.889649921197498080, -0.889627087925138340, -0.889604252428710770, -0.889581414708272680, +-0.889558574763881000, -0.889535732595592380, -0.889512888203464970, -0.889490041587555290, -0.889467192747920520, -0.889444341684617720, -0.889421488397704070, -0.889398632887236750, +-0.889375775153272820, -0.889352915195869560, -0.889330053015083830, -0.889307188610972690, -0.889284321983593970, -0.889261453133004420, -0.889238582059261210, -0.889215708762421510, +-0.889192833242542610, -0.889169955499681250, -0.889147075533895380, -0.889124193345241840, -0.889101308933777700, -0.889078422299560360, -0.889055533442647090, -0.889032642363094870, +-0.889009749060960970, -0.888986853536302800, -0.888963955789177080, -0.888941055819641890, -0.888918153627754060, -0.888895249213570770, -0.888872342577149420, -0.888849433718547190, +-0.888826522637821030, -0.888803609335028890, -0.888780693810227730, -0.888757776063474950, -0.888734856094827610, -0.888711933904343110, -0.888689009492078850, -0.888666082858092120, +-0.888643154002440090, -0.888620222925179730, -0.888597289626369300, -0.888574354106065670, -0.888551416364326110, -0.888528476401208020, -0.888505534216768700, -0.888482589811065200, +-0.888459643184155600, -0.888436694336096840, -0.888413743266946440, -0.888390789976761690, -0.888367834465599860, -0.888344876733518580, -0.888321916780575040, -0.888298954606826620, +-0.888275990212330950, -0.888253023597144860, -0.888230054761326550, -0.888207083704933180, -0.888184110428022030, -0.888161134930650630, -0.888138157212876030, -0.888115177274756420, +-0.888092195116348960, -0.888069210737710830, -0.888046224138899780, -0.888023235319973180, -0.888000244280988450, -0.887977251022003090, -0.887954255543074720, -0.887931257844260640, +-0.887908257925618010, -0.887885255787205120, -0.887862251429079040, -0.887839244851297390, -0.887816236053917680, -0.887793225036997310, -0.887770211800593460, -0.887747196344764620, +-0.887724178669567650, -0.887701158775060280, -0.887678136661300020, -0.887655112328344380, -0.887632085776250970, -0.887609057005077420, -0.887586026014881120, -0.887562992805719380, +-0.887539957377650680, -0.887516919730731990, -0.887493879865020930, -0.887470837780575230, -0.887447793477452510, -0.887424746955709830, -0.887401698215405710, -0.887378647256597320, +-0.887355594079342280, -0.887332538683698320, -0.887309481069723070, -0.887286421237474030, -0.887263359187008940, -0.887240294918385410, -0.887217228431660840, -0.887194159726893530, +-0.887171088804140860, -0.887148015663460470, -0.887124940304910070, -0.887101862728547190, -0.887078782934429320, -0.887055700922614990, -0.887032616693161360, -0.887009530246126050, +-0.886986441581567140, -0.886963350699542020, -0.886940257600108420, -0.886917162283324290, -0.886894064749247260, -0.886870964997935050, -0.886847863029444960, -0.886824758843835710, +-0.886801652441164600, -0.886778543821489240, -0.886755432984867590, -0.886732319931356930, -0.886709204661015880, -0.886686087173901850, -0.886662967470072560, -0.886639845549585860, +-0.886616721412499480, -0.886593595058871360, -0.886570466488759260, -0.886547335702221000, -0.886524202699314420, -0.886501067480096940, -0.886477930044627160, -0.886454790392962490, +-0.886431648525160990, -0.886408504441280280, -0.886385358141378310, -0.886362209625512490, -0.886339058893741650, -0.886315905946123080, -0.886292750782714860, -0.886269593403574700, +-0.886246433808760560, -0.886223271998330290, -0.886200107972341830, -0.886176941730853150, -0.886153773273921750, -0.886130602601606250, -0.886107429713964280, -0.886084254611053780, +-0.886061077292932600, -0.886037897759658690, -0.886014716011289670, -0.885991532047884170, -0.885968345869500020, -0.885945157476194840, -0.885921966868026930, -0.885898774045054020, +-0.885875579007334160, -0.885852381754925310, -0.885829182287885540, -0.885805980606272470, -0.885782776710144830, -0.885759570599560230, -0.885736362274576640, -0.885713151735252220, +-0.885689938981644940, -0.885666724013812300, -0.885643506831813370, -0.885620287435705640, -0.885597065825547200, -0.885573842001396110, -0.885550615963310420, -0.885527387711348090, +-0.885504157245567410, -0.885480924566026230, -0.885457689672782820, -0.885434452565894810, -0.885411213245420940, -0.885387971711419140, -0.885364727963947380, -0.885341482003063840, +-0.885318233828826130, -0.885294983441293310, -0.885271730840523020, -0.885248476026573310, -0.885225218999502570, -0.885201959759368660, -0.885178698306229860, -0.885155434640144350, +-0.885132168761170290, -0.885108900669365760, -0.885085630364788490, -0.885062357847497650, -0.885039083117550970, -0.885015806175006410, -0.884992527019922480, -0.884969245652357240, +-0.884945962072368420, -0.884922676280015090, -0.884899388275355080, -0.884876098058446580, -0.884852805629347870, -0.884829510988117240, -0.884806214134812640, -0.884782915069492690, +-0.884759613792215350, -0.884736310303038560, -0.884713004602021400, -0.884689696689221820, -0.884666386564697870, -0.884643074228508080, -0.884619759680710490, -0.884596442921363190, +-0.884573123950525120, -0.884549802768254230, -0.884526479374608930, -0.884503153769647280, -0.884479825953427890, -0.884456495926008830, -0.884433163687448620, -0.884409829237805530, +-0.884386492577137310, -0.884363153705503340, -0.884339812622961570, -0.884316469329570200, -0.884293123825387610, -0.884269776110472310, -0.884246426184882030, -0.884223074048676170, +-0.884199719701912690, -0.884176363144649870, -0.884153004376946110, -0.884129643398859800, -0.884106280210449460, -0.884082914811773370, -0.884059547202890040, -0.884036177383857760, +-0.884012805354734700, -0.883989431115580040, -0.883966054666451840, -0.883942676007408390, -0.883919295138508310, -0.883895912059809550, -0.883872526771371510, -0.883849139273252040, +-0.883825749565509860, -0.883802357648203140, -0.883778963521390630, -0.883755567185130710, -0.883732168639481900, -0.883708767884502590, -0.883685364920251400, -0.883661959746786410, +-0.883638552364166880, -0.883615142772451010, -0.883591730971697190, -0.883568316961964140, -0.883544900743310270, -0.883521482315793750, -0.883498061679473980, -0.883474638834409020, +-0.883451213780657390, -0.883427786518277800, -0.883404357047328780, -0.883380925367868720, -0.883357491479956460, -0.883334055383650510, -0.883310617079008930, -0.883287176566091240, +-0.883263733844955600, -0.883240288915660640, -0.883216841778264980, -0.883193392432827240, -0.883169940879405480, -0.883146487118059430, -0.883123031148847050, -0.883099572971827170, +-0.883076112587058320, -0.883052649994599200, -0.883029185194508460, -0.883005718186844700, -0.882982248971666770, -0.882958777549032740, -0.882935303919002100, -0.882911828081633270, +-0.882888350036984850, -0.882864869785115580, -0.882841387326084190, -0.882817902659948860, -0.882794415786769200, -0.882770926706603400, -0.882747435419510400, -0.882723941925548820, +-0.882700446224777390, -0.882676948317254740, -0.882653448203039810, -0.882629945882191240, -0.882606441354767730, -0.882582934620827820, -0.882559425680430890, -0.882535914533635450, +-0.882512401180500230, -0.882488885621084070, -0.882465367855445160, -0.882441847883643330, -0.882418325705736860, -0.882394801321784490, -0.882371274731845180, -0.882347745935977760, +-0.882324214934240850, -0.882300681726693510, -0.882277146313394380, -0.882253608694402500, -0.882230068869776060, -0.882206526839574900, -0.882182982603857410, -0.882159436162682550, +-0.882135887516109050, -0.882112336664195750, -0.882088783607001270, -0.882065228344585230, -0.882041670877006130, -0.882018111204322830, -0.881994549326594270, -0.881970985243879400, +-0.881947418956236960, -0.881923850463726010, -0.881900279766405500, -0.881876706864333840, -0.881853131757570740, -0.881829554446174950, -0.881805974930205180, -0.881782393209720520, +-0.881758809284779900, -0.881735223155441730, -0.881711634821765950, -0.881688044283811200, -0.881664451541636200, -0.881640856595300230, -0.881617259444861910, -0.881593660090380650, +-0.881570058531915060, -0.881546454769524420, -0.881522848803267260, -0.881499240633203280, -0.881475630259391350, -0.881452017681890190, -0.881428402900759080, -0.881404785916056980, +-0.881381166727842390, -0.881357545336175390, -0.881333921741114580, -0.881310295942718810, -0.881286667941047370, -0.881263037736159330, -0.881239405328113620, -0.881215770716969440, +-0.881192133902785830, -0.881168494885621880, -0.881144853665536190, -0.881121210242588940, -0.881097564616838520, -0.881073916788344240, -0.881050266757165250, -0.881026614523360060, +-0.881002960086988860, -0.880979303448110150, -0.880955644606783220, -0.880931983563067230, -0.880908320317021150, -0.880884654868704380, -0.880860987218175960, -0.880837317365495090, +-0.880813645310720930, -0.880789971053912210, -0.880766294595129010, -0.880742615934430040, -0.880718935071874490, -0.880695252007521630, -0.880671566741430660, -0.880647879273660390, +-0.880624189604270800, -0.880600497733320720, -0.880576803660869430, -0.880553107386976120, -0.880529408911700060, -0.880505708235100440, -0.880482005357236530, -0.880458300278167740, +-0.880434592997952680, -0.880410883516651530, -0.880387171834323250, -0.880363457951027000, -0.880339741866822070, -0.880316023581767860, -0.880292303095923100, -0.880268580409347970, +-0.880244855522101520, -0.880221128434242830, -0.880197399145831390, -0.880173667656926400, -0.880149933967587230, -0.880126198077873290, -0.880102459987843750, -0.880078719697557800, +-0.880054977207075370, -0.880031232516455430, -0.880007485625757590, -0.879983736535040920, -0.879959985244364920, -0.879936231753788540, -0.879912476063371970, -0.879888718173174270, +-0.879864958083254710, -0.879841195793672810, -0.879817431304487860, -0.879793664615759360, -0.879769895727546710, -0.879746124639909420, -0.879722351352906660, -0.879698575866597720, +-0.879674798181042660, -0.879651018296300660, -0.879627236212431110, -0.879603451929493520, -0.879579665447546730, -0.879555876766651370, -0.879532085886866270, -0.879508292808250820, +-0.879484497530864770, -0.879460700054767510, -0.879436900380018430, -0.879413098506677150, -0.879389294434803070, -0.879365488164455700, -0.879341679695694320, -0.879317869028579110, +-0.879294056163169140, -0.879270241099524120, -0.879246423837703570, -0.879222604377766780, -0.879198782719773250, -0.879174958863783050, -0.879151132809855460, -0.879127304558050100, +-0.879103474108426490, -0.879079641461044110, -0.879055806615962720, -0.879031969573241700, -0.879008130332940900, -0.878984288895119260, -0.878960445259837300, -0.878936599427154300, +-0.878912751397129770, -0.878888901169823320, -0.878865048745294700, -0.878841194123602950, -0.878817337304808710, -0.878793478288971140, -0.878769617076149760, -0.878745753666404510, +-0.878721888059794680, -0.878698020256380220, -0.878674150256220750, -0.878650278059375900, -0.878626403665904940, -0.878602527075868280, -0.878578648289325410, -0.878554767306335860, +-0.878530884126959450, -0.878506998751255820, -0.878483111179284240, -0.878459221411105330, -0.878435329446778380, -0.878411435286363120, -0.878387538929919160, -0.878363640377506470, +-0.878339739629184660, -0.878315836685013450, -0.878291931545052700, -0.878268024209362010, -0.878244114678001010, -0.878220202951029980, -0.878196289028508550, -0.878172372910496430, +-0.878148454597053260, -0.878124534088238650, -0.878100611384112990, -0.878076686484735910, -0.878052759390167140, -0.878028830100466400, -0.878004898615693640, -0.877980964935908600, +-0.877957029061171120, -0.877933090991541040, -0.877909150727078310, -0.877885208267842330, -0.877861263613893610, -0.877837316765291860, -0.877813367722096730, -0.877789416484368260, +-0.877765463052165740, -0.877741507425550020, -0.877717549604580590, -0.877693589589317200, -0.877669627379819910, -0.877645662976148430, -0.877621696378362850, -0.877597727586523100, +-0.877573756600689040, -0.877549783420920490, -0.877525808047277090, -0.877501830479819670, -0.877477850718607620, -0.877453868763700910, -0.877429884615159580, -0.877405898273043490, +-0.877381909737412150, -0.877357919008326600, -0.877333926085846260, -0.877309930970031070, -0.877285933660940990, -0.877261934158636180, -0.877237932463176500, -0.877213928574621990, +-0.877189922493032630, -0.877165914218468010, -0.877141903750989100, -0.877117891090655410, -0.877093876237526990, -0.877069859191663910, -0.877045839953126130, -0.877021818521973360, +-0.876997794898266460, -0.876973769082065040, -0.876949741073429160, -0.876925710872419000, -0.876901678479094620, -0.876877643893515970, -0.876853607115743230, -0.876829568145836460, +-0.876805526983855720, -0.876781483629860860, -0.876757438083912600, -0.876733390346070780, -0.876709340416395480, -0.876685288294946850, -0.876661233981784640, -0.876637177476969680, +-0.876613118780561810, -0.876589057892621090, -0.876564994813207820, -0.876540929542382050, -0.876516862080203850, -0.876492792426733610, -0.876468720582031290, -0.876444646546157280, +-0.876420570319171200, -0.876396491901134000, -0.876372411292105640, -0.876348328492146390, -0.876324243501316100, -0.876300156319674950, -0.876276066947283770, -0.876251975384202410, +-0.876227881630491150, -0.876203785686210160, -0.876179687551419620, -0.876155587226180030, -0.876131484710551360, -0.876107380004593980, -0.876083273108368200, -0.876059164021933730, +-0.876035052745351870, -0.876010939278682340, -0.875986823621985430, -0.875962705775321540, -0.875938585738750830, -0.875914463512333260, -0.875890339096129900, -0.875866212490200690, +-0.875842083694606030, -0.875817952709406100, -0.875793819534661290, -0.875769684170431990, -0.875745546616778500, -0.875721406873761100, -0.875697264941439730, -0.875673120819875580, +-0.875648974509128710, -0.875624826009259390, -0.875600675320328040, -0.875576522442394920, -0.875552367375520110, -0.875528210119764780, -0.875504050675188990, -0.875479889041853030, +-0.875455725219817290, -0.875431559209142400, -0.875407391009888510, -0.875383220622116040, -0.875359048045885710, -0.875334873281257250, -0.875310696328291950, -0.875286517187050080, +-0.875262335857591830, -0.875238152339977700, -0.875213966634268200, -0.875189778740523390, -0.875165588658804560, -0.875141396389171770, -0.875117201931685520, -0.875093005286406210, +-0.875068806453394350, -0.875044605432710560, -0.875020402224415240, -0.874996196828568880, -0.874971989245232010, -0.874947779474464780, -0.874923567516328490, -0.874899353370883310, +-0.874875137038189750, -0.874850918518308430, -0.874826697811299290, -0.874802474917223850, -0.874778249836142160, -0.874754022568114960, -0.874729793113202650, -0.874705561471465830, +-0.874681327642965130, -0.874657091627761170, -0.874632853425914350, -0.874608613037485490, -0.874584370462534680, -0.874560125701123400, -0.874535878753311740, -0.874511629619160290, +-0.874487378298729910, -0.874463124792081100, -0.874438869099273930, -0.874414611220370120, -0.874390351155429730, -0.874366088904513510, -0.874341824467682050, -0.874317557844995990, +-0.874293289036516040, -0.874269018042302950, -0.874244744862417210, -0.874220469496919230, -0.874196191945870500, -0.874171912209331330, -0.874147630287362310, -0.874123346180024300, +-0.874099059887377790, -0.874074771409483310, -0.874050480746402350, -0.874026187898195080, -0.874001892864922470, -0.873977595646645010, -0.873953296243423660, -0.873928994655319040, +-0.873904690882391870, -0.873880384924702990, -0.873856076782312810, -0.873831766455282820, -0.873807453943673320, -0.873783139247545250, -0.873758822366959450, -0.873734503301976440, +-0.873710182052656830, -0.873685858619062120, -0.873661533001252820, -0.873637205199289670, -0.873612875213233500, -0.873588543043145150, -0.873564208689085460, -0.873539872151115280, +-0.873515533429295330, -0.873491192523686570, -0.873466849434349380, -0.873442504161345610, -0.873418156704735550, -0.873393807064580030, -0.873369455240940010, -0.873345101233875880, +-0.873320745043449480, -0.873296386669721310, -0.873272026112752010, -0.873247663372602730, -0.873223298449334330, -0.873198931343007630, -0.873174562053683600, -0.873150190581423070, +-0.873125816926287210, -0.873101441088336320, -0.873077063067632330, -0.873052682864235540, -0.873028300478207120, -0.873003915909608020, -0.872979529158499080, -0.872955140224940810, +-0.872930749108995260, -0.872906355810722730, -0.872881960330184280, -0.872857562667441080, -0.872833162822553850, -0.872808760795583780, -0.872784356586591700, -0.872759950195638790, +-0.872735541622785660, -0.872711130868094040, -0.872686717931624560, -0.872662302813438260, -0.872637885513596330, -0.872613466032159610, -0.872589044369188830, -0.872564620524745820, +-0.872540194498891310, -0.872515766291686260, -0.872491335903191830, -0.872466903333468990, -0.872442468582579010, -0.872418031650582740, -0.872393592537541450, -0.872369151243515770, +-0.872344707768567650, -0.872320262112757700, -0.872295814276147110, -0.872271364258797030, -0.872246912060768540, -0.872222457682122250, -0.872198001122920340, -0.872173542383223420, +-0.872149081463092560, -0.872124618362589140, -0.872100153081774130, -0.872075685620708580, -0.872051215979454010, -0.872026744158071350, -0.872002270156621790, -0.871977793975166170, +-0.871953315613766430, -0.871928835072483420, -0.871904352351378310, -0.871879867450512380, -0.871855380369946360, -0.871830891109742210, -0.871806399669960990, -0.871781906050663640, +-0.871757410251911560, -0.871732912273766040, -0.871708412116288130, -0.871683909779539250, -0.871659405263580540, -0.871634898568473430, -0.871610389694278510, -0.871585878641058080, +-0.871561365408872970, -0.871536849997784470, -0.871512332407853860, -0.871487812639142320, -0.871463290691710910, -0.871438766565621690, -0.871414240260935610, -0.871389711777713850, +-0.871365181116017800, -0.871340648275908850, -0.871316113257448180, -0.871291576060697290, -0.871267036685717480, -0.871242495132569680, -0.871217951401315970, -0.871193405492017510, +-0.871168857404735490, -0.871144307139531280, -0.871119754696466300, -0.871095200075601590, -0.871070643276999230, -0.871046084300720280, -0.871021523146826130, -0.870996959815378170, +-0.870972394306437800, -0.870947826620066420, -0.870923256756325540, -0.870898684715276540, -0.870874110496980270, -0.870849534101499230, -0.870824955528894380, -0.870800374779227120, +-0.870775791852558930, -0.870751206748951230, -0.870726619468465080, -0.870702030011162860, -0.870677438377105540, -0.870652844566354610, -0.870628248578971590, -0.870603650415017970, +-0.870579050074555270, -0.870554447557644770, -0.870529842864348310, -0.870505235994727180, -0.870480626948842540, -0.870456015726756790, -0.870431402328530890, -0.870406786754226670, +-0.870382169003905300, -0.870357549077628190, -0.870332926975457610, -0.870308302697454740, -0.870283676243681080, -0.870259047614198140, -0.870234416809067770, -0.870209783828351240, +-0.870185148672110280, -0.870160511340406400, -0.870135871833301320, -0.870111230150856120, -0.870086586293133180, -0.870061940260193900, -0.870037292052099680, -0.870012641668912350, +-0.869987989110693300, -0.869963334377503840, -0.869938677469406560, -0.869914018386462540, -0.869889357128733390, -0.869864693696280940, -0.869840028089166830, -0.869815360307452550, +-0.869790690351199820, -0.869766018220470500, -0.869741343915325650, -0.869716667435827870, -0.869691988782038350, -0.869667307954018920, -0.869642624951831200, -0.869617939775537030, +-0.869593252425197470, -0.869568562900875140, -0.869543871202631550, -0.869519177330528190, -0.869494481284626920, -0.869469783064989450, -0.869445082671677530, -0.869420380104752980, +-0.869395675364277310, -0.869370968450312140, -0.869346259362919980, -0.869321548102162110, -0.869296834668100370, -0.869272119060796600, -0.869247401280312530, -0.869222681326709430, +-0.869197959200050160, -0.869173234900396000, -0.869148508427808660, -0.869123779782350110, -0.869099048964082190, -0.869074315973066500, -0.869049580809365120, -0.869024843473039770, +-0.869000103964152280, -0.868975362282764060, -0.868950618428937950, -0.868925872402735220, -0.868901124204217950, -0.868876373833447730, -0.868851621290486210, -0.868826866575395980, +-0.868802109688238680, -0.868777350629076130, -0.868752589397970070, -0.868727825994982660, -0.868703060420175640, -0.868678292673610960, -0.868653522755350570, -0.868628750665456420, +-0.868603976403989900, -0.868579199971013850, -0.868554421366589780, -0.868529640590779750, -0.868504857643645600, -0.868480072525249280, -0.868455285235652300, -0.868430495774917600, +-0.868405704143106690, -0.868380910340281420, -0.868356114366503950, -0.868331316221836240, -0.868306515906340120, -0.868281713420077760, -0.868256908763111120, -0.868232101935501820, +-0.868207292937312690, -0.868182481768605240, -0.868157668429441640, -0.868132852919883960, -0.868108035239994020, -0.868083215389833570, -0.868058393369465550, -0.868033569178951580, +-0.868008742818353610, -0.867983914287733800, -0.867959083587154230, -0.867934250716676960, -0.867909415676364150, -0.867884578466277650, -0.867859739086479290, -0.867834897537032130, +-0.867810053817997580, -0.867785207929438030, -0.867760359871415310, -0.867735509643991820, -0.867710657247229070, -0.867685802681190110, -0.867660945945936680, -0.867636087041530830, +-0.867611225968034860, -0.867586362725510710, -0.867561497314020660, -0.867536629733627000, -0.867511759984391670, -0.867486888066376970, -0.867462013979644510, -0.867437137724257570, +-0.867412259300277770, -0.867387378707767280, -0.867362495946788380, -0.867337611017402700, -0.867312723919673510, -0.867287834653662550, -0.867262943219431980, -0.867238049617044090, +-0.867213153846561060, -0.867188255908045050, -0.867163355801558460, -0.867138453527163460, -0.867113549084922440, -0.867088642474897030, -0.867063733697150400, -0.867038822751744490, +-0.867013909638741480, -0.866988994358203760, -0.866964076910193500, -0.866939157294772670, -0.866914235512004310, -0.866889311561950480, -0.866864385444673260, -0.866839457160235140, +-0.866814526708698300, -0.866789594090125240, -0.866764659304578130, -0.866739722352119380, -0.866714783232810930, -0.866689841946715940, -0.866664898493896270, -0.866639952874414420, +-0.866615005088332670, -0.866590055135713410, -0.866565103016618600, -0.866540148731111510, -0.866515192279254000, -0.866490233661108440, -0.866465272876737470, -0.866440309926203130, +-0.866415344809568170, -0.866390377526894740, -0.866365408078245470, -0.866340436463682080, -0.866315462683268200, -0.866290486737065550, -0.866265508625136740, -0.866240528347544170, +-0.866215545904350240, -0.866190561295617000, -0.866165574521407860, -0.866140585581784750, -0.866115594476810190, -0.866090601206546570, -0.866065605771056510, -0.866040608170402510, +-0.866015608404646860, -0.865990606473852290, -0.865965602378081070, -0.865940596117395490, -0.865915587691858830, -0.865890577101533280, -0.865865564346481210, -0.865840549426765250, +-0.865815532342447570, -0.865790513093591340, -0.865765491680258960, -0.865740468102512820, -0.865715442360415420, -0.865690414454029500, -0.865665384383417560, -0.865640352148642100, +-0.865615317749765740, -0.865590281186851110, -0.865565242459960360, -0.865540201569157010, -0.865515158514503000, -0.865490113296061180, -0.865465065913894160, -0.865440016368064340, +-0.865414964658634100, -0.865389910785666850, -0.865364854749224870, -0.865339796549370770, -0.865314736186167170, -0.865289673659676680, -0.865264608969962050, -0.865239542117085870, +-0.865214473101110880, -0.865189401922099140, -0.865164328580114490, -0.865139253075218880, -0.865114175407475260, -0.865089095576946130, -0.865064013583694340, -0.865038929427782040, +-0.865013843109272870, -0.864988754628229000, -0.864963663984713360, -0.864938571178788470, -0.864913476210517170, -0.864888379079962190, -0.864863279787186360, -0.864838178332252180, +-0.864813074715222170, -0.864787968936159950, -0.864762860995127780, -0.864737750892188520, -0.864712638627404770, -0.864687524200839500, -0.864662407612554970, -0.864637288862614820, +-0.864612167951081420, -0.864587044878017740, -0.864561919643486390, -0.864536792247550200, -0.864511662690272020, -0.864486530971714680, -0.864461397091941030, -0.864436261051014010, +-0.864411122848995680, -0.864385982485950110, -0.864360839961939580, -0.864335695277026920, -0.864310548431275080, -0.864285399424746360, -0.864260248257504580, -0.864235094929612260, +-0.864209939441132110, -0.864184781792127210, -0.864159621982660280, -0.864134460012794370, -0.864109295882592220, -0.864084129592116890, -0.864058961141431210, -0.864033790530597700, +-0.864008617759680080, -0.863983442828741070, -0.863958265737843400, -0.863933086487050030, -0.863907905076423900, -0.863882721506027630, -0.863857535775924950, -0.863832347886178460, +-0.863807157836851140, -0.863781965628005910, -0.863756771259705740, -0.863731574732013560, -0.863706376044992560, -0.863681175198705580, -0.863655972193215330, -0.863630767028585430, +-0.863605559704878620, -0.863580350222158070, -0.863555138580486490, -0.863529924779927180, -0.863504708820542530, -0.863479490702396490, -0.863454270425551900, -0.863429047990071470, +-0.863403823396018510, -0.863378596643455950, -0.863353367732446970, -0.863328136663054520, -0.863302903435341770, -0.863277668049371230, -0.863252430505207060, -0.863227190802911770, +-0.863201948942548420, -0.863176704924180300, -0.863151458747870470, -0.863126210413681430, -0.863100959921677350, -0.863075707271920840, -0.863050452464475200, -0.863025195499403260, +-0.862999936376768420, -0.862974675096633730, -0.862949411659062360, -0.862924146064117490, -0.862898878311862180, -0.862873608402359270, -0.862848336335672710, -0.862823062111865440, +-0.862797785731000410, -0.862772507193140910, -0.862747226498349780, -0.862721943646690970, -0.862696658638227310, -0.862671371473022090, -0.862646082151138360, -0.862620790672639410, +-0.862595497037588530, -0.862570201246048880, -0.862544903298083750, -0.862519603193756310, -0.862494300933129510, -0.862468996516267290, -0.862443689943232620, -0.862418381214088760, +-0.862393070328899000, -0.862367757287725970, -0.862342442090634040, -0.862317124737686070, -0.862291805228945330, -0.862266483564474990, -0.862241159744338460, -0.862215833768599000, +-0.862190505637319910, -0.862165175350564690, -0.862139842908396400, -0.862114508310878210, -0.862089171558074070, -0.862063832650047050, -0.862038491586860410, -0.862013148368577560, +-0.861987802995261900, -0.861962455466976250, -0.861937105783784910, -0.861911753945750810, -0.861886399952937250, -0.861861043805407730, -0.861835685503225650, -0.861810325046454380, +-0.861784962435157230, -0.861759597669397690, -0.861734230749238720, -0.861708861674744590, -0.861683490445978250, -0.861658117063003330, -0.861632741525882980, -0.861607363834680950, +-0.861581983989459840, -0.861556601990284390, -0.861531217837217420, -0.861505831530322340, -0.861480443069662760, -0.861455052455301960, -0.861429659687303560, -0.861404264765731060, +-0.861378867690647860, -0.861353468462117130, -0.861328067080203040, -0.861302663544968870, -0.861277257856478020, -0.861251850014794100, -0.861226440019980500, -0.861201027872100290, +-0.861175613571218080, -0.861150197117396710, -0.861124778510699910, -0.861099357751191170, -0.861073934838934020, -0.861048509773992050, -0.861023082556428790, -0.860997653186307830, +-0.860972221663692690, -0.860946787988646540, -0.860921352161234000, -0.860895914181518010, -0.860870474049562180, -0.860845031765430260, -0.860819587329185180, -0.860794140740891670, +-0.860768692000612900, -0.860743241108412270, -0.860717788064353510, -0.860692332868500330, -0.860666875520916360, -0.860641416021665220, -0.860615954370810510, -0.860590490568415860, +-0.860565024614544540, -0.860539556509261170, -0.860514086252628820, -0.860488613844711310, -0.860463139285572280, -0.860437662575275430, -0.860412183713883950, -0.860386702701462450, +-0.860361219538074210, -0.860335734223782840, -0.860310246758652200, -0.860284757142745990, -0.860259265376127850, -0.860233771458861480, -0.860208275391010750, -0.860182777172638800, +-0.860157276803810490, -0.860131774284588870, -0.860106269615037890, -0.860080762795221280, -0.860055253825202650, -0.860029742705045510, -0.860004229434814470, -0.859978714014572820, +-0.859953196444384280, -0.859927676724312920, -0.859902154854422340, -0.859876630834776280, -0.859851104665438680, -0.859825576346473390, -0.859800045877943670, -0.859774513259914270, +-0.859748978492448580, -0.859723441575610540, -0.859697902509463760, -0.859672361294072320, -0.859646817929499480, -0.859621272415809990, -0.859595724753067450, -0.859570174941335470, +-0.859544622980678130, -0.859519068871159250, -0.859493512612842680, -0.859467954205792360, -0.859442393650072020, -0.859416830945745840, -0.859391266092877080, -0.859365699091530600, +-0.859340129941769890, -0.859314558643658800, -0.859288985197261380, -0.859263409602641030, -0.859237831859862580, -0.859212251968989540, -0.859186669930085970, -0.859161085743215590, +-0.859135499408442580, -0.859109910925830890, -0.859084320295444240, -0.859058727517346910, -0.859033132591602740, -0.859007535518275240, -0.858981936297429470, -0.858956334929128820, +-0.858930731413437230, -0.858905125750419000, -0.858879517940137730, -0.858853907982657370, -0.858828295878042660, -0.858802681626357200, -0.858777065227665060, -0.858751446682030180, +-0.858725825989516740, -0.858700203150188690, -0.858674578164110190, -0.858648951031345310, -0.858623321751957440, -0.858597690326011850, -0.858572056753571950, -0.858546421034701910, +-0.858520783169465900, -0.858495143157927850, -0.858469501000151510, -0.858443856696201930, -0.858418210246142620, -0.858392561650037860, -0.858366910907951700, -0.858341258019948210, +-0.858315602986091550, -0.858289945806445910, -0.858264286481075440, -0.858238625010043780, -0.858212961393416070, -0.858187295631255840, -0.858161627723627470, -0.858135957670595030, +-0.858110285472222570, -0.858084611128574040, -0.858058934639714500, -0.858033256005707570, -0.858007575226617410, -0.857981892302508430, -0.857956207233444680, -0.857930520019490330, +-0.857904830660709770, -0.857879139157167180, -0.857853445508926620, -0.857827749716052130, -0.857802051778608580, -0.857776351696660000, -0.857750649470270470, -0.857724945099504370, +-0.857699238584425430, -0.857673529925098930, -0.857647819121588490, -0.857622106173958510, -0.857596391082273260, -0.857570673846597130, -0.857544954466994300, -0.857519232943528940, +-0.857493509276265660, -0.857467783465268530, -0.857442055510601490, -0.857416325412329820, -0.857390593170517250, -0.857364858785228280, -0.857339122256527200, -0.857313383584478170, +-0.857287642769145370, -0.857261899810593750, -0.857236154708887480, -0.857210407464090830, -0.857184658076268200, -0.857158906545483880, -0.857133152871802250, -0.857107397055287820, +-0.857081639096004880, -0.857055878994017360, -0.857030116749390560, -0.857004352362188530, -0.856978585832475660, -0.856952817160316240, -0.856927046345774770, -0.856901273388915310, +-0.856875498289803140, -0.856849721048502100, -0.856823941665076800, -0.856798160139591650, -0.856772376472111130, -0.856746590662699650, -0.856720802711421700, -0.856695012618341800, +-0.856669220383523890, -0.856643426007033360, -0.856617629488934160, -0.856591830829291020, -0.856566030028168330, -0.856540227085630490, -0.856514422001741660, -0.856488614776567130, +-0.856462805410171170, -0.856436993902618180, -0.856411180253972670, -0.856385364464299250, -0.856359546533662420, -0.856333726462126690, -0.856307904249756670, -0.856282079896616980, +-0.856256253402771450, -0.856230424768285920, -0.856204593993224240, -0.856178761077651010, -0.856152926021630960, -0.856127088825228140, -0.856101249488508080, -0.856075408011534810, +-0.856049564394373070, -0.856023718637087370, -0.855997870739742430, -0.855972020702402860, -0.855946168525133170, -0.855920314207998080, -0.855894457751062210, -0.855868599154389730, +-0.855842738418046150, -0.855816875542095850, -0.855791010526603220, -0.855765143371633120, -0.855739274077250260, -0.855713402643518580, -0.855687529070504050, -0.855661653358270600, +-0.855635775506882970, -0.855609895516405980, -0.855584013386904150, -0.855558129118442310, -0.855532242711085190, -0.855506354164897510, -0.855480463479943440, -0.855454570656288720, +-0.855428675693997500, -0.855402778593134630, -0.855376879353764720, -0.855350977975952720, -0.855325074459762800, -0.855299168805260690, -0.855273261012510560, -0.855247351081577340, +-0.855221439012525670, -0.855195524805420490, -0.855169608460326520, -0.855143689977308500, -0.855117769356431250, -0.855091846597759050, -0.855065921701357760, -0.855039994667291640, +-0.855014065495625530, -0.854988134186424280, -0.854962200739752710, -0.854936265155675110, -0.854910327434257430, -0.854884387575563840, -0.854858445579659290, -0.854832501446608610, +-0.854806555176476750, -0.854780606769328430, -0.854754656225228620, -0.854728703544242130, -0.854702748726433930, -0.854676791771868390, -0.854650832680611370, -0.854624871452727140, +-0.854598908088280870, -0.854572942587337290, -0.854546974949960900, -0.854521005176217540, -0.854495033266171600, -0.854469059219888140, -0.854443083037431990, -0.854417104718868110, +-0.854391124264261560, -0.854365141673677160, -0.854339156947179880, -0.854313170084834760, -0.854287181086706200, -0.854261189952860160, -0.854235196683361230, -0.854209201278274160, +-0.854183203737664210, -0.854157204061596230, -0.854131202250134720, -0.854105198303345750, -0.854079192221293690, -0.854053184004043730, -0.854027173651660700, -0.854001161164209880, +-0.853975146541756100, -0.853949129784364440, -0.853923110892099930, -0.853897089865027210, -0.853871066703212220, -0.853845041406719570, -0.853819013975614330, -0.853792984409961540, +-0.853766952709826280, -0.853740918875273260, -0.853714882906368320, -0.853688844803176190, -0.853662804565761930, -0.853636762194190600, -0.853610717688527480, -0.853584671048837510, +-0.853558622275185860, -0.853532571367637720, -0.853506518326257680, -0.853480463151111700, -0.853454405842264730, -0.853428346399781600, -0.853402284823727600, -0.853376221114168000, +-0.853350155271167310, -0.853324087294791700, -0.853298017185105890, -0.853271944942175060, -0.853245870566064380, -0.853219794056838900, -0.853193715414564010, -0.853167634639304890, +-0.853141551731126600, -0.853115466690094530, -0.853089379516273280, -0.853063290209729040, -0.853037198770526530, -0.853011105198731020, -0.852985009494407810, -0.852958911657621610, +-0.852932811688438600, -0.852906709586923490, -0.852880605353141700, -0.852854498987158370, -0.852828390489038690, -0.852802279858848160, -0.852776167096651940, -0.852750052202515210, +-0.852723935176503360, -0.852697816018681220, -0.852671694729115080, -0.852645571307869670, -0.852619445755010250, -0.852593318070602350, -0.852567188254711010, -0.852541056307401290, +-0.852514922228739480, -0.852488786018790300, -0.852462647677619150, -0.852436507205291400, -0.852410364601872360, -0.852384219867427410, -0.852358073002021930, -0.852331924005721220, +-0.852305772878590220, -0.852279619620695320, -0.852253464232101350, -0.852227306712873720, -0.852201147063077810, -0.852174985282779130, -0.852148821372042400, -0.852122655330934120, +-0.852096487159519240, -0.852070316857863050, -0.852044144426031160, -0.852017969864088840, -0.851991793172101610, -0.851965614350134960, -0.851939433398254290, -0.851913250316524430, +-0.851887065105012000, -0.851860877763781940, -0.851834688292899660, -0.851808496692430640, -0.851782302962440400, -0.851756107102993880, -0.851729909114157690, -0.851703708995996570, +-0.851677506748576230, -0.851651302371962180, -0.851625095866219820, -0.851598887231414750, -0.851572676467612480, -0.851546463574878510, -0.851520248553278350, -0.851494031402877050, +-0.851467812123741230, -0.851441590715935840, -0.851415367179526480, -0.851389141514578780, -0.851362913721157690, -0.851336683799329700, -0.851310451749160090, -0.851284217570714370, +-0.851257981264058050, -0.851231742829256840, -0.851205502266376260, -0.851179259575481910, -0.851153014756639400, -0.851126767809914360, -0.851100518735371960, -0.851074267533078690, +-0.851048014203099720, -0.851021758745500790, -0.850995501160347390, -0.850969241447705360, -0.850942979607639650, -0.850916715640216980, -0.850890449545502530, -0.850864181323562010, +-0.850837910974460930, -0.850811638498265130, -0.850785363895040230, -0.850759087164851930, -0.850732808307765880, -0.850706527323847440, -0.850680244213163020, -0.850653958975778110, +-0.850627671611758230, -0.850601382121169090, -0.850575090504076650, -0.850548796760545960, -0.850522500890643740, -0.850496202894435280, -0.850469902771986310, -0.850443600523362540, +-0.850417296148629820, -0.850390989647853870, -0.850364681021100410, -0.850338370268435280, -0.850312057389923660, -0.850285742385632480, -0.850259425255626920, -0.850233105999972700, +-0.850206784618735890, -0.850180461111981980, -0.850154135479776470, -0.850127807722186210, -0.850101477839276250, -0.850075145831112770, -0.850048811697761250, -0.850022475439287880, +-0.849996137055758160, -0.849969796547238250, -0.849943453913793780, -0.849917109155490570, -0.849890762272394240, -0.849864413264571410, -0.849838062132087570, -0.849811708875008680, +-0.849785353493400450, -0.849758995987328290, -0.849732636356859140, -0.849706274602058500, -0.849679910722992090, -0.849653544719725870, -0.849627176592325890, -0.849600806340857880, +-0.849574433965387900, -0.849548059465981780, -0.849521682842705570, -0.849495304095624680, -0.849468923224805940, -0.849442540230314960, -0.849416155112217570, -0.849389767870579850, +-0.849363378505467730, -0.849336987016946600, -0.849310593405083520, -0.849284197669944010, -0.849257799811593990, -0.849231399830099430, -0.849204997725526380, -0.849178593497940780, +-0.849152187147408810, -0.849125778673996300, -0.849099368077768870, -0.849072955358793570, -0.849046540517135790, -0.849020123552861720, -0.848993704466037280, -0.848967283256728660, +-0.848940859925001230, -0.848914434470922300, -0.848888006894557120, -0.848861577195971990, -0.848835145375232970, -0.848808711432405990, -0.848782275367557350, -0.848755837180752870, +-0.848729396872058950, -0.848702954441540980, -0.848676509889266130, -0.848650063215300010, -0.848623614419708680, -0.848597163502558320, -0.848570710463915080, -0.848544255303844590, +-0.848517798022413890, -0.848491338619688840, -0.848464877095735260, -0.848438413450619660, -0.848411947684407860, -0.848385479797166280, -0.848359009788961060, -0.848332537659858170, +-0.848306063409923980, -0.848279587039224240, -0.848253108547825980, -0.848226627935794950, -0.848200145203197310, -0.848173660350099330, -0.848147173376566640, -0.848120684282666630, +-0.848094193068464790, -0.848067699734027620, -0.848041204279421090, -0.848014706704711570, -0.847988207009965240, -0.847961705195248490, -0.847935201260627380, -0.847908695206168290, +-0.847882187031937070, -0.847855676738000770, -0.847829164324425340, -0.847802649791276950, -0.847776133138621880, -0.847749614366526070, -0.847723093475056700, -0.847696570464279710, +-0.847670045334261160, -0.847643518085067550, -0.847616988716765050, -0.847590457229420170, -0.847563923623099070, -0.847537387897868260, -0.847510850053793900, -0.847484310090942050, +-0.847457768009379770, -0.847431223809173130, -0.847404677490388390, -0.847378129053091960, -0.847351578497350320, -0.847325025823229220, -0.847298471030795920, -0.847271914120116490, +-0.847245355091257310, -0.847218793944284790, -0.847192230679265190, -0.847165665296265020, -0.847139097795350790, -0.847112528176588660, -0.847085956440044920, -0.847059382585786610, +-0.847032806613879920, -0.847006228524391220, -0.846979648317386810, -0.846953065992933410, -0.846926481551096840, -0.846899894991944620, -0.846873306315542580, -0.846846715521957340, +-0.846820122611255170, -0.846793527583502790, -0.846766930438766610, -0.846740331177113110, -0.846713729798608710, -0.846687126303319990, -0.846660520691313030, -0.846633912962655220, +-0.846607303117412720, -0.846580691155651820, -0.846554077077439240, -0.846527460882841030, -0.846500842571924710, -0.846474222144756210, -0.846447599601402030, -0.846420974941929030, +-0.846394348166403470, -0.846367719274892070, -0.846341088267461460, -0.846314455144178020, -0.846287819905108480, -0.846261182550319010, -0.846234543079876890, -0.846207901493848500, +-0.846181257792300360, -0.846154611975299060, -0.846127964042910800, -0.846101313995203050, -0.846074661832242110, -0.846048007554094370, -0.846021351160826660, -0.845994692652505710, +-0.845968032029197900, -0.845941369290969970, -0.845914704437888740, -0.845888037470020620, -0.845861368387431980, -0.845834697190190440, -0.845808023878362070, -0.845781348452013690, +-0.845754670911212040, -0.845727991256023600, -0.845701309486514670, -0.845674625602753080, -0.845647939604804780, -0.845621251492736700, -0.845594561266615470, -0.845567868926507930, +-0.845541174472480560, -0.845514477904600440, -0.845487779222933940, -0.845461078427547590, -0.845434375518509080, -0.845407670495884610, -0.845380963359740890, -0.845354254110144750, +-0.845327542747163040, -0.845300829270862030, -0.845274113681309450, -0.845247395978571460, -0.845220676162715010, -0.845193954233806940, -0.845167230191913980, -0.845140504037102840, +-0.845113775769440580, -0.845087045388993820, -0.845060312895828950, -0.845033578290013800, -0.845006841571614650, -0.844980102740698460, -0.844953361797331940, -0.844926618741582150, +-0.844899873573515150, -0.844873126293199110, -0.844846376900700190, -0.844819625396085350, -0.844792871779421420, -0.844766116050775340, -0.844739358210213950, -0.844712598257804090, +-0.844685836193612820, -0.844659072017706960, -0.844632305730152910, -0.844605537331018620, -0.844578766820370470, -0.844551994198275420, -0.844525219464800300, -0.844498442620011720, +-0.844471663663977520, -0.844444882596764200, -0.844418099418438590, -0.844391314129067760, -0.844364526728718650, -0.844337737217458200, -0.844310945595353470, -0.844284151862471300, +-0.844257356018878860, -0.844230558064642420, -0.844203757999830160, -0.844176955824508470, -0.844150151538744400, -0.844123345142604900, -0.844096536636157020, -0.844069726019467390, +-0.844042913292603950, -0.844016098455633190, -0.843989281508622180, -0.843962462451637970, -0.843935641284747630, -0.843908818008018090, -0.843881992621516640, -0.843855165125310110, +-0.843828335519465230, -0.843801503804050060, -0.843774669979130980, -0.843747834044775270, -0.843720996001050110, -0.843694155848022320, -0.843667313585758750, -0.843640469214327230, +-0.843613622733794700, -0.843586774144228000, -0.843559923445694420, -0.843533070638261000, -0.843506215721994910, -0.843479358696963330, -0.843452499563233320, -0.843425638320871580, +-0.843398774969946310, -0.843371909510523990, -0.843345041942671900, -0.843318172266457220, -0.843291300481947110, -0.843264426589208300, -0.843237550588308960, -0.843210672479315580, +-0.843183792262295670, -0.843156909937316180, -0.843130025504444490, -0.843103138963747670, -0.843076250315292990, -0.843049359559147730, -0.843022466695379060, -0.842995571724053820, +-0.842968674645240060, -0.842941775459004620, -0.842914874165414770, -0.842887970764537700, -0.842861065256440220, -0.842834157641190520, -0.842807247918855530, -0.842780336089502310, +-0.842753422153198370, -0.842726506110010760, -0.842699587960006990, -0.842672667703254110, -0.842645745339819730, -0.842618820869770910, -0.842591894293174490, -0.842564965610098860, +-0.842538034820610850, -0.842511101924777740, -0.842484166922666920, -0.842457229814345570, -0.842430290599880730, -0.842403349279340690, -0.842376405852792160, -0.842349460320302780, +-0.842322512681939580, -0.842295562937770190, -0.842268611087861880, -0.842241657132282050, -0.842214701071098080, -0.842187742904376920, -0.842160782632186740, -0.842133820254594710, +-0.842106855771668110, -0.842079889183474430, -0.842052920490080960, -0.842025949691554750, -0.841998976787964090, -0.841972001779376030, -0.841945024665857970, -0.841918045447477280, +-0.841891064124301590, -0.841864080696398060, -0.841837095163834540, -0.841810107526678180, -0.841783117784996040, -0.841756125938856630, -0.841729131988326880, -0.841702135933474320, +-0.841675137774366420, -0.841648137511070700, -0.841621135143654220, -0.841594130672185250, -0.841567124096730960, -0.841540115417358960, -0.841513104634136640, -0.841486091747131510, +-0.841459076756411180, -0.841432059662043150, -0.841405040464094920, -0.841378019162633660, -0.841350995757727870, -0.841323970249444610, -0.841296942637851260, -0.841269912923015670, +-0.841242881105005340, -0.841215847183887750, -0.841188811159730100, -0.841161773032600870, -0.841134732802567230, -0.841107690469696690, -0.841080646034056970, -0.841053599495715680, +-0.841026550854740430, -0.840999500111198620, -0.840972447265157740, -0.840945392316686190, -0.840918335265851140, -0.840891276112720190, -0.840864214857361180, -0.840837151499841510, +-0.840810086040229000, -0.840783018478590830, -0.840755948814995600, -0.840728877049510490, -0.840701803182203110, -0.840674727213141290, -0.840647649142392650, -0.840620568970024910, +-0.840593486696105780, -0.840566402320702790, -0.840539315843883420, -0.840512227265716280, -0.840485136586268440, -0.840458043805607850, -0.840430948923802210, -0.840403851940919040, +-0.840376752857025840, -0.840349651672191330, -0.840322548386482570, -0.840295442999967500, -0.840268335512713740, -0.840241225924789230, -0.840214114236261580, -0.840187000447198740, +-0.840159884557668320, -0.840132766567737720, -0.840105646477475650, -0.840078524286949620, -0.840051399996227130, -0.840024273605376240, -0.839997145114464550, -0.839970014523560020, +-0.839942881832730030, -0.839915747042043300, -0.839888610151567240, -0.839861471161369670, -0.839834330071518310, -0.839807186882081220, -0.839780041593126140, -0.839752894204720880, +-0.839725744716932950, -0.839698593129831190, -0.839671439443482880, -0.839644283657956070, -0.839617125773318480, -0.839589965789638070, -0.839562803706982770, -0.839535639525419990, +-0.839508473245018540, -0.839481304865845930, -0.839454134387970120, -0.839426961811458930, -0.839399787136380300, -0.839372610362802200, -0.839345431490792660, -0.839318250520418970, +-0.839291067451750190, -0.839263882284853710, -0.839236695019797590, -0.839209505656649650, -0.839182314195477950, -0.839155120636350560, -0.839127924979334750, -0.839100727224499690, +-0.839073527371912760, -0.839046325421642040, -0.839019121373755560, -0.838991915228321280, -0.838964706985407150, -0.838937496645081220, -0.838910284207411650, -0.838883069672465840, +-0.838855853040312850, -0.838828634311020170, -0.838801413484655980, -0.838774190561288210, -0.838746965540985050, -0.838719738423813870, -0.838692509209843840, -0.838665277899142580, +-0.838638044491778150, -0.838610808987818590, -0.838583571387331970, -0.838556331690386460, -0.838529089897050110, -0.838501846007391080, -0.838474600021476890, -0.838447351939376690, +-0.838420101761158220, -0.838392849486889410, -0.838365595116638440, -0.838338338650473470, -0.838311080088462780, -0.838283819430673760, -0.838256556677175800, -0.838229291828036290, +-0.838202024883323740, -0.838174755843105970, -0.838147484707451370, -0.838120211476428120, -0.838092936150104270, -0.838065658728547660, -0.838038379211827330, -0.838011097600011020, +-0.837983813893167010, -0.837956528091363450, -0.837929240194668630, -0.837901950203150610, -0.837874658116877340, -0.837847363935917850, -0.837820067660339900, -0.837792769290211960, +-0.837765468825601880, -0.837738166266578270, -0.837710861613209180, -0.837683554865563010, -0.837656246023707360, -0.837628935087711630, -0.837601622057643550, -0.837574306933571490, +-0.837546989715563630, -0.837519670403688240, -0.837492348998013720, -0.837465025498607800, -0.837437699905539850, -0.837410372218877600, -0.837383042438689440, -0.837355710565043650, +-0.837328376598008630, -0.837301040537652640, -0.837273702384044080, -0.837246362137251340, -0.837219019797342030, -0.837191675364385770, -0.837164328838450380, -0.837136980219604030, +-0.837109629507915340, -0.837082276703452480, -0.837054921806283490, -0.837027564816477660, -0.837000205734102940, -0.836972844559227710, -0.836945481291920370, -0.836918115932249300, +-0.836890748480283000, -0.836863378936089750, -0.836836007299738170, -0.836808633571295980, -0.836781257750832670, -0.836753879838416310, -0.836726499834115180, -0.836699117737997880, +-0.836671733550132690, -0.836644347270588230, -0.836616958899432440, -0.836589568436734710, -0.836562175882562990, -0.836534781236985880, -0.836507384500071890, -0.836479985671889300, +-0.836452584752506830, -0.836425181741992870, -0.836397776640415590, -0.836370369447844150, -0.836342960164346950, -0.836315548789992260, -0.836288135324848800, -0.836260719768984860, +-0.836233302122469160, -0.836205882385369750, -0.836178460557756130, -0.836151036639696370, -0.836123610631259060, -0.836096182532512610, -0.836068752343525730, -0.836041320064367040, +-0.836013885695105040, -0.835986449235807780, -0.835959010686544880, -0.835931570047384500, -0.835904127318395250, -0.835876682499645530, -0.835849235591204160, -0.835821786593139770, +-0.835794335505520400, -0.835766882328415670, -0.835739427061893750, -0.835711969706023240, -0.835684510260872760, -0.835657048726511140, -0.835629585103006780, -0.835602119390428500, +-0.835574651588844920, -0.835547181698324200, -0.835519709718935970, -0.835492235650748590, -0.835464759493830480, -0.835437281248250560, -0.835409800914077460, -0.835382318491379340, +-0.835354833980225920, -0.835327347380685370, -0.835299858692826520, -0.835272367916717990, -0.835244875052428500, -0.835217380100026880, -0.835189883059581750, -0.835162383931162040, +-0.835134882714835710, -0.835107379410672810, -0.835079874018741400, -0.835052366539110300, -0.835024856971848250, -0.834997345317024080, -0.834969831574706610, -0.834942315744964030, +-0.834914797827866150, -0.834887277823481270, -0.834859755731878210, -0.834832231553125800, -0.834804705287292670, -0.834777176934447970, -0.834749646494660210, -0.834722113967997890, +-0.834694579354530730, -0.834667042654327120, -0.834639503867455890, -0.834611962993985990, -0.834584420033986140, -0.834556874987525180, -0.834529327854671600, -0.834501778635495130, +-0.834474227330064270, -0.834446673938447850, -0.834419118460714700, -0.834391560896933780, -0.834364001247174030, -0.834336439511504270, -0.834308875689992790, -0.834281309782709650, +-0.834253741789723340, -0.834226171711102580, -0.834198599546916440, -0.834171025297233750, -0.834143448962123560, -0.834115870541654260, -0.834088290035895690, -0.834060707444916450, +-0.834033122768785380, -0.834005536007571660, -0.833977947161343990, -0.833950356230171440, -0.833922763214123060, -0.833895168113267690, -0.833867570927673940, -0.833839971657411750, +-0.833812370302549730, -0.833784766863156720, -0.833757161339301780, -0.833729553731053840, -0.833701944038481630, -0.833674332261655100, -0.833646718400642640, -0.833619102455513410, +-0.833591484426336460, -0.833563864313180860, -0.833536242116115430, -0.833508617835209460, -0.833480991470532010, -0.833453363022151560, -0.833425732490138180, -0.833398099874560480, +-0.833370465175487520, -0.833342828392988340, -0.833315189527132240, -0.833287548577987590, -0.833259905545624570, -0.833232260430111780, -0.833204613231518290, -0.833176963949913360, +-0.833149312585365950, -0.833121659137945230, -0.833094003607720460, -0.833066345994760590, -0.833038686299134470, -0.833011024520912020, -0.832983360660162100, -0.832955694716953630, +-0.832928026691356130, -0.832900356583438420, -0.832872684393269890, -0.832845010120919050, -0.832817333766456280, -0.832789655329950200, -0.832761974811469850, -0.832734292211084750, +-0.832706607528863720, -0.832678920764876370, -0.832651231919191550, -0.832623540991878190, -0.832595847983006570, -0.832568152892645190, -0.832540455720863550, -0.832512756467730710, +-0.832485055133316050, -0.832457351717688640, -0.832429646220917420, -0.832401938643072550, -0.832374228984222860, -0.832346517244437640, -0.832318803423786060, -0.832291087522337490, +-0.832263369540161220, -0.832235649477326530, -0.832207927333902700, -0.832180203109958550, -0.832152476805564370, -0.832124748420788980, -0.832097017955701790, -0.832069285410372060, +-0.832041550784869080, -0.832013814079261670, -0.831986075293620340, -0.831958334428013700, -0.831930591482511360, -0.831902846457182490, -0.831875099352096470, -0.831847350167322700, +-0.831819598902930560, -0.831791845558989440, -0.831764090135568180, -0.831736332632737270, -0.831708573050565450, -0.831680811389122200, -0.831653047648476920, -0.831625281828699100, +-0.831597513929857480, -0.831569743952022660, -0.831541971895263470, -0.831514197759649300, -0.831486421545249650, -0.831458643252133920, -0.831430862880371600, -0.831403080430032190, +-0.831375295901184970, -0.831347509293899110, -0.831319720608244880, -0.831291929844291460, -0.831264137002108110, -0.831236342081764450, -0.831208545083329970, -0.831180746006874080, +-0.831152944852465940, -0.831125141620175810, -0.831097336310072880, -0.831069528922226630, -0.831041719456706460, -0.831013907913582090, -0.830986094292922920, -0.830958278594798540, +-0.830930460819277910, -0.830902640966431630, -0.830874819036328870, -0.830846995029038910, -0.830819168944631480, -0.830791340783176180, -0.830763510544742510, -0.830735678229399640, +-0.830707843837217960, -0.830680007368266750, -0.830652168822615500, -0.830624328200333830, -0.830596485501491340, -0.830568640726157550, -0.830540793874402270, -0.830512944946295020, +-0.830485093941904840, -0.830457240861302460, -0.830429385704556930, -0.830401528471737980, -0.830373669162915220, -0.830345807778158250, -0.830317944317536250, -0.830290078781119930, +-0.830262211168978360, -0.830234341481181250, -0.830206469717798430, -0.830178595878899310, -0.830150719964553700, -0.830122841974831330, -0.830094961909801920, -0.830067079769534530, +-0.830039195554099880, -0.830011309263567370, -0.829983420898006470, -0.829955530457487160, -0.829927637942078910, -0.829899743351851020, -0.829871846686874410, -0.829843947947218050, +-0.829816047132951980, -0.829788144244145710, -0.829760239280869060, -0.829732332243191760, -0.829704423131183750, -0.829676511944914650, -0.829648598684453730, -0.829620683349871820, +-0.829592765941238210, -0.829564846458622720, -0.829536924902095070, -0.829509001271725110, -0.829481075567582660, -0.829453147789737000, -0.829425217938258960, -0.829397286013217940, +-0.829369352014683650, -0.829341415942726030, -0.829313477797414820, -0.829285537578819950, -0.829257595287011260, -0.829229650922058030, -0.829201704484031190, -0.829173755973000140, +-0.829145805389034600, -0.829117852732204620, -0.829089898002579930, -0.829061941200230580, -0.829033982325225850, -0.829006021377636680, -0.828978058357532350, -0.828950093264983030, +-0.828922126100058440, -0.828894156862828520, -0.828866185553363110, -0.828838212171732370, -0.828810236718006020, -0.828782259192253680, -0.828754279594546060, -0.828726297924952780, +-0.828698314183543780, -0.828670328370389010, -0.828642340485558400, -0.828614350529121470, -0.828586358501149150, -0.828558364401710930, -0.828530368230876780, -0.828502369988716740, +-0.828474369675300750, -0.828446367290698870, -0.828418362834981050, -0.828390356308217330, -0.828362347710477120, -0.828334337041831680, -0.828306324302350290, -0.828278309492103240, +-0.828250292611160340, -0.828222273659591670, -0.828194252637466820, -0.828166229544856860, -0.828138204381831280, -0.828110177148460250, -0.828082147844813820, -0.828054116470961940, +-0.828026083026974780, -0.827998047512922390, -0.827970009928874930, -0.827941970274901910, -0.827913928551074490, -0.827885884757462280, -0.827857838894135330, -0.827829790961163710, +-0.827801740958617690, -0.827773688886567330, -0.827745634745082230, -0.827717578534233560, -0.827689520254090930, -0.827661459904724510, -0.827633397486204460, -0.827605332998600840, +-0.827577266441983930, -0.827549197816423890, -0.827521127121990330, -0.827493054358754420, -0.827464979526785880, -0.827436902626154880, -0.827408823656931690, -0.827380742619186370, +-0.827352659512989200, -0.827324574338409890, -0.827296487095519730, -0.827268397784388210, -0.827240306405085830, -0.827212212957682660, -0.827184117442248850, -0.827156019858854900, +-0.827127920207570750, -0.827099818488466370, -0.827071714701613000, -0.827043608847080280, -0.827015500924938580, -0.826987390935258080, -0.826959278878109050, -0.826931164753561990, +-0.826903048561686390, -0.826874930302553660, -0.826846809976233720, -0.826818687582796640, -0.826790563122312920, -0.826762436594852710, -0.826734308000486420, -0.826706177339284420, +-0.826678044611317000, -0.826649909816653870, -0.826621772955366540, -0.826593634027524730, -0.826565493033198930, -0.826537349972459310, -0.826509204845376270, -0.826481057652019850, +-0.826452908392461220, -0.826424757066770320, -0.826396603675017440, -0.826368448217273180, -0.826340290693607700, -0.826312131104091630, -0.826283969448795120, -0.826255805727788780, +-0.826227639941142340, -0.826199472088927300, -0.826171302171213600, -0.826143130188071620, -0.826114956139571870, -0.826086780025784730, -0.826058601846780590, -0.826030421602629520, +-0.826002239293402770, -0.825974054919170530, -0.825945868480003180, -0.825917679975971100, -0.825889489407144790, -0.825861296773594770, -0.825833102075391510, -0.825804905312605090, +-0.825776706485306770, -0.825748505593566720, -0.825720302637455440, -0.825692097617043430, -0.825663890532401190, -0.825635681383599110, -0.825607470170707460, -0.825579256893797520, +-0.825551041552939460, -0.825522824148203880, -0.825494604679661180, -0.825466383147381970, -0.825438159551436850, -0.825409933891896210, -0.825381706168830330, -0.825353476382310710, +-0.825325244532407300, -0.825297010619190810, -0.825268774642731850, -0.825240536603100930, -0.825212296500368650, -0.825184054334605180, -0.825155810105882010, -0.825127563814269330, +-0.825099315459837720, -0.825071065042657930, -0.825042812562800320, -0.825014558020335850, -0.824986301415334910, -0.824958042747868100, -0.824929782018005820, -0.824901519225819560, +-0.824873254371379480, -0.824844987454756320, -0.824816718476020670, -0.824788447435243150, -0.824760174332494040, -0.824731899167845060, -0.824703621941366260, -0.824675342653128470, +-0.824647061303202310, -0.824618777891658490, -0.824590492418567740, -0.824562204884000670, -0.824533915288028220, -0.824505623630720330, -0.824477329912148950, -0.824449034132384350, +-0.824420736291497040, -0.824392436389557950, -0.824364134426637700, -0.824335830402807220, -0.824307524318136590, -0.824279216172697620, -0.824250905966560700, -0.824222593699796450, +-0.824194279372475690, -0.824165962984669380, -0.824137644536448000, -0.824109324027882620, -0.824081001459043390, -0.824052676830002050, -0.824024350140829200, -0.823996021391595330, +-0.823967690582371510, -0.823939357713228350, -0.823911022784236890, -0.823882685795467420, -0.823854346746991650, -0.823826005638879980, -0.823797662471203340, -0.823769317244032570, +-0.823740969957438510, -0.823712620611491970, -0.823684269206264030, -0.823655915741824730, -0.823627560218246240, -0.823599202635598830, -0.823570842993953330, -0.823542481293380810, +-0.823514117533952090, -0.823485751715738120, -0.823457383838809180, -0.823429013903237310, -0.823400641909092900, -0.823372267856446900, -0.823343891745370260, -0.823315513575933800, +-0.823287133348208690, -0.823258751062265650, -0.823230366718175730, -0.823201980316009440, -0.823173591855838720, -0.823145201337733940, -0.823116808761766180, -0.823088414128006370, +-0.823060017436525570, -0.823031618687394270, -0.823003217880684420, -0.822974815016466410, -0.822946410094811510, -0.822918003115790440, -0.822889594079474480, -0.822861182985934470, +-0.822832769835241560, -0.822804354627466710, -0.822775937362680400, -0.822747518040954810, -0.822719096662360430, -0.822690673226968320, -0.822662247734849420, -0.822633820186075000, +-0.822605390580716020, -0.822576958918843080, -0.822548525200528240, -0.822520089425842090, -0.822491651594855710, -0.822463211707640140, -0.822434769764266550, -0.822406325764806100, +-0.822377879709329850, -0.822349431597908300, -0.822320981430613720, -0.822292529207516720, -0.822264074928688360, -0.822235618594199910, -0.822207160204122320, -0.822178699758526750, +-0.822150237257484040, -0.822121772701066230, -0.822093306089344060, -0.822064837422388450, -0.822036366700270920, -0.822007893923062390, -0.821979419090834160, -0.821950942203657280, +-0.821922463261602680, -0.821893982264742310, -0.821865499213147110, -0.821837014106888030, -0.821808526946036460, -0.821780037730663550, -0.821751546460840700, -0.821723053136638290, +-0.821694557758128830, -0.821666060325383030, -0.821637560838471950, -0.821609059297467080, -0.821580555702439490, -0.821552050053460550, -0.821523542350601430, -0.821495032593933530, +-0.821466520783527550, -0.821438006919455790, -0.821409491001788950, -0.821380973030598320, -0.821352453005955390, -0.821323930927931210, -0.821295406796596850, -0.821266880612024350, +-0.821238352374284660, -0.821209822083449170, -0.821181289739589040, -0.821152755342775760, -0.821124218893080520, -0.821095680390574790, -0.821067139835329750, -0.821038597227416460, +-0.821010052566907180, -0.820981505853872750, -0.820952957088384560, -0.820924406270514000, -0.820895853400332330, -0.820867298477911180, -0.820838741503321150, -0.820810182476634840, +-0.820781621397922990, -0.820753058267257200, -0.820724493084708740, -0.820695925850349010, -0.820667356564249490, -0.820638785226481480, -0.820610211837116130, -0.820581636396225720, +-0.820553058903881190, -0.820524479360154050, -0.820495897765115670, -0.820467314118837550, -0.820438728421391210, -0.820410140672847450, -0.820381550873279020, -0.820352959022756510, +-0.820324365121351650, -0.820295769169135940, -0.820267171166180750, -0.820238571112557710, -0.820209969008338200, -0.820181364853593280, -0.820152758648395430, -0.820124150392815610, +-0.820095540086925530, -0.820066927730796590, -0.820038313324500280, -0.820009696868108210, -0.819981078361691430, -0.819952457805322330, -0.819923835199072190, -0.819895210543012510, +-0.819866583837214670, -0.819837955081750500, -0.819809324276691400, -0.819780691422108960, -0.819752056518074810, -0.819723419564659990, -0.819694780561937120, -0.819666139509977350, +-0.819637496408852200, -0.819608851258633360, -0.819580204059392250, -0.819551554811200230, -0.819522903514129820, -0.819494250168252170, -0.819465594773638890, -0.819436937330361600, +-0.819408277838492020, -0.819379616298101740, -0.819350952709262390, -0.819322287072045690, -0.819293619386522680, -0.819264949652766190, -0.819236277870847300, -0.819207604040837700, +-0.819178928162809130, -0.819150250236833190, -0.819121570262981710, -0.819092888241325760, -0.819064204171938040, -0.819035518054889940, -0.819006829890252970, -0.818978139678098960, +-0.818949447418499510, -0.818920753111526460, -0.818892056757251630, -0.818863358355746080, -0.818834657907082650, -0.818805955411332500, -0.818777250868567560, -0.818748544278859460, +-0.818719835642280010, -0.818691124958900950, -0.818662412228793660, -0.818633697452030740, -0.818604980628683590, -0.818576261758824030, -0.818547540842523790, -0.818518817879854700, +-0.818490092870888590, -0.818461365815697170, -0.818432636714351960, -0.818403905566925550, -0.818375172373489450, -0.818346437134115370, -0.818317699848875260, -0.818288960517840840, +-0.818260219141084040, -0.818231475718676160, -0.818202730250690120, -0.818173982737197210, -0.818145233178269480, -0.818116481573978540, -0.818087727924396440, -0.818058972229595010, +-0.818030214489646190, -0.818001454704621820, -0.817972692874593290, -0.817943928999633530, -0.817915163079813930, -0.817886395115206440, -0.817857625105882890, -0.817828853051915440, +-0.817800078953375250, -0.817771302810335390, -0.817742524622867230, -0.817713744391042830, -0.817684962114934020, -0.817656177794612750, -0.817627391430151170, -0.817598603021621020, +-0.817569812569094450, -0.817541020072642730, -0.817512225532339040, -0.817483428948254760, -0.817454630320461950, -0.817425829649032430, -0.817397026934038480, -0.817368222175551940, +-0.817339415373644300, -0.817310606528388610, -0.817281795639856480, -0.817252982708119860, -0.817224167733250680, -0.817195350715321120, -0.817166531654403230, -0.817137710550569050, +-0.817108887403889980, -0.817080062214439180, -0.817051234982288380, -0.817022405707509390, -0.816993574390174390, -0.816964741030355430, -0.816935905628124680, -0.816907068183553630, +-0.816878228696715450, -0.816849387167681630, -0.816820543596524340, -0.816791697983315750, -0.816762850328127900, -0.816734000631032960, -0.816705148892102990, -0.816676295111409600, +-0.816647439289026060, -0.816618581425023860, -0.816589721519475180, -0.816560859572452280, -0.816531995584027230, -0.816503129554272070, -0.816474261483258630, -0.816445391371060090, +-0.816416519217748050, -0.816387645023394780, -0.816358768788072340, -0.816329890511852900, -0.816301010194808830, -0.816272127837012200, -0.816243243438535270, -0.816214356999449770, +-0.816185468519828870, -0.816156577999744170, -0.816127685439268170, -0.816098790838472920, -0.816069894197430590, -0.816040995516213120, -0.816012094794893670, -0.815983192033543970, +-0.815954287232236290, -0.815925380391042900, -0.815896471510036080, -0.815867560589288000, -0.815838647628871150, -0.815809732628857590, -0.815780815589319140, -0.815751896510329200, +-0.815722975391959590, -0.815694052234282490, -0.815665127037370260, -0.815636199801295200, -0.815607270526129140, -0.815578339211945450, -0.815549405858815860, -0.815520470466812860, +-0.815491533036008520, -0.815462593566475440, -0.815433652058285880, -0.815404708511512140, -0.815375762926226710, -0.815346815302501300, -0.815317865640409420, -0.815288913940022790, +-0.815259960201414000, -0.815231004424655240, -0.815202046609818880, -0.815173086756977530, -0.815144124866202910, -0.815115160937568530, -0.815086194971146210, -0.815057226967008330, +-0.815028256925227510, -0.814999284845875920, -0.814970310729026260, -0.814941334574750710, -0.814912356383121320, -0.814883376154211690, -0.814854393888093440, -0.814825409584839290, +-0.814796423244521620, -0.814767434867212930, -0.814738444452985600, -0.814709452001911580, -0.814680457514064590, -0.814651460989516350, -0.814622462428339470, -0.814593461830606440, +-0.814564459196389870, -0.814535454525762040, -0.814506447818795550, -0.814477439075562910, -0.814448428296136280, -0.814419415480589050, -0.814390400628993260, -0.814361383741421530, +-0.814332364817946240, -0.814303343858640120, -0.814274320863575100, -0.814245295832824790, -0.814216268766461250, -0.814187239664556970, -0.814158208527184680, -0.814129175354416870, +-0.814100140146326030, -0.814071102902984900, -0.814042063624466070, -0.814013022310841490, -0.813983978962184880, -0.813954933578568300, -0.813925886160064450, -0.813896836706745840, +-0.813867785218685190, -0.813838731695954550, -0.813809676138627540, -0.813780618546776410, -0.813751558920473680, -0.813722497259792070, -0.813693433564804170, -0.813664367835582710, +-0.813635300072200420, -0.813606230274729780, -0.813577158443243080, -0.813548084577814020, -0.813519008678514680, -0.813489930745417980, -0.813460850778596310, -0.813431768778122510, +-0.813402684744069290, -0.813373598676508940, -0.813344510575515050, -0.813315420441159900, -0.813286328273516100, -0.813257234072656600, -0.813228137838654000, -0.813199039571581020, +-0.813169939271510490, -0.813140836938514580, -0.813111732572667000, -0.813082626174040150, -0.813053517742706840, -0.813024407278739590, -0.812995294782211440, -0.812966180253194890, +-0.812937063691762550, -0.812907945097987920, -0.812878824471943600, -0.812849701813702090, -0.812820577123336330, -0.812791450400919160, -0.812762321646523400, -0.812733190860221780, +-0.812704058042087120, -0.812674923192191920, -0.812645786310609910, -0.812616647397413350, -0.812587506452675300, -0.812558363476468370, -0.812529218468865610, -0.812500071429939190, +-0.812470922359763150, -0.812441771258409880, -0.812412618125952110, -0.812383462962462780, -0.812354305768014820, -0.812325146542681180, -0.812295985286534570, -0.812266821999648060, +-0.812237656682093910, -0.812208489333946180, -0.812179319955277260, -0.812150148546159970, -0.812120975106667250, -0.812091799636872170, -0.812062622136847100, -0.812033442606665990, +-0.812004261046401330, -0.811975077456125850, -0.811945891835912810, -0.811916704185835060, -0.811887514505965410, -0.811858322796377040, -0.811829129057143000, -0.811799933288335440, +-0.811770735490028650, -0.811741535662295010, -0.811712333805207460, -0.811683129918839170, -0.811653924003262970, -0.811624716058552020, -0.811595506084778820, -0.811566294082017300, +-0.811537080050340090, -0.811507863989820110, -0.811478645900530430, -0.811449425782544310, -0.811420203635934480, -0.811390979460774210, -0.811361753257135890, -0.811332525025093790, +-0.811303294764720410, -0.811274062476088690, -0.811244828159271790, -0.811215591814342880, -0.811186353441375130, -0.811157113040440800, -0.811127870611614290, -0.811098626154968080, +-0.811069379670575240, -0.811040131158509040, -0.811010880618842410, -0.810981628051648640, -0.810952373457000890, -0.810923116834971540, -0.810893858185635090, -0.810864597509063810, +-0.810835334805331100, -0.810806070074510110, -0.810776803316673900, -0.810747534531895630, -0.810718263720248130, -0.810688990881805350, -0.810659716016640220, -0.810630439124825690, +-0.810601160206435130, -0.810571879261541730, -0.810542596290218520, -0.810513311292538900, -0.810484024268575910, -0.810454735218402390, -0.810425444142092610, -0.810396151039719070, +-0.810366855911355270, -0.810337558757074360, -0.810308259576949520, -0.810278958371053460, -0.810249655139460570, -0.810220349882243450, -0.810191042599475610, -0.810161733291230090, +-0.810132421957580170, -0.810103108598599240, -0.810073793214360570, -0.810044475804937440, -0.810015156370402560, -0.809985834910830320, -0.809956511426293550, -0.809927185916865410, +-0.809897858382619300, -0.809868528823628590, -0.809839197239966560, -0.809809863631706040, -0.809780527998921310, -0.809751190341685300, -0.809721850660071300, -0.809692508954152790, +-0.809663165224002830, -0.809633819469695040, -0.809604471691302670, -0.809575121888898690, -0.809545770062557350, -0.809516416212351600, -0.809487060338354820, -0.809457702440640410, +-0.809428342519281640, -0.809398980574352110, -0.809369616605924550, -0.809340250614073550, -0.809310882598871850, -0.809281512560392930, -0.809252140498710300, -0.809222766413897340, +-0.809193390306027440, -0.809164012175173970, -0.809134632021410010, -0.809105249844810030, -0.809075865645446870, -0.809046479423394030, -0.809017091178725110, -0.808987700911513400, +-0.808958308621832380, -0.808928914309755110, -0.808899517975356090, -0.808870119618708250, -0.808840719239885100, -0.808811316838960240, -0.808781912416006940, -0.808752505971099040, +-0.808723097504309710, -0.808693687015712760, -0.808664274505381030, -0.808634859973389130, -0.808605443419810000, -0.808576024844717360, -0.808546604248184700, -0.808517181630285410, +-0.808487756991092650, -0.808458330330681150, -0.808428901649123730, -0.808399470946494000, -0.808370038222865680, -0.808340603478312270, -0.808311166712907370, -0.808281727926724480, +-0.808252287119837320, -0.808222844292318940, -0.808193399444243840, -0.808163952575685410, -0.808134503686717020, -0.808105052777412400, -0.808075599847845050, -0.808046144898088790, +-0.808016687928216680, -0.807987228938303330, -0.807957767928421890, -0.807928304898646090, -0.807898839849049420, -0.807869372779705720, -0.807839903690688590, -0.807810432582071640, +-0.807780959453928250, -0.807751484306332810, -0.807722007139358710, -0.807692527953079660, -0.807663046747569170, -0.807633563522901170, -0.807604078279149150, -0.807574591016386510, +-0.807545101734687960, -0.807515610434126560, -0.807486117114776140, -0.807456621776710400, -0.807427124420003190, -0.807397625044728120, -0.807368123650959000, -0.807338620238769120, +-0.807309114808233090, -0.807279607359424390, -0.807250097892416530, -0.807220586407283560, -0.807191072904098970, -0.807161557382936820, -0.807132039843870270, -0.807102520286974160, +-0.807072998712321630, -0.807043475119986640, -0.807013949510043020, -0.806984421882564470, -0.806954892237624950, -0.806925360575298070, -0.806895826895657860, -0.806866291198777620, +-0.806836753484732050, -0.806807213753594770, -0.806777672005439260, -0.806748128240339700, -0.806718582458369800, -0.806689034659602840, -0.806659484844113870, -0.806629933011976270, +-0.806600379163263770, -0.806570823298050300, -0.806541265416409690, -0.806511705518416110, -0.806482143604143160, -0.806452579673664790, -0.806423013727054610, -0.806393445764387320, +-0.806363875785736430, -0.806334303791175770, -0.806304729780779490, -0.806275153754621330, -0.806245575712775220, -0.806215995655314770, -0.806186413582314800, -0.806156829493848810, +-0.806127243389990640, -0.806097655270814450, -0.806068065136394170, -0.806038472986803640, -0.806008878822117030, -0.805979282642407590, -0.805949684447750500, -0.805920084238219260, +-0.805890482013887690, -0.805860877774830060, -0.805831271521120110, -0.805801663252832090, -0.805772052970039290, -0.805742440672816970, -0.805712826361238420, -0.805683210035377910, +-0.805653591695309370, -0.805623971341106860, -0.805594348972844430, -0.805564724590596030, -0.805535098194435360, -0.805505469784437490, -0.805475839360675900, -0.805446206923224770, +-0.805416572472158030, -0.805386936007549960, -0.805357297529474490, -0.805327657038005350, -0.805298014533217480, -0.805268370015184590, -0.805238723483980840, -0.805209074939680190, +-0.805179424382356900, -0.805149771812085020, -0.805120117228938730, -0.805090460632992170, -0.805060802024318960, -0.805031141402994250, -0.805001478769091670, -0.804971814122685370, +-0.804942147463849510, -0.804912478792658370, -0.804882808109185440, -0.804853135413506000, -0.804823460705693880, -0.804793783985822910, -0.804764105253967580, -0.804734424510201940, +-0.804704741754600270, -0.804675056987236740, -0.804645370208185610, -0.804615681417520490, -0.804585990615316660, -0.804556297801647950, -0.804526602976588400, -0.804496906140212410, +-0.804467207292594130, -0.804437506433807850, -0.804407803563927160, -0.804378098683027560, -0.804348391791182780, -0.804318682888466970, -0.804288971974954530, -0.804259259050719490, +-0.804229544115836470, -0.804199827170379520, -0.804170108214422470, -0.804140387248040710, -0.804110664271307950, -0.804080939284298470, -0.804051212287086760, -0.804021483279746980, +-0.803991752262353420, -0.803962019234980010, -0.803932284197702130, -0.803902547150593500, -0.803872808093728410, -0.803843067027181450, -0.803813323951026780, -0.803783578865338690, +-0.803753831770191770, -0.803724082665659760, -0.803694331551818020, -0.803664578428740390, -0.803634823296501380, -0.803605066155175350, -0.803575307004836590, -0.803545545845559590, +-0.803515782677418300, -0.803486017500487870, -0.803456250314842580, -0.803426481120556590, -0.803396709917704400, -0.803366936706360390, -0.803337161486599170, -0.803307384258494910, +-0.803277605022122200, -0.803247823777555100, -0.803218040524868780, -0.803188255264137400, -0.803158467995435440, -0.803128678718837310, -0.803098887434417490, -0.803069094142249920, +-0.803039298842410100, -0.803009501534972080, -0.802979702220010250, -0.802949900897599210, -0.802920097567813460, -0.802890292230727390, -0.802860484886415590, -0.802830675534952580, +-0.802800864176412390, -0.802771050810870520, -0.802741235438401040, -0.802711418059078530, -0.802681598672977390, -0.802651777280172340, -0.802621953880737760, -0.802592128474747810, +-0.802562301062278110, -0.802532471643402580, -0.802502640218195950, -0.802472806786732720, -0.802442971349087380, -0.802413133905334640, -0.802383294455549120, -0.802353452999804760, +-0.802323609538177380, -0.802293764070740930, -0.802263916597570130, -0.802234067118739460, -0.802204215634323650, -0.802174362144397300, -0.802144506649034470, -0.802114649148310990, +-0.802084789642300790, -0.802054928131078700, -0.802025064614719340, -0.801995199093297200, -0.801965331566887100, -0.801935462035563650, -0.801905590499401020, -0.801875716958475040, +-0.801845841412859640, -0.801815963862629650, -0.801786084307859800, -0.801756202748624800, -0.801726319184999260, -0.801696433617057340, -0.801666546044874860, -0.801636656468526000, +-0.801606764888085580, -0.801576871303628200, -0.801546975715228700, -0.801517078122961690, -0.801487178526901990, -0.801457276927124320, -0.801427373323702950, -0.801397467716713720, +-0.801367560106230780, -0.801337650492328970, -0.801307738875083000, -0.801277825254567700, -0.801247909630857350, -0.801217992004027660, -0.801188072374153130, -0.801158150741308250, +-0.801128227105568080, -0.801098301467007450, -0.801068373825700950, -0.801038444181723430, -0.801008512535149930, -0.800978578886054620, -0.800948643234513310, -0.800918705580600410, +-0.800888765924390840, -0.800858824265959330, -0.800828880605380710, -0.800798934942729800, -0.800768987278081210, -0.800739037611510550, -0.800709085943092310, -0.800679132272901440, +-0.800649176601012650, -0.800619218927500990, -0.800589259252441290, -0.800559297575908380, -0.800529333897976650, -0.800499368218722250, -0.800469400538219360, -0.800439430856543010, +-0.800409459173768050, -0.800379485489969400, -0.800349509805222010, -0.800319532119600390, -0.800289552433180450, -0.800259570746036710, -0.800229587058243990, -0.800199601369877220, +-0.800169613681011470, -0.800139623991721780, -0.800109632302082980, -0.800079638612169570, -0.800049642922057600, -0.800019645231821560, -0.799989645541536290, -0.799959643851277050, +-0.799929640161118670, -0.799899634471136100, -0.799869626781403940, -0.799839617091998250, -0.799809605402993620, -0.799779591714464890, -0.799749576026487110, -0.799719558339135550, +-0.799689538652484930, -0.799659516966610530, -0.799629493281587390, -0.799599467597489900, -0.799569439914394330, -0.799539410232375180, -0.799509378551507500, -0.799479344871866340, +-0.799449309193526860, -0.799419271516563560, -0.799389231841052590, -0.799359190167068470, -0.799329146494686450, -0.799299100823981590, -0.799269053155028940, -0.799239003487903670, +-0.799208951822680920, -0.799178898159435770, -0.799148842498242810, -0.799118784839178310, -0.799088725182316880, -0.799058663527733580, -0.799028599875503680, -0.798998534225702220, +-0.798968466578403920, -0.798938396933684960, -0.798908325291620040, -0.798878251652284320, -0.798848176015752980, -0.798818098382101160, -0.798788018751404040, -0.798757937123736990, +-0.798727853499175080, -0.798697767877792900, -0.798667680259666950, -0.798637590644871720, -0.798607499033482600, -0.798577405425574650, -0.798547309821223240, -0.798517212220503540, +-0.798487112623490260, -0.798457011030259680, -0.798426907440886620, -0.798396801855446370, -0.798366694274013970, -0.798336584696664910, -0.798306473123474470, -0.798276359554517700, +-0.798246243989869650, -0.798216126429606380, -0.798186006873802920, -0.798155885322534340, -0.798125761775876130, -0.798095636233903450, -0.798065508696691680, -0.798035379164315660, +-0.798005247636851660, -0.797975114114374610, -0.797944978596959680, -0.797914841084682360, -0.797884701577618040, -0.797854560075841770, -0.797824416579429260, -0.797794271088455690, +-0.797764123602995760, -0.797733974123126190, -0.797703822648921700, -0.797673669180457570, -0.797643513717809280, -0.797613356261052340, -0.797583196810261350, -0.797553035365512920, +-0.797522871926881870, -0.797492706494443700, -0.797462539068273690, -0.797432369648447440, -0.797402198235040220, -0.797372024828127410, -0.797341849427784630, -0.797311672034086700, +-0.797281492647110120, -0.797251311266929830, -0.797221127893621210, -0.797190942527259860, -0.797160755167921060, -0.797130565815679870, -0.797100374470612770, -0.797070181132794710, +-0.797039985802301290, -0.797009788479207890, -0.796979589163589910, -0.796949387855523160, -0.796919184555082700, -0.796888979262344480, -0.796858771977383200, -0.796828562700275470, +-0.796798351431096450, -0.796768138169921420, -0.796737922916826100, -0.796707705671885980, -0.796677486435176660, -0.796647265206772980, -0.796617041986751760, -0.796586816775187940, +-0.796556589572157030, -0.796526360377734610, -0.796496129191996300, -0.796465896015017720, -0.796435660846874340, -0.796405423687641330, -0.796375184537395310, -0.796344943396211310, +-0.796314700264164950, -0.796284455141331840, -0.796254208027787570, -0.796223958923607760, -0.796193707828867560, -0.796163454743643690, -0.796133199668011100, -0.796102942602045500, +-0.796072683545822500, -0.796042422499417920, -0.796012159462907260, -0.795981894436366130, -0.795951627419870240, -0.795921358413494870, -0.795891087417316510, -0.795860814431410550, +-0.795830539455852470, -0.795800262490718110, -0.795769983536083080, -0.795739702592022540, -0.795709419658613190, -0.795679134735930440, -0.795648847824049770, -0.795618558923047000, +-0.795588268032997760, -0.795557975153977970, -0.795527680286063130, -0.795497383429329190, -0.795467084583851290, -0.795436783749706060, -0.795406480926968970, -0.795376176115715650, +-0.795345869316021910, -0.795315560527963480, -0.795285249751615630, -0.795254936987055180, -0.795224622234357410, -0.795194305493598150, -0.795163986764853000, -0.795133666048197910, +-0.795103343343708690, -0.795073018651461070, -0.795042691971530990, -0.795012363303993610, -0.794982032648925750, -0.794951700006402920, -0.794921365376500820, -0.794891028759295290, +-0.794860690154862160, -0.794830349563277360, -0.794800006984616170, -0.794769662418955410, -0.794739315866370590, -0.794708967326937410, -0.794678616800731820, -0.794648264287829750, +-0.794617909788306930, -0.794587553302239400, -0.794557194829702440, -0.794526834370772980, -0.794496471925526530, -0.794466107494038900, -0.794435741076385930, -0.794405372672643550, +-0.794375002282887820, -0.794344629907194120, -0.794314255545639280, -0.794283879198298790, -0.794253500865248710, -0.794223120546564740, -0.794192738242323060, -0.794162353952599490, +-0.794131967677470070, -0.794101579417010760, -0.794071189171296930, -0.794040796940405640, -0.794010402724412370, -0.793980006523393070, -0.793949608337423780, -0.793919208166580570, +-0.793888806010938700, -0.793858401870575330, -0.793827995745565950, -0.793797587635986620, -0.793767177541913280, -0.793736765463422090, -0.793706351400588870, -0.793675935353489900, +-0.793645517322201010, -0.793615097306797800, -0.793584675307357430, -0.793554251323955300, -0.793523825356667540, -0.793493397405570230, -0.793462967470739520, -0.793432535552250790, +-0.793402101650181210, -0.793371665764606380, -0.793341227895602460, -0.793310788043245510, -0.793280346207611450, -0.793249902388776570, -0.793219456586817030, -0.793189008801808760, +-0.793158559033827370, -0.793128107282950250, -0.793097653549252770, -0.793067197832811210, -0.793036740133701620, -0.793006280452000170, -0.792975818787783120, -0.792945355141125850, +-0.792914889512105870, -0.792884421900798550, -0.792853952307280290, -0.792823480731627010, -0.792793007173915100, -0.792762531634220720, -0.792732054112619930, -0.792701574609188440, +-0.792671093124003630, -0.792640609657141120, -0.792610124208676940, -0.792579636778687590, -0.792549147367249130, -0.792518655974437710, -0.792488162600329170, -0.792457667245000770, +-0.792427169908528240, -0.792396670590987730, -0.792366169292455510, -0.792335666013007980, -0.792305160752721170, -0.792274653511671590, -0.792244144289934730, -0.792213633087588080, +-0.792183119904707360, -0.792152604741368730, -0.792122087597648680, -0.792091568473623500, -0.792061047369369220, -0.792030524284961900, -0.791999999220478810, -0.791969472175995670, +-0.791938943151588860, -0.791908412147334760, -0.791877879163309650, -0.791847344199589690, -0.791816807256251480, -0.791786268333371180, -0.791755727431024740, -0.791725184549289530, +-0.791694639688241280, -0.791664092847956470, -0.791633544028511490, -0.791602993229982620, -0.791572440452445680, -0.791541885695978160, -0.791511328960656010, -0.791480770246555500, +-0.791450209553753000, -0.791419646882325020, -0.791389082232347940, -0.791358515603898250, -0.791327946997052110, -0.791297376411885580, -0.791266803848476250, -0.791236229306899850, +-0.791205652787232870, -0.791175074289551810, -0.791144493813933040, -0.791113911360453060, -0.791083326929187700, -0.791052740520214570, -0.791022152133609600, -0.790991561769449290, +-0.790960969427810020, -0.790930375108768400, -0.790899778812400810, -0.790869180538783740, -0.790838580287993140, -0.790807978060106720, -0.790777373855200310, -0.790746767673350500, +-0.790716159514633700, -0.790685549379126610, -0.790654937266905500, -0.790624323178046650, -0.790593707112627440, -0.790563089070724030, -0.790532469052412920, -0.790501847057770490, +-0.790471223086873560, -0.790440597139798640, -0.790409969216622100, -0.790379339317420100, -0.790348707442270370, -0.790318073591248840, -0.790287437764432110, -0.790256799961896790, +-0.790226160183719490, -0.790195518429976710, -0.790164874700744700, -0.790134228996100970, -0.790103581316121680, -0.790072931660883440, -0.790042280030462950, -0.790011626424936720, +-0.789980970844381350, -0.789950313288873660, -0.789919653758490050, -0.789888992253306890, -0.789858328773401790, -0.789827663318850790, -0.789796995889730620, -0.789766326486118110, +-0.789735655108089630, -0.789704981755721570, -0.789674306429091530, -0.789643629128275680, -0.789612949853350840, -0.789582268604393620, -0.789551585381480740, -0.789520900184688900, +-0.789490213014094720, -0.789459523869775140, -0.789428832751806090, -0.789398139660265620, -0.789367444595229670, -0.789336747556775190, -0.789306048544978880, -0.789275347559917350, +-0.789244644601667540, -0.789213939670305510, -0.789183232765909180, -0.789152523888554840, -0.789121813038319080, -0.789091100215278840, -0.789060385419510850, -0.789029668651091920, +-0.788998949910098780, -0.788968229196607810, -0.788937506510696720, -0.788906781852441900, -0.788876055221920060, -0.788845326619208140, -0.788814596044382870, -0.788783863497521160, +-0.788753128978699200, -0.788722392487995030, -0.788691654025484800, -0.788660913591245460, -0.788630171185353830, -0.788599426807886860, -0.788568680458921260, -0.788537932138533960, +-0.788507181846801240, -0.788476429583801150, -0.788445675349609960, -0.788414919144304620, -0.788384160967962040, -0.788353400820658970, -0.788322638702472430, -0.788291874613478720, +-0.788261108553755860, -0.788230340523380260, -0.788199570522428840, -0.788168798550978430, -0.788138024609106090, -0.788107248696888640, -0.788076470814403020, -0.788045690961726280, +-0.788014909138934790, -0.787984125346106510, -0.787953339583318040, -0.787922551850646080, -0.787891762148167810, -0.787860970475960150, -0.787830176834099500, -0.787799381222663910, +-0.787768583641729970, -0.787737784091374520, -0.787706982571674600, -0.787676179082707150, -0.787645373624549340, -0.787614566197278100, -0.787583756800970370, -0.787552945435702870, +-0.787522132101553420, -0.787491316798598630, -0.787460499526915550, -0.787429680286581220, -0.787398859077672820, -0.787368035900267160, -0.787337210754440850, -0.787306383640272060, +-0.787275554557837380, -0.787244723507213750, -0.787213890488478340, -0.787183055501708200, -0.787152218546980360, -0.787121379624372120, -0.787090538733959840, -0.787059695875821700, +-0.787028851050034280, -0.786998004256674880, -0.786967155495820300, -0.786936304767547950, -0.786905452071934740, -0.786874597409057520, -0.786843740778994220, -0.786812882181821550, +-0.786782021617616790, -0.786751159086456870, -0.786720294588419080, -0.786689428123580560, -0.786658559692018480, -0.786627689293809440, -0.786596816929031830, -0.786565942597762020, +-0.786535066300077410, -0.786504188036055150, -0.786473307805772400, -0.786442425609306440, -0.786411541446733750, -0.786380655318132840, -0.786349767223580300, -0.786318877163153300, +-0.786287985136929100, -0.786257091144984990, -0.786226195187398110, -0.786195297264245860, -0.786164397375605170, -0.786133495521553090, -0.786102591702167790, -0.786071685917525960, +-0.786040778167705010, -0.786009868452781980, -0.785978956772834360, -0.785948043127938760, -0.785917127518173660, -0.785886209943615690, -0.785855290404342210, -0.785824368900430500, +-0.785793445431957950, -0.785762519999001710, -0.785731592601639160, -0.785700663239947580, -0.785669731914003910, -0.785638798623886410, -0.785607863369671920, -0.785576926151437700, +-0.785545986969261260, -0.785515045823219850, -0.785484102713390750, -0.785453157639850910, -0.785422210602678690, -0.785391261601951050, -0.785360310637745140, -0.785329357710138450, +-0.785298402819208490, -0.785267445965032400, -0.785236487147687680, -0.785205526367251270, -0.785174563623801560, -0.785143598917415480, -0.785112632248170290, -0.785081663616143620, +-0.785050693021412730, -0.785019720464055220, -0.784988745944147800, -0.784957769461768980, -0.784926791016995810, -0.784895810609905650, -0.784864828240576020, -0.784833843909084280, +-0.784802857615507940, -0.784771869359924380, -0.784740879142410640, -0.784709886963045330, -0.784678892821905280, -0.784647896719067980, -0.784616898654610820, -0.784585898628611610, +-0.784554896641147530, -0.784523892692295720, -0.784492886782134690, -0.784461878910741480, -0.784430869078193480, -0.784399857284568400, -0.784368843529943630, -0.784337827814396760, +-0.784306810138005290, -0.784275790500846840, -0.784244768902998430, -0.784213745344538580, -0.784182719825544330, -0.784151692346093280, -0.784120662906263030, -0.784089631506131200, +-0.784058598145774610, -0.784027562825272200, -0.783996525544700780, -0.783965486304138090, -0.783934445103661730, -0.783903401943349180, -0.783872356823278160, -0.783841309743526170, +-0.783810260704171040, -0.783779209705289580, -0.783748156746960740, -0.783717101829261580, -0.783686044952269570, -0.783654986116062440, -0.783623925320717780, -0.783592862566313440, +-0.783561797852926230, -0.783530731180635210, -0.783499662549517310, -0.783468591959650350, -0.783437519411111840, -0.783406444903979480, -0.783375368438331110, -0.783344290014244220, +-0.783313209631796070, -0.783282127291065500, -0.783251042992129550, -0.783219956735066060, -0.783188868519952620, -0.783157778346867060, -0.783126686215886990, -0.783095592127089790, +-0.783064496080554060, -0.783033398076357080, -0.783002298114576560, -0.782971196195290430, -0.782940092318576200, -0.782908986484511790, -0.782877878693174930, -0.782846768944642780, +-0.782815657238994270, -0.782784543576306670, -0.782753427956657590, -0.782722310380125070, -0.782691190846786730, -0.782660069356720390, -0.782628945910003320, -0.782597820506714450, +-0.782566693146931060, -0.782535563830730860, -0.782504432558191800, -0.782473299329391690, -0.782442164144408260, -0.782411027003319440, -0.782379887906203160, -0.782348746853136490, +-0.782317603844198570, -0.782286458879466570, -0.782255311959018430, -0.782224163082932080, -0.782193012251285350, -0.782161859464155400, -0.782130704721621490, -0.782099548023760690, +-0.782068389370651150, -0.782037228762370470, -0.782006066198996930, -0.781974901680608010, -0.781943735207282000, -0.781912566779096600, -0.781881396396129190, -0.781850224058458940, +-0.781819049766163010, -0.781787873519319550, -0.781756695318006400, -0.781725515162301490, -0.781694333052282750, -0.781663148988027690, -0.781631962969615230, -0.781600774997122880, +-0.781569585070628680, -0.781538393190210460, -0.781507199355946260, -0.781476003567914130, -0.781444805826191800, -0.781413606130857090, -0.781382404481988810, -0.781351200879664590, +-0.781319995323962350, -0.781288787814960140, -0.781257578352735900, -0.781226366937367800, -0.781195153568933210, -0.781163938247511180, -0.781132720973179430, -0.781101501746015890, +-0.781070280566098510, -0.781039057433505430, -0.781007832348314720, -0.780976605310604530, -0.780945376320452130, -0.780914145377936910, -0.780882912483136350, -0.780851677636128510, +-0.780820440836991430, -0.780789202085803270, -0.780757961382642090, -0.780726718727585480, -0.780695474120712610, -0.780664227562100970, -0.780632979051828820, -0.780601728589974340, +-0.780570476176615460, -0.780539221811830330, -0.780507965495697230, -0.780476707228294100, -0.780445447009698760, -0.780414184839990370, -0.780382920719246420, -0.780351654647545300, +-0.780320386624964950, -0.780289116651583630, -0.780257844727478940, -0.780226570852730280, -0.780195295027415140, -0.780164017251611770, -0.780132737525398360, -0.780101455848853150, +-0.780070172222054210, -0.780038886645079920, -0.780007599118008320, -0.779976309640917240, -0.779945018213885950, -0.779913724836992060, -0.779882429510313950, -0.779851132233929660, +-0.779819833007917570, -0.779788531832355410, -0.779757228707322450, -0.779725923632896390, -0.779694616609155510, -0.779663307636178080, -0.779631996714042490, -0.779600683842826770, +-0.779569369022609430, -0.779538052253468620, -0.779506733535482170, -0.779475412868729340, -0.779444090253288090, -0.779412765689236560, -0.779381439176653150, -0.779350110715616110, +-0.779318780306203830, -0.779287447948494030, -0.779256113642566190, -0.779224777388497940, -0.779193439186367850, -0.779162099036254220, -0.779130756938235300, -0.779099412892389380, +-0.779068066898795040, -0.779036718957530020, -0.779005369068673680, -0.778974017232303860, -0.778942663448499050, -0.778911307717337630, -0.778879950038897870, -0.778848590413258270, +-0.778817228840496640, -0.778785865320692490, -0.778754499853923750, -0.778723132440268690, -0.778691763079805810, -0.778660391772613480, -0.778629018518770200, -0.778597643318354460, +-0.778566266171444420, -0.778534887078118350, -0.778503506038455530, -0.778472123052533990, -0.778440738120432020, -0.778409351242228320, -0.778377962418001280, -0.778346571647828610, +-0.778315178931790250, -0.778283784269963810, -0.778252387662427990, -0.778220989109261190, -0.778189588610541880, -0.778158186166348690, -0.778126781776759870, -0.778095375441854250, +-0.778063967161709560, -0.778032556936405490, -0.778001144766020110, -0.777969730650631800, -0.777938314590319150, -0.777906896585160770, -0.777875476635234600, -0.777844054740620240, +-0.777812630901395850, -0.777781205117639820, -0.777749777389430740, -0.777718347716847220, -0.777686916099967870, -0.777655482538871180, -0.777624047033635860, -0.777592609584339840, +-0.777561170191062740, -0.777529728853882830, -0.777498285572878590, -0.777466840348128630, -0.777435393179711550, -0.777403944067706080, -0.777372493012190020, -0.777341040013243450, +-0.777309585070944160, -0.777278128185371010, -0.777246669356602470, -0.777215208584717270, -0.777183745869794000, -0.777152281211911490, -0.777120814611147680, -0.777089346067582290, +-0.777057875581293580, -0.777026403152360270, -0.776994928780860850, -0.776963452466874150, -0.776931974210478880, -0.776900494011752980, -0.776869011870776500, -0.776837527787627490, +-0.776806041762384660, -0.776774553795126720, -0.776743063885932280, -0.776711572034880280, -0.776680078242049430, -0.776648582507518340, -0.776617084831365160, -0.776585585213669830, +-0.776554083654510620, -0.776522580153966140, -0.776491074712115200, -0.776459567329036650, -0.776428058004808520, -0.776396546739510860, -0.776365033533221840, -0.776333518386020270, +-0.776302001297984880, -0.776270482269194480, -0.776238961299727800, -0.776207438389663770, -0.776175913539081220, -0.776144386748058190, -0.776112858016674840, -0.776081327345009340, +-0.776049794733140510, -0.776018260181147280, -0.775986723689108260, -0.775955185257101940, -0.775923644885208260, -0.775892102573505380, -0.775860558322072240, -0.775829012130987760, +-0.775797464000330780, -0.775765913930180020, -0.775734361920614620, -0.775702807971713200, -0.775671252083554250, -0.775639694256217820, -0.775608134489782050, -0.775576572784325900, +-0.775545009139928410, -0.775513443556668290, -0.775481876034624710, -0.775450306573875700, -0.775418735174501660, -0.775387161836580740, -0.775355586560191880, -0.775324009345414010, +-0.775292430192326190, -0.775260849101007230, -0.775229266071536190, -0.775197681103991450, -0.775166094198453060, -0.775134505354999390, -0.775102914573709500, -0.775071321854662320, +-0.775039727197936790, -0.775008130603611960, -0.774976532071766310, -0.774944931602479790, -0.774913329195831000, -0.774881724851898880, -0.774850118570762470, -0.774818510352500710, +-0.774786900197192760, -0.774755288104917560, -0.774723674075753490, -0.774692058109780810, -0.774660440207078030, -0.774628820367724070, -0.774597198591798100, -0.774565574879379160, +-0.774533949230546300, -0.774502321645378020, -0.774470692123954470, -0.774439060666354150, -0.774407427272656210, -0.774375791942939710, -0.774344154677283680, -0.774312515475767290, +-0.774280874338469590, -0.774249231265469740, -0.774217586256846340, -0.774185939312679430, -0.774154290433047620, -0.774122639618030180, -0.774090986867706050, -0.774059332182154610, +-0.774027675561454130, -0.773996017005685100, -0.773964356514926010, -0.773932694089256020, -0.773901029728754300, -0.773869363433499990, -0.773837695203572260, -0.773806025039050380, +-0.773774352940013400, -0.773742678906539920, -0.773711002938710310, -0.773679325036603190, -0.773647645200297830, -0.773615963429873380, -0.773584279725408890, -0.773552594086983850, +-0.773520906514676640, -0.773489217008567760, -0.773457525568735820, -0.773425832195260180, -0.773394136888219790, -0.773362439647694130, -0.773330740473762380, -0.773299039366503790, +-0.773267336325997090, -0.773235631352322540, -0.773203924445558850, -0.773172215605785530, -0.773140504833081500, -0.773108792127526370, -0.773077077489199070, -0.773045360918178660, +-0.773013642414545290, -0.772981921978377890, -0.772950199609755750, -0.772918475308758010, -0.772886749075464060, -0.772855020909953390, -0.772823290812305050, -0.772791558782597980, +-0.772759824820912430, -0.772728088927327470, -0.772696351101922250, -0.772664611344776150, -0.772632869655968560, -0.772601126035578730, -0.772569380483685510, -0.772537633000369480, +-0.772505883585709260, -0.772474132239784450, -0.772442378962674200, -0.772410623754458130, -0.772378866615215380, -0.772347107545025560, -0.772315346543967940, -0.772283583612121350, +-0.772251818749566390, -0.772220051956381880, -0.772188283232647210, -0.772156512578441870, -0.772124739993845230, -0.772092965478936240, -0.772061189033795390, -0.772029410658501500, +-0.771997630353134180, -0.771965848117772690, -0.771934063952496640, -0.771902277857385410, -0.771870489832518380, -0.771838699877975270, -0.771806907993834780, -0.771775114180177630, +-0.771743318437082660, -0.771711520764629340, -0.771679721162897290, -0.771647919631966000, -0.771616116171914830, -0.771584310782822860, -0.771552503464770560, -0.771520694217837090, +-0.771488883042101840, -0.771457069937644400, -0.771425254904544390, -0.771393437942881070, -0.771361619052734260, -0.771329798234182800, -0.771297975487307500, -0.771266150812187190, +-0.771234324208901480, -0.771202495677529960, -0.771170665218152250, -0.771138832830847830, -0.771106998515695750, -0.771075162272776840, -0.771043324102169910, -0.771011484003954690, +-0.770979641978210780, -0.770947798025017780, -0.770915952144455300, -0.770884104336602930, -0.770852254601539720, -0.770820402939346390, -0.770788549350102100, -0.770756693833886450, +-0.770724836390779040, -0.770692977020859590, -0.770661115724207700, -0.770629252500902420, -0.770597387351024570, -0.770565520274653190, -0.770533651271868130, -0.770501780342748850, +-0.770469907487375210, -0.770438032705826780, -0.770406155998183180, -0.770374277364524240, -0.770342396804929000, -0.770310514319478390, -0.770278629908251580, -0.770246743571328050, +-0.770214855308787750, -0.770182965120710270, -0.770151073007174780, -0.770119178968262210, -0.770087283004051710, -0.770055385114623010, -0.770023485300055820, -0.769991583560429960, +-0.769959679895825030, -0.769927774306321090, -0.769895866791997510, -0.769863957352933780, -0.769832045989210730, -0.769800132700907640, -0.769768217488104090, -0.769736300350880030, +-0.769704381289315290, -0.769672460303489570, -0.769640537393482040, -0.769608612559373850, -0.769576685801244050, -0.769544757119172580, -0.769512826513239270, -0.769480893983523820, +-0.769448959530106170, -0.769417023153066040, -0.769385084852482800, -0.769353144628437510, -0.769321202481009330, -0.769289258410278070, -0.769257312416323780, -0.769225364499226070, +-0.769193414659065100, -0.769161462895919910, -0.769129509209871660, -0.769097553600999630, -0.769065596069383740, -0.769033636615103930, -0.769001675238239920, -0.768969711938871760, +-0.768937746717079370, -0.768905779572941930, -0.768873810506540690, -0.768841839517954930, -0.768809866607264470, -0.768777891774549470, -0.768745915019889760, -0.768713936343365160, +-0.768681955745055160, -0.768649973225040920, -0.768617988783401710, -0.768586002420217460, -0.768554014135568230, -0.768522023929534060, -0.768490031802194770, -0.768458037753630310, +-0.768426041783920820, -0.768394043893145700, -0.768362044081386090, -0.768330042348721260, -0.768298038695231390, -0.768266033120996390, -0.768234025626096330, -0.768202016210610570, +-0.768170004874620390, -0.768137991618205170, -0.768105976441445070, -0.768073959344419910, -0.768041940327209960, -0.768009919389895050, -0.767977896532555440, -0.767945871755270960, +-0.767913845058121320, -0.767881816441187690, -0.767849785904549440, -0.767817753448286730, -0.767785719072479610, -0.767753682777208240, -0.767721644562552760, -0.767689604428592460, +-0.767657562375408720, -0.767625518403081130, -0.767593472511689750, -0.767561424701314610, -0.767529374972035990, -0.767497323323933940, -0.767465269757088510, -0.767433214271579400, +-0.767401156867487780, -0.767369097544893240, -0.767337036303876060, -0.767304973144516180, -0.767272908066893970, -0.767240841071089360, -0.767208772157182190, -0.767176701325253620, +-0.767144628575383350, -0.767112553907651430, -0.767080477322138130, -0.767048398818923730, -0.767016318398088260, -0.766984236059712000, -0.766952151803874550, -0.766920065630657400, +-0.766887977540139930, -0.766855887532402640, -0.766823795607525560, -0.766791701765589080, -0.766759606006673260, -0.766727508330857900, -0.766695408738224280, -0.766663307228852230, +-0.766631203802821790, -0.766599098460213460, -0.766566991201107380, -0.766534882025583730, -0.766502770933722990, -0.766470657925605200, -0.766438543001310310, -0.766406426160919580, +-0.766374307404512730, -0.766342186732170140, -0.766310064143972180, -0.766277939639998910, -0.766245813220330360, -0.766213684885047820, -0.766181554634230990, -0.766149422467960360, +-0.766117288386316100, -0.766085152389378690, -0.766053014477228290, -0.766020874649945500, -0.765988732907610380, -0.765956589250302970, -0.765924443678104530, -0.765892296191095110, +-0.765860146789354880, -0.765827995472964320, -0.765795842242003810, -0.765763687096553620, -0.765731530036693700, -0.765699371062505520, -0.765667210174068800, -0.765635047371464150, +-0.765602882654771940, -0.765570716024072450, -0.765538547479446160, -0.765506377020973570, -0.765474204648734390, -0.765442030362810220, -0.765409854163281110, -0.765377676050227330, +-0.765345496023729370, -0.765313314083867600, -0.765281130230722530, -0.765248944464374190, -0.765216756784903970, -0.765184567192391810, -0.765152375686918300, -0.765120182268563930, +-0.765087986937408980, -0.765055789693534050, -0.765023590537019740, -0.764991389467945870, -0.764959186486394050, -0.764926981592444320, -0.764894774786177070, -0.764862566067672890, +-0.764830355437012390, -0.764798142894275950, -0.764765928439543500, -0.764733712072896870, -0.764701493794415990, -0.764669273604181350, -0.764637051502273460, -0.764604827488773010, +-0.764572601563760500, -0.764540373727316420, -0.764508143979521490, -0.764475912320455640, -0.764443678750200470, -0.764411443268836250, -0.764379205876443260, -0.764346966573102420, +-0.764314725358894000, -0.764282482233898270, -0.764250237198196960, -0.764217990251869980, -0.764185741394998060, -0.764153490627661800, -0.764121237949941800, -0.764088983361918660, +-0.764056726863673100, -0.764024468455285710, -0.763992208136836660, -0.763959945908407550, -0.763927681770078640, -0.763895415721930540, -0.763863147764043850, -0.763830877896499280, +-0.763798606119377550, -0.763766332432758710, -0.763734056836724680, -0.763701779331355410, -0.763669499916731830, -0.763637218592934320, -0.763604935360043920, -0.763572650218141140, +-0.763540363167306670, -0.763508074207620790, -0.763475783339165210, -0.763443490562020210, -0.763411195876266600, -0.763378899281984880, -0.763346600779255870, -0.763314300368160500, +-0.763281998048778720, -0.763249693821192570, -0.763217387685482080, -0.763185079641728210, -0.763152769690011560, -0.763120457830413050, -0.763088144063013400, -0.763055828387893430, +-0.763023510805133200, -0.762991191314814850, -0.762958869917018560, -0.762926546611825020, -0.762894221399315060, -0.762861894279569630, -0.762829565252669540, -0.762797234318694840, +-0.762764901477727690, -0.762732566729848240, -0.762700230075137430, -0.762667891513675980, -0.762635551045544810, -0.762603208670824760, -0.762570864389596760, -0.762538518201941630, +-0.762506170107939530, -0.762473820107672620, -0.762441468201221160, -0.762409114388665990, -0.762376758670088030, -0.762344401045568220, -0.762312041515186830, -0.762279680079025910, +-0.762247316737165730, -0.762214951489687320, -0.762182584336671520, -0.762150215278199260, -0.762117844314351480, -0.762085471445209110, -0.762053096670852970, -0.762020719991363560, +-0.761988341406822920, -0.761955960917311440, -0.761923578522910150, -0.761891194223699770, -0.761858808019761470, -0.761826419911175500, -0.761794029898024140, -0.761761637980387650, +-0.761729244158347200, -0.761696848431983490, -0.761664450801377680, -0.761632051266610820, -0.761599649827763740, -0.761567246484917580, -0.761534841238152740, -0.761502434087551360, +-0.761470025033193940, -0.761437614075161310, -0.761405201213534830, -0.761372786448395230, -0.761340369779823670, -0.761307951207900620, -0.761275530732708370, -0.761243108354327180, +-0.761210684072838320, -0.761178257888322610, -0.761145829800861320, -0.761113399810535500, -0.761080967917426190, -0.761048534121613770, -0.761016098423180630, -0.760983660822207360, +-0.760951221318774800, -0.760918779912964300, -0.760886336604856720, -0.760853891394533410, -0.760821444282074770, -0.760788995267563050, -0.760756544351078870, -0.760724091532703370, +-0.760691636812517610, -0.760659180190602750, -0.760626721667039930, -0.760594261241910320, -0.760561798915295070, -0.760529334687274680, -0.760496868557931640, -0.760464400527346320, +-0.760431930595600100, -0.760399458762773930, -0.760366985028949280, -0.760334509394206440, -0.760302031858627990, -0.760269552422294440, -0.760237071085286930, -0.760204587847686850, +-0.760172102709575250, -0.760139615671033500, -0.760107126732142650, -0.760074635892983850, -0.760042143153638050, -0.760009648514187400, -0.759977151974712610, -0.759944653535294950, +-0.759912153196015680, -0.759879650956956090, -0.759847146818196650, -0.759814640779819970, -0.759782132841906770, -0.759749623004538190, -0.759717111267795510, -0.759684597631760110, +-0.759652082096513140, -0.759619564662136090, -0.759587045328710020, -0.759554524096315850, -0.759522000965035860, -0.759489475934950970, -0.759456949006142250, -0.759424420178691270, +-0.759391889452679210, -0.759359356828187450, -0.759326822305296690, -0.759294285884089430, -0.759261747564646480, -0.759229207347049240, -0.759196665231378850, -0.759164121217716810, +-0.759131575306144500, -0.759099027496743290, -0.759066477789593910, -0.759033926184778940, -0.759001372682378990, -0.758968817282475780, -0.758936259985150570, -0.758903700790484640, +-0.758871139698559350, -0.758838576709455760, -0.758806011823256240, -0.758773445040041740, -0.758740876359893620, -0.758708305782893390, -0.758675733309122300, -0.758643158938661850, +-0.758610582671593540, -0.758578004507998840, -0.758545424447958470, -0.758512842491555040, -0.758480258638869590, -0.758447672889983600, -0.758415085244978250, -0.758382495703935230, +-0.758349904266935490, -0.758317310934061520, -0.758284715705394240, -0.758252118581015160, -0.758219519561005860, -0.758186918645447740, -0.758154315834422280, -0.758121711128011080, +-0.758089104526295520, -0.758056496029356650, -0.758023885637277180, -0.757991273350137940, -0.757958659168020520, -0.757926043091006530, -0.757893425119177340, -0.757860805252614120, +-0.757828183491399350, -0.757795559835614090, -0.757762934285340030, -0.757730306840658670, -0.757697677501651400, -0.757665046268400030, -0.757632413140986060, -0.757599778119490970, +-0.757567141203995930, -0.757534502394583640, -0.757501861691335040, -0.757469219094331740, -0.757436574603655540, -0.757403928219387730, -0.757371279941610240, -0.757338629770403890, +-0.757305977705851620, -0.757273323748034350, -0.757240667897033810, -0.757208010152931490, -0.757175350515809310, -0.757142688985748660, -0.757110025562831250, -0.757077360247138230, +-0.757044693038752440, -0.757012023937754910, -0.756979352944227250, -0.756946680058251280, -0.756914005279908600, -0.756881328609280810, -0.756848650046449190, -0.756815969591496550, +-0.756783287244503940, -0.756750603005553190, -0.756717916874725890, -0.756685228852103760, -0.756652538937768630, -0.756619847131802080, -0.756587153434285950, -0.756554457845301400, +-0.756521760364931240, -0.756489060993256630, -0.756456359730359410, -0.756423656576321270, -0.756390951531224040, -0.756358244595148890, -0.756325535768178630, -0.756292825050394520, +-0.756260112441878410, -0.756227397942711880, -0.756194681552976980, -0.756161963272755420, -0.756129243102128920, -0.756096521041179190, -0.756063797089987720, -0.756031071248637330, +-0.755998343517209180, -0.755965613895785200, -0.755932882384447110, -0.755900148983276950, -0.755867413692355880, -0.755834676511766720, -0.755801937441590970, -0.755769196481910210, +-0.755736453632806620, -0.755703708894361890, -0.755670962266657750, -0.755638213749776360, -0.755605463343799300, -0.755572711048808190, -0.755539956864885730, -0.755507200792113420, +-0.755474442830573080, -0.755441682980346640, -0.755408921241516040, -0.755376157614163100, -0.755343392098369200, -0.755310624694217390, -0.755277855401789040, -0.755245084221165990, +-0.755212311152430260, -0.755179536195663800, -0.755146759350948440, -0.755113980618366210, -0.755081199997998500, -0.755048417489928350, -0.755015633094237030, -0.754982846811006800, +-0.754950058640319390, -0.754917268582256830, -0.754884476636901060, -0.754851682804333570, -0.754818887084637400, -0.754786089477894050, -0.754753289984185450, -0.754720488603593750, +-0.754687685336200680, -0.754654880182088480, -0.754622073141339000, -0.754589264214033720, -0.754556453400256010, -0.754523640700087040, -0.754490826113609070, -0.754458009640903930, +-0.754425191282053880, -0.754392371037140850, -0.754359548906246240, -0.754326724889453290, -0.754293898986843630, -0.754261071198499170, -0.754228241524502070, -0.754195409964934390, +-0.754162576519878170, -0.754129741189415450, -0.754096903973628390, -0.754064064872598580, -0.754031223886409090, -0.753998381015141610, -0.753965536258878080, -0.753932689617700770, +-0.753899841091691720, -0.753866990680932550, -0.753834138385506390, -0.753801284205494970, -0.753768428140980330, -0.753735570192044510, -0.753702710358769900, -0.753669848641238540, +-0.753636985039532360, -0.753604119553733850, -0.753571252183924510, -0.753538382930187490, -0.753505511792604610, -0.753472638771257920, -0.753439763866229680, -0.753406887077601950, +-0.753374008405457100, -0.753341127849876500, -0.753308245410943770, -0.753275361088740380, -0.753242474883348720, -0.753209586794850730, -0.753176696823328770, -0.753143804968865130, +-0.753110911231541950, -0.753078015611440940, -0.753045118108645490, -0.753012218723237200, -0.752979317455298340, -0.752946414304911270, -0.752913509272158050, -0.752880602357121060, +-0.752847693559882130, -0.752814782880524390, -0.752781870319129800, -0.752748955875780500, -0.752716039550558770, -0.752683121343546980, -0.752650201254827400, -0.752617279284482300, +-0.752584355432593500, -0.752551429699244270, -0.752518502084516540, -0.752485572588492470, -0.752452641211254550, -0.752419707952885040, -0.752386772813466220, -0.752353835793079910, +-0.752320896891809590, -0.752287956109736980, -0.752255013446944450, -0.752222068903514510, -0.752189122479529400, -0.752156174175071410, -0.752123223990222910, -0.752090271925066500, +-0.752057317979683780, -0.752024362154158240, -0.751991404448571930, -0.751958444863007110, -0.751925483397546170, -0.751892520052271470, -0.751859554827264850, -0.751826587722610020, +-0.751793618738388680, -0.751760647874683220, -0.751727675131576230, -0.751694700509150100, -0.751661724007487100, -0.751628745626669930, -0.751595765366780850, -0.751562783227901710, +-0.751529799210116200, -0.751496813313506260, -0.751463825538154270, -0.751430835884142610, -0.751397844351553990, -0.751364850940470670, -0.751331855650974710, -0.751298858483149590, +-0.751265859437077470, -0.751232858512840610, -0.751199855710521610, -0.751166851030202980, -0.751133844471967290, -0.751100836035896950, -0.751067825722073870, -0.751034813530581880, +-0.751001799461502810, -0.750968783514919250, -0.750935765690913690, -0.750902745989568850, -0.750869724410967000, -0.750836700955190390, -0.750803675622322530, -0.750770648412445450, +-0.750737619325641870, -0.750704588361994160, -0.750671555521584930, -0.750638520804496890, -0.750605484210812520, -0.750572445740613880, -0.750539405393984670, -0.750506363171007050, +-0.750473319071763400, -0.750440273096336430, -0.750407225244808960, -0.750374175517263260, -0.750341123913781600, -0.750308070434447690, -0.750275015079343580, -0.750241957848551970, +-0.750208898742155460, -0.750175837760236770, -0.750142774902878400, -0.750109710170163150, -0.750076643562173520, -0.750043575078991780, -0.750010504720701740, -0.749977432487385350, +-0.749944358379125430, -0.749911282396004570, -0.749878204538105500, -0.749845124805510350, -0.749812043198302970, -0.749778959716565500, -0.749745874360380650, -0.749712787129831030, +-0.749679698024999560, -0.749646607045968750, -0.749613514192821520, -0.749580419465640360, -0.749547322864507760, -0.749514224389507210, -0.749481124040721310, -0.749448021818232450, +-0.749414917722123650, -0.749381811752477420, -0.749348703909376800, -0.749315594192903720, -0.749282482603142340, -0.749249369140174700, -0.749216253804083630, -0.749183136594951950, +-0.749150017512862480, -0.749116896557897930, -0.749083773730141010, -0.749050649029674220, -0.749017522456581370, -0.748984394010944740, -0.748951263692847040, -0.748918131502371190, +-0.748884997439600130, -0.748851861504616470, -0.748818723697502580, -0.748785584018342500, -0.748752442467218390, -0.748719299044213300, -0.748686153749409830, -0.748653006582891020, +-0.748619857544739810, -0.748586706635038790, -0.748553553853870460, -0.748520399201318850, -0.748487242677466250, -0.748454084282395570, -0.748420924016189650, -0.748387761878931410, +-0.748354597870703800, -0.748321431991589070, -0.748288264241671270, -0.748255094621032900, -0.748221923129756880, -0.748188749767925930, -0.748155574535623200, -0.748122397432931410, +-0.748089218459933700, -0.748056037616713020, -0.748022854903351520, -0.747989670319933580, -0.747956483866541340, -0.747923295543257980, -0.747890105350166310, -0.747856913287349490, +-0.747823719354889780, -0.747790523552871340, -0.747757325881376560, -0.747724126340488460, -0.747690924930290100, -0.747657721650864300, -0.747624516502294330, -0.747591309484663010, +-0.747558100598053390, -0.747524889842548060, -0.747491677218230950, -0.747458462725184790, -0.747425246363492390, -0.747392028133236800, -0.747358808034501280, -0.747325586067368650, +-0.747292362231921410, -0.747259136528243940, -0.747225908956418610, -0.747192679516528570, -0.747159448208656760, -0.747126215032886340, -0.747092979989300470, -0.747059743077982060, +-0.747026504299013740, -0.746993263652479640, -0.746960021138462490, -0.746926776757045330, -0.746893530508311200, -0.746860282392343140, -0.746827032409224430, -0.746793780559037670, +-0.746760526841866890, -0.746727271257794810, -0.746694013806904590, -0.746660754489279380, -0.746627493305002220, -0.746594230254156390, -0.746560965336824920, -0.746527698553090420, +-0.746494429903037270, -0.746461159386748060, -0.746427887004306070, -0.746394612755794330, -0.746361336641295890, -0.746328058660894240, -0.746294778814671880, -0.746261497102713060, +-0.746228213525100600, -0.746194928081917560, -0.746161640773247200, -0.746128351599172680, -0.746095060559777370, -0.746061767655144430, -0.746028472885357010, -0.745995176250497830, +-0.745961877750651260, -0.745928577385900020, -0.745895275156327360, -0.745861971062016460, -0.745828665103050680, -0.745795357279512630, -0.745762047591486900, -0.745728736039055870, +-0.745695422622303040, -0.745662107341311780, -0.745628790196165130, -0.745595471186946470, -0.745562150313739290, -0.745528827576626530, -0.745495502975691340, -0.745462176511017870, +-0.745428848182688840, -0.745395517990787850, -0.745362185935398050, -0.745328852016602820, -0.745295516234485310, -0.745262178589128470, -0.745228839080616880, -0.745195497709033150, +-0.745162154474460550, -0.745128809376982670, -0.745095462416682790, -0.745062113593644270, -0.745028762907950390, -0.744995410359683970, -0.744962055948929720, -0.744928699675770360, +-0.744895341540289140, -0.744861981542569660, -0.744828619682695200, -0.744795255960749140, -0.744761890376814390, -0.744728522930975470, -0.744695153623315290, -0.744661782453917230, +-0.744628409422864680, -0.744595034530241120, -0.744561657776129930, -0.744528279160614700, -0.744494898683778050, -0.744461516345704900, -0.744428132146477850, -0.744394746086180500, +-0.744361358164896240, -0.744327968382708650, -0.744294576739701120, -0.744261183235956580, -0.744227787871559630, -0.744194390646593210, -0.744160991561140790, -0.744127590615285990, +-0.744094187809112070, -0.744060783142702850, -0.744027376616141490, -0.743993968229511800, -0.743960557982896620, -0.743927145876380650, -0.743893731910046710, -0.743860316083978510, +-0.743826898398259550, -0.743793478852973310, -0.743760057448202730, -0.743726634184032620, -0.743693209060545920, -0.743659782077826350, -0.743626353235957160, -0.743592922535022070, +-0.743559489975104790, -0.743526055556288700, -0.743492619278657510, -0.743459181142294150, -0.743425741147283440, -0.743392299293708430, -0.743358855581652600, -0.743325410011199670, +-0.743291962582433240, -0.743258513295436800, -0.743225062150293600, -0.743191609147088260, -0.743158154285903930, -0.743124697566824200, -0.743091238989932790, -0.743057778555313190, +-0.743024316263049210, -0.742990852113224460, -0.742957386105921880, -0.742923918241226500, -0.742890448519221370, -0.742856976939989980, -0.742823503503616370, -0.742790028210183810, +-0.742756551059776230, -0.742723072052476670, -0.742689591188369970, -0.742656108467539380, -0.742622623890068610, -0.742589137456041160, -0.742555649165540840, -0.742522159018651370, +-0.742488667015456680, -0.742455173156039590, -0.742421677440485150, -0.742388179868876510, -0.742354680441297490, -0.742321179157831800, -0.742287676018563050, -0.742254171023575160, +-0.742220664172951290, -0.742187155466776270, -0.742153644905133470, -0.742120132488106490, -0.742086618215779260, -0.742053102088235380, -0.742019584105558790, -0.741986064267833200, +-0.741952542575142540, -0.741919019027569850, -0.741885493625200180, -0.741851966368116790, -0.741818437256403510, -0.741784906290144150, -0.741751373469422550, -0.741717838794321960, +-0.741684302264927210, -0.741650763881321890, -0.741617223643589510, -0.741583681551814090, -0.741550137606079570, -0.741516591806469670, -0.741483044153068200, -0.741449494645959110, +-0.741415943285225860, -0.741382390070953190, -0.741348835003224680, -0.741315278082123940, -0.741281719307735120, -0.741248158680141930, -0.741214596199427760, -0.741181031865677630, +-0.741147465678975050, -0.741113897639403720, -0.741080327747047680, -0.741046756001990880, -0.741013182404317130, -0.740979606954110360, -0.740946029651454730, -0.740912450496433280, +-0.740878869489131290, -0.740845286629632230, -0.740811701918019930, -0.740778115354378430, -0.740744526938791560, -0.740710936671343360, -0.740677344552117200, -0.740643750581198360, +-0.740610154758670090, -0.740576557084616560, -0.740542957559121470, -0.740509356182269100, -0.740475752954143250, -0.740442147874827980, -0.740408540944406890, -0.740374932162964900, +-0.740341321530585740, -0.740307709047353210, -0.740274094713351370, -0.740240478528664260, -0.740206860493376030, -0.740173240607570060, -0.740139618871331510, -0.740105995284743970, +-0.740072369847891490, -0.740038742560858000, -0.740005113423727660, -0.739971482436584620, -0.739937849599512810, -0.739904214912596280, -0.739870578375918740, -0.739836939989565350, +-0.739803299753619580, -0.739769657668165600, -0.739736013733287460, -0.739702367949069180, -0.739668720315594500, -0.739635070832948660, -0.739601419501215050, -0.739567766320477830, +-0.739534111290821360, -0.739500454412329480, -0.739466795685086550, -0.739433135109176520, -0.739399472684683760, -0.739365808411691640, -0.739332142290285650, -0.739298474320549400, +-0.739264804502566820, -0.739231132836422280, -0.739197459322199930, -0.739163783959983280, -0.739130106749857800, -0.739096427691907090, -0.739062746786215200, -0.739029064032866610, +-0.738995379431945270, -0.738961692983535420, -0.738928004687721350, -0.738894314544587320, -0.738860622554216920, -0.738826928716695530, -0.738793233032106870, -0.738759535500535080, +-0.738725836122064440, -0.738692134896779210, -0.738658431824763650, -0.738624726906101480, -0.738591020140878070, -0.738557311529177030, -0.738523601071082720, -0.738489888766679540, +-0.738456174616051400, -0.738422458619283020, -0.738388740776458440, -0.738355021087661490, -0.738321299552977430, -0.738287576172490190, -0.738253850946284040, -0.738220123874443250, +-0.738186394957052070, -0.738152664194195120, -0.738118931585955760, -0.738085197132419600, -0.738051460833670570, -0.738017722689792820, -0.737983982700870730, -0.737950240866988790, +-0.737916497188231160, -0.737882751664682310, -0.737849004296426640, -0.737815255083547840, -0.737781504026131520, -0.737747751124261390, -0.737713996378021820, -0.737680239787497300, +-0.737646481352772220, -0.737612721073930390, -0.737578958951057300, -0.737545194984236760, -0.737511429173553280, -0.737477661519091220, -0.737443892020935080, -0.737410120679169110, +-0.737376347493877930, -0.737342572465145780, -0.737308795593056620, -0.737275016877696140, -0.737241236319148060, -0.737207453917496870, -0.737173669672827160, -0.737139883585223200, +-0.737106095654768920, -0.737072305881550040, -0.737038514265650260, -0.737004720807154400, -0.736970925506146620, -0.736937128362711520, -0.736903329376933700, -0.736869528548897420, +-0.736835725878687400, -0.736801921366387450, -0.736768115012083280, -0.736734306815858830, -0.736700496777798590, -0.736666684897987150, -0.736632871176509000, -0.736599055613448740, +-0.736565238208890080, -0.736531418962918960, -0.736497597875619410, -0.736463774947075820, -0.736429950177372780, -0.736396123566594780, -0.736362295114826540, -0.736328464822152640, +-0.736294632688656910, -0.736260798714425180, -0.736226962899541370, -0.736193125244090310, -0.736159285748156370, -0.736125444411824260, -0.736091601235178470, -0.736057756218303160, +-0.736023909361283920, -0.735990060664205030, -0.735956210127150960, -0.735922357750206310, -0.735888503533455920, -0.735854647476984150, -0.735820789580875710, -0.735786929845214770, +-0.735753068270087130, -0.735719204855576850, -0.735685339601768410, -0.735651472508746740, -0.735617603576596450, -0.735583732805402010, -0.735549860195247710, -0.735515985746219240, +-0.735482109458400980, -0.735448231331877310, -0.735414351366733170, -0.735380469563053140, -0.735346585920921840, -0.735312700440424180, -0.735278813121644780, -0.735244923964667670, +-0.735211032969578790, -0.735177140136462510, -0.735143245465403220, -0.735109348956485940, -0.735075450609795180, -0.735041550425415300, -0.735007648403432020, -0.734973744543929720, +-0.734939838846992990, -0.734905931312706760, -0.734872021941155640, -0.734838110732424440, -0.734804197686597990, -0.734770282803761110, -0.734736366083997840, -0.734702447527394220, +-0.734668527134034520, -0.734634604904003560, -0.734600680837386060, -0.734566754934266820, -0.734532827194730680, -0.734498897618862000, -0.734464966206746510, -0.734431032958468680, +-0.734397097874113220, -0.734363160953765080, -0.734329222197509070, -0.734295281605430010, -0.734261339177612600, -0.734227394914141350, -0.734193448815102290, -0.734159500880579460, +-0.734125551110657910, -0.734091599505422580, -0.734057646064958160, -0.734023690789349590, -0.733989733678681370, -0.733955774733039190, -0.733921813952507660, -0.733887851337171710, +-0.733853886887116060, -0.733819920602425620, -0.733785952483185460, -0.733751982529480370, -0.733718010741394750, -0.733684037119014640, -0.733650061662424520, -0.733616084371709220, +-0.733582105246953780, -0.733548124288242900, -0.733514141495661850, -0.733480156869294800, -0.733446170409227990, -0.733412182115545710, -0.733378191988332980, -0.733344200027674860, +-0.733310206233656170, -0.733276210606361940, -0.733242213145877230, -0.733208213852286960, -0.733174212725675620, -0.733140209766129260, -0.733106204973732360, -0.733072198348569960, +-0.733038189890727110, -0.733004179600288850, -0.732970167477339450, -0.732936153521965170, -0.732902137734250610, -0.732868120114280710, -0.732834100662140500, -0.732800079377915030, +-0.732766056261689340, -0.732732031313548470, -0.732698004533577580, -0.732663975921861050, -0.732629945478485260, -0.732595913203534570, -0.732561879097094140, -0.732527843159248900, +-0.732493805390084130, -0.732459765789684750, -0.732425724358135470, -0.732391681095522440, -0.732357636001930160, -0.732323589077443880, -0.732289540322148550, -0.732255489736129420, +-0.732221437319471540, -0.732187383072260060, -0.732153326994579580, -0.732119269086516260, -0.732085209348154910, -0.732051147779580470, -0.732017084380878090, -0.731983019152133150, +-0.731948952093430580, -0.731914883204854980, -0.731880812486492840, -0.731846739938428750, -0.731812665560747640, -0.731778589353535010, -0.731744511316875790, -0.731710431450855350, +-0.731676349755558840, -0.731642266231070870, -0.731608180877477810, -0.731574093694864260, -0.731540004683315480, -0.731505913842916740, -0.731471821173753200, -0.731437726675910120, +-0.731403630349472090, -0.731369532194525610, -0.731335432211155270, -0.731301330399446450, -0.731267226759484190, -0.731233121291353870, -0.731199013995140760, -0.731164904870930110, +-0.731130793918807200, -0.731096681138856840, -0.731062566531165190, -0.731028450095817290, -0.730994331832898080, -0.730960211742493150, -0.730926089824687650, -0.730891966079566410, +-0.730857840507215810, -0.730823713107720540, -0.730789583881166100, -0.730755452827637540, -0.730721319947220560, -0.730687185240000090, -0.730653048706061740, -0.730618910345490760, +-0.730584770158371980, -0.730550628144791770, -0.730516484304835070, -0.730482338638587030, -0.730448191146133240, -0.730414041827558980, -0.730379890682949620, -0.730345737712389860, +-0.730311582915966430, -0.730277426293764020, -0.730243267845868130, -0.730209107572363900, -0.730174945473337060, -0.730140781548872740, -0.730106615799056560, -0.730072448223973100, +-0.730038278823709310, -0.730004107598349660, -0.729969934547979870, -0.729935759672685200, -0.729901582972551030, -0.729867404447662960, -0.729833224098105800, -0.729799041923966160, +-0.729764857925328970, -0.729730672102279600, -0.729696484454903540, -0.729662294983286270, -0.729628103687513410, -0.729593910567670090, -0.729559715623841480, -0.729525518856114160, +-0.729491320264572970, -0.729457119849303610, -0.729422917610391460, -0.729388713547921900, -0.729354507661980620, -0.729320299952652460, -0.729286090420024240, -0.729251879064180650, +-0.729217665885207420, -0.729183450883190030, -0.729149234058213970, -0.729115015410364940, -0.729080794939728220, -0.729046572646389610, -0.729012348530433950, -0.728978122591948050, +-0.728943894831016740, -0.728909665247725820, -0.728875433842160580, -0.728841200614406940, -0.728806965564549600, -0.728772728692675400, -0.728738489998869480, -0.728704249483217330, +-0.728670007145804540, -0.728635762986716730, -0.728601517006039480, -0.728567269203858390, -0.728533019580259290, -0.728498768135326880, -0.728464514869148210, -0.728430259781808310, +-0.728396002873392680, -0.728361744143987020, -0.728327483593677050, -0.728293221222548360, -0.728258957030686100, -0.728224691018176990, -0.728190423185106070, -0.728156153531559270, +-0.728121882057621850, -0.728087608763379970, -0.728053333648918890, -0.728019056714324540, -0.727984777959681970, -0.727950497385078000, -0.727916214990597890, -0.727881930776327120, +-0.727847644742351640, -0.727813356888756920, -0.727779067215628910, -0.727744775723052630, -0.727710482411114910, -0.727676187279901020, -0.727641890329496780, -0.727607591559987780, +-0.727573290971459730, -0.727538988563998460, -0.727504684337689670, -0.727470378292618620, -0.727436070428872260, -0.727401760746535730, -0.727367449245694740, -0.727333135926435110, +-0.727298820788842670, -0.727264503833003230, -0.727230185059001940, -0.727195864466925750, -0.727161542056859900, -0.727127217828890120, -0.727092891783102440, -0.727058563919582460, +-0.727024234238416000, -0.726989902739689110, -0.726955569423487270, -0.726921234289896080, -0.726886897339002250, -0.726852558570891370, -0.726818217985648940, -0.726783875583360990, +-0.726749531364113350, -0.726715185327991400, -0.726680837475081940, -0.726646487805470480, -0.726612136319242710, -0.726577783016484680, -0.726543427897282100, -0.726509070961721020, +-0.726474712209887240, -0.726440351641866710, -0.726405989257744690, -0.726371625057608330, -0.726337259041542890, -0.726302891209634320, -0.726268521561968420, -0.726234150098631240, +-0.726199776819708820, -0.726165401725286320, -0.726131024815450780, -0.726096646090287790, -0.726062265549883180, -0.726027883194322880, -0.725993499023692810, -0.725959113038079030, +-0.725924725237567570, -0.725890335622243590, -0.725855944192194460, -0.725821550947505330, -0.725787155888262480, -0.725752759014551610, -0.725718360326458980, -0.725683959824070300, +-0.725649557507471180, -0.725615153376748760, -0.725580747431988530, -0.725546339673276420, -0.725511930100698370, -0.725477518714340520, -0.725443105514288920, -0.725408690500629500, +-0.725374273673447760, -0.725339855032831050, -0.725305434578864540, -0.725271012311634600, -0.725236588231227050, -0.725202162337728050, -0.725167734631223640, -0.725133305111799190, +-0.725098873779542190, -0.725064440634538010, -0.725030005676872700, -0.724995568906632410, -0.724961130323903080, -0.724926689928771070, -0.724892247721322210, -0.724857803701642770, +-0.724823357869818330, -0.724788910225935950, -0.724754460770081320, -0.724720009502340720, -0.724685556422799860, -0.724651101531545220, -0.724616644828662170, -0.724582186314238210, +-0.724547725988358700, -0.724513263851109920, -0.724478799902577910, -0.724444334142848920, -0.724409866572009120, -0.724375397190144770, -0.724340925997341790, -0.724306452993685900, +-0.724271978179264480, -0.724237501554163110, -0.724203023118467960, -0.724168542872265400, -0.724134060815641360, -0.724099576948682210, -0.724065091271473450, -0.724030603784102670, +-0.723996114486655350, -0.723961623379217660, -0.723927130461875960, -0.723892635734716410, -0.723858139197825380, -0.723823640851288920, -0.723789140695192730, -0.723754638729624310, +-0.723720134954669360, -0.723685629370414030, -0.723651121976944590, -0.723616612774347410, -0.723582101762708650, -0.723547588942114020, -0.723513074312651110, -0.723478557874405400, +-0.723444039627463400, -0.723409519571911240, -0.723374997707835200, -0.723340474035321760, -0.723305948554457180, -0.723271421265327060, -0.723236892168019010, -0.723202361262618720, +-0.723167828549212580, -0.723133294027886840, -0.723098757698727780, -0.723064219561821990, -0.723029679617254840, -0.722995137865114270, -0.722960594305485760, -0.722926048938455800, +-0.722891501764110770, -0.722856952782536920, -0.722822401993820640, -0.722787849398048520, -0.722753294995306610, -0.722718738785680940, -0.722684180769259000, -0.722649620946126610, +-0.722615059316370160, -0.722580495880076110, -0.722545930637330750, -0.722511363588219990, -0.722476794732831440, -0.722442224071250920, -0.722407651603564900, -0.722373077329859560, +-0.722338501250221700, -0.722303923364737480, -0.722269343673493490, -0.722234762176576120, -0.722200178874071290, -0.722165593766066590, -0.722131006852647970, -0.722096418133901690, +-0.722061827609914550, -0.722027235280772730, -0.721992641146562140, -0.721958045207370720, -0.721923447463284070, -0.721888847914388790, -0.721854246560771460, -0.721819643402518580, +-0.721785038439716420, -0.721750431672451790, -0.721715823100811060, -0.721681212724880170, -0.721646600544746830, -0.721611986560496970, -0.721577370772217170, -0.721542753179993950, +-0.721508133783913760, -0.721473512584063340, -0.721438889580528490, -0.721404264773397140, -0.721369638162754900, -0.721335009748688690, -0.721300379531285010, -0.721265747510630330, +-0.721231113686811250, -0.721196478059914490, -0.721161840630025750, -0.721127201397233190, -0.721092560361622500, -0.721057917523280520, -0.721023272882293620, -0.720988626438748610, +-0.720953978192732100, -0.720919328144330020, -0.720884676293630070, -0.720850022640718620, -0.720815367185681950, -0.720780709928606990, -0.720746050869580210, -0.720711390008688340, +-0.720676727346017950, -0.720642062881655780, -0.720607396615687850, -0.720572728548201980, -0.720538058679284330, -0.720503387009021500, -0.720468713537500190, -0.720434038264807120, +-0.720399361191028320, -0.720364682316251840, -0.720330001640563600, -0.720295319164050210, -0.720260634886798700, -0.720225948808895570, -0.720191260930427510, -0.720156571251481360, +-0.720121879772143700, -0.720087186492500810, -0.720052491412640490, -0.720017794532649020, -0.719983095852613110, -0.719948395372619340, -0.719913693092754660, -0.719878989013105100, +-0.719844283133758700, -0.719809575454801510, -0.719774865976320450, -0.719740154698402250, -0.719705441621133590, -0.719670726744601420, -0.719636010068892330, -0.719601291594093360, +-0.719566571320290450, -0.719531849247571740, -0.719497125376023390, -0.719462399705732230, -0.719427672236785050, -0.719392942969268700, -0.719358211903270100, -0.719323479038875170, +-0.719288744376172300, -0.719254007915247520, -0.719219269656187770, -0.719184529599079750, -0.719149787744010500, -0.719115044091066750, -0.719080298640335400, -0.719045551391902630, +-0.719010802345856680, -0.718976051502283610, -0.718941298861270560, -0.718906544422904140, -0.718871788187271380, -0.718837030154459210, -0.718802270324553790, -0.718767508697643390, +-0.718732745273814140, -0.718697980053153000, -0.718663213035746980, -0.718628444221682930, -0.718593673611047760, -0.718558901203928400, -0.718524127000411790, -0.718489351000584200, +-0.718454573204533880, -0.718419793612347200, -0.718385012224110890, -0.718350229039912190, -0.718315444059837830, -0.718280657283974280, -0.718245868712409700, -0.718211078345230460, +-0.718176286182523490, -0.718141492224375840, -0.718106696470874440, -0.718071898922106320, -0.718037099578158420, -0.718002298439117780, -0.717967495505070770, -0.717932690776105660, +-0.717897884252308830, -0.717863075933767300, -0.717828265820568020, -0.717793453912798140, -0.717758640210544030, -0.717723824713893840, -0.717689007422934180, -0.717654188337751850, +-0.717619367458434240, -0.717584544785068170, -0.717549720317740670, -0.717514894056538900, -0.717480066001549900, -0.717445236152860040, -0.717410404510557820, -0.717375571074729490, +-0.717340735845462320, -0.717305898822843350, -0.717271060006959500, -0.717236219397898060, -0.717201376995745490, -0.717166532800590060, -0.717131686812518270, -0.717096839031617360, +-0.717061989457974280, -0.717027138091676170, -0.716992284932810310, -0.716957429981463720, -0.716922573237723020, -0.716887714701676340, -0.716852854373410510, -0.716817992253012460, +-0.716783128340569450, -0.716748262636168530, -0.716713395139897070, -0.716678525851841550, -0.716643654772090240, -0.716608781900729740, -0.716573907237847420, -0.716539030783530210, +-0.716504152537865590, -0.716469272500940390, -0.716434390672842090, -0.716399507053657960, -0.716364621643474250, -0.716329734442379680, -0.716294845450460740, -0.716259954667804680, +-0.716225062094498770, -0.716190167730630270, -0.716155271576285560, -0.716120373631553450, -0.716085473896520330, -0.716050572371273560, -0.716015669055900310, -0.715980763950487930, +-0.715945857055123700, -0.715910948369894660, -0.715876037894888410, -0.715841125630191310, -0.715806211575892190, -0.715771295732077430, -0.715736378098834390, -0.715701458676250460, +-0.715666537464412890, -0.715631614463408390, -0.715596689673325350, -0.715561763094250790, -0.715526834726271650, -0.715491904569475420, -0.715456972623949470, -0.715422038889781180, +-0.715387103367057690, -0.715352166055866380, -0.715317226956294180, -0.715282286068429470, -0.715247343392359070, -0.715212398928170230, -0.715177452675950560, -0.715142504635787100, +-0.715107554807767440, -0.715072603191978300, -0.715037649788508150, -0.715002694597444030, -0.714967737618873110, -0.714932778852882870, -0.714897818299560560, -0.714862855958993900, +-0.714827891831269930, -0.714792925916475700, -0.714757958214699780, -0.714722988726028910, -0.714688017450550660, -0.714653044388352310, -0.714618069539521340, -0.714583092904145230, +-0.714548114482310700, -0.714513134274106560, -0.714478152279619530, -0.714443168498937190, -0.714408182932146920, -0.714373195579336210, -0.714338206440592430, -0.714303215516003180, +-0.714268222805655270, -0.714233228309637420, -0.714198232028036450, -0.714163233960940060, -0.714128234108435400, -0.714093232470610180, -0.714058229047552010, -0.714023223839347580, +-0.713988216846085710, -0.713953208067853230, -0.713918197504737840, -0.713883185156826920, -0.713848171024207940, -0.713813155106968630, -0.713778137405196470, -0.713743117918978930, +-0.713708096648402960, -0.713673073593557360, -0.713638048754529080, -0.713603022131405700, -0.713567993724274820, -0.713532963533223820, -0.713497931558339850, -0.713462897799711730, +-0.713427862257426270, -0.713392824931571190, -0.713357785822234080, -0.713322744929502540, -0.713287702253464050, -0.713252657794206320, -0.713217611551816950, -0.713182563526382980, +-0.713147513717993120, -0.713112462126734630, -0.713077408752694870, -0.713042353595961580, -0.713007296656622440, -0.712972237934765160, -0.712937177430476470, -0.712902115143845600, +-0.712867051074959400, -0.712831985223905560, -0.712796917590771790, -0.712761848175645700, -0.712726776978614970, -0.712691703999767330, -0.712656629239189820, -0.712621552696971360, +-0.712586474373199000, -0.712551394267960330, -0.712516312381343390, -0.712481228713435550, -0.712446143264324650, -0.712411056034097820, -0.712375967022843890, -0.712340876230650120, +-0.712305783657604110, -0.712270689303793670, -0.712235593169306510, -0.712200495254230350, -0.712165395558652990, -0.712130294082661490, -0.712095190826344870, -0.712060085789790300, +-0.712024978973085480, -0.711989870376318220, -0.711954759999576250, -0.711919647842947370, -0.711884533906518850, -0.711849418190379610, -0.711814300694616710, -0.711779181419318170, +-0.711744060364571610, -0.711708937530464940, -0.711673812917085980, -0.711638686524522330, -0.711603558352862150, -0.711568428402192250, -0.711533296672602010, -0.711498163164178580, +-0.711463027877009770, -0.711427890811183290, -0.711392751966787080, -0.711357611343908400, -0.711322468942636290, -0.711287324763058000, -0.711252178805261480, -0.711217031069334430, +-0.711181881555364770, -0.711146730263440550, -0.711111577193649370, -0.711076422346079370, -0.711041265720817610, -0.711006107317953220, -0.710970947137573690, -0.710935785179766740, +-0.710900621444620410, -0.710865455932222500, -0.710830288642660850, -0.710795119576022930, -0.710759948732397890, -0.710724776111872900, -0.710689601714535990, -0.710654425540475090, +-0.710619247589778010, -0.710584067862533030, -0.710548886358827740, -0.710513703078749610, -0.710478518022387820, -0.710443331189829830, -0.710408142581163470, -0.710372952196476780, +-0.710337760035857580, -0.710302566099394130, -0.710267370387173580, -0.710232172899285310, -0.710196973635816460, -0.710161772596855310, -0.710126569782489670, -0.710091365192807580, +-0.710056158827897080, -0.710020950687846210, -0.709985740772742350, -0.709950529082674750, -0.709915315617730910, -0.709880100377998650, -0.709844883363566210, -0.709809664574521550, +-0.709774444010952690, -0.709739221672947120, -0.709703997560594100, -0.709668771673981120, -0.709633544013196230, -0.709598314578327450, -0.709563083369462940, -0.709527850386690640, +-0.709492615630098800, -0.709457379099775350, -0.709422140795807790, -0.709386900718285580, -0.709351658867296120, -0.709316415242927430, -0.709281169845267790, -0.709245922674405230, +-0.709210673730427230, -0.709175423013423180, -0.709140170523480440, -0.709104916260687390, -0.709069660225132070, -0.709034402416902520, -0.708999142836087000, -0.708963881482773670, +-0.708928618357050570, -0.708893353459005390, -0.708858086788727420, -0.708822818346304120, -0.708787548131823870, -0.708752276145374730, -0.708717002387044940, -0.708681726856922540, +-0.708646449555095370, -0.708611170481652560, -0.708575889636681830, -0.708540607020271440, -0.708505322632509540, -0.708470036473484280, -0.708434748543284030, -0.708399458841996730, +-0.708364167369710310, -0.708328874126514020, -0.708293579112495570, -0.708258282327743130, -0.708222983772345050, -0.708187683446389490, -0.708152381349964720, -0.708117077483158330, +-0.708081771846059920, -0.708046464438757070, -0.708011155261338070, -0.707975844313891270, -0.707940531596504720, -0.707905217109266900, -0.707869900852265980, -0.707834582825589750, +-0.707799263029327720, -0.707763941463567360, -0.707728618128397270, -0.707693293023905600, -0.707657966150180840, -0.707622637507311030, -0.707587307095383980, -0.707551974914489400, +-0.707516640964714780, -0.707481305246148610, -0.707445967758879140, -0.707410628502994740, -0.707375287478583800, -0.707339944685734690, -0.707304600124535670, -0.707269253795074440, +-0.707233905697440820, -0.707198555831722420, -0.707163204198007600, -0.707127850796384740, -0.707092495626942320, -0.707057138689768050, -0.707021779984951530, -0.706986419512580570, +-0.706951057272743540, -0.706915693265528830, -0.706880327491024920, -0.706844959949320170, -0.706809590640503080, -0.706774219564662020, -0.706738846721884690, -0.706703472112260920, +-0.706668095735878520, -0.706632717592825870, -0.706597337683191330, -0.706561956007063510, -0.706526572564530890, -0.706491187355681060, -0.706455800380603960, -0.706420411639387400, +-0.706385021132119760, -0.706349628858889520, -0.706314234819785280, -0.706278839014895410, -0.706243441444308510, -0.706208042108112280, -0.706172641006396650, -0.706137238139249450, +-0.706101833506759040, -0.706066427109014130, -0.706031018946103090, -0.705995609018114530, -0.705960197325136370, -0.705924783867258320, -0.705889368644568300, -0.705853951657154810, +-0.705818532905106540, -0.705783112388511880, -0.705747690107459410, -0.705712266062037740, -0.705676840252334790, -0.705641412678440380, -0.705605983340442440, -0.705570552238429460, +-0.705535119372490250, -0.705499684742713180, -0.705464248349186860, -0.705428810191999320, -0.705393370271240380, -0.705357928586997970, -0.705322485139360800, -0.705287039928417350, +-0.705251592954256320, -0.705216144216966320, -0.705180693716636050, -0.705145241453353890, -0.705109787427208090, -0.705074331638288480, -0.705038874086682980, -0.705003414772480300, +-0.704967953695769150, -0.704932490856638010, -0.704897026255175030, -0.704861559891470150, -0.704826091765611400, -0.704790621877687370, -0.704755150227786790, -0.704719676815998340, +-0.704684201642410750, -0.704648724707112590, -0.704613246010192710, -0.704577765551739010, -0.704542283331841550, -0.704506799350588350, -0.704471313608068140, -0.704435826104369720, +-0.704400336839581700, -0.704364845813792770, -0.704329353027091210, -0.704293858479566830, -0.704258362171307770, -0.704222864102402870, -0.704187364272940820, -0.704151862683010330, +-0.704116359332700230, -0.704080854222099100, -0.704045347351295310, -0.704009838720378810, -0.703974328329437630, -0.703938816178560690, -0.703903302267836710, -0.703867786597354380, +-0.703832269167202760, -0.703796749977469660, -0.703761229028245340, -0.703725706319618060, -0.703690181851676420, -0.703654655624509350, -0.703619127638205670, -0.703583597892854180, +-0.703548066388543610, -0.703512533125362330, -0.703476998103400360, -0.703441461322745760, -0.703405922783487680, -0.703370382485714710, -0.703334840429515770, -0.703299296614979810, +-0.703263751042194850, -0.703228203711251170, -0.703192654622237120, -0.703157103775241320, -0.703121551170352800, -0.703085996807660370, -0.703050440687252860, -0.703014882809219420, +-0.702979323173648640, -0.702943761780629010, -0.702908198630250560, -0.702872633722601670, -0.702837067057771160, -0.702801498635847950, -0.702765928456920990, -0.702730356521078630, +-0.702694782828411020, -0.702659207379006330, -0.702623630172953820, -0.702588051210342070, -0.702552470491260240, -0.702516888015797260, -0.702481303784042050, -0.702445717796083560, +-0.702410130052010250, -0.702374540551912060, -0.702338949295877700, -0.702303356283995870, -0.702267761516355620, -0.702232164993046080, -0.702196566714155980, -0.702160966679773900, +-0.702125364889990110, -0.702089761344892870, -0.702054156044571220, -0.702018548989114090, -0.701982940178610630, -0.701947329613149870, -0.701911717292820760, -0.701876103217711770, +-0.701840487387913160, -0.701804869803513200, -0.701769250464601150, -0.701733629371266040, -0.701698006523596820, -0.701662381921682510, -0.701626755565611600, -0.701591127455474580, +-0.701555497591359600, -0.701519865973355920, -0.701484232601552680, -0.701448597476038720, -0.701412960596903280, -0.701377321964235520, -0.701341681578123710, -0.701306039438658440, +-0.701270395545928070, -0.701234749900021660, -0.701199102501028350, -0.701163453349037290, -0.701127802444137640, -0.701092149786417870, -0.701056495375968370, -0.701020839212877610, +-0.700985181297234640, -0.700949521629128820, -0.700913860208649210, -0.700878197035884940, -0.700842532110925060, -0.700806865433859060, -0.700771197004775080, -0.700735526823763830, +-0.700699854890913800, -0.700664181206314020, -0.700628505770053870, -0.700592828582222490, -0.700557149642908270, -0.700521468952201910, -0.700485786510191890, -0.700450102316967360, +-0.700414416372617590, -0.700378728677231830, -0.700343039230899130, -0.700307348033708870, -0.700271655085750290, -0.700235960387112000, -0.700200263937884260, -0.700164565738156000, +-0.700128865788016250, -0.700093164087554400, -0.700057460636859590, -0.700021755436020520, -0.699986048485127690, -0.699950339784269790, -0.699914629333535990, -0.699878917133015640, +-0.699843203182797910, -0.699807487482972280, -0.699771770033627890, -0.699736050834854020, -0.699700329886739470, -0.699664607189374730, -0.699628882742848400, -0.699593156547249960, +-0.699557428602668560, -0.699521698909193690, -0.699485967466914490, -0.699450234275919680, -0.699414499336299960, -0.699378762648144030, -0.699343024211541150, -0.699307284026580820, +-0.699271542093352180, -0.699235798411944610, -0.699200052982447700, -0.699164305804949930, -0.699128556879542120, -0.699092806206312870, -0.699057053785351550, -0.699021299616747640, +-0.698985543700590520, -0.698949786036969440, -0.698914026625973350, -0.698878265467692830, -0.698842502562216580, -0.698806737909634100, -0.698770971510034760, -0.698735203363508030, +-0.698699433470143290, -0.698663661830029930, -0.698627888443257520, -0.698592113309914660, -0.698556336430092180, -0.698520557803878780, -0.698484777431364060, -0.698448995312637380, +-0.698413211447788230, -0.698377425836905430, -0.698341638480079690, -0.698305849377399810, -0.698270058528955300, -0.698234265934835730, -0.698198471595130490, -0.698162675509928940, +-0.698126877679320800, -0.698091078103395550, -0.698055276782241880, -0.698019473715950630, -0.697983668904610720, -0.697947862348311630, -0.697912054047142850, -0.697876244001193970, +-0.697840432210553920, -0.697804618675313290, -0.697768803395561240, -0.697732986371387030, -0.697697167602880470, -0.697661347090130950, -0.697625524833228150, -0.697589700832261460, +-0.697553875087320470, -0.697518047598494230, -0.697482218365873540, -0.697446387389547230, -0.697410554669605000, -0.697374720206136330, -0.697338883999230940, -0.697303046048978300, +-0.697267206355467350, -0.697231364918789120, -0.697195521739032430, -0.697159676816286880, -0.697123830150642170, -0.697087981742188000, -0.697052131591013760, -0.697016279697209250, +-0.696980426060863300, -0.696944570682067050, -0.696908713560909330, -0.696872854697479730, -0.696836994091868060, -0.696801131744164030, -0.696765267654457010, -0.696729401822836270, +-0.696693534249392620, -0.696657664934215100, -0.696621793877393540, -0.696585921079017400, -0.696550046539176400, -0.696514170257960360, -0.696478292235458870, -0.696442412471761750, +-0.696406530966957820, -0.696370647721138330, -0.696334762734392100, -0.696298876006809060, -0.696262987538478820, -0.696227097329491060, -0.696191205379934950, -0.696155311689901410, +-0.696119416259479710, -0.696083519088759320, -0.696047620177830280, -0.696011719526782090, -0.695975817135704670, -0.695939913004687600, -0.695904007133820830, -0.695868099523193400, +-0.695832190172896330, -0.695796279083018780, -0.695760366253650560, -0.695724451684881510, -0.695688535376801200, -0.695652617329499010, -0.695616697543065770, -0.695580776017590940, +-0.695544852753164130, -0.695508927749875160, -0.695473001007813840, -0.695437072527070100, -0.695401142307733640, -0.695365210349894290, -0.695329276653641300, -0.695293341219065830, +-0.695257404046256910, -0.695221465135304470, -0.695185524486298450, -0.695149582099328530, -0.695113637974484780, -0.695077692111856220, -0.695041744511534000, -0.695005795173607500, +-0.694969844098166530, -0.694933891285300920, -0.694897936735100590, -0.694861980447655350, -0.694826022423055250, -0.694790062661389430, -0.694754101162749160, -0.694718137927223480, +-0.694682172954902530, -0.694646206245876140, -0.694610237800234340, -0.694574267618066840, -0.694538295699463020, -0.694502322044514120, -0.694466346653309420, -0.694430369525938950, +-0.694394390662492420, -0.694358410063059980, -0.694322427727731450, -0.694286443656596970, -0.694250457849745590, -0.694214470307268790, -0.694178481029255830, -0.694142490015796640, +-0.694106497266981260, -0.694070502782899610, -0.694034506563641740, -0.693998508609296900, -0.693962508919956480, -0.693926507495709720, -0.693890504336646790, -0.693854499442857490, +-0.693818492814431980, -0.693782484451460290, -0.693746474354032360, -0.693710462522238220, -0.693674448956167370, -0.693638433655910940, -0.693602416621558420, -0.693566397853199960, +-0.693530377350925380, -0.693494355114824930, -0.693458331144988000, -0.693422305441505740, -0.693386278004467840, -0.693350248833964230, -0.693314217930084960, -0.693278185292920180, +-0.693242150922559920, -0.693206114819094220, -0.693170076982613350, -0.693134037413206560, -0.693097996110965340, -0.693061953075979180, -0.693025908308338100, -0.692989861808132270, +-0.692953813575451720, -0.692917763610386710, -0.692881711913026610, -0.692845658483462800, -0.692809603321784980, -0.692773546428083090, -0.692737487802447370, -0.692701427444967880, +-0.692665365355734860, -0.692629301534838370, -0.692593235982367990, -0.692557168698415220, -0.692521099683069520, -0.692485028936421050, -0.692448956458560080, -0.692412882249576640, +-0.692376806309561000, -0.692340728638602740, -0.692304649236793250, -0.692268568104222100, -0.692232485240979580, -0.692196400647155930, -0.692160314322841200, -0.692124226268125640, +-0.692088136483099640, -0.692052044967852550, -0.692015951722475990, -0.691979856747059640, -0.691943760041693560, -0.691907661606468110, -0.691871561441473440, -0.691835459546800040, +-0.691799355922537160, -0.691763250568776630, -0.691727143485608040, -0.691691034673121430, -0.691654924131407390, -0.691618811860555960, -0.691582697860657510, -0.691546582131802310, +-0.691510464674080620, -0.691474345487582130, -0.691438224572398450, -0.691402101928619280, -0.691365977556334780, -0.691329851455635300, -0.691293723626611230, -0.691257594069352280, +-0.691221462783949910, -0.691185329770493850, -0.691149195029074570, -0.691113058559782220, -0.691076920362707290, -0.691040780437939930, -0.691004638785570720, -0.690968495405689940, +-0.690932350298387290, -0.690896203463754240, -0.690860054901880850, -0.690823904612857250, -0.690787752596773940, -0.690751598853721170, -0.690715443383789540, -0.690679286187068530, +-0.690643127263649960, -0.690606966613623640, -0.690570804237079840, -0.690534640134109030, -0.690498474304801710, -0.690462306749248130, -0.690426137467538780, -0.690389966459763470, +-0.690353793726013910, -0.690317619266379800, -0.690281443080951630, -0.690245265169819880, -0.690209085533075030, -0.690172904170807460, -0.690136721083106860, -0.690100536270065180, +-0.690064349731772220, -0.690028161468318360, -0.689991971479794080, -0.689955779766289860, -0.689919586327896180, -0.689883391164703540, -0.689847194276801750, -0.689810995664282610, +-0.689774795327236070, -0.689738593265752490, -0.689702389479922460, -0.689666183969836480, -0.689629976735584900, -0.689593767777257890, -0.689557557094947040, -0.689521344688742270, +-0.689485130558734170, -0.689448914705013240, -0.689412697127670060, -0.689376477826795010, -0.689340256802478900, -0.689304034054812110, -0.689267809583884670, -0.689231583389788180, +-0.689195355472612900, -0.689159125832449090, -0.689122894469387570, -0.689086661383518710, -0.689050426574932650, -0.689014190043721110, -0.688977951789974120, -0.688941711813782280, +-0.688905470115236060, -0.688869226694426300, -0.688832981551443350, -0.688796734686378030, -0.688760486099320830, -0.688724235790361790, -0.688687983759592840, -0.688651730007103890, +-0.688615474532985660, -0.688579217337328630, -0.688542958420223620, -0.688506697781761320, -0.688470435422031460, -0.688434171341126280, -0.688397905539135600, -0.688361638016150130, +-0.688325368772260690, -0.688289097807557760, -0.688252825122132040, -0.688216550716074350, -0.688180274589474510, -0.688143996742424770, -0.688107717175014950, -0.688071435887335880, +-0.688035152879478140, -0.687998868151532660, -0.687962581703589930, -0.687926293535740090, -0.687890003648075180, -0.687853712040685240, -0.687817418713660980, -0.687781123667093320, +-0.687744826901072750, -0.687708528415690080, -0.687672228211036130, -0.687635926287200940, -0.687599622644276650, -0.687563317282353200, -0.687527010201521630, -0.687490701401872410, +-0.687454390883496470, -0.687418078646484520, -0.687381764690926710, -0.687345449016915190, -0.687309131624539990, -0.687272812513892050, -0.687236491685061960, -0.687200169138140750, +-0.687163844873219020, -0.687127518890387810, -0.687091191189737720, -0.687054861771358990, -0.687018530635343680, -0.686982197781782160, -0.686945863210765120, -0.686909526922383500, +-0.686873188916727880, -0.686836849193888770, -0.686800507753958180, -0.686764164597026380, -0.686727819723184090, -0.686691473132522210, -0.686655124825131690, -0.686618774801103340, +-0.686582423060528080, -0.686546069603496730, -0.686509714430099560, -0.686473357540428820, -0.686436998934574660, -0.686400638612628010, -0.686364276574679690, -0.686327912820820730, +-0.686291547351141950, -0.686255180165733720, -0.686218811264688200, -0.686182440648095640, -0.686146068316046960, -0.686109694268633000, -0.686073318505944880, -0.686036941028073550, +-0.686000561835109820, -0.685964180927144060, -0.685927798304268420, -0.685891413966573270, -0.685855027914149650, -0.685818640147088490, -0.685782250665480710, -0.685745859469417240, +-0.685709466558988570, -0.685673071934286840, -0.685636675595402420, -0.685600277542426250, -0.685563877775449470, -0.685527476294562900, -0.685491073099857800, -0.685454668191424870, +-0.685418261569354700, -0.685381853233739570, -0.685345443184669720, -0.685309031422236310, -0.685272617946530270, -0.685236202757642740, -0.685199785855664660, -0.685163367240686490, +-0.685126946912800520, -0.685090524872097210, -0.685054101118667600, -0.685017675652602740, -0.684981248473993660, -0.684944819582931410, -0.684908388979507230, -0.684871956663812060, +-0.684835522635936280, -0.684799086895972350, -0.684762649444010770, -0.684726210280142470, -0.684689769404458690, -0.684653326817050490, -0.684616882518008340, -0.684580436507424730, +-0.684543988785389910, -0.684507539351995040, -0.684471088207331490, -0.684434635351490070, -0.684398180784562160, -0.684361724506638790, -0.684325266517811110, -0.684288806818169610, +-0.684252345407806770, -0.684215882286812960, -0.684179417455279550, -0.684142950913297580, -0.684106482660958190, -0.684070012698352550, -0.684033541025571350, -0.683997067642706850, +-0.683960592549849760, -0.683924115747091220, -0.683887637234522280, -0.683851157012234310, -0.683814675080318460, -0.683778191438865870, -0.683741706087967140, -0.683705219027714860, +-0.683668730258199410, -0.683632239779512260, -0.683595747591744460, -0.683559253694987380, -0.683522758089332050, -0.683486260774869180, -0.683449761751691360, -0.683413261019889200, +-0.683376758579553820, -0.683340254430776510, -0.683303748573648620, -0.683267241008261310, -0.683230731734705830, -0.683194220753073010, -0.683157708063455220, -0.683121193665943150, +-0.683084677560628180, -0.683048159747601470, -0.683011640226954380, -0.682975118998778160, -0.682938596063163430, -0.682902071420202980, -0.682865545069987200, -0.682829017012607680, +-0.682792487248155670, -0.682755955776722320, -0.682719422598399130, -0.682682887713277340, -0.682646351121448450, -0.682609812823002930, -0.682573272818033480, -0.682536731106630930, +-0.682500187688886540, -0.682463642564891670, -0.682427095734737700, -0.682390547198515440, -0.682353996956317270, -0.682317445008234210, -0.682280891354357540, -0.682244335994778630, +-0.682207778929588950, -0.682171220158879770, -0.682134659682742450, -0.682098097501268600, -0.682061533614548800, -0.682024968022675870, -0.681988400725740520, -0.681951831723834110, +-0.681915261017048140, -0.681878688605473960, -0.681842114489203180, -0.681805538668326380, -0.681768961142936390, -0.681732381913124020, -0.681695800978980750, -0.681659218340597840, +-0.681622633998067000, -0.681586047951479590, -0.681549460200926990, -0.681512870746500130, -0.681476279588291710, -0.681439686726392550, -0.681403092160894230, -0.681366495891888140, +-0.681329897919465970, -0.681293298243718870, -0.681256696864738000, -0.681220093782615940, -0.681183488997443630, -0.681146882509312660, -0.681110274318314500, -0.681073664424540650, +-0.681037052828082580, -0.681000439529031890, -0.680963824527479500, -0.680927207823518230, -0.680890589417238790, -0.680853969308732990, -0.680817347498092310, -0.680780723985408230, +-0.680744098770772240, -0.680707471854275490, -0.680670843236010570, -0.680634212916068740, -0.680597580894541140, -0.680560947171519710, -0.680524311747095930, -0.680487674621361390, +-0.680451035794407580, -0.680414395266326300, -0.680377753037208270, -0.680341109107146510, -0.680304463476232080, -0.680267816144556340, -0.680231167112211210, -0.680194516379288070, +-0.680157863945878070, -0.680121209812073910, -0.680084553977966850, -0.680047896443648380, -0.680011237209210200, -0.679974576274743890, -0.679937913640341170, -0.679901249306093640, +-0.679864583272092980, -0.679827915538430140, -0.679791246105198250, -0.679754574972488260, -0.679717902140391850, -0.679681227609000630, -0.679644551378406400, -0.679607873448700110, +-0.679571193819974660, -0.679534512492321440, -0.679497829465831820, -0.679461144740597600, -0.679424458316710610, -0.679387770194262440, -0.679351080373344800, -0.679314388854049490, +-0.679277695636467560, -0.679241000720692050, -0.679204304106813980, -0.679167605794925300, -0.679130905785117480, -0.679094204077482440, -0.679057500672111790, -0.679020795569096890, +-0.678984088768530560, -0.678947380270504050, -0.678910670075109080, -0.678873958182437450, -0.678837244592580880, -0.678800529305631170, -0.678763812321680260, -0.678727093640819070, +-0.678690373263140740, -0.678653651188736660, -0.678616927417698300, -0.678580201950117700, -0.678543474786086560, -0.678506745925696710, -0.678470015369039390, -0.678433283116207650, +-0.678396549167292750, -0.678359813522386500, -0.678323076181580610, -0.678286337144967110, -0.678249596412637710, -0.678212853984684340, -0.678176109861198920, -0.678139364042272490, +-0.678102616527998300, -0.678065867318467630, -0.678029116413772170, -0.677992363814004070, -0.677955609519254930, -0.677918853529616230, -0.677882095845181000, -0.677845336466040500, +-0.677808575392286670, -0.677771812624011430, -0.677735048161306590, -0.677698282004264190, -0.677661514152976040, -0.677624744607534190, -0.677587973368029780, -0.677551200434556080, +-0.677514425807204330, -0.677477649486066590, -0.677440871471234770, -0.677404091762800700, -0.677367310360855730, -0.677330527265493140, -0.677293742476804290, -0.677256955994881120, +-0.677220167819815420, -0.677183377951699360, -0.677146586390624860, -0.677109793136683960, -0.677072998189968470, -0.677036201550569870, -0.676999403218581430, -0.676962603194094510, +-0.676925801477201050, -0.676888998067993080, -0.676852192966562630, -0.676815386173001740, -0.676778577687401680, -0.676741767509855820, -0.676704955640455630, -0.676668142079292930, +-0.676631326826459880, -0.676594509882048610, -0.676557691246150950, -0.676520870918859150, -0.676484048900264480, -0.676447225190460410, -0.676410399789538210, -0.676373572697590020, +-0.676336743914707880, -0.676299913440983950, -0.676263081276510250, -0.676226247421378050, -0.676189411875681050, -0.676152574639510400, -0.676115735712958350, -0.676078895096116960, +-0.676042052789078360, -0.676005208791934600, -0.675968363104777810, -0.675931515727700160, -0.675894666660793010, -0.675857815904149840, -0.675820963457862130, -0.675784109322022040, +-0.675747253496721710, -0.675710395982053290, -0.675673536778108150, -0.675636675884979780, -0.675599813302759760, -0.675562949031540240, -0.675526083071413370, -0.675489215422471200, +-0.675452346084806090, -0.675415475058509960, -0.675378602343675300, -0.675341727940393380, -0.675304851848757880, -0.675267974068860190, -0.675231094600792560, -0.675194213444647250, +-0.675157330600516410, -0.675120446068491530, -0.675083559848666190, -0.675046671941131990, -0.675009782345981080, -0.674972891063305820, -0.674935998093198150, -0.674899103435750660, +-0.674862207091055270, -0.674825309059204460, -0.674788409340289720, -0.674751507934404530, -0.674714604841640590, -0.674677700062090270, -0.674640793595845500, -0.674603885442998870, +-0.674566975603642540, -0.674530064077868090, -0.674493150865769110, -0.674456235967437310, -0.674419319382964840, -0.674382401112444070, -0.674345481155967370, -0.674308559513626890, +-0.674271636185515110, -0.674234711171723510, -0.674197784472345800, -0.674160856087473670, -0.674123926017199280, -0.674086994261615220, -0.674050060820813530, -0.674013125694886810, +-0.673976188883926630, -0.673939250388026600, -0.673902310207278420, -0.673865368341774460, -0.673828424791607090, -0.673791479556868690, -0.673754532637651500, -0.673717584034048130, +-0.673680633746150730, -0.673643681774050980, -0.673606728117842830, -0.673569772777617870, -0.673532815753468350, -0.673495857045486870, -0.673458896653765680, -0.673421934578396720, +-0.673384970819473460, -0.673348005377087830, -0.673311038251332210, -0.673274069442298950, -0.673237098950080550, -0.673200126774769370, -0.673163152916457900, -0.673126177375238500, +-0.673089200151202990, -0.673052221244445190, -0.673015240655056910, -0.672978258383130410, -0.672941274428758280, -0.672904288792033010, -0.672867301473046410, -0.672830312471892070, +-0.672793321788662020, -0.672756329423448650, -0.672719335376344540, -0.672682339647441950, -0.672645342236833590, -0.672608343144611930, -0.672571342370869350, -0.672534339915697780, +-0.672497335779191020, -0.672460329961440890, -0.672423322462539890, -0.672386313282580690, -0.672349302421655580, -0.672312289879857250, -0.672275275657277630, -0.672238259754010410, +-0.672201242170147540, -0.672164222905781590, -0.672127201961005170, -0.672090179335910640, -0.672053155030590600, -0.672016129045137740, -0.671979101379643890, -0.671942072034202980, +-0.671905041008906910, -0.671868008303848190, -0.671830973919119500, -0.671793937854813340, -0.671756900111022290, -0.671719860687838400, -0.671682819585355470, -0.671645776803665550, +-0.671608732342861110, -0.671571686203034870, -0.671534638384279400, -0.671497588886687420, -0.671460537710351410, -0.671423484855363300, -0.671386430321817330, -0.671349374109805110, +-0.671312316219419560, -0.671275256650753160, -0.671238195403898620, -0.671201132478948640, -0.671164067875995140, -0.671127001595132170, -0.671089933636451640, -0.671052864000046380, +-0.671015792686008860, -0.670978719694431900, -0.670941645025408100, -0.670904568679030140, -0.670867490655390860, -0.670830410954582180, -0.670793329576698130, -0.670756246521830750, +-0.670719161790072740, -0.670682075381516810, -0.670644987296255660, -0.670607897534381440, -0.670570806095988180, -0.670533712981167820, -0.670496618190013270, -0.670459521722617140, +-0.670422423579072110, -0.670385323759471130, -0.670348222263906780, -0.670311119092471990, -0.670274014245258560, -0.670236907722360890, -0.670199799523870880, -0.670162689649881460, +-0.670125578100485230, -0.670088464875775110, -0.670051349975843810, -0.670014233400783480, -0.669977115150688140, -0.669939995225650180, -0.669902873625762060, -0.669865750351116840, +-0.669828625401807320, -0.669791498777926100, -0.669754370479566210, -0.669717240506819690, -0.669680108859780800, -0.669642975538541570, -0.669605840543194940, -0.669568703873833710, +-0.669531565530550710, -0.669494425513438740, -0.669457283822590070, -0.669420140458098940, -0.669382995420057410, -0.669345848708558290, -0.669308700323694720, -0.669271550265559290, +-0.669234398534245050, -0.669197245129844690, -0.669160090052450700, -0.669122933302157110, -0.669085774879056070, -0.669048614783240740, -0.669011453014803800, -0.668974289573838200, +-0.668937124460436960, -0.668899957674692240, -0.668862789216698280, -0.668825619086547360, -0.668788447284332290, -0.668751273810146210, -0.668714098664081820, -0.668676921846232290, +-0.668639743356690520, -0.668602563195549230, -0.668565381362901000, -0.668528197858839990, -0.668491012683458340, -0.668453825836849310, -0.668416637319105610, -0.668379447130320380, +-0.668342255270585770, -0.668305061739996380, -0.668267866538644120, -0.668230669666622370, -0.668193471124023830, -0.668156270910941650, -0.668119069027468760, -0.668081865473698300, +-0.668044660249723090, -0.668007453355635490, -0.667970244791530110, -0.667933034557498970, -0.667895822653635340, -0.667858609080032140, -0.667821393836782300, -0.667784176923979070, +-0.667746958341714820, -0.667709738090083720, -0.667672516169178330, -0.667635292579091600, -0.667598067319916670, -0.667560840391746570, -0.667523611794674340, -0.667486381528793030, +-0.667449149594195210, -0.667411915990975160, -0.667374680719225340, -0.667337443779038700, -0.667300205170508590, -0.667262964893727940, -0.667225722948789790, -0.667188479335786730, +-0.667151234054813140, -0.667113987105961480, -0.667076738489324810, -0.667039488204996370, -0.667002236253069090, -0.666964982633636350, -0.666927727346791070, -0.666890470392625830, +-0.666853211771235130, -0.666815951482711330, -0.666778689527147690, -0.666741425904637250, -0.666704160615273270, -0.666666893659149000, -0.666629625036356700, -0.666592354746991080, +-0.666555082791144500, -0.666517809168910350, -0.666480533880381530, -0.666443256925651430, -0.666405978304813180, -0.666368698017960060, -0.666331416065185090, -0.666294132446580980, +-0.666256847162242210, -0.666219560212261250, -0.666182271596731490, -0.666144981315745950, -0.666107689369398010, -0.666070395757780150, -0.666033100480986960, -0.665995803539111140, +-0.665958504932245620, -0.665921204660483990, -0.665883902723919290, -0.665846599122644880, -0.665809293856753910, -0.665771986926339760, -0.665734678331494910, -0.665697368072314060, +-0.665660056148889790, -0.665622742561315480, -0.665585427309684170, -0.665548110394089340, -0.665510791814624250, -0.665473471571381480, -0.665436149664455740, -0.665398826093939630, +-0.665361500859926400, -0.665324173962509420, -0.665286845401782070, -0.665249515177837590, -0.665212183290769250, -0.665174849740669870, -0.665137514527634030, -0.665100177651754330, +-0.665062839113124250, -0.665025498911837040, -0.664988157047986080, -0.664950813521664740, -0.664913468332965720, -0.664876121481983720, -0.664838772968811330, -0.664801422793542150, +-0.664764070956269220, -0.664726717457086220, -0.664689362296086440, -0.664652005473363230, -0.664614646989009410, -0.664577286843119560, -0.664539925035786520, -0.664502561567103630, +-0.664465196437164400, -0.664427829646062060, -0.664390461193890220, -0.664353091080741590, -0.664315719306710850, -0.664278345871890830, -0.664240970776375010, -0.664203594020256750, +-0.664166215603629430, -0.664128835526586640, -0.664091453789221630, -0.664054070391628120, -0.664016685333898790, -0.663979298616128370, -0.663941910238409650, -0.663904520200836230, +-0.663867128503501380, -0.663829735146498790, -0.663792340129921280, -0.663754943453863430, -0.663717545118418410, -0.663680145123679340, -0.663642743469740060, -0.663605340156693810, +-0.663567935184634310, -0.663530528553654910, -0.663493120263849210, -0.663455710315309920, -0.663418298708132180, -0.663380885442408590, -0.663343470518232840, -0.663306053935698410, +-0.663268635694898910, -0.663231215795927700, -0.663193794238877920, -0.663156371023844170, -0.663118946150919600, -0.663081519620197680, -0.663044091431771900, -0.663006661585735850, +-0.662969230082183230, -0.662931796921207520, -0.662894362102901650, -0.662856925627360540, -0.662819487494677120, -0.662782047704944980, -0.662744606258257600, -0.662707163154708900, +-0.662669718394392150, -0.662632271977400490, -0.662594823903828840, -0.662557374173770140, -0.662519922787317970, -0.662482469744565930, -0.662445015045607820, -0.662407558690537130, +-0.662370100679447570, -0.662332641012432060, -0.662295179689585620, -0.662257716711001310, -0.662220252076772600, -0.662182785786993300, -0.662145317841757010, -0.662107848241157430, +-0.662070376985287590, -0.662032904074242530, -0.661995429508115070, -0.661957953286999130, -0.661920475410988310, -0.661882995880176290, -0.661845514694656800, -0.661808031854523530, +-0.661770547359870060, -0.661733061210789670, -0.661695573407377280, -0.661658083949725920, -0.661620592837929400, -0.661583100072081320, -0.661545605652275600, -0.661508109578605170, +-0.661470611851165070, -0.661433112470048550, -0.661395611435349080, -0.661358108747160720, -0.661320604405577050, -0.661283098410691880, -0.661245590762598920, -0.661208081461391980, +-0.661170570507164210, -0.661133057900010760, -0.661095543640024540, -0.661058027727299490, -0.661020510161929420, -0.660982990944008030, -0.660945470073629140, -0.660907947550885890, +-0.660870423375873540, -0.660832897548685020, -0.660795370069414360, -0.660757840938155260, -0.660720310155001430, -0.660682777720047020, -0.660645243633385500, -0.660607707895110360, +-0.660570170505316520, -0.660532631464097240, -0.660495090771546330, -0.660457548427757830, -0.660420004432825450, -0.660382458786842990, -0.660344911489903710, -0.660307362542102870, +-0.660269811943533510, -0.660232259694289780, -0.660194705794465260, -0.660157150244154110, -0.660119593043450030, -0.660082034192446930, -0.660044473691238090, -0.660006911539918750, +-0.659969347738582180, -0.659931782287322190, -0.659894215186232700, -0.659856646435407760, -0.659819076034941170, -0.659781503984926190, -0.659743930285458080, -0.659706354936630210, +-0.659668777938536510, -0.659631199291270790, -0.659593618994927080, -0.659556037049599310, -0.659518453455381510, -0.659480868212367510, -0.659443281320650660, -0.659405692780326350, +-0.659368102591487810, -0.659330510754228990, -0.659292917268643810, -0.659255322134826400, -0.659217725352870040, -0.659180126922870090, -0.659142526844919700, -0.659104925119113010, +-0.659067321745544050, -0.659029716724306770, -0.658992110055495180, -0.658954501739203340, -0.658916891775525260, -0.658879280164554330, -0.658841666906385790, -0.658804052001113140, +-0.658766435448830290, -0.658728817249631390, -0.658691197403610370, -0.658653575910861490, -0.658615952771477890, -0.658578327985555160, -0.658540701553186560, -0.658503073474466240, +-0.658465443749488230, -0.658427812378346580, -0.658390179361135420, -0.658352544697948790, -0.658314908388880180, -0.658277270434024950, -0.658239630833476470, -0.658201989587329010, +-0.658164346695676580, -0.658126702158613240, -0.658089055976233130, -0.658051408148629720, -0.658013758675898510, -0.657976107558132850, -0.657938454795426900, -0.657900800387874910, +-0.657863144335570800, -0.657825486638608960, -0.657787827297083290, -0.657750166311087400, -0.657712503680716880, -0.657674839406064970, -0.657637173487225950, -0.657599505924294060, +-0.657561836717363460, -0.657524165866528180, -0.657486493371881810, -0.657448819233519940, -0.657411143451535950, -0.657373466026024200, -0.657335786957078730, -0.657298106244793790, +-0.657260423889263530, -0.657222739890582330, -0.657185054248844210, -0.657147366964142780, -0.657109678036573610, -0.657071987466230190, -0.657034295253206890, -0.656996601397597860, +-0.656958905899497240, -0.656921208758998730, -0.656883509976197820, -0.656845809551188210, -0.656808107484064040, -0.656770403774919690, -0.656732698423849180, -0.656694991430947010, +-0.656657282796307420, -0.656619572520024560, -0.656581860602192040, -0.656544147042905650, -0.656506431842258760, -0.656468715000345870, -0.656430996517261220, -0.656393276393099080, +-0.656355554627953030, -0.656317831221918780, -0.656280106175089920, -0.656242379487560920, -0.656204651159425830, -0.656166921190779130, -0.656129189581715180, -0.656091456332328240, +-0.656053721442712680, -0.656015984912962090, -0.655978246743172290, -0.655940506933436750, -0.655902765483850070, -0.655865022394506390, -0.655827277665500200, -0.655789531296925850, +-0.655751783288876950, -0.655714033641449310, -0.655676282354736520, -0.655638529428833050, -0.655600774863833280, -0.655563018659831460, -0.655525260816922200, -0.655487501335199840, +-0.655449740214757990, -0.655411977455692460, -0.655374213058096950, -0.655336447022065950, -0.655298679347693810, -0.655260910035075030, -0.655223139084303850, -0.655185366495474320, +-0.655147592268681910, -0.655109816404020550, -0.655072038901584720, -0.655034259761468670, -0.654996478983767120, -0.654958696568574310, -0.654920912515984720, -0.654883126826092840, +-0.654845339498992480, -0.654807550534779460, -0.654769759933547580, -0.654731967695391330, -0.654694173820405180, -0.654656378308683510, -0.654618581160320230, -0.654580782375411170, +-0.654542981954050250, -0.654505179896331720, -0.654467376202350400, -0.654429570872200550, -0.654391763905976750, -0.654353955303773600, -0.654316145065685580, -0.654278333191806390, +-0.654240519682232180, -0.654202704537056650, -0.654164887756374270, -0.654127069340279750, -0.654089249288867580, -0.654051427602231560, -0.654013604280467620, -0.653975779323669790, +-0.653937952731932450, -0.653900124505350180, -0.653862294644017570, -0.653824463148029330, -0.653786630017479830, -0.653748795252463880, -0.653710958853075170, -0.653673120819409760, +-0.653635281151561550, -0.653597439849625150, -0.653559596913695140, -0.653521752343866110, -0.653483906140232770, -0.653446058302888930, -0.653408208831930630, -0.653370357727451890, +-0.653332504989547090, -0.653294650618311160, -0.653256794613838570, -0.653218936976224020, -0.653181077705562110, -0.653143216801946870, -0.653105354265474110, -0.653067490096238100, +-0.653029624294333310, -0.652991756859854560, -0.652953887792896310, -0.652916017093553290, -0.652878144761919630, -0.652840270798091370, -0.652802395202162320, -0.652764517974227300, +-0.652726639114381000, -0.652688758622718130, -0.652650876499333290, -0.652612992744321390, -0.652575107357776910, -0.652537220339794000, -0.652499331690468700, -0.652461441409895040, +-0.652423549498167830, -0.652385655955381780, -0.652347760781631480, -0.652309863977011180, -0.652271965541616930, -0.652234065475542750, -0.652196163778883340, -0.652158260451733530, +-0.652120355494188120, -0.652082448906341820, -0.652044540688289320, -0.652006630840125560, -0.651968719361944560, -0.651930806253842370, -0.651892891515913230, -0.651854975148251750, +-0.651817057150952950, -0.651779137524111430, -0.651741216267821440, -0.651703293382179030, -0.651665368867278440, -0.651627442723214380, -0.651589514950081770, -0.651551585547975320, +-0.651513654516989950, -0.651475721857220470, -0.651437787568761580, -0.651399851651707660, -0.651361914106154740, -0.651323974932197070, -0.651286034129929360, -0.651248091699446640, +-0.651210147640843730, -0.651172201954215320, -0.651134254639655910, -0.651096305697261400, -0.651058355127126180, -0.651020402929345040, -0.650982449104012930, -0.650944493651224640, +-0.650906536571075220, -0.650868577863659370, -0.650830617529071450, -0.650792655567407620, -0.650754691978762120, -0.650716726763230000, -0.650678759920905960, -0.650640791451885030, +-0.650602821356262240, -0.650564849634131640, -0.650526876285589580, -0.650488901310730340, -0.650450924709648830, -0.650412946482439970, -0.650374966629198800, -0.650336985150020250, +-0.650299002044999240, -0.650261017314230030, -0.650223030957808870, -0.650185042975830240, -0.650147053368388850, -0.650109062135579950, -0.650071069277498470, -0.650033074794239220, +-0.649995078685896570, -0.649957080952566990, -0.649919081594344640, -0.649881080611324550, -0.649843078003601860, -0.649805073771271390, -0.649767067914428290, -0.649729060433167470, +-0.649691051327584090, -0.649653040597772400, -0.649615028243828660, -0.649577014265847460, -0.649538998663923730, -0.649500981438152380, -0.649462962588628680, -0.649424942115446880, +-0.649386920018703460, -0.649348896298492680, -0.649310870954909580, -0.649272843988049410, -0.649234815398007200, -0.649196785184877780, -0.649158753348756500, -0.649120719889738300, +-0.649082684807917640, -0.649044648103390910, -0.649006609776252570, -0.648968569826597790, -0.648930528254521470, -0.648892485060118980, -0.648854440243485150, -0.648816393804714560, +-0.648778345743903690, -0.648740296061146910, -0.648702244756539370, -0.648664191830176320, -0.648626137282152790, -0.648588081112563830, -0.648550023321504690, -0.648511963909069840, +-0.648473902875355780, -0.648435840220456860, -0.648397775944468460, -0.648359710047485600, -0.648321642529603450, -0.648283573390917130, -0.648245502631521250, -0.648207430251512280, +-0.648169356250984710, -0.648131280630033780, -0.648093203388754760, -0.648055124527242570, -0.648017044045592570, -0.647978961943900030, -0.647940878222259430, -0.647902792880767240, +-0.647864705919518170, -0.647826617338607250, -0.647788527138129840, -0.647750435318180990, -0.647712341878856180, -0.647674246820249770, -0.647636150142458460, -0.647598051845576840, +-0.647559951929699950, -0.647521850394923270, -0.647483747241341940, -0.647445642469051230, -0.647407536078146490, -0.647369428068722770, -0.647331318440874880, -0.647293207194699400, +-0.647255094330290830, -0.647216979847744620, -0.647178863747155940, -0.647140746028620040, -0.647102626692231620, -0.647064505738087270, -0.647026383166281800, -0.646988258976910260, +-0.646950133170068110, -0.646912005745850620, -0.646873876704353030, -0.646835746045670850, -0.646797613769899300, -0.646759479877133000, -0.646721344367468640, -0.646683207241001030, +-0.646645068497825330, -0.646606928138037000, -0.646568786161731300, -0.646530642569003610, -0.646492497359948740, -0.646454350534663270, -0.646416202093241910, -0.646378052035780030, +-0.646339900362372990, -0.646301747073116270, -0.646263592168105140, -0.646225435647435060, -0.646187277511200640, -0.646149117759498790, -0.646110956392424110, -0.646072793410072070, +-0.646034628812538040, -0.645996462599917390, -0.645958294772305600, -0.645920125329797370, -0.645881954272489620, -0.645843781600476840, -0.645805607313854720, -0.645767431412718530, +-0.645729253897163740, -0.645691074767285930, -0.645652894023180270, -0.645614711664941780, -0.645576527692667160, -0.645538342106451330, -0.645500154906389570, -0.645461966092577330, +-0.645423775665110330, -0.645385583624083830, -0.645347389969592620, -0.645309194701733650, -0.645270997820601710, -0.645232799326292290, -0.645194599218900880, -0.645156397498523050, +-0.645118194165254070, -0.645079989219189630, -0.645041782660425330, -0.645003574489055760, -0.644965364705178070, -0.644927153308886840, -0.644888940300277770, -0.644850725679446460, +-0.644812509446488160, -0.644774291601498020, -0.644736072144572740, -0.644697851075807350, -0.644659628395297330, -0.644621404103138280, -0.644583178199425680, -0.644544950684255100, +-0.644506721557722150, -0.644468490819922410, -0.644430258470950810, -0.644392024510904160, -0.644353788939877490, -0.644315551757966400, -0.644277312965266360, -0.644239072561873070, +-0.644200830547882020, -0.644162586923388350, -0.644124341688488760, -0.644086094843278390, -0.644047846387852730, -0.644009596322307590, -0.643971344646738330, -0.643933091361240770, +-0.643894836465910390, -0.643856579960842330, -0.643818321846133520, -0.643780062121878880, -0.643741800788174000, -0.643703537845114690, -0.643665273292796550, -0.643627007131315270, +-0.643588739360765660, -0.643550469981244990, -0.643512198992848060, -0.643473926395670690, -0.643435652189808470, -0.643397376375357210, -0.643359098952412390, -0.643320819921069930, +-0.643282539281424650, -0.643244257033573800, -0.643205973177612190, -0.643167687713635750, -0.643129400641740070, -0.643091111962020840, -0.643052821674573780, -0.643014529779494140, +-0.642976236276878720, -0.642937941166822790, -0.642899644449421940, -0.642861346124772080, -0.642823046192968820, -0.642784744654107840, -0.642746441508285080, -0.642708136755596240, +-0.642669830396136450, -0.642631522430002660, -0.642593212857289990, -0.642554901678094370, -0.642516588892511510, -0.642478274500637210, -0.642439958502566520, -0.642401640898396580, +-0.642363321688222520, -0.642325000872140170, -0.642286678450245450, -0.642248354422633840, -0.642210028789401480, -0.642171701550643960, -0.642133372706457210, -0.642095042256936370, +-0.642056710202178580, -0.642018376542279110, -0.641980041277333550, -0.641941704407437920, -0.641903365932688150, -0.641865025853179840, -0.641826684169008340, -0.641788340880270810, +-0.641749995987062390, -0.641711649489479010, -0.641673301387616470, -0.641634951681570700, -0.641596600371437620, -0.641558247457312940, -0.641519892939292010, -0.641481536817472000, +-0.641443179091948150, -0.641404819762816380, -0.641366458830172630, -0.641328096294112580, -0.641289732154732390, -0.641251366412127210, -0.641212999066394170, -0.641174630117628760, +-0.641136259565926680, -0.641097887411384070, -0.641059513654096640, -0.641021138294160410, -0.640982761331671420, -0.640944382766724830, -0.640906002599417880, -0.640867620829846050, +-0.640829237458105050, -0.640790852484291020, -0.640752465908499880, -0.640714077730827560, -0.640675687951369310, -0.640637296570222610, -0.640598903587482620, -0.640560509003245350, +-0.640522112817606850, -0.640483715030663040, -0.640445315642509950, -0.640406914653243510, -0.640368512062959860, -0.640330107871754260, -0.640291702079724080, -0.640253294686964570, +-0.640214885693571880, -0.640176475099641930, -0.640138062905270870, -0.640099649110553950, -0.640061233715588540, -0.640022816720470010, -0.639984398125294510, -0.639945977930157950, +-0.639907556135156600, -0.639869132740386260, -0.639830707745943080, -0.639792281151923100, -0.639753852958421800, -0.639715423165536530, -0.639676991773362680, -0.639638558781996380, +-0.639600124191533670, -0.639561688002070580, -0.639523250213703380, -0.639484810826527310, -0.639446369840639960, -0.639407927256136600, -0.639369483073113480, -0.639331037291666630, +-0.639292589911892200, -0.639254140933886330, -0.639215690357745060, -0.639177238183563870, -0.639138784411440340, -0.639100329041469740, -0.639061872073748430, -0.639023413508372330, +-0.638984953345437810, -0.638946491585040800, -0.638908028227276990, -0.638869563272243650, -0.638831096720036570, -0.638792628570751590, -0.638754158824485160, -0.638715687481333230, +-0.638677214541392150, -0.638638740004758070, -0.638600263871526350, -0.638561786141794710, -0.638523306815658610, -0.638484825893214200, -0.638446343374557860, -0.638407859259785490, +-0.638369373548993590, -0.638330886242277520, -0.638292397339734970, -0.638253906841461330, -0.638215414747552940, -0.638176921058106080, -0.638138425773216890, -0.638099928892981620, +-0.638061430417496630, -0.638022930346857970, -0.637984428681161340, -0.637945925420504210, -0.637907420564982400, -0.637868914114691930, -0.637830406069729290, -0.637791896430190520, +-0.637753385196171420, -0.637714872367769470, -0.637676357945080370, -0.637637841928200390, -0.637599324317225770, -0.637560805112252880, -0.637522284313377980, -0.637483761920697330, +-0.637445237934307300, -0.637406712354303570, -0.637368185180783640, -0.637329656413843200, -0.637291126053578740, -0.637252594100086390, -0.637214060553462640, -0.637175525413803620, +-0.637136988681205160, -0.637098450355764960, -0.637059910437578590, -0.637021368926742440, -0.636982825823352860, -0.636944281127506230, -0.636905734839298910, -0.636867186958827160, +-0.636828637486186900, -0.636790086421475610, -0.636751533764789210, -0.636712979516223960, -0.636674423675876230, -0.636635866243842390, -0.636597307220218900, -0.636558746605101480, +-0.636520184398587930, -0.636481620600773850, -0.636443055211755810, -0.636404488231630090, -0.636365919660493050, -0.636327349498441390, -0.636288777745571240, -0.636250204401978440, +-0.636211629467760890, -0.636173052943014180, -0.636134474827834920, -0.636095895122319450, -0.636057313826564160, -0.636018730940665740, -0.635980146464719680, -0.635941560398823990, +-0.635902972743074390, -0.635864383497567350, -0.635825792662399360, -0.635787200237666880, -0.635748606223466520, -0.635710010619894520, -0.635671413427047470, -0.635632814645021300, +-0.635594214273913720, -0.635555612313820630, -0.635517008764838410, -0.635478403627063760, -0.635439796900593050, -0.635401188585522190, -0.635362578681949120, -0.635323967189969530, +-0.635285354109680010, -0.635246739441177160, -0.635208123184557440, -0.635169505339917340, -0.635130885907353560, -0.635092264886962580, -0.635053642278840200, -0.635015018083084360, +-0.634976392299791080, -0.634937764929056740, -0.634899135970978020, -0.634860505425651530, -0.634821873293172970, -0.634783239573640470, -0.634744604267149850, -0.634705967373797700, +-0.634667328893680720, -0.634628688826895380, -0.634590047173538290, -0.634551403933706020, -0.634512759107495380, -0.634474112695002090, -0.634435464696324170, -0.634396815111557650, +-0.634358163940799020, -0.634319511184145090, -0.634280856841692330, -0.634242200913537340, -0.634203543399776250, -0.634164884300506990, -0.634126223615825490, -0.634087561345828440, +-0.634048897490612550, -0.634010232050274290, -0.633971565024910590, -0.633932896414617920, -0.633894226219492320, -0.633855554439631820, -0.633816881075132450, -0.633778206126090820, +-0.633739529592603820, -0.633700851474767850, -0.633662171772679810, -0.633623490486435630, -0.633584807616133450, -0.633546123161869310, -0.633507437123739690, -0.633468749501841620, +-0.633430060296271690, -0.633391369507126490, -0.633352677134502940, -0.633313983178497630, -0.633275287639206820, -0.633236590516728310, -0.633197891811158490, -0.633159191522593810, +-0.633120489651131210, -0.633081786196867390, -0.633043081159898380, -0.633004374540322320, -0.632965666338235370, -0.632926956553734320, -0.632888245186915780, -0.632849532237876660, +-0.632810817706713770, -0.632772101593523820, -0.632733383898403500, -0.632694664621449190, -0.632655943762758800, -0.632617221322428590, -0.632578497300555260, -0.632539771697235740, +-0.632501044512566830, -0.632462315746644580, -0.632423585399567220, -0.632384853471430920, -0.632346119962332480, -0.632307384872368820, -0.632268648201636530, -0.632229909950232760, +-0.632191170118254100, -0.632152428705797580, -0.632113685712959340, -0.632074941139837530, -0.632036194986528410, -0.631997447253128670, -0.631958697939735470, -0.631919947046445500, +-0.631881194573355560, -0.631842440520562040, -0.631803684888163080, -0.631764927676254920, -0.631726168884934380, -0.631687408514298500, -0.631648646564444080, -0.631609883035467940, +-0.631571117927467230, -0.631532351240537970, -0.631493582974778530, -0.631454813130285180, -0.631416041707154710, -0.631377268705484270, -0.631338494125370580, -0.631299717966910650, +-0.631260940230200740, -0.631222160915339110, -0.631183380022422140, -0.631144597551546730, -0.631105813502809810, -0.631067027876308310, -0.631028240672139250, -0.630989451890399680, +-0.630950661531186400, -0.630911869594595780, -0.630873076080726180, -0.630834280989673980, -0.630795484321535980, -0.630756686076409330, -0.630717886254390960, -0.630679084855577110, +-0.630640281880066270, -0.630601477327954680, -0.630562671199339510, -0.630523863494317660, -0.630485054212986060, -0.630446243355441860, -0.630407430921782090, -0.630368616912103660, +-0.630329801326503070, -0.630290984165078670, -0.630252165427926720, -0.630213345115144490, -0.630174523226828760, -0.630135699763076820, -0.630096874723984900, -0.630058048109651490, +-0.630019219920172960, -0.629980390155646440, -0.629941558816168870, -0.629902725901837380, -0.629863891412749120, -0.629825055349001130, -0.629786217710690540, -0.629747378497913730, +-0.629708537710769070, -0.629669695349353130, -0.629630851413762960, -0.629592005904095590, -0.629553158820448270, -0.629514310162918030, -0.629475459931601260, -0.629436608126596630, +-0.629397754748000420, -0.629358899795909870, -0.629320043270422010, -0.629281185171634120, -0.629242325499643210, -0.629203464254546540, -0.629164601436440480, -0.629125737045423630, +-0.629086871081592450, -0.629048003545044090, -0.629009134435875690, -0.628970263754184410, -0.628931391500067490, -0.628892517673621420, -0.628853642274944780, -0.628814765304134050, +-0.628775886761286370, -0.628737006646499010, -0.628698124959869100, -0.628659241701493790, -0.628620356871470550, -0.628581470469896320, -0.628542582496867670, -0.628503692952483320, +-0.628464801836839730, -0.628425909150034160, -0.628387014892163860, -0.628348119063325880, -0.628309221663617020, -0.628270322693135760, -0.628231422151978690, -0.628192520040243170, +-0.628153616358026250, -0.628114711105425270, -0.628075804282537510, -0.628036895889460320, -0.627997985926290860, -0.627959074393125700, -0.627920161290063560, -0.627881246617201020, +-0.627842330374635330, -0.627803412562463970, -0.627764493180783870, -0.627725572229691940, -0.627686649709286780, -0.627647725619664980, -0.627608799960923890, -0.627569872733160780, +-0.627530943936473020, -0.627492013570957850, -0.627453081636712760, -0.627414148133834780, -0.627375213062420830, -0.627336276422569620, -0.627297338214377610, -0.627258398437942290, +-0.627219457093361020, -0.627180514180731060, -0.627141569700149780, -0.627102623651713880, -0.627063676035522160, -0.627024726851671320, -0.626985776100258520, -0.626946823781381330, +-0.626907869895137140, -0.626868914441623290, -0.626829957420937060, -0.626790998833175240, -0.626752038678436650, -0.626713076956817990, -0.626674113668416630, -0.626635148813330050, +-0.626596182391655490, -0.626557214403490550, -0.626518244848931820, -0.626479273728078100, -0.626440301041026330, -0.626401326787873750, -0.626362350968717950, -0.626323373583656200, +-0.626284394632785960, -0.626245414116204820, -0.626206432034009390, -0.626167448386298560, -0.626128463173169170, -0.626089476394718570, -0.626050488051044350, -0.626011498142243770, +-0.625972506668414640, -0.625933513629653440, -0.625894519026059190, -0.625855522857728610, -0.625816525124759160, -0.625777525827248440, -0.625738524965294030, -0.625699522538993190, +-0.625660518548443510, -0.625621512993742580, -0.625582505874987200, -0.625543497192276200, -0.625504486945706590, -0.625465475135375650, -0.625426461761380950, -0.625387446823820190, +-0.625348430322790190, -0.625309412258389650, -0.625270392630715710, -0.625231371439865740, -0.625192348685937320, -0.625153324369028040, -0.625114298489235500, -0.625075271046657170, +-0.625036242041390630, -0.624997211473532820, -0.624958179343182650, -0.624919145650437050, -0.624880110395393600, -0.624841073578149890, -0.624802035198803510, -0.624762995257452050, +-0.624723953754192320, -0.624684910689123460, -0.624645866062342290, -0.624606819873946510, -0.624567772124033580, -0.624528722812701330, -0.624489671940047230, -0.624450619506168980, +-0.624411565511163390, -0.624372509955129720, -0.624333452838164660, -0.624294394160366030, -0.624255333921831410, -0.624216272122658400, -0.624177208762944800, -0.624138143842787430, +-0.624099077362285430, -0.624060009321535710, -0.624020939720635990, -0.623981868559683850, -0.623942795838777100, -0.623903721558013320, -0.623864645717490340, -0.623825568317304960, +-0.623786489357556320, -0.623747408838341570, -0.623708326759758180, -0.623669243121904080, -0.623630157924876750, -0.623591071168774100, -0.623551982853693070, -0.623512892979732780, +-0.623473801546990280, -0.623434708555563270, -0.623395614005549440, -0.623356517897046600, -0.623317420230152570, -0.623278321004964830, -0.623239220221581400, -0.623200117880099100, +-0.623161013980617300, -0.623121908523233010, -0.623082801508043850, -0.623043692935147720, -0.623004582804642330, -0.622965471116624810, -0.622926357871194320, -0.622887243068448000, +-0.622848126708483440, -0.622809008791398670, -0.622769889317291270, -0.622730768286259280, -0.622691645698400300, -0.622652521553812230, -0.622613395852592120, -0.622574268594839220, +-0.622535139780650670, -0.622496009410124280, -0.622456877483357870, -0.622417744000449250, -0.622378608961496220, -0.622339472366596040, -0.622300334215847850, -0.622261194509348800, +-0.622222053247196820, -0.622182910429489700, -0.622143766056325260, -0.622104620127801430, -0.622065472644016020, -0.622026323605066270, -0.621987173011051440, -0.621948020862068570, +-0.621908867158215810, -0.621869711899590730, -0.621830555086291480, -0.621791396718415770, -0.621752236796060840, -0.621713075319326070, -0.621673912288308710, -0.621634747703106450, +-0.621595581563817330, -0.621556413870539280, -0.621517244623370100, -0.621478073822407940, -0.621438901467749830, -0.621399727559495240, -0.621360552097741210, -0.621321375082585890, +-0.621282196514127080, -0.621243016392462820, -0.621203834717691030, -0.621164651489908960, -0.621125466709215980, -0.621086280375709230, -0.621047092489486860, -0.621007903050646680, +-0.620968712059286830, -0.620929519515505120, -0.620890325419399700, -0.620851129771068490, -0.620811932570608630, -0.620772733818119700, -0.620733533513698980, -0.620694331657444360, +-0.620655128249453900, -0.620615923289825620, -0.620576716778656890, -0.620537508716047070, -0.620498299102093420, -0.620459087936894080, -0.620419875220546980, -0.620380660953150250, +-0.620341445134801830, -0.620302227765599850, -0.620263008845642230, -0.620223788375026340, -0.620184566353851770, -0.620145342782215780, -0.620106117660216390, -0.620066890987951760, +-0.620027662765519790, -0.619988432993018760, -0.619949201670545900, -0.619909968798200820, -0.619870734376080760, -0.619831498404283860, -0.619792260882908290, -0.619753021812051940, +-0.619713781191813080, -0.619674539022289860, -0.619635295303579530, -0.619596050035781550, -0.619556803218993650, -0.619517554853313610, -0.619478304938839710, -0.619439053475670080, +-0.619399800463902750, -0.619360545903635210, -0.619321289794967030, -0.619282032137995710, -0.619242772932819260, -0.619203512179535840, -0.619164249878243700, -0.619124986029040870, +-0.619085720632025600, -0.619046453687295270, -0.619007185194949570, -0.618967915155085980, -0.618928643567802530, -0.618889370433197470, -0.618850095751368960, -0.618810819522415230, +-0.618771541746433780, -0.618732262423524080, -0.618692981553783830, -0.618653699137311160, -0.618614415174204120, -0.618575129664561070, -0.618535842608480270, -0.618496554006059850, +-0.618457263857397970, -0.618417972162592310, -0.618378678921742360, -0.618339384134945710, -0.618300087802300610, -0.618260789923905320, -0.618221490499858080, -0.618182189530256390, +-0.618142887015199930, -0.618103582954786180, -0.618064277349113620, -0.618024970198280290, -0.617985661502384430, -0.617946351261524530, -0.617907039475798730, -0.617867726145305380, +-0.617828411270141990, -0.617789094850408230, -0.617749776886201700, -0.617710457377620760, -0.617671136324763780, -0.617631813727728800, -0.617592489586614390, -0.617553163901518040, +-0.617513836672539450, -0.617474507899776310, -0.617435177583326890, -0.617395845723289540, -0.617356512319762520, -0.617317177372844190, -0.617277840882633040, -0.617238502849226540, +-0.617199163272724500, -0.617159822153224510, -0.617120479490824940, -0.617081135285624250, -0.617041789537720600, -0.617002442247212570, -0.616963093414197750, -0.616923743038775840, +-0.616884391121044650, -0.616845037661102440, -0.616805682659047560, -0.616766326114978610, -0.616726968028993740, -0.616687608401191520, -0.616648247231669560, -0.616608884520527640, +-0.616569520267863490, -0.616530154473775680, -0.616490787138362360, -0.616451418261722120, -0.616412047843953310, -0.616372675885153650, -0.616333302385423050, -0.616293927344859220, +-0.616254550763560500, -0.616215172641625510, -0.616175792979152480, -0.616136411776240010, -0.616097029032986470, -0.616057644749490430, -0.616018258925849490, -0.615978871562163690, +-0.615939482658530710, -0.615900092215049040, -0.615860700231817050, -0.615821306708933310, -0.615781911646495650, -0.615742515044603980, -0.615703116903355880, -0.615663717222850070, +-0.615624316003185010, -0.615584913244459080, -0.615545508946770850, -0.615506103110218920, -0.615466695734901760, -0.615427286820917070, -0.615387876368364890, -0.615348464377343030, +-0.615309050847949960, -0.615269635780284370, -0.615230219174444650, -0.615190801030529370, -0.615151381348636340, -0.615111960128865600, -0.615072537371314950, -0.615033113076082990, +-0.614993687243268190, -0.614954259872969260, -0.614914830965284540, -0.614875400520312860, -0.614835968538151920, -0.614796535018901860, -0.614757099962660370, -0.614717663369526160, +-0.614678225239597700, -0.614638785572973800, -0.614599344369752940, -0.614559901630032930, -0.614520457353913920, -0.614481011541493700, -0.614441564192871100, -0.614402115308144480, +-0.614362664887412540, -0.614323212930773970, -0.614283759438327470, -0.614244304410170750, -0.614204847846404060, -0.614165389747125090, -0.614125930112432770, -0.614086468942425690, +-0.614047006237202320, -0.614007541996861470, -0.613968076221501070, -0.613928608911221140, -0.613889140066119720, -0.613849669686295510, -0.613810197771847090, -0.613770724322873160, +-0.613731249339472430, -0.613691772821743480, -0.613652294769785220, -0.613612815183695480, -0.613573334063574390, -0.613533851409519990, -0.613494367221630980, -0.613454881500006040, +-0.613415394244743890, -0.613375905455942560, -0.613336415133702070, -0.613296923278120690, -0.613257429889296880, -0.613217934967329570, -0.613178438512317460, -0.613138940524359130, +-0.613099441003553510, -0.613059939949999410, -0.613020437363794630, -0.612980933245039440, -0.612941427593831970, -0.612901920410270920, -0.612862411694455100, -0.612822901446483210, +-0.612783389666454070, -0.612743876354465700, -0.612704361510618360, -0.612664845135010180, -0.612625327227739880, -0.612585807788906260, -0.612546286818608120, -0.612506764316944170, +-0.612467240284013450, -0.612427714719913860, -0.612388187624745670, -0.612348658998607020, -0.612309128841596720, -0.612269597153813680, -0.612230063935356620, -0.612190529186324330, +-0.612150992906814960, -0.612111455096928990, -0.612071915756764230, -0.612032374886419820, -0.611992832485994340, -0.611953288555586840, -0.611913743095296110, -0.611874196105220980, +-0.611834647585459690, -0.611795097536112500, -0.611755545957277660, -0.611715992849053760, -0.611676438211540050, -0.611636882044835130, -0.611597324349038020, -0.611557765124246980, +-0.611518204370562150, -0.611478642088081780, -0.611439078276904910, -0.611399512937130240, -0.611359946068856910, -0.611320377672183610, -0.611280807747209390, -0.611241236294033150, +-0.611201663312753160, -0.611162088803469670, -0.611122512766280930, -0.611082935201285980, -0.611043356108583740, -0.611003775488273000, -0.610964193340452160, -0.610924609665221550, +-0.610885024462679340, -0.610845437732924660, -0.610805849476056320, -0.610766259692173350, -0.610726668381374790, -0.610687075543759560, -0.610647481179426690, -0.610607885288474320, +-0.610568287871002920, -0.610528688927110870, -0.610489088456897090, -0.610449486460460490, -0.610409882937900330, -0.610370277889314640, -0.610330671314804010, -0.610291063214466690, +-0.610251453588401720, -0.610211842436708120, -0.610172229759484930, -0.610132615556831180, -0.610092999828845790, -0.610053382575628020, -0.610013763797276010, -0.609974143493890340, +-0.609934521665569270, -0.609894898312411950, -0.609855273434517400, -0.609815647031984540, -0.609776019104912640, -0.609736389653400050, -0.609696758677547130, -0.609657126177452270, +-0.609617492153214700, -0.609577856604933350, -0.609538219532707370, -0.609498580936635780, -0.609458940816817840, -0.609419299173351690, -0.609379656006338140, -0.609340011315875340, +-0.609300365102062650, -0.609260717364998980, -0.609221068104783490, -0.609181417321515320, -0.609141765015292940, -0.609102111186216820, -0.609062455834385450, -0.609022798959897970, +-0.608983140562853410, -0.608943480643351130, -0.608903819201490060, -0.608864156237369450, -0.608824491751088440, -0.608784825742745510, -0.608745158212441240, -0.608705489160274000, +-0.608665818586343050, -0.608626146490747640, -0.608586472873586800, -0.608546797734959120, -0.608507121074965070, -0.608467442893703250, -0.608427763191272900, -0.608388081967773050, +-0.608348399223303080, -0.608308714957962020, -0.608269029171849220, -0.608229341865063830, -0.608189653037704450, -0.608149962689871540, -0.608110270821663800, -0.608070577433180270, +-0.608030882524520420, -0.607991186095783290, -0.607951488147067560, -0.607911788678473730, -0.607872087690100480, -0.607832385182047070, -0.607792681154412650, -0.607752975607296460, +-0.607713268540797880, -0.607673559955016150, -0.607633849850050530, -0.607594138225999500, -0.607554425082963870, -0.607514710421042210, -0.607474994240333800, -0.607435276540937870, +-0.607395557322953690, -0.607355836586480620, -0.607316114331617360, -0.607276390558464390, -0.607236665267120610, -0.607196938457685080, -0.607157210130257140, -0.607117480284936170, +-0.607077748921821650, -0.607038016041012600, -0.606998281642607940, -0.606958545726708150, -0.606918808293412050, -0.606879069342818990, -0.606839328875028230, -0.606799586890139130, +-0.606759843388251060, -0.606720098369462610, -0.606680351833874700, -0.606640603781585910, -0.606600854212695610, -0.606561103127303160, -0.606521350525507930, -0.606481596407409280, +-0.606441840773106810, -0.606402083622699540, -0.606362324956286500, -0.606322564773968290, -0.606282803075843700, -0.606243039862012110, -0.606203275132572880, -0.606163508887625490, +-0.606123741127268520, -0.606083971851603010, -0.606044201060727540, -0.606004428754741590, -0.605964654933744630, -0.605924879597835920, -0.605885102747115050, -0.605845324381681480, +-0.605805544501634490, -0.605765763107072970, -0.605725980198097760, -0.605686195774807650, -0.605646409837302000, -0.605606622385680300, -0.605566833420042140, -0.605527042940486090, +-0.605487250947113200, -0.605447457440022150, -0.605407662419312540, -0.605367865885083620, -0.605328067837435090, -0.605288268276466420, -0.605248467202277100, -0.605208664614966580, +-0.605168860514633700, -0.605129054901379470, -0.605089247775302490, -0.605049439136502440, -0.605009628985078710, -0.604969817321130980, -0.604930004144758730, -0.604890189456060660, +-0.604850373255137910, -0.604810555542089180, -0.604770736317014060, -0.604730915580012130, -0.604691093331182870, -0.604651269570625980, -0.604611444298440830, -0.604571617514726430, +-0.604531789219583620, -0.604491959413111400, -0.604452128095409160, -0.604412295266576690, -0.604372460926713480, -0.604332625075919120, -0.604292787714292510, -0.604252948841934590, +-0.604213108458944380, -0.604173266565421360, -0.604133423161465120, -0.604093578247175360, -0.604053731822651650, -0.604013883887993600, -0.603974034443300110, -0.603934183488672340, +-0.603894331024208970, -0.603854477050009940, -0.603814621566174600, -0.603774764572802770, -0.603734906069993920, -0.603695046057847180, -0.603655184536463500, -0.603615321505941880, +-0.603575456966382040, -0.603535590917883450, -0.603495723360545910, -0.603455854294469020, -0.603415983719752580, -0.603376111636496180, -0.603336238044798740, -0.603296362944761410, +-0.603256486336483210, -0.603216608220063730, -0.603176728595602780, -0.603136847463200070, -0.603096964822954380, -0.603057080674967110, -0.603017195019337040, -0.602977307856164100, +-0.602937419185547770, -0.602897529007587970, -0.602857637322384400, -0.602817744130036640, -0.602777849430644610, -0.602737953224307120, -0.602698055511125540, -0.602658156291198790, +-0.602618255564626670, -0.602578353331508890, -0.602538449591945250, -0.602498544346035560, -0.602458637593878630, -0.602418729335575940, -0.602378819571226410, -0.602338908300929840, +-0.602298995524785940, -0.602259081242894620, -0.602219165455355480, -0.602179248162268530, -0.602139329363732710, -0.602099409059849380, -0.602059487250717450, -0.602019563936436740, +-0.601979639117107170, -0.601939712792828540, -0.601899784963700560, -0.601859855629822470, -0.601819924791295420, -0.601779992448218560, -0.601740058600691800, -0.601700123248814720, +-0.601660186392687480, -0.601620248032409770, -0.601580308168081280, -0.601540366799801500, -0.601500423927671450, -0.601460479551790270, -0.601420533672258010, -0.601380586289174350, +-0.601340637402639210, -0.601300687012752520, -0.601260735119613310, -0.601220781723323050, -0.601180826823980890, -0.601140870421686620, -0.601100912516540080, -0.601060953108641380, +-0.601020992198090240, -0.600981029784986690, -0.600941065869430410, -0.600901100451520900, -0.600861133531359280, -0.600821165109044930, -0.600781195184677540, -0.600741223758357150, +-0.600701250830183770, -0.600661276400256570, -0.600621300468676900, -0.600581323035543900, -0.600541344100957610, -0.600501363665018050, -0.600461381727825040, -0.600421398289478490, +-0.600381413350078550, -0.600341426909725030, -0.600301438968517180, -0.600261449526556580, -0.600221458583942270, -0.600181466140774280, -0.600141472197152640, -0.600101476753177380, +-0.600061479808948420, -0.600021481364565010, -0.599981481420128640, -0.599941479975738550, -0.599901477031494770, -0.599861472587497220, -0.599821466643846060, -0.599781459200641190, +-0.599741450257982760, -0.599701439815969910, -0.599661427874704220, -0.599621414434284960, -0.599581399494812150, -0.599541383056385820, -0.599501365119106120, -0.599461345683072970, +-0.599421324748385720, -0.599381302315145860, -0.599341278383452750, -0.599301252953406420, -0.599261226025107010, -0.599221197598654440, -0.599181167674148970, -0.599141136251690520, +-0.599101103331378560, -0.599061068913314560, -0.599021032997597900, -0.598980995584328600, -0.598940956673606920, -0.598900916265532770, -0.598860874360206300, -0.598820830957726980, +-0.598780786058196290, -0.598740739661713590, -0.598700691768379150, -0.598660642378292860, -0.598620591491555000, -0.598580539108265700, -0.598540485228524990, -0.598500429852433120, +-0.598460372980089470, -0.598420314611595620, -0.598380254747050920, -0.598340193386555530, -0.598300130530209810, -0.598260066178113670, -0.598220000330366600, -0.598179932987070400, +-0.598139864148324210, -0.598099793814228510, -0.598059721984883220, -0.598019648660388590, -0.597979573840844880, -0.597939497526352340, -0.597899419717010880, -0.597859340412920330, +-0.597819259614182030, -0.597779177320895580, -0.597739093533161240, -0.597699008251079130, -0.597658921474749530, -0.597618833204272670, -0.597578743439747930, -0.597538652181277110, +-0.597498559428959570, -0.597458465182895690, -0.597418369443185600, -0.597378272209929670, -0.597338173483228040, -0.597298073263180960, -0.597257971549887910, -0.597217868343450700, +-0.597177763643968910, -0.597137657451542570, -0.597097549766272160, -0.597057440588257830, -0.597017329917600040, -0.596977217754398050, -0.596937104098753780, -0.596896988950766700, +-0.596856872310537300, -0.596816754178165600, -0.596776634553751960, -0.596736513437396860, -0.596696390829200450, -0.596656266729262310, -0.596616141137684240, -0.596576014054565840, +-0.596535885480007360, -0.596495755414109150, -0.596455623856971600, -0.596415490808694940, -0.596375356269378880, -0.596335220239125220, -0.596295082718033440, -0.596254943706203910, +-0.596214803203736990, -0.596174661210733150, -0.596134517727292650, -0.596094372753515840, -0.596054226289503110, -0.596014078335354030, -0.595973928891170620, -0.595933777957052270, +-0.595893625533099440, -0.595853471619412600, -0.595813316216092130, -0.595773159323237600, -0.595733000940950940, -0.595692841069331740, -0.595652679708480460, -0.595612516858497370, +-0.595572352519483150, -0.595532186691537960, -0.595492019374762260, -0.595451850569256650, -0.595411680275120590, -0.595371508492456010, -0.595331335221362720, -0.595291160461941190, +-0.595250984214291570, -0.595210806478514650, -0.595170627254710590, -0.595130446542979310, -0.595090264343422600, -0.595050080656140290, -0.595009895481232730, -0.594969708818800510, +-0.594929520668943890, -0.594889331031763560, -0.594849139907359880, -0.594808947295832670, -0.594768753197283730, -0.594728557611812870, -0.594688360539520790, -0.594648161980507630, +-0.594607961934874200, -0.594567760402720750, -0.594527557384147310, -0.594487352879255580, -0.594447146888145480, -0.594406939410917600, -0.594366730447672300, -0.594326519998510160, +-0.594286308063531780, -0.594246094642837620, -0.594205879736527500, -0.594165663344703330, -0.594125445467465150, -0.594085226104913210, -0.594045005257148320, -0.594004782924270840, +-0.593964559106381350, -0.593924333803579900, -0.593884107015968170, -0.593843878743646300, -0.593803648986714670, -0.593763417745273970, -0.593723185019424670, -0.593682950809267470, +-0.593642715114902850, -0.593602477936431390, -0.593562239273953020, -0.593521999127569870, -0.593481757497381630, -0.593441514383489130, -0.593401269785992720, -0.593361023704993110, +-0.593320776140590310, -0.593280527092886260, -0.593240276561980970, -0.593200024547974820, -0.593159771050968730, -0.593119516071063170, -0.593079259608358830, -0.593039001662956420, +-0.592998742234956410, -0.592958481324458830, -0.592918218931565820, -0.592877955056377190, -0.592837689698993750, -0.592797422859515980, -0.592757154538044780, -0.592716884734680650, +-0.592676613449523490, -0.592636340682675680, -0.592596066434236900, -0.592555790704307970, -0.592515513492989590, -0.592475234800382440, -0.592434954626587130, -0.592394672971704560, +-0.592354389835834440, -0.592314105219079230, -0.592273819121538650, -0.592233531543313490, -0.592193242484504560, -0.592152951945212560, -0.592112659925538080, -0.592072366425581360, +-0.592032071445444340, -0.591991774985227150, -0.591951477045030590, -0.591911177624955260, -0.591870876725101970, -0.591830574345571630, -0.591790270486464710, -0.591749965147881470, +-0.591709658329923950, -0.591669350032692390, -0.591629040256287380, -0.591588729000809830, -0.591548416266360460, -0.591508102053040050, -0.591467786360948540, -0.591427469190188400, +-0.591387150540859660, -0.591346830413062910, -0.591306508806899170, -0.591266185722469030, -0.591225861159873520, -0.591185535119213350, -0.591145207600589420, -0.591104878604101660, +-0.591064548129852430, -0.591024216177941760, -0.590983882748470690, -0.590943547841539800, -0.590903211457250110, -0.590862873595701670, -0.590822534256996710, -0.590782193441235500, +-0.590741851148518740, -0.590701507378947330, -0.590661162132622210, -0.590620815409644170, -0.590580467210114150, -0.590540117534132820, -0.590499766381800570, -0.590459413753219640, +-0.590419059648490170, -0.590378704067712980, -0.590338347010989080, -0.590297988478419410, -0.590257628470104660, -0.590217266986145070, -0.590176904026643130, -0.590136539591698870, +-0.590096173681413320, -0.590055806295887280, -0.590015437435221780, -0.589975067099517640, -0.589934695288875880, -0.589894322003396530, -0.589853947243182300, -0.589813571008332980, +-0.589773193298949950, -0.589732814115133790, -0.589692433456985630, -0.589652051324606410, -0.589611667718096370, -0.589571282637557760, -0.589530896083091060, -0.589490508054797080, +-0.589450118552776850, -0.589409727577131280, -0.589369335127961410, -0.589328941205368270, -0.589288545809452000, -0.589248148940315080, -0.589207750598057740, -0.589167350782781150, +-0.589126949494586110, -0.589086546733573630, -0.589046142499844880, -0.589005736793499990, -0.588965329614641540, -0.588924920963369790, -0.588884510839785660, -0.588844099243990280, +-0.588803686176084580, -0.588763271636169820, -0.588722855624346790, -0.588682438140716640, -0.588642019185379620, -0.588601598758438320, -0.588561176859992980, -0.588520753490144770, +-0.588480328648994690, -0.588439902336643670, -0.588399474553192300, -0.588359045298742940, -0.588318614573395960, -0.588278182377252380, -0.588237748710413340, -0.588197313572980000, +-0.588156876965053370, -0.588116438886734480, -0.588075999338124600, -0.588035558319323970, -0.587995115830435070, -0.587954671871558480, -0.587914226442795230, -0.587873779544246360, +-0.587833331176013000, -0.587792881338195630, -0.587752430030896830, -0.587711977254216870, -0.587671523008256980, -0.587631067293118310, -0.587590610108902010, -0.587550151455709100, +-0.587509691333640950, -0.587469229742798470, -0.587428766683282140, -0.587388302155194770, -0.587347836158636500, -0.587307368693708700, -0.587266899760512500, -0.587226429359149040, +-0.587185957489719470, -0.587145484152324260, -0.587105009347066110, -0.587064533074045490, -0.587024055333363440, -0.586983576125121310, -0.586943095449420250, -0.586902613306361400, +-0.586862129696046120, -0.586821644618574670, -0.586781158074049850, -0.586740670062572240, -0.586700180584242890, -0.586659689639163040, -0.586619197227433940, -0.586578703349156960, +-0.586538208004432460, -0.586497711193363140, -0.586457212916049580, -0.586416713172592920, -0.586376211963094530, -0.586335709287655660, -0.586295205146377450, -0.586254699539361160, +-0.586214192466708250, -0.586173683928519100, -0.586133173924896390, -0.586092662455940830, -0.586052149521753550, -0.586011635122436040, -0.585971119258089310, -0.585930601928814080, +-0.585890083134713020, -0.585849562875886850, -0.585809041152436700, -0.585768517964464050, -0.585727993312070040, -0.585687467195356030, -0.585646939614423270, -0.585606410569373350, +-0.585565880060306520, -0.585525348087325810, -0.585484814650531700, -0.585444279750025550, -0.585403743385908730, -0.585363205558282470, -0.585322666267247490, -0.585282125512906700, +-0.585241583295360470, -0.585201039614710260, -0.585160494471057560, -0.585119947864503500, -0.585079399795149670, -0.585038850263097320, -0.584998299268447820, -0.584957746811301860, +-0.584917192891762250, -0.584876637509929690, -0.584836080665905530, -0.584795522359791150, -0.584754962591688020, -0.584714401361697390, -0.584673838669920070, -0.584633274516458860, +-0.584592708901414570, -0.584552141824888350, -0.584511573286981890, -0.584471003287796440, -0.584430431827433480, -0.584389858905994490, -0.584349284523580040, -0.584308708680293170, +-0.584268131376234570, -0.584227552611505610, -0.584186972386207760, -0.584146390700442500, -0.584105807554311180, -0.584065222947914630, -0.584024636881355860, -0.583984049354735360, +-0.583943460368154810, -0.583902869921715690, -0.583862278015519260, -0.583821684649667220, -0.583781089824260910, -0.583740493539401830, -0.583699895795190880, -0.583659296591730880, +-0.583618695929122740, -0.583578093807467720, -0.583537490226867520, -0.583496885187423600, -0.583456278689236770, -0.583415670732409960, -0.583375061317043860, -0.583334450443240280, +-0.583293838111100470, -0.583253224320726130, -0.583212609072218610, -0.583171992365679630, -0.583131374201210750, -0.583090754578912570, -0.583050133498888350, -0.583009510961238760, +-0.582968886966065410, -0.582928261513469770, -0.582887634603553530, -0.582847006236417500, -0.582806376412164600, -0.582765745130895850, -0.582725112392712630, -0.582684478197716740, +-0.582643842546009650, -0.582603205437692840, -0.582562566872868120, -0.582521926851636950, -0.582481285374100270, -0.582440642440361090, -0.582399998050520230, -0.582359352204679490, +-0.582318704902940240, -0.582278056145404290, -0.582237405932173210, -0.582196754263347940, -0.582156101139031490, -0.582115446559324680, -0.582074790524329310, -0.582034133034147080, +-0.581993474088879360, -0.581952813688628060, -0.581912151833494650, -0.581871488523580170, -0.581830823758987760, -0.581790157539818220, -0.581749489866173250, -0.581708820738154660, +-0.581668150155863930, -0.581627478119402850, -0.581586804628872360, -0.581546129684375580, -0.581505453286013440, -0.581464775433887750, -0.581424096128099980, -0.581383415368752040, +-0.581342733155945650, -0.581302049489782370, -0.581261364370363910, -0.581220677797791410, -0.581179989772167890, -0.581139300293594400, -0.581098609362172610, -0.581057916978004350, +-0.581017223141191310, -0.580976527851834510, -0.580935831110036990, -0.580895132915900000, -0.580854433269525130, -0.580813732171014290, -0.580773029620468950, -0.580732325617991150, +-0.580691620163682480, -0.580650913257644840, -0.580610204899979050, -0.580569495090788590, -0.580528783830174370, -0.580488071118238190, -0.580447356955081870, -0.580406641340807110, +-0.580365924275515030, -0.580325205759308790, -0.580284485792289640, -0.580243764374559270, -0.580203041506219370, -0.580162317187371990, -0.580121591418118810, -0.580080864198561640, +-0.580040135528802290, -0.579999405408941900, -0.579958673839083730, -0.579917940819328790, -0.579877206349779020, -0.579836470430536320, -0.579795733061702400, -0.579754994243379170, +-0.579714253975667670, -0.579673512258671360, -0.579632769092491170, -0.579592024477229020, -0.579551278412986930, -0.579510530899866590, -0.579469781937969940, -0.579429031527398770, +-0.579388279668254460, -0.579347526360640020, -0.579306771604656820, -0.579266015400406680, -0.579225257747991500, -0.579184498647513200, -0.579143738099073600, -0.579102976102773950, +-0.579062212658717600, -0.579021447767005700, -0.578980681427740280, -0.578939913641023040, -0.578899144406956000, -0.578858373725641200, -0.578817601597180430, -0.578776828021674850, +-0.578736052999228030, -0.578695276529941020, -0.578654498613915820, -0.578613719251254490, -0.578572938442058700, -0.578532156186430610, -0.578491372484471470, -0.578450587336284630, +-0.578409800741971240, -0.578369012701633320, -0.578328223215372920, -0.578287432283292050, -0.578246639905492520, -0.578205846082076370, -0.578165050813145620, -0.578124254098801530, +-0.578083455939147450, -0.578042656334284870, -0.578001855284315580, -0.577961052789341620, -0.577920248849465130, -0.577879443464787150, -0.577838636635411350, -0.577797828361439000, +-0.577757018642972130, -0.577716207480112540, -0.577675394872962600, -0.577634580821624110, -0.577593765326199100, -0.577552948386789720, -0.577512130003497330, -0.577471310176425280, +-0.577430488905674940, -0.577389666191348350, -0.577348842033547640, -0.577308016432374840, -0.577267189387931980, -0.577226360900320310, -0.577185530969643650, -0.577144699596003010, +-0.577103866779500760, -0.577063032520238720, -0.577022196818319230, -0.576981359673844120, -0.576940521086915630, -0.576899681057635230, -0.576858839586106180, -0.576817996672430170, +-0.576777152316709120, -0.576736306519045170, -0.576695459279540470, -0.576654610598297150, -0.576613760475416570, -0.576572908911002320, -0.576532055905155770, -0.576491201457979050, +-0.576450345569574310, -0.576409488240043790, -0.576368629469489520, -0.576327769258013660, -0.576286907605717660, -0.576246044512705110, -0.576205179979077500, -0.576164314004936950, +-0.576123446590385500, -0.576082577735525510, -0.576041707440459130, -0.576000835705287710, -0.575959962530114830, -0.575919087915042090, -0.575878211860171740, -0.575837334365605800, +-0.575796455431446530, -0.575755575057796070, -0.575714693244756660, -0.575673809992430560, -0.575632925300919250, -0.575592039170326310, -0.575551151600753210, -0.575510262592302310, +-0.575469372145075760, -0.575428480259175810, -0.575387586934703820, -0.575346692171763710, -0.575305795970456830, -0.575264898330885450, -0.575223999253151820, -0.575183098737358180, +-0.575142196783606790, -0.575101293391999890, -0.575060388562639860, -0.575019482295628050, -0.574978574591068270, -0.574937665449062000, -0.574896754869711700, -0.574855842853119410, +-0.574814929399387500, -0.574774014508618310, -0.574733098180913340, -0.574692180416376370, -0.574651261215109010, -0.574610340577213390, -0.574569418502791970, -0.574528494991947030, +-0.574487570044780790, -0.574446643661395640, -0.574405715841893150, -0.574364786586377130, -0.574323855894949160, -0.574282923767711510, -0.574241990204766520, -0.574201055206216670, +-0.574160118772164110, -0.574119180902710410, -0.574078241597959620, -0.574037300858013190, -0.573996358682973610, -0.573955415072943010, -0.573914470028023870, -0.573873523548318660, +-0.573832575633929530, -0.573791626284958280, -0.573750675501508710, -0.573709723283682420, -0.573668769631581870, -0.573627814545309310, -0.573586858024967340, -0.573545900070658090, +-0.573504940682483480, -0.573463979860547200, -0.573423017604950850, -0.573382053915797110, -0.573341088793188240, -0.573300122237226590, -0.573259154248014660, -0.573218184825654790, +-0.573177213970249460, -0.573136241681900470, -0.573095267960711530, -0.573054292806784440, -0.573013316220221560, -0.572972338201125480, -0.572931358749598550, -0.572890377865742370, +-0.572849395549661080, -0.572808411801456250, -0.572767426621230480, -0.572726440009086120, -0.572685451965125550, -0.572644462489451440, -0.572603471582166180, -0.572562479243372220, +-0.572521485473171390, -0.572480490271667470, -0.572439493638962400, -0.572398495575158540, -0.572357496080358460, -0.572316495154664650, -0.572275492798179690, -0.572234489011005150, +-0.572193483793245190, -0.572152477145001500, -0.572111469066376550, -0.572070459557472930, -0.572029448618393220, -0.571988436249239900, -0.571947422450115540, -0.571906407221121740, +-0.571865390562362740, -0.571824372473940250, -0.571783352955956840, -0.571742332008515100, -0.571701309631717500, -0.571660285825666530, -0.571619260590464200, -0.571578233926214430, +-0.571537205833019150, -0.571496176310980710, -0.571455145360201920, -0.571414112980785260, -0.571373079172833310, -0.571332043936448650, -0.571291007271733210, -0.571249969178790900, +-0.571208929657723740, -0.571167888708634220, -0.571126846331625030, -0.571085802526798640, -0.571044757294257740, -0.571003710634104270, -0.570962662546442230, -0.570921613031373560, +-0.570880562089000840, -0.570839509719426760, -0.570798455922753800, -0.570757400699084760, -0.570716344048522230, -0.570675285971168900, -0.570634226467126470, -0.570593165536499300, +-0.570552103179389200, -0.570511039395898870, -0.570469974186130990, -0.570428907550188050, -0.570387839488172180, -0.570346770000187410, -0.570305699086335770, -0.570264626746719850, +-0.570223552981442340, -0.570182477790605930, -0.570141401174313440, -0.570100323132667340, -0.570059243665770430, -0.570018162773724750, -0.569977080456634310, -0.569935996714601270, +-0.569894911547728200, -0.569853824956117800, -0.569812736939872890, -0.569771647499096150, -0.569730556633889500, -0.569689464344357190, -0.569648370630601250, -0.569607275492724390, +-0.569566178930829390, -0.569525080945018860, -0.569483981535395700, -0.569442880702062500, -0.569401778445121410, -0.569360674764676670, -0.569319569660830190, -0.569278463133684800, +-0.569237355183343170, -0.569196245809908240, -0.569155135013482690, -0.569114022794168450, -0.569072909152070090, -0.569031794087289320, -0.568990677599929050, -0.568949559690092200, +-0.568908440357881350, -0.568867319603399420, -0.568826197426749220, -0.568785073828032780, -0.568743948807354350, -0.568702822364816170, -0.568661694500520840, -0.568620565214571270, +-0.568579434507070270, -0.568538302378120750, -0.568497168827824640, -0.568456033856286510, -0.568414897463608180, -0.568373759649892560, -0.568332620415242570, -0.568291479759761130, +-0.568250337683550930, -0.568209194186714890, -0.568168049269355820, -0.568126902931575970, -0.568085755173479480, -0.568044605995168710, -0.568003455396746350, -0.567962303378315440, +-0.567921149939978780, -0.567879995081838400, -0.567838838803998770, -0.567797681106562150, -0.567756521989631220, -0.567715361453309030, -0.567674199497698480, -0.567633036122902390, +-0.567591871329023780, -0.567550705116165450, -0.567509537484429560, -0.567468368433920570, -0.567427197964740730, -0.567386026076992840, -0.567344852770779950, -0.567303678046204850, +-0.567262501903370580, -0.567221324342379370, -0.567180145363335500, -0.567138964966341310, -0.567097783151499720, -0.567056599918913660, -0.567015415268686040, -0.566974229200920000, +-0.566933041715718340, -0.566891852813183330, -0.566850662493419420, -0.566809470756528770, -0.566768277602614610, -0.566727083031779650, -0.566685887044127030, -0.566644689639759670, +-0.566603490818779810, -0.566562290581292040, -0.566521088927398500, -0.566479885857202210, -0.566438681370806220, -0.566397475468313650, -0.566356268149827200, -0.566315059415450240, +-0.566273849265284790, -0.566232637699435440, -0.566191424718004540, -0.566150210321095140, -0.566108994508810140, -0.566067777281252680, -0.566026558638525800, -0.565985338580731740, +-0.565944117107975100, -0.565902894220358110, -0.565861669917983920, -0.565820444200955560, -0.565779217069376060, -0.565737988523348560, -0.565696758562976080, -0.565655527188361760, +-0.565614294399607750, -0.565573060196818860, -0.565531824580097320, -0.565490587549546180, -0.565449349105268560, -0.565408109247367510, -0.565366867975945600, -0.565325625291107080, +-0.565284381192954650, -0.565243135681591240, -0.565201888757119960, -0.565160640419643870, -0.565119390669266310, -0.565078139506090200, -0.565036886930218810, -0.564995632941754480, +-0.564954377540801690, -0.564913120727463030, -0.564871862501841520, -0.564830602864040410, -0.564789341814162740, -0.564748079352311860, -0.564706815478589920, -0.564665550193101720, +-0.564624283495949510, -0.564583015387236760, -0.564541745867066400, -0.564500474935541670, -0.564459202592765830, -0.564417928838841900, -0.564376653673872460, -0.564335377097962110, +-0.564294099111213310, -0.564252819713729200, -0.564211538905613150, -0.564170256686968190, -0.564128973057897550, -0.564087688018503840, -0.564046401568891630, -0.564005113709163290, +-0.563963824439422280, -0.563922533759771750, -0.563881241670314840, -0.563839948171154790, -0.563798653262394870, -0.563757356944137640, -0.563716059216487710, -0.563674760079547640, +-0.563633459533420700, -0.563592157578210020, -0.563550854214019070, -0.563509549440950890, -0.563468243259108160, -0.563426935668595470, -0.563385626669515530, -0.563344316261971460, +-0.563303004446066620, -0.563261691221904390, -0.563220376589587790, -0.563179060549220290, -0.563137743100905140, -0.563096424244744820, -0.563055103980844350, -0.563013782309305990, +-0.562972459230233200, -0.562931134743729240, -0.562889808849897480, -0.562848481548840480, -0.562807152840662960, -0.562765822725467600, -0.562724491203357660, -0.562683158274436490, +-0.562641823938807460, -0.562600488196573820, -0.562559151047838930, -0.562517812492706270, -0.562476472531278300, -0.562435131163659840, -0.562393788389953580, -0.562352444210262870, +-0.562311098624690970, -0.562269751633341470, -0.562228403236316730, -0.562187053433721770, -0.562145702225659180, -0.562104349612232320, -0.562062995593544560, -0.562021640169699350, +-0.561980283340800080, -0.561938925106949980, -0.561897565468252650, -0.561856204424810660, -0.561814841976728930, -0.561773478124110050, -0.561732112867057490, -0.561690746205674610, +-0.561649378140064880, -0.561608008670331780, -0.561566637796577890, -0.561525265518908130, -0.561483891837425200, -0.561442516752232450, -0.561401140263433570, -0.561359762371131720, +-0.561318383075430470, -0.561277002376433300, -0.561235620274242900, -0.561194236768964180, -0.561152851860699850, -0.561111465549553490, -0.561070077835628340, -0.561028688719028000, +-0.560987298199856040, -0.560945906278214950, -0.560904512954209960, -0.560863118227943660, -0.560821722099519530, -0.560780324569041140, -0.560738925636611870, -0.560697525302335300, +-0.560656123566315000, -0.560614720428654350, -0.560573315889456140, -0.560531909948825290, -0.560490502606864840, -0.560449093863678030, -0.560407683719368550, -0.560366272174039780, +-0.560324859227794620, -0.560283444880738110, -0.560242029132972940, -0.560200611984602690, -0.560159193435730840, -0.560117773486461080, -0.560076352136896990, -0.560034929387141830, +-0.559993505237299520, -0.559952079687472630, -0.559910652737766190, -0.559869224388283240, -0.559827794639127240, -0.559786363490401670, -0.559744930942210230, -0.559703496994655710, +-0.559662061647843270, -0.559620624901875590, -0.559579186756856360, -0.559537747212889180, -0.559496306270077630, -0.559454863928525280, -0.559413420188335730, -0.559371975049612780, +-0.559330528512459010, -0.559289080576979680, -0.559247631243277700, -0.559206180511456650, -0.559164728381620120, -0.559123274853871810, -0.559081819928315290, -0.559040363605053490, +-0.558998905884191430, -0.558957446765832260, -0.558915986250079320, -0.558874524337036550, -0.558833061026807410, -0.558791596319495600, -0.558750130215204810, -0.558708662714037960, +-0.558667193816100190, -0.558625723521494420, -0.558584251830324340, -0.558542778742693650, -0.558501304258706030, -0.558459828378465080, -0.558418351102073940, -0.558376872429637520, +-0.558335392361259060, -0.558293910897042060, -0.558252428037090190, -0.558210943781507370, -0.558169458130397200, -0.558127971083863360, -0.558086482642009550, -0.558044992804938800, +-0.558003501572756360, -0.557962008945565020, -0.557920514923468840, -0.557879019506571260, -0.557837522694976220, -0.557796024488786510, -0.557754524888107620, -0.557713023893042340, +-0.557671521503694480, -0.557630017720167850, -0.557588512542566250, -0.557547005970993270, -0.557505498005552820, -0.557463988646348610, -0.557422477893483650, -0.557380965747063310, +-0.557339452207190500, -0.557297937273969040, -0.557256420947502830, -0.557214903227895460, -0.557173384115250190, -0.557131863609672150, -0.557090341711264480, -0.557048818420130880, +-0.557007293736375250, -0.556965767660101420, -0.556924240191413180, -0.556882711330414340, -0.556841181077208700, -0.556799649431899410, -0.556758116394591720, -0.556716581965388760, +-0.556675046144394340, -0.556633508931712260, -0.556591970327446450, -0.556550430331700600, -0.556508888944578060, -0.556467346166183980, -0.556425801996621620, -0.556384256435994650, +-0.556342709484407120, -0.556301161141962710, -0.556259611408765450, -0.556218060284919270, -0.556176507770527070, -0.556134953865694340, -0.556093398570524310, -0.556051841885120690, +-0.556010283809587610, -0.555968724344028660, -0.555927163488547980, -0.555885601243248590, -0.555844037608235970, -0.555802472583613370, -0.555760906169484480, -0.555719338365953330, +-0.555677769173123840, -0.555636198591099920, -0.555594626619985490, -0.555553053259883800, -0.555511478510900100, -0.555469902373137870, -0.555428324846700790, -0.555386745931692900, +-0.555345165628218230, -0.555303583936380570, -0.555262000856283190, -0.555220416388031550, -0.555178830531728900, -0.555137243287479150, -0.555095654655386350, -0.555054064635554400, +-0.555012473228087220, -0.554970880433088950, -0.554929286250663400, -0.554887690680913930, -0.554846093723946000, -0.554804495379862760, -0.554762895648768350, -0.554721294530766680, +-0.554679692025961790, -0.554638088134456810, -0.554596482856357540, -0.554554876191766910, -0.554513268140789160, -0.554471658703528210, -0.554430047880088210, -0.554388435670572940, +-0.554346822075086680, -0.554305207093733320, -0.554263590726616240, -0.554221972973840900, -0.554180353835510680, -0.554138733311729580, -0.554097111402601540, -0.554055488108230800, +-0.554013863428721390, -0.553972237364176450, -0.553930609914701780, -0.553888981080400520, -0.553847350861376820, -0.553805719257734700, -0.553764086269578290, -0.553722451897011750, +-0.553680816140138980, -0.553639178999063450, -0.553597540473890760, -0.553555900564724260, -0.553514259271667860, -0.553472616594825940, -0.553430972534302400, -0.553389327090201500, +-0.553347680262626480, -0.553306032051683050, -0.553264382457474560, -0.553222731480105030, -0.553181079119678730, -0.553139425376299680, -0.553097770250072120, -0.553056113741100090, +-0.553014455849487160, -0.552972796575338710, -0.552931135918758310, -0.552889473879849990, -0.552847810458718110, -0.552806145655466600, -0.552764479470199800, -0.552722811903020970, +-0.552681142954035920, -0.552639472623348000, -0.552597800911061480, -0.552556127817280360, -0.552514453342108910, -0.552472777485651380, -0.552431100248011900, -0.552389421629294610, +-0.552347741629603100, -0.552306060249042940, -0.552264377487717620, -0.552222693345731370, -0.552181007823188460, -0.552139320920192910, -0.552097632636848410, -0.552055942973260550, +-0.552014251929532800, -0.551972559505769400, -0.551930865702074610, -0.551889170518552690, -0.551847473955307870, -0.551805776012444290, -0.551764076690066330, -0.551722375988277450, +-0.551680673907183340, -0.551638970446887480, -0.551597265607494340, -0.551555559389107940, -0.551513851791832650, -0.551472142815772730, -0.551430432461031740, -0.551388720727715280, +-0.551347007615927140, -0.551305293125771480, -0.551263577257352640, -0.551221860010774780, -0.551180141386142240, -0.551138421383559400, -0.551096700003129710, -0.551054977244959110, +-0.551013253109151060, -0.550971527595809810, -0.550929800705039720, -0.550888072436945150, -0.550846342791630470, -0.550804611769199150, -0.550762879369756990, -0.550721145593407680, +-0.550679410440255590, -0.550637673910404860, -0.550595936003959950, -0.550554196721025240, -0.550512456061704960, -0.550470714026102930, -0.550428970614324720, -0.550387225826474150, +-0.550345479662655570, -0.550303732122973230, -0.550261983207531610, -0.550220232916434960, -0.550178481249786970, -0.550136728207693660, -0.550094973790258400, -0.550053217997585660, +-0.550011460829780030, -0.549969702286945640, -0.549927942369187070, -0.549886181076608580, -0.549844418409314640, -0.549802654367408940, -0.549760888950997400, -0.549719122160183590, +-0.549677353995071890, -0.549635584455766880, -0.549593813542372910, -0.549552041254993680, -0.549510267593735110, -0.549468492558700780, -0.549426716149995280, -0.549384938367722950, +-0.549343159211988400, -0.549301378682895750, -0.549259596780549810, -0.549217813505054830, -0.549176028856514620, -0.549134242835034980, -0.549092455440719830, -0.549050666673673420, +-0.549008876534000430, -0.548967085021805250, -0.548925292137192320, -0.548883497880265470, -0.548841702251130600, -0.548799905249891530, -0.548758106876652610, -0.548716307131518420, +-0.548674506014593550, -0.548632703525982370, -0.548590899665789330, -0.548549094434118480, -0.548507287831075500, -0.548465479856764300, -0.548423670511289480, -0.548381859794755400, +-0.548340047707266740, -0.548298234248927980, -0.548256419419842820, -0.548214603220117390, -0.548172785649855500, -0.548130966709161620, -0.548089146398140210, -0.548047324716896100, +-0.548005501665533520, -0.547963677244157290, -0.547921851452871090, -0.547880024291781060, -0.547838195760990910, -0.547796365860605320, -0.547754534590728760, -0.547712701951465930, +-0.547670867942921300, -0.547629032565198680, -0.547587195818404320, -0.547545357702642010, -0.547503518218016240, -0.547461677364631690, -0.547419835142592960, -0.547377991552004620, +-0.547336146592971250, -0.547294300265597560, -0.547252452569987450, -0.547210603506246840, -0.547168753074479760, -0.547126901274790800, -0.547085048107284640, -0.547043193572065770, +-0.547001337669238200, -0.546959480398908070, -0.546917621761179200, -0.546875761756156260, -0.546833900383943970, -0.546792037644646900, -0.546750173538369740, -0.546708308065217200, +-0.546666441225293840, -0.546624573018703600, -0.546582703445552710, -0.546540832505945100, -0.546498960199985340, -0.546457086527778250, -0.546415211489428290, -0.546373335085040490, +-0.546331457314718550, -0.546289578178568600, -0.546247697676694790, -0.546205815809201800, -0.546163932576194220, -0.546122047977776750, -0.546080162014054180, -0.546038274685131330, +-0.545996385991111890, -0.545954495932102320, -0.545912604508206440, -0.545870711719529170, -0.545828817566174960, -0.545786922048248860, -0.545745025165855320, -0.545703126919098610, +-0.545661227308084750, -0.545619326332917760, -0.545577423993702570, -0.545535520290543750, -0.545493615223546220, -0.545451708792814570, -0.545409800998453600, -0.545367891840567440, +-0.545325981319262350, -0.545284069434642250, -0.545242156186811930, -0.545200241575876320, -0.545158325601940110, -0.545116408265107990, -0.545074489565484210, -0.545032569503174800, +-0.544990648078284120, -0.544948725290916760, -0.544906801141177620, -0.544864875629171410, -0.544822948755003030, -0.544781020518777300, -0.544739090920599020, -0.544697159960572220, +-0.544655227638803360, -0.544613293955396370, -0.544571358910456160, -0.544529422504087530, -0.544487484736395410, -0.544445545607483710, -0.544403605117459000, -0.544361663266425210, +-0.544319720054487370, -0.544277775481750160, -0.544235829548318510, -0.544193882254297210, -0.544151933599791300, -0.544109983584905480, -0.544068032209744090, -0.544026079474413280, +-0.543984125379017300, -0.543942169923660960, -0.543900213108449160, -0.543858254933486940, -0.543816295398878990, -0.543774334504729670, -0.543732372251145120, -0.543690408638229710, +-0.543648443666088330, -0.543606477334825700, -0.543564509644546940, -0.543522540595356980, -0.543480570187360620, -0.543438598420662110, -0.543396625295367810, -0.543354650811581960, +-0.543312674969409490, -0.543270697768955310, -0.543228719210324450, -0.543186739293621710, -0.543144758018951460, -0.543102775386419930, -0.543060791396131610, -0.543018806048191190, +-0.542976819342703810, -0.542934831279774380, -0.542892841859507920, -0.542850851082009370, -0.542808858947382840, -0.542766865455734940, -0.542724870607169900, -0.542682874401792640, +-0.542640876839708300, -0.542598877921021680, -0.542556877645837930, -0.542514876014261180, -0.542472873026398020, -0.542430868682352570, -0.542388862982230100, -0.542346855926135410, +-0.542304847514173630, -0.542262837746449570, -0.542220826623068590, -0.542178814144135490, -0.542136800309754640, -0.542094785120032400, -0.542052768575073340, -0.542010750674982280, +-0.541968731419864460, -0.541926710809824690, -0.541884688844967430, -0.541842665525399170, -0.541800640851224370, -0.541758614822547830, -0.541716587439474820, -0.541674558702110340, +-0.541632528610559440, -0.541590497164927130, -0.541548464365318670, -0.541506430211838310, -0.541464394704592620, -0.541422357843685980, -0.541380319629223390, -0.541338280061310020, +-0.541296239140050980, -0.541254196865551320, -0.541212153237915380, -0.541170108257249870, -0.541128061923659030, -0.541086014237248000, -0.541043965198122030, -0.541001914806386150, +-0.540959863062145390, -0.540917809965504980, -0.540875755516569410, -0.540833699715445150, -0.540791642562236550, -0.540749584057048980, -0.540707524199987350, -0.540665462991156920, +-0.540623400430662930, -0.540581336518609620, -0.540539271255103700, -0.540497204640249640, -0.540455136674152570, -0.540413067356917630, -0.540370996688649960, -0.540328924669454920, +-0.540286851299437540, -0.540244776578702180, -0.540202700507355750, -0.540160623085502500, -0.540118544313247790, -0.540076464190696660, -0.540034382717954340, -0.539992299895126090, +-0.539950215722316270, -0.539908130199631800, -0.539866043327176910, -0.539823955105056870, -0.539781865533377040, -0.539739774612242540, -0.539697682341758520, -0.539655588722030340, +-0.539613493753163250, -0.539571397435261610, -0.539529299768432220, -0.539487200752779560, -0.539445100388408980, -0.539402998675425630, -0.539360895613934740, -0.539318791204040910, +-0.539276685445850830, -0.539234578339468970, -0.539192469885000800, -0.539150360082551350, -0.539108248932226090, -0.539066136434130040, -0.539024022588368790, -0.538981907395047480, +-0.538939790854270570, -0.538897672966144990, -0.538855553730775320, -0.538813433148266570, -0.538771311218724350, -0.538729187942253880, -0.538687063318959660, -0.538644937348948470, +-0.538602810032325020, -0.538560681369194550, -0.538518551359662310, -0.538476420003833780, -0.538434287301814090, -0.538392153253708710, -0.538350017859623000, -0.538307881119661440, +-0.538265743033931040, -0.538223603602536180, -0.538181462825582320, -0.538139320703174830, -0.538097177235418940, -0.538055032422420250, -0.538012886264283120, -0.537970738761114560, +-0.537928589913019170, -0.537886439720102310, -0.537844288182469430, -0.537802135300225690, -0.537759981073476670, -0.537717825502327720, -0.537675668586883430, -0.537633510327250710, +-0.537591350723534260, -0.537549189775839320, -0.537507027484271480, -0.537464863848936100, -0.537422698869938540, -0.537380532547383490, -0.537338364881377870, -0.537296195872026260, +-0.537254025519434240, -0.537211853823707170, -0.537169680784950420, -0.537127506403269450, -0.537085330678769730, -0.537043153611556630, -0.537000975201735060, -0.536958795449411610, +-0.536916614354691290, -0.536874431917679470, -0.536832248138481520, -0.536790063017202890, -0.536747876553948400, -0.536705688748824960, -0.536663499601937270, -0.536621309113390900, +-0.536579117283291220, -0.536536924111743810, -0.536494729598854030, -0.536452533744727460, -0.536410336549469460, -0.536368138013184950, -0.536325938135980840, -0.536283736917961830, +-0.536241534359233610, -0.536199330459901420, -0.536157125220070970, -0.536114918639846950, -0.536072710719336380, -0.536030501458643950, -0.535988290857875360, -0.535946078917136080, +-0.535903865636531470, -0.535861651016167340, -0.535819435056149040, -0.535777217756582050, -0.535734999117571390, -0.535692779139223970, -0.535650557821644500, -0.535608335164938780, +-0.535566111169212160, -0.535523885834570220, -0.535481659161118560, -0.535439431148962090, -0.535397201798207710, -0.535354971108960350, -0.535312739081325590, -0.535270505715408910, +-0.535228271011316090, -0.535186034969152510, -0.535143797589023860, -0.535101558871034940, -0.535059318815292890, -0.535017077421902520, -0.534974834690969510, -0.534932590622599350, +-0.534890345216897820, -0.534848098473970300, -0.534805850393921920, -0.534763600976859490, -0.534721350222888250, -0.534679098132113450, -0.534636844704641010, -0.534594589940576510, +-0.534552333840025430, -0.534510076403093560, -0.534467817629886490, -0.534425557520509130, -0.534383296075068630, -0.534341033293669890, -0.534298769176418500, -0.534256503723420260, +-0.534214236934780760, -0.534171968810604910, -0.534129699350999960, -0.534087428556070610, -0.534045156425922760, -0.534002882960662120, -0.533960608160394150, -0.533918332025224650, +-0.533876054555259440, -0.533833775750603980, -0.533791495611363410, -0.533749214137644760, -0.533706931329553160, -0.533664647187194200, -0.533622361710673570, -0.533580074900097070, +-0.533537786755569620, -0.533495497277198470, -0.533453206465088650, -0.533410914319345730, -0.533368620840075520, -0.533326326027383830, -0.533284029881376240, -0.533241732402158660, +-0.533199433589836680, -0.533157133444515320, -0.533114831966301940, -0.533072529155301570, -0.533030225011619780, -0.532987919535362400, -0.532945612726635320, -0.532903304585544140, +-0.532860995112193980, -0.532818684306691990, -0.532776372169143420, -0.532734058699653850, -0.532691743898329070, -0.532649427765275020, -0.532607110300597380, -0.532564791504402060, +-0.532522471376793870, -0.532480149917880290, -0.532437827127766330, -0.532395503006557910, -0.532353177554360620, -0.532310850771280370, -0.532268522657423080, -0.532226193212893660, +-0.532183862437799580, -0.532141530332245760, -0.532099196896338110, -0.532056862130182550, -0.532014526033884770, -0.531972188607550690, -0.531929849851286220, -0.531887509765197050, +-0.531845168349388330, -0.531802825603967520, -0.531760481529039540, -0.531718136124710420, -0.531675789391085950, -0.531633441328272060, -0.531591091936373770, -0.531548741215498440, +-0.531506389165751330, -0.531464035787238220, -0.531421681080065040, -0.531379325044337710, -0.531336967680162030, -0.531294608987643910, -0.531252248966889270, -0.531209887618003250, +-0.531167524941093210, -0.531125160936264380, -0.531082795603622700, -0.531040428943274080, -0.530998060955324310, -0.530955691639878660, -0.530913320997044470, -0.530870949026927110, +-0.530828575729632270, -0.530786201105265980, -0.530743825153934260, -0.530701447875742920, -0.530659069270797980, -0.530616689339205360, -0.530574308081070310, -0.530531925496500190, +-0.530489541585600240, -0.530447156348476500, -0.530404769785234880, -0.530362381895981280, -0.530319992680821750, -0.530277602139861410, -0.530235210273207970, -0.530192817080966330, +-0.530150422563242740, -0.530108026720143120, -0.530065629551773390, -0.530023231058239670, -0.529980831239647790, -0.529938430096103090, -0.529896027627713040, -0.529853623834583010, +-0.529811218716818800, -0.529768812274526660, -0.529726404507812390, -0.529683995416782130, -0.529641585001541130, -0.529599173262196960, -0.529556760198854890, -0.529514345811620820, +-0.529471930100601010, -0.529429513065901250, -0.529387094707627790, -0.529344675025886560, -0.529302254020782900, -0.529259831692424300, -0.529217408040916220, -0.529174983066364570, +-0.529132556768875490, -0.529090129148554910, -0.529047700205509170, -0.529005269939843310, -0.528962838351665020, -0.528920405441079770, -0.528877971208193350, -0.528835535653112140, +-0.528793098775941940, -0.528750660576789100, -0.528708221055759650, -0.528665780212959510, -0.528623338048494260, -0.528580894562471370, -0.528538449754996310, -0.528496003626175100, +-0.528453556176113780, -0.528411107404918700, -0.528368657312695110, -0.528326205899550480, -0.528283753165590510, -0.528241299110920990, -0.528198843735648400, -0.528156387039878550, +-0.528113929023717790, -0.528071469687272250, -0.528029009030647980, -0.527986547053950430, -0.527944083757287300, -0.527901619140763940, -0.527859153204486510, -0.527816685948561240, +-0.527774217373094270, -0.527731747478191740, -0.527689276263959120, -0.527646803730503990, -0.527604329877931930, -0.527561854706348980, -0.527519378215861370, -0.527476900406575360, +-0.527434421278597080, -0.527391940832032780, -0.527349459066987820, -0.527306975983570010, -0.527264491581884820, -0.527222005862038270, -0.527179518824136830, -0.527137030468286530, +-0.527094540794593610, -0.527052049803163670, -0.527009557494104270, -0.526967063867521120, -0.526924568923520130, -0.526882072662207880, -0.526839575083690390, -0.526797076188073920, +-0.526754575975464820, -0.526712074445968460, -0.526669571599692740, -0.526627067436743030, -0.526584561957225690, -0.526542055161246860, -0.526499547048913000, -0.526457037620330250, +-0.526414526875604080, -0.526372014814842410, -0.526329501438150720, -0.526286986745635230, -0.526244470737402330, -0.526201953413558240, -0.526159434774209230, -0.526116914819461660, +-0.526074393549421760, -0.526031870964195240, -0.525989347063889670, -0.525946821848610750, -0.525904295318464830, -0.525861767473558170, -0.525819238313997020, -0.525776707839887060, +-0.525734176051336100, -0.525691642948449720, -0.525649108531334170, -0.525606572800095930, -0.525564035754841230, -0.525521497395676440, -0.525478957722707810, -0.525436416736041910, +-0.525393874435784110, -0.525351330822042440, -0.525308785894922470, -0.525266239654530560, -0.525223692100972970, -0.525181143234356160, -0.525138593054786500, -0.525096041562369660, +-0.525053488757213360, -0.525010934639423500, -0.524968379209106110, -0.524925822466367880, -0.524883264411315160, -0.524840705044054110, -0.524798144364691410, -0.524755582373332640, +-0.524713019070085610, -0.524670454455056000, -0.524627888528350290, -0.524585321290074850, -0.524542752740336130, -0.524500182879240500, -0.524457611706893640, -0.524415039223403490, +-0.524372465428875830, -0.524329890323416930, -0.524287313907133350, -0.524244736180131450, -0.524202157142517720, -0.524159576794398620, -0.524116995135879840, -0.524074412167069290, +-0.524031827888072680, -0.523989242298996570, -0.523946655399947340, -0.523904067191031440, -0.523861477672355360, -0.523818886844024890, -0.523776294706147840, -0.523733701258830120, +-0.523691106502178210, -0.523648510436298450, -0.523605913061297560, -0.523563314377281760, -0.523520714384357650, -0.523478113082631810, -0.523435510472209930, -0.523392906553200030, +-0.523350301325707810, -0.523307694789839850, -0.523265086945702730, -0.523222477793402810, -0.523179867333046000, -0.523137255564740220, -0.523094642488591390, -0.523052028104705860, +-0.523009412413190320, -0.522966795414151250, -0.522924177107695230, -0.522881557493928620, -0.522838936572958210, -0.522796314344889710, -0.522753690809831140, -0.522711065967888410, +-0.522668439819168000, -0.522625812363776480, -0.522583183601820430, -0.522540553533406340, -0.522497922158640220, -0.522455289477629980, -0.522412655490481550, -0.522370020197301500, +-0.522327383598196420, -0.522284745693272770, -0.522242106482637360, -0.522199465966396660, -0.522156824144656470, -0.522114181017525050, -0.522071536585108190, -0.522028890847512470, +-0.521986243804844490, -0.521943595457210920, -0.521900945804718350, -0.521858294847472700, -0.521815642585582110, -0.521772989019152370, -0.521730334148290060, -0.521687677973102000, +-0.521645020493694770, -0.521602361710174930, -0.521559701622649200, -0.521517040231223470, -0.521474377536005900, -0.521431713537102380, -0.521389048234619620, -0.521346381628664200, +-0.521303713719342810, -0.521261044506762140, -0.521218373991028110, -0.521175702172248960, -0.521133029050530490, -0.521090354625979410, -0.521047678898702520, -0.521005001868806380, +-0.520962323536397820, -0.520919643901583410, -0.520876962964469840, -0.520834280725163130, -0.520791597183771550, -0.520748912340400880, -0.520706226195157940, -0.520663538748149520, +-0.520620849999482100, -0.520578159949261930, -0.520535468597597030, -0.520492775944593530, -0.520450081990358140, -0.520407386734997420, -0.520364690178618310, -0.520321992321327480, +-0.520279293163231630, -0.520236592704437560, -0.520193890945051200, -0.520151187885180890, -0.520108483524932660, -0.520065777864413210, -0.520023070903729350, -0.519980362642987750, +-0.519937653082295230, -0.519894942221757810, -0.519852230061483840, -0.519809516601579370, -0.519766801842150960, -0.519724085783305640, -0.519681368425150110, -0.519638649767791060, +-0.519595929811335510, -0.519553208555889270, -0.519510486001560910, -0.519467762148456250, -0.519425036996682080, -0.519382310546345430, -0.519339582797552990, -0.519296853750411680, +-0.519254123405027300, -0.519211391761508540, -0.519168658819961220, -0.519125924580492230, -0.519083189043208490, -0.519040452208216710, -0.518997714075623780, -0.518954974645536640, +-0.518912233918061290, -0.518869491893306110, -0.518826748571377230, -0.518784003952381450, -0.518741258036425680, -0.518698510823616730, -0.518655762314061520, -0.518613012507866070, +-0.518570261405138950, -0.518527509005986100, -0.518484755310514520, -0.518442000318831140, -0.518399244031042650, -0.518356486447256070, -0.518313727567578320, -0.518270967392116200, +-0.518228205920975850, -0.518185443154265850, -0.518142679092092220, -0.518099913734561880, -0.518057147081781740, -0.518014379133858730, -0.517971609890898970, -0.517928839353011040, +-0.517886067520300970, -0.517843294392875690, -0.517800519970842200, -0.517757744254307430, -0.517714967243378290, -0.517672188938161800, -0.517629409338764780, -0.517586628445293460, +-0.517543846257856320, -0.517501062776559610, -0.517458278001510230, -0.517415491932815110, -0.517372704570581380, -0.517329915914915730, -0.517287125965924630, -0.517244334723716450, +-0.517201542188397420, -0.517158748360074580, -0.517115953238854840, -0.517073156824845230, -0.517030359118152650, -0.516987560118884250, -0.516944759827146160, -0.516901958243046970, +-0.516859155366692910, -0.516816351198190920, -0.516773545737648000, -0.516730738985171300, -0.516687930940867620, -0.516645121604843550, -0.516602310977207320, -0.516559499058065310, +-0.516516685847524530, -0.516473871345692110, -0.516431055552674990, -0.516388238468580170, -0.516345420093514810, -0.516302600427585130, -0.516259779470899740, -0.516216957223564870, +-0.516174133685687650, -0.516131308857375020, -0.516088482738734200, -0.516045655329872120, -0.516002826630895140, -0.515959996641911830, -0.515917165363028560, -0.515874332794352350, +-0.515831498935990340, -0.515788663788049660, -0.515745827350637230, -0.515702989623860190, -0.515660150607825770, -0.515617310302640130, -0.515574468708412060, -0.515531625825247810, +-0.515488781653254400, -0.515445936192539090, -0.515403089443209010, -0.515360241405370290, -0.515317392079131850, -0.515274541464599940, -0.515231689561881590, -0.515188836371084040, +-0.515145981892314530, -0.515103126125679880, -0.515060269071287550, -0.515017410729244450, -0.514974551099657060, -0.514931690182634180, -0.514888827978281950, -0.514845964486707720, +-0.514803099708018520, -0.514760233642321600, -0.514717366289724090, -0.514674497650332460, -0.514631627724255300, -0.514588756511599080, -0.514545884012470920, -0.514503010226978090, +-0.514460135155227700, -0.514417258797327030, -0.514374381153383190, -0.514331502223502660, -0.514288622007794130, -0.514245740506364070, -0.514202857719319620, -0.514159973646767910, +-0.514117088288816420, -0.514074201645572160, -0.514031313717141720, -0.513988424503633580, -0.513945534005154530, -0.513902642221811590, -0.513859749153712020, -0.513816854800963170, +-0.513773959163672080, -0.513731062241946090, -0.513688164035891790, -0.513645264545617760, -0.513602363771230590, -0.513559461712837510, -0.513516558370545770, -0.513473653744462630, +-0.513430747834695330, -0.513387840641350460, -0.513344932164536690, -0.513302022404360620, -0.513259111360929500, -0.513216199034350670, -0.513173285424731280, -0.513130370532178580, +-0.513087454356800140, -0.513044536898702890, -0.513001618157993610, -0.512958698134781120, -0.512915776829171780, -0.512872854241273050, -0.512829930371192180, -0.512787005219036420, +-0.512744078784912460, -0.512701151068929000, -0.512658222071192720, -0.512615291791810870, -0.512572360230890810, -0.512529427388539790, -0.512486493264865280, -0.512443557859974530, +-0.512400621173974890, -0.512357683206972840, -0.512314743959077390, -0.512271803430395130, -0.512228861621033320, -0.512185918531099290, -0.512142974160700650, -0.512100028509943630, +-0.512057081578937370, -0.512014133367788450, -0.511971183876604120, -0.511928233105491850, -0.511885281054558990, -0.511842327723913030, -0.511799373113661080, -0.511756417223910850, +-0.511713460054768700, -0.511670501606343750, -0.511627541878742490, -0.511584580872072480, -0.511541618586440870, -0.511498655021955240, -0.511455690178723050, -0.511412724056850900, +-0.511369756656447570, -0.511326787977619880, -0.511283818020475290, -0.511240846785121160, -0.511197874271664850, -0.511154900480213840, -0.511111925410875690, -0.511068949063756880, +-0.511025971438966440, -0.510982992536611170, -0.510940012356798310, -0.510897030899635450, -0.510854048165230060, -0.510811064153689490, -0.510768078865120550, -0.510725092299632140, +-0.510682104457330980, -0.510639115338324620, -0.510596124942720440, -0.510553133270625900, -0.510510140322148590, -0.510467146097395850, -0.510424150596475390, -0.510381153819493670, +-0.510338155766559830, -0.510295156437780670, -0.510252155833263550, -0.510209153953116170, -0.510166150797445760, -0.510123146366359250, -0.510080140659965650, -0.510037133678371780, +-0.509994125421684990, -0.509951115890012850, -0.509908105083462960, -0.509865093002142780, -0.509822079646159890, -0.509779065015621870, -0.509736049110635300, -0.509693031931309440, +-0.509650013477751070, -0.509606993750067570, -0.509563972748366620, -0.509520950472755700, -0.509477926923341710, -0.509434902100233570, -0.509391876003538190, -0.509348848633363160, +-0.509305819989816060, -0.509262790073004350, -0.509219758883035610, -0.509176726420017540, -0.509133692684057730, -0.509090657675262850, -0.509047621393742040, -0.509004583839602230, +-0.508961545012950990, -0.508918504913895790, -0.508875463542544430, -0.508832420899004380, -0.508789376983382450, -0.508746331795787880, -0.508703285336327580, -0.508660237605108920, +-0.508617188602239700, -0.508574138327827610, -0.508531086781980110, -0.508488033964804800, -0.508444979876408800, -0.508401924516901030, -0.508358867886388400, -0.508315809984978720, +-0.508272750812779450, -0.508229690369898290, -0.508186628656442930, -0.508143565672520280, -0.508100501418239370, -0.508057435893707330, -0.508014369099031530, -0.507971301034319980, +-0.507928231699680040, -0.507885161095219640, -0.507842089221046340, -0.507799016077267740, -0.507755941663990850, -0.507712865981324920, -0.507669789029376760, -0.507626710808254170, +-0.507583631318064720, -0.507540550558916340, -0.507497468530915710, -0.507454385234172190, -0.507411300668792700, -0.507368214834885030, -0.507325127732556780, -0.507282039361915630, +-0.507238949723069490, -0.507195858816125940, -0.507152766641192800, -0.507109673198376850, -0.507066578487787580, -0.507023482509531890, -0.506980385263717360, -0.506937286750452020, +-0.506894186969843340, -0.506851085921998460, -0.506807983607026720, -0.506764880025034950, -0.506721775176130930, -0.506678669060422580, -0.506635561678017490, -0.506592453029023560, +-0.506549343113548380, -0.506506231931699970, -0.506463119483585130, -0.506420005769313230, -0.506376890788991400, -0.506333774542727320, -0.506290657030628810, -0.506247538252803660, +-0.506204418209359570, -0.506161296900403790, -0.506118174326045440, -0.506075050486391790, -0.506031925381550400, -0.505988799011629190, -0.505945671376736070, -0.505902542476978630, +-0.505859412312465010, -0.505816280883301990, -0.505773148189599060, -0.505730014231463240, -0.505686879009002330, -0.505643742522324360, -0.505600604771536900, -0.505557465756748090, +-0.505514325478064740, -0.505471183935596310, -0.505428041129449950, -0.505384897059733550, -0.505341751726554820, -0.505298605130021780, -0.505255457270242130, -0.505212308147323990, +-0.505169157761374170, -0.505126006112502360, -0.505082853200815360, -0.505039699026421320, -0.504996543589428140, -0.504953386889943400, -0.504910228928075360, -0.504867069703930920, +-0.504823909217619550, -0.504780747469248390, -0.504737584458925360, -0.504694420186758470, -0.504651254652855430, -0.504608087857324250, -0.504564919800272960, -0.504521750481809250, +-0.504478579902040480, -0.504435408061076010, -0.504392234959022970, -0.504349060595989380, -0.504305884972083060, -0.504262708087412140, -0.504219529942083630, -0.504176350536207130, +-0.504133169869889650, -0.504089987943239340, -0.504046804756363990, -0.504003620309371620, -0.503960434602370280, -0.503917247635467750, -0.503874059408772170, -0.503830869922390680, +-0.503787679176432750, -0.503744487171005730, -0.503701293906217320, -0.503658099382175760, -0.503614903598988970, -0.503571706556764860, -0.503528508255610800, -0.503485308695636240, +-0.503442107876948320, -0.503398905799655180, -0.503355702463864740, -0.503312497869685130, -0.503269292017224150, -0.503226084906590040, -0.503182876537889840, -0.503139666911233350, +-0.503096456026727700, -0.503053243884480810, -0.503010030484600800, -0.502966815827195820, -0.502923599912373680, -0.502880382740241830, -0.502837164310909860, -0.502793944624484900, +-0.502750723681075100, -0.502707501480788470, -0.502664278023733150, -0.502621053310017050, -0.502577827339748320, -0.502534600113034300, -0.502491371629984580, -0.502448141890706410, +-0.502404910895307810, -0.502361678643897020, -0.502318445136581970, -0.502275210373470890, -0.502231974354670930, -0.502188737080291770, -0.502145498550440880, -0.502102258765226180, +-0.502059017724755920, -0.502015775429138000, -0.501972531878480680, -0.501929287072892080, -0.501886041012480240, -0.501842793697352410, -0.501799545127618480, -0.501756295303385720, +-0.501713044224762150, -0.501669791891856010, -0.501626538304775330, -0.501583283463627570, -0.501540027368522430, -0.501496770019567160, -0.501453511416870000, -0.501410251560539090, +-0.501366990450682450, -0.501323728087408440, -0.501280464470824970, -0.501237199601040410, -0.501193933478162100, -0.501150666102299750, -0.501107397473560700, -0.501064127592053210, +-0.501020856457885300, -0.500977584071165330, -0.500934310432001430, -0.500891035540500850, -0.500847759396773620, -0.500804482000926860, -0.500761203353068950, -0.500717923453308010, +-0.500674642301752290, -0.500631359898509930, -0.500588076243689170, -0.500544791337397490, -0.500501505179744570, -0.500458217770837880, -0.500414929110785670, -0.500371639199696070, +-0.500328348037677450, -0.500285055624837940, -0.500241761961285000, -0.500198467047128450, -0.500155170882475740, -0.500111873467435130, -0.500068574802114750, -0.500025274886623070, +-0.499981973721068060, -0.499938671305558190, -0.499895367640200870, -0.499852062725105850, -0.499808756560380710, -0.499765449146133690, -0.499722140482473040, -0.499678830569507020, +-0.499635519407343960, -0.499592206996091300, -0.499548893335858890, -0.499505578426754250, -0.499462262268885680, -0.499418944862361490, -0.499375626207289870, -0.499332306303779230, +-0.499288985151937760, -0.499245662751873880, -0.499202339103695100, -0.499159014207511190, -0.499115688063429760, -0.499072360671559130, -0.499029032032007550, -0.498985702144883470, +-0.498942371010294260, -0.498899038628350000, -0.498855704999158100, -0.498812370122826920, -0.498769033999464820, -0.498725696629180150, -0.498682358012081220, -0.498639018148276380, +-0.498595677037874050, -0.498552334680981700, -0.498508991077709300, -0.498465646228164470, -0.498422300132455480, -0.498378952790690780, -0.498335604202978620, -0.498292254369427530, +-0.498248903290144980, -0.498205550965240940, -0.498162197394823090, -0.498118842578999690, -0.498075486517879200, -0.498032129211569970, -0.497988770660180440, -0.497945410863818990, +-0.497902049822593230, -0.497858687536613110, -0.497815324005986270, -0.497771959230821180, -0.497728593211226090, -0.497685225947309570, -0.497641857439179990, -0.497598487686945030, +-0.497555116690714560, -0.497511744450596320, -0.497468370966698710, -0.497424996239130220, -0.497381620267999200, -0.497338243053414120, -0.497294864595483440, -0.497251484894314870, +-0.497208103950018300, -0.497164721762701490, -0.497121338332472910, -0.497077953659440910, -0.497034567743714070, -0.496991180585400820, -0.496947792184608830, -0.496904402541448190, +-0.496861011656026470, -0.496817619528452270, -0.496774226158833990, -0.496730831547280150, -0.496687435693899230, -0.496644038598799690, -0.496600640262090110, -0.496557240683878130, +-0.496513839864273830, -0.496470437803384900, -0.496427034501319920, -0.496383629958187360, -0.496340224174095680, -0.496296817149152690, -0.496253408883468420, -0.496209999377150660, +-0.496166588630307880, -0.496123176643048610, -0.496079763415481430, -0.496036348947714810, -0.495992933239857330, -0.495949516292017560, -0.495906098104303140, -0.495862678676824320, +-0.495819258009688790, -0.495775836103005070, -0.495732412956881810, -0.495688988571427510, -0.495645562946750720, -0.495602136082959280, -0.495558707980163270, -0.495515278638470450, +-0.495471848057989490, -0.495428416238828830, -0.495384983181097190, -0.495341548884903120, -0.495298113350355120, -0.495254676577561060, -0.495211238566631130, -0.495167799317673070, +-0.495124358830795530, -0.495080917106107080, -0.495037474143716350, -0.494994029943731930, -0.494950584506261670, -0.494907137831415710, -0.494863689919301910, -0.494820240770028840, +-0.494776790383705200, -0.494733338760439620, -0.494689885900340690, -0.494646431803517030, -0.494602976470076510, -0.494559519900129310, -0.494516062093783290, -0.494472603051147150, +-0.494429142772329520, -0.494385681257439040, -0.494342218506584330, -0.494298754519873260, -0.494255289297416130, -0.494211822839320800, -0.494168355145695850, -0.494124886216650070, +-0.494081416052292060, -0.494037944652730490, -0.493994472018074060, -0.493950998148431460, -0.493907523043910560, -0.493864046704621640, -0.493820569130672630, -0.493777090322172210, +-0.493733610279229020, -0.493690129001951810, -0.493646646490448540, -0.493603162744829400, -0.493559677765202380, -0.493516191551676140, -0.493472704104359390, -0.493429215423360930, +-0.493385725508789450, -0.493342234360753580, -0.493298741979362190, -0.493255248364723120, -0.493211753516946740, -0.493168257436141010, -0.493124760122414570, -0.493081261575876280, +-0.493037761796634780, -0.492994260784798910, -0.492950758540476650, -0.492907255063778190, -0.492863750354811670, -0.492820244413685720, -0.492776737240509190, -0.492733228835390780, +-0.492689719198439350, -0.492646208329763580, -0.492602696229471500, -0.492559182897673530, -0.492515668334477520, -0.492472152539992380, -0.492428635514326860, -0.492385117257589770, +-0.492341597769889840, -0.492298077051335160, -0.492254555102036080, -0.492211031922100580, -0.492167507511637570, -0.492123981870755730, -0.492080454999563930, -0.492036926898171020, +-0.491993397566685750, -0.491949867005216260, -0.491906335213872890, -0.491862802192763630, -0.491819267941997370, -0.491775732461682990, -0.491732195751929220, -0.491688657812844990, +-0.491645118644538360, -0.491601578247119700, -0.491558036620697080, -0.491514493765379370, -0.491470949681275420, -0.491427404368494140, -0.491383857827144280, -0.491340310057334810, +-0.491296761059174580, -0.491253210832771630, -0.491209659378236460, -0.491166106695677170, -0.491122552785202560, -0.491078997646921590, -0.491035441280943120, -0.490991883687375290, +-0.490948324866328500, -0.490904764817910900, -0.490861203542231390, -0.490817641039398900, -0.490774077309522270, -0.490730512352710480, -0.490686946169072380, -0.490643378758716940, +-0.490599810121752240, -0.490556240258288870, -0.490512669168434830, -0.490469096852299110, -0.490425523309990670, -0.490381948541618430, -0.490338372547291350, -0.490294795327117510, +-0.490251216881207490, -0.490207637209669420, -0.490164056312612230, -0.490120474190144930, -0.490076890842376430, -0.490033306269415710, -0.489989720471371740, -0.489946133448352640, +-0.489902545200469050, -0.489858955727829060, -0.489815365030541680, -0.489771773108715890, -0.489728179962460650, -0.489684585591884990, -0.489640989997097100, -0.489597393178207500, +-0.489553795135324380, -0.489510195868556820, -0.489466595378013740, -0.489422993663804210, -0.489379390726037140, -0.489335786564821630, -0.489292181180265850, -0.489248574572480440, +-0.489204966741573540, -0.489161357687654290, -0.489117747410831580, -0.489074135911214570, -0.489030523188912160, -0.488986909244032710, -0.488943294076686740, -0.488899677686982500, +-0.488856060075029130, -0.488812441240935590, -0.488768821184810910, -0.488725199906764220, -0.488681577406904490, -0.488637953685340850, -0.488594328742181560, -0.488550702577537190, +-0.488507075191516090, -0.488463446584227300, -0.488419816755779890, -0.488376185706282940, -0.488332553435844750, -0.488288919944575960, -0.488245285232584810, -0.488201649299980560, +-0.488158012146872100, -0.488114373773368640, -0.488070734179579250, -0.488027093365613010, -0.487983451331579000, -0.487939808077585640, -0.487896163603743550, -0.487852517910160990, +-0.487808870996947200, -0.487765222864211200, -0.487721573512062130, -0.487677922940608350, -0.487634271149960550, -0.487590618140227080, -0.487546963911517080, -0.487503308463939630, +-0.487459651797603980, -0.487415993912619140, -0.487372334809094310, -0.487328674487138680, -0.487285012946860550, -0.487241350188370670, -0.487197686211777450, -0.487154021017189960, +-0.487110354604717470, -0.487066686974469090, -0.487023018126553960, -0.486979348061080510, -0.486935676778159520, -0.486892004277899300, -0.486848330560409050, -0.486804655625798000, +-0.486760979474175290, -0.486717302105650120, -0.486673623520331780, -0.486629943718328520, -0.486586262699751190, -0.486542580464708220, -0.486498897013308780, -0.486455212345662140, +-0.486411526461877460, -0.486367839362063960, -0.486324151046330030, -0.486280461514786540, -0.486236770767541900, -0.486193078804705360, -0.486149385626386100, -0.486105691232693370, +-0.486061995623736420, -0.486018298799624440, -0.485974600760466780, -0.485930901506371800, -0.485887201037450370, -0.485843499353810880, -0.485799796455562700, -0.485756092342815030, +-0.485712387015677090, -0.485668680474257430, -0.485624972718666840, -0.485581263749013840, -0.485537553565407620, -0.485493842167957550, -0.485450129556772910, -0.485406415731962910, +-0.485362700693636910, -0.485318984441904130, -0.485275266976873070, -0.485231548298654670, -0.485187828407357410, -0.485144107303090540, -0.485100384985963420, -0.485056661456085340, +-0.485012936713564820, -0.484969210758512740, -0.484925483591037650, -0.484881755211248820, -0.484838025619255650, -0.484794294815167390, -0.484750562799093400, -0.484706829571142970, +-0.484663095131425470, -0.484619359480049530, -0.484575622617125890, -0.484531884542763190, -0.484488145257070850, -0.484444404760158100, -0.484400663052134310, -0.484356920133108940, +-0.484313176003190400, -0.484269430662489790, -0.484225684111115550, -0.484181936349177110, -0.484138187376783820, -0.484094437194045050, -0.484050685801070250, -0.484006933197968670, +-0.483963179384849010, -0.483919424361822170, -0.483875668128996740, -0.483831910686482180, -0.483788152034387850, -0.483744392172823110, -0.483700631101897430, -0.483656868821719380, +-0.483613105332399870, -0.483569340634047660, -0.483525574726772100, -0.483481807610682600, -0.483438039285888580, -0.483394269752499440, -0.483350499010624660, -0.483306727060373640, +-0.483262953901854970, -0.483219179535179730, -0.483175403960456550, -0.483131627177794840, -0.483087849187304070, -0.483044069989093660, -0.483000289583272350, -0.482956507969951040, +-0.482912725149238440, -0.482868941121244120, -0.482825155886077380, -0.482781369443847750, -0.482737581794664690, -0.482693792938637730, -0.482650002875876230, -0.482606211606488980, +-0.482562419130586950, -0.482518625448278890, -0.482474830559674270, -0.482431034464882560, -0.482387237164013270, -0.482343438657175160, -0.482299638944479140, -0.482255838026034110, +-0.482212035901949440, -0.482168232572334650, -0.482124428037299320, -0.482080622296952920, -0.482036815351404970, -0.481993007200764990, -0.481949197845141670, -0.481905387284646160, +-0.481861575519387190, -0.481817762549474280, -0.481773948375016910, -0.481730132996124720, -0.481686316412907210, -0.481642498625473090, -0.481598679633933550, -0.481554859438397260, +-0.481511038038973880, -0.481467215435772870, -0.481423391628903800, -0.481379566618476310, -0.481335740404599870, -0.481291912987383270, -0.481248084366937720, -0.481204254543371900, +-0.481160423516795500, -0.481116591287318040, -0.481072757855049050, -0.481028923220098210, -0.480985087382574280, -0.480941250342588390, -0.480897412100249390, -0.480853572655666860, +-0.480809732008950390, -0.480765890160209600, -0.480722047109554070, -0.480678202857093450, -0.480634357402937310, -0.480590510747194500, -0.480546662889976160, -0.480502813831391210, +-0.480458963571549210, -0.480415112110559760, -0.480371259448532590, -0.480327405585576460, -0.480283550521802600, -0.480239694257319880, -0.480195836792237930, -0.480151978126666380, +-0.480108118260714870, -0.480064257194493080, -0.480020394928110610, -0.479976531461677180, -0.479932666795301670, -0.479888800929095250, -0.479844933863166790, -0.479801065597626030, +-0.479757196132582610, -0.479713325468146210, -0.479669453604425700, -0.479625580541532310, -0.479581706279575030, -0.479537830818663410, -0.479493954158907280, -0.479450076300416250, +-0.479406197243300030, -0.479362316987668290, -0.479318435533630790, -0.479274552881296390, -0.479230669030776380, -0.479186783982179730, -0.479142897735616140, -0.479099010291195280, +-0.479055121649026860, -0.479011231809220670, -0.478967340771885630, -0.478923448537133030, -0.478879555105071740, -0.478835660475811660, -0.478791764649462380, -0.478747867626133640, +-0.478703969405935290, -0.478660069988977030, -0.478616169375367770, -0.478572267565218870, -0.478528364558639340, -0.478484460355738880, -0.478440554956627240, -0.478396648361414270, +-0.478352740570209660, -0.478308831583122370, -0.478264921400263830, -0.478221010021743000, -0.478177097447669620, -0.478133183678153490, -0.478089268713304370, -0.478045352553232160, +-0.478001435198046500, -0.477957516647856520, -0.477913596902773520, -0.477869675962906470, -0.477825753828365280, -0.477781830499259710, -0.477737905975699540, -0.477693980257794640, +-0.477650053345653970, -0.477606125239389000, -0.477562195939108650, -0.477518265444922870, -0.477474333756941370, -0.477430400875274110, -0.477386466800030770, -0.477342531531321280, +-0.477298595069254710, -0.477254657413942460, -0.477210718565493520, -0.477166778524017790, -0.477122837289625120, -0.477078894862425330, -0.477034951242528320, -0.476991006430043940, +-0.476947060425081280, -0.476903113227751700, -0.476859164838164370, -0.476815215256429170, -0.476771264482655890, -0.476727312516954440, -0.476683359359434680, -0.476639405010206570, +-0.476595449469379150, -0.476551492737063930, -0.476507534813369940, -0.476463575698407080, -0.476419615392285330, -0.476375653895114550, -0.476331691207004580, -0.476287727328064630, +-0.476243762258406140, -0.476199795998138280, -0.476155828547370870, -0.476111859906213960, -0.476067890074777340, -0.476023919053171040, -0.475979946841504910, -0.475935973439888140, +-0.475891998848432200, -0.475848023067246270, -0.475804046096440340, -0.475760067936124240, -0.475716088586407960, -0.475672108047401510, -0.475628126319213970, -0.475584143401956870, +-0.475540159295739450, -0.475496174000671620, -0.475452187516863410, -0.475408199844424670, -0.475364210983465430, -0.475320220934095710, -0.475276229696424580, -0.475232237270563740, +-0.475188243656622270, -0.475144248854710180, -0.475100252864937460, -0.475056255687414110, -0.475012257322250160, -0.474968257769554760, -0.474924257029439520, -0.474880255102013590, +-0.474836251987387050, -0.474792247685669910, -0.474748242196972090, -0.474704235521403730, -0.474660227659074730, -0.474616218610094400, -0.474572208374574310, -0.474528196952623660, +-0.474484184344352580, -0.474440170549870980, -0.474396155569288990, -0.474352139402716590, -0.474308122050263850, -0.474264103512040070, -0.474220083788156780, -0.474176062878723270, +-0.474132040783849570, -0.474088017503645820, -0.474043993038221980, -0.473999967387688240, -0.473955940552154510, -0.473911912531730150, -0.473867883326526800, -0.473823852936653740, +-0.473779821362221080, -0.473735788603338870, -0.473691754660117150, -0.473647719532666040, -0.473603683221094860, -0.473559645725515290, -0.473515607046036570, -0.473471567182768840, +-0.473427526135822170, -0.473383483905306710, -0.473339440491332530, -0.473295395894009760, -0.473251350113447710, -0.473207303149758060, -0.473163255003050180, -0.473119205673434130, +-0.473075155161020110, -0.473031103465918200, -0.472987050588238480, -0.472942996528090350, -0.472898941285585570, -0.472854884860833380, -0.472810827253944020, -0.472766768465027580, +-0.472722708494194230, -0.472678647341554070, -0.472634585007217330, -0.472590521491293320, -0.472546456793893840, -0.472502390915128130, -0.472458323855106500, -0.472414255613939070, +-0.472370186191735990, -0.472326115588607430, -0.472282043804662820, -0.472237970840013840, -0.472193896694769970, -0.472149821369041380, -0.472105744862938210, -0.472061667176570670, +-0.472017588310048970, -0.471973508263483280, -0.471929427036983040, -0.471885344630660060, -0.471841261044623710, -0.471797176278984150, -0.471753090333851710, -0.471709003209336510, +-0.471664914905548790, -0.471620825422598810, -0.471576734760596030, -0.471532642919652130, -0.471488549899876650, -0.471444455701379770, -0.471400360324271740, -0.471356263768662850, +-0.471312166034663300, -0.471268067122383340, -0.471223967031932370, -0.471179865763422300, -0.471135763316962610, -0.471091659692663480, -0.471047554890635160, -0.471003448910988000, +-0.470959341753832190, -0.470915233419277270, -0.470871123907435020, -0.470827013218415020, -0.470782901352327420, -0.470738788309282620, -0.470694674089390810, -0.470650558692762340, +-0.470606442119507420, -0.470562324369735660, -0.470518205443558880, -0.470474085341086590, -0.470429964062429040, -0.470385841607696640, -0.470341717976999580, -0.470297593170448280, +-0.470253467188152140, -0.470209340030223190, -0.470165211696770840, -0.470121082187905490, -0.470076951503737460, -0.470032819644376990, -0.469988686609934480, -0.469944552400520300, +-0.469900417016243910, -0.469856280457217280, -0.469812142723549990, -0.469768003815352280, -0.469723863732734560, -0.469679722475807250, -0.469635580044680530, -0.469591436439464160, +-0.469547291660269980, -0.469503145707207530, -0.469458998580387250, -0.469414850279919470, -0.469370700805914530, -0.469326550158482850, -0.469282398337734830, -0.469238245343780000, +-0.469194091176730330, -0.469149935836695450, -0.469105779323785720, -0.469061621638111550, -0.469017462779783350, -0.468973302748911470, -0.468929141545606330, -0.468884979169977570, +-0.468840815622137140, -0.468796650902194630, -0.468752485010260570, -0.468708317946445240, -0.468664149710859120, -0.468619980303612630, -0.468575809724816220, -0.468531637974579470, +-0.468487465053014420, -0.468443290960230680, -0.468399115696338740, -0.468354939261449000, -0.468310761655671930, -0.468266582879117930, -0.468222402931896760, -0.468178221814120280, +-0.468134039525898270, -0.468089856067341210, -0.468045671438559460, -0.468001485639663540, -0.467957298670763910, -0.467913110531971040, -0.467868921223394570, -0.467824730745146630, +-0.467780539097336860, -0.467736346280075710, -0.467692152293473720, -0.467647957137641350, -0.467603760812689060, -0.467559563318726610, -0.467515364655866020, -0.467471164824217020, +-0.467426963823890150, -0.467382761654995820, -0.467338558317644590, -0.467294353811947010, -0.467250148138013520, -0.467205941295953830, -0.467161733285880120, -0.467117524107902080, +-0.467073313762130240, -0.467029102248675050, -0.466984889567647170, -0.466940675719157040, -0.466896460703314420, -0.466852244520231500, -0.466808027170017900, -0.466763808652784270, +-0.466719588968641070, -0.466675368117698940, -0.466631146100068390, -0.466586922915859960, -0.466542698565183430, -0.466498473048150950, -0.466454246364872320, -0.466410018515458050, +-0.466365789500018720, -0.466321559318664920, -0.466277327971507230, -0.466233095458656210, -0.466188861780221670, -0.466144626936315810, -0.466100390927048300, -0.466056153752529840, +-0.466011915412871010, -0.465967675908182390, -0.465923435238574600, -0.465879193404158180, -0.465834950405043020, -0.465790706241341280, -0.465746460913162740, -0.465702214420618100, +-0.465657966763817880, -0.465613717942872760, -0.465569467957893330, -0.465525216808989450, -0.465480964496273300, -0.465436711019854790, -0.465392456379844440, -0.465348200576353010, +-0.465303943609491010, -0.465259685479369190, -0.465215426186098180, -0.465171165729787780, -0.465126904110550240, -0.465082641328495470, -0.465038377383734100, -0.464994112276376770, +-0.464949846006534220, -0.464905578574316970, -0.464861309979835050, -0.464817040223200580, -0.464772769304523550, -0.464728497223914570, -0.464684223981484400, -0.464639949577343610, +-0.464595674011603010, -0.464551397284373170, -0.464507119395764060, -0.464462840345887920, -0.464418560134854720, -0.464374278762775150, -0.464329996229759790, -0.464285712535919490, +-0.464241427681364950, -0.464197141666206010, -0.464152854490554990, -0.464108566154521840, -0.464064276658217310, -0.464019986001752040, -0.463975694185236820, -0.463931401208782400, +-0.463887107072499420, -0.463842811776497940, -0.463798515320890170, -0.463754217705786180, -0.463709918931296590, -0.463665618997532230, -0.463621317904603760, -0.463577015652622050, +-0.463532712241697790, -0.463488407671940990, -0.463444101943463920, -0.463399795056376630, -0.463355487010789820, -0.463311177806814300, -0.463266867444560860, -0.463222555924140190, +-0.463178243245663200, -0.463133929409239810, -0.463089614414982310, -0.463045298263000840, -0.463000980953406140, -0.462956662486308960, -0.462912342861820090, -0.462868022080050400, +-0.462823700141109850, -0.462779377045110850, -0.462735052792163430, -0.462690727382378380, -0.462646400815866440, -0.462602073092738600, -0.462557744213105470, -0.462513414177078030, +-0.462469082984766300, -0.462424750636282630, -0.462380417131737050, -0.462336082471240470, -0.462291746654903690, -0.462247409682837510, -0.462203071555152780, -0.462158732271959640, +-0.462114391833370440, -0.462070050239495270, -0.462025707490444970, -0.461981363586330350, -0.461937018527262380, -0.461892672313351850, -0.461848324944709620, -0.461803976421445830, +-0.461759626743672880, -0.461715275911500860, -0.461670923925040610, -0.461626570784403110, -0.461582216489699100, -0.461537861041039610, -0.461493504438534710, -0.461449146682296810, +-0.461404787772435990, -0.461360427709063270, -0.461316066492289460, -0.461271704122225460, -0.461227340598982240, -0.461182975922670600, -0.461138610093400790, -0.461094243111285220, +-0.461049874976434070, -0.461005505688958210, -0.460961135248968590, -0.460916763656576130, -0.460872390911891800, -0.460828017015025680, -0.460783641966090280, -0.460739265765195800, +-0.460694888412453150, -0.460650509907973290, -0.460606130251867140, -0.460561749444245660, -0.460517367485219820, -0.460472984374900530, -0.460428600113398030, -0.460384214700824800, +-0.460339828137291020, -0.460295440422907710, -0.460251051557785780, -0.460206661542036210, -0.460162270375770010, -0.460117878059097320, -0.460073484592130770, -0.460029089974980430, +-0.459984694207757450, -0.459940297290572670, -0.459895899223537190, -0.459851500006761950, -0.459807099640357930, -0.459762698124435380, -0.459718295459106920, -0.459673891644482690, +-0.459629486680673720, -0.459585080567791020, -0.459540673305945670, -0.459496264895248590, -0.459451855335810120, -0.459407444627742740, -0.459363032771156750, -0.459318619766163230, +-0.459274205612873130, -0.459229790311397490, -0.459185373861847430, -0.459140956264333880, -0.459096537518967170, -0.459052117625859900, -0.459007696585122360, -0.458963274396865570, +-0.458918851061200620, -0.458874426578238510, -0.458830000948090340, -0.458785574170866350, -0.458741146246679220, -0.458696717175639260, -0.458652286957857480, -0.458607855593445020, +-0.458563423082512910, -0.458518989425172220, -0.458474554621534080, -0.458430118671708740, -0.458385681575808890, -0.458341243333944830, -0.458296803946227680, -0.458252363412768540, +-0.458207921733678470, -0.458163478909068610, -0.458119034939049260, -0.458074589823733060, -0.458030143563230460, -0.457985696157652440, -0.457941247607110250, -0.457896797911714890, +-0.457852347071577510, -0.457807895086809360, -0.457763441957521390, -0.457718987683824020, -0.457674532265830050, -0.457630075703649660, -0.457585617997394110, -0.457541159147174530, +-0.457496699153102090, -0.457452238015287840, -0.457407775733842230, -0.457363312308877950, -0.457318847740505410, -0.457274382028835750, -0.457229915173980150, -0.457185447176049700, +-0.457140978035155690, -0.457096507751409250, -0.457052036324920700, -0.457007563755802870, -0.456963090044166130, -0.456918615190121670, -0.456874139193780670, -0.456829662055254330, +-0.456785183774653820, -0.456740704352089580, -0.456696223787674330, -0.456651742081518540, -0.456607259233733410, -0.456562775244430120, -0.456518290113719920, -0.456473803841713990, +-0.456429316428523520, -0.456384827874258990, -0.456340338179033130, -0.456295847342956470, -0.456251355366140200, -0.456206862248695550, -0.456162367990733730, -0.456117872592365970, +-0.456073376053702790, -0.456028878374856890, -0.455984379555938850, -0.455939879597059840, -0.455895378498331120, -0.455850876259863980, -0.455806372881769620, -0.455761868364159330, +-0.455717362707143580, -0.455672855910835280, -0.455628347975344740, -0.455583838900783410, -0.455539328687262430, -0.455494817334893170, -0.455450304843786850, -0.455405791214053950, +-0.455361276445807370, -0.455316760539157650, -0.455272243494215970, -0.455227725311093730, -0.455183205989902140, -0.455138685530752540, -0.455094163933756230, -0.455049641199024520, +-0.455005117326667930, -0.454960592316799310, -0.454916066169529230, -0.454871538884968950, -0.454827010463229870, -0.454782480904423190, -0.454737950208660370, -0.454693418376051870, +-0.454648885406710610, -0.454604351300747170, -0.454559816058272840, -0.454515279679398920, -0.454470742164236830, -0.454426203512897920, -0.454381663725493490, -0.454337122802134060, +-0.454292580742932660, -0.454248037547999810, -0.454203493217446850, -0.454158947751385160, -0.454114401149926070, -0.454069853413181010, -0.454025304541260550, -0.453980754534277550, +-0.453936203392342750, -0.453891651115567400, -0.453847097704062900, -0.453802543157940660, -0.453757987477312110, -0.453713430662288530, -0.453668872712980620, -0.453624313629501340, +-0.453579753411961220, -0.453535192060471770, -0.453490629575144300, -0.453446065956090270, -0.453401501203421100, -0.453356935317247360, -0.453312368297682070, -0.453267800144835860, +-0.453223230858820160, -0.453178660439746360, -0.453134088887725940, -0.453089516202870300, -0.453044942385290860, -0.453000367435098250, -0.452955791352405550, -0.452911214137323330, +-0.452866635789963110, -0.452822056310436320, -0.452777475698854350, -0.452732893955328670, -0.452688311079969980, -0.452643727072891360, -0.452599141934203360, -0.452554555664017530, +-0.452509968262445330, -0.452465379729598160, -0.452420790065587550, -0.452376199270525030, -0.452331607344521160, -0.452287014287689080, -0.452242420100139430, -0.452197824781983780, +-0.452153228333333550, -0.452108630754300240, -0.452064032044995350, -0.452019432205530420, -0.451974831236016060, -0.451930229136565440, -0.451885625907289260, -0.451841021548299030, +-0.451796416059706220, -0.451751809441622350, -0.451707201694159010, -0.451662592817427600, -0.451617982811538980, -0.451573371676606160, -0.451528759412739900, -0.451484146020051770, +-0.451439531498653290, -0.451394915848655930, -0.451350299070171320, -0.451305681163310160, -0.451261062128185560, -0.451216441964908340, -0.451171820673590020, -0.451127198254342110, +-0.451082574707276250, -0.451037950032503960, -0.450993324230136770, -0.450948697300285470, -0.450904069243063200, -0.450859440058580810, -0.450814809746949760, -0.450770178308281750, +-0.450725545742688250, -0.450680912050280880, -0.450636277231170500, -0.450591641285470130, -0.450547004213290750, -0.450502366014743800, -0.450457726689940940, -0.450413086238993790, +-0.450368444662013870, -0.450323801959112870, -0.450279158130401590, -0.450234513175993220, -0.450189867095998510, -0.450145219890529190, -0.450100571559696790, -0.450055922103612950, +-0.450011271522389340, -0.449966619816136730, -0.449921966984968390, -0.449877313028995090, -0.449832657948328550, -0.449788001743080370, -0.449743344413362170, -0.449698685959285580, +-0.449654026380962300, -0.449609365678503180, -0.449564703852021410, -0.449520040901627890, -0.449475376827434270, -0.449430711629552230, -0.449386045308093340, -0.449341377863169410, +-0.449296709294892020, -0.449252039603372070, -0.449207368788722810, -0.449162696851055090, -0.449118023790480660, -0.449073349607111150, -0.449028674301058310, -0.448983997872433760, +-0.448939320321349200, -0.448894641647915540, -0.448849961852246130, -0.448805280934451770, -0.448760598894644200, -0.448715915732935120, -0.448671231449436270, -0.448626546044259390, +-0.448581859517515280, -0.448537171869317350, -0.448492483099776460, -0.448447793209004410, -0.448403102197112880, -0.448358410064213560, -0.448313716810418210, -0.448269022435838600, +-0.448224326940585620, -0.448179630324772590, -0.448134932588510500, -0.448090233731911090, -0.448045533755086100, -0.448000832658147270, -0.447956130441206410, -0.447911427104374370, +-0.447866722647764560, -0.447822017071487940, -0.447777310375656320, -0.447732602560381390, -0.447687893625774940, -0.447643183571948770, -0.447598472399014680, -0.447553760107083590, +-0.447509046696268840, -0.447464332166681520, -0.447419616518433370, -0.447374899751636190, -0.447330181866401780, -0.447285462862841880, -0.447240742741067510, -0.447196021501192090, +-0.447151299143326630, -0.447106575667582940, -0.447061851074072760, -0.447017125362908000, -0.446972398534200400, -0.446927670588061820, -0.446882941524603280, -0.446838211343938140, +-0.446793480046177530, -0.446748747631433190, -0.446704014099816970, -0.446659279451440680, -0.446614543686416230, -0.446569806804855470, -0.446525068806869320, -0.446480329692571340, +-0.446435589462072510, -0.446390848115484740, -0.446346105652919820, -0.446301362074489670, -0.446256617380306090, -0.446211871570480920, -0.446167124645125370, -0.446122376604352720, +-0.446077627448274170, -0.446032877177001570, -0.445988125790646730, -0.445943373289321600, -0.445898619673138040, -0.445853864942207130, -0.445809109096642340, -0.445764352136554800, +-0.445719594062056410, -0.445674834873258980, -0.445630074570274480, -0.445585313153214810, -0.445540550622191830, -0.445495786977316680, -0.445451022218702860, -0.445406256346461530, +-0.445361489360704520, -0.445316721261543760, -0.445271952049091260, -0.445227181723458820, -0.445182410284757690, -0.445137637733101280, -0.445092864068600770, -0.445048089291368130, +-0.445003313401515280, -0.444958536399154110, -0.444913758284396610, -0.444868979057354730, -0.444824198718139610, -0.444779417266864760, -0.444734634703641380, -0.444689851028581440, +-0.444645066241796840, -0.444600280343399600, -0.444555493333501640, -0.444510705212214140, -0.444465915979650680, -0.444421125635922450, -0.444376334181141420, -0.444331541615419550, +-0.444286747938868800, -0.444241953151601140, -0.444197157253728660, -0.444152360245362480, -0.444107562126616170, -0.444062762897600990, -0.444017962558428900, -0.443973161109211870, +-0.443928358550061960, -0.443883554881091160, -0.443838750102411470, -0.443793944214134100, -0.443749137216372660, -0.443704329109238400, -0.443659519892843300, -0.443614709567299430, +-0.443569898132718740, -0.443525085589213330, -0.443480271936895210, -0.443435457175875620, -0.443390641306268150, -0.443345824328184090, -0.443301006241735520, -0.443256187047034340, +-0.443211366744192760, -0.443166545333322780, -0.443121722814535600, -0.443076899187944910, -0.443032074453661990, -0.442987248611798890, -0.442942421662467610, -0.442897593605780350, +-0.442852764441849070, -0.442807934170785900, -0.442763102792702030, -0.442718270307711270, -0.442673436715924850, -0.442628602017454800, -0.442583766212413240, -0.442538929300912260, +-0.442494091283063990, -0.442449252158979680, -0.442404411928773060, -0.442359570592555370, -0.442314728150438760, -0.442269884602535360, -0.442225039948957180, -0.442180194189816470, +-0.442135347325225250, -0.442090499355294870, -0.442045650280139040, -0.442000800099869080, -0.441955948814597100, -0.441911096424435270, -0.441866242929495720, -0.441821388329890540, +-0.441776532625731080, -0.441731675817131130, -0.441686817904201940, -0.441641958887055710, -0.441597098765804610, -0.441552237540560780, -0.441507375211436290, -0.441462511778543400, +-0.441417647241993450, -0.441372781601900190, -0.441327914858374910, -0.441283047011529870, -0.441238178061477250, -0.441193308008329180, -0.441148436852197790, -0.441103564593195330, +-0.441058691231433210, -0.441013816767025110, -0.440968941200082450, -0.440924064530717470, -0.440879186759042360, -0.440834307885169200, -0.440789427909210330, -0.440744546831277890, +-0.440699664651483250, -0.440654781369940300, -0.440609896986760340, -0.440565011502055680, -0.440520124915938500, -0.440475237228520940, -0.440430348439915350, -0.440385458550233090, +-0.440340567559587950, -0.440295675468091400, -0.440250782275855680, -0.440205887982992980, -0.440160992589615610, -0.440116096095835680, -0.440071198501765570, -0.440026299807516620, +-0.439981400013202740, -0.439936499118935400, -0.439891597124826780, -0.439846694030989140, -0.439801789837534820, -0.439756884544575950, -0.439711978152224130, -0.439667070660593180, +-0.439622162069794490, -0.439577252379940440, -0.439532341591143240, -0.439487429703515230, -0.439442516717168610, -0.439397602632215670, -0.439352687448767990, -0.439307771166939310, +-0.439262853786841270, -0.439217935308586050, -0.439173015732286010, -0.439128095058053450, -0.439083173286000660, -0.439038250416239120, -0.438993326448882730, -0.438948401384043010, +-0.438903475221832320, -0.438858547962362950, -0.438813619605747220, -0.438768690152097410, -0.438723759601525880, -0.438678827954144200, -0.438633895210066180, -0.438588961369403450, +-0.438544026432268310, -0.438499090398773110, -0.438454153269030200, -0.438409215043151890, -0.438364275721250580, -0.438319335303437750, -0.438274393789827350, -0.438229451180531030, +-0.438184507475661010, -0.438139562675329770, -0.438094616779649610, -0.438049669788732890, -0.438004721702692060, -0.437959772521638540, -0.437914822245686450, -0.437869870874947280, +-0.437824918409533470, -0.437779964849557330, -0.437735010195131280, -0.437690054446367720, -0.437645097603378160, -0.437600139666276760, -0.437555180635174960, -0.437510220510185180, +-0.437465259291419880, -0.437420296978991430, -0.437375333573012230, -0.437330369073594680, -0.437285403480850430, -0.437240436794893490, -0.437195469015835450, -0.437150500143788700, +-0.437105530178865720, -0.437060559121178920, -0.437015586970840750, -0.436970613727962750, -0.436925639392659100, -0.436880663965041270, -0.436835687445221830, -0.436790709833313140, +-0.436745731129427720, -0.436700751333677920, -0.436655770446176260, -0.436610788467034380, -0.436565805396366360, -0.436520821234283760, -0.436475835980899170, -0.436430849636324950, +-0.436385862200673600, -0.436340873674057660, -0.436295884056588650, -0.436250893348380800, -0.436205901549545690, -0.436160908660195800, -0.436115914680443690, -0.436070919610401730, +-0.436025923450182540, -0.435980926199898480, -0.435935927859661340, -0.435890928429585160, -0.435845927909781720, -0.435800926300363380, -0.435755923601442770, -0.435710919813132310, +-0.435665914935544630, -0.435620908968791300, -0.435575901912986510, -0.435530893768241940, -0.435485884534670190, -0.435440874212383700, -0.435395862801495000, -0.435350850302116680, +-0.435305836714361240, -0.435260822038341160, -0.435215806274168280, -0.435170789421956640, -0.435125771481818080, -0.435080752453865020, -0.435035732338210130, -0.434990711134965900, +-0.434945688844244890, -0.434900665466158850, -0.434855641000821970, -0.434810615448345980, -0.434765588808843420, -0.434720561082426900, -0.434675532269209020, -0.434630502369302290, +-0.434585471382819280, -0.434540439309871800, -0.434495406150574030, -0.434450371905037710, -0.434405336573375540, -0.434360300155699990, -0.434315262652123670, -0.434270224062759170, +-0.434225184387718340, -0.434180143627115380, -0.434135101781062020, -0.434090058849670950, -0.434045014833054690, -0.433999969731325930, -0.433954923544597190, -0.433909876272981170, +-0.433864827916589700, -0.433819778475536880, -0.433774727949934660, -0.433729676339895620, -0.433684623645532400, -0.433639569866957620, -0.433594515004283920, -0.433549459057623100, +-0.433504402027089450, -0.433459343912794780, -0.433414284714851770, -0.433369224433373060, -0.433324163068471270, -0.433279100620259090, -0.433234037088849110, -0.433188972474353280, +-0.433143906776885800, -0.433098839996558570, -0.433053772133484280, -0.433008703187775510, -0.432963633159544950, -0.432918562048905330, -0.432873489855968570, -0.432828416580848810, +-0.432783342223658050, -0.432738266784508880, -0.432693190263514100, -0.432648112660786340, -0.432603033976438290, -0.432557954210582630, -0.432512873363332110, -0.432467791434798630, +-0.432422708425096390, -0.432377624334337460, -0.432332539162634420, -0.432287452910100070, -0.432242365576847090, -0.432197277162988170, -0.432152187668635280, -0.432107097093902710, +-0.432062005438902390, -0.432016912703747040, -0.431971818888549410, -0.431926723993422300, -0.431881628018478290, -0.431836530963830290, -0.431791432829590090, -0.431746333615872170, +-0.431701233322788370, -0.431656131950451490, -0.431611029498974340, -0.431565925968469540, -0.431520821359049960, -0.431475715670827540, -0.431430608903916600, -0.431385501058429150, +-0.431340392134478000, -0.431295282132175770, -0.431250171051635430, -0.431205058892969620, -0.431159945656291120, -0.431114831341712020, -0.431069715949346620, -0.431024599479306940, +-0.430979481931705770, -0.430934363306655850, -0.430889243604270060, -0.430844122824661170, -0.430799000967941160, -0.430753878034224440, -0.430708754023623020, -0.430663628936249710, +-0.430618502772217360, -0.430573375531638710, -0.430528247214626620, -0.430483117821293950, -0.430437987351752700, -0.430392855806117250, -0.430347723184499650, -0.430302589487012780, +-0.430257454713769420, -0.430212318864882370, -0.430167181940464600, -0.430122043940628030, -0.430076904865487160, -0.430031764715154030, -0.429986623489741540, -0.429941481189362430, +-0.429896337814129610, -0.429851193364156000, -0.429806047839554340, -0.429760901240437590, -0.429715753566917820, -0.429670604819109400, -0.429625454997124510, -0.429580304101076000, +-0.429535152131076740, -0.429489999087239560, -0.429444844969677390, -0.429399689778502290, -0.429354533513828800, -0.429309376175768980, -0.429264217764435680, -0.429219058279941830, +-0.429173897722400390, -0.429128736091924150, -0.429083573388626130, -0.429038409612618300, -0.428993244764015290, -0.428948078842929180, -0.428902911849472880, -0.428857743783759290, +-0.428812574645901330, -0.428767404436011910, -0.428722233154203210, -0.428677060800589760, -0.428631887375283630, -0.428586712878397720, -0.428541537310045130, -0.428496360670338640, +-0.428451182959391220, -0.428406004177315890, -0.428360824324224730, -0.428315643400232320, -0.428270461405450830, -0.428225278339993130, -0.428180094203972290, -0.428134908997501170, +-0.428089722720692790, -0.428044535373659330, -0.427999346956515310, -0.427954157469372930, -0.427908966912345150, -0.427863775285544920, -0.427818582589085280, -0.427773388823079190, +-0.427728193987639620, -0.427682998082878800, -0.427637801108911250, -0.427592603065849170, -0.427547403953805640, -0.427502203772893610, -0.427457002523225990, -0.427411800204915930, +-0.427366596818075540, -0.427321392362819460, -0.427276186839259940, -0.427230980247509880, -0.427185772587682420, -0.427140563859890520, -0.427095354064247200, -0.427050143200865540, +-0.427004931269858500, -0.426959718271338270, -0.426914504205419600, -0.426869289072214660, -0.426824072871836550, -0.426778855604398210, -0.426733637270012680, -0.426688417868793140, +-0.426643197400851710, -0.426597975866303100, -0.426552753265259540, -0.426507529597834110, -0.426462304864139890, -0.426417079064289830, -0.426371852198397130, -0.426326624266574810, +-0.426281395268935100, -0.426236165205592710, -0.426190934076659870, -0.426145701882249760, -0.426100468622475360, -0.426055234297449790, -0.426009998907286140, -0.425964762452096690, +-0.425919524931996140, -0.425874286347096730, -0.425829046697511650, -0.425783805983353970, -0.425738564204736770, -0.425693321361773120, -0.425648077454576170, -0.425602832483258250, +-0.425557586447934070, -0.425512339348715910, -0.425467091185716910, -0.425421841959050140, -0.425376591668828800, -0.425331340315165950, -0.425286087898173960, -0.425240834417967560, +-0.425195579874659110, -0.425150324268361630, -0.425105067599188420, -0.425059809867252500, -0.425014551072667060, -0.424969291215545280, -0.424924030295999400, -0.424878768314144280, +-0.424833505270092230, -0.424788241163956470, -0.424742975995850040, -0.424697709765886220, -0.424652442474178100, -0.424607174120838040, -0.424561904705980870, -0.424516634229718970, +-0.424471362692165450, -0.424426090093433570, -0.424380816433636400, -0.424335541712887230, -0.424290265931299200, -0.424244989088984730, -0.424199711186058540, -0.424154432222633100, +-0.424109152198821560, -0.424063871114737150, -0.424018588970493050, -0.423973305766202510, -0.423928021501978670, -0.423882736177933980, -0.423837449794183310, -0.423792162350838940, +-0.423746873848014180, -0.423701584285822270, -0.423656293664376400, -0.423611001983789760, -0.423565709244175640, -0.423520415445646450, -0.423475120588316990, -0.423429824672299730, +-0.423384527697707960, -0.423339229664654810, -0.423293930573253600, -0.423248630423617600, -0.423203329215859180, -0.423158026950093250, -0.423112723626432260, -0.423067419244989470, +-0.423022113805878120, -0.422976807309211500, -0.422931499755102860, -0.422886191143665490, -0.422840881475011810, -0.422795570749256720, -0.422750258966512690, -0.422704946126893080, +-0.422659632230511060, -0.422614317277479950, -0.422569001267913080, -0.422523684201922880, -0.422478366079624250, -0.422433046901129760, -0.422387726666552610, -0.422342405376006150, +-0.422297083029603670, -0.422251759627458530, -0.422206435169683920, -0.422161109656392470, -0.422115783087699040, -0.422070455463716130, -0.422025126784557110, -0.421979797050335280, +-0.421934466261163930, -0.421889134417156420, -0.421843801518425320, -0.421798467565085430, -0.421753132557249440, -0.421707796495030600, -0.421662459378542300, -0.421617121207897790, +-0.421571781983210490, -0.421526441704593750, -0.421481100372160130, -0.421435757986024510, -0.421390414546299550, -0.421345070053098510, -0.421299724506534800, -0.421254377906721820, +-0.421209030253772820, -0.421163681547801320, -0.421118331788919780, -0.421072980977243220, -0.421027629112884220, -0.420982276195956130, -0.420936922226572310, -0.420891567204846220, +-0.420846211130891270, -0.420800854004820700, -0.420755495826747260, -0.420710136596785860, -0.420664776315049120, -0.420619414981650400, -0.420574052596703160, -0.420528689160320820, +-0.420483324672616730, -0.420437959133703580, -0.420392592543696260, -0.420347224902707480, -0.420301856210850700, -0.420256486468239210, -0.420211115674986540, -0.420165743831206030, +-0.420120370937011210, -0.420074996992514660, -0.420029621997831390, -0.419984245953074100, -0.419938868858356180, -0.419893490713791060, -0.419848111519492250, -0.419802731275573160, +-0.419757349982146420, -0.419711967639327110, -0.419666584247227910, -0.419621199805962240, -0.419575814315643560, -0.419530427776385330, -0.419485040188301020, -0.419439651551504140, +-0.419394261866107340, -0.419348871132225690, -0.419303479349971810, -0.419258086519459280, -0.419212692640801520, -0.419167297714112040, -0.419121901739504310, -0.419076504717091010, +-0.419031106646987230, -0.418985707529305750, -0.418940307364159940, -0.418894906151663360, -0.418849503891929540, -0.418804100585072000, -0.418758696231204150, -0.418713290830438790, +-0.418667884382890990, -0.418622476888673490, -0.418577068347899760, -0.418531658760683380, -0.418486248127137860, -0.418440836447376730, -0.418395423721513500, -0.418350009949660930, +-0.418304595131934080, -0.418259179268445800, -0.418213762359309570, -0.418168344404638900, -0.418122925404547370, -0.418077505359148560, -0.418032084268555980, -0.417986662132882380, +-0.417941238952242890, -0.417895814726750360, -0.417850389456518260, -0.417804963141660210, -0.417759535782289750, -0.417714107378520440, -0.417668677930465030, -0.417623247438238750, +-0.417577815901954360, -0.417532383321725430, -0.417486949697665530, -0.417441515029888300, -0.417396079318507250, -0.417350642563635970, -0.417305204765387290, -0.417259765923876420, +-0.417214326039216150, -0.417168885111520060, -0.417123443140901770, -0.417078000127474870, -0.417032556071352920, -0.416987110972648790, -0.416941664831477710, -0.416896217647952480, +-0.416850769422186680, -0.416805320154294000, -0.416759869844387950, -0.416714418492582280, -0.416668966098990570, -0.416623512663725600, -0.416578058186902630, -0.416532602668634570, +-0.416487146109034980, -0.416441688508217560, -0.416396229866295870, -0.416350770183383620, -0.416305309459593650, -0.416259847695041210, -0.416214384889839200, -0.416168921044101140, +-0.416123456157940830, -0.416077990231471850, -0.416032523264807940, -0.415987055258062680, -0.415941586211348970, -0.415896116124782110, -0.415850644998474960, -0.415805172832541260, +-0.415759699627094530, -0.415714225382248610, -0.415668750098117100, -0.415623273774813730, -0.415577796412451410, -0.415532318011145320, -0.415486838571008490, -0.415441358092154540, +-0.415395876574697230, -0.415350394018750180, -0.415304910424427190, -0.415259425791841890, -0.415213940121107240, -0.415168453412338550, -0.415122965665648710, -0.415077476881151490, +-0.415031987058960550, -0.414986496199189590, -0.414941004301952470, -0.414895511367362020, -0.414850017395533570, -0.414804522386580110, -0.414759026340615290, -0.414713529257752960, +-0.414668031138106800, -0.414622531981790550, -0.414577031788917970, -0.414531530559602010, -0.414486028293957980, -0.414440524992098940, -0.414395020654138580, -0.414349515280190650, +-0.414304008870368940, -0.414258501424787210, -0.414212992943558400, -0.414167483426797990, -0.414121972874618770, -0.414076461287134660, -0.414030948664459440, -0.413985435006706810, +-0.413939920313990570, -0.413894404586424570, -0.413848887824121710, -0.413803370027197470, -0.413757851195764800, -0.413712331329937510, -0.413666810429829390, -0.413621288495554240, +-0.413575765527225860, -0.413530241524957260, -0.413484716488863870, -0.413439190419058630, -0.413393663315655520, -0.413348135178768170, -0.413302606008510540, -0.413257075804996380, +-0.413211544568339470, -0.413166012298652960, -0.413120478996052200, -0.413074944660650260, -0.413029409292560930, -0.412983872891898140, -0.412938335458775620, -0.412892796993307280, +-0.412847257495606910, -0.412801716965787600, -0.412756175403964810, -0.412710632810251610, -0.412665089184761800, -0.412619544527609290, -0.412573998838907880, -0.412528452118771480, +-0.412482904367314000, -0.412437355584648390, -0.412391805770890240, -0.412346254926152570, -0.412300703050549280, -0.412255150144194170, -0.412209596207201270, -0.412164041239684310, +-0.412118485241756480, -0.412072928213533200, -0.412027370155127640, -0.411981811066653660, -0.411936250948225110, -0.411890689799955970, -0.411845127621960070, -0.411799564414351390, +-0.411754000177242950, -0.411708434910750380, -0.411662868614986690, -0.411617301290065800, -0.411571732936101660, -0.411526163553208260, -0.411480593141499370, -0.411435021701088250, +-0.411389449232090310, -0.411343875734618840, -0.411298301208787630, -0.411252725654710660, -0.411207149072501890, -0.411161571462275220, -0.411115992824144630, -0.411070413158223290, +-0.411024832464626680, -0.410979250743468030, -0.410933667994861250, -0.410888084218920260, -0.410842499415759070, -0.410796913585491640, -0.410751326728231110, -0.410705738844093120, +-0.410660149933190720, -0.410614559995638010, -0.410568969031548820, -0.410523377041037250, -0.410477784024217250, -0.410432189981202790, -0.410386594912107050, -0.410340998817045610, +-0.410295401696131660, -0.410249803549479260, -0.410204204377202290, -0.410158604179414850, -0.410113002956230880, -0.410067400707764430, -0.410021797434128640, -0.409976193135439150, +-0.409930587811809190, -0.409884981463352780, -0.409839374090183890, -0.409793765692416600, -0.409748156270164920, -0.409702545823542760, -0.409656934352663480, -0.409611321857642710, +-0.409565708338593570, -0.409520093795630200, -0.409474478228866570, -0.409428861638416740, -0.409383244024394800, -0.409337625386913870, -0.409292005726089760, -0.409246385042035590, +-0.409200763334865490, -0.409155140604693430, -0.409109516851633550, -0.409063892075799910, -0.409018266277306470, -0.408972639456266610, -0.408927011612795930, -0.408881382747007750, +-0.408835752859016130, -0.408790121948935100, -0.408744490016878740, -0.408698857062961160, -0.408653223087295680, -0.408607588089997920, -0.408561952071181180, -0.408516315030959590, +-0.408470676969447170, -0.408425037886758100, -0.408379397783006410, -0.408333756658306240, -0.408288114512770810, -0.408242471346515980, -0.408196827159654940, -0.408151181952301820, +-0.408105535724570760, -0.408059888476575870, -0.408014240208431240, -0.407968590920250230, -0.407922940612148510, -0.407877289284239500, -0.407831636936637210, -0.407785983569455830, +-0.407740329182809560, -0.407694673776812400, -0.407649017351578550, -0.407603359907221410, -0.407557701443856610, -0.407512041961597570, -0.407466381460558470, -0.407420719940853380, +-0.407375057402596500, -0.407329393845902000, -0.407283729270883190, -0.407238063677655860, -0.407192397066333370, -0.407146729437029840, -0.407101060789859530, -0.407055391124936610, +-0.407009720442375160, -0.406964048742289420, -0.406918376024793580, -0.406872702290000940, -0.406827027538027410, -0.406781351768986280, -0.406735674982991790, -0.406689997180158080, +-0.406644318360599390, -0.406598638524429900, -0.406552957671763030, -0.406507275802714560, -0.406461592917397920, -0.406415909015927280, -0.406370224098416890, -0.406324538164980880, +-0.406278851215733590, -0.406233163250789120, -0.406187474270260970, -0.406141784274264950, -0.406096093262914460, -0.406050401236323690, -0.406004708194606990, -0.405959014137878490, +-0.405913319066252440, -0.405867622979842300, -0.405821925878763870, -0.405776227763130660, -0.405730528633056920, -0.405684828488656830, -0.405639127330044650, -0.405593425157334650, +-0.405547721970641100, -0.405502017770077440, -0.405456312555759530, -0.405410606327800850, -0.405364899086315680, -0.405319190831418210, -0.405273481563222790, -0.405227771281843670, +-0.405182059987394320, -0.405136347679990630, -0.405090634359746020, -0.405044920026774890, -0.404999204681191440, -0.404953488323109960, -0.404907770952644740, -0.404862052569910150, +-0.404816333175019580, -0.404770612768089010, -0.404724891349231900, -0.404679168918562540, -0.404633445476195290, -0.404587721022244440, -0.404541995556824240, -0.404496269080048270, +-0.404450541592032420, -0.404404813092890230, -0.404359083582735980, -0.404313353061684090, -0.404267621529848740, -0.404221888987344400, -0.404176155434285310, -0.404130420870785820, +-0.404084685296959460, -0.404038948712922230, -0.403993211118787610, -0.403947472514669950, -0.403901732900683650, -0.403855992276942970, -0.403810250643562350, -0.403764508000655280, +-0.403718764348337760, -0.403673019686723310, -0.403627274015926300, -0.403581527336061120, -0.403535779647242130, -0.403490030949583690, -0.403444281243200140, -0.403398530528205120, +-0.403352778804714540, -0.403307026072842080, -0.403261272332701980, -0.403215517584408770, -0.403169761828076730, -0.403124005063820290, -0.403078247291753010, -0.403032488511990920, +-0.402986728724647640, -0.402940967929837520, -0.402895206127674990, -0.402849443318274440, -0.402803679501750280, -0.402757914678216920, -0.402712148847787940, -0.402666382010579470, +-0.402620614166704970, -0.402574845316278960, -0.402529075459415850, -0.402483304596230050, -0.402437532726835970, -0.402391759851347290, -0.402345985969879970, -0.402300211082547710, +-0.402254435189464910, -0.402208658290746040, -0.402162880386505490, -0.402117101476857750, -0.402071321561917270, -0.402025540641797690, -0.401979758716615070, -0.401933975786483040, +-0.401888191851516090, -0.401842406911828600, -0.401796620967535160, -0.401750834018750110, -0.401705046065587210, -0.401659257108162530, -0.401613467146589630, -0.401567676180983100, +-0.401521884211457400, -0.401476091238126940, -0.401430297261106290, -0.401384502280509920, -0.401338706296452240, -0.401292909309047040, -0.401247111318410340, -0.401201312324655830, +-0.401155512327898090, -0.401109711328251570, -0.401063909325830750, -0.401018106320750190, -0.400972302313123530, -0.400926497303066900, -0.400880691290694040, -0.400834884276119460, +-0.400789076259457700, -0.400743267240823210, -0.400697457220330570, -0.400651646198094290, -0.400605834174228070, -0.400560021148848090, -0.400514207122068030, -0.400468392094002480, +-0.400422576064765940, -0.400376759034472950, -0.400330941003238070, -0.400285121971175050, -0.400239301938400020, -0.400193480905026710, -0.400147658871169710, -0.400101835836943590, +-0.400056011802462860, -0.400010186767842110, -0.399964360733195860, -0.399918533698637950, -0.399872705664284460, -0.399826876630249240, -0.399781046596646820, -0.399735215563591820, +-0.399689383531198760, -0.399643550499582220, -0.399597716468856000, -0.399551881439136280, -0.399506045410536910, -0.399460208383172420, -0.399414370357157380, -0.399368531332606410, +-0.399322691309634100, -0.399276850288355130, -0.399231008268883140, -0.399185165251334520, -0.399139321235822910, -0.399093476222463050, -0.399047630211369460, -0.399001783202656830, +-0.398955935196439740, -0.398910086192831970, -0.398864236191949830, -0.398818385193907110, -0.398772533198818390, -0.398726680206798360, -0.398680826217961640, -0.398634971232422810, +-0.398589115250296610, -0.398543258271696730, -0.398497400296739580, -0.398451541325538890, -0.398405681358209420, -0.398359820394865670, -0.398313958435622400, -0.398268095480594220, +-0.398222231529895830, -0.398176366583641030, -0.398130500641946110, -0.398084633704924970, -0.398038765772692260, -0.397992896845362600, -0.397947026923050730, -0.397901156005871230, +-0.397855284093938890, -0.397809411187367510, -0.397763537286273450, -0.397717662390770500, -0.397671786500973400, -0.397625909616996840, -0.397580031738955510, -0.397534152866964140, +-0.397488273001136540, -0.397442392141589050, -0.397396510288435590, -0.397350627441790890, -0.397304743601769590, -0.397258858768486430, -0.397212972942056150, -0.397167086122593380, +-0.397121198310212140, -0.397075309505028730, -0.397029419707156990, -0.396983528916711740, -0.396937637133807640, -0.396891744358559450, -0.396845850591081910, -0.396799955831488920, +-0.396754060079896890, -0.396708163336419670, -0.396662265601172070, -0.396616366874268770, -0.396570467155824560, -0.396524566445954240, -0.396478664744772450, -0.396432762052393190, +-0.396386858368932840, -0.396340953694505340, -0.396295048029225490, -0.396249141373207990, -0.396203233726567630, -0.396157325089419200, -0.396111415461876670, -0.396065504844056340, +-0.396019593236072330, -0.395973680638039280, -0.395927767050072040, -0.395881852472285410, -0.395835936904794130, -0.395790020347713050, -0.395744102801156020, -0.395698184265239620, +-0.395652264740077700, -0.395606344225785170, -0.395560422722476770, -0.395514500230267300, -0.395468576749271610, -0.395422652279604440, -0.395376726821379810, -0.395330800374714240, +-0.395284872939721590, -0.395238944516516810, -0.395193015105214650, -0.395147084705929960, -0.395101153318777600, -0.395055220943872300, -0.395009287581328140, -0.394963353231261580, +-0.394917417893786650, -0.394871481569018190, -0.394825544257071000, -0.394779605958059940, -0.394733666672099910, -0.394687726399304880, -0.394641785139791310, -0.394595842893673330, +-0.394549899661065680, -0.394503955442083330, -0.394458010236841130, -0.394412064045453810, -0.394366116868036410, -0.394320168704702880, -0.394274219555569740, -0.394228269420751010, +-0.394182318300361660, -0.394136366194516470, -0.394090413103330430, -0.394044459026918310, -0.393998503965394210, -0.393952547918874680, -0.393906590887473820, -0.393860632871306460, +-0.393814673870487520, -0.393768713885131850, -0.393722752915354470, -0.393676790961270170, -0.393630828022993040, -0.393584864100639700, -0.393538899194324220, -0.393492933304161460, +-0.393446966430266390, -0.393400998572753850, -0.393355029731738860, -0.393309059907335500, -0.393263089099660230, -0.393217117308827300, -0.393171144534951560, -0.393125170778147960, +-0.393079196038531480, -0.393033220316216960, -0.392987243611319370, -0.392941265923952900, -0.392895287254234060, -0.392849307602276990, -0.392803326968196640, -0.392757345352107990, +-0.392711362754125990, -0.392665379174365610, -0.392619394612941710, -0.392573409069968570, -0.392527422545562670, -0.392481435039838290, -0.392435446552910240, -0.392389457084893640, +-0.392343466635903360, -0.392297475206054400, -0.392251482795461790, -0.392205489404239660, -0.392159495032504580, -0.392113499680370790, -0.392067503347953260, -0.392021506035366950, +-0.391975507742726880, -0.391929508470148070, -0.391883508217744590, -0.391837506985633240, -0.391791504773928100, -0.391745501582744180, -0.391699497412196560, -0.391653492262400150, +-0.391607486133470020, -0.391561479025521130, -0.391515470938667790, -0.391469461873026560, -0.391423451828711690, -0.391377440805838190, -0.391331428804521100, -0.391285415824875420, +-0.391239401867016170, -0.391193386931057650, -0.391147371017116440, -0.391101354125306830, -0.391055336255743850, -0.391009317408542500, -0.390963297583817810, -0.390917276781684970, +-0.390871255002258890, -0.390825232245653850, -0.390779208511986550, -0.390733183801371290, -0.390687158113922960, -0.390641131449756820, -0.390595103808987820, -0.390549075191731100, +-0.390503045598100840, -0.390457015028213780, -0.390410983482184170, -0.390364950960127130, -0.390318917462157690, -0.390272882988390970, -0.390226847538942050, -0.390180811113926000, +-0.390134773713457120, -0.390088735337652090, -0.390042695986625220, -0.389996655660491690, -0.389950614359366450, -0.389904572083364650, -0.389858528832601470, -0.389812484607191980, +-0.389766439407250420, -0.389720393232893590, -0.389674346084235790, -0.389628297961392140, -0.389582248864477730, -0.389536198793607680, -0.389490147748897120, -0.389444095730461240, +-0.389398042738414270, -0.389351988772873030, -0.389305933833951790, -0.389259877921765750, -0.389213821036429990, -0.389167763178059680, -0.389121704346769960, -0.389075644542675180, +-0.389029583765892140, -0.388983522016535080, -0.388937459294719230, -0.388891395600559740, -0.388845330934171730, -0.388799265295670440, -0.388753198685170940, -0.388707131102787650, +-0.388661062548637360, -0.388614993022834420, -0.388568922525493960, -0.388522851056731230, -0.388476778616661360, -0.388430705205399570, -0.388384630823060180, -0.388338555469760040, +-0.388292479145613490, -0.388246401850735720, -0.388200323585241980, -0.388154244349247450, -0.388108164142867250, -0.388062082966216690, -0.388016000819410070, -0.387969917702564280, +-0.387923833615793750, -0.387877748559213590, -0.387831662532939050, -0.387785575537085310, -0.387739487571767680, -0.387693398637100560, -0.387647308733200690, -0.387601217860182590, +-0.387555126018161440, -0.387509033207252440, -0.387462939427570870, -0.387416844679231990, -0.387370748962350960, -0.387324652277042270, -0.387278554623422750, -0.387232456001606830, +-0.387186356411709790, -0.387140255853846870, -0.387094154328133270, -0.387048051834684330, -0.387001948373615230, -0.386955843945040460, -0.386909738549076900, -0.386863632185838970, +-0.386817524855441960, -0.386771416558001120, -0.386725307293631800, -0.386679197062449190, -0.386633085864568570, -0.386586973700104420, -0.386540860569173640, -0.386494746471890750, +-0.386448631408370990, -0.386402515378729610, -0.386356398383082000, -0.386310280421543360, -0.386264161494228150, -0.386218041601253450, -0.386171920742733600, -0.386125798918783960, +-0.386079676129519770, -0.386033552375056430, -0.385987427655509250, -0.385941301970993470, -0.385895175321623600, -0.385849047707516600, -0.385802919128787000, -0.385756789585550100, +-0.385710659077921240, -0.385664527606015720, -0.385618395169948890, -0.385572261769835280, -0.385526127405791790, -0.385479992077932990, -0.385433855786374180, -0.385387718531230770, +-0.385341580312618060, -0.385295441130651390, -0.385249300985446130, -0.385203159877116840, -0.385157017805780380, -0.385110874771551430, -0.385064730774545280, -0.385018585814877300, +-0.384972439892662890, -0.384926293008017340, -0.384880145161055230, -0.384833996351893640, -0.384787846580647020, -0.384741695847430730, -0.384695544152360290, -0.384649391495550940, +-0.384603237877118140, -0.384557083297177190, -0.384510927755842780, -0.384464771253231810, -0.384418613789458960, -0.384372455364639540, -0.384326295978889010, -0.384280135632322720, +-0.384233974325056130, -0.384187812057204540, -0.384141648828882630, -0.384095484640207430, -0.384049319491293510, -0.384003153382256320, -0.383956986313211230, -0.383910818284273650, +-0.383864649295559020, -0.383818479347182830, -0.383772308439259580, -0.383726136571906350, -0.383679963745237830, -0.383633789959369360, -0.383587615214416420, -0.383541439510494460, +-0.383495262847718900, -0.383449085226204360, -0.383402906646067910, -0.383356727107424240, -0.383310546610388710, -0.383264365155076840, -0.383218182741604020, -0.383171999370085780, +-0.383125815040637530, -0.383079629753373900, -0.383033443508412060, -0.382987256305866550, -0.382941068145852940, -0.382894879028486680, -0.382848688953883190, -0.382802497922157980, +-0.382756305933425740, -0.382710112987803500, -0.382663919085406030, -0.382617724226348770, -0.382571528410747150, -0.382525331638716710, -0.382479133910372970, -0.382432935225831380, +-0.382386735585206640, -0.382340534988615870, -0.382294333436173750, -0.382248130927995810, -0.382201927464197570, -0.382155723044894480, -0.382109517670202130, -0.382063311340235130, +-0.382017104055110630, -0.381970895814943420, -0.381924686619848960, -0.381878476469942830, -0.381832265365340430, -0.381786053306157390, -0.381739840292509240, -0.381693626324510650, +-0.381647411402278810, -0.381601195525928470, -0.381554978695575140, -0.381508760911334340, -0.381462542173321650, -0.381416322481652580, -0.381370101836441930, -0.381323880237806830, +-0.381277657685862030, -0.381231434180723080, -0.381185209722505520, -0.381138984311324980, -0.381092757947296970, -0.381046530630537010, -0.381000302361160780, -0.380954073139282980, +-0.380907842965020780, -0.380861611838488990, -0.380815379759803170, -0.380769146729078910, -0.380722912746431770, -0.380676677811977340, -0.380630441925830400, -0.380584205088108200, +-0.380537967298925470, -0.380491728558397860, -0.380445488866640870, -0.380399248223770190, -0.380353006629901350, -0.380306764085150020, -0.380260520589631000, -0.380214276143461430, +-0.380168030746756200, -0.380121784399630900, -0.380075537102201160, -0.380029288854582540, -0.379983039656890730, -0.379936789509240480, -0.379890538411749080, -0.379844286364531320, +-0.379798033367702850, -0.379751779421379330, -0.379705524525676300, -0.379659268680709480, -0.379613011886594520, -0.379566754143446210, -0.379520495451381780, -0.379474235810516200, +-0.379427975220964940, -0.379381713682843790, -0.379335451196268380, -0.379289187761354290, -0.379242923378216410, -0.379196658046972060, -0.379150391767736070, -0.379104124540624140, +-0.379057856365751840, -0.379011587243234920, -0.378965317173189040, -0.378919046155729860, -0.378872774190972210, -0.378826501279033500, -0.378780227420028480, -0.378733952614072940, +-0.378687676861282520, -0.378641400161772890, -0.378595122515659740, -0.378548843923057990, -0.378502564384084970, -0.378456283898855490, -0.378410002467485350, -0.378363720090090170, +-0.378317436766785700, -0.378271152497687610, -0.378224867282911660, -0.378178581122573580, -0.378132294016788160, -0.378086005965672880, -0.378039716969342580, -0.377993427027912940, +-0.377947136141499770, -0.377900844310218750, -0.377854551534185680, -0.377808257813515350, -0.377761963148325160, -0.377715667538730150, -0.377669370984845930, -0.377623073486788250, +-0.377576775044672910, -0.377530475658615640, -0.377484175328732190, -0.377437874055137460, -0.377391571837948860, -0.377345268677281350, -0.377298964573250680, -0.377252659525972590, +-0.377206353535562870, -0.377160046602137200, -0.377113738725810670, -0.377067429906700560, -0.377021120144921900, -0.376974809440590420, -0.376928497793821930, -0.376882185204732210, +-0.376835871673437020, -0.376789557200052140, -0.376743241784692540, -0.376696925427475680, -0.376650608128516470, -0.376604289887930770, -0.376557970705834360, -0.376511650582342980, +-0.376465329517572500, -0.376419007511637870, -0.376372684564656560, -0.376326360676743520, -0.376280035848014560, -0.376233710078585580, -0.376187383368572270, -0.376141055718090480, +-0.376094727127256110, -0.376048397596184080, -0.376002067124991850, -0.375955735713794480, -0.375909403362707730, -0.375863070071847550, -0.375816735841329630, -0.375770400671269880, +-0.375724064561783310, -0.375677727512987390, -0.375631389524997190, -0.375585050597928520, -0.375538710731897150, -0.375492369927019070, -0.375446028183410050, -0.375399685501185960, +-0.375353341880462650, -0.375306997321355200, -0.375260651823981000, -0.375214305388455240, -0.375167958014893670, -0.375121609703412240, -0.375075260454126760, -0.375028910267153180, +-0.374982559142606480, -0.374936207080604160, -0.374889854081261350, -0.374843500144693920, -0.374797145271017710, -0.374750789460348680, -0.374704432712802630, -0.374658075028495520, +-0.374611716407542430, -0.374565356850060820, -0.374518996356165810, -0.374472634925973380, -0.374426272559599320, -0.374379909257159580, -0.374333545018770030, -0.374287179844545850, +-0.374240813734604550, -0.374194446689061160, -0.374148078708031680, -0.374101709791632040, -0.374055339939978080, -0.374008969153185770, -0.373962597431371060, -0.373916224774649030, +-0.373869851183137260, -0.373823476656950870, -0.373777101196205770, -0.373730724801017930, -0.373684347471503250, -0.373637969207777750, -0.373591590009956450, -0.373545209878157040, +-0.373498828812494580, -0.373452446813085090, -0.373406063880044440, -0.373359680013488630, -0.373313295213533620, -0.373266909480295390, -0.373220522813889070, -0.373174135214432270, +-0.373127746682040130, -0.373081357216828610, -0.373034966818913680, -0.372988575488411360, -0.372942183225437600, -0.372895790030107530, -0.372849395902538850, -0.372803000842846680, +-0.372756604851146980, -0.372710207927555770, -0.372663810072189020, -0.372617411285162790, -0.372571011566593000, -0.372524610916595720, -0.372478209335286080, -0.372431806822781710, +-0.372385403379197840, -0.372338999004650450, -0.372292593699255600, -0.372246187463129210, -0.372199780296387390, -0.372153372199145290, -0.372106963171520590, -0.372060553213628460, +-0.372014142325584940, -0.371967730507506090, -0.371921317759507930, -0.371874904081706430, -0.371828489474217700, -0.371782073937156900, -0.371735657470641740, -0.371689240074787490, +-0.371642821749710080, -0.371596402495525670, -0.371549982312350200, -0.371503561200299810, -0.371457139159489690, -0.371410716190037520, -0.371364292292058580, -0.371317867465668920, +-0.371271441710984530, -0.371225015028121610, -0.371178587417196120, -0.371132158878324180, -0.371085729411620990, -0.371039299017204340, -0.370992867695189410, -0.370946435445692280, +-0.370900002268829130, -0.370853568164715930, -0.370807133133468860, -0.370760697175203100, -0.370714260290036400, -0.370667822478084050, -0.370621383739462180, -0.370574944074286820, +-0.370528503482674130, -0.370482061964740150, -0.370435619520601060, -0.370389176150372030, -0.370342731854170940, -0.370296286632113000, -0.370249840484314360, -0.370203393410891090, +-0.370156945411959370, -0.370110496487635280, -0.370064046638034110, -0.370017595863273650, -0.369971144163469210, -0.369924691538736860, -0.369878237989192840, -0.369831783514953220, +-0.369785328116134130, -0.369738871792851700, -0.369692414545221280, -0.369645956373360670, -0.369599497277385170, -0.369553037257410900, -0.369506576313554050, -0.369460114445930740, +-0.369413651654657170, -0.369367187939849460, -0.369320723301622970, -0.369274257740095480, -0.369227791255382350, -0.369181323847599720, -0.369134855516863810, -0.369088386263290770, +-0.369041916086996770, -0.368995444988097940, -0.368948972966709700, -0.368902500022949830, -0.368856026156933750, -0.368809551368777580, -0.368763075658597510, -0.368716599026509770, +-0.368670121472630560, -0.368623642997075170, -0.368577163599961510, -0.368530683281404980, -0.368484202041521710, -0.368437719880427950, -0.368391236798239870, -0.368344752795073730, +-0.368298267871045690, -0.368251782026271120, -0.368205295260867980, -0.368158807574951560, -0.368112318968638160, -0.368065829442043910, -0.368019338995285160, -0.367972847628477980, +-0.367926355341737900, -0.367879862135182760, -0.367833368008927960, -0.367786872963089760, -0.367740376997784340, -0.367693880113127980, -0.367647382309236940, -0.367600883586227440, +-0.367554383944214910, -0.367507883383317250, -0.367461381903649850, -0.367414879505329030, -0.367368376188471010, -0.367321871953192050, -0.367275366799608370, -0.367228860727835500, +-0.367182353737991240, -0.367135845830191150, -0.367089337004551430, -0.367042827261188360, -0.366996316600218250, -0.366949805021757340, -0.366903292525921910, -0.366856779112827380, +-0.366810264782591770, -0.366763749535330530, -0.366717233371159860, -0.366670716290196150, -0.366624198292555600, -0.366577679378354620, -0.366531159547709370, -0.366484638800735450, +-0.366438117137550760, -0.366391594558270750, -0.366345071063011730, -0.366298546651890100, -0.366252021325022050, -0.366205495082523980, -0.366158967924512140, -0.366112439851102090, +-0.366065910862411750, -0.366019380958556630, -0.365972850139653030, -0.365926318405817350, -0.365879785757165840, -0.365833252193814910, -0.365786717715880010, -0.365740182323479100, +-0.365693646016727770, -0.365647108795742300, -0.365600570660639110, -0.365554031611534440, -0.365507491648544740, -0.365460950771786250, -0.365414408981374620, -0.365367866277427730, +-0.365321322660061230, -0.365274778129391410, -0.365228232685534620, -0.365181686328607260, -0.365135139058725690, -0.365088590876005430, -0.365042041780564540, -0.364995491772518550, +-0.364948940851983820, -0.364902389019076730, -0.364855836273913710, -0.364809282616611050, -0.364762728047285210, -0.364716172566051710, -0.364669616173028620, -0.364623058868331460, +-0.364576500652076640, -0.364529941524380620, -0.364483381485359750, -0.364436820535130380, -0.364390258673808140, -0.364343695901511110, -0.364297132218354860, -0.364250567624455730, +-0.364204002119930200, -0.364157435704894670, -0.364110868379465550, -0.364064300143759230, -0.364017730997891360, -0.363971160941979950, -0.363924589976140690, -0.363878018100489920, +-0.363831445315144160, -0.363784871620219720, -0.363738297015833160, -0.363691721502100830, -0.363645145079138370, -0.363598567747063840, -0.363551989505992930, -0.363505410356042060, +-0.363458830297327620, -0.363412249329966130, -0.363365667454074000, -0.363319084669767760, -0.363272500977162900, -0.363225916376377690, -0.363179330867527630, -0.363132744450729240, +-0.363086157126099040, -0.363039568893753440, -0.362992979753808900, -0.362946389706381050, -0.362899798751588120, -0.362853206889545640, -0.362806614120370190, -0.362760020444178160, +-0.362713425861086070, -0.362666830371210450, -0.362620233974667750, -0.362573636671573660, -0.362527038462046260, -0.362480439346201280, -0.362433839324155180, -0.362387238396024550, +-0.362340636561925780, -0.362294033821975390, -0.362247430176289130, -0.362200825624985120, -0.362154220168179050, -0.362107613805987380, -0.362061006538526740, -0.362014398365913540, +-0.361967789288264400, -0.361921179305695730, -0.361874568418323270, -0.361827956626265270, -0.361781343929637340, -0.361734730328556080, -0.361688115823137980, -0.361641500413499630, +-0.361594884099757490, -0.361548266882027290, -0.361501648760427290, -0.361455029735073150, -0.361408409806081410, -0.361361788973568690, -0.361315167237651500, -0.361268544598446370, +-0.361221921056069870, -0.361175296610637740, -0.361128671262268220, -0.361082045011076990, -0.361035417857180680, -0.360988789800695820, -0.360942160841738970, -0.360895530980426760, +-0.360848900216875660, -0.360802268551201510, -0.360755635983522560, -0.360709002513954440, -0.360662368142613880, -0.360615732869617340, -0.360569096695081530, -0.360522459619122940, +-0.360475821641858210, -0.360429182763403130, -0.360382542983875900, -0.360335902303392300, -0.360289260722068900, -0.360242618240022410, -0.360195974857369370, -0.360149330574226380, +-0.360102685390709220, -0.360056039306936190, -0.360009392323023090, -0.359962744439086490, -0.359916095655243020, -0.359869445971609300, -0.359822795388301970, -0.359776143905437720, +-0.359729491523132220, -0.359682838241503820, -0.359636184060668330, -0.359589528980742370, -0.359542873001842570, -0.359496216124085610, -0.359449558347588130, -0.359402899672465910, +-0.359356240098837270, -0.359309579626818030, -0.359262918256524840, -0.359216255988074380, -0.359169592821583230, -0.359122928757168110, -0.359076263794945730, -0.359029597935031810, +-0.358982931177544710, -0.358936263522600270, -0.358889594970315250, -0.358842925520806160, -0.358796255174189780, -0.358749583930582820, -0.358702911790101000, -0.358656238752862730, +-0.358609564818983930, -0.358562889988581160, -0.358516214261771160, -0.358469537638670680, -0.358422860119396280, -0.358376181704064820, -0.358329502392791990, -0.358282822185696290, +-0.358236141082893530, -0.358189459084500390, -0.358142776190633620, -0.358096092401409880, -0.358049407716945930, -0.358002722137358510, -0.357956035662763410, -0.357909348293279030, +-0.357862660029021280, -0.357815970870106910, -0.357769280816652600, -0.357722589868775090, -0.357675898026591110, -0.357629205290217410, -0.357582511659769840, -0.357535817135366810, +-0.357489121717124270, -0.357442425405158910, -0.357395728199587480, -0.357349030100526710, -0.357302331108093400, -0.357255631222403390, -0.357208930443575160, -0.357162228771724600, +-0.357115526206968510, -0.357068822749423530, -0.357022118399206560, -0.356975413156434270, -0.356928707021223420, -0.356881999993690020, -0.356835292073952430, -0.356788583262126590, +-0.356741873558329310, -0.356695162962677340, -0.356648451475287450, -0.356601739096276460, -0.356555025825760260, -0.356508311663857380, -0.356461596610683660, -0.356414880666355960, +-0.356368163830991120, -0.356321446104705790, -0.356274727487616900, -0.356228007979841170, -0.356181287581494590, -0.356134566292695630, -0.356087844113560260, -0.356041121044205270, +-0.355994397084747450, -0.355947672235303660, -0.355900946495990690, -0.355854219866924500, -0.355807492348223620, -0.355760763940004000, -0.355714034642382490, -0.355667304455475900, +-0.355620573379401010, -0.355573841414274730, -0.355527108560213800, -0.355480374817334300, -0.355433640185754680, -0.355386904665590970, -0.355340168256959970, -0.355293430959978560, +-0.355246692774763620, -0.355199953701431930, -0.355153213740100340, -0.355106472890884870, -0.355059731153904050, -0.355012988529273930, -0.354966245017111330, -0.354919500617533080, +-0.354872755330656100, -0.354826009156597230, -0.354779262095473390, -0.354732514147400480, -0.354685765312497180, -0.354639015590879460, -0.354592264982664160, -0.354545513487968260, +-0.354498761106908530, -0.354452007839601900, -0.354405253686164430, -0.354358498646714650, -0.354311742721368620, -0.354264985910243250, -0.354218228213455390, -0.354171469631122000, +-0.354124710163359890, -0.354077949810286060, -0.354031188572016490, -0.353984426448669790, -0.353937663440361980, -0.353890899547210090, -0.353844134769330910, -0.353797369106841340, +-0.353750602559858410, -0.353703835128498120, -0.353657066812879120, -0.353610297613117410, -0.353563527529329960, -0.353516756561633730, -0.353469984710145570, -0.353423211974982440, +-0.353376438356261310, -0.353329663854098200, -0.353282888468611830, -0.353236112199918180, -0.353189335048134270, -0.353142557013377050, -0.353095778095763420, -0.353048998295410370, +-0.353002217612433940, -0.352955436046952840, -0.352908653599083130, -0.352861870268941780, -0.352815086056645740, -0.352768300962312040, -0.352721514986057530, -0.352674728127999270, +-0.352627940388253350, -0.352581151766938440, -0.352534362264170560, -0.352487571880066850, -0.352440780614744210, -0.352393988468319600, -0.352347195440910030, -0.352300401532631650, +-0.352253606743603060, -0.352206811073940470, -0.352160014523760830, -0.352113217093181220, -0.352066418782318540, -0.352019619591289750, -0.351972819520211980, -0.351926018569202140, +-0.351879216738376410, -0.351832414027853540, -0.351785610437749530, -0.351738805968181580, -0.351692000619266590, -0.351645194391121570, -0.351598387283863560, -0.351551579297608770, +-0.351504770432475850, -0.351457960688581040, -0.351411150066041340, -0.351364338564973730, -0.351317526185495280, -0.351270712927722990, -0.351223898791773960, -0.351177083777764300, +-0.351130267885812810, -0.351083451116035620, -0.351036633468549850, -0.350989814943472420, -0.350942995540920510, -0.350896175261011130, -0.350849354103860420, -0.350802532069587170, +-0.350755709158307620, -0.350708885370138780, -0.350662060705197730, -0.350615235163601550, -0.350568408745467240, -0.350521581450911950, -0.350474753280051840, -0.350427924233005670, +-0.350381094309889730, -0.350334263510821030, -0.350287431835916710, -0.350240599285293770, -0.350193765859069310, -0.350146931557359650, -0.350100096380283440, -0.350053260327957030, +-0.350006423400497480, -0.349959585598021870, -0.349912746920647280, -0.349865907368490820, -0.349819066941669590, -0.349772225640299860, -0.349725383464500440, -0.349678540414387510, +-0.349631696490078250, -0.349584851691689740, -0.349538006019339100, -0.349491159473143460, -0.349444312053219070, -0.349397463759684780, -0.349350614592656760, -0.349303764552252260, +-0.349256913638588300, -0.349210061851782110, -0.349163209191950710, -0.349116355659211340, -0.349069501253681020, -0.349022645975476160, -0.348975789824715550, -0.348928932801515380, +-0.348882074905992930, -0.348835216138265290, -0.348788356498449640, -0.348741495986663040, -0.348694634603021910, -0.348647772347644990, -0.348600909220648680, -0.348554045222150060, +-0.348507180352266350, -0.348460314611114650, -0.348413447998812190, -0.348366580515476140, -0.348319712161222760, -0.348272842936171000, -0.348225972840437050, -0.348179101874138200, +-0.348132230037391630, -0.348085357330314430, -0.348038483753023880, -0.347991609305636270, -0.347944733988270470, -0.347897857801042820, -0.347850980744070560, -0.347804102817470820, +-0.347757224021360830, -0.347710344355857790, -0.347663463821078880, -0.347616582417140500, -0.347569700144161440, -0.347522817002258180, -0.347475932991547890, -0.347429048112147700, +-0.347382162364174960, -0.347335275747746750, -0.347288388262979590, -0.347241499909992260, -0.347194610688901170, -0.347147720599823570, -0.347100829642876640, -0.347053937818177670, +-0.347007045125843790, -0.346960151565992360, -0.346913257138739720, -0.346866361844204770, -0.346819465682503880, -0.346772568653754390, -0.346725670758073420, -0.346678771995578280, +-0.346631872366386210, -0.346584971870613660, -0.346538070508379480, -0.346491168279800140, -0.346444265184992830, -0.346397361224074940, -0.346350456397163610, -0.346303550704376130, +-0.346256644145829800, -0.346209736721641790, -0.346162828431928690, -0.346115919276809290, -0.346069009256400110, -0.346022098370818430, -0.345975186620181510, -0.345928274004606570, +-0.345881360524210980, -0.345834446179111190, -0.345787530969426050, -0.345740614895272140, -0.345693697956766690, -0.345646780154026940, -0.345599861487170260, -0.345552941956313970, +-0.345506021561575280, -0.345459100303070750, -0.345412178180919240, -0.345365255195237310, -0.345318331346142260, -0.345271406633751390, -0.345224481058181990, -0.345177554619551350, +-0.345130627317976000, -0.345083699153574950, -0.345036770126464660, -0.344989840236762440, -0.344942909484585560, -0.344895977870051500, -0.344849045393277430, -0.344802112054380770, +-0.344755177853477980, -0.344708242790688070, -0.344661306866127560, -0.344614370079913800, -0.344567432432164140, -0.344520493922995830, -0.344473554552526320, -0.344426614320872130, +-0.344379673228152160, -0.344332731274483050, -0.344285788459982140, -0.344238844784766740, -0.344191900248954190, -0.344144954852661940, -0.344098008596007250, -0.344051061479106750, +-0.344004113502079430, -0.343957164665041780, -0.343910214968111250, -0.343863264411405190, -0.343816312995041010, -0.343769360719136000, -0.343722407583806730, -0.343675453589172290, +-0.343628498735349230, -0.343581543022454920, -0.343534586450606750, -0.343487629019922140, -0.343440670730518430, -0.343393711582513030, -0.343346751576022510, -0.343299790711166010, +-0.343252828988059980, -0.343205866406821880, -0.343158902967569120, -0.343111938670419110, -0.343064973515489260, -0.343018007502896960, -0.342971040632758790, -0.342924072905193890, +-0.342877104320318820, -0.342830134878250980, -0.342783164579107790, -0.342736193423006650, -0.342689221410065080, -0.342642248540400430, -0.342595274814129320, -0.342548300231370890, +-0.342501324792241710, -0.342454348496859180, -0.342407371345340830, -0.342360393337803990, -0.342313414474366200, -0.342266434755144010, -0.342219454180256620, -0.342172472749820540, +-0.342125490463953350, -0.342078507322772400, -0.342031523326395140, -0.341984538474939090, -0.341937552768521720, -0.341890566207259660, -0.341843578791271970, -0.341796590520675350, +-0.341749601395587240, -0.341702611416125120, -0.341655620582406510, -0.341608628894548790, -0.341561636352668730, -0.341514642956885380, -0.341467648707315440, -0.341420653604076360, +-0.341373657647285670, -0.341326660837060760, -0.341279663173519270, -0.341232664656778590, -0.341185665286955490, -0.341138665064168960, -0.341091663988535800, -0.341044662060173530, +-0.340997659279199560, -0.340950655645731460, -0.340903651159886690, -0.340856645821781990, -0.340809639631536490, -0.340762632589266870, -0.340715624695090700, -0.340668615949125450, +-0.340621606351488690, -0.340574595902297880, -0.340527584601670650, -0.340480572449723570, -0.340433559446575880, -0.340386545592344330, -0.340339530887146360, -0.340292515331099610, +-0.340245498924321540, -0.340198481666929790, -0.340151463559041740, -0.340104444600774270, -0.340057424792246490, -0.340010404133575140, -0.339963382624877800, -0.339916360266272030, +-0.339869337057875310, -0.339822312999805250, -0.339775288092179440, -0.339728262335114550, -0.339681235728729880, -0.339634208273142060, -0.339587179968468770, -0.339540150814827520, +-0.339493120812335900, -0.339446089961111420, -0.339399058261270930, -0.339352025712933660, -0.339304992316216250, -0.339257958071236430, -0.339210922978111670, -0.339163887036959600, +-0.339116850247897840, -0.339069812611043910, -0.339022774126514660, -0.338975734794429330, -0.338928694614904600, -0.338881653588058160, -0.338834611714007580, -0.338787568992870490, +-0.338740525424764460, -0.338693481009806290, -0.338646435748115260, -0.338599389639808120, -0.338552342685002510, -0.338505294883816090, -0.338458246236366390, -0.338411196742771040, +-0.338364146403147770, -0.338317095217613270, -0.338270043186286840, -0.338222990309285320, -0.338175936586726340, -0.338128882018727480, -0.338081826605406480, -0.338034770346880840, +-0.337987713243267480, -0.337940655294685700, -0.337893596501252220, -0.337846536863084800, -0.337799476380301000, -0.337752415053018560, -0.337705352881355060, -0.337658289865428120, +-0.337611226005354700, -0.337564161301254000, -0.337517095753242900, -0.337470029361439110, -0.337422962125960180, -0.337375894046923920, -0.337328825124447840, -0.337281755358649740, +-0.337234684749646460, -0.337187613297557250, -0.337140541002499020, -0.337093467864589440, -0.337046393883946190, -0.336999319060686920, -0.336952243394929410, -0.336905166886791230, +-0.336858089536389350, -0.336811011343843060, -0.336763932309269260, -0.336716852432785600, -0.336669771714509850, -0.336622690154559650, -0.336575607753052670, -0.336528524510105900, +-0.336481440425838660, -0.336434355500367770, -0.336387269733811060, -0.336340183126286110, -0.336293095677910710, -0.336246007388802610, -0.336198918259079490, -0.336151828288858200, +-0.336104737478258200, -0.336057645827396330, -0.336010553336390410, -0.335963460005358040, -0.335916365834417030, -0.335869270823685120, -0.335822174973279210, -0.335775078283318710, +-0.335727980753920460, -0.335680882385202270, -0.335633783177281930, -0.335586683130277060, -0.335539582244305520, -0.335492480519485050, -0.335445377955932490, -0.335398274553767360, +-0.335351170313106520, -0.335304065234067750, -0.335256959316768850, -0.335209852561327510, -0.335162744967861580, -0.335115636536487960, -0.335068527267326060, -0.335021417160492830, +-0.334974306216106080, -0.334927194434283540, -0.334880081815143000, -0.334832968358802330, -0.334785854065379140, -0.334738738934990570, -0.334691622967755950, -0.334644506163792270, +-0.334597388523217300, -0.334550270046148900, -0.334503150732704810, -0.334456030583002830, -0.334408909597160800, -0.334361787775295630, -0.334314665117526890, -0.334267541623971430, +-0.334220417294747110, -0.334173292129971770, -0.334126166129763200, -0.334079039294239210, -0.334031911623517640, -0.333984783117715400, -0.333937653776952110, -0.333890523601344640, +-0.333843392591010870, -0.333796260746068610, -0.333749128066635700, -0.333701994552830010, -0.333654860204768420, -0.333607725022570580, -0.333560589006353440, -0.333513452156234790, +-0.333466314472332490, -0.333419175954764450, -0.333372036603648450, -0.333324896419102350, -0.333277755401243210, -0.333230613550190460, -0.333183470866061200, -0.333136327348973300, +-0.333089182999044550, -0.333042037816392860, -0.332994891801136060, -0.332947744953391190, -0.332900597273277810, -0.332853448760912880, -0.332806299416414380, -0.332759149239900130, +-0.332711998231488000, -0.332664846391295900, -0.332617693719441660, -0.332570540216042380, -0.332523385881217550, -0.332476230715084250, -0.332429074717760400, -0.332381917889363830, +-0.332334760230012460, -0.332287601739824250, -0.332240442418916150, -0.332193282267407800, -0.332146121285416260, -0.332098959473059400, -0.332051796830455100, -0.332004633357721350, +-0.331957469054976030, -0.331910303922337000, -0.331863137959921390, -0.331815971167848780, -0.331768803546236220, -0.331721635095201690, -0.331674465814863040, -0.331627295705338280, +-0.331580124766745200, -0.331532952999201880, -0.331485780402825280, -0.331438606977735080, -0.331391432724048420, -0.331344257641883130, -0.331297081731357190, -0.331249904992588550, +-0.331202727425695180, -0.331155549030794920, -0.331108369808005010, -0.331061189757445030, -0.331014008879232050, -0.330966827173484020, -0.330919644640318920, -0.330872461279854760, +-0.330825277092209440, -0.330778092077500030, -0.330730906235846280, -0.330683719567365250, -0.330636532072174920, -0.330589343750393280, -0.330542154602138260, -0.330494964627527870, +-0.330447773826680060, -0.330400582199711970, -0.330353389746743280, -0.330306196467891060, -0.330259002363273440, -0.330211807433008260, -0.330164611677213560, -0.330117415096007340, +-0.330070217689506730, -0.330023019457831410, -0.329975820401098570, -0.329928620519426170, -0.329881419812932230, -0.329834218281734700, -0.329787015925951670, -0.329739812745701080, +-0.329692608741100120, -0.329645403912268490, -0.329598198259323350, -0.329550991782382670, -0.329503784481564590, -0.329456576356987000, -0.329409367408767970, -0.329362157637024640, +-0.329314947041876800, -0.329267735623441640, -0.329220523381837050, -0.329173310317181220, -0.329126096429592120, -0.329078881719187700, -0.329031666186086150, -0.328984449830404590, +-0.328937232652262710, -0.328890014651777750, -0.328842795829067780, -0.328795576184250820, -0.328748355717444870, -0.328701134428768080, -0.328653912318338460, -0.328606689386273190, +-0.328559465632692060, -0.328512241057712260, -0.328465015661451860, -0.328417789444028880, -0.328370562405561510, -0.328323334546167630, -0.328276105865965510, -0.328228876365072250, +-0.328181646043607610, -0.328134414901688880, -0.328087182939434120, -0.328039950156961410, -0.327992716554388770, -0.327945482131834390, -0.327898246889415430, -0.327851010827251770, +-0.327803773945460510, -0.327756536244159850, -0.327709297723467800, -0.327662058383502540, -0.327614818224382150, -0.327567577246224710, -0.327520335449147440, -0.327473092833270200, +-0.327425849398710280, -0.327378605145585640, -0.327331360074014590, -0.327284114184115070, -0.327236867476005280, -0.327189619949802500, -0.327142371605626480, -0.327095122443594570, +-0.327047872463824830, -0.327000621666435400, -0.326953370051544400, -0.326906117619270020, -0.326858864369730330, -0.326811610303042620, -0.326764355419326750, -0.326717099718700000, +-0.326669843201280450, -0.326622585867186340, -0.326575327716535750, -0.326528068749446840, -0.326480808966036930, -0.326433548366425800, -0.326386286950730850, -0.326339024719070170, +-0.326291761671561880, -0.326244497808324260, -0.326197233129475350, -0.326149967635133380, -0.326102701325415630, -0.326055434200441970, -0.326008166260329750, -0.325960897505197080, +-0.325913627935162150, -0.325866357550343210, -0.325819086350858320, -0.325771814336824890, -0.325724541508362770, -0.325677267865589310, -0.325629993408622700, -0.325582718137581050, +-0.325535442052582670, -0.325488165153745620, -0.325440887441188210, -0.325393608915028550, -0.325346329575384060, -0.325299049422374530, -0.325251768456117420, -0.325204486676730850, +-0.325157204084333130, -0.325109920679042370, -0.325062636460976770, -0.325015351430253780, -0.324968065586993260, -0.324920778931312550, -0.324873491463329890, -0.324826203183163520, +-0.324778914090931630, -0.324731624186752440, -0.324684333470744210, -0.324637041943024280, -0.324589749603712620, -0.324542456452926560, -0.324495162490784420, -0.324447867717404300, +-0.324400572132904570, -0.324353275737403360, -0.324305978531018170, -0.324258680513868800, -0.324211381686072770, -0.324164082047748330, -0.324116781599013640, -0.324069480339987000, +-0.324022178270786660, -0.323974875391530860, -0.323927571702337050, -0.323880267203325130, -0.323832961894612580, -0.323785655776317570, -0.323738348848558450, -0.323691041111453470, +-0.323643732565120910, -0.323596423209678130, -0.323549113045245140, -0.323501802071939400, -0.323454490289879100, -0.323407177699182650, -0.323359864299968210, -0.323312550092354100, +-0.323265235076458660, -0.323217919252399230, -0.323170602620295900, -0.323123285180266010, -0.323075966932427960, -0.323028647876899940, -0.322981328013800310, -0.322934007343247400, +-0.322886685865358620, -0.322839363580253950, -0.322792040488050880, -0.322744716588867660, -0.322697391882822700, -0.322650066370034290, -0.322602740050620670, -0.322555412924700190, +-0.322508084992391200, -0.322460756253811150, -0.322413426709080080, -0.322366096358315420, -0.322318765201635490, -0.322271433239158690, -0.322224100471003310, -0.322176766897287640, +-0.322129432518129200, -0.322082097333648070, -0.322034761343961700, -0.321987424549188380, -0.321940086949446540, -0.321892748544854450, -0.321845409335530520, -0.321798069321593050, +-0.321750728503159560, -0.321703386880350110, -0.321656044453282160, -0.321608701222074130, -0.321561357186844310, -0.321514012347711150, -0.321466666704792960, -0.321419320258207190, +-0.321371973008074020, -0.321324624954510920, -0.321277276097636230, -0.321229926437568370, -0.321182575974425680, -0.321135224708326560, -0.321087872639389370, -0.321040519767731680, +-0.320993166093473500, -0.320945811616732410, -0.320898456337626810, -0.320851100256275060, -0.320803743372795550, -0.320756385687306690, -0.320709027199926000, -0.320661667910773610, +-0.320614307819967080, -0.320566946927624720, -0.320519585233865030, -0.320472222738806380, -0.320424859442567160, -0.320377495345265770, -0.320330130447019860, -0.320282764747949420, +-0.320235398248172100, -0.320188030947806230, -0.320140662846970350, -0.320093293945782730, -0.320045924244361960, -0.319998553742825490, -0.319951182441293500, -0.319903810339883520, +-0.319856437438714060, -0.319809063737903470, -0.319761689237570260, -0.319714313937832780, -0.319666937838809560, -0.319619560940618940, -0.319572183243378600, -0.319524804747208680, +-0.319477425452226740, -0.319430045358551180, -0.319382664466300540, -0.319335282775593250, -0.319287900286547740, -0.319240516999281690, -0.319193132913915100, -0.319145748030565720, +-0.319098362349352020, -0.319050975870392330, -0.319003588593805230, -0.318956200519709190, -0.318908811648222600, -0.318861421979463160, -0.318814031513551030, -0.318766640250603810, +-0.318719248190739990, -0.318671855334078050, -0.318624461680736440, -0.318577067230833680, -0.318529671984487450, -0.318482275941817830, -0.318434879102942550, -0.318387481467980070, +-0.318340083037048920, -0.318292683810267540, -0.318245283787754460, -0.318197882969628140, -0.318150481356006260, -0.318103078947009070, -0.318055675742754170, -0.318008271743360050, +-0.317960866948945260, -0.317913461359628340, -0.317866054975527720, -0.317818647796761110, -0.317771239823448790, -0.317723831055708340, -0.317676421493658270, -0.317629011137417210, +-0.317581599987103560, -0.317534188042835950, -0.317486775304732850, -0.317439361772911990, -0.317391947447493550, -0.317344532328595270, -0.317297116416335620, -0.317249699710833220, +-0.317202282212206590, -0.317154863920574180, -0.317107444836053800, -0.317060024958765670, -0.317012604288827440, -0.316965182826357720, -0.316917760571475080, -0.316870337524298000, +-0.316822913684945080, -0.316775489053534860, -0.316728063630185960, -0.316680637415016010, -0.316633210408145350, -0.316585782609691610, -0.316538354019773480, -0.316490924638509420, +-0.316443494466018050, -0.316396063502418000, -0.316348631747826900, -0.316301199202365050, -0.316253765866150230, -0.316206331739300960, -0.316158896821935930, -0.316111461114173600, +-0.316064024616132640, -0.316016587327931590, -0.315969149249688270, -0.315921710381522890, -0.315874270723553230, -0.315826830275897920, -0.315779389038675530, -0.315731947012004630, +-0.315684504196003910, -0.315637060590791050, -0.315589616196486460, -0.315542171013207750, -0.315494725041073620, -0.315447278280202690, -0.315399830730713590, -0.315352382392724890, +-0.315304933266355230, -0.315257483351722380, -0.315210032648946700, -0.315162581158145880, -0.315115128879438660, -0.315067675812943590, -0.315020221958779380, -0.314972767317064580, +-0.314925311887917000, -0.314877855671457040, -0.314830398667802380, -0.314782940877071760, -0.314735482299383750, -0.314688022934857090, -0.314640562783610360, -0.314593101845762170, +-0.314545640121430440, -0.314498177610735450, -0.314450714313794950, -0.314403250230727740, -0.314355785361652370, -0.314308319706687540, -0.314260853265951930, -0.314213386039563340, +-0.314165918027642100, -0.314118449230306070, -0.314070979647673940, -0.314023509279864330, -0.313976038126995980, -0.313928566189187520, -0.313881093466557680, -0.313833619959224210, +-0.313786145667307560, -0.313738670590925530, -0.313691194730196850, -0.313643718085240160, -0.313596240656174200, -0.313548762443117580, -0.313501283446189110, -0.313453803665506570, +-0.313406323101190380, -0.313358841753358370, -0.313311359622129250, -0.313263876707621740, -0.313216393009954520, -0.313168908529246340, -0.313121423265615870, -0.313073937219181030, +-0.313026450390062160, -0.312978962778377170, -0.312931474384244790, -0.312883985207783710, -0.312836495249112670, -0.312789004508350400, -0.312741512985614760, -0.312694020681026200, +-0.312646527594702570, -0.312599033726762620, -0.312551539077325080, -0.312504043646508690, -0.312456547434432240, -0.312409050441214360, -0.312361552666973070, -0.312314054111828670, +-0.312266554775899210, -0.312219054659303330, -0.312171553762159770, -0.312124052084587380, -0.312076549626704840, -0.312029046388630100, -0.311981542370483590, -0.311934037572383190, +-0.311886531994447770, -0.311839025636795940, -0.311791518499546560, -0.311744010582818420, -0.311696501886730200, -0.311648992411399930, -0.311601482156948000, -0.311553971123492370, +-0.311506459311151840, -0.311458946720045150, -0.311411433350291090, -0.311363919202008400, -0.311316404275315100, -0.311268888570331640, -0.311221372087175980, -0.311173854825966880, +-0.311126336786823110, -0.311078817969863530, -0.311031298375206880, -0.310983778002972000, -0.310936256853276800, -0.310888734926241860, -0.310841212221985020, -0.310793688740625180, +-0.310746164482281150, -0.310698639447071660, -0.310651113635115610, -0.310603587046531740, -0.310556059681438120, -0.310508531539955110, -0.310461002622200830, -0.310413472928294020, +-0.310365942458353530, -0.310318411212498200, -0.310270879190846840, -0.310223346393518280, -0.310175812820630500, -0.310128278472304010, -0.310080743348656870, -0.310033207449807830, +-0.309985670775875800, -0.309938133326979610, -0.309890595103238020, -0.309843056104769140, -0.309795516331693500, -0.309747975784129050, -0.309700434462194640, -0.309652892366009120, +-0.309605349495691410, -0.309557805851360280, -0.309510261433134700, -0.309462716241132580, -0.309415170275474550, -0.309367623536278560, -0.309320076023663510, -0.309272527737748270, +-0.309224978678651730, -0.309177428846492740, -0.309129878241389320, -0.309082326863462100, -0.309034774712828970, -0.308987221789608970, -0.308939668093920930, -0.308892113625883650, +-0.308844558385616140, -0.308797002373237210, -0.308749445588864970, -0.308701888032619940, -0.308654329704620150, -0.308606770604984590, -0.308559210733832080, -0.308511650091281560, +-0.308464088677451900, -0.308416526492461150, -0.308368963536429950, -0.308321399809476370, -0.308273835311719260, -0.308226270043277570, -0.308178704004270170, -0.308131137194816050, +-0.308083569615034080, -0.308036001265042330, -0.307988432144961410, -0.307940862254909460, -0.307893291595005340, -0.307845720165367990, -0.307798147966116320, -0.307750574997369240, +-0.307703001259245770, -0.307655426751863970, -0.307607851475344420, -0.307560275429805240, -0.307512698615365400, -0.307465121032143800, -0.307417542680259390, -0.307369963559831150, +-0.307322383670977970, -0.307274803013817990, -0.307227221588471880, -0.307179639395057660, -0.307132056433694340, -0.307084472704500950, -0.307036888207596340, -0.306989302943099510, +-0.306941716911128540, -0.306894130111804160, -0.306846542545244460, -0.306798954211568390, -0.306751365110894960, -0.306703775243343080, -0.306656184609031820, -0.306608593208080040, +-0.306561001040605960, -0.306513408106730220, -0.306465814406570950, -0.306418219940247150, -0.306370624707877790, -0.306323028709581890, -0.306275431945478400, -0.306227834415685460, +-0.306180236120323800, -0.306132637059511600, -0.306085037233367770, -0.306037436642011330, -0.305989835285561280, -0.305942233164136710, -0.305894630277856520, -0.305847026626838880, +-0.305799422211204600, -0.305751817031071680, -0.305704211086559260, -0.305656604377786300, -0.305608996904871810, -0.305561388667934860, -0.305513779667093590, -0.305466169902468720, +-0.305418559374178440, -0.305370948082341720, -0.305323336027077620, -0.305275723208505210, -0.305228109626743520, -0.305180495281911550, -0.305132880174127430, -0.305085264303512020, +-0.305037647670183430, -0.304990030274260690, -0.304942412115862930, -0.304894793195109090, -0.304847173512118320, -0.304799553067009570, -0.304751931859901130, -0.304704309890913680, +-0.304656687160165420, -0.304609063667775510, -0.304561439413862930, -0.304513814398546690, -0.304466188621945970, -0.304418562084179780, -0.304370934785366310, -0.304323306725626410, +-0.304275677905078150, -0.304228048323840760, -0.304180417982033210, -0.304132786879774690, -0.304085155017184140, -0.304037522394379870, -0.303989889011482610, -0.303942254868610650, +-0.303894619965883070, -0.303846984303418940, -0.303799347881337330, -0.303751710699757370, -0.303704072758798130, -0.303656434058577840, -0.303608794599217360, -0.303561154380834810, +-0.303513513403549430, -0.303465871667480290, -0.303418229172746410, -0.303370585919467030, -0.303322941907760270, -0.303275297137747040, -0.303227651609545570, -0.303180005323274940, +-0.303132358279054330, -0.303084710477002810, -0.303037061917239500, -0.302989412599883550, -0.302941762525053230, -0.302894111692869340, -0.302846460103450180, -0.302798807756914870, +-0.302751154653382480, -0.302703500792972260, -0.302655846175803320, -0.302608190801993860, -0.302560534671664830, -0.302512877784934410, -0.302465220141921790, -0.302417561742746140, +-0.302369902587526610, -0.302322242676382300, -0.302274582009432360, -0.302226920586795180, -0.302179258408591500, -0.302131595474939670, -0.302083931785958880, -0.302036267341768250, +-0.301988602142486910, -0.301940936188234090, -0.301893269479128980, -0.301845602015289820, -0.301797933796837450, -0.301750264823890280, -0.301702595096567490, -0.301654924614988160, +-0.301607253379271520, -0.301559581389536810, -0.301511908645903100, -0.301464235148488750, -0.301416560897414700, -0.301368885892799200, -0.301321210134761540, -0.301273533623420800, +-0.301225856358896260, -0.301178178341307110, -0.301130499570771590, -0.301082820047410720, -0.301035139771342830, -0.300987458742687010, -0.300939776961562600, -0.300892094428088730, +-0.300844411142384640, -0.300796727104569510, -0.300749042314761680, -0.300701356773082130, -0.300653670479649190, -0.300605983434582060, -0.300558295638000020, -0.300510607090022200, +-0.300462917790767840, -0.300415227740355340, -0.300367536938905670, -0.300319845386537110, -0.300272153083368960, -0.300224460029520410, -0.300176766225110750, -0.300129071670259150, +-0.300081376365084860, -0.300033680309706290, -0.299985983504244320, -0.299938285948817440, -0.299890587643544870, -0.299842888588545800, -0.299795188783939510, -0.299747488229845260, +-0.299699786926381440, -0.299652084873668960, -0.299604382071826330, -0.299556678520972730, -0.299508974221227410, -0.299461269172709650, -0.299413563375538700, -0.299365856829833910, +-0.299318149535713560, -0.299270441493298730, -0.299222732702707770, -0.299175023164060030, -0.299127312877474680, -0.299079601843071090, -0.299031890060968420, -0.298984177531286090, +-0.298936464254142440, -0.298888750229658500, -0.298841035457952650, -0.298793319939144260, -0.298745603673352570, -0.298697886660696800, -0.298650168901296360, -0.298602450395270500, +-0.298554731142737670, -0.298507011143818890, -0.298459290398632500, -0.298411568907297970, -0.298363846669934480, -0.298316123686661380, -0.298268399957597960, -0.298220675482862680, +-0.298172950262576560, -0.298125224296858060, -0.298077497585826520, -0.298029770129601250, -0.297982041928301580, -0.297934312982046760, -0.297886583290956130, -0.297838852855148220, +-0.297791121674744030, -0.297743389749862030, -0.297695657080621570, -0.297647923667141990, -0.297600189509542590, -0.297552454607942660, -0.297504718962460780, -0.297456982573217950, +-0.297409245440332700, -0.297361507563924320, -0.297313768944112160, -0.297266029581015560, -0.297218289474753870, -0.297170548625446510, -0.297122807033211920, -0.297075064698171130, +-0.297027321620442710, -0.296979577800145940, -0.296931833237400300, -0.296884087932325010, -0.296836341885039550, -0.296788595095662360, -0.296740847564314510, -0.296693099291114590, +-0.296645350276181890, -0.296597600519635800, -0.296549850021595730, -0.296502098782181030, -0.296454346801511110, -0.296406594079704430, -0.296358840616882170, -0.296311086413162780, +-0.296263331468665680, -0.296215575783510210, -0.296167819357815830, -0.296120062191701890, -0.296072304285286970, -0.296024545638692130, -0.295976786252035940, -0.295929026125437760, +-0.295881265259017030, -0.295833503652893130, -0.295785741307185490, -0.295737978222013480, -0.295690214397496490, -0.295642449833753150, -0.295594684530904540, -0.295546918489069220, +-0.295499151708366600, -0.295451384188916090, -0.295403615930837140, -0.295355846934249100, -0.295308077199270660, -0.295260306726022830, -0.295212535514624230, -0.295164763565194330, +-0.295116990877852480, -0.295069217452718190, -0.295021443289910870, -0.294973668389549860, -0.294925892751753900, -0.294878116376644070, -0.294830339264338880, -0.294782561414957900, +-0.294734782828620480, -0.294687003505446130, -0.294639223445554270, -0.294591442649063510, -0.294543661116094980, -0.294495878846767310, -0.294448095841199910, -0.294400312099512280, +-0.294352527621823900, -0.294304742408254160, -0.294256956458922580, -0.294209169773947790, -0.294161382353450910, -0.294113594197550510, -0.294065805306366220, -0.294018015680017340, +-0.293970225318623490, -0.293922434222304020, -0.293874642391177670, -0.293826849825365500, -0.293779056524986260, -0.293731262490159350, -0.293683467721004290, -0.293635672217640530, +-0.293587875980187650, -0.293540079008765050, -0.293492281303491360, -0.293444482864487880, -0.293396683691873160, -0.293348883785766790, -0.293301083146288170, -0.293253281773556810, +-0.293205479667692280, -0.293157676828813160, -0.293109873257040740, -0.293062068952493650, -0.293014263915291340, -0.292966458145553440, -0.292918651643399310, -0.292870844408948620, +-0.292823036442320770, -0.292775227743635350, -0.292727418313011020, -0.292679608150568980, -0.292631797256427960, -0.292583985630707370, -0.292536173273526880, -0.292488360185005960, +-0.292440546365264060, -0.292392731814420050, -0.292344916532594980, -0.292297100519907650, -0.292249283776477580, -0.292201466302424270, -0.292153648097867310, -0.292105829162926270, +-0.292058009497720590, -0.292010189102369090, -0.291962367976992930, -0.291914546121710860, -0.291866723536642450, -0.291818900221907210, -0.291771076177624710, -0.291723251403914530, +-0.291675425900895350, -0.291627599668688510, -0.291579772707412640, -0.291531945017187320, -0.291484116598132170, -0.291436287450366700, -0.291388457574010500, -0.291340626969183230, +-0.291292795636003470, -0.291244963574592560, -0.291197130785069310, -0.291149297267553180, -0.291101463022163830, -0.291053628049020850, -0.291005792348243750, -0.290957955919951330, +-0.290910118764264870, -0.290862280881303110, -0.290814442271185690, -0.290766602934032110, -0.290718762869962070, -0.290670922079095060, -0.290623080561550780, -0.290575238317447970, +-0.290527395346907910, -0.290479551650049350, -0.290431707226991910, -0.290383862077855210, -0.290336016202758840, -0.290288169601822410, -0.290240322275164770, -0.290192474222907120, +-0.290144625445168280, -0.290096775942067950, -0.290048925713725590, -0.290001074760260990, -0.289953223081793670, -0.289905370678443240, -0.289857517550329460, -0.289809663697571000, +-0.289761809120289260, -0.289713953818602990, -0.289666097792631800, -0.289618241042495390, -0.289570383568313380, -0.289522525370205400, -0.289474666448290290, -0.289426806802689340, +-0.289378946433521360, -0.289331085340906010, -0.289283223524963000, -0.289235360985811870, -0.289187497723572380, -0.289139633738364100, -0.289091769030305920, -0.289043903599519150, +-0.288996037446122620, -0.288948170570236030, -0.288900302971979000, -0.288852434651471200, -0.288804565608832330, -0.288756695844181180, -0.288708825357639140, -0.288660954149325020, +-0.288613082219358550, -0.288565209567859360, -0.288517336194947180, -0.288469462100741590, -0.288421587285362380, -0.288373711748928400, -0.288325835491560930, -0.288277958513378900, +-0.288230080814501970, -0.288182202395049820, -0.288134323255142160, -0.288086443394898690, -0.288038562814438290, -0.287990681513882300, -0.287942799493349670, -0.287894916752959970, +-0.287847033292833010, -0.287799149113088460, -0.287751264213846060, -0.287703378595225430, -0.287655492257345600, -0.287607605200327800, -0.287559717424291040, -0.287511828929355010, +-0.287463939715639330, -0.287416049783263850, -0.287368159132348260, -0.287320267763011390, -0.287272375675374720, -0.287224482869557100, -0.287176589345678300, -0.287128695103857970, +-0.287080800144215940, -0.287032904466871910, -0.286985008071945660, -0.286937110959555990, -0.286889213129824350, -0.286841314582869770, -0.286793415318811860, -0.286745515337770370, +-0.286697614639865150, -0.286649713225215870, -0.286601811093942340, -0.286553908246163390, -0.286506004682000550, -0.286458100401572660, -0.286410195404999570, -0.286362289692400960, +-0.286314383263896630, -0.286266476119606320, -0.286218568259649860, -0.286170659684146120, -0.286122750393216550, -0.286074840386980170, -0.286026929665556600, -0.285979018229065800, +-0.285931106077627390, -0.285883193211361240, -0.285835279630386240, -0.285787365334823910, -0.285739450324793140, -0.285691534600413740, -0.285643618161805560, -0.285595701009088270, +-0.285547783142381770, -0.285499864561805820, -0.285451945267479300, -0.285404025259523800, -0.285356104538058260, -0.285308183103202440, -0.285260260955076170, -0.285212338093799260, +-0.285164414519491480, -0.285116490232271810, -0.285068565232261760, -0.285020639519580340, -0.284972713094347300, -0.284924785956682470, -0.284876858106705650, -0.284828929544536700, +-0.284781000270295460, -0.284733070284100830, -0.284685139586074390, -0.284637208176335090, -0.284589276055002780, -0.284541343222197320, -0.284493409678038430, -0.284445475422646090, +-0.284397540456139130, -0.284349604778639240, -0.284301668390265270, -0.284253731291137180, -0.284205793481374760, -0.284157854961097860, -0.284109915730426320, -0.284061975789479950, +-0.284014035138377810, -0.283966093777241470, -0.283918151706189840, -0.283870208925342870, -0.283822265434820360, -0.283774321234742220, -0.283726376325228240, -0.283678430706398310, +-0.283630484378371520, -0.283582537341269310, -0.283534589595210770, -0.283486641140315740, -0.283438691976704130, -0.283390742104495770, -0.283342791523810590, -0.283294840234768420, +-0.283246888237488280, -0.283198935532091740, -0.283150982118697940, -0.283103027997426650, -0.283055073168397790, -0.283007117631731200, -0.282959161387546900, -0.282911204435963790, +-0.282863246777103510, -0.282815288411085160, -0.282767329338028560, -0.282719369558053660, -0.282671409071280300, -0.282623447877828450, -0.282575485977817950, -0.282527523371367880, +-0.282479560058599920, -0.282431596039632970, -0.282383631314587100, -0.282335665883582110, -0.282287699746738010, -0.282239732904174590, -0.282191765356011040, -0.282143797102368920, +-0.282095828143367260, -0.282047858479126060, -0.281999888109765230, -0.281951917035404680, -0.281903945256164300, -0.281855972772164120, -0.281807999583523090, -0.281760025690362960, +-0.281712051092802730, -0.281664075790962420, -0.281616099784961880, -0.281568123074921070, -0.281520145660960010, -0.281472167543197700, -0.281424188721755840, -0.281376209196753490, +-0.281328228968310610, -0.281280248036547220, -0.281232266401583160, -0.281184284063538400, -0.281136301022533010, -0.281088317278685940, -0.281040332832118990, -0.280992347682951170, +-0.280944361831302500, -0.280896375277292890, -0.280848388021042390, -0.280800400062670870, -0.280752411402298400, -0.280704422040044030, -0.280656431976029460, -0.280608441210373820, +-0.280560449743197050, -0.280512457574619180, -0.280464464704760160, -0.280416471133739960, -0.280368476861678590, -0.280320481888695180, -0.280272486214911410, -0.280224489840446460, +-0.280176492765420280, -0.280128494989952850, -0.280080496514164170, -0.280032497338174260, -0.279984497462102240, -0.279936496886069860, -0.279888495610196190, -0.279840493634601340, +-0.279792490959405230, -0.279744487584727860, -0.279696483510689320, -0.279648478737409560, -0.279600473265007750, -0.279552467093605590, -0.279504460223322260, -0.279456452654277820, +-0.279408444386592240, -0.279360435420385520, -0.279312425755777750, -0.279264415392887990, -0.279216404331838140, -0.279168392572747230, -0.279120380115735310, -0.279072366960922470, +-0.279024353108428710, -0.278976338558374060, -0.278928323310878580, -0.278880307366061450, -0.278832290724044420, -0.278784273384946600, -0.278736255348888130, -0.278688236615989020, +-0.278640217186369330, -0.278592197060149090, -0.278544176237447480, -0.278496154718386290, -0.278448132503084760, -0.278400109591662840, -0.278352085984240660, -0.278304061680938300, +-0.278256036681875760, -0.278208010987173130, -0.278159984596949630, -0.278111957511327000, -0.278063929730424490, -0.278015901254362150, -0.277967872083260070, -0.277919842217238310, +-0.277871811656416940, -0.277823780400916040, -0.277775748450854840, -0.277727715806355080, -0.277679682467536050, -0.277631648434517870, -0.277583613707420520, -0.277535578286364160, +-0.277487542171468820, -0.277439505362854670, -0.277391467860640840, -0.277343429664949240, -0.277295390775899040, -0.277247351193610380, -0.277199310918203380, -0.277151269949798050, +-0.277103228288514580, -0.277055185934472150, -0.277007142887792600, -0.276959099148595230, -0.276911054717000120, -0.276863009593127320, -0.276814963777097020, -0.276766917269029360, +-0.276718870069044330, -0.276670822177261360, -0.276622773593802110, -0.276574724318785940, -0.276526674352332970, -0.276478623694563330, -0.276430572345597150, -0.276382520305554490, +-0.276334467574554710, -0.276286414152719590, -0.276238360040168440, -0.276190305237021370, -0.276142249743398570, -0.276094193559420110, -0.276046136685206220, -0.275998079120876980, +-0.275950020866551630, -0.275901961922352110, -0.275853902288397730, -0.275805841964808560, -0.275757780951704780, -0.275709719249206560, -0.275661656857434050, -0.275613593776506520, +-0.275565530006545880, -0.275517465547671370, -0.275469400400003230, -0.275421334563661580, -0.275373268038766610, -0.275325200825438490, -0.275277132923797350, -0.275229064333962490, +-0.275180995056055870, -0.275132925090196710, -0.275084854436505270, -0.275036783095101710, -0.274988711066106170, -0.274940638349638830, -0.274892564945819930, -0.274844490854768750, +-0.274796416076607210, -0.274748340611454640, -0.274700264459431190, -0.274652187620657070, -0.274604110095252540, -0.274556031883337660, -0.274507952985032780, -0.274459873400457080, +-0.274411793129732630, -0.274363712172978670, -0.274315630530315380, -0.274267548201863050, -0.274219465187741870, -0.274171381488072020, -0.274123297102972840, -0.274075212032566300, +-0.274027126276971680, -0.273979039836309280, -0.273930952710699280, -0.273882864900261920, -0.273834776405117330, -0.273786687225385850, -0.273738597361186830, -0.273690506812642120, +-0.273642415579871120, -0.273594323662994130, -0.273546231062131330, -0.273498137777402950, -0.273450043808929180, -0.273401949156829530, -0.273353853821225790, -0.273305757802237430, +-0.273257661099984670, -0.273209563714587770, -0.273161465646167000, -0.273113366894842500, -0.273065267460734620, -0.273017167343962700, -0.272969066544648750, -0.272920965062912080, +-0.272872862898873030, -0.272824760052651830, -0.272776656524368720, -0.272728552314143950, -0.272680447422096960, -0.272632341848349720, -0.272584235593021640, -0.272536128656232950, +-0.272488021038103880, -0.272439912738754840, -0.272391803758305960, -0.272343694096877640, -0.272295583754589180, -0.272247472731562630, -0.272199361027917360, -0.272151248643773770, +-0.272103135579251980, -0.272055021834472390, -0.272006907409555240, -0.271958792304620830, -0.271910676519788560, -0.271862560055180450, -0.271814442910916000, -0.271766325087115400, +-0.271718206583898950, -0.271670087401387040, -0.271621967539699860, -0.271573846998957810, -0.271525725779280300, -0.271477603880789290, -0.271429481303604280, -0.271381358047845580, +-0.271333234113633470, -0.271285109501088250, -0.271236984210330320, -0.271188858241479040, -0.271140731594656460, -0.271092604269982050, -0.271044476267576160, -0.270996347587559030, +-0.270948218230051110, -0.270900088195172580, -0.270851957483043860, -0.270803826093784340, -0.270755694027516150, -0.270707561284358740, -0.270659427864432420, -0.270611293767857470, +-0.270563158994754360, -0.270515023545243320, -0.270466887419443860, -0.270418750617478050, -0.270370613139465370, -0.270322474985526200, -0.270274336155780780, -0.270226196650349530, +-0.270178056469352780, -0.270129915612910890, -0.270081774081143370, -0.270033631874172290, -0.269985488992117110, -0.269937345435098170, -0.269889201203235900, -0.269841056296650670, +-0.269792910715462740, -0.269744764459791670, -0.269696617529759600, -0.269648469925485970, -0.269600321647091130, -0.269552172694695500, -0.269504023068419470, -0.269455872768383340, +-0.269407721794707570, -0.269359570147511610, -0.269311417826917590, -0.269263264833045020, -0.269215111166014320, -0.269166956825945770, -0.269118801812959880, -0.269070646127176960, +-0.269022489768716620, -0.268974332737700880, -0.268926175034249320, -0.268878016658482270, -0.268829857610520250, -0.268781697890483560, -0.268733537498492600, -0.268685376434667830, +-0.268637214699129600, -0.268589052291997480, -0.268540889213393590, -0.268492725463437440, -0.268444561042249560, -0.268396395949950180, -0.268348230186659880, -0.268300063752498990, +-0.268251896647587080, -0.268203728872046300, -0.268155560425996140, -0.268107391309557130, -0.268059221522849670, -0.268011051065994100, -0.267962879939110890, -0.267914708142320550, +-0.267866535675742530, -0.267818362539499030, -0.267770188733709670, -0.267722014258494790, -0.267673839113974850, -0.267625663300270380, -0.267577486817501710, -0.267529309665788470, +-0.267481131845252850, -0.267432953356014360, -0.267384774198193510, -0.267336594371910710, -0.267288413877286410, -0.267240232714441080, -0.267192050883495180, -0.267143868384568330, +-0.267095685217782650, -0.267047501383257720, -0.266999316881114060, -0.266951131711472110, -0.266902945874452290, -0.266854759370175170, -0.266806572198760250, -0.266758384360329780, +-0.266710195855003330, -0.266662006682901410, -0.266613816844144480, -0.266565626338853000, -0.266517435167147430, -0.266469243329148290, -0.266421050824975190, -0.266372857654750330, +-0.266324663818593320, -0.266276469316624630, -0.266228274148964770, -0.266180078315734260, -0.266131881817053490, -0.266083684653042220, -0.266035486823822550, -0.265987288329514180, +-0.265939089170237620, -0.265890889346113320, -0.265842688857261760, -0.265794487703803540, -0.265746285885859020, -0.265698083403548890, -0.265649880256992600, -0.265601676446312500, +-0.265553471971628210, -0.265505266833060250, -0.265457061030729140, -0.265408854564755330, -0.265360647435259440, -0.265312439642361010, -0.265264231186182360, -0.265216022066843190, +-0.265167812284463900, -0.265119601839165110, -0.265071390731067280, -0.265023178960290980, -0.264974966526956790, -0.264926753431184270, -0.264878539673095710, -0.264830325252810860, +-0.264782110170450170, -0.264733894426134210, -0.264685678019983490, -0.264637460952118600, -0.264589243222659200, -0.264541024831727530, -0.264492805779443290, -0.264444586065927080, +-0.264396365691299370, -0.264348144655680740, -0.264299922959191750, -0.264251700601952970, -0.264203477584084080, -0.264155253905707380, -0.264107029566942490, -0.264058804567910090, +-0.264010578908730590, -0.263962352589524720, -0.263914125610412940, -0.263865897971515000, -0.263817669672953170, -0.263769440714847150, -0.263721211097317550, -0.263672980820484900, +-0.263624749884469820, -0.263576518289392820, -0.263528286035374590, -0.263480053122534750, -0.263431819550995650, -0.263383585320876970, -0.263335350432299390, -0.263287114885383370, +-0.263238878680249590, -0.263190641817018620, -0.263142404295810150, -0.263094166116746580, -0.263045927279947580, -0.262997687785533730, -0.262949447633625650, -0.262901206824344040, +-0.262852965357809330, -0.262804723234142220, -0.262756480453463340, -0.262708237015892350, -0.262659992921551680, -0.262611748170560990, -0.262563502763040910, -0.262515256699112130, +-0.262467009978895160, -0.262418762602510680, -0.262370514570078480, -0.262322265881720810, -0.262274016537557440, -0.262225766537709070, -0.262177515882296320, -0.262129264571439700, +-0.262081012605260010, -0.262032759983877710, -0.261984506707412690, -0.261936252775987250, -0.261887998189721190, -0.261839742948735130, -0.261791487053149700, -0.261743230503085570, +-0.261694973298663370, -0.261646715440002840, -0.261598456927226390, -0.261550197760453850, -0.261501937939805750, -0.261453677465402820, -0.261405416337365750, -0.261357154555815100, +-0.261308892120871550, -0.261260629032654900, -0.261212365291287550, -0.261164100896889300, -0.261115835849580810, -0.261067570149482730, -0.261019303796715670, -0.260971036791400430, +-0.260922769133656700, -0.260874500823606860, -0.260826231861370830, -0.260777962247069230, -0.260729691980822690, -0.260681421062751940, -0.260633149492977610, -0.260584877271620440, +-0.260536604398800160, -0.260488330874639300, -0.260440056699257570, -0.260391781872775730, -0.260343506395314390, -0.260295230266994300, -0.260246953487936140, -0.260198676058259750, +-0.260150397978087530, -0.260102119247539290, -0.260053839866735800, -0.260005559835797650, -0.259957279154845620, -0.259908997824000400, -0.259860715843382720, -0.259812433213113200, +-0.259764149933311760, -0.259715866004100790, -0.259667581425600150, -0.259619296197930620, -0.259571010321212770, -0.259522723795567460, -0.259474436621115300, -0.259426148797976150, +-0.259377860326272580, -0.259329571206124270, -0.259281281437652110, -0.259232991020976690, -0.259184699956218790, -0.259136408243499210, -0.259088115882938560, -0.259039822874656770, +-0.258991529218776270, -0.258943234915416930, -0.258894939964699530, -0.258846644366744760, -0.258798348121673400, -0.258750051229606150, -0.258701753690662950, -0.258653455504966210, +-0.258605156672635840, -0.258556857193792570, -0.258508557068557130, -0.258460256297050330, -0.258411954879392840, -0.258363652815705500, -0.258315350106108180, -0.258267046750723320, +-0.258218742749670880, -0.258170438103071550, -0.258122132811046120, -0.258073826873715380, -0.258025520291200070, -0.257977213063620090, -0.257928905191097960, -0.257880596673753570, +-0.257832287511707670, -0.257783977705081050, -0.257735667253994440, -0.257687356158568750, -0.257639044418924600, -0.257590732035182010, -0.257542419007463440, -0.257494105335888850, +-0.257445791020578960, -0.257397476061654640, -0.257349160459236560, -0.257300844213445620, -0.257252527324401740, -0.257204209792227360, -0.257155891617042440, -0.257107572798967840, +-0.257059253338124290, -0.257010933234632590, -0.256962612488613570, -0.256914291100187990, -0.256865969069475840, -0.256817646396599650, -0.256769323081679320, -0.256720999124835700, +-0.256672674526189580, -0.256624349285861750, -0.256576023403973060, -0.256527696880644360, -0.256479369715995500, -0.256431041910149090, -0.256382713463225050, -0.256334384375344280, +-0.256286054646627510, -0.256237724277195660, -0.256189393267169440, -0.256141061616669720, -0.256092729325816560, -0.256044396394732370, -0.255996062823537210, -0.255947728612351880, +-0.255899393761297280, -0.255851058270494150, -0.255802722140063390, -0.255754385370124960, -0.255706047960801430, -0.255657709912212760, -0.255609371224479850, -0.255561031897723500, +-0.255512691932064550, -0.255464351327623910, -0.255416010084522360, -0.255367668202879930, -0.255319325682819180, -0.255270982524460120, -0.255222638727923610, -0.255174294293330490, +-0.255125949220801670, -0.255077603510457940, -0.255029257162419360, -0.254980910176808520, -0.254932562553745360, -0.254884214293350840, -0.254835865395745760, -0.254787515861051030, +-0.254739165689387480, -0.254690814880876030, -0.254642463435636680, -0.254594111353792010, -0.254545758635462140, -0.254497405280767810, -0.254449051289829970, -0.254400696662769490, +-0.254352341399707300, -0.254303985500763390, -0.254255628966060350, -0.254207271795718280, -0.254158913989858020, -0.254110555548600460, -0.254062196472066510, -0.254013836760377090, +-0.253965476413653020, -0.253917115432014450, -0.253868753815583940, -0.253820391564481550, -0.253772028678828200, -0.253723665158744780, -0.253675301004352150, -0.253626936215771310, +-0.253578570793123130, -0.253530204736527600, -0.253481838046107470, -0.253433470721982750, -0.253385102764274340, -0.253336734173103210, -0.253288364948590190, -0.253239995090856260, +-0.253191624600022370, -0.253143253476208530, -0.253094881719537480, -0.253046509330129180, -0.252998136308104580, -0.252949762653584710, -0.252901388366690350, -0.252853013447542570, +-0.252804637896261400, -0.252756261712969500, -0.252707884897786890, -0.252659507450834600, -0.252611129372233570, -0.252562750662104710, -0.252514371320568920, -0.252465991347747280, +-0.252417610743759730, -0.252369229508729090, -0.252320847642775290, -0.252272465146019420, -0.252224082018582370, -0.252175698260585170, -0.252127313872148650, -0.252078928853393000, +-0.252030543204440900, -0.251982156925412480, -0.251933770016428640, -0.251885382477610330, -0.251836994309078630, -0.251788605510954390, -0.251740216083358670, -0.251691826026411550, +-0.251643435340235700, -0.251595044024951310, -0.251546652080679280, -0.251498259507540620, -0.251449866305656300, -0.251401472475147330, -0.251353078016133820, -0.251304682928738480, +-0.251256287213081410, -0.251207890869283630, -0.251159493897466110, -0.251111096297749860, -0.251062698070255890, -0.251014299215105210, -0.250965899732417840, -0.250917499622316630, +-0.250869098884921650, -0.250820697520353960, -0.250772295528734480, -0.250723892910184270, -0.250675489664824340, -0.250627085792775710, -0.250578681294158500, -0.250530276169095400, +-0.250481870417706640, -0.250433464040113190, -0.250385057036436100, -0.250336649406796340, -0.250288241151314980, -0.250239832270113040, -0.250191422763310630, -0.250143012631030500, +-0.250094601873392890, -0.250046190490518740, -0.249997778482529130, -0.249949365849545050, -0.249900952591687600, -0.249852538709076870, -0.249804124201835680, -0.249755709070084150, +-0.249707293313943370, -0.249658876933534330, -0.249610459928978120, -0.249562042300395780, -0.249513624047908310, -0.249465205171635900, -0.249416785671701360, -0.249368365548224860, +-0.249319944801327440, -0.249271523431130150, -0.249223101437754090, -0.249174678821320220, -0.249126255581948840, -0.249077831719762640, -0.249029407234881900, -0.248980982127427610, +-0.248932556397520880, -0.248884130045282760, -0.248835703070834330, -0.248787275474296600, -0.248738847255789850, -0.248690418415436850, -0.248641988953357790, -0.248593558869673770, +-0.248545128164505830, -0.248496696837975100, -0.248448264890202610, -0.248399832321308610, -0.248351399131415850, -0.248302965320644640, -0.248254530889115980, -0.248206095836951020, +-0.248157660164270820, -0.248109223871196470, -0.248060786957849030, -0.248012349424348800, -0.247963911270818540, -0.247915472497378500, -0.247867033104149790, -0.247818593091253480, +-0.247770152458810680, -0.247721711206942530, -0.247673269335770080, -0.247624826845413620, -0.247576383735995910, -0.247527940007637280, -0.247479495660458790, -0.247431050694581570, +-0.247382605110126720, -0.247334158907215330, -0.247285712085968560, -0.247237264646506670, -0.247188816588952450, -0.247140367913426200, -0.247091918620049030, -0.247043468708942060, +-0.246995018180226430, -0.246946567034023230, -0.246898115270452770, -0.246849662889637890, -0.246801209891698850, -0.246752756276756770, -0.246704302044932820, -0.246655847196348120, +-0.246607391731123780, -0.246558935649380940, -0.246510478951239950, -0.246462021636823600, -0.246413563706252200, -0.246365105159646880, -0.246316645997128800, -0.246268186218819130, +-0.246219725824838980, -0.246171264815308630, -0.246122803190350990, -0.246074340950086370, -0.246025878094635860, -0.245977414624120680, -0.245928950538661960, -0.245880485838380850, +-0.245832020523398560, -0.245783554593835330, -0.245735088049814060, -0.245686620891455100, -0.245638153118879570, -0.245589684732208660, -0.245541215731563540, -0.245492746117065400, +-0.245444275888834520, -0.245395805046993790, -0.245347333591663580, -0.245298861522965010, -0.245250388841019300, -0.245201915545947610, -0.245153441637871140, -0.245104967116911070, +-0.245056491983187710, -0.245008016236824000, -0.244959539877940220, -0.244911062906657620, -0.244862585323097350, -0.244814107127380610, -0.244765628319628610, -0.244717148899962540, +-0.244668668868502720, -0.244620188225372100, -0.244571706970691030, -0.244523225104580660, -0.244474742627162260, -0.244426259538556980, -0.244377775838886060, -0.244329291528270680, +-0.244280806606831240, -0.244232321074690640, -0.244183834931969210, -0.244135348178788240, -0.244086860815268870, -0.244038372841532350, -0.243989884257699880, -0.243941395063891870, +-0.243892905260231220, -0.243844414846838300, -0.243795923823834360, -0.243747432191340600, -0.243698939949478280, -0.243650447098368580, -0.243601953638132780, -0.243553459568891210, +-0.243504964890766870, -0.243456469603880120, -0.243407973708352210, -0.243359477204304340, -0.243310980091857780, -0.243262482371133790, -0.243213984042252720, -0.243165485105337560, +-0.243116985560508670, -0.243068485407887340, -0.243019984647594780, -0.242971483279752270, -0.242922981304481030, -0.242874478721902350, -0.242825975532136610, -0.242777471735306780, +-0.242728967331533290, -0.242680462320937370, -0.242631956703640320, -0.242583450479763350, -0.242534943649427760, -0.242486436212753950, -0.242437928169864920, -0.242389419520881080, +-0.242340910265923660, -0.242292400405113990, -0.242243889938573290, -0.242195378866422890, -0.242146867188784030, -0.242098354905777160, -0.242049842017525250, -0.242001328524148740, +-0.241952814425768910, -0.241904299722507040, -0.241855784414484410, -0.241807268501822330, -0.241758751984642080, -0.241710234863064090, -0.241661717137211380, -0.241613198807204360, +-0.241564679873164350, -0.241516160335212640, -0.241467640193470560, -0.241419119448059330, -0.241370598099099470, -0.241322076146713970, -0.241273553591023260, -0.241225030432148680, +-0.241176506670211540, -0.241127982305333140, -0.241079457337634750, -0.241030931767237720, -0.240982405594262540, -0.240933878818832160, -0.240885351441067100, -0.240836823461088670, +-0.240788294879018180, -0.240739765694976960, -0.240691235909086310, -0.240642705521467580, -0.240594174532241220, -0.240545642941530270, -0.240497110749455230, -0.240448577956137420, +-0.240400044561698140, -0.240351510566258780, -0.240302975969940630, -0.240254440772864180, -0.240205904975152480, -0.240157368576926020, -0.240108831578306150, -0.240060293979414200, +-0.240011755780371480, -0.239963216981299410, -0.239914677582319300, -0.239866137583551600, -0.239817596985119450, -0.239769055787143300, -0.239720513989744500, -0.239671971593044430, +-0.239623428597164430, -0.239574885002225850, -0.239526340808349200, -0.239477796015657550, -0.239429250624271420, -0.239380704634312190, -0.239332158045901160, -0.239283610859159750, +-0.239235063074209300, -0.239186514691171190, -0.239137965710165960, -0.239089416131316650, -0.239040865954743830, -0.238992315180568820, -0.238943763808913020, -0.238895211839897810, +-0.238846659273644600, -0.238798106110274720, -0.238749552349908720, -0.238700997992669690, -0.238652443038678160, -0.238603887488055530, -0.238555331340923190, -0.238506774597402520, +-0.238458217257614900, -0.238409659321680900, -0.238361100789723580, -0.238312541661863550, -0.238263981938222120, -0.238215421618920790, -0.238166860704080860, -0.238118299193823800, +-0.238069737088270980, -0.238021174387542940, -0.237972611091762880, -0.237924047201051230, -0.237875482715529500, -0.237826917635319050, -0.237778351960541310, -0.237729785691317700, +-0.237681218827769600, -0.237632651370017630, -0.237584083318184870, -0.237535514672391900, -0.237486945432760140, -0.237438375599411030, -0.237389805172465970, -0.237341234152046390, +-0.237292662538272890, -0.237244090331268590, -0.237195517531154030, -0.237146944138050710, -0.237098370152080020, -0.237049795573363390, -0.237001220402022290, -0.236952644638178140, +-0.236904068281951510, -0.236855491333465590, -0.236806913792840910, -0.236758335660198970, -0.236709756935661180, -0.236661177619348990, -0.236612597711383880, -0.236564017211886380, +-0.236515436120979720, -0.236466854438784490, -0.236418272165422080, -0.236369689301014010, -0.236321105845681720, -0.236272521799546660, -0.236223937162730320, -0.236175351935353240, +-0.236126766117538660, -0.236078179709407170, -0.236029592711080230, -0.235981005122679300, -0.235932416944325850, -0.235883828176141370, -0.235835238818247310, -0.235786648870764310, +-0.235738058333815530, -0.235689467207521620, -0.235640875492004020, -0.235592283187384260, -0.235543690293783780, -0.235495096811324050, -0.235446502740125740, -0.235397908080312050, +-0.235349312832003550, -0.235300716995321820, -0.235252120570388250, -0.235203523557324410, -0.235154925956251730, -0.235106327767291760, -0.235057728990565100, -0.235009129626195000, +-0.234960529674302030, -0.234911929135007770, -0.234863328008433680, -0.234814726294701290, -0.234766123993932070, -0.234717521106247520, -0.234668917631768340, -0.234620313570617690, +-0.234571708922916290, -0.234523103688785590, -0.234474497868347150, -0.234425891461722460, -0.234377284469033050, -0.234328676890399550, -0.234280068725945230, -0.234231459975790730, +-0.234182850640057590, -0.234134240718867320, -0.234085630212341440, -0.234037019120601510, -0.233988407443769000, -0.233939795181964620, -0.233891182335311640, -0.233842568903930680, +-0.233793954887943300, -0.233745340287471020, -0.233696725102635420, -0.233648109333557980, -0.233599492980359420, -0.233550876043162990, -0.233502258522089360, -0.233453640417260080, +-0.233405021728796710, -0.233356402456820790, -0.233307782601453850, -0.233259162162817470, -0.233210541141032320, -0.233161919536221670, -0.233113297348506220, -0.233064674578007530, +-0.233016051224847170, -0.232967427289146660, -0.232918802771027580, -0.232870177670611490, -0.232821551988019130, -0.232772925723373710, -0.232724298876795990, -0.232675671448407530, +-0.232627043438329910, -0.232578414846684650, -0.232529785673593360, -0.232481155919176760, -0.232432525583558120, -0.232383894666858160, -0.232335263169198470, -0.232286631090700610, +-0.232237998431486180, -0.232189365191676770, -0.232140731371393930, -0.232092096970758420, -0.232043461989893510, -0.231994826428919940, -0.231946190287959320, -0.231897553567133210, +-0.231848916266563230, -0.231800278386370960, -0.231751639926677990, -0.231703000887605040, -0.231654361269275470, -0.231605721071809990, -0.231557080295330200, -0.231508438939957730, +-0.231459797005814150, -0.231411154493021080, -0.231362511401699280, -0.231313867731972040, -0.231265223483960140, -0.231216578657785170, -0.231167933253568770, -0.231119287271432520, +-0.231070640711498050, -0.231021993573887000, -0.230973345858720090, -0.230924697566120690, -0.230876048696209530, -0.230827399249108250, -0.230778749224938490, -0.230730098623821820, +-0.230681447445879930, -0.230632795691233570, -0.230584143360006070, -0.230535490452318220, -0.230486836968291610, -0.230438182908047930, -0.230389528271708800, -0.230340873059395850, +-0.230292217271230730, -0.230243560907334170, -0.230194903967829600, -0.230146246452837770, -0.230097588362480290, -0.230048929696878870, -0.230000270456155120, -0.229951610640430680, +-0.229902950249827240, -0.229854289284465520, -0.229805627744468970, -0.229756965629958370, -0.229708302941055320, -0.229659639677881530, -0.229610975840558650, -0.229562311429208300, +-0.229513646443951340, -0.229464980884911100, -0.229416314752208420, -0.229367648045964960, -0.229318980766302360, -0.229270312913342320, -0.229221644487206500, -0.229172975488016570, +-0.229124305915893330, -0.229075635770960210, -0.229026965053338000, -0.228978293763148350, -0.228929621900512970, -0.228880949465553570, -0.228832276458391770, -0.228783602879149260, +-0.228734928727946900, -0.228686254004908080, -0.228637578710153640, -0.228588902843805230, -0.228540226405984560, -0.228491549396813350, -0.228442871816413260, -0.228394193664905130, +-0.228345514942412370, -0.228296835649055810, -0.228248155784957160, -0.228199475350238160, -0.228150794345020450, -0.228102112769425740, -0.228053430623575750, -0.228004747907591340, +-0.227956064621595900, -0.227907380765710320, -0.227858696340056290, -0.227810011344755510, -0.227761325779929690, -0.227712639645700570, -0.227663952942188970, -0.227615265669518370, +-0.227566577827809590, -0.227517889417184400, -0.227469200437764450, -0.227420510889671520, -0.227371820773027310, -0.227323130087953520, -0.227274438834571070, -0.227225747013003380, +-0.227177054623371320, -0.227128361665796640, -0.227079668140401040, -0.227030974047306270, -0.226982279386634070, -0.226933584158505310, -0.226884888363043440, -0.226836192000369360, +-0.226787495070604810, -0.226738797573871500, -0.226690099510291200, -0.226641400879985660, -0.226592701683076630, -0.226544001919684960, -0.226495301589934170, -0.226446600693945090, +-0.226397899231839560, -0.226349197203739250, -0.226300494609765950, -0.226251791450041400, -0.226203087724687390, -0.226154383433824800, -0.226105678577577100, -0.226056973156065210, +-0.226008267169410890, -0.225959560617735920, -0.225910853501162020, -0.225862145819811010, -0.225813437573804620, -0.225764728763263760, -0.225716019388311960, -0.225667309449070120, +-0.225618598945660000, -0.225569887878203370, -0.225521176246822020, -0.225472464051637730, -0.225423751292771420, -0.225375037970346610, -0.225326324084484190, -0.225277609635305960, +-0.225228894622933720, -0.225180179047489240, -0.225131462909094300, -0.225082746207870720, -0.225034028943939400, -0.224985311117423870, -0.224936592728445070, -0.224887873777124770, +-0.224839154263584810, -0.224790434187946950, -0.224741713550333010, -0.224692992350863900, -0.224644270589663210, -0.224595548266851820, -0.224546825382551550, -0.224498101936884240, +-0.224449377929971690, -0.224400653361935650, -0.224351928232898010, -0.224303202542979670, -0.224254476292304190, -0.224205749480992530, -0.224157022109166490, -0.224108294176947890, +-0.224059565684458560, -0.224010836631820310, -0.223962107019154120, -0.223913376846583520, -0.223864646114229460, -0.223815914822213800, -0.223767182970658340, -0.223718450559684950, +-0.223669717589415420, -0.223620984059971580, -0.223572249971474430, -0.223523515324047520, -0.223474780117811830, -0.223426044352889180, -0.223377308029401420, -0.223328571147470400, +-0.223279833707217930, -0.223231095708765900, -0.223182357152235250, -0.223133618037749560, -0.223084878365429840, -0.223036138135397940, -0.222987397347775670, -0.222938656002684920, +-0.222889914100247530, -0.222841171640585340, -0.222792428623819370, -0.222743685050073190, -0.222694940919467820, -0.222646196232125060, -0.222597450988166830, -0.222548705187714970, +-0.222499958830891350, -0.222451211917816970, -0.222402464448615420, -0.222353716423407700, -0.222304967842315710, -0.222256218705461280, -0.222207469012966310, -0.222158718764952660, +-0.222109967961542230, -0.222061216602856020, -0.222012464689017610, -0.221963712220148050, -0.221914959196369220, -0.221866205617802960, -0.221817451484571220, -0.221768696796795840, +-0.221719941554597840, -0.221671185758100880, -0.221622429407425940, -0.221573672502694910, -0.221524915044029710, -0.221476157031552240, -0.221427398465384370, -0.221378639345648000, +-0.221329879672464150, -0.221281119445956490, -0.221232358666246020, -0.221183597333454660, -0.221134835447704290, -0.221086073009116840, -0.221037310017814210, -0.220988546473917440, +-0.220939782377550190, -0.220891017728833460, -0.220842252527889190, -0.220793486774839290, -0.220744720469805670, -0.220695953612910250, -0.220647186204274950, -0.220598418244020820, +-0.220549649732271510, -0.220500880669148050, -0.220452111054772410, -0.220403340889266500, -0.220354570172752230, -0.220305798905351540, -0.220257027087186360, -0.220208254718377740, +-0.220159481799049340, -0.220110708329322220, -0.220061934309318360, -0.220013159739159660, -0.219964384618968060, -0.219915608948865500, -0.219866832728973890, -0.219818055959414370, +-0.219769278640310540, -0.219720500771783540, -0.219671722353955300, -0.219622943386947710, -0.219574163870882800, -0.219525383805882460, -0.219476603192067800, -0.219427822029562510, +-0.219379040318487650, -0.219330258058965190, -0.219281475251117100, -0.219232691895065310, -0.219183907990931790, -0.219135123538838520, -0.219086338538906550, -0.219037552991259600, +-0.218988766896018760, -0.218939980253306020, -0.218891193063243340, -0.218842405325952670, -0.218793617041555980, -0.218744828210174380, -0.218696038831931560, -0.218647248906948670, +-0.218598458435347640, -0.218549667417250490, -0.218500875852779160, -0.218452083742055630, -0.218403291085201900, -0.218354497882339070, -0.218305704133590850, -0.218256909839078390, +-0.218208114998923650, -0.218159319613248640, -0.218110523682175290, -0.218061727205825670, -0.218012930184320830, -0.217964132617784550, -0.217915334506337960, -0.217866535850103020, +-0.217817736649201730, -0.217768936903756090, -0.217720136613888120, -0.217671335779719810, -0.217622534401372300, -0.217573732478969300, -0.217524930012631980, -0.217476127002482340, +-0.217427323448642380, -0.217378519351234120, -0.217329714710379540, -0.217280909526200690, -0.217232103798818720, -0.217183297528357330, -0.217134490714937680, -0.217085683358681840, +-0.217036875459711760, -0.216988067018149520, -0.216939258034117090, -0.216890448507736530, -0.216841638439128960, -0.216792827828418190, -0.216744016675725320, -0.216695204981172450, +-0.216646392744881540, -0.216597579966974650, -0.216548766647573800, -0.216499952786800180, -0.216451138384777560, -0.216402323441627080, -0.216353507957470770, -0.216304691932430710, +-0.216255875366628940, -0.216207058260187430, -0.216158240613228330, -0.216109422425872720, -0.216060603698244450, -0.216011784430464650, -0.215962964622655410, -0.215914144274938740, +-0.215865323387436720, -0.215816501960271380, -0.215767679993563940, -0.215718857487438130, -0.215670034442015210, -0.215621210857417200, -0.215572386733766160, -0.215523562071184140, +-0.215474736869793240, -0.215425911129715460, -0.215377084851072070, -0.215328258033986840, -0.215279430678580940, -0.215230602784976470, -0.215181774353295500, -0.215132945383660070, +-0.215084115876192310, -0.215035285831013360, -0.214986455248247080, -0.214937624128014680, -0.214888792470438210, -0.214839960275639730, -0.214791127543741380, -0.214742294274865210, +-0.214693460469133290, -0.214644626126666850, -0.214595791247589730, -0.214546955832023130, -0.214498119880089130, -0.214449283391909830, -0.214400446367607330, -0.214351608807303700, +-0.214302770711121050, -0.214253932079180640, -0.214205092911606220, -0.214156253208519110, -0.214107412970041350, -0.214058572196295040, -0.214009730887402330, -0.213960889043485260, +-0.213912046664665120, -0.213863203751065710, -0.213814360302808320, -0.213765516320015030, -0.213716671802807930, -0.213667826751309160, -0.213618981165640820, -0.213570135045925010, +-0.213521288392283020, -0.213472441204838690, -0.213423593483713230, -0.213374745229028770, -0.213325896440907490, -0.213277047119471430, -0.213228197264842790, -0.213179346877143630, +-0.213130495956495250, -0.213081644503021470, -0.213032792516843620, -0.212983939998083770, -0.212935086946864060, -0.212886233363306640, -0.212837379247533650, -0.212788524599666320, +-0.212739669419828550, -0.212690813708141640, -0.212641957464727670, -0.212593100689708800, -0.212544243383207180, -0.212495385545344970, -0.212446527176244290, -0.212397668276026410, +-0.212348808844815250, -0.212299948882732040, -0.212251088389898980, -0.212202227366438180, -0.212153365812471820, -0.212104503728122060, -0.212055641113510160, -0.212006777968760020, +-0.211957914293992940, -0.211909050089331090, -0.211860185354896590, -0.211811320090811630, -0.211762454297198390, -0.211713587974179000, -0.211664721121874760, -0.211615853740409620, +-0.211566985829904820, -0.211518117390482540, -0.211469248422265000, -0.211420378925374320, -0.211371508899932700, -0.211322638346062320, -0.211273767263884440, -0.211224895653523040, +-0.211176023515099400, -0.211127150848735710, -0.211078277654554110, -0.211029403932676830, -0.210980529683226060, -0.210931654906323070, -0.210882779602091840, -0.210833903770653640, +-0.210785027412130680, -0.210736150526645160, -0.210687273114319260, -0.210638395175275190, -0.210589516709635110, -0.210540637717520380, -0.210491758199054910, -0.210442878154360080, +-0.210393997583558030, -0.210345116486770980, -0.210296234864121160, -0.210247352715730720, -0.210198470041721930, -0.210149586842216100, -0.210100703117337140, -0.210051818867206450, +-0.210002934091946200, -0.209954048791678620, -0.209905162966525920, -0.209856276616610300, -0.209807389742053120, -0.209758502342978350, -0.209709614419507330, -0.209660725971762250, +-0.209611836999865380, -0.209562947503938890, -0.209514057484105040, -0.209465166940486060, -0.209416275873203300, -0.209367384282380690, -0.209318492168139640, -0.209269599530602340, +-0.209220706369891070, -0.209171812686128030, -0.209122918479435430, -0.209074023749934700, -0.209025128497749760, -0.208976232723002000, -0.208927336425813650, -0.208878439606306980, +-0.208829542264604210, -0.208780644400827550, -0.208731746015099310, -0.208682847107540840, -0.208633947678276120, -0.208585047727426500, -0.208536147255114300, -0.208487246261461700, +-0.208438344746591010, -0.208389442710624430, -0.208340540153684280, -0.208291637075891880, -0.208242733477371270, -0.208193829358243820, -0.208144924718631800, -0.208096019558657470, +-0.208047113878443100, -0.207998207678110920, -0.207949300957782380, -0.207900393717581460, -0.207851485957629530, -0.207802577678048880, -0.207753668878961820, -0.207704759560490560, +-0.207655849722757410, -0.207606939365884650, -0.207558028489993660, -0.207509117095208450, -0.207460205181650480, -0.207411292749441980, -0.207362379798705250, -0.207313466329562570, +-0.207264552342136230, -0.207215637836548480, -0.207166722812920810, -0.207117807271377190, -0.207068891212039030, -0.207019974635028660, -0.206971057540468350, -0.206922139928480380, +-0.206873221799187100, -0.206824303152709860, -0.206775383989172750, -0.206726464308697180, -0.206677544111405430, -0.206628623397419830, -0.206579702166862690, -0.206530780419856290, +-0.206481858156522920, -0.206432935376984040, -0.206384012081363700, -0.206335088269783310, -0.206286163942365240, -0.206237239099231720, -0.206188313740505110, -0.206139387866307730, +-0.206090461476760990, -0.206041534571988980, -0.205992607152113150, -0.205943679217255790, -0.205894750767539210, -0.205845821803085780, -0.205796892324017790, -0.205747962330457560, +-0.205699031822526580, -0.205650100800348870, -0.205601169264045900, -0.205552237213740020, -0.205503304649553550, -0.205454371571608810, -0.205405437980028140, -0.205356503874933870, +-0.205307569256447470, -0.205258634124693030, -0.205209698479792010, -0.205160762321866720, -0.205111825651039550, -0.205062888467432810, -0.205013950771168820, -0.204965012562369130, +-0.204916073841157760, -0.204867134607656180, -0.204818194861986800, -0.204769254604271920, -0.204720313834633900, -0.204671372553195090, -0.204622430760077860, -0.204573488455403660, +-0.204524545639296650, -0.204475602311878250, -0.204426658473270850, -0.204377714123596790, -0.204328769262978470, -0.204279823891538200, -0.204230878009398380, -0.204181931616680500, +-0.204132984713508660, -0.204084037300004350, -0.204035089376289970, -0.203986140942487850, -0.203937191998720370, -0.203888242545109930, -0.203839292581777990, -0.203790342108848720, +-0.203741391126443570, -0.203692439634684950, -0.203643487633695220, -0.203594535123596790, -0.203545582104512010, -0.203496628576563280, -0.203447674539872110, -0.203398719994562600, +-0.203349764940756320, -0.203300809378575610, -0.203251853308142910, -0.203202896729580560, -0.203153939643010960, -0.203104982048555620, -0.203056023946338730, -0.203007065336481750, +-0.202958106219107120, -0.202909146594337230, -0.202860186462294480, -0.202811225823101270, -0.202762264676879970, -0.202713303023752150, -0.202664340863841940, -0.202615378197270880, +-0.202566415024161370, -0.202517451344635830, -0.202468487158816660, -0.202419522466826260, -0.202370557268787080, -0.202321591564820630, -0.202272625355051060, -0.202223658639599930, +-0.202174691418589650, -0.202125723692142630, -0.202076755460381310, -0.202027786723428110, -0.201978817481404590, -0.201929847734434870, -0.201880877482640530, -0.201831906726144010, +-0.201782935465067730, -0.201733963699534090, -0.201684991429665530, -0.201636018655584530, -0.201587045377412590, -0.201538071595273930, -0.201489097309290040, -0.201440122519583460, +-0.201391147226276550, -0.201342171429491760, -0.201293195129351570, -0.201244218325978390, -0.201195241019493760, -0.201146263210021940, -0.201097284897684440, -0.201048306082603740, +-0.200999326764902260, -0.200950346944702460, -0.200901366622126790, -0.200852385797296860, -0.200803404470336820, -0.200754422641368280, -0.200705440310513660, -0.200656457477895460, +-0.200607474143636110, -0.200558490307858080, -0.200509505970683820, -0.200460521132234920, -0.200411535792635570, -0.200362549952007420, -0.200313563610472870, -0.200264576768154400, +-0.200215589425174510, -0.200166601581655640, -0.200117613237719400, -0.200068624393489990, -0.200019635049089040, -0.199970645204638970, -0.199921654860262310, -0.199872664016081500, +-0.199823672672219040, -0.199774680828797400, -0.199725688485938190, -0.199676695643765610, -0.199627702302401320, -0.199578708461967760, -0.199529714122587410, -0.199480719284382800, +-0.199431723947476380, -0.199382728111990650, -0.199333731778047250, -0.199284734945770370, -0.199235737615281660, -0.199186739786703590, -0.199137741460158700, -0.199088742635769420, +-0.199039743313658310, -0.198990743493946960, -0.198941743176759640, -0.198892742362217930, -0.198843741050444390, -0.198794739241561490, -0.198745736935691750, -0.198696734132957660, +-0.198647730833481720, -0.198598727037385600, -0.198549722744793540, -0.198500717955827160, -0.198451712670608990, -0.198402706889261540, -0.198353700611907320, -0.198304693838668860, +-0.198255686569668630, -0.198206678805028350, -0.198157670544872240, -0.198108661789321930, -0.198059652538500000, -0.198010642792528920, -0.197961632551531210, -0.197912621815629460, +-0.197863610584945250, -0.197814598859602900, -0.197765586639724070, -0.197716573925431240, -0.197667560716846990, -0.197618547014093840, -0.197569532817294340, -0.197520518126570980, +-0.197471502942045460, -0.197422487263842070, -0.197373471092082450, -0.197324454426889150, -0.197275437268384730, -0.197226419616691680, -0.197177401471932610, -0.197128382834229180, +-0.197079363703705630, -0.197030344080483700, -0.196981323964685870, -0.196932303356434770, -0.196883282255852890, -0.196834260663062810, -0.196785238578187080, -0.196736216001347390, +-0.196687192932668010, -0.196638169372270660, -0.196589145320277910, -0.196540120776812270, -0.196491095741996330, -0.196442070215952640, -0.196393044198802940, -0.196344017690671470, +-0.196294990691679970, -0.196245963201950980, -0.196196935221607080, -0.196147906750770870, -0.196098877789564860, -0.196049848338111680, -0.196000818396532990, -0.195951787964953130, +-0.195902757043493800, -0.195853725632277600, -0.195804693731427060, -0.195755661341064780, -0.195706628461313370, -0.195657595092295380, -0.195608561234132530, -0.195559526886949160, +-0.195510492050866960, -0.195461456726008510, -0.195412420912496440, -0.195363384610453330, -0.195314347820001730, -0.195265310541264280, -0.195216272774362680, -0.195167234519421280, +-0.195118195776561780, -0.195069156545906790, -0.195020116827578920, -0.194971076621700740, -0.194922035928394880, -0.194872994747783050, -0.194823953079989620, -0.194774910925136300, +-0.194725868283345700, -0.194676825154740440, -0.194627781539443100, -0.194578737437576310, -0.194529692849262690, -0.194480647774623950, -0.194431602213784470, -0.194382556166865980, +-0.194333509633991120, -0.194284462615282450, -0.194235415110862650, -0.194186367120854330, -0.194137318645379170, -0.194088269684561610, -0.194039220238523380, -0.193990170307387110, +-0.193941119891275410, -0.193892068990310890, -0.193843017604616200, -0.193793965734313980, -0.193744913379525980, -0.193695860540376550, -0.193646807216987490, -0.193597753409481380, +-0.193548699117980920, -0.193499644342608690, -0.193450589083487360, -0.193401533340738670, -0.193352477114487050, -0.193303420404854210, -0.193254363211962820, -0.193205305535935540, +-0.193156247376894990, -0.193107188734963800, -0.193058129610264670, -0.193009070002919340, -0.192960009913052180, -0.192910949340785010, -0.192861888286240480, -0.192812826749541200, +-0.192763764730809890, -0.192714702230169150, -0.192665639247741630, -0.192616575783649190, -0.192567511838016150, -0.192518447410964330, -0.192469382502616420, -0.192420317113095010, +-0.192371251242522830, -0.192322184891022540, -0.192273118058716750, -0.192224050745727320, -0.192174982952178640, -0.192125914678192480, -0.192076845923891540, -0.192027776689398490, +-0.191978706974836020, -0.191929636780326730, -0.191880566105992520, -0.191831494951957750, -0.191782423318344250, -0.191733351205274680, -0.191684278612871740, -0.191635205541258120, +-0.191586131990556460, -0.191537057960889490, -0.191487983452379000, -0.191438908465149410, -0.191389832999322550, -0.191340757055021130, -0.191291680632367790, -0.191242603731485240, +-0.191193526352496200, -0.191144448495522480, -0.191095370160688500, -0.191046291348116100, -0.190997212057927970, -0.190948132290246820, -0.190899052045195330, -0.190849971322896220, +-0.190800890123472150, -0.190751808447045010, -0.190702726293739220, -0.190653643663676600, -0.190604560556979890, -0.190555476973771760, -0.190506392914174950, -0.190457308378312150, +-0.190408223366305220, -0.190359137878278600, -0.190310051914354130, -0.190260965474654510, -0.190211878559302490, -0.190162791168420800, -0.190113703302132120, -0.190064614960559150, +-0.190015526143823800, -0.189966436852050500, -0.189917347085361120, -0.189868256843878370, -0.189819166127724980, -0.189770074937023660, -0.189720983271897150, -0.189671891132468180, +-0.189622798518858630, -0.189573705431192950, -0.189524611869592990, -0.189475517834181510, -0.189426423325081250, -0.189377328342414910, -0.189328232886305260, -0.189279136956875040, +-0.189230040554246080, -0.189180943678542910, -0.189131846329887390, -0.189082748508402230, -0.189033650214210200, -0.188984551447434060, -0.188935452208196550, -0.188886352496619500, +-0.188837252312827470, -0.188788151656942290, -0.188739050529086770, -0.188689948929383570, -0.188640846857955540, -0.188591744314925370, -0.188542641300415840, -0.188493537814548860, +-0.188444433857448880, -0.188395329429237810, -0.188346224530038440, -0.188297119159973490, -0.188248013319165770, -0.188198907007738000, -0.188149800225812070, -0.188100692973512530, +-0.188051585250961270, -0.188002477058281050, -0.187953368395594620, -0.187904259263024760, -0.187855149660694280, -0.187806039588725880, -0.187756929047241560, -0.187707818036365770, +-0.187658706556220410, -0.187609594606928330, -0.187560482188612240, -0.187511369301394950, -0.187462255945399230, -0.187413142120747000, -0.187364027827562780, -0.187314913065968510, +-0.187265797836086930, -0.187216682138040880, -0.187167565971953110, -0.187118449337946440, -0.187069332236143640, -0.187020214666666630, -0.186971096629639950, -0.186921978125185550, +-0.186872859153426190, -0.186823739714484680, -0.186774619808483840, -0.186725499435546420, -0.186676378595795280, -0.186627257289352310, -0.186578135516342060, -0.186529013276886480, +-0.186479890571108360, -0.186430767399130530, -0.186381643761075770, -0.186332519657066900, -0.186283395087226740, -0.186234270051677230, -0.186185144550542890, -0.186136018583945680, +-0.186086892152008470, -0.186037765254853990, -0.185988637892605110, -0.185939510065384640, -0.185890381773314520, -0.185841253016519330, -0.185792123795120970, -0.185742994109242330, +-0.185693863959006190, -0.185644733344535410, -0.185595602265952790, -0.185546470723381150, -0.185497338716942490, -0.185448206246761340, -0.185399073312959660, -0.185349939915660320, +-0.185300806054986110, -0.185251671731059890, -0.185202536944004510, -0.185153401693941900, -0.185104265980996660, -0.185055129805290740, -0.185005993166947020, -0.184956856066088300, +-0.184907718502837440, -0.184858580477317290, -0.184809441989650690, -0.184760303039959610, -0.184711163628368650, -0.184662023754999790, -0.184612883419975870, -0.184563742623419710, +-0.184514601365454220, -0.184465459646202230, -0.184416317465785680, -0.184367174824329240, -0.184318031721954880, -0.184268888158785420, -0.184219744134943740, -0.184170599650552690, +-0.184121454705735150, -0.184072309300614000, -0.184023163435311170, -0.183974017109951320, -0.183924870324656400, -0.183875723079549330, -0.183826575374752940, -0.183777427210390140, +-0.183728278586583750, -0.183679129503456660, -0.183629979961130870, -0.183580829959731020, -0.183531679499379100, -0.183482528580197950, -0.183433377202310510, -0.183384225365839590, +-0.183335073070908160, -0.183285920317638130, -0.183236767106154190, -0.183187613436578330, -0.183138459309033440, -0.183089304723642380, -0.183040149680528090, -0.182990994179813400, +-0.182941838221621240, -0.182892681806073630, -0.182843524933295140, -0.182794367603407860, -0.182745209816534690, -0.182696051572798470, -0.182646892872322110, -0.182597733715228530, +-0.182548574101640630, -0.182499414031680410, -0.182450253505472500, -0.182401092523138990, -0.182351931084802740, -0.182302769190586660, -0.182253606840613670, -0.182204444035006660, +-0.182155280773887650, -0.182106117057381330, -0.182056952885609720, -0.182007788258695710, -0.181958623176762230, -0.181909457639932190, -0.181860291648328540, -0.181811125202074130, +-0.181761958301291020, -0.181712790946103930, -0.181663623136634840, -0.181614454873006680, -0.181565286155342400, -0.181516116983764880, -0.181466947358397110, -0.181417777279361060, +-0.181368606746781460, -0.181319435760780330, -0.181270264321480630, -0.181221092429005250, -0.181171920083477160, -0.181122747285019260, -0.181073574033754490, -0.181024400329804910, +-0.180975226173295200, -0.180926051564347430, -0.180876876503084540, -0.180827700989629440, -0.180778525024105100, -0.180729348606634450, -0.180680171737340410, -0.180630994416345090, +-0.180581816643773150, -0.180532638419746650, -0.180483459744388590, -0.180434280617821850, -0.180385101040169420, -0.180335921011554240, -0.180286740532098370, -0.180237559601926530, +-0.180188378221160790, -0.180139196389924120, -0.180090014108339440, -0.180040831376529740, -0.179991648194617960, -0.179942464562727060, -0.179893280480979110, -0.179844095949498850, +-0.179794910968408330, -0.179745725537830550, -0.179696539657888450, -0.179647353328704990, -0.179598166550403170, -0.179548979323105930, -0.179499791646935360, -0.179450603522016170, +-0.179401414948470510, -0.179352225926421280, -0.179303036455991490, -0.179253846537304110, -0.179204656170482120, -0.179155465355647610, -0.179106274092925320, -0.179057082382437340, +-0.179007890224306630, -0.178958697618656240, -0.178909504565609080, -0.178860311065288160, -0.178811117117816470, -0.178761922723316090, -0.178712727881911810, -0.178663532593725690, +-0.178614336858880730, -0.178565140677499960, -0.178515944049706300, -0.178466746975622810, -0.178417549455371580, -0.178368351489077340, -0.178319153076862220, -0.178269954218849200, +-0.178220754915161320, -0.178171555165921540, -0.178122354971252890, -0.178073154331278320, -0.178023953246120030, -0.177974751715902710, -0.177925549740748510, -0.177876347320780420, +-0.177827144456121490, -0.177777941146894690, -0.177728737393223040, -0.177679533195229530, -0.177630328553036340, -0.177581123466768190, -0.177531917936547210, -0.177482711962496460, +-0.177433505544738940, -0.177384298683397640, -0.177335091378595600, -0.177285883630454940, -0.177236675439100460, -0.177187466804654280, -0.177138257727239460, -0.177089048206978960, +-0.177039838243995860, -0.176990627838413160, -0.176941416990353900, -0.176892205699940210, -0.176842993967296890, -0.176793781792546070, -0.176744569175810830, -0.176695356117214130, +-0.176646142616879050, -0.176596928674928630, -0.176547714291485860, -0.176498499466672950, -0.176449284200614680, -0.176400068493433180, -0.176350852345251500, -0.176301635756192700, +-0.176252418726379810, -0.176203201255935860, -0.176153983344983060, -0.176104764993646160, -0.176055546202047330, -0.176006326970309660, -0.175957107298556180, -0.175907887186909920, +-0.175858666635493930, -0.175809445644431290, -0.175760224213844160, -0.175711002343857340, -0.175661780034593010, -0.175612557286174230, -0.175563334098724040, -0.175514110472365560, +-0.175464886407221770, -0.175415661903414900, -0.175366436961069740, -0.175317211580308500, -0.175267985761254240, -0.175218759504029990, -0.175169532808758850, -0.175120305675563890, +-0.175071078104568150, -0.175021850095893860, -0.174972621649665820, -0.174923392766006210, -0.174874163445038120, -0.174824933686884620, -0.174775703491668790, -0.174726472859513700, +-0.174677241790542420, -0.174628010284877180, -0.174578778342642770, -0.174529545963961420, -0.174480313148956210, -0.174431079897750220, -0.174381846210466540, -0.174332612087228220, +-0.174283377528157510, -0.174234142533379240, -0.174184907103015600, -0.174135671237189680, -0.174086434936024600, -0.174037198199643420, -0.173987961028169240, -0.173938723421725170, +-0.173889485380433420, -0.173840246904418850, -0.173791007993803620, -0.173741768648710910, -0.173692528869263760, -0.173643288655585290, -0.173594048007798570, -0.173544806926026780, +-0.173495565410392070, -0.173446323461019320, -0.173397081078030760, -0.173347838261549510, -0.173298595011698640, -0.173249351328601310, -0.173200107212380610, -0.173150862663158740, +-0.173101617681060580, -0.173052372266208400, -0.173003126418725280, -0.172953880138734360, -0.172904633426358730, -0.172855386281721510, -0.172806138704945820, -0.172756890696153940, +-0.172707642255470670, -0.172658393383018300, -0.172609144078919970, -0.172559894343298770, -0.172510644176277820, -0.172461393577980270, -0.172412142548528350, -0.172362891088046980, +-0.172313639196658350, -0.172264386874485640, -0.172215134121651960, -0.172165880938280450, -0.172116627324494200, -0.172067373280416440, -0.172018118806169320, -0.171968863901877820, +-0.171919608567664140, -0.171870352803651430, -0.171821096609962860, -0.171771839986721520, -0.171722582934050600, -0.171673325452073230, -0.171624067540911670, -0.171574809200690790, +-0.171525550431532920, -0.171476291233561150, -0.171427031606898650, -0.171377771551668580, -0.171328511067994100, -0.171279250155997430, -0.171229988815803540, -0.171180727047534680, +-0.171131464851313970, -0.171082202227264640, -0.171032939175509770, -0.170983675696172570, -0.170934411789376180, -0.170885147455242890, -0.170835882693897570, -0.170786617505462590, +-0.170737351890061030, -0.170688085847816110, -0.170638819378850980, -0.170589552483288800, -0.170540285161252720, -0.170491017412865070, -0.170441749238250760, -0.170392480637532070, +-0.170343211610832160, -0.170293942158274230, -0.170244672279981470, -0.170195401976076990, -0.170146131246683150, -0.170096860091924850, -0.170047588511924420, -0.169998316506805000, +-0.169949044076689790, -0.169899771221701970, -0.169850497941964720, -0.169801224237601240, -0.169751950108733810, -0.169702675555487380, -0.169653400577984280, -0.169604125176347650, +-0.169554849350700730, -0.169505573101166680, -0.169456296427868690, -0.169407019330929080, -0.169357741810472810, -0.169308463866622180, -0.169259185499500390, -0.169209906709230640, +-0.169160627495936130, -0.169111347859740050, -0.169062067800765600, -0.169012787319135080, -0.168963506414973490, -0.168914225088403150, -0.168864943339547210, -0.168815661168528950, +-0.168766378575471500, -0.168717095560498130, -0.168667812123731140, -0.168618528265295470, -0.168569243985313500, -0.168519959283908420, -0.168470674161203450, -0.168421388617321780, +-0.168372102652386670, -0.168322816266521260, -0.168273529459847970, -0.168224242232491690, -0.168174954584574850, -0.168125666516220600, -0.168076378027552180, -0.168027089118692820, +-0.167977799789765740, -0.167928510040894150, -0.167879219872200420, -0.167829929283809520, -0.167780638275843800, -0.167731346848426470, -0.167682055001680790, -0.167632762735729970, +-0.167583470050697240, -0.167534176946705800, -0.167484883423878100, -0.167435589482339030, -0.167386295122210980, -0.167337000343617230, -0.167287705146680950, -0.167238409531525410, +-0.167189113498273870, -0.167139817047048640, -0.167090520177974740, -0.167041222891174570, -0.166991925186771330, -0.166942627064888270, -0.166893328525648640, -0.166844029569175710, +-0.166794730195592680, -0.166745430405021960, -0.166696130197588550, -0.166646829573414780, -0.166597528532623970, -0.166548227075339340, -0.166498925201684130, -0.166449622911781610, +-0.166400320205754150, -0.166351017083726770, -0.166301713545821850, -0.166252409592162640, -0.166203105222872430, -0.166153800438074430, -0.166104495237891950, -0.166055189622448220, +-0.166005883591865630, -0.165956577146269210, -0.165907270285781370, -0.165857963010525330, -0.165808655320624390, -0.165759347216201810, -0.165710038697380880, -0.165660729764283950, +-0.165611420417036080, -0.165562110655759650, -0.165512800480577980, -0.165463489891614270, -0.165414178888991850, -0.165364867472833990, -0.165315555643263950, -0.165266243400404160, +-0.165216930744379630, -0.165167617675312770, -0.165118304193326850, -0.165068990298545190, -0.165019675991091050, -0.164970361271087720, -0.164921046138658490, -0.164871730593925760, +-0.164822414637014610, -0.164773098268047400, -0.164723781487147420, -0.164674464294438020, -0.164625146690042440, -0.164575828674084020, -0.164526510246685990, -0.164477191407970850, +-0.164427872158063560, -0.164378552497086630, -0.164329232425163310, -0.164279911942416900, -0.164230591048970730, -0.164181269744948070, -0.164131948030471350, -0.164082625905665640, +-0.164033303370653360, -0.163983980425557840, -0.163934657070502370, -0.163885333305610230, -0.163836009131004770, -0.163786684546809310, -0.163737359553146220, -0.163688034150140630, +-0.163638708337914970, -0.163589382116592520, -0.163540055486296630, -0.163490728447150570, -0.163441400999277730, -0.163392073142800490, -0.163342744877843950, -0.163293416204530530, +-0.163244087122983580, -0.163194757633326410, -0.163145427735682360, -0.163096097430174720, -0.163046766716926860, -0.162997435596061200, -0.162948104067702800, -0.162898772131974180, +-0.162849439788998600, -0.162800107038899440, -0.162750773881800010, -0.162701440317823630, -0.162652106347092790, -0.162602771969732550, -0.162553437185865370, -0.162504101995614630, +-0.162454766399103610, -0.162405430396455660, -0.162356093987794160, -0.162306757173242420, -0.162257419952922920, -0.162208082326960740, -0.162158744295478360, -0.162109405858599090, +-0.162060067016446320, -0.162010727769143410, -0.161961388116813650, -0.161912048059580430, -0.161862707597566210, -0.161813366730896110, -0.161764025459692570, -0.161714683784078990, +-0.161665341704178680, -0.161615999220115020, -0.161566656332011370, -0.161517313039991090, -0.161467969344176620, -0.161418625244693140, -0.161369280741663070, -0.161319935835209820, +-0.161270590525456700, -0.161221244812527110, -0.161171898696544440, -0.161122552177631110, -0.161073205255912290, -0.161023857931510470, -0.160974510204549000, -0.160925162075151230, +-0.160875813543440580, -0.160826464609540390, -0.160777115273574050, -0.160727765535664040, -0.160678415395935470, -0.160629064854510870, -0.160579713911513630, -0.160530362567067100, +-0.160481010821294650, -0.160431658674319660, -0.160382306126264670, -0.160332953177254790, -0.160283599827412530, -0.160234246076861260, -0.160184891925724380, -0.160135537374125250, +-0.160086182422187310, -0.160036827070033890, -0.159987471317787540, -0.159938115165573380, -0.159888758613513950, -0.159839401661732610, -0.159790044310352760, -0.159740686559497800, +-0.159691328409291120, -0.159641969859855270, -0.159592610911315350, -0.159543251563793900, -0.159493891817414330, -0.159444531672300020, -0.159395171128574400, -0.159345810186360850, +-0.159296448845782760, -0.159247087106962670, -0.159197724970025740, -0.159148362435094500, -0.159098999502292370, -0.159049636171742730, -0.159000272443568990, -0.158950908317894570, +-0.158901543794842890, -0.158852178874536480, -0.158802813557100490, -0.158753447842657460, -0.158704081731330830, -0.158654715223243980, -0.158605348318520330, -0.158555981017283330, +-0.158506613319656380, -0.158457245225761990, -0.158407876735725400, -0.158358507849669090, -0.158309138567716530, -0.158259768889991130, -0.158210398816616280, -0.158161028347715450, +-0.158111657483411160, -0.158062286223828620, -0.158012914569090360, -0.157963542519319820, -0.157914170074640430, -0.157864797235175570, -0.157815424001048750, -0.157766050372383390, +-0.157716676349302000, -0.157667301931929790, -0.157617927120389360, -0.157568551914804070, -0.157519176315297410, -0.157469800321992810, -0.157420423935013740, -0.157371047154482720, +-0.157321669980524940, -0.157272292413262990, -0.157222914452820330, -0.157173536099320360, -0.157124157352886540, -0.157074778213642350, -0.157025398681711230, -0.156976018757215700, +-0.156926638440281010, -0.156877257731029730, -0.156827876629585310, -0.156778495136071200, -0.156729113250610840, -0.156679730973327710, -0.156630348304344360, -0.156580965243786040, +-0.156531581791775290, -0.156482197948435570, -0.156432813713890400, -0.156383429088263170, -0.156334044071677340, -0.156284658664256420, -0.156235272866122990, -0.156185886677402240, +-0.156136500098216810, -0.156087113128690090, -0.156037725768945590, -0.155988338019106780, -0.155938949879297130, -0.155889561349640100, -0.155840172430258300, -0.155790783121276950, +-0.155741393422818620, -0.155692003335006820, -0.155642612857965020, -0.155593221991816660, -0.155543830736685260, -0.155494439092693420, -0.155445047059966340, -0.155395654638626670, +-0.155346261828797850, -0.155296868630603350, -0.155247475044166690, -0.155198081069611360, -0.155148686707060830, -0.155099291956637690, -0.155049896818467200, -0.155000501292671980, +-0.154951105379375480, -0.154901709078701240, -0.154852312390772740, -0.154802915315713410, -0.154753517853646830, -0.154704120004695580, -0.154654721768984900, -0.154605323146637410, +-0.154555924137776610, -0.154506524742526020, -0.154457124961009080, -0.154407724793349350, -0.154358324239669440, -0.154308923300094600, -0.154259521974747430, -0.154210120263751470, +-0.154160718167230200, -0.154111315685307140, -0.154061912818105800, -0.154012509565749660, -0.153963105928361380, -0.153913701906066210, -0.153864297498986780, -0.153814892707246630, +-0.153765487530969220, -0.153716081970278080, -0.153666676025296770, -0.153617269696147890, -0.153567862982956690, -0.153518455885845840, -0.153469048404938860, -0.153419640540359250, +-0.153370232292230540, -0.153320823660676260, -0.153271414645819920, -0.153222005247784150, -0.153172595466694260, -0.153123185302672880, -0.153073774755843520, -0.153024363826329750, +-0.152974952514255050, -0.152925540819742970, -0.152876128742917030, -0.152826716283899900, -0.152777303442816870, -0.152727890219790580, -0.152678476614944550, -0.152629062628402340, +-0.152579648260287470, -0.152530233510723480, -0.152480818379833020, -0.152431402867741400, -0.152381986974571280, -0.152332570700446170, -0.152283154045489640, -0.152233737009825230, +-0.152184319593576510, -0.152134901796866950, -0.152085483619819270, -0.152036065062558760, -0.151986646125208070, -0.151937226807890790, -0.151887807110730440, -0.151838387033850550, +-0.151788966577374700, -0.151739545741426450, -0.151690124526128460, -0.151640702931606000, -0.151591280957981830, -0.151541858605379410, -0.151492435873922390, -0.151443012763734260, +-0.151393589274938590, -0.151344165407658080, -0.151294741162018020, -0.151245316538141130, -0.151195891536150930, -0.151146466156171030, -0.151097040398324920, -0.151047614262736250, +-0.150998187749528530, -0.150948760858824440, -0.150899333590749360, -0.150849905945425910, -0.150800477922977740, -0.150751049523528330, -0.150701620747201340, -0.150652191594120270, +-0.150602762064407840, -0.150553332158189390, -0.150503901875587630, -0.150454471216726090, -0.150405040181728370, -0.150355608770718070, -0.150306176983818730, -0.150256744821153950, +-0.150207312282846450, -0.150157879369021530, -0.150108446079801920, -0.150059012415311170, -0.150009578375672910, -0.149960143961010710, -0.149910709171448140, -0.149861274007108800, +-0.149811838468115380, -0.149762402554593280, -0.149712966266665140, -0.149663529604454610, -0.149614092568085220, -0.149564655157680640, -0.149515217373364400, -0.149465779215259250, +-0.149416340683490520, -0.149366901778180930, -0.149317462499454100, -0.149268022847433600, -0.149218582822243070, -0.149169142424006060, -0.149119701652846190, -0.149070260508886190, +-0.149020818992251450, -0.148971377103064630, -0.148921934841449360, -0.148872492207529270, -0.148823049201427940, -0.148773605823269010, -0.148724162073176040, -0.148674717951271800, +-0.148625273457681640, -0.148575828592528300, -0.148526383355935380, -0.148476937748026510, -0.148427491768925310, -0.148378045418755350, -0.148328598697639400, -0.148279151605702850, +-0.148229704143068410, -0.148180256309859730, -0.148130808106200380, -0.148081359532214020, -0.148031910588024260, -0.147982461273754720, -0.147933011589528180, -0.147883561535469940, +-0.147834111111702830, -0.147784660318350440, -0.147735209155536400, -0.147685757623384320, -0.147636305722017860, -0.147586853451559750, -0.147537400812135400, -0.147487947803867540, +-0.147438494426879780, -0.147389040681295820, -0.147339586567239250, -0.147290132084833710, -0.147240677234202870, -0.147191222015469410, -0.147141766428758810, -0.147092310474193770, +-0.147042854151897970, -0.146993397461995020, -0.146943940404608590, -0.146894482979862300, -0.146845025187879810, -0.146795567028783880, -0.146746108502699900, -0.146696649609750650, +-0.146647190350059770, -0.146597730723750930, -0.146548270730947760, -0.146498810371773920, -0.146449349646352170, -0.146399888554807900, -0.146350427097263950, -0.146300965273843900, +-0.146251503084671440, -0.146202040529870240, -0.146152577609563930, -0.146103114323876180, -0.146053650672929770, -0.146004186656850110, -0.145954722275759950, -0.145905257529783030, +-0.145855792419042950, -0.145806326943663380, -0.145756861103768010, -0.145707394899480480, -0.145657928330923560, -0.145608461398222730, -0.145558994101500750, -0.145509526440881250, +-0.145460058416487960, -0.145410590028444530, -0.145361121276874620, -0.145311652161901010, -0.145262182683649150, -0.145212712842241850, -0.145163242637802750, -0.145113772070455560, +-0.145064301140323950, -0.145014829847531560, -0.144965358192202100, -0.144915886174458390, -0.144866413794425830, -0.144816941052227230, -0.144767467947986280, -0.144717994481826650, +-0.144668520653872030, -0.144619046464246140, -0.144569571913071740, -0.144520097000474270, -0.144470621726576600, -0.144421146091502330, -0.144371670095375220, -0.144322193738318920, +-0.144272717020457160, -0.144223239941913580, -0.144173762502811050, -0.144124284703274960, -0.144074806543428190, -0.144025328023394380, -0.143975849143297250, -0.143926369903260520, +-0.143876890303407860, -0.143827410343862950, -0.143777930024748650, -0.143728449346190420, -0.143678968308311030, -0.143629486911234260, -0.143580005155083760, -0.143530523039983230, +-0.143481040566056400, -0.143431557733426080, -0.143382074542217770, -0.143332590992554270, -0.143283107084559270, -0.143233622818356530, -0.143184138194069720, -0.143134653211822560, +-0.143085167871738780, -0.143035682173941190, -0.142986196118555260, -0.142936709705703880, -0.142887222935510680, -0.142837735808099440, -0.142788248323593880, -0.142738760482117670, +-0.142689272283794580, -0.142639783728747440, -0.142590294817101700, -0.142540805548980220, -0.142491315924506730, -0.142441825943804940, -0.142392335606998630, -0.142342844914211420, +-0.142293353865566270, -0.142243862461188590, -0.142194370701201250, -0.142144878585728000, -0.142095386114892530, -0.142045893288818610, -0.141996400107629960, -0.141946906571450320, +-0.141897412680402510, -0.141847918434612060, -0.141798423834201800, -0.141748928879295490, -0.141699433570016850, -0.141649937906489640, -0.141600441888837580, -0.141550945517183530, +-0.141501448791653020, -0.141451951712368850, -0.141402454279454830, -0.141352956493034670, -0.141303458353232100, -0.141253959860170920, -0.141204461013974820, -0.141154961814766670, +-0.141105462262672010, -0.141055962357813700, -0.141006462100315480, -0.140956961490301120, -0.140907460527894320, -0.140857959213218890, -0.140808457546398590, -0.140758955527556240, +-0.140709453156817380, -0.140659950434304880, -0.140610447360142500, -0.140560943934454010, -0.140511440157363170, -0.140461936028993730, -0.140412431549468560, -0.140362926718913180, +-0.140313421537450520, -0.140263916005204270, -0.140214410122298240, -0.140164903888856190, -0.140115397305001890, -0.140065890370859090, -0.140016383086550680, -0.139966875452202180, +-0.139917367467936510, -0.139867859133877420, -0.139818350450148680, -0.139768841416874040, -0.139719332034177330, -0.139669822302182280, -0.139620312221011790, -0.139570801790791400, +-0.139521291011644010, -0.139471779883693390, -0.139422268407063320, -0.139372756581877560, -0.139323244408259940, -0.139273731886333320, -0.139224219016223260, -0.139174705798052630, +-0.139125192231945250, -0.139075678318024860, -0.139026164056415300, -0.138976649447240340, -0.138927134490623740, -0.138877619186688420, -0.138828103535559970, -0.138778587537361220, +-0.138729071192216000, -0.138679554500248130, -0.138630037461581370, -0.138580520076339500, -0.138531002344645440, -0.138481484266624770, -0.138431965842400390, -0.138382447072096100, +-0.138332927955835680, -0.138283408493742960, -0.138233888685941690, -0.138184368532555720, -0.138134848033707960, -0.138085327189523930, -0.138035806000126600, -0.137986284465639760, +-0.137936762586187200, -0.137887240361892730, -0.137837717792880150, -0.137788194879272410, -0.137738671621195070, -0.137689148018771050, -0.137639624072124130, -0.137590099781378180, +-0.137540575146656960, -0.137491050168084330, -0.137441524845784060, -0.137391999179879100, -0.137342473170495030, -0.137292946817754750, -0.137243420121782120, -0.137193893082700940, +-0.137144365700635010, -0.137094837975708210, -0.137045309908044280, -0.136995781497766200, -0.136946252744999550, -0.136896723649867270, -0.136847194212493170, -0.136797664433001090, +-0.136748134311514860, -0.136698603848158300, -0.136649073043055210, -0.136599541896328560, -0.136550010408103940, -0.136500478578504280, -0.136450946407653460, -0.136401413895675230, +-0.136351881042693500, -0.136302347848832050, -0.136252814314213850, -0.136203280438964510, -0.136153746223206950, -0.136104211667065020, -0.136054676770662570, -0.136005141534123440, +-0.135955605957571450, -0.135906070041130450, -0.135856533784923380, -0.135806997189075850, -0.135757460253710850, -0.135707922978952210, -0.135658385364923720, -0.135608847411749310, +-0.135559309119552750, -0.135509770488457050, -0.135460231518587800, -0.135410692210067960, -0.135361152563021420, -0.135311612577571960, -0.135262072253843510, -0.135212531591959840, +-0.135162990592044870, -0.135113449254221530, -0.135063907578615440, -0.135014365565349600, -0.134964823214547840, -0.134915280526334030, -0.134865737500832000, -0.134816194138165650, +-0.134766650438457920, -0.134717106401834430, -0.134667562028418200, -0.134618017318333030, -0.134568472271702850, -0.134518926888651500, -0.134469381169302790, -0.134419835113780670, +-0.134370288722208050, -0.134320741994710590, -0.134271194931411290, -0.134221647532433990, -0.134172099797902590, -0.134122551727940940, -0.134073003322672880, -0.134023454582222340, +-0.133973905506712290, -0.133924356096268320, -0.133874806351013480, -0.133825256271071640, -0.133775705856566650, -0.133726155107622370, -0.133676604024362740, -0.133627052606911570, +-0.133577500855391910, -0.133527948769929380, -0.133478396350646960, -0.133428843597668540, -0.133379290511118050, -0.133329737091119310, -0.133280183337796230, -0.133230629251271800, +-0.133181074831671690, -0.133131520079118880, -0.133081964993737280, -0.133032409575650770, -0.132982853824983230, -0.132933297741858580, -0.132883741326400660, -0.132834184578732500, +-0.132784627498979790, -0.132735070087265480, -0.132685512343713510, -0.132635954268447760, -0.132586395861592130, -0.132536837123270500, -0.132487278053605880, -0.132437718652723970, +-0.132388158920747760, -0.132338598857801140, -0.132289038464008020, -0.132239477739492320, -0.132189916684377930, -0.132140355298788730, -0.132090793582847780, -0.132041231536680710, +-0.131991669160410580, -0.131942106454161270, -0.131892543418056700, -0.131842980052220750, -0.131793416356777350, -0.131743852331849540, -0.131694287977563000, -0.131644723294040730, +-0.131595158281406640, -0.131545592939784660, -0.131496027269298680, -0.131446461270072650, -0.131396894942230450, -0.131347328285895150, -0.131297761301192420, -0.131248193988245250, +-0.131198626347177630, -0.131149058378113440, -0.131099490081176580, -0.131049921456491030, -0.131000352504180660, -0.130950783224368510, -0.130901213617180300, -0.130851643682739050, +-0.130802073421168700, -0.130752502832593150, -0.130702931917136360, -0.130653360674922230, -0.130603789106074700, -0.130554217210716830, -0.130504644988974290, -0.130455072440970130, +-0.130405499566828290, -0.130355926366672700, -0.130306352840627300, -0.130256778988816020, -0.130207204811361920, -0.130157630308390670, -0.130108055480025350, -0.130058480326389890, +-0.130008904847608240, -0.129959329043804310, -0.129909752915102070, -0.129860176461625450, -0.129810599683497510, -0.129761022580843930, -0.129711445153787820, -0.129661867402453080, +-0.129612289326963700, -0.129562710927443560, -0.129513132204016670, -0.129463553156806050, -0.129413973785937410, -0.129364394091533890, -0.129314814073719340, -0.129265233732617780, +-0.129215653068353110, -0.129166072081049330, -0.129116490770830370, -0.129066909137819290, -0.129017327182141820, -0.128967744903921040, -0.128918162303280880, -0.128868579380345320, +-0.128818996135238340, -0.128769412568083830, -0.128719828679004940, -0.128670244468127330, -0.128620659935574140, -0.128571075081469280, -0.128521489905936730, -0.128471904409100470, +-0.128422318591084440, -0.128372732452012610, -0.128323145992008090, -0.128273559211196570, -0.128223972109701130, -0.128174384687645780, -0.128124796945154470, -0.128075208882351160, +-0.128025620499359840, -0.127976031796304480, -0.127926442773308140, -0.127876853430496570, -0.127827263767992890, -0.127777673785921030, -0.127728083484404980, -0.127678492863568720, +-0.127628901923536240, -0.127579310664431510, -0.127529719086377610, -0.127480127189500300, -0.127430534973922680, -0.127380942439768720, -0.127331349587162380, -0.127281756416227710, +-0.127232162927088610, -0.127182569119868250, -0.127132974994692340, -0.127083380551683970, -0.127033785790967160, -0.126984190712665900, -0.126934595316904150, -0.126884999603805920, +-0.126835403573495180, -0.126785807226095060, -0.126736210561731290, -0.126686613580527020, -0.126637016282606210, -0.126587418668092840, -0.126537820737110920, -0.126488222489784470, +-0.126438623926236560, -0.126389025046593000, -0.126339425850976850, -0.126289826339512160, -0.126240226512322890, -0.126190626369533040, -0.126141025911266660, -0.126091425137647680, +-0.126041824048799270, -0.125992222644847190, -0.125942620925914540, -0.125893018892125340, -0.125843416543603620, -0.125793813880473340, -0.125744210902858510, -0.125694607610882280, +-0.125645004004670410, -0.125595400084346030, -0.125545795850033170, -0.125496191301855800, -0.125446586439937950, -0.125396981264403630, -0.125347375775376880, -0.125297769972980780, +-0.125248163857341170, -0.125198557428581130, -0.125148950686824690, -0.125099343632195910, -0.125049736264818720, -0.125000128584817210, -0.124950520592315400, -0.124900912287436380, +-0.124851303670305970, -0.124801694741047310, -0.124752085499784410, -0.124702475946641290, -0.124652866081741980, -0.124603255905210500, -0.124553645417170000, -0.124504034617746270, +-0.124454423507062470, -0.124404812085242590, -0.124355200352410680, -0.124305588308690790, -0.124255975954206910, -0.124206363289083090, -0.124156750313442490, -0.124107137027410900, +-0.124057523431111450, -0.124007909524668210, -0.123958295308205180, -0.123908680781846430, -0.123859065945715950, -0.123809450799937830, -0.123759835344635190, -0.123710219579933850, +-0.123660603505956960, -0.123610987122828560, -0.123561370430672700, -0.123511753429613400, -0.123462136119774720, -0.123412518501279820, -0.123362900574254500, -0.123313282338821940, +-0.123263663795106170, -0.123214044943231240, -0.123164425783321190, -0.123114806315500090, -0.123065186539891970, -0.123015566456620000, -0.122965946065809990, -0.122916325367585120, +-0.122866704362069440, -0.122817083049386990, -0.122767461429661840, -0.122717839503018040, -0.122668217269578740, -0.122618594729469800, -0.122568971882814360, -0.122519348729736510, +-0.122469725270360260, -0.122420101504809710, -0.122370477433208920, -0.122320853055681920, -0.122271228372351910, -0.122221603383344720, -0.122171978088783490, -0.122122352488792340, +-0.122072726583495310, -0.122023100373016460, -0.121973473857479860, -0.121923847037009580, -0.121874219911728800, -0.121824592481763330, -0.121774964747236400, -0.121725336708272060, +-0.121675708364994380, -0.121626079717527410, -0.121576450765995260, -0.121526821510521090, -0.121477191951230750, -0.121427562088247430, -0.121377931921695200, -0.121328301451698150, +-0.121278670678380340, -0.121229039601865860, -0.121179408222278780, -0.121129776539742300, -0.121080144554382250, -0.121030512266321850, -0.120980879675685160, -0.120931246782596270, +-0.120881613587179280, -0.120831980089558240, -0.120782346289857250, -0.120732712188199520, -0.120683077784710880, -0.120633443079514550, -0.120583808072734620, -0.120534172764495170, +-0.120484537154920290, -0.120434901244134060, -0.120385265032259690, -0.120335628519423050, -0.120285991705747330, -0.120236354591356630, -0.120186717176375050, -0.120137079460926680, +-0.120087441445135600, -0.120037803129125930, -0.119988164513020860, -0.119938525596946260, -0.119888886381025350, -0.119839246865382230, -0.119789607050140990, -0.119739966935425730, +-0.119690326521360550, -0.119640685808068680, -0.119591044795675960, -0.119541403484305640, -0.119491761874081820, -0.119442119965128590, -0.119392477757570060, -0.119342835251530330, +-0.119293192447133520, -0.119243549344502830, -0.119193905943764170, -0.119144262245040720, -0.119094618248456640, -0.119044973954136000, -0.118995329362202930, -0.118945684472781530, +-0.118896039285995930, -0.118846393801969350, -0.118796748020827670, -0.118747101942694100, -0.118697455567692790, -0.118647808895947840, -0.118598161927583360, -0.118548514662723480, +-0.118498867101491430, -0.118449219244013110, -0.118399571090411730, -0.118349922640811410, -0.118300273895336300, -0.118250624854110500, -0.118200975517258140, -0.118151325884903350, +-0.118101675957169350, -0.118052025734182040, -0.118002375216064670, -0.117952724402941370, -0.117903073294936250, -0.117853421892173450, -0.117803770194777100, -0.117754118202871310, +-0.117704465916579350, -0.117654813336027110, -0.117605160461337840, -0.117555507292635660, -0.117505853830044720, -0.117456200073689130, -0.117406546023693060, -0.117356891680179740, +-0.117307237043275060, -0.117257582113102300, -0.117207926889785580, -0.117158271373449040, -0.117108615564216830, -0.117058959462213060, -0.117009303067561910, -0.116959646380386630, +-0.116909989400813100, -0.116860332128964600, -0.116810674564965260, -0.116761016708939250, -0.116711358561010680, -0.116661700121303740, -0.116612041389941650, -0.116562382367050340, +-0.116512723052753080, -0.116463063447174000, -0.116413403550437280, -0.116363743362667030, -0.116314082883987440, -0.116264422114522630, -0.116214761054395890, -0.116165099703733120, +-0.116115438062657620, -0.116065776131293500, -0.116016113909764960, -0.115966451398196130, -0.115916788596711170, -0.115867125505434240, -0.115817462124488610, -0.115767798454000200, +-0.115718134494092310, -0.115668470244889080, -0.115618805706514670, -0.115569140879093240, -0.115519475762748970, -0.115469810357605120, -0.115420144663787640, -0.115370478681419780, +-0.115320812410625740, -0.115271145851529660, -0.115221479004255710, -0.115171811868928070, -0.115122144445670900, -0.115072476734607480, -0.115022808735863760, -0.114973140449563010, +-0.114923471875829420, -0.114873803014787140, -0.114824133866560360, -0.114774464431273250, -0.114724794709049960, -0.114675124700013810, -0.114625454404290730, -0.114575783822004020, +-0.114526112953277840, -0.114476441798236390, -0.114426770357003830, -0.114377098629704340, -0.114327426616461230, -0.114277754317400430, -0.114228081732645250, -0.114178408862319860, +-0.114128735706548450, -0.114079062265455190, -0.114029388539164290, -0.113979714527799910, -0.113930040231485370, -0.113880365650346610, -0.113830690784506930, -0.113781015634090530, +-0.113731340199221580, -0.113681664480024290, -0.113631988476622830, -0.113582312189140530, -0.113532635617703310, -0.113482958762434510, -0.113433281623458320, -0.113383604200898940, +-0.113333926494880530, -0.113284248505527300, -0.113234570232963460, -0.113184891677312300, -0.113135212838699800, -0.113085533717249280, -0.113035854313084910, -0.112986174626330910, +-0.112936494657111470, -0.112886814405550790, -0.112837133871773090, -0.112787453055901650, -0.112737771958062480, -0.112688090578378880, -0.112638408916975030, -0.112588726973975180, +-0.112539044749503510, -0.112489362243684220, -0.112439679456640660, -0.112389996388498770, -0.112340313039381880, -0.112290629409414210, -0.112240945498719980, -0.112191261307423380, +-0.112141576835648630, -0.112091892083519940, -0.112042207051160620, -0.111992521738696680, -0.111942836146251430, -0.111893150273949100, -0.111843464121913890, -0.111793777690270020, +-0.111744090979141700, -0.111694403988653160, -0.111644716718927710, -0.111595029170091370, -0.111545341342267440, -0.111495653235580180, -0.111445964850153780, -0.111396276186112450, +-0.111346587243580440, -0.111296898022681080, -0.111247208523540360, -0.111197518746281630, -0.111147828691029090, -0.111098138357906970, -0.111048447747039520, -0.110998756858550940, +-0.110949065692565480, -0.110899374249206460, -0.110849682528599890, -0.110799990530869110, -0.110750298256138370, -0.110700605704531870, -0.110650912876173860, -0.110601219771188570, +-0.110551526389699340, -0.110501832731832190, -0.110452138797710440, -0.110402444587458360, -0.110352750101200160, -0.110303055339060080, -0.110253360301162380, -0.110203664987631260, +-0.110153969398590110, -0.110104273534164910, -0.110054577394479030, -0.110004880979656700, -0.109955184289822180, -0.109905487325099690, -0.109855790085613480, -0.109806092571487800, +-0.109756394782846000, -0.109706696719814100, -0.109656998382515470, -0.109607299771074320, -0.109557600885614950, -0.109507901726261560, -0.109458202293138410, -0.109408502586368870, +-0.109358802606078970, -0.109309102352392070, -0.109259401825432400, -0.109209701025324220, -0.109159999952191790, -0.109110298606159370, -0.109060596987351200, -0.109010895095890650, +-0.108961192931903760, -0.108911490495513870, -0.108861787786845260, -0.108812084806022180, -0.108762381553168890, -0.108712678028409640, -0.108662974231868710, -0.108613270163669450, +-0.108563565823937900, -0.108513861212797440, -0.108464156330372320, -0.108414451176786820, -0.108364745752165180, -0.108315040056631670, -0.108265334090309700, -0.108215627853325250, +-0.108165921345801750, -0.108116214567863440, -0.108066507519634590, -0.108016800201239480, -0.107967092612802370, -0.107917384754447520, -0.107867676626298330, -0.107817968228480830, +-0.107768259561118410, -0.107718550624335340, -0.107668841418255890, -0.107619131943004350, -0.107569422198704970, -0.107519712185481150, -0.107470001903458940, -0.107420291352761710, +-0.107370580533513770, -0.107320869445839360, -0.107271158089862800, -0.107221446465708330, -0.107171734573500250, -0.107122022413361940, -0.107072309985419470, -0.107022597289796210, +-0.106972884326616470, -0.106923171096004520, -0.106873457598084640, -0.106823743832981110, -0.106774029800818220, -0.106724315501719390, -0.106674600935810630, -0.106624886103215380, +-0.106575171004057920, -0.106525455638462520, -0.106475740006553490, -0.106426024108455100, -0.106376307944290770, -0.106326591514186570, -0.106276874818265880, -0.106227157856653000, +-0.106177440629472220, -0.106127723136847850, -0.106078005378904160, -0.106028287355765470, -0.105978569067555180, -0.105928850514399330, -0.105879131696421370, -0.105829412613745580, +-0.105779693266496260, -0.105729973654797690, -0.105680253778774210, -0.105630533638550090, -0.105580813234248740, -0.105531092565996240, -0.105481371633916020, -0.105431650438132370, +-0.105381928978769590, -0.105332207255951990, -0.105282485269803870, -0.105232763020448660, -0.105183040508012420, -0.105133317732618580, -0.105083594694391440, -0.105033871393455320, +-0.104984147829934520, -0.104934424003953350, -0.104884699915636120, -0.104834975565106250, -0.104785250952489830, -0.104735526077910280, -0.104685800941491940, -0.104636075543359060, +-0.104586349883636020, -0.104536623962447090, -0.104486897779915710, -0.104437171336167990, -0.104387444631327330, -0.104337717665518050, -0.104287990438864500, -0.104238262951490950, +-0.104188535203521750, -0.104138807195081210, -0.104089078926292780, -0.104039350397282530, -0.103989621608173900, -0.103939892559091220, -0.103890163250158800, -0.103840433681500990, +-0.103790703853242090, -0.103740973765506410, -0.103691243418417430, -0.103641512812101220, -0.103591781946681240, -0.103542050822281790, -0.103492319439027220, -0.103442587797041850, +-0.103392855896450020, -0.103343123737375160, -0.103293391319943360, -0.103243658644278090, -0.103193925710503680, -0.103144192518744460, -0.103094459069124750, -0.103044725361768900, +-0.102994991396801220, -0.102945257174345190, -0.102895522694526900, -0.102845787957469810, -0.102796052963298230, -0.102746317712136530, -0.102696582204109040, -0.102646846439340090, +-0.102597110417953150, -0.102547374140074300, -0.102497637605827030, -0.102447900815335650, -0.102398163768724530, -0.102348426466118000, -0.102298688907640410, -0.102248951093416090, +-0.102199213023568510, -0.102149474698223770, -0.102099736117505350, -0.102049997281537600, -0.102000258190444850, -0.101950518844351450, -0.101900779243381760, -0.101851039387660120, +-0.101801299277309990, -0.101751558912457500, -0.101701818293226120, -0.101652077419740190, -0.101602336292124060, -0.101552594910502100, -0.101502853274998650, -0.101453111385737180, +-0.101403369242843820, -0.101353626846442030, -0.101303884196656170, -0.101254141293610610, -0.101204398137429690, -0.101154654728237790, -0.101104911066159240, -0.101055167151317530, +-0.101005422983838790, -0.100955678563846480, -0.100905933891464970, -0.100856188966818650, -0.100806443790031840, -0.100756698361228930, -0.100706952680533380, -0.100657206748071340, +-0.100607460563966290, -0.100557714128342570, -0.100507967441324580, -0.100458220503036650, -0.100408473313603200, -0.100358725873148550, -0.100308978181796200, -0.100259230239672290, +-0.100209482046900310, -0.100159733603604610, -0.100109984909909590, -0.100060235965939600, -0.100010486771819030, -0.099960737327672244, -0.099910987633622717, -0.099861237689796614, +-0.099811487496317422, -0.099761737053309499, -0.099711986360897231, -0.099662235419205006, -0.099612484228357195, -0.099562732788477284, -0.099512981099691436, -0.099463229162123121, +-0.099413476975896739, -0.099363724541136664, -0.099313971857967281, -0.099264218926512965, -0.099214465746898101, -0.099164712319246187, -0.099114958643683387, -0.099065204720333172, +-0.099015450549319955, -0.098965696130768124, -0.098915941464802037, -0.098866186551546095, -0.098816431391124698, -0.098766675983661331, -0.098716920329282157, -0.098667164428110687, +-0.098617408280271310, -0.098567651885888397, -0.098517895245086362, -0.098468138357989593, -0.098418381224721602, -0.098368623845408523, -0.098318866220173898, -0.098269108349142098, +-0.098219350232437538, -0.098169591870184592, -0.098119833262507672, -0.098070074409531166, -0.098020315311378586, -0.097970555968176110, -0.097920796380047248, -0.097871036547116388, +-0.097821276469507931, -0.097771516147346291, -0.097721755580755867, -0.097671994769860160, -0.097622233714785345, -0.097572472415654962, -0.097522710872593385, -0.097472949085725027, +-0.097423187055174304, -0.097373424781065615, -0.097323662263523361, -0.097273899502671082, -0.097224136498634914, -0.097174373251538423, -0.097124609761505984, -0.097074846028662037, +-0.097025082053130970, -0.096975317835037184, -0.096925553374505119, -0.096875788671658289, -0.096826023726622856, -0.096776258539522375, -0.096726493110481246, -0.096676727439623883, +-0.096626961527074701, -0.096577195372958113, -0.096527428977397647, -0.096477662340519507, -0.096427895462447205, -0.096378128343305169, -0.096328360983217801, -0.096278593382309541, +-0.096228825540704790, -0.096179057458527978, -0.096129289135902643, -0.096079520572954963, -0.096029751769808491, -0.095979982726587629, -0.095930213443416817, -0.095880443920420458, +-0.095830674157723006, -0.095780904155448862, -0.095731133913721581, -0.095681363432667338, -0.095631592712409688, -0.095581821753073060, -0.095532050554781880, -0.095482279117660565, +-0.095432507441833556, -0.095382735527424392, -0.095332963374559279, -0.095283190983361757, -0.095233418353956253, -0.095183645486467211, -0.095133872381019058, -0.095084099037736208, +-0.095034325456743118, -0.094984551638163342, -0.094934777582123056, -0.094885003288745828, -0.094835228758156101, -0.094785453990478288, -0.094735678985836846, -0.094685903744356217, +-0.094636128266159941, -0.094586352551374223, -0.094536576600122615, -0.094486800412529576, -0.094437023988719532, -0.094387247328816939, -0.094337470432946213, -0.094287693301231823, +-0.094237915933797309, -0.094188138330768889, -0.094138360492270132, -0.094088582418425465, -0.094038804109359345, -0.093989025565196213, -0.093939246786060512, -0.093889467772076698, +-0.093839688523368339, -0.093789909040061625, -0.093740129322280152, -0.093690349370148363, -0.093640569183790684, -0.093590788763331587, -0.093541008108895526, -0.093491227220606057, +-0.093441446098589398, -0.093391664742969130, -0.093341883153869695, -0.093292101331415550, -0.093242319275731164, -0.093192536986940966, -0.093142754465169439, -0.093092971710540137, +-0.093043188723179279, -0.092993405503210461, -0.092943622050758123, -0.092893838365946738, -0.092844054448900759, -0.092794270299744630, -0.092744485918602834, -0.092694701305598939, +-0.092644916460859178, -0.092595131384507118, -0.092545346076667229, -0.092495560537463981, -0.092445774767021829, -0.092395988765465245, -0.092346202532917795, -0.092296416069505727, +-0.092246629375352621, -0.092196842450582947, -0.092147055295321162, -0.092097267909691735, -0.092047480293819137, -0.091997692447827850, -0.091947904371841443, -0.091898116065986149, +-0.091848327530385576, -0.091798538765164181, -0.091748749770446433, -0.091698960546356817, -0.091649171093019802, -0.091599381410558969, -0.091549591499100580, -0.091499801358768201, +-0.091450010989686317, -0.091400220391979412, -0.091350429565771940, -0.091300638511188414, -0.091250847228353291, -0.091201055717390150, -0.091151263978425268, -0.091101472011582224, +-0.091051679816985490, -0.091001887394759562, -0.090952094745028925, -0.090902301867918034, -0.090852508763551401, -0.090802715432052608, -0.090752921873547915, -0.090703128088160917, +-0.090653334076016098, -0.090603539837237942, -0.090553745371950933, -0.090503950680279555, -0.090454155762347430, -0.090404360618280791, -0.090354565248203261, -0.090304769652239311, +-0.090254973830513438, -0.090205177783150126, -0.090155381510273871, -0.090105585012009173, -0.090055788288479613, -0.090005991339811478, -0.089956194166128350, -0.089906396767554755, +-0.089856599144215163, -0.089806801296234057, -0.089757003223735962, -0.089707204926845363, -0.089657406405685855, -0.089607607660383726, -0.089557808691062571, -0.089508009497846902, +-0.089458210080861203, -0.089408410440229985, -0.089358610576077732, -0.089308810488528081, -0.089259010177707279, -0.089209209643738949, -0.089159408886747601, -0.089109607906857721, +-0.089059806704193833, -0.089010005278880422, -0.088960203631041998, -0.088910401760802185, -0.088860599668287257, -0.088810797353620824, -0.088760994816927397, -0.088711192058331473, +-0.088661389077957578, -0.088611585875930210, -0.088561782452372992, -0.088511978807412212, -0.088462174941171479, -0.088412370853775304, -0.088362566545348201, -0.088312762016014679, +-0.088262957265899264, -0.088213152295126454, -0.088163347103819872, -0.088113541692105807, -0.088063736060107894, -0.088013930207950633, -0.087964124135758548, -0.087914317843656165, +-0.087864511331767967, -0.087814704600218507, -0.087764897649131396, -0.087715090478632921, -0.087665283088846732, -0.087615475479897315, -0.087565667651909221, -0.087515859605006963, +-0.087466051339315051, -0.087416242854957124, -0.087366434152059483, -0.087316625230745751, -0.087266816091140453, -0.087217006733368116, -0.087167197157553264, -0.087117387363820423, +-0.087067577352294104, -0.087017767123097972, -0.086967956676358288, -0.086918146012198730, -0.086868335130743796, -0.086818524032118025, -0.086768712716445942, -0.086718901183852087, +-0.086669089434460972, -0.086619277468396247, -0.086569465285784214, -0.086519652886748524, -0.086469840271413703, -0.086420027439904276, -0.086370214392344782, -0.086320401128859747, +-0.086270587649572822, -0.086220773954610322, -0.086170960044095885, -0.086121145918154049, -0.086071331576909341, -0.086021517020486313, -0.085971702249009491, -0.085921887262603414, +-0.085872072061391733, -0.085822256645500750, -0.085772441015054129, -0.085722625170176411, -0.085672809110992121, -0.085622992837625811, -0.085573176350202021, -0.085523359648844402, +-0.085473542733679284, -0.085423725604830289, -0.085373908262421999, -0.085324090706578926, -0.085274272937425621, -0.085224454955086640, -0.085174636759686520, -0.085124818351348927, +-0.085074999730200176, -0.085025180896363919, -0.084975361849964723, -0.084925542591127098, -0.084875723119975641, -0.084825903436634861, -0.084776083541229327, -0.084726263433882704, +-0.084676443114721306, -0.084626622583868785, -0.084576801841449722, -0.084526980887588657, -0.084477159722410128, -0.084427338346038716, -0.084377516758598059, -0.084327694960214500, +-0.084277872951011704, -0.084228050731114223, -0.084178228300646626, -0.084128405659733438, -0.084078582808499253, -0.084028759747068610, -0.083978936475565175, -0.083929112994115290, +-0.083879289302842622, -0.083829465401871722, -0.083779641291327173, -0.083729816971333512, -0.083679992442015308, -0.083630167703497127, -0.083580342755902634, -0.083530517599358173, +-0.083480692233987422, -0.083430866659914935, -0.083381040877265292, -0.083331214886163033, -0.083281388686732738, -0.083231562279098101, -0.083181735663385423, -0.083131908839718424, +-0.083082081808221644, -0.083032254569019665, -0.082982427122237037, -0.082932599467998358, -0.082882771606428166, -0.082832943537650167, -0.082783115261790691, -0.082733286778973431, +-0.082683458089322953, -0.082633629192963826, -0.082583800090020629, -0.082533970780617943, -0.082484141264879435, -0.082434311542931446, -0.082384481614897698, -0.082334651480902743, +-0.082284821141071149, -0.082234990595527510, -0.082185159844396394, -0.082135328887802367, -0.082085497725869150, -0.082035666358723058, -0.081985834786487813, -0.081936003009287980, +-0.081886171027248142, -0.081836338840492864, -0.081786506449146743, -0.081736673853334357, -0.081686841053179401, -0.081637008048808232, -0.081587174840344542, -0.081537341427912913, +-0.081487507811637938, -0.081437673991644186, -0.081387839968056250, -0.081338005740997824, -0.081288171310595264, -0.081238336676972292, -0.081188501840253474, -0.081138666800563392, +-0.081088831558026653, -0.081038996112767839, -0.080989160464911517, -0.080939324614581420, -0.080889488561903894, -0.080839652307002657, -0.080789815850002278, -0.080739979191027364, +-0.080690142330202497, -0.080640305267652285, -0.080590468003501295, -0.080540630537873262, -0.080490792870894529, -0.080440955002688816, -0.080391116933380719, -0.080341278663094831, +-0.080291440191955749, -0.080241601520088052, -0.080191762647615475, -0.080141923574664375, -0.080092084301358474, -0.080042244827822351, -0.079992405154180629, -0.079942565280557876, +-0.079892725207078727, -0.079842884933867764, -0.079793044461048693, -0.079743203788747899, -0.079693362917089103, -0.079643521846196885, -0.079593680576195869, -0.079543839107210662, +-0.079493997439365846, -0.079444155572785155, -0.079394313507594960, -0.079344471243918982, -0.079294628781881829, -0.079244786121608096, -0.079194943263222406, -0.079145100206849353, +-0.079095256952613546, -0.079045413500638720, -0.078995569851051245, -0.078945726003974842, -0.078895881959534120, -0.078846037717853701, -0.078796193279058180, -0.078746348643272179, +-0.078696503810620308, -0.078646658781226286, -0.078596813555216513, -0.078546968132714695, -0.078497122513845469, -0.078447276698733429, -0.078397430687503197, -0.078347584480279384, +-0.078297738077185736, -0.078247891478348625, -0.078198044683891785, -0.078148197693939825, -0.078098350508617381, -0.078048503128049049, -0.077998655552359478, -0.077948807781673249, +-0.077898959816114124, -0.077849111655808489, -0.077799263300880064, -0.077749414751453486, -0.077699566007653376, -0.077649717069604343, -0.077599867937431025, -0.077550018611258043, +-0.077500169091209117, -0.077450319377410648, -0.077400469469986397, -0.077350619369060958, -0.077300769074758982, -0.077250918587205078, -0.077201067906523882, -0.077151217032839128, +-0.077101365966277216, -0.077051514706961879, -0.077001663255017769, -0.076951811610569493, -0.076901959773741702, -0.076852107744658990, -0.076802255523446022, -0.076752403110226533, +-0.076702550505126921, -0.076652697708270920, -0.076602844719783181, -0.076552991539788340, -0.076503138168411006, -0.076453284605775843, -0.076403430852006571, -0.076353576907229603, +-0.076303722771568702, -0.076253868445148490, -0.076204013928093617, -0.076154159220528692, -0.076104304322578378, -0.076054449234367313, -0.076004593956019231, -0.075954738487660545, +-0.075904882829415016, -0.075855026981407281, -0.075805170943761976, -0.075755314716603739, -0.075705458300057232, -0.075655601694247065, -0.075605744899297014, -0.075555887915333478, +-0.075506030742480232, -0.075456173380861899, -0.075406315830603143, -0.075356458091828601, -0.075306600164662910, -0.075256742049229816, -0.075206883745655775, -0.075157025254064508, +-0.075107166574580692, -0.075057307707328949, -0.075007448652433945, -0.074957589410020314, -0.074907729980212709, -0.074857870363134904, -0.074808010558913299, -0.074758150567671669, +-0.074708290389534665, -0.074658430024626923, -0.074608569473073122, -0.074558708734997883, -0.074508847810524997, -0.074458986699780877, -0.074409125402889284, -0.074359263919974883, +-0.074309402251162324, -0.074259540396576257, -0.074209678356341346, -0.074159816130582229, -0.074109953719422680, -0.074060091122989141, -0.074010228341405374, -0.073960365374796042, +-0.073910502223285796, -0.073860638886999286, -0.073810775366061177, -0.073760911660596132, -0.073711047770727928, -0.073661183696582991, -0.073611319438285083, -0.073561454995958897, +-0.073511590369729055, -0.073461725559720248, -0.073411860566057113, -0.073361995388863455, -0.073312130028265685, -0.073262264484387593, -0.073212398757353844, -0.073162532847289102, +-0.073112666754318018, -0.073062800478565268, -0.073012934020155518, -0.072963067379212557, -0.072913200555862798, -0.072863333550230044, -0.072813466362438961, -0.072763598992614212, +-0.072713731440880461, -0.072663863707362372, -0.072613995792183750, -0.072564127695471034, -0.072514259417347987, -0.072464390957939287, -0.072414522317369612, -0.072364653495763639, +-0.072314784493246020, -0.072264915309941447, -0.072215045945973694, -0.072165176401469230, -0.072115306676551805, -0.072065436771346122, -0.072015566685976848, -0.071965696420568659, +-0.071915825975246220, -0.071865955350134222, -0.071816084545356443, -0.071766213561039349, -0.071716342397306718, -0.071666471054283226, -0.071616599532093567, -0.071566727830862403, +-0.071516855950714414, -0.071466983891773403, -0.071417111654165824, -0.071367239238015454, -0.071317366643446997, -0.071267493870585119, -0.071217620919554511, -0.071167747790479852, +-0.071117874483485818, -0.071068000998696201, -0.071018127336237483, -0.070968253496233438, -0.070918379478808774, -0.070868505284088154, -0.070818630912196256, -0.070768756363257801, +-0.070718881637397438, -0.070669006734738998, -0.070619131655408923, -0.070569256399531016, -0.070519380967229969, -0.070469505358630474, -0.070419629573857223, -0.070369753613034880, +-0.070319877476287276, -0.070270001163740867, -0.070220124675519455, -0.070170248011747718, -0.070120371172550378, -0.070070494158052096, -0.070020616968377594, -0.069970739603651536, +-0.069920862063997752, -0.069870984349542697, -0.069821106460410176, -0.069771228396724894, -0.069721350158611542, -0.069671471746194813, -0.069621593159599399, -0.069571714398949117, +-0.069521835464370449, -0.069471956355987172, -0.069422077073924018, -0.069372197618305667, -0.069322317989256824, -0.069272438186902180, -0.069222558211366456, -0.069172678062773441, +-0.069122797741249617, -0.069072917246918789, -0.069023036579905675, -0.068973155740334968, -0.068923274728331374, -0.068873393544019598, -0.068823512187524333, -0.068773630658969409, +-0.068723748958481282, -0.068673867086183796, -0.068623985042201630, -0.068574102826659503, -0.068524220439682121, -0.068474337881394190, -0.068424455151919528, -0.068374572251384616, +-0.068324689179913273, -0.068274805937630204, -0.068224922524660128, -0.068175038941127739, -0.068125155187157754, -0.068075271262874881, -0.068025387168402937, -0.067975502903868418, +-0.067925618469395141, -0.067875733865107812, -0.067825849091131152, -0.067775964147589879, -0.067726079034608686, -0.067676193752312291, -0.067626308300824542, -0.067576422680271891, +-0.067526536890778199, -0.067476650932468157, -0.067426764805466485, -0.067376878509897903, -0.067326992045887130, -0.067277105413557983, -0.067227218613036960, -0.067177331644447891, +-0.067127444507915496, -0.067077557203564481, -0.067027669731519579, -0.066977782091905511, -0.066927894284846981, -0.066878006310467822, -0.066828118168894543, -0.066778229860250962, +-0.066728341384661813, -0.066678452742251801, -0.066628563933145674, -0.066578674957468123, -0.066528785815342995, -0.066478896506896798, -0.066429007032253365, -0.066379117391537401, +-0.066329227584873654, -0.066279337612386829, -0.066229447474201661, -0.066179557170442882, -0.066129666701234324, -0.066079776066702484, -0.066029885266971192, -0.065979994302165196, +-0.065930103172409216, -0.065880211877827985, -0.065830320418546209, -0.065780428794688636, -0.065730537006379111, -0.065680645053744130, -0.065630752936907524, -0.065580860655994055, +-0.065530968211128415, -0.065481075602435365, -0.065431182830039625, -0.065381289894065039, -0.065331396794638119, -0.065281503531882709, -0.065231610105923529, -0.065181716516885341, +-0.065131822764892849, -0.065081928850070803, -0.065032034772543934, -0.064982140532436089, -0.064932246129873777, -0.064882351564980859, -0.064832456837882066, -0.064782561948702119, +-0.064732666897565766, -0.064682771684597754, -0.064632876309922815, -0.064582980773664783, -0.064533085075950208, -0.064483189216902909, -0.064433293196647631, -0.064383397015309124, +-0.064333500673012134, -0.064283604169881381, -0.064233707506040738, -0.064183810681616701, -0.064133913696733144, -0.064084016551514814, -0.064034119246086429, -0.063984221780572753, +-0.063934324155098518, -0.063884426369788472, -0.063834528424766473, -0.063784630320159047, -0.063734732056090038, -0.063684833632684207, -0.063634935050066274, -0.063585036308361029, +-0.063535137407693176, -0.063485238348186590, -0.063435339129967808, -0.063385439753160674, -0.063335540217889938, -0.063285640524280345, -0.063235740672456658, -0.063185840662543624, +-0.063135940494665976, -0.063086040168947602, -0.063036139685515011, -0.062986239044492076, -0.062936338246003531, -0.062886437290174152, -0.062836536177128671, -0.062786634906991851, +-0.062736733479888451, -0.062686831895942319, -0.062636930155280005, -0.062587028258025354, -0.062537126204303142, -0.062487223994238117, -0.062437321627955025, -0.062387419105578629, +-0.062337516427232800, -0.062287613593044071, -0.062237710603136306, -0.062187807457634262, -0.062137904156662697, -0.062088000700346375, -0.062038097088810050, -0.061988193322178489, +-0.061938289400575552, -0.061888385324127777, -0.061838481092959037, -0.061788576707194100, -0.061738672166957720, -0.061688767472374659, -0.061638862623569678, -0.061588957620667538, +-0.061539052463792127, -0.061489147153069960, -0.061439241688624933, -0.061389336070581800, -0.061339430299065328, -0.061289524374200273, -0.061239618296111416, -0.061189712064922623, +-0.061139805680760433, -0.061089899143748738, -0.061039992454012287, -0.060990085611675855, -0.060940178616864217, -0.060890271469702120, -0.060840364170314354, -0.060790456718824791, +-0.060740549115359969, -0.060690641360043776, -0.060640733453000979, -0.060590825394356347, -0.060540917184234655, -0.060491008822760664, -0.060441100310058268, -0.060391191646254012, +-0.060341282831471776, -0.060291373865836329, -0.060241464749472444, -0.060191555482504905, -0.060141646065058472, -0.060091736497257929, -0.060041826779227155, -0.059991916911092701, +-0.059942006892978454, -0.059892096725009190, -0.059842186407309685, -0.059792275940004712, -0.059742365323219054, -0.059692454557077473, -0.059642543641703877, -0.059592632577224809, +-0.059542721363764158, -0.059492810001446704, -0.059442898490397224, -0.059392986830740499, -0.059343075022601305, -0.059293163066103535, -0.059243250961373749, -0.059193338708535832, +-0.059143426307714575, -0.059093513759034745, -0.059043601062621132, -0.058993688218598517, -0.058943775227091683, -0.058893862088224523, -0.058843948802123590, -0.058794035368912791, +-0.058744121788716901, -0.058694208061660709, -0.058644294187868998, -0.058594380167466549, -0.058544466000578145, -0.058494551687327694, -0.058444637227841753, -0.058394722622244218, +-0.058344807870659869, -0.058294892973213511, -0.058244977930029911, -0.058195062741233872, -0.058145147406949288, -0.058095231927302725, -0.058045316302418083, -0.057995400532420145, +-0.057945484617433707, -0.057895568557583557, -0.057845652352994485, -0.057795736003791287, -0.057745819510097857, -0.057695902872040773, -0.057645986089743924, -0.057596069163332111, +-0.057546152092930125, -0.057496234878662761, -0.057446317520654808, -0.057396400019030180, -0.057346482373915431, -0.057296564585434480, -0.057246646653712117, -0.057196728578873139, +-0.057146810361042334, -0.057096892000344505, -0.057046973496904449, -0.056997054850846073, -0.056947136062295942, -0.056897217131377978, -0.056847298058216963, -0.056797378842937708, +-0.056747459485665008, -0.056697539986523653, -0.056647620345638451, -0.056597700563133312, -0.056547780639134806, -0.056497860573766857, -0.056447940367154247, -0.056398020019421791, +-0.056348099530694279, -0.056298178901096528, -0.056248258130752432, -0.056198337219788584, -0.056148416168328892, -0.056098494976498159, -0.056048573644421187, -0.055998652172222788, +-0.055948730560027755, -0.055898808807960894, -0.055848886916146125, -0.055798964884710020, -0.055749042713776509, -0.055699120403470394, -0.055649197953916471, -0.055599275365239557, +-0.055549352637564456, -0.055499429771015969, -0.055449506765718019, -0.055399583621797192, -0.055349660339377410, -0.055299736918583475, -0.055249813359540198, -0.055199889662372388, +-0.055149965827204848, -0.055100041854161515, -0.055050117743368959, -0.055000193494951111, -0.054950269109032779, -0.054900344585738767, -0.054850419925193905, -0.054800495127522983, +-0.054750570192850831, -0.054700645121301364, -0.054650719913001168, -0.054600794568074179, -0.054550869086645200, -0.054500943468839047, -0.054451017714780538, -0.054401091824594482, +-0.054351165798404814, -0.054301239636338115, -0.054251313338518313, -0.054201386905070238, -0.054151460336118687, -0.054101533631788490, -0.054051606792204457, -0.054001679817491405, +-0.053951752707773269, -0.053901825463176636, -0.053851898083825442, -0.053801970569844502, -0.053752042921358635, -0.053702115138492663, -0.053652187221371397, -0.053602259170119668, +-0.053552330984861410, -0.053502402665723203, -0.053452474212828990, -0.053402545626303595, -0.053352616906271834, -0.053302688052858531, -0.053252759066188503, -0.053202829946385699, +-0.053152900693576699, -0.053102971307885452, -0.053053041789436775, -0.053003112138355499, -0.052953182354766440, -0.052903252438794422, -0.052853322390564270, -0.052803392210199931, +-0.052753461897828001, -0.052703531453572407, -0.052653600877557993, -0.052603670169909571, -0.052553739330751977, -0.052503808360210034, -0.052453877258408568, -0.052403946025471528, +-0.052354014661525505, -0.052304083166694444, -0.052254151541103182, -0.052204219784876535, -0.052154287898139341, -0.052104355881016425, -0.052054423733631734, -0.052004491456111870, +-0.051954559048580776, -0.051904626511163288, -0.051854693843984230, -0.051804761047168441, -0.051754828120840750, -0.051704895065125982, -0.051654961880148093, -0.051605028566033689, +-0.051555095122906715, -0.051505161550891999, -0.051455227850114381, -0.051405294020698690, -0.051355360062769764, -0.051305425976451553, -0.051255491761870664, -0.051205557419151046, +-0.051155622948417537, -0.051105688349794967, -0.051055753623408182, -0.051005818769382004, -0.050955883787841286, -0.050905948678909969, -0.050856013442714662, -0.050806078079379327, +-0.050756142589028802, -0.050706206971787911, -0.050656271227781512, -0.050606335357134428, -0.050556399359971506, -0.050506463236416700, -0.050456526986596618, -0.050406590610635224, +-0.050356654108657355, -0.050306717480787848, -0.050256780727151548, -0.050206843847873300, -0.050156906843077047, -0.050106969712889422, -0.050057032457434369, -0.050007095076836733, +-0.049957157571221364, -0.049907219940713100, -0.049857282185436780, -0.049807344305517261, -0.049757406301078493, -0.049707468172247096, -0.049657529919147028, -0.049607591541903133, +-0.049557653040640262, -0.049507714415483260, -0.049457775666556972, -0.049407836793986241, -0.049357897797895033, -0.049307958678409966, -0.049258019435655005, -0.049208080069754995, +-0.049158140580834786, -0.049108200969019224, -0.049058261234433159, -0.049008321377200556, -0.048958381397448035, -0.048908441295299560, -0.048858501070879981, -0.048808560724314151, +-0.048758620255726921, -0.048708679665243136, -0.048658738952987654, -0.048608798119084438, -0.048558857163660110, -0.048508916086838647, -0.048458974888744892, -0.048409033569503691, +-0.048359092129239917, -0.048309150568078406, -0.048259208886143136, -0.048209267083560728, -0.048159325160455152, -0.048109383116951260, -0.048059440953173917, -0.048009498669247967, +-0.047959556265298277, -0.047909613741449690, -0.047859671097826184, -0.047809728334554387, -0.047759785451758269, -0.047709842449562681, -0.047659899328092496, -0.047609956087472559, +-0.047560012727827734, -0.047510069249282874, -0.047460125651961955, -0.047410181935991613, -0.047360238101495811, -0.047310294148599413, -0.047260350077427286, -0.047210405888104275, +-0.047160461580755257, -0.047110517155504197, -0.047060572612477723, -0.047010627951799826, -0.046960683173595356, -0.046910738277989181, -0.046860793265106157, -0.046810848135071151, +-0.046760902888009027, -0.046710957524043757, -0.046661012043301982, -0.046611066445907672, -0.046561120731985699, -0.046511174901660922, -0.046461228955058213, -0.046411282892302425, +-0.046361336713517547, -0.046311390418830214, -0.046261444008364405, -0.046211497482244984, -0.046161550840596824, -0.046111604083544783, -0.046061657211213733, -0.046011710223728540, +-0.045961763121213181, -0.045911815903794305, -0.045861868571595889, -0.045811921124742798, -0.045761973563359912, -0.045712025887572089, -0.045662078097504194, -0.045612130193281114, +-0.045562182175026812, -0.045512234042867951, -0.045462285796928500, -0.045412337437333333, -0.045362388964207329, -0.045312440377675345, -0.045262491677862261, -0.045212542864892062, +-0.045162593938891396, -0.045112644899984240, -0.045062695748295481, -0.045012746483949977, -0.044962797107072607, -0.044912847617788243, -0.044862898016221758, -0.044812948302497144, +-0.044762998476741041, -0.044713048539077448, -0.044663098489631237, -0.044613148328527273, -0.044563198055890436, -0.044513247671845613, -0.044463297176517667, -0.044413346570030585, +-0.044363395852511034, -0.044313445024082986, -0.044263494084871326, -0.044213543035000934, -0.044163591874596682, -0.044113640603783449, -0.044063689222685234, -0.044013737731428679, +-0.043963786130137773, -0.043913834418937411, -0.043863882597952458, -0.043813930667307800, -0.043763978627128317, -0.043714026477538886, -0.043664074218663501, -0.043614121850628823, +-0.043564169373558836, -0.043514216787578421, -0.043464264092812468, -0.043414311289385860, -0.043364358377423466, -0.043314405357049293, -0.043264452228389996, -0.043214498991569567, +-0.043164545646712883, -0.043114592193944846, -0.043064638633390322, -0.043014684965174202, -0.042964731189421367, -0.042914777306255820, -0.042864823315804219, -0.042814869218190561, +-0.042764915013539725, -0.042714960701976605, -0.042665006283626079, -0.042615051758613041, -0.042565097127062371, -0.042515142389098072, -0.042465187544846808, -0.042415232594432570, +-0.042365277537980257, -0.042315322375614743, -0.042265367107460927, -0.042215411733643689, -0.042165456254287040, -0.042115500669517636, -0.042065544979459475, -0.042015589184237458, +-0.041965633283976470, -0.041915677278801390, -0.041865721168837126, -0.041815764954208551, -0.041765808635039682, -0.041715852211457176, -0.041665895683585044, -0.041615939051548166, +-0.041565982315471442, -0.041516025475479765, -0.041466068531698028, -0.041416111484251110, -0.041366154333263030, -0.041316197078860452, -0.041266239721167386, -0.041216282260308712, +-0.041166324696409337, -0.041116367029594154, -0.041066409259988050, -0.041016451387715036, -0.040966493412901775, -0.040916535335672286, -0.040866577156151461, -0.040816618874464188, +-0.040766660490735372, -0.040716702005089901, -0.040666743417652682, -0.040616784728547711, -0.040566825937901667, -0.040516867045838553, -0.040466908052483277, -0.040416948957960733, +-0.040366989762395812, -0.040317030465913416, -0.040267071068637562, -0.040217111570694915, -0.040167151972209485, -0.040117192273306179, -0.040067232474109891, -0.040017272574745529, +-0.039967312575337977, -0.039917352476012143, -0.039867392276892046, -0.039817431978104355, -0.039767471579773082, -0.039717511082023128, -0.039667550484979400, -0.039617589788766797, +-0.039567628993510212, -0.039517668099334560, -0.039467707106363853, -0.039417746014724760, -0.039367784824541306, -0.039317823535938386, -0.039267862149040912, -0.039217900663973779, +-0.039167939080861899, -0.039117977399829279, -0.039068015621002608, -0.039018053744505891, -0.038968091770464043, -0.038918129699001963, -0.038868167530244566, -0.038818205264316744, +-0.038768242901343411, -0.038718280441448587, -0.038668317884758940, -0.038618355231398505, -0.038568392481492179, -0.038518429635164872, -0.038468466692541496, -0.038418503653746952, +-0.038368540518905259, -0.038318577288143099, -0.038268613961584499, -0.038218650539354367, -0.038168687021577601, -0.038118723408379122, -0.038068759699883839, -0.038018795896216651, +-0.037968831997501590, -0.037918868003865333, -0.037868903915431906, -0.037818939732326216, -0.037768975454673184, -0.037719011082597710, -0.037669046616224708, -0.037619082055679091, +-0.037569117401084880, -0.037519152652568763, -0.037469187810254767, -0.037419222874267799, -0.037369257844732773, -0.037319292721774602, -0.037269327505518202, -0.037219362196087596, +-0.037169396793609470, -0.037119431298207849, -0.037069465710007653, -0.037019500029133796, -0.036969534255711187, -0.036919568389864738, -0.036869602431719370, -0.036819636381399110, +-0.036769670239030647, -0.036719704004738007, -0.036669737678646112, -0.036619771260879869, -0.036569804751564197, -0.036519838150824012, -0.036469871458784234, -0.036419904675568888, +-0.036369937801304673, -0.036319970836115607, -0.036270003780126618, -0.036220036633462613, -0.036170069396248526, -0.036120102068609258, -0.036070134650668849, -0.036020167142553995, +-0.035970199544388723, -0.035920231856297946, -0.035870264078406593, -0.035820296210839583, -0.035770328253721825, -0.035720360207178253, -0.035670392071332893, -0.035620423846312435, +-0.035570455532240919, -0.035520487129243265, -0.035470518637444395, -0.035420550056969230, -0.035370581387942683, -0.035320612630488801, -0.035270643784734275, -0.035220674850803137, +-0.035170705828820314, -0.035120736718910722, -0.035070767521199288, -0.035020798235810939, -0.034970828862870597, -0.034920859402502294, -0.034870889854832728, -0.034820920219985937, +-0.034770950498086844, -0.034720980689260376, -0.034671010793631461, -0.034621040811325013, -0.034571070742465966, -0.034521100587178354, -0.034471130345588873, -0.034421160017821577, +-0.034371189604001373, -0.034321219104253196, -0.034271248518701974, -0.034221277847472628, -0.034171307090689197, -0.034121336248478393, -0.034071365320964248, -0.034021394308271682, +-0.033971423210525639, -0.033921452027851032, -0.033871480760372795, -0.033821509408215857, -0.033771537971504263, -0.033721566450364705, -0.033671594844921236, -0.033621623155298777, +-0.033571651381622263, -0.033521679524016613, -0.033471707582606772, -0.033421735557517658, -0.033371763448873319, -0.033321791256800459, -0.033271818981423118, -0.033221846622866237, +-0.033171874181254730, -0.033121901656713547, -0.033071929049367600, -0.033021956359340951, -0.032971983586760296, -0.032922010731749683, -0.032872037794434039, -0.032822064774938306, +-0.032772091673387412, -0.032722118489906284, -0.032672145224619857, -0.032622171877652185, -0.032572198449129973, -0.032522224939177259, -0.032472251347918986, -0.032422277675480081, +-0.032372303921985486, -0.032322330087560129, -0.032272356172328064, -0.032222382176415987, -0.032172408099947959, -0.032122433943048916, -0.032072459705843784, -0.032022485388457499, +-0.031972510991015002, -0.031922536513641235, -0.031872561956460231, -0.031822587319598715, -0.031772612603180726, -0.031722637807331207, -0.031672662932175091, -0.031622687977837322, +-0.031572712944442832, -0.031522737832116558, -0.031472762640982560, -0.031422787371167535, -0.031372812022795543, -0.031322836595991520, -0.031272861090880406, -0.031222885507587138, +-0.031172909846236659, -0.031122934106953017, -0.031072958289862927, -0.031022982395090441, -0.030973006422760501, -0.030923030372998043, -0.030873054245928008, -0.030823078041675341, +-0.030773101760364976, -0.030723125402120969, -0.030673148967070036, -0.030623172455336231, -0.030573195867044496, -0.030523219202319773, -0.030473242461286999, -0.030423265644071117, +-0.030373288750797076, -0.030323311781588921, -0.030273334736573378, -0.030223357615874497, -0.030173380419617219, -0.030123403147926494, -0.030073425800927259, -0.030023448378744461, +-0.029973470881502151, -0.029923493309327056, -0.029873515662343225, -0.029823537940675604, -0.029773560144449141, -0.029723582273788775, -0.029673604328819457, -0.029623626309666126, +-0.029573648216452839, -0.029523670049306321, -0.029473691808350629, -0.029423713493710708, -0.029373735105511504, -0.029323756643877957, -0.029273778108935024, -0.029223799500806755, +-0.029173820819619875, -0.029123842065498444, -0.029073863238567407, -0.029023884338951714, -0.028973905366776308, -0.028923926322166140, -0.028873947205246157, -0.028823968016140417, +-0.028773988754975645, -0.028724009421875901, -0.028674030016966130, -0.028624050540371287, -0.028574070992216320, -0.028524091372626171, -0.028474111681725797, -0.028424131919639255, +-0.028374152086493271, -0.028324172182411907, -0.028274192207520112, -0.028224212161942836, -0.028174232045805030, -0.028124251859231647, -0.028074271602346743, -0.028024291275277047, +-0.027974310878146627, -0.027924330411080427, -0.027874349874203400, -0.027824369267640502, -0.027774388591516676, -0.027724407845956880, -0.027674427031085178, -0.027624446147028296, +-0.027574465193910300, -0.027524484171856139, -0.027474503080990767, -0.027424521921439141, -0.027374540693326205, -0.027324559396776922, -0.027274578031915350, -0.027224596598868223, +-0.027174615097759602, -0.027124633528714442, -0.027074651891857700, -0.027024670187314331, -0.026974688415209284, -0.026924706575666629, -0.026874724668813094, -0.026824742694772748, +-0.026774760653670546, -0.026724778545631440, -0.026674796370780390, -0.026624814129242350, -0.026574831821142272, -0.026524849446604229, -0.026474867005754948, -0.026424884498718500, +-0.026374901925619840, -0.026324919286583929, -0.026274936581735717, -0.026224953811200161, -0.026174970975101339, -0.026124988073565971, -0.026075005106718136, -0.026025022074682790, +-0.025975038977584887, -0.025925055815549384, -0.025875072588701246, -0.025825089297165423, -0.025775105941065992, -0.025725122520529681, -0.025675139035680566, -0.025625155486643601, +-0.025575171873543748, -0.025525188196505968, -0.025475204455655216, -0.025425220651116451, -0.025375236783013750, -0.025325252851473842, -0.025275268856620802, -0.025225284798579592, +-0.025175300677475167, -0.025125316493432494, -0.025075332246576525, -0.025025347937031341, -0.024975363564923674, -0.024925379130377599, -0.024875394633518077, -0.024825410074470068, +-0.024775425453358531, -0.024725440770308433, -0.024675456025444732, -0.024625471218891505, -0.024575486350775486, -0.024525501421220751, -0.024475516430352263, -0.024425531378294982, +-0.024375546265173874, -0.024325561091113904, -0.024275575856240027, -0.024225590560676323, -0.024175605204549529, -0.024125619787983724, -0.024075634311103870, -0.024025648774034930, +-0.023975663176901869, -0.023925677519829647, -0.023875691802942346, -0.023825706026366703, -0.023775720190226796, -0.023725734294647586, -0.023675748339754041, -0.023625762325671127, +-0.023575776252523804, -0.023525790120437044, -0.023475803929534918, -0.023425817679944172, -0.023375831371788881, -0.023325845005194010, -0.023275858580284529, -0.023225872097185400, +-0.023175885556021590, -0.023125898956917180, -0.023075912299998912, -0.023025925585390860, -0.022975938813217994, -0.022925951983605284, -0.022875965096677692, -0.022825978152560187, +-0.022775991151377739, -0.022726004093254423, -0.022676016978316987, -0.022626029806689506, -0.022576042578496949, -0.022526055293864290, -0.022476067952916491, -0.022426080555778521, +-0.022376093102575351, -0.022326105593431057, -0.022276118028472392, -0.022226130407823428, -0.022176142731609141, -0.022126154999954496, -0.022076167212984461, -0.022026179370824010, +-0.021976191473597223, -0.021926203521430845, -0.021876215514448960, -0.021826227452776535, -0.021776239336538539, -0.021726251165859949, -0.021676262940865727, -0.021626274661680850, +-0.021576286328429398, -0.021526297941238118, -0.021476309500231092, -0.021426321005533294, -0.021376332457269692, -0.021326343855565262, -0.021276355200544970, -0.021226366492333788, +-0.021176377731055806, -0.021126388916837765, -0.021076400049803750, -0.021026411130078738, -0.020976422157787698, -0.020926433133055602, -0.020876444056007422, -0.020826454926767247, +-0.020776465745461818, -0.020726476512215229, -0.020676487227152446, -0.020626497890398447, -0.020576508502078202, -0.020526519062316687, -0.020476529571238872, -0.020426540028968848, +-0.020376550435633359, -0.020326560791356498, -0.020276571096263230, -0.020226581350478539, -0.020176591554127390, -0.020126601707334765, -0.020076611810224746, -0.020026621862924088, +-0.019976631865556874, -0.019926641818248082, -0.019876651721122681, -0.019826661574305654, -0.019776671377921974, -0.019726681132096614, -0.019676690836953663, -0.019626700492619872, +-0.019576710099219331, -0.019526719656877016, -0.019476729165717899, -0.019426738625866961, -0.019376748037449178, -0.019326757400589523, -0.019276766715412088, -0.019226775982043622, +-0.019176785200608216, -0.019126794371230847, -0.019076803494036496, -0.019026812569150130, -0.018976821596696739, -0.018926830576800401, -0.018876839509587878, -0.018826848395183254, +-0.018776857233711509, -0.018726866025297623, -0.018676874770066569, -0.018626883468143330, -0.018576892119652882, -0.018526900724719315, -0.018476909283469387, -0.018426917796027183, +-0.018376926262517686, -0.018326934683065871, -0.018276943057796723, -0.018226951386835215, -0.018176959670305439, -0.018126967908334155, -0.018076976101045448, -0.018026984248564304, +-0.017976992351015696, -0.017927000408524612, -0.017877008421216024, -0.017827016389214915, -0.017777024312645377, -0.017727032191634167, -0.017677040026305376, -0.017627047816783984, +-0.017577055563194971, -0.017527063265663324, -0.017477070924314015, -0.017427078539272032, -0.017377086110661463, -0.017327093638609063, -0.017277101123238933, -0.017227108564676050, +-0.017177115963045397, -0.017127123318471951, -0.017077130631080698, -0.017027137900995731, -0.016977145128343803, -0.016927152313249018, -0.016877159455836351, -0.016827166556230785, +-0.016777173614557300, -0.016727180630940884, -0.016677187605506513, -0.016627194538378288, -0.016577201429682966, -0.016527208279544636, -0.016477215088088290, -0.016427221855438903, +-0.016377228581721463, -0.016327235267060949, -0.016277241911582349, -0.016227248515409756, -0.016177255078669930, -0.016127261601486968, -0.016077268083985848, -0.016027274526291560, +-0.015977280928529087, -0.015927287290823409, -0.015877293613298628, -0.015827299896081497, -0.015777306139296118, -0.015727312343067474, -0.015677318507520549, -0.015627324632780330, +-0.015577330718971796, -0.015527336766219937, -0.015477342774648847, -0.015427348744385288, -0.015377354675553359, -0.015327360568278043, -0.015277366422684324, -0.015227372238897190, +-0.015177378017041625, -0.015127383757241725, -0.015077389459624257, -0.015027395124313314, -0.014977400751433882, -0.014927406341110951, -0.014877411893469502, -0.014827417408634523, +-0.014777422886731001, -0.014727428327883034, -0.014677433732217386, -0.014627439099858150, -0.014577444430930319, -0.014527449725558876, -0.014477454983868808, -0.014427460205985104, +-0.014377465392032749, -0.014327470542135842, -0.014277475656421148, -0.014227480735012763, -0.014177485778035678, -0.014127490785614876, -0.014077495757875350, -0.014027500694942083, +-0.013977505596939176, -0.013927510463993393, -0.013877515296228835, -0.013827520093770489, -0.013777524856743341, -0.013727529585272381, -0.013677534279482598, -0.013627538939498980, +-0.013577543565445625, -0.013527548157449300, -0.013477552715634104, -0.013427557240125027, -0.013377561731047058, -0.013327566188525182, -0.013277570612684392, -0.013227575003649676, +-0.013177579361545134, -0.013127583686497531, -0.013077587978630970, -0.013027592238070438, -0.012977596464940925, -0.012927600659367423, -0.012877604821474917, -0.012827608951387511, +-0.012777613049231971, -0.012727617115132400, -0.012677621149213785, -0.012627625151601117, -0.012577629122419387, -0.012527633061793582, -0.012477636969848696, -0.012427640846708830, +-0.012377644692500750, -0.012327648507348557, -0.012277652291377244, -0.012227656044711798, -0.012177659767477214, -0.012127663459798481, -0.012077667121799701, -0.012027670753607641, +-0.011977674355346402, -0.011927677927140980, -0.011877681469116361, -0.011827684981397541, -0.011777688464109506, -0.011727691917377251, -0.011677695341324878, -0.011627698736079155, +-0.011577702101764184, -0.011527705438504959, -0.011477708746426471, -0.011427712025653710, -0.011377715276311668, -0.011327718498525340, -0.011277721692418826, -0.011227724858118897, +-0.011177727995749655, -0.011127731105436094, -0.011077734187303205, -0.011027737241475979, -0.010977740268079411, -0.010927743267237604, -0.010877746239077328, -0.010827749183722686, +-0.010777752101298671, -0.010727754991930275, -0.010677757855742492, -0.010627760692860314, -0.010577763503408734, -0.010527766287511857, -0.010477769045296454, -0.010427771776886627, +-0.010377774482407372, -0.010327777161983680, -0.010277779815740545, -0.010227782443802959, -0.010177785046295918, -0.010127787623343527, -0.010077790175072555, -0.010027792701607108, +-0.009977795203072178, -0.009927797679592761, -0.009877800131293850, -0.009827802558300437, -0.009777804960736630, -0.009727807338729199, -0.009677809692402251, -0.009627812021880778, +-0.009577814327289774, -0.009527816608754234, -0.009477818866399155, -0.009427821100349525, -0.009377823310729457, -0.009327825497665717, -0.009277827661282415, -0.009227829801704543, +-0.009177831919057097, -0.009127834013465071, -0.009077836085053460, -0.009027838133946371, -0.008977840160270574, -0.008927842164150176, -0.008877844145710174, -0.008827846105075561, +-0.008777848042371333, -0.008727849957722486, -0.008677851851254012, -0.008627853723090022, -0.008577855573357284, -0.008527857402179907, -0.008477859209682888, -0.008427860995991221, +-0.008377862761229902, -0.008327864505523924, -0.008277866228998286, -0.008227867931777095, -0.008177869613987121, -0.008127871275752473, -0.008077872917198147, -0.008027874538449140, +-0.007977876139630444, -0.007927877720867060, -0.007877879282283094, -0.007827880824005316, -0.007777882346157837, -0.007727883848865652, -0.007677885332253757, -0.007627886796447149, +-0.007577888241570824, -0.007527889667749779, -0.007477891075108121, -0.007427892463772623, -0.007377893833867394, -0.007327895185517431, -0.007277896518847729, -0.007227897833983287, +-0.007177899131049100, -0.007127900410169277, -0.007077901671470591, -0.007027902915077151, -0.006977904141113954, -0.006927905349705996, -0.006877906540978275, -0.006827907715055787, +-0.006777908872063531, -0.006727910012125614, -0.006677911135368810, -0.006627912241917228, -0.006577913331895865, -0.006527914405429720, -0.006477915462643789, -0.006427916503663068, +-0.006377917528612556, -0.006327918537616363, -0.006277919530801261, -0.006227920508291360, -0.006177921470211658, -0.006127922416687153, -0.006077923347842841, -0.006027924263803722, +-0.005977925164693903, -0.005927926050640159, -0.005877926921766601, -0.005827927778198225, -0.005777928620060029, -0.005727929447477013, -0.005677930260574172, -0.005627931059476505, +-0.005577931844308124, -0.005527932615195800, -0.005477933372263645, -0.005427934115636657, -0.005377934845439833, -0.005327935561798172, -0.005277936264836673, -0.005227936954680332, +-0.005177937631453262, -0.005127938295282235, -0.005077938946291362, -0.005027939584605642, -0.004977940210350073, -0.004927940823649654, -0.004877941424629382, -0.004827942013413369, +-0.004777942590128389, -0.004727943154898552, -0.004677943707848858, -0.004627944249104304, -0.004577944778789890, -0.004527945297030614, -0.004477945803951475, -0.004427946299676583, +-0.004377946784332712, -0.004327947258043976, -0.004277947720935371, -0.004227948173131897, -0.004177948614758552, -0.004127949045940336, -0.004077949466801360, -0.004027949877468397, +-0.003977950278065560, -0.003927950668717847, -0.003877951049550258, -0.003827951420687791, -0.003777951782255445, -0.003727952134378220, -0.003677952477180227, -0.003627952810788240, +-0.003577953135326371, -0.003527953450919620, -0.003477953757692985, -0.003427954055771466, -0.003377954345280061, -0.003327954626343770, -0.003277954899086705, -0.003227955163635641, +-0.003177955420114689, -0.003127955668648848, -0.003077955909363118, -0.003027956142382499, -0.002977956367831988, -0.002927956585835699, -0.002877956796520407, -0.002827957000010223, +-0.002777957196430146, -0.002727957385905176, -0.002677957568560313, -0.002627957744520555, -0.002577957913910904, -0.002527958076855469, -0.002477958233481027, -0.002427958383911690, +-0.002377958528272457, -0.002327958666688328, -0.002277958799284302, -0.002227958926185378, -0.002177959047516558, -0.002127959163401952, -0.002077959273968336, -0.002027959379339822, +-0.001977959479641409, -0.001927959574998098, -0.001877959665534888, -0.001827959751376778, -0.001777959832647881, -0.001727959909474973, -0.001677959981982165, -0.001627960050294457, +-0.001577960114536849, -0.001527960174834340, -0.001477960231311931, -0.001427960284094622, -0.001377960333306523, -0.001327960379074412, -0.001277960421522400, -0.001227960460775487, +-0.001177960496958673, -0.001127960530196958, -0.001077960560615341, -0.001027960588337934, -0.000977960613491515, -0.000927960636200194, -0.000877960656588971, -0.000827960674782847, +-0.000777960690906820, -0.000727960705085893, -0.000677960717445063, -0.000627960728108444, -0.000577960737202810, -0.000527960744852275, -0.000477960751181838, -0.000427960756316500, +-0.000377960760381259, -0.000327960763501117, -0.000277960765801072, -0.000227960767405237, -0.000177960768440389, -0.000127960769030639, -0.000077960769300987 +}; + + diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.ini b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.ini new file mode 100644 index 000000000..062223e0f --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_linear_interp_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.uvoptx new file mode 100644 index 000000000..ab04e9cd5 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.uvoptx @@ -0,0 +1,908 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_linear_interp_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
1834
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
1830
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_linear_interp_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
2664
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
2660
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_linear_interp_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
2982
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
2978
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_linear_interp_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
2982
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
2978
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_linear_interp_example_f32.c + + \\arm_linear_interp_example\arm_linear_interp_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\math_helper.c + math_helper.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\arm_linear_interp_data.c + arm_linear_interp_data.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + .\arm_linear_interp_example_f32.c + arm_linear_interp_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 4 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.uvprojx new file mode 100644 index 000000000..25b68d01e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example.uvprojx @@ -0,0 +1,1781 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_linear_interp_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_linear_interp_data.c + 1 + .\arm_linear_interp_data.c + + + arm_linear_interp_example_f32.c + 1 + .\arm_linear_interp_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_linear_interp_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_linear_interp_data.c + 1 + .\arm_linear_interp_data.c + + + arm_linear_interp_example_f32.c + 1 + .\arm_linear_interp_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_linear_interp_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_linear_interp_data.c + 1 + .\arm_linear_interp_data.c + + + arm_linear_interp_example_f32.c + 1 + .\arm_linear_interp_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_linear_interp_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_linear_interp_data.c + 1 + .\arm_linear_interp_data.c + + + arm_linear_interp_example_f32.c + 1 + .\arm_linear_interp_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example_f32.c new file mode 100644 index 000000000..4da9e59e1 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/arm_linear_interp_example_f32.c @@ -0,0 +1,204 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_linear_interp_example_f32.c +* +* Description: Example code demonstrating usage of sin function +* and uses linear interpolation to get higher precision +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup LinearInterpExample Linear Interpolate Example + * + * CMSIS DSP Software Library -- Linear Interpolate Example + * + * Description + * This example demonstrates usage of linear interpolate modules and fast math modules. + * Method 1 uses fast math sine function to calculate sine values using cubic interpolation and method 2 uses + * linear interpolation function and results are compared to reference output. + * Example shows linear interpolation function can be used to get higher precision compared to fast math sin calculation. + * + * \par Block Diagram: + * \par + * \image html linearInterpExampleMethod1.gif "Method 1: Sine caluclation using fast math" + * \par + * \image html linearInterpExampleMethod2.gif "Method 2: Sine caluclation using interpolation function" + * + * \par Variables Description: + * \par + * \li \c testInputSin_f32 points to the input values for sine calculation + * \li \c testRefSinOutput32_f32 points to the reference values caculated from sin() matlab function + * \li \c testOutput points to output buffer calculation from cubic interpolation + * \li \c testLinIntOutput points to output buffer calculation from linear interpolation + * \li \c snr1 Signal to noise ratio for reference and cubic interpolation output + * \li \c snr2 Signal to noise ratio for reference and linear interpolation output + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_sin_f32() + * - arm_linear_interp_f32() + * + * Refer + * \link arm_linear_interp_example_f32.c \endlink + * + */ + + +/** \example arm_linear_interp_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +#define SNR_THRESHOLD 90 +#define TEST_LENGTH_SAMPLES 10 +#define XSPACING (0.00005f) + +/* ---------------------------------------------------------------------- +* Test input data for F32 SIN function +* Generated by the MATLAB rand() function +* randn('state', 0) +* xi = (((1/4.18318581819710)* randn(blockSize, 1) * 2* pi)); +* --------------------------------------------------------------------*/ +float32_t testInputSin_f32[TEST_LENGTH_SAMPLES] = +{ + -0.649716504673081170, -2.501723745497831200, + 0.188250329003310100, 0.432092748487532540, + -1.722010988459680800, 1.788766476323060600, + 1.786136060975809500, -0.056525543169408797, + 0.491596272728153760, 0.262309671126153390 +}; + +/*------------------------------------------------------------------------------ +* Reference out of SIN F32 function for Block Size = 10 +* Calculated from sin(testInputSin_f32) +*------------------------------------------------------------------------------*/ +float32_t testRefSinOutput32_f32[TEST_LENGTH_SAMPLES] = +{ + -0.604960695383043530, -0.597090287967934840, + 0.187140422442966500, 0.418772124875992690, + -0.988588831792106880, 0.976338412038794010, + 0.976903856413481100, -0.056495446835214236, + 0.472033731854734240, 0.259311907228582830 +}; + +/*------------------------------------------------------------------------------ +* Method 1: Test out Buffer Calculated from Cubic Interpolation +*------------------------------------------------------------------------------*/ +float32_t testOutput[TEST_LENGTH_SAMPLES]; + +/*------------------------------------------------------------------------------ +* Method 2: Test out buffer Calculated from Linear Interpolation +*------------------------------------------------------------------------------*/ +float32_t testLinIntOutput[TEST_LENGTH_SAMPLES]; + +/*------------------------------------------------------------------------------ +* External table used for linear interpolation +*------------------------------------------------------------------------------*/ +extern float arm_linear_interep_table[188495]; + +/* ---------------------------------------------------------------------- +* Global Variables for caluclating SNR's for Method1 & Method 2 +* ------------------------------------------------------------------- */ +float32_t snr1; +float32_t snr2; + +/* ---------------------------------------------------------------------------- +* Calculation of Sine values from Cubic Interpolation and Linear interpolation +* ---------------------------------------------------------------------------- */ +int32_t main(void) +{ + uint32_t i; + arm_status status; + + arm_linear_interp_instance_f32 S = {188495, -3.141592653589793238, XSPACING, &arm_linear_interep_table[0]}; + + /*------------------------------------------------------------------------------ + * Method 1: Test out Calculated from Cubic Interpolation + *------------------------------------------------------------------------------*/ + for(i=0; i< TEST_LENGTH_SAMPLES; i++) + { + testOutput[i] = arm_sin_f32(testInputSin_f32[i]); + } + + /*------------------------------------------------------------------------------ + * Method 2: Test out Calculated from Cubic Interpolation and Linear interpolation + *------------------------------------------------------------------------------*/ + + for(i=0; i< TEST_LENGTH_SAMPLES; i++) + { + testLinIntOutput[i] = arm_linear_interp_f32(&S, testInputSin_f32[i]); + } + + /*------------------------------------------------------------------------------ + * SNR calculation for method 1 + *------------------------------------------------------------------------------*/ + snr1 = arm_snr_f32(testRefSinOutput32_f32, testOutput, 2); + + /*------------------------------------------------------------------------------ + * SNR calculation for method 2 + *------------------------------------------------------------------------------*/ + snr2 = arm_snr_f32(testRefSinOutput32_f32, testLinIntOutput, 2); + + /*------------------------------------------------------------------------------ + * Initialise status depending on SNR calculations + *------------------------------------------------------------------------------*/ + if ( snr2 > snr1) + { + status = ARM_MATH_SUCCESS; + } + else + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +} + + /** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/math_helper.c b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/math_helper.c new file mode 100644 index 000000000..4b0ee1f67 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/math_helper.c @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 b +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param[in] pRef Pointer to the reference buffer + * @param[in] pTest Pointer to the test buffer + * @param[in] buffSize total number of samples + * @return SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to outputbuffer + * @param[in] numSamples number of samples in the input buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param[in] num_adds number of additions + * @return guard bits + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Apply guard bits to buffer + * @param[in,out] pIn pointer to input buffer + * @param[in] numSamples number of samples in the input buffer + * @param[in] guard_bits guard bits + * @return none + */ + +void arm_apply_guard_bits (float32_t *pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param[in] numShifts number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param[in,out] pIn input buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if (pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if ( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff --git a/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/math_helper.h b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/math_helper.h new file mode 100644 index 000000000..46b0af3ad --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_linear_interp_example/math_helper.h @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_matrix_example/Abstract.txt new file mode 100644 index 000000000..6bc6ae845 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_matrix_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.ini b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.ini new file mode 100644 index 000000000..2bb2434d0 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_matrix_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.uvoptx new file mode 100644 index 000000000..2a4346e82 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.uvoptx @@ -0,0 +1,896 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_matrix_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
1752
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
1748
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_matrix_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
2490
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
2486
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_matrix_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
2822
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
2818
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_matrix_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 230 + 1 +
2822
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\230 +
+ + 1 + 0 + 227 + 1 +
2818
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_matrix_example_f32.c + + \\arm_matrix_example\arm_matrix_example_f32.c\227 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\math_helper.c + math_helper.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\arm_matrix_example_f32.c + arm_matrix_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 3 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.uvprojx new file mode 100644 index 000000000..626450a78 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example.uvprojx @@ -0,0 +1,1761 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_matrix_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_matrix_example_f32.c + 1 + .\arm_matrix_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_matrix_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_matrix_example_f32.c + 1 + .\arm_matrix_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_matrix_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_matrix_example_f32.c + 1 + .\arm_matrix_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_matrix_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_matrix_example_f32.c + 1 + .\arm_matrix_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example_f32.c new file mode 100644 index 000000000..078b54724 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/arm_matrix_example_f32.c @@ -0,0 +1,233 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_matrix_example_f32.c +* +* Description: Example code demonstrating least square fit to data +* using matrix functions +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup MatrixExample Matrix Example + * + * \par Description: + * \par + * Demonstrates the use of Matrix Transpose, Matrix Muliplication, and Matrix Inverse + * functions to apply least squares fitting to input data. Least squares fitting is + * the procedure for finding the best-fitting curve that minimizes the sum of the + * squares of the offsets (least square error) from a given set of data. + * + * \par Algorithm: + * \par + * The linear combination of parameters considered is as follows: + * \par + * A * X = B, where \c X is the unknown value and can be estimated + * from \c A & \c B. + * \par + * The least squares estimate \c X is given by the following equation: + * \par + * X = Inverse(AT * A) * AT * B + * + * \par Block Diagram: + * \par + * \image html matrixExample.gif + * + * \par Variables Description: + * \par + * \li \c A_f32 input matrix in the linear combination equation + * \li \c B_f32 output matrix in the linear combination equation + * \li \c X_f32 unknown matrix estimated using \c A_f32 & \c B_f32 matrices + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_mat_init_f32() + * - arm_mat_trans_f32() + * - arm_mat_mult_f32() + * - arm_mat_inverse_f32() + * + * Refer + * \link arm_matrix_example_f32.c \endlink + * + */ + + +/** \example arm_matrix_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +#define SNR_THRESHOLD 90 + +/* -------------------------------------------------------------------------------- +* Test input data(Cycles) taken from FIR Q15 module for differant cases of blockSize +* and tapSize +* --------------------------------------------------------------------------------- */ + +const float32_t B_f32[4] = +{ + 782.0, 7577.0, 470.0, 4505.0 +}; + +/* -------------------------------------------------------------------------------- +* Formula to fit is C1 + C2 * numTaps + C3 * blockSize + C4 * numTaps * blockSize +* -------------------------------------------------------------------------------- */ + +const float32_t A_f32[16] = +{ + /* Const, numTaps, blockSize, numTaps*blockSize */ + 1.0, 32.0, 4.0, 128.0, + 1.0, 32.0, 64.0, 2048.0, + 1.0, 16.0, 4.0, 64.0, + 1.0, 16.0, 64.0, 1024.0, +}; + + +/* ---------------------------------------------------------------------- +* Temporary buffers for storing intermediate values +* ------------------------------------------------------------------- */ +/* Transpose of A Buffer */ +float32_t AT_f32[16]; +/* (Transpose of A * A) Buffer */ +float32_t ATMA_f32[16]; +/* Inverse(Transpose of A * A) Buffer */ +float32_t ATMAI_f32[16]; +/* Test Output Buffer */ +float32_t X_f32[4]; + +/* ---------------------------------------------------------------------- +* Reference ouput buffer C1, C2, C3 and C4 taken from MATLAB +* ------------------------------------------------------------------- */ +const float32_t xRef_f32[4] = {73.0, 8.0, 21.25, 2.875}; + +float32_t snr; + + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + + arm_matrix_instance_f32 A; /* Matrix A Instance */ + arm_matrix_instance_f32 AT; /* Matrix AT(A transpose) instance */ + arm_matrix_instance_f32 ATMA; /* Matrix ATMA( AT multiply with A) instance */ + arm_matrix_instance_f32 ATMAI; /* Matrix ATMAI(Inverse of ATMA) instance */ + arm_matrix_instance_f32 B; /* Matrix B instance */ + arm_matrix_instance_f32 X; /* Matrix X(Unknown Matrix) instance */ + + uint32_t srcRows, srcColumns; /* Temporary variables */ + arm_status status; + + /* Initialise A Matrix Instance with numRows, numCols and data array(A_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&A, srcRows, srcColumns, (float32_t *)A_f32); + + /* Initialise Matrix Instance AT with numRows, numCols and data array(AT_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&AT, srcRows, srcColumns, AT_f32); + + /* calculation of A transpose */ + status = arm_mat_trans_f32(&A, &AT); + + + /* Initialise ATMA Matrix Instance with numRows, numCols and data array(ATMA_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&ATMA, srcRows, srcColumns, ATMA_f32); + + /* calculation of AT Multiply with A */ + status = arm_mat_mult_f32(&AT, &A, &ATMA); + + /* Initialise ATMAI Matrix Instance with numRows, numCols and data array(ATMAI_f32) */ + srcRows = 4; + srcColumns = 4; + arm_mat_init_f32(&ATMAI, srcRows, srcColumns, ATMAI_f32); + + /* calculation of Inverse((Transpose(A) * A) */ + status = arm_mat_inverse_f32(&ATMA, &ATMAI); + + /* calculation of (Inverse((Transpose(A) * A)) * Transpose(A)) */ + status = arm_mat_mult_f32(&ATMAI, &AT, &ATMA); + + /* Initialise B Matrix Instance with numRows, numCols and data array(B_f32) */ + srcRows = 4; + srcColumns = 1; + arm_mat_init_f32(&B, srcRows, srcColumns, (float32_t *)B_f32); + + /* Initialise X Matrix Instance with numRows, numCols and data array(X_f32) */ + srcRows = 4; + srcColumns = 1; + arm_mat_init_f32(&X, srcRows, srcColumns, X_f32); + + /* calculation ((Inverse((Transpose(A) * A)) * Transpose(A)) * B) */ + status = arm_mat_mult_f32(&ATMA, &B, &X); + + /* Comparison of reference with test output */ + snr = arm_snr_f32((float32_t *)xRef_f32, X_f32, 4); + + /*------------------------------------------------------------------------------ + * Initialise status depending on SNR calculations + *------------------------------------------------------------------------------*/ + if ( snr > SNR_THRESHOLD) + { + status = ARM_MATH_SUCCESS; + } + else + { + status = ARM_MATH_TEST_FAILURE; + } + + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +} + + /** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/math_helper.c b/CMSIS/DSP/Examples/ARM/arm_matrix_example/math_helper.c new file mode 100644 index 000000000..4b0ee1f67 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/math_helper.c @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 b +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param[in] pRef Pointer to the reference buffer + * @param[in] pTest Pointer to the test buffer + * @param[in] buffSize total number of samples + * @return SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to outputbuffer + * @param[in] numSamples number of samples in the input buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param[in] num_adds number of additions + * @return guard bits + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Apply guard bits to buffer + * @param[in,out] pIn pointer to input buffer + * @param[in] numSamples number of samples in the input buffer + * @param[in] guard_bits guard bits + * @return none + */ + +void arm_apply_guard_bits (float32_t *pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param[in] numShifts number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param[in,out] pIn input buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if (pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if ( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff --git a/CMSIS/DSP/Examples/ARM/arm_matrix_example/math_helper.h b/CMSIS/DSP/Examples/ARM/arm_matrix_example/math_helper.h new file mode 100644 index 000000000..46b0af3ad --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_matrix_example/math_helper.h @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/Abstract.txt new file mode 100644 index 000000000..0f68db7f4 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_signal_converge_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_data.c b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_data.c new file mode 100644 index 000000000..ddb1278e8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_data.c @@ -0,0 +1,269 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_signal_converge_data.c +* +* Description: Test input data for Floating point LMS Norm FIR filter +* +* Target Processor: Cortex-M4/Cortex-M3/Cortex-M0 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +** Test input data for Floating point LMS Norm FIR filter +** Generated by the MATLAB randn() function +** ------------------------------------------------------------------- */ + +float32_t testInput_f32[1536] = +{ +-0.432565, -1.665584, 0.125332, 0.287676, -1.146471, 1.190915, 1.189164, -0.037633, +0.327292, 0.174639, -0.186709, 0.725791, -0.588317, 2.183186, -0.136396, 0.113931, +1.066768, 0.059281, -0.095648, -0.832349, 0.294411, -1.336182, 0.714325, 1.623562, +-0.691776, 0.857997, 1.254001, -1.593730, -1.440964, 0.571148, -0.399886, 0.689997, +0.815622, 0.711908, 1.290250, 0.668601, 1.190838, -1.202457, -0.019790, -0.156717, +-1.604086, 0.257304, -1.056473, 1.415141, -0.805090, 0.528743, 0.219321, -0.921902, +-2.170674, -0.059188, -1.010634, 0.614463, 0.507741, 1.692430, 0.591283, -0.643595, +0.380337, -1.009116, -0.019511, -0.048221, 0.000043, -0.317859, 1.095004, -1.873990, +0.428183, 0.895638, 0.730957, 0.577857, 0.040314, 0.677089, 0.568900, -0.255645, +-0.377469, -0.295887, -1.475135, -0.234004, 0.118445, 0.314809, 1.443508, -0.350975, +0.623234, 0.799049, 0.940890, -0.992092, 0.212035, 0.237882, -1.007763, -0.742045, +1.082295, -0.131500, 0.389880, 0.087987, -0.635465, -0.559573, 0.443653, -0.949904, +0.781182, 0.568961, -0.821714, -0.265607, -1.187777, -2.202321, 0.986337, -0.518635, +0.327368, 0.234057, 0.021466, -1.003944, -0.947146, -0.374429, -1.185886, -1.055903, +1.472480, 0.055744, -1.217317, -0.041227, -1.128344, -1.349278, -0.261102, 0.953465, +0.128644, 0.656468, -1.167819, -0.460605, -0.262440, -1.213152, -1.319437, 0.931218, +0.011245, -0.645146, 0.805729, 0.231626, -0.989760, 1.339586, 0.289502, 1.478917, +1.138028, -0.684139, -1.291936, -0.072926, -0.330599, -0.843628, 0.497770, 1.488490, +-0.546476, -0.846758, -0.246337, 0.663024, -0.854197, -1.201315, -0.119869, -0.065294, +0.485296, -0.595491, -0.149668, -0.434752, -0.079330, 1.535152, -0.606483, -1.347363, +0.469383, -0.903567, 0.035880, -0.627531, 0.535398, 0.552884, -0.203690, -2.054325, +0.132561, 1.592941, 1.018412, -1.580402, -0.078662, -0.681657, -1.024553, -1.234353, +0.288807, -0.429303, 0.055801, -0.367874, -0.464973, 0.370961, 0.728283, 2.112160, +-1.357298, -1.022610, 1.037834, -0.389800, -1.381266, 0.315543, 1.553243, 0.707894, +1.957385, 0.504542, 1.864529, -0.339812, -1.139779, -0.211123, 1.190245, -1.116209, +0.635274, -0.601412, 0.551185, -1.099840, 0.085991, -2.004563, -0.493088, 0.462048, +-0.321005, 1.236556, -0.631280, -2.325211, -1.231637, 1.055648, -0.113224, 0.379224, +0.944200, -2.120427, -0.644679, -0.704302, -1.018137, -0.182082, 1.521013, -0.038439, +1.227448, -0.696205, 0.007524, -0.782893, 0.586939, -0.251207, 0.480136, 0.668155, +-0.078321, 0.889173, 2.309287, 0.524639, -0.011787, 0.913141, 0.055941, -1.107070, +0.485498, -0.005005, -0.276218, 1.276452, 1.863401, -0.522559, 0.103424, -0.807649, +0.680439, -2.364590, 0.990115, 0.218899, 0.261662, 1.213444, -0.274667, -0.133134, +-1.270500, -1.663606, -0.703554, 0.280880, -0.541209, -1.333531, 1.072686, -0.712085, +-0.011286, -0.000817, -0.249436, 0.396575, -0.264013, -1.664011, -1.028975, 0.243095, +-1.256590, -0.347183, -0.941372, -1.174560, -1.021142, -0.401667, 0.173666, -0.116118, +1.064119, -0.245386, -1.517539, 0.009734, 0.071373, 0.316536, 0.499826, 1.278084, +-0.547816, 0.260808, -0.013177, -0.580264, 2.136308, -0.257617, -1.409528, 1.770101, +0.325546, -1.119040, 0.620350, 1.269782, -0.896043, 0.135175, -0.139040, -1.163395, +1.183720, -0.015430, 0.536219, -0.716429, -0.655559, 0.314363, 0.106814, 1.848216, +-0.275106, 2.212554, 1.508526, -1.945079, -1.680543, -0.573534, -0.185817, 0.008934, +0.836950, -0.722271, -0.721490, -0.201181, -0.020464, 0.278890, 1.058295, 0.621673, +-1.750615, 0.697348, 0.811486, 0.636345, 1.310080, 0.327098, -0.672993, -0.149327, +-2.449018, 0.473286, 0.116946, -0.591104, -0.654708, -1.080662, -0.047731, 0.379345, +-0.330361, -0.499898, -0.035979, -0.174760, -0.957265, 1.292548, 0.440910, 1.280941, +-0.497730, -1.118717, 0.807650, 0.041200, -0.756209, -0.089129, -2.008850, 1.083918, +-0.981191, -0.688489, 1.339479, -0.909243, -0.412858, -0.506163, 1.619748, 0.080901, +-1.081056, -1.124518, 1.735676, 1.937459, 1.635068, -1.255940, -0.213538, -0.198932, +0.307499, -0.572325, -0.977648, -0.446809, 1.082092, 2.372648, 0.229288, -0.266623, +0.701672, -0.487590, 1.862480, 1.106851, -1.227566, -0.669885, 1.340929, 0.388083, +0.393059, -1.707334, 0.227859, 0.685633, -0.636790, -1.002606, -0.185621, -1.054033, +-0.071539, 0.279198, 1.373275, 0.179841, -0.542017, 1.634191, 0.825215, 0.230761, +0.671634, -0.508078, 0.856352, 0.268503, 0.624975, -1.047338, 1.535670, 0.434426, +-1.917136, 0.469940, 1.274351, 0.638542, 1.380782, 1.319843, -0.909429, -2.305605, +1.788730, 0.390798, 0.020324, -0.405977, -1.534895, 0.221373, -1.374479, -0.839286, +-0.208643, 0.755913, 0.375734, -1.345413, 1.481876, 0.032736, 1.870453, -1.208991, +-0.782632, -0.767299, -0.107200, -0.977057, -0.963988, -2.379172, -0.838188, 0.257346, +-0.183834, -0.167615, -0.116989, 0.168488, -0.501206, -0.705076, 0.508165, -0.420922, +0.229133, -0.959497, -0.146043, 0.744538, -0.890496, 0.139062, -0.236144, -0.075459, +-0.358572, -2.077635, -0.143546, 1.393341, 0.651804, -0.377134, -0.661443, 0.248958, +-0.383516, -0.528480, 0.055388, 1.253769, -2.520004, 0.584856, -1.008064, 0.944285, +-2.423957, -0.223831, 0.058070, -0.424614, -0.202918, -1.513077, -1.126352, -0.815002, +0.366614, -0.586107, 1.537409, 0.140072, -1.862767, -0.454193, -0.652074, 0.103318, +-0.220632, -0.279043, -0.733662, -0.064534, -1.444004, 0.612340, -1.323503, -0.661577, +-0.146115, 0.248085, -0.076633, 1.738170, 1.621972, 0.626436, 0.091814, -0.807607, +-0.461337, -1.405969, -0.374530, -0.470911, 1.751296, 0.753225, 0.064989, -0.292764, +0.082823, 0.766191, 2.236850, 0.326887, 0.863304, 0.679387, 0.554758, 1.001630, +1.259365, 0.044151, -0.314138, 0.226708, 0.996692, 1.215912, -0.542702, 0.912228, +-0.172141, -0.335955, 0.541487, 0.932111, -0.570253, -1.498605, -0.050346, 0.553025, +0.083498, 1.577524, -0.330774, 0.795155, -0.784800, -1.263121, 0.666655, -1.392632, +-1.300562, -0.605022, -1.488565, 0.558543, -0.277354, -1.293685, -0.888435, -0.986520, +-0.071618, -2.414591, -0.694349, -1.391389, 0.329648, 0.598544, 0.147175, -0.101439, +-2.634981, 0.028053, -0.876310, -0.265477, -0.327578, -1.158247, 0.580053, 0.239756, +-0.350885, 0.892098, 1.578299, -1.108174, -0.025931, -1.110628, 0.750834, 0.500167, +-0.517261, -0.559209, -0.753371, 0.925813, -0.248520, -0.149835, -1.258415, 0.312620, +2.690277, 0.289696, -1.422803, 0.246786, -1.435773, 0.148573, -1.693073, 0.719188, +1.141773, 1.551936, 1.383630, -0.758092, 0.442663, 0.911098, -1.074086, 0.201762, +0.762863, -1.288187, -0.952962, 0.778175, -0.006331, 0.524487, 1.364272, 0.482039, +-0.787066, 0.751999, -0.166888, -0.816228, 2.094065, 0.080153, -0.937295, 0.635739, +1.682028, 0.593634, 0.790153, 0.105254, -0.158579, 0.870907, -0.194759, 0.075474, +-0.526635, -0.685484, -0.268388, -1.188346, 0.248579, 0.102452, -0.041007, -2.247582, +-0.510776, 0.249243, 0.369197, 0.179197, -0.037283, -1.603310, 0.339372, -0.131135, +0.485190, 0.598751, -0.086031, 0.325292, -0.335143, -0.322449, -0.382374, -0.953371, +0.233576, 1.235245, -0.578532, -0.501537, 0.722864, 0.039498, 1.541279, -1.701053, +-1.033741, -0.763708, 2.176426, 0.431612, -0.443765, 0.029996, -0.315671, 0.977846, +0.018295, 0.817963, 0.702341, -0.231271, -0.113690, 0.127941, -0.799410, -0.238612, +-0.089463, -1.023264, 0.937538, -1.131719, -0.710702, -1.169501, 1.065437, -0.680394, +-1.725773, 0.813200, 1.441867, 0.672272, 0.138665, -0.859534, -0.752251, 1.229615, +1.150754, -0.608025, 0.806158, 0.217133, -0.373461, -0.832030, 0.286866, -1.818892, +-1.573051, 2.015666, -0.071982, 2.628909, -0.243317, 0.173276, 0.923207, -0.178553, +-0.521705, 1.431962, -0.870117, 0.807542, -0.510635, 0.743514, 0.847898, -0.829901, +0.532994, 1.032848, -1.052024, 0.362114, -0.036787, -1.227636, -0.275099, -0.160435, +-1.083575, -1.954213, -0.909487, -0.005579, -1.723490, 1.263077, -0.600433, -2.063925, +0.110911, 1.487614, 0.053002, 0.161981, -0.026878, 0.173576, 0.882168, 0.182294, +0.755295, 0.508035, 0.131880, 0.280104, -0.982848, -0.944087, -0.013058, 0.354345, +-0.894709, 0.812111, 0.109537, 2.731644, 0.411079, -1.306862, 0.383806, 0.499504, +-0.510786, 0.234922, -0.597825, 0.020771, 0.419443, 1.191104, 0.771214, -2.644222, +0.285430, 0.826093, -0.008122, 0.858438, 0.774788, 1.305945, 1.231503, 0.958564, +-1.654548, -0.990396, 0.685236, -0.974870, -0.606726, 0.686794, 0.020049, 1.063801, +-1.341050, 0.479510, -1.633974, -1.442665, 0.293781, -0.140364, -1.130341, -0.292538, +-0.582536, -0.896348, 0.248601, -1.489663, 0.313509, -2.025084, 0.528990, 0.343471, +0.758193, -0.691940, 0.680179, -1.072541, 0.899772, -2.123092, 0.284712, -0.733323, +-0.773376, 0.151842, -0.336843, 0.970761, -0.107236, 1.013492, -0.475347, 0.068948, +0.398592, 1.116326, 0.620451, -0.287674, -1.371773, -0.685868, 0.331685, -0.997722, +0.291418, 1.107078, 0.244959, 0.164976, 0.406231, 1.215981, 1.448424, -1.025137, +0.205418, 0.588882, -0.264024, 2.495318, 0.855948, -0.850954, 0.811879, 0.700242, +0.759938, -1.712909, 1.537021, -1.609847, 1.109526, -1.109704, 0.385469, 0.965231, +0.818297, 0.037049, -0.926012, -0.111919, -0.803030, -1.665006, -0.901401, 0.588350, +0.554159, -0.415173, 0.061795, 0.457432, 0.199014, 0.257558, 2.080730, -2.277237, +0.339022, 0.289894, 0.662261, -0.580860, 0.887752, 0.171871, 0.848821, 0.963769, +1.321918, -0.064345, 1.317053, 0.228017, -1.429637, -0.149701, -0.504968, -1.729141, +-0.417472, -0.614969, 0.720777, 0.339364, 0.882845, 0.284245, -0.145541, -0.089646, +0.289161, 1.164831, 0.805729, -1.355643, 0.120893, -0.222178, 0.571732, -0.300140, +1.134277, -0.179356, -1.467067, 1.395346, 0.440836, 0.565384, -0.693623, 0.833869, +-2.237378, 1.097644, -0.001617, -1.614573, -1.228727, 0.207405, 0.220942, -1.006073, +-0.453067, 1.399453, -0.461964, 0.032716, 0.798783, 0.896816, 0.137892, -1.619146, +-1.646606, 0.428707, -0.737231, 0.564926, -1.384167, 0.460268, 0.629384, 0.379847, +-1.013330, -0.347243, 0.441912, -1.590240, -0.701417, -1.077601, 1.002220, 1.729481, +0.709032, -0.747897, 0.228862, -0.223497, -0.853275, 0.345627, 0.109764, -1.133039, +-0.683124, -0.277856, 0.654790, -1.248394, -0.597539, -0.481813, 0.983372, 1.762121, +1.427402, 0.911763, 0.326823, 0.069619, -1.499763, -0.418223, -0.021037, 0.228425, +-1.008196, -0.664622, 0.558177, -1.188542, -0.775481, 0.271042, 1.534976, -1.052283, +0.625559, -0.797626, -0.313522, -0.602210, 1.259060, 0.858484, -2.105292, -0.360937, +0.553557, -1.556384, -0.206666, -0.425568, 0.493778, -0.870908, 0.079828, -0.521619, +-1.413861, -0.384293, -0.457922, -0.291471, -0.301224, -1.588594, 1.094287, 1.324167, +-0.126480, -0.737164, 0.213719, -0.400529, 0.064938, -1.757996, 1.686748, 0.327400, +0.715967, 1.598648, -2.064741, -0.743632, 0.176185, 0.527839, -0.553153, 0.298280, +-1.226607, -0.189676, -0.301713, 0.956956, -0.533366, -0.901082, -0.892552, 0.278717, +-0.745807, 1.603464, 0.574270, 0.320655, -0.151383, 0.315762, 1.343703, -2.237832, +1.292906, -0.378459, 0.002521, 0.884641, 0.582450, -1.614244, -1.503666, 0.573586, +-0.910537, -1.631277, -0.359138, -0.397616, -1.161307, -1.109838, 0.290672, -1.910239, +1.314768, 0.665319, -0.275115, -0.023022, -0.907976, -1.043657, 0.373516, 0.901532, +1.278539, -0.128456, 0.612821, 1.956518, 2.266326, -0.373959, 2.238039, -0.159580, +-0.703281, 0.563477, -0.050296, 1.163593, 0.658808, -1.550089, -3.029118, 0.540578, +-1.008998, 0.908047, 1.582303, -0.979088, 1.007902, 0.158491, -0.586927, 1.574082, +-0.516649, 1.227800, 1.583876, -2.088950, 2.949545, 1.356125, 1.050068, -0.767170, +-0.257653, -1.371845, -1.267656, -0.894948, 0.589089, 1.842629, 1.347967, -0.491253, +-2.177568, 0.237000, -0.735411, -1.779419, 0.448030, 0.581214, 0.856607, -0.266263, +-0.417470, -0.205806, -0.174323, 0.217577, 1.684295, 0.119528, 0.650667, 2.080061, +-0.339225, 0.730113, 0.293969, -0.849109, -2.533858, -2.378941, -0.346276, -0.610937, +-0.408192, -1.415611, 0.227122, 0.207974, -0.719718, 0.757762, -1.643135, -1.056813, +-0.251662, -1.298441, 1.233255, 1.494625, 0.235938, -1.404359, 0.658791, -2.556613, +-0.534945, 3.202525, 0.439198, -1.149901, 0.886765, -0.283386, 1.035336, -0.364878, +1.341987, 1.008872, 0.213874, -0.299264, 0.255849, -0.190826, -0.079060, 0.699851, +-0.796540, -0.801284, -0.007599, -0.726810, -1.490902, 0.870335, -0.265675, -1.566695, +-0.394636, -0.143855, -2.334247, -1.357539, -1.815689, 1.108422, -0.142115, 1.112757, +0.559264, 0.478370, -0.679385, 0.284967, -1.332935, -0.723980, -0.663600, 0.198443, +-1.794868, -1.387673, 0.197768, 1.469328, 0.366493, -0.442775, -0.048563, 0.077709, +1.957910, -0.072848, 0.938810, -0.079608, -0.800959, 0.309424, 1.051826, -1.664211, +-1.090792, -0.191731, 0.463401, -0.924147, -0.649657, 0.622893, -1.335107, 1.047689, +0.863327, -0.642411, 0.660010, 1.294116, 0.314579, 0.859573, 0.128670, 0.016568, +-0.072801, -0.994310, -0.747358, -0.030814, 0.988355, -0.599017, 1.476644, -0.813801, +0.645040, -1.309919, -0.867425, -0.474233, 0.222417, 1.871323, 0.110001, -0.411341, +0.511242, -1.199117, -0.096361, 0.445817, -0.295825, -0.167996, 0.179543, 0.421118, +1.677678, 1.996949, 0.696964, -1.366382, 0.363045, -0.567044, -1.044154, 0.697139, +0.484026, -0.193751, -0.378095, -0.886374, -1.840197, -1.628195, -1.173789, -0.415411, +0.175088, 0.229433, -1.240889, 0.700004, 0.426877, 1.454803, -0.510186, -0.006657, +-0.525496, 0.717698, 1.088374, 0.500552, 2.771790, -0.160309, 0.429489, -1.966817, +-0.546019, -1.888395, -0.107952, -1.316144, -0.672632, -0.902365, -0.154798, 0.947242, +1.550375, 0.429040, -0.560795, 0.179304, -0.771509, -0.943390, -1.407569, -1.906131, +-0.065293, 0.672149, 0.206147, -0.008124, 0.020042, -0.558447, 1.886079, -0.219975, +-1.414395, -0.302811, -0.569574, -0.121495, -0.390171, -0.844287, -1.737757, -0.449520, +-1.547933, -0.095776, 0.907714, 2.369602, 0.519768, 0.410525, 1.052585, 0.428784, +1.295088, -0.186053, 0.130733, -0.657627, -0.759267, -0.595170, 0.812400, 0.069541, +-1.833687, 1.827363, 0.654075, -1.544769, -0.375109, 0.207688, -0.765615, -0.106355, +0.338769, 1.033461, -1.404822, -1.030570, -0.643372, 0.170787, 1.344839, 1.936273, +0.741336, 0.811980, -0.142808, -0.099858, -0.800131, 0.493249, 1.237574, 1.295951, +-0.278196, 0.217127, 0.630728, -0.548549, 0.229632, 0.355311, 0.521284, -0.615971, +1.345803, 0.974922, -2.377934, -1.092319, -0.325710, -2.012228, 1.567660, 0.233337, +0.646420, -1.129412, 0.197038, 1.696870, 0.726034, 0.792526, 0.603357, -0.058405, +-1.108666, 2.144229, -1.352821, 0.457021, 0.391175, 2.073013, -0.323318, 1.468132, +-0.502399, 0.209593, 0.754800, -0.948189, 0.613157, 1.760503, 0.088762, 2.595570, +-0.675470, 2.786804, -0.016827, 0.271651, -0.914102, -1.951371, -0.317418, 0.588333, +0.828996, -1.674851, -1.922293, -0.436662, 0.044974, 2.416609, -0.309892, 0.187583, +0.947699, -0.525703, -1.115605, -1.592320, 1.174844, 0.485144, 1.645480, -0.454233, +1.008768, 2.049403, 0.602020, 0.017860, -1.610426, 1.238752, 0.683587, -0.780716, +0.530979, 2.134498, 0.354361, 0.231700, 1.287980, -0.013488, -1.333345, -0.556343, +0.755597, -0.911854, 1.371684, 0.245580, 0.118845, 0.384690, -0.070152, -0.578309, +0.469308, 1.299687, 1.634798, -0.702809, 0.807253, -1.027451, 1.294496, 0.014930, +0.218705, 1.713188, -2.078805, 0.112917, -1.086491, -1.558311, 0.637406, -0.404576, +-0.403325, 0.084076, -0.435349, -0.562623, 0.878062, -0.814650, -0.258363, 0.493299, +-0.802694, -0.008329, 0.627571, 0.154382, 2.580735, -1.306246, 1.023526, 0.777795, +-0.833884, -0.586663, 0.065664, -0.012342, -0.076987, -1.558587, 1.702607, -0.468984, +0.094619, 0.287071, 0.919354, 0.510136, 0.245440, -1.400519, 0.969571, 1.593698, +-1.437917, -1.534230, -0.074710, 0.081459, -0.843240, -0.564640, -0.028207, -1.243702, +0.733039, 0.059580, 0.149144, 1.595857, -0.777250, 1.550277, 1.055002, -0.166654, +0.314484, 1.419571, 0.327348, 0.475653, 0.398754, -0.072770, 1.314784, 0.978279, +1.722114, -0.412302, 0.565133, 0.739851, 0.220138, 1.312807, 0.629152, -1.107987, +-0.447001, -0.725993, 0.354045, -0.506772, -2.103747, -0.664684, 1.450110, -0.329805, +2.701872, -1.634939, -0.536325, 0.547223, 1.492603, -0.455243, -0.496416, 1.235260, +0.040926, 0.748467, 1.230764, 0.304903, 1.077771, 0.765151, -1.319580, -0.509191, +0.555116, -1.957625, -0.760453, -2.443886, -0.659366, -0.114779, 0.300079, -0.583996, +-3.073745, 1.551042, -0.407369, 1.428095, -1.353242, 0.903970, 0.541671, -0.465020 +}; + + + +/* ---------------------------------------------------------------------- +** Coefficients for 32-tap filter for Floating point LMS FIR filter +* FIR high pass filter with cutoff freq 9.6kHz (transition 9.6KHz to 11.52KHz) +** ------------------------------------------------------------------- */ +float32_t lmsNormCoeff_f32[32] = { +-0.004240, 0.002301, 0.008860, -0.000000, -0.019782, -0.010543, 0.032881, 0.034736, +-0.037374, -0.069586, 0.022397, 0.102169, 0.014185, -0.115908, -0.061648, 0.101018, +0.101018, -0.061648, -0.115908, 0.014185, 0.102169, 0.022397, -0.069586, -0.037374, +0.034736, 0.032881, -0.010543, -0.019782, -0.000000, 0.008860, 0.002301, -0.004240 + +}; + +/* ---------------------------------------------------------------------- +** Coefficients for 32-tap filter for Floating point FIR filter +* FIR low pass filter with cutoff freq 24Hz (transition 24Hz to 240Hz) +** ------------------------------------------------------------------- */ +const float32_t FIRCoeff_f32[32] = { +0.004502, 0.005074, 0.006707, 0.009356, 0.012933, 0.017303, 0.022298, 0.027717, +0.033338, 0.038930, 0.044258, 0.049098, 0.053243, 0.056519, 0.058784, 0.059941, +0.059941, 0.058784, 0.056519, 0.053243, 0.049098, 0.044258, 0.038930, 0.033338, +0.027717, 0.022298, 0.017303, 0.012933, 0.009356, 0.006707, 0.005074, 0.004502 + +}; + diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.ini b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.ini new file mode 100644 index 000000000..0f8663507 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_signal_converge_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.uvoptx new file mode 100644 index 000000000..9b182fff4 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.uvoptx @@ -0,0 +1,908 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_signal_converge_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 256 + 1 +
556
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\256 +
+ + 1 + 0 + 253 + 1 +
552
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\253 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_signal_converge_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 256 + 1 +
1314
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\256 +
+ + 1 + 0 + 253 + 1 +
1310
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\253 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_signal_converge_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 256 + 1 +
1334
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\256 +
+ + 1 + 0 + 253 + 1 +
1330
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\253 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_signal_converge_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 256 + 1 +
1334
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\256 +
+ + 1 + 0 + 253 + 1 +
1330
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_signal_converge_example_f32.c + + \\arm_signal_converge_example\arm_signal_converge_example_f32.c\253 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\math_helper.c + math_helper.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\arm_signal_converge_data.c + arm_signal_converge_data.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + .\arm_signal_converge_example_f32.c + arm_signal_converge_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 4 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.uvprojx new file mode 100644 index 000000000..7d5419212 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example.uvprojx @@ -0,0 +1,1781 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_signal_converge_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_signal_converge_data.c + 1 + .\arm_signal_converge_data.c + + + arm_signal_converge_example_f32.c + 1 + .\arm_signal_converge_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_signal_converge_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_signal_converge_data.c + 1 + .\arm_signal_converge_data.c + + + arm_signal_converge_example_f32.c + 1 + .\arm_signal_converge_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_signal_converge_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_signal_converge_data.c + 1 + .\arm_signal_converge_data.c + + + arm_signal_converge_example_f32.c + 1 + .\arm_signal_converge_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_signal_converge_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + math_helper.c + 1 + .\math_helper.c + + + arm_signal_converge_data.c + 1 + .\arm_signal_converge_data.c + + + arm_signal_converge_example_f32.c + 1 + .\arm_signal_converge_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example_f32.c new file mode 100644 index 000000000..ae25ce91c --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/arm_signal_converge_example_f32.c @@ -0,0 +1,259 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_signal_converge_example_f32.c +* +* Description: Example code demonstrating convergence of an adaptive +* filter. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. + * -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup SignalConvergence Signal Convergence Example + * + * \par Description: + * \par + * Demonstrates the ability of an adaptive filter to "learn" the transfer function of + * a FIR lowpass filter using the Normalized LMS Filter, Finite Impulse + * Response (FIR) Filter, and Basic Math Functions. + * + * \par Algorithm: + * \par + * The figure below illustrates the signal flow in this example. Uniformly distributed white + * noise is passed through an FIR lowpass filter. The output of the FIR filter serves as the + * reference input of the adaptive filter (normalized LMS filter). The white noise is input + * to the adaptive filter. The adaptive filter learns the transfer function of the FIR filter. + * The filter outputs two signals: (1) the output of the internal adaptive FIR filter, and + * (2) the error signal which is the difference between the adaptive filter and the reference + * output of the FIR filter. Over time as the adaptive filter learns the transfer function + * of the FIR filter, the first output approaches the reference output of the FIR filter, + * and the error signal approaches zero. + * \par + * The adaptive filter converges properly even if the input signal has a large dynamic + * range (i.e., varies from small to large values). The coefficients of the adaptive filter + * are initially zero, and then converge over 1536 samples. The internal function test_signal_converge() + * implements the stopping condition. The function checks if all of the values of the error signal have a + * magnitude below a threshold DELTA. + * + * \par Block Diagram: + * \par + * \image html SignalFlow.gif + * + * + * \par Variables Description: + * \par + * \li \c testInput_f32 points to the input data + * \li \c firStateF32 points to FIR state buffer + * \li \c lmsStateF32 points to Normalised Least mean square FIR filter state buffer + * \li \c FIRCoeff_f32 points to coefficient buffer + * \li \c lmsNormCoeff_f32 points to Normalised Least mean square FIR filter coefficient buffer + * \li \c wire1, wir2, wire3 temporary buffers + * \li \c errOutput, err_signal temporary error buffers + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_lms_norm_init_f32() + * - arm_fir_init_f32() + * - arm_fir_f32() + * - arm_lms_norm_f32() + * - arm_scale_f32() + * - arm_abs_f32() + * - arm_sub_f32() + * - arm_min_f32() + * - arm_copy_f32() + * + * Refer + * \link arm_signal_converge_example_f32.c \endlink + * + */ + + +/** \example arm_signal_converge_example_f32.c + */ + +#include "arm_math.h" +#include "math_helper.h" + +/* ---------------------------------------------------------------------- +** Global defines for the simulation +* ------------------------------------------------------------------- */ + +#define TEST_LENGTH_SAMPLES 1536 +#define NUMTAPS 32 +#define BLOCKSIZE 32 +#define DELTA_ERROR 0.000001f +#define DELTA_COEFF 0.0001f +#define MU 0.5f + +#define NUMFRAMES (TEST_LENGTH_SAMPLES / BLOCKSIZE) + +/* ---------------------------------------------------------------------- +* Declare FIR state buffers and structure +* ------------------------------------------------------------------- */ + +float32_t firStateF32[NUMTAPS + BLOCKSIZE]; +arm_fir_instance_f32 LPF_instance; + +/* ---------------------------------------------------------------------- +* Declare LMSNorm state buffers and structure +* ------------------------------------------------------------------- */ + +float32_t lmsStateF32[NUMTAPS + BLOCKSIZE]; +float32_t errOutput[TEST_LENGTH_SAMPLES]; +arm_lms_norm_instance_f32 lmsNorm_instance; + + +/* ---------------------------------------------------------------------- +* Function Declarations for Signal Convergence Example +* ------------------------------------------------------------------- */ + +arm_status test_signal_converge_example( void ); + + +/* ---------------------------------------------------------------------- +* Internal functions +* ------------------------------------------------------------------- */ +arm_status test_signal_converge(float32_t* err_signal, + uint32_t blockSize); + +void getinput(float32_t* input, + uint32_t fr_cnt, + uint32_t blockSize); + +/* ---------------------------------------------------------------------- +* External Declarations for FIR F32 module Test +* ------------------------------------------------------------------- */ +extern float32_t testInput_f32[TEST_LENGTH_SAMPLES]; +extern float32_t lmsNormCoeff_f32[32]; +extern const float32_t FIRCoeff_f32[32]; +extern arm_lms_norm_instance_f32 lmsNorm_instance; + +/* ---------------------------------------------------------------------- +* Declare I/O buffers +* ------------------------------------------------------------------- */ + +float32_t wire1[BLOCKSIZE]; +float32_t wire2[BLOCKSIZE]; +float32_t wire3[BLOCKSIZE]; +float32_t err_signal[BLOCKSIZE]; + +/* ---------------------------------------------------------------------- +* Signal converge test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + uint32_t i; + arm_status status; + uint32_t index; + float32_t minValue; + + /* Initialize the LMSNorm data structure */ + arm_lms_norm_init_f32(&lmsNorm_instance, NUMTAPS, lmsNormCoeff_f32, lmsStateF32, MU, BLOCKSIZE); + + /* Initialize the FIR data structure */ + arm_fir_init_f32(&LPF_instance, NUMTAPS, (float32_t *)FIRCoeff_f32, firStateF32, BLOCKSIZE); + + /* ---------------------------------------------------------------------- + * Loop over the frames of data and execute each of the processing + * functions in the system. + * ------------------------------------------------------------------- */ + + for(i=0; i < NUMFRAMES; i++) + { + /* Read the input data - uniformly distributed random noise - into wire1 */ + arm_copy_f32(testInput_f32 + (i * BLOCKSIZE), wire1, BLOCKSIZE); + + /* Execute the FIR processing function. Input wire1 and output wire2 */ + arm_fir_f32(&LPF_instance, wire1, wire2, BLOCKSIZE); + + /* Execute the LMS Norm processing function*/ + + arm_lms_norm_f32(&lmsNorm_instance, /* LMSNorm instance */ + wire1, /* Input signal */ + wire2, /* Reference Signal */ + wire3, /* Converged Signal */ + err_signal, /* Error Signal, this will become small as the signal converges */ + BLOCKSIZE); /* BlockSize */ + + /* apply overall gain */ + arm_scale_f32(wire3, 5, wire3, BLOCKSIZE); /* in-place buffer */ + } + + status = ARM_MATH_SUCCESS; + + /* ------------------------------------------------------------------------------- + * Test whether the error signal has reached towards 0. + * ----------------------------------------------------------------------------- */ + + arm_abs_f32(err_signal, err_signal, BLOCKSIZE); + arm_min_f32(err_signal, BLOCKSIZE, &minValue, &index); + + if (minValue > DELTA_ERROR) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + * Test whether the filter coefficients have converged. + * ------------------------------------------------------------------- */ + + arm_sub_f32((float32_t *)FIRCoeff_f32, lmsNormCoeff_f32, lmsNormCoeff_f32, NUMTAPS); + + arm_abs_f32(lmsNormCoeff_f32, lmsNormCoeff_f32, NUMTAPS); + arm_min_f32(lmsNormCoeff_f32, NUMTAPS, &minValue, &index); + + if (minValue > DELTA_COEFF) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + * Loop here if the signals did not pass the convergence check. + * This denotes a test failure + * ------------------------------------------------------------------- */ + + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +} + + /** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/math_helper.c b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/math_helper.c new file mode 100644 index 000000000..4b0ee1f67 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/math_helper.c @@ -0,0 +1,466 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 b +* +* Project: CMSIS DSP Library +* +* Title: math_helper.c +* +* Description: Definition of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- +* Include standard header files +* -------------------------------------------------------------------- */ +#include + +/* ---------------------------------------------------------------------- +* Include project header files +* -------------------------------------------------------------------- */ +#include "math_helper.h" + +/** + * @brief Caluclation of SNR + * @param[in] pRef Pointer to the reference buffer + * @param[in] pTest Pointer to the test buffer + * @param[in] buffSize total number of samples + * @return SNR + * The function Caluclates signal to noise ratio for the reference output + * and test output + */ + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize) +{ + float EnergySignal = 0.0, EnergyError = 0.0; + uint32_t i; + float SNR; + int temp; + int *test; + + for (i = 0; i < buffSize; i++) + { + /* Checking for a NAN value in pRef array */ + test = (int *)(&pRef[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + /* Checking for a NAN value in pTest array */ + test = (int *)(&pTest[i]); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + EnergySignal += pRef[i] * pRef[i]; + EnergyError += (pRef[i] - pTest[i]) * (pRef[i] - pTest[i]); + } + + /* Checking for a NAN value in EnergyError */ + test = (int *)(&EnergyError); + temp = *test; + + if (temp == 0x7FC00000) + { + return(0); + } + + + SNR = 10 * log10 (EnergySignal / EnergyError); + + return (SNR); + +} + + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q15 (q15_t * input_buf, uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Converts float to fixed in q12.20 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to outputbuffer + * @param[in] numSamples number of samples in the input buffer + * @return none + * The function converts floating point values to fixed point(q12.20) values + */ + +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1048576.0f corresponds to pow(2, 20) */ + pOut[i] = (q31_t) (pIn[i] * 1048576.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 1.0) + { + pOut[i] = 0x000FFFFF; + } + } +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Compare MATLAB Reference Output and ARM Test output + * @param[in] pIn Pointer to Ref buffer + * @param[in] pOut Pointer to Test buffer + * @param[in] numSamples number of samples in the buffer + * @return maximum difference + */ + +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + int32_t diff, diffCrnt = 0; + uint32_t maxDiff = 0; + + for (i = 0; i < numSamples; i++) + { + diff = pIn[i] - pOut[i]; + diffCrnt = (diff > 0) ? diff : -diff; + + if (diffCrnt > maxDiff) + { + maxDiff = diffCrnt; + } + } + + return(maxDiff); +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q31 (q31_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + +/** + * @brief Provide guard bits for Input buffer + * @param[in,out] input_buf Pointer to input buffer + * @param[in] blockSize block Size + * @param[in] guard_bits guard bits + * @return none + * The function Provides the guard bits for the buffer + * to avoid overflow + */ + +void arm_provide_guard_bits_q7 (q7_t * input_buf, + uint32_t blockSize, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < blockSize; i++) + { + input_buf[i] = input_buf[i] >> guard_bits; + } +} + + + +/** + * @brief Caluclates number of guard bits + * @param[in] num_adds number of additions + * @return guard bits + * The function Caluclates the number of guard bits + * depending on the numtaps + */ + +uint32_t arm_calc_guard_bits (uint32_t num_adds) +{ + uint32_t i = 1, j = 0; + + if (num_adds == 1) + { + return (0); + } + + while (i < num_adds) + { + i = i * 2; + j++; + } + + return (j); +} + +/** + * @brief Apply guard bits to buffer + * @param[in,out] pIn pointer to input buffer + * @param[in] numSamples number of samples in the input buffer + * @param[in] guard_bits guard bits + * @return none + */ + +void arm_apply_guard_bits (float32_t *pIn, + uint32_t numSamples, + uint32_t guard_bits) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + pIn[i] = pIn[i] * arm_calc_2pow(guard_bits); + } +} + +/** + * @brief Calculates pow(2, numShifts) + * @param[in] numShifts number of shifts + * @return pow(2, numShifts) + */ +uint32_t arm_calc_2pow(uint32_t numShifts) +{ + + uint32_t i, val = 1; + + for (i = 0; i < numShifts; i++) + { + val = val * 2; + } + + return(val); +} + + + +/** + * @brief Converts float to fixed q14 + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q14 (float *pIn, q15_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 16384.0f corresponds to pow(2, 14) */ + pOut[i] = (q15_t) (pIn[i] * 16384.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFF; + } + + } + +} + + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q30 (float *pIn, q31_t * pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 1073741824.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 2.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Converts float to fixed q30 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q29 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 1073741824.0f corresponds to pow(2, 30) */ + pOut[i] = (q31_t) (pIn[i] * 536870912.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 4.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + + +/** + * @brief Converts float to fixed q28 format + * @param[in] pIn pointer to input buffer + * @param[out] pOut pointer to output buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_float_to_q28 (float *pIn, q31_t *pOut, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + /* 268435456.0f corresponds to pow(2, 28) */ + pOut[i] = (q31_t) (pIn[i] * 268435456.0f); + + pOut[i] += pIn[i] > 0 ? 0.5 : -0.5; + + if (pIn[i] == (float) 8.0) + { + pOut[i] = 0x7FFFFFFF; + } + } +} + +/** + * @brief Clip the float values to +/- 1 + * @param[in,out] pIn input buffer + * @param[in] numSamples number of samples in the buffer + * @return none + * The function converts floating point values to fixed point values + */ + +void arm_clip_f32 (float *pIn, uint32_t numSamples) +{ + uint32_t i; + + for (i = 0; i < numSamples; i++) + { + if (pIn[i] > 1.0f) + { + pIn[i] = 1.0; + } + else if ( pIn[i] < -1.0f) + { + pIn[i] = -1.0; + } + + } +} + + + + diff --git a/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/math_helper.h b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/math_helper.h new file mode 100644 index 000000000..46b0af3ad --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_signal_converge_example/math_helper.h @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2013 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* +* Title: math_helper.h +* +* Description: Prototypes of all helper functions required. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + + +#include "arm_math.h" + +#ifndef MATH_HELPER_H +#define MATH_HELPER_H + +float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize); +void arm_float_to_q12_20(float *pIn, q31_t * pOut, uint32_t numSamples); +void arm_provide_guard_bits_q15(q15_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_provide_guard_bits_q31(q31_t *input_buf, uint32_t blockSize, uint32_t guard_bits); +void arm_float_to_q14(float *pIn, q15_t *pOut, uint32_t numSamples); +void arm_float_to_q29(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q28(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_float_to_q30(float *pIn, q31_t *pOut, uint32_t numSamples); +void arm_clip_f32(float *pIn, uint32_t numSamples); +uint32_t arm_calc_guard_bits(uint32_t num_adds); +void arm_apply_guard_bits (float32_t * pIn, uint32_t numSamples, uint32_t guard_bits); +uint32_t arm_compare_fixed_q15(q15_t *pIn, q15_t * pOut, uint32_t numSamples); +uint32_t arm_compare_fixed_q31(q31_t *pIn, q31_t *pOut, uint32_t numSamples); +uint32_t arm_calc_2pow(uint32_t guard_bits); +#endif + diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/Abstract.txt new file mode 100644 index 000000000..6d9e7c741 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_sin_cos_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.ini b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.ini new file mode 100644 index 000000000..74ecea723 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_sin_cos_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.uvoptx new file mode 100644 index 000000000..55771f339 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.uvoptx @@ -0,0 +1,884 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_sin_cos_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 158 + 1 +
484
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\158 +
+ + 1 + 0 + 153 + 1 +
470
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\153 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_sin_cos_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 158 + 1 +
1240
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\158 +
+ + 1 + 0 + 153 + 1 +
1226
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\153 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_sin_cos_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 158 + 1 +
1274
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\158 +
+ + 1 + 0 + 153 + 1 +
1260
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\153 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_sin_cos_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 158 + 1 +
1274
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\158 +
+ + 1 + 0 + 153 + 1 +
1260
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_sin_cos_example_f32.c + + \\arm_sin_cos_example\arm_sin_cos_example_f32.c\153 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\arm_sin_cos_example_f32.c + arm_sin_cos_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 2 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.uvprojx new file mode 100644 index 000000000..a2aff9f94 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example.uvprojx @@ -0,0 +1,1741 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_sin_cos_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_sin_cos_example_f32.c + 1 + .\arm_sin_cos_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_sin_cos_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_sin_cos_example_f32.c + 1 + .\arm_sin_cos_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_sin_cos_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_sin_cos_example_f32.c + 1 + .\arm_sin_cos_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_sin_cos_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_sin_cos_example_f32.c + 1 + .\arm_sin_cos_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example_f32.c new file mode 100644 index 000000000..9e65b2c19 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_sin_cos_example/arm_sin_cos_example_f32.c @@ -0,0 +1,161 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 12. March 2014 +* $Revision: V1.4.3 +* +* Project: CMSIS DSP Library +* Title: arm_sin_cos_example_f32.c +* +* Description: Example code demonstrating sin and cos calculation of input signal. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup SinCosExample SineCosine Example + * + * \par Description: + * \par + * Demonstrates the Pythagorean trignometric identity with the use of Cosine, Sine, Vector + * Multiplication, and Vector Addition functions. + * + * \par Algorithm: + * \par + * Mathematically, the Pythagorean trignometric identity is defined by the following equation: + *
sin(x) * sin(x) + cos(x) * cos(x) = 1
+ * where \c x is the angle in radians. + * + * \par Block Diagram: + * \par + * \image html sinCos.gif + * + * \par Variables Description: + * \par + * \li \c testInput_f32 array of input angle in radians + * \li \c testOutput stores sum of the squares of sine and cosine values of input angle + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_cos_f32() + * - arm_sin_f32() + * - arm_mult_f32() + * - arm_add_f32() + * + * Refer + * \link arm_sin_cos_example_f32.c \endlink + * + */ + + +/** \example arm_sin_cos_example_f32.c + */ + +#include +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 32 +#define DELTA (0.0001f) + + +/* ---------------------------------------------------------------------- +* Test input data for Floating point sin_cos example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ + +const float32_t testInput_f32[MAX_BLOCKSIZE] = +{ + -1.244916875853235400, -4.793533929171324800, 0.360705030233248850, 0.827929644170887320, -3.299532218312426900, 3.427441903227623800, 3.422401784294607700, -0.108308165334010680, + 0.941943896490312180, 0.502609575000365850, -0.537345278736373500, 2.088817392965764500, -1.693168684143455700, 6.283185307179590700, -0.392545884746175080, 0.327893095115825040, + 3.070147440456292300, 0.170611405884662230, -0.275275082396073010, -2.395492805446796300, 0.847311163536506600, -3.845517018083148800, 2.055818378415868300, 4.672594161978930800, + -1.990923030266425800, 2.469305197656249500, 3.609002606064021000, -4.586736582331667500, -4.147080139136136300, 1.643756718868359500, -1.150866392366494800, 1.985805026477433800 + + +}; + +const float32_t testRefOutput_f32 = 1.000000000; + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +uint32_t blockSize = 32; +float32_t testOutput; +float32_t cosOutput; +float32_t sinOutput; +float32_t cosSquareOutput; +float32_t sinSquareOutput; + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +arm_status status; + +int32_t main(void) +{ + float32_t diff; + uint32_t i; + + for(i=0; i< blockSize; i++) + { + cosOutput = arm_cos_f32(testInput_f32[i]); + sinOutput = arm_sin_f32(testInput_f32[i]); + + arm_mult_f32(&cosOutput, &cosOutput, &cosSquareOutput, 1); + arm_mult_f32(&sinOutput, &sinOutput, &sinSquareOutput, 1); + + arm_add_f32(&cosSquareOutput, &sinSquareOutput, &testOutput, 1); + + /* absolute value of difference between ref and test */ + diff = fabsf(testRefOutput_f32 - testOutput); + + /* Comparison of sin_cos value with reference */ + if (diff > DELTA) + { + status = ARM_MATH_TEST_FAILURE; + } + + if ( status == ARM_MATH_TEST_FAILURE) + { + while (1); + } + + } + + while (1); /* main function does not return */ +} + + /** \endlink */ diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/Abstract.txt b/CMSIS/DSP/Examples/ARM/arm_variance_example/Abstract.txt new file mode 100644 index 000000000..371c79c7f --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/Abstract.txt @@ -0,0 +1,4 @@ +CMSIS DSP_Lib example arm_variance_example for + Cortex-M0, Cortex-M3, Cortex-M4 with FPU and Cortex-M7 with single precision FPU. + +The example is configured for uVision Simulator. diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM0/startup_ARMCM0.s b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM0/startup_ARMCM0.s new file mode 100644 index 000000000..3333bc66e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM0/startup_ARMCM0.s @@ -0,0 +1,159 @@ +;/**************************************************************************//** +; * @file startup_ARMCM0.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM0 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE ( 22 * 4) ; Interrupts 10 .. 31 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM0/system_ARMCM0.c b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 000000000..66a364c70 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM3/startup_ARMCM3.s new file mode 100644 index 000000000..2bf6f193e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM3/startup_ARMCM3.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM3.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM3 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM3/system_ARMCM3.c new file mode 100644 index 000000000..f56b85fc8 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM3/system_ARMCM3.c @@ -0,0 +1,68 @@ +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s new file mode 100644 index 000000000..f5270c08e --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM4_FP/startup_ARMCM4.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c new file mode 100644 index 000000000..731facdde --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM4_FP/system_ARMCM4.c @@ -0,0 +1,83 @@ +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#elif defined (ARMCM4_FP) + #include "ARMCM4_FP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s new file mode 100644 index 000000000..abddc8ddd --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM7_SP/startup_ARMCM7.s @@ -0,0 +1,163 @@ +;/**************************************************************************//** +; * @file startup_ARMCM7.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM7 Device +; * @version V5.3.1 +; * @date 09. July 2018 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2018 Arm Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +__stack_limit +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000C00 + + IF Heap_Size != 0 ; Heap is provided + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + ENDIF + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; -14 NMI Handler + DCD HardFault_Handler ; -13 Hard Fault Handler + DCD MemManage_Handler ; -12 MPU Fault Handler + DCD BusFault_Handler ; -11 Bus Fault Handler + DCD UsageFault_Handler ; -10 Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; -5 SVCall Handler + DCD DebugMon_Handler ; -4 Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; -2 PendSV Handler + DCD SysTick_Handler ; -1 SysTick Handler + + ; Interrupts + DCD Interrupt0_Handler ; 0 Interrupt 0 + DCD Interrupt1_Handler ; 1 Interrupt 1 + DCD Interrupt2_Handler ; 2 Interrupt 2 + DCD Interrupt3_Handler ; 3 Interrupt 3 + DCD Interrupt4_Handler ; 4 Interrupt 4 + DCD Interrupt5_Handler ; 5 Interrupt 5 + DCD Interrupt6_Handler ; 6 Interrupt 6 + DCD Interrupt7_Handler ; 7 Interrupt 7 + DCD Interrupt8_Handler ; 8 Interrupt 8 + DCD Interrupt9_Handler ; 9 Interrupt 9 + + SPACE (214 * 4) ; Interrupts 10 .. 224 are left out +__Vectors_End +__Vectors_Size EQU __Vectors_End - __Vectors + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Macro to define default exception/interrupt handlers. +; Default handler are weak symbols with an endless loop. +; They can be overwritten by real handlers. + MACRO + Set_Default_Handler $Handler_Name +$Handler_Name PROC + EXPORT $Handler_Name [WEAK] + B . + ENDP + MEND + + +; Default exception/interrupt handler + + Set_Default_Handler NMI_Handler + Set_Default_Handler HardFault_Handler + Set_Default_Handler MemManage_Handler + Set_Default_Handler BusFault_Handler + Set_Default_Handler UsageFault_Handler + Set_Default_Handler SVC_Handler + Set_Default_Handler DebugMon_Handler + Set_Default_Handler PendSV_Handler + Set_Default_Handler SysTick_Handler + + Set_Default_Handler Interrupt0_Handler + Set_Default_Handler Interrupt1_Handler + Set_Default_Handler Interrupt2_Handler + Set_Default_Handler Interrupt3_Handler + Set_Default_Handler Interrupt4_Handler + Set_Default_Handler Interrupt5_Handler + Set_Default_Handler Interrupt6_Handler + Set_Default_Handler Interrupt7_Handler + Set_Default_Handler Interrupt8_Handler + Set_Default_Handler Interrupt9_Handler + + ALIGN + + +; User setup Stack & Heap + + EXPORT __stack_limit + EXPORT __initial_sp + IF Heap_Size != 0 ; Heap is provided + EXPORT __heap_base + EXPORT __heap_limit + ENDIF + + END diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c new file mode 100644 index 000000000..69e2a8d31 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/RTE/Device/ARMCM7_SP/system_ARMCM7.c @@ -0,0 +1,85 @@ +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V5.3.1 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#elif defined (ARMCM7_SP) + #include "ARMCM7_SP.h" +#elif defined (ARMCM7_DP) + #include "ARMCM7_DP.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + Externals + *----------------------------------------------------------------------------*/ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + extern uint32_t __Vectors; +#endif + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &__Vectors; +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.ini b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.ini new file mode 100644 index 000000000..92d19a450 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.ini @@ -0,0 +1,15 @@ + +/* This file demonstrates how to Map memory ranges, specify read, write, and execute permissions + + The file can be executed in the following way: + 1) manually from uVision command window (in debug mode) using command: + INCLUIDE arm_variance_example.ini + +*/ + + +// usual initialisation for target setup +MAP 0x00000000, 0x0003FFFF EXEC READ // 256K Flash +MAP 0x20000000, 0x20007FFF READ WRITE // 32K RAM + + diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.uvoptx b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.uvoptx new file mode 100644 index 000000000..2cb3e2215 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.uvoptx @@ -0,0 +1,884 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + ARMCM0 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM0_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_variance_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
570
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
566
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM3 + 0x4 + ARM-ADS + + 10000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM3_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_variance_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
1318
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
1314
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM4_FP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM4_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + .\arm_variance_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
1356
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
1352
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + ARMCM7_SP + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ARMCM7_debug\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + + + + + .\arm_variance_example.ini + + + + + + BIN\UL2CM3.DLL + + + + 0 + PWSTATINFO + 200,50,700 + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM) + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 201 + 1 +
1356
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\201 +
+ + 1 + 0 + 198 + 1 +
1352
+ 0 + 0 + 0 + 0 + 0 + 1 + .\arm_variance_example_f32.c + + \\arm_variance_example\arm_variance_example_f32.c\198 +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Source Files + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\arm_variance_example_f32.c + arm_variance_example_f32.c + 0 + 0 + + + + + Documentation + 1 + 0 + 0 + 0 + + 2 + 2 + 5 + 0 + 0 + 0 + .\Abstract.txt + Abstract.txt + 0 + 0 + + + + + ::CMSIS + 1 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.uvprojx b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.uvprojx new file mode 100644 index 000000000..00d1b2356 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example.uvprojx @@ -0,0 +1,1741 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + ARMCM0 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM0$Device\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM0_debug\ + arm_variance_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM0_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_variance_example_f32.c + 1 + .\arm_variance_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM3 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(10000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Flash\NEW_DEVICE.flm)) + 0 + $$Device:ARMCM3$Device\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM3_debug\ + arm_variance_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM3_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM3 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_variance_example_f32.c + 1 + .\arm_variance_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM4_FP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM4_debug\ + arm_variance_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM4_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM4 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_variance_example_f32.c + 1 + .\arm_variance_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + ARMCM7_SP + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.3.1-dev7 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\ARMCM7_debug\ + arm_variance_example + 1 + 0 + 0 + 1 + 1 + .\ARMCM7_debug\ + 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 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_CM7 __FPU_PRESENT=1U + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Files + + + arm_variance_example_f32.c + 1 + .\arm_variance_example_f32.c + + + + + Documentation + + + Abstract.txt + 5 + .\Abstract.txt + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s + + + + + + + + RTE\Device\ARMCM0\system_ARMCM0.c + + + + + + + + RTE\Device\ARMCM3\startup_ARMCM3.s + + + + + + + + RTE\Device\ARMCM3\system_ARMCM3.c + + + + + + + + RTE\Device\ARMCM4\startup_ARMCM4.s + + + + + + RTE\Device\ARMCM4\system_ARMCM4.c + + + + + + RTE\Device\ARMCM4_FP\startup_ARMCM4.s + + + + + + + + RTE\Device\ARMCM4_FP\system_ARMCM4.c + + + + + + + + RTE\Device\ARMCM7_SP\startup_ARMCM7.s + + + + + + + + RTE\Device\ARMCM7_SP\system_ARMCM7.c + + + + + + + + + +
diff --git a/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example_f32.c b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example_f32.c new file mode 100644 index 000000000..13dde7b76 --- /dev/null +++ b/CMSIS/DSP/Examples/ARM/arm_variance_example/arm_variance_example_f32.c @@ -0,0 +1,225 @@ +/* ---------------------------------------------------------------------- +* Copyright (C) 2010-2012 ARM Limited. All rights reserved. +* +* $Date: 17. January 2013 +* $Revision: V1.4.0 +* +* Project: CMSIS DSP Library +* Title: arm_variance_example_f32.c +* +* Description: Example code demonstrating variance calculation of input sequence. +* +* Target Processor: Cortex-M4/Cortex-M3 +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* - Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* - Neither the name of ARM LIMITED nor the names of its contributors +* may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +* -------------------------------------------------------------------- */ + +/** + * @ingroup groupExamples + */ + +/** + * @defgroup VarianceExample Variance Example + * + * \par Description: + * \par + * Demonstrates the use of Basic Math and Support Functions to calculate the variance of an + * input sequence with N samples. Uniformly distributed white noise is taken as input. + * + * \par Algorithm: + * \par + * The variance of a sequence is the mean of the squared deviation of the sequence from its mean. + * \par + * This is denoted by the following equation: + *
 variance = ((x[0] - x') * (x[0] - x') + (x[1] - x') * (x[1] - x') + ... + * (x[n-1] - x') * (x[n-1] - x')) / (N-1)
+ * where, x[n] is the input sequence, N is the number of input samples, and + * x' is the mean value of the input sequence, x[n]. + * \par + * The mean value x' is defined as: + *
 x' = (x[0] + x[1] + ... + x[n-1]) / N
+ * + * \par Block Diagram: + * \par + * \image html Variance.gif + * + * + * \par Variables Description: + * \par + * \li \c testInput_f32 points to the input data + * \li \c wire1, \c wir2, \c wire3 temporary buffers + * \li \c blockSize number of samples processed at a time + * \li \c refVarianceOut reference variance value + * + * \par CMSIS DSP Software Library Functions Used: + * \par + * - arm_dot_prod_f32() + * - arm_mult_f32() + * - arm_sub_f32() + * - arm_fill_f32() + * - arm_copy_f32() + * + * Refer + * \link arm_variance_example_f32.c \endlink + * + */ + + +/** \example arm_variance_example_f32.c + */ + +#include +#include "arm_math.h" + +/* ---------------------------------------------------------------------- +* Defines each of the tests performed +* ------------------------------------------------------------------- */ +#define MAX_BLOCKSIZE 32 +#define DELTA (0.000001f) + + +/* ---------------------------------------------------------------------- +* Declare I/O buffers +* ------------------------------------------------------------------- */ +float32_t wire1[MAX_BLOCKSIZE]; +float32_t wire2[MAX_BLOCKSIZE]; +float32_t wire3[MAX_BLOCKSIZE]; + +/* ---------------------------------------------------------------------- +* Test input data for Floating point Variance example for 32-blockSize +* Generated by the MATLAB randn() function +* ------------------------------------------------------------------- */ + +float32_t testInput_f32[32] = +{ + -0.432564811528221, -1.665584378238097, 0.125332306474831, 0.287676420358549, + -1.146471350681464, 1.190915465642999, 1.189164201652103, -0.037633276593318, + 0.327292361408654, 0.174639142820925, -0.186708577681439, 0.725790548293303, + -0.588316543014189, 2.183185818197101, -0.136395883086596, 0.113931313520810, + 1.066768211359189, 0.059281460523605, -0.095648405483669, -0.832349463650022, + 0.294410816392640, -1.336181857937804, 0.714324551818952, 1.623562064446271, + -0.691775701702287, 0.857996672828263, 1.254001421602532, -1.593729576447477, + -1.440964431901020, 0.571147623658178, -0.399885577715363, 0.689997375464345 + +}; + +/* ---------------------------------------------------------------------- +* Declare Global variables +* ------------------------------------------------------------------- */ +uint32_t blockSize = 32; +float32_t refVarianceOut = 0.903941793931839; + +/* ---------------------------------------------------------------------- +* Variance calculation test +* ------------------------------------------------------------------- */ + +int32_t main(void) +{ + arm_status status; + float32_t mean, oneByBlockSize; + float32_t variance; + float32_t diff; + + status = ARM_MATH_SUCCESS; + +#if defined(FILEIO) + printf("START\n"); +#endif + + + /* Calculation of mean value of input */ + + /* x' = 1/blockSize * (x(0)* 1 + x(1) * 1 + ... + x(n-1) * 1) */ + + /* Fill wire1 buffer with 1.0 value */ + arm_fill_f32(1.0, wire1, blockSize); + + /* Calculate the dot product of wire1 and wire2 */ + /* (x(0)* 1 + x(1) * 1 + ...+ x(n-1) * 1) */ + arm_dot_prod_f32(testInput_f32, wire1, blockSize, &mean); + + /* Calculation of 1/blockSize */ + oneByBlockSize = 1.0 / (blockSize); + + /* 1/blockSize * (x(0)* 1 + x(1) * 1 + ... + x(n-1) * 1) */ + arm_mult_f32(&mean, &oneByBlockSize, &mean, 1); + + + /* Calculation of variance value of input */ + + /* (1/blockSize) * (x(0) - x') * (x(0) - x') + (x(1) - x') * (x(1) - x') + ... + (x(n-1) - x') * (x(n-1) - x') */ + + /* Fill wire2 with mean value x' */ + arm_fill_f32(mean, wire2, blockSize); + + /* wire3 contains (x-x') */ + arm_sub_f32(testInput_f32, wire2, wire3, blockSize); + + /* wire2 contains (x-x') */ + arm_copy_f32(wire3, wire2, blockSize); + + /* (x(0) - x') * (x(0) - x') + (x(1) - x') * (x(1) - x') + ... + (x(n-1) - x') * (x(n-1) - x') */ + arm_dot_prod_f32(wire2, wire3, blockSize, &variance); + + /* Calculation of 1/blockSize */ + oneByBlockSize = 1.0 / (blockSize - 1); + + /* Calculation of variance */ + arm_mult_f32(&variance, &oneByBlockSize, &variance, 1); + + /* absolute value of difference between ref and test */ + diff = fabsf(refVarianceOut - variance); + + /* Comparison of variance value with reference */ + + if (diff > DELTA) + { + status = ARM_MATH_TEST_FAILURE; + } + + +#if !defined(FILEIO) + if ( status != ARM_MATH_SUCCESS) + { + while (1); + } + + while (1); /* main function does not return */ +#else + if (status == ARM_MATH_SUCCESS) + { + printf("SUCCESS\n"); + } + else + { + printf("FAILURE\n"); + } +#endif +} + + /** \endlink */ + + diff --git a/CMSIS/DSP/Lib/GCC/libarm_cortexM4lf_math.a b/CMSIS/DSP/Lib/GCC/libarm_cortexM4lf_math.a new file mode 100644 index 000000000..66efc87f6 Binary files /dev/null and b/CMSIS/DSP/Lib/GCC/libarm_cortexM4lf_math.a differ diff --git a/CMSIS/DSP/Projects/ARM/arm_cortexM_math.uvoptx b/CMSIS/DSP/Projects/ARM/arm_cortexM_math.uvoptx new file mode 100644 index 000000000..85a5df473 --- /dev/null +++ b/CMSIS/DSP/Projects/ARM/arm_cortexM_math.uvoptx @@ -0,0 +1,6511 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + cortexM0l + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM0l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM0b + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM0b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM3l + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM3l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM3b + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM3b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4l + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM4l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4b + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM4b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4lf + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM4lf\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4bf + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM4bf\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7l + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM7l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7b + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM7b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7lfsp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM7lfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7bfsp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM7bfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7lfdp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM7lfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7bfdp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\cortexM7bfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MBLl + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\ARMv8MBLl\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLl + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\ARMv8MMLl\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLlfsp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\ARMv8MMLlfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLlfdp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\ARMv8MMLlfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLld + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\ARMv8MMLld\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLldfsp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\ARMv8MMLldfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLldfdp + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\IntermediateFiles\ARMv8MMLldfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + BasicMathFunctions + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + arm_abs_f32.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + arm_abs_q7.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + arm_abs_q15.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + arm_abs_q31.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + arm_add_f32.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + arm_add_q7.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + arm_add_q15.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + arm_add_q31.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + arm_dot_prod_f32.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + arm_dot_prod_q7.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + arm_dot_prod_q15.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + arm_dot_prod_q31.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + arm_mult_f32.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + arm_mult_q7.c + 0 + 0 + + + 1 + 15 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + arm_mult_q15.c + 0 + 0 + + + 1 + 16 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + arm_mult_q31.c + 0 + 0 + + + 1 + 17 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + arm_negate_f32.c + 0 + 0 + + + 1 + 18 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + arm_negate_q7.c + 0 + 0 + + + 1 + 19 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + arm_negate_q15.c + 0 + 0 + + + 1 + 20 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + arm_negate_q31.c + 0 + 0 + + + 1 + 21 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + arm_offset_f32.c + 0 + 0 + + + 1 + 22 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + arm_offset_q7.c + 0 + 0 + + + 1 + 23 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + arm_offset_q15.c + 0 + 0 + + + 1 + 24 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + arm_offset_q31.c + 0 + 0 + + + 1 + 25 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + arm_scale_f32.c + 0 + 0 + + + 1 + 26 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + arm_scale_q7.c + 0 + 0 + + + 1 + 27 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + arm_scale_q15.c + 0 + 0 + + + 1 + 28 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + arm_scale_q31.c + 0 + 0 + + + 1 + 29 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + arm_shift_q7.c + 0 + 0 + + + 1 + 30 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + arm_shift_q15.c + 0 + 0 + + + 1 + 31 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + arm_shift_q31.c + 0 + 0 + + + 1 + 32 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + arm_sub_f32.c + 0 + 0 + + + 1 + 33 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + arm_sub_q7.c + 0 + 0 + + + 1 + 34 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + arm_sub_q15.c + 0 + 0 + + + 1 + 35 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + arm_sub_q31.c + 0 + 0 + + + + + FastMathFunctions + 0 + 0 + 0 + 0 + + 2 + 36 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + arm_cos_f32.c + 0 + 0 + + + 2 + 37 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + arm_cos_q15.c + 0 + 0 + + + 2 + 38 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + arm_cos_q31.c + 0 + 0 + + + 2 + 39 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + arm_sin_f32.c + 0 + 0 + + + 2 + 40 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + arm_sin_q15.c + 0 + 0 + + + 2 + 41 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + arm_sin_q31.c + 0 + 0 + + + 2 + 42 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + arm_sqrt_q15.c + 0 + 0 + + + 2 + 43 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + arm_sqrt_q31.c + 0 + 0 + + + + + ComplexMathFunctions + 0 + 0 + 0 + 0 + + 3 + 44 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + arm_cmplx_conj_f32.c + 0 + 0 + + + 3 + 45 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + arm_cmplx_conj_q15.c + 0 + 0 + + + 3 + 46 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + arm_cmplx_conj_q31.c + 0 + 0 + + + 3 + 47 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + arm_cmplx_dot_prod_f32.c + 0 + 0 + + + 3 + 48 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + arm_cmplx_dot_prod_q15.c + 0 + 0 + + + 3 + 49 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + arm_cmplx_dot_prod_q31.c + 0 + 0 + + + 3 + 50 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + arm_cmplx_mag_f32.c + 0 + 0 + + + 3 + 51 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + arm_cmplx_mag_q15.c + 0 + 0 + + + 3 + 52 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + arm_cmplx_mag_q31.c + 0 + 0 + + + 3 + 53 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + arm_cmplx_mag_squared_f32.c + 0 + 0 + + + 3 + 54 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + arm_cmplx_mag_squared_q15.c + 0 + 0 + + + 3 + 55 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + arm_cmplx_mag_squared_q31.c + 0 + 0 + + + 3 + 56 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + arm_cmplx_mult_cmplx_f32.c + 0 + 0 + + + 3 + 57 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + arm_cmplx_mult_cmplx_q15.c + 0 + 0 + + + 3 + 58 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + arm_cmplx_mult_cmplx_q31.c + 0 + 0 + + + 3 + 59 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + arm_cmplx_mult_real_f32.c + 0 + 0 + + + 3 + 60 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + arm_cmplx_mult_real_q15.c + 0 + 0 + + + 3 + 61 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + arm_cmplx_mult_real_q31.c + 0 + 0 + + + + + FilteringFunctions + 0 + 0 + 0 + 0 + + 4 + 62 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + arm_biquad_cascade_df1_32x64_init_q31.c + 0 + 0 + + + 4 + 63 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + arm_biquad_cascade_df1_32x64_q31.c + 0 + 0 + + + 4 + 64 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + arm_biquad_cascade_df1_f32.c + 0 + 0 + + + 4 + 65 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + arm_biquad_cascade_df1_fast_q15.c + 0 + 0 + + + 4 + 66 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + arm_biquad_cascade_df1_fast_q31.c + 0 + 0 + + + 4 + 67 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + arm_biquad_cascade_df1_init_f32.c + 0 + 0 + + + 4 + 68 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + arm_biquad_cascade_df1_init_q15.c + 0 + 0 + + + 4 + 69 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + arm_biquad_cascade_df1_init_q31.c + 0 + 0 + + + 4 + 70 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + arm_biquad_cascade_df1_q15.c + 0 + 0 + + + 4 + 71 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + arm_biquad_cascade_df1_q31.c + 0 + 0 + + + 4 + 72 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + arm_biquad_cascade_df2T_init_f32.c + 0 + 0 + + + 4 + 73 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + arm_conv_f32.c + 0 + 0 + + + 4 + 74 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + arm_conv_fast_q15.c + 0 + 0 + + + 4 + 75 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + arm_conv_fast_q31.c + 0 + 0 + + + 4 + 76 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + arm_conv_partial_f32.c + 0 + 0 + + + 4 + 77 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + arm_conv_partial_fast_q15.c + 0 + 0 + + + 4 + 78 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + arm_conv_partial_fast_q31.c + 0 + 0 + + + 4 + 79 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + arm_conv_partial_q7.c + 0 + 0 + + + 4 + 80 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + arm_conv_partial_q15.c + 0 + 0 + + + 4 + 81 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + arm_conv_partial_q31.c + 0 + 0 + + + 4 + 82 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + arm_conv_q7.c + 0 + 0 + + + 4 + 83 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + arm_conv_q15.c + 0 + 0 + + + 4 + 84 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + arm_conv_q31.c + 0 + 0 + + + 4 + 85 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + arm_correlate_f32.c + 0 + 0 + + + 4 + 86 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + arm_correlate_fast_q15.c + 0 + 0 + + + 4 + 87 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + arm_correlate_fast_q31.c + 0 + 0 + + + 4 + 88 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + arm_correlate_q7.c + 0 + 0 + + + 4 + 89 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + arm_correlate_q15.c + 0 + 0 + + + 4 + 90 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + arm_correlate_q31.c + 0 + 0 + + + 4 + 91 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + arm_fir_decimate_f32.c + 0 + 0 + + + 4 + 92 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + arm_fir_decimate_fast_q15.c + 0 + 0 + + + 4 + 93 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + arm_fir_decimate_fast_q31.c + 0 + 0 + + + 4 + 94 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + arm_fir_decimate_init_f32.c + 0 + 0 + + + 4 + 95 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + arm_fir_decimate_init_q15.c + 0 + 0 + + + 4 + 96 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + arm_fir_decimate_init_q31.c + 0 + 0 + + + 4 + 97 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + arm_fir_decimate_q15.c + 0 + 0 + + + 4 + 98 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + arm_fir_decimate_q31.c + 0 + 0 + + + 4 + 99 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + arm_fir_f32.c + 0 + 0 + + + 4 + 100 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + arm_fir_fast_q15.c + 0 + 0 + + + 4 + 101 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + arm_fir_fast_q31.c + 0 + 0 + + + 4 + 102 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + arm_fir_init_f32.c + 0 + 0 + + + 4 + 103 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + arm_fir_init_q7.c + 0 + 0 + + + 4 + 104 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + arm_fir_init_q15.c + 0 + 0 + + + 4 + 105 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + arm_fir_init_q31.c + 0 + 0 + + + 4 + 106 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + arm_fir_interpolate_f32.c + 0 + 0 + + + 4 + 107 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + arm_fir_interpolate_init_f32.c + 0 + 0 + + + 4 + 108 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + arm_fir_interpolate_init_q15.c + 0 + 0 + + + 4 + 109 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + arm_fir_interpolate_init_q31.c + 0 + 0 + + + 4 + 110 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + arm_fir_interpolate_q15.c + 0 + 0 + + + 4 + 111 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + arm_fir_interpolate_q31.c + 0 + 0 + + + 4 + 112 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + arm_fir_lattice_f32.c + 0 + 0 + + + 4 + 113 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + arm_fir_lattice_init_f32.c + 0 + 0 + + + 4 + 114 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + arm_fir_lattice_init_q15.c + 0 + 0 + + + 4 + 115 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + arm_fir_lattice_init_q31.c + 0 + 0 + + + 4 + 116 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + arm_fir_lattice_q15.c + 0 + 0 + + + 4 + 117 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + arm_fir_lattice_q31.c + 0 + 0 + + + 4 + 118 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + arm_fir_q7.c + 0 + 0 + + + 4 + 119 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + arm_fir_q15.c + 0 + 0 + + + 4 + 120 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + arm_fir_q31.c + 0 + 0 + + + 4 + 121 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + arm_fir_sparse_f32.c + 0 + 0 + + + 4 + 122 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + arm_fir_sparse_init_f32.c + 0 + 0 + + + 4 + 123 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + arm_fir_sparse_init_q7.c + 0 + 0 + + + 4 + 124 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + arm_fir_sparse_init_q15.c + 0 + 0 + + + 4 + 125 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + arm_fir_sparse_init_q31.c + 0 + 0 + + + 4 + 126 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + arm_fir_sparse_q7.c + 0 + 0 + + + 4 + 127 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + arm_fir_sparse_q15.c + 0 + 0 + + + 4 + 128 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + arm_fir_sparse_q31.c + 0 + 0 + + + 4 + 129 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + arm_iir_lattice_f32.c + 0 + 0 + + + 4 + 130 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + arm_iir_lattice_init_f32.c + 0 + 0 + + + 4 + 131 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + arm_iir_lattice_init_q15.c + 0 + 0 + + + 4 + 132 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + arm_iir_lattice_init_q31.c + 0 + 0 + + + 4 + 133 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + arm_iir_lattice_q15.c + 0 + 0 + + + 4 + 134 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + arm_iir_lattice_q31.c + 0 + 0 + + + 4 + 135 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + arm_lms_f32.c + 0 + 0 + + + 4 + 136 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + arm_lms_init_f32.c + 0 + 0 + + + 4 + 137 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + arm_lms_init_q15.c + 0 + 0 + + + 4 + 138 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + arm_lms_init_q31.c + 0 + 0 + + + 4 + 139 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + arm_lms_norm_f32.c + 0 + 0 + + + 4 + 140 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + arm_lms_norm_init_f32.c + 0 + 0 + + + 4 + 141 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + arm_lms_norm_init_q15.c + 0 + 0 + + + 4 + 142 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + arm_lms_norm_init_q31.c + 0 + 0 + + + 4 + 143 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + arm_lms_norm_q15.c + 0 + 0 + + + 4 + 144 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + arm_lms_norm_q31.c + 0 + 0 + + + 4 + 145 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + arm_lms_q15.c + 0 + 0 + + + 4 + 146 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + arm_lms_q31.c + 0 + 0 + + + 4 + 147 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + arm_correlate_opt_q15.c + 0 + 0 + + + 4 + 148 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + arm_conv_opt_q7.c + 0 + 0 + + + 4 + 149 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + arm_conv_opt_q15.c + 0 + 0 + + + 4 + 150 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + arm_conv_partial_opt_q7.c + 0 + 0 + + + 4 + 151 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + arm_conv_partial_opt_q15.c + 0 + 0 + + + 4 + 152 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + arm_correlate_opt_q7.c + 0 + 0 + + + 4 + 153 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + arm_correlate_fast_opt_q15.c + 0 + 0 + + + 4 + 154 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + arm_conv_fast_opt_q15.c + 0 + 0 + + + 4 + 155 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + arm_conv_partial_fast_opt_q15.c + 0 + 0 + + + 4 + 156 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + arm_biquad_cascade_df2T_f32.c + 0 + 0 + + + 4 + 157 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + arm_biquad_cascade_df2T_f64.c + 0 + 0 + + + 4 + 158 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + arm_biquad_cascade_df2T_init_f64.c + 0 + 0 + + + 4 + 159 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + arm_biquad_cascade_stereo_df2T_f32.c + 0 + 0 + + + 4 + 160 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + arm_biquad_cascade_stereo_df2T_init_f32.c + 0 + 0 + + + + + MatrixFunctions + 0 + 0 + 0 + 0 + + 5 + 161 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + arm_mat_add_f32.c + 0 + 0 + + + 5 + 162 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + arm_mat_add_q15.c + 0 + 0 + + + 5 + 163 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + arm_mat_add_q31.c + 0 + 0 + + + 5 + 164 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + arm_mat_init_f32.c + 0 + 0 + + + 5 + 165 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + arm_mat_init_q15.c + 0 + 0 + + + 5 + 166 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + arm_mat_init_q31.c + 0 + 0 + + + 5 + 167 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + arm_mat_inverse_f32.c + 0 + 0 + + + 5 + 168 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + arm_mat_mult_f32.c + 0 + 0 + + + 5 + 169 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + arm_mat_mult_fast_q15.c + 0 + 0 + + + 5 + 170 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + arm_mat_mult_fast_q31.c + 0 + 0 + + + 5 + 171 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + arm_mat_mult_q15.c + 0 + 0 + + + 5 + 172 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + arm_mat_mult_q31.c + 0 + 0 + + + 5 + 173 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + arm_mat_scale_f32.c + 0 + 0 + + + 5 + 174 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + arm_mat_scale_q15.c + 0 + 0 + + + 5 + 175 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + arm_mat_scale_q31.c + 0 + 0 + + + 5 + 176 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + arm_mat_sub_f32.c + 0 + 0 + + + 5 + 177 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + arm_mat_sub_q15.c + 0 + 0 + + + 5 + 178 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + arm_mat_sub_q31.c + 0 + 0 + + + 5 + 179 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + arm_mat_trans_f32.c + 0 + 0 + + + 5 + 180 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + arm_mat_trans_q15.c + 0 + 0 + + + 5 + 181 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + arm_mat_trans_q31.c + 0 + 0 + + + 5 + 182 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + arm_mat_cmplx_mult_f32.c + 0 + 0 + + + 5 + 183 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + arm_mat_cmplx_mult_q15.c + 0 + 0 + + + 5 + 184 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + arm_mat_cmplx_mult_q31.c + 0 + 0 + + + 5 + 185 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + arm_mat_inverse_f64.c + 0 + 0 + + + + + TransformFunctions + 0 + 0 + 0 + 0 + + 6 + 186 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_bitreversal.c + arm_bitreversal.c + 0 + 0 + + + 6 + 187 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + arm_bitreversal2.c + 0 + 0 + + + 6 + 188 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + arm_cfft_radix4_f32.c + 0 + 0 + + + 6 + 189 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + arm_cfft_radix4_init_f32.c + 0 + 0 + + + 6 + 190 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + arm_cfft_radix4_init_q15.c + 0 + 0 + + + 6 + 191 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + arm_cfft_radix4_init_q31.c + 0 + 0 + + + 6 + 192 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + arm_cfft_radix4_q15.c + 0 + 0 + + + 6 + 193 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + arm_cfft_radix4_q31.c + 0 + 0 + + + 6 + 194 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + arm_dct4_f32.c + 0 + 0 + + + 6 + 195 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + arm_dct4_init_f32.c + 0 + 0 + + + 6 + 196 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + arm_dct4_init_q15.c + 0 + 0 + + + 6 + 197 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + arm_dct4_init_q31.c + 0 + 0 + + + 6 + 198 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + arm_dct4_q15.c + 0 + 0 + + + 6 + 199 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + arm_dct4_q31.c + 0 + 0 + + + 6 + 200 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + arm_rfft_f32.c + 0 + 0 + + + 6 + 201 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + arm_rfft_init_f32.c + 0 + 0 + + + 6 + 202 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + arm_rfft_init_q15.c + 0 + 0 + + + 6 + 203 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + arm_rfft_init_q31.c + 0 + 0 + + + 6 + 204 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + arm_rfft_q15.c + 0 + 0 + + + 6 + 205 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + arm_rfft_q31.c + 0 + 0 + + + 6 + 206 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + arm_cfft_radix2_f32.c + 0 + 0 + + + 6 + 207 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + arm_cfft_radix2_init_f32.c + 0 + 0 + + + 6 + 208 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + arm_cfft_radix2_init_q15.c + 0 + 0 + + + 6 + 209 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + arm_cfft_radix2_init_q31.c + 0 + 0 + + + 6 + 210 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + arm_cfft_radix2_q15.c + 0 + 0 + + + 6 + 211 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + arm_cfft_radix2_q31.c + 0 + 0 + + + 6 + 212 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + arm_cfft_f32.c + 0 + 0 + + + 6 + 213 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + arm_cfft_radix8_f32.c + 0 + 0 + + + 6 + 214 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + arm_rfft_fast_f32.c + 0 + 0 + + + 6 + 215 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + arm_rfft_fast_init_f32.c + 0 + 0 + + + 6 + 216 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + arm_cfft_q31.c + 0 + 0 + + + 6 + 217 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + arm_cfft_q15.c + 0 + 0 + + + + + ControllerFunctions + 0 + 0 + 0 + 0 + + 7 + 218 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + arm_pid_init_f32.c + 0 + 0 + + + 7 + 219 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + arm_pid_init_q15.c + 0 + 0 + + + 7 + 220 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + arm_pid_init_q31.c + 0 + 0 + + + 7 + 221 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + arm_pid_reset_f32.c + 0 + 0 + + + 7 + 222 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + arm_pid_reset_q15.c + 0 + 0 + + + 7 + 223 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + arm_pid_reset_q31.c + 0 + 0 + + + 7 + 224 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + arm_sin_cos_f32.c + 0 + 0 + + + 7 + 225 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + arm_sin_cos_q31.c + 0 + 0 + + + + + StatisticsFunctions + 0 + 0 + 0 + 0 + + 8 + 226 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + arm_max_f32.c + 0 + 0 + + + 8 + 227 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + arm_max_q7.c + 0 + 0 + + + 8 + 228 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + arm_max_q15.c + 0 + 0 + + + 8 + 229 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + arm_max_q31.c + 0 + 0 + + + 8 + 230 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + arm_mean_f32.c + 0 + 0 + + + 8 + 231 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + arm_mean_q7.c + 0 + 0 + + + 8 + 232 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + arm_mean_q15.c + 0 + 0 + + + 8 + 233 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + arm_mean_q31.c + 0 + 0 + + + 8 + 234 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + arm_min_f32.c + 0 + 0 + + + 8 + 235 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + arm_min_q7.c + 0 + 0 + + + 8 + 236 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + arm_min_q15.c + 0 + 0 + + + 8 + 237 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + arm_min_q31.c + 0 + 0 + + + 8 + 238 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + arm_power_f32.c + 0 + 0 + + + 8 + 239 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + arm_power_q7.c + 0 + 0 + + + 8 + 240 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + arm_power_q15.c + 0 + 0 + + + 8 + 241 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + arm_power_q31.c + 0 + 0 + + + 8 + 242 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + arm_rms_f32.c + 0 + 0 + + + 8 + 243 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + arm_rms_q15.c + 0 + 0 + + + 8 + 244 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + arm_rms_q31.c + 0 + 0 + + + 8 + 245 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + arm_std_f32.c + 0 + 0 + + + 8 + 246 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + arm_std_q15.c + 0 + 0 + + + 8 + 247 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + arm_std_q31.c + 0 + 0 + + + 8 + 248 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + arm_var_f32.c + 0 + 0 + + + 8 + 249 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + arm_var_q15.c + 0 + 0 + + + 8 + 250 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + arm_var_q31.c + 0 + 0 + + + + + SupportFunctions + 0 + 0 + 0 + 0 + + 9 + 251 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_f32.c + arm_copy_f32.c + 0 + 0 + + + 9 + 252 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_q7.c + arm_copy_q7.c + 0 + 0 + + + 9 + 253 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_q15.c + arm_copy_q15.c + 0 + 0 + + + 9 + 254 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_q31.c + arm_copy_q31.c + 0 + 0 + + + 9 + 255 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_f32.c + arm_fill_f32.c + 0 + 0 + + + 9 + 256 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_q7.c + arm_fill_q7.c + 0 + 0 + + + 9 + 257 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_q15.c + arm_fill_q15.c + 0 + 0 + + + 9 + 258 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_q31.c + arm_fill_q31.c + 0 + 0 + + + 9 + 259 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + arm_float_to_q7.c + 0 + 0 + + + 9 + 260 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + arm_float_to_q15.c + 0 + 0 + + + 9 + 261 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + arm_float_to_q31.c + 0 + 0 + + + 9 + 262 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + arm_q7_to_float.c + 0 + 0 + + + 9 + 263 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + arm_q7_to_q15.c + 0 + 0 + + + 9 + 264 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + arm_q7_to_q31.c + 0 + 0 + + + 9 + 265 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + arm_q15_to_float.c + 0 + 0 + + + 9 + 266 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + arm_q15_to_q7.c + 0 + 0 + + + 9 + 267 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + arm_q15_to_q31.c + 0 + 0 + + + 9 + 268 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + arm_q31_to_float.c + 0 + 0 + + + 9 + 269 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + arm_q31_to_q7.c + 0 + 0 + + + 9 + 270 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + arm_q31_to_q15.c + 0 + 0 + + + + + CommonTables + 0 + 0 + 0 + 0 + + 10 + 271 + 1 + 0 + 0 + 0 + ..\..\Source\CommonTables\arm_common_tables.c + arm_common_tables.c + 0 + 0 + + + 10 + 272 + 1 + 0 + 0 + 0 + ..\..\Source\CommonTables\arm_const_structs.c + arm_const_structs.c + 0 + 0 + + + +
diff --git a/CMSIS/DSP/Projects/ARM/arm_cortexM_math.uvprojx b/CMSIS/DSP/Projects/ARM/arm_cortexM_math.uvprojx new file mode 100644 index 000000000..a7976ee43 --- /dev/null +++ b/CMSIS/DSP/Projects/ARM/arm_cortexM_math.uvprojx @@ -0,0 +1,37502 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + cortexM0l + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG + 1 + + + ARMCM0 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM0$Device\ARM\ARMCM0\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$Device\ARM\SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM0l\ + arm_cortexM0l_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM0l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM0b + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM0 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM0$Device\ARM\ARMCM0\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$Device\ARM\SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM0b\ + arm_cortexM0b_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM0b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM3l + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM3 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM3$Device\ARM\ARMCM3\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$Device\ARM\SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM3l\ + arm_cortexM3l_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM3l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM3 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM3b + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM3 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM3$Device\ARM\ARMCM3\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$Device\ARM\SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM3b\ + arm_cortexM3b_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM3b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM3 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4l + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM4 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4$Device\ARM\ARMCM4\Include\ARMCM4.h + + + + + + + + + + $$Device:ARMCM4$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4l\ + arm_cortexM4l_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM4l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4b + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM4 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4$Device\ARM\ARMCM4\Include\ARMCM4.h + + + + + + + + + + $$Device:ARMCM4$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4b\ + arm_cortexM4b_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM4b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4lf + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG + 1 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4lf\ + arm_cortexM4lf_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM4lf\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4bf + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4bf\ + arm_cortexM4bf_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM4bf\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7l + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM7 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7$Device\ARM\ARMCM7\Include\ARMCM7.h + + + + + + + + + + $$Device:ARMCM7$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7l\ + arm_cortexM7l_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM7l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7b + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM7 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7$Device\ARM\ARMCM7\Include\ARMCM7.h + + + + + + + + + + $$Device:ARMCM7$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7b\ + arm_cortexM7b_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM7b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7lfsp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7lfsp\ + arm_cortexM7lfsp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM7lfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7bfsp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7bfsp\ + arm_cortexM7bfsp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM7bfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7lfdp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM7_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_DP$Device\ARM\ARMCM7\Include\ARMCM7_DP.h + + + + + + + + + + $$Device:ARMCM7_DP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7lfdp\ + arm_cortexM7lfdp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM7lfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7bfdp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMCM7_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_DP$Device\ARM\ARMCM7\Include\ARMCM7_DP.h + + + + + + + + + + $$Device:ARMCM7_DP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7bfdp\ + arm_cortexM7bfdp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\cortexM7bfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MBLl + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMv8MBL + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MBL") TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MBL$Device\ARM\ARMv8MBL\Include\ARMv8MBL.h + + + + + + + + + + $$Device:ARMv8MBL$Device\ARM\SVD\ARMv8MBL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MBLl\ + arm_ARMv8MBLl_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\ARMv8MBLl\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MBL + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "ARMV8MBL" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x20200000 + 0x20000 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLl + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMv8MML + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("ARMV8MML") TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML$Device\ARM\ARMv8MML\Include\ARMv8MML.h + + + + + + + + + + $$Device:ARMv8MML$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLl\ + arm_ARMv8MMLl_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\ARMv8MMLl\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "ARMV8MML" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLlfsp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMv8MML_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("ARMV8MML") FPU3(SFPU) TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_SP$Device\ARM\ARMv8MML\Include\ARMv8MML_SP.h + + + + + + + + + + $$Device:ARMv8MML_SP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLlfsp\ + arm_ARMv8MMLlfsp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\ARMv8MMLlfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "ARMV8MML" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLlfdp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMv8MML_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("ARMV8MML") FPU3(DFPU) TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DP$Device\ARM\ARMv8MML\Include\ARMv8MML_DP.h + + + + + + + + + + $$Device:ARMv8MML_DP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLlfdp\ + arm_ARMv8MMLlfdp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\ARMv8MMLlfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "ARMV8MML" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLld + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMv8MML_DSP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") DSP TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DSP$Device\ARM\ARMv8MML\Include\ARMv8MML_DSP.h + + + + + + + + + + $$Device:ARMv8MML_DSP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLld\ + arm_ARMv8MMLld_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\ARMv8MMLld\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "ARMV8MML" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x20200000 + 0x20000 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLldfsp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMv8MML_DSP_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") FPU3(SFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DSP_SP$Device\ARM\ARMv8MML\Include\ARMv8MML_DSP_SP.h + + + + + + + + + + $$Device:ARMv8MML_DSP_SP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLldfsp\ + arm_ARMv8MMLldfsp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\ARMv8MMLldfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "ARMV8MML" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 1 + 1 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x20200000 + 0x20000 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLldfdp + 0x4 + ARM-ADS + 6110000::V6.11::.\ARMCLANG 6.11 + 1 + + + ARMv8MML_DSP_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") FPU3(DFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DSP_DP$Device\ARM\ARMv8MML\Include\ARMv8MML_DSP_DP.h + + + + + + + + + + $$Device:ARMv8MML_DSP_DP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLldfdp\ + arm_ARMv8MMLldfdp_math + 0 + 1 + 0 + 1 + 1 + .\IntermediateFiles\ARMv8MMLldfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "!L" "..\..\Lib\ARM\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "ARMV8MML" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 1 + 1 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x20200000 + 0x20000 + + + + + + 1 + 6 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + 0 + 0 + 0 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x00000000 + + + + + + + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + + + + + + + +
diff --git a/CMSIS/DSP/Projects/ARM/arm_cortexM_math_Build.bat b/CMSIS/DSP/Projects/ARM/arm_cortexM_math_Build.bat new file mode 100644 index 000000000..988b285e9 --- /dev/null +++ b/CMSIS/DSP/Projects/ARM/arm_cortexM_math_Build.bat @@ -0,0 +1,84 @@ +@echo off + +mkdir Temp +set TMP=Temp +set TEMP=Temp +set UVEXE=C:\Keil_v5\UV4\UV4.EXE + +echo. +echo Building DSP Libraries ARM + +echo Building DSP Library for Cortex-M0 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM0l" -o "DspLib_cortexM0l_build.log" + +echo Building DSP Library for Cortex-M3 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM3l" -o "DspLib_cortexM3l_build.log" + +echo Building DSP Library for Cortex-M4 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4l" -o "DspLib_cortexM4l_build.log" + +echo Building DSP Library for Cortex-M4 Little Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4lf" -o "DspLib_cortexM4lf_build.log" + +echo Building DSP Library for Cortex-M7 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7l" -o "DspLib_cortexM7l_build.log" + +echo Building DSP Library for Cortex-M7 Little Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7lfsp" -o "DspLib_cortexM7lfsp_build.log" + +echo Building DSP Library for Cortex-M7 Little Endian with double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7lfdp" -o "DspLib_cortexM7lfdp_build.log" + +echo Building DSP Library for ARMv8-M Baseline Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MBLl" -o "DspLib_ARMv8MBLl_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLl" -o "DspLib_ARMv8MMLl_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLlfsp" -o "DspLib_ARMv8MMLlfsp_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLlfdp" -o "DspLib_ARMv8MMLlfdp_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLld" -o "DspLib_ARMv8MMLld_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions, single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLldfsp" -o "DspLib_ARMv8MMLldfsp_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions, double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLldfdp" -o "DspLib_ARMv8MMLldfdp_build.log" + + +REM big endian libraries + +echo Building DSP Library for Cortex-M0 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM0b" -o "DspLib_cortexM0b_build.log" + +echo Building DSP Library for Cortex-M3 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM3b" -o "DspLib_cortexM3b_build.log" + +echo Building DSP Library for Cortex-M4 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4b" -o "DspLib_cortexM4b_build.log" + +echo Building DSP Library for Cortex-M4 Big Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4bf" -o "DspLib_cortexM4bf_build.log" + +echo Building DSP Library for Cortex-M7 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7b" -o "DspLib_cortexM7b_build.log" + +echo Building DSP Library for Cortex-M7 Big Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7bfsp" -o "DspLib_cortexM7bfsp_build.log" + +echo Building DSP Library for Cortex-M7 Big Endian with double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7bfdp" -o "DspLib_cortexM7bfdp_build.log" + +echo. +echo Deleting intermediate files +rmdir /S /Q Temp +rmdir /S /Q IntermediateFiles +del /Q *.bak +del /Q *.dep +del /Q *.uvguix.* +del /Q ArInp.* diff --git a/CMSIS/DSP/Projects/GCC/arm_cortexM_math.uvoptx b/CMSIS/DSP/Projects/GCC/arm_cortexM_math.uvoptx new file mode 100644 index 000000000..4319d1e6a --- /dev/null +++ b/CMSIS/DSP/Projects/GCC/arm_cortexM_math.uvoptx @@ -0,0 +1,6516 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + cortexM0l + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM0l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM0b + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM0b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM3l + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM3l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM3b + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM3b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4l + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM4l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4b + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM4b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4lf + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM4lf\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM4bf + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM4bf\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7l + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM7l\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7b + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM7b\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7lfsp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM7lfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7bfsp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM7bfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + cortexM7lfdp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM7lfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + + + 0 + UL2CM3 + -S0 -C0 -P0 ) -FC1000 -FD20000000 + + + + + 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 + + + + + + + + + + + + + cortexM7bfdp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\cortexM7bfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MBLl + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\ARMv8MBLl\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLl + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\ARMv8MMLl\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLlfsp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\ARMv8MMLlfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLlfdp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\ARMv8MMLlfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLld + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\ARMv8MMLld\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLldfsp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\ARMv8MMLldfsp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + ARMv8MMLldfdp + 0x3 + ARM-GNU + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\IntermediateFiles\ARMv8MMLldfdp\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 7 + + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 13 + + + + + + + + + + + BIN\UL2V8M.DLL + + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 -FC1000 -FD20000000 + + + 0 + UL2CM3 + -S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + + + + + 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 + + + + + + + + + + + + + BasicMathFunctions + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + arm_abs_f32.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + arm_abs_q7.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + arm_abs_q15.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + arm_abs_q31.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + arm_add_f32.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + arm_add_q7.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + arm_add_q15.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + arm_add_q31.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + arm_dot_prod_f32.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + arm_dot_prod_q7.c + 0 + 0 + + + 1 + 11 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + arm_dot_prod_q15.c + 0 + 0 + + + 1 + 12 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + arm_dot_prod_q31.c + 0 + 0 + + + 1 + 13 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + arm_mult_f32.c + 0 + 0 + + + 1 + 14 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + arm_mult_q7.c + 0 + 0 + + + 1 + 15 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + arm_mult_q15.c + 0 + 0 + + + 1 + 16 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + arm_mult_q31.c + 0 + 0 + + + 1 + 17 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + arm_negate_f32.c + 0 + 0 + + + 1 + 18 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + arm_negate_q7.c + 0 + 0 + + + 1 + 19 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + arm_negate_q15.c + 0 + 0 + + + 1 + 20 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + arm_negate_q31.c + 0 + 0 + + + 1 + 21 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + arm_offset_f32.c + 0 + 0 + + + 1 + 22 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + arm_offset_q7.c + 0 + 0 + + + 1 + 23 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + arm_offset_q15.c + 0 + 0 + + + 1 + 24 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + arm_offset_q31.c + 0 + 0 + + + 1 + 25 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + arm_scale_f32.c + 0 + 0 + + + 1 + 26 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + arm_scale_q7.c + 0 + 0 + + + 1 + 27 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + arm_scale_q15.c + 0 + 0 + + + 1 + 28 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + arm_scale_q31.c + 0 + 0 + + + 1 + 29 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + arm_shift_q7.c + 0 + 0 + + + 1 + 30 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + arm_shift_q15.c + 0 + 0 + + + 1 + 31 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + arm_shift_q31.c + 0 + 0 + + + 1 + 32 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + arm_sub_f32.c + 0 + 0 + + + 1 + 33 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + arm_sub_q7.c + 0 + 0 + + + 1 + 34 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + arm_sub_q15.c + 0 + 0 + + + 1 + 35 + 1 + 0 + 0 + 0 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + arm_sub_q31.c + 0 + 0 + + + + + FastMathFunctions + 0 + 0 + 0 + 0 + + 2 + 36 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + arm_cos_f32.c + 0 + 0 + + + 2 + 37 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + arm_cos_q15.c + 0 + 0 + + + 2 + 38 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + arm_cos_q31.c + 0 + 0 + + + 2 + 39 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + arm_sin_f32.c + 0 + 0 + + + 2 + 40 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + arm_sin_q15.c + 0 + 0 + + + 2 + 41 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + arm_sin_q31.c + 0 + 0 + + + 2 + 42 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + arm_sqrt_q15.c + 0 + 0 + + + 2 + 43 + 1 + 0 + 0 + 0 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + arm_sqrt_q31.c + 0 + 0 + + + + + ComplexMathFunctions + 0 + 0 + 0 + 0 + + 3 + 44 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + arm_cmplx_conj_f32.c + 0 + 0 + + + 3 + 45 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + arm_cmplx_conj_q15.c + 0 + 0 + + + 3 + 46 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + arm_cmplx_conj_q31.c + 0 + 0 + + + 3 + 47 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + arm_cmplx_dot_prod_f32.c + 0 + 0 + + + 3 + 48 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + arm_cmplx_dot_prod_q15.c + 0 + 0 + + + 3 + 49 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + arm_cmplx_dot_prod_q31.c + 0 + 0 + + + 3 + 50 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + arm_cmplx_mag_f32.c + 0 + 0 + + + 3 + 51 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + arm_cmplx_mag_q15.c + 0 + 0 + + + 3 + 52 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + arm_cmplx_mag_q31.c + 0 + 0 + + + 3 + 53 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + arm_cmplx_mag_squared_f32.c + 0 + 0 + + + 3 + 54 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + arm_cmplx_mag_squared_q15.c + 0 + 0 + + + 3 + 55 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + arm_cmplx_mag_squared_q31.c + 0 + 0 + + + 3 + 56 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + arm_cmplx_mult_cmplx_f32.c + 0 + 0 + + + 3 + 57 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + arm_cmplx_mult_cmplx_q15.c + 0 + 0 + + + 3 + 58 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + arm_cmplx_mult_cmplx_q31.c + 0 + 0 + + + 3 + 59 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + arm_cmplx_mult_real_f32.c + 0 + 0 + + + 3 + 60 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + arm_cmplx_mult_real_q15.c + 0 + 0 + + + 3 + 61 + 1 + 0 + 0 + 0 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + arm_cmplx_mult_real_q31.c + 0 + 0 + + + + + FilteringFunctions + 0 + 0 + 0 + 0 + + 4 + 62 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + arm_biquad_cascade_df1_32x64_init_q31.c + 0 + 0 + + + 4 + 63 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + arm_biquad_cascade_df1_32x64_q31.c + 0 + 0 + + + 4 + 64 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + arm_biquad_cascade_df1_f32.c + 0 + 0 + + + 4 + 65 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + arm_biquad_cascade_df1_fast_q15.c + 0 + 0 + + + 4 + 66 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + arm_biquad_cascade_df1_fast_q31.c + 0 + 0 + + + 4 + 67 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + arm_biquad_cascade_df1_init_f32.c + 0 + 0 + + + 4 + 68 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + arm_biquad_cascade_df1_init_q15.c + 0 + 0 + + + 4 + 69 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + arm_biquad_cascade_df1_init_q31.c + 0 + 0 + + + 4 + 70 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + arm_biquad_cascade_df1_q15.c + 0 + 0 + + + 4 + 71 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + arm_biquad_cascade_df1_q31.c + 0 + 0 + + + 4 + 72 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + arm_biquad_cascade_df2T_init_f32.c + 0 + 0 + + + 4 + 73 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + arm_conv_f32.c + 0 + 0 + + + 4 + 74 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + arm_conv_fast_q15.c + 0 + 0 + + + 4 + 75 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + arm_conv_fast_q31.c + 0 + 0 + + + 4 + 76 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + arm_conv_partial_f32.c + 0 + 0 + + + 4 + 77 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + arm_conv_partial_fast_q15.c + 0 + 0 + + + 4 + 78 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + arm_conv_partial_fast_q31.c + 0 + 0 + + + 4 + 79 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + arm_conv_partial_q7.c + 0 + 0 + + + 4 + 80 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + arm_conv_partial_q15.c + 0 + 0 + + + 4 + 81 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + arm_conv_partial_q31.c + 0 + 0 + + + 4 + 82 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + arm_conv_q7.c + 0 + 0 + + + 4 + 83 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + arm_conv_q15.c + 0 + 0 + + + 4 + 84 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + arm_conv_q31.c + 0 + 0 + + + 4 + 85 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + arm_correlate_f32.c + 0 + 0 + + + 4 + 86 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + arm_correlate_fast_q15.c + 0 + 0 + + + 4 + 87 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + arm_correlate_fast_q31.c + 0 + 0 + + + 4 + 88 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + arm_correlate_q7.c + 0 + 0 + + + 4 + 89 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + arm_correlate_q15.c + 0 + 0 + + + 4 + 90 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + arm_correlate_q31.c + 0 + 0 + + + 4 + 91 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + arm_fir_decimate_f32.c + 0 + 0 + + + 4 + 92 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + arm_fir_decimate_fast_q15.c + 0 + 0 + + + 4 + 93 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + arm_fir_decimate_fast_q31.c + 0 + 0 + + + 4 + 94 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + arm_fir_decimate_init_f32.c + 0 + 0 + + + 4 + 95 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + arm_fir_decimate_init_q15.c + 0 + 0 + + + 4 + 96 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + arm_fir_decimate_init_q31.c + 0 + 0 + + + 4 + 97 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + arm_fir_decimate_q15.c + 0 + 0 + + + 4 + 98 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + arm_fir_decimate_q31.c + 0 + 0 + + + 4 + 99 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + arm_fir_f32.c + 0 + 0 + + + 4 + 100 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + arm_fir_fast_q15.c + 0 + 0 + + + 4 + 101 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + arm_fir_fast_q31.c + 0 + 0 + + + 4 + 102 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + arm_fir_init_f32.c + 0 + 0 + + + 4 + 103 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + arm_fir_init_q7.c + 0 + 0 + + + 4 + 104 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + arm_fir_init_q15.c + 0 + 0 + + + 4 + 105 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + arm_fir_init_q31.c + 0 + 0 + + + 4 + 106 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + arm_fir_interpolate_f32.c + 0 + 0 + + + 4 + 107 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + arm_fir_interpolate_init_f32.c + 0 + 0 + + + 4 + 108 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + arm_fir_interpolate_init_q15.c + 0 + 0 + + + 4 + 109 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + arm_fir_interpolate_init_q31.c + 0 + 0 + + + 4 + 110 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + arm_fir_interpolate_q15.c + 0 + 0 + + + 4 + 111 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + arm_fir_interpolate_q31.c + 0 + 0 + + + 4 + 112 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + arm_fir_lattice_f32.c + 0 + 0 + + + 4 + 113 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + arm_fir_lattice_init_f32.c + 0 + 0 + + + 4 + 114 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + arm_fir_lattice_init_q15.c + 0 + 0 + + + 4 + 115 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + arm_fir_lattice_init_q31.c + 0 + 0 + + + 4 + 116 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + arm_fir_lattice_q15.c + 0 + 0 + + + 4 + 117 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + arm_fir_lattice_q31.c + 0 + 0 + + + 4 + 118 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + arm_fir_q7.c + 0 + 0 + + + 4 + 119 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + arm_fir_q15.c + 0 + 0 + + + 4 + 120 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + arm_fir_q31.c + 0 + 0 + + + 4 + 121 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + arm_fir_sparse_f32.c + 0 + 0 + + + 4 + 122 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + arm_fir_sparse_init_f32.c + 0 + 0 + + + 4 + 123 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + arm_fir_sparse_init_q7.c + 0 + 0 + + + 4 + 124 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + arm_fir_sparse_init_q15.c + 0 + 0 + + + 4 + 125 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + arm_fir_sparse_init_q31.c + 0 + 0 + + + 4 + 126 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + arm_fir_sparse_q7.c + 0 + 0 + + + 4 + 127 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + arm_fir_sparse_q15.c + 0 + 0 + + + 4 + 128 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + arm_fir_sparse_q31.c + 0 + 0 + + + 4 + 129 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + arm_iir_lattice_f32.c + 0 + 0 + + + 4 + 130 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + arm_iir_lattice_init_f32.c + 0 + 0 + + + 4 + 131 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + arm_iir_lattice_init_q15.c + 0 + 0 + + + 4 + 132 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + arm_iir_lattice_init_q31.c + 0 + 0 + + + 4 + 133 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + arm_iir_lattice_q15.c + 0 + 0 + + + 4 + 134 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + arm_iir_lattice_q31.c + 0 + 0 + + + 4 + 135 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + arm_lms_f32.c + 0 + 0 + + + 4 + 136 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + arm_lms_init_f32.c + 0 + 0 + + + 4 + 137 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + arm_lms_init_q15.c + 0 + 0 + + + 4 + 138 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + arm_lms_init_q31.c + 0 + 0 + + + 4 + 139 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + arm_lms_norm_f32.c + 0 + 0 + + + 4 + 140 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + arm_lms_norm_init_f32.c + 0 + 0 + + + 4 + 141 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + arm_lms_norm_init_q15.c + 0 + 0 + + + 4 + 142 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + arm_lms_norm_init_q31.c + 0 + 0 + + + 4 + 143 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + arm_lms_norm_q15.c + 0 + 0 + + + 4 + 144 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + arm_lms_norm_q31.c + 0 + 0 + + + 4 + 145 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + arm_lms_q15.c + 0 + 0 + + + 4 + 146 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + arm_lms_q31.c + 0 + 0 + + + 4 + 147 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + arm_correlate_opt_q15.c + 0 + 0 + + + 4 + 148 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + arm_conv_opt_q7.c + 0 + 0 + + + 4 + 149 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + arm_conv_opt_q15.c + 0 + 0 + + + 4 + 150 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + arm_conv_partial_opt_q7.c + 0 + 0 + + + 4 + 151 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + arm_conv_partial_opt_q15.c + 0 + 0 + + + 4 + 152 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + arm_correlate_opt_q7.c + 0 + 0 + + + 4 + 153 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + arm_correlate_fast_opt_q15.c + 0 + 0 + + + 4 + 154 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + arm_conv_fast_opt_q15.c + 0 + 0 + + + 4 + 155 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + arm_conv_partial_fast_opt_q15.c + 0 + 0 + + + 4 + 156 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + arm_biquad_cascade_df2T_f32.c + 0 + 0 + + + 4 + 157 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + arm_biquad_cascade_df2T_f64.c + 0 + 0 + + + 4 + 158 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + arm_biquad_cascade_df2T_init_f64.c + 0 + 0 + + + 4 + 159 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + arm_biquad_cascade_stereo_df2T_f32.c + 0 + 0 + + + 4 + 160 + 1 + 0 + 0 + 0 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + arm_biquad_cascade_stereo_df2T_init_f32.c + 0 + 0 + + + + + MatrixFunctions + 0 + 0 + 0 + 0 + + 5 + 161 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + arm_mat_add_f32.c + 0 + 0 + + + 5 + 162 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + arm_mat_add_q15.c + 0 + 0 + + + 5 + 163 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + arm_mat_add_q31.c + 0 + 0 + + + 5 + 164 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + arm_mat_init_f32.c + 0 + 0 + + + 5 + 165 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + arm_mat_init_q15.c + 0 + 0 + + + 5 + 166 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + arm_mat_init_q31.c + 0 + 0 + + + 5 + 167 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + arm_mat_inverse_f32.c + 0 + 0 + + + 5 + 168 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + arm_mat_mult_f32.c + 0 + 0 + + + 5 + 169 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + arm_mat_mult_fast_q15.c + 0 + 0 + + + 5 + 170 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + arm_mat_mult_fast_q31.c + 0 + 0 + + + 5 + 171 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + arm_mat_mult_q15.c + 0 + 0 + + + 5 + 172 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + arm_mat_mult_q31.c + 0 + 0 + + + 5 + 173 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + arm_mat_scale_f32.c + 0 + 0 + + + 5 + 174 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + arm_mat_scale_q15.c + 0 + 0 + + + 5 + 175 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + arm_mat_scale_q31.c + 0 + 0 + + + 5 + 176 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + arm_mat_sub_f32.c + 0 + 0 + + + 5 + 177 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + arm_mat_sub_q15.c + 0 + 0 + + + 5 + 178 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + arm_mat_sub_q31.c + 0 + 0 + + + 5 + 179 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + arm_mat_trans_f32.c + 0 + 0 + + + 5 + 180 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + arm_mat_trans_q15.c + 0 + 0 + + + 5 + 181 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + arm_mat_trans_q31.c + 0 + 0 + + + 5 + 182 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + arm_mat_cmplx_mult_f32.c + 0 + 0 + + + 5 + 183 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + arm_mat_cmplx_mult_q15.c + 0 + 0 + + + 5 + 184 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + arm_mat_cmplx_mult_q31.c + 0 + 0 + + + 5 + 185 + 1 + 0 + 0 + 0 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + arm_mat_inverse_f64.c + 0 + 0 + + + + + TransformFunctions + 0 + 0 + 0 + 0 + + 6 + 186 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_bitreversal.c + arm_bitreversal.c + 0 + 0 + + + 6 + 187 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + arm_bitreversal2.c + 0 + 0 + + + 6 + 188 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + arm_cfft_radix4_f32.c + 0 + 0 + + + 6 + 189 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + arm_cfft_radix4_init_f32.c + 0 + 0 + + + 6 + 190 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + arm_cfft_radix4_init_q15.c + 0 + 0 + + + 6 + 191 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + arm_cfft_radix4_init_q31.c + 0 + 0 + + + 6 + 192 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + arm_cfft_radix4_q15.c + 0 + 0 + + + 6 + 193 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + arm_cfft_radix4_q31.c + 0 + 0 + + + 6 + 194 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + arm_dct4_f32.c + 0 + 0 + + + 6 + 195 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + arm_dct4_init_f32.c + 0 + 0 + + + 6 + 196 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + arm_dct4_init_q15.c + 0 + 0 + + + 6 + 197 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + arm_dct4_init_q31.c + 0 + 0 + + + 6 + 198 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + arm_dct4_q15.c + 0 + 0 + + + 6 + 199 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + arm_dct4_q31.c + 0 + 0 + + + 6 + 200 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + arm_rfft_f32.c + 0 + 0 + + + 6 + 201 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + arm_rfft_init_f32.c + 0 + 0 + + + 6 + 202 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + arm_rfft_init_q15.c + 0 + 0 + + + 6 + 203 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + arm_rfft_init_q31.c + 0 + 0 + + + 6 + 204 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + arm_rfft_q15.c + 0 + 0 + + + 6 + 205 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + arm_rfft_q31.c + 0 + 0 + + + 6 + 206 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + arm_cfft_radix2_f32.c + 0 + 0 + + + 6 + 207 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + arm_cfft_radix2_init_f32.c + 0 + 0 + + + 6 + 208 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + arm_cfft_radix2_init_q15.c + 0 + 0 + + + 6 + 209 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + arm_cfft_radix2_init_q31.c + 0 + 0 + + + 6 + 210 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + arm_cfft_radix2_q15.c + 0 + 0 + + + 6 + 211 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + arm_cfft_radix2_q31.c + 0 + 0 + + + 6 + 212 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + arm_cfft_f32.c + 0 + 0 + + + 6 + 213 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + arm_cfft_radix8_f32.c + 0 + 0 + + + 6 + 214 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + arm_rfft_fast_f32.c + 0 + 0 + + + 6 + 215 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + arm_rfft_fast_init_f32.c + 0 + 0 + + + 6 + 216 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + arm_cfft_q31.c + 0 + 0 + + + 6 + 217 + 1 + 0 + 0 + 0 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + arm_cfft_q15.c + 0 + 0 + + + + + ControllerFunctions + 0 + 0 + 0 + 0 + + 7 + 218 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + arm_pid_init_f32.c + 0 + 0 + + + 7 + 219 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + arm_pid_init_q15.c + 0 + 0 + + + 7 + 220 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + arm_pid_init_q31.c + 0 + 0 + + + 7 + 221 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + arm_pid_reset_f32.c + 0 + 0 + + + 7 + 222 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + arm_pid_reset_q15.c + 0 + 0 + + + 7 + 223 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + arm_pid_reset_q31.c + 0 + 0 + + + 7 + 224 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + arm_sin_cos_f32.c + 0 + 0 + + + 7 + 225 + 1 + 0 + 0 + 0 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + arm_sin_cos_q31.c + 0 + 0 + + + + + StatisticsFunctions + 0 + 0 + 0 + 0 + + 8 + 226 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + arm_max_f32.c + 0 + 0 + + + 8 + 227 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + arm_max_q7.c + 0 + 0 + + + 8 + 228 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + arm_max_q15.c + 0 + 0 + + + 8 + 229 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + arm_max_q31.c + 0 + 0 + + + 8 + 230 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + arm_mean_f32.c + 0 + 0 + + + 8 + 231 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + arm_mean_q7.c + 0 + 0 + + + 8 + 232 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + arm_mean_q15.c + 0 + 0 + + + 8 + 233 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + arm_mean_q31.c + 0 + 0 + + + 8 + 234 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + arm_min_f32.c + 0 + 0 + + + 8 + 235 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + arm_min_q7.c + 0 + 0 + + + 8 + 236 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + arm_min_q15.c + 0 + 0 + + + 8 + 237 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + arm_min_q31.c + 0 + 0 + + + 8 + 238 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + arm_power_f32.c + 0 + 0 + + + 8 + 239 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + arm_power_q7.c + 0 + 0 + + + 8 + 240 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + arm_power_q15.c + 0 + 0 + + + 8 + 241 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + arm_power_q31.c + 0 + 0 + + + 8 + 242 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + arm_rms_f32.c + 0 + 0 + + + 8 + 243 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + arm_rms_q15.c + 0 + 0 + + + 8 + 244 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + arm_rms_q31.c + 0 + 0 + + + 8 + 245 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + arm_std_f32.c + 0 + 0 + + + 8 + 246 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + arm_std_q15.c + 0 + 0 + + + 8 + 247 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + arm_std_q31.c + 0 + 0 + + + 8 + 248 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + arm_var_f32.c + 0 + 0 + + + 8 + 249 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + arm_var_q15.c + 0 + 0 + + + 8 + 250 + 1 + 0 + 0 + 0 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + arm_var_q31.c + 0 + 0 + + + + + SupportFunctions + 0 + 0 + 0 + 0 + + 9 + 251 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_f32.c + arm_copy_f32.c + 0 + 0 + + + 9 + 252 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_q7.c + arm_copy_q7.c + 0 + 0 + + + 9 + 253 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_q15.c + arm_copy_q15.c + 0 + 0 + + + 9 + 254 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_copy_q31.c + arm_copy_q31.c + 0 + 0 + + + 9 + 255 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_f32.c + arm_fill_f32.c + 0 + 0 + + + 9 + 256 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_q7.c + arm_fill_q7.c + 0 + 0 + + + 9 + 257 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_q15.c + arm_fill_q15.c + 0 + 0 + + + 9 + 258 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_fill_q31.c + arm_fill_q31.c + 0 + 0 + + + 9 + 259 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + arm_float_to_q7.c + 0 + 0 + + + 9 + 260 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + arm_float_to_q15.c + 0 + 0 + + + 9 + 261 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + arm_float_to_q31.c + 0 + 0 + + + 9 + 262 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + arm_q7_to_float.c + 0 + 0 + + + 9 + 263 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + arm_q7_to_q15.c + 0 + 0 + + + 9 + 264 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + arm_q7_to_q31.c + 0 + 0 + + + 9 + 265 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + arm_q15_to_float.c + 0 + 0 + + + 9 + 266 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + arm_q15_to_q7.c + 0 + 0 + + + 9 + 267 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + arm_q15_to_q31.c + 0 + 0 + + + 9 + 268 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + arm_q31_to_float.c + 0 + 0 + + + 9 + 269 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + arm_q31_to_q7.c + 0 + 0 + + + 9 + 270 + 1 + 0 + 0 + 0 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + arm_q31_to_q15.c + 0 + 0 + + + + + CommonTables + 0 + 0 + 0 + 0 + + 10 + 271 + 1 + 0 + 0 + 0 + ..\..\Source\CommonTables\arm_common_tables.c + arm_common_tables.c + 0 + 0 + + + 10 + 272 + 1 + 0 + 0 + 0 + ..\..\Source\CommonTables\arm_const_structs.c + arm_const_structs.c + 0 + 0 + + + +
diff --git a/CMSIS/DSP/Projects/GCC/arm_cortexM_math.uvprojx b/CMSIS/DSP/Projects/GCC/arm_cortexM_math.uvprojx new file mode 100644 index 000000000..6329b9a85 --- /dev/null +++ b/CMSIS/DSP/Projects/GCC/arm_cortexM_math.uvprojx @@ -0,0 +1,35255 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + cortexM0l + 0x3 + ARM-GNU + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM0$Device\ARM\ARMCM0\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$Device\ARM\SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM0l\ + arm_cortexM0l_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM0l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "Cortex-M0" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_CM0_FAMILY, ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM0b + 0x3 + ARM-GNU + 0 + + + ARMCM0 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM0$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM0$Device\ARM\ARMCM0\Include\ARMCM0.h + + + + + + + + + + $$Device:ARMCM0$Device\ARM\SVD\ARMCM0.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM0b\ + arm_cortexM0b_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM0b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + "Cortex-M0" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_CM0_FAMILY, ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM3l + 0x3 + ARM-GNU + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM3$Device\ARM\ARMCM3\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$Device\ARM\SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM3l\ + arm_cortexM3l_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM3l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM3 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "Cortex-M3" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM3b + 0x3 + ARM-GNU + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x40000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M3") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL040000 -FP0($$Device:ARMCM3$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM3$Device\ARM\ARMCM3\Include\ARMCM3.h + + + + + + + + + + $$Device:ARMCM3$Device\ARM\SVD\ARMCM3.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM3b\ + arm_cortexM3b_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM3b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM3 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + "Cortex-M3" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4l + 0x3 + ARM-GNU + 0 + + + ARMCM4 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4$Device\ARM\ARMCM4\Include\ARMCM4.h + + + + + + + + + + $$Device:ARMCM4$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4l\ + arm_cortexM4l_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM4l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "Cortex-M4" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4b + 0x3 + ARM-GNU + 0 + + + ARMCM4 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4$Device\ARM\ARMCM4\Include\ARMCM4.h + + + + + + + + + + $$Device:ARMCM4$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4b\ + arm_cortexM4b_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM4b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + "Cortex-M4" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4lf + 0x3 + ARM-GNU + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4lf\ + arm_cortexM4lf_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM4lf\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + cmd.exe /C getSizeInfo "$L\lib@L.a" "@L_SizeInfo.txt" + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "Cortex-M4" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -mfpu=fpv4-sp-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM4bf + 0x3 + ARM-GNU + 0 + + + ARMCM4_FP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM4_FP$Device\ARM\ARMCM4\Include\ARMCM4_FP.h + + + + + + + + + + $$Device:ARMCM4_FP$Device\ARM\SVD\ARMCM4.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM4bf\ + arm_cortexM4bf_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM4bf\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + "Cortex-M4" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -mfpu=fpv4-sp-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7l + 0x3 + ARM-GNU + 0 + + + ARMCM7 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7$Device\ARM\ARMCM7\Include\ARMCM7.h + + + + + + + + + + $$Device:ARMCM7$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7l\ + arm_cortexM7l_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM7l\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "Cortex-M7" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7b + 0x3 + ARM-GNU + 0 + + + ARMCM7 + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7$Device\ARM\ARMCM7\Include\ARMCM7.h + + + + + + + + + + $$Device:ARMCM7$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7b\ + arm_cortexM7b_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM7b\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + "Cortex-M7" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7lfsp + 0x3 + ARM-GNU + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7lfsp\ + arm_cortexM7lfsp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM7lfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "Cortex-M7" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -mfpu=fpv5-sp-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7bfsp + 0x3 + ARM-GNU + 0 + + + ARMCM7_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_SP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_SP$Device\ARM\ARMCM7\Include\ARMCM7_SP.h + + + + + + + + + + $$Device:ARMCM7_SP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7bfsp\ + arm_cortexM7bfsp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM7bfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + "Cortex-M7" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -mfpu=fpv5-sp-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7lfdp + 0x3 + ARM-GNU + 0 + + + ARMCM7_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMCM7_DP$Device\ARM\ARMCM7\Include\ARMCM7_DP.h + + + + + + + + + + $$Device:ARMCM7_DP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7lfdp\ + arm_cortexM7lfdp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM7lfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "Cortex-M7" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -mfpu=fpv5-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -mfpu=fpv5-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + cortexM7bfdp + 0x3 + ARM-GNU + 0 + + + ARMCM7_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IROM(0x00000000,0x80000) IRAM(0x20000000,0x20000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0NEW_DEVICE -FS00 -FL080000 -FP0($$Device:ARMCM7_DP$Device\ARM\Flash\NEW_DEVICE.FLM)) + 0 + $$Device:ARMCM7_DP$Device\ARM\ARMCM7\Include\ARMCM7_DP.h + + + + + + + + + + $$Device:ARMCM7_DP$Device\ARM\SVD\ARMCM7.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\cortexM7bfdp\ + arm_cortexM7bfdp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\cortexM7bfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 0 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + "Cortex-M7" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -mfpu=fpv5-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL, ARM_MATH_BIG_ENDIAN + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -mfpu=fpv5-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MBLl + 0x3 + ARM-GNU + 0 + + + ARMv8MBL + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MBL") TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MBL$Device\ARM\ARMv8MBL\Include\ARMv8MBL.h + + + + + + + + + + $$Device:ARMv8MBL$Device\ARM\SVD\ARMv8MBL.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MBLl\ + arm_ARMv8MBLl_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\ARMv8MBLl\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MBL + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "ARMV8MBL" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -march=armv8-m.base + ARM_MATH_CM0_FAMILY, ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -march=armv8-m.base + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLl + 0x3 + ARM-GNU + 0 + + + ARMv8MML + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML$Device\ARM\ARMv8MML\Include\ARMv8MML.h + + + + + + + + + + $$Device:ARMv8MML$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLl\ + arm_ARMv8MMLl_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\ARMv8MMLl\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "ARMV8MML" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -march=armv8-m.main + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -march=armv8-m.main + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLlfsp + 0x3 + ARM-GNU + 0 + + + ARMv8MML_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") FPU3(SFPU) TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_SP$Device\ARM\ARMv8MML\Include\ARMv8MML_SP.h + + + + + + + + + + $$Device:ARMv8MML_SP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLlfsp\ + arm_ARMv8MMLlfsp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\ARMv8MMLlfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "ARMV8MML" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -march=armv8-m.main -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -march=armv8-m.main -mfpu=fpv5-sp-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLlfdp + 0x3 + ARM-GNU + 0 + + + ARMv8MML_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") FPU3(DFPU) TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DP$Device\ARM\ARMv8MML\Include\ARMv8MML_DP.h + + + + + + + + + + $$Device:ARMv8MML_DP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLlfdp\ + arm_ARMv8MMLlfdp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\ARMv8MMLlfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "ARMV8MML" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -march=armv8-m.main -mfpu=fpv5-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -march=armv8-m.main+dsp -mfpu=fpv5-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLld + 0x3 + ARM-GNU + 0 + + + ARMv8MML_DSP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") DSP TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DSP$Device\ARM\ARMv8MML\Include\ARMv8MML_DSP.h + + + + + + + + + + $$Device:ARMv8MML_DSP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLld\ + arm_ARMv8MMLld_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\ARMv8MMLld\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "ARMV8MML" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -march=armv8-m.main+dsp + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -march=armv8-m.main+dsp + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLldfsp + 0x3 + ARM-GNU + 0 + + + ARMv8MML_DSP_SP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") FPU3(SFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DSP_SP$Device\ARM\ARMv8MML\Include\ARMv8MML_DSP_SP.h + + + + + + + + + + $$Device:ARMv8MML_DSP_SP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLldfsp\ + arm_ARMv8MMLldfsp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\ARMv8MMLldfsp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "ARMV8MML" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -march=armv8-m.main+dsp -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -march=armv8-m.main+dsp -mfpu=fpv5-sp-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + ARMv8MMLldfdp + 0x3 + ARM-GNU + 0 + + + ARMv8MML_DSP_DP + ARM + ARM.CMSIS.5.5.0-dev52 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IRAM2(0x20200000,0x00020000) IROM(0x00000000,0x00200000) IROM2(0x00200000,0x00200000) CPUTYPE("ARMV8MML") FPU3(DFPU) DSP TZ CLOCK(12000000) ESEL ELITTLE + + + UL2V8M(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMv8MML_DSP_DP$Device\ARM\ARMv8MML\Include\ARMv8MML_DSP_DP.h + + + + + + + + + + $$Device:ARMv8MML_DSP_DP$Device\ARM\SVD\ARMv8MML.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\IntermediateFiles\ARMv8MMLldfdp\ + arm_ARMv8MMLldfdp_math + 0 + 1 + 0 + 1 + 0 + .\IntermediateFiles\ARMv8MMLldfdp\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd.exe /C copy "$L\lib@L.a" "..\..\Lib\GCC\" + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + + + + SARMV8M.DLL + -MPU + TCM.DLL + -pV8MML + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2V8M.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + "ARMV8MML" + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 3 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20200000 + 0x20000 + + + 1 + 0x200000 + 0x200000 + + + + + 0 + 0 + 0 + 0 + 0 + 0 + 5 + 2 + 1 + + -fno-strict-aliasing -ffunction-sections -fdata-sections -march=armv8-m.main+dsp -mfpu=fpv5-d16 -mfloat-abi=hard -ffp-contract=off + ARM_MATH_MATRIX_CHECK, ARM_MATH_ROUNDING, ARM_MATH_LOOPUNROLL + + ..\..\Include;..\..\..\Core\Include;..\..\..\Include + + + + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + + + + + + -Wl,--gc-sections -march=armv8-m.main+dsp -mfpu=fpv5-d16 -mfloat-abi=hard + + + + + + + BasicMathFunctions + + + arm_abs_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + arm_abs_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + arm_abs_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + arm_abs_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + arm_add_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_f32.c + + + arm_add_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q7.c + + + arm_add_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q15.c + + + arm_add_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_add_q31.c + + + arm_dot_prod_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + arm_dot_prod_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + arm_dot_prod_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + arm_dot_prod_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + arm_mult_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + arm_mult_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + arm_mult_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + arm_mult_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + arm_negate_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + arm_negate_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + arm_negate_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + arm_negate_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + arm_offset_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + arm_offset_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + arm_offset_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + arm_offset_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + arm_scale_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + arm_scale_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + arm_scale_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + arm_scale_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + arm_shift_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + arm_shift_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + arm_shift_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + arm_sub_f32.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + arm_sub_q7.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + arm_sub_q15.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + arm_sub_q31.c + 1 + ..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + + + FastMathFunctions + + + arm_cos_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_f32.c + + + arm_cos_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q15.c + + + arm_cos_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_cos_q31.c + + + arm_sin_f32.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_f32.c + + + arm_sin_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q15.c + + + arm_sin_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sin_q31.c + + + arm_sqrt_q15.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + arm_sqrt_q31.c + 1 + ..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + + ComplexMathFunctions + + + arm_cmplx_conj_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + arm_cmplx_conj_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + arm_cmplx_conj_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + arm_cmplx_dot_prod_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + arm_cmplx_dot_prod_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + arm_cmplx_dot_prod_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + arm_cmplx_mag_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + arm_cmplx_mag_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + arm_cmplx_mag_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + arm_cmplx_mag_squared_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + arm_cmplx_mag_squared_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + arm_cmplx_mag_squared_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + arm_cmplx_mult_cmplx_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + arm_cmplx_mult_cmplx_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + arm_cmplx_mult_cmplx_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + arm_cmplx_mult_real_f32.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + arm_cmplx_mult_real_q15.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + arm_cmplx_mult_real_q31.c + 1 + ..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + + FilteringFunctions + + + arm_biquad_cascade_df1_32x64_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + arm_biquad_cascade_df1_32x64_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + arm_biquad_cascade_df1_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + arm_biquad_cascade_df1_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + arm_biquad_cascade_df1_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + arm_biquad_cascade_df1_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + arm_biquad_cascade_df1_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + arm_biquad_cascade_df1_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + arm_biquad_cascade_df1_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + arm_biquad_cascade_df1_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + arm_biquad_cascade_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + arm_conv_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_f32.c + + + arm_conv_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + arm_conv_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + arm_conv_partial_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + arm_conv_partial_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + arm_conv_partial_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + arm_conv_partial_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + arm_conv_partial_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + arm_conv_partial_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + arm_conv_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q7.c + + + arm_conv_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q15.c + + + arm_conv_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_q31.c + + + arm_correlate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + arm_correlate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + arm_correlate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + arm_correlate_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + arm_correlate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + arm_correlate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + arm_fir_decimate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + arm_fir_decimate_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + arm_fir_decimate_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + arm_fir_decimate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + arm_fir_decimate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + arm_fir_decimate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + arm_fir_decimate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + arm_fir_decimate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + arm_fir_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_f32.c + + + arm_fir_fast_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + arm_fir_fast_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + arm_fir_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + arm_fir_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + arm_fir_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + arm_fir_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + arm_fir_interpolate_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + arm_fir_interpolate_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + arm_fir_interpolate_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + arm_fir_interpolate_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + arm_fir_interpolate_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + arm_fir_interpolate_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + arm_fir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + arm_fir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + arm_fir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + arm_fir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + arm_fir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + arm_fir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + arm_fir_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q7.c + + + arm_fir_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q15.c + + + arm_fir_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_q31.c + + + arm_fir_sparse_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + arm_fir_sparse_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + arm_fir_sparse_init_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + arm_fir_sparse_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + arm_fir_sparse_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + arm_fir_sparse_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + arm_fir_sparse_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + arm_fir_sparse_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + arm_iir_lattice_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + arm_iir_lattice_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + arm_iir_lattice_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + arm_iir_lattice_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + arm_iir_lattice_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + arm_iir_lattice_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + arm_lms_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_f32.c + + + arm_lms_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + arm_lms_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + arm_lms_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + arm_lms_norm_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + arm_lms_norm_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + arm_lms_norm_init_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + arm_lms_norm_init_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + arm_lms_norm_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + arm_lms_norm_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + arm_lms_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q15.c + + + arm_lms_q31.c + 1 + ..\..\Source\FilteringFunctions\arm_lms_q31.c + + + arm_correlate_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + arm_conv_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + arm_conv_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + arm_conv_partial_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + arm_conv_partial_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + arm_correlate_opt_q7.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + arm_correlate_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + arm_conv_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + arm_conv_partial_fast_opt_q15.c + 1 + ..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + arm_biquad_cascade_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + arm_biquad_cascade_df2T_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + arm_biquad_cascade_df2T_init_f64.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + arm_biquad_cascade_stereo_df2T_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + arm_biquad_cascade_stereo_df2T_init_f32.c + 1 + ..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + + + MatrixFunctions + + + arm_mat_add_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + arm_mat_add_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + arm_mat_add_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + arm_mat_init_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + arm_mat_init_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + arm_mat_init_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + arm_mat_inverse_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + arm_mat_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + arm_mat_mult_fast_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + arm_mat_mult_fast_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + arm_mat_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + arm_mat_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + arm_mat_scale_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + arm_mat_scale_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + arm_mat_scale_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + arm_mat_sub_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + arm_mat_sub_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + arm_mat_sub_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + arm_mat_trans_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + arm_mat_trans_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + arm_mat_trans_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + arm_mat_cmplx_mult_f32.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + arm_mat_cmplx_mult_q15.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + arm_mat_cmplx_mult_q31.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + arm_mat_inverse_f64.c + 1 + ..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + + + TransformFunctions + + + arm_bitreversal.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal.c + + + arm_bitreversal2.c + 1 + ..\..\Source\TransformFunctions\arm_bitreversal2.c + + + arm_cfft_radix4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + arm_cfft_radix4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + arm_cfft_radix4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + arm_cfft_radix4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + arm_cfft_radix4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + arm_cfft_radix4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + arm_dct4_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_f32.c + + + arm_dct4_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + arm_dct4_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + arm_dct4_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + arm_dct4_q15.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q15.c + + + arm_dct4_q31.c + 1 + ..\..\Source\TransformFunctions\arm_dct4_q31.c + + + arm_rfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_f32.c + + + arm_rfft_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + arm_rfft_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + arm_rfft_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + arm_rfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q15.c + + + arm_rfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_q31.c + + + arm_cfft_radix2_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + arm_cfft_radix2_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + arm_cfft_radix2_init_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + arm_cfft_radix2_init_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + arm_cfft_radix2_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + arm_cfft_radix2_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + arm_cfft_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_f32.c + + + arm_cfft_radix8_f32.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + arm_rfft_fast_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + arm_rfft_fast_init_f32.c + 1 + ..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + arm_cfft_q31.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q31.c + + + arm_cfft_q15.c + 1 + ..\..\Source\TransformFunctions\arm_cfft_q15.c + + + + + ControllerFunctions + + + arm_pid_init_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + arm_pid_init_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + arm_pid_init_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + arm_pid_reset_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + arm_pid_reset_q15.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + arm_pid_reset_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + arm_sin_cos_f32.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + arm_sin_cos_q31.c + 1 + ..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + + StatisticsFunctions + + + arm_max_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_f32.c + + + arm_max_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q7.c + + + arm_max_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q15.c + + + arm_max_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_max_q31.c + + + arm_mean_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + arm_mean_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + arm_mean_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + arm_mean_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + arm_min_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_f32.c + + + arm_min_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q7.c + + + arm_min_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q15.c + + + arm_min_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_min_q31.c + + + arm_power_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_f32.c + + + arm_power_q7.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q7.c + + + arm_power_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q15.c + + + arm_power_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_power_q31.c + + + arm_rms_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + arm_rms_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + arm_rms_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + arm_std_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_f32.c + + + arm_std_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q15.c + + + arm_std_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_std_q31.c + + + arm_var_f32.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_f32.c + + + arm_var_q15.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q15.c + + + arm_var_q31.c + 1 + ..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + + SupportFunctions + + + arm_copy_f32.c + 1 + ..\..\Source\SupportFunctions\arm_copy_f32.c + + + arm_copy_q7.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q7.c + + + arm_copy_q15.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q15.c + + + arm_copy_q31.c + 1 + ..\..\Source\SupportFunctions\arm_copy_q31.c + + + arm_fill_f32.c + 1 + ..\..\Source\SupportFunctions\arm_fill_f32.c + + + arm_fill_q7.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q7.c + + + arm_fill_q15.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q15.c + + + arm_fill_q31.c + 1 + ..\..\Source\SupportFunctions\arm_fill_q31.c + + + arm_float_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q7.c + + + arm_float_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q15.c + + + arm_float_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_float_to_q31.c + + + arm_q7_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_float.c + + + arm_q7_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + arm_q7_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + arm_q15_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_float.c + + + arm_q15_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + arm_q15_to_q31.c + 1 + ..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + arm_q31_to_float.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_float.c + + + arm_q31_to_q7.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + arm_q31_to_q15.c + 1 + ..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + + + CommonTables + + + arm_common_tables.c + 1 + ..\..\Source\CommonTables\arm_common_tables.c + + + arm_const_structs.c + 1 + ..\..\Source\CommonTables\arm_const_structs.c + + + + + + + + + + + + + +
diff --git a/CMSIS/DSP/Projects/GCC/arm_cortexM_math_Build.bat b/CMSIS/DSP/Projects/GCC/arm_cortexM_math_Build.bat new file mode 100644 index 000000000..6904763a3 --- /dev/null +++ b/CMSIS/DSP/Projects/GCC/arm_cortexM_math_Build.bat @@ -0,0 +1,84 @@ +@echo off + +mkdir Temp +set TMP=Temp +set TEMP=Temp +set UVEXE=C:\Keil_v5\UV4\UV4.EXE + +echo. +echo Building DSP Libraries GCC + +echo Building DSP Library for Cortex-M0 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM0l" -o "DspLib_cortexM0l_build.log" + +echo Building DSP Library for Cortex-M3 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM3l" -o "DspLib_cortexM3l_build.log" + +echo Building DSP Library for Cortex-M4 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4l" -o "DspLib_cortexM4l_build.log" + +echo Building DSP Library for Cortex-M4 Little Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4lf" -o "DspLib_cortexM4lf_build.log" + +echo Building DSP Library for Cortex-M7 Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7l" -o "DspLib_cortexM7l_build.log" + +echo Building DSP Library for Cortex-M7 Little Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7lfsp" -o "DspLib_cortexM7lfsp_build.log" + +echo Building DSP Library for Cortex-M7 Little Endian with double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7lfdp" -o "DspLib_cortexM7lfdp_build.log" + +echo Building DSP Library for ARMv8-M Baseline Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MBLl" -o "DspLib_ARMv8MBLl_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLl" -o "DspLib_ARMv8MMLl_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLlfsp" -o "DspLib_ARMv8MMLlfsp_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLlfdp" -o "DspLib_ARMv8MMLlfdp_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLld" -o "DspLib_ARMv8MMLld_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions, single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLldfsp" -o "DspLib_ARMv8MMLldfsp_build.log" + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions, double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "ARMv8MMLldfdp" -o "DspLib_ARMv8MMLldfdp_build.log" + + +REM big endian libraries + +echo Building DSP Library for Cortex-M0 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM0b" -o "DspLib_cortexM0b_build.log" + +echo Building DSP Library for Cortex-M3 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM3b" -o "DspLib_cortexM3b_build.log" + +echo Building DSP Library for Cortex-M4 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4b" -o "DspLib_cortexM4b_build.log" + +echo Building DSP Library for Cortex-M4 Big Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM4bf" -o "DspLib_cortexM4bf_build.log" + +echo Building DSP Library for Cortex-M7 Big Endian +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7b" -o "DspLib_cortexM7b_build.log" + +echo Building DSP Library for Cortex-M7 Big Endian with single precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7bfsp" -o "DspLib_cortexM7bfsp_build.log" + +echo Building DSP Library for Cortex-M7 Big Endian with double precision FPU +%UVEXE% -rb -j0 arm_cortexM_math.uvprojx -t "cortexM7bfdp" -o "DspLib_cortexM7bfdp_build.log" + +echo. +echo Deleting intermediate files +rmdir /S /Q Temp +rmdir /S /Q IntermediateFiles +del /Q *.bak +del /Q *.dep +del /Q *.uvguix.* +del /Q ArInp.* diff --git a/CMSIS/DSP/Projects/IAR/arm_cortexM_math.ewp b/CMSIS/DSP/Projects/IAR/arm_cortexM_math.ewp new file mode 100644 index 000000000..7486e94e4 --- /dev/null +++ b/CMSIS/DSP/Projects/IAR/arm_cortexM_math.ewp @@ -0,0 +1,22676 @@ + + + 3 + + cortexM0l + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM0b + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM3l + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM3b + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM4l + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM4b + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM4lf + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM4bf + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM7l + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM7b + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM7lfsp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM7bfsp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM7lfdp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + cortexM7bfdp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + ARMv8MBLl + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + ARMv8MMLl + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + ARMv8MMLlfsp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + ARMv8MMLlfdp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + ARMv8MMLld + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + ARMv8MMLldfsp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + ARMv8MMLldfdp + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + BasicMathFunctions + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_abs_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_abs_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_abs_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_abs_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_add_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_add_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_add_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_add_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_dot_prod_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_dot_prod_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_dot_prod_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_dot_prod_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_mult_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_mult_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_mult_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_mult_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_negate_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_negate_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_negate_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_negate_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_offset_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_offset_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_offset_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_offset_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_scale_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_scale_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_scale_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_scale_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_shift_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_shift_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_shift_q7.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_sub_f32.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_sub_q15.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_sub_q31.c + + + $PROJ_DIR$\..\..\Source\BasicMathFunctions\arm_sub_q7.c + + + + CommonTables + + $PROJ_DIR$\..\..\Source\CommonTables\arm_common_tables.c + + + $PROJ_DIR$\..\..\Source\CommonTables\arm_const_structs.c + + + + ComplexMathFunctions + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_conj_f32.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q15.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_conj_q31.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_f32.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q15.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_dot_prod_q31.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mag_f32.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q15.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mag_q31.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_f32.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q15.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mag_squared_q31.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_f32.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q15.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mult_cmplx_q31.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_f32.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q15.c + + + $PROJ_DIR$\..\..\Source\ComplexMathFunctions\arm_cmplx_mult_real_q31.c + + + + ControllerFunctions + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_pid_init_f32.c + + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_pid_init_q15.c + + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_pid_init_q31.c + + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_pid_reset_f32.c + + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_pid_reset_q15.c + + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_pid_reset_q31.c + + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_sin_cos_f32.c + + + $PROJ_DIR$\..\..\Source\ControllerFunctions\arm_sin_cos_q31.c + + + + FastMathFunctions + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_cos_f32.c + + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_cos_q15.c + + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_cos_q31.c + + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_sin_f32.c + + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_sin_q15.c + + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_sin_q31.c + + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_sqrt_q15.c + + + $PROJ_DIR$\..\..\Source\FastMathFunctions\arm_sqrt_q31.c + + + + FilteringFunctions + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_32x64_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_fast_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df1_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_f64.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_df2T_init_f64.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_biquad_cascade_stereo_df2T_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_fast_opt_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_fast_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_fast_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_opt_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_opt_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_fast_opt_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_fast_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_fast_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_opt_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_opt_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_partial_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_conv_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_fast_opt_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_fast_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_fast_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_opt_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_opt_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_correlate_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_fast_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_decimate_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_fast_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_fast_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_init_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_interpolate_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_interpolate_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_interpolate_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_interpolate_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_interpolate_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_lattice_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_lattice_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_lattice_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_lattice_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_lattice_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_lattice_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_init_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_fir_sparse_q7.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_iir_lattice_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_iir_lattice_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_iir_lattice_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_iir_lattice_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_iir_lattice_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_iir_lattice_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_norm_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_norm_init_f32.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_norm_init_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_norm_init_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_norm_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_norm_q31.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_q15.c + + + $PROJ_DIR$\..\..\Source\FilteringFunctions\arm_lms_q31.c + + + + MatrixFunctions + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_add_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_add_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_add_q31.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_cmplx_mult_q31.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_init_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_init_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_init_q31.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_inverse_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_inverse_f64.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_mult_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_mult_fast_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_mult_fast_q31.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_mult_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_mult_q31.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_scale_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_scale_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_scale_q31.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_sub_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_sub_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_sub_q31.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_trans_f32.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_trans_q15.c + + + $PROJ_DIR$\..\..\Source\MatrixFunctions\arm_mat_trans_q31.c + + + + StatisticsFunctions + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_max_f32.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_max_q15.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_max_q31.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_max_q7.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_mean_f32.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_mean_q15.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_mean_q31.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_mean_q7.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_min_f32.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_min_q15.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_min_q31.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_min_q7.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_power_f32.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_power_q15.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_power_q31.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_power_q7.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_rms_f32.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_rms_q15.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_rms_q31.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_std_f32.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_std_q15.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_std_q31.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_var_f32.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_var_q15.c + + + $PROJ_DIR$\..\..\Source\StatisticsFunctions\arm_var_q31.c + + + + SupportFunctions + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_copy_f32.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_copy_q15.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_copy_q31.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_copy_q7.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_fill_f32.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_fill_q15.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_fill_q31.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_fill_q7.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_float_to_q15.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_float_to_q31.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_float_to_q7.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q15_to_float.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q15_to_q31.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q15_to_q7.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q31_to_float.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q31_to_q15.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q31_to_q7.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q7_to_float.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q7_to_q15.c + + + $PROJ_DIR$\..\..\Source\SupportFunctions\arm_q7_to_q31.c + + + + TransformFunctions + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_bitreversal.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_bitreversal2.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix2_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix2_init_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix2_init_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix2_init_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix2_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix2_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix4_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix4_init_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix4_init_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix4_init_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix4_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix4_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_cfft_radix8_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_dct4_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_dct4_init_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_dct4_init_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_dct4_init_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_dct4_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_dct4_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_fast_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_fast_init_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_init_f32.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_init_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_init_q31.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_q15.c + + + $PROJ_DIR$\..\..\Source\TransformFunctions\arm_rfft_q31.c + + + diff --git a/CMSIS/DSP/Projects/IAR/arm_cortexM_math.eww b/CMSIS/DSP/Projects/IAR/arm_cortexM_math.eww new file mode 100644 index 000000000..c0f8828cd --- /dev/null +++ b/CMSIS/DSP/Projects/IAR/arm_cortexM_math.eww @@ -0,0 +1,8 @@ + + + + + $WS_DIR$\arm_cortexM_math.ewp + + + diff --git a/CMSIS/DSP/Projects/IAR/arm_cortexM_math_Build.bat b/CMSIS/DSP/Projects/IAR/arm_cortexM_math_Build.bat new file mode 100644 index 000000000..0afdf656e --- /dev/null +++ b/CMSIS/DSP/Projects/IAR/arm_cortexM_math_Build.bat @@ -0,0 +1,106 @@ +@echo off + +mkdir Temp +set TMP=Temp +set TEMP=Temp +rem set IAREXE=..\..\..\..\..\common\bin\iarbuild.exe +set IAREXE=iarbuild.exe + +echo. +echo Building DSP Libraries ARM + +echo Building DSP Library for Cortex-M0 Little Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM0l + +echo Building DSP Library for Cortex-M3 Little Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM3l + +echo Building DSP Library for Cortex-M4 Little Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM4l + +echo Building DSP Library for Cortex-M4 Little Endian with single precision FPU +%IAREXE% arm_cortexM_math.ewp -build cortexM4lf + +echo Building DSP Library for Cortex-M7 Little Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM7l + +echo Building DSP Library for Cortex-M7 Little Endian with single precision FPU +%IAREXE% arm_cortexM_math.ewp -build cortexM7lfsp + +echo Building DSP Library for Cortex-M7 Little Endian with double precision FPU +%IAREXE% arm_cortexM_math.ewp -build cortexM7lfdp + +echo Building DSP Library for ARMv8-M Baseline Little Endian +%IAREXE% arm_cortexM_math.ewp -build ARMv8MBLl + +echo Building DSP Library for ARMv8-M Mainline Little Endian +%IAREXE% arm_cortexM_math.ewp -build ARMv8MMLl + +echo Building DSP Library for ARMv8-M Mainline Little Endian with single precision FPU +%IAREXE% arm_cortexM_math.ewp -build ARMv8MMLlfsp + +echo Building DSP Library for ARMv8-M Mainline Little Endian with double precision FPU +%IAREXE% arm_cortexM_math.ewp -build ARMv8MMLlfdp + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions +%IAREXE% arm_cortexM_math.ewp -build ARMv8MMLld + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions, single precision FPU +%IAREXE% arm_cortexM_math.ewp -build ARMv8MMLldfsp + +echo Building DSP Library for ARMv8-M Mainline Little Endian with DSP instructions, double precision FPU +%IAREXE% arm_cortexM_math.ewp -build ARMv8MMLldfdp + + +REM big endian libraries + +echo Building DSP Library for Cortex-M0 Big Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM0b + +echo Building DSP Library for Cortex-M3 Big Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM3b + +echo Building DSP Library for Cortex-M4 Big Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM4b + +echo Building DSP Library for Cortex-M4 Big Endian with single precision FPU +%IAREXE% arm_cortexM_math.ewp -build cortexM4bf + +echo Building DSP Library for Cortex-M7 Big Endian +%IAREXE% arm_cortexM_math.ewp -build cortexM7b + +echo Building DSP Library for Cortex-M7 Big Endian with single precision FPU +%IAREXE% arm_cortexM_math.ewp -build cortexM7bfsp + +echo Building DSP Library for Cortex-M7 Big Endian with double precision FPU +%IAREXE% arm_cortexM_math.ewp -build cortexM7bfdp + +echo Copy libs to CMSIS\lib\IAR +mkdir ..\..\lib\IAR +copy ReleaseM0BE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM0LE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM3BE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM3LE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM4BE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM4BE_FPU\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM4LE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM4LE_FPU\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM7BE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM7BE_FPU_DP\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM7BE_FPU_SP\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM7LE\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM7LE_FPU_DP\Exe\*.a ..\..\lib\IAR\ /Y +copy ReleaseM7LE_FPU_SP\Exe\*.a ..\..\lib\IAR\ /Y +copy ARMv8MBLl\Exe\*.a ..\..\lib\IAR\ /Y +copy ARMv8MMLl\Exe\*.a ..\..\lib\IAR\ /Y +copy ARMv8MMLld\Exe\*.a ..\..\lib\IAR\ /Y +copy ARMv8MMLldfdp\Exe\*.a ..\..\lib\IAR\ /Y +copy ARMv8MMLldfsp\Exe\*.a ..\..\lib\IAR\ /Y +copy ARMv8MMLlfdp\Exe\*.a ..\..\lib\IAR\ /Y +copy ARMv8MMLlfsp\Exe\*.a ..\..\lib\IAR\ /Y + +echo. +echo Deleting intermediate files +for /d %%a in (Temp ARMv8M* ReleaseM*) do rmdir /s /q "%%~a" +del /Q *.bak +del /Q *.dep diff --git a/CMSIS/DSP/Source/BasicMathFunctions/BasicMathFunctions.c b/CMSIS/DSP/Source/BasicMathFunctions/BasicMathFunctions.c new file mode 100644 index 000000000..b444c1104 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/BasicMathFunctions.c @@ -0,0 +1,63 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: BasicMathFunctions.c + * Description: Combination of all basic math function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_abs_f32.c" +#include "arm_abs_q15.c" +#include "arm_abs_q31.c" +#include "arm_abs_q7.c" +#include "arm_add_f32.c" +#include "arm_add_q15.c" +#include "arm_add_q31.c" +#include "arm_add_q7.c" +#include "arm_dot_prod_f32.c" +#include "arm_dot_prod_q15.c" +#include "arm_dot_prod_q31.c" +#include "arm_dot_prod_q7.c" +#include "arm_mult_f32.c" +#include "arm_mult_q15.c" +#include "arm_mult_q31.c" +#include "arm_mult_q7.c" +#include "arm_negate_f32.c" +#include "arm_negate_q15.c" +#include "arm_negate_q31.c" +#include "arm_negate_q7.c" +#include "arm_offset_f32.c" +#include "arm_offset_q15.c" +#include "arm_offset_q31.c" +#include "arm_offset_q7.c" +#include "arm_scale_f32.c" +#include "arm_scale_q15.c" +#include "arm_scale_q31.c" +#include "arm_scale_q7.c" +#include "arm_shift_q15.c" +#include "arm_shift_q31.c" +#include "arm_shift_q7.c" +#include "arm_sub_f32.c" +#include "arm_sub_q15.c" +#include "arm_sub_q31.c" +#include "arm_sub_q7.c" diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_f32.c new file mode 100644 index 000000000..a7d2624e3 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_f32.c @@ -0,0 +1,146 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_abs_f32.c + * Description: Floating-point vector absolute value + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicAbs Vector Absolute Value + + Computes the absolute value of a vector on an element-by-element basis. + +
+      pDst[n] = abs(pSrc[n]),   0 <= n < blockSize.
+  
+ + The functions support in-place computation allowing the source and + destination pointers to reference the same memory buffer. + There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + @addtogroup BasicAbs + @{ + */ + +/** + @brief Floating-point vector absolute value. + @param[in] pSrc points to the input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_abs_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined(ARM_MATH_NEON) + float32x4_t vec1; + float32x4_t res; + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute values and then store the results in the destination buffer. */ + vec1 = vld1q_f32(pSrc); + res = vabsq_f32(vec1); + vst1q_f32(pDst, res); + + /* Increment pointers */ + pSrc += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute and store result in destination buffer. */ + *pDst++ = fabsf(*pSrc++); + + *pDst++ = fabsf(*pSrc++); + + *pDst++ = fabsf(*pSrc++); + + *pDst++ = fabsf(*pSrc++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute and store result in destination buffer. */ + *pDst++ = fabsf(*pSrc++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAbs group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q15.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q15.c new file mode 100644 index 000000000..eb944ced9 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q15.c @@ -0,0 +1,132 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_abs_q15.c + * Description: Q15 vector absolute value + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicAbs + @{ + */ + +/** + @brief Q15 vector absolute value. + @param[in] pSrc points to the input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q15 value -1 (0x8000) will be saturated to the maximum allowable positive value 0x7FFF. + */ + +void arm_abs_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + q15_t in; /* Temporary input variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute of input (if -1 then saturated to 0x7fff) and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute of input (if -1 then saturated to 0x7fff) and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q15_t)__QSUB16(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q15_t) 0x8000) ? 0x7fff : -in); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAbs group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q31.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q31.c new file mode 100644 index 000000000..bf7608bd7 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q31.c @@ -0,0 +1,132 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_abs_q31.c + * Description: Q31 vector absolute value + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicAbs + @{ + */ + +/** + @brief Q31 vector absolute value. + @param[in] pSrc points to the input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q31 value -1 (0x80000000) will be saturated to the maximum allowable positive value 0x7FFFFFFF. + */ + +void arm_abs_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t in; /* Temporary variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute of input (if -1 then saturated to 0x7fffffff) and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute of input (if -1 then saturated to 0x7fffffff) and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q31_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == INT32_MIN) ? INT32_MAX : -in); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAbs group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q7.c new file mode 100644 index 000000000..a6c4a6cb6 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_abs_q7.c @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_abs_q7.c + * Description: Q7 vector absolute value + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicAbs + @{ + */ + +/** + @brief Q7 vector absolute value. + @param[in] pSrc points to the input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Conditions for optimum performance + Input and output buffers should be aligned by 32-bit + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q7 value -1 (0x80) will be saturated to the maximum allowable positive value 0x7F. + */ + +void arm_abs_q7( + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + q7_t in; /* Temporary input variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute of input (if -1 then saturated to 0x7f) and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q7_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q7_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q7_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q7_t)__QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = |A| */ + + /* Calculate absolute of input (if -1 then saturated to 0x7f) and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = (in > 0) ? in : (q7_t) __QSUB(0, in); +#else + *pDst++ = (in > 0) ? in : ((in == (q7_t) 0x80) ? (q7_t) 0x7f : -in); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAbs group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_add_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_f32.c new file mode 100644 index 000000000..1c66a24cb --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_f32.c @@ -0,0 +1,145 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_add_f32.c + * Description: Floating-point vector addition + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicAdd Vector Addition + + Element-by-element addition of two vectors. + +
+      pDst[n] = pSrcA[n] + pSrcB[n],   0 <= n < blockSize.
+  
+ + There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + @addtogroup BasicAdd + @{ + */ + +/** + @brief Floating-point vector addition. + @param[in] pSrcA points to first input vector + @param[in] pSrcB points to second input vector + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_add_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined(ARM_MATH_NEON) + float32x4_t vec1; + float32x4_t vec2; + float32x4_t res; + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + B */ + + /* Add and then store the results in the destination buffer. */ + vec1 = vld1q_f32(pSrcA); + vec2 = vld1q_f32(pSrcB); + res = vaddq_f32(vec1, vec2); + vst1q_f32(pDst, res); + + /* Increment pointers */ + pSrcA += 4; + pSrcB += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + B */ + + /* Add and store result in destination buffer. */ + *pDst++ = (*pSrcA++) + (*pSrcB++); + *pDst++ = (*pSrcA++) + (*pSrcB++); + *pDst++ = (*pSrcA++) + (*pSrcB++); + *pDst++ = (*pSrcA++) + (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C = A + B */ + + /* Add and store result in destination buffer. */ + *pDst++ = (*pSrcA++) + (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAdd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q15.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q15.c new file mode 100644 index 000000000..bc629370f --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q15.c @@ -0,0 +1,126 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_add_q15.c + * Description: Q15 vector addition + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicAdd + @{ + */ + +/** + @brief Q15 vector addition. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. + */ + +void arm_add_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t inA1, inA2; + q31_t inB1, inB2; +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + B */ + +#if defined (ARM_MATH_DSP) + /* read 2 times 2 samples at a time from sourceA */ + inA1 = read_q15x2_ia ((q15_t **) &pSrcA); + inA2 = read_q15x2_ia ((q15_t **) &pSrcA); + /* read 2 times 2 samples at a time from sourceB */ + inB1 = read_q15x2_ia ((q15_t **) &pSrcB); + inB2 = read_q15x2_ia ((q15_t **) &pSrcB); + + /* Add and store 2 times 2 samples at a time */ + write_q15x2_ia (&pDst, __QADD16(inA1, inB1)); + write_q15x2_ia (&pDst, __QADD16(inA2, inB2)); +#else + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A + B */ + + /* Add and store result in destination buffer. */ +#if defined (ARM_MATH_DSP) + *pDst++ = (q15_t) __QADD16(*pSrcA++, *pSrcB++); +#else + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ + *pSrcB++), 16); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAdd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q31.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q31.c new file mode 100644 index 000000000..3c1cbc24b --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q31.c @@ -0,0 +1,108 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_add_q31.c + * Description: Q31 vector addition + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicAdd + @{ + */ + +/** + @brief Q31 vector addition. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. + */ + +void arm_add_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + B */ + + /* Add and store result in destination buffer. */ + *pDst++ = __QADD(*pSrcA++, *pSrcB++); + + *pDst++ = __QADD(*pSrcA++, *pSrcB++); + + *pDst++ = __QADD(*pSrcA++, *pSrcB++); + + *pDst++ = __QADD(*pSrcA++, *pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A + B */ + + /* Add and store result in destination buffer. */ + *pDst++ = __QADD(*pSrcA++, *pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAdd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q7.c new file mode 100644 index 000000000..f9c4a95ec --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_add_q7.c @@ -0,0 +1,109 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_add_q7.c + * Description: Q7 vector addition + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicAdd + @{ + */ + +/** + @brief Q7 vector addition. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q7 range [0x80 0x7F] are saturated. + */ + +void arm_add_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + B */ + +#if defined (ARM_MATH_DSP) + /* Add and store result in destination buffer (4 samples at a time). */ + write_q7x4_ia (&pDst, __QADD8 (read_q7x4_ia ((q7_t **) &pSrcA), read_q7x4_ia ((q7_t **) &pSrcB))); +#else + *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); + *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); + *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); + *pDst++ = (q7_t) __SSAT ((q15_t) *pSrcA++ + *pSrcB++, 8); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A + B */ + + /* Add and store result in destination buffer. */ + *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ + *pSrcB++, 8); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicAdd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_f32.c new file mode 100644 index 000000000..3eee3b97a --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_f32.c @@ -0,0 +1,163 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_dot_prod_f32.c + * Description: Floating-point dot product + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicDotProd Vector Dot Product + + Computes the dot product of two vectors. + The vectors are multiplied element-by-element and then summed. + +
+      sum = pSrcA[0]*pSrcB[0] + pSrcA[1]*pSrcB[1] + ... + pSrcA[blockSize-1]*pSrcB[blockSize-1]
+  
+ + There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + @addtogroup BasicDotProd + @{ + */ + +/** + @brief Dot product of floating-point vectors. + @param[in] pSrcA points to the first input vector. + @param[in] pSrcB points to the second input vector. + @param[in] blockSize number of samples in each vector. + @param[out] result output result returned here. + @return none + */ + +void arm_dot_prod_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + uint32_t blockSize, + float32_t * result) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t sum = 0.0f; /* Temporary return variable */ + +#if defined(ARM_MATH_NEON) + float32x4_t vec1; + float32x4_t vec2; + float32x4_t res; + float32x4_t accum = vdupq_n_f32(0); + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + vec1 = vld1q_f32(pSrcA); + vec2 = vld1q_f32(pSrcB); + + while (blkCnt > 0U) + { + /* C = A[0]*B[0] + A[1]*B[1] + A[2]*B[2] + ... + A[blockSize-1]*B[blockSize-1] */ + /* Calculate dot product and then store the result in a temporary buffer. */ + + accum = vmlaq_f32(accum, vec1, vec2); + + /* Increment pointers */ + pSrcA += 4; + pSrcB += 4; + + vec1 = vld1q_f32(pSrcA); + vec2 = vld1q_f32(pSrcB); + + /* Decrement the loop counter */ + blkCnt--; + } + +#if __aarch64__ + sum = vpadds_f32(vpadd_f32(vget_low_f32(accum), vget_high_f32(accum))); +#else + sum = (vpadd_f32(vget_low_f32(accum), vget_high_f32(accum)))[0] + (vpadd_f32(vget_low_f32(accum), vget_high_f32(accum)))[1]; +#endif + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + + /* Calculate dot product and store result in a temporary buffer. */ + sum += (*pSrcA++) * (*pSrcB++); + + sum += (*pSrcA++) * (*pSrcB++); + + sum += (*pSrcA++) * (*pSrcB++); + + sum += (*pSrcA++) * (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + + /* Calculate dot product and store result in a temporary buffer. */ + sum += (*pSrcA++) * (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store result in destination buffer */ + *result = sum; +} + +/** + @} end of BasicDotProd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q15.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q15.c new file mode 100644 index 000000000..e303b090d --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q15.c @@ -0,0 +1,120 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_dot_prod_q15.c + * Description: Q15 dot product + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicDotProd + @{ + */ + +/** + @brief Dot product of Q15 vectors. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[in] blockSize number of samples in each vector + @param[out] result output result returned here + @return none + + @par Scaling and Overflow Behavior + The intermediate multiplications are in 1.15 x 1.15 = 2.30 format and these + results are added to a 64-bit accumulator in 34.30 format. + Nonsaturating additions are used and given that there are 33 guard bits in the accumulator + there is no risk of overflow. + The return result is in 34.30 format. + */ + +void arm_dot_prod_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + uint32_t blockSize, + q63_t * result) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Temporary return variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + +#if defined (ARM_MATH_DSP) + /* Calculate dot product and store result in a temporary buffer. */ + sum = __SMLALD(read_q15x2_ia ((q15_t **) &pSrcA), read_q15x2_ia ((q15_t **) &pSrcB), sum); + sum = __SMLALD(read_q15x2_ia ((q15_t **) &pSrcA), read_q15x2_ia ((q15_t **) &pSrcB), sum); +#else + sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); + sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); + sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); + sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + + /* Calculate dot product and store result in a temporary buffer. */ +//#if defined (ARM_MATH_DSP) +// sum = __SMLALD(*pSrcA++, *pSrcB++, sum); +//#else + sum += (q63_t)((q31_t) *pSrcA++ * *pSrcB++); +//#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store result in destination buffer in 34.30 format */ + *result = sum; +} + +/** + @} end of BasicDotProd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q31.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q31.c new file mode 100644 index 000000000..76cd5776f --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q31.c @@ -0,0 +1,115 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_dot_prod_q31.c + * Description: Q31 dot product + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicDotProd + @{ + */ + +/** + @brief Dot product of Q31 vectors. + @param[in] pSrcA points to the first input vector. + @param[in] pSrcB points to the second input vector. + @param[in] blockSize number of samples in each vector. + @param[out] result output result returned here. + @return none + + @par Scaling and Overflow Behavior + The intermediate multiplications are in 1.31 x 1.31 = 2.62 format and these + are truncated to 2.48 format by discarding the lower 14 bits. + The 2.48 result is then added without saturation to a 64-bit accumulator in 16.48 format. + There are 15 guard bits in the accumulator and there is no risk of overflow as long as + the length of the vectors is less than 2^16 elements. + The return result is in 16.48 format. + */ + +void arm_dot_prod_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + uint32_t blockSize, + q63_t * result) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Temporary return variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + + /* Calculate dot product and store result in a temporary buffer. */ + sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; + + sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; + + sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; + + sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + + /* Calculate dot product and store result in a temporary buffer. */ + sum += ((q63_t) *pSrcA++ * *pSrcB++) >> 14U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store result in destination buffer in 16.48 format */ + *result = sum; +} + +/** + @} end of BasicDotProd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q7.c new file mode 100644 index 000000000..8e18a7397 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_dot_prod_q7.c @@ -0,0 +1,139 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_dot_prod_q7.c + * Description: Q7 dot product + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicDotProd + @{ + */ + +/** + @brief Dot product of Q7 vectors. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[in] blockSize number of samples in each vector + @param[out] result output result returned here + @return none + + @par Scaling and Overflow Behavior + The intermediate multiplications are in 1.7 x 1.7 = 2.14 format and these + results are added to an accumulator in 18.14 format. + Nonsaturating additions are used and there is no danger of wrap around as long as + the vectors are less than 2^18 elements long. + The return result is in 18.14 format. + */ + +void arm_dot_prod_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + uint32_t blockSize, + q31_t * result) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t sum = 0; /* Temporary return variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t input1, input2; /* Temporary variables */ + q31_t inA1, inA2, inB1, inB2; /* Temporary variables */ +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + +#if defined (ARM_MATH_DSP) + /* read 4 samples at a time from sourceA */ + input1 = read_q7x4_ia ((q7_t **) &pSrcA); + /* read 4 samples at a time from sourceB */ + input2 = read_q7x4_ia ((q7_t **) &pSrcB); + + /* extract two q7_t samples to q15_t samples */ + inA1 = __SXTB16(__ROR(input1, 8)); + /* extract reminaing two samples */ + inA2 = __SXTB16(input1); + /* extract two q7_t samples to q15_t samples */ + inB1 = __SXTB16(__ROR(input2, 8)); + /* extract reminaing two samples */ + inB2 = __SXTB16(input2); + + /* multiply and accumulate two samples at a time */ + sum = __SMLAD(inA1, inB1, sum); + sum = __SMLAD(inA2, inB2, sum); +#else + sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); + sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); + sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); + sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */ + + /* Calculate dot product and store result in a temporary buffer. */ +//#if defined (ARM_MATH_DSP) +// sum = __SMLAD(*pSrcA++, *pSrcB++, sum); +//#else + sum += (q31_t) ((q15_t) *pSrcA++ * *pSrcB++); +//#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store result in destination buffer in 18.14 format */ + *result = sum; +} + +/** + @} end of BasicDotProd group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_mult_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_mult_f32.c new file mode 100644 index 000000000..53ad73c81 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_mult_f32.c @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mult_f32.c + * Description: Floating-point vector multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicMult Vector Multiplication + + Element-by-element multiplication of two vectors. + +
+      pDst[n] = pSrcA[n] * pSrcB[n],   0 <= n < blockSize.
+  
+ + There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + @addtogroup BasicMult + @{ + */ + +/** + @brief Floating-point vector multiplication. + @param[in] pSrcA points to the first input vector. + @param[in] pSrcB points to the second input vector. + @param[out] pDst points to the output vector. + @param[in] blockSize number of samples in each vector. + @return none + */ + +void arm_mult_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined(ARM_MATH_NEON) + float32x4_t vec1; + float32x4_t vec2; + float32x4_t res; + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * B */ + + /* Multiply the inputs and then store the results in the destination buffer. */ + vec1 = vld1q_f32(pSrcA); + vec2 = vld1q_f32(pSrcB); + res = vmulq_f32(vec1, vec2); + vst1q_f32(pDst, res); + + /* Increment pointers */ + pSrcA += 4; + pSrcB += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * B */ + + /* Multiply inputs and store result in destination buffer. */ + *pDst++ = (*pSrcA++) * (*pSrcB++); + + *pDst++ = (*pSrcA++) * (*pSrcB++); + + *pDst++ = (*pSrcA++) * (*pSrcB++); + + *pDst++ = (*pSrcA++) * (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C = A * B */ + + /* Multiply input and store result in destination buffer. */ + *pDst++ = (*pSrcA++) * (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicMult group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_mult_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_mult_q7.c new file mode 100644 index 000000000..5587ce5e3 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_mult_q7.c @@ -0,0 +1,119 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mult_q7.c + * Description: Q7 vector multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicMult + @{ + */ + +/** + @brief Q7 vector multiplication + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q7 range [0x80 0x7F] are saturated. + */ + +void arm_mult_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q7_t out1, out2, out3, out4; /* Temporary output variables */ +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * B */ + +#if defined (ARM_MATH_DSP) + /* Multiply inputs and store results in temporary variables */ + out1 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + out2 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + out3 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + out4 = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + + /* Pack and store result in destination buffer (in single write) */ + write_q7x4_ia (&pDst, __PACKq7(out1, out2, out3, out4)); +#else + *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A * B */ + + /* Multiply input and store result in destination buffer. */ + *pDst++ = (q7_t) __SSAT((((q15_t) (*pSrcA++) * (*pSrcB++)) >> 7), 8); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicMult group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_f32.c new file mode 100644 index 000000000..f807112c1 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_f32.c @@ -0,0 +1,145 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_negate_f32.c + * Description: Negates floating-point vectors + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicNegate Vector Negate + + Negates the elements of a vector. + +
+      pDst[n] = -pSrc[n],   0 <= n < blockSize.
+  
+ + The functions support in-place computation allowing the source and + destination pointers to reference the same memory buffer. + There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + @addtogroup BasicNegate + @{ + */ + +/** + @brief Negates the elements of a floating-point vector. + @param[in] pSrc points to input vector. + @param[out] pDst points to output vector. + @param[in] blockSize number of samples in each vector. + @return none + */ + +void arm_negate_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined(ARM_MATH_NEON_EXPERIMENTAL) + float32x4_t vec1; + float32x4_t res; + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = -A */ + + /* Negate and then store the results in the destination buffer. */ + vec1 = vld1q_f32(pSrc); + res = vnegq_f32(vec1); + vst1q_f32(pDst, res); + + /* Increment pointers */ + pSrc += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = -A */ + + /* Negate and store result in destination buffer. */ + *pDst++ = -*pSrc++; + + *pDst++ = -*pSrc++; + + *pDst++ = -*pSrc++; + + *pDst++ = -*pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON_EXPERIMENTAL) */ + + while (blkCnt > 0U) + { + /* C = -A */ + + /* Negate and store result in destination buffer. */ + *pDst++ = -*pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicNegate group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q15.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q15.c new file mode 100644 index 000000000..267e4cc90 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q15.c @@ -0,0 +1,126 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_negate_q15.c + * Description: Negates Q15 vectors + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicNegate + @{ + */ + +/** + @brief Negates the elements of a Q15 vector. + @param[in] pSrc points to the input vector. + @param[out] pDst points to the output vector. + @param[in] blockSize number of samples in each vector. + @return none + + @par Conditions for optimum performance + Input and output buffers should be aligned by 32-bit + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q15 value -1 (0x8000) is saturated to the maximum allowable positive value 0x7FFF. + */ + +void arm_negate_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + q15_t in; /* Temporary input variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t in1; /* Temporary input variables */ +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = -A */ + +#if defined (ARM_MATH_DSP) + /* Negate and store result in destination buffer (2 samples at a time). */ + in1 = read_q15x2_ia ((q15_t **) &pSrc); + write_q15x2_ia (&pDst, __QSUB16(0, in1)); + + in1 = read_q15x2_ia ((q15_t **) &pSrc); + write_q15x2_ia (&pDst, __QSUB16(0, in1)); +#else + in = *pSrc++; + *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; + + in = *pSrc++; + *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; + + in = *pSrc++; + *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; + + in = *pSrc++; + *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = -A */ + + /* Negate and store result in destination buffer. */ + in = *pSrc++; + *pDst++ = (in == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicNegate group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q31.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q31.c new file mode 100644 index 000000000..645fb0ac0 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q31.c @@ -0,0 +1,132 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_negate_q31.c + * Description: Negates Q31 vectors + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicNegate + @{ + */ + +/** + @brief Negates the elements of a Q31 vector. + @param[in] pSrc points to the input vector. + @param[out] pDst points to the output vector. + @param[in] blockSize number of samples in each vector. + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q31 value -1 (0x80000000) is saturated to the maximum allowable positive value 0x7FFFFFFF. + */ + +void arm_negate_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t in; /* Temporary input variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = -A */ + + /* Negate and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = -A */ + + /* Negate and store result in destination buffer. */ + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicNegate group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q7.c new file mode 100644 index 000000000..40a373e06 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_negate_q7.c @@ -0,0 +1,126 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_negate_q7.c + * Description: Negates Q7 vectors + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicNegate + @{ + */ + +/** + @brief Negates the elements of a Q7 vector. + @param[in] pSrc points to the input vector. + @param[out] pDst points to the output vector. + @param[in] blockSize number of samples in each vector. + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q7 value -1 (0x80) is saturated to the maximum allowable positive value 0x7F. + */ + +void arm_negate_q7( + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + q7_t in; /* Temporary input variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t in1; /* Temporary input variable */ +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = -A */ + +#if defined (ARM_MATH_DSP) + /* Negate and store result in destination buffer (4 samples at a time). */ + in1 = read_q7x4_ia ((q7_t **) &pSrc); + write_q7x4_ia (&pDst, __QSUB8(0, in1)); +#else + in = *pSrc++; + *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; + + in = *pSrc++; + *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; + + in = *pSrc++; + *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; + + in = *pSrc++; + *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = -A */ + + /* Negate and store result in destination buffer. */ + in = *pSrc++; + +#if defined (ARM_MATH_DSP) + *pDst++ = (q7_t) __QSUB(0, in); +#else + *pDst++ = (in == (q7_t) 0x80) ? (q7_t) 0x7f : -in; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicNegate group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_f32.c new file mode 100644 index 000000000..b10e3f1d4 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_f32.c @@ -0,0 +1,147 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_offset_f32.c + * Description: Floating-point vector offset + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicOffset Vector Offset + + Adds a constant offset to each element of a vector. + +
+      pDst[n] = pSrc[n] + offset,   0 <= n < blockSize.
+  
+ + The functions support in-place computation allowing the source and + destination pointers to reference the same memory buffer. + There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + @addtogroup BasicOffset + @{ + */ + +/** + @brief Adds a constant offset to a floating-point vector. + @param[in] pSrc points to the input vector + @param[in] offset is the offset to be added + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_offset_f32( + const float32_t * pSrc, + float32_t offset, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined(ARM_MATH_NEON_EXPERIMENTAL) + float32x4_t vec1; + float32x4_t res; + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + offset */ + + /* Add offset and then store the results in the destination buffer. */ + vec1 = vld1q_f32(pSrc); + res = vaddq_f32(vec1,vdupq_n_f32(offset)); + vst1q_f32(pDst, res); + + /* Increment pointers */ + pSrc += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + offset */ + + /* Add offset and store result in destination buffer. */ + *pDst++ = (*pSrc++) + offset; + + *pDst++ = (*pSrc++) + offset; + + *pDst++ = (*pSrc++) + offset; + + *pDst++ = (*pSrc++) + offset; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON_EXPERIMENTAL) */ + + while (blkCnt > 0U) + { + /* C = A + offset */ + + /* Add offset and store result in destination buffer. */ + *pDst++ = (*pSrc++) + offset; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicOffset group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q15.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q15.c new file mode 100644 index 000000000..cd2f22b58 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q15.c @@ -0,0 +1,121 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_offset_q15.c + * Description: Q15 vector offset + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicOffset + @{ + */ + +/** + @brief Adds a constant offset to a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] offset is the offset to be added + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. + */ + +void arm_offset_q15( + const q15_t * pSrc, + q15_t offset, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t offset_packed; /* Offset packed to 32 bit */ + + /* Offset is packed to 32 bit in order to use SIMD32 for addition */ + offset_packed = __PKHBT(offset, offset, 16); +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + offset */ + +#if defined (ARM_MATH_DSP) + /* Add offset and store result in destination buffer (2 samples at a time). */ + write_q15x2_ia (&pDst, __QADD16(read_q15x2_ia ((q15_t **) &pSrc), offset_packed)); + write_q15x2_ia (&pDst, __QADD16(read_q15x2_ia ((q15_t **) &pSrc), offset_packed)); +#else + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A + offset */ + + /* Add offset and store result in destination buffer. */ +#if defined (ARM_MATH_DSP) + *pDst++ = (q15_t) __QADD16(*pSrc++, offset); +#else + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrc++ + offset), 16); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicOffset group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q31.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q31.c new file mode 100644 index 000000000..5de36b4b4 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q31.c @@ -0,0 +1,128 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_offset_q31.c + * Description: Q31 vector offset + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicOffset + @{ + */ + +/** + @brief Adds a constant offset to a Q31 vector. + @param[in] pSrc points to the input vector + @param[in] offset is the offset to be added + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. + */ + +void arm_offset_q31( + const q31_t * pSrc, + q31_t offset, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + offset */ + + /* Add offset and store result in destination buffer. */ +#if defined (ARM_MATH_DSP) + *pDst++ = __QADD(*pSrc++, offset); +#else + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); +#endif + +#if defined (ARM_MATH_DSP) + *pDst++ = __QADD(*pSrc++, offset); +#else + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); +#endif + +#if defined (ARM_MATH_DSP) + *pDst++ = __QADD(*pSrc++, offset); +#else + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); +#endif + +#if defined (ARM_MATH_DSP) + *pDst++ = __QADD(*pSrc++, offset); +#else + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A + offset */ + + /* Add offset and store result in destination buffer. */ +#if defined (ARM_MATH_DSP) + *pDst++ = __QADD(*pSrc++, offset); +#else + *pDst++ = (q31_t) clip_q63_to_q31((q63_t) * pSrc++ + offset); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicOffset group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q7.c new file mode 100644 index 000000000..f67db4565 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_offset_q7.c @@ -0,0 +1,116 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_offset_q7.c + * Description: Q7 vector offset + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicOffset + @{ + */ + +/** + @brief Adds a constant offset to a Q7 vector. + @param[in] pSrc points to the input vector + @param[in] offset is the offset to be added + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q7 range [0x80 0x7F] are saturated. + */ + +void arm_offset_q7( + const q7_t * pSrc, + q7_t offset, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t offset_packed; /* Offset packed to 32 bit */ + + /* Offset is packed to 32 bit in order to use SIMD32 for addition */ + offset_packed = __PACKq7(offset, offset, offset, offset); +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A + offset */ + +#if defined (ARM_MATH_DSP) + /* Add offset and store result in destination buffer (4 samples at a time). */ + write_q7x4_ia (&pDst, __QADD8(read_q7x4_ia ((q7_t **) &pSrc), offset_packed)); +#else + *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); + *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); + *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); + *pDst++ = (q7_t) __SSAT(*pSrc++ + offset, 8); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A + offset */ + + /* Add offset and store result in destination buffer. */ + *pDst++ = (q7_t) __SSAT((q15_t) *pSrc++ + offset, 8); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicOffset group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_f32.c new file mode 100644 index 000000000..72ecbe5cb --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_f32.c @@ -0,0 +1,159 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_scale_f32.c + * Description: Multiplies a floating-point vector by a scalar + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicScale Vector Scale + + Multiply a vector by a scalar value. For floating-point data, the algorithm used is: + +
+      pDst[n] = pSrc[n] * scale,   0 <= n < blockSize.
+  
+ + In the fixed-point Q7, Q15, and Q31 functions, scale is represented by + a fractional multiplication scaleFract and an arithmetic shift shift. + The shift allows the gain of the scaling operation to exceed 1.0. + The algorithm used with fixed-point data is: + +
+      pDst[n] = (pSrc[n] * scaleFract) << shift,   0 <= n < blockSize.
+  
+ + The overall scale factor applied to the fixed-point data is +
+      scale = scaleFract * 2^shift.
+  
+ + The functions support in-place computation allowing the source and destination + pointers to reference the same memory buffer. + */ + +/** + @addtogroup BasicScale + @{ + */ + +/** + @brief Multiplies a floating-point vector by a scalar. + @param[in] pSrc points to the input vector + @param[in] scale scale factor to be applied + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_scale_f32( + const float32_t *pSrc, + float32_t scale, + float32_t *pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ +#if defined(ARM_MATH_NEON_EXPERIMENTAL) + float32x4_t vec1; + float32x4_t res; + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale the input and then store the results in the destination buffer. */ + vec1 = vld1q_f32(pSrc); + res = vmulq_f32(vec1, vdupq_n_f32(scale)); + vst1q_f32(pDst, res); + + /* Increment pointers */ + pSrc += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + *pDst++ = (*pSrc++) * scale; + + *pDst++ = (*pSrc++) * scale; + + *pDst++ = (*pSrc++) * scale; + + *pDst++ = (*pSrc++) * scale; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON_EXPERIMENTAL) */ + + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + *pDst++ = (*pSrc++) * scale; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicScale group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q15.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q15.c new file mode 100644 index 000000000..039b93dd6 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q15.c @@ -0,0 +1,144 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_scale_q15.c + * Description: Multiplies a Q15 vector by a scalar + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicScale + @{ + */ + +/** + @brief Multiplies a Q15 vector by a scalar. + @param[in] pSrc points to the input vector + @param[in] scaleFract fractional portion of the scale value + @param[in] shift number of bits to shift the result by + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The input data *pSrc and scaleFract are in 1.15 format. + These are multiplied to yield a 2.30 intermediate result and this is shifted with saturation to 1.15 format. + */ + +void arm_scale_q15( + const q15_t *pSrc, + q15_t scaleFract, + int8_t shift, + q15_t *pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + int8_t kShift = 15 - shift; /* Shift to apply after scaling */ + +#if defined (ARM_MATH_LOOPUNROLL) +#if defined (ARM_MATH_DSP) + q31_t inA1, inA2; + q31_t out1, out2, out3, out4; /* Temporary output variables */ + q15_t in1, in2, in3, in4; /* Temporary input variables */ +#endif +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * scale */ + +#if defined (ARM_MATH_DSP) + /* read 2 times 2 samples at a time from source */ + inA1 = read_q15x2_ia ((q15_t **) &pSrc); + inA2 = read_q15x2_ia ((q15_t **) &pSrc); + + /* Scale inputs and store result in temporary variables + * in single cycle by packing the outputs */ + out1 = (q31_t) ((q15_t) (inA1 >> 16) * scaleFract); + out2 = (q31_t) ((q15_t) (inA1 ) * scaleFract); + out3 = (q31_t) ((q15_t) (inA2 >> 16) * scaleFract); + out4 = (q31_t) ((q15_t) (inA2 ) * scaleFract); + + /* apply shifting */ + out1 = out1 >> kShift; + out2 = out2 >> kShift; + out3 = out3 >> kShift; + out4 = out4 >> kShift; + + /* saturate the output */ + in1 = (q15_t) (__SSAT(out1, 16)); + in2 = (q15_t) (__SSAT(out2, 16)); + in3 = (q15_t) (__SSAT(out3, 16)); + in4 = (q15_t) (__SSAT(out4, 16)); + + /* store result to destination */ + write_q15x2_ia (&pDst, __PKHBT(in2, in1, 16)); + write_q15x2_ia (&pDst, __PKHBT(in4, in3, 16)); +#else + *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); + *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); + *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); + *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + *pDst++ = (q15_t) (__SSAT(((q31_t) *pSrc++ * scaleFract) >> kShift, 16)); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicScale group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q31.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q31.c new file mode 100644 index 000000000..d762ca7c7 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q31.c @@ -0,0 +1,191 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_scale_q31.c + * Description: Multiplies a Q31 vector by a scalar + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicScale + @{ + */ + +/** + @brief Multiplies a Q31 vector by a scalar. + @param[in] pSrc points to the input vector + @param[in] scaleFract fractional portion of the scale value + @param[in] shift number of bits to shift the result by + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The input data *pSrc and scaleFract are in 1.31 format. + These are multiplied to yield a 2.62 intermediate result and this is shifted with saturation to 1.31 format. + */ + +void arm_scale_q31( + const q31_t *pSrc, + q31_t scaleFract, + int8_t shift, + q31_t *pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t in, out; /* Temporary variables */ + int8_t kShift = shift + 1; /* Shift to apply after scaling */ + int8_t sign = (kShift & 0x80); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + if (sign == 0U) + { + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + in = *pSrc++; /* read input from source */ + in = ((q63_t) in * scaleFract) >> 32; /* multiply input with scaler value */ + out = in << kShift; /* apply shifting */ + if (in != (out >> kShift)) /* saturate the result */ + out = 0x7FFFFFFF ^ (in >> 31); + *pDst++ = out; /* Store result destination */ + + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in << kShift; + if (in != (out >> kShift)) + out = 0x7FFFFFFF ^ (in >> 31); + *pDst++ = out; + + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in << kShift; + if (in != (out >> kShift)) + out = 0x7FFFFFFF ^ (in >> 31); + *pDst++ = out; + + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in << kShift; + if (in != (out >> kShift)) + out = 0x7FFFFFFF ^ (in >> 31); + *pDst++ = out; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + in = *pSrc++; /* read four inputs from source */ + in = ((q63_t) in * scaleFract) >> 32; /* multiply input with scaler value */ + out = in >> -kShift; /* apply shifting */ + *pDst++ = out; /* Store result destination */ + + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in >> -kShift; + *pDst++ = out; + + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in >> -kShift; + *pDst++ = out; + + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in >> -kShift; + *pDst++ = out; + + /* Decrement loop counter */ + blkCnt--; + } + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + if (sign == 0U) + { + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in << kShift; + if (in != (out >> kShift)) + out = 0x7FFFFFFF ^ (in >> 31); + *pDst++ = out; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + in = *pSrc++; + in = ((q63_t) in * scaleFract) >> 32; + out = in >> -kShift; + *pDst++ = out; + + /* Decrement loop counter */ + blkCnt--; + } + } + +} + +/** + @} end of BasicScale group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q7.c new file mode 100644 index 000000000..cb967d280 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_scale_q7.c @@ -0,0 +1,129 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_scale_q7.c + * Description: Multiplies a Q7 vector by a scalar + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicScale + @{ + */ + +/** + @brief Multiplies a Q7 vector by a scalar. + @param[in] pSrc points to the input vector + @param[in] scaleFract fractional portion of the scale value + @param[in] shift number of bits to shift the result by + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The input data *pSrc and scaleFract are in 1.7 format. + These are multiplied to yield a 2.14 intermediate result and this is shifted with saturation to 1.7 format. + */ + +void arm_scale_q7( + const q7_t * pSrc, + q7_t scaleFract, + int8_t shift, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + int8_t kShift = 7 - shift; /* Shift to apply after scaling */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q7_t in1, in2, in3, in4; /* Temporary input variables */ + q7_t out1, out2, out3, out4; /* Temporary output variables */ +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * scale */ + +#if defined (ARM_MATH_DSP) + /* Reading 4 inputs from memory */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + /* Scale inputs and store result in the temporary variable. */ + out1 = (q7_t) (__SSAT(((in1) * scaleFract) >> kShift, 8)); + out2 = (q7_t) (__SSAT(((in2) * scaleFract) >> kShift, 8)); + out3 = (q7_t) (__SSAT(((in3) * scaleFract) >> kShift, 8)); + out4 = (q7_t) (__SSAT(((in4) * scaleFract) >> kShift, 8)); + + /* Pack and store result in destination buffer (in single write) */ + write_q7x4_ia (&pDst, __PACKq7(out1, out2, out3, out4)); +#else + *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); + *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); + *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); + *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A * scale */ + + /* Scale input and store result in destination buffer. */ + *pDst++ = (q7_t) (__SSAT((((q15_t) *pSrc++ * scaleFract) >> kShift), 8)); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicScale group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_shift_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_shift_q7.c new file mode 100644 index 000000000..c4163fc87 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_shift_q7.c @@ -0,0 +1,175 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_shift_q7.c + * Description: Processing function for the Q7 Shifting + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicShift + @{ + */ + +/** + @brief Shifts the elements of a Q7 vector a specified number of bits + @param[in] pSrc points to the input vector + @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par onditions for optimum performance + Input and output buffers should be aligned by 32-bit + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q7 range [0x80 0x7F] are saturated. + */ + +void arm_shift_q7( + const q7_t * pSrc, + int8_t shiftBits, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + uint8_t sign = (shiftBits & 0x80); /* Sign of shiftBits */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q7_t in1, in2, in3, in4; /* Temporary input variables */ +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + /* If the shift value is positive then do right shift else left shift */ + if (sign == 0U) + { + while (blkCnt > 0U) + { + /* C = A << shiftBits */ + +#if defined (ARM_MATH_DSP) + /* Read 4 inputs */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + /* Pack and store result in destination buffer (in single write) */ + write_q7x4_ia (&pDst, __PACKq7(__SSAT((in1 << shiftBits), 8), + __SSAT((in2 << shiftBits), 8), + __SSAT((in3 << shiftBits), 8), + __SSAT((in4 << shiftBits), 8) )); +#else + *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); + *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); + *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); + *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + while (blkCnt > 0U) + { + /* C = A >> shiftBits */ + +#if defined (ARM_MATH_DSP) + /* Read 4 inputs */ + in1 = *pSrc++; + in2 = *pSrc++; + in3 = *pSrc++; + in4 = *pSrc++; + + /* Pack and store result in destination buffer (in single write) */ + write_q7x4_ia (&pDst, __PACKq7((in1 >> -shiftBits), + (in2 >> -shiftBits), + (in3 >> -shiftBits), + (in4 >> -shiftBits) )); +#else + *pDst++ = (*pSrc++ >> -shiftBits); + *pDst++ = (*pSrc++ >> -shiftBits); + *pDst++ = (*pSrc++ >> -shiftBits); + *pDst++ = (*pSrc++ >> -shiftBits); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* If the shift value is positive then do right shift else left shift */ + if (sign == 0U) + { + while (blkCnt > 0U) + { + /* C = A << shiftBits */ + + /* Shift input and store result in destination buffer. */ + *pDst++ = (q7_t) __SSAT(((q15_t) *pSrc++ << shiftBits), 8); + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + while (blkCnt > 0U) + { + /* C = A >> shiftBits */ + + /* Shift input and store result in destination buffer. */ + *pDst++ = (*pSrc++ >> -shiftBits); + + /* Decrement loop counter */ + blkCnt--; + } + } + +} + +/** + @} end of BasicShift group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_f32.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_f32.c new file mode 100644 index 000000000..4c97af307 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_f32.c @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_sub_f32.c + * Description: Floating-point vector subtraction + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @defgroup BasicSub Vector Subtraction + + Element-by-element subtraction of two vectors. + +
+      pDst[n] = pSrcA[n] - pSrcB[n],   0 <= n < blockSize.
+  
+ + There are separate functions for floating-point, Q7, Q15, and Q31 data types. + */ + +/** + @addtogroup BasicSub + @{ + */ + +/** + @brief Floating-point vector subtraction. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_sub_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined(ARM_MATH_NEON) + float32x4_t vec1; + float32x4_t vec2; + float32x4_t res; + + /* Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A - B */ + + /* Subtract and then store the results in the destination buffer. */ + vec1 = vld1q_f32(pSrcA); + vec2 = vld1q_f32(pSrcB); + res = vsubq_f32(vec1, vec2); + vst1q_f32(pDst, res); + + /* Increment pointers */ + pSrcA += 4; + pSrcB += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = blockSize & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A - B */ + + /* Subtract and store result in destination buffer. */ + *pDst++ = (*pSrcA++) - (*pSrcB++); + + *pDst++ = (*pSrcA++) - (*pSrcB++); + + *pDst++ = (*pSrcA++) - (*pSrcB++); + + *pDst++ = (*pSrcA++) - (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C = A - B */ + + /* Subtract and store result in destination buffer. */ + *pDst++ = (*pSrcA++) - (*pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicSub group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q15.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q15.c new file mode 100644 index 000000000..835917e5f --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q15.c @@ -0,0 +1,126 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_sub_q15.c + * Description: Q15 vector subtraction + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicSub + @{ + */ + +/** + @brief Q15 vector subtraction. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. + */ + +void arm_sub_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t inA1, inA2; + q31_t inB1, inB2; +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A - B */ + +#if defined (ARM_MATH_DSP) + /* read 2 times 2 samples at a time from sourceA */ + inA1 = read_q15x2_ia ((q15_t **) &pSrcA); + inA2 = read_q15x2_ia ((q15_t **) &pSrcA); + /* read 2 times 2 samples at a time from sourceB */ + inB1 = read_q15x2_ia ((q15_t **) &pSrcB); + inB2 = read_q15x2_ia ((q15_t **) &pSrcB); + + /* Subtract and store 2 times 2 samples at a time */ + write_q15x2_ia (&pDst, __QSUB16(inA1, inB1)); + write_q15x2_ia (&pDst, __QSUB16(inA2, inB2)); +#else + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A - B */ + + /* Subtract and store result in destination buffer. */ +#if defined (ARM_MATH_DSP) + *pDst++ = (q15_t) __QSUB16(*pSrcA++, *pSrcB++); +#else + *pDst++ = (q15_t) __SSAT(((q31_t) *pSrcA++ - *pSrcB++), 16); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicSub group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q31.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q31.c new file mode 100644 index 000000000..bac1927bd --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q31.c @@ -0,0 +1,108 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_sub_q31.c + * Description: Q31 vector subtraction + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicSub + @{ + */ + +/** + @brief Q31 vector subtraction. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q31 range [0x80000000 0x7FFFFFFF] are saturated. + */ + +void arm_sub_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A - B */ + + /* Subtract and store result in destination buffer. */ + *pDst++ = __QSUB(*pSrcA++, *pSrcB++); + + *pDst++ = __QSUB(*pSrcA++, *pSrcB++); + + *pDst++ = __QSUB(*pSrcA++, *pSrcB++); + + *pDst++ = __QSUB(*pSrcA++, *pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A - B */ + + /* Subtract and store result in destination buffer. */ + *pDst++ = __QSUB(*pSrcA++, *pSrcB++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicSub group + */ diff --git a/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q7.c b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q7.c new file mode 100644 index 000000000..a55a8fd71 --- /dev/null +++ b/CMSIS/DSP/Source/BasicMathFunctions/arm_sub_q7.c @@ -0,0 +1,109 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_sub_q7.c + * Description: Q7 vector subtraction + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMath + */ + +/** + @addtogroup BasicSub + @{ + */ + +/** + @brief Q7 vector subtraction. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[out] pDst points to the output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q7 range [0x80 0x7F] will be saturated. + */ + +void arm_sub_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A - B */ + +#if defined (ARM_MATH_DSP) + /* Subtract and store result in destination buffer (4 samples at a time). */ + write_q7x4_ia (&pDst, __QSUB8(read_q7x4_ia ((q7_t **) &pSrcA), read_q7x4_ia ((q7_t **) &pSrcB))); +#else + *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); + *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); + *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); + *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A - B */ + + /* Subtract and store result in destination buffer. */ + *pDst++ = (q7_t) __SSAT((q15_t) *pSrcA++ - *pSrcB++, 8); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of BasicSub group + */ diff --git a/CMSIS/DSP/Source/CommonTables/CommonTables.c b/CMSIS/DSP/Source/CommonTables/CommonTables.c new file mode 100644 index 000000000..acda9f88a --- /dev/null +++ b/CMSIS/DSP/Source/CommonTables/CommonTables.c @@ -0,0 +1,31 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: CommonTables.c + * Description: Combination of all common table source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_common_tables.c" +#include "arm_const_structs.c" + diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/ComplexMathFunctions.c b/CMSIS/DSP/Source/ComplexMathFunctions/ComplexMathFunctions.c new file mode 100644 index 000000000..221053337 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/ComplexMathFunctions.c @@ -0,0 +1,46 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: CompexMathFunctions.c + * Description: Combination of all comlex math function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_cmplx_conj_f32.c" +#include "arm_cmplx_conj_q15.c" +#include "arm_cmplx_conj_q31.c" +#include "arm_cmplx_dot_prod_f32.c" +#include "arm_cmplx_dot_prod_q15.c" +#include "arm_cmplx_dot_prod_q31.c" +#include "arm_cmplx_mag_f32.c" +#include "arm_cmplx_mag_q15.c" +#include "arm_cmplx_mag_q31.c" +#include "arm_cmplx_mag_squared_f32.c" +#include "arm_cmplx_mag_squared_q15.c" +#include "arm_cmplx_mag_squared_q31.c" +#include "arm_cmplx_mult_cmplx_f32.c" +#include "arm_cmplx_mult_cmplx_q15.c" +#include "arm_cmplx_mult_cmplx_q31.c" +#include "arm_cmplx_mult_real_f32.c" +#include "arm_cmplx_mult_real_q15.c" +#include "arm_cmplx_mult_real_q31.c" diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c new file mode 100644 index 000000000..df5db0037 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c @@ -0,0 +1,161 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_conj_f32.c + * Description: Floating-point complex conjugate + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @defgroup cmplx_conj Complex Conjugate + + Conjugates the elements of a complex data vector. + + The pSrc points to the source data and + pDst points to the destination data where the result should be written. + numSamples specifies the number of complex samples + and the data in each array is stored in an interleaved fashion + (real, imag, real, imag, ...). + Each array has a total of 2*numSamples values. + + The underlying algorithm is used: +
+  for (n = 0; n < numSamples; n++) {
+      pDst[(2*n)  ] =  pSrc[(2*n)  ];    // real part
+      pDst[(2*n)+1] = -pSrc[(2*n)+1];    // imag part
+  }
+  
+ + There are separate functions for floating-point, Q15, and Q31 data types. + */ + +/** + @addtogroup cmplx_conj + @{ + */ + +/** + @brief Floating-point complex conjugate. + @param[in] pSrc points to the input vector + @param[out] pDst points to the output vector + @param[in] numSamples number of samples in each vector + @return none + */ + + +void arm_cmplx_conj_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined(ARM_MATH_NEON) + float32x4_t zero; + float32x4x2_t vec; + + zero = vdupq_n_f32(0.0); + + /* Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0]+jC[1] = A[0]+(-1)*jA[1] */ + /* Calculate Complex Conjugate and then store the results in the destination buffer. */ + vec = vld2q_f32(pSrc); + vec.val[1] = vsubq_f32(zero,vec.val[1]); + vst2q_f32(pDst,vec); + + /* Increment pointers */ + pSrc += 8; + pDst += 8; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = numSamples & 0x3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ + + /* Calculate Complex Conjugate and store result in destination buffer. */ + *pDst++ = *pSrc++; + *pDst++ = -*pSrc++; + + *pDst++ = *pSrc++; + *pDst++ = -*pSrc++; + + *pDst++ = *pSrc++; + *pDst++ = -*pSrc++; + + *pDst++ = *pSrc++; + *pDst++ = -*pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined (ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ + + /* Calculate Complex Conjugate and store result in destination buffer. */ + *pDst++ = *pSrc++; + *pDst++ = -*pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_conj group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c new file mode 100644 index 000000000..073a337c1 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c @@ -0,0 +1,157 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_conj_q15.c + * Description: Q15 complex conjugate + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_conj + @{ + */ + +/** + @brief Q15 complex conjugate. + @param[in] pSrc points to the input vector + @param[out] pDst points to the output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q15 value -1 (0x8000) is saturated to the maximum allowable positive value 0x7FFF. + */ + +void arm_cmplx_conj_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t in1; /* Temporary input variable */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in2, in3, in4; /* Temporary input variables */ +#endif + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ + + /* Calculate Complex Conjugate and store result in destination buffer. */ + + #if defined (ARM_MATH_DSP) + in1 = read_q15x2_ia ((q15_t **) &pSrc); + in2 = read_q15x2_ia ((q15_t **) &pSrc); + in3 = read_q15x2_ia ((q15_t **) &pSrc); + in4 = read_q15x2_ia ((q15_t **) &pSrc); + +#ifndef ARM_MATH_BIG_ENDIAN + in1 = __QASX(0, in1); + in2 = __QASX(0, in2); + in3 = __QASX(0, in3); + in4 = __QASX(0, in4); +#else + in1 = __QSAX(0, in1); + in2 = __QSAX(0, in2); + in3 = __QSAX(0, in3); + in4 = __QSAX(0, in4); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + in1 = ((uint32_t) in1 >> 16) | ((uint32_t) in1 << 16); + in2 = ((uint32_t) in2 >> 16) | ((uint32_t) in2 << 16); + in3 = ((uint32_t) in3 >> 16) | ((uint32_t) in3 << 16); + in4 = ((uint32_t) in4 >> 16) | ((uint32_t) in4 << 16); + + write_q15x2_ia (&pDst, in1); + write_q15x2_ia (&pDst, in2); + write_q15x2_ia (&pDst, in3); + write_q15x2_ia (&pDst, in4); +#else + *pDst++ = *pSrc++; + in1 = *pSrc++; + *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; + + *pDst++ = *pSrc++; + in1 = *pSrc++; + *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; + + *pDst++ = *pSrc++; + in1 = *pSrc++; + *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; + + *pDst++ = *pSrc++; + in1 = *pSrc++; + *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ + + /* Calculate Complex Conjugate and store result in destination buffer. */ + *pDst++ = *pSrc++; + in1 = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __SSAT(-in1, 16); +#else + *pDst++ = (in1 == (q15_t) 0x8000) ? (q15_t) 0x7fff : -in1; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_conj group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c new file mode 100644 index 000000000..6ef1ddb03 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c @@ -0,0 +1,137 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_conj_q31.c + * Description: Q31 complex conjugate + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_conj + @{ + */ + +/** + @brief Q31 complex conjugate. + @param[in] pSrc points to the input vector + @param[out] pDst points to the output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + The Q31 value -1 (0x80000000) is saturated to the maximum allowable positive value 0x7FFFFFFF. + */ + +void arm_cmplx_conj_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t in; /* Temporary input variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ + + /* Calculate Complex Conjugate and store result in destination buffer. */ + *pDst++ = *pSrc++; + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + *pDst++ = *pSrc++; + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + *pDst++ = *pSrc++; + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + *pDst++ = *pSrc++; + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[0] + jC[1] = A[0]+ j(-1)A[1] */ + + /* Calculate Complex Conjugate and store result in destination buffer. */ + *pDst++ = *pSrc++; + in = *pSrc++; +#if defined (ARM_MATH_DSP) + *pDst++ = __QSUB(0, in); +#else + *pDst++ = (in == INT32_MIN) ? INT32_MAX : -in; +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_conj group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c new file mode 100644 index 000000000..06f1bfa13 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c @@ -0,0 +1,233 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_dot_prod_f32.c + * Description: Floating-point complex dot product + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @defgroup cmplx_dot_prod Complex Dot Product + + Computes the dot product of two complex vectors. + The vectors are multiplied element-by-element and then summed. + + The pSrcA points to the first complex input vector and + pSrcB points to the second complex input vector. + numSamples specifies the number of complex samples + and the data in each array is stored in an interleaved fashion + (real, imag, real, imag, ...). + Each array has a total of 2*numSamples values. + + The underlying algorithm is used: + +
+  realResult = 0;
+  imagResult = 0;
+  for (n = 0; n < numSamples; n++) {
+      realResult += pSrcA[(2*n)+0] * pSrcB[(2*n)+0] - pSrcA[(2*n)+1] * pSrcB[(2*n)+1];
+      imagResult += pSrcA[(2*n)+0] * pSrcB[(2*n)+1] + pSrcA[(2*n)+1] * pSrcB[(2*n)+0];
+  }
+  
+ + There are separate functions for floating-point, Q15, and Q31 data types. + */ + +/** + @addtogroup cmplx_dot_prod + @{ + */ + +/** + @brief Floating-point complex dot product. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[in] numSamples number of samples in each vector + @param[out] realResult real part of the result returned here + @param[out] imagResult imaginary part of the result returned here + @return none + */ + +void arm_cmplx_dot_prod_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + uint32_t numSamples, + float32_t * realResult, + float32_t * imagResult) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t real_sum = 0.0f, imag_sum = 0.0f; /* Temporary result variables */ + float32_t a0,b0,c0,d0; + +#if defined(ARM_MATH_NEON) + float32x4x2_t vec1,vec2,vec3,vec4; + float32x4_t accR,accI; + float32x2_t accum = vdup_n_f32(0); + + accR = vdupq_n_f32(0.0); + accI = vdupq_n_f32(0.0); + + /* Loop unrolling: Compute 8 outputs at a time */ + blkCnt = numSamples >> 3U; + + while (blkCnt > 0U) + { + /* C = (A[0]+jA[1])*(B[0]+jB[1]) + ... */ + /* Calculate dot product and then store the result in a temporary buffer. */ + + vec1 = vld2q_f32(pSrcA); + vec2 = vld2q_f32(pSrcB); + + /* Increment pointers */ + pSrcA += 8; + pSrcB += 8; + + /* Re{C} = Re{A}*Re{B} - Im{A}*Im{B} */ + accR = vmlaq_f32(accR,vec1.val[0],vec2.val[0]); + accR = vmlsq_f32(accR,vec1.val[1],vec2.val[1]); + + /* Im{C} = Re{A}*Im{B} + Im{A}*Re{B} */ + accI = vmlaq_f32(accI,vec1.val[1],vec2.val[0]); + accI = vmlaq_f32(accI,vec1.val[0],vec2.val[1]); + + vec3 = vld2q_f32(pSrcA); + vec4 = vld2q_f32(pSrcB); + + /* Increment pointers */ + pSrcA += 8; + pSrcB += 8; + + /* Re{C} = Re{A}*Re{B} - Im{A}*Im{B} */ + accR = vmlaq_f32(accR,vec3.val[0],vec4.val[0]); + accR = vmlsq_f32(accR,vec3.val[1],vec4.val[1]); + + /* Im{C} = Re{A}*Im{B} + Im{A}*Re{B} */ + accI = vmlaq_f32(accI,vec3.val[1],vec4.val[0]); + accI = vmlaq_f32(accI,vec3.val[0],vec4.val[1]); + + /* Decrement the loop counter */ + blkCnt--; + } + + accum = vpadd_f32(vget_low_f32(accR), vget_high_f32(accR)); + real_sum += accum[0] + accum[1]; + + accum = vpadd_f32(vget_low_f32(accI), vget_high_f32(accI)); + imag_sum += accum[0] + accum[1]; + + /* Tail */ + blkCnt = numSamples & 0x7; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += a0 * c0; + imag_sum += a0 * d0; + real_sum -= b0 * d0; + imag_sum += b0 * c0; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += a0 * c0; + imag_sum += a0 * d0; + real_sum -= b0 * d0; + imag_sum += b0 * c0; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += a0 * c0; + imag_sum += a0 * d0; + real_sum -= b0 * d0; + imag_sum += b0 * c0; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += a0 * c0; + imag_sum += a0 * d0; + real_sum -= b0 * d0; + imag_sum += b0 * c0; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += a0 * c0; + imag_sum += a0 * d0; + real_sum -= b0 * d0; + imag_sum += b0 * c0; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store real and imaginary result in destination buffer. */ + *realResult = real_sum; + *imagResult = imag_sum; +} + +/** + @} end of cmplx_dot_prod group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c new file mode 100644 index 000000000..2ecd80144 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c @@ -0,0 +1,154 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_dot_prod_q15.c + * Description: Processing function for the Q15 Complex Dot product + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_dot_prod + @{ + */ + +/** + @brief Q15 complex dot product. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[in] numSamples number of samples in each vector + @param[out] realResult real part of the result returned here + @param[out] imagResult imaginary part of the result returned her + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The intermediate 1.15 by 1.15 multiplications are performed with full precision and yield a 2.30 result. + These are accumulated in a 64-bit accumulator with 34.30 precision. + As a final step, the accumulators are converted to 8.24 format. + The return results realResult and imagResult are in 8.24 format. + */ + +void arm_cmplx_dot_prod_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + uint32_t numSamples, + q31_t * realResult, + q31_t * imagResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t real_sum = 0, imag_sum = 0; /* Temporary result variables */ + q15_t a0,b0,c0,d0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += (q31_t)a0 * c0; + imag_sum += (q31_t)a0 * d0; + real_sum -= (q31_t)b0 * d0; + imag_sum += (q31_t)b0 * c0; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += (q31_t)a0 * c0; + imag_sum += (q31_t)a0 * d0; + real_sum -= (q31_t)b0 * d0; + imag_sum += (q31_t)b0 * c0; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += (q31_t)a0 * c0; + imag_sum += (q31_t)a0 * d0; + real_sum -= (q31_t)b0 * d0; + imag_sum += (q31_t)b0 * c0; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += (q31_t)a0 * c0; + imag_sum += (q31_t)a0 * d0; + real_sum -= (q31_t)b0 * d0; + imag_sum += (q31_t)b0 * c0; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += (q31_t)a0 * c0; + imag_sum += (q31_t)a0 * d0; + real_sum -= (q31_t)b0 * d0; + imag_sum += (q31_t)b0 * c0; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store real and imaginary result in 8.24 format */ + /* Convert real data in 34.30 to 8.24 by 6 right shifts */ + *realResult = (q31_t) (real_sum >> 6); + /* Convert imaginary data in 34.30 to 8.24 by 6 right shifts */ + *imagResult = (q31_t) (imag_sum >> 6); +} + +/** + @} end of cmplx_dot_prod group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c new file mode 100644 index 000000000..d715d98f1 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c @@ -0,0 +1,153 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_dot_prod_q31.c + * Description: Q31 complex dot product + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_dot_prod + @{ + */ + +/** + @brief Q31 complex dot product. + @param[in] pSrcA points to the first input vector + @param[in] pSrcB points to the second input vector + @param[in] numSamples number of samples in each vector + @param[out] realResult real part of the result returned here + @param[out] imagResult imaginary part of the result returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The intermediate 1.31 by 1.31 multiplications are performed with 64-bit precision and then shifted to 16.48 format. + The internal real and imaginary accumulators are in 16.48 format and provide 15 guard bits. + Additions are nonsaturating and no overflow will occur as long as numSamples is less than 32768. + The return results realResult and imagResult are in 16.48 format. + Input down scaling is not required. + */ + +void arm_cmplx_dot_prod_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + uint32_t numSamples, + q63_t * realResult, + q63_t * imagResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t real_sum = 0, imag_sum = 0; /* Temporary result variables */ + q31_t a0,b0,c0,d0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += ((q63_t)a0 * c0) >> 14; + imag_sum += ((q63_t)a0 * d0) >> 14; + real_sum -= ((q63_t)b0 * d0) >> 14; + imag_sum += ((q63_t)b0 * c0) >> 14; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += ((q63_t)a0 * c0) >> 14; + imag_sum += ((q63_t)a0 * d0) >> 14; + real_sum -= ((q63_t)b0 * d0) >> 14; + imag_sum += ((q63_t)b0 * c0) >> 14; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += ((q63_t)a0 * c0) >> 14; + imag_sum += ((q63_t)a0 * d0) >> 14; + real_sum -= ((q63_t)b0 * d0) >> 14; + imag_sum += ((q63_t)b0 * c0) >> 14; + + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += ((q63_t)a0 * c0) >> 14; + imag_sum += ((q63_t)a0 * d0) >> 14; + real_sum -= ((q63_t)b0 * d0) >> 14; + imag_sum += ((q63_t)b0 * c0) >> 14; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + a0 = *pSrcA++; + b0 = *pSrcA++; + c0 = *pSrcB++; + d0 = *pSrcB++; + + real_sum += ((q63_t)a0 * c0) >> 14; + imag_sum += ((q63_t)a0 * d0) >> 14; + real_sum -= ((q63_t)b0 * d0) >> 14; + imag_sum += ((q63_t)b0 * c0) >> 14; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store real and imaginary result in 16.48 format */ + *realResult = real_sum; + *imagResult = imag_sum; +} + +/** + @} end of cmplx_dot_prod group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c new file mode 100644 index 000000000..84812dcf3 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c @@ -0,0 +1,188 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mag_f32.c + * Description: Floating-point complex magnitude + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @defgroup cmplx_mag Complex Magnitude + + Computes the magnitude of the elements of a complex data vector. + + The pSrc points to the source data and + pDst points to the where the result should be written. + numSamples specifies the number of complex samples + in the input array and the data is stored in an interleaved fashion + (real, imag, real, imag, ...). + The input array has a total of 2*numSamples values; + the output array has a total of numSamples values. + + The underlying algorithm is used: + +
+  for (n = 0; n < numSamples; n++) {
+      pDst[n] = sqrt(pSrc[(2*n)+0]^2 + pSrc[(2*n)+1]^2);
+  }
+  
+ + There are separate functions for floating-point, Q15, and Q31 data types. + */ + +/** + @addtogroup cmplx_mag + @{ + */ + +/** + @brief Floating-point complex magnitude. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] numSamples number of samples in each vector + @return none + */ + +void arm_cmplx_mag_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* loop counter */ + float32_t real, imag; /* Temporary variables to hold input values */ + +#if defined(ARM_MATH_NEON) + + float32x4x2_t vecA; + float32x4_t vRealA; + float32x4_t vImagA; + float32x4_t vMagSqA; + + float32x4x2_t vecB; + float32x4_t vRealB; + float32x4_t vImagB; + float32x4_t vMagSqB; + + /* Loop unrolling: Compute 8 outputs at a time */ + blkCnt = numSamples >> 3; + + while (blkCnt > 0U) + { + /* out = sqrt((real * real) + (imag * imag)) */ + + vecA = vld2q_f32(pSrc); + pSrc += 8; + + vecB = vld2q_f32(pSrc); + pSrc += 8; + + vRealA = vmulq_f32(vecA.val[0], vecA.val[0]); + vImagA = vmulq_f32(vecA.val[1], vecA.val[1]); + vMagSqA = vaddq_f32(vRealA, vImagA); + + vRealB = vmulq_f32(vecB.val[0], vecB.val[0]); + vImagB = vmulq_f32(vecB.val[1], vecB.val[1]); + vMagSqB = vaddq_f32(vRealB, vImagB); + + /* Store the result in the destination buffer. */ + vst1q_f32(pDst, __arm_vec_sqrt_f32_neon(vMagSqA)); + pDst += 4; + + vst1q_f32(pDst, __arm_vec_sqrt_f32_neon(vMagSqB)); + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + blkCnt = numSamples & 7; + +#else + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + + /* store result in destination buffer. */ + arm_sqrt_f32((real * real) + (imag * imag), pDst++); + + real = *pSrc++; + imag = *pSrc++; + arm_sqrt_f32((real * real) + (imag * imag), pDst++); + + real = *pSrc++; + imag = *pSrc++; + arm_sqrt_f32((real * real) + (imag * imag), pDst++); + + real = *pSrc++; + imag = *pSrc++; + arm_sqrt_f32((real * real) + (imag * imag), pDst++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + + /* store result in destination buffer. */ + arm_sqrt_f32((real * real) + (imag * imag), pDst++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_mag group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c new file mode 100644 index 000000000..a49327448 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c @@ -0,0 +1,162 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mag_q15.c + * Description: Q15 complex magnitude + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_mag + @{ + */ + +/** + @brief Q15 complex magnitude. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function implements 1.15 by 1.15 multiplications and finally output is converted into 2.14 format. + */ + +void arm_cmplx_mag_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_DSP) + q31_t in; + q31_t acc0; /* Accumulators */ +#else + q15_t real, imag; /* Temporary input variables */ + q31_t acc0, acc1; /* Accumulators */ +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ + +#if defined (ARM_MATH_DSP) + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + /* store result in 2.14 format in destination buffer. */ + arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); + + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); + + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); + + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); +#else + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + + /* store result in 2.14 format in destination buffer. */ + arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); + + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); + + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); + + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ + +#if defined (ARM_MATH_DSP) + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + + /* store result in 2.14 format in destination buffer. */ + arm_sqrt_q15((q15_t) (acc0 >> 17), pDst++); +#else + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + + /* store result in 2.14 format in destination buffer. */ + arm_sqrt_q15((q15_t) (((q63_t) acc0 + acc1) >> 17), pDst++); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_mag group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c new file mode 100644 index 000000000..873e566cc --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c @@ -0,0 +1,130 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mag_q31.c + * Description: Q31 complex magnitude + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_mag + @{ + */ + +/** + @brief Q31 complex magnitude. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function implements 1.31 by 1.31 multiplications and finally output is converted into 2.30 format. + Input down scaling is not required. + */ + +void arm_cmplx_mag_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t real, imag; /* Temporary input variables */ + q31_t acc0, acc1; /* Accumulators */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + + /* store result in 2.30 format in destination buffer. */ + arm_sqrt_q31(acc0 + acc1, pDst++); + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + arm_sqrt_q31(acc0 + acc1, pDst++); + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + arm_sqrt_q31(acc0 + acc1, pDst++); + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + arm_sqrt_q31(acc0 + acc1, pDst++); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[0] = sqrt(A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + + /* store result in 2.30 format in destination buffer. */ + arm_sqrt_q31(acc0 + acc1, pDst++); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_mag group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c new file mode 100644 index 000000000..99f051c3f --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c @@ -0,0 +1,184 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mag_squared_f32.c + * Description: Floating-point complex magnitude squared + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @defgroup cmplx_mag_squared Complex Magnitude Squared + + Computes the magnitude squared of the elements of a complex data vector. + + The pSrc points to the source data and + pDst points to the where the result should be written. + numSamples specifies the number of complex samples + in the input array and the data is stored in an interleaved fashion + (real, imag, real, imag, ...). + The input array has a total of 2*numSamples values; + the output array has a total of numSamples values. + + The underlying algorithm is used: + +
+  for (n = 0; n < numSamples; n++) {
+      pDst[n] = pSrc[(2*n)+0]^2 + pSrc[(2*n)+1]^2;
+  }
+  
+ + There are separate functions for floating-point, Q15, and Q31 data types. + */ + +/** + @addtogroup cmplx_mag_squared + @{ + */ + +/** + @brief Floating-point complex magnitude squared. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] numSamples number of samples in each vector + @return none + */ + +void arm_cmplx_mag_squared_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t real, imag; /* Temporary input variables */ + +#if defined(ARM_MATH_NEON) + float32x4x2_t vecA; + float32x4_t vRealA; + float32x4_t vImagA; + float32x4_t vMagSqA; + + float32x4x2_t vecB; + float32x4_t vRealB; + float32x4_t vImagB; + float32x4_t vMagSqB; + + /* Loop unrolling: Compute 8 outputs at a time */ + blkCnt = numSamples >> 3; + + while (blkCnt > 0U) + { + /* out = sqrt((real * real) + (imag * imag)) */ + + vecA = vld2q_f32(pSrc); + pSrc += 8; + + vRealA = vmulq_f32(vecA.val[0], vecA.val[0]); + vImagA = vmulq_f32(vecA.val[1], vecA.val[1]); + vMagSqA = vaddq_f32(vRealA, vImagA); + + vecB = vld2q_f32(pSrc); + pSrc += 8; + + vRealB = vmulq_f32(vecB.val[0], vecB.val[0]); + vImagB = vmulq_f32(vecB.val[1], vecB.val[1]); + vMagSqB = vaddq_f32(vRealB, vImagB); + + /* Store the result in the destination buffer. */ + vst1q_f32(pDst, vMagSqA); + pDst += 4; + + vst1q_f32(pDst, vMagSqB); + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + blkCnt = numSamples & 7; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + *pDst++ = (real * real) + (imag * imag); + + real = *pSrc++; + imag = *pSrc++; + *pDst++ = (real * real) + (imag * imag); + + real = *pSrc++; + imag = *pSrc++; + *pDst++ = (real * real) + (imag * imag); + + real = *pSrc++; + imag = *pSrc++; + *pDst++ = (real * real) + (imag * imag); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + + /* store result in destination buffer. */ + *pDst++ = (real * real) + (imag * imag); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_mag_squared group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c new file mode 100644 index 000000000..fa5f4e6e1 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c @@ -0,0 +1,161 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mag_squared_q15.c + * Description: Q15 complex magnitude squared + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_mag_squared + @{ + */ + +/** + @brief Q15 complex magnitude squared. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function implements 1.15 by 1.15 multiplications and finally output is converted into 3.13 format. + */ + +void arm_cmplx_mag_squared_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_DSP) + q31_t in; + q31_t acc0; /* Accumulators */ +#else + q15_t real, imag; /* Temporary input variables */ + q31_t acc0, acc1; /* Accumulators */ +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ + +#if defined (ARM_MATH_DSP) + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + /* store result in 3.13 format in destination buffer. */ + *pDst++ = (q15_t) (acc0 >> 17); + + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + *pDst++ = (q15_t) (acc0 >> 17); + + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + *pDst++ = (q15_t) (acc0 >> 17); + + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + *pDst++ = (q15_t) (acc0 >> 17); +#else + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + /* store result in 3.13 format in destination buffer. */ + *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); + + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); + + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); + + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ + +#if defined (ARM_MATH_DSP) + in = read_q15x2_ia ((q15_t **) &pSrc); + acc0 = __SMUAD(in, in); + + /* store result in 3.13 format in destination buffer. */ + *pDst++ = (q15_t) (acc0 >> 17); +#else + real = *pSrc++; + imag = *pSrc++; + acc0 = ((q31_t) real * real); + acc1 = ((q31_t) imag * imag); + + /* store result in 3.13 format in destination buffer. */ + *pDst++ = (q15_t) (((q63_t) acc0 + acc1) >> 17); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_mag_squared group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c new file mode 100644 index 000000000..54863efc4 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c @@ -0,0 +1,129 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mag_squared_q31.c + * Description: Q31 complex magnitude squared + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup cmplx_mag_squared + @{ + */ + +/** + @brief Q31 complex magnitude squared. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function implements 1.31 by 1.31 multiplications and finally output is converted into 3.29 format. + Input down scaling is not required. + */ + +void arm_cmplx_mag_squared_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t real, imag; /* Temporary input variables */ + q31_t acc0, acc1; /* Accumulators */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + /* store the result in 3.29 format in the destination buffer. */ + *pDst++ = acc0 + acc1; + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + *pDst++ = acc0 + acc1; + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + *pDst++ = acc0 + acc1; + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + *pDst++ = acc0 + acc1; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[0] = (A[0] * A[0] + A[1] * A[1]) */ + + real = *pSrc++; + imag = *pSrc++; + acc0 = (q31_t) (((q63_t) real * real) >> 33); + acc1 = (q31_t) (((q63_t) imag * imag) >> 33); + + /* store result in 3.29 format in destination buffer. */ + *pDst++ = acc0 + acc1; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of cmplx_mag_squared group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c new file mode 100644 index 000000000..8d1482164 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c @@ -0,0 +1,194 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mult_cmplx_f32.c + * Description: Floating-point complex-by-complex multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @defgroup CmplxByCmplxMult Complex-by-Complex Multiplication + + Multiplies a complex vector by another complex vector and generates a complex result. + The data in the complex arrays is stored in an interleaved fashion + (real, imag, real, imag, ...). + The parameter numSamples represents the number of complex + samples processed. The complex arrays have a total of 2*numSamples + real values. + + The underlying algorithm is used: + +
+  for (n = 0; n < numSamples; n++) {
+      pDst[(2*n)+0] = pSrcA[(2*n)+0] * pSrcB[(2*n)+0] - pSrcA[(2*n)+1] * pSrcB[(2*n)+1];
+      pDst[(2*n)+1] = pSrcA[(2*n)+0] * pSrcB[(2*n)+1] + pSrcA[(2*n)+1] * pSrcB[(2*n)+0];
+  }
+  
+ + There are separate functions for floating-point, Q15, and Q31 data types. + */ + +/** + @addtogroup CmplxByCmplxMult + @{ + */ + +/** + @brief Floating-point complex-by-complex multiplication. + @param[in] pSrcA points to first input vector + @param[in] pSrcB points to second input vector + @param[out] pDst points to output vector + @param[in] numSamples number of samples in each vector + @return none + */ + +void arm_cmplx_mult_cmplx_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t a, b, c, d; /* Temporary variables to store real and imaginary values */ + +#if defined(ARM_MATH_NEON) + float32x4x2_t va, vb; + float32x4_t real, imag; + float32x4x2_t outCplx; + + /* Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + va = vld2q_f32(pSrcA); // load & separate real/imag pSrcA (de-interleave 2) + vb = vld2q_f32(pSrcB); // load & separate real/imag pSrcB + + /* Increment pointers */ + pSrcA += 8; + pSrcB += 8; + + /* Re{C} = Re{A}*Re{B} - Im{A}*Im{B} */ + outCplx.val[0] = vmulq_f32(va.val[0], vb.val[0]); + outCplx.val[0] = vmlsq_f32(outCplx.val[0], va.val[1], vb.val[1]); + + /* Im{C} = Re{A}*Im{B} + Im{A}*Re{B} */ + outCplx.val[1] = vmulq_f32(va.val[0], vb.val[1]); + outCplx.val[1] = vmlaq_f32(outCplx.val[1], va.val[1], vb.val[0]); + + vst2q_f32(pDst, outCplx); + + /* Increment pointer */ + pDst += 8; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Tail */ + blkCnt = numSamples & 3; + +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i] * B[2 * i ] - A[2 * i + 1] * B[2 * i + 1]. */ + /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i ]. */ + + a = *pSrcA++; + b = *pSrcA++; + c = *pSrcB++; + d = *pSrcB++; + /* store result in destination buffer. */ + *pDst++ = (a * c) - (b * d); + *pDst++ = (a * d) + (b * c); + + a = *pSrcA++; + b = *pSrcA++; + c = *pSrcB++; + d = *pSrcB++; + *pDst++ = (a * c) - (b * d); + *pDst++ = (a * d) + (b * c); + + a = *pSrcA++; + b = *pSrcA++; + c = *pSrcB++; + d = *pSrcB++; + *pDst++ = (a * c) - (b * d); + *pDst++ = (a * d) + (b * c); + + a = *pSrcA++; + b = *pSrcA++; + c = *pSrcB++; + d = *pSrcB++; + *pDst++ = (a * c) - (b * d); + *pDst++ = (a * d) + (b * c); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i] * B[2 * i ] - A[2 * i + 1] * B[2 * i + 1]. */ + /* C[2 * i + 1] = A[2 * i] * B[2 * i + 1] + A[2 * i + 1] * B[2 * i ]. */ + + a = *pSrcA++; + b = *pSrcA++; + c = *pSrcB++; + d = *pSrcB++; + + /* store result in destination buffer. */ + *pDst++ = (a * c) - (b * d); + *pDst++ = (a * d) + (b * c); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of CmplxByCmplxMult group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c new file mode 100644 index 000000000..9651999e3 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c @@ -0,0 +1,169 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mult_real_f32.c + * Description: Floating-point complex by real multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @defgroup CmplxByRealMult Complex-by-Real Multiplication + + Multiplies a complex vector by a real vector and generates a complex result. + The data in the complex arrays is stored in an interleaved fashion + (real, imag, real, imag, ...). + The parameter numSamples represents the number of complex + samples processed. The complex arrays have a total of 2*numSamples + real values while the real array has a total of numSamples + real values. + + The underlying algorithm is used: + +
+  for (n = 0; n < numSamples; n++) {
+      pCmplxDst[(2*n)+0] = pSrcCmplx[(2*n)+0] * pSrcReal[n];
+      pCmplxDst[(2*n)+1] = pSrcCmplx[(2*n)+1] * pSrcReal[n];
+  }
+  
+ + There are separate functions for floating-point, Q15, and Q31 data types. + */ + +/** + @addtogroup CmplxByRealMult + @{ + */ + +/** + @brief Floating-point complex-by-real multiplication. + @param[in] pSrcCmplx points to complex input vector + @param[in] pSrcReal points to real input vector + @param[out] pCmplxDst points to complex output vector + @param[in] numSamples number of samples in each vector + @return none + */ + +void arm_cmplx_mult_real_f32( + const float32_t * pSrcCmplx, + const float32_t * pSrcReal, + float32_t * pCmplxDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t in; /* Temporary variable */ + +#if defined(ARM_MATH_NEON) + float32x4_t r; + float32x4x2_t ab,outCplx; + + /* Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + ab = vld2q_f32(pSrcCmplx); // load & separate real/imag pSrcA (de-interleave 2) + r = vld1q_f32(pSrcReal); // load & separate real/imag pSrcB + + /* Increment pointers */ + pSrcCmplx += 8; + pSrcReal += 4; + + outCplx.val[0] = vmulq_f32(ab.val[0], r); + outCplx.val[1] = vmulq_f32(ab.val[1], r); + + vst2q_f32(pCmplxDst, outCplx); + pCmplxDst += 8; + + blkCnt--; + } + + /* Tail */ + blkCnt = numSamples & 3; +#else +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i ] * B[i]. */ + /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ + + in = *pSrcReal++; + /* store result in destination buffer. */ + *pCmplxDst++ = *pSrcCmplx++ * in; + *pCmplxDst++ = *pSrcCmplx++ * in; + + in = *pSrcReal++; + *pCmplxDst++ = *pSrcCmplx++ * in; + *pCmplxDst++ = *pSrcCmplx++ * in; + + in = *pSrcReal++; + *pCmplxDst++ = *pSrcCmplx++ * in; + *pCmplxDst++ = *pSrcCmplx++ * in; + + in = *pSrcReal++; + *pCmplxDst++ = *pSrcCmplx++* in; + *pCmplxDst++ = *pSrcCmplx++ * in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +#endif /* #if defined(ARM_MATH_NEON) */ + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i ] * B[i]. */ + /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ + + in = *pSrcReal++; + /* store result in destination buffer. */ + *pCmplxDst++ = *pSrcCmplx++ * in; + *pCmplxDst++ = *pSrcCmplx++ * in; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of CmplxByRealMult group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c new file mode 100644 index 000000000..4877d208f --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c @@ -0,0 +1,182 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mult_real_q15.c + * Description: Q15 complex by real multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup CmplxByRealMult + @{ + */ + +/** + @brief Q15 complex-by-real multiplication. + @param[in] pSrcCmplx points to complex input vector + @param[in] pSrcReal points to real input vector + @param[out] pCmplxDst points to complex output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. + */ + +void arm_cmplx_mult_real_q15( + const q15_t * pSrcCmplx, + const q15_t * pSrcReal, + q15_t * pCmplxDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + q15_t in; /* Temporary variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + +#if defined (ARM_MATH_DSP) + q31_t inA1, inA2; /* Temporary variables to hold input data */ + q31_t inB1; /* Temporary variables to hold input data */ + q15_t out1, out2, out3, out4; /* Temporary variables to hold output data */ + q31_t mul1, mul2, mul3, mul4; /* Temporary variables to hold intermediate data */ +#endif + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i ] * B[i]. */ + /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ + +#if defined (ARM_MATH_DSP) + /* read 2 complex numbers both real and imaginary from complex input buffer */ + inA1 = read_q15x2_ia ((q15_t **) &pSrcCmplx); + inA2 = read_q15x2_ia ((q15_t **) &pSrcCmplx); + /* read 2 real values at a time from real input buffer */ + inB1 = read_q15x2_ia ((q15_t **) &pSrcReal); + + /* multiply complex number with real numbers */ +#ifndef ARM_MATH_BIG_ENDIAN + mul1 = (q31_t) ((q15_t) (inA1) * (q15_t) (inB1)); + mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1)); + mul3 = (q31_t) ((q15_t) (inA2) * (q15_t) (inB1 >> 16)); + mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) (inB1 >> 16)); +#else + mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1 >> 16)); + mul1 = (q31_t) ((q15_t) inA1 * (q15_t) (inB1 >> 16)); + mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) inB1); + mul3 = (q31_t) ((q15_t) inA2 * (q15_t) inB1); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* saturate the result */ + out1 = (q15_t) __SSAT(mul1 >> 15U, 16); + out2 = (q15_t) __SSAT(mul2 >> 15U, 16); + out3 = (q15_t) __SSAT(mul3 >> 15U, 16); + out4 = (q15_t) __SSAT(mul4 >> 15U, 16); + + /* pack real and imaginary outputs and store them to destination */ + write_q15x2_ia (&pCmplxDst, __PKHBT(out1, out2, 16)); + write_q15x2_ia (&pCmplxDst, __PKHBT(out3, out4, 16)); + + inA1 = read_q15x2_ia ((q15_t **) &pSrcCmplx); + inA2 = read_q15x2_ia ((q15_t **) &pSrcCmplx); + inB1 = read_q15x2_ia ((q15_t **) &pSrcReal); + +#ifndef ARM_MATH_BIG_ENDIAN + mul1 = (q31_t) ((q15_t) (inA1) * (q15_t) (inB1)); + mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1)); + mul3 = (q31_t) ((q15_t) (inA2) * (q15_t) (inB1 >> 16)); + mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) (inB1 >> 16)); +#else + mul2 = (q31_t) ((q15_t) (inA1 >> 16) * (q15_t) (inB1 >> 16)); + mul1 = (q31_t) ((q15_t) inA1 * (q15_t) (inB1 >> 16)); + mul4 = (q31_t) ((q15_t) (inA2 >> 16) * (q15_t) inB1); + mul3 = (q31_t) ((q15_t) inA2 * (q15_t) inB1); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + out1 = (q15_t) __SSAT(mul1 >> 15U, 16); + out2 = (q15_t) __SSAT(mul2 >> 15U, 16); + out3 = (q15_t) __SSAT(mul3 >> 15U, 16); + out4 = (q15_t) __SSAT(mul4 >> 15U, 16); + + write_q15x2_ia (&pCmplxDst, __PKHBT(out1, out2, 16)); + write_q15x2_ia (&pCmplxDst, __PKHBT(out3, out4, 16)); +#else + in = *pSrcReal++; + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + + in = *pSrcReal++; + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + + in = *pSrcReal++; + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + + in = *pSrcReal++; + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i ] * B[i]. */ + /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ + + in = *pSrcReal++; + /* store the result in the destination buffer. */ + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + *pCmplxDst++ = (q15_t) __SSAT((((q31_t) *pSrcCmplx++ * in) >> 15), 16); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of CmplxByRealMult group + */ diff --git a/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c new file mode 100644 index 000000000..906410f36 --- /dev/null +++ b/CMSIS/DSP/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mult_real_q31.c + * Description: Q31 complex by real multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupCmplxMath + */ + +/** + @addtogroup CmplxByRealMult + @{ + */ + +/** + @brief Q31 complex-by-real multiplication. + @param[in] pSrcCmplx points to complex input vector + @param[in] pSrcReal points to real input vector + @param[out] pCmplxDst points to complex output vector + @param[in] numSamples number of samples in each vector + @return none + + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] are saturated. + */ + +void arm_cmplx_mult_real_q31( + const q31_t * pSrcCmplx, + const q31_t * pSrcReal, + q31_t * pCmplxDst, + uint32_t numSamples) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t in; /* Temporary variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = numSamples >> 2U; + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i ] * B[i]. */ + /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ + + in = *pSrcReal++; +#if defined (ARM_MATH_DSP) + /* store saturated result in 1.31 format to destination buffer */ + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); +#else + /* store result in destination buffer. */ + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); +#endif + + in = *pSrcReal++; +#if defined (ARM_MATH_DSP) + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); +#else + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); +#endif + + in = *pSrcReal++; +#if defined (ARM_MATH_DSP) + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); +#else + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); +#endif + + in = *pSrcReal++; +#if defined (ARM_MATH_DSP) + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); +#else + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numSamples % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numSamples; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C[2 * i ] = A[2 * i ] * B[i]. */ + /* C[2 * i + 1] = A[2 * i + 1] * B[i]. */ + + in = *pSrcReal++; +#if defined (ARM_MATH_DSP) + /* store saturated result in 1.31 format to destination buffer */ + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); + *pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1); +#else + /* store result in destination buffer. */ + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); + *pCmplxDst++ = (q31_t) clip_q63_to_q31(((q63_t) *pSrcCmplx++ * in) >> 31); +#endif + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of CmplxByRealMult group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/ControllerFunctions.c b/CMSIS/DSP/Source/ControllerFunctions/ControllerFunctions.c new file mode 100644 index 000000000..51720bcc1 --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/ControllerFunctions.c @@ -0,0 +1,37 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: ControllerFunctions.c + * Description: Combination of all controller function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_pid_init_f32.c" +#include "arm_pid_init_q15.c" +#include "arm_pid_init_q31.c" +#include "arm_pid_reset_f32.c" +#include "arm_pid_reset_q15.c" +#include "arm_pid_reset_q31.c" +#include "arm_sin_cos_f32.c" +#include "arm_sin_cos_q31.c" + diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_f32.c b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_f32.c new file mode 100644 index 000000000..433a65a2b --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_f32.c @@ -0,0 +1,75 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_pid_init_f32.c + * Description: Floating-point PID Control initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @addtogroup PID + @{ + */ + +/** + @brief Initialization function for the floating-point PID Control. + @param[in,out] S points to an instance of the PID structure + @param[in] resetStateFlag + - value = 0: no change in state + - value = 1: reset state + @return none + + @par Details + The resetStateFlag specifies whether to set state to zero or not. \n + The function computes the structure fields: A0, A1 A2 + using the proportional gain( \c Kp), integral gain( \c Ki) and derivative gain( \c Kd) + also sets the state variables to all zeros. + */ + +void arm_pid_init_f32( + arm_pid_instance_f32 * S, + int32_t resetStateFlag) +{ + /* Derived coefficient A0 */ + S->A0 = S->Kp + S->Ki + S->Kd; + + /* Derived coefficient A1 */ + S->A1 = (-S->Kp) - ((float32_t) 2.0 * S->Kd); + + /* Derived coefficient A2 */ + S->A2 = S->Kd; + + /* Check whether state needs reset or not */ + if (resetStateFlag) + { + /* Reset state to zero, The size will be always 3 samples */ + memset(S->state, 0, 3U * sizeof(float32_t)); + } + +} + +/** + @} end of PID group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_q15.c b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_q15.c new file mode 100644 index 000000000..c88a3d909 --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_q15.c @@ -0,0 +1,95 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_pid_init_q15.c + * Description: Q15 PID Control initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @addtogroup PID + @{ + */ + +/** + @brief Initialization function for the Q15 PID Control. + @param[in,out] S points to an instance of the Q15 PID structure + @param[in] resetStateFlag + - value = 0: no change in state + - value = 1: reset state + @return none + + @par Details + The resetStateFlag specifies whether to set state to zero or not. \n + The function computes the structure fields: A0, A1 A2 + using the proportional gain( \c Kp), integral gain( \c Ki) and derivative gain( \c Kd) + also sets the state variables to all zeros. + */ + +void arm_pid_init_q15( + arm_pid_instance_q15 * S, + int32_t resetStateFlag) +{ + +#if defined (ARM_MATH_DSP) + + /* Derived coefficient A0 */ + S->A0 = __QADD16(__QADD16(S->Kp, S->Ki), S->Kd); + + /* Derived coefficients and pack into A1 */ + +#ifndef ARM_MATH_BIG_ENDIAN + S->A1 = __PKHBT(-__QADD16(__QADD16(S->Kd, S->Kd), S->Kp), S->Kd, 16); +#else + S->A1 = __PKHBT(S->Kd, -__QADD16(__QADD16(S->Kd, S->Kd), S->Kp), 16); +#endif + +#else + + q31_t temp; /* to store the sum */ + + /* Derived coefficient A0 */ + temp = S->Kp + S->Ki + S->Kd; + S->A0 = (q15_t) __SSAT(temp, 16); + + /* Derived coefficients and pack into A1 */ + temp = -(S->Kd + S->Kd + S->Kp); + S->A1 = (q15_t) __SSAT(temp, 16); + S->A2 = S->Kd; + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Check whether state needs reset or not */ + if (resetStateFlag) + { + /* Reset state to zero, The size will be always 3 samples */ + memset(S->state, 0, 3U * sizeof(q15_t)); + } + +} + +/** + @} end of PID group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_q31.c b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_q31.c new file mode 100644 index 000000000..1625a5f2f --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_init_q31.c @@ -0,0 +1,92 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_pid_init_q31.c + * Description: Q31 PID Control initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @addtogroup PID + @{ + */ + +/** + @brief Initialization function for the Q31 PID Control. + @param[in,out] S points to an instance of the Q31 PID structure + @param[in] resetStateFlag + - value = 0: no change in state + - value = 1: reset state + @return none + + @par Details + The resetStateFlag specifies whether to set state to zero or not. \n + The function computes the structure fields: A0, A1 A2 + using the proportional gain( \c Kp), integral gain( \c Ki) and derivative gain( \c Kd) + also sets the state variables to all zeros. + */ + +void arm_pid_init_q31( + arm_pid_instance_q31 * S, + int32_t resetStateFlag) +{ + +#if defined (ARM_MATH_DSP) + + /* Derived coefficient A0 */ + S->A0 = __QADD(__QADD(S->Kp, S->Ki), S->Kd); + + /* Derived coefficient A1 */ + S->A1 = -__QADD(__QADD(S->Kd, S->Kd), S->Kp); + +#else + + q31_t temp; /* to store the sum */ + + /* Derived coefficient A0 */ + temp = clip_q63_to_q31((q63_t) S->Kp + S->Ki); + S->A0 = clip_q63_to_q31((q63_t) temp + S->Kd); + + /* Derived coefficient A1 */ + temp = clip_q63_to_q31((q63_t) S->Kd + S->Kd); + S->A1 = -clip_q63_to_q31((q63_t) temp + S->Kp); + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Derived coefficient A2 */ + S->A2 = S->Kd; + + /* Check whether state needs reset or not */ + if (resetStateFlag) + { + /* Reset state to zero, The size will be always 3 samples */ + memset(S->state, 0, 3U * sizeof(q31_t)); + } + +} + +/** + @} end of PID group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_f32.c b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_f32.c new file mode 100644 index 000000000..d839e55ea --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_f32.c @@ -0,0 +1,54 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_pid_reset_f32.c + * Description: Floating-point PID Control reset function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @addtogroup PID + @{ + */ + +/** + @brief Reset function for the floating-point PID Control. + @param[in,out] S points to an instance of the floating-point PID structure + @return none + + @par Details + The function resets the state buffer to zeros. + */ + +void arm_pid_reset_f32( + arm_pid_instance_f32 * S) +{ + /* Reset state to zero, The size will be always 3 samples */ + memset(S->state, 0, 3U * sizeof(float32_t)); +} + +/** + @} end of PID group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_q15.c b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_q15.c new file mode 100644 index 000000000..256fd8cae --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_q15.c @@ -0,0 +1,54 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_pid_reset_q15.c + * Description: Q15 PID Control reset function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @addtogroup PID + @{ + */ + +/** + @brief Reset function for the Q15 PID Control. + @param[in,out] S points to an instance of the Q15 PID structure + @return none + + @par Details + The function resets the state buffer to zeros. + */ + +void arm_pid_reset_q15( + arm_pid_instance_q15 * S) +{ + /* Reset state to zero, The size will be always 3 samples */ + memset(S->state, 0, 3U * sizeof(q15_t)); +} + +/** + @} end of PID group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_q31.c b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_q31.c new file mode 100644 index 000000000..2aa391c04 --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_pid_reset_q31.c @@ -0,0 +1,54 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_pid_reset_q31.c + * Description: Q31 PID Control reset function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @addtogroup PID + @{ + */ + +/** + @brief Reset function for the Q31 PID Control. + @param[in,out] S points to an instance of the Q31 PID structure + @return none + + @par Details + The function resets the state buffer to zeros. + */ + +void arm_pid_reset_q31( + arm_pid_instance_q31 * S) +{ + /* Reset state to zero, The size will be always 3 samples */ + memset(S->state, 0, 3U * sizeof(q31_t)); +} + +/** + @} end of PID group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_sin_cos_f32.c b/CMSIS/DSP/Source/ControllerFunctions/arm_sin_cos_f32.c new file mode 100644 index 000000000..12a1c83b1 --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_sin_cos_f32.c @@ -0,0 +1,146 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_sin_cos_f32.c + * Description: Sine and Cosine calculation for floating-point values + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @ingroup groupController + */ + +/** + @defgroup SinCos Sine Cosine + + Computes the trigonometric sine and cosine values using a combination of table lookup + and linear interpolation. + There are separate functions for Q31 and floating-point data types. + The input to the floating-point version is in degrees while the + fixed-point Q31 have a scaled input with the range + [-1 0.9999] mapping to [-180 +180] degrees. + + The floating point function also allows values that are out of the usual range. When this happens, the function will + take extra time to adjust the input value to the range of [-180 180]. + + The result is accurate to 5 digits after the decimal point. + + The implementation is based on table lookup using 360 values together with linear interpolation. + The steps used are: + -# Calculation of the nearest integer table index. + -# Compute the fractional portion (fract) of the input. + -# Fetch the value corresponding to \c index from sine table to \c y0 and also value from \c index+1 to \c y1. + -# Sine value is computed as *psinVal = y0 + (fract * (y1 - y0)). + -# Fetch the value corresponding to \c index from cosine table to \c y0 and also value from \c index+1 to \c y1. + -# Cosine value is computed as *pcosVal = y0 + (fract * (y1 - y0)). + */ + +/** + @addtogroup SinCos + @{ + */ + +/** + @brief Floating-point sin_cos function. + @param[in] theta input value in degrees + @param[out] pSinVal points to processed sine output + @param[out] pCosVal points to processed cosine output + @return none + */ + +void arm_sin_cos_f32( + float32_t theta, + float32_t * pSinVal, + float32_t * pCosVal) +{ + float32_t fract, in; /* Temporary input, output variables */ + uint16_t indexS, indexC; /* Index variable */ + float32_t f1, f2, d1, d2; /* Two nearest output values */ + float32_t Dn, Df; + float32_t temp, findex; + + /* input x is in degrees */ + /* Scale input, divide input by 360, for cosine add 0.25 (pi/2) to read sine table */ + in = theta * 0.00277777777778f; + + if (in < 0.0f) + { + in = -in; + } + + in = in - (int32_t)in; + + /* Calculate the nearest index */ + findex = (float32_t)FAST_MATH_TABLE_SIZE * in; + indexS = ((uint16_t)findex) & 0x1ff; + indexC = (indexS + (FAST_MATH_TABLE_SIZE / 4)) & 0x1ff; + + /* Calculation of fractional value */ + fract = findex - (float32_t) indexS; + + /* Read two nearest values of input value from the cos & sin tables */ + f1 = sinTable_f32[indexC ]; + f2 = sinTable_f32[indexC+1]; + d1 = -sinTable_f32[indexS ]; + d2 = -sinTable_f32[indexS+1]; + + temp = (1.0f - fract) * f1 + fract * f2; + + Dn = 0.0122718463030f; /* delta between the two points (fixed), in this case 2*pi/FAST_MATH_TABLE_SIZE */ + Df = f2 - f1; /* delta between the values of the functions */ + + temp = Dn * (d1 + d2) - 2 * Df; + temp = fract * temp + (3 * Df - (d2 + 2 * d1) * Dn); + temp = fract * temp + d1 * Dn; + + /* Calculation of cosine value */ + *pCosVal = fract * temp + f1; + + /* Read two nearest values of input value from the cos & sin tables */ + f1 = sinTable_f32[indexS ]; + f2 = sinTable_f32[indexS+1]; + d1 = sinTable_f32[indexC ]; + d2 = sinTable_f32[indexC+1]; + + temp = (1.0f - fract) * f1 + fract * f2; + + Df = f2 - f1; // delta between the values of the functions + temp = Dn * (d1 + d2) - 2 * Df; + temp = fract * temp + (3 * Df - (d2 + 2 * d1) * Dn); + temp = fract * temp + d1 * Dn; + + /* Calculation of sine value */ + *pSinVal = fract * temp + f1; + + if (theta < 0.0f) + { + *pSinVal = -*pSinVal; + } +} + +/** + @} end of SinCos group + */ diff --git a/CMSIS/DSP/Source/ControllerFunctions/arm_sin_cos_q31.c b/CMSIS/DSP/Source/ControllerFunctions/arm_sin_cos_q31.c new file mode 100644 index 000000000..84ee3d2ca --- /dev/null +++ b/CMSIS/DSP/Source/ControllerFunctions/arm_sin_cos_q31.c @@ -0,0 +1,110 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_sin_cos_q31.c + * Description: Cosine & Sine calculation for Q31 values + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @ingroup groupController + */ + +/** + @addtogroup SinCos + @{ + */ + +/** + @brief Q31 sin_cos function. + @param[in] theta scaled input value in degrees + @param[out] pSinVal points to processed sine output + @param[out] pCosVal points to processed cosine output + @return none + + The Q31 input value is in the range [-1 0.999999] and is mapped to a degree value in the range [-180 179]. + */ + +void arm_sin_cos_q31( + q31_t theta, + q31_t * pSinVal, + q31_t * pCosVal) +{ + q31_t fract; /* Temporary input, output variables */ + uint16_t indexS, indexC; /* Index variable */ + q31_t f1, f2, d1, d2; /* Two nearest output values */ + q31_t Dn, Df; + q63_t temp; + + /* Calculate the nearest index */ + indexS = (uint32_t)theta >> CONTROLLER_Q31_SHIFT; + indexC = (indexS + 128) & 0x1ff; + + /* Calculation of fractional value */ + fract = (theta - (indexS << CONTROLLER_Q31_SHIFT)) << 8; + + /* Read two nearest values of input value from the cos & sin tables */ + f1 = sinTable_q31[indexC ]; + f2 = sinTable_q31[indexC+1]; + d1 = -sinTable_q31[indexS ]; + d2 = -sinTable_q31[indexS+1]; + + Dn = 0x1921FB5; /* delta between the two points (fixed), in this case 2*pi/FAST_MATH_TABLE_SIZE */ + Df = f2 - f1; /* delta between the values of the functions */ + + temp = Dn * ((q63_t)d1 + d2); + temp = temp - ((q63_t)Df << 32); + temp = (q63_t)fract * (temp >> 31); + temp = temp + ((3 * (q63_t)Df << 31) - (d2 + ((q63_t)d1 << 1)) * Dn); + temp = (q63_t)fract * (temp >> 31); + temp = temp + (q63_t)d1 * Dn; + temp = (q63_t)fract * (temp >> 31); + + /* Calculation of cosine value */ + *pCosVal = clip_q63_to_q31((temp >> 31) + (q63_t)f1); + + /* Read two nearest values of input value from the cos & sin tables */ + f1 = sinTable_q31[indexS ]; + f2 = sinTable_q31[indexS+1]; + d1 = sinTable_q31[indexC ]; + d2 = sinTable_q31[indexC+1]; + + Df = f2 - f1; // delta between the values of the functions + temp = Dn * ((q63_t)d1 + d2); + temp = temp - ((q63_t)Df << 32); + temp = (q63_t)fract * (temp >> 31); + temp = temp + ((3 * (q63_t)Df << 31) - (d2 + ((q63_t)d1 << 1)) * Dn); + temp = (q63_t)fract * (temp >> 31); + temp = temp + (q63_t)d1 * Dn; + temp = (q63_t)fract * (temp >> 31); + + /* Calculation of sine value */ + *pSinVal = clip_q63_to_q31((temp >> 31) + (q63_t)f1); +} + +/** + @} end of SinCos group + */ diff --git a/CMSIS/DSP/Source/FastMathFunctions/FastMathFunctions.c b/CMSIS/DSP/Source/FastMathFunctions/FastMathFunctions.c new file mode 100644 index 000000000..abd919e0a --- /dev/null +++ b/CMSIS/DSP/Source/FastMathFunctions/FastMathFunctions.c @@ -0,0 +1,37 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: FastMathFunctions.c + * Description: Combination of all fast math function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_cos_f32.c" +#include "arm_cos_q15.c" +#include "arm_cos_q31.c" +#include "arm_sin_f32.c" +#include "arm_sin_q15.c" +#include "arm_sin_q31.c" +#include "arm_sqrt_q15.c" +#include "arm_sqrt_q31.c" + diff --git a/CMSIS/DSP/Source/FilteringFunctions/FilteringFunctions.c b/CMSIS/DSP/Source/FilteringFunctions/FilteringFunctions.c new file mode 100644 index 000000000..7ce0cdbb7 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/FilteringFunctions.c @@ -0,0 +1,127 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: FilteringFunctions.c + * Description: Combination of all filtering function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_biquad_cascade_df1_32x64_init_q31.c" +#include "arm_biquad_cascade_df1_32x64_q31.c" +#include "arm_biquad_cascade_df1_f32.c" +#include "arm_biquad_cascade_df1_fast_q15.c" +#include "arm_biquad_cascade_df1_fast_q31.c" +#include "arm_biquad_cascade_df1_init_f32.c" +#include "arm_biquad_cascade_df1_init_q15.c" +#include "arm_biquad_cascade_df1_init_q31.c" +#include "arm_biquad_cascade_df1_q15.c" +#include "arm_biquad_cascade_df1_q31.c" +#include "arm_biquad_cascade_df2T_f32.c" +#include "arm_biquad_cascade_df2T_f64.c" +#include "arm_biquad_cascade_df2T_init_f32.c" +#include "arm_biquad_cascade_df2T_init_f64.c" +#include "arm_biquad_cascade_stereo_df2T_f32.c" +#include "arm_biquad_cascade_stereo_df2T_init_f32.c" +#include "arm_conv_f32.c" +#include "arm_conv_fast_opt_q15.c" +#include "arm_conv_fast_q15.c" +#include "arm_conv_fast_q31.c" +#include "arm_conv_opt_q15.c" +#include "arm_conv_opt_q7.c" +#include "arm_conv_partial_f32.c" +#include "arm_conv_partial_fast_opt_q15.c" +#include "arm_conv_partial_fast_q15.c" +#include "arm_conv_partial_fast_q31.c" +#include "arm_conv_partial_opt_q15.c" +#include "arm_conv_partial_opt_q7.c" +#include "arm_conv_partial_q15.c" +#include "arm_conv_partial_q31.c" +#include "arm_conv_partial_q7.c" +#include "arm_conv_q15.c" +#include "arm_conv_q31.c" +#include "arm_conv_q7.c" +#include "arm_correlate_f32.c" +#include "arm_correlate_fast_opt_q15.c" +#include "arm_correlate_fast_q15.c" +#include "arm_correlate_fast_q31.c" +#include "arm_correlate_opt_q15.c" +#include "arm_correlate_opt_q7.c" +#include "arm_correlate_q15.c" +#include "arm_correlate_q31.c" +#include "arm_correlate_q7.c" +#include "arm_fir_decimate_f32.c" +#include "arm_fir_decimate_fast_q15.c" +#include "arm_fir_decimate_fast_q31.c" +#include "arm_fir_decimate_init_f32.c" +#include "arm_fir_decimate_init_q15.c" +#include "arm_fir_decimate_init_q31.c" +#include "arm_fir_decimate_q15.c" +#include "arm_fir_decimate_q31.c" +#include "arm_fir_f32.c" +#include "arm_fir_fast_q15.c" +#include "arm_fir_fast_q31.c" +#include "arm_fir_init_f32.c" +#include "arm_fir_init_q15.c" +#include "arm_fir_init_q31.c" +#include "arm_fir_init_q7.c" +#include "arm_fir_interpolate_f32.c" +#include "arm_fir_interpolate_init_f32.c" +#include "arm_fir_interpolate_init_q15.c" +#include "arm_fir_interpolate_init_q31.c" +#include "arm_fir_interpolate_q15.c" +#include "arm_fir_interpolate_q31.c" +#include "arm_fir_lattice_f32.c" +#include "arm_fir_lattice_init_f32.c" +#include "arm_fir_lattice_init_q15.c" +#include "arm_fir_lattice_init_q31.c" +#include "arm_fir_lattice_q15.c" +#include "arm_fir_lattice_q31.c" +#include "arm_fir_q15.c" +#include "arm_fir_q31.c" +#include "arm_fir_q7.c" +#include "arm_fir_sparse_f32.c" +#include "arm_fir_sparse_init_f32.c" +#include "arm_fir_sparse_init_q15.c" +#include "arm_fir_sparse_init_q31.c" +#include "arm_fir_sparse_init_q7.c" +#include "arm_fir_sparse_q15.c" +#include "arm_fir_sparse_q31.c" +#include "arm_fir_sparse_q7.c" +#include "arm_iir_lattice_f32.c" +#include "arm_iir_lattice_init_f32.c" +#include "arm_iir_lattice_init_q15.c" +#include "arm_iir_lattice_init_q31.c" +#include "arm_iir_lattice_q15.c" +#include "arm_iir_lattice_q31.c" +#include "arm_lms_f32.c" +#include "arm_lms_init_f32.c" +#include "arm_lms_init_q15.c" +#include "arm_lms_init_q31.c" +#include "arm_lms_norm_f32.c" +#include "arm_lms_norm_init_f32.c" +#include "arm_lms_norm_init_q15.c" +#include "arm_lms_norm_init_q31.c" +#include "arm_lms_norm_q15.c" +#include "arm_lms_norm_q31.c" +#include "arm_lms_q15.c" +#include "arm_lms_q31.c" diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c new file mode 100644 index 000000000..ac2313fbb --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c @@ -0,0 +1,94 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_32x64_init_q31.c + * Description: High precision Q31 Biquad cascade filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1_32x64 + @{ + */ + +/** + @brief Initialization function for the Q31 Biquad cascade 32x64 filter. + @param[in,out] S points to an instance of the high precision Q31 Biquad cascade filter structure + @param[in] numStages number of 2nd order stages in the filter + @param[in] pCoeffs points to the filter coefficients + @param[in] pState points to the state buffer + @param[in] postShift Shift to be applied after the accumulator. Varies according to the coefficients format + @return none + + @par Coefficient and State Ordering + The coefficients are stored in the array pCoeffs in the following order: +
+      {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}
+  
+ where b1x and a1x are the coefficients for the first stage, + b2x and a2x are the coefficients for the second stage, + and so on. The pCoeffs array contains a total of 5*numStages values. + @par + The pState points to state variables array and size of each state variable is 1.63 format. + Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + The state variables are arranged in the state array as: +
+      {x[n-1], x[n-2], y[n-1], y[n-2]}
+  
+ The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + The state array has a total length of 4*numStages values. + The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cas_df1_32x64_init_q31( + arm_biquad_cas_df1_32x64_ins_q31 * S, + uint8_t numStages, + const q31_t * pCoeffs, + q63_t * pState, + uint8_t postShift) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign postShift to be applied to the output */ + S->postShift = postShift; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4U * (uint32_t) numStages) * sizeof(q63_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of BiquadCascadeDF1_32x64 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c new file mode 100644 index 000000000..9a284b8a9 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c @@ -0,0 +1,458 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_32x64_q31.c + * Description: High precision Q31 Biquad cascade filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup BiquadCascadeDF1_32x64 High Precision Q31 Biquad Cascade Filter + + This function implements a high precision Biquad cascade filter which operates on + Q31 data values. The filter coefficients are in 1.31 format and the state variables + are in 1.63 format. The double precision state variables reduce quantization noise + in the filter and provide a cleaner output. + These filters are particularly useful when implementing filters in which the + singularities are close to the unit circle. This is common for low pass or high + pass filters with very low cutoff frequencies. + + The function operates on blocks of input and output data + and each call to the function processes blockSize samples through + the filter. pSrc and pDst points to input and output arrays + containing blockSize Q31 values. + + @par Algorithm + Each Biquad stage implements a second order filter using the difference equation: +
+      y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2]
+  
+ A Direct Form I algorithm is used with 5 coefficients and 4 state variables per stage. + \image html Biquad.gif "Single Biquad filter stage" + Coefficients b0, b1 and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. + Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. + Pay careful attention to the sign of the feedback coefficients. + Some design tools use the difference equation +
+      y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] - a1 * y[n-1] - a2 * y[n-2]
+  
+ In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library. + @par + Higher order filters are realized as a cascade of second order sections. + numStages refers to the number of second order stages used. + For example, an 8th order filter would be realized with numStages=4 second order stages. + \image html BiquadCascade.gif "8th order filter using a cascade of Biquad stages" + A 9th order filter would be realized with numStages=5 second order stages + with the coefficients for one of the stages configured as a first order filter + (b2=0 and a2=0). + @par + The pState points to state variables array. + Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2] and each state variable in 1.63 format to improve precision. + The state variables are arranged in the array as: +
+      {x[n-1], x[n-2], y[n-1], y[n-2]}
+  
+ @par + The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + The state array has a total length of 4*numStages values of data in 1.63 format. + The state variables are updated after each block of data is processed, the coefficients are untouched. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + + @par Init Function + There is also an associated initialization function which performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numStages, pCoeffs, postShift, pState. Also set all of the values in pState to zero. + + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Set the values in the state buffer to zeros before static initialization. + For example, to statically initialize the filter instance structure use +
+      arm_biquad_cas_df1_32x64_ins_q31 S1 = {numStages, pState, pCoeffs, postShift};
+  
+ where numStages is the number of Biquad stages in the filter; + pState is the address of the state buffer; + pCoeffs is the address of the coefficient buffer; + postShift shift to be applied which is described in detail below. + @par Fixed-Point Behavior + Care must be taken while using Biquad Cascade 32x64 filter function. + Following issues must be considered: + - Scaling of coefficients + - Filter gain + - Overflow and saturation + + @par + Filter coefficients are represented as fractional values and + restricted to lie in the range [-1 +1). + The processing function has an additional scaling parameter postShift + which allows the filter coefficients to exceed the range [+1 -1). + At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + \image html BiquadPostshift.gif "Fixed-point Biquad with shift by postShift bits after accumulator" + This essentially scales the filter coefficients by 2^postShift. + For example, to realize the coefficients +
+     {1.5, -0.8, 1.2, 1.6, -0.9}
+  
+ set the Coefficient array to: +
+     {0.75, -0.4, 0.6, 0.8, -0.45}
+  
+ and set postShift=1 + @par + The second thing to keep in mind is the gain through the filter. + The frequency response of a Biquad filter is a function of its coefficients. + It is possible for the gain through the filter to exceed 1.0 meaning that the + filter increases the amplitude of certain frequencies. + This means that an input signal with amplitude < 1.0 may result in an output > 1.0 + and these are saturated or overflowed based on the implementation of the filter. + To avoid this behavior the filter needs to be scaled down such that its peak gain < 1.0 + or the input signal must be scaled down so that the combination of input and filter are never overflowed. + @par + The third item to consider is the overflow and saturation behavior of the fixed-point Q31 version. + This is described in the function specific documentation below. + */ + +/** + @addtogroup BiquadCascadeDF1_32x64 + @{ + */ + +/** + @brief Processing function for the Q31 Biquad cascade 32x64 filter. + @param[in] S points to an instance of the high precision Q31 Biquad cascade filter + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Details + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around rather than clip. + In order to avoid overflows completely the input signal must be scaled down by 2 bits and lie in the range [-0.25 +0.25). + After all 5 multiply-accumulates are performed, the 2.62 accumulator is shifted by postShift bits and the result truncated to + 1.31 format by discarding the low 32 bits. + @par + Two related functions are provided in the CMSIS DSP library. + - \ref arm_biquad_cascade_df1_q31() implements a Biquad cascade with 32-bit coefficients and state variables with a Q63 accumulator. + - \ref arm_biquad_cascade_df1_fast_q31() implements a Biquad cascade with 32-bit coefficients and state variables with a Q31 accumulator. + */ + +void arm_biquad_cas_df1_32x64_q31( + const arm_biquad_cas_df1_32x64_ins_q31 * S, + q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pIn = pSrc; /* input pointer initialization */ + q31_t *pOut = pDst; /* output pointer initialization */ + q63_t *pState = S->pState; /* state pointer initialization */ + const q31_t *pCoeffs = S->pCoeffs; /* coeff pointer initialization */ + q63_t acc; /* accumulator */ + q31_t Xn1, Xn2; /* Input Filter state variables */ + q63_t Yn1, Yn2; /* Output Filter state variables */ + q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q31_t Xn; /* temporary input */ + int32_t shift = (int32_t) S->postShift + 1; /* Shift to be applied to the output */ + uint32_t sample, stage = S->numStages; /* loop counters */ + q31_t acc_l, acc_h; /* temporary output */ + uint32_t uShift = ((uint32_t) S->postShift + 1U); + uint32_t lShift = 32U - uShift; /* Shift to be applied to the output */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = (q31_t) (pState[0]); + Xn2 = (q31_t) (pState[1]); + Yn1 = pState[2]; + Yn2 = pState[3]; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* Variable acc hold output value that is being computed and stored in destination buffer + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + /* Loop unrolling: Compute 4 outputs at a time */ + sample = blockSize >> 2U; + + while (sample > 0U) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) Xn * b0; + + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn1 * b1; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn2 * b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn1, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn2, a2); + + /* The result is converted to 1.63 , Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *pOut = acc_h; + + /* Read the second input into Xn2, to reuse the value */ + Xn2 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc += b1 * x[n-1] */ + acc = (q63_t) Xn * b1; + + /* acc = b0 * x[n] */ + acc += (q63_t) Xn2 * b0; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn1 * b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn2, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn1, a2); + + /* The result is converted to 1.63, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Read the third input into Xn1, to reuse the value */ + Xn1 = *pIn++; + + /* The result is converted to 1.31 */ + /* Store the output in the destination buffer. */ + *(pOut + 1U) = acc_h; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) Xn1 * b0; + + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn2 * b1; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn * b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn1, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn2, a2); + + /* The result is converted to 1.63, Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *(pOut + 2U) = acc_h; + + /* Read the fourth input into Xn, to reuse the value */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + acc = (q63_t) Xn * b0; + + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn1 * b1; + + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn2 * b2; + + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn2, a1); + + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn1, a2); + + /* The result is converted to 1.63, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *(pOut + 3U) = acc_h; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + + /* update output pointer */ + pOut += 4U; + + /* decrement loop counter */ + sample--; + } + + /* Loop unrolling: Compute remaining outputs */ + sample = blockSize & 0x3U; + +#else + + /* Initialize blkCnt with number of samples */ + sample = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (sample > 0U) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + + /* acc = b0 * x[n] */ + acc = (q63_t) Xn * b0; + /* acc += b1 * x[n-1] */ + acc += (q63_t) Xn1 * b1; + /* acc += b[2] * x[n-2] */ + acc += (q63_t) Xn2 * b2; + /* acc += a1 * y[n-1] */ + acc += mult32x64(Yn1, a1); + /* acc += a2 * y[n-2] */ + acc += mult32x64(Yn2, a2); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + + /* The result is converted to 1.63, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc_h = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the output in the destination buffer in 1.31 format. */ + *pOut++ = acc_h; + /* Yn1 = acc << shift; */ + + /* Store the output in the destination buffer in 1.31 format. */ +/* *pOut++ = (q31_t) (acc >> (32 - shift)); */ + + /* decrement loop counter */ + sample--; + } + + /* The first stage output is given as input to the second stage. */ + pIn = pDst; + + /* Reset to destination buffer working pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = (q63_t) Xn1; + *pState++ = (q63_t) Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while (--stage); + +} + +/** + @} end of BiquadCascadeDF1_32x64 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c new file mode 100644 index 000000000..d28509d4c --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c @@ -0,0 +1,495 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_f32.c + * Description: Processing function for the floating-point Biquad cascade DirectFormI(DF1) filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup BiquadCascadeDF1 Biquad Cascade IIR Filters Using Direct Form I Structure + + This set of functions implements arbitrary order recursive (IIR) filters. + The filters are implemented as a cascade of second order Biquad sections. + The functions support Q15, Q31 and floating-point data types. + Fast version of Q15 and Q31 also available. + + The functions operate on blocks of input and output data and each call to the function + processes blockSize samples through the filter. + pSrc points to the array of input data and + pDst points to the array of output data. + Both arrays contain blockSize values. + + @par Algorithm + Each Biquad stage implements a second order filter using the difference equation: +
+      y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2]
+  
+ A Direct Form I algorithm is used with 5 coefficients and 4 state variables per stage. + \image html Biquad.gif "Single Biquad filter stage" + Coefficients b0, b1 and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. + Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. + Pay careful attention to the sign of the feedback coefficients. + Some design tools use the difference equation +
+      y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] - a1 * y[n-1] - a2 * y[n-2]
+  
+ In this case the feedback coefficients a1 and a2 + must be negated when used with the CMSIS DSP Library. + + @par + Higher order filters are realized as a cascade of second order sections. + numStages refers to the number of second order stages used. + For example, an 8th order filter would be realized with numStages=4 second order stages. + \image html BiquadCascade.gif "8th order filter using a cascade of Biquad stages" + A 9th order filter would be realized with numStages=5 second order stages with the coefficients for one of the stages configured as a first order filter (b2=0 and a2=0). + + @par + The pState points to state variables array. + Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + The state variables are arranged in the pState array as: +
+      {x[n-1], x[n-2], y[n-1], y[n-2]}
+  
+ + @par + The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + The state array has a total length of 4*numStages values. + The state variables are updated after each block of data is processed, the coefficients are untouched. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Init Function + There is also an associated initialization function for each data type. + The initialization function performs following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numStages, pCoeffs, pState. Also set all of the values in pState to zero. + + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Set the values in the state buffer to zeros before static initialization. + The code below statically initializes each of the 3 different data type filter instance structures +
+      arm_biquad_casd_df1_inst_f32 S1 = {numStages, pState, pCoeffs};
+      arm_biquad_casd_df1_inst_q15 S2 = {numStages, pState, pCoeffs, postShift};
+      arm_biquad_casd_df1_inst_q31 S3 = {numStages, pState, pCoeffs, postShift};
+  
+ where numStages is the number of Biquad stages in the filter; + pState is the address of the state buffer; + pCoeffs is the address of the coefficient buffer; + postShift shift to be applied. + + @par Fixed-Point Behavior + Care must be taken when using the Q15 and Q31 versions of the Biquad Cascade filter functions. + Following issues must be considered: + - Scaling of coefficients + - Filter gain + - Overflow and saturation + + @par Scaling of coefficients + Filter coefficients are represented as fractional values and + coefficients are restricted to lie in the range [-1 +1). + The fixed-point functions have an additional scaling parameter postShift + which allow the filter coefficients to exceed the range [+1 -1). + At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + \image html BiquadPostshift.gif "Fixed-point Biquad with shift by postShift bits after accumulator" + This essentially scales the filter coefficients by 2^postShift. + For example, to realize the coefficients +
+     {1.5, -0.8, 1.2, 1.6, -0.9}
+  
+ set the pCoeffs array to: +
+     {0.75, -0.4, 0.6, 0.8, -0.45}
+  
+ and set postShift=1 + + @par Filter gain + The frequency response of a Biquad filter is a function of its coefficients. + It is possible for the gain through the filter to exceed 1.0 meaning that the filter increases the amplitude of certain frequencies. + This means that an input signal with amplitude < 1.0 may result in an output > 1.0 and these are saturated or overflowed based on the implementation of the filter. + To avoid this behavior the filter needs to be scaled down such that its peak gain < 1.0 or the input signal must be scaled down so that the combination of input and filter are never overflowed. + + @par Overflow and saturation + For Q15 and Q31 versions, it is described separately as part of the function specific documentation below. + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Processing function for the floating-point Biquad cascade filter. + @param[in] S points to an instance of the floating-point Biquad cascade structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ + +#if defined(ARM_MATH_NEON) +void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + + const float32_t *pIn = pSrc; /* source pointer */ + float32_t *pOut = pDst; /* destination pointer */ + float32_t *pState = S->pState; /* pState pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* coefficient pointer */ + float32_t acc; /* Simulates the accumulator */ + + uint32_t sample, stage = S->numStages; /* loop counters */ + + float32x4_t Xn; + float32x2_t Yn; + float32x2_t a; + float32x4_t b; + + float32x4_t x,tmp; + float32x2_t t; + float32x2x2_t y; + + float32_t Xns; + + while (stage > 0U) + { + /* Reading the coefficients */ + Xn = vld1q_f32(pState); + Yn = vld1_f32(pState + 2); + + b = vld1q_f32(pCoeffs); + b = vrev64q_f32(b); + b = vcombine_f32(vget_high_f32(b), vget_low_f32(b)); + + a = vld1_f32(pCoeffs + 3); + a = vrev64_f32(a); + b[0] = 0.0; + pCoeffs += 5; + + /* Reading the pState values */ + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* The variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + sample = blockSize >> 2U; + + while (sample > 0U) + { + /* Read the first 4 inputs */ + x = vld1q_f32(pIn); + + pIn += 4; + + tmp = vextq_f32(Xn, x, 1); + t = vmul_f32(vget_high_f32(b), vget_high_f32(tmp)); + t = vmla_f32(t, vget_low_f32(b), vget_low_f32(tmp)); + t = vmla_f32(t, a, Yn); + t = vpadd_f32(t, t); + Yn = vext_f32(Yn, t, 1); + + tmp = vextq_f32(Xn, x, 2); + t = vmul_f32(vget_high_f32(b), vget_high_f32(tmp)); + t = vmla_f32(t, vget_low_f32(b), vget_low_f32(tmp)); + t = vmla_f32(t, a, Yn); + t = vpadd_f32(t, t); + Yn = vext_f32(Yn, t, 1); + + y.val[0] = Yn; + + tmp = vextq_f32(Xn, x, 3); + t = vmul_f32(vget_high_f32(b), vget_high_f32(tmp)); + t = vmla_f32(t, vget_low_f32(b), vget_low_f32(tmp)); + t = vmla_f32(t, a, Yn); + t = vpadd_f32(t, t); + Yn = vext_f32(Yn, t, 1); + + Xn = x; + t = vmul_f32(vget_high_f32(b), vget_high_f32(Xn)); + t = vmla_f32(t, vget_low_f32(b), vget_low_f32(Xn)); + t = vmla_f32(t, a, Yn); + t = vpadd_f32(t, t); + Yn = vext_f32(Yn, t, 1); + + y.val[1] = Yn; + + tmp = vcombine_f32(y.val[0], y.val[1]); + + /* Store the 4 outputs and increment the pointer */ + vst1q_f32(pOut, tmp); + pOut += 4; + + /* Decrement the loop counter */ + sample--; + } + + /* If the block size is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + sample = blockSize & 0x3U; + + while (sample > 0U) + { + /* Read the input */ + Xns = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = (b[1] * Xn[2]) + (b[2] * Xn[3]) + (b[3] * Xns) + (a[0] * Yn[0]) + (a[1] * Yn[1]); + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn[2] = Xn[3]; + Xn[3] = Xns; + Yn[0] = Yn[1]; + Yn[1] = acc; + + /* Decrement the loop counter */ + sample--; + + } + + vst1q_f32(pState,vcombine_f32(vrev64_f32(vget_high_f32(Xn)),vrev64_f32(Yn))); + pState += 4; + /* Store the updated state variables back into the pState array */ + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent numStages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset the output pointer */ + pOut = pDst; + + /* Decrement the loop counter */ + stage--; + } +} + +#else +void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + const float32_t *pIn = pSrc; /* Source pointer */ + float32_t *pOut = pDst; /* Destination pointer */ + float32_t *pState = S->pState; /* pState pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t acc; /* Accumulator */ + float32_t b0, b1, b2, a1, a2; /* Filter coefficients */ + float32_t Xn1, Xn2, Yn1, Yn2; /* Filter pState variables */ + float32_t Xn; /* Temporary input */ + uint32_t sample, stage = S->numStages; /* Loop counters */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the pState values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* Variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + /* Loop unrolling: Compute 4 outputs at a time */ + sample = blockSize >> 2U; + + while (sample > 0U) + { + /* Read the first input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn2 = (b0 * Xn) + (b1 * Xn1) + (b2 * Xn2) + (a1 * Yn1) + (a2 * Yn2); + + /* Store output in destination buffer. */ + *pOut++ = Yn2; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + + /* Read the second input */ + Xn2 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn1 = (b0 * Xn2) + (b1 * Xn) + (b2 * Xn1) + (a1 * Yn2) + (a2 * Yn1); + + /* Store output in destination buffer. */ + *pOut++ = Yn1; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + + /* Read the third input */ + Xn1 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn2 = (b0 * Xn1) + (b1 * Xn2) + (b2 * Xn) + (a1 * Yn1) + (a2 * Yn2); + + /* Store output in destination buffer. */ + *pOut++ = Yn2; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + + /* Read the forth input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + Yn1 = (b0 * Xn) + (b1 * Xn1) + (b2 * Xn2) + (a1 * Yn2) + (a2 * Yn1); + + /* Store output in destination buffer. */ + *pOut++ = Yn1; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + + /* decrement loop counter */ + sample--; + } + + /* Loop unrolling: Compute remaining outputs */ + sample = blockSize & 0x3U; + +#else + + /* Initialize blkCnt with number of samples */ + sample = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (sample > 0U) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = (b0 * Xn) + (b1 * Xn1) + (b2 * Xn2) + (a1 * Yn1) + (a2 * Yn2); + + /* Store output in destination buffer. */ + *pOut++ = acc; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = acc; + + /* decrement loop counter */ + sample--; + } + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent numStages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset output pointer */ + pOut = pDst; + + /* decrement loop counter */ + stage--; + + } while (stage > 0U); + +} + +#endif /* #if defined(ARM_MATH_NEON) */ +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c new file mode 100644 index 000000000..1a568d70d --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c @@ -0,0 +1,250 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_fast_q15.c + * Description: Fast processing function for the Q15 Biquad cascade filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Processing function for the Q15 Biquad cascade filter (fast variant). + @param[in] S points to an instance of the Q15 Biquad cascade structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process per call + @return none + + @par Scaling and Overflow Behavior + This fast version uses a 32-bit accumulator with 2.30 format. + The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around and distorts the result. + In order to avoid overflows completely the input signal must be scaled down by two bits and lie in the range [-0.25 +0.25). + The 2.30 accumulator is then shifted by postShift bits and the result truncated to 1.15 format by discarding the low 16 bits. + @remark + Refer to \ref arm_biquad_cascade_df1_q15() for a slower implementation of this function + which uses 64-bit accumulation to avoid wrap around distortion. Both the slow and the fast versions use the same instance structure. + Use the function \ref arm_biquad_cascade_df1_init_q15() to initialize the filter structure. + */ + +void arm_biquad_cascade_df1_fast_q15( + const arm_biquad_casd_df1_inst_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + const q15_t *pIn = pSrc; /* Source pointer */ + q15_t *pOut = pDst; /* Destination pointer */ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t acc; /* Accumulator */ + q31_t in; /* Temporary variable to hold input value */ + q31_t out; /* Temporary variable to hold output value */ + q31_t b0; /* Temporary variable to hold bo value */ + q31_t b1, a1; /* Filter coefficients */ + q31_t state_in, state_out; /* Filter state variables */ + int32_t shift = (int32_t) (15 - S->postShift); /* Post shift */ + uint32_t sample, stage = S->numStages; /* Loop counters */ + + do + { + /* Read the b0 and 0 coefficients using SIMD */ + b0 = read_q15x2_ia ((q15_t **) &pCoeffs); + + /* Read the b1 and b2 coefficients using SIMD */ + b1 = read_q15x2_ia ((q15_t **) &pCoeffs); + + /* Read the a1 and a2 coefficients using SIMD */ + a1 = read_q15x2_ia ((q15_t **) &pCoeffs); + + /* Read the input state values from the state buffer: x[n-1], x[n-2] */ + state_in = read_q15x2_ia (&pState); + + /* Read the output state values from the state buffer: y[n-1], y[n-2] */ + state_out = read_q15x2_da (&pState); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and compute 2 output values simultaneously. */ + /* Variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + /* Loop unrolling: Compute 2 outputs at a time */ + sample = blockSize >> 1U; + + while (sample > 0U) + { + + /* Read the input */ + in = read_q15x2_ia ((q15_t **) &pIn); + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUAD(b0, in); + /* acc = b1 * x[n-1] + acc += b2 * x[n-2] + out */ + acc = __SMLAD(b1, state_in, out); + /* acc += a1 * y[n-1] + acc += a2 * y[n-2] */ + acc = __SMLAD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 and then saturation is applied */ + out = __SSAT((acc >> shift), 16); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ + +#ifndef ARM_MATH_BIG_ENDIAN + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); +#else + state_in = __PKHBT(state_in >> 16, (in >> 16), 16); + state_out = __PKHBT(state_out >> 16, (out), 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUADX(b0, in); + /* acc0 = b1 * x[n-1] , acc0 += b2 * x[n-2] + out */ + acc = __SMLAD(b1, state_in, out); + /* acc += a1 * y[n-1] + acc += a2 * y[n-2] */ + acc = __SMLAD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 and then saturation is applied */ + out = __SSAT((acc >> shift), 16); + + /* Store the output in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(state_out, out, 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(out, state_out >> 16, 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ +#ifndef ARM_MATH_BIG_ENDIAN + state_in = __PKHBT(in >> 16, state_in, 16); + state_out = __PKHBT(out, state_out, 16); +#else + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement loop counter */ + sample--; + } + + /* Loop unrolling: Compute remaining outputs */ + sample = (blockSize & 0x1U); + +#else + + /* Initialize blkCnt with number of samples */ + sample = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (sample > 0U) + { + /* Read the input */ + in = *pIn++; + + /* out = b0 * x[n] + 0 * 0 */ +#ifndef ARM_MATH_BIG_ENDIAN + out = __SMUAD(b0, in); +#else + out = __SMUADX(b0, in); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc = b1 * x[n-1], acc += b2 * x[n-2] + out */ + acc = __SMLAD(b1, state_in, out); + /* acc += a1 * y[n-1] + acc += a2 * y[n-2] */ + acc = __SMLAD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 and then saturation is applied */ + out = __SSAT((acc >> shift), 16); + + /* Store the output in the destination buffer. */ + *pOut++ = (q15_t) out; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ +#ifndef ARM_MATH_BIG_ENDIAN + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); +#else + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* decrement loop counter */ + sample--; + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent (numStages - 1) occur in-place in the output buffer */ + pIn = pDst; + + /* Reset the output pointer */ + pOut = pDst; + + /* Store the updated state variables back into the state array */ + write_q15x2_ia(&pState, state_in); + write_q15x2_ia(&pState, state_out); + + /* Decrement loop counter */ + stage--; + + } while (stage > 0U); +} + +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c new file mode 100644 index 000000000..586296b32 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c @@ -0,0 +1,296 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_fast_q31.c + * Description: Processing function for the Q31 Fast Biquad cascade DirectFormI(DF1) filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Processing function for the Q31 Biquad cascade filter (fast variant). + @param[in] S points to an instance of the Q31 Biquad cascade structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process per call + @return none + + @par Scaling and Overflow Behavior + This function is optimized for speed at the expense of fixed-point precision and overflow protection. + The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + These intermediate results are added to a 2.30 accumulator. + Finally, the accumulator is saturated and converted to a 1.31 result. + The fast version has the same overflow behavior as the standard version and provides less precision since it discards the low 32 bits of each multiplication result. + In order to avoid overflows completely the input signal must be scaled down by two bits and lie in the range [-0.25 +0.25). Use the intialization function + arm_biquad_cascade_df1_init_q31() to initialize filter structure. + @remark + Refer to \ref arm_biquad_cascade_df1_q31() for a slower implementation of this function + which uses 64-bit accumulation to provide higher precision. Both the slow and the fast versions use the same instance structure. + Use the function \ref arm_biquad_cascade_df1_init_q31() to initialize the filter structure. + */ + +void arm_biquad_cascade_df1_fast_q31( + const arm_biquad_casd_df1_inst_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + const q31_t *pIn = pSrc; /* Source pointer */ + q31_t *pOut = pDst; /* Destination pointer */ + q31_t *pState = S->pState; /* pState pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t acc = 0; /* Accumulator */ + q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q31_t Xn1, Xn2, Yn1, Yn2; /* Filter pState variables */ + q31_t Xn; /* Temporary input */ + int32_t shift = (int32_t) S->postShift + 1; /* Shift to be applied to the output */ + uint32_t sample, stage = S->numStages; /* Loop counters */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the pState values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* Variables acc ... acc3 hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + /* Loop unrolling: Compute 4 outputs at a time */ + sample = blockSize >> 2U; + + while (sample > 0U) + { + /* Read the input */ + Xn = *pIn; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /* acc = (q31_t) (((q63_t) b1 * Xn1) >> 32);*/ + mult_32x32_keep32_R(acc, b1, Xn1); + /* acc += b1 * x[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b0 * (Xn))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b0, Xn); + /* acc += b[2] * x[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn2); + /* acc += a1 * y[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn1); + /* acc += a2 * y[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn2); + + /* The result is converted to 1.31 , Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Read the second input */ + Xn2 = *(pIn + 1U); + + /* Store the output in the destination buffer. */ + *pOut = Yn2; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /* acc = (q31_t) (((q63_t) b0 * (Xn2)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn2); + /* acc += b1 * x[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn); + /* acc += b[2] * x[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn1); + /* acc += a1 * y[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn2); + /* acc += a2 * y[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn1); + + /* The result is converted to 1.31, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Read the third input */ + Xn1 = *(pIn + 2U); + + /* Store the output in the destination buffer. */ + *(pOut + 1U) = Yn1; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /* acc = (q31_t) (((q63_t) b0 * (Xn1)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn1); + /* acc += b1 * x[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn2); + /* acc += b[2] * x[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn); + /* acc += a1 * y[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn1); + /* acc += a2 * y[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn2); + + /* The result is converted to 1.31, Yn2 variable is reused */ + Yn2 = acc << shift; + + /* Read the forth input */ + Xn = *(pIn + 3U); + + /* Store the output in the destination buffer. */ + *(pOut + 2U) = Yn2; + pIn += 4U; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /* acc = (q31_t) (((q63_t) b0 * (Xn)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn); + /* acc += b1 * x[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn1); + /* acc += b[2] * x[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn2); + /* acc += a1 * y[n-1] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn2); + /* acc += a2 * y[n-2] */ + /*acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn1); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + Xn2 = Xn1; + + /* The result is converted to 1.31, Yn1 variable is reused */ + Yn1 = acc << shift; + + /* Xn1 = Xn */ + Xn1 = Xn; + + /* Store the output in the destination buffer. */ + *(pOut + 3U) = Yn1; + pOut += 4U; + + /* decrement loop counter */ + sample--; + } + + /* Loop unrolling: Compute remaining outputs */ + sample = (blockSize & 0x3U); + +#else + + /* Initialize blkCnt with number of samples */ + sample = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (sample > 0U) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + /* acc = (q31_t) (((q63_t) b0 * (Xn)) >> 32);*/ + mult_32x32_keep32_R(acc, b0, Xn); + /* acc += b1 * x[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b1 * (Xn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b1, Xn1); + /* acc += b[2] * x[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) b2 * (Xn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, b2, Xn2); + /* acc += a1 * y[n-1] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a1 * (Yn1))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a1, Yn1); + /* acc += a2 * y[n-2] */ + /* acc = (q31_t) ((((q63_t) acc << 32) + ((q63_t) a2 * (Yn2))) >> 32);*/ + multAcc_32x32_keep32_R(acc, a2, Yn2); + + /* The result is converted to 1.31 */ + acc = acc << shift; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = acc; + + /* Store the output in the destination buffer. */ + *pOut++ = acc; + + /* decrement loop counter */ + sample--; + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent stages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset to destination pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while (--stage); +} + +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c new file mode 100644 index 000000000..f51c26214 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c @@ -0,0 +1,91 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_init_f32.c + * Description: Floating-point Biquad cascade DirectFormI(DF1) filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Initialization function for the floating-point Biquad cascade filter. + @param[in,out] S points to an instance of the floating-point Biquad cascade structure. + @param[in] numStages number of 2nd order stages in the filter. + @param[in] pCoeffs points to the filter coefficients. + @param[in] pState points to the state buffer. + @return none + + @par Coefficient and State Ordering + The coefficients are stored in the array pCoeffs in the following order: +
+      {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}
+  
+ + @par + where b1x and a1x are the coefficients for the first stage, + b2x and a2x are the coefficients for the second stage, + and so on. The pCoeffs array contains a total of 5*numStages values. + @par + The pState is a pointer to state array. + Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + The state variables are arranged in the pState array as: +
+      {x[n-1], x[n-2], y[n-1], y[n-2]}
+  
+ The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + The state array has a total length of 4*numStages values. + The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df1_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + const float32_t * pCoeffs, + float32_t * pState) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4U * (uint32_t) numStages) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c new file mode 100644 index 000000000..c2e542c43 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c @@ -0,0 +1,96 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_init_q15.c + * Description: Q15 Biquad cascade DirectFormI(DF1) filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Initialization function for the Q15 Biquad cascade filter. + @param[in,out] S points to an instance of the Q15 Biquad cascade structure. + @param[in] numStages number of 2nd order stages in the filter. + @param[in] pCoeffs points to the filter coefficients. + @param[in] pState points to the state buffer. + @param[in] postShift Shift to be applied to the accumulator result. Varies according to the coefficients format + @return none + + @par Coefficient and State Ordering + The coefficients are stored in the array pCoeffs in the following order: +
+      {b10, 0, b11, b12, a11, a12, b20, 0, b21, b22, a21, a22, ...}
+  
+ @par + where b1x and a1x are the coefficients for the first stage, + b2x and a2x are the coefficients for the second stage, + and so on. The pCoeffs array contains a total of 6*numStages values. + The zero coefficient between b1 and b2 facilities use of 16-bit SIMD instructions on the Cortex-M4. + @par + The state variables are stored in the array pState. + Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + The state variables are arranged in the pState array as: +
+      {x[n-1], x[n-2], y[n-1], y[n-2]}
+  
+ The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + The state array has a total length of 4*numStages values. + The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df1_init_q15( + arm_biquad_casd_df1_inst_q15 * S, + uint8_t numStages, + const q15_t * pCoeffs, + q15_t * pState, + int8_t postShift) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign postShift to be applied to the output */ + S->postShift = postShift; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4U * (uint32_t) numStages) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c new file mode 100644 index 000000000..8637889b5 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c @@ -0,0 +1,95 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_init_q31.c + * Description: Q31 Biquad cascade DirectFormI(DF1) filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Initialization function for the Q31 Biquad cascade filter. + @param[in,out] S points to an instance of the Q31 Biquad cascade structure. + @param[in] numStages number of 2nd order stages in the filter. + @param[in] pCoeffs points to the filter coefficients. + @param[in] pState points to the state buffer. + @param[in] postShift Shift to be applied after the accumulator. Varies according to the coefficients format + @return none + + @par Coefficient and State Ordering + The coefficients are stored in the array pCoeffs in the following order: +
+      {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}
+  
+ @par + where b1x and a1x are the coefficients for the first stage, + b2x and a2x are the coefficients for the second stage, + and so on. The pCoeffs array contains a total of 5*numStages values. + @par + The pState points to state variables array. + Each Biquad stage has 4 state variables x[n-1], x[n-2], y[n-1], and y[n-2]. + The state variables are arranged in the pState array as: +
+      {x[n-1], x[n-2], y[n-1], y[n-2]}
+  
+ The 4 state variables for stage 1 are first, then the 4 state variables for stage 2, and so on. + The state array has a total length of 4*numStages values. + The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df1_init_q31( + arm_biquad_casd_df1_inst_q31 * S, + uint8_t numStages, + const q31_t * pCoeffs, + q31_t * pState, + int8_t postShift) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign postShift to be applied to the output */ + S->postShift = postShift; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4U * (uint32_t) numStages) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c new file mode 100644 index 000000000..9e23897d6 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c @@ -0,0 +1,363 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_q15.c + * Description: Processing function for the Q15 Biquad cascade DirectFormI(DF1) filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Processing function for the Q15 Biquad cascade filter. + @param[in] S points to an instance of the Q15 Biquad cascade structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the location where the output result is written + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + The accumulator is then shifted by postShift bits to truncate the result to 1.15 format by discarding the low 16 bits. + Finally, the result is saturated to 1.15 format. + @remark + Refer to \ref arm_biquad_cascade_df1_fast_q15() for a faster but less precise implementation of this filter. + */ + +void arm_biquad_cascade_df1_q15( + const arm_biquad_casd_df1_inst_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + + +#if defined (ARM_MATH_DSP) + + const q15_t *pIn = pSrc; /* Source pointer */ + q15_t *pOut = pDst; /* Destination pointer */ + q31_t in; /* Temporary variable to hold input value */ + q31_t out; /* Temporary variable to hold output value */ + q31_t b0; /* Temporary variable to hold bo value */ + q31_t b1, a1; /* Filter coefficients */ + q31_t state_in, state_out; /* Filter state variables */ + q31_t acc_l, acc_h; + q63_t acc; /* Accumulator */ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ + uint32_t sample, stage = (uint32_t) S->numStages; /* Stage loop counter */ + int32_t uShift = (32 - lShift); + + do + { + /* Read the b0 and 0 coefficients using SIMD */ + b0 = read_q15x2_ia ((q15_t **) &pCoeffs); + + /* Read the b1 and b2 coefficients using SIMD */ + b1 = read_q15x2_ia ((q15_t **) &pCoeffs); + + /* Read the a1 and a2 coefficients using SIMD */ + a1 = read_q15x2_ia ((q15_t **) &pCoeffs); + + /* Read the input state values from the state buffer: x[n-1], x[n-2] */ + state_in = read_q15x2_ia (&pState); + + /* Read the output state values from the state buffer: y[n-1], y[n-2] */ + state_out = read_q15x2_da (&pState); + + /* Apply loop unrolling and compute 2 output values simultaneously. */ + /* The variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + sample = blockSize >> 1U; + + /* First part of the processing with loop unrolling. Compute 2 outputs at a time. + ** a second loop below computes the remaining 1 sample. */ + while (sample > 0U) + { + + /* Read the input */ + in = read_q15x2_ia ((q15_t **) &pIn); + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUAD(b0, in); + + /* acc += b1 * x[n-1] + b2 * x[n-2] + out */ + acc = __SMLALD(b1, state_in, out); + /* acc += a1 * y[n-1] + a2 * y[n-2] */ + acc = __SMLALD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 if postShift = 1, and then saturation is applied */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + out = (uint32_t) acc_l >> lShift | acc_h << uShift; + + out = __SSAT(out, 16); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ + +#ifndef ARM_MATH_BIG_ENDIAN + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); +#else + state_in = __PKHBT(state_in >> 16, (in >> 16), 16); + state_out = __PKHBT(state_out >> 16, (out), 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* out = b0 * x[n] + 0 * 0 */ + out = __SMUADX(b0, in); + /* acc += b1 * x[n-1] + b2 * x[n-2] + out */ + acc = __SMLALD(b1, state_in, out); + /* acc += a1 * y[n-1] + a2 * y[n-2] */ + acc = __SMLALD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 if postShift = 1, and then saturation is applied */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + out = (uint32_t) acc_l >> lShift | acc_h << uShift; + + out = __SSAT(out, 16); + + /* Store the output in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(state_out, out, 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(out, state_out >> 16, 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ +#ifndef ARM_MATH_BIG_ENDIAN + state_in = __PKHBT(in >> 16, state_in, 16); + state_out = __PKHBT(out, state_out, 16); +#else + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement loop counter */ + sample--; + } + + /* If the blockSize is not a multiple of 2, compute any remaining output samples here. + ** No loop unrolling is used. */ + + if ((blockSize & 0x1U) != 0U) + { + /* Read the input */ + in = *pIn++; + + /* out = b0 * x[n] + 0 * 0 */ +#ifndef ARM_MATH_BIG_ENDIAN + out = __SMUAD(b0, in); +#else + out = __SMUADX(b0, in); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* acc = b1 * x[n-1] + b2 * x[n-2] + out */ + acc = __SMLALD(b1, state_in, out); + /* acc += a1 * y[n-1] + a2 * y[n-2] */ + acc = __SMLALD(a1, state_out, acc); + + /* The result is converted from 3.29 to 1.31 if postShift = 1, and then saturation is applied */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + out = (uint32_t) acc_l >> lShift | acc_h << uShift; + + out = __SSAT(out, 16); + + /* Store the output in the destination buffer. */ + *pOut++ = (q15_t) out; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + /* x[n-N], x[n-N-1] are packed together to make state_in of type q31 */ + /* y[n-N], y[n-N-1] are packed together to make state_out of type q31 */ +#ifndef ARM_MATH_BIG_ENDIAN + state_in = __PKHBT(in, state_in, 16); + state_out = __PKHBT(out, state_out, 16); +#else + state_in = __PKHBT(state_in >> 16, in, 16); + state_out = __PKHBT(state_out >> 16, out, 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + } + + /* The first stage goes from the input wire to the output wire. */ + /* Subsequent numStages occur in-place in the output wire */ + pIn = pDst; + + /* Reset the output pointer */ + pOut = pDst; + + /* Store the updated state variables back into the state array */ + write_q15x2_ia (&pState, state_in); + write_q15x2_ia (&pState, state_out); + + /* Decrement loop counter */ + stage--; + + } while (stage > 0U); + +#else + + const q15_t *pIn = pSrc; /* Source pointer */ + q15_t *pOut = pDst; /* Destination pointer */ + q15_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q15_t Xn1, Xn2, Yn1, Yn2; /* Filter state variables */ + q15_t Xn; /* temporary input */ + q63_t acc; /* Accumulator */ + int32_t shift = (15 - (int32_t) S->postShift); /* Post shift */ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + uint32_t sample, stage = (uint32_t) S->numStages; /* Stage loop counter */ + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + pCoeffs++; // skip the 0 coefficient + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the state values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + + /* The variables acc holds the output value that is computed: + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + sample = blockSize; + + while (sample > 0U) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + /* acc = b0 * x[n] */ + acc = (q31_t) b0 *Xn; + + /* acc += b1 * x[n-1] */ + acc += (q31_t) b1 *Xn1; + /* acc += b[2] * x[n-2] */ + acc += (q31_t) b2 *Xn2; + /* acc += a1 * y[n-1] */ + acc += (q31_t) a1 *Yn1; + /* acc += a2 * y[n-2] */ + acc += (q31_t) a2 *Yn2; + + /* The result is converted to 1.31 */ + acc = __SSAT((acc >> shift), 16); + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = (q15_t) acc; + + /* Store the output in the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* decrement the loop counter */ + sample--; + } + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent stages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset to destination pointer */ + pOut = pDst; + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + } while (--stage); + +#endif /* #if defined (ARM_MATH_DSP) */ + +} + +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c new file mode 100644 index 000000000..011e21dfe --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c @@ -0,0 +1,247 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df1_q31.c + * Description: Processing function for the Q31 Biquad cascade filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF1 + @{ + */ + +/** + @brief Processing function for the Q31 Biquad cascade filter. + @param[in] S points to an instance of the Q31 Biquad cascade structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around rather than clip. + In order to avoid overflows completely the input signal must be scaled down by 2 bits and lie in the range [-0.25 +0.25). + After all 5 multiply-accumulates are performed, the 2.62 accumulator is shifted by postShift bits and the result truncated to + 1.31 format by discarding the low 32 bits. + @remark + Refer to \ref arm_biquad_cascade_df1_fast_q31() for a faster but less precise implementation of this filter. + */ + +void arm_biquad_cascade_df1_q31( + const arm_biquad_casd_df1_inst_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + const q31_t *pIn = pSrc; /* Source pointer */ + q31_t *pOut = pDst; /* Destination pointer */ + q31_t *pState = S->pState; /* pState pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q63_t acc; /* Accumulator */ + q31_t b0, b1, b2, a1, a2; /* Filter coefficients */ + q31_t Xn1, Xn2, Yn1, Yn2; /* Filter pState variables */ + q31_t Xn; /* Temporary input */ + uint32_t uShift = ((uint32_t) S->postShift + 1U); + uint32_t lShift = 32U - uShift; /* Shift to be applied to the output */ + uint32_t sample, stage = S->numStages; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc_l, acc_h; /* temporary output variables */ +#endif + + do + { + /* Reading the coefficients */ + b0 = *pCoeffs++; + b1 = *pCoeffs++; + b2 = *pCoeffs++; + a1 = *pCoeffs++; + a2 = *pCoeffs++; + + /* Reading the pState values */ + Xn1 = pState[0]; + Xn2 = pState[1]; + Yn1 = pState[2]; + Yn2 = pState[3]; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and compute 4 output values simultaneously. */ + /* Variable acc hold output values that are being computed: + * + * acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] + */ + + /* Loop unrolling: Compute 4 outputs at a time */ + sample = blockSize >> 2U; + + while (sample > 0U) + { + /* Read the first input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = ((q63_t) b0 * Xn) + ((q63_t) b1 * Xn1) + ((q63_t) b2 * Xn2) + ((q63_t) a1 * Yn1) + ((q63_t) a2 * Yn2); + + /* The result is converted to 1.31 , Yn2 variable is reused */ + acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ + acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ + + /* Apply shift for lower part of acc and upper part of acc */ + Yn2 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store output in destination buffer. */ + *pOut++ = Yn2; + + /* Read the second input */ + Xn2 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = ((q63_t) b0 * Xn2) + ((q63_t) b1 * Xn) + ((q63_t) b2 * Xn1) + ((q63_t) a1 * Yn2) + ((q63_t) a2 * Yn1); + + /* The result is converted to 1.31, Yn1 variable is reused */ + acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ + acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ + + /* Apply shift for lower part of acc and upper part of acc */ + Yn1 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store output in destination buffer. */ + *pOut++ = Yn1; + + /* Read the third input */ + Xn1 = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = ((q63_t) b0 * Xn1) + ((q63_t) b1 * Xn2) + ((q63_t) b2 * Xn) + ((q63_t) a1 * Yn1) + ((q63_t) a2 * Yn2); + + /* The result is converted to 1.31, Yn2 variable is reused */ + acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ + acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ + + /* Apply shift for lower part of acc and upper part of acc */ + Yn2 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store output in destination buffer. */ + *pOut++ = Yn2; + + /* Read the forth input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = ((q63_t) b0 * Xn) + ((q63_t) b1 * Xn1) + ((q63_t) b2 * Xn2) + ((q63_t) a1 * Yn2) + ((q63_t) a2 * Yn1); + + /* The result is converted to 1.31, Yn1 variable is reused */ + acc_l = (acc ) & 0xffffffff; /* Calc lower part of acc */ + acc_h = (acc >> 32) & 0xffffffff; /* Calc upper part of acc */ + + /* Apply shift for lower part of acc and upper part of acc */ + Yn1 = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store output in destination buffer. */ + *pOut++ = Yn1; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + + /* decrement loop counter */ + sample--; + } + + /* Loop unrolling: Compute remaining outputs */ + sample = blockSize & 0x3U; + +#else + + /* Initialize blkCnt with number of samples */ + sample = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (sample > 0U) + { + /* Read the input */ + Xn = *pIn++; + + /* acc = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] */ + acc = ((q63_t) b0 * Xn) + ((q63_t) b1 * Xn1) + ((q63_t) b2 * Xn2) + ((q63_t) a1 * Yn1) + ((q63_t) a2 * Yn2); + + /* The result is converted to 1.31 */ + acc = acc >> lShift; + + /* Store output in destination buffer. */ + *pOut++ = (q31_t) acc; + + /* Every time after the output is computed state should be updated. */ + /* The states should be updated as: */ + /* Xn2 = Xn1 */ + /* Xn1 = Xn */ + /* Yn2 = Yn1 */ + /* Yn1 = acc */ + Xn2 = Xn1; + Xn1 = Xn; + Yn2 = Yn1; + Yn1 = (q31_t) acc; + + /* decrement loop counter */ + sample--; + } + + /* Store the updated state variables back into the pState array */ + *pState++ = Xn1; + *pState++ = Xn2; + *pState++ = Yn1; + *pState++ = Yn2; + + /* The first stage goes from the input buffer to the output buffer. */ + /* Subsequent numStages occur in-place in the output buffer */ + pIn = pDst; + + /* Reset output pointer */ + pOut = pDst; + + /* decrement loop counter */ + stage--; + + } while (stage > 0U); + +} + +/** + @} end of BiquadCascadeDF1 group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c new file mode 100644 index 000000000..a8af8cec5 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c @@ -0,0 +1,443 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df2T_f64.c + * Description: Processing function for floating-point transposed direct form II Biquad cascade filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters +*/ + +/** + @defgroup BiquadCascadeDF2T Biquad Cascade IIR Filters Using a Direct Form II Transposed Structure + + This set of functions implements arbitrary order recursive (IIR) filters using a transposed direct form II structure. + The filters are implemented as a cascade of second order Biquad sections. + These functions provide a slight memory savings as compared to the direct form I Biquad filter functions. + Only floating-point data is supported. + + This function operate on blocks of input and output data and each call to the function + processes blockSize samples through the filter. + pSrc points to the array of input data and + pDst points to the array of output data. + Both arrays contain blockSize values. + + @par Algorithm + Each Biquad stage implements a second order filter using the difference equation: +
+     y[n] = b0 * x[n] + d1
+     d1 = b1 * x[n] + a1 * y[n] + d2
+     d2 = b2 * x[n] + a2 * y[n]
+  
+ where d1 and d2 represent the two state values. + @par + A Biquad filter using a transposed Direct Form II structure is shown below. + \image html BiquadDF2Transposed.gif "Single transposed Direct Form II Biquad" + Coefficients b0, b1, and b2 multiply the input signal x[n] and are referred to as the feedforward coefficients. + Coefficients a1 and a2 multiply the output signal y[n] and are referred to as the feedback coefficients. + Pay careful attention to the sign of the feedback coefficients. + Some design tools flip the sign of the feedback coefficients: +
+     y[n] = b0 * x[n] + d1;
+     d1 = b1 * x[n] - a1 * y[n] + d2;
+     d2 = b2 * x[n] - a2 * y[n];
+  
+ In this case the feedback coefficients a1 and a2 must be negated when used with the CMSIS DSP Library. + @par + Higher order filters are realized as a cascade of second order sections. + numStages refers to the number of second order stages used. + For example, an 8th order filter would be realized with numStages=4 second order stages. + A 9th order filter would be realized with numStages=5 second order stages with the + coefficients for one of the stages configured as a first order filter (b2=0 and a2=0). + @par + pState points to the state variable array. + Each Biquad stage has 2 state variables d1 and d2. + The state variables are arranged in the pState array as: +
+      {d11, d12, d21, d22, ...}
+  
+ where d1x refers to the state variables for the first Biquad and + d2x refers to the state variables for the second Biquad. + The state array has a total length of 2*numStages values. + The state variables are updated after each block of data is processed; the coefficients are untouched. + @par + The CMSIS library contains Biquad filters in both Direct Form I and transposed Direct Form II. + The advantage of the Direct Form I structure is that it is numerically more robust for fixed-point data types. + That is why the Direct Form I structure supports Q15 and Q31 data types. + The transposed Direct Form II structure, on the other hand, requires a wide dynamic range for the state variables d1 and d2. + Because of this, the CMSIS library only has a floating-point version of the Direct Form II Biquad. + The advantage of the Direct Form II Biquad is that it requires half the number of state variables, 2 rather than 4, per Biquad stage. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + + @par Init Functions + There is also an associated initialization function. + The initialization function performs following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numStages, pCoeffs, pState. Also set all of the values in pState to zero. + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Set the values in the state buffer to zeros before static initialization. + For example, to statically initialize the instance structure use +
+      arm_biquad_cascade_df2T_instance_f64 S1 = {numStages, pState, pCoeffs};
+      arm_biquad_cascade_df2T_instance_f32 S1 = {numStages, pState, pCoeffs};
+  
+ where numStages is the number of Biquad stages in the filter; + pState is the address of the state buffer. + pCoeffs is the address of the coefficient buffer; +*/ + +/** + @addtogroup BiquadCascadeDF2T + @{ + */ + +/** + @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + @param[in] S points to an instance of the filter data structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ + +LOW_OPTIMIZATION_ENTER +void arm_biquad_cascade_df2T_f64( + const arm_biquad_cascade_df2T_instance_f64 * S, + float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize) +{ + + float64_t *pIn = pSrc; /* Source pointer */ + float64_t *pOut = pDst; /* Destination pointer */ + float64_t *pState = S->pState; /* State pointer */ + float64_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float64_t acc1; /* Accumulator */ + float64_t b0, b1, b2, a1, a2; /* Filter coefficients */ + float64_t Xn1; /* Temporary input */ + float64_t d1, d2; /* State variables */ + uint32_t sample, stage = S->numStages; /* Loop counters */ + + + do + { + /* Reading the coefficients */ + b0 = pCoeffs[0]; + b1 = pCoeffs[1]; + b2 = pCoeffs[2]; + a1 = pCoeffs[3]; + a2 = pCoeffs[4]; + + /* Reading the state values */ + d1 = pState[0]; + d2 = pState[1]; + + pCoeffs += 5U; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 16 outputs at a time */ + sample = blockSize >> 4U; + + while (sample > 0U) { + + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + +/* 1 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + + +/* 2 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 3 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 4 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 5 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 6 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 7 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 8 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 9 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 10 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 11 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 12 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 13 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 14 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 15 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + +/* 16 */ + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + + /* decrement loop counter */ + sample--; + } + + /* Loop unrolling: Compute remaining outputs */ + sample = blockSize & 0xFU; + +#else + + /* Initialize blkCnt with number of samples */ + sample = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (sample > 0U) { + Xn1 = *pIn++; + + acc1 = b0 * Xn1 + d1; + + d1 = b1 * Xn1 + d2; + d1 += a1 * acc1; + + d2 = b2 * Xn1; + d2 += a2 * acc1; + + *pOut++ = acc1; + + /* decrement loop counter */ + sample--; + } + + /* Store the updated state variables back into the state array */ + pState[0] = d1; + pState[1] = d2; + + pState += 2U; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /* Reset the output working pointer */ + pOut = pDst; + + /* decrement loop counter */ + stage--; + + } while (stage > 0U); + +} +LOW_OPTIMIZATION_EXIT + +/** + @} end of BiquadCascadeDF2T group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c new file mode 100644 index 000000000..fe6901edf --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c @@ -0,0 +1,86 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_df2T_init_f64.c + * Description: Initialization function for floating-point transposed direct form II Biquad cascade filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF2T + @{ + */ + +/** + @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + @param[in,out] S points to an instance of the filter data structure + @param[in] numStages number of 2nd order stages in the filter + @param[in] pCoeffs points to the filter coefficients + @param[in] pState points to the state buffer + @return none + + @par Coefficient and State Ordering + The coefficients are stored in the array pCoeffs in the following order: +
+      {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}
+  
+ @par + where b1x and a1x are the coefficients for the first stage, + b2x and a2x are the coefficients for the second stage, + and so on. The pCoeffs array contains a total of 5*numStages values. + @par + The pState is a pointer to state array. + Each Biquad stage has 2 state variables d1, and d2. + The 2 state variables for stage 1 are first, then the 2 state variables for stage 2, and so on. + The state array has a total length of 2*numStages values. + The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_df2T_init_f64( + arm_biquad_cascade_df2T_instance_f64 * S, + uint8_t numStages, + float64_t * pCoeffs, + float64_t * pState) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 2 * numStages */ + memset(pState, 0, (2U * (uint32_t) numStages) * sizeof(float64_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of BiquadCascadeDF2T group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c new file mode 100644 index 000000000..14ae008b8 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c @@ -0,0 +1,285 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_stereo_df2T_f32.c + * Description: Processing function for floating-point transposed direct form II Biquad cascade filter. 2 channels + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters +*/ + +/** + @addtogroup BiquadCascadeDF2T + @{ + */ + +/** + @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. + @param[in] S points to an instance of the filter data structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ + +LOW_OPTIMIZATION_ENTER +void arm_biquad_cascade_stereo_df2T_f32( + const arm_biquad_cascade_stereo_df2T_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + const float32_t *pIn = pSrc; /* Source pointer */ + float32_t *pOut = pDst; /* Destination pointer */ + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t acc1a, acc1b; /* Accumulator */ + float32_t b0, b1, b2, a1, a2; /* Filter coefficients */ + float32_t Xn1a, Xn1b; /* Temporary input */ + float32_t d1a, d2a, d1b, d2b; /* State variables */ + uint32_t sample, stage = S->numStages; /* Loop counters */ + + do + { + /* Reading the coefficients */ + b0 = pCoeffs[0]; + b1 = pCoeffs[1]; + b2 = pCoeffs[2]; + a1 = pCoeffs[3]; + a2 = pCoeffs[4]; + + /* Reading the state values */ + d1a = pState[0]; + d2a = pState[1]; + d1b = pState[2]; + d2b = pState[3]; + + pCoeffs += 5U; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 8 outputs at a time */ + sample = blockSize >> 3U; + + while (sample > 0U) { + /* y[n] = b0 * x[n] + d1 */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + /* d2 = b2 * x[n] + a2 * y[n] */ + +/* 1 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + +/* 2 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + +/* 3 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + +/* 4 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + +/* 5 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + +/* 6 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + +/* 7 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + +/* 8 */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + *pOut++ = acc1a; + *pOut++ = acc1b; + + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + + /* decrement loop counter */ + sample--; + } + + /* Loop unrolling: Compute remaining outputs */ + sample = blockSize & 0x7U; + +#else + + /* Initialize blkCnt with number of samples */ + sample = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (sample > 0U) { + /* Read the input */ + Xn1a = *pIn++; /* Channel a */ + Xn1b = *pIn++; /* Channel b */ + + /* y[n] = b0 * x[n] + d1 */ + acc1a = (b0 * Xn1a) + d1a; + acc1b = (b0 * Xn1b) + d1b; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc1a; + *pOut++ = acc1b; + + /* Every time after the output is computed state should be updated. */ + /* d1 = b1 * x[n] + a1 * y[n] + d2 */ + d1a = ((b1 * Xn1a) + (a1 * acc1a)) + d2a; + d1b = ((b1 * Xn1b) + (a1 * acc1b)) + d2b; + + /* d2 = b2 * x[n] + a2 * y[n] */ + d2a = (b2 * Xn1a) + (a2 * acc1a); + d2b = (b2 * Xn1b) + (a2 * acc1b); + + /* decrement loop counter */ + sample--; + } + + /* Store the updated state variables back into the state array */ + pState[0] = d1a; + pState[1] = d2a; + + pState[2] = d1b; + pState[3] = d2b; + + pState += 4U; + + /* The current stage input is given as the output to the next stage */ + pIn = pDst; + + /* Reset the output working pointer */ + pOut = pDst; + + /* Decrement the loop counter */ + stage--; + + } while (stage > 0U); + +} +LOW_OPTIMIZATION_EXIT +/** + @} end of BiquadCascadeDF2T group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c new file mode 100644 index 000000000..d398f1817 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c @@ -0,0 +1,86 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_biquad_cascade_stereo_df2T_init_f32.c + * Description: Initialization function for floating-point transposed direct form II Biquad cascade filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup BiquadCascadeDF2T + @{ + */ + +/** + @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. + @param[in,out] S points to an instance of the filter data structure. + @param[in] numStages number of 2nd order stages in the filter. + @param[in] pCoeffs points to the filter coefficients. + @param[in] pState points to the state buffer. + @return none + + @par Coefficient and State Ordering + The coefficients are stored in the array pCoeffs in the following order: +
+      {b10, b11, b12, a11, a12, b20, b21, b22, a21, a22, ...}
+  
+ @par + where b1x and a1x are the coefficients for the first stage, + b2x and a2x are the coefficients for the second stage, + and so on. The pCoeffs array contains a total of 5*numStages values. + @par + The pState is a pointer to state array. + Each Biquad stage has 2 state variables d1, and d2 for each channel. + The 2 state variables for stage 1 are first, then the 2 state variables for stage 2, and so on. + The state array has a total length of 2*numStages values. + The state variables are updated after each block of data is processed; the coefficients are untouched. + */ + +void arm_biquad_cascade_stereo_df2T_init_f32( + arm_biquad_cascade_stereo_df2T_instance_f32 * S, + uint8_t numStages, + const float32_t * pCoeffs, + float32_t * pState) +{ + /* Assign filter stages */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always 4 * numStages */ + memset(pState, 0, (4U * (uint32_t) numStages) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of BiquadCascadeDF2T group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_opt_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_opt_q15.c new file mode 100644 index 000000000..ed2aea940 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_opt_q15.c @@ -0,0 +1,366 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_fast_opt_q15.c + * Description: Fast Q15 Convolution + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Conv + @{ + */ + +/** + @brief Convolution of Q15 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1 + @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2 + @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen + @return none + + @par Scaling and Overflow Behavior + This fast version uses a 32-bit accumulator with 2.30 format. + The accumulator maintains full precision of the intermediate multiplication results + but provides only a single guard bit. There is no saturation on intermediate additions. + Thus, if the accumulator overflows it wraps around and distorts the result. + The input signals should be scaled down to avoid intermediate overflows. + Scale down the inputs by log2(min(srcALen, srcBLen)) (log2 is read as log to the base 2) times to avoid overflows, + as maximum of min(srcALen, srcBLen) number of additions are carried internally. + The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + + @remark + Refer to \ref arm_conv_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. + */ + +void arm_conv_fast_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q31_t acc0; /* Accumulators */ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + q15_t *pOut = pDst; /* Output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + const q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* Loop counter */ + uint32_t tapCnt; /* Loop count */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc1, acc2, acc3; /* Accumulators */ + q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y1, y2; /* State variables */ +#endif + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + /* Copy smaller length input sequence in reverse order into second scratch buffer */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Assuming scratch1 buffer is aligned by 32-bit */ + /* Fill (srcBLen - 1U) zeros in scratch1 buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + + /* Initialization of pIn2 pointer */ + pIn2 = py; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (srcALen + srcBLen - 1U) >> 2; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + y2 = read_q15x2_ia ((q15_t **) &pIn2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* multiply and accumlate */ + acc0 = __SMLAD(x2, y2, acc0); + acc2 = __SMLAD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + acc1 = __SMLADX(x3, y2, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y2, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4U; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (srcALen + srcBLen - 1U) & 0x3; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (srcALen + srcBLen - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + + /* Read next two samples from scratch1 buffer */ + acc0 += (*pScr1++ * *pIn2++); + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + Then store the output in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1U; + } + +} + +/** + @} end of Conv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_q15.c new file mode 100644 index 000000000..3102a05cd --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_q15.c @@ -0,0 +1,663 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_fast_q15.c + * Description: Fast Q15 Convolution + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Conv + @{ + */ + +/** + @brief Convolution of Q15 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1 + @return none + + @par Scaling and Overflow Behavior + This fast version uses a 32-bit accumulator with 2.30 format. + The accumulator maintains full precision of the intermediate multiplication results + but provides only a single guard bit. There is no saturation on intermediate additions. + Thus, if the accumulator overflows it wraps around and distorts the result. + The input signals should be scaled down to avoid intermediate overflows. + Scale down the inputs by log2(min(srcALen, srcBLen)) (log2 is read as log to the base 2) times to avoid overflows, + as maximum of min(srcALen, srcBLen) number of additions are carried internally. + The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + + @remark + Refer to \ref arm_conv_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. + */ + +void arm_conv_fast_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst) +{ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + q15_t *pOut = pDst; /* Output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + const q15_t *px; /* Intermediate inputA pointer */ + const q15_t *py; /* Intermediate inputB pointer */ + const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + uint32_t j, k, count, blkCnt; /* Loop counters */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1U; + blockSize2 = srcALen - (srcBLen - 1U); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1U; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while ((count < 4U) && (blockSize1 > 0U)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1U; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + (count - 1U); + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2U; + + while (blkCnt > 0U) + { + py = py - 1U; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1] samples */ + x0 = read_q15x2 ((q15_t *) px); + /* read x[1], x[2] samples */ + x1 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + c0 = read_q15x2_da ((q15_t **) &py); + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLADX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = read_q15x2 ((q15_t *) px); + + /* Read x[3], x[4] */ + x3 = read_q15x2 ((q15_t *) px + 1); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLADX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLADX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + c0 = read_q15x2_da ((q15_t **) &py); + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLADX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLADX(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = read_q15x2 ((q15_t *) px + 2); + + /* Read x[5], x[6] */ + x1 = read_q15x2 ((q15_t *) px + 3); + px += 4U; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLADX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLADX(x1, c0, acc3); + + } while (--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + if (k == 1U) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); + +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = read_q15x2 ((q15_t *) px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if (k == 2U) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = read_q15x2 ((q15_t *) py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + } + + if (k == 3U) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = read_q15x2 ((q15_t *) py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + + /* Read y[srcBLen - 7] */ + c0 = *(py-1); +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = read_q15x2 ((q15_t *) px + 2); + px += 3U; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD(x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the result in the accumulator in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT((acc0 >> 15), (acc1 >> 15), 16)); + write_q15x2_ia (&pOut, __PKHBT((acc2 >> 15), (acc3 >> 15), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT((acc1 >> 15), (acc0 >> 15), 16)); + write_q15x2_ia (&pOut, __PKHBT((acc3 >> 15), (acc2 >> 15), 16)); +#endif /*#ifndef ARM_MATH_BIG_ENDIAN*/ + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4U; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) *px++ * *py--); + sum += ((q31_t) *px++ * *py--); + sum += ((q31_t) *px++ * *py--); + sum += ((q31_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + pIn2 = pSrc2 - 1U; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = blockSize3 >> 2U; + + while ((j > 0U) && (blockSize3 > 0U)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied + * with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied + * with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1U; + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4U; + + while (k > 0U) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1U; + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the loop counter */ + blockSize3--; + } + +} + +/** + @} end of Conv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_q31.c new file mode 100644 index 000000000..e87eddc73 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_fast_q31.c @@ -0,0 +1,558 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_fast_q31.c + * Description: Fast Q31 Convolution + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Conv + @{ + */ + +/** + @brief Convolution of Q31 sequences (fast version). + @param[in] pSrcA points to the first input sequence. + @param[in] srcALen length of the first input sequence. + @param[in] pSrcB points to the second input sequence. + @param[in] srcBLen length of the second input sequence. + @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + @return none + + @par Scaling and Overflow Behavior + This function is optimized for speed at the expense of fixed-point precision and overflow protection. + The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + These intermediate results are accumulated in a 32-bit register in 2.30 format. + Finally, the accumulator is saturated and converted to a 1.31 result. + @par + The fast version has the same overflow behavior as the standard version but provides less precision since it discards the low 32 bits of each multiplication result. + In order to avoid overflows completely the input signals must be scaled down. + Scale down the inputs by log2(min(srcALen, srcBLen)) (log2 is read as log to the base 2) times to avoid overflows, + as maximum of min(srcALen, srcBLen) number of additions are carried internally. + @remark + Refer to \ref arm_conv_q31() for a slower implementation of this function which uses 64-bit accumulation to provide higher precision. + */ + +void arm_conv_fast_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst) +{ + const q31_t *pIn1; /* InputA pointer */ + const q31_t *pIn2; /* InputB pointer */ + q31_t *pOut = pDst; /* Output pointer */ + const q31_t *px; /* Intermediate inputA pointer */ + const q31_t *py; /* Intermediate inputB pointer */ + const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + uint32_t j, k, count, blkCnt; /* Loop counters */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1U; + blockSize2 = srcALen - (srcBLen - 1U); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1U; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* x[0] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* x[1] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* x[2] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* x[3] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2U; + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *py--; + /* Read x[3] sample */ + x3 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[3] * y[srcBLen - 1] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + + /* Read y[srcBLen - 2] sample */ + c0 = *py--; + /* Read x[4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc3 += x[4] * y[srcBLen - 2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x0 * c0)) >> 32); + + + /* Read y[srcBLen - 3] sample */ + c0 = *py--; + /* Read x[5] sample */ + x1 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc1 += x[3] * y[srcBLen - 3] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc2 += x[4] * y[srcBLen - 3] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc3 += x[5] * y[srcBLen - 3] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x1 * c0)) >> 32); + + + /* Read y[srcBLen - 4] sample */ + c0 = *py--; + /* Read x[6] sample */ + x2 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[srcBLen - 4] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc1 += x[4] * y[srcBLen - 4] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc2 += x[5] * y[srcBLen - 4] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc3 += x[6] * y[srcBLen - 4] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x2 * c0)) >> 32); + + + } while (--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Read y[srcBLen - 5] sample */ + c0 = *py--; + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (acc0 << 1); + *pOut++ = (q31_t) (acc1 << 1); + *pOut++ = (q31_t) (acc2 << 1); + *pOut++ = (q31_t) (acc3 << 1); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4U; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = blockSize3 >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* If the blockSize3 is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = blockSize3 % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement loop counter */ + blockSize3--; + } + +} + +/** + @} end of Conv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_opt_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_opt_q15.c new file mode 100644 index 000000000..6ad34cdc6 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_opt_q15.c @@ -0,0 +1,362 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_opt_q15.c + * Description: Convolution of Q15 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Conv + @{ + */ + +/** + @brief Convolution of Q15 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + Both inputs are in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + This approach provides 33 guard bits and there is no risk of overflow. + The 34.30 result is then truncated to 34.15 format by discarding the low 15 bits and then saturated to 1.15 format. + @remark + Refer to \ref arm_conv_fast_q15() for a faster but less precise version of this function. + */ + +void arm_conv_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q63_t acc0; /* Accumulators */ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + q15_t *pOut = pDst; /* Output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + const q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* Loop counter */ + uint32_t tapCnt; /* Loop count */ + +#if defined (ARM_MATH_LOOPUNROLL) + q63_t acc1, acc2, acc3; /* Accumulators */ + q31_t x1, x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y1, y2; /* State variables */ +#endif + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + /* Copy smaller length input sequence in reverse order into second scratch buffer */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Assuming scratch1 buffer is aligned by 32-bit */ + /* Fill (srcBLen - 1U) zeros in scratch1 buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + + /* Initialization of pIn2 pointer */ + pIn2 = py; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (srcALen + srcBLen - 1U) >> 2; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + y2 = read_q15x2_ia ((q15_t **) &pIn2); + + /* multiply and accumlate */ + acc0 = __SMLALD(x1, y1, acc0); + acc2 = __SMLALD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLALDX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* multiply and accumlate */ + acc0 = __SMLALD(x2, y2, acc0); + acc2 = __SMLALD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + acc1 = __SMLALDX(x3, y2, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4U; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (srcALen + srcBLen - 1U) & 0x3; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (srcALen + srcBLen - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + + /* Read next two samples from scratch1 buffer */ + acc0 += (*pScr1++ * *pIn2++); + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + Then store the output in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1U; + } + +} + +/** + @} end of Conv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_opt_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_opt_q7.c new file mode 100644 index 000000000..fb9e2eccf --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_opt_q7.c @@ -0,0 +1,360 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_opt_q7.c + * Description: Convolution of Q7 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Conv + @{ + */ + +/** + @brief Convolution of Q7 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and then saturated to 1.7 format. + */ + +void arm_conv_opt_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch */ + q15_t x4; /* Temporary input variable */ + q15_t *py; /* Temporary input2 pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + const q7_t *pIn1, *pIn2; /* InputA and inputB pointer */ + uint32_t j, k, blkCnt, tapCnt; /* Loop counter */ + q31_t x1, x2, x3, y1; /* Temporary input variables */ + const q7_t *px; /* Temporary input1 pointer */ + q7_t *pOut = pDst; /* Output pointer */ + q7_t out0, out1, out2, out3; /* Temporary variables */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* points to smaller length sequence */ + px = pIn2 + srcBLen - 1; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) *px--; + *pScr2++ = x4; + x4 = (q15_t) *px--; + *pScr2++ = x4; + x4 = (q15_t) *px--; + *pScr2++ = x4; + x4 = (q15_t) *px--; + *pScr2++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) *px--; + *pScr2++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* Fill (srcBLen - 1U) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy (srcALen) samples in scratch buffer */ + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2U; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4U; + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* Initialization of pIn2 pointer */ + pIn2 = (q7_t *) py; + + pScr2 = py; + + /* Actual convolution process starts here */ + blkCnt = (srcALen + srcBLen - 1U) >> 2U; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia (&pScr2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia (&pScr2); + + acc0 = __SMLAD(x2, y1, acc0); + + acc2 = __SMLAD(x1, y1, acc2); + + acc1 = __SMLADX(x3, y1, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2); + acc1 += (*pScr1++ * *pScr2); + acc2 += (*pScr1++ * *pScr2); + acc3 += (*pScr1++ * *pScr2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + out0 = (q7_t) (__SSAT(acc0 >> 7U, 8)); + out1 = (q7_t) (__SSAT(acc1 >> 7U, 8)); + out2 = (q7_t) (__SSAT(acc2 >> 7U, 8)); + out3 = (q7_t) (__SSAT(acc3 >> 7U, 8)); + + write_q7x4_ia (&pOut, __PACKq7(out0, out1, out2, out3)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 4U; + } + + blkCnt = (srcALen + srcBLen - 1U) & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + acc0 += (*pScr1++ * *pScr2++); + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7U, 8)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 1U; + } + +} + +/** + @} end of Conv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_f32.c new file mode 100644 index 000000000..e25f9ab3a --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_f32.c @@ -0,0 +1,676 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_f32.c + * Description: Partial convolution of floating-point sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup PartialConv Partial Convolution + + Partial Convolution is equivalent to Convolution except that a subset of the output samples is generated. + Each function has two additional arguments. + firstIndex specifies the starting index of the subset of output samples. + numPoints is the number of output samples to compute. + The function computes the output in the range + [firstIndex, ..., firstIndex+numPoints-1]. + The output array pDst contains numPoints values. + + The allowable range of output indices is [0 srcALen+srcBLen-2]. + If the requested subset does not fall in this range then the functions return ARM_MATH_ARGUMENT_ERROR. + Otherwise the functions return ARM_MATH_SUCCESS. + \note Refer to \ref arm_conv_f32() for details on fixed point behavior. + + @par Fast Versions + Fast versions are supported for Q31 and Q15 of partial convolution. + Cycles for Fast versions are less compared to Q31 and Q15 of partial conv and the design requires + the input signals should be scaled down to avoid intermediate overflows. + + @par Opt Versions + Opt versions are supported for Q15 and Q7. Design uses internal scratch buffer for getting good optimisation. + These versions are optimised in cycles and consumes more memory (Scratch memory) compared to Q15 and Q7 versions of partial convolution + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of floating-point sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + */ + +arm_status arm_conv_partial_f32( + const float32_t * pSrcA, + uint32_t srcALen, + const float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + const float32_t *pIn1 = pSrcA; /* InputA pointer */ + const float32_t *pIn2 = pSrcB; /* InputB pointer */ + float32_t *pOut = pDst; /* Output pointer */ + const float32_t *px; /* Intermediate inputA pointer */ + const float32_t *py; /* Intermediate inputB pointer */ + const float32_t *pSrc1, *pSrc2; /* Intermediate pointers */ + float32_t sum; /* Accumulator */ + uint32_t j, k, count, blkCnt, check; + int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + +#if defined (ARM_MATH_LOOPUNROLL) + float32_t acc0, acc1, acc2, acc3; /* Accumulator */ + float32_t x0, x1, x2, x3, c0; /* Temporary variables */ +#endif + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1U)) ? blockSize1 : (int32_t) numPoints) : 0; + blockSize2 = ((int32_t) check - blockSize3) - (blockSize1 + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1U + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + firstIndex; + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* x[0] * y[srcBLen - 1] */ + sum += *px++ * *py--; + + /* x[1] * y[srcBLen - 2] */ + sum += *px++ * *py--; + + /* x[2] * y[srcBLen - 3] */ + sum += *px++ * *py--; + + /* x[3] * y[srcBLen - 4] */ + sum += *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc1; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if ((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + pSrc1 = pIn1 + firstIndex - srcBLen + 1; + } + else + { + pSrc1 = pIn1; + } + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = ((uint32_t) blockSize2 >> 2U); + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *py--; + /* Read x[3] sample */ + x3 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 += x0 * c0; + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 += x1 * c0; + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 += x2 * c0; + /* acc3 += x[3] * y[srcBLen - 1] */ + acc3 += x3 * c0; + + /* Read y[srcBLen - 2] sample */ + c0 = *py--; + /* Read x[4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 += x1 * c0; + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 += x2 * c0; + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 += x3 * c0; + /* acc3 += x[4] * y[srcBLen - 2] */ + acc3 += x0 * c0; + + /* Read y[srcBLen - 3] sample */ + c0 = *py--; + /* Read x[5] sample */ + x1 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 += x2 * c0; + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 += x3 * c0; + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 += x0 * c0; + /* acc3 += x[5] * y[srcBLen - 2] */ + acc3 += x1 * c0; + + /* Read y[srcBLen - 4] sample */ + c0 = *py--; + /* Read x[6] sample */ + x2 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[3] * y[srcBLen - 4] */ + acc0 += x3 * c0; + /* acc1 += x[4] * y[srcBLen - 4] */ + acc1 += x0 * c0; + /* acc2 += x[5] * y[srcBLen - 4] */ + acc2 += x1 * c0; + /* acc3 += x[6] * y[srcBLen - 4] */ + acc3 += x2 * c0; + + } while (--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Read y[srcBLen - 5] sample */ + c0 = *py--; + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += x0 * c0; + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += x1 * c0; + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += x2 * c0; + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 += x3 * c0; + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = acc0; + *pOut++ = acc1; + *pOut++ = acc2; + *pOut++ = acc3; + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (uint32_t) blockSize2 % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize2; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += *px++ * *py--; + sum += *px++ * *py--; + sum += *px++ * *py--; + sum += *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0.0f; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum += *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum += *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else +/* alternate version for CM0_FAMILY */ + + const float32_t *pIn1 = pSrcA; /* InputA pointer */ + const float32_t *pIn2 = pSrcB; /* InputB pointer */ + float32_t sum; /* Accumulator */ + uint32_t i, j; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0.0f; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0U; j <= i; j++) + { + /* Check the array limitations */ + if (((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ( pIn1[j] * pIn2[i - j]); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = sum; + } + + /* Set status as ARM_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c new file mode 100644 index 000000000..7166b577c --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c @@ -0,0 +1,387 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_fast_opt_q15.c + * Description: Fast Q15 Partial convolution + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q15 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2 + @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen) + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + + @remark + Refer to \ref arm_conv_partial_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + */ + +arm_status arm_conv_partial_fast_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q15_t *pOut = pDst; /* Output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q31_t acc0; /* Accumulator */ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + const q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* Loop counter */ + uint32_t tapCnt; /* Loop count */ + arm_status status; /* Status variable */ + q31_t x1; /* Temporary variables to hold state and coefficient values */ + q31_t y1; /* State variables */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc1, acc2, acc3; /* Accumulator */ + q31_t x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y2; /* State variables */ +#endif + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + /* Copy smaller length input sequence in reverse order into second scratch buffer */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Assuming scratch1 buffer is aligned by 32-bit */ + /* Fill (srcBLen - 1U) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + pScratch1 += firstIndex; + + pOut = pDst + firstIndex; + + /* Actual convolution process starts here */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (numPoints) >> 2; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + y2 = read_q15x2_ia ((q15_t **) &pIn2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* multiply and accumlate */ + acc0 = __SMLAD(x2, y2, acc0); + acc2 = __SMLAD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + acc1 = __SMLADX(x3, y2, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc3 = __SMLADX(x3, y2, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4U; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numPoints & 0x3; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numPoints; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read two samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + + /* Decrement loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1U; + + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_q15.c new file mode 100644 index 000000000..535fbc793 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_q15.c @@ -0,0 +1,700 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_fast_q15.c + * Description: Fast Q15 Partial convolution + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q15 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + @remark + Refer to \ref arm_conv_partial_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + */ + +arm_status arm_conv_partial_fast_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + q15_t *pOut = pDst; /* Output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + const q15_t *px; /* Intermediate inputA pointer */ + const q15_t *py; /* Intermediate inputB pointer */ + const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary input variables */ + uint32_t j, k, count, blkCnt, check; + int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1U)) ? blockSize1 : (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1U + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while ((count < 4U) && (blockSize1 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while (blockSize1 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + So, py is incremented by 1 */ + py = py + 1U; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2 - 1U; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if ((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + pSrc1 = pIn1 + firstIndex - srcBLen + 1; + } + else + { + pSrc1 = pIn1; + } + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = ((uint32_t) blockSize2 >> 2U); + + while (blkCnt > 0U) + { + py = py - 1U; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + + /* read x[0], x[1] samples */ + x0 = read_q15x2 ((q15_t *) px); + /* read x[1], x[2] samples */ + x1 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + c0 = read_q15x2_da ((q15_t **) &py); + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLADX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = read_q15x2 ((q15_t *) px); + + /* Read x[3], x[4] */ + x3 = read_q15x2 ((q15_t *) px + 1); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLADX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLADX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + c0 = read_q15x2_da ((q15_t **) &py); + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLADX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLADX(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = read_q15x2 ((q15_t *) px + 2); + + /* Read x[5], x[6] */ + x1 = read_q15x2 ((q15_t *) px + 3); + px += 4U; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLADX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLADX(x1, c0, acc3); + + } while (--k); + + /* For the next MAC operations, SIMD is not used + So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + No loop unrolling is used. */ + k = srcBLen % 0x4U; + + if (k == 1U) + { + /* Read y[srcBLen - 5] */ + c0 = *(py + 1); +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = read_q15x2 ((q15_t *) px); + px++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLAD (x0, c0, acc0); + acc1 = __SMLAD (x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if (k == 2U) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = read_q15x2 ((q15_t *) py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + /* Perform the multiply-accumulate */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + } + + if (k == 3U) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = read_q15x2 ((q15_t *) py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + + /* Perform the multiply-accumulate */ + acc0 = __SMLADX(x0, c0, acc0); + acc1 = __SMLADX(x1, c0, acc1); + acc2 = __SMLADX(x3, c0, acc2); + acc3 = __SMLADX(x2, c0, acc3); + + c0 = *(py-1); +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = read_q15x2 ((q15_t *) px + 2); + px += 3U; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD (x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(acc0 >> 15, acc1 >> 15, 16)); + write_q15x2_ia (&pOut, __PKHBT(acc2 >> 15, acc3 >> 15, 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(acc1 >> 15, acc0 >> 15, 16)); + write_q15x2_ia (&pOut, __PKHBT(acc3 >> 15, acc2 >> 15, 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4U; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) *px++ * *py--); + sum += ((q31_t) *px++ * *py--); + sum += ((q31_t) *px++ * *py--); + sum += ((q31_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) *px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) *px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + pIn2 = pSrc2 - 1U; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = count >> 2U; + + while ((j > 0U) && (blockSize3 > 0)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied + * with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied + * with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLADX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + So, py is incremented by 1 */ + py = py + 1U; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1U; + + while (blockSize3 > 0) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = __SMLAD(*px++, *py--, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (sum >> 15); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_q31.c new file mode 100644 index 000000000..f232d51f0 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_fast_q31.c @@ -0,0 +1,618 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_fast_q31.c + * Description: Fast Q31 Partial convolution + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q31 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + + @remark + Refer to \ref arm_conv_partial_q31() for a slower implementation of this function which uses a 64-bit accumulator to provide higher precision. + */ + +arm_status arm_conv_partial_fast_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + const q31_t *pIn1; /* InputA pointer */ + const q31_t *pIn2; /* InputB pointer */ + q31_t *pOut = pDst; /* Output pointer */ + const q31_t *px; /* Intermediate inputA pointer */ + const q31_t *py; /* Intermediate inputB pointer */ + const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t sum; /* Accumulators */ + uint32_t j, k, count, check, blkCnt; + int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t x0, x1, x2, x3, c0; +#endif + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1U)) ? blockSize1 : (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1U + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* x[0] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* x[1] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* x[2] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* x[3] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if ((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + pSrc1 = pIn1 + firstIndex - srcBLen + 1; + } + else + { + pSrc1 = pIn1; + } + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = ((uint32_t) blockSize2 >> 2U); + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *py--; + /* Read x[3] sample */ + x3 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[3] * y[srcBLen - 1] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Read y[srcBLen - 2] sample */ + c0 = *py--; + /* Read x[4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc3 += x[4] * y[srcBLen - 2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read y[srcBLen - 3] sample */ + c0 = *py--; + /* Read x[5] sample */ + x1 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc3 += x[5] * y[srcBLen - 2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x1 * c0)) >> 32); + + /* Read y[srcBLen - 4] sample */ + c0 = *py--; + /* Read x[6] sample */ + x2 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[srcBLen - 4] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc1 += x[4] * y[srcBLen - 4] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc2 += x[5] * y[srcBLen - 4] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc3 += x[6] * y[srcBLen - 4] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x2 * c0)) >> 32); + + } while (--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Read y[srcBLen - 5] sample */ + c0 = *py--; + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (acc0 << 1); + *pOut++ = (q31_t) (acc1 << 1); + *pOut++ = (q31_t) (acc2 << 1); + *pOut++ = (q31_t) (acc3 << 1); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (uint32_t) blockSize2 % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize2; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) * px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py--))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = sum << 1; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_opt_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_opt_q15.c new file mode 100644 index 000000000..21999d2d9 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_opt_q15.c @@ -0,0 +1,386 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_opt_q15.c + * Description: Partial convolution of Q15 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q15 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + + @remark + Refer to \ref arm_conv_partial_fast_q15() for a faster but less precise version of this function. + */ + +arm_status arm_conv_partial_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + + q15_t *pOut = pDst; /* Output pointer */ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch1 */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch1 */ + q63_t acc0; /* Accumulator */ + q31_t x1; /* Temporary variables to hold state and coefficient values */ + q31_t y1; /* State variables */ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + const q15_t *px; /* Intermediate inputA pointer */ + q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, k, blkCnt; /* Loop counter */ + uint32_t tapCnt; /* Loop count */ + arm_status status; /* Status variable */ + +#if defined (ARM_MATH_LOOPUNROLL) + q63_t acc1, acc2, acc3; /* Accumulator */ + q31_t x2, x3; /* Temporary variables to hold state and coefficient values */ + q31_t y2; /* State variables */ +#endif + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2 + srcBLen - 1; + + /* points to smaller length sequence */ + px = pIn2; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + /* Copy smaller length input sequence in reverse order into second scratch buffer */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + *pScr2-- = *px++; + + /* Decrement loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Assuming scratch1 buffer is aligned by 32-bit */ + /* Fill (srcBLen - 1U) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy bigger length sequence(srcALen) samples in scratch1 buffer */ + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Initialization of pIn2 pointer */ + pIn2 = py; + + pScratch1 += firstIndex; + + pOut = pDst + firstIndex; + + /* Actual convolution process starts here */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (numPoints) >> 2; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + y2 = read_q15x2_ia ((q15_t **) &pIn2); + + /* multiply and accumlate */ + acc0 = __SMLALD(x1, y1, acc0); + acc2 = __SMLALD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLALDX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* multiply and accumlate */ + acc0 = __SMLALD(x2, y2, acc0); + acc2 = __SMLALD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + acc1 = __SMLALDX(x3, y2, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 4U; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = numPoints & 0x3; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = numPoints; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read two samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + + acc0 = __SMLALD(x1, y1, acc0); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch1 += 1U; + + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_opt_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_opt_q7.c new file mode 100644 index 000000000..811f386ee --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_opt_q7.c @@ -0,0 +1,390 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_opt_q7.c + * Description: Partial convolution of Q7 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q7 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + */ + +arm_status arm_conv_partial_opt_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q15_t *pScr2, *pScr1; /* Intermediate pointers for scratch pointers */ + q15_t x4; /* Temporary input variable */ + const q7_t *pIn1, *pIn2; /* InputA and inputB pointer */ + uint32_t j, k, blkCnt, tapCnt; /* Loop counter */ + const q7_t *px; /* Temporary input1 pointer */ + q15_t *py; /* Temporary input2 pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t x1, x2, x3, y1; /* Temporary input variables */ + arm_status status; + q7_t *pOut = pDst; /* Output pointer */ + q7_t out0, out1, out2, out3; /* Temporary variables */ + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* pointer to take end of scratch2 buffer */ + pScr2 = pScratch2; + + /* points to smaller length sequence */ + px = pIn2 + srcBLen - 1; + + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) *px--; + *pScr2++ = x4; + x4 = (q15_t) *px--; + *pScr2++ = x4; + x4 = (q15_t) *px--; + *pScr2++ = x4; + x4 = (q15_t) *px--; + *pScr2++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) *px--; + *pScr2++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* Initialze temporary scratch pointer */ + pScr1 = pScratch1; + + /* Fill (srcBLen - 1U) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy (srcALen) samples in scratch buffer */ + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2U; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + ** a second loop below copies for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + ** No loop unrolling is used. */ + k = srcALen % 0x4U; + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* Initialization of pIn2 pointer */ + pIn2 = (q7_t *) py; + + pScr2 = py; + + pOut = pDst + firstIndex; + + pScratch1 += firstIndex; + + /* Actual convolution process starts here */ + blkCnt = (numPoints) >> 2; + + while (blkCnt > 0) + { + /* Initialize temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumulators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia (&pScr2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia (&pScr2); + + acc0 = __SMLAD(x2, y1, acc0); + + acc2 = __SMLAD(x1, y1, acc2); + + acc1 = __SMLADX(x3, y1, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2); + acc1 += (*pScr1++ * *pScr2); + acc2 += (*pScr1++ * *pScr2); + acc3 += (*pScr1++ * *pScr2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + out0 = (q7_t) (__SSAT(acc0 >> 7U, 8)); + out1 = (q7_t) (__SSAT(acc1 >> 7U, 8)); + out2 = (q7_t) (__SSAT(acc2 >> 7U, 8)); + out3 = (q7_t) (__SSAT(acc3 >> 7U, 8)); + + write_q7x4_ia (&pOut, __PACKq7(out0, out1, out2, out3)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 4U; + } + + blkCnt = (numPoints) & 0x3; + + /* Calculate convolution for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read two samples from smaller buffer */ + y1 = read_q15x2_ia (&pScr2); + + acc0 = __SMLAD(x1, y1, acc0); + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7U, 8)); + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 1U; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + return (status); +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q15.c new file mode 100644 index 000000000..55272eadf --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q15.c @@ -0,0 +1,752 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_q15.c + * Description: Partial convolution of Q15 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q15 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + + @remark + Refer to \ref arm_conv_partial_fast_q15() for a faster but less precise version of this function. + @remark + Refer to \ref arm_conv_partial_opt_q15() for a faster implementation of this function using scratch buffers. + */ + +arm_status arm_conv_partial_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + +#if defined (ARM_MATH_DSP) + + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + q15_t *pOut = pDst; /* Output pointer */ + q63_t sum, acc0, acc1, acc2, acc3; /* Accumulator */ + const q15_t *px; /* Intermediate inputA pointer */ + const q15_t *py; /* Intermediate inputB pointer */ + const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary input variables to hold state and coefficient values */ + int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + uint32_t j, k, count, blkCnt, check; + arm_status status; /* Status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1U)) ? blockSize1 : (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1U + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations less than 4 */ + /* Second part of this stage computes the MAC operations greater than or equal to 4 */ + + /* The first part of the stage starts here */ + while ((count < 4U) && (blockSize1 > 0U)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Loop over number of MAC operations between + * inputA samples and inputB samples */ + k = count; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* The second part of the stage starts here */ + /* The internal loop, over count, is unrolled by 4 */ + /* To, read the last two inputB samples using SIMD: + * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ + py = py - 1; + + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* x[0], x[1] are multiplied with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + /* x[2], x[3] are multiplied with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1U; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2 - 1U; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if ((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + pSrc1 = pIn1 + firstIndex - srcBLen + 1; + } + else + { + pSrc1 = pIn1; + } + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = ((uint32_t) blockSize2 >> 2U); + + while (blkCnt > 0U) + { + py = py - 1U; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + + /* read x[0], x[1] samples */ + x0 = read_q15x2 ((q15_t *) px); + /* read x[1], x[2] samples */ + x1 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the last two inputB samples using SIMD: + * y[srcBLen - 1] and y[srcBLen - 2] */ + c0 = read_q15x2_da ((q15_t **) &py); + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLALDX(x0, c0, acc0); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLALDX(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = read_q15x2 ((q15_t *) px); + + /* Read x[3], x[4] */ + x3 = read_q15x2 ((q15_t *) px + 1); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLALDX(x2, c0, acc2); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLALDX(x3, c0, acc3); + + /* Read y[srcBLen - 3] and y[srcBLen - 4] */ + c0 = read_q15x2_da ((q15_t **) &py); + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLALDX(x2, c0, acc0); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLALDX(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = read_q15x2 ((q15_t *) px + 2); + + /* Read x[5], x[6] */ + x1 = read_q15x2 ((q15_t *) px + 3); + px += 4U; + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLALDX(x0, c0, acc2); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLALDX(x1, c0, acc3); + + } while (--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + if (k == 1U) + { + /* Read y[srcBLen - 5] */ + c0 = *(py+1); +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = read_q15x2 ((q15_t *) px); + px++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLALD (x0, c0, acc0); + acc1 = __SMLALD (x1, c0, acc1); + acc2 = __SMLALDX(x1, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + if (k == 2U) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = read_q15x2 ((q15_t *) py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + /* Perform the multiply-accumulate */ + acc0 = __SMLALDX(x0, c0, acc0); + acc1 = __SMLALDX(x1, c0, acc1); + acc2 = __SMLALDX(x3, c0, acc2); + acc3 = __SMLALDX(x2, c0, acc3); + } + + if (k == 3U) + { + /* Read y[srcBLen - 5], y[srcBLen - 6] */ + c0 = read_q15x2 ((q15_t *) py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + + /* Perform the multiply-accumulate */ + acc0 = __SMLALDX(x0, c0, acc0); + acc1 = __SMLALDX(x1, c0, acc1); + acc2 = __SMLALDX(x3, c0, acc2); + acc3 = __SMLALDX(x2, c0, acc3); + + c0 = *(py-1); +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = read_q15x2 ((q15_t *) px + 2); + px += 3U; + + /* Perform the multiply-accumulates */ + acc0 = __SMLALDX(x1, c0, acc0); + acc1 = __SMLALD (x2, c0, acc1); + acc2 = __SMLALDX(x2, c0, acc2); + acc3 = __SMLALDX(x3, c0, acc3); + } + + /* Store the results in the accumulators in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); + write_q15x2_ia (&pOut, __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + No loop unrolling is used. */ + blkCnt = (uint32_t) blockSize2 % 0x4U; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) ((q31_t) *px++ * *py--); + sum += (q63_t) ((q31_t) *px++ * *py--); + sum += (q63_t) ((q31_t) *px++ * *py--); + sum += (q63_t) ((q31_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) ((q31_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT(sum >> 15, 16)); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) ((q31_t) *px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT(sum >> 15, 16)); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + pIn2 = pSrc2 - 1U; + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + /* For loop unrolling by 4, this stage is divided into two. */ + /* First part of this stage computes the MAC operations greater than 4 */ + /* Second part of this stage computes the MAC operations less than or equal to 4 */ + + /* The first part of the stage starts here */ + j = count >> 2U; + + while ((j > 0U) && (blockSize3 > 0U)) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* x[srcALen - srcBLen + 1], x[srcALen - srcBLen + 2] are multiplied + * with y[srcBLen - 1], y[srcBLen - 2] respectively */ + sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + /* x[srcALen - srcBLen + 3], x[srcALen - srcBLen + 4] are multiplied + * with y[srcBLen - 3], y[srcBLen - 4] respectively */ + sum = __SMLALDX(read_q15x2_ia ((q15_t **) &px), read_q15x2_da ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* For the next MAC operations, the pointer py is used without SIMD + * So, py is incremented by 1 */ + py = py + 1U; + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* sum += x[srcALen - srcBLen + 5] * y[srcBLen - 5] */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement MAC count */ + count--; + + /* Decrement loop counter */ + blockSize3--; + + j--; + } + + /* The second part of the stage starts here */ + /* SIMD is not used for the next MAC operations, + * so pointer py is updated to read only one sample at a time */ + py = py + 1U; + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum = __SMLALD(*px++, *py--, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q15_t) (__SSAT((sum >> 15), 16)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else /* #if defined (ARM_MATH_DSP) */ + + const q15_t *pIn1 = pSrcA; /* InputA pointer */ + const q15_t *pIn2 = pSrcB; /* InputB pointer */ + q63_t sum; /* Accumulator */ + uint32_t i, j; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0U; j <= i; j++) + { + /* Check the array limitations */ + if (((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q31_t) pIn1[j] * pIn2[i - j]); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q15_t) __SSAT((sum >> 15U), 16U); + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#endif /* #if defined (ARM_MATH_DSP) */ + +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q31.c new file mode 100644 index 000000000..d0f0122d1 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q31.c @@ -0,0 +1,634 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_q31.c + * Description: Partial convolution of Q31 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q31 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + + @remark + Refer to \ref arm_conv_partial_fast_q31() for a faster but less precise implementation of this function. + */ + +arm_status arm_conv_partial_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + const q31_t *pIn1; /* InputA pointer */ + const q31_t *pIn2; /* InputB pointer */ + q31_t *pOut = pDst; /* Output pointer */ + const q31_t *px; /* Intermediate inputA pointer */ + const q31_t *py; /* Intermediate inputB pointer */ + const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q63_t sum; /* Accumulator */ + uint32_t j, k, count, blkCnt, check; + int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + +#if defined (ARM_MATH_LOOPUNROLL) + q63_t acc0, acc1, acc2; /* Accumulator */ + q31_t x0, x1, x2, c0; /* Temporary variables */ +#endif + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1U)) ? blockSize1 : (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1U + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* x[0] * y[srcBLen - 1] */ + sum += (q63_t) *px++ * (*py--); + + /* x[1] * y[srcBLen - 2] */ + sum += (q63_t) *px++ * (*py--); + + /* x[2] * y[srcBLen - 3] */ + sum += (q63_t) *px++ * (*py--); + + /* x[3] * y[srcBLen - 4] */ + sum += (q63_t) *px++ * (*py--); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) *px++ * (*py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if ((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + pSrc1 = pIn1 + firstIndex - srcBLen + 1; + } + else + { + pSrc1 = pIn1; + } + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unroll over blkCnt */ + blkCnt = blockSize2 / 3; + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + + /* read x[0], x[1] samples */ + x0 = *px++; + x1 = *px++; + + /* Apply loop unrolling and compute 3 MACs simultaneously. */ + k = srcBLen / 3; + + /* First part of the processing with loop unrolling. Compute 3 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 2 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *(py); + + /* Read x[2] sample */ + x2 = *(px); + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[srcBLen - 1] */ + acc0 += (q63_t) x0 * c0; + /* acc1 += x[1] * y[srcBLen - 1] */ + acc1 += (q63_t) x1 * c0; + /* acc2 += x[2] * y[srcBLen - 1] */ + acc2 += (q63_t) x2 * c0; + + /* Read y[srcBLen - 2] sample */ + c0 = *(py - 1U); + + /* Read x[3] sample */ + x0 = *(px + 1U); + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[srcBLen - 2] */ + acc0 += (q63_t) x1 * c0; + /* acc1 += x[2] * y[srcBLen - 2] */ + acc1 += (q63_t) x2 * c0; + /* acc2 += x[3] * y[srcBLen - 2] */ + acc2 += (q63_t) x0 * c0; + + /* Read y[srcBLen - 3] sample */ + c0 = *(py - 2U); + + /* Read x[4] sample */ + x1 = *(px + 2U); + + /* Perform the multiply-accumulate */ + /* acc0 += x[2] * y[srcBLen - 3] */ + acc0 += (q63_t) x2 * c0; + /* acc1 += x[3] * y[srcBLen - 2] */ + acc1 += (q63_t) x0 * c0; + /* acc2 += x[4] * y[srcBLen - 2] */ + acc2 += (q63_t) x1 * c0; + + + px += 3U; + + py -= 3U; + + } while (--k); + + /* If the srcBLen is not a multiple of 3, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen - (3 * (srcBLen / 3)); + + while (k > 0U) + { + /* Read y[srcBLen - 5] sample */ + c0 = *py--; + /* Read x[7] sample */ + x2 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += (q63_t) x0 * c0; + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += (q63_t) x1 * c0; + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += (q63_t) x2 * c0; + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (acc0 >> 31); + *pOut++ = (q31_t) (acc1 >> 31); + *pOut++ = (q31_t) (acc2 >> 31); + + /* Increment the pointer pIn1 index, count by 3 */ + count += 3U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize2 - 3 * (blockSize2 / 3); + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize2; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += (q63_t) *px++ * (*py--); + sum += (q63_t) *px++ * (*py--); + sum += (q63_t) *px++ * (*py--); + sum += (q63_t) *px++ * (*py--); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += (q63_t) *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + sum += (q63_t) *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum += (q63_t) *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + sum += (q63_t) *px++ * *py--; + + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum += (q63_t) *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += (q63_t) *px++ * *py--; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q31_t) (sum >> 31); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else +/* alternate version for CM0_FAMILY */ + + const q31_t *pIn1 = pSrcA; /* InputA pointer */ + const q31_t *pIn2 = pSrcB; /* InputB pointer */ + q63_t sum; /* Accumulator */ + uint32_t i, j; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0U; j <= i; j++) + { + /* Check the array limitations */ + if (((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q63_t) pIn1[j] * pIn2[i - j]); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q31_t) (sum >> 31U); + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q7.c new file mode 100644 index 000000000..9b0228cb6 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_partial_q7.c @@ -0,0 +1,753 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_partial_q7.c + * Description: Partial convolution of Q7 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup PartialConv + @{ + */ + +/** + @brief Partial convolution of Q7 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written + @param[in] firstIndex is the first output sample to start with + @param[in] numPoints is the number of output points to be computed + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : requested subset is not in the range [0 srcALen+srcBLen-2] + + @remark + Refer to \ref arm_conv_partial_opt_q7() for a faster implementation of this function. + */ + +arm_status arm_conv_partial_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints) +{ + +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + const q7_t *pIn1; /* InputA pointer */ + const q7_t *pIn2; /* InputB pointer */ + q7_t *pOut = pDst; /* Output pointer */ + const q7_t *px; /* Intermediate inputA pointer */ + const q7_t *py; /* Intermediate inputB pointer */ + const q7_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t sum; /* Accumulator */ + uint32_t j, k, count, blkCnt, check; /* Loop counters */ + int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc0, acc1, acc2, acc3; /* Accumulator */ + q31_t input1, input2; /* Temporary input variables */ + q15_t in1, in2; /* Temporary input variables */ + q7_t x0, x1, x2, x3, c0, c1; /* Temporary variables to hold state and coefficient values */ +#endif + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* Conditions to check which loopCounter holds + * the first and last indices of the output samples to be calculated. */ + check = firstIndex + numPoints; + blockSize3 = ((int32_t)check > (int32_t)srcALen) ? (int32_t)check - (int32_t)srcALen : 0; + blockSize3 = ((int32_t)firstIndex > (int32_t)srcALen - 1) ? blockSize3 - (int32_t)firstIndex + (int32_t)srcALen : blockSize3; + blockSize1 = ((int32_t) srcBLen - 1) - (int32_t) firstIndex; + blockSize1 = (blockSize1 > 0) ? ((check > (srcBLen - 1U)) ? blockSize1 : (int32_t) numPoints) : 0; + blockSize2 = (int32_t) check - ((blockSize3 + blockSize1) + (int32_t) firstIndex); + blockSize2 = (blockSize2 > 0) ? blockSize2 : 0; + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* Set the output pointer to point to the firstIndex + * of the output sample to be calculated. */ + pOut = pDst + firstIndex; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed. + Since the partial convolution starts from firstIndex + Number of Macs to be performed is firstIndex + 1 */ + count = 1U + firstIndex; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + firstIndex; + py = pSrc2; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* x[0] , x[1] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 1] , y[srcBLen - 2] */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[0] * y[srcBLen - 1] */ + /* x[1] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* x[2] , x[3] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 3] , y[srcBLen - 4] */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[2] * y[srcBLen - 3] */ + /* x[3] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = ++pSrc2; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + if ((int32_t)firstIndex - (int32_t)srcBLen + 1 > 0) + { + pSrc1 = pIn1 + firstIndex - srcBLen + 1; + } + else + { + pSrc1 = pIn1; + } + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = ((uint32_t) blockSize2 >> 2U); + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *py--; + /* Read y[srcBLen - 2] sample */ + c1 = *py--; + + /* Read x[3] sample */ + x3 = *px++; + + /* x[0] and x[1] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 1] and y[srcBLen - 2] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[1] and x[2] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[4] sample */ + x0 = *px++; + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLAD(input1, input2, acc3); + + /* Read y[srcBLen - 3] sample */ + c0 = *py--; + /* Read y[srcBLen - 4] sample */ + c1 = *py--; + + /* Read x[5] sample */ + x1 = *px++; + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 3] and y[srcBLen - 4] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[4] and x[5] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[6] sample */ + x2 = *px++; + + /* x[5] and x[6] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLAD(input1, input2, acc3); + + } while (--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Read y[srcBLen - 5] sample */ + c0 = *py--; + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += ((q31_t) x0 * c0); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += ((q31_t) x1 * c0); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += ((q31_t) x2 * c0); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 += ((q31_t) x3 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7, 8)); + *pOut++ = (q7_t) (__SSAT(acc1 >> 7, 8)); + *pOut++ = (q7_t) (__SSAT(acc2 >> 7, 8)); + *pOut++ = (q7_t) (__SSAT(acc3 >> 7, 8)); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (uint32_t) blockSize2 % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize2; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + while (k > 0U) + { + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Perform the multiply-accumulate */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Perform the multiply-accumulate */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = (uint32_t) blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pSrc1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* Reading two inputs, x[srcALen - srcBLen + 1] and x[srcALen - srcBLen + 2] of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs, y[srcBLen - 1] and y[srcBLen - 2] of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs, x[srcALen - srcBLen + 3] and x[srcALen - srcBLen + 4] of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* Reading two inputs, y[srcBLen - 3] and y[srcBLen - 4] of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += ((q31_t) * px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#else +/* alternate version for CM0_FAMILY */ + + const q7_t *pIn1 = pSrcA; /* InputA pointer */ + const q7_t *pIn2 = pSrcB; /* InputB pointer */ + q31_t sum; /* Accumulator */ + uint32_t i, j; /* Loop counters */ + arm_status status; /* Status of Partial convolution */ + + /* Check for range of output samples to be calculated */ + if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (i = firstIndex; i <= (firstIndex + numPoints - 1); i++) + { + /* Initialize sum with zero to carry on MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0U; j <= i; j++) + { + /* Check the array limitations */ + if (((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q15_t) pIn1[j] * (pIn2[i - j])); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q7_t) __SSAT((sum >> 7U), 8U); + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of PartialConv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_conv_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_q7.c new file mode 100644 index 000000000..bdd1cab89 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_conv_q7.c @@ -0,0 +1,700 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_conv_q7.c + * Description: Convolution of Q7 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Conv + @{ + */ + +/** + @brief Convolution of Q7 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and then saturated to 1.7 format. + @remark + Refer to \ref arm_conv_opt_q7() for a faster implementation of this function. + */ + +void arm_conv_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst) +{ + +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + const q7_t *pIn1; /* InputA pointer */ + const q7_t *pIn2; /* InputB pointer */ + q7_t *pOut = pDst; /* Output pointer */ + const q7_t *px; /* Intermediate inputA pointer */ + const q7_t *py; /* Intermediate inputB pointer */ + const q7_t *pSrc1, *pSrc2; /* Intermediate pointers */ + q31_t sum; /* Accumulators */ + uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + uint32_t j, k, count, blkCnt; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t input1, input2; /* Temporary input variables */ + q15_t in1, in2; /* Temporary input variables */ + q7_t x0, x1, x2, x3, c0, c1; /* Temporary variables to hold state and coefficient values */ +#endif + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + } + + /* conv(x,y) at n = x[n] * y[0] + x[n-1] * y[1] + x[n-2] * y[2] + ...+ x[n-N+1] * y[N -1] */ + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1U; + blockSize2 = srcALen - (srcBLen - 1U); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1U; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* x[0] , x[1] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[srcBLen - 1] , y[srcBLen - 2] */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* x[0] * y[srcBLen - 1] */ + /* x[1] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* x[2] , x[3] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[srcBLen - 3] , y[srcBLen - 4] */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* x[2] * y[srcBLen - 3] */ + /* x[3] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7U, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pIn2 + count; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize2 >> 2U; + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[srcBLen - 1] sample */ + c0 = *py--; + /* Read y[srcBLen - 2] sample */ + c1 = *py--; + + /* Read x[3] sample */ + x3 = *px++; + + /* x[0] and x[1] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[srcBLen - 1] and y[srcBLen - 2] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc0 += x[0] * y[srcBLen - 1] + x[1] * y[srcBLen - 2] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[1] and x[2] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc1 += x[1] * y[srcBLen - 1] + x[2] * y[srcBLen - 2] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc2 += x[2] * y[srcBLen - 1] + x[3] * y[srcBLen - 2] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[4] sample */ + x0 = *px++; + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc3 += x[3] * y[srcBLen - 1] + x[4] * y[srcBLen - 2] */ + acc3 = __SMLAD(input1, input2, acc3); + + /* Read y[srcBLen - 3] sample */ + c0 = *py--; + /* Read y[srcBLen - 4] sample */ + c1 = *py--; + + /* Read x[5] sample */ + x1 = *px++; + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[srcBLen - 3] and y[srcBLen - 4] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc0 += x[2] * y[srcBLen - 3] + x[3] * y[srcBLen - 4] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc1 += x[3] * y[srcBLen - 3] + x[4] * y[srcBLen - 4] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[4] and x[5] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc2 += x[4] * y[srcBLen - 3] + x[5] * y[srcBLen - 4] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[6] sample */ + x2 = *px++; + + /* x[5] and x[6] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc3 += x[5] * y[srcBLen - 3] + x[6] * y[srcBLen - 4] */ + acc3 = __SMLAD(input1, input2, acc3); + + } while (--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Read y[srcBLen - 5] sample */ + c0 = *py--; + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[srcBLen - 5] */ + acc0 += ((q15_t) x0 * c0); + /* acc1 += x[5] * y[srcBLen - 5] */ + acc1 += ((q15_t) x1 * c0); + /* acc2 += x[6] * y[srcBLen - 5] */ + acc2 += ((q15_t) x2 * c0); + /* acc3 += x[7] * y[srcBLen - 5] */ + acc3 += ((q15_t) x3 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(acc0 >> 7U, 8)); + *pOut++ = (q7_t) (__SSAT(acc1 >> 7U, 8)); + *pOut++ = (q7_t) (__SSAT(acc2 >> 7U, 8)); + *pOut++ = (q7_t) (__SSAT(acc3 >> 7U, 8)); + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize2 % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize2; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + while (k > 0U) + { + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Perform the multiply-accumulate */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Perform the multiply-accumulate */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) *px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7U, 8)); + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) *px++ * *py--); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7U, 8)); + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pSrc2; + + /* Decrement loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The blockSize3 variable holds the number of MAC operations performed */ + + /* Working pointer of inputA */ + pSrc1 = pIn1 + (srcALen - (srcBLen - 1U)); + px = pSrc1; + + /* Working pointer of inputB */ + pSrc2 = pIn2 + (srcBLen - 1U); + py = pSrc2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = blockSize3 >> 2U; + + while (k > 0U) + { + /* Reading two inputs, x[srcALen - srcBLen + 1] and x[srcALen - srcBLen + 2] of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Reading two inputs, y[srcBLen - 1] and y[srcBLen - 2] of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* sum += x[srcALen - srcBLen + 1] * y[srcBLen - 1] */ + /* sum += x[srcALen - srcBLen + 2] * y[srcBLen - 2] */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs, x[srcALen - srcBLen + 3] and x[srcALen - srcBLen + 4] of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Reading two inputs, y[srcBLen - 3] and y[srcBLen - 4] of SrcB buffer and packing */ + in1 = (q15_t) *py--; + in2 = (q15_t) *py--; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* sum += x[srcALen - srcBLen + 3] * y[srcBLen - 3] */ + /* sum += x[srcALen - srcBLen + 4] * y[srcBLen - 4] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = blockSize3 % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = blockSize3; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* sum += x[srcALen-1] * y[srcBLen-1] */ + sum += ((q15_t) *px++ * *py--); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut++ = (q7_t) (__SSAT(sum >> 7U, 8)); + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pSrc2; + + /* Decrement loop counter */ + blockSize3--; + } + +#else +/* alternate version for CM0_FAMILY */ + + const q7_t *pIn1 = pSrcA; /* InputA pointer */ + const q7_t *pIn2 = pSrcB; /* InputB pointer */ + q31_t sum; /* Accumulator */ + uint32_t i, j; /* Loop counters */ + + /* Loop to calculate convolution for output length number of times */ + for (i = 0U; i < (srcALen + srcBLen - 1U); i++) + { + /* Initialize sum with zero to carry out MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0U; j <= i; j++) + { + /* Check the array limitations */ + if (((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q15_t) pIn1[j] * pIn2[i - j]); + } + } + + /* Store the output in the destination buffer */ + pDst[i] = (q7_t) __SSAT((sum >> 7U), 8U); + } + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of Conv group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c new file mode 100644 index 000000000..13661cbf2 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c @@ -0,0 +1,345 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_correlate_fast_opt_q15.c + * Description: Fast Q15 Correlation + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Corr + @{ + */ + +/** + @brief Correlation of Q15 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence. + @param[out] pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + @return none + + @par Scaling and Overflow Behavior + This fast version uses a 32-bit accumulator with 2.30 format. + The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + There is no saturation on intermediate additions. + Thus, if the accumulator overflows it wraps around and distorts the result. + The input signals should be scaled down to avoid intermediate overflows. + Scale down one of the inputs by 1/min(srcALen, srcBLen) to avoid overflow since a + maximum of min(srcALen, srcBLen) number of additions is carried internally. + The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + + @remark + Refer to \ref arm_correlate_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + */ + +void arm_correlate_fast_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch) +{ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + q31_t acc0; /* Accumulators */ + q15_t *pOut = pDst; /* Output pointer */ + q15_t *pScr1 = pScratch; /* Temporary pointer for scratch */ + const q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, blkCnt, outBlockSize; /* Loop counter */ + int32_t inc = 1; /* Destination address modifier */ + uint32_t tapCnt; /* Loop count */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc1, acc2, acc3; /* Accumulators */ + q31_t x1, x2, x3; /* Temporary variables for holding input and coefficient values */ + q31_t y1, y2; /* State variables */ +#endif + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + /* Number of output samples is calculated */ + outBlockSize = (2U * srcALen) - 1U; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1U)); + + /* Updating the pointer position to non zero value */ + pOut += j; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2U); + + /* Destination address modifier is set to -1 */ + inc = -1; + } + + pScr1 = pScratch; + + /* Fill (srcBLen - 1U) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Temporary pointer for scratch2 */ + py = pIn2; + + + /* Actual correlation process starts here */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (srcALen + srcBLen - 1U) >> 2; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + y2 = read_q15x2_ia ((q15_t **) &pIn2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* multiply and accumlate */ + acc0 = __SMLAD(x2, y2, acc0); + acc2 = __SMLAD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + acc1 = __SMLADX(x3, y2, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y2, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the results in the accumulators in the destination buffer. */ + *pOut = (__SSAT(acc0 >> 15U, 16)); + pOut += inc; + *pOut = (__SSAT(acc1 >> 15U, 16)); + pOut += inc; + *pOut = (__SSAT(acc2 >> 15U, 16)); + pOut += inc; + *pOut = (__SSAT(acc3 >> 15U, 16)); + pOut += inc; + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 4U; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (srcALen + srcBLen - 1U) & 0x3; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (srcALen + srcBLen - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Calculate correlation for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + + /* Read next two samples from scratch buffer */ + acc0 += (*pScr1++ * *pIn2++); + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + ** Then store the output in the destination buffer. */ + *pOut = (q15_t) (__SSAT((acc0 >> 15), 16)); + pOut += inc; + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 1U; + } + +} + +/** + @} end of Corr group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_q15.c new file mode 100644 index 000000000..6898618f4 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_q15.c @@ -0,0 +1,614 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_correlate_fast_q15.c + * Description: Fast Q15 Correlation + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Corr + @{ + */ + +/** + @brief Correlation of Q15 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + @return none + + @par Scaling and Overflow Behavior + This fast version uses a 32-bit accumulator with 2.30 format. + The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + There is no saturation on intermediate additions. + Thus, if the accumulator overflows it wraps around and distorts the result. + The input signals should be scaled down to avoid intermediate overflows. + Scale down one of the inputs by 1/min(srcALen, srcBLen) to avoid overflow since a + maximum of min(srcALen, srcBLen) number of additions is carried internally. + The 2.30 accumulator is right shifted by 15 bits and then saturated to 1.15 format to yield the final result. + + @remark + Refer to \ref arm_correlate_q15() for a slower implementation of this function which uses a 64-bit accumulator to avoid wrap around distortion. + */ + +void arm_correlate_fast_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst) +{ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + q15_t *pOut = pDst; /* Output pointer */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + const q15_t *px; /* Intermediate inputA pointer */ + const q15_t *py; /* Intermediate inputB pointer */ + const q15_t *pSrc1; /* Intermediate pointers */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables for holding input and coefficient values */ + uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + uint32_t j, k, count, blkCnt; /* Loop counters */ + uint32_t outBlockSize; + int32_t inc = 1; /* Destination address modifier */ + + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + /* Number of output samples is calculated */ + outBlockSize = (2U * srcALen) - 1U; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1U)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2U); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1U; + blockSize2 = srcALen - (srcBLen - 1U); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1U; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1U); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first loop starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* x[0] * y[srcBLen - 4] , x[1] * y[srcBLen - 3] */ + sum = __SMLAD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); + /* x[3] * y[srcBLen - 1] , x[2] * y[srcBLen - 2] */ + sum = __SMLAD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* x[0] * y[srcBLen - 1] */ + sum = __SMLAD(*px++, *py++, sum); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is the index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* -------------------- + * Stage2 process + * -------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2U; + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1] samples */ + x0 = read_q15x2 ((q15_t *) px); + /* read x[1], x[2] samples */ + x1 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read the first two inputB samples using SIMD: + * y[0] and y[1] */ + c0 = read_q15x2_ia ((q15_t **) &py); + + /* acc0 += x[0] * y[0] + x[1] * y[1] */ + acc0 = __SMLAD(x0, c0, acc0); + + /* acc1 += x[1] * y[0] + x[2] * y[1] */ + acc1 = __SMLAD(x1, c0, acc1); + + /* Read x[2], x[3] */ + x2 = read_q15x2 ((q15_t *) px); + + /* Read x[3], x[4] */ + x3 = read_q15x2 ((q15_t *) px + 1); + + /* acc2 += x[2] * y[0] + x[3] * y[1] */ + acc2 = __SMLAD(x2, c0, acc2); + + /* acc3 += x[3] * y[0] + x[4] * y[1] */ + acc3 = __SMLAD(x3, c0, acc3); + + /* Read y[2] and y[3] */ + c0 = read_q15x2_ia ((q15_t **) &py); + + /* acc0 += x[2] * y[2] + x[3] * y[3] */ + acc0 = __SMLAD(x2, c0, acc0); + + /* acc1 += x[3] * y[2] + x[4] * y[3] */ + acc1 = __SMLAD(x3, c0, acc1); + + /* Read x[4], x[5] */ + x0 = read_q15x2 ((q15_t *) px + 2); + + /* Read x[5], x[6] */ + x1 = read_q15x2 ((q15_t *) px + 3); + px += 4U; + + /* acc2 += x[4] * y[2] + x[5] * y[3] */ + acc2 = __SMLAD(x0, c0, acc2); + + /* acc3 += x[5] * y[2] + x[6] * y[3] */ + acc3 = __SMLAD(x1, c0, acc3); + + } while (--k); + + /* For the next MAC operations, SIMD is not used + * So, the 16 bit pointer if inputB, py is updated */ + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + if (k == 1U) + { + /* Read y[4] */ + c0 = *py; + +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[7] */ + x3 = read_q15x2 ((q15_t *) px); + px++; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD (x0, c0, acc0); + acc1 = __SMLAD (x1, c0, acc1); + acc2 = __SMLADX(x1, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + if (k == 2U) + { + /* Read y[4], y[5] */ + c0 = read_q15x2 ((q15_t *) py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + px += 2U; + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLAD(x3, c0, acc2); + acc3 = __SMLAD(x2, c0, acc3); + } + + if (k == 3U) + { + /* Read y[4], y[5] */ + c0 = read_q15x2_ia ((q15_t **) &py); + + /* Read x[7], x[8] */ + x3 = read_q15x2 ((q15_t *) px); + + /* Read x[9] */ + x2 = read_q15x2 ((q15_t *) px + 1); + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + acc2 = __SMLAD(x3, c0, acc2); + acc3 = __SMLAD(x2, c0, acc3); + + c0 = (*py); + /* Read y[6] */ +#ifdef ARM_MATH_BIG_ENDIAN + c0 = c0 << 16U; +#else + c0 = c0 & 0x0000FFFF; +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + /* Read x[10] */ + x3 = read_q15x2 ((q15_t *) px + 2); + px += 3U; + + /* Perform the multiply-accumulates */ + acc0 = __SMLADX(x1, c0, acc0); + acc1 = __SMLAD (x2, c0, acc1); + acc2 = __SMLADX(x2, c0, acc2); + acc3 = __SMLADX(x3, c0, acc3); + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (acc0 >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q15_t) (acc1 >> 15); + pOut += inc; + + *pOut = (q15_t) (acc2 >> 15); + pOut += inc; + + *pOut = (q15_t) (acc3 >> 15); + pOut += inc; + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4U; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) *px++ * *py++); + sum += ((q31_t) *px++ * *py++); + sum += ((q31_t) *px++ * *py++); + sum += ((q31_t) *px++ * *py++); + + /* Decrement loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum += ((q31_t) * px++ * *py++); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q31_t) *px++ * *py++); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = (pIn1 + srcALen) - (srcBLen - 1U); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + /* sum += x[srcALen - srcBLen + 4] * y[3] , sum += x[srcALen - srcBLen + 3] * y[2] */ + sum = __SMLAD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); + /* sum += x[srcALen - srcBLen + 2] * y[1] , sum += x[srcALen - srcBLen + 1] * y[0] */ + sum = __SMLAD(read_q15x2_ia ((q15_t **) &px), read_q15x2_ia ((q15_t **) &py), sum); + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = __SMLAD(*px++, *py++, sum); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q15_t) (sum >> 15); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement the MAC count */ + count--; + + /* Decrement the loop counter */ + blockSize3--; + } + +} + +/** + @} end of Corr group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_q31.c new file mode 100644 index 000000000..a5840b733 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_fast_q31.c @@ -0,0 +1,601 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_correlate_fast_q31.c + * Description: Fast Q31 Correlation + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Corr + @{ + */ + +/** + @brief Correlation of Q31 sequences (fast version). + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + @return none + + @par Scaling and Overflow Behavior + This function is optimized for speed at the expense of fixed-point precision and overflow protection. + The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + These intermediate results are accumulated in a 32-bit register in 2.30 format. + Finally, the accumulator is saturated and converted to a 1.31 result. + @par + The fast version has the same overflow behavior as the standard version but provides less precision since it discards the low 32 bits of each multiplication result. + In order to avoid overflows completely the input signals must be scaled down. + The input signals should be scaled down to avoid intermediate overflows. + Scale down one of the inputs by 1/min(srcALen, srcBLen)to avoid overflows since a + maximum of min(srcALen, srcBLen) number of additions is carried internally. + + @remark + Refer to \ref arm_correlate_q31() for a slower implementation of this function which uses 64-bit accumulation to provide higher precision. + */ + +void arm_correlate_fast_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst) +{ + const q31_t *pIn1; /* InputA pointer */ + const q31_t *pIn2; /* InputB pointer */ + q31_t *pOut = pDst; /* Output pointer */ + const q31_t *px; /* Intermediate inputA pointer */ + const q31_t *py; /* Intermediate inputB pointer */ + const q31_t *pSrc1; /* Intermediate pointers */ + q31_t sum, acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables for holding input and coefficient values */ + uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + uint32_t j, k, count, blkCnt; /* Loop counters */ + uint32_t outBlockSize; + int32_t inc = 1; /* Destination address modifier */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + /* Number of output samples is calculated */ + outBlockSize = (2U * srcALen) - 1U; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1U)); + + /* Updating the pointer position to non zero value */ + pOut += j; + + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2U); + + /* Destination address modifier is set to -1 */ + inc = -1; + + } + + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1U; + blockSize2 = srcALen - (srcBLen - 1U); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1U; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1U); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* x[0] * y[srcBLen - 4] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* x[1] * y[srcBLen - 3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* x[2] * y[srcBLen - 2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* x[3] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* x[0] * y[srcBLen - 1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { + /* Loop unroll over blockSize2, by 4 */ + blkCnt = blockSize2 >> 2U; + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[0] sample */ + c0 = *py++; + /* Read x[3] sample */ + x3 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[0] * y[0] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[1] * y[0] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[2] * y[0] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[3] * y[0] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + + /* Read y[1] sample */ + c0 = *py++; + /* Read x[4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + /* acc0 += x[1] * y[1] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc1 += x[2] * y[1] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc2 += x[3] * y[1] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc3 += x[4] * y[1] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x0 * c0)) >> 32); + + + /* Read y[2] sample */ + c0 = *py++; + /* Read x[5] sample */ + x1 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[2] * y[2] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc1 += x[3] * y[2] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc2 += x[4] * y[2] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc3 += x[5] * y[2] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x1 * c0)) >> 32); + + + /* Read y[3] sample */ + c0 = *py++; + /* Read x[6] sample */ + x2 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[3] * y[3] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x3 * c0)) >> 32); + /* acc1 += x[4] * y[3] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc2 += x[5] * y[3] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc3 += x[6] * y[3] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x2 * c0)) >> 32); + + + } while (--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Read y[4] sample */ + c0 = *py++; + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[4] */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + /* acc1 += x[5] * y[4] */ + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + /* acc2 += x[6] * y[4] */ + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + /* acc3 += x[7] * y[4] */ + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q31_t) (acc0 << 1); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q31_t) (acc1 << 1); + pOut += inc; + + *pOut = (q31_t) (acc2 << 1); + pOut += inc; + + *pOut = (q31_t) (acc3 << 1); + pOut += inc; + + /* Increment the pointer pIn1 index, count by 4 */ + count += 4U; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* If the blockSize2 is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize2 % 0x4U; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulates */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = ((pIn1 + srcALen) - srcBLen) + 1U; + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = count >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* sum += x[srcALen - srcBLen + 4] * y[3] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* sum += x[srcALen - srcBLen + 3] * y[2] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* sum += x[srcALen - srcBLen + 2] * y[1] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* sum += x[srcALen - srcBLen + 1] * y[0] */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = count % 0x4U; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum = (q31_t) ((((q63_t) sum << 32) + + ((q63_t) *px++ * (*py++))) >> 32); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = sum << 1; + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement MAC count */ + count--; + + /* Decrement loop counter */ + blockSize3--; + } + +} + +/** + @} end of Corr group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_opt_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_opt_q15.c new file mode 100644 index 000000000..d46d9a0e5 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_opt_q15.c @@ -0,0 +1,341 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_correlate_opt_q15.c + * Description: Correlation of Q15 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Corr + @{ + */ + +/** + @brief Correlation of Q15 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + Both inputs are in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + This approach provides 33 guard bits and there is no risk of overflow. + The 34.30 result is then truncated to 34.15 format by discarding the low 15 bits and then saturated to 1.15 format. + + @remark + Refer to \ref arm_correlate_fast_q15() for a faster but less precise version of this function. + */ + +void arm_correlate_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch) +{ + q63_t acc0; /* Accumulators */ + q15_t *pOut = pDst; /* Output pointer */ + q15_t *pScr1; /* Temporary pointer for scratch1 */ + const q15_t *pIn1; /* InputA pointer */ + const q15_t *pIn2; /* InputB pointer */ + const q15_t *py; /* Intermediate inputB pointer */ + uint32_t j, blkCnt, outBlockSize; /* Loop counter */ + int32_t inc = 1; /* Output pointer increment */ + uint32_t tapCnt; + +#if defined (ARM_MATH_LOOPUNROLL) + q63_t acc1, acc2, acc3; /* Accumulators */ + q31_t x1, x2, x3; /* Temporary variables for holding input1 and input2 values */ + q31_t y1, y2; /* State variables */ +#endif + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + /* Number of output samples is calculated */ + outBlockSize = (srcALen * 2U) - 1U; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1U)); + + /* Updating the pointer position to non zero value */ + pOut += j; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2U); + + /* Destination address modifier is set to -1 */ + inc = -1; + } + + pScr1 = pScratch; + + /* Fill (srcBLen - 1U) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy (srcALen) samples in scratch buffer */ + arm_copy_q15(pIn1, pScr1, srcALen); + + /* Update pointers */ + pScr1 += srcALen; + + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Temporary pointer for scratch2 */ + py = pIn2; + + + /* Actual correlation process starts here */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (srcALen + srcBLen - 1U) >> 2; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia ((q15_t **) &pIn2); + y2 = read_q15x2_ia ((q15_t **) &pIn2); + + /* multiply and accumlate */ + acc0 = __SMLALD(x1, y1, acc0); + acc2 = __SMLALD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLALDX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* multiply and accumlate */ + acc0 = __SMLALD(x2, y2, acc0); + acc2 = __SMLALD(x1, y2, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLALDX(x3, y1, acc3); + acc1 = __SMLALDX(x3, y2, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLALDX(x3, y2, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2); + acc1 += (*pScr1++ * *pIn2); + acc2 += (*pScr1++ * *pIn2); + acc3 += (*pScr1++ * *pIn2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + + /* Store the results in the accumulators in the destination buffer. */ + *pOut = (__SSAT(acc0 >> 15U, 16)); + pOut += inc; + *pOut = (__SSAT(acc1 >> 15U, 16)); + pOut += inc; + *pOut = (__SSAT(acc2 >> 15U, 16)); + pOut += inc; + *pOut = (__SSAT(acc3 >> 15U, 16)); + pOut += inc; + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 4U; + } + + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (srcALen + srcBLen - 1U) & 0x3; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (srcALen + srcBLen - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Calculate correlation for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + + /* Read next two samples from scratch1 buffer */ + acc0 += (*pScr1++ * *pIn2++); + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pIn2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + Then store the output in the destination buffer. */ + *pOut = (q15_t) (__SSAT((acc0 >> 15), 16)); + pOut += inc; + + /* Initialization of inputB pointer */ + pIn2 = py; + + pScratch += 1U; + } + +} + +/** + @} end of Corr group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_opt_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_opt_q7.c new file mode 100644 index 000000000..035bfba38 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_opt_q7.c @@ -0,0 +1,388 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_correlate_opt_q7.c + * Description: Correlation of Q7 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Corr + @{ + */ + +/** + @brief Correlation of Q7 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. + @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and then saturated to 1.7 format. + */ + +void arm_correlate_opt_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2) +{ + q15_t *pScr1 = pScratch1; /* Temporary pointer for scratch */ + q15_t *pScr2 = pScratch2; /* Temporary pointer for scratch */ + q15_t x4; /* Temporary input variable */ + q15_t *py; /* Temporary input2 pointer */ + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + const q7_t *pIn1, *pIn2; /* InputA and inputB pointer */ + uint32_t j, k, blkCnt, tapCnt; /* Loop counter */ + int32_t inc = 1; /* Output pointer increment */ + uint32_t outBlockSize; /* Loop counter */ + q31_t x1, x2, x3, y1; /* Temporary input variables */ + q7_t *pOut = pDst; /* Output pointer */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + /* Number of output samples is calculated */ + outBlockSize = (srcALen * 2U) - 1U; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1U)); + + /* Updating the pointer position to non zero value */ + pOut += j; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2U); + + /* Destination address modifier is set to -1 */ + inc = -1; + } + + + /* Copy (srcBLen) samples in scratch buffer */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + a second loop below copies for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) *pIn2++; + *pScr2++ = x4; + x4 = (q15_t) *pIn2++; + *pScr2++ = x4; + x4 = (q15_t) *pIn2++; + *pScr2++ = x4; + x4 = (q15_t) *pIn2++; + *pScr2++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) *pIn2++; + *pScr2++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* Fill (srcBLen - 1U) zeros in scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update temporary scratch pointer */ + pScr1 += (srcBLen - 1U); + + /* Copy (srcALen) samples in scratch buffer */ + /* Apply loop unrolling and do 4 Copies simultaneously. */ + k = srcALen >> 2U; + + /* First part of the processing with loop unrolling copies 4 data points at a time. + a second loop below copies for the remaining 1 to 3 samples. */ + while (k > 0U) + { + /* copy second buffer in reversal manner */ + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + x4 = (q15_t) *pIn1++; + *pScr1++ = x4; + + /* Decrement loop counter */ + k--; + } + + /* If the count is not a multiple of 4, copy remaining samples here. + No loop unrolling is used. */ + k = srcALen % 0x4U; + + while (k > 0U) + { + /* copy second buffer in reversal manner for remaining samples */ + x4 = (q15_t) * pIn1++; + *pScr1++ = x4; + + /* Decrement the loop counter */ + k--; + } + + /* Fill (srcBLen - 1U) zeros at end of scratch buffer */ + arm_fill_q15(0, pScr1, (srcBLen - 1U)); + + /* Update pointer */ + pScr1 += (srcBLen - 1U); + + /* Temporary pointer for scratch2 */ + py = pScratch2; + + /* Initialization of pScr2 pointer */ + pScr2 = pScratch2; + + /* Actual correlation process starts here */ + blkCnt = (srcALen + srcBLen - 1U) >> 2; + + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Read two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* Read next two samples from scratch1 buffer */ + x2 = read_q15x2_ia (&pScr1); + + tapCnt = (srcBLen) >> 2U; + + while (tapCnt > 0U) + { + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia (&pScr2); + + /* multiply and accumlate */ + acc0 = __SMLAD(x1, y1, acc0); + acc2 = __SMLAD(x2, y1, acc2); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + /* multiply and accumlate */ + acc1 = __SMLADX(x3, y1, acc1); + + /* Read next two samples from scratch1 buffer */ + x1 = read_q15x2_ia (&pScr1); + + /* pack input data */ +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x1, x2, 0); +#else + x3 = __PKHBT(x2, x1, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Read four samples from smaller buffer */ + y1 = read_q15x2_ia (&pScr2); + + acc0 = __SMLAD(x2, y1, acc0); + + acc2 = __SMLAD(x1, y1, acc2); + + acc1 = __SMLADX(x3, y1, acc1); + + x2 = read_q15x2_ia (&pScr1); + +#ifndef ARM_MATH_BIG_ENDIAN + x3 = __PKHBT(x2, x1, 0); +#else + x3 = __PKHBT(x1, x2, 0); +#endif + + acc3 = __SMLADX(x3, y1, acc3); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Update scratch pointer for remaining samples of smaller length sequence */ + pScr1 -= 4U; + + /* apply same above for remaining samples of smaller length sequence */ + tapCnt = (srcBLen) & 3U; + + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2); + acc1 += (*pScr1++ * *pScr2); + acc2 += (*pScr1++ * *pScr2); + acc3 += (*pScr1++ * *pScr2++); + + pScr1 -= 3U; + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(acc0 >> 7U, 8)); + pOut += inc; + *pOut = (q7_t) (__SSAT(acc1 >> 7U, 8)); + pOut += inc; + *pOut = (q7_t) (__SSAT(acc2 >> 7U, 8)); + pOut += inc; + *pOut = (q7_t) (__SSAT(acc3 >> 7U, 8)); + pOut += inc; + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 4U; + } + + blkCnt = (srcALen + srcBLen - 1U) & 0x3; + + /* Calculate correlation for remaining samples of Bigger length sequence */ + while (blkCnt > 0) + { + /* Initialze temporary scratch pointer as scratch1 */ + pScr1 = pScratch1; + + /* Clear Accumlators */ + acc0 = 0; + + tapCnt = (srcBLen) >> 1U; + + while (tapCnt > 0U) + { + acc0 += (*pScr1++ * *pScr2++); + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement loop counter */ + tapCnt--; + } + + tapCnt = (srcBLen) & 1U; + + /* apply same above for remaining samples of smaller length sequence */ + while (tapCnt > 0U) + { + /* accumlate the results */ + acc0 += (*pScr1++ * *pScr2++); + + /* Decrement loop counter */ + tapCnt--; + } + + blkCnt--; + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(acc0 >> 7U, 8)); + pOut += inc; + + /* Initialization of inputB pointer */ + pScr2 = py; + + pScratch1 += 1U; + } + +} + +/** + @} end of Corr group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_q7.c new file mode 100644 index 000000000..e5881acec --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_correlate_q7.c @@ -0,0 +1,800 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_correlate_q7.c + * Description: Correlation of Q7 sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup Corr + @{ + */ + +/** + @brief Correlation of Q7 sequences. + @param[in] pSrcA points to the first input sequence + @param[in] srcALen length of the first input sequence + @param[in] pSrcB points to the second input sequence + @param[in] srcBLen length of the second input sequence + @param[out] pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + Both the inputs are represented in 1.7 format and multiplications yield a 2.14 result. + The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + This approach provides 17 guard bits and there is no risk of overflow as long as max(srcALen, srcBLen)<131072. + The 18.14 result is then truncated to 18.7 format by discarding the low 7 bits and saturated to 1.7 format. + + @remark + Refer to \ref arm_correlate_opt_q7() for a faster implementation of this function. + */ + +void arm_correlate_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst) +{ + +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + const q7_t *pIn1; /* InputA pointer */ + const q7_t *pIn2; /* InputB pointer */ + q7_t *pOut = pDst; /* Output pointer */ + const q7_t *px; /* Intermediate inputA pointer */ + const q7_t *py; /* Intermediate inputB pointer */ + const q7_t *pSrc1; /* Intermediate pointers */ + q31_t sum; /* Accumulators */ + uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ + uint32_t j, k, count, blkCnt; /* Loop counters */ + uint32_t outBlockSize; + int32_t inc = 1; + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc0, acc1, acc2, acc3; /* Accumulators */ + q31_t input1, input2; /* Temporary input variables */ + q15_t in1, in2; /* Temporary input variables */ + q7_t x0, x1, x2, x3, c0, c1; /* Temporary variables for holding input and coefficient values */ +#endif + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and the destination pointer modifier, inc is set to -1 */ + /* If srcALen > srcBLen, zero pad has to be done to srcB to make the two inputs of same length */ + /* But to improve the performance, + * we include zeroes in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, + * (srcALen - srcBLen) zeroes has to included in the starting of the output buffer */ + /* If srcALen < srcBLen, + * (srcALen - srcBLen) zeroes has to included in the ending of the output buffer */ + if (srcALen >= srcBLen) + { + /* Initialization of inputA pointer */ + pIn1 = pSrcA; + + /* Initialization of inputB pointer */ + pIn2 = pSrcB; + + /* Number of output samples is calculated */ + outBlockSize = (2U * srcALen) - 1U; + + /* When srcALen > srcBLen, zero padding is done to srcB + * to make their lengths equal. + * Instead, (outBlockSize - (srcALen + srcBLen - 1)) + * number of output samples are made zero */ + j = outBlockSize - (srcALen + (srcBLen - 1U)); + + /* Updating the pointer position to non zero value */ + pOut += j; + } + else + { + /* Initialization of inputA pointer */ + pIn1 = pSrcB; + + /* Initialization of inputB pointer */ + pIn2 = pSrcA; + + /* srcBLen is always considered as shorter or equal to srcALen */ + j = srcBLen; + srcBLen = srcALen; + srcALen = j; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + pOut = pDst + ((srcALen + srcBLen) - 2U); + + /* Destination address modifier is set to -1 */ + inc = -1; + } + + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, srcBLen number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. */ + + /* The algorithm is implemented in three stages. + The loop counters of each stage is initiated here. */ + blockSize1 = srcBLen - 1U; + blockSize2 = srcALen - (srcBLen - 1U); + blockSize3 = blockSize1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[srcBlen - 1] + * sum = x[0] * y[srcBlen - 2] + x[1] * y[srcBlen - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen - 1] * y[srcBLen - 1] + */ + + /* In this stage the MAC operations are increased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = 1U; + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + pSrc1 = pIn2 + (srcBLen - 1U); + py = pSrc1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (blockSize1 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* x[0] , x[1] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 4] , y[srcBLen - 3] */ + in1 = (q15_t) *py++; + in2 = (q15_t) *py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[0] * y[srcBLen - 4] */ + /* x[1] * y[srcBLen - 3] */ + sum = __SMLAD(input1, input2, sum); + + /* x[2] , x[3] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* y[srcBLen - 2] , y[srcBLen - 1] */ + in1 = (q15_t) *py++; + in2 = (q15_t) *py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16); + + /* x[2] * y[srcBLen - 2] */ + /* x[3] * y[srcBLen - 1] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize k with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + /* x[0] * y[srcBLen - 1] */ + sum += (q31_t) ((q15_t) *px++ * *py++); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7U, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + py = pSrc1 - count; + px = pIn1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + blockSize1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[srcBLen-1] * y[srcBLen-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[srcBLen] * y[srcBLen-1] + * .... + * sum = x[srcALen-srcBLen-2] * y[0] + x[srcALen-srcBLen-1] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + */ + + /* Working pointer of inputA */ + px = pIn1; + + /* Working pointer of inputB */ + py = pIn2; + + /* count is index by which the pointer pIn1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on srcBLen as in this stage srcBLen number of MACS are performed. + * So, to loop unroll over blockSize2, + * srcBLen should be greater than or equal to 4 */ + if (srcBLen >= 4U) + { +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize2 >> 2U; + + while (blkCnt > 0U) + { + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* read x[0], x[1], x[2] samples */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + k = srcBLen >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 MACs at a time. + ** a second loop below computes MACs for the remaining 1 to 3 samples. */ + do + { + /* Read y[0] sample */ + c0 = *py++; + /* Read y[1] sample */ + c1 = *py++; + + /* Read x[3] sample */ + x3 = *px++; + + /* x[0] and x[1] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[0] and y[1] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc0 += x[0] * y[0] + x[1] * y[1] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[1] and x[2] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc1 += x[1] * y[0] + x[2] * y[1] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc2 += x[2] * y[0] + x[3] * y[1] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[4] sample */ + x0 = *px++; + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc3 += x[3] * y[0] + x[4] * y[1] */ + acc3 = __SMLAD(input1, input2, acc3); + + /* Read y[2] sample */ + c0 = *py++; + /* Read y[3] sample */ + c1 = *py++; + + /* Read x[5] sample */ + x1 = *px++; + + /* x[2] and x[3] are packed */ + in1 = (q15_t) x2; + in2 = (q15_t) x3; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[2] and y[3] are packed */ + in1 = (q15_t) c0; + in2 = (q15_t) c1; + + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc0 += x[2] * y[2] + x[3] * y[3] */ + acc0 = __SMLAD(input1, input2, acc0); + + /* x[3] and x[4] are packed */ + in1 = (q15_t) x3; + in2 = (q15_t) x0; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc1 += x[3] * y[2] + x[4] * y[3] */ + acc1 = __SMLAD(input1, input2, acc1); + + /* x[4] and x[5] are packed */ + in1 = (q15_t) x0; + in2 = (q15_t) x1; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc2 += x[4] * y[2] + x[5] * y[3] */ + acc2 = __SMLAD(input1, input2, acc2); + + /* Read x[6] sample */ + x2 = *px++; + + /* x[5] and x[6] are packed */ + in1 = (q15_t) x1; + in2 = (q15_t) x2; + + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* acc3 += x[5] * y[2] + x[6] * y[3] */ + acc3 = __SMLAD(input1, input2, acc3); + + } while (--k); + + /* If the srcBLen is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + k = srcBLen % 0x4U; + + while (k > 0U) + { + /* Read y[4] sample */ + c0 = *py++; + /* Read x[7] sample */ + x3 = *px++; + + /* Perform the multiply-accumulates */ + /* acc0 += x[4] * y[4] */ + acc0 += ((q15_t) x0 * c0); + /* acc1 += x[5] * y[4] */ + acc1 += ((q15_t) x1 * c0); + /* acc2 += x[6] * y[4] */ + acc2 += ((q15_t) x2 * c0); + /* acc3 += x[7] * y[4] */ + acc3 += ((q15_t) x3 * c0); + + /* Reuse the present samples for the next MAC */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(acc0 >> 7, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + *pOut = (q7_t) (__SSAT(acc1 >> 7, 8)); + pOut += inc; + + *pOut = (q7_t) (__SSAT(acc2 >> 7, 8)); + pOut += inc; + + *pOut = (q7_t) (__SSAT(acc3 >> 7, 8)); + pOut += inc; + + count += 4U; + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize2 % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize2; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = srcBLen >> 2U; + + while (k > 0U) + { + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) *py++; + in2 = (q15_t) *py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Perform the multiply-accumulate */ + sum = __SMLAD(input1, input2, sum); + + /* Reading two inputs of SrcA buffer and packing */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Reading two inputs of SrcB buffer and packing */ + in1 = (q15_t) *py++; + in2 = (q15_t) *py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* Perform the multiply-accumulate */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = srcBLen % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = srcBLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) *px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7U, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the pointer pIn1 index, count by 1 */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + /* If the srcBLen is not a multiple of 4, + * the blockSize2 loop cannot be unrolled by 4 */ + blkCnt = blockSize2; + + while (blkCnt > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + + /* srcBLen number of MACS should be performed */ + k = srcBLen; + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) *px++ * *py++); + + /* Decrement the loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7U, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Increment the MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = pIn1 + count; + py = pIn2; + + /* Decrement loop counter */ + blkCnt--; + } + } + + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[srcALen-srcBLen+1] * y[0] + x[srcALen-srcBLen+2] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * sum += x[srcALen-srcBLen+2] * y[0] + x[srcALen-srcBLen+3] * y[1] +...+ x[srcALen-1] * y[srcBLen-1] + * .... + * sum += x[srcALen-2] * y[0] + x[srcALen-1] * y[1] + * sum += x[srcALen-1] * y[0] + */ + + /* In this stage the MAC operations are decreased by 1 for every iteration. + The count variable holds the number of MAC operations performed */ + count = srcBLen - 1U; + + /* Working pointer of inputA */ + pSrc1 = pIn1 + (srcALen - (srcBLen - 1U)); + px = pSrc1; + + /* Working pointer of inputB */ + py = pIn2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (blockSize3 > 0U) + { + /* Accumulator is made zero for every iteration */ + sum = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + k = count >> 2U; + + while (k > 0U) + { + /* x[srcALen - srcBLen + 1] , x[srcALen - srcBLen + 2] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[0] , y[1] */ + in1 = (q15_t) *py++; + in2 = (q15_t) *py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* sum += x[srcALen - srcBLen + 1] * y[0] */ + /* sum += x[srcALen - srcBLen + 2] * y[1] */ + sum = __SMLAD(input1, input2, sum); + + /* x[srcALen - srcBLen + 3] , x[srcALen - srcBLen + 4] */ + in1 = (q15_t) *px++; + in2 = (q15_t) *px++; + input1 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* y[2] , y[3] */ + in1 = (q15_t) *py++; + in2 = (q15_t) *py++; + input2 = ((q31_t) in1 & 0x0000FFFF) | ((q31_t) in2 << 16U); + + /* sum += x[srcALen - srcBLen + 3] * y[2] */ + /* sum += x[srcALen - srcBLen + 4] * y[3] */ + sum = __SMLAD(input1, input2, sum); + + /* Decrement loop counter */ + k--; + } + + /* Loop unrolling: Compute remaining outputs */ + k = count % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + k = count; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (k > 0U) + { + /* Perform the multiply-accumulate */ + sum += ((q15_t) *px++ * *py++); + + /* Decrement loop counter */ + k--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *pOut = (q7_t) (__SSAT(sum >> 7U, 8)); + /* Destination pointer is updated according to the address modifier, inc */ + pOut += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + px = ++pSrc1; + py = pIn2; + + /* Decrement MAC count */ + count--; + + /* Decrement loop counter */ + blockSize3--; + } + +#else +/* alternate version for CM0_FAMILY */ + + const q7_t *pIn1 = pSrcA; /* InputA pointer */ + const q7_t *pIn2 = pSrcB + (srcBLen - 1U); /* InputB pointer */ + q31_t sum; /* Accumulator */ + uint32_t i = 0U, j; /* Loop counters */ + uint32_t inv = 0U; /* Reverse order flag */ + uint32_t tot = 0U; /* Length */ + + /* The algorithm implementation is based on the lengths of the inputs. */ + /* srcB is always made to slide across srcA. */ + /* So srcBLen is always considered as shorter or equal to srcALen */ + /* But CORR(x, y) is reverse of CORR(y, x) */ + /* So, when srcBLen > srcALen, output pointer is made to point to the end of the output buffer */ + /* and a varaible, inv is set to 1 */ + /* If lengths are not equal then zero pad has to be done to make the two + * inputs of same length. But to improve the performance, we include zeroes + * in the output instead of zero padding either of the the inputs*/ + /* If srcALen > srcBLen, (srcALen - srcBLen) zeroes has to included in the + * starting of the output buffer */ + /* If srcALen < srcBLen, (srcALen - srcBLen) zeroes has to included in the + * ending of the output buffer */ + /* Once the zero padding is done the remaining of the output is calcualted + * using convolution but with the shorter signal time shifted. */ + + /* Calculate the length of the remaining sequence */ + tot = ((srcALen + srcBLen) - 2U); + + if (srcALen > srcBLen) + { + /* Calculating the number of zeros to be padded to the output */ + j = srcALen - srcBLen; + + /* Initialise the pointer after zero padding */ + pDst += j; + } + + else if (srcALen < srcBLen) + { + /* Initialization to inputB pointer */ + pIn1 = pSrcB; + + /* Initialization to the end of inputA pointer */ + pIn2 = pSrcA + (srcALen - 1U); + + /* Initialisation of the pointer after zero padding */ + pDst = pDst + tot; + + /* Swapping the lengths */ + j = srcALen; + srcALen = srcBLen; + srcBLen = j; + + /* Setting the reverse flag */ + inv = 1; + } + + /* Loop to calculate convolution for output length number of times */ + for (i = 0U; i <= tot; i++) + { + /* Initialize sum with zero to carry out MAC operations */ + sum = 0; + + /* Loop to perform MAC operations according to convolution equation */ + for (j = 0U; j <= i; j++) + { + /* Check the array limitations */ + if (((i - j) < srcBLen) && (j < srcALen)) + { + /* z[i] += x[i-j] * y[j] */ + sum += ((q15_t) pIn1[j] * pIn2[-((int32_t) i - j)]); + } + } + + /* Store the output in the destination buffer */ + if (inv == 1) + *pDst-- = (q7_t) __SSAT((sum >> 7U), 8U); + else + *pDst++ = (q7_t) __SSAT((sum >> 7U), 8U); + } + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of Corr group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_f32.c new file mode 100644 index 000000000..218ca34f2 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_f32.c @@ -0,0 +1,703 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_f32.c + * Description: FIR decimation for floating-point sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup FIR_decimate Finite Impulse Response (FIR) Decimator + + These functions combine an FIR filter together with a decimator. + They are used in multirate systems for reducing the sample rate of a signal without introducing aliasing distortion. + Conceptually, the functions are equivalent to the block diagram below: + \image html FIRDecimator.gif "Components included in the FIR Decimator functions" + When decimating by a factor of M, the signal should be prefiltered by a lowpass filter with a normalized + cutoff frequency of 1/M in order to prevent aliasing distortion. + The user of the function is responsible for providing the filter coefficients. + + The FIR decimator functions provided in the CMSIS DSP Library combine the FIR filter and the decimator in an efficient manner. + Instead of calculating all of the FIR filter outputs and discarding M-1 out of every M, only the + samples output by the decimator are computed. + The functions operate on blocks of input and output data. + pSrc points to an array of blockSize input values and + pDst points to an array of blockSize/M output values. + In order to have an integer number of output samples blockSize + must always be a multiple of the decimation factor M. + + The library provides separate functions for Q15, Q31 and floating-point data types. + + @par Algorithm: + The FIR portion of the algorithm uses the standard form filter: +
+      y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ...+ b[numTaps-1] * x[n-numTaps+1]
+  
+ where, b[n] are the filter coefficients. + @par + The pCoeffs points to a coefficient array of size numTaps. + Coefficients are stored in time reversed order. + @par +
+      {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to a state array of size numTaps + blockSize - 1. + Samples in the state buffer are stored in the order: + @par +
+      {x[n-numTaps+1], x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2]....x[0], x[1], ..., x[blockSize-1]}
+  
+ The state variables are updated after each block of data is processed, the coefficients are untouched. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient arrays may be shared among several instances while state variable array should be allocated separately. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + - Checks to make sure that the size of the input is a multiple of the decimation factor. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numTaps, pCoeffs, M (decimation factor), pState. Also set all of the values in pState to zero. + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + The code below statically initializes each of the 3 different data type filter instance structures +
+      arm_fir_decimate_instance_f32 S = {M, numTaps, pCoeffs, pState};
+      arm_fir_decimate_instance_q31 S = {M, numTaps, pCoeffs, pState};
+      arm_fir_decimate_instance_q15 S = {M, numTaps, pCoeffs, pState};
+  
+ where M is the decimation factor; numTaps is the number of filter coefficients in the filter; + pCoeffs is the address of the coefficient buffer; + pState is the address of the state buffer. + Be sure to set the values in the state buffer to zeros when doing static initialization. + + @par Fixed-Point Behavior + Care must be taken when using the fixed-point versions of the FIR decimate filter functions. + In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + Refer to the function specific documentation below for usage guidelines. + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Processing function for floating-point FIR decimator. + @param[in] S points to an instance of the floating-point FIR decimator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ + +#if defined(ARM_MATH_NEON) +void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px; /* Temporary pointer for state buffer */ + const float32_t *pb; /* Temporary pointer for coefficient buffer */ + float32_t sum0; /* Accumulator */ + float32_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + uint32_t blkCntN4; + float32_t *px0, *px1, *px2, *px3; + float32_t acc0, acc1, acc2, acc3; + float32_t x1, x2, x3; + + float32x4_t accv,acc0v,acc1v,acc2v,acc3v; + float32x4_t x0v, x1v, x2v, x3v; + float32x4_t c0v; + float32x2_t temp; + float32x4_t sum0v; + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (numTaps - 1U); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 4; + blkCntN4 = outBlockSize - (4 * blkCnt); + + while (blkCnt > 0U) + { + /* Copy 4 * decimation factor number of new input samples into the state buffer */ + i = 4 * S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while (--i); + + /* Set accumulators to zero */ + acc0v = vdupq_n_f32(0.0); + acc1v = vdupq_n_f32(0.0); + acc2v = vdupq_n_f32(0.0); + acc3v = vdupq_n_f32(0.0); + + /* Initialize state pointer for all the samples */ + px0 = pState; + px1 = pState + S->M; + px2 = pState + 2 * S->M; + px3 = pState + 3 * S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. + ** Repeat until we've computed numTaps-4 coefficients. */ + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0v = vld1q_f32(pb); + pb += 4; + + /* Read x[n-numTaps-1] sample for acc0 */ + x0v = vld1q_f32(px0); + x1v = vld1q_f32(px1); + x2v = vld1q_f32(px2); + x3v = vld1q_f32(px3); + + px0 += 4; + px1 += 4; + px2 += 4; + px3 += 4; + + acc0v = vmlaq_f32(acc0v, x0v, c0v); + acc1v = vmlaq_f32(acc1v, x1v, c0v); + acc2v = vmlaq_f32(acc2v, x2v, c0v); + acc3v = vmlaq_f32(acc3v, x3v, c0v); + + /* Decrement the loop counter */ + tapCnt--; + } + + temp = vpadd_f32(vget_low_f32(acc0v),vget_high_f32(acc0v)); + accv[0] = temp[0] + temp[1]; + + temp = vpadd_f32(vget_low_f32(acc1v),vget_high_f32(acc1v)); + accv[1] = temp[0] + temp[1]; + + temp = vpadd_f32(vget_low_f32(acc2v),vget_high_f32(acc2v)); + accv[2] = temp[0] + temp[1]; + + temp = vpadd_f32(vget_low_f32(acc3v),vget_high_f32(acc3v)); + accv[3] = temp[0] + temp[1]; + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch state variables for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + accv[0] += x0 * c0; + accv[1] += x1 * c0; + accv[2] += x2 * c0; + accv[3] += x3 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + 4 * S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + vst1q_f32(pDst,accv); + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + while (blkCntN4 > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCurnt++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + sum0v = vdupq_n_f32(0.0); + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Loop over the number of taps. + ** Repeat until we've computed numTaps-4 coefficients. */ + while (tapCnt > 0U) + { + c0v = vld1q_f32(pb); + pb += 4; + + x0v = vld1q_f32(px); + px += 4; + + sum0v = vmlaq_f32(sum0v, x0v, c0v); + + /* Decrement the loop counter */ + tapCnt--; + } + + temp = vpadd_f32(vget_low_f32(sum0v),vget_high_f32(sum0v)); + sum0 = temp[0] + temp[1]; + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x0 = *(px++); + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum0; + + /* Decrement the loop counter */ + blkCntN4--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + i = (numTaps - 1U) >> 2; + + /* Copy data */ + while (i > 0U) + { + sum0v = vld1q_f32(pState); + vst1q_f32(pStateCurnt,sum0v); + pState += 4; + pStateCurnt += 4; + + /* Decrement the loop counter */ + i--; + } + + i = (numTaps - 1U) % 0x04U; + + /* Copy data */ + while (i > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + i--; + } +} +#else +void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCur; /* Points to the current sample of the state */ + float32_t *px0; /* Temporary pointer for state buffer */ + const float32_t *pb; /* Temporary pointer for coefficient buffer */ + float32_t x0, c0; /* Temporary variables to hold state and coefficient values */ + float32_t acc0; /* Accumulator */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + float32_t *px1, *px2, *px3; + float32_t x1, x2, x3; + float32_t acc1, acc2, acc3; +#endif + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (numTaps - 1U); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 samples at a time */ + blkCnt = outBlockSize >> 2U; + + /* Samples loop unrolled by 4 */ + while (blkCnt > 0U) + { + /* Copy 4 * decimation factor number of new input samples into the state buffer */ + i = S->M * 4; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulators to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* Initialize state pointer for all the samples */ + px0 = pState; + px1 = pState + S->M; + px2 = pState + 2 * S->M; + px3 = pState + 3 * S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-1] sample for acc0 */ + x0 = *(px0++); + /* Read x[n-numTaps-1] sample for acc1 */ + x1 = *(px1++); + /* Read x[n-numTaps-1] sample for acc2 */ + x2 = *(px2++); + /* Read x[n-numTaps-1] sample for acc3 */ + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-2] sample for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch state variables for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 4; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = acc0; + *pDst++ = acc1; + *pDst++ = acc2; + *pDst++ = acc3; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining samples */ + blkCnt = outBlockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = outBlockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + acc0 = 0.0f; + + /* Initialize state pointer */ + px0 = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-1] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-3] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = acc0; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = (numTaps - 1U) >> 2U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x04U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c new file mode 100644 index 000000000..948b15c2d --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c @@ -0,0 +1,595 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_fast_q15.c + * Description: Fast Q15 FIR Decimator + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Processing function for the Q15 FIR decimator (fast variant). + @param[in] S points to an instance of the Q15 FIR decimator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of input samples to process per call + @return none + + @par Scaling and Overflow Behavior + This fast version uses a 32-bit accumulator with 2.30 format. + The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around and distorts the result. + In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits (log2 is read as log to the base 2). + The 2.30 accumulator is then truncated to 2.15 format and saturated to yield the 1.15 result. + @remark + Refer to \ref arm_fir_decimate_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. + Both the slow and the fast versions use the same instance structure. + Use function \ref arm_fir_decimate_init_q15() to initialize the filter structure. + */ + +#if defined (ARM_MATH_DSP) + +void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCur; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + const q15_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t x0, x1, c0; /* Temporary variables to hold state and coefficient values */ + q31_t sum0; /* Accumulators */ + q31_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t c1; /* Temporary variables to hold state and coefficient values */ +#endif + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (numTaps - 1U); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + while (blkCnt > 0U) + { + /* Copy 2 * decimation factor number of new input samples into the state buffer */ + i = S->M * 2; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer for all the samples */ + px0 = pState; + px1 = pState + S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ + x0 = read_q15x2_ia (&px0); + x1 = read_q15x2_ia (&px1); + + /* Perform the multiply-accumulate */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + + /* Read the b[numTaps-3] and b[numTaps-4] coefficient */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = read_q15x2_ia (&px0); + x1 = read_q15x2_ia (&px1); + + /* Perform the multiply-accumulate */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch state variables for acc0, acc1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLAD(x0, c0, acc0); + acc1 = __SMLAD(x1, c0, acc1); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + /* Decrement loop counter */ + blkCnt--; + } + + while (blkCntN3 > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* Read x[n-numTaps-1] and x[n-numTaps-2] sample */ + x0 = read_q15x2_ia (&px); + + /* Read the b[numTaps-3] and b[numTaps-4] coefficients */ + c1 = read_q15x2_ia ((q15_t **) &pb); + + /* Perform the multiply-accumulate */ + sum0 = __SMLAD(x0, c0, sum0); + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = read_q15x2_ia (&px); + + /* Perform the multiply-accumulate */ + sum0 = __SMLAD(x0, c1, sum0); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLAD(x0, c0, sum0); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement loop counter */ + blkCntN3--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + + i = (numTaps - 1U) >> 2U; + + /* copy data */ + while (i > 0U) + { + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + + /* Decrement loop counter */ + i--; + } + + i = (numTaps - 1U) % 0x04U; + + /* Copy data */ + while (i > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + i--; + } + +} + +#else /* #if defined (ARM_MATH_DSP) */ + +void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCur; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + const q15_t *pb; /* Temporary pointer for coefficient buffer */ + q15_t x0, x1, c0; /* Temporary variables to hold state and coefficient values */ + q31_t sum0; /* Accumulators */ + q31_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (numTaps - 1U); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + while (blkCnt > 0U) + { + /* Copy 2 * decimation factor number of new input samples into the state buffer */ + i = S->M * 2; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + px0 = pState; + px1 = pState + S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the Read b[numTaps-1] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-1] for sample 0 and for sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-3] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-3] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + /* Decrement loop counter */ + blkCnt--; + } + + while (blkCntN3 > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-1] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-3] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement loop counter */ + blkCntN3--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + + i = (numTaps - 1U) >> 2U; + + /* copy data */ + while (i > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + i--; + } + + i = (numTaps - 1U) % 0x04U; + + /* copy data */ + while (i > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + i--; + } +} + +#endif /* #if defined (ARM_MATH_DSP) */ + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c new file mode 100644 index 000000000..2c3a28aca --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c @@ -0,0 +1,390 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_fast_q31.c + * Description: Fast Q31 FIR Decimator + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Processing function for the Q31 FIR decimator (fast variant). + @param[in] S points to an instance of the Q31 FIR decimator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + This function is optimized for speed at the expense of fixed-point precision and overflow protection. + The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + These intermediate results are added to a 2.30 accumulator. + Finally, the accumulator is saturated and converted to a 1.31 result. + The fast version has the same overflow behavior as the standard version and provides less precision since it discards the low 32 bits of each multiplication result. + In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits (where log2 is read as log to the base 2). + + @remark + Refer to \ref arm_fir_decimate_q31() for a slower implementation of this function which uses a 64-bit accumulator to provide higher precision. + Both the slow and the fast versions use the same instance structure. + Use function \ref arm_fir_decimate_init_q31() to initialize the filter structure. + */ + +void arm_fir_decimate_fast_q31( + const arm_fir_decimate_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCur; /* Points to the current sample of the state */ + q31_t *px0; /* Temporary pointer for state buffer */ + const q31_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ + q63_t acc0; /* Accumulator */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t *px1, *px2, *px3; + q31_t x1, x2, x3; + q63_t acc1, acc2, acc3; +#endif + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (numTaps - 1U); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 samples at a time */ + blkCnt = outBlockSize >> 2U; + + /* Samples loop unrolled by 4 */ + while (blkCnt > 0U) + { + /* Copy 4 * decimation factor number of new input samples into the state buffer */ + i = S->M * 4; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer for all the samples */ + px0 = pState; + px1 = pState + S->M; + px2 = pState + 2 * S->M; + px3 = pState + 3 * S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-1] sample for acc0 */ + x0 = *(px0++); + /* Read x[n-numTaps-1] sample for acc1 */ + x1 = *(px1++); + /* Read x[n-numTaps-1] sample for acc2 */ + x2 = *(px2++); + /* Read x[n-numTaps-1] sample for acc3 */ + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-2] sample for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch state variables for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + acc1 = (q31_t) ((((q63_t) acc1 << 32) + ((q63_t) x1 * c0)) >> 32); + acc2 = (q31_t) ((((q63_t) acc2 << 32) + ((q63_t) x2 * c0)) >> 32); + acc3 = (q31_t) ((((q63_t) acc3 << 32) + ((q63_t) x3 * c0)) >> 32); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 4; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (acc0 << 1); + *pDst++ = (q31_t) (acc1 << 1); + *pDst++ = (q31_t) (acc2 << 1); + *pDst++ = (q31_t) (acc3 << 1); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining samples */ + blkCnt = outBlockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = outBlockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer */ + px0 = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-1] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read the b[numTaps-3] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-3] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 = (q31_t) ((((q63_t) acc0 << 32) + ((q63_t) x0 * c0)) >> 32); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (acc0 << 1); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = (numTaps - 1U) >> 2U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x04U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_f32.c new file mode 100644 index 000000000..9382f099d --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_f32.c @@ -0,0 +1,105 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_init_f32.c + * Description: Floating-point FIR Decimator initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Initialization function for the floating-point FIR decimator. + @param[in,out] S points to an instance of the floating-point FIR decimator structure + @param[in] numTaps number of coefficients in the filter + @param[in] M decimation factor + @param[in] pCoeffs points to the filter coefficients + @param[in] pState points to the state buffer + @param[in] blockSize number of input samples to process per call + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+      {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to the array of state variables. + pState is of length numTaps+blockSize-1 words where blockSize is the number of input samples passed to arm_fir_decimate_f32(). + M is the decimation factor. + */ + +arm_status arm_fir_decimate_init_f32( + arm_fir_decimate_instance_f32 * S, + uint16_t numTaps, + uint8_t M, + const float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The size of the input block must be a multiple of the decimation factor */ + if ((blockSize % M) != 0U) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Decimation Factor */ + S->M = M; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_q15.c new file mode 100644 index 000000000..f583a037d --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_q15.c @@ -0,0 +1,106 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_init_q15.c + * Description: Initialization function for the Q15 FIR Decimator + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Initialization function for the Q15 FIR decimator. + @param[in,out] S points to an instance of the Q15 FIR decimator structure + @param[in] numTaps number of coefficients in the filter + @param[in] M decimation factor + @param[in] pCoeffs points to the filter coefficients + @param[in] pState points to the state buffer + @param[in] blockSize number of input samples to process + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+      {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to the array of state variables. + pState is of length numTaps+blockSize-1 words where blockSize is the number of input samples + to the call arm_fir_decimate_q15(). + M is the decimation factor. + */ + +arm_status arm_fir_decimate_init_q15( + arm_fir_decimate_instance_q15 * S, + uint16_t numTaps, + uint8_t M, + const q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The size of the input block must be a multiple of the decimation factor */ + if ((blockSize % M) != 0U) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Decimation Factor */ + S->M = M; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_q31.c new file mode 100644 index 000000000..5ee69c6e1 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_init_q31.c @@ -0,0 +1,105 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_init_q31.c + * Description: Initialization function for Q31 FIR Decimation filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Initialization function for the Q31 FIR decimator. + @param[in,out] S points to an instance of the Q31 FIR decimator structure + @param[in] numTaps number of coefficients in the filter + @param[in] M decimation factor + @param[in] pCoeffs points to the filter coefficients + @param[in] pState points to the state buffer + @param[in] blockSize number of input samples to process + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+      {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to the array of state variables. + pState is of length numTaps+blockSize-1 words where blockSize is the number of input samples passed to arm_fir_decimate_q31(). + M is the decimation factor. + */ + +arm_status arm_fir_decimate_init_q31( + arm_fir_decimate_instance_q31 * S, + uint16_t numTaps, + uint8_t M, + const q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The size of the input block must be a multiple of the decimation factor */ + if ((blockSize % M) != 0U) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear the state buffer. The size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Decimation Factor */ + S->M = M; + + status = ARM_MATH_SUCCESS; + } + + return (status); + +} + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_q15.c new file mode 100644 index 000000000..f9d92c0f2 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_q15.c @@ -0,0 +1,595 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_q15.c + * Description: Q15 FIR Decimator + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Processing function for the Q15 FIR decimator. + @param[in] S points to an instance of the Q15 FIR decimator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of input samples to process per call + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + Lastly, the accumulator is saturated to yield a result in 1.15 format. + + @remark + Refer to \ref arm_fir_decimate_fast_q15() for a faster but less precise implementation of this function. + */ + +#if defined (ARM_MATH_DSP) + +void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCur; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + const q15_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t x0, x1, c0; /* Temporary variables to hold state and coefficient values */ + q63_t sum0; /* Accumulators */ + q63_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t c1; /* Temporary variables to hold state and coefficient values */ +#endif + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (numTaps - 1U); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + while (blkCnt > 0U) + { + /* Copy 2 * decimation factor number of new input samples into the state buffer */ + i = S->M * 2; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer for all the samples */ + px0 = pState; + px1 = pState + S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* Read x[n-numTaps-1] and x[n-numTaps-2]sample */ + x0 = read_q15x2_ia (&px0); + x1 = read_q15x2_ia (&px1); + + /* Perform the multiply-accumulate */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + + /* Read the b[numTaps-3] and b[numTaps-4] coefficient */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = read_q15x2_ia (&px0); + x1 = read_q15x2_ia (&px1); + + /* Perform the multiply-accumulate */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch state variables for acc0, acc1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 = __SMLALD(x0, c0, acc0); + acc1 = __SMLALD(x1, c0, acc1); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + /* Decrement loop counter */ + blkCnt--; + } + + while (blkCntN3 > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] and b[numTaps-2] coefficients */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* Read x[n-numTaps-1] and x[n-numTaps-2] sample */ + x0 = read_q15x2_ia (&px); + + /* Read the b[numTaps-3] and b[numTaps-4] coefficients */ + c1 = read_q15x2_ia ((q15_t **) &pb); + + /* Perform the multiply-accumulate */ + sum0 = __SMLALD(x0, c0, sum0); + + /* Read x[n-numTaps-2] and x[n-numTaps-3] sample */ + x0 = read_q15x2_ia (&px); + + /* Perform the multiply-accumulate */ + sum0 = __SMLALD(x0, c1, sum0); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 = __SMLALD(x0, c0, sum0); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement loop counter */ + blkCntN3--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + + i = (numTaps - 1U) >> 2U; + + /* copy data */ + while (i > 0U) + { + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + + /* Decrement loop counter */ + i--; + } + + i = (numTaps - 1U) % 0x04U; + + /* Copy data */ + while (i > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + i--; + } + +} + +#else /* #if defined (ARM_MATH_DSP) */ + +void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCur; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + const q15_t *pb; /* Temporary pointer for coefficient buffer */ + q15_t x0, x1, c0; /* Temporary variables to hold state and coefficient values */ + q63_t sum0; /* Accumulators */ + q63_t acc0, acc1; + q15_t *px0, *px1; + uint32_t blkCntN3; + uint32_t numTaps = S->numTaps; /* Number of taps */ + uint32_t i, blkCnt, tapCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (numTaps - 1U); + + /* Total number of output samples to be computed */ + blkCnt = outBlockSize / 2; + blkCntN3 = outBlockSize - (2 * blkCnt); + + while (blkCnt > 0U) + { + /* Copy 2 * decimation factor number of new input samples into the state buffer */ + i = S->M * 2; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + + /* Initialize state pointer */ + px0 = pState; + px1 = pState + S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the Read b[numTaps-1] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-1] for sample 0 and for sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-3] coefficients */ + c0 = *pb++; + + /* Read x[n-numTaps-3] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] for sample 0 and sample 1 */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + x1 = *px1++; + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 2; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + *pDst++ = (q15_t) (__SSAT((acc1 >> 15), 16)); + + /* Decrement loop counter */ + blkCnt--; + } + + while (blkCntN3 > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-1] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-3] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] sample */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px++; + + /* Perform the multiply-accumulate */ + sum0 += x0 * c0; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* Store filter output, smlad returns the values in 2.14 format */ + /* so downsacle by 15 to get output in 1.15 */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement loop counter */ + blkCntN3--; + } + + /* Processing is complete. + ** Now copy the last numTaps - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + + i = (numTaps - 1U) >> 2U; + + /* copy data */ + while (i > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + i--; + } + + i = (numTaps - 1U) % 0x04U; + + /* copy data */ + while (i > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + i--; + } +} + +#endif /* #if defined (ARM_MATH_DSP) */ + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_q31.c new file mode 100644 index 000000000..7af8a44e2 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_decimate_q31.c @@ -0,0 +1,387 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_decimate_q31.c + * Description: Q31 FIR Decimator + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_decimate + @{ + */ + +/** + @brief Processing function for the Q31 FIR decimator. + @param[in] S points to an instance of the Q31 FIR decimator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around rather than clip. + In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits (where log2 is read as log to the base 2). + After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + + @remark + Refer to \ref arm_fir_decimate_fast_q31() for a faster but less precise implementation of this function. + */ + +void arm_fir_decimate_q31( + const arm_fir_decimate_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCur; /* Points to the current sample of the state */ + q31_t *px0; /* Temporary pointer for state buffer */ + const q31_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t x0, c0; /* Temporary variables to hold state and coefficient values */ + q63_t acc0; /* Accumulator */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt, outBlockSize = blockSize / S->M; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t *px1, *px2, *px3; + q31_t x1, x2, x3; + q63_t acc1, acc2, acc3; +#endif + + /* S->pState buffer contains previous frame (numTaps - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (numTaps - 1U); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 samples at a time */ + blkCnt = outBlockSize >> 2U; + + /* Samples loop unrolled by 4 */ + while (blkCnt > 0U) + { + /* Copy 4 * decimation factor number of new input samples into the state buffer */ + i = S->M * 4; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer for all the samples */ + px0 = pState; + px1 = pState + S->M; + px2 = pState + 2 * S->M; + px3 = pState + 3 * S->M; + + /* Initialize coeff pointer */ + pb = pCoeffs; + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-1] sample for acc0 */ + x0 = *(px0++); + /* Read x[n-numTaps-1] sample for acc1 */ + x1 = *(px1++); + /* Read x[n-numTaps-1] sample for acc2 */ + x2 = *(px2++); + /* Read x[n-numTaps-1] sample for acc3 */ + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-2] sample for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-3] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *(pb++); + + /* Read x[n-numTaps-4] sample acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch state variables for acc0, acc1, acc2, acc3 */ + x0 = *(px0++); + x1 = *(px1++); + x2 = *(px2++); + x3 = *(px3++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M * 4; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (acc0 >> 31); + *pDst++ = (q31_t) (acc1 >> 31); + *pDst++ = (q31_t) (acc2 >> 31); + *pDst++ = (q31_t) (acc3 >> 31); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining samples */ + blkCnt = outBlockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = outBlockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + i = S->M; + + do + { + *pStateCur++ = *pSrc++; + + } while (--i); + + /* Set accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer */ + px0 = pState; + + /* Initialize coeff pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the b[numTaps-1] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-1] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + + /* Read the b[numTaps-2] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-2] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + + /* Read the b[numTaps-3] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-3] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + + /* Read the b[numTaps-4] coefficient */ + c0 = *pb++; + + /* Read x[n-numTaps-4] sample */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *pb++; + + /* Fetch 1 state variable */ + x0 = *px0++; + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + pState = pState + S->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (acc0 >> 31); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = (numTaps - 1U) >> 2U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x04U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of FIR_decimate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_fast_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_fast_q15.c new file mode 100644 index 000000000..5f8df9542 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_fast_q15.c @@ -0,0 +1,332 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_fast_q15.c + * Description: Q15 Fast FIR filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR + @{ + */ + +/** + @brief Processing function for the Q15 FIR filter (fast version). + @param[in] S points to an instance of the Q15 FIR filter structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + This fast version uses a 32-bit accumulator with 2.30 format. + The accumulator maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around and distorts the result. + In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits. + The 2.30 accumulator is then truncated to 2.15 format and saturated to yield the 1.15 result. + + @remark + Refer to \ref arm_fir_q15() for a slower implementation of this function which uses 64-bit accumulation to avoid wrap around distortion. Both the slow and the fast versions use the same instance structure. + Use function \ref arm_fir_init_q15() to initialize the filter structure. + */ + +void arm_fir_fast_q15( + const arm_fir_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px; /* Temporary pointer for state buffer */ + const q15_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t acc0; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc1, acc2, acc3; /* Accumulators */ + q31_t x0, x1, x2, c0; /* Temporary variables to hold state and coefficient values */ +#endif + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Copy 4 new input samples into the state buffer. */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Typecast q15_t pointer to q31_t pointer for state reading in q31_t */ + px = pState; + + /* Typecast q15_t pointer to q31_t pointer for coefficient reading in q31_t */ + pb = pCoeffs; + + /* Read the first two samples from the state buffer: x[n-N], x[n-N-1] */ + x0 = read_q15x2_ia (&px); + + /* Read the third and forth samples from the state buffer: x[n-N-2], x[n-N-3] */ + x2 = read_q15x2_ia (&px); + + /* Loop over the number of taps. Unroll by a factor of 4. + Repeat until we've computed numTaps-(numTaps%4) coefficients. */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Read the first two coefficients using SIMD: b[N] and b[N-1] coefficients */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* acc0 += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ + acc0 = __SMLAD(x0, c0, acc0); + + /* acc2 += b[N] * x[n-N-2] + b[N-1] * x[n-N-3] */ + acc2 = __SMLAD(x2, c0, acc2); + + /* pack x[n-N-1] and x[n-N-2] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* Read state x[n-N-4], x[n-N-5] */ + x0 = read_q15x2_ia (&px); + + /* acc1 += b[N] * x[n-N-1] + b[N-1] * x[n-N-2] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* pack x[n-N-3] and x[n-N-4] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x0, x2, 0); +#else + x1 = __PKHBT(x2, x0, 0); +#endif + + /* acc3 += b[N] * x[n-N-3] + b[N-1] * x[n-N-4] */ + acc3 = __SMLADX(x1, c0, acc3); + + /* Read coefficients b[N-2], b[N-3] */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* acc0 += b[N-2] * x[n-N-2] + b[N-3] * x[n-N-3] */ + acc0 = __SMLAD(x2, c0, acc0); + + /* Read state x[n-N-6], x[n-N-7] with offset */ + x2 = read_q15x2_ia (&px); + + /* acc2 += b[N-2] * x[n-N-4] + b[N-3] * x[n-N-5] */ + acc2 = __SMLAD(x0, c0, acc2); + + /* acc1 += b[N-2] * x[n-N-3] + b[N-3] * x[n-N-4] */ + acc1 = __SMLADX(x1, c0, acc1); + + /* pack x[n-N-5] and x[n-N-6] */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* acc3 += b[N-2] * x[n-N-5] + b[N-3] * x[n-N-6] */ + acc3 = __SMLADX(x1, c0, acc3); + + /* Decrement tap count */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps. + This is always be 2 taps since the filter length is even. */ + if ((numTaps & 0x3U) != 0U) + { + /* Read last two coefficients */ + c0 = read_q15x2_ia ((q15_t **) &pb); + + /* Perform the multiply-accumulates */ + acc0 = __SMLAD(x0, c0, acc0); + acc2 = __SMLAD(x2, c0, acc2); + + /* pack state variables */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x2, x0, 0); +#else + x1 = __PKHBT(x0, x2, 0); +#endif + + /* Read last state variables */ + x0 = read_q15x2 (px); + + /* Perform the multiply-accumulates */ + acc1 = __SMLADX(x1, c0, acc1); + + /* pack state variables */ +#ifndef ARM_MATH_BIG_ENDIAN + x1 = __PKHBT(x0, x2, 0); +#else + x1 = __PKHBT(x2, x0, 0); +#endif + + /* Perform the multiply-accumulates */ + acc3 = __SMLADX(x1, c0, acc3); + } + + /* The results in the 4 accumulators are in 2.30 format. Convert to 1.15 with saturation. + Then store the 4 outputs in the destination buffer. */ +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc0 >> 15), 16), __SSAT((acc1 >> 15), 16), 16)); + write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc2 >> 15), 16), __SSAT((acc3 >> 15), 16), 16)); +#else + write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc1 >> 15), 16), __SSAT((acc0 >> 15), 16), 16)); + write_q15x2_ia (&pDst, __PKHBT(__SSAT((acc3 >> 15), 16), __SSAT((acc2 >> 15), 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining output samples */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of taps */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy two samples into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Use SIMD to hold states and coefficients */ + px = pState; + pb = pCoeffs; + + tapCnt = numTaps >> 1U; + + do + { + acc0 += (q31_t) *px++ * *pb++; + acc0 += (q31_t) *px++ * *pb++; + + tapCnt--; + } + while (tapCnt > 0U); + + /* The result is in 2.30 format. Convert to 1.15 with saturation. + Then store the output in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT((acc0 >> 15), 16)); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = (numTaps - 1U) >> 2U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy remaining data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of FIR group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_fast_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_fast_q31.c new file mode 100644 index 000000000..513cb7280 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_fast_q31.c @@ -0,0 +1,324 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_fast_q31.c + * Description: Processing function for the Q31 Fast FIR filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR + @{ + */ + +/** + @brief Processing function for the Q31 FIR filter (fast version). + @param[in] S points to an instance of the Q31 structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + This function is optimized for speed at the expense of fixed-point precision and overflow protection. + The result of each 1.31 x 1.31 multiplication is truncated to 2.30 format. + These intermediate results are added to a 2.30 accumulator. + Finally, the accumulator is saturated and converted to a 1.31 result. + The fast version has the same overflow behavior as the standard version and provides less precision since it discards the low 32 bits of each multiplication result. + In order to avoid overflows completely the input signal must be scaled down by log2(numTaps) bits. + + @remark + Refer to \ref arm_fir_q31() for a slower implementation of this function which uses a 64-bit accumulator to provide higher precision. Both the slow and the fast versions use the same instance structure. + Use function \ref arm_fir_init_q31() to initialize the filter structure. + */ + +IAR_ONLY_LOW_OPTIMIZATION_ENTER +void arm_fir_fast_q31( + const arm_fir_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t *px; /* Temporary pointer for state buffer */ + const q31_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t acc0; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc1, acc2, acc3; /* Accumulators */ + q31_t x0, x1, x2, x3, c0; /* Temporary variables to hold state and coefficient values */ +#endif + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Copy 4 new input samples into the state buffer. */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the first 3 samples from the state buffer: + * x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2] */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Loop over the number of taps. Unroll by a factor of 4. + Repeat until we've computed numTaps-4 coefficients. */ + while (tapCnt > 0U) + { + /* Read the b[numTaps] coefficient */ + c0 = *pb; + + /* Read x[n-numTaps-3] sample */ + x3 = *px; + + /* acc0 += b[numTaps] * x[n-numTaps] */ + multAcc_32x32_keep32_R(acc0, x0, c0); + + /* acc1 += b[numTaps] * x[n-numTaps-1] */ + multAcc_32x32_keep32_R(acc1, x1, c0); + + /* acc2 += b[numTaps] * x[n-numTaps-2] */ + multAcc_32x32_keep32_R(acc2, x2, c0); + + /* acc3 += b[numTaps] * x[n-numTaps-3] */ + multAcc_32x32_keep32_R(acc3, x3, c0); + + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb + 1U); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px + 1U); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x1, c0); + multAcc_32x32_keep32_R(acc1, x2, c0); + multAcc_32x32_keep32_R(acc2, x3, c0); + multAcc_32x32_keep32_R(acc3, x0, c0); + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb + 2U); + + /* Read x[n-numTaps-5] sample */ + x1 = *(px + 2U); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x2, c0); + multAcc_32x32_keep32_R(acc1, x3, c0); + multAcc_32x32_keep32_R(acc2, x0, c0); + multAcc_32x32_keep32_R(acc3, x1, c0); + + /* Read the b[numTaps-3] coefficients */ + c0 = *(pb + 3U); + + /* Read x[n-numTaps-6] sample */ + x2 = *(px + 3U); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x3, c0); + multAcc_32x32_keep32_R(acc1, x0, c0); + multAcc_32x32_keep32_R(acc2, x1, c0); + multAcc_32x32_keep32_R(acc3, x2, c0); + + /* update coefficient pointer */ + pb += 4U; + px += 4U; + + /* Decrement loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + multAcc_32x32_keep32_R(acc0, x0, c0); + multAcc_32x32_keep32_R(acc1, x1, c0); + multAcc_32x32_keep32_R(acc2, x2, c0); + multAcc_32x32_keep32_R(acc3, x3, c0); + + /* Reuse the present sample states for next sample */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The results in the 4 accumulators are in 2.30 format. Convert to 1.31 + Then store the 4 outputs in the destination buffer. */ + *pDst++ = (q31_t) (acc0 << 1); + *pDst++ = (q31_t) (acc1 << 1); + *pDst++ = (q31_t) (acc2 << 1); + *pDst++ = (q31_t) (acc3 << 1); + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining output samples */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of taps */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = pCoeffs; + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + multAcc_32x32_keep32_R(acc0, (*px++), (*pb++)); + i--; + } while (i > 0U); + + /* The result is in 2.30 format. Convert to 1.31 + Then store the output in the destination buffer. */ + *pDst++ = (q31_t) (acc0 << 1); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = (numTaps - 1U) >> 2U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy remaining data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} +IAR_ONLY_LOW_OPTIMIZATION_EXIT +/** + @} end of FIR group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_init_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_init_q7.c new file mode 100644 index 000000000..f96d25090 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_init_q7.c @@ -0,0 +1,81 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_init_q7.c + * Description: Q7 FIR filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR + @{ + */ + +/** + @brief Initialization function for the Q7 FIR filter. + @param[in,out] S points to an instance of the Q7 FIR filter structure + @param[in] numTaps number of filter coefficients in the filter + @param[in] pCoeffs points to the filter coefficients buffer + @param[in] pState points to the state buffer + @param[in] blockSize number of samples processed + @return none + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+      {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to the array of state variables. + pState is of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_fir_q7(). + */ + +void arm_fir_init_q7( + arm_fir_instance_q7 * S, + uint16_t numTaps, + const q7_t * pCoeffs, + q7_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer. The size is always (blockSize + numTaps - 1) */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q7_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_f32.c new file mode 100644 index 000000000..ee0ed270f --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_f32.c @@ -0,0 +1,914 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_interpolate_f32.c + * Description: Floating-point FIR interpolation sequences + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @defgroup FIR_Interpolate Finite Impulse Response (FIR) Interpolator + + These functions combine an upsampler (zero stuffer) and an FIR filter. + They are used in multirate systems for increasing the sample rate of a signal without introducing high frequency images. + Conceptually, the functions are equivalent to the block diagram below: + \image html FIRInterpolator.gif "Components included in the FIR Interpolator functions" + After upsampling by a factor of L, the signal should be filtered by a lowpass filter with a normalized + cutoff frequency of 1/L in order to eliminate high frequency copies of the spectrum. + The user of the function is responsible for providing the filter coefficients. + + The FIR interpolator functions provided in the CMSIS DSP Library combine the upsampler and FIR filter in an efficient manner. + The upsampler inserts L-1 zeros between each sample. + Instead of multiplying by these zero values, the FIR filter is designed to skip them. + This leads to an efficient implementation without any wasted effort. + The functions operate on blocks of input and output data. + pSrc points to an array of blockSize input values and + pDst points to an array of blockSize*L output values. + + The library provides separate functions for Q15, Q31, and floating-point data types. + + @par Algorithm + The functions use a polyphase filter structure: +
+      y[n] = b[0] * x[n] + b[L]   * x[n-1] + ... + b[L*(phaseLength-1)] * x[n-phaseLength+1]
+      y[n+1] = b[1] * x[n] + b[L+1] * x[n-1] + ... + b[L*(phaseLength-1)+1] * x[n-phaseLength+1]
+      ...
+      y[n+(L-1)] = b[L-1] * x[n] + b[2*L-1] * x[n-1] + ....+ b[L*(phaseLength-1)+(L-1)] * x[n-phaseLength+1]
+  
+ This approach is more efficient than straightforward upsample-then-filter algorithms. + With this method the computation is reduced by a factor of 1/L when compared to using a standard FIR filter. + @par + pCoeffs points to a coefficient array of size numTaps. + numTaps must be a multiple of the interpolation factor L and this is checked by the + initialization functions. + Internally, the function divides the FIR filter's impulse response into shorter filters of length + phaseLength=numTaps/L. + Coefficients are stored in time reversed order. +
+      {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to a state array of size blockSize + phaseLength - 1. + Samples in the state buffer are stored in the order: +
+     {x[n-phaseLength+1], x[n-phaseLength], x[n-phaseLength-1], x[n-phaseLength-2]....x[0], x[1], ..., x[blockSize-1]}
+  
+ @par + The state variables are updated after each block of data is processed, the coefficients are untouched. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient arrays may be shared among several instances while state variable array should be allocated separately. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + - Checks to make sure that the length of the filter is a multiple of the interpolation factor. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + L (interpolation factor), pCoeffs, phaseLength (numTaps / L), pState. Also set all of the values in pState to zero. + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + The code below statically initializes each of the 3 different data type filter instance structures +
+      arm_fir_interpolate_instance_f32 S = {L, phaseLength, pCoeffs, pState};
+      arm_fir_interpolate_instance_q31 S = {L, phaseLength, pCoeffs, pState};
+      arm_fir_interpolate_instance_q15 S = {L, phaseLength, pCoeffs, pState};
+  
+ @par + where L is the interpolation factor; phaseLength=numTaps/L is the + length of each of the shorter FIR filters used internally, + pCoeffs is the address of the coefficient buffer; + pState is the address of the state buffer. + Be sure to set the values in the state buffer to zeros when doing static initialization. + + @par Fixed-Point Behavior + Care must be taken when using the fixed-point versions of the FIR interpolate filter functions. + In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + Refer to the function specific documentation below for usage guidelines. + */ + +/** + @addtogroup FIR_Interpolate + @{ + */ + +/** + @brief Processing function for floating-point FIR interpolator. + @param[in] S points to an instance of the floating-point FIR interpolator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ +#if defined(ARM_MATH_NEON) +void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *ptr1; /* Temporary pointers for state buffer */ + const float32_t *ptr2; /* Temporary pointers for coefficient buffer */ + float32_t sum0; /* Accumulators */ + float32_t x0, c0; /* Temporary variables to hold state and coefficient values */ + uint32_t i, blkCnt, j; /* Loop counters */ + uint16_t phaseLen = S->phaseLength, tapCnt; /* Length of each polyphase filter component */ + float32_t acc0, acc1, acc2, acc3; + float32_t x1, x2, x3; + uint32_t blkCntN4; + float32_t c1, c2, c3; + + float32x4_t sum0v; + float32x4_t accV,accV0,accV1; + float32x4_t x0v,x1v,x2v,xa,xb; + uint32x4_t x0v_u,x1v_u,x2v_u,xa_u,xb_u; + float32x2_t tempV; + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = S->pState + (phaseLen - 1U); + + /* Initialise blkCnt */ + blkCnt = blockSize >> 3; + blkCntN4 = blockSize & 7; + + /* Loop unrolling */ + while (blkCnt > 0U) + { + /* Copy new input samples into the state buffer */ + sum0v = vld1q_f32(pSrc); + vst1q_f32(pStateCurnt,sum0v); + pSrc += 4; + pStateCurnt += 4; + + sum0v = vld1q_f32(pSrc); + vst1q_f32(pStateCurnt,sum0v); + pSrc += 4; + pStateCurnt += 4; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = (S->L); + + while (i > 0U) + { + /* Set accumulator to zero */ + accV0 = vdupq_n_f32(0.0); + accV1 = vdupq_n_f32(0.0); + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2U; + + x0v = vld1q_f32(ptr1); + x1v = vld1q_f32(ptr1 + 4); + + while (tapCnt > 0U) + { + /* Read the input samples */ + x2v = vld1q_f32(ptr1 + 8); + + /* Read the coefficients */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + accV0 = vmlaq_n_f32(accV0,x0v,c0); + accV1 = vmlaq_n_f32(accV1,x1v,c0); + + /* Read the coefficients, inputs and perform multiply-accumulate */ + c1 = *(ptr2 + S->L); + + xa = vextq_f32(x0v,x1v,1); + xb = vextq_f32(x1v,x2v,1); + + accV0 = vmlaq_n_f32(accV0,xa,c1); + accV1 = vmlaq_n_f32(accV1,xb,c1); + + /* Read the coefficients, inputs and perform multiply-accumulate */ + c2 = *(ptr2 + S->L * 2); + + xa = vextq_f32(x0v,x1v,2); + xb = vextq_f32(x1v,x2v,2); + + accV0 = vmlaq_n_f32(accV0,xa,c2); + accV1 = vmlaq_n_f32(accV1,xb,c2); + + /* Read the coefficients, inputs and perform multiply-accumulate */ + c3 = *(ptr2 + S->L * 3); + + xa = vextq_f32(x0v,x1v,3); + xb = vextq_f32(x1v,x2v,3); + + accV0 = vmlaq_n_f32(accV0,xa,c3); + accV1 = vmlaq_n_f32(accV1,xb,c3); + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += 4 * S->L; + ptr1 += 4; + x0v = x1v; + x1v = x2v; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4U; + + x2v = vld1q_f32(ptr1 + 8); + + switch (tapCnt) + { + case 3: + c0 = *(ptr2); + accV0 = vmlaq_n_f32(accV0,x0v,c0); + accV1 = vmlaq_n_f32(accV1,x1v,c0); + ptr2 += S->L; + + c0 = *(ptr2); + + xa = vextq_f32(x0v,x1v,1); + xb = vextq_f32(x1v,x2v,1); + + accV0 = vmlaq_n_f32(accV0,xa,c0); + accV1 = vmlaq_n_f32(accV1,xb,c0); + ptr2 += S->L; + + c0 = *(ptr2); + + xa = vextq_f32(x0v,x1v,2); + xb = vextq_f32(x1v,x2v,2); + + accV0 = vmlaq_n_f32(accV0,xa,c0); + accV1 = vmlaq_n_f32(accV1,xb,c0); + ptr2 += S->L; + + break; + + case 2: + c0 = *(ptr2); + accV0 = vmlaq_n_f32(accV0,x0v,c0); + accV1 = vmlaq_n_f32(accV1,x1v,c0); + ptr2 += S->L; + + c0 = *(ptr2); + + xa = vextq_f32(x0v,x1v,1); + xb = vextq_f32(x1v,x2v,1); + + accV0 = vmlaq_n_f32(accV0,xa,c0); + accV1 = vmlaq_n_f32(accV1,xb,c0); + ptr2 += S->L; + + break; + + case 1: + c0 = *(ptr2); + accV0 = vmlaq_n_f32(accV0,x0v,c0); + accV1 = vmlaq_n_f32(accV1,x1v,c0); + ptr2 += S->L; + + break; + + default: + break; + + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst = accV0[0]; + *(pDst + S->L) = accV0[1]; + *(pDst + 2 * S->L) = accV0[2]; + *(pDst + 3 * S->L) = accV0[3]; + + *(pDst + 4 * S->L) = accV1[0]; + *(pDst + 5 * S->L) = accV1[1]; + *(pDst + 6 * S->L) = accV1[2]; + *(pDst + 7 * S->L) = accV1[3]; + + pDst++; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 8; + + pDst += S->L * 7; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + + while (blkCntN4 > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while (i > 0U) + { + /* Set accumulator to zero */ + sum0v = vdupq_n_f32(0.0); + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + ** Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2U; + + while (tapCnt > 0U) + { + /* Read the coefficient */ + x1v[0] = *(ptr2); + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the input sample */ + x0v = vld1q_f32(ptr1); + ptr1 += 4; + + /* Read the coefficient */ + x1v[1] = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the coefficient */ + x1v[2] = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Read the coefficient */ + x1v[3] = *(ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + sum0v = vmlaq_f32(sum0v,x0v,x1v); + + /* Decrement the loop counter */ + tapCnt--; + } + + tempV = vpadd_f32(vget_low_f32(sum0v),vget_high_f32(sum0v)); + sum0 = tempV[0] + tempV[1]; + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += *(ptr1++) * (*ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum0; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCntN4--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + + tapCnt = (phaseLen - 1U) >> 2U; + + /* Copy data */ + while (tapCnt > 0U) + { + sum0v = vld1q_f32(pState); + vst1q_f32(pStateCurnt,sum0v); + pState += 4; + pStateCurnt += 4; + + /* Decrement the loop counter */ + tapCnt--; + } + + tapCnt = (phaseLen - 1U) % 0x04U; + + /* copy data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} +#else + +void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCur; /* Points to the current sample of the state */ + float32_t *ptr1; /* Temporary pointer for state buffer */ + const float32_t *ptr2; /* Temporary pointer for coefficient buffer */ + float32_t sum0; /* Accumulators */ + uint32_t i, blkCnt, tapCnt; /* Loop counters */ + uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + uint32_t j; + +#if defined (ARM_MATH_LOOPUNROLL) + float32_t acc0, acc1, acc2, acc3; + float32_t x0, x1, x2, x3; + float32_t c0, c1, c2, c3; +#endif + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (phaseLen - 1U); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = (S->L); + + while (i > 0U) + { + /* Set accumulator to zero */ + acc0 = 0.0f; + acc1 = 0.0f; + acc2 = 0.0f; + acc3 = 0.0f; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2U; + + x0 = *(ptr1++); + x1 = *(ptr1++); + x2 = *(ptr1++); + + while (tapCnt > 0U) + { + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Read the coefficient */ + c1 = *(ptr2 + S->L); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += x1 * c1; + acc1 += x2 * c1; + acc2 += x3 * c1; + acc3 += x0 * c1; + + /* Read the coefficient */ + c2 = *(ptr2 + S->L * 2); + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += x2 * c2; + acc1 += x3 * c2; + acc2 += x0 * c2; + acc3 += x1 * c2; + + /* Read the coefficient */ + c3 = *(ptr2 + S->L * 3); + + /* Read the input sample */ + x2 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += x3 * c3; + acc1 += x0 * c3; + acc2 += x1 * c3; + acc3 += x2 * c3; + + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += 4 * S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4U; + + while (tapCnt > 0U) + { + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += x0 * c0; + acc1 += x1 * c0; + acc2 += x2 * c0; + acc3 += x3 * c0; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* update states for next sample processing */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *(pDst ) = acc0; + *(pDst + S->L) = acc1; + *(pDst + 2 * S->L) = acc2; + *(pDst + 3 * S->L) = acc3; + + pDst++; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 4; + + pDst += S->L * 3; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while (i > 0U) + { + /* Set accumulator to zero */ + sum0 = 0.0f; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. + Repeat until we've computed numTaps-(4*S->L) coefficients. */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + tapCnt = phaseLen >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += *ptr1++ * *ptr2; + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + sum0 += *ptr1++ * *ptr2; + ptr2 += S->L; + + sum0 += *ptr1++ * *ptr2; + ptr2 += S->L; + + sum0 += *ptr1++ * *ptr2; + ptr2 += S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + tapCnt = phaseLen % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = phaseLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += *ptr1++ * *ptr2; + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum0; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + tapCnt = (phaseLen - 1U) >> 2U; + + /* copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + tapCnt = (phaseLen - 1U) % 0x04U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (phaseLen - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#else +/* alternate version for CM0_FAMILY */ + + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCur; /* Points to the current sample of the state */ + float32_t *ptr1; /* Temporary pointer for state buffer */ + const float32_t *ptr2; /* Temporary pointer for coefficient buffer */ + float32_t sum0; /* Accumulators */ + uint32_t i, blkCnt, tapCnt; /* Loop counters */ + uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (phaseLen - 1U); + + /* Total number of intput samples */ + blkCnt = blockSize; + + /* Loop over the blockSize. */ + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while (i > 0U) + { + /* Set accumulator to zero */ + sum0 = 0.0f; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (i - 1U); + + /* Loop over the polyPhase length */ + tapCnt = phaseLen; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += *ptr1++ * *ptr2; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = sum0; + + /* Decrement loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + + tapCnt = phaseLen - 1U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of FIR_Interpolate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c new file mode 100644 index 000000000..287d3471b --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c @@ -0,0 +1,106 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_interpolate_init_f32.c + * Description: Floating-point FIR interpolator initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Interpolate + @{ + */ + +/** + @brief Initialization function for the floating-point FIR interpolator. + @param[in,out] S points to an instance of the floating-point FIR interpolator structure + @param[in] L upsample factor + @param[in] numTaps number of filter coefficients in the filter + @param[in] pCoeffs points to the filter coefficient buffer + @param[in] pState points to the state buffer + @param[in] blockSize number of input samples to process per call + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : filter length numTaps is not a multiple of the interpolation factor L + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+      {b[numTaps-1], b[numTaps-2], b[numTaps-2], ..., b[1], b[0]}
+  
+ @par + The length of the filter numTaps must be a multiple of the interpolation factor L. + @par + pState points to the array of state variables. + pState is of length (numTaps/L)+blockSize-1 words + where blockSize is the number of input samples processed by each call to arm_fir_interpolate_f32(). + */ + +arm_status arm_fir_interpolate_init_f32( + arm_fir_interpolate_instance_f32 * S, + uint8_t L, + uint16_t numTaps, + const float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The filter length must be a multiple of the interpolation factor */ + if ((numTaps % L) != 0U) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign Interpolation factor */ + S->L = L; + + /* Assign polyPhaseLength */ + S->phaseLength = numTaps / L; + + /* Clear state buffer and size of buffer is always phaseLength + blockSize - 1 */ + memset(pState, 0, (blockSize + ((uint32_t) S->phaseLength - 1U)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + } + + return (status); +} + +/** + @} end of FIR_Interpolate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c new file mode 100644 index 000000000..7f43bbfa0 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c @@ -0,0 +1,106 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_interpolate_init_q15.c + * Description: Q15 FIR interpolator initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Interpolate + @{ + */ + +/** + @brief Initialization function for the Q15 FIR interpolator. + @param[in,out] S points to an instance of the Q15 FIR interpolator structure + @param[in] L upsample factor + @param[in] numTaps number of filter coefficients in the filter + @param[in] pCoeffs points to the filter coefficient buffer + @param[in] pState points to the state buffer + @param[in] blockSize number of input samples to process per call + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : filter length numTaps is not a multiple of the interpolation factor L + + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+      {b[numTaps-1], b[numTaps-2], b[numTaps-2], ..., b[1], b[0]}
+  
+ The length of the filter numTaps must be a multiple of the interpolation factor L. + @par + pState points to the array of state variables. + pState is of length (numTaps/L)+blockSize-1 words + where blockSize is the number of input samples processed by each call to arm_fir_interpolate_q15(). + */ + +arm_status arm_fir_interpolate_init_q15( + arm_fir_interpolate_instance_q15 * S, + uint8_t L, + uint16_t numTaps, + const q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The filter length must be a multiple of the interpolation factor */ + if ((numTaps % L) != 0U) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign Interpolation factor */ + S->L = L; + + /* Assign polyPhaseLength */ + S->phaseLength = numTaps / L; + + /* Clear state buffer and size of buffer is always phaseLength + blockSize - 1 */ + memset(pState, 0, (blockSize + ((uint32_t) S->phaseLength - 1U)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + } + + return (status); +} + +/** + @} end of FIR_Interpolate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c new file mode 100644 index 000000000..973e71594 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c @@ -0,0 +1,105 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_interpolate_init_q31.c + * Description: Q31 FIR interpolator initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Interpolate + @{ + */ + +/** + @brief Initialization function for the Q31 FIR interpolator. + @param[in,out] S points to an instance of the Q31 FIR interpolator structure + @param[in] L upsample factor + @param[in] numTaps number of filter coefficients in the filter + @param[in] pCoeffs points to the filter coefficient buffer + @param[in] pState points to the state buffer + @param[in] blockSize number of input samples to process per call + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : filter length numTaps is not a multiple of the interpolation factor L + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+      {b[numTaps-1], b[numTaps-2], b[numTaps-2], ..., b[1], b[0]}
+  
+ The length of the filter numTaps must be a multiple of the interpolation factor L. + @par + pState points to the array of state variables. + pState is of length (numTaps/L)+blockSize-1 words + where blockSize is the number of input samples processed by each call to arm_fir_interpolate_q31(). + */ + +arm_status arm_fir_interpolate_init_q31( + arm_fir_interpolate_instance_q31 * S, + uint8_t L, + uint16_t numTaps, + const q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize) +{ + arm_status status; + + /* The filter length must be a multiple of the interpolation factor */ + if ((numTaps % L) != 0U) + { + /* Set status as ARM_MATH_LENGTH_ERROR */ + status = ARM_MATH_LENGTH_ERROR; + } + else + { + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign Interpolation factor */ + S->L = L; + + /* Assign polyPhaseLength */ + S->phaseLength = numTaps / L; + + /* Clear state buffer and size of buffer is always phaseLength + blockSize - 1 */ + memset(pState, 0, (blockSize + ((uint32_t) S->phaseLength - 1U)) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + + status = ARM_MATH_SUCCESS; + } + + return (status); +} + +/** + @} end of FIR_Interpolate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_q15.c new file mode 100644 index 000000000..7efec9420 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_q15.c @@ -0,0 +1,479 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_interpolate_q15.c + * Description: Q15 FIR interpolation + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Interpolate + @{ + */ + +/** + @brief Processing function for the Q15 FIR interpolator. + @param[in] S points to an instance of the Q15 FIR interpolator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + +void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCur; /* Points to the current sample of the state */ + q15_t *ptr1; /* Temporary pointer for state buffer */ + const q15_t *ptr2; /* Temporary pointer for coefficient buffer */ + q63_t sum0; /* Accumulators */ + uint32_t i, blkCnt, tapCnt; /* Loop counters */ + uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + uint32_t j; + +#if defined (ARM_MATH_LOOPUNROLL) + q63_t acc0, acc1, acc2, acc3; + q15_t x0, x1, x2, x3; + q15_t c0, c1, c2, c3; +#endif + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (phaseLen - 1U); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = (S->L); + + while (i > 0U) + { + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2U; + + x0 = *(ptr1++); + x1 = *(ptr1++); + x2 = *(ptr1++); + + while (tapCnt > 0U) + { + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Read the coefficient */ + c1 = *(ptr2 + S->L); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x1 * c1; + acc1 += (q63_t) x2 * c1; + acc2 += (q63_t) x3 * c1; + acc3 += (q63_t) x0 * c1; + + /* Read the coefficient */ + c2 = *(ptr2 + S->L * 2); + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x2 * c2; + acc1 += (q63_t) x3 * c2; + acc2 += (q63_t) x0 * c2; + acc3 += (q63_t) x1 * c2; + + /* Read the coefficient */ + c3 = *(ptr2 + S->L * 3); + + /* Read the input sample */ + x2 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x3 * c3; + acc1 += (q63_t) x0 * c3; + acc2 += (q63_t) x1 * c3; + acc3 += (q63_t) x2 * c3; + + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += 4 * S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4U; + + while (tapCnt > 0U) + { + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* update states for next sample processing */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *(pDst ) = (q15_t) (__SSAT((acc0 >> 15), 16)); + *(pDst + S->L) = (q15_t) (__SSAT((acc1 >> 15), 16)); + *(pDst + 2 * S->L) = (q15_t) (__SSAT((acc2 >> 15), 16)); + *(pDst + 3 * S->L) = (q15_t) (__SSAT((acc3 >> 15), 16)); + + pDst++; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 4; + + pDst += S->L * 3; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = S->L; + while (i > 0U) + { + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. + Repeat until we've computed numTaps-(4*S->L) coefficients. */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + tapCnt = phaseLen >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += (q63_t) *ptr1++ * *ptr2; + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + sum0 += (q63_t) *ptr1++ * *ptr2; + ptr2 += S->L; + + sum0 += (q63_t) *ptr1++ * *ptr2; + ptr2 += S->L; + + sum0 += (q63_t) *ptr1++ * *ptr2; + ptr2 += S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + tapCnt = phaseLen % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = phaseLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += (q63_t) *ptr1++ * *ptr2; + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + tapCnt = (phaseLen - 1U) >> 2U; + + /* copy data */ + while (tapCnt > 0U) + { + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + tapCnt = (phaseLen - 1U) % 0x04U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (phaseLen - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#else +/* alternate version for CM0_FAMILY */ + + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCur; /* Points to the current sample of the state */ + q15_t *ptr1; /* Temporary pointer for state buffer */ + const q15_t *ptr2; /* Temporary pointer for coefficient buffer */ + q63_t sum0; /* Accumulators */ + uint32_t i, blkCnt, tapCnt; /* Loop counters */ + uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (phaseLen - 1U); + + /* Total number of intput samples */ + blkCnt = blockSize; + + /* Loop over the blockSize. */ + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while (i > 0U) + { + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (i - 1U); + + /* Loop over the polyPhase length */ + tapCnt = phaseLen; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += ((q63_t) *ptr1++ * *ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Store the result after converting to 1.15 format in the destination buffer. */ + *pDst++ = (q15_t) (__SSAT((sum0 >> 15), 16)); + + /* Decrement loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + + tapCnt = phaseLen - 1U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of FIR_Interpolate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_q31.c new file mode 100644 index 000000000..d6a8ca33a --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_interpolate_q31.c @@ -0,0 +1,481 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_interpolate_q31.c + * Description: Q31 FIR interpolation + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Interpolate + @{ + */ + +/** + @brief Processing function for the Q31 FIR interpolator. + @param[in] S points to an instance of the Q31 FIR interpolator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around rather than clip. + In order to avoid overflows completely the input signal must be scaled down by 1/(numTaps/L). + since numTaps/L additions occur per output sample. + After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. + */ + +void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + + q31_t *pState = S->pState; /* State pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCur; /* Points to the current sample of the state */ + q31_t *ptr1; /* Temporary pointer for state buffer */ + const q31_t *ptr2; /* Temporary pointer for coefficient buffer */ + q63_t sum0; /* Accumulators */ + uint32_t i, blkCnt, tapCnt; /* Loop counters */ + uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + uint32_t j; + +#if defined (ARM_MATH_LOOPUNROLL) + q63_t acc0, acc1, acc2, acc3; + q31_t x0, x1, x2, x3; + q31_t c0, c1, c2, c3; +#endif + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (phaseLen - 1U); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + *pStateCur++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = (S->L); + + while (i > 0U) + { + /* Set accumulator to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. Unroll by a factor of 4. + Repeat until we've computed numTaps-(4*S->L) coefficients. */ + tapCnt = phaseLen >> 2U; + + x0 = *(ptr1++); + x1 = *(ptr1++); + x2 = *(ptr1++); + + while (tapCnt > 0U) + { + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Read the coefficient */ + c1 = *(ptr2 + S->L); + + /* Read the input sample */ + x0 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x1 * c1; + acc1 += (q63_t) x2 * c1; + acc2 += (q63_t) x3 * c1; + acc3 += (q63_t) x0 * c1; + + /* Read the coefficient */ + c2 = *(ptr2 + S->L * 2); + + /* Read the input sample */ + x1 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x2 * c2; + acc1 += (q63_t) x3 * c2; + acc2 += (q63_t) x0 * c2; + acc3 += (q63_t) x1 * c2; + + /* Read the coefficient */ + c3 = *(ptr2 + S->L * 3); + + /* Read the input sample */ + x2 = *(ptr1++); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x3 * c3; + acc1 += (q63_t) x0 * c3; + acc2 += (q63_t) x1 * c3; + acc3 += (q63_t) x2 * c3; + + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += 4 * S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* If the polyPhase length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = phaseLen % 0x4U; + + while (tapCnt > 0U) + { + /* Read the input sample */ + x3 = *(ptr1++); + + /* Read the coefficient */ + c0 = *(ptr2); + + /* Perform the multiply-accumulate */ + acc0 += (q63_t) x0 * c0; + acc1 += (q63_t) x1 * c0; + acc2 += (q63_t) x2 * c0; + acc3 += (q63_t) x3 * c0; + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* update states for next sample processing */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *(pDst ) = (q31_t) (acc0 >> 31); + *(pDst + S->L) = (q31_t) (acc1 >> 31); + *(pDst + 2 * S->L) = (q31_t) (acc2 >> 31); + *(pDst + 3 * S->L) = (q31_t) (acc3 >> 31); + + pDst++; + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 4; + + pDst += S->L * 3; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + + /* Address modifier index of coefficient buffer */ + j = 1U; + + /* Loop over the Interpolation factor. */ + i = S->L; + while (i > 0U) + { + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (S->L - j); + + /* Loop over the polyPhase length. + Repeat until we've computed numTaps-(4*S->L) coefficients. */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + tapCnt = phaseLen >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += (q63_t) *ptr1++ * *ptr2; + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + sum0 += (q63_t) *ptr1++ * *ptr2; + ptr2 += S->L; + + sum0 += (q63_t) *ptr1++ * *ptr2; + ptr2 += S->L; + + sum0 += (q63_t) *ptr1++ * *ptr2; + ptr2 += S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + tapCnt = phaseLen % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = phaseLen; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += (q63_t) *ptr1++ * *ptr2; + + /* Upsampling is done by stuffing L-1 zeros between each sample. + * So instead of multiplying zeros with coefficients, + * Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (sum0 >> 31); + + /* Increment the address modifier index of coefficient buffer */ + j++; + + /* Decrement the loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last phaseLen - 1 samples to the satrt of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + tapCnt = (phaseLen - 1U) >> 2U; + + /* copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + tapCnt = (phaseLen - 1U) % 0x04U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (phaseLen - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#else +/* alternate version for CM0_FAMILY */ + + q31_t *pState = S->pState; /* State pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCur; /* Points to the current sample of the state */ + q31_t *ptr1; /* Temporary pointer for state buffer */ + const q31_t *ptr2; /* Temporary pointer for coefficient buffer */ + q63_t sum0; /* Accumulators */ + uint32_t i, blkCnt, tapCnt; /* Loop counters */ + uint32_t phaseLen = S->phaseLength; /* Length of each polyphase filter component */ + + /* S->pState buffer contains previous frame (phaseLen - 1) samples */ + /* pStateCur points to the location where the new input data should be written */ + pStateCur = S->pState + (phaseLen - 1U); + + /* Total number of intput samples */ + blkCnt = blockSize; + + /* Loop over the blockSize. */ + while (blkCnt > 0U) + { + /* Copy new input sample into the state buffer */ + *pStateCur++ = *pSrc++; + + /* Loop over the Interpolation factor. */ + i = S->L; + + while (i > 0U) + { + /* Set accumulator to zero */ + sum0 = 0; + + /* Initialize state pointer */ + ptr1 = pState; + + /* Initialize coefficient pointer */ + ptr2 = pCoeffs + (i - 1U); + + /* Loop over the polyPhase length */ + tapCnt = phaseLen; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum0 += ((q63_t) *ptr1++ * *ptr2); + + /* Increment the coefficient pointer by interpolation factor times. */ + ptr2 += S->L; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *pDst++ = (q31_t) (sum0 >> 31); + + /* Decrement loop counter */ + i--; + } + + /* Advance the state pointer by 1 + * to process the next group of interpolation factor number samples */ + pState = pState + 1; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + ** Now copy the last phaseLen - 1 samples to the start of the state buffer. + ** This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCur = S->pState; + + tapCnt = phaseLen - 1U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of FIR_Interpolate group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_f32.c new file mode 100644 index 000000000..a3d95c1ae --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_f32.c @@ -0,0 +1,453 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_lattice_f32.c + * Description: Processing function for floating-point FIR Lattice filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup FIR_Lattice Finite Impulse Response (FIR) Lattice Filters + + This set of functions implements Finite Impulse Response (FIR) lattice filters + for Q15, Q31 and floating-point data types. Lattice filters are used in a + variety of adaptive filter applications. The filter structure is feedforward and + the net impulse response is finite length. + The functions operate on blocks + of input and output data and each call to the function processes + blockSize samples through the filter. pSrc and + pDst point to input and output arrays containing blockSize values. + + @par Algorithm + \image html FIRLattice.gif "Finite Impulse Response Lattice filter" + The following difference equation is implemented: + @par +
+      f0[n] = g0[n] = x[n]
+      fm[n] = fm-1[n] + km * gm-1[n-1] for m = 1, 2, ...M
+      gm[n] = km * fm-1[n] + gm-1[n-1] for m = 1, 2, ...M
+      y[n] = fM[n]
+  
+ @par + pCoeffs points to tha array of reflection coefficients of size numStages. + Reflection Coefficients are stored in the following order. + @par +
+      {k1, k2, ..., kM}
+  
+ where M is number of stages + @par + pState points to a state array of size numStages. + The state variables (g values) hold previous inputs and are stored in the following order. +
+    {g0[n], g1[n], g2[n] ...gM-1[n]}
+  
+ The state variables are updated after each block of data is processed; the coefficients are untouched. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numStages, pCoeffs, pState. Also set all of the values in pState to zero. + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Set the values in the state buffer to zeros and then manually initialize the instance structure as follows: +
+      arm_fir_lattice_instance_f32 S = {numStages, pState, pCoeffs};
+      arm_fir_lattice_instance_q31 S = {numStages, pState, pCoeffs};
+      arm_fir_lattice_instance_q15 S = {numStages, pState, pCoeffs};
+  
+ @par + where numStages is the number of stages in the filter; + pState is the address of the state buffer; + pCoeffs is the address of the coefficient buffer. + + @par Fixed-Point Behavior + Care must be taken when using the fixed-point versions of the FIR Lattice filter functions. + In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + Refer to the function specific documentation below for usage guidelines. + */ + +/** + @addtogroup FIR_Lattice + @{ + */ + +/** + @brief Processing function for the floating-point FIR lattice filter. + @param[in] S points to an instance of the floating-point FIR lattice structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ + +void arm_fir_lattice_f32( + const arm_fir_lattice_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *px; /* Temporary state pointer */ + const float32_t *pk; /* Temporary coefficient pointer */ + uint32_t numStages = S->numStages; /* Number of stages in the filter */ + uint32_t blkCnt, stageCnt; /* Loop counters */ + float32_t fcurr0, fnext0, gnext0, gcurr0; /* Temporary variables */ + +#if defined (ARM_MATH_LOOPUNROLL) + float32_t fcurr1, fnext1, gnext1; /* Temporary variables for second sample in loop unrolling */ + float32_t fcurr2, fnext2, gnext2; /* Temporary variables for third sample in loop unrolling */ + float32_t fcurr3, fnext3, gnext3; /* Temporary variables for fourth sample in loop unrolling */ +#endif + + gcurr0 = 0.0f; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Read two samples from input buffer */ + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + fcurr1 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* Read g0(n-1) from state buffer */ + gcurr0 = *px; + + /* Process first sample for first tap */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (gcurr0 * (*pk)) + fcurr0; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = (fcurr0 * (*pk)) + gcurr0; + + /* Process second sample for first tap */ + fnext1 = (fcurr0 * (*pk)) + fcurr1; + gnext1 = (fcurr1 * (*pk)) + fcurr0; + + /* Read next two samples from input buffer */ + /* f0(n+2) = x(n+2) */ + fcurr2 = *pSrc++; + fcurr3 = *pSrc++; + + /* Process third sample for first tap */ + fnext2 = (fcurr1 * (*pk)) + fcurr2; + gnext2 = (fcurr2 * (*pk)) + fcurr1; + + /* Process fourth sample for first tap */ + fnext3 = (fcurr2 * (*pk )) + fcurr3; + gnext3 = (fcurr3 * (*pk++)) + fcurr2; + + /* Copy only last input sample into the state buffer + which will be used for next samples processing */ + *px++ = fcurr3; + + /* Update of f values for next coefficient set processing */ + fcurr0 = fnext0; + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + + /* Loop unrolling. Process 4 taps at a time . */ + stageCnt = (numStages - 1U) >> 2U; + + /* Loop over the number of taps. Unroll by a factor of 4. + Repeat until we've computed numStages-3 coefficients. */ + + /* Process 2nd, 3rd, 4th and 5th taps ... here */ + while (stageCnt > 0U) + { + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext3; + + /* Process first sample for 2nd, 6th .. tap */ + /* Sample processing for K2, K6.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext0 = (gcurr0 * (*pk)) + fcurr0; + + /* Process second sample for 2nd, 6th .. tap */ + /* for sample 2 processing */ + fnext1 = (gnext0 * (*pk)) + fcurr1; + + /* Process third sample for 2nd, 6th .. tap */ + fnext2 = (gnext1 * (*pk)) + fcurr2; + + /* Process fourth sample for 2nd, 6th .. tap */ + fnext3 = (gnext2 * (*pk)) + fcurr3; + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + /* Calculation of state values for next stage */ + gnext3 = (fcurr3 * (*pk)) + gnext2; + + gnext2 = (fcurr2 * (*pk)) + gnext1; + + gnext1 = (fcurr1 * (*pk)) + gnext0; + + gnext0 = (fcurr0 * (*pk++)) + gcurr0; + + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr0 = *px; + + /* save g2(n) in state buffer */ + *px++ = gnext3; + + /* Sample processing for K3, K7.... */ + /* Process first sample for 3rd, 7th .. tap */ + /* f3(n) = f2(n) + K3 * g2(n-1) */ + fcurr0 = (gcurr0 * (*pk)) + fnext0; + + /* Process second sample for 3rd, 7th .. tap */ + fcurr1 = (gnext0 * (*pk)) + fnext1; + + /* Process third sample for 3rd, 7th .. tap */ + fcurr2 = (gnext1 * (*pk)) + fnext2; + + /* Process fourth sample for 3rd, 7th .. tap */ + fcurr3 = (gnext2 * (*pk)) + fnext3; + + /* Calculation of state values for next stage */ + /* g3(n) = f2(n) * K3 + g2(n-1) */ + gnext3 = (fnext3 * (*pk)) + gnext2; + + gnext2 = (fnext2 * (*pk)) + gnext1; + + gnext1 = (fnext1 * (*pk)) + gnext0; + + gnext0 = (fnext0 * (*pk++)) + gcurr0; + + + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr0 = *px; + + /* save g3(n) in state buffer */ + *px++ = gnext3; + + /* Sample processing for K4, K8.... */ + /* Process first sample for 4th, 8th .. tap */ + /* f4(n) = f3(n) + K4 * g3(n-1) */ + fnext0 = (gcurr0 * (*pk)) + fcurr0; + + /* Process second sample for 4th, 8th .. tap */ + /* for sample 2 processing */ + fnext1 = (gnext0 * (*pk)) + fcurr1; + + /* Process third sample for 4th, 8th .. tap */ + fnext2 = (gnext1 * (*pk)) + fcurr2; + + /* Process fourth sample for 4th, 8th .. tap */ + fnext3 = (gnext2 * (*pk)) + fcurr3; + + /* g4(n) = f3(n) * K4 + g3(n-1) */ + /* Calculation of state values for next stage */ + gnext3 = (fcurr3 * (*pk)) + gnext2; + + gnext2 = (fcurr2 * (*pk)) + gnext1; + + gnext1 = (fcurr1 * (*pk)) + gnext0; + + gnext0 = (fcurr0 * (*pk++)) + gcurr0; + + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr0 = *px; + + /* save g4(n) in state buffer */ + *px++ = gnext3; + + /* Sample processing for K5, K9.... */ + /* Process first sample for 5th, 9th .. tap */ + /* f5(n) = f4(n) + K5 * g4(n-1) */ + fcurr0 = (gcurr0 * (*pk)) + fnext0; + + /* Process second sample for 5th, 9th .. tap */ + fcurr1 = (gnext0 * (*pk)) + fnext1; + + /* Process third sample for 5th, 9th .. tap */ + fcurr2 = (gnext1 * (*pk)) + fnext2; + + /* Process fourth sample for 5th, 9th .. tap */ + fcurr3 = (gnext2 * (*pk)) + fnext3; + + /* Calculation of state values for next stage */ + /* g5(n) = f4(n) * K5 + g4(n-1) */ + gnext3 = (fnext3 * (*pk)) + gnext2; + + gnext2 = (fnext2 * (*pk)) + gnext1; + + gnext1 = (fnext1 * (*pk)) + gnext0; + + gnext0 = (fnext0 * (*pk++)) + gcurr0; + + stageCnt--; + } + + /* If the (filter length -1) is not a multiple of 4, compute the remaining filter taps */ + stageCnt = (numStages - 1U) % 0x4U; + + while (stageCnt > 0U) + { + gcurr0 = *px; + + /* save g value in state buffer */ + *px++ = gnext3; + + /* Process four samples for last three taps here */ + fnext0 = (gcurr0 * (*pk)) + fcurr0; + + fnext1 = (gnext0 * (*pk)) + fcurr1; + + fnext2 = (gnext1 * (*pk)) + fcurr2; + + fnext3 = (gnext2 * (*pk)) + fcurr3; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext3 = (fcurr3 * (*pk)) + gnext2; + + gnext2 = (fcurr2 * (*pk)) + gnext1; + + gnext1 = (fcurr1 * (*pk)) + gnext0; + + gnext0 = (fcurr0 * (*pk++)) + gcurr0; + + /* Update of f values for next coefficient set processing */ + fcurr0 = fnext0; + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + + stageCnt--; + } + + /* The results in the 4 accumulators, store in the destination buffer. */ + /* y(n) = fN(n) */ + *pDst++ = fcurr0; + *pDst++ = fcurr1; + *pDst++ = fcurr2; + *pDst++ = fcurr3; + + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* read g2(n) from state buffer */ + gcurr0 = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (gcurr0 * (*pk)) + fcurr0; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = (fcurr0 * (*pk++)) + gcurr0; + + /* save g1(n) in state buffer */ + *px++ = fcurr0; + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt = (numStages - 1U); + + /* stage loop */ + while (stageCnt > 0U) + { + /* read g2(n) from state buffer */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext0; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext0 = (gcurr0 * (*pk)) + fcurr0; + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext0 = (fcurr0 * (*pk++)) + gcurr0; + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt--; + } + + /* y(n) = fN(n) */ + *pDst++ = fcurr0; + + blkCnt--; + } + +} + +/** + @} end of FIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_f32.c new file mode 100644 index 000000000..7929629a4 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_f32.c @@ -0,0 +1,70 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_lattice_init_f32.c + * Description: Floating-point FIR Lattice filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Lattice + @{ + */ + +/** + @brief Initialization function for the floating-point FIR lattice filter. + @param[in] S points to an instance of the floating-point FIR lattice structure + @param[in] numStages number of filter stages + @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages + @param[in] pState points to the state buffer. The array is of length numStages + @return none + */ + +void arm_fir_lattice_init_f32( + arm_fir_lattice_instance_f32 * S, + uint16_t numStages, + const float32_t * pCoeffs, + float32_t * pState) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always numStages */ + memset(pState, 0, (numStages) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_q15.c new file mode 100644 index 000000000..5c80dff60 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_q15.c @@ -0,0 +1,70 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_lattice_init_q15.c + * Description: Q15 FIR Lattice filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Lattice + @{ + */ + +/** + @brief Initialization function for the Q15 FIR lattice filter. + @param[in] S points to an instance of the Q15 FIR lattice structure + @param[in] numStages number of filter stages + @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages + @param[in] pState points to the state buffer. The array is of length numStages + @return none + */ + +void arm_fir_lattice_init_q15( + arm_fir_lattice_instance_q15 * S, + uint16_t numStages, + const q15_t * pCoeffs, + q15_t * pState) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always numStages */ + memset(pState, 0, (numStages) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_q31.c new file mode 100644 index 000000000..476296d60 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_init_q31.c @@ -0,0 +1,70 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_lattice_init_q31.c + * Description: Q31 FIR lattice filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Lattice + @{ + */ + +/** + @brief Initialization function for the Q31 FIR lattice filter. + @param[in] S points to an instance of the Q31 FIR lattice structure + @param[in] numStages number of filter stages + @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages + @param[in] pState points to the state buffer. The array is of length numStages + @return none + */ + +void arm_fir_lattice_init_q31( + arm_fir_lattice_instance_q31 * S, + uint16_t numStages, + const q31_t * pCoeffs, + q31_t * pState) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always numStages */ + memset(pState, 0, (numStages) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_q15.c new file mode 100644 index 000000000..42e7c0d48 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_q15.c @@ -0,0 +1,506 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_lattice_q15.c + * Description: Q15 FIR lattice filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Lattice + @{ + */ + +/** + @brief Processing function for Q15 FIR lattice filter. + @param[in] S points to an instance of the Q15 FIR lattice structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ + +void arm_fir_lattice_q15( + const arm_fir_lattice_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *px; /* Temporary state pointer */ + const q15_t *pk; /* Temporary coefficient pointer */ + uint32_t numStages = S->numStages; /* Number of stages in the filter */ + uint32_t blkCnt, stageCnt; /* Loop counters */ + q31_t fcurr0, fnext0, gnext0, gcurr0; /* Temporary variables */ + +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t fcurr1, fnext1, gnext1; /* Temporary variables for second sample in loop unrolling */ + q31_t fcurr2, fnext2, gnext2; /* Temporary variables for third sample in loop unrolling */ + q31_t fcurr3, fnext3, gnext3; /* Temporary variables for fourth sample in loop unrolling */ +#endif + + gcurr0 = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Read two samples from input buffer */ + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + fcurr1 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* Read g0(n-1) from state buffer */ + gcurr0 = *px; + + /* Process first sample for first tap */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext0, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = (q31_t) ((fcurr0 * (*pk)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* Process second sample for first tap */ + fnext1 = (q31_t) ((fcurr0 * (*pk)) >> 15U) + fcurr1; + fnext1 = __SSAT(fnext1, 16); + gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + fcurr0; + gnext1 = __SSAT(gnext1, 16); + + /* Read next two samples from input buffer */ + /* f0(n+2) = x(n+2) */ + fcurr2 = *pSrc++; + fcurr3 = *pSrc++; + + /* Process third sample for first tap */ + fnext2 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + fcurr2; + fnext2 = __SSAT(fnext2, 16); + gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + fcurr1; + gnext2 = __SSAT(gnext2, 16); + + /* Process fourth sample for first tap */ + fnext3 = (q31_t) ((fcurr2 * (*pk )) >> 15U) + fcurr3; + fnext3 = __SSAT(fnext3, 16); + gnext3 = (q31_t) ((fcurr3 * (*pk++)) >> 15U) + fcurr2; + gnext3 = __SSAT(gnext3, 16); + + /* Copy only last input sample into the state buffer + which will be used for next samples processing */ + *px++ = (q15_t) fcurr3; + + /* Update of f values for next coefficient set processing */ + fcurr0 = fnext0; + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + + /* Loop unrolling. Process 4 taps at a time . */ + stageCnt = (numStages - 1U) >> 2U; + + /* Loop over the number of taps. Unroll by a factor of 4. + Repeat until we've computed numStages-3 coefficients. */ + + /* Process 2nd, 3rd, 4th and 5th taps ... here */ + while (stageCnt > 0U) + { + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext3; + + /* Process first sample for 2nd, 6th .. tap */ + /* Sample processing for K2, K6.... */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext0, 16); + + /* Process second sample for 2nd, 6th .. tap */ + /* for sample 2 processing */ + fnext1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fcurr1; + fnext1 = __SSAT(fnext1, 16); + + /* Process third sample for 2nd, 6th .. tap */ + fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fcurr2; + fnext2 = __SSAT(fnext2, 16); + + /* Process fourth sample for 2nd, 6th .. tap */ + fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fcurr3; + fnext3 = __SSAT(fnext3, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + /* Calculation of state values for next stage */ + gnext3 = (q31_t) ((fcurr3 * (*pk)) >> 15U) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + gnext1; + gnext2 = __SSAT(gnext2, 16); + + gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + gnext0; + gnext1 = __SSAT(gnext1, 16); + + gnext0 = (q31_t) ((fcurr0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext3; + + /* Sample processing for K3, K7.... */ + /* Process first sample for 3rd, 7th .. tap */ + /* f3(n) = f2(n) + K3 * g2(n-1) */ + fcurr0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fnext0; + fcurr0 = __SSAT(fcurr0, 16); + + /* Process second sample for 3rd, 7th .. tap */ + fcurr1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fnext1; + fcurr1 = __SSAT(fcurr1, 16); + + /* Process third sample for 3rd, 7th .. tap */ + fcurr2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fnext2; + fcurr2 = __SSAT(fcurr2, 16); + + /* Process fourth sample for 3rd, 7th .. tap */ + fcurr3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fnext3; + fcurr3 = __SSAT(fcurr3, 16); + + /* Calculation of state values for next stage */ + /* g3(n) = f2(n) * K3 + g2(n-1) */ + gnext3 = (q31_t) ((fnext3 * (*pk)) >> 15U) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fnext2 * (*pk)) >> 15U) + gnext1; + gnext2 = __SSAT(gnext2, 16); + + gnext1 = (q31_t) ((fnext1 * (*pk)) >> 15U) + gnext0; + gnext1 = __SSAT(gnext1, 16); + + gnext0 = (q31_t) ((fnext0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext3; + + /* Sample processing for K4, K8.... */ + /* Process first sample for 4th, 8th .. tap */ + /* f4(n) = f3(n) + K4 * g3(n-1) */ + fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext0, 16); + + /* Process second sample for 4th, 8th .. tap */ + /* for sample 2 processing */ + fnext1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fcurr1; + fnext1 = __SSAT(fnext1, 16); + + /* Process third sample for 4th, 8th .. tap */ + fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fcurr2; + fnext2 = __SSAT(fnext2, 16); + + /* Process fourth sample for 4th, 8th .. tap */ + fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fcurr3; + fnext3 = __SSAT(fnext3, 16); + + /* g4(n) = f3(n) * K4 + g3(n-1) */ + /* Calculation of state values for next stage */ + gnext3 = (q31_t) ((fcurr3 * (*pk)) >> 15U) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + gnext1; + gnext2 = __SSAT(gnext2, 16); + + gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + gnext0; + gnext1 = __SSAT(gnext1, 16); + + gnext0 = (q31_t) ((fcurr0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr0 = *px; + + /* save g4(n) in state buffer */ + *px++ = (q15_t) gnext3; + + /* Sample processing for K5, K9.... */ + /* Process first sample for 5th, 9th .. tap */ + /* f5(n) = f4(n) + K5 * g4(n-1) */ + fcurr0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fnext0; + fcurr0 = __SSAT(fcurr0, 16); + + /* Process second sample for 5th, 9th .. tap */ + fcurr1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fnext1; + fcurr1 = __SSAT(fcurr1, 16); + + /* Process third sample for 5th, 9th .. tap */ + fcurr2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fnext2; + fcurr2 = __SSAT(fcurr2, 16); + + /* Process fourth sample for 5th, 9th .. tap */ + fcurr3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fnext3; + fcurr3 = __SSAT(fcurr3, 16); + + /* Calculation of state values for next stage */ + /* g5(n) = f4(n) * K5 + g4(n-1) */ + gnext3 = (q31_t) ((fnext3 * (*pk)) >> 15U) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fnext2 * (*pk)) >> 15U) + gnext1; + gnext2 = __SSAT(gnext2, 16); + + gnext1 = (q31_t) ((fnext1 * (*pk)) >> 15U) + gnext0; + gnext1 = __SSAT(gnext1, 16); + + gnext0 = (q31_t) ((fnext0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + stageCnt--; + } + + /* If the (filter length -1) is not a multiple of 4, compute the remaining filter taps */ + stageCnt = (numStages - 1U) % 0x4U; + + while (stageCnt > 0U) + { + gcurr0 = *px; + + /* save g value in state buffer */ + *px++ = (q15_t) gnext3; + + /* Process four samples for last three taps here */ + fnext0 = (q31_t) ((gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext0, 16); + + fnext1 = (q31_t) ((gnext0 * (*pk)) >> 15U) + fcurr1; + fnext1 = __SSAT(fnext1, 16); + + fnext2 = (q31_t) ((gnext1 * (*pk)) >> 15U) + fcurr2; + fnext2 = __SSAT(fnext2, 16); + + fnext3 = (q31_t) ((gnext2 * (*pk)) >> 15U) + fcurr3; + fnext3 = __SSAT(fnext3, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext3 = (q31_t) ((fcurr3 * (*pk)) >> 15U) + gnext2; + gnext3 = __SSAT(gnext3, 16); + + gnext2 = (q31_t) ((fcurr2 * (*pk)) >> 15U) + gnext1; + gnext2 = __SSAT(gnext2, 16); + + gnext1 = (q31_t) ((fcurr1 * (*pk)) >> 15U) + gnext0; + gnext1 = __SSAT(gnext1, 16); + + gnext0 = (q31_t) ((fcurr0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* Update of f values for next coefficient set processing */ + fcurr0 = fnext0; + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + + stageCnt--; + } + + /* The results in the 4 accumulators, store in the destination buffer. */ + /* y(n) = fN(n) */ + +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pDst, __PKHBT(fcurr0, fcurr1, 16)); + write_q15x2_ia (&pDst, __PKHBT(fcurr2, fcurr3, 16)); +#else + write_q15x2_ia (&pDst, __PKHBT(fcurr1, fcurr0, 16)); + write_q15x2_ia (&pDst, __PKHBT(fcurr3, fcurr2, 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* read g2(n) from state buffer */ + gcurr0 = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (((q31_t) gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext0, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = (((q31_t) fcurr0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* save g1(n) in state buffer */ + *px++ = (q15_t) fcurr0; + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt = (numStages - 1U); + + /* stage loop */ + while (stageCnt > 0U) + { + /* read g2(n) from state buffer */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = (q15_t) gnext0; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext0 = (((q31_t) gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext0, 16); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext0 = (((q31_t) fcurr0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt--; + } + + /* y(n) = fN(n) */ + *pDst++ = __SSAT(fcurr0, 16); + + blkCnt--; + } + +#else +/* alternate version for CM0_FAMILY */ + + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* read g0(n-1) from state buffer */ + gcurr0 = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = ((gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext, 16); + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = ((fcurr0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* save f0(n) in state buffer */ + *px++ = (q15_t) fcurr0; + + /* f1(n) is saved in fcurr for next stage processing */ + fcurr0 = fnext0; + + stageCnt = (numStages - 1U); + + /* stage loop */ + while (stageCnt > 0U) + { + /* read g1(n-1) from state buffer */ + gcurr0 = *px; + + /* save g0(n-1) in state buffer */ + *px++ = (q15_t) gnext0; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext0 = ((gcurr0 * (*pk)) >> 15U) + fcurr0; + fnext0 = __SSAT(fnext0, 16); + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext0 = ((fcurr0 * (*pk++)) >> 15U) + gcurr0; + gnext0 = __SSAT(gnext0, 16); + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt--; + } + + /* y(n) = fN(n) */ + *pDst++ = __SSAT(fcurr0, 16); + + blkCnt--; + } + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of FIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_q31.c new file mode 100644 index 000000000..c8d28d7c7 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_lattice_q31.c @@ -0,0 +1,505 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_lattice_q31.c + * Description: Q31 FIR lattice filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Lattice + @{ + */ + +/** + @brief Processing function for the Q31 FIR lattice filter. + @param[in] S points to an instance of the Q31 FIR lattice structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + In order to avoid overflows the input signal must be scaled down by 2*log2(numStages) bits. + */ + +void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *px; /* Temporary state pointer */ + const q31_t *pk; /* Temporary coefficient pointer */ + uint32_t numStages = S->numStages; /* Number of stages in the filter */ + uint32_t blkCnt, stageCnt; /* Loop counters */ + q31_t fcurr0, fnext0, gnext0, gcurr0; /* Temporary variables */ + +#if (1) +//#if !defined(ARM_MATH_CM0_FAMILY) + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t fcurr1, fnext1, gnext1; /* Temporary variables for second sample in loop unrolling */ + q31_t fcurr2, fnext2, gnext2; /* Temporary variables for third sample in loop unrolling */ + q31_t fcurr3, fnext3, gnext3; /* Temporary variables for fourth sample in loop unrolling */ +#endif + + gcurr0 = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Read two samples from input buffer */ + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + fcurr1 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* Read g0(n-1) from state buffer */ + gcurr0 = *px; + + /* Process first sample for first tap */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext0 << 1U) + fcurr0; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* Process second sample for first tap */ + fnext1 = (q31_t) (((q63_t) fcurr0 * (*pk)) >> 32U); + fnext1 = (fnext1 << 1U) + fcurr1; + gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); + gnext1 = (gnext1 << 1U) + fcurr0; + + /* Read next two samples from input buffer */ + /* f0(n+2) = x(n+2) */ + fcurr2 = *pSrc++; + fcurr3 = *pSrc++; + + /* Process third sample for first tap */ + fnext2 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); + fnext2 = (fnext2 << 1U) + fcurr2; + gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); + gnext2 = (gnext2 << 1U) + fcurr1; + + /* Process fourth sample for first tap */ + fnext3 = (q31_t) (((q63_t) fcurr2 * (*pk )) >> 32U); + fnext3 = (fnext3 << 1U) + fcurr3; + gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk++)) >> 32U); + gnext3 = (gnext3 << 1U) + fcurr2; + + /* Copy only last input sample into the state buffer + which will be used for next samples processing */ + *px++ = fcurr3; + + /* Update of f values for next coefficient set processing */ + fcurr0 = fnext0; + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + + /* Loop unrolling. Process 4 taps at a time . */ + stageCnt = (numStages - 1U) >> 2U; + + /* Loop over the number of taps. Unroll by a factor of 4. + Repeat until we've computed numStages-3 coefficients. */ + + /* Process 2nd, 3rd, 4th and 5th taps ... here */ + while (stageCnt > 0U) + { + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext3; + + /* Process first sample for 2nd, 6th .. tap */ + /* Sample processing for K2, K6.... */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext0 << 1U) + fcurr0; + + /* Process second sample for 2nd, 6th .. tap */ + /* for sample 2 processing */ + fnext1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); + fnext1 = (fnext1 << 1U) + fcurr1; + + /* Process third sample for 2nd, 6th .. tap */ + fnext2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); + fnext2 = (fnext2 << 1U) + fcurr2; + + /* Process fourth sample for 2nd, 6th .. tap */ + fnext3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); + fnext3 = (fnext3 << 1U) + fcurr3; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + /* Calculation of state values for next stage */ + gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk)) >> 32U); + gnext3 = (gnext3 << 1U) + gnext2; + + gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); + gnext2 = (gnext2 << 1U) + gnext1; + + gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); + gnext1 = (gnext1 << 1U) + gnext0; + + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext3; + + /* Sample processing for K3, K7.... */ + /* Process first sample for 3rd, 7th .. tap */ + /* f3(n) = f2(n) + K3 * g2(n-1) */ + fcurr0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fcurr0 = (fcurr0 << 1U) + fnext0; + + /* Process second sample for 3rd, 7th .. tap */ + fcurr1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); + fcurr1 = (fcurr1 << 1U) + fnext1; + + /* Process third sample for 3rd, 7th .. tap */ + fcurr2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); + fcurr2 = (fcurr2 << 1U) + fnext2; + + /* Process fourth sample for 3rd, 7th .. tap */ + fcurr3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); + fcurr3 = (fcurr3 << 1U) + fnext3; + + /* Calculation of state values for next stage */ + /* g3(n) = f2(n) * K3 + g2(n-1) */ + gnext3 = (q31_t) (((q63_t) fnext3 * (*pk)) >> 32U); + gnext3 = (gnext3 << 1U) + gnext2; + + gnext2 = (q31_t) (((q63_t) fnext2 * (*pk)) >> 32U); + gnext2 = (gnext2 << 1U) + gnext1; + + gnext1 = (q31_t) (((q63_t) fnext1 * (*pk)) >> 32U); + gnext1 = (gnext1 << 1U) + gnext0; + + gnext0 = (q31_t) (((q63_t) fnext0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* Read g1(n-1), g3(n-1) .... from state */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext3; + + /* Sample processing for K4, K8.... */ + /* Process first sample for 4th, 8th .. tap */ + /* f4(n) = f3(n) + K4 * g3(n-1) */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext0 << 1U) + fcurr0; + + /* Process second sample for 4th, 8th .. tap */ + /* for sample 2 processing */ + fnext1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); + fnext1 = (fnext1 << 1U) + fcurr1; + + /* Process third sample for 4th, 8th .. tap */ + fnext2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); + fnext2 = (fnext2 << 1U) + fcurr2; + + /* Process fourth sample for 4th, 8th .. tap */ + fnext3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); + fnext3 = (fnext3 << 1U) + fcurr3; + + /* g4(n) = f3(n) * K4 + g3(n-1) */ + /* Calculation of state values for next stage */ + gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk)) >> 32U); + gnext3 = (gnext3 << 1U) + gnext2; + + gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); + gnext2 = (gnext2 << 1U) + gnext1; + + gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); + gnext1 = (gnext1 << 1U) + gnext0; + + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* Read g2(n-1), g4(n-1) .... from state */ + gcurr0 = *px; + + /* save g4(n) in state buffer */ + *px++ = gnext3; + + /* Sample processing for K5, K9.... */ + /* Process first sample for 5th, 9th .. tap */ + /* f5(n) = f4(n) + K5 * g4(n-1) */ + fcurr0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fcurr0 = (fcurr0 << 1U) + fnext0; + + /* Process second sample for 5th, 9th .. tap */ + fcurr1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); + fcurr1 = (fcurr1 << 1U) + fnext1; + + /* Process third sample for 5th, 9th .. tap */ + fcurr2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); + fcurr2 = (fcurr2 << 1U) + fnext2; + + /* Process fourth sample for 5th, 9th .. tap */ + fcurr3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); + fcurr3 = (fcurr3 << 1U) + fnext3; + + /* Calculation of state values for next stage */ + /* g5(n) = f4(n) * K5 + g4(n-1) */ + gnext3 = (q31_t) (((q63_t) fnext3 * (*pk)) >> 32U); + gnext3 = (gnext3 << 1U) + gnext2; + + gnext2 = (q31_t) (((q63_t) fnext2 * (*pk)) >> 32U); + gnext2 = (gnext2 << 1U) + gnext1; + + gnext1 = (q31_t) (((q63_t) fnext1 * (*pk)) >> 32U); + gnext1 = (gnext1 << 1U) + gnext0; + + gnext0 = (q31_t) (((q63_t) fnext0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + stageCnt--; + } + + /* If the (filter length -1) is not a multiple of 4, compute the remaining filter taps */ + stageCnt = (numStages - 1U) % 0x4U; + + while (stageCnt > 0U) + { + gcurr0 = *px; + + /* save g value in state buffer */ + *px++ = gnext3; + + /* Process four samples for last three taps here */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext0 << 1U) + fcurr0; + + fnext1 = (q31_t) (((q63_t) gnext0 * (*pk)) >> 32U); + fnext1 = (fnext1 << 1U) + fcurr1; + + fnext2 = (q31_t) (((q63_t) gnext1 * (*pk)) >> 32U); + fnext2 = (fnext2 << 1U) + fcurr2; + + fnext3 = (q31_t) (((q63_t) gnext2 * (*pk)) >> 32U); + fnext3 = (fnext3 << 1U) + fcurr3; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext3 = (q31_t) (((q63_t) fcurr3 * (*pk)) >> 32U); + gnext3 = (gnext3 << 1U) + gnext2; + + gnext2 = (q31_t) (((q63_t) fcurr2 * (*pk)) >> 32U); + gnext2 = (gnext2 << 1U) + gnext1; + + gnext1 = (q31_t) (((q63_t) fcurr1 * (*pk)) >> 32U); + gnext1 = (gnext1 << 1U) + gnext0; + + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* Update of f values for next coefficient set processing */ + fcurr0 = fnext0; + fcurr1 = fnext1; + fcurr2 = fnext2; + fcurr3 = fnext3; + + stageCnt--; + } + + /* The results in the 4 accumulators, store in the destination buffer. */ + /* y(n) = fN(n) */ + *pDst++ = fcurr0; + *pDst++ = fcurr1; + *pDst++ = fcurr2; + *pDst++ = fcurr3; + + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* read g2(n) from state buffer */ + gcurr0 = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext0 << 1U) + fcurr0; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* save g1(n) in state buffer */ + *px++ = fcurr0; + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt = (numStages - 1U); + + /* stage loop */ + while (stageCnt > 0U) + { + /* read g2(n) from state buffer */ + gcurr0 = *px; + + /* save g1(n) in state buffer */ + *px++ = gnext0; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext0 << 1U) + fcurr0; + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt--; + } + + /* y(n) = fN(n) */ + *pDst++ = fcurr0; + + blkCnt--; + } + +#else +/* alternate version for CM0_FAMILY */ + + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* f0(n) = x(n) */ + fcurr0 = *pSrc++; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coeff pointer */ + pk = pCoeffs; + + /* read g0(n-1) from state buffer */ + gcurr0 = *px; + + /* for sample 1 processing */ + /* f1(n) = f0(n) + K1 * g0(n-1) */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext << 1U) + fcurr0; + + /* g1(n) = f0(n) * K1 + g0(n-1) */ + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* save f0(n) in state buffer */ + *px++ = fcurr0; + + /* f1(n) is saved in fcurr for next stage processing */ + fcurr0 = fnext0; + + stageCnt = (numStages - 1U); + + /* stage loop */ + while (stageCnt > 0U) + { + /* read g1(n-1) from state buffer */ + gcurr0 = *px; + + /* save g0(n-1) in state buffer */ + *px++ = gnext0; + + /* Sample processing for K2, K3.... */ + /* f2(n) = f1(n) + K2 * g1(n-1) */ + fnext0 = (q31_t) (((q63_t) gcurr0 * (*pk)) >> 32U); + fnext0 = (fnext0 << 1U) + fcurr0; + + /* g2(n) = f1(n) * K2 + g1(n-1) */ + gnext0 = (q31_t) (((q63_t) fcurr0 * (*pk++)) >> 32U); + gnext0 = (gnext0 << 1U) + gcurr0; + + /* f1(n) is saved in fcurr0 for next stage processing */ + fcurr0 = fnext0; + + stageCnt--; + } + + /* y(n) = fN(n) */ + *pDst++ = fcurr0; + + blkCnt--; + } + +#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */ + +} + +/** + @} end of FIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_q7.c new file mode 100644 index 000000000..5f6d354c9 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_q7.c @@ -0,0 +1,323 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_q7.c + * Description: Q7 FIR filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR + @{ + */ + +/** + @brief Processing function for Q7 FIR filter. + @param[in] S points to an instance of the Q7 FIR filter structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + Both coefficients and state variables are represented in 1.7 format and multiplications yield a 2.14 result. + The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + The accumulator is converted to 18.7 format by discarding the low 7 bits. + Finally, the result is truncated to 1.7 format. + */ + +void arm_fir_q7( + const arm_fir_instance_q7 * S, + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + q7_t *pState = S->pState; /* State pointer */ + const q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q7_t *pStateCurnt; /* Points to the current sample of the state */ + q7_t *px; /* Temporary pointer for state buffer */ + const q7_t *pb; /* Temporary pointer for coefficient buffer */ + q31_t acc0; /* Accumulators */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t i, tapCnt, blkCnt; /* Loop counters */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t acc1, acc2, acc3; /* Accumulators */ + q7_t x0, x1, x2, x3, c0; /* Temporary variables to hold state */ +#endif + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 output values simultaneously. + * The variables acc0 ... acc3 hold output values that are being computed: + * + * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] + * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1] + * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2] + * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3] + */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Copy 4 new input samples into the state buffer. */ + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + *pStateCurnt++ = *pSrc++; + + /* Set all accumulators to zero */ + acc0 = 0; + acc1 = 0; + acc2 = 0; + acc3 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the first 3 samples from the state buffer: + * x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2] */ + x0 = *px++; + x1 = *px++; + x2 = *px++; + + /* Loop unrolling. Process 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Loop over the number of taps. Unroll by a factor of 4. + Repeat until we've computed numTaps-4 coefficients. */ + while (tapCnt > 0U) + { + /* Read the b[numTaps] coefficient */ + c0 = *pb; + + /* Read x[n-numTaps-3] sample */ + x3 = *px; + + /* acc0 += b[numTaps] * x[n-numTaps] */ + acc0 += ((q15_t) x0 * c0); + + /* acc1 += b[numTaps] * x[n-numTaps-1] */ + acc1 += ((q15_t) x1 * c0); + + /* acc2 += b[numTaps] * x[n-numTaps-2] */ + acc2 += ((q15_t) x2 * c0); + + /* acc3 += b[numTaps] * x[n-numTaps-3] */ + acc3 += ((q15_t) x3 * c0); + + /* Read the b[numTaps-1] coefficient */ + c0 = *(pb + 1U); + + /* Read x[n-numTaps-4] sample */ + x0 = *(px + 1U); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x1 * c0); + acc1 += ((q15_t) x2 * c0); + acc2 += ((q15_t) x3 * c0); + acc3 += ((q15_t) x0 * c0); + + /* Read the b[numTaps-2] coefficient */ + c0 = *(pb + 2U); + + /* Read x[n-numTaps-5] sample */ + x1 = *(px + 2U); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x2 * c0); + acc1 += ((q15_t) x3 * c0); + acc2 += ((q15_t) x0 * c0); + acc3 += ((q15_t) x1 * c0); + + /* Read the b[numTaps-3] coefficients */ + c0 = *(pb + 3U); + + /* Read x[n-numTaps-6] sample */ + x2 = *(px + 3U); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x3 * c0); + acc1 += ((q15_t) x0 * c0); + acc2 += ((q15_t) x1 * c0); + acc3 += ((q15_t) x2 * c0); + + /* update coefficient pointer */ + pb += 4U; + px += 4U; + + /* Decrement loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Read coefficients */ + c0 = *(pb++); + + /* Fetch 1 state variable */ + x3 = *(px++); + + /* Perform the multiply-accumulates */ + acc0 += ((q15_t) x0 * c0); + acc1 += ((q15_t) x1 * c0); + acc2 += ((q15_t) x2 * c0); + acc3 += ((q15_t) x3 * c0); + + /* Reuse the present sample states for next sample */ + x0 = x1; + x1 = x2; + x2 = x3; + + /* Decrement loop counter */ + tapCnt--; + } + + /* The results in the 4 accumulators are in 2.62 format. Convert to 1.31 + Then store the 4 outputs in the destination buffer. */ + acc0 = __SSAT((acc0 >> 7U), 8); + *pDst++ = acc0; + acc1 = __SSAT((acc1 >> 7U), 8); + *pDst++ = acc1; + acc2 = __SSAT((acc2 >> 7U), 8); + *pDst++ = acc2; + acc3 = __SSAT((acc3 >> 7U), 8); + *pDst++ = acc3; + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining output samples */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of taps */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Copy one sample at a time into state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Set the accumulator to zero */ + acc0 = 0; + + /* Initialize state pointer */ + px = pState; + + /* Initialize Coefficient pointer */ + pb = pCoeffs; + + i = numTaps; + + /* Perform the multiply-accumulates */ + do + { + acc0 += (q15_t) * (px++) * (*(pb++)); + i--; + } while (i > 0U); + + /* The result is in 2.14 format. Convert to 1.7 + Then store the output in the destination buffer. */ + *pDst++ = __SSAT((acc0 >> 7U), 8); + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + pStateCurnt = S->pState; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time */ + tapCnt = (numTaps - 1U) >> 2U; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of taps */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + /* Copy remaining data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} + +/** + @} end of FIR group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_f32.c new file mode 100644 index 000000000..f44f037ff --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_f32.c @@ -0,0 +1,341 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_f32.c + * Description: Floating-point sparse FIR filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup FIR_Sparse Finite Impulse Response (FIR) Sparse Filters + + This group of functions implements sparse FIR filters. + Sparse FIR filters are equivalent to standard FIR filters except that most of the coefficients are equal to zero. + Sparse filters are used for simulating reflections in communications and audio applications. + + There are separate functions for Q7, Q15, Q31, and floating-point data types. + The functions operate on blocks of input and output data and each call to the function processes + blockSize samples through the filter. pSrc and + pDst points to input and output arrays respectively containing blockSize values. + + @par Algorithm + The sparse filter instant structure contains an array of tap indices pTapDelay which specifies the locations of the non-zero coefficients. + This is in addition to the coefficient array b. + The implementation essentially skips the multiplications by zero and leads to an efficient realization. +
+      y[n] = b[0] * x[n-pTapDelay[0]] + b[1] * x[n-pTapDelay[1]] + b[2] * x[n-pTapDelay[2]] + ...+ b[numTaps-1] * x[n-pTapDelay[numTaps-1]]
+  
+ @par + \image html FIRSparse.gif "Sparse FIR filter. b[n] represents the filter coefficients" + @par + pCoeffs points to a coefficient array of size numTaps; + pTapDelay points to an array of nonzero indices and is also of size numTaps; + pState points to a state array of size maxDelay + blockSize, where + maxDelay is the largest offset value that is ever used in the pTapDelay array. + Some of the processing functions also require temporary working buffers. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient and offset arrays may be shared among several instances while state variable arrays cannot be shared. + There are separate instance structure declarations for each of the 4 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numTaps, pCoeffs, pTapDelay, maxDelay, stateIndex, pState. Also set all of the values in pState to zero. + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Set the values in the state buffer to zeros before static initialization. + The code below statically initializes each of the 4 different data type filter instance structures +
+      arm_fir_sparse_instance_f32 S = {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};
+      arm_fir_sparse_instance_q31 S = {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};
+      arm_fir_sparse_instance_q15 S = {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};
+      arm_fir_sparse_instance_q7 S =  {numTaps, 0, pState, pCoeffs, maxDelay, pTapDelay};
+  
+ + @par Fixed-Point Behavior + Care must be taken when using the fixed-point versions of the sparse FIR filter functions. + In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + Refer to the function specific documentation below for usage guidelines. + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Processing function for the floating-point sparse FIR filter. + @param[in] S points to an instance of the floating-point sparse FIR structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] pScratchIn points to a temporary buffer of size blockSize + @param[in] blockSize number of input samples to process + @return none + */ + +void arm_fir_sparse_f32( + arm_fir_sparse_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + float32_t * pScratchIn, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + const float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *px; /* Scratch buffer pointer */ + float32_t *py = pState; /* Temporary pointers for state buffer */ + float32_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + float32_t *pOut; /* Destination pointer */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + float32_t coeff = *pCoeffs++; /* Read the first coefficient value */ + + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_f32((int32_t *) py, delaySize, &S->stateIndex, 1, (int32_t *) pSrc, 1, blockSize); + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiplications and store in destination buffer */ + *pOut++ = *px++ * coeff; + + *pOut++ = *px++ * coeff; + + *pOut++ = *px++ * coeff; + + *pOut++ = *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiplication and store in destination buffer */ + *pOut++ = *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2U; + + while (tapCnt > 0U) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + + *pOut++ += *px++ * coeff; + + *pOut++ += *px++ * coeff; + + *pOut++ += *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + *pOut++ += *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pOut++ += *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_f32.c new file mode 100644 index 000000000..7745e716c --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_f32.c @@ -0,0 +1,93 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_init_f32.c + * Description: Floating-point sparse FIR filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Initialization function for the floating-point sparse FIR filter. + @param[in,out] S points to an instance of the floating-point sparse FIR structure + @param[in] numTaps number of nonzero coefficients in the filter + @param[in] pCoeffs points to the array of filter coefficients + @param[in] pState points to the state buffer + @param[in] pTapDelay points to the array of offset times + @param[in] maxDelay maximum offset time supported + @param[in] blockSize number of samples that will be processed per block + @return none + + @par Details + pCoeffs holds the filter coefficients and has length numTaps. + pState holds the filter's state variables and must be of length + maxDelay + blockSize, where maxDelay + is the maximum number of delay line values. + blockSize is the + number of samples processed by the arm_fir_sparse_f32() function. + */ + +void arm_fir_sparse_init_f32( + arm_fir_sparse_instance_f32 * S, + uint16_t numTaps, + const float32_t * pCoeffs, + float32_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0U; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q15.c new file mode 100644 index 000000000..d07d61197 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q15.c @@ -0,0 +1,93 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_init_q15.c + * Description: Q15 sparse FIR filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Initialization function for the Q15 sparse FIR filter. + @param[in,out] S points to an instance of the Q15 sparse FIR structure + @param[in] numTaps number of nonzero coefficients in the filter + @param[in] pCoeffs points to the array of filter coefficients + @param[in] pState points to the state buffer + @param[in] pTapDelay points to the array of offset times + @param[in] maxDelay maximum offset time supported + @param[in] blockSize number of samples that will be processed per block + @return none + + @par Details + pCoeffs holds the filter coefficients and has length numTaps. + pState holds the filter's state variables and must be of length + maxDelay + blockSize, where maxDelay + is the maximum number of delay line values. + blockSize is the + number of words processed by arm_fir_sparse_q15() function. + */ + +void arm_fir_sparse_init_q15( + arm_fir_sparse_instance_q15 * S, + uint16_t numTaps, + const q15_t * pCoeffs, + q15_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0U; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q31.c new file mode 100644 index 000000000..7c32cea11 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q31.c @@ -0,0 +1,92 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_init_q31.c + * Description: Q31 sparse FIR filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Initialization function for the Q31 sparse FIR filter. + @param[in,out] S points to an instance of the Q31 sparse FIR structure + @param[in] numTaps number of nonzero coefficients in the filter + @param[in] pCoeffs points to the array of filter coefficients + @param[in] pState points to the state buffer + @param[in] pTapDelay points to the array of offset times + @param[in] maxDelay maximum offset time supported + @param[in] blockSize number of samples that will be processed per block + @return none + + @par Details + pCoeffs holds the filter coefficients and has length numTaps. + pState holds the filter's state variables and must be of length + maxDelay + blockSize, where maxDelay + is the maximum number of delay line values. + blockSize is the number of words processed by arm_fir_sparse_q31() function. + */ + +void arm_fir_sparse_init_q31( + arm_fir_sparse_instance_q31 * S, + uint16_t numTaps, + const q31_t * pCoeffs, + q31_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0U; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q7.c new file mode 100644 index 000000000..98153f321 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_init_q7.c @@ -0,0 +1,93 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_init_q7.c + * Description: Q7 sparse FIR filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Initialization function for the Q7 sparse FIR filter. + @param[in,out] S points to an instance of the Q7 sparse FIR structure + @param[in] numTaps number of nonzero coefficients in the filter + @param[in] pCoeffs points to the array of filter coefficients + @param[in] pState points to the state buffer + @param[in] pTapDelay points to the array of offset times + @param[in] maxDelay maximum offset time supported + @param[in] blockSize number of samples that will be processed per block + @return none + + @par Details + pCoeffs holds the filter coefficients and has length numTaps. + pState holds the filter's state variables and must be of length + maxDelay + blockSize, where maxDelay + is the maximum number of delay line values. + blockSize is the + number of samples processed by the arm_fir_sparse_q7() function. + */ + +void arm_fir_sparse_init_q7( + arm_fir_sparse_instance_q7 * S, + uint16_t numTaps, + const q7_t * pCoeffs, + q7_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Assign TapDelay pointer */ + S->pTapDelay = pTapDelay; + + /* Assign MaxDelay */ + S->maxDelay = maxDelay; + + /* reset the stateIndex to 0 */ + S->stateIndex = 0U; + + /* Clear state buffer and size is always maxDelay + blockSize */ + memset(pState, 0, (maxDelay + blockSize) * sizeof(q7_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q15.c new file mode 100644 index 000000000..9cea93e2d --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q15.c @@ -0,0 +1,341 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_q15.c + * Description: Q15 sparse FIR filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Processing function for the Q15 sparse FIR filter. + @param[in] S points to an instance of the Q15 sparse FIR structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] pScratchIn points to a temporary buffer of size blockSize + @param[in] pScratchOut points to a temporary buffer of size blockSize + @param[in] blockSize number of input samples to process per call + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 32-bit accumulator. + The 1.15 x 1.15 multiplications yield a 2.30 result and these are added to a 2.30 accumulator. + Thus the full precision of the multiplications is maintained but there is only a single guard bit in the accumulator. + If the accumulator result overflows it will wrap around rather than saturate. + After all multiply-accumulates are performed, the 2.30 accumulator is truncated to 2.15 format and then saturated to 1.15 format. + In order to avoid overflows the input signal or coefficients must be scaled down by log2(numTaps) bits. + */ + +void arm_fir_sparse_q15( + arm_fir_sparse_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + q15_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + const q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *px; /* Temporary pointers for scratch buffer */ + q15_t *py = pState; /* Temporary pointers for state buffer */ + q15_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + q15_t *pOut = pDst; /* Working pointer for output */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + q31_t *pScr2 = pScratchOut; /* Working pointer for scratch buffer of output values */ + q15_t coeff = *pCoeffs++; /* Read the first coefficient value */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t in1, in2; /* Temporary variables */ +#endif + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_q15(py, (int32_t) delaySize, &S->stateIndex, 1,pSrc, 1, blockSize); + + /* Loop over the number of taps. */ + tapCnt = numTaps; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, (int32_t) delaySize, &readIndex, 1, + pb, pb, (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) *px++ * coeff); + *pScratchOut++ = ((q31_t) *px++ * coeff); + *pScratchOut++ = ((q31_t) *px++ * coeff); + *pScratchOut++ = ((q31_t) *px++ * coeff); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) *px++ * coeff); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2U; + + while (tapCnt > 0U) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, (int32_t) delaySize, &readIndex, 1, + pb, pb, (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) *px++ * coeff; + *pScratchOut++ += (q31_t) *px++ * coeff; + *pScratchOut++ += (q31_t) *px++ * coeff; + *pScratchOut++ += (q31_t) *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q15(py, (int32_t) delaySize, &readIndex, 1, + pb, pb, (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) *px++ * coeff; + *pScratchOut++ += (q31_t) *px++ * coeff; + *pScratchOut++ += (q31_t) *px++ * coeff; + *pScratchOut++ += (q31_t) *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + *pScratchOut++ += (q31_t) *px++ * coeff; + + /* Decrement loop counter */ + blkCnt--; + } + + /* All the output values are in pScratchOut buffer. + Convert them into 1.15 format, saturate and store in the destination buffer. */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + in1 = *pScr2++; + in2 = *pScr2++; + +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT((q15_t) __SSAT(in1 >> 15, 16), (q15_t) __SSAT(in2 >> 15, 16), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT((q15_t) __SSAT(in2 >> 15, 16), (q15_t) __SSAT(in1 >> 15, 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + in1 = *pScr2++; + in2 = *pScr2++; + +#ifndef ARM_MATH_BIG_ENDIAN + write_q15x2_ia (&pOut, __PKHBT((q15_t) __SSAT(in1 >> 15, 16), (q15_t) __SSAT(in2 >> 15, 16), 16)); +#else + write_q15x2_ia (&pOut, __PKHBT((q15_t) __SSAT(in2 >> 15, 16), (q15_t) __SSAT(in1 >> 15, 16), 16)); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + *pOut++ = (q15_t) __SSAT(*pScr2++ >> 15, 16); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q31.c new file mode 100644 index 000000000..86d3e1db0 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q31.c @@ -0,0 +1,357 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_q31.c + * Description: Q31 sparse FIR filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Processing function for the Q31 sparse FIR filter. + @param[in] S points to an instance of the Q31 sparse FIR structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] pScratchIn points to a temporary buffer of size blockSize + @param[in] blockSize number of input samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 32-bit accumulator. + The 1.31 x 1.31 multiplications are truncated to 2.30 format. + This leads to loss of precision on the intermediate multiplications and provides only a single guard bit. + If the accumulator result overflows, it wraps around rather than saturate. + In order to avoid overflows the input signal or coefficients must be scaled down by log2(numTaps) bits. + */ + +void arm_fir_sparse_q31( + arm_fir_sparse_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + q31_t * pScratchIn, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + const q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *px; /* Scratch buffer pointer */ + q31_t *py = pState; /* Temporary pointers for state buffer */ + q31_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + q31_t *pOut; /* Destination pointer */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + q31_t coeff = *pCoeffs++; /* Read the first coefficient value */ + q31_t in; + q63_t out; /* Temporary output variable */ + + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_f32((int32_t *) py, delaySize, &S->stateIndex, 1, + (int32_t *) pSrc, 1, blockSize); + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiplications and store in destination buffer */ + *pOut++ = (q31_t) (((q63_t) *px++ * coeff) >> 32); + + *pOut++ = (q31_t) (((q63_t) *px++ * coeff) >> 32); + + *pOut++ = (q31_t) (((q63_t) *px++ * coeff) >> 32); + + *pOut++ = (q31_t) (((q63_t) *px++ * coeff) >> 32); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiplication and store in destination buffer */ + *pOut++ = (q31_t) (((q63_t) *px++ * coeff) >> 32); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2U; + + while (tapCnt > 0U) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) *px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) *px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) *px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) *px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) *px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement tap loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) py, delaySize, &readIndex, 1, + (int32_t *) pb, (int32_t *) pb, blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pOut = pDst; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + out = *pOut; + out += ((q63_t) * px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + out = *pOut; + out += ((q63_t) *px++ * coeff) >> 32; + *pOut++ = (q31_t) (out); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Working output pointer is updated */ + pOut = pDst; + + /* Output is converted into 1.31 format. */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + in = *pOut << 1; + *pOut++ = in; + in = *pOut << 1; + *pOut++ = in; + in = *pOut << 1; + *pOut++ = in; + in = *pOut << 1; + *pOut++ = in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + in = *pOut << 1; + *pOut++ = in; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q7.c b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q7.c new file mode 100644 index 000000000..7a2b57f18 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_fir_sparse_q7.c @@ -0,0 +1,341 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fir_sparse_q7.c + * Description: Q7 sparse FIR filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup FIR_Sparse + @{ + */ + +/** + @brief Processing function for the Q7 sparse FIR filter. + @param[in] S points to an instance of the Q7 sparse FIR structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] pScratchIn points to a temporary buffer of size blockSize + @param[in] pScratchOut points to a temporary buffer of size blockSize + @param[in] blockSize number of input samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + Both coefficients and state variables are represented in 1.7 format and multiplications yield a 2.14 result. + The 2.14 intermediate results are accumulated in a 32-bit accumulator in 18.14 format. + There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + The accumulator is then converted to 18.7 format by discarding the low 7 bits. + Finally, the result is truncated to 1.7 format. + */ + +void arm_fir_sparse_q7( + arm_fir_sparse_instance_q7 * S, + const q7_t * pSrc, + q7_t * pDst, + q7_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize) +{ + q7_t *pState = S->pState; /* State pointer */ + const q7_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q7_t *px; /* Scratch buffer pointer */ + q7_t *py = pState; /* Temporary pointers for state buffer */ + q7_t *pb = pScratchIn; /* Temporary pointers for scratch buffer */ + q7_t *pOut = pDst; /* Destination pointer */ + int32_t *pTapDelay = S->pTapDelay; /* Pointer to the array containing offset of the non-zero tap values. */ + uint32_t delaySize = S->maxDelay + blockSize; /* state length */ + uint16_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + int32_t readIndex; /* Read index of the state buffer */ + uint32_t tapCnt, blkCnt; /* loop counters */ + q31_t *pScr2 = pScratchOut; /* Working pointer for scratch buffer of output values */ + q31_t in; + q7_t coeff = *pCoeffs++; /* Read the coefficient value */ + +#if defined (ARM_MATH_LOOPUNROLL) + q7_t in1, in2, in3, in4; +#endif + + /* BlockSize of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_q7(py, (int32_t) delaySize, &S->stateIndex, 1, pSrc, 1, blockSize); + + /* Loop over the number of taps. */ + tapCnt = numTaps; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, + pb, pb, (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) *px++ * coeff); + *pScratchOut++ = ((q31_t) *px++ * coeff); + *pScratchOut++ = ((q31_t) *px++ * coeff); + *pScratchOut++ = ((q31_t) *px++ * coeff); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiplication and store in the scratch buffer */ + *pScratchOut++ = ((q31_t) *px++ * coeff); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Loop over the number of taps. */ + tapCnt = (uint32_t) numTaps - 2U; + + while (tapCnt > 0U) + { + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, + pb, pb, (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) * px++ * coeff); + *pScratchOut++ = in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) *px++ * coeff); + *pScratchOut++ = in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *pCoeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + readIndex = (int32_t) (S->stateIndex - blockSize) - *pTapDelay++; + + /* Wraparound of readIndex */ + if (readIndex < 0) + { + readIndex += (int32_t) delaySize; + } + + /* Decrement loop counter */ + tapCnt--; + } + + /* Compute last tap without the final read of pTapDelay */ + + /* Working pointer for state buffer is updated */ + py = pState; + + /* blockSize samples are read from the state buffer */ + arm_circularRead_q7(py, (int32_t) delaySize, &readIndex, 1, + pb, pb, (int32_t) blockSize, 1, blockSize); + + /* Working pointer for the scratch buffer of state values */ + px = pb; + + /* Working pointer for scratch buffer of output values */ + pScratchOut = pScr2; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) *px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) *px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) *px++ * coeff); + *pScratchOut++ = in; + in = *pScratchOut + ((q31_t) *px++ * coeff); + *pScratchOut++ = in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Perform Multiply-Accumulate */ + in = *pScratchOut + ((q31_t) *px++ * coeff); + *pScratchOut++ = in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* All the output values are in pScratchOut buffer. + Convert them into 1.15 format, saturate and store in the destination buffer. */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time. */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + in1 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + in2 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + in3 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + in4 = (q7_t) __SSAT(*pScr2++ >> 7, 8); + + write_q7x4_ia (&pOut, __PACKq7(in1, in2, in3, in4)); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + *pOut++ = (q7_t) __SSAT(*pScr2++ >> 7, 8); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of FIR_Sparse group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_f32.c new file mode 100644 index 000000000..c48efe30e --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_f32.c @@ -0,0 +1,354 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_iir_lattice_f32.c + * Description: Floating-point IIR Lattice filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup IIR_Lattice Infinite Impulse Response (IIR) Lattice Filters + + This set of functions implements lattice filters + for Q15, Q31 and floating-point data types. Lattice filters are used in a + variety of adaptive filter applications. The filter structure has feedforward and + feedback components and the net impulse response is infinite length. + The functions operate on blocks + of input and output data and each call to the function processes + blockSize samples through the filter. pSrc and + pDst point to input and output arrays containing blockSize values. + + @par Algorithm + \image html IIRLattice.gif "Infinite Impulse Response Lattice filter" + @par +
+      fN(n)   = x(n)
+      fm-1(n) = fm(n) - km * gm-1(n-1)   for m = N, N-1, ..., 1
+      gm(n)   = km * fm-1(n) + gm-1(n-1) for m = N, N-1, ..., 1
+      y(n)    = vN * gN(n) + vN-1 * gN-1(n) + ...+ v0 * g0(n)
+  
+ @par + pkCoeffs points to array of reflection coefficients of size numStages. + Reflection Coefficients are stored in time-reversed order. + @par +
+     {kN, kN-1, ..., k1}
+  
+ @par + pvCoeffs points to the array of ladder coefficients of size (numStages+1). + Ladder coefficients are stored in time-reversed order. +
+      {vN, vN-1, ..., v0}
+  
+ @par + pState points to a state array of size numStages + blockSize. + The state variables shown in the figure above (the g values) are stored in the pState array. + The state variables are updated after each block of data is processed; the coefficients are untouched. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter. + Coefficient arrays may be shared among several instances while state variable arrays cannot be shared. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numStages, pkCoeffs, pvCoeffs, pState. Also set all of the values in pState to zero. + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Set the values in the state buffer to zeros and then manually initialize the instance structure as follows: +
+      arm_iir_lattice_instance_f32 S = {numStages, pState, pkCoeffs, pvCoeffs};
+      arm_iir_lattice_instance_q31 S = {numStages, pState, pkCoeffs, pvCoeffs};
+      arm_iir_lattice_instance_q15 S = {numStages, pState, pkCoeffs, pvCoeffs};
+  
+ @par + where numStages is the number of stages in the filter; pState points to the state buffer array; + pkCoeffs points to array of the reflection coefficients; pvCoeffs points to the array of ladder coefficients. + + @par Fixed-Point Behavior + Care must be taken when using the fixed-point versions of the IIR lattice filter functions. + In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + Refer to the function specific documentation below for usage guidelines. + */ + +/** + @addtogroup IIR_Lattice + @{ + */ + +/** + @brief Processing function for the floating-point IIR lattice filter. + @param[in] S points to an instance of the floating-point IIR lattice structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + */ + +void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pStateCur; /* State current pointer */ + float32_t acc; /* Accumlator */ + float32_t fnext1, fnext2, gcurr1, gnext; /* Temporary variables for lattice stages */ + float32_t *px1, *px2, *pk, *pv; /* Temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* Number of stages */ + uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ + +#if defined (ARM_MATH_LOOPUNROLL) + float32_t gcurr2; /* Temporary variables for lattice stages */ + float32_t k1, k2; + float32_t v1, v2, v3, v4; +#endif + + /* initialise loop count */ + blkCnt = blockSize; + + /* Sample processing */ + while (blkCnt > 0U) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fnext2 = *pSrc++; + + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + /* Initialize state read pointer */ + px1 = pState; + + /* Initialize state write pointer */ + px2 = pState; + + /* Set accumulator to zero */ + acc = 0.0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numStages) >> 2U; + + while (tapCnt > 0U) + { + /* Read gN-1(n-1) from state buffer */ + gcurr1 = *px1; + + /* read reflection coefficient kN */ + k1 = *pk; + + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext1 = fnext2 - (k1 * gcurr1); + + /* read ladder coefficient vN */ + v1 = *pv; + + /* read next reflection coefficient kN-1 */ + k2 = *(pk + 1U); + + /* Read gN-2(n-1) from state buffer */ + gcurr2 = *(px1 + 1U); + + /* read next ladder coefficient vN-1 */ + v2 = *(pv + 1U); + + /* fN-2(n) = fN-1(n) - kN-1 * gN-2(n-1) */ + fnext2 = fnext1 - (k2 * gcurr2); + + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = gcurr1 + (k1 * fnext1); + + /* read reflection coefficient kN-2 */ + k1 = *(pk + 2U); + + /* write gN(n) into state for next sample processing */ + *px2++ = gnext; + + /* Read gN-3(n-1) from state buffer */ + gcurr1 = *(px1 + 2U); + + /* y(n) += gN(n) * vN */ + acc += (gnext * v1); + + /* fN-3(n) = fN-2(n) - kN-2 * gN-3(n-1) */ + fnext1 = fnext2 - (k1 * gcurr1); + + /* gN-1(n) = kN-1 * fN-2(n) + gN-2(n-1) */ + gnext = gcurr2 + (k2 * fnext2); + + /* Read gN-4(n-1) from state buffer */ + gcurr2 = *(px1 + 3U); + + /* y(n) += gN-1(n) * vN-1 */ + acc += (gnext * v2); + + /* read reflection coefficient kN-3 */ + k2 = *(pk + 3U); + + /* write gN-1(n) into state for next sample processing */ + *px2++ = gnext; + + /* fN-4(n) = fN-3(n) - kN-3 * gN-4(n-1) */ + fnext2 = fnext1 - (k2 * gcurr2); + + /* gN-2(n) = kN-2 * fN-3(n) + gN-3(n-1) */ + gnext = gcurr1 + (k1 * fnext1); + + /* read ladder coefficient vN-2 */ + v3 = *(pv + 2U); + + /* y(n) += gN-2(n) * vN-2 */ + acc += (gnext * v3); + + /* write gN-2(n) into state for next sample processing */ + *px2++ = gnext; + + /* update pointer */ + pk += 4U; + + /* gN-3(n) = kN-3 * fN-4(n) + gN-4(n-1) */ + gnext = (fnext2 * k2) + gcurr2; + + /* read next ladder coefficient vN-3 */ + v4 = *(pv + 3U); + + /* y(n) += gN-4(n) * vN-4 */ + acc += (gnext * v4); + + /* write gN-3(n) into state for next sample processing */ + *px2++ = gnext; + + /* update pointers */ + px1 += 4U; + pv += 4U; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numStages % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numStages; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + gcurr1 = *px1++; + /* Process sample for last taps */ + fnext1 = fnext2 - ((*pk) * gcurr1); + gnext = (fnext1 * (*pk++)) + gcurr1; + /* Output samples for last taps */ + acc += (gnext * (*pv++)); + *px2++ = gnext; + fnext2 = fnext1; + + /* Decrement loop counter */ + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += (fnext2 * (*pv)); + + *px2++ = fnext2; + + /* write out into pDst */ + *pDst++ = acc; + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCur = &S->pState[0]; + pState = &S->pState[blockSize]; + + /* Copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numStages >> 2U; + + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numStages % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + tapCnt = numStages; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of IIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_f32.c new file mode 100644 index 000000000..bd9f9338a --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_f32.c @@ -0,0 +1,77 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_iir_lattice_init_f32.c + * Description: Floating-point IIR lattice filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup IIR_Lattice + @{ + */ + +/** + @brief Initialization function for the floating-point IIR lattice filter. + @param[in] S points to an instance of the floating-point IIR lattice structure + @param[in] numStages number of stages in the filter + @param[in] pkCoeffs points to reflection coefficient buffer. The array is of length numStages + @param[in] pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1 + @param[in] pState points to state buffer. The array is of length numStages+blockSize + @param[in] blockSize number of samples to process + @return none + */ + +void arm_iir_lattice_init_f32( + arm_iir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pkCoeffs, + float32_t * pvCoeffs, + float32_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign reflection coefficient pointer */ + S->pkCoeffs = pkCoeffs; + + /* Assign ladder coefficient pointer */ + S->pvCoeffs = pvCoeffs; + + /* Clear state buffer and size is always blockSize + numStages */ + memset(pState, 0, (numStages + blockSize) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of IIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_q15.c new file mode 100644 index 000000000..01abf48e7 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_q15.c @@ -0,0 +1,77 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_iir_lattice_init_q15.c + * Description: Q15 IIR lattice filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup IIR_Lattice + @{ + */ + +/** + @brief Initialization function for the Q15 IIR lattice filter. + @param[in] S points to an instance of the Q15 IIR lattice structure + @param[in] numStages number of stages in the filter + @param[in] pkCoeffs points to reflection coefficient buffer. The array is of length numStages + @param[in] pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1 + @param[in] pState points to state buffer. The array is of length numStages+blockSize + @param[in] blockSize number of samples to process + @return none + */ + +void arm_iir_lattice_init_q15( + arm_iir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pkCoeffs, + q15_t * pvCoeffs, + q15_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign reflection coefficient pointer */ + S->pkCoeffs = pkCoeffs; + + /* Assign ladder coefficient pointer */ + S->pvCoeffs = pvCoeffs; + + /* Clear state buffer and size is always blockSize + numStages */ + memset(pState, 0, (numStages + blockSize) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of IIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_q31.c new file mode 100644 index 000000000..b472f6ce6 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_init_q31.c @@ -0,0 +1,77 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_iir_lattice_init_q31.c + * Description: Initialization function for the Q31 IIR lattice filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup IIR_Lattice + @{ + */ + +/** + @brief Initialization function for the Q31 IIR lattice filter. + @param[in] S points to an instance of the Q31 IIR lattice structure + @param[in] numStages number of stages in the filter + @param[in] pkCoeffs points to reflection coefficient buffer. The array is of length numStages + @param[in] pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1 + @param[in] pState points to state buffer. The array is of length numStages+blockSize + @param[in] blockSize number of samples to process + @return none + */ + +void arm_iir_lattice_init_q31( + arm_iir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pkCoeffs, + q31_t * pvCoeffs, + q31_t * pState, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numStages = numStages; + + /* Assign reflection coefficient pointer */ + S->pkCoeffs = pkCoeffs; + + /* Assign ladder coefficient pointer */ + S->pvCoeffs = pvCoeffs; + + /* Clear state buffer and size is always blockSize + numStages */ + memset(pState, 0, (numStages + blockSize) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; +} + +/** + @} end of IIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_q15.c new file mode 100644 index 000000000..9dbea8119 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_q15.c @@ -0,0 +1,396 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_iir_lattice_q15.c + * Description: Q15 IIR Lattice filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup IIR_Lattice + @{ + */ + +/** + @brief Processing function for the Q15 IIR lattice filter. + @param[in] S points to an instance of the Q15 IIR lattice structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + Lastly, the accumulator is saturated to yield a result in 1.15 format. + */ + +void arm_iir_lattice_q15( + const arm_iir_lattice_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pStateCur; /* State current pointer */ + q31_t fcurr, fnext = 0, gcurr = 0, gnext; /* Temporary variables for lattice stages */ + q63_t acc; /* Accumlator */ + q15_t *px1, *px2, *pk, *pv; /* Temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* Number of stages */ + uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ + q15_t out; /* Temporary variable for output */ + +#if defined (ARM_MATH_DSP) && defined (ARM_MATH_LOOPUNROLL) + q15_t gnext1, gnext2; /* Temporary variables for lattice stages */ + q31_t v; /* Temporary variable for ladder coefficient */ +#endif + + /* initialise loop count */ + blkCnt = blockSize; + +#if defined (ARM_MATH_DSP) + + /* Sample processing */ + while (blkCnt > 0U) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + /* Initialize state read pointer */ + px1 = pState; + + /* Initialize state write pointer */ + px2 = pState; + + /* Set accumulator to zero */ + acc = 0; + + /* Process sample for first tap */ + gcurr = *px1++; + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext = __SSAT(gnext, 16); + + /* write gN(n) into state for next sample processing */ + *px2++ = (q15_t) gnext; + + /* y(n) += gN(n) * vN */ + acc += (q31_t) ((gnext * (*pv++))); + + /* Update f values for next coefficient processing */ + fcurr = fnext; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numStages - 1U) >> 2U; + + while (tapCnt > 0U) + { + /* Process sample for 2nd, 6th ...taps */ + /* Read gN-2(n-1) from state buffer */ + gcurr = *px1++; + /* fN-2(n) = fN-1(n) - kN-1 * gN-2(n-1) */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + /* gN-1(n) = kN-1 * fN-2(n) + gN-2(n-1) */ + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext1 = (q15_t) __SSAT(gnext, 16); + /* write gN-1(n) into state for next sample processing */ + *px2++ = (q15_t) gnext1; + + /* Process sample for 3nd, 7th ...taps */ + /* Read gN-3(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 3rd, 7th .. taps */ + /* fN-3(n) = fN-2(n) - kN-2 * gN-3(n-1) */ + fcurr = fnext - (((q31_t) gcurr * (*pk)) >> 15); + fcurr = __SSAT(fcurr, 16); + /* gN-2(n) = kN-2 * fN-3(n) + gN-3(n-1) */ + gnext = (((q31_t) fcurr * (*pk++)) >> 15) + gcurr; + gnext2 = (q15_t) __SSAT(gnext, 16); + /* write gN-2(n) into state */ + *px2++ = (q15_t) gnext2; + + /* Read vN-1 and vN-2 at a time */ + v = read_q15x2_ia (&pv); + + /* Pack gN-1(n) and gN-2(n) */ + +#ifndef ARM_MATH_BIG_ENDIAN + gnext = __PKHBT(gnext1, gnext2, 16); +#else + gnext = __PKHBT(gnext2, gnext1, 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* y(n) += gN-1(n) * vN-1 */ + /* process for gN-5(n) * vN-5, gN-9(n) * vN-9 ... */ + /* y(n) += gN-2(n) * vN-2 */ + /* process for gN-6(n) * vN-6, gN-10(n) * vN-10 ... */ + acc = __SMLALD(gnext, v, acc); + + /* Process sample for 4th, 8th ...taps */ + /* Read gN-4(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 4th, 8th .. taps */ + /* fN-4(n) = fN-3(n) - kN-3 * gN-4(n-1) */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + /* gN-3(n) = kN-3 * fN-1(n) + gN-1(n-1) */ + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext1 = (q15_t) __SSAT(gnext, 16); + /* write gN-3(n) for the next sample process */ + *px2++ = (q15_t) gnext1; + + /* Process sample for 5th, 9th ...taps */ + /* Read gN-5(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 5th, 9th .. taps */ + /* fN-5(n) = fN-4(n) - kN-4 * gN-5(n-1) */ + fcurr = fnext - (((q31_t) gcurr * (*pk)) >> 15); + fcurr = __SSAT(fcurr, 16); + /* gN-4(n) = kN-4 * fN-5(n) + gN-5(n-1) */ + gnext = (((q31_t) fcurr * (*pk++)) >> 15) + gcurr; + gnext2 = (q15_t) __SSAT(gnext, 16); + /* write gN-4(n) for the next sample process */ + *px2++ = (q15_t) gnext2; + + /* Read vN-3 and vN-4 at a time */ + v = read_q15x2_ia (&pv); + + /* Pack gN-3(n) and gN-4(n) */ +#ifndef ARM_MATH_BIG_ENDIAN + gnext = __PKHBT(gnext1, gnext2, 16); +#else + gnext = __PKHBT(gnext2, gnext1, 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* y(n) += gN-4(n) * vN-4 */ + /* process for gN-8(n) * vN-8, gN-12(n) * vN-12 ... */ + /* y(n) += gN-3(n) * vN-3 */ + /* process for gN-7(n) * vN-7, gN-11(n) * vN-11 ... */ + acc = __SMLALD(gnext, v, acc); + + /* Decrement loop counter */ + tapCnt--; + } + + fnext = fcurr; + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numStages - 1U) % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + tapCnt = (numStages - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + gcurr = *px1++; + /* Process sample for last taps */ + fnext = fcurr - (((q31_t) gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + gnext = (((q31_t) fnext * (*pk++)) >> 15) + gcurr; + gnext = __SSAT(gnext, 16); + + /* Output samples for last taps */ + acc += (q31_t) (((q31_t) gnext * (*pv++))); + *px2++ = (q15_t) gnext; + fcurr = fnext; + + /* Decrement loop counter */ + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += (q31_t) (((q31_t) fnext * (*pv++))); + + out = (q15_t) __SSAT(acc >> 15, 16); + *px2++ = (q15_t) fnext; + + /* write out into pDst */ + *pDst++ = out; + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCur = &S->pState[0]; + pState = &S->pState[blockSize]; + + /* copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numStages >> 2U; + + while (tapCnt > 0U) + { + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + write_q15x2_ia (&pStateCur, read_q15x2_ia (&pState)); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numStages % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + tapCnt = (numStages - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#else /* #if defined (ARM_MATH_DSP) */ + + /* Sample processing */ + while (blkCnt > 0U) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + /* Initialize state read pointer */ + px1 = pState; + + /* Initialize state write pointer */ + px2 = pState; + + /* Set accumulator to zero */ + acc = 0; + + tapCnt = numStages; + + while (tapCnt > 0U) + { + gcurr = *px1++; + /* Process sample */ + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = fcurr - ((gcurr * (*pk)) >> 15); + fnext = __SSAT(fnext, 16); + + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = ((fnext * (*pk++)) >> 15) + gcurr; + gnext = __SSAT(gnext, 16); + + /* Output samples */ + /* y(n) += gN(n) * vN */ + acc += (q31_t) ((gnext * (*pv++))); + + /* write gN(n) into state for next sample processing */ + *px2++ = (q15_t) gnext; + + /* Update f values for next coefficient processing */ + fcurr = fnext; + + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += (q31_t) ((fnext * (*pv++))); + + out = (q15_t) __SSAT(acc >> 15, 16); + *px2++ = (q15_t) fnext; + + /* write out into pDst */ + *pDst++ = out; + + /* Advance the state pointer by 1 to process the next group of samples */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCur = &S->pState[0]; + pState = &S->pState[blockSize]; + + tapCnt = numStages; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#endif /* #if defined (ARM_MATH_DSP) */ + +} + +/** + @} end of IIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_q31.c new file mode 100644 index 000000000..c4b9a7626 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_iir_lattice_q31.c @@ -0,0 +1,356 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_iir_lattice_q31.c + * Description: Q31 IIR Lattice filter processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup IIR_Lattice + @{ + */ + +/** + @brief Processing function for the Q31 IIR lattice filter. + @param[in] S points to an instance of the Q31 IIR lattice structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around rather than clip. + In order to avoid overflows completely the input signal must be scaled down by 2*log2(numStages) bits. + After all multiply-accumulates are performed, the 2.62 accumulator is saturated to 1.32 format and then truncated to 1.31 format. + */ + +void arm_iir_lattice_q31( + const arm_iir_lattice_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pStateCur; /* State current pointer */ + q31_t fcurr, fnext = 0, gcurr = 0, gnext; /* Temporary variables for lattice stages */ + q63_t acc; /* Accumlator */ + q31_t *px1, *px2, *pk, *pv; /* Temporary pointers for state and coef */ + uint32_t numStages = S->numStages; /* Number of stages */ + uint32_t blkCnt, tapCnt; /* Temporary variables for counts */ + + + /* initialise loop count */ + blkCnt = blockSize; + +#if defined (ARM_MATH_DSP) + + /* Sample processing */ + while (blkCnt > 0U) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + /* Initialize state read pointer */ + px1 = pState; + + /* Initialize state write pointer */ + px2 = pState; + + /* Set accumulator to zero */ + acc = 0; + + /* Process sample for first tap */ + gcurr = *px1++; + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk )) >> 31)); + + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + + /* write gN-1(n-1) into state for next sample processing */ + *px2++ = gnext; + + /* y(n) += gN(n) * vN */ + acc += ((q63_t) gnext * *pv++); + + /* Update f values for next coefficient processing */ + fcurr = fnext; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numStages - 1U) >> 2U; + + while (tapCnt > 0U) + { + /* Process sample for 2nd, 6th ...taps */ + /* Read gN-2(n-1) from state buffer */ + gcurr = *px1++; + /* fN-2(n) = fN-1(n) - kN-1 * gN-2(n-1) */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk )) >> 31)); + /* gN-1(n) = kN-1 * fN-2(n) + gN-2(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + /* y(n) += gN-1(n) * vN-1 */ + /* process for gN-5(n) * vN-5, gN-9(n) * vN-9 ... */ + acc += ((q63_t) gnext * *pv++); + /* write gN-1(n) into state for next sample processing */ + *px2++ = gnext; + + /* Process sample for 3nd, 7th ...taps */ + /* Read gN-3(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 3rd, 7th .. taps */ + /* fN-3(n) = fN-2(n) - kN-2 * gN-3(n-1) */ + fcurr = __QSUB(fnext, (q31_t) (((q63_t) gcurr * (*pk )) >> 31)); + /* gN-2(n) = kN-2 * fN-3(n) + gN-3(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fcurr * (*pk++)) >> 31)); + /* y(n) += gN-2(n) * vN-2 */ + /* process for gN-6(n) * vN-6, gN-10(n) * vN-10 ... */ + acc += ((q63_t) gnext * *pv++); + /* write gN-2(n) into state for next sample processing */ + *px2++ = gnext; + + /* Process sample for 4th, 8th ...taps */ + /* Read gN-4(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 4th, 8th .. taps */ + /* fN-4(n) = fN-3(n) - kN-3 * gN-4(n-1) */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk )) >> 31)); + /* gN-3(n) = kN-3 * fN-4(n) + gN-4(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + /* y(n) += gN-3(n) * vN-3 */ + /* process for gN-7(n) * vN-7, gN-11(n) * vN-11 ... */ + acc += ((q63_t) gnext * *pv++); + /* write gN-3(n) into state for next sample processing */ + *px2++ = gnext; + + /* Process sample for 5th, 9th ...taps */ + /* Read gN-5(n-1) from state buffer */ + gcurr = *px1++; + /* Process sample for 5th, 9th .. taps */ + /* fN-5(n) = fN-4(n) - kN-4 * gN-1(n-1) */ + fcurr = __QSUB(fnext, (q31_t) (((q63_t) gcurr * (*pk )) >> 31)); + /* gN-4(n) = kN-4 * fN-5(n) + gN-5(n-1) */ + gnext = __QADD(gcurr, (q31_t) (((q63_t) fcurr * (*pk++)) >> 31)); + /* y(n) += gN-4(n) * vN-4 */ + /* process for gN-8(n) * vN-8, gN-12(n) * vN-12 ... */ + acc += ((q63_t) gnext * *pv++); + + /* write gN-4(n) into state for next sample processing */ + *px2++ = gnext; + + /* Decrement loop counter */ + tapCnt--; + } + + fnext = fcurr; + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numStages - 1U) % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + tapCnt = (numStages - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + gcurr = *px1++; + /* Process sample for last taps */ + fnext = __QSUB(fcurr, (q31_t) (((q63_t) gcurr * (*pk )) >> 31)); + gnext = __QADD(gcurr, (q31_t) (((q63_t) fnext * (*pk++)) >> 31)); + + /* Output samples for last taps */ + acc += ((q63_t) gnext * *pv++); + *px2++ = gnext; + fcurr = fnext; + + /* Decrement loop counter */ + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += ((q63_t) fnext * *pv++); + + *px2++ = fnext; + + /* write out into pDst */ + *pDst++ = (q31_t) (acc >> 31U); + + /* Advance the state pointer by 4 to process the next group of 4 samples */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCur = &S->pState[0]; + pState = &S->pState[blockSize]; + + /* Copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numStages >> 2U; + + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numStages % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + tapCnt = (numStages - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#else /* #if defined (ARM_MATH_DSP) */ + + /* Sample processing */ + while (blkCnt > 0U) + { + /* Read Sample from input buffer */ + /* fN(n) = x(n) */ + fcurr = *pSrc++; + + /* Initialize Ladder coeff pointer */ + pv = &S->pvCoeffs[0]; + + /* Initialize Reflection coeff pointer */ + pk = &S->pkCoeffs[0]; + + /* Initialize state read pointer */ + px1 = pState; + + /* Initialize state write pointer */ + px2 = pState; + + /* Set accumulator to zero */ + acc = 0; + + tapCnt = numStages; + + while (tapCnt > 0U) + { + gcurr = *px1++; + /* Process sample */ + /* fN-1(n) = fN(n) - kN * gN-1(n-1) */ + fnext = clip_q63_to_q31(((q63_t) fcurr - ((q31_t) (((q63_t) gcurr * (*pk )) >> 31)))); + + /* gN(n) = kN * fN-1(n) + gN-1(n-1) */ + gnext = clip_q63_to_q31(((q63_t) gcurr + ((q31_t) (((q63_t) fnext * (*pk++)) >> 31)))); + + /* Output samples */ + /* y(n) += gN(n) * vN */ + acc += ((q63_t) gnext * *pv++); + + /* write gN-1(n-1) into state for next sample processing */ + *px2++ = gnext; + + /* Update f values for next coefficient processing */ + fcurr = fnext; + + tapCnt--; + } + + /* y(n) += g0(n) * v0 */ + acc += ((q63_t) fnext * *pv++); + + *px2++ = fnext; + + /* write out into pDst */ + *pDst++ = (q31_t) (acc >> 31U); + + /* Advance the state pointer by 1 to process the next group of samples */ + pState = pState + 1U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. Now copy last S->numStages samples to start of the buffer + for the preperation of next frame process */ + + /* Points to the start of the state buffer */ + pStateCur = &S->pState[0]; + pState = &S->pState[blockSize]; + + tapCnt = numStages; + + /* Copy data */ + while (tapCnt > 0U) + { + *pStateCur++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +#endif /* #if defined (ARM_MATH_DSP) */ + +} + +/** + @} end of IIR_Lattice group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_f32.c new file mode 100644 index 000000000..4fc6e7e29 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_f32.c @@ -0,0 +1,533 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_f32.c + * Description: Processing function for the floating-point LMS filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup LMS Least Mean Square (LMS) Filters + + LMS filters are a class of adaptive filters that are able to "learn" an unknown transfer functions. + LMS filters use a gradient descent method in which the filter coefficients are updated based on the instantaneous error signal. + Adaptive filters are often used in communication systems, equalizers, and noise removal. + The CMSIS DSP Library contains LMS filter functions that operate on Q15, Q31, and floating-point data types. + The library also contains normalized LMS filters in which the filter coefficient adaptation is indepedent of the level of the input signal. + + An LMS filter consists of two components as shown below. + The first component is a standard transversal or FIR filter. + The second component is a coefficient update mechanism. + The LMS filter has two input signals. + The "input" feeds the FIR filter while the "reference input" corresponds to the desired output of the FIR filter. + That is, the FIR filter coefficients are updated so that the output of the FIR filter matches the reference input. + The filter coefficient update mechanism is based on the difference between the FIR filter output and the reference input. + This "error signal" tends towards zero as the filter adapts. + The LMS processing functions accept the input and reference input signals and generate the filter output and error signal. + \image html LMS.gif "Internal structure of the Least Mean Square filter" + + The functions operate on blocks of data and each call to the function processes + blockSize samples through the filter. + pSrc points to input signal, pRef points to reference signal, + pOut points to output signal and pErr points to error signal. + All arrays contain blockSize values. + + The functions operate on a block-by-block basis. + Internally, the filter coefficients b[n] are updated on a sample-by-sample basis. + The convergence of the LMS filter is slower compared to the normalized LMS algorithm. + + @par Algorithm + The output signal y[n] is computed by a standard FIR filter: +
+      y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ...+ b[numTaps-1] * x[n-numTaps+1]
+  
+ + @par + The error signal equals the difference between the reference signal d[n] and the filter output: +
+      e[n] = d[n] - y[n].
+  
+ + @par + After each sample of the error signal is computed, the filter coefficients b[k] are updated on a sample-by-sample basis: +
+      b[k] = b[k] + e[n] * mu * x[n-k],  for k=0, 1, ..., numTaps-1
+  
+ where mu is the step size and controls the rate of coefficient convergence. + @par + In the APIs, pCoeffs points to a coefficient array of size numTaps. + Coefficients are stored in time reversed order. + @par +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to a state array of size numTaps + blockSize - 1. + Samples in the state buffer are stored in the order: + @par +
+     {x[n-numTaps+1], x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2]....x[0], x[1], ..., x[blockSize-1]}
+  
+ @par + Note that the length of the state buffer exceeds the length of the coefficient array by blockSize-1 samples. + The increased state buffer length allows circular addressing, which is traditionally used in FIR filters, + to be avoided and yields a significant speed improvement. + The state variables are updated after each block of data is processed. + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter and + coefficient and state arrays cannot be shared among instances. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numTaps, pCoeffs, mu, postShift (not for f32), pState. Also set all of the values in pState to zero. + + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Set the values in the state buffer to zeros before static initialization. + The code below statically initializes each of the 3 different data type filter instance structures +
+     arm_lms_instance_f32 S = {numTaps, pState, pCoeffs, mu};
+     arm_lms_instance_q31 S = {numTaps, pState, pCoeffs, mu, postShift};
+     arm_lms_instance_q15 S = {numTaps, pState, pCoeffs, mu, postShift};
+  
+ where numTaps is the number of filter coefficients in the filter; pState is the address of the state buffer; + pCoeffs is the address of the coefficient buffer; mu is the step size parameter; and postShift is the shift applied to coefficients. + + @par Fixed-Point Behavior + Care must be taken when using the Q15 and Q31 versions of the LMS filter. + The following issues must be considered: + - Scaling of coefficients + - Overflow and saturation + + @par Scaling of Coefficients + Filter coefficients are represented as fractional values and + coefficients are restricted to lie in the range [-1 +1). + The fixed-point functions have an additional scaling parameter postShift. + At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + This essentially scales the filter coefficients by 2^postShift and + allows the filter coefficients to exceed the range [+1 -1). + The value of postShift is set by the user based on the expected gain through the system being modeled. + + @par Overflow and Saturation + Overflow and saturation behavior of the fixed-point Q15 and Q31 versions are + described separately as part of the function specific documentation below. + */ + +/** + @addtogroup LMS + @{ + */ + +/** + @brief Processing function for floating-point LMS filter. + @param[in] S points to an instance of the floating-point LMS filter structure + @param[in] pSrc points to the block of input data + @param[in] pRef points to the block of reference data + @param[out] pOut points to the block of output data + @param[out] pErr points to the block of error data + @param[in] blockSize number of samples to process + @return none + */ +#if defined(ARM_MATH_NEON) +void arm_lms_f32( + const arm_lms_instance_f32 * S, + const float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + float32_t sum, e, d; /* accumulator, error, reference data sample */ + float32_t w = 0.0f; /* weight factor */ + + float32x4_t tempV, sumV, xV, bV; + float32x2_t tempV2; + + e = 0.0f; + d = 0.0f; + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Set the accumulator to zero */ + sum = 0.0f; + sumV = vdupq_n_f32(0.0); + + /* Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + xV = vld1q_f32(px); + bV = vld1q_f32(pb); + sumV = vmlaq_f32(sumV, xV, bV); + + px += 4; + pb += 4; + + /* Decrement the loop counter */ + tapCnt--; + } + tempV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); + sum = tempV2[0] + tempV2[1]; + + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result in the accumulator, store in the destination buffer. */ + *pOut++ = sum; + + /* Compute and store error */ + d = (float32_t) (*pRef++); + e = d - sum; + *pErr++ = e; + + /* Calculation of Weighting factor for the updating filter coefficients */ + w = e * mu; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + xV = vld1q_f32(px); + bV = vld1q_f32(pb); + px += 4; + bV = vmlaq_n_f32(bV,xV,w); + + vst1q_f32(pb,bV); + pb += 4; + + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + *pb = *pb + (w * (*px++)); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Process 4 taps at a time for (numTaps - 1U) samples copy */ + tapCnt = (numTaps - 1U) >> 2U; + + /* copy data */ + while (tapCnt > 0U) + { + tempV = vld1q_f32(pState); + vst1q_f32(pStateCurnt,tempV); + pState += 4; + pStateCurnt += 4; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1U) % 0x4U; + + /* Copy the remaining q31_t data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + + +} +#else +void arm_lms_f32( + const arm_lms_instance_f32 * S, + const float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t mu = S->mu; /* Adaptive factor */ + float32_t acc, e; /* Accumulator, error */ + float32_t w; /* Weight factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + + /* Initializations of error, difference, Coefficient update */ + e = 0.0f; + w = 0.0f; + + /* S->pState points to state array which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + /* initialise loop count */ + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + acc = 0.0f; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += (*px++) * (*pb++); + + acc += (*px++) * (*pb++); + + acc += (*px++) * (*pb++); + + acc += (*px++) * (*pb++); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = acc; + + /* Compute and store error */ + e = (float32_t) *pRef++ - acc; + *pErr++ = e; + + /* Calculation of Weighting factor for updating filter coefficients */ + w = e * mu; + + /* Initialize pState pointer */ + /* Advance state pointer by 1 for the next sample */ + px = pState++; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numTaps - 1U) >> 2U; + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of LMS group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_f32.c new file mode 100644 index 000000000..f418f4610 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_f32.c @@ -0,0 +1,81 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_init_f32.c + * Description: Floating-point LMS filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @addtogroup LMS + @{ + */ + +/** + @brief Initialization function for floating-point LMS filter. + @param[in] S points to an instance of the floating-point LMS filter structure + @param[in] numTaps number of filter coefficients + @param[in] pCoeffs points to coefficient buffer + @param[in] pState points to state buffer + @param[in] mu step size that controls filter coefficient updates + @param[in] blockSize number of samples to process + @return none + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ The initial filter coefficients serve as a starting point for the adaptive filter. + pState points to an array of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_lms_f32(). + */ + +void arm_lms_init_f32( + arm_lms_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps */ + memset(pState, 0, (numTaps + (blockSize - 1)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; +} + +/** + @} end of LMS group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_q15.c new file mode 100644 index 000000000..fe0a5c516 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_q15.c @@ -0,0 +1,92 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_init_q15.c + * Description: Q15 LMS filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup LMS + @{ + */ + +/** + @brief Initialization function for the Q15 LMS filter. + @param[in] S points to an instance of the Q15 LMS filter structure. + @param[in] numTaps number of filter coefficients. + @param[in] pCoeffs points to coefficient buffer. + @param[in] pState points to state buffer. + @param[in] mu step size that controls filter coefficient updates. + @param[in] blockSize number of samples to process. + @param[in] postShift bit shift applied to coefficients. + @return none + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ The initial filter coefficients serve as a starting point for the adaptive filter. + pState points to the array of state variables and size of array is + numTaps+blockSize-1 samples, where blockSize is the number of + input samples processed by each call to arm_lms_q15(). + */ + +void arm_lms_init_q15( + arm_lms_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint32_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q15_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Assign postShift value to be applied */ + S->postShift = postShift; +} + +/** + @} end of LMS group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_q31.c new file mode 100644 index 000000000..3410b9f21 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_init_q31.c @@ -0,0 +1,92 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_init_q31.c + * Description: Q31 LMS filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup LMS + @{ + */ + +/** + @brief Initialization function for Q31 LMS filter. + @param[in] S points to an instance of the Q31 LMS filter structure + @param[in] numTaps number of filter coefficients + @param[in] pCoeffs points to coefficient buffer + @param[in] pState points to state buffer + @param[in] mu step size that controls filter coefficient updates + @param[in] blockSize number of samples to process + @param[in] postShift bit shift applied to coefficients + @return none + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ The initial filter coefficients serve as a starting point for the adaptive filter. + pState points to an array of length numTaps+blockSize-1 samples, + where blockSize is the number of input samples processed by each call to + arm_lms_q31(). + */ + +void arm_lms_init_q31( + arm_lms_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint32_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q31_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Assign postShift value to be applied */ + S->postShift = postShift; +} + +/** + @} end of LMS group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_f32.c new file mode 100644 index 000000000..28ab04a29 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_f32.c @@ -0,0 +1,564 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_norm_f32.c + * Description: Processing function for the floating-point NLMS filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @defgroup LMS_NORM Normalized LMS Filters + + This set of functions implements a commonly used adaptive filter. + It is related to the Least Mean Square (LMS) adaptive filter and includes an additional normalization + factor which increases the adaptation rate of the filter. + The CMSIS DSP Library contains normalized LMS filter functions that operate on Q15, Q31, and floating-point data types. + + A normalized least mean square (NLMS) filter consists of two components as shown below. + The first component is a standard transversal or FIR filter. + The second component is a coefficient update mechanism. + The NLMS filter has two input signals. + The "input" feeds the FIR filter while the "reference input" corresponds to the desired output of the FIR filter. + That is, the FIR filter coefficients are updated so that the output of the FIR filter matches the reference input. + The filter coefficient update mechanism is based on the difference between the FIR filter output and the reference input. + This "error signal" tends towards zero as the filter adapts. + The NLMS processing functions accept the input and reference input signals and generate the filter output and error signal. + \image html LMS.gif "Internal structure of the NLMS adaptive filter" + + The functions operate on blocks of data and each call to the function processes + blockSize samples through the filter. + pSrc points to input signal, pRef points to reference signal, + pOut points to output signal and pErr points to error signal. + All arrays contain blockSize values. + + The functions operate on a block-by-block basis. + Internally, the filter coefficients b[n] are updated on a sample-by-sample basis. + The convergence of the LMS filter is slower compared to the normalized LMS algorithm. + + @par Algorithm + The output signal y[n] is computed by a standard FIR filter: +
+      y[n] = b[0] * x[n] + b[1] * x[n-1] + b[2] * x[n-2] + ...+ b[numTaps-1] * x[n-numTaps+1]
+  
+ + @par + The error signal equals the difference between the reference signal d[n] and the filter output: +
+      e[n] = d[n] - y[n].
+  
+ + @par + After each sample of the error signal is computed the instanteous energy of the filter state variables is calculated: +
+     E = x[n]^2 + x[n-1]^2 + ... + x[n-numTaps+1]^2.
+  
+ The filter coefficients b[k] are then updated on a sample-by-sample basis: +
+      b[k] = b[k] + e[n] * (mu/E) * x[n-k],  for k=0, 1, ..., numTaps-1
+  
+ where mu is the step size and controls the rate of coefficient convergence. + @par + In the APIs, pCoeffs points to a coefficient array of size numTaps. + Coefficients are stored in time reversed order. + @par +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ @par + pState points to a state array of size numTaps + blockSize - 1. + Samples in the state buffer are stored in the order: + @par +
+     {x[n-numTaps+1], x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2]....x[0], x[1], ..., x[blockSize-1]}
+  
+ @par + Note that the length of the state buffer exceeds the length of the coefficient array by blockSize-1 samples. + The increased state buffer length allows circular addressing, which is traditionally used in FIR filters, + to be avoided and yields a significant speed improvement. + The state variables are updated after each block of data is processed. + + @par Instance Structure + The coefficients and state variables for a filter are stored together in an instance data structure. + A separate instance structure must be defined for each filter and + coefficient and state arrays cannot be shared among instances. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Zeros out the values in the state buffer. + To do this manually without calling the init function, assign the follow subfields of the instance structure: + numTaps, pCoeffs, mu, energy, x0, pState. Also set all of the values in pState to zero. + For Q7, Q15, and Q31 the following fields must also be initialized; + recipTable, postShift + @par + Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. + @par Fixed-Point Behavior + Care must be taken when using the Q15 and Q31 versions of the normalised LMS filter. + The following issues must be considered: + - Scaling of coefficients + - Overflow and saturation + + @par Scaling of Coefficients + Filter coefficients are represented as fractional values and + coefficients are restricted to lie in the range [-1 +1). + The fixed-point functions have an additional scaling parameter postShift. + At the output of the filter's accumulator is a shift register which shifts the result by postShift bits. + This essentially scales the filter coefficients by 2^postShift and + allows the filter coefficients to exceed the range [+1 -1). + The value of postShift is set by the user based on the expected gain through the system being modeled. + + @par Overflow and Saturation + Overflow and saturation behavior of the fixed-point Q15 and Q31 versions are + described separately as part of the function specific documentation below. + */ + +/** + @addtogroup LMS_NORM + @{ + */ + +/** + @brief Processing function for floating-point normalized LMS filter. + @param[in] S points to an instance of the floating-point normalized LMS filter structure + @param[in] pSrc points to the block of input data + @param[in] pRef points to the block of reference data + @param[out] pOut points to the block of output data + @param[out] pErr points to the block of error data + @param[in] blockSize number of samples to process + @return none + */ + +#if defined(ARM_MATH_NEON) +void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + const float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + float32_t energy; /* Energy of the input */ + float32_t sum, e, d; /* accumulator, error, reference data sample */ + float32_t w, x0, in; /* weight factor, temporary variable to hold input sample and state */ + + float32x4_t tempV, sumV, xV, bV; + float32x2_t tempV2; + + /* Initializations of error, difference, Coefficient update */ + e = 0.0f; + d = 0.0f; + w = 0.0f; + + energy = S->energy; + x0 = S->x0; + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + /* Loop over blockSize number of values */ + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy -= x0 * x0; + energy += in * in; + + /* Set the accumulator to zero */ + sum = 0.0f; + sumV = vdupq_n_f32(0.0); + + /* Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + xV = vld1q_f32(px); + bV = vld1q_f32(pb); + sumV = vmlaq_f32(sumV, xV, bV); + + px += 4; + pb += 4; + + /* Decrement the loop counter */ + tapCnt--; + } + tempV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); + sum = tempV2[0] + tempV2[1]; + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + sum += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* The result in the accumulator, store in the destination buffer. */ + *pOut++ = sum; + + /* Compute and store error */ + d = (float32_t) (*pRef++); + e = d - sum; + *pErr++ = e; + + /* Calculation of Weighting factor for updating filter coefficients */ + /* epsilon value 0.000000119209289f */ + w = (e * mu) / (energy + 0.000000119209289f); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coeff pointer */ + pb = (pCoeffs); + + /* Process 4 taps at a time. */ + tapCnt = numTaps >> 2; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + xV = vld1q_f32(px); + bV = vld1q_f32(pb); + px += 4; + bV = vmlaq_n_f32(bV,xV,w); + + vst1q_f32(pb,bV); + pb += 4; + + + /* Decrement the loop counter */ + tapCnt--; + } + + /* If the filter length is not a multiple of 4, compute the remaining filter taps */ + tapCnt = numTaps % 0x4U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + /* Decrement the loop counter */ + tapCnt--; + } + + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement the loop counter */ + blkCnt--; + } + + S->energy = energy; + S->x0 = x0; + + /* Processing is complete. Now copy the last numTaps - 1 samples to the + satrt of the state buffer. This prepares the state buffer for the + next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* Process 4 taps at a time for (numTaps - 1U)/4 samples copy */ + tapCnt = (numTaps - 1U) >> 2U; + + /* copy data */ + while (tapCnt > 0U) + { + tempV = vld1q_f32(pState); + vst1q_f32(pStateCurnt,tempV); + pState += 4; + pStateCurnt += 4; + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calculate remaining number of copies */ + tapCnt = (numTaps - 1U) % 0x4U; + + /* Copy the remaining q31_t data */ + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement the loop counter */ + tapCnt--; + } + +} +#else +void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + const float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize) +{ + float32_t *pState = S->pState; /* State pointer */ + float32_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + float32_t *pStateCurnt; /* Points to the current sample of the state */ + float32_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + float32_t mu = S->mu; /* Adaptive factor */ + float32_t acc, e; /* Accumulator, error */ + float32_t w; /* Weight factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + float32_t energy; /* Energy of the input */ + float32_t x0, in; /* Temporary variable to hold input sample and state */ + + /* Initializations of error, difference, Coefficient update */ + e = 0.0f; + w = 0.0f; + + energy = S->energy; + x0 = S->x0; + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + /* initialise loop count */ + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy -= x0 * x0; + energy += in * in; + + /* Set the accumulator to zero */ + acc = 0.0f; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += (*px++) * (*pb++); + + acc += (*px++) * (*pb++); + + acc += (*px++) * (*pb++); + + acc += (*px++) * (*pb++); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += (*px++) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = acc; + + /* Compute and store error */ + e = (float32_t) *pRef++ - acc; + *pErr++ = e; + + /* Calculation of Weighting factor for updating filter coefficients */ + /* epsilon value 0.000000119209289f */ + w = (e * mu) / (energy + 0.000000119209289f); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + *pb += w * (*px++); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + *pb += w * (*px++); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Save energy and x0 values for the next frame */ + S->energy = energy; + S->x0 = x0; + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numTaps - 1U) >> 2U; + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ +/** + @} end of LMS_NORM group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_f32.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_f32.c new file mode 100644 index 000000000..543dc7258 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_f32.c @@ -0,0 +1,92 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_norm_init_f32.c + * Description: Floating-point NLMS filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup LMS_NORM + @{ + */ + +/** + @brief Initialization function for floating-point normalized LMS filter. + @param[in] S points to an instance of the floating-point LMS filter structure + @param[in] numTaps number of filter coefficients + @param[in] pCoeffs points to coefficient buffer + @param[in] pState points to state buffer + @param[in] mu step size that controls filter coefficient updates + @param[in] blockSize number of samples to process + @return none + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ The initial filter coefficients serve as a starting point for the adaptive filter. + pState points to an array of length numTaps+blockSize-1 samples, + where blockSize is the number of input samples processed by each call to arm_lms_norm_f32(). + */ + +void arm_lms_norm_init_f32( + arm_lms_norm_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(float32_t)); + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Initialise Energy to zero */ + S->energy = 0.0f; + + /* Initialise x0 to zero */ + S->x0 = 0.0f; +} + +/** + @} end of LMS_NORM group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_q15.c new file mode 100644 index 000000000..d581ac18e --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_q15.c @@ -0,0 +1,98 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_norm_init_q15.c + * Description: Q15 NLMS filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @addtogroup LMS_NORM + @{ + */ + +/** + @brief Initialization function for Q15 normalized LMS filter. + @param[in] S points to an instance of the Q15 normalized LMS filter structure. + @param[in] numTaps number of filter coefficients. + @param[in] pCoeffs points to coefficient buffer. + @param[in] pState points to state buffer. + @param[in] mu step size that controls filter coefficient updates. + @param[in] blockSize number of samples to process. + @param[in] postShift bit shift applied to coefficients. + @return none + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ The initial filter coefficients serve as a starting point for the adaptive filter. + pState points to the array of state variables and size of array is + numTaps+blockSize-1 samples, where blockSize is the number of input samples processed + by each call to arm_lms_norm_q15(). + */ + +void arm_lms_norm_init_q15( + arm_lms_norm_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint8_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q15_t)); + + /* Assign post Shift value applied to coefficients */ + S->postShift = postShift; + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Initialize reciprocal pointer table */ + S->recipTable = (q15_t *) armRecipTableQ15; + + /* Initialise Energy to zero */ + S->energy = 0; + + /* Initialise x0 to zero */ + S->x0 = 0; +} + +/** + @} end of LMS_NORM group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_q31.c new file mode 100644 index 000000000..30e78ec42 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_init_q31.c @@ -0,0 +1,97 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_norm_init_q31.c + * Description: Q31 NLMS filter initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @addtogroup LMS_NORM + @{ + */ + +/** + @brief Initialization function for Q31 normalized LMS filter. + @param[in] S points to an instance of the Q31 normalized LMS filter structure. + @param[in] numTaps number of filter coefficients. + @param[in] pCoeffs points to coefficient buffer. + @param[in] pState points to state buffer. + @param[in] mu step size that controls filter coefficient updates. + @param[in] blockSize number of samples to process. + @param[in] postShift bit shift applied to coefficients. + @return none + + @par Details + pCoeffs points to the array of filter coefficients stored in time reversed order: +
+     {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+  
+ The initial filter coefficients serve as a starting point for the adaptive filter. + pState points to an array of length numTaps+blockSize-1 samples, + where blockSize is the number of input samples processed by each call to arm_lms_norm_q31(). + */ + +void arm_lms_norm_init_q31( + arm_lms_norm_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint8_t postShift) +{ + /* Assign filter taps */ + S->numTaps = numTaps; + + /* Assign coefficient pointer */ + S->pCoeffs = pCoeffs; + + /* Clear state buffer and size is always blockSize + numTaps - 1 */ + memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(q31_t)); + + /* Assign post Shift value applied to coefficients */ + S->postShift = postShift; + + /* Assign state pointer */ + S->pState = pState; + + /* Assign Step size value */ + S->mu = mu; + + /* Initialize reciprocal pointer table */ + S->recipTable = (q31_t *) armRecipTableQ31; + + /* Initialise Energy to zero */ + S->energy = 0; + + /* Initialise x0 to zero */ + S->x0 = 0; +} + +/** + @} end of LMS_NORM group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_q15.c new file mode 100644 index 000000000..c15ad5eb4 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_q15.c @@ -0,0 +1,297 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_norm_q15.c + * Description: Processing function for Q15 normalized LMS filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup LMS_NORM + @{ + */ + +/** + @brief Processing function for Q15 normalized LMS filter. + @param[in] S points to an instance of the Q15 normalized LMS filter structure + @param[in] pSrc points to the block of input data + @param[in] pRef points to the block of reference data + @param[out] pOut points to the block of output data + @param[out] pErr points to the block of error data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + Both coefficients and state variables are represented in 1.15 format and + multiplications yield a 2.30 result. The 2.30 intermediate results are + accumulated in a 64-bit accumulator in 34.30 format. + There is no risk of internal overflow with this approach and the full + precision of intermediate multiplications is preserved. After all additions + have been performed, the accumulator is truncated to 34.15 format by + discarding low 15 bits. Lastly, the accumulator is saturated to yield a + result in 1.15 format. + @par + In this filter, filter coefficients are updated for each sample and the + updation of filter cofficients are saturted. + */ + +void arm_lms_norm_q15( + arm_lms_norm_instance_q15 * S, + const q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + q15_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q63_t acc; /* Accumulator */ + q31_t energy; /* Energy of the input */ + q15_t e = 0, d = 0; /* Error, reference data sample */ + q15_t w = 0, in; /* Weight factor and state */ + q15_t x0; /* Temporary variable to hold input sample */ + q15_t errorXmu, oneByEnergy; /* Temporary variables to store error and mu product and reciprocal of energy */ + q15_t postShift; /* Post shift to be applied to weight after reciprocal calculation */ + q31_t coef; /* Temporary variable for coefficient */ + q31_t acc_l, acc_h; /* Temporary input */ + int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ + int32_t uShift = (32 - lShift); + + energy = S->energy; + x0 = S->x0; + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + /* initialise loop count */ + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy -= (((q31_t) x0 * (x0)) >> 15); + energy += (((q31_t) in * (in)) >> 15); + + /* Set the accumulator to zero */ + acc = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + /* acc += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ + acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); + acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += (q63_t) (((q31_t) (*px++) * (*pb++))); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Converting the result to 1.15 format and saturate the output */ + acc = __SSAT(acc, 16U); + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* Compute and store error */ + d = *pRef++; + e = d - (q15_t) acc; + *pErr++ = e; + + /* Calculation of 1/energy */ + postShift = arm_recip_q15((q15_t) energy + DELTA_Q15, &oneByEnergy, S->recipTable); + + /* Calculation of e * mu value */ + errorXmu = (q15_t) (((q31_t) e * mu) >> 15); + + /* Calculation of (e * mu) * (1/energy) value */ + acc = (((q31_t) errorXmu * oneByEnergy) >> (15 - postShift)); + + /* Weighting factor for the normalized version */ + w = (q15_t) __SSAT((q31_t) acc, 16); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT(coef, 16); + + coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT(coef, 16); + + coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT(coef, 16); + + coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT(coef, 16); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) *pb + (((q31_t) w * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT(coef, 16); + + /* Decrement loop counter */ + tapCnt--; + } + + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Save energy and x0 values for the next frame */ + S->energy = (q15_t) energy; + S->x0 = x0; + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numTaps - 1U) >> 2U; + + while (tapCnt > 0U) + { + write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); + write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of LMS_NORM group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_q31.c new file mode 100644 index 000000000..e26219ed3 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_norm_q31.c @@ -0,0 +1,311 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_norm_q31.c + * Description: Processing function for the Q31 NLMS filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup LMS_NORM + @{ + */ + +/** + @brief Processing function for Q31 normalized LMS filter. + @param[in] S points to an instance of the Q31 normalized LMS filter structure + @param[in] pSrc points to the block of input data + @param[in] pRef points to the block of reference data + @param[out] pOut points to the block of output data + @param[out] pErr points to the block of error data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate + multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around rather than clip. + In order to avoid overflows completely the input signal must be scaled down by + log2(numTaps) bits. The reference signal should not be scaled down. + After all multiply-accumulates are performed, the 2.62 accumulator is shifted + and saturated to 1.31 format to yield the final result. + The output signal and error signal are in 1.31 format. + @par + In this filter, filter coefficients are updated for each sample and the + updation of filter cofficients are saturted. + */ + +void arm_lms_norm_q31( + arm_lms_norm_instance_q31 * S, + const q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + q31_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q63_t acc; /* Accumulator */ + q63_t energy; /* Energy of the input */ + q31_t e = 0; /* Error data sample */ + q31_t w = 0, in; /* Weight factor and state */ + q31_t x0; /* Temporary variable to hold input sample */ + q31_t errorXmu, oneByEnergy; /* Temporary variables to store error and mu product and reciprocal of energy */ + q31_t postShift; /* Post shift to be applied to weight after reciprocal calculation */ + q31_t coef; /* Temporary variable for coef */ + q31_t acc_l, acc_h; /* Temporary input */ + uint32_t uShift = ((uint32_t) S->postShift + 1U); + uint32_t lShift = 32U - uShift; /* Shift to be applied to the output */ + + energy = S->energy; + x0 = S->x0; + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + /* initialise loop count */ + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Read the sample from input buffer */ + in = *pSrc++; + + /* Update the energy calculation */ + energy = (q31_t) ((((q63_t) energy << 32) - (((q63_t) x0 * x0) << 1)) >> 32); + energy = (q31_t) (((((q63_t) in * in) << 1) + (energy << 32)) >> 32); + + /* Set the accumulator to zero */ + acc = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + /* acc += b[N] * x[n-N] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-1] * x[n-N-1] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-2] * x[n-N-2] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-3] * x[n-N-3] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Converting the result to 1.31 format */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q31_t) acc; + + /* Compute and store error */ + e = *pRef++ - (q31_t) acc; + *pErr++ = e; + + /* Calculates the reciprocal of energy */ + postShift = arm_recip_q31(energy + DELTA_Q31, &oneByEnergy, &S->recipTable[0]); + + /* Calculation of product of (e * mu) */ + errorXmu = (q31_t) (((q63_t) e * mu) >> 31); + + /* Weighting factor for the normalized version */ + w = clip_q63_to_q31(((q63_t) errorXmu * oneByEnergy) >> (31 - postShift)); + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + + /* coef is in 2.30 format */ + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + /* get coef in 1.31 format by left shifting */ + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + /* update coefficient buffer to next coefficient */ + pb++; + + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) (((q63_t) w * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Read the sample from state buffer */ + x0 = *pState; + + /* Advance state pointer by 1 for the next sample */ + pState = pState + 1; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Save energy and x0 values for the next frame */ + S->energy = (q31_t) energy; + S->x0 = x0; + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numTaps - 1U) >> 2U; + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of LMS_NORM group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_q15.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_q15.c new file mode 100644 index 000000000..0fc98783a --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_q15.c @@ -0,0 +1,262 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_q15.c + * Description: Processing function for Q15 LMS filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup LMS + @{ + */ + +/** + @brief Processing function for Q15 LMS filter. + @param[in] S points to an instance of the Q15 LMS filter structure + @param[in] pSrc points to the block of input data + @param[in] pRef points to the block of reference data + @param[out] pOut points to the block of output data + @param[out] pErr points to the block of error data + @param[in] blockSize number of samples to process + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + Both coefficients and state variables are represented in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. + After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. + Lastly, the accumulator is saturated to yield a result in 1.15 format. + @par + In this filter, filter coefficients are updated for each sample and + the updation of filter cofficients are saturted. + */ + +void arm_lms_q15( + const arm_lms_instance_q15 * S, + const q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize) +{ + q15_t *pState = S->pState; /* State pointer */ + q15_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q15_t *pStateCurnt; /* Points to the current sample of the state */ + q15_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + q15_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q63_t acc; /* Accumulator */ + q15_t e = 0; /* Error of data sample */ + q15_t alpha; /* Intermediate constant for taps update */ + q31_t coef; /* Temporary variable for coefficient */ + q31_t acc_l, acc_h; /* Temporary input */ + int32_t lShift = (15 - (int32_t) S->postShift); /* Post shift */ + int32_t uShift = (32 - lShift); + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + /* initialise loop count */ + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + acc = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + /* acc += b[N] * x[n-N] + b[N-1] * x[n-N-1] */ + acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); + acc = __SMLALD(read_q15x2_ia (&px), read_q15x2_ia (&pb), acc); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += (q63_t) (((q31_t) (*px++) * (*pb++))); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + /* Apply shift for lower part of acc and upper part of acc */ + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Converting the result to 1.15 format and saturate the output */ + acc = __SSAT(acc, 16U); + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q15_t) acc; + + /* Compute and store error */ + e = *pRef++ - (q15_t) acc; + *pErr++ = (q15_t) e; + + /* Compute alpha i.e. intermediate constant for taps update */ + alpha = (q15_t) (((q31_t) e * (mu)) >> 15); + + /* Initialize pState pointer */ + /* Advance state pointer by 1 for the next sample */ + px = pState++; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + coef = (q31_t) *pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + coef = (q31_t) *pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + coef = (q31_t) *pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + coef = (q31_t) *pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) *pb + (((q31_t) alpha * (*px++)) >> 15); + *pb++ = (q15_t) __SSAT((coef), 16); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numTaps - 1U) >> 2U; + + while (tapCnt > 0U) + { + write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); + write_q15x2_ia (&pStateCurnt, read_q15x2_ia (&pState)); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of LMS group + */ diff --git a/CMSIS/DSP/Source/FilteringFunctions/arm_lms_q31.c b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_q31.c new file mode 100644 index 000000000..b0c0e2759 --- /dev/null +++ b/CMSIS/DSP/Source/FilteringFunctions/arm_lms_q31.c @@ -0,0 +1,283 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_lms_q31.c + * Description: Processing function for the Q31 LMS filter + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupFilters + */ + +/** + @addtogroup LMS + @{ + */ + +/** + @brief Processing function for Q31 LMS filter. + @param[in] S points to an instance of the Q31 LMS filter structure. + @param[in] pSrc points to the block of input data. + @param[in] pRef points to the block of reference data. + @param[out] pOut points to the block of output data. + @param[out] pErr points to the block of error data. + @param[in] blockSize number of samples to process. + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate + multiplication results but provides only a single guard bit. + Thus, if the accumulator result overflows it wraps around rather than clips. + In order to avoid overflows completely the input signal must be scaled down by + log2(numTaps) bits. + The reference signal should not be scaled down. + After all multiply-accumulates are performed, the 2.62 accumulator is shifted + and saturated to 1.31 format to yield the final result. + The output signal and error signal are in 1.31 format. + @par + In this filter, filter coefficients are updated for each sample and + the updation of filter cofficients are saturted. + */ + +void arm_lms_q31( + const arm_lms_instance_q31 * S, + const q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize) +{ + q31_t *pState = S->pState; /* State pointer */ + q31_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */ + q31_t *pStateCurnt; /* Points to the current sample of the state */ + q31_t *px, *pb; /* Temporary pointers for state and coefficient buffers */ + q31_t mu = S->mu; /* Adaptive factor */ + uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */ + uint32_t tapCnt, blkCnt; /* Loop counters */ + q63_t acc; /* Accumulator */ + q31_t e = 0; /* Error of data sample */ + q31_t alpha; /* Intermediate constant for taps update */ + q31_t coef; /* Temporary variable for coef */ + q31_t acc_l, acc_h; /* Temporary input */ + uint32_t uShift = ((uint32_t) S->postShift + 1U); + uint32_t lShift = 32U - uShift; /* Shift to be applied to the output */ + + /* S->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + pStateCurnt = &(S->pState[(numTaps - 1U)]); + + /* initialise loop count */ + blkCnt = blockSize; + + while (blkCnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *pStateCurnt++ = *pSrc++; + + /* Initialize pState pointer */ + px = pState; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + + /* Set the accumulator to zero */ + acc = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + /* acc += b[N] * x[n-N] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-1] * x[n-N-1] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-2] * x[n-N-2] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* acc += b[N-3] * x[n-N-3] */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + acc += ((q63_t) (*px++)) * (*pb++); + + /* Decrement the loop counter */ + tapCnt--; + } + + /* Converting the result to 1.31 format */ + /* Calc lower part of acc */ + acc_l = acc & 0xffffffff; + + /* Calc upper part of acc */ + acc_h = (acc >> 32) & 0xffffffff; + + acc = (uint32_t) acc_l >> lShift | acc_h << uShift; + + /* Store the result from accumulator into the destination buffer. */ + *pOut++ = (q31_t) acc; + + /* Compute and store error */ + e = *pRef++ - (q31_t) acc; + *pErr++ = e; + + /* Compute alpha i.e. intermediate constant for taps update */ + alpha = (q31_t) (((q63_t) e * mu) >> 31); + + /* Initialize pState pointer */ + /* Advance state pointer by 1 for the next sample */ + px = pState++; + + /* Initialize coefficient pointer */ + pb = pCoeffs; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = numTaps >> 2U; + + /* Update filter coefficients */ + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + + /* coef is in 2.30 format */ + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + /* get coef in 1.31 format by left shifting */ + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + /* update coefficient buffer to next coefficient */ + pb++; + + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = numTaps % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = numTaps; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + /* Perform the multiply-accumulate */ + coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + *pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); + pb++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Processing is complete. + Now copy the last numTaps - 1 samples to the start of the state buffer. + This prepares the state buffer for the next function call. */ + + /* Points to the start of the pState buffer */ + pStateCurnt = S->pState; + + /* copy data */ +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 taps at a time. */ + tapCnt = (numTaps - 1U) >> 2U; + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + + /* Loop unrolling: Compute remaining taps */ + tapCnt = (numTaps - 1U) % 0x4U; + +#else + + /* Initialize tapCnt with number of samples */ + tapCnt = (numTaps - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (tapCnt > 0U) + { + *pStateCurnt++ = *pState++; + + /* Decrement loop counter */ + tapCnt--; + } + +} + +/** + @} end of LMS group + */ diff --git a/CMSIS/DSP/Source/MatrixFunctions/MatrixFunctions.c b/CMSIS/DSP/Source/MatrixFunctions/MatrixFunctions.c new file mode 100644 index 000000000..da721fe67 --- /dev/null +++ b/CMSIS/DSP/Source/MatrixFunctions/MatrixFunctions.c @@ -0,0 +1,53 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: MatrixFunctions.c + * Description: Combination of all matrix function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_mat_add_f32.c" +#include "arm_mat_add_q15.c" +#include "arm_mat_add_q31.c" +#include "arm_mat_cmplx_mult_f32.c" +#include "arm_mat_cmplx_mult_q15.c" +#include "arm_mat_cmplx_mult_q31.c" +#include "arm_mat_init_f32.c" +#include "arm_mat_init_q15.c" +#include "arm_mat_init_q31.c" +#include "arm_mat_inverse_f32.c" +#include "arm_mat_inverse_f64.c" +#include "arm_mat_mult_f32.c" +#include "arm_mat_mult_fast_q15.c" +#include "arm_mat_mult_fast_q31.c" +#include "arm_mat_mult_q15.c" +#include "arm_mat_mult_q31.c" +#include "arm_mat_scale_f32.c" +#include "arm_mat_scale_q15.c" +#include "arm_mat_scale_q31.c" +#include "arm_mat_sub_f32.c" +#include "arm_mat_sub_q15.c" +#include "arm_mat_sub_q31.c" +#include "arm_mat_trans_f32.c" +#include "arm_mat_trans_q15.c" +#include "arm_mat_trans_q31.c" diff --git a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c new file mode 100644 index 000000000..8e2af3172 --- /dev/null +++ b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c @@ -0,0 +1,631 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mat_cmplx_mult_f32.c + * Description: Floating-point matrix multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMatrix + */ + +/** + @defgroup CmplxMatrixMult Complex Matrix Multiplication + + Complex Matrix multiplication is only defined if the number of columns of the + first matrix equals the number of rows of the second matrix. + Multiplying an M x N matrix with an N x P matrix results + in an M x P matrix. + @par + When matrix size checking is enabled, the functions check: + - that the inner dimensions of pSrcA and pSrcB are equal; + - that the size of the output matrix equals the outer dimensions of pSrcA and pSrcB. + */ + + +/** + @addtogroup CmplxMatrixMult + @{ + */ + +/** + @brief Floating-point Complex matrix multiplication. + @param[in] pSrcA points to first input complex matrix structure + @param[in] pSrcB points to second input complex matrix structure + @param[out] pDst points to output complex matrix structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + */ +#if defined(ARM_MATH_NEON) +arm_status arm_mat_cmplx_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn1 = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pIn2 = pSrcB->pData; /* input data matrix pointer B */ + float32_t *pInA = pSrcA->pData; /* input data matrix pointer A */ + float32_t *pOut = pDst->pData; /* output data matrix pointer */ + float32_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + float32_t sumReal1, sumImag1; /* accumulator */ + float32_t a0, b0, c0, d0; + float32_t a1, a1B,b1, b1B, c1, d1; + float32_t sumReal2, sumImag2; /* accumulator */ + + + float32x4x2_t a0V, a1V; + float32x4_t accR0,accI0, accR1,accI1,tempR, tempI; + float32x2_t accum = vdup_n_f32(0); + float32_t *pIn1B = pSrcA->pData; + + uint16_t col, i = 0U, j, rowCnt, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + float32_t sumReal1B, sumImag1B; + float32_t sumReal2B, sumImag2B; + float32_t *pxB; + +#ifdef ARM_MATH_MATRIX_CHECK + + + /* Check for matrix mismatch condition */ + if ((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || (pSrcB->numCols != pDst->numCols)) + { + + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + + rowCnt = row >> 1; + + /* Row loop */ + while (rowCnt > 0U) + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + 2 * i; + pxB = px + 2 * numColsB; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0U; + + /* Column loop */ + while (col > 0U) + { + /* Set the variable sum, that acts as accumulator, to zero */ + sumReal1 = 0.0f; + sumImag1 = 0.0f; + sumReal1B = 0.0f; + sumImag1B = 0.0f; + + sumReal2 = 0.0f; + sumImag2 = 0.0f; + sumReal2B = 0.0f; + sumImag2B = 0.0f; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pIn1 = pInA; + pIn1B = pIn1 + 2*numColsA; + + accR0 = vdupq_n_f32(0.0); + accI0 = vdupq_n_f32(0.0); + accR1 = vdupq_n_f32(0.0); + accI1 = vdupq_n_f32(0.0); + + /* Compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2; + + /* Matrix multiplication */ + while (colCnt > 0U) + { + /* Reading real part of complex matrix A */ + a0V = vld2q_f32(pIn1); // load & separate real/imag pSrcA (de-interleave 2) + a1V = vld2q_f32(pIn1B); // load & separate real/imag pSrcA (de-interleave 2) + + pIn1 += 8; + pIn1B += 8; + + tempR[0] = *pIn2; + tempI[0] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + tempR[1] = *pIn2; + tempI[1] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + tempR[2] = *pIn2; + tempI[2] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + tempR[3] = *pIn2; + tempI[3] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + accR0 = vmlaq_f32(accR0,a0V.val[0],tempR); + accR0 = vmlsq_f32(accR0,a0V.val[1],tempI); + + accI0 = vmlaq_f32(accI0,a0V.val[1],tempR); + accI0 = vmlaq_f32(accI0,a0V.val[0],tempI); + + accR1 = vmlaq_f32(accR1,a1V.val[0],tempR); + accR1 = vmlsq_f32(accR1,a1V.val[1],tempI); + + accI1 = vmlaq_f32(accI1,a1V.val[1],tempR); + accI1 = vmlaq_f32(accI1,a1V.val[0],tempI); + + /* Decrement the loop count */ + colCnt--; + } + + accum = vpadd_f32(vget_low_f32(accR0), vget_high_f32(accR0)); + sumReal1 += accum[0] + accum[1]; + + accum = vpadd_f32(vget_low_f32(accI0), vget_high_f32(accI0)); + sumImag1 += accum[0] + accum[1]; + + accum = vpadd_f32(vget_low_f32(accR1), vget_high_f32(accR1)); + sumReal1B += accum[0] + accum[1]; + + accum = vpadd_f32(vget_low_f32(accI1), vget_high_f32(accI1)); + sumImag1B += accum[0] + accum[1]; + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + colCnt = numColsA & 3; + + while (colCnt > 0U) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2)*b(2,1) + ... + a(m,p)*b(p,n) */ + a1 = *pIn1; + a1B = *pIn1B; + + c1 = *pIn2; + + b1 = *(pIn1 + 1U); + b1B = *(pIn1B + 1U); + + d1 = *(pIn2 + 1U); + + sumReal1 += a1 * c1; + sumImag1 += b1 * c1; + + sumReal1B += a1B * c1; + sumImag1B += b1B * c1; + + pIn1 += 2U; + pIn1B += 2U; + pIn2 += 2 * numColsB; + + sumReal2 -= b1 * d1; + sumImag2 += a1 * d1; + + sumReal2B -= b1B * d1; + sumImag2B += a1B * d1; + + /* Decrement the loop counter */ + colCnt--; + } + + sumReal1 += sumReal2; + sumImag1 += sumImag2; + + sumReal1B += sumReal2B; + sumImag1B += sumImag2B; + + /* Store the result in the destination buffer */ + *px++ = sumReal1; + *px++ = sumImag1; + *pxB++ = sumReal1B; + *pxB++ = sumImag1B; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + j++; + pIn2 = pSrcB->pData + 2U * j; + + /* Decrement the column loop counter */ + col--; + } + + /* Update the pointer pInA to point to the starting address of the next 2 row */ + i = i + 2*numColsB; + pInA = pInA + 4 * numColsA; + + /* Decrement the row loop counter */ + rowCnt--; + } + + rowCnt = row & 1; + while (rowCnt > 0U) + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + 2 * i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0U; + + /* Column loop */ + while (col > 0U) + { + /* Set the variable sum, that acts as accumulator, to zero */ + sumReal1 = 0.0f; + sumImag1 = 0.0f; + + sumReal2 = 0.0f; + sumImag2 = 0.0f; + + /* Initiate the pointer pIn1 to point to the starting address of the column being processed */ + pIn1 = pInA; + + accR0 = vdupq_n_f32(0.0); + accI0 = vdupq_n_f32(0.0); + + /* Compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2; + + /* Matrix multiplication */ + while (colCnt > 0U) + { + /* Reading real part of complex matrix A */ + a0V = vld2q_f32(pIn1); // load & separate real/imag pSrcA (de-interleave 2) + pIn1 += 8; + + tempR[0] = *pIn2; + tempI[0] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + tempR[1] = *pIn2; + tempI[1] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + tempR[2] = *pIn2; + tempI[2] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + tempR[3] = *pIn2; + tempI[3] = *(pIn2 + 1U); + pIn2 += 2 * numColsB; + + accR0 = vmlaq_f32(accR0,a0V.val[0],tempR); + accR0 = vmlsq_f32(accR0,a0V.val[1],tempI); + + accI0 = vmlaq_f32(accI0,a0V.val[1],tempR); + accI0 = vmlaq_f32(accI0,a0V.val[0],tempI); + + /* Decrement the loop count */ + colCnt--; + } + + accum = vpadd_f32(vget_low_f32(accR0), vget_high_f32(accR0)); + sumReal1 += accum[0] + accum[1]; + + accum = vpadd_f32(vget_low_f32(accI0), vget_high_f32(accI0)); + sumImag1 += accum[0] + accum[1]; + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + colCnt = numColsA & 3; + + while (colCnt > 0U) + { + /* c(m,n) = a(1,1)*b(1,1) + a(1,2)*b(2,1) + ... + a(m,p)*b(p,n) */ + a1 = *pIn1; + c1 = *pIn2; + + b1 = *(pIn1 + 1U); + d1 = *(pIn2 + 1U); + + sumReal1 += a1 * c1; + sumImag1 += b1 * c1; + + pIn1 += 2U; + pIn2 += 2 * numColsB; + + sumReal2 -= b1 * d1; + sumImag2 += a1 * d1; + + /* Decrement the loop counter */ + colCnt--; + } + + sumReal1 += sumReal2; + sumImag1 += sumImag2; + + /* Store the result in the destination buffer */ + *px++ = sumReal1; + *px++ = sumImag1; + + /* Update the pointer pIn2 to point to the starting address of the next column */ + j++; + pIn2 = pSrcB->pData + 2U * j; + + /* Decrement the column loop counter */ + col--; + + } + + /* Update the pointer pInA to point to the starting address of the next row */ + i = i + numColsB; + pInA = pInA + 2 * numColsA; + + /* Decrement the row loop counter */ + rowCnt--; + + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} +#else +arm_status arm_mat_cmplx_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst) +{ + float32_t *pIn1 = pSrcA->pData; /* Input data matrix pointer A */ + float32_t *pIn2 = pSrcB->pData; /* Input data matrix pointer B */ + float32_t *pInA = pSrcA->pData; /* Input data matrix pointer A */ + float32_t *pOut = pDst->pData; /* Output data matrix pointer */ + float32_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* Number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* Number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* Number of columns of input matrix A */ + float32_t sumReal, sumImag; /* Accumulator */ + float32_t a1, b1, c1, d1; + uint32_t col, i = 0U, j, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#if defined (ARM_MATH_LOOPUNROLL) + float32_t a0, b0, c0, d0; +#endif + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if ((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || + (pSrcB->numCols != pDst->numCols) ) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else + +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + 2 * i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0U; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sumReal = 0.0f; + sumImag = 0.0f; + + /* Initiate pointer pIn1 to point to starting address of column being processed */ + pIn1 = pInA; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2U; + + /* matrix multiplication */ + while (colCnt > 0U) + { + + /* Reading real part of complex matrix A */ + a0 = *pIn1; + + /* Reading real part of complex matrix B */ + c0 = *pIn2; + + /* Reading imaginary part of complex matrix A */ + b0 = *(pIn1 + 1U); + + /* Reading imaginary part of complex matrix B */ + d0 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += a0 * c0; + sumImag += b0 * c0; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= b0 * d0; + sumImag += a0 * d0; + + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + + /* read real and imag values from pSrcA and pSrcB buffer */ + a1 = *(pIn1 ); + c1 = *(pIn2 ); + b1 = *(pIn1 + 1U); + d1 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += a1 * c1; + sumImag += b1 * c1; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= b1 * d1; + sumImag += a1 * d1; + + a0 = *(pIn1 ); + c0 = *(pIn2 ); + b0 = *(pIn1 + 1U); + d0 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += a0 * c0; + sumImag += b0 * c0; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= b0 * d0; + sumImag += a0 * d0; + + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + + a1 = *(pIn1 ); + c1 = *(pIn2 ); + b1 = *(pIn1 + 1U); + d1 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += a1 * c1; + sumImag += b1 * c1; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= b1 * d1; + sumImag += a1 * d1; + + /* Decrement loop count */ + colCnt--; + } + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + colCnt = numColsA % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + colCnt = numColsA; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (colCnt > 0U) + { + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + a1 = *(pIn1 ); + c1 = *(pIn2 ); + b1 = *(pIn1 + 1U); + d1 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += a1 * c1; + sumImag += b1 * c1; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= b1 * d1; + sumImag += a1 * d1; + + /* Decrement loop counter */ + colCnt--; + } + + /* Store result in destination buffer */ + *px++ = sumReal; + *px++ = sumImag; + + /* Update pointer pIn2 to point to starting address of next column */ + j++; + pIn2 = pSrcB->pData + 2U * j; + + /* Decrement column loop counter */ + col--; + + } while (col > 0U); + + /* Update pointer pInA to point to starting address of next row */ + i = i + numColsB; + pInA = pInA + 2 * numColsA; + + /* Decrement row loop counter */ + row--; + + } while (row > 0U); + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of MatrixMult group + */ diff --git a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c new file mode 100644 index 000000000..4c5a45b72 --- /dev/null +++ b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c @@ -0,0 +1,340 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cmplx_mat_mult_q15.c + * Description: Q15 complex matrix multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMatrix + */ + +/** + @addtogroup CmplxMatrixMult + @{ + */ + +/** + @brief Q15 Complex matrix multiplication. + @param[in] pSrcA points to first input complex matrix structure + @param[in] pSrcB points to second input complex matrix structure + @param[out] pDst points to output complex matrix structure + @param[in] pScratch points to an array for storing intermediate results + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + + @par Conditions for optimum performance + Input, output and state buffers should be aligned by 32-bit + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. The inputs to the + multiplications are in 1.15 format and multiplications yield a 2.30 result. + The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. + This approach provides 33 guard bits and there is no risk of overflow. The 34.30 result is then + truncated to 34.15 format by discarding the low 15 bits and then saturated to 1.15 format. + */ + +arm_status arm_mat_cmplx_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pScratch) +{ + q15_t *pSrcBT = pScratch; /* input data matrix pointer for transpose */ + q15_t *pInA = pSrcA->pData; /* input data matrix pointer A of Q15 type */ + q15_t *pInB = pSrcB->pData; /* input data matrix pointer B of Q15 type */ + q15_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* number of columns of input matrix A */ + uint16_t numRowsB = pSrcB->numRows; /* number of rows of input matrix A */ + q63_t sumReal, sumImag; /* accumulator */ + uint32_t col, i = 0U, row = numRowsB, colCnt; /* Loop counters */ + arm_status status; /* Status of matrix multiplication */ + +#if defined (ARM_MATH_DSP) + q31_t prod1, prod2; + q31_t pSourceA, pSourceB; +#else + q15_t a, b, c, d; +#endif /* #if defined (ARM_MATH_DSP) */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if ((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || + (pSrcB->numCols != pDst->numCols) ) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else + +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose */ + do + { + /* The pointer px is set to starting address of column being processed */ + px = pSrcBT + i; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and exchange the columns with row elements */ + col = numColsB >> 2; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + a second loop below computes the remaining 1 to 3 samples. */ + while (col > 0U) + { + /* Read two elements from row */ + write_q15x2 (px, read_q15x2_ia (&pInB)); + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from row */ + write_q15x2 (px, read_q15x2_ia (&pInB)); + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from row */ + write_q15x2 (px, read_q15x2_ia (&pInB)); + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB * 2; + + /* Read two elements from row */ + write_q15x2 (px, read_q15x2_ia (&pInB)); + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB * 2; + + /* Decrement column loop counter */ + col--; + } + + /* If the columns of pSrcB is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + col = numColsB % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + col = numColsB; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (col > 0U) + { + /* Read two elements from row */ + write_q15x2 (px, read_q15x2_ia (&pInB)); + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB * 2; + + /* Decrement column loop counter */ + col--; + } + + i = i + 2U; + + /* Decrement row loop counter */ + row--; + + } while (row > 0U); + + /* Reset variables for usage in following multiplication process */ + row = numRowsA; + i = 0U; + px = pDst->pData; + + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* For every row wise process, column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, pIn2 pointer is set to starting address of transposed pSrcB data */ + pInB = pSrcBT; + + /* column loop */ + do + { + /* Set variable sum, that acts as accumulator, to zero */ + sumReal = 0; + sumImag = 0; + + /* Initiate pointer pInA to point to starting address of column being processed */ + pInA = pSrcA->pData + i * 2; + + /* Apply loop unrolling and compute 2 MACs simultaneously. */ + colCnt = numColsA >> 1U; + + /* matrix multiplication */ + while (colCnt > 0U) + { + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + +#if defined (ARM_MATH_DSP) + + /* read real and imag values from pSrcA and pSrcB buffer */ + pSourceA = read_q15x2_ia ((q15_t **) &pInA); + pSourceB = read_q15x2_ia ((q15_t **) &pInB); + + /* Multiply and Accumlates */ +#ifdef ARM_MATH_BIG_ENDIAN + prod1 = -__SMUSD(pSourceA, pSourceB); +#else + prod1 = __SMUSD(pSourceA, pSourceB); +#endif + prod2 = __SMUADX(pSourceA, pSourceB); + sumReal += (q63_t) prod1; + sumImag += (q63_t) prod2; + + /* read real and imag values from pSrcA and pSrcB buffer */ + pSourceA = read_q15x2_ia ((q15_t **) &pInA); + pSourceB = read_q15x2_ia ((q15_t **) &pInB); + + /* Multiply and Accumlates */ +#ifdef ARM_MATH_BIG_ENDIAN + prod1 = -__SMUSD(pSourceA, pSourceB); +#else + prod1 = __SMUSD(pSourceA, pSourceB); +#endif + prod2 = __SMUADX(pSourceA, pSourceB); + sumReal += (q63_t) prod1; + sumImag += (q63_t) prod2; + +#else /* #if defined (ARM_MATH_DSP) */ + + /* read real and imag values from pSrcA buffer */ + a = *pInA; + b = *(pInA + 1U); + /* read real and imag values from pSrcB buffer */ + c = *pInB; + d = *(pInB + 1U); + + /* Multiply and Accumlates */ + sumReal += (q31_t) a *c; + sumImag += (q31_t) a *d; + sumReal -= (q31_t) b *d; + sumImag += (q31_t) b *c; + + /* read next real and imag values from pSrcA buffer */ + a = *(pInA + 2U); + b = *(pInA + 3U); + /* read next real and imag values from pSrcB buffer */ + c = *(pInB + 2U); + d = *(pInB + 3U); + + /* update pointer */ + pInA += 4U; + + /* Multiply and Accumlates */ + sumReal += (q31_t) a * c; + sumImag += (q31_t) a * d; + sumReal -= (q31_t) b * d; + sumImag += (q31_t) b * c; + /* update pointer */ + pInB += 4U; + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + colCnt--; + } + + /* process odd column samples */ + if ((numColsA & 0x1U) > 0U) + { + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + +#if defined (ARM_MATH_DSP) + /* read real and imag values from pSrcA and pSrcB buffer */ + pSourceA = read_q15x2_ia ((q15_t **) &pInA); + pSourceB = read_q15x2_ia ((q15_t **) &pInB); + + /* Multiply and Accumlates */ +#ifdef ARM_MATH_BIG_ENDIAN + prod1 = -__SMUSD(pSourceA, pSourceB); +#else + prod1 = __SMUSD(pSourceA, pSourceB); +#endif + prod2 = __SMUADX(pSourceA, pSourceB); + sumReal += (q63_t) prod1; + sumImag += (q63_t) prod2; + +#else /* #if defined (ARM_MATH_DSP) */ + + /* read real and imag values from pSrcA and pSrcB buffer */ + a = *pInA++; + b = *pInA++; + c = *pInB++; + d = *pInB++; + + /* Multiply and Accumlates */ + sumReal += (q31_t) a * c; + sumImag += (q31_t) a * d; + sumReal -= (q31_t) b * d; + sumImag += (q31_t) b * c; + +#endif /* #if defined (ARM_MATH_DSP) */ + + } + + /* Saturate and store result in destination buffer */ + *px++ = (q15_t) (__SSAT(sumReal >> 15, 16)); + *px++ = (q15_t) (__SSAT(sumImag >> 15, 16)); + + /* Decrement column loop counter */ + col--; + + } while (col > 0U); + + i = i + numColsA; + + /* Decrement row loop counter */ + row--; + + } while (row > 0U); + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + @} end of MatrixMult group + */ diff --git a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c new file mode 100644 index 000000000..7b458f92b --- /dev/null +++ b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c @@ -0,0 +1,283 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mat_cmplx_mult_q31.c + * Description: Floating-point matrix multiplication + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMatrix + */ + +/** + @addtogroup CmplxMatrixMult + @{ + */ + +/** + @brief Q31 Complex matrix multiplication. + @param[in] pSrcA points to first input complex matrix structure + @param[in] pSrcB points to second input complex matrix structure + @param[out] pDst points to output complex matrix structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The accumulator has a 2.62 format and maintains full precision of the intermediate + multiplication results but provides only a single guard bit. There is no saturation + on intermediate additions. Thus, if the accumulator overflows it wraps around and + distorts the result. The input signals should be scaled down to avoid intermediate + overflows. The input is thus scaled down by log2(numColsA) bits + to avoid overflows, as a total of numColsA additions are performed internally. + The 2.62 accumulator is right shifted by 31 bits and saturated to 1.31 format to yield the final result. + */ + +arm_status arm_mat_cmplx_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pIn1 = pSrcA->pData; /* Input data matrix pointer A */ + q31_t *pIn2 = pSrcB->pData; /* Input data matrix pointer B */ + q31_t *pInA = pSrcA->pData; /* Input data matrix pointer A */ + q31_t *pOut = pDst->pData; /* Output data matrix pointer */ + q31_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* Number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* Number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* Number of columns of input matrix A */ + q63_t sumReal, sumImag; /* Accumulator */ + q31_t a1, b1, c1, d1; + uint32_t col, i = 0U, j, row = numRowsA, colCnt; /* loop counters */ + arm_status status; /* status of matrix multiplication */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t a0, b0, c0, d0; +#endif + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if ((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || + (pSrcB->numCols != pDst->numCols) ) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else + +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + do + { + /* Output pointer is set to starting address of the row being processed */ + px = pOut + 2 * i; + + /* For every row wise process, the column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, the pIn2 pointer is set + ** to the starting address of the pSrcB data */ + pIn2 = pSrcB->pData; + + j = 0U; + + /* column loop */ + do + { + /* Set the variable sum, that acts as accumulator, to zero */ + sumReal = 0.0; + sumImag = 0.0; + + /* Initiate pointer pIn1 to point to starting address of column being processed */ + pIn1 = pInA; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Apply loop unrolling and compute 4 MACs simultaneously. */ + colCnt = numColsA >> 2U; + + /* matrix multiplication */ + while (colCnt > 0U) + { + + /* Reading real part of complex matrix A */ + a0 = *pIn1; + + /* Reading real part of complex matrix B */ + c0 = *pIn2; + + /* Reading imaginary part of complex matrix A */ + b0 = *(pIn1 + 1U); + + /* Reading imaginary part of complex matrix B */ + d0 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += (q63_t) a0 * c0; + sumImag += (q63_t) b0 * c0; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= (q63_t) b0 * d0; + sumImag += (q63_t) a0 * d0; + + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + + /* read real and imag values from pSrcA and pSrcB buffer */ + a1 = *(pIn1 ); + c1 = *(pIn2 ); + b1 = *(pIn1 + 1U); + d1 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += (q63_t) a1 * c1; + sumImag += (q63_t) b1 * c1; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= (q63_t) b1 * d1; + sumImag += (q63_t) a1 * d1; + + a0 = *(pIn1 ); + c0 = *(pIn2 ); + b0 = *(pIn1 + 1U); + d0 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += (q63_t) a0 * c0; + sumImag += (q63_t) b0 * c0; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= (q63_t) b0 * d0; + sumImag += (q63_t) a0 * d0; + + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + + a1 = *(pIn1 ); + c1 = *(pIn2 ); + b1 = *(pIn1 + 1U); + d1 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += (q63_t) a1 * c1; + sumImag += (q63_t) b1 * c1; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= (q63_t) b1 * d1; + sumImag += (q63_t) a1 * d1; + + /* Decrement loop count */ + colCnt--; + } + + /* If the columns of pSrcA is not a multiple of 4, compute any remaining MACs here. + ** No loop unrolling is used. */ + colCnt = numColsA % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + colCnt = numColsA; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (colCnt > 0U) + { + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + a1 = *(pIn1 ); + c1 = *(pIn2 ); + b1 = *(pIn1 + 1U); + d1 = *(pIn2 + 1U); + + /* Multiply and Accumlates */ + sumReal += (q63_t) a1 * c1; + sumImag += (q63_t) b1 * c1; + + /* update pointers */ + pIn1 += 2U; + pIn2 += 2 * numColsB; + + /* Multiply and Accumlates */ + sumReal -= (q63_t) b1 * d1; + sumImag += (q63_t) a1 * d1; + + /* Decrement loop counter */ + colCnt--; + } + + /* Store result in destination buffer */ + *px++ = (q31_t) clip_q63_to_q31(sumReal >> 31); + *px++ = (q31_t) clip_q63_to_q31(sumImag >> 31); + + /* Update pointer pIn2 to point to starting address of next column */ + j++; + pIn2 = pSrcB->pData + 2U * j; + + /* Decrement column loop counter */ + col--; + + } while (col > 0U); + + /* Update pointer pInA to point to starting address of next row */ + i = i + numColsB; + pInA = pInA + 2 * numColsA; + + /* Decrement row loop counter */ + row--; + + } while (row > 0U); + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + @} end of MatrixMult group + */ diff --git a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_inverse_f64.c b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_inverse_f64.c new file mode 100644 index 000000000..4607e075a --- /dev/null +++ b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_inverse_f64.c @@ -0,0 +1,673 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mat_inverse_f64.c + * Description: Floating-point matrix inverse + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMatrix + */ + + +/** + @addtogroup MatrixInv + @{ + */ + +/** + @brief Floating-point (64 bit) matrix inverse. + @param[in] pSrc points to input matrix structure + @param[out] pDst points to output matrix structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + - \ref ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible) + */ + +arm_status arm_mat_inverse_f64( + const arm_matrix_instance_f64 * pSrc, + arm_matrix_instance_f64 * pDst) +{ + float64_t *pIn = pSrc->pData; /* input data matrix pointer */ + float64_t *pOut = pDst->pData; /* output data matrix pointer */ + float64_t *pInT1, *pInT2; /* Temporary input data matrix pointer */ + float64_t *pOutT1, *pOutT2; /* Temporary output data matrix pointer */ + float64_t *pPivotRowIn, *pPRT_in, *pPivotRowDst, *pPRT_pDst; /* Temporary input and output data matrix pointer */ + uint32_t numRows = pSrc->numRows; /* Number of rows in the matrix */ + uint32_t numCols = pSrc->numCols; /* Number of Cols in the matrix */ + +#if defined (ARM_MATH_DSP) + float64_t maxC; /* maximum value in the column */ + + float64_t Xchg, in = 0.0, in1; /* Temporary input values */ + uint32_t i, rowCnt, flag = 0U, j, loopCnt, k, l; /* loop counters */ + arm_status status; /* status of matrix inverse */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if ((pSrc->numRows != pSrc->numCols) || + (pDst->numRows != pDst->numCols) || + (pSrc->numRows != pDst->numRows) ) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else + +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + + /*-------------------------------------------------------------------------------------------------------------- + * Matrix Inverse can be solved using elementary row operations. + * + * Gauss-Jordan Method: + * + * 1. First combine the identity matrix and the input matrix separated by a bar to form an + * augmented matrix as follows: + * _ _ _ _ + * | a11 a12 | 1 0 | | X11 X12 | + * | | | = | | + * |_ a21 a22 | 0 1 _| |_ X21 X21 _| + * + * 2. In our implementation, pDst Matrix is used as identity matrix. + * + * 3. Begin with the first row. Let i = 1. + * + * 4. Check to see if the pivot for column i is the greatest of the column. + * The pivot is the element of the main diagonal that is on the current row. + * For instance, if working with row i, then the pivot element is aii. + * If the pivot is not the most significant of the columns, exchange that row with a row + * below it that does contain the most significant value in column i. If the most + * significant value of the column is zero, then an inverse to that matrix does not exist. + * The most significant value of the column is the absolute maximum. + * + * 5. Divide every element of row i by the pivot. + * + * 6. For every row below and row i, replace that row with the sum of that row and + * a multiple of row i so that each new element in column i below row i is zero. + * + * 7. Move to the next row and column and repeat steps 2 through 5 until you have zeros + * for every element below and above the main diagonal. + * + * 8. Now an identical matrix is formed to the left of the bar(input matrix, pSrc). + * Therefore, the matrix to the right of the bar is our solution(pDst matrix, pDst). + *----------------------------------------------------------------------------------------------------------------*/ + + /* Working pointer for destination matrix */ + pOutT1 = pOut; + + /* Loop over the number of rows */ + rowCnt = numRows; + + /* Making the destination matrix as identity matrix */ + while (rowCnt > 0U) + { + /* Writing all zeroes in lower triangle of the destination matrix */ + j = numRows - rowCnt; + while (j > 0U) + { + *pOutT1++ = 0.0; + j--; + } + + /* Writing all ones in the diagonal of the destination matrix */ + *pOutT1++ = 1.0; + + /* Writing all zeroes in upper triangle of the destination matrix */ + j = rowCnt - 1U; + while (j > 0U) + { + *pOutT1++ = 0.0; + j--; + } + + /* Decrement loop counter */ + rowCnt--; + } + + /* Loop over the number of columns of the input matrix. + All the elements in each column are processed by the row operations */ + loopCnt = numCols; + + /* Index modifier to navigate through the columns */ + l = 0U; + + while (loopCnt > 0U) + { + /* Check if the pivot element is zero.. + * If it is zero then interchange the row with non zero row below. + * If there is no non zero element to replace in the rows below, + * then the matrix is Singular. */ + + /* Working pointer for the input matrix that points + * to the pivot element of the particular row */ + pInT1 = pIn + (l * numCols); + + /* Working pointer for the destination matrix that points + * to the pivot element of the particular row */ + pOutT1 = pOut + (l * numCols); + + /* Temporary variable to hold the pivot value */ + in = *pInT1; + + /* Grab the most significant value from column l */ + maxC = 0; + for (i = l; i < numRows; i++) + { + maxC = *pInT1 > 0 ? (*pInT1 > maxC ? *pInT1 : maxC) : (-*pInT1 > maxC ? -*pInT1 : maxC); + pInT1 += numCols; + } + + /* Update the status if the matrix is singular */ + if (maxC == 0.0) + { + return ARM_MATH_SINGULAR; + } + + /* Restore pInT1 */ + pInT1 = pIn; + + /* Destination pointer modifier */ + k = 1U; + + /* Check if the pivot element is the most significant of the column */ + if ( (in > 0.0 ? in : -in) != maxC) + { + /* Loop over the number rows present below */ + i = numRows - (l + 1U); + + while (i > 0U) + { + /* Update the input and destination pointers */ + pInT2 = pInT1 + (numCols * l); + pOutT2 = pOutT1 + (numCols * k); + + /* Look for the most significant element to + * replace in the rows below */ + if ((*pInT2 > 0.0 ? *pInT2: -*pInT2) == maxC) + { + /* Loop over number of columns + * to the right of the pilot element */ + j = numCols - l; + + while (j > 0U) + { + /* Exchange the row elements of the input matrix */ + Xchg = *pInT2; + *pInT2++ = *pInT1; + *pInT1++ = Xchg; + + /* Decrement the loop counter */ + j--; + } + + /* Loop over number of columns of the destination matrix */ + j = numCols; + + while (j > 0U) + { + /* Exchange the row elements of the destination matrix */ + Xchg = *pOutT2; + *pOutT2++ = *pOutT1; + *pOutT1++ = Xchg; + + /* Decrement loop counter */ + j--; + } + + /* Flag to indicate whether exchange is done or not */ + flag = 1U; + + /* Break after exchange is done */ + break; + } + + /* Update the destination pointer modifier */ + k++; + + /* Decrement loop counter */ + i--; + } + } + + /* Update the status if the matrix is singular */ + if ((flag != 1U) && (in == 0.0)) + { + return ARM_MATH_SINGULAR; + } + + /* Points to the pivot row of input and destination matrices */ + pPivotRowIn = pIn + (l * numCols); + pPivotRowDst = pOut + (l * numCols); + + /* Temporary pointers to the pivot row pointers */ + pInT1 = pPivotRowIn; + pInT2 = pPivotRowDst; + + /* Pivot element of the row */ + in = *pPivotRowIn; + + /* Loop over number of columns + * to the right of the pilot element */ + j = (numCols - l); + + while (j > 0U) + { + /* Divide each element of the row of the input matrix + * by the pivot element */ + in1 = *pInT1; + *pInT1++ = in1 / in; + + /* Decrement the loop counter */ + j--; + } + + /* Loop over number of columns of the destination matrix */ + j = numCols; + + while (j > 0U) + { + /* Divide each element of the row of the destination matrix + * by the pivot element */ + in1 = *pInT2; + *pInT2++ = in1 / in; + + /* Decrement the loop counter */ + j--; + } + + /* Replace the rows with the sum of that row and a multiple of row i + * so that each new element in column i above row i is zero.*/ + + /* Temporary pointers for input and destination matrices */ + pInT1 = pIn; + pInT2 = pOut; + + /* index used to check for pivot element */ + i = 0U; + + /* Loop over number of rows */ + /* to be replaced by the sum of that row and a multiple of row i */ + k = numRows; + + while (k > 0U) + { + /* Check for the pivot element */ + if (i == l) + { + /* If the processing element is the pivot element, + only the columns to the right are to be processed */ + pInT1 += numCols - l; + + pInT2 += numCols; + } + else + { + /* Element of the reference row */ + in = *pInT1; + + /* Working pointers for input and destination pivot rows */ + pPRT_in = pPivotRowIn; + pPRT_pDst = pPivotRowDst; + + /* Loop over the number of columns to the right of the pivot element, + to replace the elements in the input matrix */ + j = (numCols - l); + + while (j > 0U) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + in1 = *pInT1; + *pInT1++ = in1 - (in * *pPRT_in++); + + /* Decrement the loop counter */ + j--; + } + + /* Loop over the number of columns to + replace the elements in the destination matrix */ + j = numCols; + + while (j > 0U) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + in1 = *pInT2; + *pInT2++ = in1 - (in * *pPRT_pDst++); + + /* Decrement loop counter */ + j--; + } + + } + + /* Increment temporary input pointer */ + pInT1 = pInT1 + l; + + /* Decrement loop counter */ + k--; + + /* Increment pivot index */ + i++; + } + + /* Increment the input pointer */ + pIn++; + + /* Decrement the loop counter */ + loopCnt--; + + /* Increment the index modifier */ + l++; + } + + +#else + + float64_t Xchg, in = 0.0; /* Temporary input values */ + uint32_t i, rowCnt, flag = 0U, j, loopCnt, k, l; /* loop counters */ + arm_status status; /* status of matrix inverse */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if ((pSrc->numRows != pSrc->numCols) || + (pDst->numRows != pDst->numCols) || + (pSrc->numRows != pDst->numRows) ) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else + +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + + /*-------------------------------------------------------------------------------------------------------------- + * Matrix Inverse can be solved using elementary row operations. + * + * Gauss-Jordan Method: + * + * 1. First combine the identity matrix and the input matrix separated by a bar to form an + * augmented matrix as follows: + * _ _ _ _ _ _ _ _ + * | | a11 a12 | | | 1 0 | | | X11 X12 | + * | | | | | | | = | | + * |_ |_ a21 a22 _| | |_0 1 _| _| |_ X21 X21 _| + * + * 2. In our implementation, pDst Matrix is used as identity matrix. + * + * 3. Begin with the first row. Let i = 1. + * + * 4. Check to see if the pivot for row i is zero. + * The pivot is the element of the main diagonal that is on the current row. + * For instance, if working with row i, then the pivot element is aii. + * If the pivot is zero, exchange that row with a row below it that does not + * contain a zero in column i. If this is not possible, then an inverse + * to that matrix does not exist. + * + * 5. Divide every element of row i by the pivot. + * + * 6. For every row below and row i, replace that row with the sum of that row and + * a multiple of row i so that each new element in column i below row i is zero. + * + * 7. Move to the next row and column and repeat steps 2 through 5 until you have zeros + * for every element below and above the main diagonal. + * + * 8. Now an identical matrix is formed to the left of the bar(input matrix, src). + * Therefore, the matrix to the right of the bar is our solution(dst matrix, dst). + *----------------------------------------------------------------------------------------------------------------*/ + + /* Working pointer for destination matrix */ + pOutT1 = pOut; + + /* Loop over the number of rows */ + rowCnt = numRows; + + /* Making the destination matrix as identity matrix */ + while (rowCnt > 0U) + { + /* Writing all zeroes in lower triangle of the destination matrix */ + j = numRows - rowCnt; + while (j > 0U) + { + *pOutT1++ = 0.0; + j--; + } + + /* Writing all ones in the diagonal of the destination matrix */ + *pOutT1++ = 1.0; + + /* Writing all zeroes in upper triangle of the destination matrix */ + j = rowCnt - 1U; + while (j > 0U) + { + *pOutT1++ = 0.0; + j--; + } + + /* Decrement loop counter */ + rowCnt--; + } + + /* Loop over the number of columns of the input matrix. + All the elements in each column are processed by the row operations */ + loopCnt = numCols; + + /* Index modifier to navigate through the columns */ + l = 0U; + + while (loopCnt > 0U) + { + /* Check if the pivot element is zero.. + * If it is zero then interchange the row with non zero row below. + * If there is no non zero element to replace in the rows below, + * then the matrix is Singular. */ + + /* Working pointer for the input matrix that points + * to the pivot element of the particular row */ + pInT1 = pIn + (l * numCols); + + /* Working pointer for the destination matrix that points + * to the pivot element of the particular row */ + pOutT1 = pOut + (l * numCols); + + /* Temporary variable to hold the pivot value */ + in = *pInT1; + + /* Destination pointer modifier */ + k = 1U; + + /* Check if the pivot element is zero */ + if (*pInT1 == 0.0) + { + /* Loop over the number rows present below */ + for (i = (l + 1U); i < numRows; i++) + { + /* Update the input and destination pointers */ + pInT2 = pInT1 + (numCols * l); + pOutT2 = pOutT1 + (numCols * k); + + /* Check if there is a non zero pivot element to + * replace in the rows below */ + if (*pInT2 != 0.0) + { + /* Loop over number of columns + * to the right of the pilot element */ + for (j = 0U; j < (numCols - l); j++) + { + /* Exchange the row elements of the input matrix */ + Xchg = *pInT2; + *pInT2++ = *pInT1; + *pInT1++ = Xchg; + } + + for (j = 0U; j < numCols; j++) + { + Xchg = *pOutT2; + *pOutT2++ = *pOutT1; + *pOutT1++ = Xchg; + } + + /* Flag to indicate whether exchange is done or not */ + flag = 1U; + + /* Break after exchange is done */ + break; + } + + /* Update the destination pointer modifier */ + k++; + } + } + + /* Update the status if the matrix is singular */ + if ((flag != 1U) && (in == 0.0)) + { + return ARM_MATH_SINGULAR; + } + + /* Points to the pivot row of input and destination matrices */ + pPivotRowIn = pIn + (l * numCols); + pPivotRowDst = pOut + (l * numCols); + + /* Temporary pointers to the pivot row pointers */ + pInT1 = pPivotRowIn; + pOutT1 = pPivotRowDst; + + /* Pivot element of the row */ + in = *(pIn + (l * numCols)); + + /* Loop over number of columns + * to the right of the pilot element */ + for (j = 0U; j < (numCols - l); j++) + { + /* Divide each element of the row of the input matrix + * by the pivot element */ + *pInT1 = *pInT1 / in; + pInT1++; + } + for (j = 0U; j < numCols; j++) + { + /* Divide each element of the row of the destination matrix + * by the pivot element */ + *pOutT1 = *pOutT1 / in; + pOutT1++; + } + + /* Replace the rows with the sum of that row and a multiple of row i + * so that each new element in column i above row i is zero.*/ + + /* Temporary pointers for input and destination matrices */ + pInT1 = pIn; + pOutT1 = pOut; + + for (i = 0U; i < numRows; i++) + { + /* Check for the pivot element */ + if (i == l) + { + /* If the processing element is the pivot element, + only the columns to the right are to be processed */ + pInT1 += numCols - l; + pOutT1 += numCols; + } + else + { + /* Element of the reference row */ + in = *pInT1; + + /* Working pointers for input and destination pivot rows */ + pPRT_in = pPivotRowIn; + pPRT_pDst = pPivotRowDst; + + /* Loop over the number of columns to the right of the pivot element, + to replace the elements in the input matrix */ + for (j = 0U; j < (numCols - l); j++) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + *pInT1 = *pInT1 - (in * *pPRT_in++); + pInT1++; + } + + /* Loop over the number of columns to + replace the elements in the destination matrix */ + for (j = 0U; j < numCols; j++) + { + /* Replace the element by the sum of that row + and a multiple of the reference row */ + *pOutT1 = *pOutT1 - (in * *pPRT_pDst++); + pOutT1++; + } + + } + + /* Increment temporary input pointer */ + pInT1 = pInT1 + l; + } + + /* Increment the input pointer */ + pIn++; + + /* Decrement the loop counter */ + loopCnt--; + + /* Increment the index modifier */ + l++; + } + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + + if ((flag != 1U) && (in == 0.0)) + { + pIn = pSrc->pData; + for (i = 0; i < numRows * numCols; i++) + { + if (pIn[i] != 0.0) + break; + } + + if (i == numRows * numCols) + status = ARM_MATH_SINGULAR; + } + } + + /* Return to application */ + return (status); +} + +/** + @} end of MatrixInv group + */ diff --git a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_mult_fast_q15.c b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_mult_fast_q15.c new file mode 100644 index 000000000..670ace1f4 --- /dev/null +++ b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_mult_fast_q15.c @@ -0,0 +1,483 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mat_mult_fast_q15.c + * Description: Q15 matrix multiplication (fast variant) + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMatrix + */ + +/** + @addtogroup MatrixMult + @{ + */ + +/** + @brief Q15 matrix multiplication (fast variant). + @param[in] pSrcA points to the first input matrix structure + @param[in] pSrcB points to the second input matrix structure + @param[out] pDst points to output matrix structure + @param[in] pState points to the array for storing intermediate results + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + + @par Scaling and Overflow Behavior + The difference between the function \ref arm_mat_mult_q15() and this fast variant is that + the fast variant use a 32-bit rather than a 64-bit accumulator. + The result of each 1.15 x 1.15 multiplication is truncated to + 2.30 format. These intermediate results are accumulated in a 32-bit register in 2.30 + format. Finally, the accumulator is saturated and converted to a 1.15 result. + @par + The fast version has the same overflow behavior as the standard version but provides + less precision since it discards the low 16 bits of each multiplication result. + In order to avoid overflows completely the input signals must be scaled down. + Scale down one of the input matrices by log2(numColsA) bits to avoid overflows, + as a total of numColsA additions are computed internally for each output element. + @remark + Refer to \ref arm_mat_mult_q15() for a slower implementation of this function + which uses 64-bit accumulation to provide higher precision. + */ + +arm_status arm_mat_mult_fast_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState) +{ + q31_t sum; /* Accumulator */ + q15_t *pSrcBT = pState; /* Input data matrix pointer for transpose */ + q15_t *pInA = pSrcA->pData; /* Input data matrix pointer A of Q15 type */ + q15_t *pInB = pSrcB->pData; /* Input data matrix pointer B of Q15 type */ + q15_t *px; /* Temporary output data matrix pointer */ + uint16_t numRowsA = pSrcA->numRows; /* Number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* Number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* Number of columns of input matrix A */ + uint16_t numRowsB = pSrcB->numRows; /* Number of rows of input matrix A */ + uint32_t col, i = 0U, row = numRowsB, colCnt; /* Loop counters */ + arm_status status; /* Status of matrix multiplication */ + +#if defined (ARM_MATH_DSP) + q31_t in; /* Temporary variable to hold the input value */ + q31_t inA1, inB1, inA2, inB2; + q31_t sum2, sum3, sum4; + q15_t *pInA2, *pInB2, *px2; + uint32_t j = 0; +#else + q15_t in; /* Temporary variable to hold the input value */ + q15_t inA1, inB1, inA2, inB2; +#endif /* #if defined (ARM_MATH_DSP) */ + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if ((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || + (pSrcB->numCols != pDst->numCols) ) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else + +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + /* Matrix transpose */ + do + { + /* The pointer px is set to starting address of column being processed */ + px = pSrcBT + i; + + /* Apply loop unrolling and exchange columns with row elements */ + col = numColsB >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (col > 0U) + { + +#if defined (ARM_MATH_DSP) + + /* Read two elements from row */ + in = read_q15x2_ia ((q15_t **) &pInB); + + /* Unpack and store one element in destination */ +#ifndef ARM_MATH_BIG_ENDIAN + *px = (q15_t) in; +#else + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB; + + /* Unpack and store second element in destination */ +#ifndef ARM_MATH_BIG_ENDIAN + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); +#else + *px = (q15_t) in; +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB; + + in = read_q15x2_ia ((q15_t **) &pInB); +#ifndef ARM_MATH_BIG_ENDIAN + *px = (q15_t) in; +#else + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + px += numRowsB; + +#ifndef ARM_MATH_BIG_ENDIAN + *px = (q15_t) ((in & (q31_t) 0xffff0000) >> 16); +#else + *px = (q15_t) in; +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + px += numRowsB; + +#else /* #if defined (ARM_MATH_DSP) */ + + /* Read one element from row */ + in = *pInB++; + + /* Store one element in destination */ + *px = in; + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB; + + in = *pInB++; + *px = in; + px += numRowsB; + + in = *pInB++; + *px = in; + px += numRowsB; + + in = *pInB++; + *px = in; + px += numRowsB; + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement column loop counter */ + col--; + } + + /* If the columns of pSrcB is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + col = numColsB % 0x4U; + + while (col > 0U) + { + /* Read and store input element in destination */ + *px = *pInB++; + + /* Update pointer px to point to next row of transposed matrix */ + px += numRowsB; + + /* Decrement column loop counter */ + col--; + } + + i++; + + /* Decrement row loop counter */ + row--; + + } while (row > 0U); + + /* Reset variables for usage in following multiplication process */ + row = numRowsA; + i = 0U; + px = pDst->pData; + +#if defined (ARM_MATH_DSP) + /* Process two rows from matrix A at a time and output two rows at a time */ + row = row >> 1U; + px2 = px + numColsB; +#endif + + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + while (row > 0U) + { + /* For every row wise process, column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, pIn2 pointer is set to starting address of transposed pSrcB data */ + pInB = pSrcBT; + +#if defined (ARM_MATH_DSP) + /* Process two (transposed) columns from matrix B at a time */ + col = col >> 1U; + j = 0; +#endif + + /* column loop */ + while (col > 0U) + { + /* Set variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Initiate pointer pInA to point to starting address of column being processed */ + pInA = pSrcA->pData + i; + +#if defined (ARM_MATH_DSP) + sum2 = 0; + sum3 = 0; + sum4 = 0; + pInB = pSrcBT + j; + pInA2 = pInA + numColsA; + pInB2 = pInB + numRowsB; + + /* Read in two elements at once - alows dual MAC instruction */ + colCnt = numColsA >> 1U; +#else + colCnt = numColsA >> 2U; +#endif + + /* matrix multiplication */ + while (colCnt > 0U) + { + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + +#if defined (ARM_MATH_DSP) + /* read real and imag values from pSrcA and pSrcB buffer */ + inA1 = read_q15x2_ia ((q15_t **) &pInA); + inB1 = read_q15x2_ia ((q15_t **) &pInB); + + inA2 = read_q15x2_ia ((q15_t **) &pInA2); + inB2 = read_q15x2_ia ((q15_t **) &pInB2); + + /* Multiply and Accumlates */ + sum = __SMLAD(inA1, inB1, sum); + sum2 = __SMLAD(inA1, inB2, sum2); + sum3 = __SMLAD(inA2, inB1, sum3); + sum4 = __SMLAD(inA2, inB2, sum4); +#else + /* read real and imag values from pSrcA and pSrcB buffer */ + inA1 = *pInA++; + inB1 = *pInB++; + /* Multiply and Accumlates */ + sum += inA1 * inB1; + + inA2 = *pInA++; + inB2 = *pInB++; + sum += inA2 * inB2; + + inA1 = *pInA++; + inB1 = *pInB++; + sum += inA1 * inB1; + + inA2 = *pInA++; + inB2 = *pInB++; + sum += inA2 * inB2; +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + colCnt--; + } + + /* process odd column samples */ +#if defined (ARM_MATH_DSP) + if (numColsA & 1U) { + inA1 = *pInA++; + inB1 = *pInB++; + inA2 = *pInA2++; + inB2 = *pInB2++; + sum += inA1 * inB1; + sum2 += inA1 * inB2; + sum3 += inA2 * inB1; + sum4 += inA2 * inB2; + } +#else + colCnt = numColsA % 0x4U; + + while (colCnt > 0U) + { + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + sum += (q31_t) *pInA++ * *pInB++; + + /* Decrement loop counter */ + colCnt--; + } +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Saturate and store result in destination buffer */ + *px++ = (q15_t) (sum >> 15); + +#if defined (ARM_MATH_DSP) + *px++ = (q15_t) (sum2 >> 15); + *px2++ = (q15_t) (sum3 >> 15); + *px2++ = (q15_t) (sum4 >> 15); + j += numRowsB * 2; +#endif + + /* Decrement column loop counter */ + col--; + + } + + i = i + numColsA; + +#if defined (ARM_MATH_DSP) + i = i + numColsA; + px = px2 + (numColsB & 1U); + px2 = px + numColsB; +#endif + + /* Decrement row loop counter */ + row--; + + } + + /* Compute any remaining odd row/column below */ + +#if defined (ARM_MATH_DSP) + + /* Compute remaining output column */ + if (numColsB & 1U) { + + /* Avoid redundant computation of last element */ + row = numRowsA & (~0x1); + + /* Point to remaining unfilled column in output matrix */ + px = pDst->pData + numColsB-1; + pInA = pSrcA->pData; + + /* row loop */ + while (row > 0) + { + + /* point to last column in matrix B */ + pInB = pSrcBT + numRowsB * (numColsB-1); + + /* Set variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Compute 4 columns at once */ + colCnt = numColsA >> 2U; + + /* matrix multiplication */ + while (colCnt > 0U) + { + inA1 = read_q15x2_ia ((q15_t **) &pInA); + inA2 = read_q15x2_ia ((q15_t **) &pInA); + inB1 = read_q15x2_ia ((q15_t **) &pInB); + inB2 = read_q15x2_ia ((q15_t **) &pInB); + + sum = __SMLAD(inA1, inB1, sum); + sum = __SMLAD(inA2, inB2, sum); + + /* Decrement loop counter */ + colCnt--; + } + + colCnt = numColsA & 3U; + while (colCnt > 0U) { + sum += (q31_t) (*pInA++) * (*pInB++); + colCnt--; + } + + /* Store result in destination buffer */ + *px = (q15_t) (sum >> 15); + px += numColsB; + + /* Decrement row loop counter */ + row--; + } + } + + /* Compute remaining output row */ + if (numRowsA & 1U) { + + /* point to last row in output matrix */ + px = pDst->pData + (numColsB) * (numRowsA-1); + + pInB = pSrcBT; + col = numColsB; + i = 0U; + + /* col loop */ + while (col > 0) + { + /* point to last row in matrix A */ + pInA = pSrcA->pData + (numRowsA-1) * numColsA; + + /* Set variable sum, that acts as accumulator, to zero */ + sum = 0; + + /* Compute 4 columns at once */ + colCnt = numColsA >> 2U; + + /* matrix multiplication */ + while (colCnt > 0U) + { + inA1 = read_q15x2_ia ((q15_t **) &pInA); + inA2 = read_q15x2_ia ((q15_t **) &pInA); + inB1 = read_q15x2_ia ((q15_t **) &pInB); + inB2 = read_q15x2_ia ((q15_t **) &pInB); + + sum = __SMLAD(inA1, inB1, sum); + sum = __SMLAD(inA2, inB2, sum); + + /* Decrement loop counter */ + colCnt--; + } + + colCnt = numColsA % 4U; + while (colCnt > 0U) { + sum += (q31_t) (*pInA++) * (*pInB++); + + colCnt--; + } + + /* Store result in destination buffer */ + *px++ = (q15_t) (sum >> 15); + + /* Decrement column loop counter */ + col--; + } + } + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + @} end of MatrixMult group + */ diff --git a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_mult_fast_q31.c b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_mult_fast_q31.c new file mode 100644 index 000000000..011959adb --- /dev/null +++ b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_mult_fast_q31.c @@ -0,0 +1,374 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mat_mult_fast_q31.c + * Description: Q31 matrix multiplication (fast variant) + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupMatrix + */ + +/** + @addtogroup MatrixMult + @{ + */ + +/** + @brief Q31 matrix multiplication (fast variant). + @param[in] pSrcA points to the first input matrix structure + @param[in] pSrcB points to the second input matrix structure + @param[out] pDst points to output matrix structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + + @par Scaling and Overflow Behavior + The difference between the function \ref arm_mat_mult_q31() and this fast variant is that + the fast variant use a 32-bit rather than a 64-bit accumulator. + The result of each 1.31 x 1.31 multiplication is truncated to + 2.30 format. These intermediate results are accumulated in a 32-bit register in 2.30 + format. Finally, the accumulator is saturated and converted to a 1.31 result. + @par + The fast version has the same overflow behavior as the standard version but provides + less precision since it discards the low 32 bits of each multiplication result. + In order to avoid overflows completely the input signals must be scaled down. + Scale down one of the input matrices by log2(numColsA) bits to avoid overflows, + as a total of numColsA additions are computed internally for each output element. + @remark + Refer to \ref arm_mat_mult_q31() for a slower implementation of this function + which uses 64-bit accumulation to provide higher precision. + */ + +arm_status arm_mat_mult_fast_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst) +{ + q31_t *pInA = pSrcA->pData; /* Input data matrix pointer A */ + q31_t *pInB = pSrcB->pData; /* Input data matrix pointer B */ + q31_t *pInA2; + q31_t *px; /* Temporary output data matrix pointer */ + q31_t *px2; + q31_t sum1, sum2, sum3, sum4; /* Accumulator */ + q31_t inA1, inA2, inB1, inB2; + uint16_t numRowsA = pSrcA->numRows; /* Number of rows of input matrix A */ + uint16_t numColsB = pSrcB->numCols; /* Number of columns of input matrix B */ + uint16_t numColsA = pSrcA->numCols; /* Number of columns of input matrix A */ + uint32_t col, i = 0U, j, row = numRowsA, colCnt; /* Loop counters */ + arm_status status; /* Status of matrix multiplication */ + + +#ifdef ARM_MATH_MATRIX_CHECK + + /* Check for matrix mismatch condition */ + if ((pSrcA->numCols != pSrcB->numRows) || + (pSrcA->numRows != pDst->numRows) || + (pSrcB->numCols != pDst->numCols) ) + { + /* Set status as ARM_MATH_SIZE_MISMATCH */ + status = ARM_MATH_SIZE_MISMATCH; + } + else + +#endif /* #ifdef ARM_MATH_MATRIX_CHECK */ + + { + px = pDst->pData; + + row = row >> 1U; + px2 = px + numColsB; + + /* The following loop performs the dot-product of each row in pSrcA with each column in pSrcB */ + /* row loop */ + while (row > 0U) + { + /* For every row wise process, column loop counter is to be initiated */ + col = numColsB; + + /* For every row wise process, pIn2 pointer is set to starting address of pSrcB data */ + pInB = pSrcB->pData; + + j = 0U; + + col = col >> 1U; + + /* column loop */ + while (col > 0U) + { + /* Set the variable sum, that acts as accumulator, to zero */ + sum1 = 0; + sum2 = 0; + sum3 = 0; + sum4 = 0; + + /* Initiate data pointers */ + pInA = pSrcA->pData + i; + pInB = pSrcB->pData + j; + pInA2 = pInA + numColsA; + + colCnt = numColsA; + + /* matrix multiplication */ + while (colCnt > 0U) + { + /* c(m,n) = a(1,1) * b(1,1) + a(1,2) * b(2,1) + .... + a(m,p) * b(p,n) */ + + inA1 = *pInA++; + inB1 = pInB[0]; + inA2 = *pInA2++; + inB2 = pInB[1]; + pInB += numColsB; + +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(inA1, inB1, sum1); + sum2 = __SMMLA(inA1, inB2, sum2); + sum3 = __SMMLA(inA2, inB1, sum3); + sum4 = __SMMLA(inA2, inB2, sum4); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA1 * inB1)) >> 32); + sum2 = (q31_t) ((((q63_t) sum2 << 32) + ((q63_t) inA1 * inB2)) >> 32); + sum3 = (q31_t) ((((q63_t) sum3 << 32) + ((q63_t) inA2 * inB1)) >> 32); + sum4 = (q31_t) ((((q63_t) sum4 << 32) + ((q63_t) inA2 * inB2)) >> 32); +#endif + + /* Decrement loop counter */ + colCnt--; + } + + /* Convert the result from 2.30 to 1.31 format and store in destination buffer */ + *px++ = sum1 << 1; + *px++ = sum2 << 1; + *px2++ = sum3 << 1; + *px2++ = sum4 << 1; + + j += 2; + + /* Decrement column loop counter */ + col--; + } + + i = i + (numColsA << 1U); + px = px2 + (numColsB & 1U); + px2 = px + numColsB; + + /* Decrement row loop counter */ + row--; + } + + /* Compute any remaining odd row/column below */ + + /* Compute remaining output column */ + if (numColsB & 1U) { + + /* Avoid redundant computation of last element */ + row = numRowsA & (~1U); + + /* Point to remaining unfilled column in output matrix */ + px = pDst->pData + numColsB-1; + pInA = pSrcA->pData; + + /* row loop */ + while (row > 0) + { + + /* point to last column in matrix B */ + pInB = pSrcB->pData + numColsB-1; + + /* Set variable sum1, that acts as accumulator, to zero */ + sum1 = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 columns at a time. */ + colCnt = numColsA >> 2U; + + /* matrix multiplication */ + while (colCnt > 0U) + { +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(*pInA++, *pInB, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); +#endif + pInB += numColsB; + +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(*pInA++, *pInB, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); +#endif + pInB += numColsB; + +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(*pInA++, *pInB, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); +#endif + pInB += numColsB; + +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(*pInA++, *pInB, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); +#endif + pInB += numColsB; + + /* Decrement loop counter */ + colCnt--; + } + + /* Loop unrolling: Compute remaining column */ + colCnt = numColsA % 4U; + +#else + + /* Initialize colCnt with number of columns */ + colCnt = numColsA; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (colCnt > 0U) { +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(*pInA++, *pInB, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); +#endif + pInB += numColsB; + + colCnt--; + } + + /* Convert the result from 2.30 to 1.31 format and store in destination buffer */ + *px = sum1 << 1; + px += numColsB; + + /* Decrement row loop counter */ + row--; + } + } + + /* Compute remaining output row */ + if (numRowsA & 1U) { + + /* point to last row in output matrix */ + px = pDst->pData + (numColsB) * (numRowsA-1); + + col = numColsB; + i = 0U; + + /* col loop */ + while (col > 0) + { + + /* point to last row in matrix A */ + pInA = pSrcA->pData + (numRowsA-1) * numColsA; + pInB = pSrcB->pData + i; + + /* Set variable sum1, that acts as accumulator, to zero */ + sum1 = 0; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 columns at a time. */ + colCnt = numColsA >> 2U; + + /* matrix multiplication */ + while (colCnt > 0U) + { + inA1 = *pInA++; + inA2 = *pInA++; + inB1 = *pInB; + pInB += numColsB; + inB2 = *pInB; + pInB += numColsB; +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(inA1, inB1, sum1); + sum1 = __SMMLA(inA2, inB2, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA1 * inB1)) >> 32); + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA2 * inB2)) >> 32); +#endif + + inA1 = *pInA++; + inA2 = *pInA++; + inB1 = *pInB; + pInB += numColsB; + inB2 = *pInB; + pInB += numColsB; +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(inA1, inB1, sum1); + sum1 = __SMMLA(inA2, inB2, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA1 * inB1)) >> 32); + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) inA2 * inB2)) >> 32); +#endif + + /* Decrement loop counter */ + colCnt--; + } + + /* Loop unrolling: Compute remaining column */ + colCnt = numColsA % 4U; + +#else + + /* Initialize colCnt with number of columns */ + colCnt = numColsA; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (colCnt > 0U) { +#if defined (ARM_MATH_DSP) + sum1 = __SMMLA(*pInA++, *pInB, sum1); +#else + sum1 = (q31_t) ((((q63_t) sum1 << 32) + ((q63_t) *pInA++ * *pInB)) >> 32); +#endif + pInB += numColsB; + + colCnt--; + } + + /* Saturate and store the result in the destination buffer */ + *px++ = sum1 << 1; + i++; + + /* Decrement col loop counter */ + col--; + } + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Return to application */ + return (status); +} + +/** + @} end of MatrixMult group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctions.c b/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctions.c new file mode 100644 index 000000000..4f86aa4c8 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctions.c @@ -0,0 +1,53 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: StatisticsFunctions.c + * Description: Combination of all statistics function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_max_f32.c" +#include "arm_max_q15.c" +#include "arm_max_q31.c" +#include "arm_max_q7.c" +#include "arm_mean_f32.c" +#include "arm_mean_q15.c" +#include "arm_mean_q31.c" +#include "arm_mean_q7.c" +#include "arm_min_f32.c" +#include "arm_min_q15.c" +#include "arm_min_q31.c" +#include "arm_min_q7.c" +#include "arm_power_f32.c" +#include "arm_power_q15.c" +#include "arm_power_q31.c" +#include "arm_power_q7.c" +#include "arm_rms_f32.c" +#include "arm_rms_q15.c" +#include "arm_rms_q31.c" +#include "arm_std_f32.c" +#include "arm_std_q15.c" +#include "arm_std_q31.c" +#include "arm_var_f32.c" +#include "arm_var_q15.c" +#include "arm_var_q31.c" diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_max_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_f32.c new file mode 100644 index 000000000..cd54e2a18 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_f32.c @@ -0,0 +1,271 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_max_f32.c + * Description: Maximum value of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#if defined(ARM_MATH_NEON) +#include +#endif + +/** + @ingroup groupStats + */ + +/** + @defgroup Max Maximum + + Computes the maximum value of an array of data. + The function returns both the maximum value and its position within the array. + There are separate functions for floating-point, Q31, Q15, and Q7 data types. + */ + +/** + @addtogroup Max + @{ + */ + +/** + @brief Maximum value of a floating-point vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult maximum value returned here + @param[out] pIndex index of maximum value returned here + @return none + */ +#if defined(ARM_MATH_NEON) +void arm_max_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex) +{ + float32_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + float32x4_t outV, srcV; + float32x2_t outV2; + + uint32x4_t idxV; + uint32x4_t maxIdx={ULONG_MAX,ULONG_MAX,ULONG_MAX,ULONG_MAX}; + uint32x4_t index={4,5,6,7}; + uint32x4_t delta={4,4,4,4}; + uint32x4_t countV={0,1,2,3}; + uint32x2_t countV2; + + /* Initialise the count value. */ + count = 0U; + + /* Initialise the index value to zero. */ + outIndex = 0U; + + /* Load first input value that act as reference value for comparison */ + if (blockSize <= 3) + { + out = *pSrc++; + + blkCnt = blockSize - 1; + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt; + } + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + outV = vld1q_f32(pSrc); + pSrc += 4; + + /* Compute 4 outputs at a time */ + blkCnt = (blockSize - 4 ) >> 2U; + + while (blkCnt > 0U) + { + srcV = vld1q_f32(pSrc); + pSrc += 4; + + idxV = vcgtq_f32(srcV, outV); + outV = vbslq_f32(idxV, srcV, outV ); + countV = vbslq_u32(idxV, index,countV ); + + index = vaddq_u32(index,delta); + + /* Decrement the loop counter */ + blkCnt--; + } + + outV2 = vpmax_f32(vget_low_f32(outV),vget_high_f32(outV)); + outV2 = vpmax_f32(outV2,outV2); + out = outV2[0]; + + idxV = vceqq_f32(outV, vdupq_n_f32(out)); + countV = vbslq_u32(idxV, countV,maxIdx); + + countV2 = vpmin_u32(vget_low_u32(countV),vget_high_u32(countV)); + countV2 = vpmin_u32(countV2,countV2); + outIndex = countV2[0]; + + /* if (blockSize - 1U) is not multiple of 4 */ + blkCnt = (blockSize - 4 ) % 4U; + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt ; + } + + /* Decrement the loop counter */ + blkCnt--; + } + + + } + + /* Store the maximum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} +#else +void arm_max_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex) +{ + float32_t maxVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize maxVal to next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = index + 1U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 2U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 3U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the maximum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} +#endif /* #if defined(ARM_MATH_NEON) */ +/** + @} end of Max group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q15.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q15.c new file mode 100644 index 000000000..329b0c8d8 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q15.c @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_max_q15.c + * Description: Maximum value of a Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup Max + @{ + */ + +/** + @brief Maximum value of a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult maximum value returned here + @param[out] pIndex index of maximum value returned here + @return none + */ + +void arm_max_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex) +{ + q15_t maxVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize maxVal to next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = index + 1U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 2U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 3U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the maximum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + @} end of Max group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q31.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q31.c new file mode 100644 index 000000000..99de13e13 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q31.c @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_max_q31.c + * Description: Maximum value of a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup Max + @{ + */ + +/** + @brief Maximum value of a Q31 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult maximum value returned here + @param[out] pIndex index of maximum value returned here + @return none + */ + +void arm_max_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex) +{ + q31_t maxVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize maxVal to next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = index + 1U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 2U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 3U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the maximum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + @} end of Max group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q7.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q7.c new file mode 100644 index 000000000..9c8b6d392 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_q7.c @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_max_q7.c + * Description: Maximum value of a Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup Max + @{ + */ + +/** + @brief Maximum value of a Q7 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult maximum value returned here + @param[out] pIndex index of maximum value returned here + @return none + */ + +void arm_max_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex) +{ + q7_t maxVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize maxVal to next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = index + 1U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 2U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 3U; + } + + maxVal = *pSrc++; + if (out < maxVal) + { + out = maxVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal = *pSrc++; + + /* compare for the maximum value */ + if (out < maxVal) + { + /* Update the maximum value and it's index */ + out = maxVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the maximum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + @} end of Max group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f32.c new file mode 100644 index 000000000..63d965257 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f32.c @@ -0,0 +1,166 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mean_f32.c + * Description: Mean value of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @defgroup mean Mean + + Calculates the mean of the input vector. Mean is defined as the average of the elements in the vector. + The underlying algorithm is used: + +
+      Result = (pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]) / blockSize;
+  
+ + There are separate functions for floating-point, Q31, Q15, and Q7 data types. + */ + +/** + @addtogroup mean + @{ + */ + +/** + @brief Mean value of a floating-point vector. + @param[in] pSrc points to the input vector. + @param[in] blockSize number of samples in input vector. + @param[out] pResult mean value returned here. + @return none + */ +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_mean_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t sum = 0.0f; /* Temporary result storage */ + float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ + float32x2_t sumV2; + + uint32_t blkCnt; /* Loop counter */ + + float32_t in1, in2, in3, in4; + float32x4_t inV; + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + inV = vld1q_f32(pSrc); + sumV = vaddq_f32(sumV, inV); + + pSrc += 4; + /* Decrement the loop counter */ + blkCnt--; + } + + sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); + sum = sumV2[0] + sumV2[1]; + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 3; + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store the result to the destination */ + *pResult = sum / (float32_t) blockSize; +} +#else +void arm_mean_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t sum = 0.0f; /* Temporary result storage */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + sum += *pSrc++; + + sum += *pSrc++; + + sum += *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store result to destination */ + *pResult = (sum / blockSize); +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of mean group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q15.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q15.c new file mode 100644 index 000000000..463aa84ec --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q15.c @@ -0,0 +1,114 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mean_q15.c + * Description: Mean value of a Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup mean + @{ + */ + +/** + @brief Mean value of a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult mean value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + The input is represented in 1.15 format and is accumulated in a 32-bit + accumulator in 17.15 format. + There is no risk of internal overflow with this approach, and the + full precision of intermediate result is preserved. + Finally, the accumulator is truncated to yield a result of 1.15 format. + */ + +void arm_mean_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t sum = 0; /* Temporary result storage */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t in; +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + in = read_q15x2_ia ((q15_t **) &pSrc); + sum += ((in << 16U) >> 16U); + sum += (in >> 16U); + + in = read_q15x2_ia ((q15_t **) &pSrc); + sum += ((in << 16U) >> 16U); + sum += (in >> 16U); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store result to destination */ + *pResult = (q15_t) (sum / (int32_t) blockSize); +} + +/** + @} end of mean group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q31.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q31.c new file mode 100644 index 000000000..4b0ed6e99 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q31.c @@ -0,0 +1,110 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mean_q31.c + * Description: Mean value of a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup mean + @{ + */ + +/** + @brief Mean value of a Q31 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult mean value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + The input is represented in 1.31 format and is accumulated in a 64-bit + accumulator in 33.31 format. + There is no risk of internal overflow with this approach, and the + full precision of intermediate result is preserved. + Finally, the accumulator is truncated to yield a result of 1.31 format. + */ + +void arm_mean_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Temporary result storage */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + sum += *pSrc++; + + sum += *pSrc++; + + sum += *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store result to destination */ + *pResult = (q31_t) (sum / blockSize); +} + +/** + @} end of mean group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q7.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q7.c new file mode 100644 index 000000000..8f52211ad --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_q7.c @@ -0,0 +1,112 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mean_q7.c + * Description: Mean value of a Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup mean + @{ + */ + +/** + @brief Mean value of a Q7 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult mean value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + The input is represented in 1.7 format and is accumulated in a 32-bit + accumulator in 25.7 format. + There is no risk of internal overflow with this approach, and the + full precision of intermediate result is preserved. + Finally, the accumulator is truncated to yield a result of 1.7 format. + */ + +void arm_mean_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t sum = 0; /* Temporary result storage */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t in; +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + in = read_q7x4_ia ((q7_t **) &pSrc); + sum += ((in << 24U) >> 24U); + sum += ((in << 16U) >> 24U); + sum += ((in << 8U) >> 24U); + sum += (in >> 24U); + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + sum += *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + /* Store result to destination */ + *pResult = (q7_t) (sum / (int32_t) blockSize); +} + +/** + @} end of mean group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_min_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_f32.c new file mode 100644 index 000000000..6e9ff4b5d --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_f32.c @@ -0,0 +1,268 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_min_f32.c + * Description: Minimum value of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include + +/** + @ingroup groupStats + */ + +/** + @defgroup Min Minimum + + Computes the minimum value of an array of data. + The function returns both the minimum value and its position within the array. + There are separate functions for floating-point, Q31, Q15, and Q7 data types. + */ + +/** + @addtogroup Min + @{ + */ + +/** + @brief Minimum value of a floating-point vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult minimum value returned here + @param[out] pIndex index of minimum value returned here + @return none + */ +#if defined(ARM_MATH_NEON) +void arm_min_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex) +{ + float32_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + float32x4_t outV, srcV; + float32x2_t outV2; + + uint32x4_t idxV; + uint32x4_t maxIdx={ULONG_MAX,ULONG_MAX,ULONG_MAX,ULONG_MAX}; + uint32x4_t index={4,5,6,7}; + uint32x4_t delta={4,4,4,4}; + uint32x4_t countV={0,1,2,3}; + uint32x2_t countV2; + + /* Initialise the count value. */ + count = 0U; + + /* Initialise the index value to zero. */ + outIndex = 0U; + + /* Load first input value that act as reference value for comparison */ + if (blockSize <= 3) + { + out = *pSrc++; + + blkCnt = blockSize - 1; + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if (out > maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt; + } + + /* Decrement the loop counter */ + blkCnt--; + } + } + else + { + outV = vld1q_f32(pSrc); + pSrc += 4; + + /* Compute 4 outputs at a time */ + blkCnt = (blockSize - 4 ) >> 2U; + + while (blkCnt > 0U) + { + srcV = vld1q_f32(pSrc); + pSrc += 4; + + idxV = vcltq_f32(srcV, outV); + outV = vbslq_f32(idxV, srcV, outV ); + countV = vbslq_u32(idxV, index,countV ); + + index = vaddq_u32(index,delta); + + /* Decrement the loop counter */ + blkCnt--; + } + + outV2 = vpmin_f32(vget_low_f32(outV),vget_high_f32(outV)); + outV2 = vpmin_f32(outV2,outV2); + out = outV2[0]; + + idxV = vceqq_f32(outV, vdupq_n_f32(out)); + countV = vbslq_u32(idxV, countV,maxIdx); + + countV2 = vpmin_u32(vget_low_u32(countV),vget_high_u32(countV)); + countV2 = vpmin_u32(countV2,countV2); + outIndex = countV2[0]; + + /* if (blockSize - 1U) is not multiple of 4 */ + blkCnt = (blockSize - 4 ) % 4U; + + while (blkCnt > 0U) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if (out > maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt ; + } + + /* Decrement the loop counter */ + blkCnt--; + } + } + + /* Store the maximum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} +#else +void arm_min_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex) +{ + float32_t minVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize minVal to next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = index + 1U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 2U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 3U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the minimum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of Min group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q15.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q15.c new file mode 100644 index 000000000..94503837e --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q15.c @@ -0,0 +1,149 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_min_q15.c + * Description: Minimum value of a Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + + +/** + @addtogroup Min + @{ + */ + +/** + @brief Minimum value of a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult minimum value returned here + @param[out] pIndex index of minimum value returned here + @return none + */ + +void arm_min_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex) +{ + q15_t minVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize minVal to next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = index + 1U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 2U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 3U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the minimum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + @} end of Min group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q31.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q31.c new file mode 100644 index 000000000..e25eb47ef --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q31.c @@ -0,0 +1,149 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_min_q31.c + * Description: Minimum value of a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + + +/** + @addtogroup Min + @{ + */ + +/** + @brief Minimum value of a Q31 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult minimum value returned here + @param[out] pIndex index of minimum value returned here + @return none + */ + +void arm_min_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex) +{ + q31_t minVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize minVal to next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = index + 1U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 2U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 3U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the minimum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + @} end of Min group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q7.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q7.c new file mode 100644 index 000000000..2b171f0a4 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_q7.c @@ -0,0 +1,149 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_min_q7.c + * Description: Minimum value of a Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + + +/** + @addtogroup Min + @{ + */ + +/** + @brief Minimum value of a Q7 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult minimum value returned here + @param[out] pIndex index of minimum value returned here + @return none + */ + +void arm_min_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex) +{ + q7_t minVal, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + uint32_t index; /* index of maximum value */ +#endif + + /* Initialise index value to zero. */ + outIndex = 0U; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + +#if defined (ARM_MATH_LOOPUNROLL) + /* Initialise index of maximum value. */ + index = 0U; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = (blockSize - 1U) >> 2U; + + while (blkCnt > 0U) + { + /* Initialize minVal to next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = index + 1U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 2U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 3U; + } + + minVal = *pSrc++; + if (out > minVal) + { + out = minVal; + outIndex = index + 4U; + } + + index += 4U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = (blockSize - 1U) % 4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = (blockSize - 1U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* Initialize minVal to the next consecutive values one by one */ + minVal = *pSrc++; + + /* compare for the minimum value */ + if (out > minVal) + { + /* Update the minimum value and it's index */ + out = minVal; + outIndex = blockSize - blkCnt; + } + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store the minimum value and it's index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +/** + @} end of Min group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_power_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_f32.c new file mode 100644 index 000000000..a4825a531 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_f32.c @@ -0,0 +1,175 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_power_f32.c + * Description: Sum of the squares of the elements of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @defgroup power Power + + Calculates the sum of the squares of the elements in the input vector. + The underlying algorithm is used: + +
+      Result = pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + pSrc[2] * pSrc[2] + ... + pSrc[blockSize-1] * pSrc[blockSize-1];
+  
+ + There are separate functions for floating point, Q31, Q15, and Q7 data types. + */ + +/** + @addtogroup power + @{ + */ + +/** + @brief Sum of the squares of the elements of a floating-point vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult sum of the squares value returned here + @return none + */ +#if defined(ARM_MATH_NEON) +void arm_power_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t sum = 0.0f; /* accumulator */ + float32_t in; /* Temporary variable to store input value */ + uint32_t blkCnt; /* loop counter */ + + float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ + float32x2_t sumV2; + float32x4_t inV; + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + inV = vld1q_f32(pSrc); + sumV = vmlaq_f32(sumV, inV, inV); + pSrc += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); + sum = sumV2[0] + sumV2[1]; + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* compute power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Store the result to the destination */ + *pResult = sum; +} +#else +void arm_power_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t sum = 0.0f; /* Temporary result storage */ + float32_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power and store result in a temporary variable, sum. */ + in = *pSrc++; + sum += in * in; + + in = *pSrc++; + sum += in * in; + + in = *pSrc++; + sum += in * in; + + in = *pSrc++; + sum += in * in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power and store result in a temporary variable, sum. */ + in = *pSrc++; + sum += in * in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store result to destination */ + *pResult = sum; +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of power group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q15.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q15.c new file mode 100644 index 000000000..12f524db5 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q15.c @@ -0,0 +1,132 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_power_q15.c + * Description: Sum of the squares of the elements of a Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup power + @{ + */ + +/** + @brief Sum of the squares of the elements of a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult sum of the squares value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + The input is represented in 1.15 format. + Intermediate multiplication yields a 2.30 format, and this + result is added without saturation to a 64-bit accumulator in 34.30 format. + With 33 guard bits in the accumulator, there is no risk of overflow, and the + full precision of the intermediate multiplication is preserved. + Finally, the return result is in 34.30 format. + */ + +void arm_power_q15( + const q15_t * pSrc, + uint32_t blockSize, + q63_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Temporary result storage */ + q15_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in32; /* Temporary variable to store packed input value */ +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power and store result in a temporary variable, sum. */ +#if defined (ARM_MATH_DSP) + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sum = __SMLALD(in32, in32, sum); + + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sum = __SMLALD(in32, in32, sum); +#else + in = *pSrc++; + sum += ((q31_t) in * in); + + in = *pSrc++; + sum += ((q31_t) in * in); + + in = *pSrc++; + sum += ((q31_t) in * in); + + in = *pSrc++; + sum += ((q31_t) in * in); +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power and store result in a temporary variable, sum. */ + in = *pSrc++; + sum += ((q31_t) in * in); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store result in 34.30 format */ + *pResult = sum; +} + +/** + @} end of power group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q31.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q31.c new file mode 100644 index 000000000..1e193b326 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q31.c @@ -0,0 +1,121 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_power_q31.c + * Description: Sum of the squares of the elements of a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup power + @{ + */ + +/** + @brief Sum of the squares of the elements of a Q31 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult sum of the squares value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + The input is represented in 1.31 format. + Intermediate multiplication yields a 2.62 format, and this + result is truncated to 2.48 format by discarding the lower 14 bits. + The 2.48 result is then added without saturation to a 64-bit accumulator in 16.48 format. + With 15 guard bits in the accumulator, there is no risk of overflow, and the + full precision of the intermediate multiplication is preserved. + Finally, the return result is in 16.48 format. + */ + +void arm_power_q31( + const q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Temporary result storage */ + q31_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power then shift intermediate results by 14 bits to maintain 16.48 format and store result in a temporary variable sum, providing 15 guard bits. */ + in = *pSrc++; + sum += ((q63_t) in * in) >> 14U; + + in = *pSrc++; + sum += ((q63_t) in * in) >> 14U; + + in = *pSrc++; + sum += ((q63_t) in * in) >> 14U; + + in = *pSrc++; + sum += ((q63_t) in * in) >> 14U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power and store result in a temporary variable, sum. */ + in = *pSrc++; + sum += ((q63_t) in * in) >> 14U; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store results in 16.48 format */ + *pResult = sum; +} + +/** + @} end of power group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q7.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q7.c new file mode 100644 index 000000000..47405cd40 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_q7.c @@ -0,0 +1,136 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_power_q7.c + * Description: Sum of the squares of the elements of a Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup power + @{ + */ + +/** + @brief Sum of the squares of the elements of a Q7 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult sum of the squares value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 32-bit internal accumulator. + The input is represented in 1.7 format. + Intermediate multiplication yields a 2.14 format, and this + result is added without saturation to an accumulator in 18.14 format. + With 17 guard bits in the accumulator, there is no risk of overflow, and the + full precision of the intermediate multiplication is preserved. + Finally, the return result is in 18.14 format. + */ + +void arm_power_q7( + const q7_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t sum = 0; /* Temporary result storage */ + q7_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in32; /* Temporary variable to store packed input value */ + q31_t in1, in2; /* Temporary variables to store input value */ +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power and store result in a temporary variable, sum. */ +#if defined (ARM_MATH_DSP) + in32 = read_q7x4_ia ((q7_t **) &pSrc); + + in1 = __SXTB16(__ROR(in32, 8)); + in2 = __SXTB16(in32); + + /* calculate power and accumulate to accumulator */ + sum = __SMLAD(in1, in1, sum); + sum = __SMLAD(in2, in2, sum); +#else + in = *pSrc++; + sum += ((q15_t) in * in); + + in = *pSrc++; + sum += ((q15_t) in * in); + + in = *pSrc++; + sum += ((q15_t) in * in); + + in = *pSrc++; + sum += ((q15_t) in * in); +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute Power and store result in a temporary variable, sum. */ + in = *pSrc++; + sum += ((q15_t) in * in); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Store result in 18.14 format */ + *pResult = sum; +} + +/** + @} end of power group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_f32.c new file mode 100644 index 000000000..454651075 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_f32.c @@ -0,0 +1,176 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_rms_f32.c + * Description: Root mean square value of the elements of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @defgroup RMS Root mean square (RMS) + + Calculates the Root Mean Square of the elements in the input vector. + The underlying algorithm is used: + +
+      Result = sqrt(((pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]) / blockSize));
+  
+ + There are separate functions for floating point, Q31, and Q15 data types. + */ + +/** + @addtogroup RMS + @{ + */ + +/** + @brief Root Mean Square of the elements of a floating-point vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult root mean square value returned here + @return none + */ +#if defined(ARM_MATH_NEON) +void arm_rms_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t sum = 0.0f; /* accumulator */ + float32_t in; /* Temporary variable to store input value */ + uint32_t blkCnt; /* loop counter */ + + float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ + float32x2_t sumV2; + float32x4_t inV; + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + inV = vld1q_f32(pSrc); + sumV = vmlaq_f32(sumV, inV, inV); + pSrc += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); + sum = sumV2[0] + sumV2[1]; + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* compute power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + sum += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Compute Rms and store the result in the destination */ + arm_sqrt_f32(sum / (float32_t) blockSize, pResult); +} +#else +void arm_rms_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t sum = 0.0f; /* Temporary result storage */ + float32_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable, sum. */ + sum += in * in; + + in = *pSrc++; + sum += in * in; + + in = *pSrc++; + sum += in * in; + + in = *pSrc++; + sum += in * in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable. */ + sum += ( in * in); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Compute Rms and store result in destination */ + arm_sqrt_f32(sum / (float32_t) blockSize, pResult); +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of RMS group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_q15.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_q15.c new file mode 100644 index 000000000..9fcd964e5 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_q15.c @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_rms_q15.c + * Description: Root Mean Square of the elements of a Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup RMS + @{ + */ + +/** + @brief Root Mean Square of the elements of a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult root mean square value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + The input is represented in 1.15 format. + Intermediate multiplication yields a 2.30 format, and this + result is added without saturation to a 64-bit accumulator in 34.30 format. + With 33 guard bits in the accumulator, there is no risk of overflow, and the + full precision of the intermediate multiplication is preserved. + Finally, the 34.30 result is truncated to 34.15 format by discarding the lower + 15 bits, and then saturated to yield a result in 1.15 format. + */ + +void arm_rms_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Temporary result storage */ + q15_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in32; /* Temporary variable to store input value */ +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + /* Compute sum of squares and store result in a temporary variable. */ +#if defined (ARM_MATH_DSP) + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sum = __SMLALD(in32, in32, sum); + + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sum = __SMLALD(in32, in32, sum); +#else + in = *pSrc++; + sum += ((q31_t) in * in); + + in = *pSrc++; + sum += ((q31_t) in * in); + + in = *pSrc++; + sum += ((q31_t) in * in); + + in = *pSrc++; + sum += ((q31_t) in * in); +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable. */ + sum += ((q31_t) in * in); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Truncating and saturating the accumulator to 1.15 format */ + /* Store result in destination */ + arm_sqrt_q15(__SSAT((sum / (q63_t)blockSize) >> 15, 16), pResult); +} + +/** + @} end of RMS group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_q31.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_q31.c new file mode 100644 index 000000000..5a3e8f35d --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_q31.c @@ -0,0 +1,124 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_rms_q31.c + * Description: Root Mean Square of the elements of a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup RMS + @{ + */ + +/** + @brief Root Mean Square of the elements of a Q31 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult root mean square value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The input is represented in 1.31 format, and intermediate multiplication + yields a 2.62 format. + The accumulator maintains full precision of the intermediate multiplication results, + but provides only a single guard bit. + There is no saturation on intermediate additions. + If the accumulator overflows, it wraps around and distorts the result. + In order to avoid overflows completely, the input signal must be scaled down by + log2(blockSize) bits, as a total of blockSize additions are performed internally. + Finally, the 2.62 accumulator is right shifted by 31 bits to yield a 1.31 format value. + */ + +void arm_rms_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + uint64_t sum = 0; /* Temporary result storage (can get never negative. changed type from q63 to uint64 */ + q31_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable, sum. */ + sum += ((q63_t) in * in); + + in = *pSrc++; + sum += ((q63_t) in * in); + + in = *pSrc++; + sum += ((q63_t) in * in); + + in = *pSrc++; + sum += ((q63_t) in * in); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable. */ + sum += ((q63_t) in * in); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Convert data in 2.62 to 1.31 by 31 right shifts and saturate */ + /* Compute Rms and store result in destination vector */ + arm_sqrt_q31(clip_q63_to_q31((sum / (q63_t) blockSize) >> 31), pResult); +} + +/** + @} end of RMS group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_std_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_f32.c new file mode 100644 index 000000000..e1e6577a0 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_f32.c @@ -0,0 +1,188 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_std_f32.c + * Description: Standard deviation of the elements of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @defgroup STD Standard deviation + + Calculates the standard deviation of the elements in the input vector. + The underlying algorithm is used: + +
+      Result = sqrt((sumOfSquares - sum2 / blockSize) / (blockSize - 1))
+
+      sumOfSquares = pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]
+      sum = pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]
+  
+ + There are separate functions for floating point, Q31, and Q15 data types. + */ + +/** + @addtogroup STD + @{ + */ + +/** + @brief Standard deviation of the elements of a floating-point vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult standard deviation value returned here + @return none + */ +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_std_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t var; + arm_var_f32(pSrc,blockSize,&var); + arm_sqrt_f32(var, pResult); +} +#else +void arm_std_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t sum = 0.0f; /* Temporary result storage */ + float32_t sumOfSquares = 0.0f; /* Sum of squares */ + float32_t in; /* Temporary variable to store input value */ + +#ifndef ARM_MATH_CM0_FAMILY + float32_t meanOfSquares, mean, squareOfMean; /* Temporary variables */ +#else + float32_t squareOfSum; /* Square of Sum */ + float32_t var; /* Temporary varaince storage */ +#endif + + if (blockSize <= 1U) + { + *pResult = 0; + return; + } + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + sumOfSquares += in * in; + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + in = *pSrc++; + sumOfSquares += in * in; + sum += in; + + in = *pSrc++; + sumOfSquares += in * in; + sum += in; + + in = *pSrc++; + sumOfSquares += in * in; + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + sumOfSquares += ( in * in); + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + +#ifndef ARM_MATH_CM0_FAMILY + + /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ + meanOfSquares = sumOfSquares / ((float32_t) blockSize - 1.0f); + + /* Compute mean of all input values */ + mean = sum / (float32_t) blockSize; + + /* Compute square of mean */ + squareOfMean = (mean * mean) * (((float32_t) blockSize) / + ((float32_t) blockSize - 1.0f)); + + /* Compute standard deviation and store result to destination */ + arm_sqrt_f32((meanOfSquares - squareOfMean), pResult); + +#else + /* Run the below code for Cortex-M0 */ + + /* Compute square of sum */ + squareOfSum = ((sum * sum) / (float32_t) blockSize); + + /* Compute variance */ + var = ((sumOfSquares - squareOfSum) / (float32_t) (blockSize - 1.0f)); + + /* Compute standard deviation and store result in destination */ + arm_sqrt_f32(var, pResult); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of STD group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_std_q15.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_q15.c new file mode 100644 index 000000000..8e5c0426b --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_q15.c @@ -0,0 +1,161 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_std_q15.c + * Description: Standard deviation of an array of Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup STD + @{ + */ + +/** + @brief Standard deviation of the elements of a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult standard deviation value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + The input is represented in 1.15 format. + Intermediate multiplication yields a 2.30 format, and this + result is added without saturation to a 64-bit accumulator in 34.30 format. + With 33 guard bits in the accumulator, there is no risk of overflow, and the + full precision of the intermediate multiplication is preserved. + Finally, the 34.30 result is truncated to 34.15 format by discarding the lower + 15 bits, and then saturated to yield a result in 1.15 format. + */ + +void arm_std_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t sum = 0; /* Accumulator */ + q31_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ + q63_t sumOfSquares = 0; /* Sum of squares */ + q15_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in32; /* Temporary variable to store input value */ +#endif + + if (blockSize <= 1U) + { + *pResult = 0; + return; + } + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + /* Compute sum and store result in a temporary variable, sum. */ +#if defined (ARM_MATH_DSP) + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sumOfSquares = __SMLALD(in32, in32, sumOfSquares); + sum += ((in32 << 16U) >> 16U); + sum += (in32 >> 16U); + + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sumOfSquares = __SMLALD(in32, in32, sumOfSquares); + sum += ((in32 << 16U) >> 16U); + sum += (in32 >> 16U); +#else + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; + + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; + + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; + + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + sumOfSquares += (in * in); + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ + meanOfSquares = (q31_t) (sumOfSquares / (q63_t)(blockSize - 1U)); + + /* Compute square of mean */ + squareOfMean = (q31_t) ((q63_t) sum * sum / (q63_t)(blockSize * (blockSize - 1U))); + + /* mean of squares minus the square of mean. */ + /* Compute standard deviation and store result in destination */ + arm_sqrt_q15(__SSAT((meanOfSquares - squareOfMean) >> 15U, 16U), pResult); +} + +/** + @} end of STD group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_std_q31.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_q31.c new file mode 100644 index 000000000..cfb6cb8b6 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_q31.c @@ -0,0 +1,147 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_std_q31.c + * Description: Standard deviation of the elements of a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup STD + @{ + */ + +/** + @brief Standard deviation of the elements of a Q31 vector. + @param[in] pSrc points to the input vector. + @param[in] blockSize number of samples in input vector. + @param[out] pResult standard deviation value returned here. + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The input is represented in 1.31 format, which is then downshifted by 8 bits + which yields 1.23, and intermediate multiplication yields a 2.46 format. + The accumulator maintains full precision of the intermediate multiplication results, + but provides only a 16 guard bits. + There is no saturation on intermediate additions. + If the accumulator overflows it wraps around and distorts the result. + In order to avoid overflows completely the input signal must be scaled down by + log2(blockSize)-8 bits, as a total of blockSize additions are performed internally. + After division, internal variables should be Q18.46 + Finally, the 18.46 accumulator is right shifted by 15 bits to yield a 1.31 format value. + */ + +void arm_std_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Accumulator */ + q63_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ + q63_t sumOfSquares = 0; /* Sum of squares */ + q31_t in; /* Temporary variable to store input value */ + + if (blockSize <= 1U) + { + *pResult = 0; + return; + } + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++ >> 8U; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + sumOfSquares += ((q63_t) (in) * (in)); + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + in = *pSrc++ >> 8U; + sumOfSquares += ((q63_t) (in) * (in)); + sum += in; + + in = *pSrc++ >> 8U; + sumOfSquares += ((q63_t) (in) * (in)); + sum += in; + + in = *pSrc++ >> 8U; + sumOfSquares += ((q63_t) (in) * (in)); + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++ >> 8U; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + sumOfSquares += ((q63_t) (in) * (in)); + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ + meanOfSquares = (sumOfSquares / (q63_t)(blockSize - 1U)); + + /* Compute square of mean */ + squareOfMean = ( sum * sum / (q63_t)(blockSize * (blockSize - 1U))); + + /* Compute standard deviation and store result in destination */ + arm_sqrt_q31((meanOfSquares - squareOfMean) >> 15U, pResult); +} + +/** + @} end of STD group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f32.c new file mode 100644 index 000000000..3c325b135 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f32.c @@ -0,0 +1,234 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_var_f32.c + * Description: Variance of the elements of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @defgroup variance Variance + + Calculates the variance of the elements in the input vector. + The underlying algorithm used is the direct method sometimes referred to as the two-pass method: + +
+      Result = sum(element - meanOfElements)^2) / numElement - 1
+
+      meanOfElements = ( pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] ) / blockSize
+  
+ + There are separate functions for floating point, Q31, and Q15 data types. + */ + +/** + @addtogroup variance + @{ + */ + +/** + @brief Variance of the elements of a floating-point vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult variance value returned here + @return none + */ +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_var_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + float32_t mean; + + float32_t sum = 0.0f; /* accumulator */ + float32_t in; /* Temporary variable to store input value */ + uint32_t blkCnt; /* loop counter */ + + float32x4_t sumV = vdupq_n_f32(0.0f); /* Temporary result storage */ + float32x2_t sumV2; + float32x4_t inV; + float32x4_t avg; + + arm_mean_f32(pSrc,blockSize,&mean); + avg = vdupq_n_f32(mean); + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* Compute Power and then store the result in a temporary variable, sum. */ + inV = vld1q_f32(pSrc); + inV = vsubq_f32(inV, avg); + sumV = vmlaq_f32(sumV, inV, inV); + pSrc += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + sumV2 = vpadd_f32(vget_low_f32(sumV),vget_high_f32(sumV)); + sum = sumV2[0] + sumV2[1]; + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize % 0x4U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + A[2] * A[2] + ... + A[blockSize-1] * A[blockSize-1] */ + /* compute power and then store the result in a temporary variable, sum. */ + in = *pSrc++; + in = in - mean; + sum += in * in; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* Variance */ + *pResult = sum / (float32_t)(blockSize - 1.0f); + +} + +#else +void arm_var_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + float32_t sum = 0.0f; /* Temporary result storage */ + float32_t fSum = 0.0f; + float32_t fMean, fValue; + const float32_t * pInput = pSrc; + + if (blockSize <= 1U) + { + *pResult = 0; + return; + } + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + + sum += *pInput++; + sum += *pInput++; + sum += *pInput++; + sum += *pInput++; + + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */ + + sum += *pInput++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize */ + fMean = sum / (float32_t) blockSize; + + pInput = pSrc; + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + fValue = *pInput++ - fMean; + fSum += fValue * fValue; + + fValue = *pInput++ - fMean; + fSum += fValue * fValue; + + fValue = *pInput++ - fMean; + fSum += fValue * fValue; + + fValue = *pInput++ - fMean; + fSum += fValue * fValue; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + fValue = *pInput++ - fMean; + fSum += fValue * fValue; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Variance */ + *pResult = fSum / (float32_t)(blockSize - 1.0f); +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of variance group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_var_q15.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_q15.c new file mode 100644 index 000000000..259e76beb --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_q15.c @@ -0,0 +1,164 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_var_q15.c + * Description: Variance of an array of Q15 type + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup variance + @{ + */ + +/** + @brief Variance of the elements of a Q15 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult variance value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using a 64-bit internal accumulator. + The input is represented in 1.15 format. + Intermediate multiplication yields a 2.30 format, and this + result is added without saturation to a 64-bit accumulator in 34.30 format. + With 33 guard bits in the accumulator, there is no risk of overflow, and the + full precision of the intermediate multiplication is preserved. + Finally, the 34.30 result is truncated to 34.15 format by discarding the lower + 15 bits, and then saturated to yield a result in 1.15 format. + */ + +void arm_var_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q31_t sum = 0; /* Accumulator */ + q31_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ + q63_t sumOfSquares = 0; /* Sum of squares */ + q15_t in; /* Temporary variable to store input value */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in32; /* Temporary variable to store input value */ +#endif + + if (blockSize <= 1U) + { + *pResult = 0; + return; + } + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + /* Compute sum and store result in a temporary variable, sum. */ +#if defined (ARM_MATH_DSP) + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sumOfSquares = __SMLALD(in32, in32, sumOfSquares); + sum += ((in32 << 16U) >> 16U); + sum += (in32 >> 16U); + + in32 = read_q15x2_ia ((q15_t **) &pSrc); + sumOfSquares = __SMLALD(in32, in32, sumOfSquares); + sum += ((in32 << 16U) >> 16U); + sum += (in32 >> 16U); +#else + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; + + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; + + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; + + in = *pSrc++; + sumOfSquares += (in * in); + sum += in; +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ +#if defined (ARM_MATH_DSP) + sumOfSquares = __SMLALD(in, in, sumOfSquares); +#else + sumOfSquares += (in * in); +#endif /* #if defined (ARM_MATH_DSP) */ + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ + meanOfSquares = (q31_t) (sumOfSquares / (q63_t)(blockSize - 1U)); + + /* Compute square of mean */ + squareOfMean = (q31_t) ((q63_t) sum * sum / (q63_t)(blockSize * (blockSize - 1U))); + + /* mean of squares minus the square of mean. */ + *pResult = (meanOfSquares - squareOfMean) >> 15U; +} + +/** + @} end of variance group + */ diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_var_q31.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_q31.c new file mode 100644 index 000000000..558332f96 --- /dev/null +++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_q31.c @@ -0,0 +1,147 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_var_q31.c + * Description: Variance of an array of Q31 type + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupStats + */ + +/** + @addtogroup variance + @{ + */ + +/** + @brief Variance of the elements of a Q31 vector. + @param[in] pSrc points to the input vector + @param[in] blockSize number of samples in input vector + @param[out] pResult variance value returned here + @return none + + @par Scaling and Overflow Behavior + The function is implemented using an internal 64-bit accumulator. + The input is represented in 1.31 format, which is then downshifted by 8 bits + which yields 1.23, and intermediate multiplication yields a 2.46 format. + The accumulator maintains full precision of the intermediate multiplication results, + but provides only a 16 guard bits. + There is no saturation on intermediate additions. + If the accumulator overflows it wraps around and distorts the result. + In order to avoid overflows completely the input signal must be scaled down by + log2(blockSize)-8 bits, as a total of blockSize additions are performed internally. + After division, internal variables should be Q18.46 + Finally, the 18.46 accumulator is right shifted by 15 bits to yield a 1.31 format value. + */ + +void arm_var_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult) +{ + uint32_t blkCnt; /* Loop counter */ + q63_t sum = 0; /* Temporary result storage */ + q63_t meanOfSquares, squareOfMean; /* Square of mean and mean of square */ + q63_t sumOfSquares = 0; /* Sum of squares */ + q31_t in; /* Temporary variable to store input value */ + + if (blockSize <= 1U) + { + *pResult = 0; + return; + } + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++ >> 8U; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + sumOfSquares += ((q63_t) (in) * (in)); + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + in = *pSrc++ >> 8U; + sumOfSquares += ((q63_t) (in) * (in)); + sum += in; + + in = *pSrc++ >> 8U; + sumOfSquares += ((q63_t) (in) * (in)); + sum += in; + + in = *pSrc++ >> 8U; + sumOfSquares += ((q63_t) (in) * (in)); + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */ + /* C = A[0] + A[1] + ... + A[blockSize-1] */ + + in = *pSrc++ >> 8U; + /* Compute sum of squares and store result in a temporary variable, sumOfSquares. */ + sumOfSquares += ((q63_t) (in) * (in)); + /* Compute sum and store result in a temporary variable, sum. */ + sum += in; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Compute Mean of squares and store result in a temporary variable, meanOfSquares. */ + meanOfSquares = (sumOfSquares / (q63_t)(blockSize - 1U)); + + /* Compute square of mean */ + squareOfMean = ( sum * sum / (q63_t)(blockSize * (blockSize - 1U))); + + /* Compute variance and store result in destination */ + *pResult = (meanOfSquares - squareOfMean) >> 15U; +} + +/** + @} end of variance group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/SupportFunctions.c b/CMSIS/DSP/Source/SupportFunctions/SupportFunctions.c new file mode 100644 index 000000000..4deb19bc6 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/SupportFunctions.c @@ -0,0 +1,48 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: SupportFunctions.c + * Description: Combination of all support function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_copy_f32.c" +#include "arm_copy_q15.c" +#include "arm_copy_q31.c" +#include "arm_copy_q7.c" +#include "arm_fill_f32.c" +#include "arm_fill_q15.c" +#include "arm_fill_q31.c" +#include "arm_fill_q7.c" +#include "arm_float_to_q15.c" +#include "arm_float_to_q31.c" +#include "arm_float_to_q7.c" +#include "arm_q15_to_float.c" +#include "arm_q15_to_q31.c" +#include "arm_q15_to_q7.c" +#include "arm_q31_to_float.c" +#include "arm_q31_to_q15.c" +#include "arm_q31_to_q7.c" +#include "arm_q7_to_float.c" +#include "arm_q7_to_q15.c" +#include "arm_q7_to_q31.c" diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_copy_f32.c b/CMSIS/DSP/Source/SupportFunctions/arm_copy_f32.c new file mode 100644 index 000000000..707adc4cc --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_copy_f32.c @@ -0,0 +1,152 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_copy_f32.c + * Description: Copies the elements of a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @defgroup copy Vector Copy + + Copies sample by sample from source vector to destination vector. + +
+      pDst[n] = pSrc[n];   0 <= n < blockSize.
+  
+ + There are separate functions for floating point, Q31, Q15, and Q7 data types. + */ + +/** + @addtogroup copy + @{ + */ + +/** + @brief Copies the elements of a floating-point vector. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_copy_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + + float32x4_t inV; + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = A */ + /* Copy and then store the results in the destination buffer */ + inV = vld1q_f32(pSrc); + vst1q_f32(pDst, inV); + pSrc += 4; + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 3; + + while (blkCnt > 0U) + { + /* C = A */ + /* Copy and then store the results in the destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement the loop counter */ + blkCnt--; + } +} +#else +void arm_copy_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A */ + + /* Copy and store result in destination buffer */ + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A */ + + /* Copy and store result in destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } +} +#endif /* #if defined(ARM_MATH_NEON) */ +/** + @} end of BasicCopy group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_copy_q15.c b/CMSIS/DSP/Source/SupportFunctions/arm_copy_q15.c new file mode 100644 index 000000000..d8da1130d --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_copy_q15.c @@ -0,0 +1,96 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_copy_q15.c + * Description: Copies the elements of a Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup copy + @{ + */ + +/** + @brief Copies the elements of a Q15 vector. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_copy_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A */ + + /* read 2 times 2 samples at a time */ + write_q15x2_ia (&pDst, read_q15x2_ia ((q15_t **) &pSrc)); + write_q15x2_ia (&pDst, read_q15x2_ia ((q15_t **) &pSrc)); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A */ + + /* Copy and store result in destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } +} + +/** + @} end of BasicCopy group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_copy_q31.c b/CMSIS/DSP/Source/SupportFunctions/arm_copy_q31.c new file mode 100644 index 000000000..e342a32ae --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_copy_q31.c @@ -0,0 +1,98 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_copy_q31.c + * Description: Copies the elements of a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup copy + @{ + */ + +/** + @brief Copies the elements of a Q31 vector. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_copy_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A */ + + /* Copy and store result in destination buffer */ + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A */ + + /* Copy and store result in destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } +} + +/** + @} end of BasicCopy group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_copy_q7.c b/CMSIS/DSP/Source/SupportFunctions/arm_copy_q7.c new file mode 100644 index 000000000..77da8ca26 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_copy_q7.c @@ -0,0 +1,95 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_copy_q7.c + * Description: Copies the elements of a Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup copy + @{ + */ + +/** + @brief Copies the elements of a Q7 vector. + @param[in] pSrc points to input vector + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_copy_q7( + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A */ + + /* read 4 samples at a time */ + write_q7x4_ia (&pDst, read_q7x4_ia ((q7_t **) &pSrc)); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A */ + + /* Copy and store result in destination buffer */ + *pDst++ = *pSrc++; + + /* Decrement loop counter */ + blkCnt--; + } +} + +/** + @} end of BasicCopy group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_fill_f32.c b/CMSIS/DSP/Source/SupportFunctions/arm_fill_f32.c new file mode 100644 index 000000000..29f628628 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_fill_f32.c @@ -0,0 +1,151 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fill_f32.c + * Description: Fills a constant value into a floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @defgroup Fill Vector Fill + + Fills the destination vector with a constant value. + +
+      pDst[n] = value;   0 <= n < blockSize.
+  
+ + There are separate functions for floating point, Q31, Q15, and Q7 data types. + */ + +/** + @addtogroup Fill + @{ + */ + +/** + @brief Fills a constant value into a floating-point vector. + @param[in] value input value to be filled + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* loop counter */ + + + float32x4_t inV = vdupq_n_f32(value); + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = value */ + /* Fill the value in the destination buffer */ + vst1q_f32(pDst, inV); + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 3; + + while (blkCnt > 0U) + { + /* C = value */ + /* Fill the value in the destination buffer */ + *pDst++ = value; + + /* Decrement the loop counter */ + blkCnt--; + } +} +#else +void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = value */ + + /* Fill value in destination buffer */ + *pDst++ = value; + *pDst++ = value; + *pDst++ = value; + *pDst++ = value; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = value */ + + /* Fill value in destination buffer */ + *pDst++ = value; + + /* Decrement loop counter */ + blkCnt--; + } +} +#endif /* #if defined(ARM_MATH_NEON) */ +/** + @} end of Fill group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_fill_q15.c b/CMSIS/DSP/Source/SupportFunctions/arm_fill_q15.c new file mode 100644 index 000000000..d8c0f8d0b --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_fill_q15.c @@ -0,0 +1,100 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fill_q15.c + * Description: Fills a constant value into a Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup Fill + @{ + */ + +/** + @brief Fills a constant value into a Q15 vector. + @param[in] value input value to be filled + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_fill_q15( + q15_t value, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t packedValue; /* value packed to 32 bits */ + + /* Packing two 16 bit values to 32 bit value in order to use SIMD */ + packedValue = __PKHBT(value, value, 16U); + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = value */ + + /* fill 2 times 2 samples at a time */ + write_q15x2_ia (&pDst, packedValue); + write_q15x2_ia (&pDst, packedValue); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = value */ + + /* Fill value in destination buffer */ + *pDst++ = value; + + /* Decrement loop counter */ + blkCnt--; + } +} + +/** + @} end of Fill group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_fill_q31.c b/CMSIS/DSP/Source/SupportFunctions/arm_fill_q31.c new file mode 100644 index 000000000..e17488944 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_fill_q31.c @@ -0,0 +1,98 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fill_q31.c + * Description: Fills a constant value into a Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup Fill + @{ + */ + +/** + @brief Fills a constant value into a Q31 vector. + @param[in] value input value to be filled + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_fill_q31( + q31_t value, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = value */ + + /* Fill value in destination buffer */ + *pDst++ = value; + *pDst++ = value; + *pDst++ = value; + *pDst++ = value; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = value */ + + /* Fill value in destination buffer */ + *pDst++ = value; + + /* Decrement loop counter */ + blkCnt--; + } +} + +/** + @} end of Fill group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_fill_q7.c b/CMSIS/DSP/Source/SupportFunctions/arm_fill_q7.c new file mode 100644 index 000000000..bca32674a --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_fill_q7.c @@ -0,0 +1,99 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_fill_q7.c + * Description: Fills a constant value into a Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup Fill + @{ + */ + +/** + @brief Fills a constant value into a Q7 vector. + @param[in] value input value to be filled + @param[out] pDst points to output vector + @param[in] blockSize number of samples in each vector + @return none + */ + +void arm_fill_q7( + q7_t value, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t packedValue; /* value packed to 32 bits */ + + /* Packing four 8 bit values to 32 bit value in order to use SIMD */ + packedValue = __PACKq7(value, value, value, value); + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = value */ + + /* fill 4 samples at a time */ + write_q7x4_ia (&pDst, packedValue); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = value */ + + /* Fill value in destination buffer */ + *pDst++ = value; + + /* Decrement loop counter */ + blkCnt--; + } +} + +/** + @} end of Fill group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q15.c b/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q15.c new file mode 100644 index 000000000..68c1ad09f --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q15.c @@ -0,0 +1,244 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_float_to_q15.c + * Description: Converts the elements of the floating-point vector to Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup float_to_x + @{ + */ + +/** + @brief Converts the elements of the floating-point vector to Q15 vector. + @param[in] pSrc points to the floating-point input vector + @param[out] pDst points to the Q15 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q15_t)(pSrc[n] * 32768);   0 <= n < blockSize.
+  
+ + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q15 range [0x8000 0x7FFF] are saturated. + + @note + In order to apply rounding, the library should be rebuilt with the ROUNDING macro + defined in the preprocessor section of project options. + */ +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_float_to_q15( + const float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + const float32_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + float32_t in; + float32x4_t inV; + #ifdef ARM_MATH_ROUNDING + float32x4_t zeroV = vdupq_n_f32(0.0f); + float32x4_t pHalf = vdupq_n_f32(0.5f / 32768.0f); + float32x4_t mHalf = vdupq_n_f32(-0.5f / 32768.0f); + float32x4_t r; + uint32x4_t cmp; + #endif + + int32x4_t cvt; + int16x4_t outV; + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 32768 */ + /* Convert from float to q15 and then store the results in the destination buffer */ + inV = vld1q_f32(pIn); + cmp = vcgtq_f32(inV,zeroV); + r = vbslq_f32(cmp,pHalf,mHalf); + inV = vaddq_f32(inV, r); + + pIn += 4; + + cvt = vcvtq_n_s32_f32(inV,15); + outV = vqmovn_s32(cvt); + + vst1_s16(pDst, outV); + pDst += 4; + +#else + + /* C = A * 32768 */ + /* Convert from float to q15 and then store the results in the destination buffer */ + inV = vld1q_f32(pIn); + + cvt = vcvtq_n_s32_f32(inV,15); + outV = vqmovn_s32(cvt); + + vst1_s16(pDst, outV); + pDst += 4; + pIn += 4; + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 3; + + while (blkCnt > 0U) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 32768 */ + /* Convert from float to q15 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + +#else + + /* C = A * 32768 */ + /* Convert from float to q15 and then store the results in the destination buffer */ + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } +} +#else +void arm_float_to_q15( + const float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const float32_t *pIn = pSrc; /* Source pointer */ + +#ifdef ARM_MATH_ROUNDING + float32_t in; +#endif /* #ifdef ARM_MATH_ROUNDING */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * 32768 */ + + /* convert from float to Q15 and store result in destination buffer */ +#ifdef ARM_MATH_ROUNDING + + in = (*pIn++ * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + + in = (*pIn++ * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + + in = (*pIn++ * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + + in = (*pIn++ * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + +#else + + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A * 32768 */ + + /* convert from float to Q15 and store result in destination buffer */ +#ifdef ARM_MATH_ROUNDING + + in = (*pIn++ * 32768.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q15_t) (__SSAT((q31_t) (in), 16)); + +#else + + /* C = A * 32768 */ + /* Convert from float to q15 and then store the results in the destination buffer */ + *pDst++ = (q15_t) __SSAT((q31_t) (*pIn++ * 32768.0f), 16); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement loop counter */ + blkCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of float_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q31.c b/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q31.c new file mode 100644 index 000000000..479f8c5b8 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q31.c @@ -0,0 +1,252 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_float_to_q31.c + * Description: Converts the elements of the floating-point vector to Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + * @defgroup float_to_x Convert 32-bit floating point value + */ + +/** + @addtogroup float_to_x + @{ + */ + +/** + @brief Converts the elements of the floating-point vector to Q31 vector. + @param[in] pSrc points to the floating-point input vector + @param[out] pDst points to the Q31 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q31_t)(pSrc[n] * 2147483648);   0 <= n < blockSize.
+  
+ + @par Scaling and Overflow Behavior + The function uses saturating arithmetic. + Results outside of the allowable Q31 range[0x80000000 0x7FFFFFFF] are saturated. + + @note + In order to apply rounding, the library should be rebuilt with the ROUNDING macro + defined in the preprocessor section of project options. + */ + +#if defined(ARM_MATH_NEON) +void arm_float_to_q31( + const float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + const float32_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + float32_t in; + float32x4_t inV; + #ifdef ARM_MATH_ROUNDING + float32x4_t zeroV = vdupq_n_f32(0.0f); + float32x4_t pHalf = vdupq_n_f32(0.5f / 2147483648.0f); + float32x4_t mHalf = vdupq_n_f32(-0.5f / 2147483648.0f); + float32x4_t r; + uint32x4_t cmp; + #endif + + int32x4_t outV; + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + +#ifdef ARM_MATH_ROUNDING + + /* C = A * 32768 */ + /* Convert from float to Q31 and then store the results in the destination buffer */ + inV = vld1q_f32(pIn); + cmp = vcgtq_f32(inV,zeroV); + r = vbslq_f32(cmp,pHalf,mHalf); + inV = vaddq_f32(inV, r); + + pIn += 4; + + outV = vcvtq_n_s32_f32(inV,31); + + vst1q_s32(pDst, outV); + pDst += 4; + +#else + + /* C = A * 2147483648 */ + /* Convert from float to Q31 and then store the results in the destination buffer */ + inV = vld1q_f32(pIn); + + outV = vcvtq_n_s32_f32(inV,31); + + vst1q_s32(pDst, outV); + pDst += 4; + pIn += 4; + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 3; + + while (blkCnt > 0U) + { + +#ifdef ARM_MATH_ROUNDING + + /* C = A * 2147483648 */ + /* Convert from float to Q31 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + +#else + + /* C = A * 2147483648 */ + /* Convert from float to Q31 and then store the results in the destination buffer */ + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + +} +#else +void arm_float_to_q31( + const float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const float32_t *pIn = pSrc; /* Source pointer */ + +#ifdef ARM_MATH_ROUNDING + float32_t in; +#endif /* #ifdef ARM_MATH_ROUNDING */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * 2147483648 */ + + /* convert from float to Q31 and store result in destination buffer */ +#ifdef ARM_MATH_ROUNDING + + in = (*pIn++ * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + + in = (*pIn++ * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + + in = (*pIn++ * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + + in = (*pIn++ * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + +#else + + /* C = A * 2147483648 */ + /* Convert from float to Q31 and then store the results in the destination buffer */ + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A * 2147483648 */ + + /* convert from float to Q31 and store result in destination buffer */ +#ifdef ARM_MATH_ROUNDING + + in = (*pIn++ * 2147483648.0f); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = clip_q63_to_q31((q63_t) (in)); + +#else + + /* C = A * 2147483648 */ + /* Convert from float to Q31 and then store the results in the destination buffer */ + *pDst++ = clip_q63_to_q31((q63_t) (*pIn++ * 2147483648.0f)); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement loop counter */ + blkCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of float_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q7.c b/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q7.c new file mode 100644 index 000000000..5f2a7eb02 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_float_to_q7.c @@ -0,0 +1,253 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_float_to_q7.c + * Description: Converts the elements of the floating-point vector to Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup float_to_x + @{ + */ + +/** + * @brief Converts the elements of the floating-point vector to Q7 vector. + * @param[in] *pSrc points to the floating-point input vector + * @param[out] *pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + * @return none. + * + *\par Description: + * \par + * The equation used for the conversion process is: + *
+ * 	pDst[n] = (q7_t)(pSrc[n] * 128);   0 <= n < blockSize.
+ * 
+ * \par Scaling and Overflow Behavior: + * \par + * The function uses saturating arithmetic. + * Results outside of the allowable Q7 range [0x80 0x7F] will be saturated. + * \note + * In order to apply rounding, the library should be rebuilt with the ROUNDING macro + * defined in the preprocessor section of project options. + */ + +#if defined(ARM_MATH_NEON) +void arm_float_to_q7( + const float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + const float32_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + float32_t in; + float32x4_t inV; + #ifdef ARM_MATH_ROUNDING + float32x4_t zeroV = vdupq_n_f32(0.0f); + float32x4_t pHalf = vdupq_n_f32(0.5f / 128.0f); + float32x4_t mHalf = vdupq_n_f32(-0.5f / 128.0f); + float32x4_t r; + uint32x4_t cmp; + #endif + + int32x4_t cvt; + int16x4_t cvt1,cvt2; + int8x8_t outV; + + blkCnt = blockSize >> 3U; + + /* Compute 8 outputs at a time. + ** a second loop below computes the remaining 1 to 7 samples. */ + while (blkCnt > 0U) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 128 */ + /* Convert from float to q7 and then store the results in the destination buffer */ + inV = vld1q_f32(pIn); + cmp = vcgtq_f32(inV,zeroV); + r = vbslq_f32(cmp,pHalf,mHalf); + inV = vaddq_f32(inV, r); + cvt1 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); + pIn += 4; + + inV = vld1q_f32(pIn); + cmp = vcgtq_f32(inV,zeroV); + r = vbslq_f32(cmp,pHalf,mHalf); + inV = vaddq_f32(inV, r); + cvt2 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); + pIn += 4; + + outV = vqmovn_s16(vcombine_s16(cvt1,cvt2)); + vst1_s8(pDst, outV); + pDst += 8; + +#else + + /* C = A * 128 */ + /* Convert from float to q7 and then store the results in the destination buffer */ + inV = vld1q_f32(pIn); + cvt1 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); + pIn += 4; + + inV = vld1q_f32(pIn); + cvt2 = vqmovn_s32(vcvtq_n_s32_f32(inV,7)); + pIn += 4; + + outV = vqmovn_s16(vcombine_s16(cvt1,cvt2)); + + vst1_s8(pDst, outV); + pDst += 8; +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 7; + + while (blkCnt > 0U) + { + +#ifdef ARM_MATH_ROUNDING + /* C = A * 128 */ + /* Convert from float to q7 and then store the results in the destination buffer */ + in = *pIn++; + in = (in * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + +#else + + /* C = A * 128 */ + /* Convert from float to q7 and then store the results in the destination buffer */ + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement the loop counter */ + blkCnt--; + } + +} +#else +void arm_float_to_q7( + const float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const float32_t *pIn = pSrc; /* Source pointer */ + +#ifdef ARM_MATH_ROUNDING + float32_t in; +#endif /* #ifdef ARM_MATH_ROUNDING */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = A * 128 */ + + /* Convert from float to q7 and store result in destination buffer */ +#ifdef ARM_MATH_ROUNDING + + in = (*pIn++ * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + + in = (*pIn++ * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + + in = (*pIn++ * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + + in = (*pIn++ * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + +#else + + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + *pDst++ = __SSAT((q31_t) (*pIn++ * 128.0f), 8); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = A * 128 */ + + /* Convert from float to q7 and store result in destination buffer */ +#ifdef ARM_MATH_ROUNDING + + in = (*pIn++ * 128); + in += in > 0.0f ? 0.5f : -0.5f; + *pDst++ = (q7_t) (__SSAT((q15_t) (in), 8)); + +#else + + *pDst++ = (q7_t) __SSAT((q31_t) (*pIn++ * 128.0f), 8); + +#endif /* #ifdef ARM_MATH_ROUNDING */ + + /* Decrement loop counter */ + blkCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of float_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_float.c b/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_float.c new file mode 100644 index 000000000..f49d9b77a --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_float.c @@ -0,0 +1,166 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q15_to_float.c + * Description: Converts the elements of the Q15 vector to floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + * @defgroup q15_to_x Convert 16-bit Integer value + */ + +/** + @addtogroup q15_to_x + @{ + */ + +/** + @brief Converts the elements of the Q15 vector to floating-point vector. + @param[in] pSrc points to the Q15 input vector + @param[out] pDst points to the floating-point output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (float32_t) pSrc[n] / 32768;   0 <= n < blockSize.
+  
+ */ + +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_q15_to_float( + const q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + const q15_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + int16x8_t inV; + int32x4_t inV0, inV1; + float32x4_t outV; + + blkCnt = blockSize >> 3U; + + /* Compute 8 outputs at a time. + ** a second loop below computes the remaining 1 to 7 samples. */ + while (blkCnt > 0U) + { + /* C = (float32_t) A / 32768 */ + /* convert from q15 to float and then store the results in the destination buffer */ + inV = vld1q_s16(pIn); + pIn += 8; + + inV0 = vmovl_s16(vget_low_s16(inV)); + inV1 = vmovl_s16(vget_high_s16(inV)); + + outV = vcvtq_n_f32_s32(inV0,15); + vst1q_f32(pDst, outV); + pDst += 4; + + outV = vcvtq_n_f32_s32(inV1,15); + vst1q_f32(pDst, outV); + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 8, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 7; + + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 32768 */ + /* convert from q15 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + + /* Decrement the loop counter */ + blkCnt--; + } +} +#else +void arm_q15_to_float( + const q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q15_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 32768 */ + + /* Convert from q15 to float and store result in destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + *pDst++ = ((float32_t) * pIn++ / 32768.0f); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 32768 */ + + /* Convert from q15 to float and store result in destination buffer */ + *pDst++ = ((float32_t) *pIn++ / 32768.0f); + + /* Decrement loop counter */ + blkCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of q15_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c b/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c new file mode 100644 index 000000000..1afd48940 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q31.c @@ -0,0 +1,138 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q15_to_q31.c + * Description: Converts the elements of the Q15 vector to Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup q15_to_x + @{ + */ + +/** + @brief Converts the elements of the Q15 vector to Q31 vector. + @param[in] pSrc points to the Q15 input vector + @param[out] pDst points to the Q31 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q31_t) pSrc[n] << 16;   0 <= n < blockSize.
+  
+ */ + +void arm_q15_to_q31( + const q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q15_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) + q31_t in1, in2; + q31_t out1, out2, out3, out4; +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (q31_t)A << 16 */ + + /* Convert from q15 to q31 and store result in destination buffer */ + in1 = read_q15x2_ia ((q15_t **) &pIn); + in2 = read_q15x2_ia ((q15_t **) &pIn); + +#ifndef ARM_MATH_BIG_ENDIAN + + /* extract lower 16 bits to 32 bit result */ + out1 = in1 << 16U; + /* extract upper 16 bits to 32 bit result */ + out2 = in1 & 0xFFFF0000; + /* extract lower 16 bits to 32 bit result */ + out3 = in2 << 16U; + /* extract upper 16 bits to 32 bit result */ + out4 = in2 & 0xFFFF0000; + +#else + + /* extract upper 16 bits to 32 bit result */ + out1 = in1 & 0xFFFF0000; + /* extract lower 16 bits to 32 bit result */ + out2 = in1 << 16U; + /* extract upper 16 bits to 32 bit result */ + out3 = in2 & 0xFFFF0000; + /* extract lower 16 bits to 32 bit result */ + out4 = in2 << 16U; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + *pDst++ = out1; + *pDst++ = out2; + *pDst++ = out3; + *pDst++ = out4; + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (q31_t) A << 16 */ + + /* Convert from q15 to q31 and store result in destination buffer */ + *pDst++ = (q31_t) *pIn++ << 16; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of q15_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q7.c b/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q7.c new file mode 100644 index 000000000..d118b762b --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q15_to_q7.c @@ -0,0 +1,146 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q15_to_q7.c + * Description: Converts the elements of the Q15 vector to Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup q15_to_x + @{ + */ + +/** + @brief Converts the elements of the Q15 vector to Q7 vector. + @param[in] pSrc points to the Q15 input vector + @param[out] pDst points to the Q7 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q7_t) pSrc[n] >> 8;   0 <= n < blockSize.
+  
+ */ + +void arm_q15_to_q7( + const q15_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q15_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in1, in2; + q31_t out1, out2; +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (q7_t) A >> 8 */ + + /* Convert from q15 to q7 and store result in destination buffer */ +#if defined (ARM_MATH_DSP) + + in1 = read_q15x2_ia ((q15_t **) &pIn); + in2 = read_q15x2_ia ((q15_t **) &pIn); + +#ifndef ARM_MATH_BIG_ENDIAN + + out1 = __PKHTB(in2, in1, 16); + out2 = __PKHBT(in2, in1, 16); + +#else + + out1 = __PKHTB(in1, in2, 16); + out2 = __PKHBT(in1, in2, 16); + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* rotate packed value by 24 */ + out2 = ((uint32_t) out2 << 8) | ((uint32_t) out2 >> 24); + + /* anding with 0xff00ff00 to get two 8 bit values */ + out1 = out1 & 0xFF00FF00; + /* anding with 0x00ff00ff to get two 8 bit values */ + out2 = out2 & 0x00FF00FF; + + /* oring two values(contains two 8 bit values) to get four packed 8 bit values */ + out1 = out1 | out2; + + /* store 4 samples at a time to destiantion buffer */ + write_q7x4_ia (&pDst, out1); + +#else + + *pDst++ = (q7_t) (*pIn++ >> 8); + *pDst++ = (q7_t) (*pIn++ >> 8); + *pDst++ = (q7_t) (*pIn++ >> 8); + *pDst++ = (q7_t) (*pIn++ >> 8); + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (q7_t) A >> 8 */ + + /* Convert from q15 to q7 and store result in destination buffer */ + *pDst++ = (q7_t) (*pIn++ >> 8); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of q15_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_float.c b/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_float.c new file mode 100644 index 000000000..03e7ec6f2 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_float.c @@ -0,0 +1,159 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q31_to_float.c + * Description: Converts the elements of the Q31 vector to floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + * @defgroup q31_to_x Convert 32-bit Integer value + */ + +/** + @addtogroup q31_to_x + @{ + */ + +/** + @brief Converts the elements of the Q31 vector to floating-point vector. + @param[in] pSrc points to the Q31 input vector + @param[out] pDst points to the floating-point output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (float32_t) pSrc[n] / 2147483648;   0 <= n < blockSize.
+  
+ */ + +#if defined(ARM_MATH_NEON_EXPERIMENTAL) +void arm_q31_to_float( + const q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + const q31_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + int32x4_t inV; + float32x4_t outV; + + blkCnt = blockSize >> 2U; + + /* Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + while (blkCnt > 0U) + { + /* C = (float32_t) A / 2147483648 */ + /* Convert from q31 to float and then store the results in the destination buffer */ + inV = vld1q_s32(pIn); + pIn += 4; + + outV = vcvtq_n_f32_s32(inV,31); + + vst1q_f32(pDst, outV); + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 3; + + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 2147483648 */ + /* Convert from q31 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 2147483648.0f); + + /* Decrement the loop counter */ + blkCnt--; + } +} +#else +void arm_q31_to_float( + const q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + const q31_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 2147483648 */ + + /* Convert from q31 to float and store result in destination buffer */ + *pDst++ = ((float32_t) *pIn++ / 2147483648.0f); + *pDst++ = ((float32_t) *pIn++ / 2147483648.0f); + *pDst++ = ((float32_t) *pIn++ / 2147483648.0f); + *pDst++ = ((float32_t) *pIn++ / 2147483648.0f); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 2147483648 */ + + /* Convert from q31 to float and store result in destination buffer */ + *pDst++ = ((float32_t) *pIn++ / 2147483648.0f); + + /* Decrement loop counter */ + blkCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of q31_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_q15.c b/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_q15.c new file mode 100644 index 000000000..8d82c28aa --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_q15.c @@ -0,0 +1,134 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q31_to_q15.c + * Description: Converts the elements of the Q31 vector to Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup q31_to_x + @{ + */ + +/** + @brief Converts the elements of the Q31 vector to Q15 vector. + @param[in] pSrc points to the Q31 input vector + @param[out] pDst points to the Q15 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q15_t) pSrc[n] >> 16;   0 <= n < blockSize.
+  
+ */ + +void arm_q31_to_q15( + const q31_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q31_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in1, in2, in3, in4; + q31_t out1, out2; +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (q15_t) (A >> 16) */ + + /* Convert from q31 to q15 and store result in destination buffer */ +#if defined (ARM_MATH_DSP) + + in1 = *pIn++; + in2 = *pIn++; + in3 = *pIn++; + in4 = *pIn++; + + /* pack two higher 16-bit values from two 32-bit values */ +#ifndef ARM_MATH_BIG_ENDIAN + out1 = __PKHTB(in2, in1, 16); + out2 = __PKHTB(in4, in3, 16); +#else + out1 = __PKHTB(in1, in2, 16); + out2 = __PKHTB(in3, in4, 16); +#endif /* #ifdef ARM_MATH_BIG_ENDIAN */ + + write_q15x2_ia (&pDst, out1); + write_q15x2_ia (&pDst, out2); + +#else + + *pDst++ = (q15_t) (*pIn++ >> 16); + *pDst++ = (q15_t) (*pIn++ >> 16); + *pDst++ = (q15_t) (*pIn++ >> 16); + *pDst++ = (q15_t) (*pIn++ >> 16); + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (q15_t) (A >> 16) */ + + /* Convert from q31 to q15 and store result in destination buffer */ + *pDst++ = (q15_t) (*pIn++ >> 16); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of q31_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_q7.c b/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_q7.c new file mode 100644 index 000000000..c7d1b4cec --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q31_to_q7.c @@ -0,0 +1,110 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q31_to_q7.c + * Description: Converts the elements of the Q31 vector to Q7 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup q31_to_x + @{ + */ + +/** + @brief Converts the elements of the Q31 vector to Q7 vector. + @param[in] pSrc points to the Q31 input vector + @param[out] pDst points to the Q7 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q7_t) pSrc[n] >> 24;   0 <= n < blockSize.
+  
+ */ + +void arm_q31_to_q7( + const q31_t * pSrc, + q7_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q31_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) + + q7_t out1, out2, out3, out4; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (q7_t) (A >> 24) */ + + /* Convert from q31 to q7 and store result in destination buffer */ + + out1 = (q7_t) (*pIn++ >> 24); + out2 = (q7_t) (*pIn++ >> 24); + out3 = (q7_t) (*pIn++ >> 24); + out4 = (q7_t) (*pIn++ >> 24); + write_q7x4_ia (&pDst, __PACKq7(out1, out2, out3, out4)); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (q7_t) (A >> 24) */ + + /* Convert from q31 to q7 and store result in destination buffer */ + *pDst++ = (q7_t) (*pIn++ >> 24); + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of q31_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_float.c b/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_float.c new file mode 100644 index 000000000..6bd86bfeb --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_float.c @@ -0,0 +1,179 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q7_to_float.c + * Description: Converts the elements of the Q7 vector to floating-point vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + * @defgroup q7_to_x Convert 8-bit Integer value + */ + +/** + @addtogroup q7_to_x + @{ + */ + +/** + @brief Converts the elements of the Q7 vector to floating-point vector. + @param[in] pSrc points to the Q7 input vector + @param[out] pDst points to the floating-point output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (float32_t) pSrc[n] / 128;   0 <= n < blockSize.
+  
+ */ + +#if defined(ARM_MATH_NEON) +void arm_q7_to_float( + const q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + const q7_t *pIn = pSrc; /* Src pointer */ + uint32_t blkCnt; /* loop counter */ + + int8x16_t inV; + int16x8_t inVLO, inVHI; + int32x4_t inVLL, inVLH, inVHL, inVHH; + float32x4_t outV; + + blkCnt = blockSize >> 4U; + + /* Compute 16 outputs at a time. + ** a second loop below computes the remaining 1 to 15 samples. */ + while (blkCnt > 0U) + { + /* C = (float32_t) A / 128 */ + /* Convert from q7 to float and then store the results in the destination buffer */ + inV = vld1q_s8(pIn); + pIn += 16; + + inVLO = vmovl_s8(vget_low_s8(inV)); + inVHI = vmovl_s8(vget_high_s8(inV)); + + inVLL = vmovl_s16(vget_low_s16(inVLO)); + inVLH = vmovl_s16(vget_high_s16(inVLO)); + inVHL = vmovl_s16(vget_low_s16(inVHI)); + inVHH = vmovl_s16(vget_high_s16(inVHI)); + + outV = vcvtq_n_f32_s32(inVLL,7); + vst1q_f32(pDst, outV); + pDst += 4; + + outV = vcvtq_n_f32_s32(inVLH,7); + vst1q_f32(pDst, outV); + pDst += 4; + + outV = vcvtq_n_f32_s32(inVHL,7); + vst1q_f32(pDst, outV); + pDst += 4; + + outV = vcvtq_n_f32_s32(inVHH,7); + vst1q_f32(pDst, outV); + pDst += 4; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* If the blockSize is not a multiple of 16, compute any remaining output samples here. + ** No loop unrolling is used. */ + blkCnt = blockSize & 0xF; + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 128 */ + /* Convert from q7 to float and then store the results in the destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 128.0f); + + /* Decrement the loop counter */ + blkCnt--; + } +} +#else +void arm_q7_to_float( + const q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q7_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 128 */ + + /* Convert from q7 to float and store result in destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 128.0f); + *pDst++ = ((float32_t) * pIn++ / 128.0f); + *pDst++ = ((float32_t) * pIn++ / 128.0f); + *pDst++ = ((float32_t) * pIn++ / 128.0f); + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (float32_t) A / 128 */ + + /* Convert from q7 to float and store result in destination buffer */ + *pDst++ = ((float32_t) * pIn++ / 128.0f); + + /* Decrement loop counter */ + blkCnt--; + } + +} +#endif /* #if defined(ARM_MATH_NEON) */ + +/** + @} end of q7_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_q15.c b/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_q15.c new file mode 100644 index 000000000..89afd10a8 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_q15.c @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q7_to_q15.c + * Description: Converts the elements of the Q7 vector to Q15 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup q7_to_x + @{ + */ + +/** + @brief Converts the elements of the Q7 vector to Q15 vector. + @param[in] pSrc points to the Q7 input vector + @param[out] pDst points to the Q15 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q15_t) pSrc[n] << 8;   0 <= n < blockSize.
+  
+ */ + +void arm_q7_to_q15( + const q7_t * pSrc, + q15_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q7_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) && defined (ARM_MATH_DSP) + q31_t in; + q31_t in1, in2; + q31_t out1, out2; +#endif + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (q15_t) A << 8 */ + + /* Convert from q7 to q15 and store result in destination buffer */ +#if defined (ARM_MATH_DSP) + + in = read_q7x4_ia ((q7_t **) &pIn); + + /* rotatate in by 8 and extend two q7_t values to q15_t values */ + in1 = __SXTB16(__ROR(in, 8)); + + /* extend remainig two q7_t values to q15_t values */ + in2 = __SXTB16(in); + + in1 = in1 << 8U; + in2 = in2 << 8U; + + in1 = in1 & 0xFF00FF00; + in2 = in2 & 0xFF00FF00; + +#ifndef ARM_MATH_BIG_ENDIAN + out2 = __PKHTB(in1, in2, 16); + out1 = __PKHBT(in2, in1, 16); +#else + out1 = __PKHTB(in1, in2, 16); + out2 = __PKHBT(in2, in1, 16); +#endif + + write_q15x2_ia (&pDst, out1); + write_q15x2_ia (&pDst, out2); + +#else + + *pDst++ = (q15_t) *pIn++ << 8; + *pDst++ = (q15_t) *pIn++ << 8; + *pDst++ = (q15_t) *pIn++ << 8; + *pDst++ = (q15_t) *pIn++ << 8; + +#endif /* #if defined (ARM_MATH_DSP) */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (q15_t) A << 8 */ + + /* Convert from q7 to q15 and store result in destination buffer */ + *pDst++ = (q15_t) * pIn++ << 8; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of q7_to_x group + */ diff --git a/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_q31.c b/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_q31.c new file mode 100644 index 000000000..641c02d89 --- /dev/null +++ b/CMSIS/DSP/Source/SupportFunctions/arm_q7_to_q31.c @@ -0,0 +1,121 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_q7_to_q31.c + * Description: Converts the elements of the Q7 vector to Q31 vector + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupSupport + */ + +/** + @addtogroup q7_to_x + @{ + */ + +/** + @brief Converts the elements of the Q7 vector to Q31 vector. + @param[in] pSrc points to the Q7 input vector + @param[out] pDst points to the Q31 output vector + @param[in] blockSize number of samples in each vector + @return none + + @par Details + The equation used for the conversion process is: +
+      pDst[n] = (q31_t) pSrc[n] << 24;   0 <= n < blockSize.
+  
+ */ + +void arm_q7_to_q31( + const q7_t * pSrc, + q31_t * pDst, + uint32_t blockSize) +{ + uint32_t blkCnt; /* Loop counter */ + const q7_t *pIn = pSrc; /* Source pointer */ + +#if defined (ARM_MATH_LOOPUNROLL) + + q31_t in; + + /* Loop unrolling: Compute 4 outputs at a time */ + blkCnt = blockSize >> 2U; + + while (blkCnt > 0U) + { + /* C = (q31_t) A << 24 */ + + /* Convert from q7 to q31 and store result in destination buffer */ + in = read_q7x4_ia ((q7_t **) &pIn); + +#ifndef ARM_MATH_BIG_ENDIAN + + *pDst++ = (__ROR(in, 8)) & 0xFF000000; + *pDst++ = (__ROR(in, 16)) & 0xFF000000; + *pDst++ = (__ROR(in, 24)) & 0xFF000000; + *pDst++ = (in & 0xFF000000); + +#else + + *pDst++ = (in & 0xFF000000); + *pDst++ = (__ROR(in, 24)) & 0xFF000000; + *pDst++ = (__ROR(in, 16)) & 0xFF000000; + *pDst++ = (__ROR(in, 8)) & 0xFF000000; + +#endif /* #ifndef ARM_MATH_BIG_ENDIAN */ + + /* Decrement loop counter */ + blkCnt--; + } + + /* Loop unrolling: Compute remaining outputs */ + blkCnt = blockSize % 0x4U; + +#else + + /* Initialize blkCnt with number of samples */ + blkCnt = blockSize; + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + + while (blkCnt > 0U) + { + /* C = (q31_t) A << 24 */ + + /* Convert from q7 to q31 and store result in destination buffer */ + *pDst++ = (q31_t) * pIn++ << 24; + + /* Decrement loop counter */ + blkCnt--; + } + +} + +/** + @} end of q7_to_x group + */ diff --git a/CMSIS/DSP/Source/TransformFunctions/TransformFunctions.c b/CMSIS/DSP/Source/TransformFunctions/TransformFunctions.c new file mode 100644 index 000000000..d0f7ce46d --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/TransformFunctions.c @@ -0,0 +1,60 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: TransformFunctions.c + * Description: Combination of all transform function source files. + * + * $Date: 18. March 2019 + * $Revision: V1.0.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_bitreversal.c" +#include "arm_bitreversal2.c" +#include "arm_cfft_f32.c" +#include "arm_cfft_q15.c" +#include "arm_cfft_q31.c" +#include "arm_cfft_radix2_f32.c" +#include "arm_cfft_radix2_init_f32.c" +#include "arm_cfft_radix2_init_q15.c" +#include "arm_cfft_radix2_init_q31.c" +#include "arm_cfft_radix2_q15.c" +#include "arm_cfft_radix2_q31.c" +#include "arm_cfft_radix4_f32.c" +#include "arm_cfft_radix4_init_f32.c" +#include "arm_cfft_radix4_init_q15.c" +#include "arm_cfft_radix4_init_q31.c" +#include "arm_cfft_radix4_q15.c" +#include "arm_cfft_radix4_q31.c" +#include "arm_cfft_radix8_f32.c" +#include "arm_dct4_f32.c" +#include "arm_dct4_init_f32.c" +#include "arm_dct4_init_q15.c" +#include "arm_dct4_init_q31.c" +#include "arm_dct4_q15.c" +#include "arm_dct4_q31.c" +#include "arm_rfft_f32.c" +#include "arm_rfft_fast_f32.c" +#include "arm_rfft_fast_init_f32.c" +#include "arm_rfft_init_f32.c" +#include "arm_rfft_init_q15.c" +#include "arm_rfft_init_q31.c" +#include "arm_rfft_q15.c" +#include "arm_rfft_q31.c" diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_bitreversal2.S b/CMSIS/DSP/Source/TransformFunctions/arm_bitreversal2.S new file mode 100644 index 000000000..c16091b15 --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_bitreversal2.S @@ -0,0 +1,216 @@ +;/* ---------------------------------------------------------------------- +; * Project: CMSIS DSP Library +; * Title: arm_bitreversal2.S +; * Description: arm_bitreversal_32 function done in assembly for maximum speed. +; * Called after doing an fft to reorder the output. +; * The function is loop unrolled by 2. arm_bitreversal_16 as well. +; * +; * $Date: 18. March 2019 +; * $Revision: V1.5.2 +; * +; * Target Processor: Cortex-M cores +; * -------------------------------------------------------------------- */ +;/* +; * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +#if defined ( __CC_ARM ) /* Keil */ + #define CODESECT AREA ||.text||, CODE, READONLY, ALIGN=2 + #define LABEL +#elif defined ( __IASMARM__ ) /* IAR */ + #define CODESECT SECTION `.text`:CODE + #define PROC + #define LABEL + #define ENDP + #define EXPORT PUBLIC +#elif defined ( __CSMC__ ) /* Cosmic */ + #define CODESECT switch .text + #define THUMB + #define EXPORT xdef + #define PROC : + #define LABEL : + #define ENDP + #define arm_bitreversal_32 _arm_bitreversal_32 +#elif defined ( __TI_ARM__ ) /* TI ARM */ + #define THUMB .thumb + #define CODESECT .text + #define EXPORT .global + #define PROC : .asmfunc + #define LABEL : + #define ENDP .endasmfunc + #define END +#elif defined ( __GNUC__ ) /* GCC */ + #define THUMB .thumb + #define CODESECT .section .text + #define EXPORT .global + #define PROC : + #define LABEL : + #define ENDP + #define END + + .syntax unified +#endif + + CODESECT + THUMB + +;/** +; @brief In-place bit reversal function. +; @param[in,out] pSrc points to the in-place buffer of unknown 32-bit data type +; @param[in] bitRevLen bit reversal table length +; @param[in] pBitRevTab points to bit reversal table +; @return none +; */ + EXPORT arm_bitreversal_32 + EXPORT arm_bitreversal_16 + +#if defined ( __CC_ARM ) /* Keil */ +#elif defined ( __IASMARM__ ) /* IAR */ +#elif defined ( __CSMC__ ) /* Cosmic */ +#elif defined ( __TI_ARM__ ) /* TI ARM */ +#elif defined ( __GNUC__ ) /* GCC */ + .type arm_bitreversal_16, %function + .type arm_bitreversal_32, %function +#endif + +#if defined (ARM_MATH_CM0_FAMILY) + +arm_bitreversal_32 PROC + ADDS r3,r1,#1 + PUSH {r4-r6} + ADDS r1,r2,#0 + LSRS r3,r3,#1 +arm_bitreversal_32_0 LABEL + LDRH r2,[r1,#2] + LDRH r6,[r1,#0] + ADD r2,r0,r2 + ADD r6,r0,r6 + LDR r5,[r2,#0] + LDR r4,[r6,#0] + STR r5,[r6,#0] + STR r4,[r2,#0] + LDR r5,[r2,#4] + LDR r4,[r6,#4] + STR r5,[r6,#4] + STR r4,[r2,#4] + ADDS r1,r1,#4 + SUBS r3,r3,#1 + BNE arm_bitreversal_32_0 + POP {r4-r6} + BX lr + ENDP + +arm_bitreversal_16 PROC + ADDS r3,r1,#1 + PUSH {r4-r6} + ADDS r1,r2,#0 + LSRS r3,r3,#1 +arm_bitreversal_16_0 LABEL + LDRH r2,[r1,#2] + LDRH r6,[r1,#0] + LSRS r2,r2,#1 + LSRS r6,r6,#1 + ADD r2,r0,r2 + ADD r6,r0,r6 + LDR r5,[r2,#0] + LDR r4,[r6,#0] + STR r5,[r6,#0] + STR r4,[r2,#0] + ADDS r1,r1,#4 + SUBS r3,r3,#1 + BNE arm_bitreversal_16_0 + POP {r4-r6} + BX lr + ENDP + +#else + +arm_bitreversal_32 PROC + ADDS r3,r1,#1 + CMP r3,#1 + IT LS + BXLS lr + PUSH {r4-r9} + ADDS r1,r2,#2 + LSRS r3,r3,#2 +arm_bitreversal_32_0 LABEL ;/* loop unrolled by 2 */ + LDRH r8,[r1,#4] + LDRH r9,[r1,#2] + LDRH r2,[r1,#0] + LDRH r12,[r1,#-2] + ADD r8,r0,r8 + ADD r9,r0,r9 + ADD r2,r0,r2 + ADD r12,r0,r12 + LDR r7,[r9,#0] + LDR r6,[r8,#0] + LDR r5,[r2,#0] + LDR r4,[r12,#0] + STR r6,[r9,#0] + STR r7,[r8,#0] + STR r5,[r12,#0] + STR r4,[r2,#0] + LDR r7,[r9,#4] + LDR r6,[r8,#4] + LDR r5,[r2,#4] + LDR r4,[r12,#4] + STR r6,[r9,#4] + STR r7,[r8,#4] + STR r5,[r12,#4] + STR r4,[r2,#4] + ADDS r1,r1,#8 + SUBS r3,r3,#1 + BNE arm_bitreversal_32_0 + POP {r4-r9} + BX lr + ENDP + +arm_bitreversal_16 PROC + ADDS r3,r1,#1 + CMP r3,#1 + IT LS + BXLS lr + PUSH {r4-r9} + ADDS r1,r2,#2 + LSRS r3,r3,#2 +arm_bitreversal_16_0 LABEL ;/* loop unrolled by 2 */ + LDRH r8,[r1,#4] + LDRH r9,[r1,#2] + LDRH r2,[r1,#0] + LDRH r12,[r1,#-2] + ADD r8,r0,r8,LSR #1 + ADD r9,r0,r9,LSR #1 + ADD r2,r0,r2,LSR #1 + ADD r12,r0,r12,LSR #1 + LDR r7,[r9,#0] + LDR r6,[r8,#0] + LDR r5,[r2,#0] + LDR r4,[r12,#0] + STR r6,[r9,#0] + STR r7,[r8,#0] + STR r5,[r12,#0] + STR r4,[r2,#0] + ADDS r1,r1,#8 + SUBS r3,r3,#1 + BNE arm_bitreversal_16_0 + POP {r4-r9} + BX lr + ENDP + +#endif + + END diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_cfft_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_f32.c new file mode 100644 index 000000000..2fff61cab --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_f32.c @@ -0,0 +1,629 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_f32.c + * Description: Combined Radix Decimation in Frequency CFFT Floating point processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +extern void arm_radix8_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier); + +extern void arm_bitreversal_32( + uint32_t * pSrc, + const uint16_t bitRevLen, + const uint16_t * pBitRevTable); + +/** + @ingroup groupTransforms + */ + +/** + @defgroup ComplexFFT Complex FFT Functions + + @par + The Fast Fourier Transform (FFT) is an efficient algorithm for computing the + Discrete Fourier Transform (DFT). The FFT can be orders of magnitude faster + than the DFT, especially for long lengths. + The algorithms described in this section + operate on complex data. A separate set of functions is devoted to handling + of real sequences. + @par + There are separate algorithms for handling floating-point, Q15, and Q31 data + types. The algorithms available for each data type are described next. + @par + The FFT functions operate in-place. That is, the array holding the input data + will also be used to hold the corresponding result. The input data is complex + and contains 2*fftLen interleaved values as shown below. +
{real[0], imag[0], real[1], imag[1], ...} 
+ The FFT result will be contained in the same array and the frequency domain + values will have the same interleaving. + + @par Floating-point + The floating-point complex FFT uses a mixed-radix algorithm. Multiple radix-8 + stages are performed along with a single radix-2 or radix-4 stage, as needed. + The algorithm supports lengths of [16, 32, 64, ..., 4096] and each length uses + a different twiddle factor table. + @par + The function uses the standard FFT definition and output values may grow by a + factor of fftLen when computing the forward transform. The + inverse transform includes a scale of 1/fftLen as part of the + calculation and this matches the textbook definition of the inverse FFT. + @par + Pre-initialized data structures containing twiddle factors and bit reversal + tables are provided and defined in arm_const_structs.h. Include + this header in your function and then pass one of the constant structures as + an argument to arm_cfft_f32. For example: + @par + arm_cfft_f32(arm_cfft_sR_f32_len64, pSrc, 1, 1) + @par + computes a 64-point inverse complex FFT including bit reversal. + The data structures are treated as constant data and not modified during the + calculation. The same data structure can be reused for multiple transforms + including mixing forward and inverse transforms. + @par + Earlier releases of the library provided separate radix-2 and radix-4 + algorithms that operated on floating-point data. These functions are still + provided but are deprecated. The older functions are slower and less general + than the new functions. + @par + An example of initialization of the constants for the arm_cfft_f32 function follows: + @code + const static arm_cfft_instance_f32 *S; + ... + switch (length) { + case 16: + S = &arm_cfft_sR_f32_len16; + break; + case 32: + S = &arm_cfft_sR_f32_len32; + break; + case 64: + S = &arm_cfft_sR_f32_len64; + break; + case 128: + S = &arm_cfft_sR_f32_len128; + break; + case 256: + S = &arm_cfft_sR_f32_len256; + break; + case 512: + S = &arm_cfft_sR_f32_len512; + break; + case 1024: + S = &arm_cfft_sR_f32_len1024; + break; + case 2048: + S = &arm_cfft_sR_f32_len2048; + break; + case 4096: + S = &arm_cfft_sR_f32_len4096; + break; + } + @endcode + @par Q15 and Q31 + The floating-point complex FFT uses a mixed-radix algorithm. Multiple radix-4 + stages are performed along with a single radix-2 stage, as needed. + The algorithm supports lengths of [16, 32, 64, ..., 4096] and each length uses + a different twiddle factor table. + @par + The function uses the standard FFT definition and output values may grow by a + factor of fftLen when computing the forward transform. The + inverse transform includes a scale of 1/fftLen as part of the + calculation and this matches the textbook definition of the inverse FFT. + @par + Pre-initialized data structures containing twiddle factors and bit reversal + tables are provided and defined in arm_const_structs.h. Include + this header in your function and then pass one of the constant structures as + an argument to arm_cfft_q31. For example: + @par + arm_cfft_q31(arm_cfft_sR_q31_len64, pSrc, 1, 1) + @par + computes a 64-point inverse complex FFT including bit reversal. + The data structures are treated as constant data and not modified during the + calculation. The same data structure can be reused for multiple transforms + including mixing forward and inverse transforms. + @par + Earlier releases of the library provided separate radix-2 and radix-4 + algorithms that operated on floating-point data. These functions are still + provided but are deprecated. The older functions are slower and less general + than the new functions. + @par + An example of initialization of the constants for the arm_cfft_q31 function follows: + @code + const static arm_cfft_instance_q31 *S; + ... + switch (length) { + case 16: + S = &arm_cfft_sR_q31_len16; + break; + case 32: + S = &arm_cfft_sR_q31_len32; + break; + case 64: + S = &arm_cfft_sR_q31_len64; + break; + case 128: + S = &arm_cfft_sR_q31_len128; + break; + case 256: + S = &arm_cfft_sR_q31_len256; + break; + case 512: + S = &arm_cfft_sR_q31_len512; + break; + case 1024: + S = &arm_cfft_sR_q31_len1024; + break; + case 2048: + S = &arm_cfft_sR_q31_len2048; + break; + case 4096: + S = &arm_cfft_sR_q31_len4096; + break; + } + @endcode + + */ + +void arm_cfft_radix8by2_f32 (arm_cfft_instance_f32 * S, float32_t * p1) +{ + uint32_t L = S->fftLen; + float32_t * pCol1, * pCol2, * pMid1, * pMid2; + float32_t * p2 = p1 + L; + const float32_t * tw = (float32_t *) S->pTwiddle; + float32_t t1[4], t2[4], t3[4], t4[4], twR, twI; + float32_t m0, m1, m2, m3; + uint32_t l; + + pCol1 = p1; + pCol2 = p2; + + /* Define new length */ + L >>= 1; + + /* Initialize mid pointers */ + pMid1 = p1 + L; + pMid2 = p2 + L; + + /* do two dot Fourier transform */ + for (l = L >> 2; l > 0; l-- ) + { + t1[0] = p1[0]; + t1[1] = p1[1]; + t1[2] = p1[2]; + t1[3] = p1[3]; + + t2[0] = p2[0]; + t2[1] = p2[1]; + t2[2] = p2[2]; + t2[3] = p2[3]; + + t3[0] = pMid1[0]; + t3[1] = pMid1[1]; + t3[2] = pMid1[2]; + t3[3] = pMid1[3]; + + t4[0] = pMid2[0]; + t4[1] = pMid2[1]; + t4[2] = pMid2[2]; + t4[3] = pMid2[3]; + + *p1++ = t1[0] + t2[0]; + *p1++ = t1[1] + t2[1]; + *p1++ = t1[2] + t2[2]; + *p1++ = t1[3] + t2[3]; /* col 1 */ + + t2[0] = t1[0] - t2[0]; + t2[1] = t1[1] - t2[1]; + t2[2] = t1[2] - t2[2]; + t2[3] = t1[3] - t2[3]; /* for col 2 */ + + *pMid1++ = t3[0] + t4[0]; + *pMid1++ = t3[1] + t4[1]; + *pMid1++ = t3[2] + t4[2]; + *pMid1++ = t3[3] + t4[3]; /* col 1 */ + + t4[0] = t4[0] - t3[0]; + t4[1] = t4[1] - t3[1]; + t4[2] = t4[2] - t3[2]; + t4[3] = t4[3] - t3[3]; /* for col 2 */ + + twR = *tw++; + twI = *tw++; + + /* multiply by twiddle factors */ + m0 = t2[0] * twR; + m1 = t2[1] * twI; + m2 = t2[1] * twR; + m3 = t2[0] * twI; + + /* R = R * Tr - I * Ti */ + *p2++ = m0 + m1; + /* I = I * Tr + R * Ti */ + *p2++ = m2 - m3; + + /* use vertical symmetry */ + /* 0.9988 - 0.0491i <==> -0.0491 - 0.9988i */ + m0 = t4[0] * twI; + m1 = t4[1] * twR; + m2 = t4[1] * twI; + m3 = t4[0] * twR; + + *pMid2++ = m0 - m1; + *pMid2++ = m2 + m3; + + twR = *tw++; + twI = *tw++; + + m0 = t2[2] * twR; + m1 = t2[3] * twI; + m2 = t2[3] * twR; + m3 = t2[2] * twI; + + *p2++ = m0 + m1; + *p2++ = m2 - m3; + + m0 = t4[2] * twI; + m1 = t4[3] * twR; + m2 = t4[3] * twI; + m3 = t4[2] * twR; + + *pMid2++ = m0 - m1; + *pMid2++ = m2 + m3; + } + + /* first col */ + arm_radix8_butterfly_f32 (pCol1, L, (float32_t *) S->pTwiddle, 2U); + + /* second col */ + arm_radix8_butterfly_f32 (pCol2, L, (float32_t *) S->pTwiddle, 2U); +} + +void arm_cfft_radix8by4_f32 (arm_cfft_instance_f32 * S, float32_t * p1) +{ + uint32_t L = S->fftLen >> 1; + float32_t * pCol1, *pCol2, *pCol3, *pCol4, *pEnd1, *pEnd2, *pEnd3, *pEnd4; + const float32_t *tw2, *tw3, *tw4; + float32_t * p2 = p1 + L; + float32_t * p3 = p2 + L; + float32_t * p4 = p3 + L; + float32_t t2[4], t3[4], t4[4], twR, twI; + float32_t p1ap3_0, p1sp3_0, p1ap3_1, p1sp3_1; + float32_t m0, m1, m2, m3; + uint32_t l, twMod2, twMod3, twMod4; + + pCol1 = p1; /* points to real values by default */ + pCol2 = p2; + pCol3 = p3; + pCol4 = p4; + pEnd1 = p2 - 1; /* points to imaginary values by default */ + pEnd2 = p3 - 1; + pEnd3 = p4 - 1; + pEnd4 = pEnd3 + L; + + tw2 = tw3 = tw4 = (float32_t *) S->pTwiddle; + + L >>= 1; + + /* do four dot Fourier transform */ + + twMod2 = 2; + twMod3 = 4; + twMod4 = 6; + + /* TOP */ + p1ap3_0 = p1[0] + p3[0]; + p1sp3_0 = p1[0] - p3[0]; + p1ap3_1 = p1[1] + p3[1]; + p1sp3_1 = p1[1] - p3[1]; + + /* col 2 */ + t2[0] = p1sp3_0 + p2[1] - p4[1]; + t2[1] = p1sp3_1 - p2[0] + p4[0]; + /* col 3 */ + t3[0] = p1ap3_0 - p2[0] - p4[0]; + t3[1] = p1ap3_1 - p2[1] - p4[1]; + /* col 4 */ + t4[0] = p1sp3_0 - p2[1] + p4[1]; + t4[1] = p1sp3_1 + p2[0] - p4[0]; + /* col 1 */ + *p1++ = p1ap3_0 + p2[0] + p4[0]; + *p1++ = p1ap3_1 + p2[1] + p4[1]; + + /* Twiddle factors are ones */ + *p2++ = t2[0]; + *p2++ = t2[1]; + *p3++ = t3[0]; + *p3++ = t3[1]; + *p4++ = t4[0]; + *p4++ = t4[1]; + + tw2 += twMod2; + tw3 += twMod3; + tw4 += twMod4; + + for (l = (L - 2) >> 1; l > 0; l-- ) + { + /* TOP */ + p1ap3_0 = p1[0] + p3[0]; + p1sp3_0 = p1[0] - p3[0]; + p1ap3_1 = p1[1] + p3[1]; + p1sp3_1 = p1[1] - p3[1]; + /* col 2 */ + t2[0] = p1sp3_0 + p2[1] - p4[1]; + t2[1] = p1sp3_1 - p2[0] + p4[0]; + /* col 3 */ + t3[0] = p1ap3_0 - p2[0] - p4[0]; + t3[1] = p1ap3_1 - p2[1] - p4[1]; + /* col 4 */ + t4[0] = p1sp3_0 - p2[1] + p4[1]; + t4[1] = p1sp3_1 + p2[0] - p4[0]; + /* col 1 - top */ + *p1++ = p1ap3_0 + p2[0] + p4[0]; + *p1++ = p1ap3_1 + p2[1] + p4[1]; + + /* BOTTOM */ + p1ap3_1 = pEnd1[-1] + pEnd3[-1]; + p1sp3_1 = pEnd1[-1] - pEnd3[-1]; + p1ap3_0 = pEnd1[ 0] + pEnd3[0]; + p1sp3_0 = pEnd1[ 0] - pEnd3[0]; + /* col 2 */ + t2[2] = pEnd2[0] - pEnd4[0] + p1sp3_1; + t2[3] = pEnd1[0] - pEnd3[0] - pEnd2[-1] + pEnd4[-1]; + /* col 3 */ + t3[2] = p1ap3_1 - pEnd2[-1] - pEnd4[-1]; + t3[3] = p1ap3_0 - pEnd2[ 0] - pEnd4[ 0]; + /* col 4 */ + t4[2] = pEnd2[ 0] - pEnd4[ 0] - p1sp3_1; + t4[3] = pEnd4[-1] - pEnd2[-1] - p1sp3_0; + /* col 1 - Bottom */ + *pEnd1-- = p1ap3_0 + pEnd2[ 0] + pEnd4[ 0]; + *pEnd1-- = p1ap3_1 + pEnd2[-1] + pEnd4[-1]; + + /* COL 2 */ + /* read twiddle factors */ + twR = *tw2++; + twI = *tw2++; + /* multiply by twiddle factors */ + /* let Z1 = a + i(b), Z2 = c + i(d) */ + /* => Z1 * Z2 = (a*c - b*d) + i(b*c + a*d) */ + + /* Top */ + m0 = t2[0] * twR; + m1 = t2[1] * twI; + m2 = t2[1] * twR; + m3 = t2[0] * twI; + + *p2++ = m0 + m1; + *p2++ = m2 - m3; + /* use vertical symmetry col 2 */ + /* 0.9997 - 0.0245i <==> 0.0245 - 0.9997i */ + /* Bottom */ + m0 = t2[3] * twI; + m1 = t2[2] * twR; + m2 = t2[2] * twI; + m3 = t2[3] * twR; + + *pEnd2-- = m0 - m1; + *pEnd2-- = m2 + m3; + + /* COL 3 */ + twR = tw3[0]; + twI = tw3[1]; + tw3 += twMod3; + /* Top */ + m0 = t3[0] * twR; + m1 = t3[1] * twI; + m2 = t3[1] * twR; + m3 = t3[0] * twI; + + *p3++ = m0 + m1; + *p3++ = m2 - m3; + /* use vertical symmetry col 3 */ + /* 0.9988 - 0.0491i <==> -0.9988 - 0.0491i */ + /* Bottom */ + m0 = -t3[3] * twR; + m1 = t3[2] * twI; + m2 = t3[2] * twR; + m3 = t3[3] * twI; + + *pEnd3-- = m0 - m1; + *pEnd3-- = m3 - m2; + + /* COL 4 */ + twR = tw4[0]; + twI = tw4[1]; + tw4 += twMod4; + /* Top */ + m0 = t4[0] * twR; + m1 = t4[1] * twI; + m2 = t4[1] * twR; + m3 = t4[0] * twI; + + *p4++ = m0 + m1; + *p4++ = m2 - m3; + /* use vertical symmetry col 4 */ + /* 0.9973 - 0.0736i <==> -0.0736 + 0.9973i */ + /* Bottom */ + m0 = t4[3] * twI; + m1 = t4[2] * twR; + m2 = t4[2] * twI; + m3 = t4[3] * twR; + + *pEnd4-- = m0 - m1; + *pEnd4-- = m2 + m3; + } + + /* MIDDLE */ + /* Twiddle factors are */ + /* 1.0000 0.7071-0.7071i -1.0000i -0.7071-0.7071i */ + p1ap3_0 = p1[0] + p3[0]; + p1sp3_0 = p1[0] - p3[0]; + p1ap3_1 = p1[1] + p3[1]; + p1sp3_1 = p1[1] - p3[1]; + + /* col 2 */ + t2[0] = p1sp3_0 + p2[1] - p4[1]; + t2[1] = p1sp3_1 - p2[0] + p4[0]; + /* col 3 */ + t3[0] = p1ap3_0 - p2[0] - p4[0]; + t3[1] = p1ap3_1 - p2[1] - p4[1]; + /* col 4 */ + t4[0] = p1sp3_0 - p2[1] + p4[1]; + t4[1] = p1sp3_1 + p2[0] - p4[0]; + /* col 1 - Top */ + *p1++ = p1ap3_0 + p2[0] + p4[0]; + *p1++ = p1ap3_1 + p2[1] + p4[1]; + + /* COL 2 */ + twR = tw2[0]; + twI = tw2[1]; + + m0 = t2[0] * twR; + m1 = t2[1] * twI; + m2 = t2[1] * twR; + m3 = t2[0] * twI; + + *p2++ = m0 + m1; + *p2++ = m2 - m3; + /* COL 3 */ + twR = tw3[0]; + twI = tw3[1]; + + m0 = t3[0] * twR; + m1 = t3[1] * twI; + m2 = t3[1] * twR; + m3 = t3[0] * twI; + + *p3++ = m0 + m1; + *p3++ = m2 - m3; + /* COL 4 */ + twR = tw4[0]; + twI = tw4[1]; + + m0 = t4[0] * twR; + m1 = t4[1] * twI; + m2 = t4[1] * twR; + m3 = t4[0] * twI; + + *p4++ = m0 + m1; + *p4++ = m2 - m3; + + /* first col */ + arm_radix8_butterfly_f32 (pCol1, L, (float32_t *) S->pTwiddle, 4U); + + /* second col */ + arm_radix8_butterfly_f32 (pCol2, L, (float32_t *) S->pTwiddle, 4U); + + /* third col */ + arm_radix8_butterfly_f32 (pCol3, L, (float32_t *) S->pTwiddle, 4U); + + /* fourth col */ + arm_radix8_butterfly_f32 (pCol4, L, (float32_t *) S->pTwiddle, 4U); +} + +/** + @addtogroup ComplexFFT + @{ + */ + +/** + @brief Processing function for the floating-point complex FFT. + @param[in] S points to an instance of the floating-point CFFT structure + @param[in,out] p1 points to the complex data buffer of size 2*fftLen. Processing occurs in-place + @param[in] ifftFlag flag that selects transform direction + - value = 0: forward transform + - value = 1: inverse transform + @param[in] bitReverseFlag flag that enables / disables bit reversal of output + - value = 0: disables bit reversal of output + - value = 1: enables bit reversal of output + @return none + */ + +void arm_cfft_f32( + const arm_cfft_instance_f32 * S, + float32_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + uint32_t L = S->fftLen, l; + float32_t invL, * pSrc; + + if (ifftFlag == 1U) + { + /* Conjugate input data */ + pSrc = p1 + 1; + for (l = 0; l < L; l++) + { + *pSrc = -*pSrc; + pSrc += 2; + } + } + + switch (L) + { + case 16: + case 128: + case 1024: + arm_cfft_radix8by2_f32 ( (arm_cfft_instance_f32 *) S, p1); + break; + case 32: + case 256: + case 2048: + arm_cfft_radix8by4_f32 ( (arm_cfft_instance_f32 *) S, p1); + break; + case 64: + case 512: + case 4096: + arm_radix8_butterfly_f32 ( p1, L, (float32_t *) S->pTwiddle, 1); + break; + } + + if ( bitReverseFlag ) + arm_bitreversal_32 ((uint32_t*) p1, S->bitRevLength, S->pBitRevTable); + + if (ifftFlag == 1U) + { + invL = 1.0f / (float32_t)L; + + /* Conjugate and scale output data */ + pSrc = p1; + for (l= 0; l < L; l++) + { + *pSrc++ *= invL ; + *pSrc = -(*pSrc) * invL; + pSrc++; + } + } +} + +/** + @} end of ComplexFFT group + */ diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix2_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix2_f32.c new file mode 100644 index 000000000..f75e32909 --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix2_f32.c @@ -0,0 +1,470 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_radix2_f32.c + * Description: Radix-2 Decimation in Frequency CFFT & CIFFT Floating point processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +void arm_radix2_butterfly_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier); + +void arm_radix2_butterfly_inverse_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen); + +extern void arm_bitreversal_f32( + float32_t * pSrc, + uint16_t fftSize, + uint16_t bitRevFactor, + const uint16_t * pBitRevTab); + +/** + @ingroup groupTransforms + */ + +/** + @addtogroup ComplexFFT + @{ + */ + +/** + @brief Radix-2 CFFT/CIFFT. + @deprecated Do not use this function. It has been superseded by \ref arm_cfft_f32 and will be removed in the future + @param[in] S points to an instance of the floating-point Radix-2 CFFT/CIFFT structure + @param[in,out] pSrc points to the complex data buffer of size 2*fftLen. Processing occurs in-place + @return none + */ + +void arm_cfft_radix2_f32( +const arm_cfft_radix2_instance_f32 * S, + float32_t * pSrc) +{ + + if (S->ifftFlag == 1U) + { + /* Complex IFFT radix-2 */ + arm_radix2_butterfly_inverse_f32(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier, S->onebyfftLen); + } + else + { + /* Complex FFT radix-2 */ + arm_radix2_butterfly_f32(pSrc, S->fftLen, S->pTwiddle, + S->twidCoefModifier); + } + + if (S->bitReverseFlag == 1U) + { + /* Bit Reversal */ + arm_bitreversal_f32(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); + } + +} + + +/** + @} end of ComplexFFT group + */ + + + +/* ---------------------------------------------------------------------- + ** Internal helper function used by the FFTs + ** ------------------------------------------------------------------- */ + +/** + brief Core function for the floating-point CFFT butterfly process. + param[in,out] pSrc points to in-place buffer of floating-point data type + param[in] fftLen length of the FFT + param[in] pCoef points to twiddle coefficient buffer + param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table + return none + */ + +void arm_radix2_butterfly_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier) +{ + + uint32_t i, j, k, l; + uint32_t n1, n2, ia; + float32_t xt, yt, cosVal, sinVal; + float32_t p0, p1, p2, p3; + float32_t a0, a1; + +#if defined (ARM_MATH_DSP) + + /* Initializations for the first stage */ + n2 = fftLen >> 1; + ia = 0; + i = 0; + + // loop for groups + for (k = n2; k > 0; k--) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + + /* Twiddle coefficients index modifier */ + ia += twidCoefModifier; + + /* index calculation for the input as, */ + /* pSrc[i + 0], pSrc[i + fftLen/1] */ + l = i + n2; + + /* Butterfly implementation */ + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 + p1; + pSrc[2 * l + 1] = p2 - p3; + + i++; + } // groups loop end + + twidCoefModifier <<= 1U; + + // loop for stage + for (k = n2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 + p1; + pSrc[2 * l + 1] = p2 - p3; + + i += n1; + } while ( i < fftLen ); // butterfly loop end + j++; + } while ( j < n2); // groups loop end + twidCoefModifier <<= 1U; + } // stages loop end + + // loop for butterfly + for (i = 0; i < fftLen; i += 2) + { + a0 = pSrc[2 * i] + pSrc[2 * i + 2]; + xt = pSrc[2 * i] - pSrc[2 * i + 2]; + + yt = pSrc[2 * i + 1] - pSrc[2 * i + 3]; + a1 = pSrc[2 * i + 3] + pSrc[2 * i + 1]; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + pSrc[2 * i + 2] = xt; + pSrc[2 * i + 3] = yt; + } // groups loop end + +#else /* #if defined (ARM_MATH_DSP) */ + + n2 = fftLen; + + // loop for stage + for (k = fftLen; k > 1; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 + p1; + pSrc[2 * l + 1] = p2 - p3; + + i += n1; + } while (i < fftLen); + j++; + } while (j < n2); + twidCoefModifier <<= 1U; + } + +#endif /* #if defined (ARM_MATH_DSP) */ + +} + + +void arm_radix2_butterfly_inverse_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen) +{ + + uint32_t i, j, k, l; + uint32_t n1, n2, ia; + float32_t xt, yt, cosVal, sinVal; + float32_t p0, p1, p2, p3; + float32_t a0, a1; + +#if defined (ARM_MATH_DSP) + + n2 = fftLen >> 1; + ia = 0; + + // loop for groups + for (i = 0; i < n2; i++) + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 - p1; + pSrc[2 * l + 1] = p2 + p3; + } // groups loop end + + twidCoefModifier <<= 1U; + + // loop for stage + for (k = fftLen / 2; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia += twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 - p1; + pSrc[2 * l + 1] = p2 + p3; + + i += n1; + } while ( i < fftLen ); // butterfly loop end + j++; + } while (j < n2); // groups loop end + + twidCoefModifier <<= 1U; + } // stages loop end + + // loop for butterfly + for (i = 0; i < fftLen; i += 2) + { + a0 = pSrc[2 * i] + pSrc[2 * i + 2]; + xt = pSrc[2 * i] - pSrc[2 * i + 2]; + + a1 = pSrc[2 * i + 3] + pSrc[2 * i + 1]; + yt = pSrc[2 * i + 1] - pSrc[2 * i + 3]; + + p0 = a0 * onebyfftLen; + p2 = xt * onebyfftLen; + p1 = a1 * onebyfftLen; + p3 = yt * onebyfftLen; + + pSrc[2 * i] = p0; + pSrc[2 * i + 1] = p1; + pSrc[2 * i + 2] = p2; + pSrc[2 * i + 3] = p3; + } // butterfly loop end + +#else /* #if defined (ARM_MATH_DSP) */ + + n2 = fftLen; + + // loop for stage + for (k = fftLen; k > 2; k = k >> 1) + { + n1 = n2; + n2 = n2 >> 1; + ia = 0; + + // loop for groups + j = 0; + do + { + cosVal = pCoef[ia * 2]; + sinVal = pCoef[(ia * 2) + 1]; + ia = ia + twidCoefModifier; + + // loop for butterfly + i = j; + do + { + l = i + n2; + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + + p0 = xt * cosVal; + p1 = yt * sinVal; + p2 = yt * cosVal; + p3 = xt * sinVal; + + pSrc[2 * i] = a0; + pSrc[2 * i + 1] = a1; + + pSrc[2 * l] = p0 - p1; + pSrc[2 * l + 1] = p2 + p3; + + i += n1; + } while ( i < fftLen ); // butterfly loop end + j++; + } while ( j < n2 ); // groups loop end + + twidCoefModifier = twidCoefModifier << 1U; + } // stages loop end + + n1 = n2; + n2 = n2 >> 1; + + // loop for butterfly + for (i = 0; i < fftLen; i += n1) + { + l = i + n2; + + a0 = pSrc[2 * i] + pSrc[2 * l]; + xt = pSrc[2 * i] - pSrc[2 * l]; + + a1 = pSrc[2 * l + 1] + pSrc[2 * i + 1]; + yt = pSrc[2 * i + 1] - pSrc[2 * l + 1]; + + p0 = a0 * onebyfftLen; + p2 = xt * onebyfftLen; + p1 = a1 * onebyfftLen; + p3 = yt * onebyfftLen; + + pSrc[2 * i] = p0; + pSrc[2 * l] = p2; + + pSrc[2 * i + 1] = p1; + pSrc[2 * l + 1] = p3; + } // butterfly loop end + +#endif /* #if defined (ARM_MATH_DSP) */ + +} diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix2_init_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix2_init_f32.c new file mode 100644 index 000000000..417ad9170 --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix2_init_f32.c @@ -0,0 +1,197 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_radix2_init_f32.c + * Description: Radix-2 Decimation in Frequency Floating-point CFFT & CIFFT Initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @ingroup groupTransforms + */ + +/** + @addtogroup ComplexFFT + @{ + */ + +/** + @brief Initialization function for the floating-point CFFT/CIFFT. + @deprecated Do not use this function. It has been superseded by \ref arm_cfft_f32 and will be removed in the future. + @param[in,out] S points to an instance of the floating-point CFFT/CIFFT structure + @param[in] fftLen length of the FFT + @param[in] ifftFlag flag that selects transform direction + - value = 0: forward transform + - value = 1: inverse transform + @param[in] bitReverseFlag flag that enables / disables bit reversal of output + - value = 0: disables bit reversal of output + - value = 1: enables bit reversal of output + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length + + @par Details + The parameter ifftFlag controls whether a forward or inverse transform is computed. + Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated + @par + The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. + Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. + @par + The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. + @par + This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. +*/ + +arm_status arm_cfft_radix2_init_f32( + arm_cfft_radix2_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (float32_t *) twiddleCoef; + + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLen) + { + + case 4096U: + /* Initializations of structure parameters for 4096 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1U; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1U; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.000244140625; + break; + + case 2048U: + /* Initializations of structure parameters for 2048 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 2U; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 2U; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[1]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.00048828125; + break; + + case 1024U: + /* Initializations of structure parameters for 1024 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 4U; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 4U; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.0009765625f; + break; + + case 512U: + /* Initializations of structure parameters for 512 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 8U; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 8U; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[7]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.001953125; + break; + + case 256U: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16U; + S->bitRevFactor = 16U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + S->onebyfftLen = 0.00390625f; + break; + + case 128U: + /* Initializations of structure parameters for 128 point FFT */ + S->twidCoefModifier = 32U; + S->bitRevFactor = 32U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[31]; + S->onebyfftLen = 0.0078125; + break; + + case 64U: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64U; + S->bitRevFactor = 64U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + S->onebyfftLen = 0.015625f; + break; + + case 32U: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 128U; + S->bitRevFactor = 128U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[127]; + S->onebyfftLen = 0.03125; + break; + + case 16U: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256U; + S->bitRevFactor = 256U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + S->onebyfftLen = 0.0625f; + break; + + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + @} end of ComplexFFT group + */ diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix4_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix4_f32.c new file mode 100644 index 000000000..96291458e --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix4_f32.c @@ -0,0 +1,1200 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_radix4_f32.c + * Description: Radix-4 Decimation in Frequency CFFT & CIFFT Floating point processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +extern void arm_bitreversal_f32( + float32_t * pSrc, + uint16_t fftSize, + uint16_t bitRevFactor, + const uint16_t * pBitRevTab); + +void arm_radix4_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier); + +void arm_radix4_butterfly_inverse_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen); + + +/** + @ingroup groupTransforms + */ + +/** + @addtogroup ComplexFFT + @{ + */ + +/** + @brief Processing function for the floating-point Radix-4 CFFT/CIFFT. + @deprecated Do not use this function. It has been superseded by \ref arm_cfft_f32 and will be removed in the future. + @param[in] S points to an instance of the floating-point Radix-4 CFFT/CIFFT structure + @param[in,out] pSrc points to the complex data buffer of size 2*fftLen. Processing occurs in-place + @return none + */ + +void arm_cfft_radix4_f32( + const arm_cfft_radix4_instance_f32 * S, + float32_t * pSrc) +{ + if (S->ifftFlag == 1U) + { + /* Complex IFFT radix-4 */ + arm_radix4_butterfly_inverse_f32(pSrc, S->fftLen, S->pTwiddle, S->twidCoefModifier, S->onebyfftLen); + } + else + { + /* Complex FFT radix-4 */ + arm_radix4_butterfly_f32(pSrc, S->fftLen, S->pTwiddle, S->twidCoefModifier); + } + + if (S->bitReverseFlag == 1U) + { + /* Bit Reversal */ + arm_bitreversal_f32(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable); + } + +} + +/** + @} end of ComplexFFT group + */ + +/* ---------------------------------------------------------------------- + * Internal helper function used by the FFTs + * ---------------------------------------------------------------------- */ + +/** + brief Core function for the floating-point CFFT butterfly process. + param[in,out] pSrc points to the in-place buffer of floating-point data type + param[in] fftLen length of the FFT + param[in] pCoef points to the twiddle coefficient buffer + param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table + return none + */ + +void arm_radix4_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier) +{ + float32_t co1, co2, co3, si1, si2, si3; + uint32_t ia1, ia2, ia3; + uint32_t i0, i1, i2, i3; + uint32_t n1, n2, j, k; + +#if defined (ARM_MATH_LOOPUNROLL) + + float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn; + float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc, + Ybminusd; + float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out; + float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out; + float32_t *ptr1; + float32_t p0,p1,p2,p3,p4,p5; + float32_t a0,a1,a2,a3,a4,a5,a6,a7; + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2U; + i0 = 0U; + ia1 = 0U; + + j = n2; + + /* Calculation of first stage */ + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + xaIn = pSrc[(2U * i0)]; + yaIn = pSrc[(2U * i0) + 1U]; + + xbIn = pSrc[(2U * i1)]; + ybIn = pSrc[(2U * i1) + 1U]; + + xcIn = pSrc[(2U * i2)]; + ycIn = pSrc[(2U * i2) + 1U]; + + xdIn = pSrc[(2U * i3)]; + ydIn = pSrc[(2U * i3) + 1U]; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + co2 = pCoef[ia2 * 2U]; + si2 = pCoef[(ia2 * 2U) + 1U]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* xb - xd */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* yb - yd */ + Ybminusd = ybIn - ydIn; + + /* xa' = xa + xb + xc + xd */ + pSrc[(2U * i0)] = Xaplusc + Xbplusd; + /* ya' = ya + yb + yc + yd */ + pSrc[(2U * i0) + 1U] = Yaplusc + Ybplusd; + + /* (xa - xc) + (yb - yd) */ + Xb12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yb12C_out = (Yaminusc - Xbminusd); + /* (xa + xc) - (xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) - (yb - yd) */ + Xd12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yd12C_out = (Xbminusd + Yaminusc); + + co1 = pCoef[ia1 * 2U]; + si1 = pCoef[(ia1 * 2U) + 1U]; + + /* index calculation for the coefficients */ + ia3 = ia2 + ia1; + co3 = pCoef[ia3 * 2U]; + si3 = pCoef[(ia3 * 2U) + 1U]; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out += p0; + Yb12_out -= p1; + Xc12_out += p2; + Yc12_out -= p3; + Xd12_out += p4; + Yd12_out -= p5; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2U * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2U * i1) + 1U] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2U * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2U * i2) + 1U] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2U * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2U * i3) + 1U] = Yd12_out; + + /* Twiddle coefficients index modifier */ + ia1 += twidCoefModifier; + + /* Updating input index */ + i0++; + + } + while (--j); + + twidCoefModifier <<= 2U; + + /* Calculation of second stage to excluding last stage */ + for (k = fftLen >> 2U; k > 4U; k >>= 2U) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2U; + ia1 = 0U; + + /* Calculation of first stage */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[(ia1 * 2U)]; + si1 = pCoef[(ia1 * 2U) + 1U]; + co2 = pCoef[(ia2 * 2U)]; + si2 = pCoef[(ia2 * 2U) + 1U]; + co3 = pCoef[(ia3 * 2U)]; + si3 = pCoef[(ia3 * 2U) + 1U]; + + /* Twiddle coefficients index modifier */ + ia1 += twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + xaIn = pSrc[(2U * i0)]; + yaIn = pSrc[(2U * i0) + 1U]; + + xbIn = pSrc[(2U * i1)]; + ybIn = pSrc[(2U * i1) + 1U]; + + xcIn = pSrc[(2U * i2)]; + ycIn = pSrc[(2U * i2) + 1U]; + + xdIn = pSrc[(2U * i3)]; + ydIn = pSrc[(2U * i3) + 1U]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* (xb - xd) */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* (yb - yd) */ + Ybminusd = ybIn - ydIn; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xa - xc) + (yb - yd) */ + Xb12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) - (xb - xd) */ + Yb12C_out = (Yaminusc - Xbminusd); + /* xa + xc -(xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) - (yb - yd) */ + Xd12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yd12C_out = (Xbminusd + Yaminusc); + + pSrc[(2U * i0)] = Xaplusc + Xbplusd; + pSrc[(2U * i0) + 1U] = Yaplusc + Ybplusd; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out += p0; + Yb12_out -= p1; + Xc12_out += p2; + Yc12_out -= p3; + Xd12_out += p4; + Yd12_out -= p5; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2U * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2U * i1) + 1U] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2U * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2U * i2) + 1U] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2U * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2U * i3) + 1U] = Yd12_out; + + i0 += n1; + } while (i0 < fftLen); + j++; + } while (j <= (n2 - 1U)); + twidCoefModifier <<= 2U; + } + + j = fftLen >> 2; + ptr1 = &pSrc[0]; + + /* Calculations of last stage */ + do + { + xaIn = ptr1[0]; + yaIn = ptr1[1]; + xbIn = ptr1[2]; + ybIn = ptr1[3]; + xcIn = ptr1[4]; + ycIn = ptr1[5]; + xdIn = ptr1[6]; + ydIn = ptr1[7]; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + + /* ya + yc */ + Yaplusc = yaIn + ycIn; + + /* ya - yc */ + Yaminusc = yaIn - ycIn; + + /* xb + xd */ + Xbplusd = xbIn + xdIn; + + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xb-xd) */ + Xbminusd = xbIn - xdIn; + + /* (yb-yd) */ + Ybminusd = ybIn - ydIn; + + /* xa' = xa + xb + xc + xd */ + a0 = (Xaplusc + Xbplusd); + /* ya' = ya + yb + yc + yd */ + a1 = (Yaplusc + Ybplusd); + /* xc' = (xa-xb+xc-xd) */ + a2 = (Xaplusc - Xbplusd); + /* yc' = (ya-yb+yc-yd) */ + a3 = (Yaplusc - Ybplusd); + /* xb' = (xa+yb-xc-yd) */ + a4 = (Xaminusc + Ybminusd); + /* yb' = (ya-xb-yc+xd) */ + a5 = (Yaminusc - Xbminusd); + /* xd' = (xa-yb-xc+yd)) */ + a6 = (Xaminusc - Ybminusd); + /* yd' = (ya+xb-yc-xd) */ + a7 = (Xbminusd + Yaminusc); + + ptr1[0] = a0; + ptr1[1] = a1; + ptr1[2] = a2; + ptr1[3] = a3; + ptr1[4] = a4; + ptr1[5] = a5; + ptr1[6] = a6; + ptr1[7] = a7; + + /* increment pointer by 8 */ + ptr1 += 8U; + } while (--j); + +#else + + float32_t t1, t2, r1, r2, s1, s2; + + /* Initializations for the fft calculation */ + n2 = fftLen; + n1 = n2; + for (k = fftLen; k > 1U; k >>= 2U) + { + /* Initializations for the fft calculation */ + n1 = n2; + n2 >>= 2U; + ia1 = 0U; + + /* FFT Calculation */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2U]; + si1 = pCoef[(ia1 * 2U) + 1U]; + co2 = pCoef[ia2 * 2U]; + si2 = pCoef[(ia2 * 2U) + 1U]; + co3 = pCoef[ia3 * 2U]; + si3 = pCoef[(ia3 * 2U) + 1U]; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* xa + xc */ + r1 = pSrc[(2U * i0)] + pSrc[(2U * i2)]; + + /* xa - xc */ + r2 = pSrc[(2U * i0)] - pSrc[(2U * i2)]; + + /* ya + yc */ + s1 = pSrc[(2U * i0) + 1U] + pSrc[(2U * i2) + 1U]; + + /* ya - yc */ + s2 = pSrc[(2U * i0) + 1U] - pSrc[(2U * i2) + 1U]; + + /* xb + xd */ + t1 = pSrc[2U * i1] + pSrc[2U * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2U * i0] = r1 + t1; + + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSrc[(2U * i1) + 1U] + pSrc[(2U * i3) + 1U]; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2U * i0) + 1U] = s1 + t2; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSrc[(2U * i1) + 1U] - pSrc[(2U * i3) + 1U]; + + /* (xb - xd) */ + t2 = pSrc[2U * i1] - pSrc[2U * i3]; + + /* xc' = (xa-xb+xc-xd)co2 + (ya-yb+yc-yd)(si2) */ + pSrc[2U * i1] = (r1 * co2) + (s1 * si2); + + /* yc' = (ya-yb+yc-yd)co2 - (xa-xb+xc-xd)(si2) */ + pSrc[(2U * i1) + 1U] = (s1 * co2) - (r1 * si2); + + /* (xa - xc) + (yb - yd) */ + r1 = r2 + t1; + + /* (xa - xc) - (yb - yd) */ + r2 = r2 - t1; + + /* (ya - yc) - (xb - xd) */ + s1 = s2 - t2; + + /* (ya - yc) + (xb - xd) */ + s2 = s2 + t2; + + /* xb' = (xa+yb-xc-yd)co1 + (ya-xb-yc+xd)(si1) */ + pSrc[2U * i2] = (r1 * co1) + (s1 * si1); + + /* yb' = (ya-xb-yc+xd)co1 - (xa+yb-xc-yd)(si1) */ + pSrc[(2U * i2) + 1U] = (s1 * co1) - (r1 * si1); + + /* xd' = (xa-yb-xc+yd)co3 + (ya+xb-yc-xd)(si3) */ + pSrc[2U * i3] = (r2 * co3) + (s2 * si3); + + /* yd' = (ya+xb-yc-xd)co3 - (xa-yb-xc+yd)(si3) */ + pSrc[(2U * i3) + 1U] = (s2 * co3) - (r2 * si3); + + i0 += n1; + } while ( i0 < fftLen); + j++; + } while (j <= (n2 - 1U)); + twidCoefModifier <<= 2U; + } + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + +} + +/** + brief Core function for the floating-point CIFFT butterfly process. + param[in,out] pSrc points to the in-place buffer of floating-point data type + param[in] fftLen length of the FFT + param[in] pCoef points to twiddle coefficient buffer + param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + param[in] onebyfftLen value of 1/fftLen + return none + */ + +void arm_radix4_butterfly_inverse_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen) +{ + float32_t co1, co2, co3, si1, si2, si3; + uint32_t ia1, ia2, ia3; + uint32_t i0, i1, i2, i3; + uint32_t n1, n2, j, k; + +#if defined (ARM_MATH_LOOPUNROLL) + + float32_t xaIn, yaIn, xbIn, ybIn, xcIn, ycIn, xdIn, ydIn; + float32_t Xaplusc, Xbplusd, Yaplusc, Ybplusd, Xaminusc, Xbminusd, Yaminusc, + Ybminusd; + float32_t Xb12C_out, Yb12C_out, Xc12C_out, Yc12C_out, Xd12C_out, Yd12C_out; + float32_t Xb12_out, Yb12_out, Xc12_out, Yc12_out, Xd12_out, Yd12_out; + float32_t *ptr1; + float32_t p0,p1,p2,p3,p4,p5,p6,p7; + float32_t a0,a1,a2,a3,a4,a5,a6,a7; + + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* n2 = fftLen/4 */ + n2 >>= 2U; + i0 = 0U; + ia1 = 0U; + + j = n2; + + /* Calculation of first stage */ + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Butterfly implementation */ + xaIn = pSrc[(2U * i0)]; + yaIn = pSrc[(2U * i0) + 1U]; + + xcIn = pSrc[(2U * i2)]; + ycIn = pSrc[(2U * i2) + 1U]; + + xbIn = pSrc[(2U * i1)]; + ybIn = pSrc[(2U * i1) + 1U]; + + xdIn = pSrc[(2U * i3)]; + ydIn = pSrc[(2U * i3) + 1U]; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + co2 = pCoef[ia2 * 2U]; + si2 = pCoef[(ia2 * 2U) + 1U]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* xb - xd */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* yb - yd */ + Ybminusd = ybIn - ydIn; + + /* xa' = xa + xb + xc + xd */ + pSrc[(2U * i0)] = Xaplusc + Xbplusd; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2U * i0) + 1U] = Yaplusc + Ybplusd; + + /* (xa - xc) - (yb - yd) */ + Xb12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yb12C_out = (Yaminusc + Xbminusd); + /* (xa + xc) - (xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) + (yb - yd) */ + Xd12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) - (xb - xd) */ + Yd12C_out = (Yaminusc - Xbminusd); + + co1 = pCoef[ia1 * 2U]; + si1 = pCoef[(ia1 * 2U) + 1U]; + + /* index calculation for the coefficients */ + ia3 = ia2 + ia1; + co3 = pCoef[ia3 * 2U]; + si3 = pCoef[(ia3 * 2U) + 1U]; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out -= p0; + Yb12_out += p1; + Xc12_out -= p2; + Yc12_out += p3; + Xd12_out -= p4; + Yd12_out += p5; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2U * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2U * i1) + 1U] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2U * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2U * i2) + 1U] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2U * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2U * i3) + 1U] = Yd12_out; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + /* Updating input index */ + i0 = i0 + 1U; + + } while (--j); + + twidCoefModifier <<= 2U; + + /* Calculation of second stage to excluding last stage */ + for (k = fftLen >> 2U; k > 4U; k >>= 2U) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2U; + ia1 = 0U; + + /* Calculation of first stage */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2U]; + si1 = pCoef[(ia1 * 2U) + 1U]; + co2 = pCoef[ia2 * 2U]; + si2 = pCoef[(ia2 * 2U) + 1U]; + co3 = pCoef[ia3 * 2U]; + si3 = pCoef[(ia3 * 2U) + 1U]; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + xaIn = pSrc[(2U * i0)]; + yaIn = pSrc[(2U * i0) + 1U]; + + xbIn = pSrc[(2U * i1)]; + ybIn = pSrc[(2U * i1) + 1U]; + + xcIn = pSrc[(2U * i2)]; + ycIn = pSrc[(2U * i2) + 1U]; + + xdIn = pSrc[(2U * i3)]; + ydIn = pSrc[(2U * i3) + 1U]; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + /* (xb - xd) */ + Xbminusd = xbIn - xdIn; + /* ya - yc */ + Yaminusc = yaIn - ycIn; + /* (yb - yd) */ + Ybminusd = ybIn - ydIn; + + /* xa + xc */ + Xaplusc = xaIn + xcIn; + /* xb + xd */ + Xbplusd = xbIn + xdIn; + /* ya + yc */ + Yaplusc = yaIn + ycIn; + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xa - xc) - (yb - yd) */ + Xb12C_out = (Xaminusc - Ybminusd); + /* (ya - yc) + (xb - xd) */ + Yb12C_out = (Yaminusc + Xbminusd); + /* xa + xc -(xb + xd) */ + Xc12C_out = (Xaplusc - Xbplusd); + /* (ya + yc) - (yb + yd) */ + Yc12C_out = (Yaplusc - Ybplusd); + /* (xa - xc) + (yb - yd) */ + Xd12C_out = (Xaminusc + Ybminusd); + /* (ya - yc) - (xb - xd) */ + Yd12C_out = (Yaminusc - Xbminusd); + + pSrc[(2U * i0)] = Xaplusc + Xbplusd; + pSrc[(2U * i0) + 1U] = Yaplusc + Ybplusd; + + Xb12_out = Xb12C_out * co1; + Yb12_out = Yb12C_out * co1; + Xc12_out = Xc12C_out * co2; + Yc12_out = Yc12C_out * co2; + Xd12_out = Xd12C_out * co3; + Yd12_out = Yd12C_out * co3; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + //Xb12_out -= Yb12C_out * si1; + p0 = Yb12C_out * si1; + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + //Yb12_out += Xb12C_out * si1; + p1 = Xb12C_out * si1; + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + //Xc12_out -= Yc12C_out * si2; + p2 = Yc12C_out * si2; + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + //Yc12_out += Xc12C_out * si2; + p3 = Xc12C_out * si2; + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + //Xd12_out -= Yd12C_out * si3; + p4 = Yd12C_out * si3; + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + //Yd12_out += Xd12C_out * si3; + p5 = Xd12C_out * si3; + + Xb12_out -= p0; + Yb12_out += p1; + Xc12_out -= p2; + Yc12_out += p3; + Xd12_out -= p4; + Yd12_out += p5; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2U * i1] = Xc12_out; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2U * i1) + 1U] = Yc12_out; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2U * i2] = Xb12_out; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2U * i2) + 1U] = Yb12_out; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2U * i3] = Xd12_out; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2U * i3) + 1U] = Yd12_out; + + i0 += n1; + } while (i0 < fftLen); + j++; + } while (j <= (n2 - 1U)); + twidCoefModifier <<= 2U; + } + /* Initializations of last stage */ + + j = fftLen >> 2; + ptr1 = &pSrc[0]; + + /* Calculations of last stage */ + do + { + xaIn = ptr1[0]; + yaIn = ptr1[1]; + xbIn = ptr1[2]; + ybIn = ptr1[3]; + xcIn = ptr1[4]; + ycIn = ptr1[5]; + xdIn = ptr1[6]; + ydIn = ptr1[7]; + + /* Butterfly implementation */ + /* xa + xc */ + Xaplusc = xaIn + xcIn; + + /* xa - xc */ + Xaminusc = xaIn - xcIn; + + /* ya + yc */ + Yaplusc = yaIn + ycIn; + + /* ya - yc */ + Yaminusc = yaIn - ycIn; + + /* xb + xd */ + Xbplusd = xbIn + xdIn; + + /* yb + yd */ + Ybplusd = ybIn + ydIn; + + /* (xb-xd) */ + Xbminusd = xbIn - xdIn; + + /* (yb-yd) */ + Ybminusd = ybIn - ydIn; + + /* xa' = (xa+xb+xc+xd) * onebyfftLen */ + a0 = (Xaplusc + Xbplusd); + /* ya' = (ya+yb+yc+yd) * onebyfftLen */ + a1 = (Yaplusc + Ybplusd); + /* xc' = (xa-xb+xc-xd) * onebyfftLen */ + a2 = (Xaplusc - Xbplusd); + /* yc' = (ya-yb+yc-yd) * onebyfftLen */ + a3 = (Yaplusc - Ybplusd); + /* xb' = (xa-yb-xc+yd) * onebyfftLen */ + a4 = (Xaminusc - Ybminusd); + /* yb' = (ya+xb-yc-xd) * onebyfftLen */ + a5 = (Yaminusc + Xbminusd); + /* xd' = (xa-yb-xc+yd) * onebyfftLen */ + a6 = (Xaminusc + Ybminusd); + /* yd' = (ya-xb-yc+xd) * onebyfftLen */ + a7 = (Yaminusc - Xbminusd); + + p0 = a0 * onebyfftLen; + p1 = a1 * onebyfftLen; + p2 = a2 * onebyfftLen; + p3 = a3 * onebyfftLen; + p4 = a4 * onebyfftLen; + p5 = a5 * onebyfftLen; + p6 = a6 * onebyfftLen; + p7 = a7 * onebyfftLen; + + /* xa' = (xa+xb+xc+xd) * onebyfftLen */ + ptr1[0] = p0; + /* ya' = (ya+yb+yc+yd) * onebyfftLen */ + ptr1[1] = p1; + /* xc' = (xa-xb+xc-xd) * onebyfftLen */ + ptr1[2] = p2; + /* yc' = (ya-yb+yc-yd) * onebyfftLen */ + ptr1[3] = p3; + /* xb' = (xa-yb-xc+yd) * onebyfftLen */ + ptr1[4] = p4; + /* yb' = (ya+xb-yc-xd) * onebyfftLen */ + ptr1[5] = p5; + /* xd' = (xa-yb-xc+yd) * onebyfftLen */ + ptr1[6] = p6; + /* yd' = (ya-xb-yc+xd) * onebyfftLen */ + ptr1[7] = p7; + + /* increment source pointer by 8 for next calculations */ + ptr1 = ptr1 + 8U; + + } while (--j); + +#else + + float32_t t1, t2, r1, r2, s1, s2; + + /* Initializations for the first stage */ + n2 = fftLen; + n1 = n2; + + /* Calculation of first stage */ + for (k = fftLen; k > 4U; k >>= 2U) + { + /* Initializations for the first stage */ + n1 = n2; + n2 >>= 2U; + ia1 = 0U; + + /* Calculation of first stage */ + j = 0; + do + { + /* index calculation for the coefficients */ + ia2 = ia1 + ia1; + ia3 = ia2 + ia1; + co1 = pCoef[ia1 * 2U]; + si1 = pCoef[(ia1 * 2U) + 1U]; + co2 = pCoef[ia2 * 2U]; + si2 = pCoef[(ia2 * 2U) + 1U]; + co3 = pCoef[ia3 * 2U]; + si3 = pCoef[(ia3 * 2U) + 1U]; + + /* Twiddle coefficients index modifier */ + ia1 = ia1 + twidCoefModifier; + + i0 = j; + do + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* xa + xc */ + r1 = pSrc[(2U * i0)] + pSrc[(2U * i2)]; + + /* xa - xc */ + r2 = pSrc[(2U * i0)] - pSrc[(2U * i2)]; + + /* ya + yc */ + s1 = pSrc[(2U * i0) + 1U] + pSrc[(2U * i2) + 1U]; + + /* ya - yc */ + s2 = pSrc[(2U * i0) + 1U] - pSrc[(2U * i2) + 1U]; + + /* xb + xd */ + t1 = pSrc[2U * i1] + pSrc[2U * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2U * i0] = r1 + t1; + + /* xa + xc -(xb + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSrc[(2U * i1) + 1U] + pSrc[(2U * i3) + 1U]; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2U * i0) + 1U] = s1 + t2; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb - yd) */ + t1 = pSrc[(2U * i1) + 1U] - pSrc[(2U * i3) + 1U]; + + /* (xb - xd) */ + t2 = pSrc[2U * i1] - pSrc[2U * i3]; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2U * i1] = (r1 * co2) - (s1 * si2); + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2U * i1) + 1U] = (s1 * co2) + (r1 * si2); + + /* (xa - xc) - (yb - yd) */ + r1 = r2 - t1; + + /* (xa - xc) + (yb - yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb - xd) */ + s1 = s2 + t2; + + /* (ya - yc) - (xb - xd) */ + s2 = s2 - t2; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2U * i2] = (r1 * co1) - (s1 * si1); + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2U * i2) + 1U] = (s1 * co1) + (r1 * si1); + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2U * i3] = (r2 * co3) - (s2 * si3); + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2U * i3) + 1U] = (s2 * co3) + (r2 * si3); + + i0 += n1; + } while ( i0 < fftLen); + j++; + } while (j <= (n2 - 1U)); + twidCoefModifier <<= 2U; + } + /* Initializations of last stage */ + n1 = n2; + n2 >>= 2U; + + /* Calculations of last stage */ + for (i0 = 0U; i0 <= (fftLen - n1); i0 += n1) + { + /* index calculation for the input as, */ + /* pSrc[i0 + 0], pSrc[i0 + fftLen/4], pSrc[i0 + fftLen/2], pSrc[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + + /* Butterfly implementation */ + /* xa + xc */ + r1 = pSrc[2U * i0] + pSrc[2U * i2]; + + /* xa - xc */ + r2 = pSrc[2U * i0] - pSrc[2U * i2]; + + /* ya + yc */ + s1 = pSrc[(2U * i0) + 1U] + pSrc[(2U * i2) + 1U]; + + /* ya - yc */ + s2 = pSrc[(2U * i0) + 1U] - pSrc[(2U * i2) + 1U]; + + /* xc + xd */ + t1 = pSrc[2U * i1] + pSrc[2U * i3]; + + /* xa' = xa + xb + xc + xd */ + pSrc[2U * i0] = (r1 + t1) * onebyfftLen; + + /* (xa + xb) - (xc + xd) */ + r1 = r1 - t1; + + /* yb + yd */ + t2 = pSrc[(2U * i1) + 1U] + pSrc[(2U * i3) + 1U]; + + /* ya' = ya + yb + yc + yd */ + pSrc[(2U * i0) + 1U] = (s1 + t2) * onebyfftLen; + + /* (ya + yc) - (yb + yd) */ + s1 = s1 - t2; + + /* (yb-yd) */ + t1 = pSrc[(2U * i1) + 1U] - pSrc[(2U * i3) + 1U]; + + /* (xb-xd) */ + t2 = pSrc[2U * i1] - pSrc[2U * i3]; + + /* xc' = (xa-xb+xc-xd)co2 - (ya-yb+yc-yd)(si2) */ + pSrc[2U * i1] = r1 * onebyfftLen; + + /* yc' = (ya-yb+yc-yd)co2 + (xa-xb+xc-xd)(si2) */ + pSrc[(2U * i1) + 1U] = s1 * onebyfftLen; + + /* (xa - xc) - (yb-yd) */ + r1 = r2 - t1; + + /* (xa - xc) + (yb-yd) */ + r2 = r2 + t1; + + /* (ya - yc) + (xb-xd) */ + s1 = s2 + t2; + + /* (ya - yc) - (xb-xd) */ + s2 = s2 - t2; + + /* xb' = (xa+yb-xc-yd)co1 - (ya-xb-yc+xd)(si1) */ + pSrc[2U * i2] = r1 * onebyfftLen; + + /* yb' = (ya-xb-yc+xd)co1 + (xa+yb-xc-yd)(si1) */ + pSrc[(2U * i2) + 1U] = s1 * onebyfftLen; + + /* xd' = (xa-yb-xc+yd)co3 - (ya+xb-yc-xd)(si3) */ + pSrc[2U * i3] = r2 * onebyfftLen; + + /* yd' = (ya+xb-yc-xd)co3 + (xa-yb-xc+yd)(si3) */ + pSrc[(2U * i3) + 1U] = s2 * onebyfftLen; + } + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ +} + + diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix4_init_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix4_init_f32.c new file mode 100644 index 000000000..930c2c1e1 --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix4_init_f32.c @@ -0,0 +1,156 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_radix4_init_f32.c + * Description: Radix-4 Decimation in Frequency Floating-point CFFT & CIFFT Initialization function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @ingroup groupTransforms + */ + +/** + @addtogroup ComplexFFT + @{ + */ + +/** + @brief Initialization function for the floating-point CFFT/CIFFT. + @deprecated Do not use this function. It has been superceded by \ref arm_cfft_f32 and will be removed in the future. + @param[in,out] S points to an instance of the floating-point CFFT/CIFFT structure + @param[in] fftLen length of the FFT + @param[in] ifftFlag flag that selects transform direction + - value = 0: forward transform + - value = 1: inverse transform + @param[in] bitReverseFlag flag that enables / disables bit reversal of output + - value = 0: disables bit reversal of output + - value = 1: enables bit reversal of output + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length + + @par Details + The parameter ifftFlag controls whether a forward or inverse transform is computed. + Set(=1) ifftFlag for calculation of CIFFT otherwise CFFT is calculated + @par + The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. + Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. + @par + The parameter fftLen Specifies length of CFFT/CIFFT process. Supported FFT Lengths are 16, 64, 256, 1024. + @par + This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. + */ + +arm_status arm_cfft_radix4_init_f32( + arm_cfft_radix4_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = (float32_t *) twiddleCoef; + + /* Initialise the Flag for selection of CFFT or CIFFT */ + S->ifftFlag = ifftFlag; + + /* Initialise the Flag for calculation Bit reversal or not */ + S->bitReverseFlag = bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLen) + { + + case 4096U: + /* Initializations of structure parameters for 4096 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 1U; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 1U; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) armBitRevTable; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.000244140625; + break; + + case 1024U: + /* Initializations of structure parameters for 1024 point FFT */ + + /* Initialise the twiddle coef modifier value */ + S->twidCoefModifier = 4U; + /* Initialise the bit reversal table modifier */ + S->bitRevFactor = 4U; + /* Initialise the bit reversal table pointer */ + S->pBitRevTable = (uint16_t *) & armBitRevTable[3]; + /* Initialise the 1/fftLen Value */ + S->onebyfftLen = 0.0009765625f; + break; + + + case 256U: + /* Initializations of structure parameters for 256 point FFT */ + S->twidCoefModifier = 16U; + S->bitRevFactor = 16U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[15]; + S->onebyfftLen = 0.00390625f; + break; + + case 64U: + /* Initializations of structure parameters for 64 point FFT */ + S->twidCoefModifier = 64U; + S->bitRevFactor = 64U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[63]; + S->onebyfftLen = 0.015625f; + break; + + case 16U: + /* Initializations of structure parameters for 16 point FFT */ + S->twidCoefModifier = 256U; + S->bitRevFactor = 256U; + S->pBitRevTable = (uint16_t *) & armBitRevTable[255]; + S->onebyfftLen = 0.0625f; + break; + + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + return (status); +} + +/** + @} end of ComplexFFT group + */ diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix8_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix8_f32.c new file mode 100644 index 000000000..50048f67d --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_cfft_radix8_f32.c @@ -0,0 +1,285 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_radix8_f32.c + * Description: Radix-8 Decimation in Frequency CFFT & CIFFT Floating point processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + + +/* ---------------------------------------------------------------------- + * Internal helper function used by the FFTs + * -------------------------------------------------------------------- */ + +/** + brief Core function for the floating-point CFFT butterfly process. + param[in,out] pSrc points to the in-place buffer of floating-point data type. + param[in] fftLen length of the FFT. + param[in] pCoef points to the twiddle coefficient buffer. + param[in] twidCoefModifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. + return none +*/ + +void arm_radix8_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier) +{ + uint32_t ia1, ia2, ia3, ia4, ia5, ia6, ia7; + uint32_t i1, i2, i3, i4, i5, i6, i7, i8; + uint32_t id; + uint32_t n1, n2, j; + + float32_t r1, r2, r3, r4, r5, r6, r7, r8; + float32_t t1, t2; + float32_t s1, s2, s3, s4, s5, s6, s7, s8; + float32_t p1, p2, p3, p4; + float32_t co2, co3, co4, co5, co6, co7, co8; + float32_t si2, si3, si4, si5, si6, si7, si8; + const float32_t C81 = 0.70710678118f; + + n2 = fftLen; + + do + { + n1 = n2; + n2 = n2 >> 3; + i1 = 0; + + do + { + i2 = i1 + n2; + i3 = i2 + n2; + i4 = i3 + n2; + i5 = i4 + n2; + i6 = i5 + n2; + i7 = i6 + n2; + i8 = i7 + n2; + r1 = pSrc[2 * i1] + pSrc[2 * i5]; + r5 = pSrc[2 * i1] - pSrc[2 * i5]; + r2 = pSrc[2 * i2] + pSrc[2 * i6]; + r6 = pSrc[2 * i2] - pSrc[2 * i6]; + r3 = pSrc[2 * i3] + pSrc[2 * i7]; + r7 = pSrc[2 * i3] - pSrc[2 * i7]; + r4 = pSrc[2 * i4] + pSrc[2 * i8]; + r8 = pSrc[2 * i4] - pSrc[2 * i8]; + t1 = r1 - r3; + r1 = r1 + r3; + r3 = r2 - r4; + r2 = r2 + r4; + pSrc[2 * i1] = r1 + r2; + pSrc[2 * i5] = r1 - r2; + r1 = pSrc[2 * i1 + 1] + pSrc[2 * i5 + 1]; + s5 = pSrc[2 * i1 + 1] - pSrc[2 * i5 + 1]; + r2 = pSrc[2 * i2 + 1] + pSrc[2 * i6 + 1]; + s6 = pSrc[2 * i2 + 1] - pSrc[2 * i6 + 1]; + s3 = pSrc[2 * i3 + 1] + pSrc[2 * i7 + 1]; + s7 = pSrc[2 * i3 + 1] - pSrc[2 * i7 + 1]; + r4 = pSrc[2 * i4 + 1] + pSrc[2 * i8 + 1]; + s8 = pSrc[2 * i4 + 1] - pSrc[2 * i8 + 1]; + t2 = r1 - s3; + r1 = r1 + s3; + s3 = r2 - r4; + r2 = r2 + r4; + pSrc[2 * i1 + 1] = r1 + r2; + pSrc[2 * i5 + 1] = r1 - r2; + pSrc[2 * i3] = t1 + s3; + pSrc[2 * i7] = t1 - s3; + pSrc[2 * i3 + 1] = t2 - r3; + pSrc[2 * i7 + 1] = t2 + r3; + r1 = (r6 - r8) * C81; + r6 = (r6 + r8) * C81; + r2 = (s6 - s8) * C81; + s6 = (s6 + s8) * C81; + t1 = r5 - r1; + r5 = r5 + r1; + r8 = r7 - r6; + r7 = r7 + r6; + t2 = s5 - r2; + s5 = s5 + r2; + s8 = s7 - s6; + s7 = s7 + s6; + pSrc[2 * i2] = r5 + s7; + pSrc[2 * i8] = r5 - s7; + pSrc[2 * i6] = t1 + s8; + pSrc[2 * i4] = t1 - s8; + pSrc[2 * i2 + 1] = s5 - r7; + pSrc[2 * i8 + 1] = s5 + r7; + pSrc[2 * i6 + 1] = t2 - r8; + pSrc[2 * i4 + 1] = t2 + r8; + + i1 += n1; + } while (i1 < fftLen); + + if (n2 < 8) + break; + + ia1 = 0; + j = 1; + + do + { + /* index calculation for the coefficients */ + id = ia1 + twidCoefModifier; + ia1 = id; + ia2 = ia1 + id; + ia3 = ia2 + id; + ia4 = ia3 + id; + ia5 = ia4 + id; + ia6 = ia5 + id; + ia7 = ia6 + id; + + co2 = pCoef[2 * ia1]; + co3 = pCoef[2 * ia2]; + co4 = pCoef[2 * ia3]; + co5 = pCoef[2 * ia4]; + co6 = pCoef[2 * ia5]; + co7 = pCoef[2 * ia6]; + co8 = pCoef[2 * ia7]; + si2 = pCoef[2 * ia1 + 1]; + si3 = pCoef[2 * ia2 + 1]; + si4 = pCoef[2 * ia3 + 1]; + si5 = pCoef[2 * ia4 + 1]; + si6 = pCoef[2 * ia5 + 1]; + si7 = pCoef[2 * ia6 + 1]; + si8 = pCoef[2 * ia7 + 1]; + + i1 = j; + + do + { + /* index calculation for the input */ + i2 = i1 + n2; + i3 = i2 + n2; + i4 = i3 + n2; + i5 = i4 + n2; + i6 = i5 + n2; + i7 = i6 + n2; + i8 = i7 + n2; + r1 = pSrc[2 * i1] + pSrc[2 * i5]; + r5 = pSrc[2 * i1] - pSrc[2 * i5]; + r2 = pSrc[2 * i2] + pSrc[2 * i6]; + r6 = pSrc[2 * i2] - pSrc[2 * i6]; + r3 = pSrc[2 * i3] + pSrc[2 * i7]; + r7 = pSrc[2 * i3] - pSrc[2 * i7]; + r4 = pSrc[2 * i4] + pSrc[2 * i8]; + r8 = pSrc[2 * i4] - pSrc[2 * i8]; + t1 = r1 - r3; + r1 = r1 + r3; + r3 = r2 - r4; + r2 = r2 + r4; + pSrc[2 * i1] = r1 + r2; + r2 = r1 - r2; + s1 = pSrc[2 * i1 + 1] + pSrc[2 * i5 + 1]; + s5 = pSrc[2 * i1 + 1] - pSrc[2 * i5 + 1]; + s2 = pSrc[2 * i2 + 1] + pSrc[2 * i6 + 1]; + s6 = pSrc[2 * i2 + 1] - pSrc[2 * i6 + 1]; + s3 = pSrc[2 * i3 + 1] + pSrc[2 * i7 + 1]; + s7 = pSrc[2 * i3 + 1] - pSrc[2 * i7 + 1]; + s4 = pSrc[2 * i4 + 1] + pSrc[2 * i8 + 1]; + s8 = pSrc[2 * i4 + 1] - pSrc[2 * i8 + 1]; + t2 = s1 - s3; + s1 = s1 + s3; + s3 = s2 - s4; + s2 = s2 + s4; + r1 = t1 + s3; + t1 = t1 - s3; + pSrc[2 * i1 + 1] = s1 + s2; + s2 = s1 - s2; + s1 = t2 - r3; + t2 = t2 + r3; + p1 = co5 * r2; + p2 = si5 * s2; + p3 = co5 * s2; + p4 = si5 * r2; + pSrc[2 * i5] = p1 + p2; + pSrc[2 * i5 + 1] = p3 - p4; + p1 = co3 * r1; + p2 = si3 * s1; + p3 = co3 * s1; + p4 = si3 * r1; + pSrc[2 * i3] = p1 + p2; + pSrc[2 * i3 + 1] = p3 - p4; + p1 = co7 * t1; + p2 = si7 * t2; + p3 = co7 * t2; + p4 = si7 * t1; + pSrc[2 * i7] = p1 + p2; + pSrc[2 * i7 + 1] = p3 - p4; + r1 = (r6 - r8) * C81; + r6 = (r6 + r8) * C81; + s1 = (s6 - s8) * C81; + s6 = (s6 + s8) * C81; + t1 = r5 - r1; + r5 = r5 + r1; + r8 = r7 - r6; + r7 = r7 + r6; + t2 = s5 - s1; + s5 = s5 + s1; + s8 = s7 - s6; + s7 = s7 + s6; + r1 = r5 + s7; + r5 = r5 - s7; + r6 = t1 + s8; + t1 = t1 - s8; + s1 = s5 - r7; + s5 = s5 + r7; + s6 = t2 - r8; + t2 = t2 + r8; + p1 = co2 * r1; + p2 = si2 * s1; + p3 = co2 * s1; + p4 = si2 * r1; + pSrc[2 * i2] = p1 + p2; + pSrc[2 * i2 + 1] = p3 - p4; + p1 = co8 * r5; + p2 = si8 * s5; + p3 = co8 * s5; + p4 = si8 * r5; + pSrc[2 * i8] = p1 + p2; + pSrc[2 * i8 + 1] = p3 - p4; + p1 = co6 * r6; + p2 = si6 * s6; + p3 = co6 * s6; + p4 = si6 * r6; + pSrc[2 * i6] = p1 + p2; + pSrc[2 * i6 + 1] = p3 - p4; + p1 = co4 * t1; + p2 = si4 * t2; + p3 = co4 * t2; + p4 = si4 * t1; + pSrc[2 * i4] = p1 + p2; + pSrc[2 * i4 + 1] = p3 - p4; + + i1 += n1; + } while (i1 < fftLen); + + j++; + } while (j < n2); + + twidCoefModifier <<= 3; + } while (n2 > 7); +} diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_dct4_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_dct4_f32.c new file mode 100644 index 000000000..87455dc0f --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_dct4_f32.c @@ -0,0 +1,448 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_dct4_f32.c + * Description: Processing function of DCT4 & IDCT4 F32 + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/** + @ingroup groupTransforms + */ + +/** + @defgroup DCT4_IDCT4 DCT Type IV Functions + + Representation of signals by minimum number of values is important for storage and transmission. + The possibility of large discontinuity between the beginning and end of a period of a signal + in DFT can be avoided by extending the signal so that it is even-symmetric. + Discrete Cosine Transform (DCT) is constructed such that its energy is heavily concentrated in the lower part of the + spectrum and is very widely used in signal and image coding applications. + The family of DCTs (DCT type- 1,2,3,4) is the outcome of different combinations of homogeneous boundary conditions. + DCT has an excellent energy-packing capability, hence has many applications and in data compression in particular. + + DCT is essentially the Discrete Fourier Transform(DFT) of an even-extended real signal. + Reordering of the input data makes the computation of DCT just a problem of + computing the DFT of a real signal with a few additional operations. + This approach provides regular, simple, and very efficient DCT algorithms for practical hardware and software implementations. + + DCT type-II can be implemented using Fast fourier transform (FFT) internally, as the transform is applied on real values, Real FFT can be used. + DCT4 is implemented using DCT2 as their implementations are similar except with some added pre-processing and post-processing. + DCT2 implementation can be described in the following steps: + - Re-ordering input + - Calculating Real FFT + - Multiplication of weights and Real FFT output and getting real part from the product. + + This process is explained by the block diagram below: + \image html DCT4.gif "Discrete Cosine Transform - type-IV" + + @par Algorithm + The N-point type-IV DCT is defined as a real, linear transformation by the formula: + \image html DCT4Equation.gif + where k = 0, 1, 2, ..., N-1 + @par + Its inverse is defined as follows: + \image html IDCT4Equation.gif + where n = 0, 1, 2, ..., N-1 + @par + The DCT4 matrices become involutory (i.e. they are self-inverse) by multiplying with an overall scale factor of sqrt(2/N). + The symmetry of the transform matrix indicates that the fast algorithms for the forward + and inverse transform computation are identical. + Note that the implementation of Inverse DCT4 and DCT4 is same, hence same process function can be used for both. + + @par Lengths supported by the transform: + As DCT4 internally uses Real FFT, it supports all the lengths 128, 512, 2048 and 8192. + The library provides separate functions for Q15, Q31, and floating-point data types. + + @par Instance Structure + The instances for Real FFT and FFT, cosine values table and twiddle factor table are stored in an instance data structure. + A separate instance structure must be defined for each transform. + There are separate instance structure declarations for each of the 3 supported data types. + + @par Initialization Functions + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Initializes Real FFT as its process function is used internally in DCT4, by calling \ref arm_rfft_init_f32(). + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure cannot be placed into a const data section. + To place an instance structure into a const data section, the instance structure must be manually initialized. + Manually initialize the instance structure as follows: +
+      arm_dct4_instance_f32 S = {N, Nby2, normalize, pTwiddle, pCosFactor, pRfft, pCfft};
+      arm_dct4_instance_q31 S = {N, Nby2, normalize, pTwiddle, pCosFactor, pRfft, pCfft};
+      arm_dct4_instance_q15 S = {N, Nby2, normalize, pTwiddle, pCosFactor, pRfft, pCfft};
+  
+ where \c N is the length of the DCT4; \c Nby2 is half of the length of the DCT4; + \c normalize is normalizing factor used and is equal to sqrt(2/N); + \c pTwiddle points to the twiddle factor table; + \c pCosFactor points to the cosFactor table; + \c pRfft points to the real FFT instance; + \c pCfft points to the complex FFT instance; + The CFFT and RFFT structures also needs to be initialized, refer to arm_cfft_radix4_f32() + and arm_rfft_f32() respectively for details regarding static initialization. + + @par Fixed-Point Behavior + Care must be taken when using the fixed-point versions of the DCT4 transform functions. + In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. + Refer to the function specific documentation below for usage guidelines. + */ + + /** + @addtogroup DCT4_IDCT4 + @{ + */ + +/** + @brief Processing function for the floating-point DCT4/IDCT4. + @param[in] S points to an instance of the floating-point DCT4/IDCT4 structure + @param[in] pState points to state buffer + @param[in,out] pInlineBuffer points to the in-place input and output buffer + @return none + */ + +void arm_dct4_f32( + const arm_dct4_instance_f32 * S, + float32_t * pState, + float32_t * pInlineBuffer) +{ + const float32_t *weights = S->pTwiddle; /* Pointer to the Weights table */ + const float32_t *cosFact = S->pCosFactor; /* Pointer to the cos factors table */ + float32_t *pS1, *pS2, *pbuff; /* Temporary pointers for input buffer and pState buffer */ + float32_t in; /* Temporary variable */ + uint32_t i; /* Loop counter */ + + + /* DCT4 computation involves DCT2 (which is calculated using RFFT) + * along with some pre-processing and post-processing. + * Computational procedure is explained as follows: + * (a) Pre-processing involves multiplying input with cos factor, + * r(n) = 2 * u(n) * cos(pi*(2*n+1)/(4*n)) + * where, + * r(n) -- output of preprocessing + * u(n) -- input to preprocessing(actual Source buffer) + * (b) Calculation of DCT2 using FFT is divided into three steps: + * Step1: Re-ordering of even and odd elements of input. + * Step2: Calculating FFT of the re-ordered input. + * Step3: Taking the real part of the product of FFT output and weights. + * (c) Post-processing - DCT4 can be obtained from DCT2 output using the following equation: + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * where, + * Y4 -- DCT4 output, Y2 -- DCT2 output + * (d) Multiplying the output with the normalizing factor sqrt(2/N). + */ + + /*-------- Pre-processing ------------*/ + /* Multiplying input with cos factor i.e. r(n) = 2 * x(n) * cos(pi*(2*n+1)/(4*n)) */ + arm_scale_f32(pInlineBuffer, 2.0f, pInlineBuffer, S->N); + arm_mult_f32(pInlineBuffer, cosFact, pInlineBuffer, S->N); + + /* ---------------------------------------------------------------- + * Step1: Re-ordering of even and odd elements as + * pState[i] = pInlineBuffer[2*i] and + * pState[N-i-1] = pInlineBuffer[2*i+1] where i = 0 to N/2 + ---------------------------------------------------------------------*/ + + /* pS1 initialized to pState */ + pS1 = pState; + + /* pS2 initialized to pState+N-1, so that it points to the end of the state buffer */ + pS2 = pState + (S->N - 1U); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + +#if defined (ARM_MATH_LOOPUNROLL) + + /* Initializing the loop counter to N/2 >> 2 for loop unrolling by 4 */ + i = S->Nby2 >> 2U; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + *pS1++ = *pbuff++; + *pS2-- = *pbuff++; + + /* Decrement loop counter */ + i--; + } while (i > 0U); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = S->N >> 2U; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. + * Compute 4 outputs at a time */ + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while (i > 0U); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_f32 (S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_f32 (pState, weights, pState, S->N); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* Initializing the loop counter to N >> 2 for loop unrolling by 4 */ + i = (S->N - 1U) >> 2U; + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ * (float32_t) 0.5; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + /* First part of the processing with loop unrolling. Compute 4 outputs at a time. + ** a second loop below computes the remaining 1 to 3 samples. */ + do + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + /* points to the next real value */ + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + in = *pS1++ - in; + *pbuff++ = in; + pS1++; + + /* Decrement the loop counter */ + i--; + } while (i > 0U); + + /* If the blockSize is not a multiple of 4, compute any remaining output samples here. + ** No loop unrolling is used. */ + i = (S->N - 1U) % 0x4U; + + while (i > 0U) + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + + /* points to the next real value */ + pS1++; + + /* Decrement the loop counter */ + i--; + } + + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing the loop counter to N/4 instead of N for loop unrolling */ + i = S->N >> 2U; + + /* pbuff initialized to the pInlineBuffer(now contains the output values) */ + pbuff = pInlineBuffer; + + /* Processing with loop unrolling 4 times as N is always multiple of 4. Compute 4 outputs at a time */ + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = in * S->normalize; + + in = *pbuff; + *pbuff++ = in * S->normalize; + + in = *pbuff; + *pbuff++ = in * S->normalize; + + in = *pbuff; + *pbuff++ = in * S->normalize; + + /* Decrement the loop counter */ + i--; + } while (i > 0U); + + +#else + + /* Initializing the loop counter to N/2 */ + i = S->Nby2; + + do + { + /* Re-ordering of even and odd elements */ + /* pState[i] = pInlineBuffer[2*i] */ + *pS1++ = *pbuff++; + /* pState[N-i-1] = pInlineBuffer[2*i+1] */ + *pS2-- = *pbuff++; + + /* Decrement the loop counter */ + i--; + } while (i > 0U); + + /* pbuff initialized to input buffer */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Initializing the loop counter */ + i = S->N; + + do + { + /* Writing the re-ordered output back to inplace input buffer */ + *pbuff++ = *pS1++; + + /* Decrement the loop counter */ + i--; + } while (i > 0U); + + + /* --------------------------------------------------------- + * Step2: Calculate RFFT for N-point input + * ---------------------------------------------------------- */ + /* pInlineBuffer is real input of length N , pState is the complex output of length 2N */ + arm_rfft_f32 (S->pRfft, pInlineBuffer, pState); + + /*---------------------------------------------------------------------- + * Step3: Multiply the FFT output with the weights. + *----------------------------------------------------------------------*/ + arm_cmplx_mult_cmplx_f32 (pState, weights, pState, S->N); + + /* ----------- Post-processing ---------- */ + /* DCT-IV can be obtained from DCT-II by the equation, + * Y4(k) = Y2(k) - Y4(k-1) and Y4(-1) = Y4(0) + * Hence, Y4(0) = Y2(0)/2 */ + /* Getting only real part from the output and Converting to DCT-IV */ + + /* pbuff initialized to input buffer. */ + pbuff = pInlineBuffer; + + /* pS1 initialized to pState */ + pS1 = pState; + + /* Calculating Y4(0) from Y2(0) using Y4(0) = Y2(0)/2 */ + in = *pS1++ * (float32_t) 0.5; + /* input buffer acts as inplace, so output values are stored in the input itself. */ + *pbuff++ = in; + + /* pState pointer is incremented twice as the real values are located alternatively in the array */ + pS1++; + + /* Initializing the loop counter */ + i = (S->N - 1U); + + do + { + /* Calculating Y4(1) to Y4(N-1) from Y2 using equation Y4(k) = Y2(k) - Y4(k-1) */ + /* pState pointer (pS1) is incremented twice as the real values are located alternatively in the array */ + in = *pS1++ - in; + *pbuff++ = in; + + /* points to the next real value */ + pS1++; + + /* Decrement loop counter */ + i--; + } while (i > 0U); + + /*------------ Normalizing the output by multiplying with the normalizing factor ----------*/ + + /* Initializing loop counter */ + i = S->N; + + /* pbuff initialized to the pInlineBuffer (now contains the output values) */ + pbuff = pInlineBuffer; + + do + { + /* Multiplying pInlineBuffer with the normalizing factor sqrt(2/N) */ + in = *pbuff; + *pbuff++ = in * S->normalize; + + /* Decrement loop counter */ + i--; + } while (i > 0U); + +#endif /* #if defined (ARM_MATH_LOOPUNROLL) */ + +} + +/** + @} end of DCT4_IDCT4 group + */ diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_dct4_init_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_dct4_init_f32.c new file mode 100644 index 000000000..3fd70e926 --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_dct4_init_f32.c @@ -0,0 +1,131 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_dct4_init_f32.c + * Description: Initialization function of DCT-4 & IDCT4 F32 + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @ingroup DCT4_IDCT4 + */ + + +/** + @addtogroup DCT4_IDCT4 + @{ + */ + +/** + @brief Initialization function for the floating-point DCT4/IDCT4. + @param[in,out] S points to an instance of floating-point DCT4/IDCT4 structure + @param[in] S_RFFT points to an instance of floating-point RFFT/RIFFT structure + @param[in] S_CFFT points to an instance of floating-point CFFT/CIFFT structure + @param[in] N length of the DCT4 + @param[in] Nby2 half of the length of the DCT4 + @param[in] normalize normalizing factor. + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : N is not a supported transform length + + @par Normalizing factor + The normalizing factor is sqrt(2/N), which depends on the size of transform N. + Floating-point normalizing factors are mentioned in the table below for different DCT sizes: + + \image html dct4NormalizingF32Table.gif + */ + +arm_status arm_dct4_init_f32( + arm_dct4_instance_f32 * S, + arm_rfft_instance_f32 * S_RFFT, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint16_t N, + uint16_t Nby2, + float32_t normalize) +{ + /* Initialize the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + + /* Initialize the DCT4 length */ + S->N = N; + + /* Initialize the half of DCT4 length */ + S->Nby2 = Nby2; + + /* Initialize the DCT4 Normalizing factor */ + S->normalize = normalize; + + /* Initialize Real FFT Instance */ + S->pRfft = S_RFFT; + + /* Initialize Complex FFT Instance */ + S->pCfft = S_CFFT; + + switch (N) + { + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_8192) + /* Initialize the table modifier values */ + case 8192U: + S->pTwiddle = Weights_8192; + S->pCosFactor = cos_factors_8192; + break; + #endif + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_2048) + case 2048U: + S->pTwiddle = Weights_2048; + S->pCosFactor = cos_factors_2048; + break; + #endif + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_512) + case 512U: + S->pTwiddle = Weights_512; + S->pCosFactor = cos_factors_512; + break; + #endif + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_DCT4_F32_128) + case 128U: + S->pTwiddle = Weights_128; + S->pCosFactor = cos_factors_128; + break; + #endif + default: + status = ARM_MATH_ARGUMENT_ERROR; + } + + /* Initialize the RFFT/RIFFT Function */ + arm_rfft_init_f32(S->pRfft, S->pCfft, S->N, 0U, 1U); + + /* return the status of DCT4 Init function */ + return (status); +} + +/** + @} end of DCT4_IDCT4 group + */ diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_f32.c new file mode 100644 index 000000000..b5d0a662b --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_f32.c @@ -0,0 +1,309 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_rfft_f32.c + * Description: RFFT & RIFFT Floating point process function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +/* ---------------------------------------------------------------------- + * Internal functions prototypes + * -------------------------------------------------------------------- */ + +extern void arm_radix4_butterfly_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier); + +extern void arm_radix4_butterfly_inverse_f32( + float32_t * pSrc, + uint16_t fftLen, + const float32_t * pCoef, + uint16_t twidCoefModifier, + float32_t onebyfftLen); + +extern void arm_bitreversal_f32( + float32_t * pSrc, + uint16_t fftSize, + uint16_t bitRevFactor, + const uint16_t * pBitRevTab); + +void arm_split_rfft_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pATable, + const float32_t * pBTable, + float32_t * pDst, + uint32_t modifier); + +void arm_split_rifft_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pATable, + const float32_t * pBTable, + float32_t * pDst, + uint32_t modifier); + +/** + @ingroup groupTransforms + */ + +/** + @addtogroup RealFFT + @{ + */ + +/** + @brief Processing function for the floating-point RFFT/RIFFT. + @deprecated Do not use this function. It has been superceded by \ref arm_rfft_fast_f32 and will be removed in the future. + @param[in] S points to an instance of the floating-point RFFT/RIFFT structure + @param[in] pSrc points to the input buffer + @param[out] pDst points to the output buffer + @return none + */ + +void arm_rfft_f32( + const arm_rfft_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst) +{ + const arm_cfft_radix4_instance_f32 *S_CFFT = S->pCfft; + + /* Calculation of Real IFFT of input */ + if (S->ifftFlagR == 1U) + { + /* Real IFFT core process */ + arm_split_rifft_f32 (pSrc, S->fftLenBy2, S->pTwiddleAReal, S->pTwiddleBReal, pDst, S->twidCoefRModifier); + + + /* Complex radix-4 IFFT process */ + arm_radix4_butterfly_inverse_f32 (pDst, S_CFFT->fftLen, S_CFFT->pTwiddle, S_CFFT->twidCoefModifier, S_CFFT->onebyfftLen); + + /* Bit reversal process */ + if (S->bitReverseFlagR == 1U) + { + arm_bitreversal_f32 (pDst, S_CFFT->fftLen, S_CFFT->bitRevFactor, S_CFFT->pBitRevTable); + } + } + else + { + /* Calculation of RFFT of input */ + + /* Complex radix-4 FFT process */ + arm_radix4_butterfly_f32 (pSrc, S_CFFT->fftLen, S_CFFT->pTwiddle, S_CFFT->twidCoefModifier); + + /* Bit reversal process */ + if (S->bitReverseFlagR == 1U) + { + arm_bitreversal_f32 (pSrc, S_CFFT->fftLen, S_CFFT->bitRevFactor, S_CFFT->pBitRevTable); + } + + /* Real FFT core process */ + arm_split_rfft_f32 (pSrc, S->fftLenBy2, S->pTwiddleAReal, S->pTwiddleBReal, pDst, S->twidCoefRModifier); + } + +} + +/** + @} end of RealFFT group + */ + +/** + @brief Core Real FFT process + @param[in] pSrc points to input buffer + @param[in] fftLen length of FFT + @param[in] pATable points to twiddle Coef A buffer + @param[in] pBTable points to twiddle Coef B buffer + @param[out] pDst points to output buffer + @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table + @return none + */ + +void arm_split_rfft_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pATable, + const float32_t * pBTable, + float32_t * pDst, + uint32_t modifier) +{ + uint32_t i; /* Loop Counter */ + float32_t outR, outI; /* Temporary variables for output */ + const float32_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + float32_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */ + float32_t *pDst1 = &pDst[2], *pDst2 = &pDst[(4U * fftLen) - 1U]; /* temp pointers for output buffer */ + float32_t *pSrc1 = &pSrc[2], *pSrc2 = &pSrc[(2U * fftLen) - 1U]; /* temp pointers for input buffer */ + + /* Init coefficient pointers */ + pCoefA = &pATable[modifier * 2]; + pCoefB = &pBTable[modifier * 2]; + + i = fftLen - 1U; + + while (i > 0U) + { + /* + outR = ( pSrc[2 * i] * pATable[2 * i] + - pSrc[2 * i + 1] * pATable[2 * i + 1] + + pSrc[2 * n - 2 * i] * pBTable[2 * i] + + pSrc[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + + outI = ( pIn[2 * i + 1] * pATable[2 * i] + + pIn[2 * i] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i + 1] + - pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); + */ + + /* read pATable[2 * i] */ + CoefA1 = *pCoefA++; + /* pATable[2 * i + 1] */ + CoefA2 = *pCoefA; + + /* pSrc[2 * i] * pATable[2 * i] */ + outR = *pSrc1 * CoefA1; + /* pSrc[2 * i] * CoefA2 */ + outI = *pSrc1++ * CoefA2; + + /* (pSrc[2 * i + 1] + pSrc[2 * fftLen - 2 * i + 1]) * CoefA2 */ + outR -= (*pSrc1 + *pSrc2) * CoefA2; + /* pSrc[2 * i + 1] * CoefA1 */ + outI += *pSrc1++ * CoefA1; + + CoefB1 = *pCoefB; + + /* pSrc[2 * fftLen - 2 * i + 1] * CoefB1 */ + outI -= *pSrc2-- * CoefB1; + /* pSrc[2 * fftLen - 2 * i] * CoefA2 */ + outI -= *pSrc2 * CoefA2; + + /* pSrc[2 * fftLen - 2 * i] * CoefB1 */ + outR += *pSrc2-- * CoefB1; + + /* write output */ + *pDst1++ = outR; + *pDst1++ = outI; + + /* write complex conjugate output */ + *pDst2-- = -outI; + *pDst2-- = outR; + + /* update coefficient pointer */ + pCoefB = pCoefB + (modifier * 2U); + pCoefA = pCoefA + ((modifier * 2U) - 1U); + + i--; + + } + + pDst[2U * fftLen] = pSrc[0] - pSrc[1]; + pDst[(2U * fftLen) + 1U] = 0.0f; + + pDst[0] = pSrc[0] + pSrc[1]; + pDst[1] = 0.0f; + +} + + +/** + @brief Core Real IFFT process + @param[in] pSrc points to input buffer + @param[in] fftLen length of FFT + @param[in] pATable points to twiddle Coef A buffer + @param[in] pBTable points to twiddle Coef B buffer + @param[out] pDst points to output buffer + @param[in] modifier twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table + @return none + */ + +void arm_split_rifft_f32( + float32_t * pSrc, + uint32_t fftLen, + const float32_t * pATable, + const float32_t * pBTable, + float32_t * pDst, + uint32_t modifier) +{ + float32_t outR, outI; /* Temporary variables for output */ + const float32_t *pCoefA, *pCoefB; /* Temporary pointers for twiddle factors */ + float32_t CoefA1, CoefA2, CoefB1; /* Temporary variables for twiddle coefficients */ + float32_t *pSrc1 = &pSrc[0], *pSrc2 = &pSrc[(2U * fftLen) + 1U]; + + pCoefA = &pATable[0]; + pCoefB = &pBTable[0]; + + while (fftLen > 0U) + { + /* + outR = ( pIn[2 * i] * pATable[2 * i] + + pIn[2 * i + 1] * pATable[2 * i + 1] + + pIn[2 * n - 2 * i] * pBTable[2 * i] + - pIn[2 * n - 2 * i + 1] * pBTable[2 * i + 1]); + + outI = ( pIn[2 * i + 1] * pATable[2 * i] + - pIn[2 * i] * pATable[2 * i + 1] + - pIn[2 * n - 2 * i] * pBTable[2 * i + 1] + - pIn[2 * n - 2 * i + 1] * pBTable[2 * i]); + */ + + CoefA1 = *pCoefA++; + CoefA2 = *pCoefA; + + /* outR = (pSrc[2 * i] * CoefA1 */ + outR = *pSrc1 * CoefA1; + + /* - pSrc[2 * i] * CoefA2 */ + outI = -(*pSrc1++) * CoefA2; + + /* (pSrc[2 * i + 1] + pSrc[2 * fftLen - 2 * i + 1]) * CoefA2 */ + outR += (*pSrc1 + *pSrc2) * CoefA2; + + /* pSrc[2 * i + 1] * CoefA1 */ + outI += (*pSrc1++) * CoefA1; + + CoefB1 = *pCoefB; + + /* - pSrc[2 * fftLen - 2 * i + 1] * CoefB1 */ + outI -= *pSrc2-- * CoefB1; + + /* pSrc[2 * fftLen - 2 * i] * CoefB1 */ + outR += *pSrc2 * CoefB1; + + /* pSrc[2 * fftLen - 2 * i] * CoefA2 */ + outI += *pSrc2-- * CoefA2; + + /* write output */ + *pDst++ = outR; + *pDst++ = outI; + + /* update coefficient pointer */ + pCoefB = pCoefB + (modifier * 2); + pCoefA = pCoefA + (modifier * 2 - 1); + + /* Decrement loop count */ + fftLen--; + } + +} diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_f32.c new file mode 100644 index 000000000..7a1af1461 --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_f32.c @@ -0,0 +1,320 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_rfft_f32.c + * Description: RFFT & RIFFT Floating point process function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" + +void stage_rfft_f32( + const arm_rfft_fast_instance_f32 * S, + float32_t * p, + float32_t * pOut) +{ + uint32_t k; /* Loop Counter */ + float32_t twR, twI; /* RFFT Twiddle coefficients */ + const float32_t * pCoeff = S->pTwiddleRFFT; /* Points to RFFT Twiddle factors */ + float32_t *pA = p; /* increasing pointer */ + float32_t *pB = p; /* decreasing pointer */ + float32_t xAR, xAI, xBR, xBI; /* temporary variables */ + float32_t t1a, t1b; /* temporary variables */ + float32_t p0, p1, p2, p3; /* temporary variables */ + + + k = (S->Sint).fftLen - 1; + + /* Pack first and last sample of the frequency domain together */ + + xBR = pB[0]; + xBI = pB[1]; + xAR = pA[0]; + xAI = pA[1]; + + twR = *pCoeff++ ; + twI = *pCoeff++ ; + + // U1 = XA(1) + XB(1); % It is real + t1a = xBR + xAR ; + + // U2 = XB(1) - XA(1); % It is imaginary + t1b = xBI + xAI ; + + // real(tw * (xB - xA)) = twR * (xBR - xAR) - twI * (xBI - xAI); + // imag(tw * (xB - xA)) = twI * (xBR - xAR) + twR * (xBI - xAI); + *pOut++ = 0.5f * ( t1a + t1b ); + *pOut++ = 0.5f * ( t1a - t1b ); + + // XA(1) = 1/2*( U1 - imag(U2) + i*( U1 +imag(U2) )); + pB = p + 2*k; + pA += 2; + + do + { + /* + function X = my_split_rfft(X, ifftFlag) + % X is a series of real numbers + L = length(X); + XC = X(1:2:end) +i*X(2:2:end); + XA = fft(XC); + XB = conj(XA([1 end:-1:2])); + TW = i*exp(-2*pi*i*[0:L/2-1]/L).'; + for l = 2:L/2 + XA(l) = 1/2 * (XA(l) + XB(l) + TW(l) * (XB(l) - XA(l))); + end + XA(1) = 1/2* (XA(1) + XB(1) + TW(1) * (XB(1) - XA(1))) + i*( 1/2*( XA(1) + XB(1) + i*( XA(1) - XB(1)))); + X = XA; + */ + + xBI = pB[1]; + xBR = pB[0]; + xAR = pA[0]; + xAI = pA[1]; + + twR = *pCoeff++; + twI = *pCoeff++; + + t1a = xBR - xAR ; + t1b = xBI + xAI ; + + // real(tw * (xB - xA)) = twR * (xBR - xAR) - twI * (xBI - xAI); + // imag(tw * (xB - xA)) = twI * (xBR - xAR) + twR * (xBI - xAI); + p0 = twR * t1a; + p1 = twI * t1a; + p2 = twR * t1b; + p3 = twI * t1b; + + *pOut++ = 0.5f * (xAR + xBR + p0 + p3 ); //xAR + *pOut++ = 0.5f * (xAI - xBI + p1 - p2 ); //xAI + + pA += 2; + pB -= 2; + k--; + } while (k > 0U); +} + +/* Prepares data for inverse cfft */ +void merge_rfft_f32( + const arm_rfft_fast_instance_f32 * S, + float32_t * p, + float32_t * pOut) +{ + uint32_t k; /* Loop Counter */ + float32_t twR, twI; /* RFFT Twiddle coefficients */ + const float32_t *pCoeff = S->pTwiddleRFFT; /* Points to RFFT Twiddle factors */ + float32_t *pA = p; /* increasing pointer */ + float32_t *pB = p; /* decreasing pointer */ + float32_t xAR, xAI, xBR, xBI; /* temporary variables */ + float32_t t1a, t1b, r, s, t, u; /* temporary variables */ + + k = (S->Sint).fftLen - 1; + + xAR = pA[0]; + xAI = pA[1]; + + pCoeff += 2 ; + + *pOut++ = 0.5f * ( xAR + xAI ); + *pOut++ = 0.5f * ( xAR - xAI ); + + pB = p + 2*k ; + pA += 2 ; + + while (k > 0U) + { + /* G is half of the frequency complex spectrum */ + //for k = 2:N + // Xk(k) = 1/2 * (G(k) + conj(G(N-k+2)) + Tw(k)*( G(k) - conj(G(N-k+2)))); + xBI = pB[1] ; + xBR = pB[0] ; + xAR = pA[0]; + xAI = pA[1]; + + twR = *pCoeff++; + twI = *pCoeff++; + + t1a = xAR - xBR ; + t1b = xAI + xBI ; + + r = twR * t1a; + s = twI * t1b; + t = twI * t1a; + u = twR * t1b; + + // real(tw * (xA - xB)) = twR * (xAR - xBR) - twI * (xAI - xBI); + // imag(tw * (xA - xB)) = twI * (xAR - xBR) + twR * (xAI - xBI); + *pOut++ = 0.5f * (xAR + xBR - r - s ); //xAR + *pOut++ = 0.5f * (xAI - xBI + t - u ); //xAI + + pA += 2; + pB -= 2; + k--; + } + +} + +/** + @ingroup groupTransforms +*/ + +/** + @defgroup RealFFT Real FFT Functions + + @par + The CMSIS DSP library includes specialized algorithms for computing the + FFT of real data sequences. The FFT is defined over complex data but + in many applications the input is real. Real FFT algorithms take advantage + of the symmetry properties of the FFT and have a speed advantage over complex + algorithms of the same length. + @par + The Fast RFFT algorith relays on the mixed radix CFFT that save processor usage. + @par + The real length N forward FFT of a sequence is computed using the steps shown below. + @par + \image html RFFT.gif "Real Fast Fourier Transform" + @par + The real sequence is initially treated as if it were complex to perform a CFFT. + Later, a processing stage reshapes the data to obtain half of the frequency spectrum + in complex format. Except the first complex number that contains the two real numbers + X[0] and X[N/2] all the data is complex. In other words, the first complex sample + contains two real values packed. + @par + The input for the inverse RFFT should keep the same format as the output of the + forward RFFT. A first processing stage pre-process the data to later perform an + inverse CFFT. + @par + \image html RIFFT.gif "Real Inverse Fast Fourier Transform" + @par + The algorithms for floating-point, Q15, and Q31 data are slightly different + and we describe each algorithm in turn. + @par Floating-point + The main functions are \ref arm_rfft_fast_f32() and \ref arm_rfft_fast_init_f32(). + The older functions \ref arm_rfft_f32() and \ref arm_rfft_init_f32() have been deprecated + but are still documented. + @par + The FFT of a real N-point sequence has even symmetry in the frequency domain. + The second half of the data equals the conjugate of the first half flipped in frequency. + Looking at the data, we see that we can uniquely represent the FFT using only N/2 complex numbers. + These are packed into the output array in alternating real and imaginary components: + @par + X = { real[0], imag[0], real[1], imag[1], real[2], imag[2] ... + real[(N/2)-1], imag[(N/2)-1 } + @par + It happens that the first complex number (real[0], imag[0]) is actually + all real. real[0] represents the DC offset, and imag[0] should be 0. + (real[1], imag[1]) is the fundamental frequency, (real[2], imag[2]) is + the first harmonic and so on. + @par + The real FFT functions pack the frequency domain data in this fashion. + The forward transform outputs the data in this form and the inverse + transform expects input data in this form. The function always performs + the needed bitreversal so that the input and output data is always in + normal order. The functions support lengths of [32, 64, 128, ..., 4096] + samples. + @par Q15 and Q31 + The real algorithms are defined in a similar manner and utilize N/2 complex + transforms behind the scenes. + @par + The complex transforms used internally include scaling to prevent fixed-point + overflows. The overall scaling equals 1/(fftLen/2). + @par + A separate instance structure must be defined for each transform used but + twiddle factor and bit reversal tables can be reused. + @par + There is also an associated initialization function for each data type. + The initialization function performs the following operations: + - Sets the values of the internal structure fields. + - Initializes twiddle factor table and bit reversal table pointers. + - Initializes the internal complex FFT data structure. + @par + Use of the initialization function is optional. + However, if the initialization function is used, then the instance structure + cannot be placed into a const data section. To place an instance structure + into a const data section, the instance structure should be manually + initialized as follows: +
+      arm_rfft_instance_q31 S = {fftLenReal, fftLenBy2, ifftFlagR, bitReverseFlagR, twidCoefRModifier, pTwiddleAReal, pTwiddleBReal, pCfft};
+      arm_rfft_instance_q15 S = {fftLenReal, fftLenBy2, ifftFlagR, bitReverseFlagR, twidCoefRModifier, pTwiddleAReal, pTwiddleBReal, pCfft};
+  
+ where fftLenReal is the length of the real transform; + fftLenBy2 length of the internal complex transform. + ifftFlagR Selects forward (=0) or inverse (=1) transform. + bitReverseFlagR Selects bit reversed output (=0) or normal order + output (=1). + twidCoefRModifier stride modifier for the twiddle factor table. + The value is based on the FFT length; + pTwiddleARealpoints to the A array of twiddle coefficients; + pTwiddleBRealpoints to the B array of twiddle coefficients; + pCfft points to the CFFT Instance structure. The CFFT structure + must also be initialized. Refer to arm_cfft_radix4_f32() for details regarding + static initialization of the complex FFT instance structure. + */ + +/** + @addtogroup RealFFT + @{ +*/ + +/** + @brief Processing function for the floating-point real FFT. + @param[in] S points to an arm_rfft_fast_instance_f32 structure + @param[in] p points to input buffer + @param[in] pOut points to output buffer + @param[in] ifftFlag + - value = 0: RFFT + - value = 1: RIFFT + @return none +*/ + +void arm_rfft_fast_f32( + arm_rfft_fast_instance_f32 * S, + float32_t * p, + float32_t * pOut, + uint8_t ifftFlag) +{ + arm_cfft_instance_f32 * Sint = &(S->Sint); + Sint->fftLen = S->fftLenRFFT / 2; + + /* Calculation of Real FFT */ + if (ifftFlag) + { + /* Real FFT compression */ + merge_rfft_f32(S, p, pOut); + + /* Complex radix-4 IFFT process */ + arm_cfft_f32( Sint, pOut, ifftFlag, 1); + } + else + { + /* Calculation of RFFT of input */ + arm_cfft_f32( Sint, p, ifftFlag, 1); + + /* Real FFT extraction */ + stage_rfft_f32(S, p, pOut); + } +} + +/** +* @} end of RealFFT group +*/ diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_init_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_init_f32.c new file mode 100644 index 000000000..58fbfdba7 --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_fast_init_f32.c @@ -0,0 +1,344 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_init_f32.c + * Description: Split Radix Decimation in Frequency CFFT Floating point processing function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + +/** + @ingroup groupTransforms + */ + +/** + @addtogroup RealFFT + @{ + */ + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16) && defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32)) + +/** + @brief Initialization function for the 32pt floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + */ + +arm_status arm_rfft_32_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 16U; + S->fftLenRFFT = 32U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_16_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable16; + Sint->pTwiddle = (float32_t *) twiddleCoef_16; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_32; + + return ARM_MATH_SUCCESS; +} +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32) && defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64)) + +/** + @brief Initialization function for the 64pt floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + */ + +arm_status arm_rfft_64_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 32U; + S->fftLenRFFT = 64U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_32_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable32; + Sint->pTwiddle = (float32_t *) twiddleCoef_32; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_64; + + return ARM_MATH_SUCCESS; +} +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64) && defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128)) + +/** + @brief Initialization function for the 128pt floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + */ + +arm_status arm_rfft_128_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 64U; + S->fftLenRFFT = 128U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_64_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable64; + Sint->pTwiddle = (float32_t *) twiddleCoef_64; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_128; + + return ARM_MATH_SUCCESS; +} +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128) && defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256)) + +/** + @brief Initialization function for the 256pt floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected +*/ + +arm_status arm_rfft_256_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 128U; + S->fftLenRFFT = 256U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_128_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable128; + Sint->pTwiddle = (float32_t *) twiddleCoef_128; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_256; + + return ARM_MATH_SUCCESS; +} +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256) && defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512)) + +/** + @brief Initialization function for the 512pt floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + */ + +arm_status arm_rfft_512_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 256U; + S->fftLenRFFT = 512U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_256_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable256; + Sint->pTwiddle = (float32_t *) twiddleCoef_256; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_512; + + return ARM_MATH_SUCCESS; +} +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512) && defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024)) +/** + @brief Initialization function for the 1024pt floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + */ + +arm_status arm_rfft_1024_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 512U; + S->fftLenRFFT = 1024U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_512_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable512; + Sint->pTwiddle = (float32_t *) twiddleCoef_512; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_1024; + + return ARM_MATH_SUCCESS; +} +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024) && defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048)) +/** + @brief Initialization function for the 2048pt floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + */ +arm_status arm_rfft_2048_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 1024U; + S->fftLenRFFT = 2048U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_1024_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable1024; + Sint->pTwiddle = (float32_t *) twiddleCoef_1024; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_2048; + + return ARM_MATH_SUCCESS; +} +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048) && defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096)) +/** +* @brief Initialization function for the 4096pt floating-point real FFT. +* @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + */ + +arm_status arm_rfft_4096_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { + + arm_cfft_instance_f32 * Sint; + + if( !S ) return ARM_MATH_ARGUMENT_ERROR; + + Sint = &(S->Sint); + Sint->fftLen = 2048U; + S->fftLenRFFT = 4096U; + + Sint->bitRevLength = ARMBITREVINDEXTABLE_2048_TABLE_LENGTH; + Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable2048; + Sint->pTwiddle = (float32_t *) twiddleCoef_2048; + S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_4096; + + return ARM_MATH_SUCCESS; +} +#endif + +/** + @brief Initialization function for the floating-point real FFT. + @param[in,out] S points to an arm_rfft_fast_instance_f32 structure + @param[in] fftLen length of the Real Sequence + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : fftLen is not a supported length + + @par Description + The parameter fftLen specifies the length of RFFT/CIFFT process. + Supported FFT Lengths are 32, 64, 128, 256, 512, 1024, 2048, 4096. + @par + This Function also initializes Twiddle factor table pointer and Bit reversal table pointer. + */ + +arm_status arm_rfft_fast_init_f32( + arm_rfft_fast_instance_f32 * S, + uint16_t fftLen) +{ + typedef arm_status(*fft_init_ptr)( arm_rfft_fast_instance_f32 *); + fft_init_ptr fptr = 0x0; + + switch (fftLen) + { +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048) && defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096)) + case 4096U: + fptr = arm_rfft_4096_fast_init_f32; + break; +#endif +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024) && defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048)) + case 2048U: + fptr = arm_rfft_2048_fast_init_f32; + break; +#endif +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512) && defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024)) + case 1024U: + fptr = arm_rfft_1024_fast_init_f32; + break; +#endif +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256) && defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512)) + case 512U: + fptr = arm_rfft_512_fast_init_f32; + break; +#endif +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128) && defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256)) + case 256U: + fptr = arm_rfft_256_fast_init_f32; + break; +#endif +#if (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64) && defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128)) + case 128U: + fptr = arm_rfft_128_fast_init_f32; + break; +#endif +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32) && defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64)) + case 64U: + fptr = arm_rfft_64_fast_init_f32; + break; +#endif +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16) && defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32)) + case 32U: + fptr = arm_rfft_32_fast_init_f32; + break; +#endif + default: + return ARM_MATH_ARGUMENT_ERROR; + } + + if( ! fptr ) return ARM_MATH_ARGUMENT_ERROR; + return fptr( S ); + +} + +/** + @} end of RealFFT group + */ diff --git a/CMSIS/DSP/Source/TransformFunctions/arm_rfft_init_f32.c b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_init_f32.c new file mode 100644 index 000000000..141f8b62c --- /dev/null +++ b/CMSIS/DSP/Source/TransformFunctions/arm_rfft_init_f32.c @@ -0,0 +1,139 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_rfft_init_f32.c + * Description: RFFT & RIFFT Floating point initialisation function + * + * $Date: 18. March 2019 + * $Revision: V1.6.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2019 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "arm_math.h" +#include "arm_common_tables.h" + + +/** + @addtogroup RealFFT + @{ + */ + +/** + @brief Initialization function for the floating-point RFFT/RIFFT. + @deprecated Do not use this function. It has been superceded by \ref arm_rfft_fast_init_f32 and will be removed in the future. + @param[in,out] S points to an instance of the floating-point RFFT/RIFFT structure + @param[in,out] S_CFFT points to an instance of the floating-point CFFT/CIFFT structure + @param[in] fftLenReal length of the FFT. + @param[in] ifftFlagR flag that selects transform direction + - value = 0: forward transform + - value = 1: inverse transform + @param[in] bitReverseFlag flag that enables / disables bit reversal of output + - value = 0: disables bit reversal of output + - value = 1: enables bit reversal of output + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : fftLenReal is not a supported length + + @par Description + The parameter fftLenRealspecifies length of RFFT/RIFFT Process. + Supported FFT Lengths are 128, 512, 2048. + @par + The parameter ifftFlagR controls whether a forward or inverse transform is computed. + Set(=1) ifftFlagR to calculate RIFFT, otherwise RFFT is calculated. + @par + The parameter bitReverseFlag controls whether output is in normal order or bit reversed order. + Set(=1) bitReverseFlag for output to be in normal order otherwise output is in bit reversed order. + @par + This function also initializes Twiddle factor table. + */ + +arm_status arm_rfft_init_f32( + arm_rfft_instance_f32 * S, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag) +{ + + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialize the Real FFT length */ + S->fftLenReal = (uint16_t) fftLenReal; + + /* Initialize the Complex FFT length */ + S->fftLenBy2 = (uint16_t) fftLenReal / 2U; + + /* Initialize the Twiddle coefficientA pointer */ + S->pTwiddleAReal = (float32_t *) realCoefA; + + /* Initialize the Twiddle coefficientB pointer */ + S->pTwiddleBReal = (float32_t *) realCoefB; + + /* Initialize the Flag for selection of RFFT or RIFFT */ + S->ifftFlagR = (uint8_t) ifftFlagR; + + /* Initialize the Flag for calculation Bit reversal or not */ + S->bitReverseFlagR = (uint8_t) bitReverseFlag; + + /* Initializations of structure parameters depending on the FFT length */ + switch (S->fftLenReal) + { + /* Init table modifier value */ + case 8192U: + S->twidCoefRModifier = 1U; + break; + case 2048U: + S->twidCoefRModifier = 4U; + break; + case 512U: + S->twidCoefRModifier = 16U; + break; + case 128U: + S->twidCoefRModifier = 64U; + break; + default: + /* Reporting argument error if rfftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + /* Init Complex FFT Instance */ + S->pCfft = S_CFFT; + + if (S->ifftFlagR) + { + /* Initializes the CIFFT Module for fftLenreal/2 length */ + arm_cfft_radix4_init_f32(S->pCfft, S->fftLenBy2, 1U, 0U); + } + else + { + /* Initializes the CFFT Module for fftLenreal/2 length */ + arm_cfft_radix4_init_f32(S->pCfft, S->fftLenBy2, 0U, 0U); + } + + /* return the status of RFFT Init function */ + return (status); + +} + +/** + @} end of RealFFT group + */ diff --git a/LA_OPT_NXP_Software_License.txt b/LA_OPT_NXP_Software_License.txt index e42834d37..d52d4e4cf 100644 --- a/LA_OPT_NXP_Software_License.txt +++ b/LA_OPT_NXP_Software_License.txt @@ -1,2 +1,2 @@ -LA_OPT_NXP_Software_License v17 October 2020  IMPORTANT.  Read the following NXP Software License Agreement ("Agreement") completely. By selecting the "I Accept" button at the end of this page, or by downloading, installing, or using the Licensed Software, you indicate that you accept the terms of the Agreement and you acknowledge that you have the authority, for yourself or on behalf of your company, to bind your company to these terms. You may then download or install the file. In the event of a conflict between the terms of this Agreement and any license terms and conditions for NXP's proprietary software embedded anywhere in the Licensed Software file, the terms of this Agreement shall control.  If a separate license agreement for the Licensed Software has been signed by you and NXP, then that agreement shall govern your use of the Licensed Software and shall supersede this Agreement. NXP SOFTWARE LICENSE AGREEMENT This is a legal agreement between your employer, of which you are an authorized representative, or, if you have no employer, you as an individual ("you" or "Licensee"), and NXP B.V. ("NXP").  It concerns your rights to use the software provided to you in binary or source code form and any accompanying written materials (the "Licensed Software"). The Licensed Software may include any updates or error corrections or documentation relating to the Licensed Software provided to you by NXP under this Agreement. In consideration for NXP allowing you to access the Licensed Software, you are agreeing to be bound by the terms of this Agreement. If you do not agree to all of the terms of this Agreement, do not download or install the Licensed Software. If you change your mind later, stop using the Licensed Software and delete all copies of the Licensed Software in your possession or control. Any copies of the Licensed Software that you have already distributed, where permitted, and do not destroy will continue to be governed by this Agreement. Your prior use will also continue to be governed by this Agreement. 1.       DEFINITIONS 1.1.         "Affiliate" means, with respect to a party, any corporation or other legal entity that now or hereafter Controls, is Controlled by or is under common Control with such party; where "Control" means the direct or indirect ownership of greater than fifty percent (50%) of the shares or similar interests entitled to vote for the election of directors or other persons performing similar functions. An entity is considered an Affiliate only so long as such Control exists. 1.2 "Authorized System" means either (i) Licensee's hardware product which incorporates an NXP Product or (ii) Licensee's software program which is used exclusively in connection with an NXP Product and with which the Licensed Software will be integrated.       1.3. "Derivative Work" means a work based upon one or more pre-existing works. A work consisting of editorial revisions, annotations, elaborations, or other modifications which, as a whole, represent an original work of authorship, is a Derivative Work.         1.4 "Intellectual Property Rights" means any and all rights under statute, common law or equity in and under copyrights, trade secrets, and patents (including utility models), and analogous rights throughout the world, including any applications for and the right to apply for, any of the foregoing. 1.5 "NXP Product" means a hardware product (e.g. a microprocessor, microcontroller, sensor or digital signal processor) supplied directly or indirectly from NXP or an NXP Affiliate, unless there is a product specified in the Software Content Register, in which case this definition is limited to such product. 1.6      "Software Content Register" means the documentation which may accompany the Licensed Software which identifies the contents of the Licensed Software, including but not limited to identification of any Third Party Software, if any, and may also contain other related information as whether the license in 2.3 is applicable.  1.7     "Third Party Software" means, any software included in the Licensed Software that is not NXP proprietary software, and is not open source software, and to which different license terms may apply.  2.       LICENSE GRANT.   2.1.         If you are not expressly granted the distribution license in Section 2.3 in the Software Content Register, then you are only granted the rights in Section 2.2 and not in 2.3. If you are expressly granted the distribution license in Section 2.3 in the Software Content Register, then you are granted the rights in both Section 2.2 and 2.3. 2.2. Standard License. Subject to the terms and conditions of this Agreement, NXP grants you a worldwide, personal, non-transferable, non-exclusive, non-sublicensable license, solely for the development of an Authorized System: (a) to use and reproduce the Licensed Software (and its Derivative Works prepared under the license in Section 2.2(b)) solely in combination with a NXP Product; and (b) for Licensed Software provided to you in source code form (human readable), to prepare Derivative Works of the Licensed Software solely for use in combination with a NXP Product. You may not distribute or sublicense the Licensed Software to others under the license granted in this Section 2.2.   2.3.        Additional Distribution License. If expressly authorized in the Software Content Register, subject to the terms and conditions of this Agreement, NXP grants you a worldwide, personal, non-transferable, non-exclusive, non-sublicensable license solely in connection with your manufacturing and distribution of an Authorized System: (a) to manufacture (or have manufactured), distribute, and market the Licensed Software (and its Derivative Works prepared under the license in 2.2(b)) in object code (machine readable format) only as part of, or embedded within, Authorized Systems and not on a standalone basis solely for use in combination with a NXP Product. Notwithstanding the foregoing, those files marked as .h files ("Header files") may be distributed in source or object code form, but only as part of, or embedded within Authorized Systems; and (b) to copy and distribute as needed, solely in connection with an Authorized System and for use in combination with a NXP Product, non-confidential NXP information provided as part of the Licensed Software for the purpose of maintaining and supporting Authorized Systems with which the Licensed Software is integrated. 2.4 Separate license grants to Third Party Software, or other terms applicable to the Licensed Software if different from those granted in this Section 2, are contained in Appendix A. The Licensed Software may be accompanied by a Software Content Register which will identify that portion of the Licensed Software, if any, that is subject to the different terms in Appendix A.  2.5.         You may use subcontractors on your premises to exercise your rights under Section 2.2 and Section 2.3, if any, so long as you have an agreement in place with the subcontractor containing confidentiality restrictions no less stringent than those contained in this Agreement. You will remain liable for your subcontractors' adherence to the terms of this Agreement and for any and all acts and omissions of such subcontractors with respect to this Agreement and the Licensed Software. 3.       LICENSE LIMITATIONS AND RESTRICTIONS.   3.1.         The licenses granted above in Section 2 only extend to NXP Intellectual Property Rights that would be infringed by the unmodified Licensed Software prior to your preparation of any Derivative Work.    3.2.         The Licensed Software is licensed to you, not sold. Title to Licensed Software delivered hereunder remains vested in NXP or NXP's licensor and cannot be assigned or transferred. You are expressly forbidden from selling or otherwise distributing the Licensed Software, or any portion thereof, except as expressly permitted herein. This Agreement does not grant to you any implied rights under any NXP or third party Intellectual Property Rights. 3.3.         You may not translate, reverse engineer, decompile, or disassemble the Licensed Software except to the extent applicable law specifically prohibits such restriction. You must prohibit your subcontractors or customers (if distribution is permitted) from translating, reverse engineering, decompiling, or disassembling the Licensed Software except to the extent applicable law specifically prohibits such restriction. 3.4.         You must reproduce any and all of NXP's (or its third-party licensor's) copyright notices and other proprietary legends on copies of Licensed Software.   3.5.         If you distribute the Licensed Software to the United States Government, then the Licensed Software is "restricted computer software" and is subject to FAR 52.227-19.    3.6.         You grant to NXP a non-exclusive, non-transferable, irrevocable, perpetual, worldwide, royalty-free, sub-licensable license under your Intellectual Property Rights to use without restriction and for any purpose any suggestion, comment or other feedback related to the Licensed Software (including, but not limited to, error corrections and bug fixes). 3.7.         You will not take or fail to take any action that could subject the Licensed Software to an Excluded License. An Excluded License means any license that requires, as a condition of use, modification or distribution of software subject to the Excluded License, that such software or other software combined and/or distributed with the software be (i) disclosed or distributed in source code form; (ii) licensed for the purpose of making Derivative Works; or (iii) redistributable at no charge.  3.8.         You may not publish or distribute reports associated with the use of the Licensed Software to anyone other than NXP. You may advise NXP of any results obtained from your use of the Licensed Software, including any problems or suggested improvements thereof, and NXP retains the right to use such results and related information in any manner it deems appropriate. 4.       OPEN SOURCE.         Open source software included in the Licensed Software is not licensed under the terms of this Agreement but is instead licensed under the terms of the applicable open source license(s), such as the BSD License, Apache License or the GNU Lesser General Public License. Your use of the open source software is subject to the terms of each applicable license. You must agree to the terms of each applicable license, or you cannot use the open source software.   5.       INTELLECTUAL PROPERTY RIGHTS.    Upon request, you must provide NXP the source code of any derivative of the Licensed Software. Unless prohibited by law, the following paragraph shall apply. Your modifications to the Licensed Software, and all intellectual property rights associated with, and title thereto, will be the property of NXP. You agree to assign all, and hereby do assign all rights, title, and interest to any such modifications to the Licensed Software to NXP and agree to provide all assistance reasonably requested by NXP to establish, preserve or enforce such right. Further, you agree to waive all moral rights relating to your modifications to the Licensed Software, including, without limitation, all rights of identification of authorship and all rights of approval, restriction, or limitation on use or subsequent modification. Notwithstanding the foregoing, you will have the license rights granted in Section 2 hereto to any such modifications made by you or your licensees. Otherwise, you agree to grant an irrevocable, worldwide, and perpetual license to NXP to make, have made, use, sell, offer to sell, import, commercialize, sublicense and reproduce your modifications or derivative works to the Licensed Software without any payment to Licensee. You agree to provide all assistance reasonably requested by NXP to establish, preserve or enforce such right. 6.       ESSENTIAL PATENTS.    NXP has no obligation to identify or obtain any license to any Intellectual Property Right of a third-party that may be necessary for use in connection with technology that is incorporated into the Authorized System (whether or not as part of the Licensed Software). 7.       TERM AND TERMINATION.   This Agreement will remain in effect unless terminated as provided in this Section. 7.1.         You may terminate this Agreement immediately upon written notice to NXP at the address provided below. 7.2.         Either party may terminate this Agreement if the other party is in default of any of the terms and conditions of this Agreement, and termination is effective if the defaulting party fails to correct such default within 30 days after written notice thereof by the non-defaulting party to the defaulting party at the address below. 7.3.         Notwithstanding the foregoing, NXP may terminate this Agreement immediately upon written notice if you: breach any of your confidentiality obligations or the license restrictions under this Agreement;  become bankrupt, insolvent, or file a petition for bankruptcy or insolvency; make an assignment for the benefit of its creditors; enter proceedings for winding up or dissolution; are dissolved; or are nationalized or become subject to the expropriation of all or substantially all of your business or assets. 7.4.         Upon termination of this Agreement, all licenses granted under Section 2 will expire. 7.5.         After termination of this Agreement by either party you will destroy all parts of Licensed Software and its Derivative Works (if any) and will provide to NXP a statement certifying the same. 7.6.         Notwithstanding the termination of this Agreement for any reason, the terms of Sections 1 and 3 through 24 will survive.   8.        SUPPORT.  NXP is not obligated to provide any support, upgrades or new releases of the Licensed Software under this Agreement. If you wish, you may contact NXP and report problems and provide suggestions regarding the Licensed Software. NXP has no obligation to respond to such a problem report or suggestion. NXP may make changes to the Licensed Software at any time, without any obligation to notify or provide updated versions of the Licensed Software to you. 9.        NO WARRANTY.  To the maximum extent permitted by law, NXP expressly disclaims any warranty for the Licensed Software. The Licensed Software is provided "AS IS", without warranty of any kind, either express or implied, including without limitation the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. You assume the entire risk arising out of the use or performance of the licensed software, or any systems you design using the licensed software (if any). 10.        INDEMNITY. You agree to fully defend and indemnify NXP from all claims, liabilities, and costs (including reasonable attorney's fees) related to (1) your use (including your subcontractor's or distributee's use, if permitted) of the Licensed Software or (2) your violation of the terms and conditions of this Agreement. 11.        LIMITATION OF LIABILITY.  EXCLUDING LIABILITY FOR A BREACH OF SECTION 2 (LICENSE GRANTS), SECTION 3 (LICENSE LIMITATIONS AND RESTRICTIONS), SECTION 16 (CONFIDENTIAL INFORMATION), OR CLAIMS UNDER SECTION 10 (INDEMNITY), IN NO EVENT WILL EITHER PARTY BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR ANY INCIDENTAL, SPECIAL, INDIRECT, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR ANY LOSS OF USE, LOSS OF TIME, INCONVENIENCE, COMMERCIAL LOSS, OR LOST PROFITS, SAVINGS, OR REVENUES, TO THE FULL EXTENT SUCH MAY BE DISCLAIMED BY LAW. NXP'S TOTAL LIABILITY FOR ALL COSTS, DAMAGES, CLAIMS, OR LOSSES WHATSOEVER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT OR PRODUCT(S) SUPPLIED UNDER THIS AGREEMENT IS LIMITED TO THE AGGREGATE AMOUNT PAID BY YOU TO NXP IN CONNECTION WITH THE LICENSED SOFTWARE PROVIDED UNDER THIS AGREEMENT TO WHICH LOSSES OR DAMAGES ARE CLAIMED. 12.        EXPORT COMPLIANCE. Each party shall comply with all applicable export and import control laws and regulations including but not limited to the US Export Administration Regulation (including restrictions on certain military end uses and military end users as specified in Section 15 C.F.R. § 744.21 and prohibited party lists issued by other federal governments), Catch-all regulations and all national and international embargoes. Each party further agrees that it will not knowingly transfer, divert, export or re-export, directly or indirectly, any product, software, including software source code, or technology restricted by such regulations or by other applicable national regulations, received from the other party under this Agreement, or any direct product of such software or technical data to any person, firm, entity, country or destination to which such transfer, diversion, export or re-export is restricted or prohibited, without obtaining prior written authorization from the applicable competent government authorities to the extent required by those laws. 13.   GOVERNMENT CONTRACT COMPLIANCE 13.1.      If you sell Authorized Systems directly to any government or public entity, including U.S., state, local, foreign or international governments or public entities, or indirectly via a prime contractor or subcontractor of such governments or entities, NXP makes no representations, certifications, or warranties whatsoever about compliance with government or public entity acquisition statutes or regulations, including, without limitation, statutes or regulations that may relate to pricing, quality, origin or content. 13.2.      The Licensed Software has been developed at private expense and is a "Commercial Item" as defined in 48 C.F.R. Section 2.101, consisting of "Commercial Computer Software", and/or "Commercial Computer Software Documentation," as such terms are used in 48 C.F.R. Section 12.212 (or 48 C.F.R. Section 227.7202, as applicable) and may only be licensed to or shared with U.S. Government end users in object code form as part of, or embedded within, Authorized Systems. Any agreement pursuant to which you share the Licensed Software will include a provision that reiterates the limitations of this document and requires all sub-agreements to similarly contain such limitations.  14.        CRITICAL APPLICATIONS. In some cases, NXP may promote certain software for use in the development of, or for incorporation into, products or services (a) used in applications requiring fail-safe performance or (b) in which failure could lead to death, personal injury, or severe physical or environmental damage (these products and services are referred to as "Critical Applications"). NXP's goal is to educate customers so that they can design their own end-product solutions to meet applicable functional safety standards and requirements. Licensee makes the ultimate design decisions regarding its products and is solely responsible for compliance with all legal, regulatory, safety, and security related requirements concerning its products, regardless of any information or support that may be provided by NXP. As such, Licensee assumes all risk related to use of the Licensed Software in Critical Applications and NXP SHALL NOT BE LIABLE FOR ANY SUCH USE IN CRITICAL APPLICATIONS BY LICENSEE. Accordingly, Licensee will indemnify and hold NXP harmless from any claims, liabilities, damages and associated costs and expenses (including attorneys' fees) that NXP may incur related to Licensee’s incorporation of the Licensed Software in a Critical Application. 15.        CHOICE OF LAW; VENUE.  This Agreement will be governed by, construed, and enforced in accordance with the laws of The Netherlands, without regard to conflicts of laws principles, will apply to all matters relating to this Agreement or the Licensed Software, and you agree that any litigation will be subject to the exclusive jurisdiction of the courts of Amsterdam, The Netherlands. The United Nations Convention on Contracts for the International Sale of Goods will not apply to this document.  16.        CONFIDENTIAL INFORMATION.  Subject to the license grants and restrictions contained herein, you must treat the Licensed Software as confidential information and you agree to retain the Licensed Software in confidence perpetually. You may not disclose any part of the Licensed Software to anyone other than distributees in accordance with Section 2.3 and employees, or subcontractors in accordance with Section 2.5, who have a need to know of the Licensed Software and who have executed written agreements obligating them to protect such Licensed Software to at least the same degree of confidentiality as in this Agreement. You agree to use the same degree of care, but no less than a reasonable degree of care, with the Licensed Software as you do with your own confidential information. You may disclose Licensed Software to the extent required by a court or under operation of law or order provided that you notify NXP of such requirement prior to disclosure, which you only disclose the minimum of the required information, and that you allow NXP the opportunity to object to such court or other legal body requiring such disclosure. 17.       TRADEMARKS.  You are not authorized to use any NXP trademarks, brand names, or logos. 18.        ENTIRE AGREEMENT.  This Agreement constitutes the entire agreement between you and NXP regarding the subject matter of this Agreement, and supersedes all prior communications, negotiations, understandings, agreements or representations, either written or oral, if any. This Agreement may only be amended in written form, signed by you and NXP. 19.        SEVERABILITY.  If any provision of this Agreement is held for any reason to be invalid or unenforceable, then the remaining provisions of this Agreement will be unimpaired and, unless a modification or replacement of the invalid or unenforceable provision is further held to deprive you or NXP of a material benefit, in which case the Agreement will immediately terminate, the invalid or unenforceable provision will be replaced with a provision that is valid and enforceable and that comes closest to the intention underlying the invalid or unenforceable provision. 20.        NO WAIVER.  The waiver by NXP of any breach of any provision of this Agreement will not operate or be construed as a waiver of any other or a subsequent breach of the same or a different provision. 21.        AUDIT.  You will keep full, clear and accurate records with respect to your compliance with the limited license rights granted under this Agreement for three years following expiration or termination of this Agreement. NXP will have the right, either itself or through an independent certified public accountant to examine and audit, at NXP's expense, not more than once a year, and during normal business hours, all such records that may bear upon your compliance with the limited license rights granted above. You must make prompt adjustment to compensate for any errors and/or omissions disclosed by such examination or audit. 22.        NOTICES.             All notices and communications under this Agreement will be made in writing, and will be effective when received at the following addresses:            NXP:       NXP B.V.                        High Tech Campus 60                          5656 AG Eindhoven                          The Netherlands                     ATTN: Legal Department   You:              The address provided at registration will be used. 23.        RELATIONSHIP OF THE PARTIES.     The parties are independent contractors. Nothing in this Agreement will be construed to create any partnership, joint venture, or similar relationship. Neither party is authorized to bind the other to any obligations with third parties. 24.        SUCCESSION AND ASSIGNMENT.   This Agreement will be binding upon and inure to the benefit of the parties and their permitted successors and assigns.  You may not assign this Agreement, or any part of this Agreement, without the prior written approval of NXP, which approval will not be unreasonably withheld or delayed. NXP may assign this Agreement, or any part of this Agreement, in its sole discretion. 25. PRIVACY. By agreeing to this Agreement and/or utilizing the Licensed Software, Licensee consents to use of certain personal information, including but not limited to name, email address, and location, for the purpose of NXP’s internal analysis regarding future software offerings. NXP’s complete Privacy Statement can be found at: https://www.nxp.com/company/our-company/about-nxp/privacy-statement:PRIVACYPRACTICES.     - APPENDIX A Other License Grants and Restrictions: The Licensed Software may include some or all of the following software, which is either 1) Third Party Software or 2) NXP proprietary software subject to different terms than those in the Agreement. If the Software Content Register that accompanies the Licensed Software identifies any of the following Third Party Software or specific components of the NXP proprietary software, the following terms apply to the extent they deviate from the terms in the Agreement: Amazon: Use of the Amazon software constitutes your acceptance of the terms of the Amazon Program Materials License Agreement (including the AVS Component Schedule, if applicable), located at https://developer.amazon.com/support/legal/pml. All Amazon software is hereby designated "Amazon confidential". Amazon is a third-party beneficiary to this Agreement with respect to the Amazon software. Amphion Semiconductor Ltd.: Distribution of Amphion software must be a part of, or embedded within, Authorized Systems that include an Amphion Video Decoder. Aquantia Corp.: You may use Aquantia's API binaries solely to flash the API software to an NXP Product which mates with an Aquantia device. Atheros: Use of Atheros software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from Atheros. ATI (AMD): Distribution of ATI software must be a part of, or embedded within, Authorized Systems that include a ATI graphics processor core. Broadcom Corporation: Your use of Broadcom Corporation software is restricted to Authorized Systems that incorporate a compatible integrated circuit device manufactured or sold by Broadcom. Cadence Design Systems: Use of Cadence audio codec software is limited to distribution only of one copy per single NXP Product. The license granted herein to the Cadence Design Systems HiFi aacPlus Audio Decoder software does not include a license to the AAC family of technologies which you or your customer may need to obtain. Configuration tool outputs may only be distributed by licensees of the relevant Cadence SDK and distribution is limited to distribution of one copy embedded in a single NXP Product. Cirque Corporation: Use of Cirque Corporation technology is limited to evaluation, demonstration, or certification testing only. Permitted distributions must be similarly limited. Further rights, including but not limited to ANY commercial distribution rights, must be obtained directly from Cirque Corporation. Coding Technologies (Dolby Labs): Use of CTS software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained from Dolby Laboratories. CSR: Use of Cambridge Silicon Radio, Inc. ("CSR") software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from CSR. Crank: Use of Crank Software Inc. software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from Crank Software Inc. Cypress Semiconductor Corporation: WWD RTOS source code may only be used in accordance with the Cypress IOT Community License Agreement located at https://community.cypress.com/terms-and-conditions!input.jspa?displayOnly=true. Embedded Systems Academy GmbH (EmSA): Any use of Micro CANopen Plus is subject to the acceptance of the license conditions described in the LICENSE.INFO file distributed with all example projects and in the documentation and the additional clause described below. Clause 1: Micro CANopen Plus may not be used for any competitive or comparative purpose, including the publication of any form of run time or compile time metric, without the express permission of EmSA. Future Technology Devices International Ltd.: Future Technology Devices International software must be used consistent with the terms found here: http://www.ftdichip.com/Drivers/FTDriverLicenceTerms.htm Global Locate (Broadcom Corporation): Use of Global Locate, Inc. software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained from Global Locate. Microsoft: Except for Microsoft PlayReady software, if the Licensed Software includes software owned by Microsoft Corporation ("Microsoft"), it is subject to the terms of your license with Microsoft (the "Microsoft Underlying Licensed Software") and as such, NXP grants no license to you, beyond evaluation and demonstration in connection with NXP processors, in the Microsoft Underlying Licensed Software. You must separately obtain rights beyond evaluation and demonstration in connection with the Microsoft Underlying Licensed Software from Microsoft. Microsoft does not provide support services for the components provided to you through this Agreement. If you have any questions or require technical assistance, please contact NXP. Microsoft Corporation is a third party beneficiary to this Agreement with the right to enforce the terms of this Agreement. TO THE MAXIMUM EXTENT PERMITTED BY LAW, MICROSOFT AND ITS AFFILIATES DISCLAIM ANY WARRANTIES FOR THE MICROSOFT UNDERLYING LICENSED SOFTWARE. TO THE MAXIMUM EXTENT PERMITTED BY LAW, NEITHER MICROSOFT NOR ITS AFFILIATES WILL BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR ANY DIRECT, INCIDENTAL, SPECIAL, INDIRECT, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR ANY LOSS OF USE, LOSS OF TIME, INCONVENIENCE, COMMERCIAL LOSS, OR LOST PROFITS, SAVINGS, OR REVENUES, ARISING FROM THE FROM THE USE OF THE MICROSOFT UNDERLYING LICENSED SOFTWARE. With respect to the Microsoft PlayReady software, you will have the license rights granted in Section 2, provided that you may not use the Microsoft PlayReady software unless you have entered into a Microsoft PlayReady Master Agreement and license directly with Microsoft. MindTree: Notwithstanding the terms contained in Section 2.3 (a), if the Licensed Software includes proprietary software of MindTree in source code format, Licensee may make modifications and create derivative works only to the extent necessary for debugging of the Licensed Software. MM SOLUTIONS AD: Use of MM SOLUTIONS AEC (Auto Exposure Control) and AWB (Auto White Balance) software is limited to demonstration, testing, and evaluation only. In no event may Licensee distribute or sublicense the MM SOLUTIONS software. Further rights must be obtained directly from MM SOLUTIONS. MPEG LA: Use of MPEG LA audio or video codec technology is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from MPEG LA. MQX RTOS Code: MQX RTOS source code may not be re-distributed by any NXP Licensee under any circumstance, even by a signed written amendment to this Agreement. NXP Wireless Charging Library: License to the Software is limited to use in inductive coupling or wireless charging applications Opus: Use of Opus software must be consistent with the terms of the Opus license which can be found at: http://www.opus-codec.org/license/ Oracle JRE (Java): The Oracle JRE must be used consistent with terms found here: http://java.com/license P&E Micro: P&E Software must be used consistent with the terms found here: http://www.pemicro.com/licenses/gdbserver/license_gdb.pdf Pro Design Electronic: Licensee may not modify, create derivative works based on, or copy the Pro Design software, documentation, hardware execution key or the accompanying materials. Licensee shall not use Pro Design's or any of its licensors names, logos or trademarks to market the Authorized System. Only NXP customers and distributors are permitted to further redistribute the Pro Design software and only as part of an Authorized System which contains the Pro Design software. Qualcomm Atheros, Inc.: Notwithstanding anything in this Agreement, Qualcomm Atheros, Inc. Wi-Fi software must be used strictly in accordance with the Qualcomm Atheros, Inc. Technology License Agreement that accompanies such software. Any other use is expressly prohibited. Real Networks - GStreamer Optimized Real Format Client Code implementation or OpenMax Optimized Real Format Client Code: Use of the GStreamer Optimized Real Format Client Code, or OpenMax Optimized Real Format Client code is restricted to applications in the automotive market. Licensee must be a final manufacturer in good standing with a current license with Real Networks for the commercial use and distribution of products containing the GStreamer Optimized Real Format Client Code implementation or OpenMax Optimized Real Format Client Code RivieraWaves SAS (a member of the CEVA, Inc. family of companies): You may not use the RivieraWaves intellectual property licensed under this Agreement if you develop, market, and/or license products similar to such RivieraWaves intellectual property. Such use constitutes a breach of this Agreement. Any such use rights must be obtained directly from RivieraWaves. SanDisk Corporation: If the Licensed Software includes software developed by SanDisk Corporation ("SanDisk"), you must separately obtain the rights to reproduce and distribute this software in source code form from SanDisk. Please follow these easy steps to obtain the license and software: (1) Contact your local SanDisk sales representative to obtain the SanDisk License Agreement. (2) Sign the license agreement. Fax the signed agreement to SanDisk USA marketing department at 408-542-0403. The license will be valid when fully executed by SanDisk. (3) If you have specific questions, please send an email to sales@sandisk.com You may only use the SanDisk Corporation Licensed Software on products compatible with a SanDisk Secure Digital Card. You may not use the SanDisk Corporation Licensed Software on any memory device product. SanDisk retains all rights to any modifications or derivative works to the SanDisk Corporation Licensed Software that you may create. SEGGER Microcontroller - emWin Software: Your use of SEGGER emWin software and components is restricted for development of NXP ARM7, ARM9, Cortex-M0, Cortex-M3, Cortex-M4, Cortex-M33, Cortex-M7, and Cortex-A7 based products only. SEGGER Microcontroller - J-Link/J-Trace Software: Segger software must be used consistent with the terms found here: http://www.segger.com/jlink-software.html Synopsys/Target Compiler Technologies: Your use of the Synopsys/Target Compiler Technologies Licensed Software and related documentation is subject to the following: (1) Duration of the license for the Licensed Software is limited to 12 months, unless otherwise specified in the license file. (2) The Licensed Software is usable by one user at a time on a single designated computer, unless otherwise agreed by Synopsys. (3) Licensed Software and documentation are to be used only on a designated computer at the designated physical address provided by you on the APEX license form. (4) The Licensed Software is not sub-licensable. TARA Systems: Use of TARA Systems GUI technology Embedded Wizard is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from TARA Systems. Texas Instruments: Your use of Texas Instruments Inc. WiLink8 Licensed Software is restricted to NXP SoC based systems that include a compatible connectivity device manufactured by TI. TES Electronic Solutions Germany (TES): TES 3D Surround View software and associated data and documentation may only be used for evaluation purposes and for demonstration to third parties in integrated form on a board package containing an NXP S32V234 device. Licensee may not distribute or sublicense the TES software. Your license to the TES software may be terminated at any time upon notice. Vivante: Distribution of Vivante software must be a part of, or embedded within, Authorized Systems that include a Vivante Graphics Processing Unit. \ No newline at end of file +LA_OPT_NXP_Software_License v11 February 2020 IMPORTANT. Read the following NXP Software License Agreement ("Agreement") completely. By selecting the "I Accept" button at the end of this page, or by downloading, installing, or using the Licensed Software, you indicate that you accept the terms of the Agreement and you acknowledge that you have the authority, for yourself or on behalf of your company, to bind your company to these terms. You may then download or install the file. In the event of a conflict between the terms of this Agreement and any license terms and conditions for NXP's proprietary software embedded anywhere in the Licensed Software file, the terms of this Agreement shall control. If a separate license agreement for the Licensed Software has been signed by you and NXP, then that agreement shall govern your use of the Licensed Software and shall supersede this Agreement. NXP SOFTWARE LICENSE AGREEMENT This is a legal agreement between your employer, of which you are an authorized representative, or, if you have no employer, you as an individual ("you" or "Licensee"), and NXP B.V. ("NXP"). It concerns your rights to use the software provided to you in binary or source code form and any accompanying written materials (the "Licensed Software"). The Licensed Software may include any updates or error corrections or documentation relating to the Licensed Software provided to you by NXP under this Agreement. In consideration for NXP allowing you to access the Licensed Software, you are agreeing to be bound by the terms of this Agreement. If you do not agree to all of the terms of this Agreement, do not download or install the Licensed Software. If you change your mind later, stop using the Licensed Software and delete all copies of the Licensed Software in your possession or control. Any copies of the Licensed Software that you have already distributed, where permitted, and do not destroy will continue to be governed by this Agreement. Your prior use will also continue to be governed by this Agreement. 1. DEFINITIONS 1.1. "Affiliate" means, with respect to a party, any corporation or other legal entity that now or hereafter Controls, is Controlled by or is under common Control with such party; where "Control" means the direct or indirect ownership of greater than fifty percent (50%) of the shares or similar interests entitled to vote for the election of directors or other persons performing similar functions. An entity is considered an Affiliate only so long as such Control exists. 1.2 "Authorized System" means either (i) Licensee's hardware product which incorporates an NXP Product or (ii) Licensee's software program which is used exclusively in connection with an NXP Product and with which the Licensed Software will be integrated. 1.3. "Derivative Work" means a work based upon one or more pre-existing works. A work consisting of editorial revisions, annotations, elaborations, or other modifications which, as a whole, represent an original work of authorship, is a Derivative Work. 1.4 "Intellectual Property Rights" means any and all rights under statute, common law or equity in and under copyrights, trade secrets, and patents (including utility models), and analogous rights throughout the world, including any applications for and the right to apply for, any of the foregoing. 1.5 "NXP Product" means a programmable processing unit (e.g. a microprocessor, microcontroller, sensor or digital signal processor) supplied directly or indirectly from NXP or an NXP Affiliate. 1.6 "Software Content Register" means the documentation which may accompany the Licensed Software which identifies the contents of the Licensed Software, including but not limited to identification of any Third Party Software, if any, and may also contain other related information as whether the license in 2.3 is applicable. 1.7 "Third Party Software" means, any software included in the Licensed Software that is not NXP proprietary software, and is not open source software, and to which different license terms may apply. 2. LICENSE GRANT. 2.1. If you are not expressly granted the production use license in Section 2.3 in the Software Content Register, then you are only granted the rights in Section 2.2 and not in 2.3. If you are expressly granted the production use license in Section 2.3 in the Software Content Register, then you are granted the rights in both Section 2.2 and 2.3. 2.2. Internal Use License. Subject to the terms and conditions of this Agreement, NXP grants you a worldwide, personal, non-transferable, non-exclusive, non-sublicensable license, solely for the development of an Authorized System: (a) to use and reproduce the Licensed Software (and its Derivative Works prepared under the license in Section 2.2(b)); and (b) for Licensed Software provided to you in source code form (human readable), to prepare Derivative Works of the Licensed Software. You may not distribute or sublicense the Licensed Software to others under the license granted in this Section 2.2. 2.3. Production Use License. If expressly authorized in the Software Content Register, subject to the terms and conditions of this Agreement, NXP grants you a worldwide, personal, non-transferable, non-exclusive, non-sublicensable license solely in connection with your manufacturing and distribution of an Authorized System: (a) to manufacture (or have manufactured), distribute, and market the Licensed Software (and its Derivative Works prepared under the license in 2.2(b)) in object code (machine readable format) only as part of, or embedded within, Authorized Systems and not on a standalone basis. Notwithstanding the foregoing, those files marked as .h files ("Header files") may be distributed in source or object code form, but only as part of, or embedded within Authorized Systems; and (b) to copy and distribute as needed, solely in connection with an Authorized System, non-confidential NXP information provided as part of the Licensed Software for the purpose of maintaining and supporting Authorized Systems with which the Licensed Software is integrated. 2.4 Separate license grants to Third Party Software, or other terms applicable to the Licensed Software if different from those granted in this Section 2, are contained in Appendix A. The Licensed Software may be accompanied by a Software Content Register which will identify that portion of the Licensed Software, if any, that is subject to the different terms in Appendix A. 2.5. You may use subcontractors on your premises to exercise your rights under Section 2.2 and Section 2.3, if any, so long as you have an agreement in place with the subcontractor containing confidentiality restrictions no less stringent than those contained in this Agreement. You will remain liable for your subcontractors' adherence to the terms of this Agreement and for any and all acts and omissions of such subcontractors with respect to this Agreement and the Licensed Software. 3. LICENSE LIMITATIONS AND RESTRICTIONS. 3.1. The licenses granted above in Section 2 only extend to NXP Intellectual Property Rights that would be infringed by the unmodified Licensed Software prior to your preparation of any Derivative Work. 3.2. The Licensed Software is licensed to you, not sold. Title to Licensed Software delivered hereunder remains vested in NXP or NXP's licensor and cannot be assigned or transferred. You are expressly forbidden from selling or otherwise distributing the Licensed Software, or any portion thereof, except as expressly permitted herein. This Agreement does not grant to you any implied rights under any NXP or third party Intellectual Property Rights. 3.3. You may not translate, reverse engineer, decompile, or disassemble the Licensed Software except to the extent applicable law specifically prohibits such restriction. You must prohibit your subcontractors or customers (if distribution is permitted) from translating, reverse engineering, decompiling, or disassembling the Licensed Software except to the extent applicable law specifically prohibits such restriction. 3.4. You must reproduce any and all of NXP's (or its third-party licensor's) copyright notices and other proprietary legends on copies of Licensed Software. 3.5. If you distribute the Licensed Software to the United States Government, then the Licensed Software is "restricted computer software" and is subject to FAR 52.227-19. 3.6. You grant to NXP a non-exclusive, non-transferable, irrevocable, perpetual, worldwide, royalty-free, sub-licensable license under your Intellectual Property Rights to use without restriction and for any purpose any suggestion, comment or other feedback related to the Licensed Software (including, but not limited to, error corrections and bug fixes). 3.7. You will not take or fail to take any action that could subject the Licensed Software to an Excluded License. An Excluded License means any license that requires, as a condition of use, modification or distribution of software subject to the Excluded License, that such software or other software combined and/or distributed with the software be (i) disclosed or distributed in source code form; (ii) licensed for the purpose of making Derivative Works; or (iii) redistributable at no charge. 3.8. You may not publish or distribute information, results or data associated with the use of the Licensed Software to anyone other than NXP; however, you must advise NXP of any results obtained including any problems or suggested improvements thereof. NXP retains the right to use such results and related information in any manner it deems appropriate 4. OPEN SOURCE. Open source software included in the Licensed Software is not licensed under the terms of this Agreement but is instead licensed under the terms of the applicable open source license(s), such as the BSD License, Apache License or the GNU Lesser General Public License. Your use of the open source software is subject to the terms of each applicable license. You must agree to the terms of each applicable license, or you cannot use the open source software. 5. INTELLECTUAL PROPERTY RIGHTS. Your modifications to the Licensed Software, and all Intellectual Property Rights associated with, and title thereto, will be the property of NXP. Upon request, you must provide NXP the source code of any derivative of the Licensed Software. You agree to assign all, and hereby do assign all rights, title, and interest to any such modifications to the Licensed Software to NXP and agree to provide all assistance reasonably requested by NXP to establish, preserve or enforce such right. Further, you agree to waive all moral rights relating to your modifications to the Licensed Software, including, without limitation, all rights of identification of authorship and all rights of approval, restriction, or limitation on use or subsequent modification. Notwithstanding the foregoing, you will have the license rights granted in Section 2 hereto to any such modifications made by you or your subcontractor. 6. ESSENTIAL PATENTS. NXP has no obligation to identify or obtain any license to any Intellectual Property Right of a third-party that may be necessary for use in connection with technology that is incorporated into the Authorized System (whether or not as part of the Licensed Software). 7. TERM AND TERMINATION. This Agreement will remain in effect unless terminated as provided in this Section. 7.1. You may terminate this Agreement immediately upon written notice to NXP at the address provided below. 7.2. Either party may terminate this Agreement if the other party is in default of any of the terms and conditions of this Agreement, and termination is effective if the defaulting party fails to correct such default within 30 days after written notice thereof by the non-defaulting party to the defaulting party at the address below. 7.3. Notwithstanding the foregoing, NXP may terminate this Agreement immediately upon written notice if you: breach any of your confidentiality obligations or the license restrictions under this Agreement; become bankrupt, insolvent, or file a petition for bankruptcy or insolvency; make an assignment for the benefit of its creditors; enter proceedings for winding up or dissolution; are dissolved; or are nationalized or become subject to the expropriation of all or substantially all of your business or assets. 7.4. Upon termination of this Agreement, all licenses granted under Section 2 will expire. 7.5. After termination of this Agreement by either party you will destroy all parts of Licensed Software and its Derivative Works (if any) and will provide to NXP a statement certifying the same. 7.6. Notwithstanding the termination of this Agreement for any reason, the terms of Sections 1 and 3 through 24 will survive. 8. SUPPORT. NXP is not obligated to provide any support, upgrades or new releases of the Licensed Software under this Agreement. If you wish, you may contact NXP and report problems and provide suggestions regarding the Licensed Software. NXP has no obligation to respond to such a problem report or suggestion. NXP may make changes to the Licensed Software at any time, without any obligation to notify or provide updated versions of the Licensed Software to you. 9. NO WARRANTY. To the maximum extent permitted by law, NXP expressly disclaims any warranty for the Licensed Software. The Licensed Software is provided "AS IS", without warranty of any kind, either express or implied, including without limitation the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. You assume the entire risk arising out of the use or performance of the licensed software, or any systems you design using the licensed software (if any). 10. INDEMNITY. You agree to fully defend and indemnify NXP from all claims, liabilities, and costs (including reasonable attorney's fees) related to (1) your use (including your subcontractor's or distributee's use, if permitted) of the Licensed Software or (2) your violation of the terms and conditions of this Agreement. 11. LIMITATION OF LIABILITY. EXCLUDING LIABILITY FOR A BREACH OF SECTION 2 (LICENSE GRANTS), SECTION 3 (LICENSE LIMITATIONS AND RESTRICTIONS), SECTION 16 (CONFIDENTIAL INFORMATION), OR CLAIMS UNDER SECTION 10 (INDEMNITY), IN NO EVENT WILL EITHER PARTY BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR ANY INCIDENTAL, SPECIAL, INDIRECT, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR ANY LOSS OF USE, LOSS OF TIME, INCONVENIENCE, COMMERCIAL LOSS, OR LOST PROFITS, SAVINGS, OR REVENUES, TO THE FULL EXTENT SUCH MAY BE DISCLAIMED BY LAW. NXP'S TOTAL LIABILITY FOR ALL COSTS, DAMAGES, CLAIMS, OR LOSSES WHATSOEVER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT OR PRODUCT(S) SUPPLIED UNDER THIS AGREEMENT IS LIMITED TO THE AGGREGATE AMOUNT PAID BY YOU TO NXP IN CONNECTION WITH THE LICENSED SOFTWARE PROVIDED UNDER THIS AGREEMENT TO WHICH LOSSES OR DAMAGES ARE CLAIMED. 12. EXPORT COMPLIANCE. Each party shall comply with all applicable export and import control laws and regulations including but not limited to the US Export Administration Regulation (including prohibited party lists issued by other federal governments), Catch-all regulations and all national and international embargoes. Each party further agrees that it will not knowingly transfer, divert, export or re-export, directly or indirectly, any product, software, including software source code, or technology restricted by such regulations or by other applicable national regulations, received from the other party under this Agreement, or any direct product of such software or technical data to any person, firm, entity, country or destination to which such transfer, diversion, export or re-export is restricted or prohibited, without obtaining prior written authorization from the applicable competent government authorities to the extent required by those laws. 13. GOVERNMENT CONTRACT COMPLIANCE 13.1. If you sell Authorized Systems directly to any government or public entity, including U.S., state, local, foreign or international governments or public entities, or indirectly via a prime contractor or subcontractor of such governments or entities, NXP makes no representations, certifications, or warranties whatsoever about compliance with government or public entity acquisition statutes or regulations, including, without limitation, statutes or regulations that may relate to pricing, quality, origin or content. 13.2. The Licensed Software has been developed at private expense and is a "Commercial Item" as defined in 48 C.F.R. Section 2.101, consisting of "Commercial Computer Software", and/or "Commercial Computer Software Documentation," as such terms are used in 48 C.F.R. Section 12.212 (or 48 C.F.R. Section 227.7202, as applicable) and may only be licensed to or shared with U.S. Government end users in object code form as part of, or embedded within, Authorized Systems. Any agreement pursuant to which you share the Licensed Software will include a provision that reiterates the limitations of this document and requires all sub-agreements to similarly contain such limitations. 14. CRITICAL APPLICATIONS. In some cases, NXP may promote certain software for use in the development of, or for incorporation into, products or services (a) used in applications requiring fail-safe performance or (b) in which failure could lead to death, personal injury, or severe physical or environmental damage (these products and services are referred to as "Critical Applications"). NXP's goal is to educate customers so that they can design their own end-product solutions to meet applicable functional safety standards and requirements. Licensee makes the ultimate design decisions regarding its products and is solely responsible for compliance with all legal, regulatory, safety, and security related requirements concerning its products, regardless of any information or support that may be provided by NXP. As such, Licensee assumes all risk related to use of the Licensed Software in Critical Applications and NXP SHALL NOT BE LIABLE FOR ANY SUCH USE IN CRITICAL APPLICATIONS BY LICENSEE. Accordingly, Licensee will indemnify and hold NXP harmless from any claims, liabilities, damages and associated costs and expenses (including attorneys' fees) that NXP may incur related to Licensee's incorporation of the Licensed Software in a Critical Application. 15. CHOICE OF LAW; VENUE. This Agreement will be governed by, construed, and enforced in accordance with the laws of The Netherlands, without regard to conflicts of laws principles, will apply to all matters relating to this Agreement or the Licensed Software, and you agree that any litigation will be subject to the exclusive jurisdiction of the courts of Amsterdam, The Netherlands. The United Nations Convention on Contracts for the International Sale of Goods will not apply to this document. 16. CONFIDENTIAL INFORMATION. Subject to the license grants and restrictions contained herein, you must treat the Licensed Software as confidential information and you agree to retain the Licensed Software in confidence perpetually. You may not disclose any part of the Licensed Software to anyone other than distributees in accordance with Section 2.3 and employees, or subcontractors in accordance with Section 2.5, who have a need to know of the Licensed Software and who have executed written agreements obligating them to protect such Licensed Software to at least the same degree of confidentiality as in this Agreement. You agree to use the same degree of care, but no less than a reasonable degree of care, with the Licensed Software as you do with your own confidential information. You may disclose Licensed Software to the extent required by a court or under operation of law or order provided that you notify NXP of such requirement prior to disclosure, which you only disclose the minimum of the required information, and that you allow NXP the opportunity to object to such court or other legal body requiring such disclosure. 17. TRADEMARKS. You are not authorized to use any NXP trademarks, brand names, or logos. 18. ENTIRE AGREEMENT. This Agreement constitutes the entire agreement between you and NXP regarding the subject matter of this Agreement, and supersedes all prior communications, negotiations, understandings, agreements or representations, either written or oral, if any. This Agreement may only be amended in written form, signed by you and NXP. 19. SEVERABILITY. If any provision of this Agreement is held for any reason to be invalid or unenforceable, then the remaining provisions of this Agreement will be unimpaired and, unless a modification or replacement of the invalid or unenforceable provision is further held to deprive you or NXP of a material benefit, in which case the Agreement will immediately terminate, the invalid or unenforceable provision will be replaced with a provision that is valid and enforceable and that comes closest to the intention underlying the invalid or unenforceable provision. 20. NO WAIVER. The waiver by NXP of any breach of any provision of this Agreement will not operate or be construed as a waiver of any other or a subsequent breach of the same or a different provision. 21. AUDIT. You will keep full, clear and accurate records with respect to your compliance with the limited license rights granted under this Agreement for three years following expiration or termination of this Agreement. NXP will have the right, either itself or through an independent certified public accountant to examine and audit, at NXP's expense, not more than once a year, and during normal business hours, all such records that may bear upon your compliance with the limited license rights granted above. You must make prompt adjustment to compensate for any errors and/or omissions disclosed by such examination or audit. 22. NOTICES. All notices and communications under this Agreement will be made in writing, and will be effective when received at the following addresses: NXP: NXP B.V. High Tech Campus 60 5656 AG Eindhoven The Netherlands ATTN: Legal Department You: The address provided at registration will be used. 23. RELATIONSHIP OF THE PARTIES. The parties are independent contractors. Nothing in this Agreement will be construed to create any partnership, joint venture, or similar relationship. Neither party is authorized to bind the other to any obligations with third parties. 24. SUCCESSION AND ASSIGNMENT. This Agreement will be binding upon and inure to the benefit of the parties and their permitted successors and assigns. You may not assign this Agreement, or any part of this Agreement, without the prior written approval of NXP, which approval will not be unreasonably withheld or delayed. NXP may assign this Agreement, or any part of this Agreement, in its sole discretion. + APPENDIX A Other License Grants and Restrictions: The Licensed Software may include some or all of the following software, which is either 1) Third Party Software or 2) NXP proprietary software subject to different terms than those in the Agreement. If the Software Content Register that accompanies the Licensed Software identifies any of the following Third Party Software or specific components of the NXP proprietary software, the following terms apply to the extent they deviate from the terms in the Agreement: Amazon: Use of the Amazon software constitutes your acceptance of the terms of the Amazon Program Materials License Agreement (including the AVS Component Schedule, if applicable), located at https://developer.amazon.com/support/legal/pml. All Amazon software is hereby designated "Amazon confidential". Amazon is a third-party beneficiary to this Agreement with respect to the Amazon software. Amphion Semiconductor Ltd.: Distribution of Amphion software must be a part of, or embedded within, Authorized Systems that include an Amphion Video Decoder. Aquantia Corp.: You may use Aquantia's API binaries solely to flash the API software to an NXP Product which mates with an Aquantia device. Atheros: Use of Atheros software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from Atheros. ATI (AMD): Distribution of ATI software must be a part of, or embedded within, Authorized Systems that include a ATI graphics processor core. Broadcom Corporation: Your use of Broadcom Corporation software is restricted to Authorized Systems that incorporate a compatible integrated circuit device manufactured or sold by Broadcom. Cadence Design Systems: Use of Cadence audio codec software is limited to distribution only of one copy per single NXP Product. The license granted herein to the Cadence Design Systems HiFi aacPlus Audio Decoder software does not include a license to the AAC family of technologies which you or your customer may need to obtain. Configuration tool outputs may only be distributed by licensees of the relevant Cadence SDK and distribution is limited to distribution of one copy embedded in a single NXP Product. Cirque Corporation: Use of Cirque Corporation technology is limited to evaluation, demonstration, or certification testing only. Permitted distributions must be similarly limited. Further rights, including but not limited to ANY commercial distribution rights, must be obtained directly from Cirque Corporation. Coding Technologies (Dolby Labs): Use of CTS software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained from Dolby Laboratories. CSR: Use of Cambridge Silicon Radio, Inc. ("CSR") software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from CSR. Crank: Use of Crank Software Inc. software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from Crank Software Inc. Cypress Semiconductor Corporation: WWD RTOS source code may only be used in accordance with the Cypress IOT Community License Agreement located at https://community.cypress.com/terms-and-conditions!input.jspa?displayOnly=true. Embedded Systems Academy GmbH (EmSA): Any use of Micro CANopen Plus is subject to the acceptance of the license conditions described in the LICENSE.INFO file distributed with all example projects and in the documentation and the additional clause described below. Clause 1: Micro CANopen Plus may not be used for any competitive or comparative purpose, including the publication of any form of run time or compile time metric, without the express permission of EmSA. Future Technology Devices International Ltd.: Future Technology Devices International software must be used consistent with the terms found here: http://www.ftdichip.com/Drivers/FTDriverLicenceTerms.htm Global Locate (Broadcom Corporation): Use of Global Locate, Inc. software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained from Global Locate. Microsoft: Except for Microsoft PlayReady software, if the Licensed Software includes software owned by Microsoft Corporation ("Microsoft"), it is subject to the terms of your license with Microsoft (the "Microsoft Underlying Licensed Software") and as such, NXP grants no license to you, beyond evaluation and demonstration in connection with NXP processors, in the Microsoft Underlying Licensed Software. You must separately obtain rights beyond evaluation and demonstration in connection with the Microsoft Underlying Licensed Software from Microsoft. Microsoft does not provide support services for the components provided to you through this Agreement. If you have any questions or require technical assistance, please contact NXP. Microsoft Corporation is a third party beneficiary to this Agreement with the right to enforce the terms of this Agreement. TO THE MAXIMUM EXTENT PERMITTED BY LAW, MICROSOFT AND ITS AFFILIATES DISCLAIM ANY WARRANTIES FOR THE MICROSOFT UNDERLYING LICENSED SOFTWARE. TO THE MAXIMUM EXTENT PERMITTED BY LAW, NEITHER MICROSOFT NOR ITS AFFILIATES WILL BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR ANY DIRECT, INCIDENTAL, SPECIAL, INDIRECT, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR ANY LOSS OF USE, LOSS OF TIME, INCONVENIENCE, COMMERCIAL LOSS, OR LOST PROFITS, SAVINGS, OR REVENUES, ARISING FROM THE FROM THE USE OF THE MICROSOFT UNDERLYING LICENSED SOFTWARE. With respect to the Microsoft PlayReady software, you will have the license rights granted in Section 2, provided that you may not use the Microsoft PlayReady software unless you have entered into a Microsoft PlayReady Master Agreement and license directly with Microsoft. MindTree: Notwithstanding the terms contained in Section 2.3 (a), if the Licensed Software includes proprietary software of MindTree in source code format, Licensee may make modifications and create derivative works only to the extent necessary for debugging of the Licensed Software. MM SOLUTIONS AD: Use of MM SOLUTIONS AEC (Auto Exposure Control) and AWB (Auto White Balance) software is limited to demonstration, testing, and evaluation only. In no event may Licensee distribute or sublicense the MM SOLUTIONS software. Further rights must be obtained directly from MM SOLUTIONS. MPEG LA: Use of MPEG LA audio or video codec technology is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from MPEG LA. MQX RTOS Code: MQX RTOS source code may not be re-distributed by any NXP Licensee under any circumstance, even by a signed written amendment to this Agreement. NXP Wireless Charging Library: License to the Software is limited to use in inductive coupling or wireless charging applications Opus: Use of Opus software must be consistent with the terms of the Opus license which can be found at: http://www.opus-codec.org/license/ Oracle JRE (Java): The Oracle JRE must be used consistent with terms found here: http://java.com/license P&E Micro: P&E Software must be used consistent with the terms found here: http://www.pemicro.com/licenses/gdbserver/license_gdb.pdf Pro Design Electronic: Licensee may not modify, create derivative works based on, or copy the Pro Design software, documentation, hardware execution key or the accompanying materials. Licensee shall not use Pro Design's or any of its licensors names, logos or trademarks to market the Authorized System. Only NXP customers and distributors are permitted to further redistribute the Pro Design software and only as part of an Authorized System which contains the Pro Design software. Qualcomm Atheros, Inc.: Notwithstanding anything in this Agreement, Qualcomm Atheros, Inc. Wi-Fi software must be used strictly in accordance with the Qualcomm Atheros, Inc. Technology License Agreement that accompanies such software. Any other use is expressly prohibited. Real Networks - GStreamer Optimized Real Format Client Code implementation or OpenMax Optimized Real Format Client Code: Use of the GStreamer Optimized Real Format Client Code, or OpenMax Optimized Real Format Client code is restricted to applications in the automotive market. Licensee must be a final manufacturer in good standing with a current license with Real Networks for the commercial use and distribution of products containing the GStreamer Optimized Real Format Client Code implementation or OpenMax Optimized Real Format Client Code Real Time Engineers Ltd.: Any FreeRTOS source code, whether modified or in its original release form, or whether in whole or in part, can only be distributed by you under the terms of version 2 of the GNU General Public License plus this exception. An independent module is a module which is not derived from or based on FreeRTOS. Clause 1: Linking FreeRTOS with other modules is making a combined work based on FreeRTOS. Thus, the terms and conditions of the GNU General Public License V2 cover the whole combination. As a special exception, the copyright holders of FreeRTOS give you permission to link FreeRTOS with independent modules to produce a statically linked executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on FreeRTOS. Clause 2: FreeRTOS may not be used for any competitive or comparative purpose, including the publication of any form of run time or compile time metric, without the express permission of Real Time Engineers Ltd. (this is the norm within the industry and is intended to ensure information accuracy). RivieraWaves SAS (a member of the CEVA, Inc. family of companies): You may not use the RivieraWaves intellectual property licensed under this Agreement if you develop, market, and/or license products similar to such RivieraWaves intellectual property. Such use constitutes a breach of this Agreement. Any such use rights must be obtained directly from RivieraWaves. SanDisk Corporation: If the Licensed Software includes software developed by SanDisk Corporation ("SanDisk"), you must separately obtain the rights to reproduce and distribute this software in source code form from SanDisk. Please follow these easy steps to obtain the license and software: (1) Contact your local SanDisk sales representative to obtain the SanDisk License Agreement. (2) Sign the license agreement. Fax the signed agreement to SanDisk USA marketing department at 408-542-0403. The license will be valid when fully executed by SanDisk. (3) If you have specific questions, please send an email to sales@sandisk.com You may only use the SanDisk Corporation Licensed Software on products compatible with a SanDisk Secure Digital Card. You may not use the SanDisk Corporation Licensed Software on any memory device product. SanDisk retains all rights to any modifications or derivative works to the SanDisk Corporation Licensed Software that you may create. SEGGER Microcontroller - emWin Software: Your use of SEGGER emWin software and components is restricted for development of NXP ARM7, ARM9, Cortex-M0, Cortex-M3, Cortex-M4, Cortex-M33, Cortex-M7, and Cortex-A7 based products only. SEGGER Microcontroller - J-Link/J-Trace Software: Segger software must be used consistent with the terms found here: http://www.segger.com/jlink-software.html Synopsys/Target Compiler Technologies: Your use of the Synopsys/Target Compiler Technologies Licensed Software and related documentation is subject to the following: (1) Duration of the license for the Licensed Software is limited to 12 months, unless otherwise specified in the license file. (2) The Licensed Software is usable by one user at a time on a single designated computer, unless otherwise agreed by Synopsys. (3) Licensed Software and documentation are to be used only on a designated computer at the designated physical address provided by you on the APEX license form. (4) The Licensed Software is not sub-licensable. TARA Systems: Use of TARA Systems GUI technology Embedded Wizard is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from TARA Systems. Texas Instruments: Your use of Texas Instruments Inc. WiLink8 Licensed Software is restricted to NXP SoC based systems that include a compatible connectivity device manufactured by TI. TES Electronic Solutions Germany (TES): TES 3D Surround View software and associated data and documentation may only be used for evaluation purposes and for demonstration to third parties in integrated form on a board package containing an NXP S32V234 device. Licensee may not distribute or sublicense the TES software. Your license to the TES software may be terminated at any time upon notice. Vivante: Distribution of Vivante software must be a part of, or embedded within, Authorized Systems that include a Vivante Graphics Processing Unit. \ No newline at end of file diff --git a/SW-Content-Register.txt b/SW-Content-Register.txt index 677abd4dd..d8dacd794 100644 --- a/SW-Content-Register.txt +++ b/SW-Content-Register.txt @@ -1,6 +1,6 @@ Release Name: MCUXpresso Software Development Kit (SDK) -Release Version: 2.9.0 -Package License: LA_OPT_NXP_Software_License.txt - Additional Distribution License granted, license in Section 2.3 applies +Release Version: 2.9.4 +Package License: LA_OPT_NXP_Software_License.txt - Additional Distribution License, Section 2.3 applies SDK_Peripheral_Driver Name: SDK Peripheral Driver Version: 2.x.x @@ -49,16 +49,6 @@ cmsis Name: CMSIS https://github.com/ARM-software/CMSIS_5/releases/t ag/5.6.0 -cmsis_gpio Name: CMSIS GPIO Interface - Version: 2.0.0 - Outgoing License: BSD-3-Clause - License File: COPYING-BSD-3 - Format: source code - Description: CMSIS Driver style GPIO interface - definition created by NXP. - Location: CMSIS/Driver/Include/Driver_GPIO.h - Origin: NXP (BSD-3-Clause) - SDK_Components Name: SDK components and board peripheral drivers Version: NA Outgoing License: BSD-3-Clause @@ -72,13 +62,12 @@ SDK_Components Name: SDK components and board peripheral drivers freertos Name: FreeRTOS Version: 202007.00.0 Outgoing License: MIT - License File: - rtos/freertos_kernel/License/license.txt + License File: rtos/freertos/LICENSE Format: source code Description: IoT operating system for microcontrollers Location: rtos/freertos - Origin: Amazon (MIT) + Origin: Real Time Engineers, Ltd. (MIT) Url: https://aws.amazon.com/freertos/ FreeRTOS_heap_newlib Name: FreeRTOS Newlib helper @@ -97,51 +86,6 @@ FreeRTOS_heap_newlib Name: FreeRTOS Newlib helper http://www.nadler.com/embedded/newlibAndFreeRTOS.h tml -mmcau Name: mmCAU S/W Library - Version: 2.0.1 - Outgoing License: BSD-3-Clause - License File: COPYING-BSD-3 - Format: source code - Description: S/W library that works with the - memory-mapped cryptographic acceleration unit - present on some MCUXpresso SoCs - Location: middleware/mmcau - Origin: NXP (BSD-3-Clause) - -cmsis_drivers Name: SDK CMSIS Peripheral Drivers - Version: 2.x.x - Outgoing License: Apache License 2.0 - License File: CMSIS/LICENSE.txt - Format: source code - Description: CMSIS Peripheral drivers are designed - to provide hardware independent APIs which make - application reusable across a wide range of - supported microcontroller devices. - Location: devices//cmsis_drivers - Origin: NXP (Apache License 2.0) - -multicore Name: Multicore SDK - Version: 2.9.0 - Outgoing License: BSD-3-Clause - License File: COPYING-BSD-3 - Format: source code - Description: NXP Multicore Software Development - Kit. - Location: middleware/multicore - Origin: NXP (BSD-3-Clause) - -rpmsg_lite Name: RPMsg-Lite - Version: 3.1.1 - Outgoing License: BSD-3-Clause - License File: COPYING-BSD-3 - Format: source code - Description: Open Asymmetric Multi Processing - (OpenAMP) framework project - Location: middleware/multicore/rpmsg_lite - Origin: Mentor Graphics Corporation & community - contributors - Url: https://github.com/NXPmicro/rpmsg-lite - sdmmc Name: SD MMC SDIO Card middleware Version: 2.2.7 Outgoing License: BSC-3-Clause @@ -152,156 +96,71 @@ sdmmc Name: SD MMC SDIO Card middleware Location: middleware/sdmmc Origin: NXP (BSD-3-Clause) -sdmmc_sdspi Name: SD Card middleware - Version: 2.1.4 - Outgoing License: BSC-3-Clause - License File: COPYING-BSD-3 - Format: source code - Description: A software component support access - SD card through spi. - Location: middleware/sdmmc/sdspi - Origin: NXP (BSD-3-Clause) - -segger_systemview Name: Segger SystemView Demo - Version: 2.40a +mbedtls Name: Mbed TLS + Version: 2.16.6 + Outgoing License: Apache-2.0 + License File: middleware/mbedtls/apache-2.0.txt + Format: source code + Description: Cryptographic and SSL/TLS Library + Location: middleware/mbedtls + Origin: ARM(Apache-2.0) - + https://github.com/ARMmbed/mbedtls/releases/tag/mb + edtls-2.16.6 + +lwip Name: lwIP TCP/IP Stack + Version: lwIP git repository (2019-12-12, branch: + master, SHA-1: + 555812dcec38c9a2ef1ef9b31816291549fbf9f8) Outgoing License: BSD-3-Clause - License File: - boards//rtos_examples/visualization/freerto - s_segger_sysview/LICENSE - Format: source code - Description: Segger systemview demo - Location: - boards//rtos_examples/visualization/freerto - s_segger_sysview - Origin: Segger (BSD-3-Clause) - -erpc Name: eRPC - Version: 1.8.0 - Outgoing License: BSD-3-Clause - License File: middleware/multicore/erpc/LICENSE - Format: source code - Description: Embedded Remote Procedure Call - Location: middleware/multicore/erpc - Origin: NXP & community contributors - Url: https://github.com/EmbeddedRPC/erpc - -the_bus_pirate Name: The Bus Pirate - Version: NA - Outgoing License: Open Source - CC0 (Public Domain - Dedication License) - License File: - http://code.google.com/p/the-bus-pirate/ - Format: source code - Description: OS independent serial interface - Location: - middleware/multicore/erpc/erpc_c/port/erpc_serial. - h, - middleware/multicore/erpc/erpc_c/port/erpc_serial. - cpp - Origin: Community - Url: http://code.google.com/p/the-bus-pirate/ - -cpp_template Name: CPP Template - Version: NA - Outgoing License: Open Source - MIT - License File: - middleware/multicore/erpc/erpcgen/src/cpptemplate/ - LICENSE.txt - Format: source code - Description: CPP Template - Location: - middleware/multicore/erpc/erpcgen/src/cpptemplate - Origin: Ryan Ginstrom & Martinho Fernandes - -cpp_option_parser Name: C++ option-parser - Version: NA - Outgoing License: Brad Appleton's license - License File: - http://www.bradapp.com/ftp/src/libs/C++/Options.ta - r.gz , see README file - Format: Plain Text - Description: C++ option-parser - Location: - middleware/multicore/erpc/erpcgen/src/options.cpp - Origin: Brad Appleton bradapp@enteract.com - Url: - http://www.bradapp.com/ftp/src/libs/C++/Options.ht - ml - -Pedometer_Library Name: Pedometer Library - Version: 1.0 - Outgoing License: LA_OPT_NXP_Software_License - License File: - Format: binary library - Description: Pedometer algorithm library for Arm - Cortex M0+ and M4 processors - Location: - middleware/issdk/algorithms/pedometer/lib - Origin: KEYnetik, Inc - -dsp_audio_framework Name: dsp_audio_framework - Version: 2.0 - Outgoing License: MIT - License File: - middleware/dsp/audio_framework/LICENSE.txt - Format: source code - Description: DSP Audio Streamer Framework based on - Xtensa Audio Framework from Cadence Design - Location: middleware/dsp/audio_framework - Origin: Cadence Design Systems, Inc. & NXP - -dsp_nn Name: dsp_nn - Version: 2.2.0 - Outgoing License: Cadence Design Systems License - Agreement - License File: middleware\dsp\nn\nnlib\LICENSE - Format: source code, header files, binary files - Description: DSP Neural Networks Framework based - on Xtensa Neural Networks Library from Cadence - Design - Location: middleware/dsp/nn - Origin: Cadence Design Systems, Inc. & NXP - -naturedsp_hifi4 Name: naturedsp - Version: 4.0.0 - Outgoing License: LA_OPT_NXP_Software_License.txt - - No distribution permitted, license in Section - 2.2 applies. + License File: middleware/lwip/COPYING + Format: source code + Description: A light-weight TCP/IP stack + Location: middleware/lwip + Origin: Swedish Institute of Computer Science + Url: http://savannah.nongnu.org/projects/lwip + +wifi_nxp Name: NXP Wi-Fi driver + Version: 1.3.r20.p1 + Outgoing License: LA_OPT_NXP_Software_License - + Additional distribution license granted - License + in Section 2.3 applies License File: LA_OPT_NXP_Software_License.txt - Format: source code - Description: Digital Signal Processing for Xtensa - HiFi Audio Engines - Location: middleware/dsp/naturedsp/hifi4 - Origin: Cadence Design Systems (Proprietary) - -CRC32-GS Name: CRC32 code + Format: source code, header files, firmware + binaries + Description: NXP Wi-Fi driver and networking + utilities + Location: middleware/wifi + Origin: NXP + +sha224_256 Name: Secure Hash Algorithms SHA-224 and SHA-256 Version: NA - Outgoing License: Public domain - License File: - Format: source code - Description: CRC32 code written by Gary S. Brown - Location: - components/codec/tfa9xxx/vas_tfa_drv/tfa_container - _crc32.c - Origin: Gary S. Brown - -MCMGR Name: MCMGR - Version: 4.1.1 Outgoing License: BSD-3-Clause License File: COPYING-BSD-3 Format: source code - Description: Multicore manager - Location: middleware/multicore/mcmgr - Origin: NXP (BSD-3-Clause) + Description: Secure Hash Algorithms SHA-224 and + SHA-256 implementations + Location: boards\rdmw320_r0\mbedtls_common + Origin: IETF Trust and the persons -bosch_sensor_drivers.lpcxprName: Bosch Sensor drivers -esso54114 Version: NA - Outgoing License: BSD-3-Clause - License File: COPYING-BSD-3 - Format: source code - Description: Bosch Sensor drivers - Location: - boards/lpcxpresso54114/multicore_examples/low_powe - r/sensors - Origin: Bosch Sensortec GmbH - Url: https://github.com/BoschSensortec +boot2 Name: MW3xx device boot loader + Version: 6.0 + Outgoing License: LA_OPT_NXP_Software_License.txt + - Additional distribution license granted - + License in Section 2.3 applies + License file: LA_OPT_NXP_Software_License.txt + Format: binary + Description: MW3xx device boot loader from WMSDK + V6.0.r7.p1 + Location: tools/boot2/boot2.bin + Origin: NXP + +mw_img_conv Name: MW3xx image converter + Version: 1.0.0 + Outgoing License: LA_OPT_NXP_Software_License.txt + - Additional distribution license granted - + License in Section 2.3 applies + License file: LA_OPT_NXP_Software_License.txt + Format: Source, binary + Description: Tool for MW3xx image converter. + Location: tools/mw_img_conv + Origin: NXP diff --git a/all_devices.cmake b/all_devices.cmake index f31a32803..9a8b4b510 100644 --- a/all_devices.cmake +++ b/all_devices.cmake @@ -1,56 +1,56 @@ CMAKE_MINIMUM_REQUIRED (VERSION 3.10.0) # OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") +if(${MCUX_DEVICE} STREQUAL "88MW320") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1052 + ${CMAKE_CURRENT_LIST_DIR}/devices/88MW320 ) - include(all_lib_device_MIMXRT1052) + include(all_lib_device_88MW320) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1064 + ${CMAKE_CURRENT_LIST_DIR}/devices/K32L2A41A ) - include(all_lib_device_MIMXRT1064) + include(all_lib_device_K32L2A41A) endif() -if(${MCUX_DEVICE} STREQUAL "LPC845") +if(${MCUX_DEVICE} STREQUAL "K32L2B31A") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC845 + ${CMAKE_CURRENT_LIST_DIR}/devices/K32L2B31A ) - include(all_lib_device_LPC845) + include(all_lib_device_K32L2B31A) endif() -if(${MCUX_DEVICE} STREQUAL "LPC812") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC812 + ${CMAKE_CURRENT_LIST_DIR}/devices/K32L3A60 ) - include(all_lib_device_LPC812) + include(all_lib_device_K32L3A60_cm4) endif() -if(${MCUX_DEVICE} STREQUAL "MK28FA15") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MK28FA15 + ${CMAKE_CURRENT_LIST_DIR}/devices/K32L3A60 ) - include(all_lib_device_MK28FA15) + include(all_lib_device_K32L3A60_cm0plus) endif() -if(${MCUX_DEVICE} STREQUAL "LPC802") +if(${MCUX_DEVICE} STREQUAL "LPC51U68") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC802 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC51U68 ) - include(all_lib_device_LPC802) + include(all_lib_device_LPC51U68) endif() @@ -72,354 +72,363 @@ if(${MCUX_DEVICE} STREQUAL "LPC54114_cm4") endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") +if(${MCUX_DEVICE} STREQUAL "LPC54628") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8MQ6 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC54628 ) - include(all_lib_device_MIMX8MQ6) + include(all_lib_device_LPC54628) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8MM6") +if(${MCUX_DEVICE} STREQUAL "LPC54S018") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8MM6 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC54S018 ) - include(all_lib_device_MIMX8MM6) + include(all_lib_device_LPC54S018) endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") +if(${MCUX_DEVICE} STREQUAL "LPC54S018M") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKE15Z7 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC54S018M ) - include(all_lib_device_MKE15Z7) + include(all_lib_device_LPC54S018M) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2B31A") +if(${MCUX_DEVICE} STREQUAL "LPC55S16") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/K32L2B31A + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S16 ) - include(all_lib_device_K32L2B31A) + include(all_lib_device_LPC55S16) endif() -if(${MCUX_DEVICE} STREQUAL "MK64F12") +if(${MCUX_DEVICE} STREQUAL "LPC55S28") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MK64F12 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S28 ) - include(all_lib_device_MK64F12) + include(all_lib_device_LPC55S28) endif() -if(${MCUX_DEVICE} STREQUAL "MK66F18") +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core1") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MK66F18 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S69 ) - include(all_lib_device_MK66F18) + include(all_lib_device_LPC55S69_cm33_core1) endif() -if(${MCUX_DEVICE} STREQUAL "MKE16Z4") +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKE16Z4 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S69 ) - include(all_lib_device_MKE16Z4) + include(all_lib_device_LPC55S69_cm33_core0) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") +if(${MCUX_DEVICE} STREQUAL "LPC802") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8QM6 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC802 ) - include(all_lib_device_MIMX8QM6_cm4_core0) + include(all_lib_device_LPC802) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") +if(${MCUX_DEVICE} STREQUAL "LPC804") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8QM6 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC804 ) - include(all_lib_device_MIMX8QM6_cm4_core1) + include(all_lib_device_LPC804) endif() -if(${MCUX_DEVICE} STREQUAL "MKV11Z7") +if(${MCUX_DEVICE} STREQUAL "LPC812") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKV11Z7 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC812 ) - include(all_lib_device_MKV11Z7) + include(all_lib_device_LPC812) endif() -if(${MCUX_DEVICE} STREQUAL "MKV31F51212") +if(${MCUX_DEVICE} STREQUAL "LPC824") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKV31F51212 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC824 ) - include(all_lib_device_MKV31F51212) + include(all_lib_device_LPC824) endif() -if(${MCUX_DEVICE} STREQUAL "LPC54628") +if(${MCUX_DEVICE} STREQUAL "LPC845") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC54628 + ${CMAKE_CURRENT_LIST_DIR}/devices/LPC845 ) - include(all_lib_device_LPC54628) + include(all_lib_device_LPC845) endif() -if(${MCUX_DEVICE} STREQUAL "MK22F51212") +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MK22F51212 + ${CMAKE_CURRENT_LIST_DIR}/devices/MCIMX7U5 ) - include(all_lib_device_MK22F51212) + include(all_lib_device_MCIMX7U5) endif() -if(${MCUX_DEVICE} STREQUAL "MKE06Z4") +if(${MCUX_DEVICE} STREQUAL "MIMX8MM6") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKE06Z4 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8MM6 ) - include(all_lib_device_MKE06Z4) + include(all_lib_device_MIMX8MM6) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") +if(${MCUX_DEVICE} STREQUAL "MIMX8MN6") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8QX6 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8MN6 ) - include(all_lib_device_MIMX8QX6) + include(all_lib_device_MIMX8MN6) endif() -if(${MCUX_DEVICE} STREQUAL "LPC824") +if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC824 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8MQ6 ) - include(all_lib_device_LPC824) + include(all_lib_device_MIMX8MQ6) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") +if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1021 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8QM6 ) - include(all_lib_device_MIMXRT1021) + include(all_lib_device_MIMX8QM6_cm4_core0) endif() -if(${MCUX_DEVICE} STREQUAL "MKE02Z4") +if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKE02Z4 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8QM6 ) - include(all_lib_device_MKE02Z4) + include(all_lib_device_MIMX8QM6_cm4_core1) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S16") +if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S16 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8QX6 ) - include(all_lib_device_LPC55S16) + include(all_lib_device_MIMX8QX6) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1062 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1011 ) - include(all_lib_device_MIMXRT1062) + include(all_lib_device_MIMXRT1011) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8MN6") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMX8MN6 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1015 ) - include(all_lib_device_MIMX8MN6) + include(all_lib_device_MIMXRT1015) endif() -if(${MCUX_DEVICE} STREQUAL "LPC54S018") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC54S018 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1021 ) - include(all_lib_device_LPC54S018) + include(all_lib_device_MIMXRT1021) endif() -if(${MCUX_DEVICE} STREQUAL "MKE04Z4") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKE04Z4 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1024 ) - include(all_lib_device_MKE04Z4) + include(all_lib_device_MIMXRT1024) endif() -if(${MCUX_DEVICE} STREQUAL "LPC804") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC804 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1052 ) - include(all_lib_device_LPC804) + include(all_lib_device_MIMXRT1052) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/K32L3A60 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1062 ) - include(all_lib_device_K32L3A60_cm4) + include(all_lib_device_MIMXRT1062) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/K32L3A60 + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1064 ) - include(all_lib_device_K32L3A60_cm0plus) + include(all_lib_device_MIMXRT1064) endif() -if(${MCUX_DEVICE} STREQUAL "LPC54S018M") +if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC54S018M + ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT685S ) - include(all_lib_device_LPC54S018M) + include(all_lib_device_MIMXRT685S_cm33) endif() -if(${MCUX_DEVICE} STREQUAL "MKM35Z7") +if(${MCUX_DEVICE} STREQUAL "MK22F51212") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKM35Z7 + ${CMAKE_CURRENT_LIST_DIR}/devices/MK22F51212 ) - include(all_lib_device_MKM35Z7) + include(all_lib_device_MK22F51212) endif() -if(${MCUX_DEVICE} STREQUAL "LPC51U68") +if(${MCUX_DEVICE} STREQUAL "MK28FA15") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC51U68 + ${CMAKE_CURRENT_LIST_DIR}/devices/MK28FA15 ) - include(all_lib_device_LPC51U68) + include(all_lib_device_MK28FA15) endif() -if(${MCUX_DEVICE} STREQUAL "MKL27Z644") +if(${MCUX_DEVICE} STREQUAL "MK64F12") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MKL27Z644 + ${CMAKE_CURRENT_LIST_DIR}/devices/MK64F12 ) - include(all_lib_device_MKL27Z644) + include(all_lib_device_MK64F12) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core1") +if(${MCUX_DEVICE} STREQUAL "MK66F18") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S69 + ${CMAKE_CURRENT_LIST_DIR}/devices/MK66F18 ) - include(all_lib_device_LPC55S69_cm33_core1) + include(all_lib_device_MK66F18) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") +if(${MCUX_DEVICE} STREQUAL "MKE02Z4") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S69 + ${CMAKE_CURRENT_LIST_DIR}/devices/MKE02Z4 ) - include(all_lib_device_LPC55S69_cm33_core0) + include(all_lib_device_MKE02Z4) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") +if(${MCUX_DEVICE} STREQUAL "MKE04Z4") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MCIMX7U5 + ${CMAKE_CURRENT_LIST_DIR}/devices/MKE04Z4 ) - include(all_lib_device_MCIMX7U5) + include(all_lib_device_MKE04Z4) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") +if(${MCUX_DEVICE} STREQUAL "MKE06Z4") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1024 + ${CMAKE_CURRENT_LIST_DIR}/devices/MKE06Z4 ) - include(all_lib_device_MIMXRT1024) + include(all_lib_device_MKE06Z4) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1011 + ${CMAKE_CURRENT_LIST_DIR}/devices/MKE15Z7 ) - include(all_lib_device_MIMXRT1011) + include(all_lib_device_MKE15Z7) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S28") +if(${MCUX_DEVICE} STREQUAL "MKE16Z4") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/LPC55S28 + ${CMAKE_CURRENT_LIST_DIR}/devices/MKE16Z4 ) - include(all_lib_device_LPC55S28) + include(all_lib_device_MKE16Z4) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") +if(${MCUX_DEVICE} STREQUAL "MKL27Z644") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/K32L2A41A + ${CMAKE_CURRENT_LIST_DIR}/devices/MKL27Z644 ) - include(all_lib_device_K32L2A41A) + include(all_lib_device_MKL27Z644) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") +if(${MCUX_DEVICE} STREQUAL "MKM35Z7") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT685S + ${CMAKE_CURRENT_LIST_DIR}/devices/MKM35Z7 ) - include(all_lib_device_MIMXRT685S_cm33) + include(all_lib_device_MKM35Z7) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") +if(${MCUX_DEVICE} STREQUAL "MKV11Z7") list(APPEND CMAKE_MODULE_PATH - ${CMAKE_CURRENT_LIST_DIR}/devices/MIMXRT1015 + ${CMAKE_CURRENT_LIST_DIR}/devices/MKV11Z7 ) - include(all_lib_device_MIMXRT1015) + include(all_lib_device_MKV11Z7) + +endif() + +if(${MCUX_DEVICE} STREQUAL "MKV31F51212") + list(APPEND CMAKE_MODULE_PATH + ${CMAKE_CURRENT_LIST_DIR}/devices/MKV31F51212 + ) + + include(all_lib_device_MKV31F51212) endif() diff --git a/boards/rdmw320_r0/board.c b/boards/rdmw320_r0/board.c new file mode 100644 index 000000000..9c4f7ed0f --- /dev/null +++ b/boards/rdmw320_r0/board.c @@ -0,0 +1,40 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include "fsl_common.h" +#include "fsl_debug_console.h" +#include "fsl_clock.h" +#include "board.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ +/* Initialize debug console. */ +void BOARD_InitDebugConsole(void) +{ + uint32_t uartClkSrcFreq; + + /* attach FAST clock to UART0 (debug console) */ + CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH); + + uartClkSrcFreq = BOARD_DEBUG_UART_CLK_FREQ; + + DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE, uartClkSrcFreq); +} diff --git a/boards/rdmw320_r0/board.h b/boards/rdmw320_r0/board.h new file mode 100644 index 000000000..7b7367572 --- /dev/null +++ b/boards/rdmw320_r0/board.h @@ -0,0 +1,113 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include "clock_config.h" +#include "fsl_common.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/*! @brief The board name */ +#define BOARD_NAME "RDMW320-R0" + +/*! @brief Macro to judge XIP */ +#define BOARD_IS_XIP() \ + (((uint32_t)BOARD_InitDebugConsole >= 0x1F000000U) && ((uint32_t)BOARD_InitDebugConsole < 0x20000000U)) + +/*! @brief The UART to use for debug messages. */ +#define BOARD_DEBUG_UART_TYPE kSerialPort_Uart +#define BOARD_DEBUG_UART_BASEADDR (uint32_t) UART0 +#define BOARD_DEBUG_UART_INSTANCE 0U +#define BOARD_DEBUG_UART UART0 +#define BOARD_DEBUG_UART_CLK_FREQ CLOCK_GetUartClkFreq(0) +#define BOARD_DEBUG_UART_CLK_ATTACH kSYS_CLK_to_FAST_UART0 +#define BOARD_DEBUG_UART_CLK_DIV kCLOCK_DivUartFast +#define BOARD_UART_IRQ_HANDLER UART0_IRQHandler +#define BOARD_UART_IRQ UART0_IRQn + +#ifndef BOARD_DEBUG_UART_BAUDRATE +#define BOARD_DEBUG_UART_BAUDRATE 115200 +#endif /* BOARD_DEBUG_UART_BAUDRATE */ + +/* Board led color mapping */ +#define LOGIC_LED_ON 0U +#define LOGIC_LED_OFF 1U + +#ifndef BOARD_LED_AMBER_GPIO +#define BOARD_LED_AMBER_GPIO GPIO +#endif +#ifndef BOARD_LED_AMBER_GPIO_PIN +#define BOARD_LED_AMBER_GPIO_PIN 40U +#endif + +#ifndef BOARD_LED_YELLOW_GPIO +#define BOARD_LED_YELLOW_GPIO GPIO +#endif +#ifndef BOARD_LED_YELLOW_GPIO_PIN +#define BOARD_LED_YELLOW_GPIO_PIN 41U +#endif + +#define LED_AMBER_INIT(output) \ + GPIO_PinInit(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN, \ + &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_AMBER */ +#define LED_AMBER_ON() GPIO_PinClear(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN) /*!< Turn on target LED_AMBER */ +#define LED_AMBER_OFF() GPIO_PinSet(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN) /*!< Turn off target LED_AMBER */ +#define LED_AMBER_TOGGLE() \ + GPIO_PinToggle(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN) /*!< Toggle on target LED_AMBER */ + +#define LED_YELLOW_INIT(output) \ + GPIO_PinInit(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN, \ + &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_YELLOW */ +#define LED_YELLOW_ON() \ + GPIO_PinClear(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN) /*!< Turn on target LED_YELLOW */ +#define LED_YELLOW_OFF() \ + GPIO_PinSet(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN) /*!< Turn off target LED_YELLOW */ +#define LED_YELLOW_TOGGLE() \ + GPIO_PinToggle(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN) /*!< Toggle on target LED_YELLOW */ + +/* Board SW PIN */ +#ifndef BOARD_SW1_GPIO +#define BOARD_SW1_GPIO GPIO +#endif +#ifndef BOARD_SW1_GPIO_PIN +#define BOARD_SW1_GPIO_PIN 24U +#endif +#define BOARD_SW1_IRQ GPIO_IRQn +#define BOARD_SW1_IRQ_HANDLER GPIO_IRQHandler +#define BOARD_SW1_NAME "SW1" + +#ifndef BOARD_SW2_GPIO +#define BOARD_SW2_GPIO GPIO +#endif +#ifndef BOARD_SW2_GPIO_PIN +#define BOARD_SW2_GPIO_PIN 26U +#endif +#define BOARD_SW2_IRQ GPIO_IRQn +#define BOARD_SW2_IRQ_HANDLER GPIO_IRQHandler +#define BOARD_SW2_NAME "SW2" + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/******************************************************************************* + * API + ******************************************************************************/ + +void BOARD_InitDebugConsole(void); + +/* Only used for mbedtls entropy, implemented in board_hash.c */ +void BOARD_GetHash(uint8_t *buf, uint32_t *len); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif /* _BOARD_H_ */ diff --git a/boards/rdmw320_r0/clock_config.c b/boards/rdmw320_r0/clock_config.c new file mode 100644 index 000000000..a354d11e3 --- /dev/null +++ b/boards/rdmw320_r0/clock_config.c @@ -0,0 +1,137 @@ +/* + * Copyright 2020 NXP + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_power.h" +#include "fsl_clock.h" +#include "clock_config.h" +#include "board.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* System clock frequency. */ +extern uint32_t SystemCoreClock; + +/******************************************************************************* + ************************ BOARD_InitBootClocks function ************************ + ******************************************************************************/ +void BOARD_InitBootClocks(void) +{ + BOARD_BootClockRUN(); +} + +/******************************************************************************* + ********************** Configuration BOARD_BootClockRUN *********************** + ******************************************************************************/ +/******************************************************************************* + * Variables for BOARD_BootClockRUN configuration + ******************************************************************************/ +const clock_sfll_config_t g_sfllConfig_BOARD_BootClockRUN = { + .sfllSrc = kCLOCK_SFllSrcMainXtal, /* XTAL clock */ + .refDiv = 0x60U, + .fbDiv = 0xFAU, + .kvco = 0x1U, + .postDiv = 0x0U +}; + +/******************************************************************************* + * Code for BOARD_BootClockRUN configuration + ******************************************************************************/ +static void BOARD_DeinitFlashC(void) +{ + uint32_t reg = FLASHC->FCCR; + + /* Disable cache */ + reg &= ~FLASHC_FCCR_CACHE_EN_MASK; + FLASHC->FCCR = reg; + /* Set CMD_TYPE to exit continuous read mode */ + reg = (reg & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(0xCU); + FLASHC->FCCR = reg ; + /* Wait exit done */ + while ((FLASHC->FCSR & FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) == 0U) + { + } + /* Clear exit done flag */ + FLASHC->FCSR = FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK; + /* Set pad mux to QSPI */ + FLASHC->FCCR &= ~FLASHC_FCCR_FLASHC_PAD_EN_MASK; +} + +static void BOARD_InitFlashC(void) +{ + uint32_t reg = FLASHC->FCCR; + + /* Set pad mux to FLASHC */ + reg |= FLASHC_FCCR_FLASHC_PAD_EN_MASK; + FLASHC->FCCR = reg; + + /* Set CMD_TYPE to continuous read mode */ + reg = (reg & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(0x6U); + FLASHC->FCCR = reg ; + /* Enable cache */ + reg |= FLASHC_FCCR_CACHE_EN_MASK; + FLASHC->FCCR = reg; +} + +void BOARD_BootClockRUN(void) +{ + POWER_PowerOnVddioPad(kPOWER_VddIoAon); + POWER_PowerOnVddioPad(kPOWER_VddIo0); + POWER_PowerOnVddioPad(kPOWER_VddIo1); + POWER_PowerOnVddioPad(kPOWER_VddIo2); + POWER_PowerOnVddioPad(kPOWER_VddIo3); + + if (BOARD_IS_XIP()) + { + /* Stop flash controller before changing clock */ + BOARD_DeinitFlashC(); + } + /* Enable RC32M. */ + CLOCK_EnableClock(kCLOCK_Rc32m); + CLOCK_EnableRC32M(false); + + /* Set the PMU clock divider to 1 */ + CLOCK_SetClkDiv(kCLOCK_DivPmu, 1U); + + /* Set external Xtal frequency to clock driver */ + CLOCK_SetMainXtalFreq(CLK_MAINXTAL_CLK); + + /* Enable System OSC 38.4M. */ + CLOCK_EnableRefClk(kCLOCK_RefClk_SYS); + + /* Initialize SFLL to 200M. */ + CLOCK_InitSFll(&g_sfllConfig_BOARD_BootClockRUN); + + /* Set dividers */ + CLOCK_SetClkDiv(kCLOCK_DivApb0, 2U); + CLOCK_SetClkDiv(kCLOCK_DivApb1, 2U); + CLOCK_SetClkDiv(kCLOCK_DivPmu, 4U); + + /* Switch system clock source to SFLL before RC32M calibration */ + CLOCK_SetSysClkSource(kCLOCK_SysClkSrcSFll); + + CLOCK_SetClkDiv(kCLOCK_DivQspi, 4U); + + /* Calibrate RC32M */ + CLOCK_CalibrateRC32M(true, 0U); + /* RC32M enabled, controller clock can be gated. */ + CLOCK_DisableClock(kCLOCK_Rc32m); + + /* Reset the PMU clock divider to 1 */ + CLOCK_SetClkDiv(kCLOCK_DivPmu, 1U); + + if (BOARD_IS_XIP()) + { + /* Restart flash controller for XIP */ + BOARD_InitFlashC(); + } + /* Set SystemCoreClock variable. */ + SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK; +} diff --git a/boards/rdmw320_r0/clock_config.h b/boards/rdmw320_r0/clock_config.h new file mode 100644 index 000000000..d2397b9ff --- /dev/null +++ b/boards/rdmw320_r0/clock_config.h @@ -0,0 +1,60 @@ +/* + * Copyright 2020 NXP + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _CLOCK_CONFIG_H_ +#define _CLOCK_CONFIG_H_ + +#include "fsl_common.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#define BOARD_XTAL_SYS_CLK_HZ 384000000U /*!< Board xtal frequency in Hz */ + +/******************************************************************************* + ************************ BOARD_InitBootClocks function ************************ + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +/*! + * @brief This function executes default configuration of clocks. + * + */ +void BOARD_InitBootClocks(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +/******************************************************************************* + ********************** Configuration BOARD_BootClockRUN *********************** + ******************************************************************************/ +/******************************************************************************* + * Definitions for BOARD_BootClockRUN configuration + ******************************************************************************/ +#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 200000000U /*!< Core clock frequency: 200000000Hz */ + +/******************************************************************************* + * API for BOARD_BootClockRUN configuration + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +/*! + * @brief This function executes configuration of clocks. + * + */ +void BOARD_BootClockRUN(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +#endif /* _CLOCK_CONFIG_H_ */ diff --git a/boards/rdmw320_r0/project_template/board.c b/boards/rdmw320_r0/project_template/board.c new file mode 100644 index 000000000..9c4f7ed0f --- /dev/null +++ b/boards/rdmw320_r0/project_template/board.c @@ -0,0 +1,40 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include "fsl_common.h" +#include "fsl_debug_console.h" +#include "fsl_clock.h" +#include "board.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ +/* Initialize debug console. */ +void BOARD_InitDebugConsole(void) +{ + uint32_t uartClkSrcFreq; + + /* attach FAST clock to UART0 (debug console) */ + CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH); + + uartClkSrcFreq = BOARD_DEBUG_UART_CLK_FREQ; + + DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE, uartClkSrcFreq); +} diff --git a/boards/rdmw320_r0/project_template/board.h b/boards/rdmw320_r0/project_template/board.h new file mode 100644 index 000000000..7b7367572 --- /dev/null +++ b/boards/rdmw320_r0/project_template/board.h @@ -0,0 +1,113 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include "clock_config.h" +#include "fsl_common.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/*! @brief The board name */ +#define BOARD_NAME "RDMW320-R0" + +/*! @brief Macro to judge XIP */ +#define BOARD_IS_XIP() \ + (((uint32_t)BOARD_InitDebugConsole >= 0x1F000000U) && ((uint32_t)BOARD_InitDebugConsole < 0x20000000U)) + +/*! @brief The UART to use for debug messages. */ +#define BOARD_DEBUG_UART_TYPE kSerialPort_Uart +#define BOARD_DEBUG_UART_BASEADDR (uint32_t) UART0 +#define BOARD_DEBUG_UART_INSTANCE 0U +#define BOARD_DEBUG_UART UART0 +#define BOARD_DEBUG_UART_CLK_FREQ CLOCK_GetUartClkFreq(0) +#define BOARD_DEBUG_UART_CLK_ATTACH kSYS_CLK_to_FAST_UART0 +#define BOARD_DEBUG_UART_CLK_DIV kCLOCK_DivUartFast +#define BOARD_UART_IRQ_HANDLER UART0_IRQHandler +#define BOARD_UART_IRQ UART0_IRQn + +#ifndef BOARD_DEBUG_UART_BAUDRATE +#define BOARD_DEBUG_UART_BAUDRATE 115200 +#endif /* BOARD_DEBUG_UART_BAUDRATE */ + +/* Board led color mapping */ +#define LOGIC_LED_ON 0U +#define LOGIC_LED_OFF 1U + +#ifndef BOARD_LED_AMBER_GPIO +#define BOARD_LED_AMBER_GPIO GPIO +#endif +#ifndef BOARD_LED_AMBER_GPIO_PIN +#define BOARD_LED_AMBER_GPIO_PIN 40U +#endif + +#ifndef BOARD_LED_YELLOW_GPIO +#define BOARD_LED_YELLOW_GPIO GPIO +#endif +#ifndef BOARD_LED_YELLOW_GPIO_PIN +#define BOARD_LED_YELLOW_GPIO_PIN 41U +#endif + +#define LED_AMBER_INIT(output) \ + GPIO_PinInit(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN, \ + &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_AMBER */ +#define LED_AMBER_ON() GPIO_PinClear(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN) /*!< Turn on target LED_AMBER */ +#define LED_AMBER_OFF() GPIO_PinSet(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN) /*!< Turn off target LED_AMBER */ +#define LED_AMBER_TOGGLE() \ + GPIO_PinToggle(BOARD_LED_AMBER_GPIO, BOARD_LED_AMBER_GPIO_PIN) /*!< Toggle on target LED_AMBER */ + +#define LED_YELLOW_INIT(output) \ + GPIO_PinInit(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN, \ + &(gpio_pin_config_t){kGPIO_DigitalOutput, (output)}) /*!< Enable target LED_YELLOW */ +#define LED_YELLOW_ON() \ + GPIO_PinClear(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN) /*!< Turn on target LED_YELLOW */ +#define LED_YELLOW_OFF() \ + GPIO_PinSet(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN) /*!< Turn off target LED_YELLOW */ +#define LED_YELLOW_TOGGLE() \ + GPIO_PinToggle(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN) /*!< Toggle on target LED_YELLOW */ + +/* Board SW PIN */ +#ifndef BOARD_SW1_GPIO +#define BOARD_SW1_GPIO GPIO +#endif +#ifndef BOARD_SW1_GPIO_PIN +#define BOARD_SW1_GPIO_PIN 24U +#endif +#define BOARD_SW1_IRQ GPIO_IRQn +#define BOARD_SW1_IRQ_HANDLER GPIO_IRQHandler +#define BOARD_SW1_NAME "SW1" + +#ifndef BOARD_SW2_GPIO +#define BOARD_SW2_GPIO GPIO +#endif +#ifndef BOARD_SW2_GPIO_PIN +#define BOARD_SW2_GPIO_PIN 26U +#endif +#define BOARD_SW2_IRQ GPIO_IRQn +#define BOARD_SW2_IRQ_HANDLER GPIO_IRQHandler +#define BOARD_SW2_NAME "SW2" + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/******************************************************************************* + * API + ******************************************************************************/ + +void BOARD_InitDebugConsole(void); + +/* Only used for mbedtls entropy, implemented in board_hash.c */ +void BOARD_GetHash(uint8_t *buf, uint32_t *len); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif /* _BOARD_H_ */ diff --git a/boards/rdmw320_r0/project_template/clock_config.c b/boards/rdmw320_r0/project_template/clock_config.c new file mode 100644 index 000000000..4599a83b1 --- /dev/null +++ b/boards/rdmw320_r0/project_template/clock_config.c @@ -0,0 +1,135 @@ +/* + * Copyright 2020 NXP + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_power.h" +#include "fsl_clock.h" +#include "clock_config.h" +#include "board.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* System clock frequency. */ +extern uint32_t SystemCoreClock; + +/******************************************************************************* + ************************ BOARD_InitBootClocks function ************************ + ******************************************************************************/ +void BOARD_InitBootClocks(void) +{ + BOARD_BootClockRUN(); +} + +/******************************************************************************* + ********************** Configuration BOARD_BootClockRUN *********************** + ******************************************************************************/ +/******************************************************************************* + * Variables for BOARD_BootClockRUN configuration + ******************************************************************************/ +const clock_sfll_config_t g_sfllConfig_BOARD_BootClockRUN = { + .sfllSrc = kCLOCK_SFllSrcMainXtal, /* XTAL clock */ + .refDiv = 0x60U, + .fbDiv = 0xFAU, + .kvco = 0x1U, + .postDiv = 0x0U +}; + +/******************************************************************************* + * Code for BOARD_BootClockRUN configuration + ******************************************************************************/ +static void BOARD_DeinitFlashC(void) +{ + uint32_t reg = FLASHC->FCCR; + + /* Disable cache */ + reg &= ~FLASHC_FCCR_CACHE_EN_MASK; + FLASHC->FCCR = reg; + /* Set CMD_TYPE to exit continuous read mode */ + reg = (reg & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(0xCU); + FLASHC->FCCR = reg ; + /* Wait exit done */ + while ((FLASHC->FCSR & FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) == 0U) + { + } + /* Clear exit done flag */ + FLASHC->FCSR = FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK; + /* Set pad mux to QSPI */ + FLASHC->FCCR &= ~FLASHC_FCCR_FLASHC_PAD_EN_MASK; +} + +static void BOARD_InitFlashC(void) +{ + uint32_t reg = FLASHC->FCCR; + + /* Set pad mux to FLASHC */ + reg |= FLASHC_FCCR_FLASHC_PAD_EN_MASK; + FLASHC->FCCR = reg; + + /* Set CMD_TYPE to continuous read mode */ + reg = (reg & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(0x6U); + FLASHC->FCCR = reg ; + /* Enable cache */ + reg |= FLASHC_FCCR_CACHE_EN_MASK; + FLASHC->FCCR = reg; +} + +void BOARD_BootClockRUN(void) +{ + POWER_PowerOnVddioPad(kPOWER_VddIoAon); + POWER_PowerOnVddioPad(kPOWER_VddIo0); + POWER_PowerOnVddioPad(kPOWER_VddIo1); + POWER_PowerOnVddioPad(kPOWER_VddIo2); + POWER_PowerOnVddioPad(kPOWER_VddIo3); + + if (BOARD_IS_XIP()) + { + /* Stop flash controller before changing clock */ + BOARD_DeinitFlashC(); + } + /* Enable RC32M. */ + CLOCK_EnableClock(kCLOCK_Rc32m); + CLOCK_EnableRC32M(false); + + /* Set the PMU clock divider to 1 */ + CLOCK_SetClkDiv(kCLOCK_DivPmu, 1U); + + /* Set external Xtal frequency to clock driver */ + CLOCK_SetMainXtalFreq(CLK_MAINXTAL_CLK); + + /* Enable System OSC 38.4M. */ + CLOCK_EnableRefClk(kCLOCK_RefClk_SYS); + + /* Initialize SFLL to 200M. */ + CLOCK_InitSFll(&g_sfllConfig_BOARD_BootClockRUN); + + /* Set dividers */ + CLOCK_SetClkDiv(kCLOCK_DivApb0, 2U); + CLOCK_SetClkDiv(kCLOCK_DivApb1, 2U); + CLOCK_SetClkDiv(kCLOCK_DivPmu, 4U); + + /* Switch system clock source to SFLL before RC32M calibration */ + CLOCK_SetSysClkSource(kCLOCK_SysClkSrcSFll); + + /* Calibrate RC32M */ + CLOCK_CalibrateRC32M(true, 0U); + /* RC32M enabled, controller clock can be gated. */ + CLOCK_DisableClock(kCLOCK_Rc32m); + + /* Reset the PMU clock divider to 1 */ + CLOCK_SetClkDiv(kCLOCK_DivPmu, 1U); + + if (BOARD_IS_XIP()) + { + /* Restart flash controller for XIP */ + BOARD_InitFlashC(); + } + /* Set SystemCoreClock variable. */ + SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK; +} diff --git a/boards/rdmw320_r0/project_template/clock_config.h b/boards/rdmw320_r0/project_template/clock_config.h new file mode 100644 index 000000000..d2397b9ff --- /dev/null +++ b/boards/rdmw320_r0/project_template/clock_config.h @@ -0,0 +1,60 @@ +/* + * Copyright 2020 NXP + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _CLOCK_CONFIG_H_ +#define _CLOCK_CONFIG_H_ + +#include "fsl_common.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#define BOARD_XTAL_SYS_CLK_HZ 384000000U /*!< Board xtal frequency in Hz */ + +/******************************************************************************* + ************************ BOARD_InitBootClocks function ************************ + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +/*! + * @brief This function executes default configuration of clocks. + * + */ +void BOARD_InitBootClocks(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +/******************************************************************************* + ********************** Configuration BOARD_BootClockRUN *********************** + ******************************************************************************/ +/******************************************************************************* + * Definitions for BOARD_BootClockRUN configuration + ******************************************************************************/ +#define BOARD_BOOTCLOCKRUN_CORE_CLOCK 200000000U /*!< Core clock frequency: 200000000Hz */ + +/******************************************************************************* + * API for BOARD_BootClockRUN configuration + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +/*! + * @brief This function executes configuration of clocks. + * + */ +void BOARD_BootClockRUN(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +#endif /* _CLOCK_CONFIG_H_ */ diff --git a/boards/rdmw320_r0/project_template/peripherals.c b/boards/rdmw320_r0/project_template/peripherals.c new file mode 100644 index 000000000..ade3c7f73 --- /dev/null +++ b/boards/rdmw320_r0/project_template/peripherals.c @@ -0,0 +1,25 @@ +/* + * Copyright 2020 NXP. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/*********************************************************************************************************************** + * Included files + **********************************************************************************************************************/ +#include "peripherals.h" + +/*********************************************************************************************************************** + * Initialization functions + **********************************************************************************************************************/ +void BOARD_InitPeripherals(void) +{ +} + +/*********************************************************************************************************************** + * BOARD_InitBootPeripherals function + **********************************************************************************************************************/ +void BOARD_InitBootPeripherals(void) +{ + BOARD_InitPeripherals(); +} diff --git a/boards/rdmw320_r0/project_template/peripherals.h b/boards/rdmw320_r0/project_template/peripherals.h new file mode 100644 index 000000000..4c8f25acf --- /dev/null +++ b/boards/rdmw320_r0/project_template/peripherals.h @@ -0,0 +1,28 @@ +/* + * Copyright 2020 NXP. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _PERIPHERALS_H_ +#define _PERIPHERALS_H_ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*********************************************************************************************************************** + * Initialization functions + **********************************************************************************************************************/ +void BOARD_InitPeripherals(void); + +/*********************************************************************************************************************** + * BOARD_InitBootPeripherals function + **********************************************************************************************************************/ +void BOARD_InitBootPeripherals(void); + +#if defined(__cplusplus) +} +#endif + +#endif /* _PERIPHERALS_H_ */ diff --git a/boards/rdmw320_r0/project_template/pin_mux.c b/boards/rdmw320_r0/project_template/pin_mux.c new file mode 100644 index 000000000..e8518e630 --- /dev/null +++ b/boards/rdmw320_r0/project_template/pin_mux.c @@ -0,0 +1,36 @@ +/* + * Copyright 2020 NXP. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_common.h" +#include "fsl_pinmux.h" +#include "pin_mux.h" + +/* FUNCTION ************************************************************************************************************ + * + * Function Name : BOARD_InitBootPins + * Description : Calls initialization functions. + * + * END ****************************************************************************************************************/ +void BOARD_InitBootPins(void) +{ + BOARD_InitPins(); +} + +/* FUNCTION ************************************************************************************************************ + * + * Function Name : BOARD_InitPins + * Description : Configures pin routing and optionally pin electrical features. + * + * END ****************************************************************************************************************/ +void BOARD_InitPins(void) { /*!< Function assigned for the core: Cortex-M4[cm4] */ + PINMUX_PinMuxSet(BOARD_UART0_TX_PIN, BOARD_UART0_TX_PIN_FUNCTION_ID | PINMUX_MODE_DEFAULT); + PINMUX_PinMuxSet(BOARD_UART0_RX_PIN, BOARD_UART0_RX_PIN_FUNCTION_ID | PINMUX_MODE_DEFAULT); +} + +/*********************************************************************************************************************** + * EOF + **********************************************************************************************************************/ diff --git a/boards/rdmw320_r0/project_template/pin_mux.h b/boards/rdmw320_r0/project_template/pin_mux.h new file mode 100644 index 000000000..0b66ddcb8 --- /dev/null +++ b/boards/rdmw320_r0/project_template/pin_mux.h @@ -0,0 +1,59 @@ +/* + * Copyright 2020 NXP. + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _PIN_MUX_H_ +#define _PIN_MUX_H_ + + +/*********************************************************************************************************************** + * Definitions + **********************************************************************************************************************/ + +#define BOARD_UART0_TX_PIN 2 /*!< Routed pin */ +#define BOARD_UART0_TX_PIN_FUNCTION_ID PINMUX_GPIO2_UART0_TXD /*!< Pin function id */ + +#define BOARD_UART0_RX_PIN 3 /*!< Routed pin */ +#define BOARD_UART0_RX_PIN_FUNCTION_ID PINMUX_GPIO3_UART0_RXD /*!< Pin function id */ + +/*! + * @addtogroup pin_mux + * @{ + */ + +/*********************************************************************************************************************** + * API + **********************************************************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + + +/*! + * @brief Calls initialization functions. + * + */ +void BOARD_InitBootPins(void); + +/*! + * @brief Configures pin routing and optionally pin electrical features. + * + */ +void BOARD_InitPins(void); /*!< Function assigned for the core: Cortex-M4[cm4] */ + +#if defined(__cplusplus) +} +#endif + +/*! + * @} + */ +#endif /* _PIN_MUX_H_ */ + +/*********************************************************************************************************************** + * EOF + **********************************************************************************************************************/ diff --git a/components/boot2_utils/boot_flags.c b/components/boot2_utils/boot_flags.c new file mode 100644 index 000000000..8a7654677 --- /dev/null +++ b/components/boot2_utils/boot_flags.c @@ -0,0 +1,82 @@ +/** @file boot_flags.c + * + * @brief This file provides API for Boot Flags + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include "boot_flags.h" +#include "fsl_debug_console.h" + +#define boot_l(...) PRINTF("boot", ##__VA_ARGS__) + +#define REVID_MASK 0x1FF + +/* permanent boot flags storage */ +uint32_t g_boot_flags; +uint32_t g_prev_version_fw; +uint32_t g_rst_cause; + +void boot_init(void) +{ + /* Read boot flags stored by boot2 */ + g_boot_flags = *BOOT_FLAGS; + + if (g_boot_flags & BOOT_MAIN_FIRMWARE_BAD_CRC) + { + g_prev_version_fw = 1; + } + + g_rst_cause = boot_store_reset_cause(); +} + +void boot_report_flags(void) +{ + boot_l("Boot Flags: 0x%x", g_boot_flags); + + boot_l(" - Partition Table: %d ", !(!(g_boot_flags & BOOT_PARTITION_TABLE_MASK))); + + boot_l(" - Firmware Partition: %d ", g_boot_flags & BOOT_PARTITION_MASK); + + if (g_boot_flags & BOOT_MAIN_FIRMWARE_BAD_CRC) + { + boot_l( + " - Backup firmware due to CRC error in main" + " firmware"); + } + /* Bits of register SYS_CTRL->REV_ID can be described + * as follows: + * [31:24] Company_ID + * [23:20] Foundry + * [19:16] Process + * [15:14] Project_ID + * [8:6] Project_Rev_first_part + * [5:3] Project_Rev_second_part + * [2:0] Project_Rev_third_part + */ + boot_l("Boot Info:"); + boot_l(" - Chip revision id: 0x%x", SYS_CTL->REV_ID); + + boot_l("Reset Cause Register: 0x%x", boot_reset_cause()); + if (boot_reset_cause() & (1 << 5)) + boot_l(" - Watchdog reset bit is set"); +} diff --git a/components/boot2_utils/boot_flags.h b/components/boot2_utils/boot_flags.h new file mode 100644 index 000000000..6900102aa --- /dev/null +++ b/components/boot2_utils/boot_flags.h @@ -0,0 +1,102 @@ +/** @file boot_flags.h + * + * @brief Boot Flags + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#ifndef __boot_flags_h +#define __boot_flags_h + +#include +#include "fsl_power.h" + +/* BooROM version for A0 chip */ +#define BOOTROM_A0_VERSION 3 + +/* + * Location where the boot flags are stored by the bootloader. + * Currently this is stored in NVRAM area after BootROM occupied range. + */ +#define BOOT_FLAGS ((volatile uint32_t *)0x480C0024) + +/* final location for those boot flags */ +extern uint32_t g_boot_flags; +extern uint32_t g_prev_version_fw; +extern uint32_t g_rst_cause; + +/* boot flag definitions */ +/* partition number used to boot */ +#define BOOT_PARTITION_MASK 0x03 +/* boot partition table */ +#define BOOT_PARTITION_TABLE_MASK 0x100 +/* partition table1 state */ +#define PARTITION_TABLE1_STATE_MASK 0x200 +/* partition table2 state */ +#define PARTITION_TABLE2_STATE_MASK 0x400 +/* main firmware had errors */ +#define BOOT_MAIN_FIRMWARE_BAD_CRC 0x20 + +/* secure boot config flags for firmware */ +#define BOOT_SECURE_FW_ENABLE 0x10000 +#define BOOT_SECURE_SIGN_FW 0x20000 +#define BOOT_SECURE_ENCRYPT_FW 0x40000 + +/* + * Bootrom stores some information in initial few bytes of retention ram. + * Following is the format used for storing this info. + */ +struct bootrom_info +{ + uint32_t pm3_entryaddr; + uint32_t bootMode; + uint32_t powerMode; +}; + +extern unsigned long _nvram_start; + +static inline int boot_get_partition_no() +{ + return g_boot_flags & BOOT_PARTITION_MASK; +} + +static inline int boot_old_fw_version() +{ + return g_prev_version_fw; +} + +static inline uint32_t boot_store_reset_cause() +{ + uint32_t rst_cause = POWER_GetResetCause(); + POWER_ClearResetCause(kPOWER_ResetCauseAll); + return rst_cause; +} + +static inline uint32_t boot_reset_cause() +{ + return g_rst_cause; +} + +void boot_init(); +void boot_report_flags(); + +#endif diff --git a/components/boot2_utils/component_boot2_partition.cmake b/components/boot2_utils/component_boot2_partition.cmake new file mode 100644 index 000000000..81042dafb --- /dev/null +++ b/components/boot2_utils/component_boot2_partition.cmake @@ -0,0 +1,16 @@ +#Description: component_boot2_partition; user_visible: True +include_guard(GLOBAL) +message("component_boot2_partition component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/partition.c + ${CMAKE_CURRENT_LIST_DIR}/crc32.c + ${CMAKE_CURRENT_LIST_DIR}/boot_flags.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/components/boot2_utils/component_boot2_psm.cmake b/components/boot2_utils/component_boot2_psm.cmake new file mode 100644 index 000000000..1f76c1298 --- /dev/null +++ b/components/boot2_utils/component_boot2_psm.cmake @@ -0,0 +1,17 @@ +#Description: component_boot2_psm; user_visible: True +include_guard(GLOBAL) +message("component_boot2_psm component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/psm-v2.c + ${CMAKE_CURRENT_LIST_DIR}/psm-v2-secure.c + ${CMAKE_CURRENT_LIST_DIR}/wmtlv.c + ${CMAKE_CURRENT_LIST_DIR}/keystore.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(component_boot2_partition) diff --git a/components/boot2_utils/crc32.c b/components/boot2_utils/crc32.c new file mode 100644 index 000000000..8f0d4dbf3 --- /dev/null +++ b/components/boot2_utils/crc32.c @@ -0,0 +1,108 @@ +/** @file crc32.c + * + * @brief This file provides CRC 32 API + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include +#include + +#define TABLE_SIZE 256 + +/* + * Polynomial used to generate the table: + * CRC-32-IEEE 802.3, the polynomial is : + * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 + */ + +const uint32_t crc_table[TABLE_SIZE] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, + 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, + 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, + 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, + 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, + 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, + 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, + 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, + 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, + 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, + 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, + 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, +}; + +/* Software CRC */ +uint32_t soft_crc32(const void *data__, int data_size, uint32_t crc) +{ + const uint8_t *data = data__; + unsigned int result = crc; + unsigned char crc_H8; + + while (data_size--) + { + crc_H8 = (unsigned char)(result & 0x000000FF); + result >>= 8; + result ^= crc_table[crc_H8 ^ (*data)]; + data++; + } + + return result; +} + +/* Hardware CRC */ +uint32_t crc32(const void *data__, int data_size, uint32_t crc) +{ + const uint8_t *data = data__; + uint32_t result; + + result = CRC_Calculate(CRC, data, data_size); + + if (crc && (result == crc)) + { + result = 0; + } + + return result; +} + +void crc32_init() +{ + CRC_Init(CRC); + CRC_SetMode(CRC, kCRC_32BitsIeee); +} diff --git a/components/boot2_utils/crc32.h b/components/boot2_utils/crc32.h new file mode 100644 index 000000000..8f3f6731a --- /dev/null +++ b/components/boot2_utils/crc32.h @@ -0,0 +1,36 @@ +/** @file crc32.h + * + * @brief CRC Header + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#ifndef __CRC32_H +#define __CRC32_H + +#include + +uint32_t soft_crc32(const void *data, int data_size, uint32_t crc); +uint32_t crc32(const void *data, int data_size, uint32_t crc); +void crc32_init(void); + +#endif diff --git a/components/boot2_utils/flash_layout.h b/components/boot2_utils/flash_layout.h new file mode 100644 index 000000000..c6a700f5a --- /dev/null +++ b/components/boot2_utils/flash_layout.h @@ -0,0 +1,74 @@ +/* + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +/*! \file flash_layout.h + * \brief Flash layout details + * + * This file presents entire layout of flash including secondary boot-loader, + * firmware(including redundant partition), file-system and persistent storage + * manager. + * + * The flash layout defined in this file is used in a consistent fashion + * across all of SDK, namely by the flashprog utility, secondary boot loader + * (boot2) and Firmware Upgrade code. + */ + +#ifndef _FLASH_LAYOUT_H_ +#define _FLASH_LAYOUT_H_ + +/** Flash base address */ +#define MW300_FLASH_BASE 0x0 +/** Flash sector size */ +#define MW300_FLASH_SECTOR_SIZE 0x1000 /*!< 4KB */ + +/** Section: Secondary stage boot-loader with bootrom header + * Start: 0x0 + * Length: 0x4000(16KiB) + * Device: Internal Flash + */ +#define FL_BOOT2_START (MW300_FLASH_BASE + 0x0) +#define FL_BOOTROM_H_SIZE (0x400) +/* Note: Maximum size considering future requirements */ +#define FL_BOOT2_BLOCK_SIZE (MW300_FLASH_SECTOR_SIZE * 4) +#define FL_BOOT2_BLOCK_END (FL_BOOT2_START + FL_BOOT2_BLOCK_SIZE) +#define FL_BOOT2_DEV FL_INT + +/** Section: Partition table 1 + * Start: 0x4000 + * Length: 0x1000(4KiB) + * Device: Internal Flash + */ +#define FL_PART_SIZE (MW300_FLASH_SECTOR_SIZE) +#define FL_PART1_START FL_BOOT2_BLOCK_END +#define FL_PART1_TABLE_END (FL_PART1_START + FL_PART_SIZE) +#define FL_PART_DEV FL_INT + +/** Section: Partition table 2 + * Start: 0x5000 + * Length: 0x1000(4KiB) + * Device: Internal Flash + */ +#define FL_PART2_START FL_PART1_TABLE_END +#define FL_PART2_END (FL_PART2_START + FL_PART_SIZE) + +#endif /* ! _FLASH_LAYOUT_H_ */ diff --git a/components/boot2_utils/keystore.c b/components/boot2_utils/keystore.c new file mode 100644 index 000000000..1e0927d78 --- /dev/null +++ b/components/boot2_utils/keystore.c @@ -0,0 +1,104 @@ +/** @file keystore.c + * + * @brief This file provides Key Store API + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include +#include +#include + +#define KS_PRESENT 1 +#define KS_ABSENT -1 +#define KS_UNINIT 0 + +static int8_t ks_present; +static uint8_t *keystore_addr = (uint8_t *)SB_KEYSTORE_ADDR; + +void keystore_validate() +{ + if (ks_present != KS_UNINIT) + return; + + crc32_init(); + + if (tlv_store_validate((uint8_t *)SB_KEYSTORE_ADDR, BOOT2_KEYSTORE, crc32) == TLV_SUCCESS) + ks_present = KS_PRESENT; + else + ks_present = KS_ABSENT; + + return; +} + +int keystore_get(uint8_t type, uint16_t len, uint8_t *value) +{ + keystore_validate(); + if (ks_present != KS_PRESENT) + return ERR_TLV_NOT_FOUND; + + return tlv_store_get((uint8_t *)SB_KEYSTORE_ADDR, type, len, value); +} + +int keystore_get_ref(uint8_t type, uint16_t *plen, const uint8_t **pvalue) +{ + keystore_validate(); + if (ks_present != KS_PRESENT) + return ERR_TLV_NOT_FOUND; + + return tlv_store_get_ref((uint8_t *)SB_KEYSTORE_ADDR, type, plen, pvalue); +} + +void keystore_iterate_start() +{ + keystore_addr = (uint8_t *)SB_KEYSTORE_ADDR; +} + +int keystore_iterate(uint8_t *ptype, uint16_t len, uint8_t *value) +{ + int ret; + + keystore_validate(); + if (ks_present != KS_PRESENT) + return ERR_TLV_NOT_FOUND; + + ret = tlv_store_iterate(keystore_addr, ptype, len, value); + if (ret != ERR_TLV_NOT_FOUND) + keystore_addr = NULL; + + return ret; +} + +int keystore_iterate_ref(uint8_t *ptype, uint16_t *plen, const uint8_t **pvalue) +{ + int ret; + + keystore_validate(); + if (ks_present != KS_PRESENT) + return ERR_TLV_NOT_FOUND; + + ret = tlv_store_iterate_ref(keystore_addr, ptype, plen, pvalue); + if (ret != ERR_TLV_NOT_FOUND) + keystore_addr = NULL; + + return ret; +} diff --git a/components/boot2_utils/keystore.h b/components/boot2_utils/keystore.h new file mode 100644 index 000000000..28358fb22 --- /dev/null +++ b/components/boot2_utils/keystore.h @@ -0,0 +1,211 @@ +/* + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +/*! @file keystore.h + * @brief Keystore access module (This module is available only for MW30X + * devices) + * + * Keystore is a component of bootloader that is passed by it to application + * firmware while booting. Usually, bootloader will be encrypted and hence + * keystore acts as read-only secure storage on flash to store important + * information such as encryption/decryption keys for secure PSM or any + * application specific secure information. Bootloader passes on this + * keystore to application firmware in decrypted form in RAM. + * + * Keystore is basically a packed array of TLV (Type-Length-Value) triplets. + * There is a header at the start of keystore which is used to validate and + * traverse keystore. Header is followed by one or more TLV triplet, each of + * different type and different lengths. TLVs of keystore are divided into two + * categories, TLV Types 0-95 are reserved for secure boot process and TLV Types + * 96-254 are reserved for applications for custom use, including that for + * secure PSM. + * + * This module provides a simple interface to access keystore from application + * firmware. + * + * @note Keystore is a read-only storage and cannot be updated in memory or + * on flash by application firmware. It can only be done by flashing new + * bootloader with updated keystore. + * + * @section keystore_usage Usage + * + * -# Use keystore_get to get a copy of TLV value stored in keystore + * -# Use keystore_get_ref to get in-place pointer to TLV value in keystore + * -# To iterate through all TLV's stored in keystore + * @code + * uint8_t val[256]; + * uint8_t type; + * uint16_t len; + * int ret; + * + * keystore_iterate_start(); + * while(1) { + * ret = keystore_iterate(&type, sizeof(val), val); + * if (ret == ERR_TLV_NOT_FOUND) + * break; + * if (ret == ERR_TLV_BAD_BUF_LEN) { + * log("Use_larger_val_buffer"); + * break; + * } + * len = ret; + * use_tlv(type, len, val); + * } + * @endcode + */ + +#ifndef __KEYSTORE_H__ +#define __KEYSTORE_H__ + +#include + +/** Predefined TLV key types for keystore. Note that TLV types must be unique + * throughout the system to avoid any confusion. + * Applications must use a unique integer in the range KEY_APP_DATA_START + * and KEY_APP_DATA_END as TLV type for its use. + */ +enum ks_tlv_type +{ + /* Start of Reserved TLV types. Applications must not modify them */ + /* Boot2 key types */ + KEY_BOOT2_SIGNING_ALGO = 0, + KEY_BOOT2_HASH_ALGO, + KEY_BOOT2_ENCRYPT_ALGO, + KEY_BOOT2_PRIVATE_KEY, + KEY_BOOT2_PUBLIC_KEY, + KEY_BOOT2_ENCRYPT_KEY, + KEY_BOOT2_DECRYPT_KEY, + KEY_BOOT2_NONCE, + KEY_BOOT2_LOAD_ADDR, + KEY_BOOT2_ENTRY_ADDR, + + /* OTP key types */ + KEY_OTP_JTAG_ENABLE = 24, + KEY_OTP_UART_USB_BOOT_ENABLE, + KEY_OTP_USER_DATA, + + /* Firmware key types */ + KEY_FW_SIGNING_ALGO = 32, + KEY_FW_HASH_ALGO, + KEY_FW_ENCRYPT_ALGO, + KEY_FW_PRIVATE_KEY, + KEY_FW_PUBLIC_KEY, + KEY_FW_ENCRYPT_KEY, + KEY_FW_DECRYPT_KEY, + KEY_FW_NONCE, + KEY_FW_IMAGE_LEN, + + /* Firmware Image Header key types */ + KEY_FW_MIC = 64, + KEY_FW_SIGNATURE, + + /* End of Reserved TLV types */ + + /** Application specific TLV type must be greater than or equal to this + * value (= 96) */ + KEY_APP_DATA_START = 96, + + /* PSMv2 */ + KEY_PSM_ENCRYPT_KEY = 97, + KEY_PSM_NONCE = 98, + /** Application specific TLV type must be less than or equal to this + * value (= 254)*/ + KEY_APP_DATA_END = 254, + + /* Filler or padding data */ + KEY_FILLER = 255 +}; + +/** This function retrives a TLV from keystore. + * + * @param[in] type TLV type to retrieve. Refer to enum \ref ks_tlv_type + * for pre-defined values + * @param[in] len Length of the buffer in which to copy TLV value + * @param[out] value Buffer in which to copy TLV value. Can be NULL + * to retrive the the length of TLV value + * + * @return Length of TLV value if TLV type found (can be 0) + * @return ERR_TLV_BAD_BUF_LEN if buffer length is smaller than TLV value size + * @return ERR_TLV_NOT_FOUND if TLV type not found + */ +int keystore_get(uint8_t type, uint16_t len, uint8_t *value); + +/** This function retrives a TLV from keystore. Unlike keystore_get() + * this function returns reference of TLV value, rather than copy into + * a separate buffer. + * + * @note Application must not modify this TLV value. + * + * @param[in] type TLV type to retrieve. Refer to enum \ref ks_tlv_type + * for pre-defined values + * @param[out] plen Length of TLV value (can be 0) + * @param[out] pvalue Pointer within keystore to TLV value of size *plen. + * Can be NULL to retrive the the length of TLV value + * + * @return Length of TLV value if TLV type found + * @return ERR_TLV_NOT_FOUND if TLV type not found + */ +int keystore_get_ref(uint8_t type, uint16_t *plen, const uint8_t **pvalue); + +/** This function enables to iterate over each TLV stored in keystore from + * beginning. This must be called once before keystore_iterate() or + * keystore_iterate_ref(). + * + * @note This function also enables to restart iteration from beginning. + */ +void keystore_iterate_start(); + +/** This function retrives each TLV from keystore in the sequence in which + * they are stored. TLV is copied into the buffer supplied. + * + * @pre keystore_iterate_start() + * + * @param[out] ptype TLV type retrived. Refer to enum \ref ks_tlv_type + * for pre-defined values + * @param[in] len Length of the buffer in which to copy TLV value + * @param[out] value Buffer in which to copy TLV value + * + * @return Length of TLV value if TLV type found + * @return ERR_TLV_BAD_BUF_LEN if buffer length is smaller than TLV value size + * @return ERR_TLV_NOT_FOUND if end of keystore reached + */ +int keystore_iterate(uint8_t *ptype, uint16_t len, uint8_t *value); + +/** This function is keystore_get_ref() equivalent of keystore_iterate(). + * TLV value is returned as reference into keystore rather than separate buffer + * copy. + * + * @note Application must not modify this TLV value. + * + * @pre keystore_iterate_start() + * + * @param[out] ptype TLV type retrieved. Refer to enum \ref ks_tlv_type + * for pre-defined values + * @param[out] plen Length of TLV value (can be 0) + * @param[out] pvalue Pointer within keystore to TLV value of size *plen + * + * @return Length of TLV value if TLV type found + * @return ERR_TLV_NOT_FOUND if end of keystore reached + */ +int keystore_iterate_ref(uint8_t *ptype, uint16_t *plen, const uint8_t **pvalue); + +#endif /* __KEYSTORE_H__ */ diff --git a/components/boot2_utils/partition.c b/components/boot2_utils/partition.c new file mode 100644 index 000000000..ece7a1d10 --- /dev/null +++ b/components/boot2_utils/partition.c @@ -0,0 +1,297 @@ +/** @file partition.c + * + * @brief This file provides Flash Partition Manager + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include "crc32.h" +#include "boot_flags.h" +#include "partition.h" +#include "flash_layout.h" +#include "mflash_drv.h" +#include "fsl_debug_console.h" + +struct partition_table g_flash_table; +struct partition_entry g_flash_parts[MAX_FL_COMP]; +static uint32_t g_active_part_addr; + +static inline uint32_t part_get_table_addr_from_id(bool part_id) +{ + return (part_id == 0) ? FL_PART1_START : FL_PART2_START; +} + +static inline uint32_t part_get_passive_table_addr() +{ + return (g_active_part_addr == FL_PART1_START) ? FL_PART2_START : FL_PART1_START; +} + +static int part_read_layout() +{ + int read_size, ret; + uint32_t crc; + uint32_t part_addr; + + part_addr = g_active_part_addr; + crc32_init(); + + ret = mflash_drv_read(part_addr, (uint32_t *)&g_flash_table, sizeof(struct partition_table)); + if (kStatus_Success != ret) + { + assert(false); + } + + crc = crc32(&g_flash_table, sizeof(g_flash_table), 0); + if (crc != 0) + { + PRINTF("CRC mismatch"); + return -WM_E_CRC; + } + + if (g_flash_table.magic != PARTITION_TABLE_MAGIC) + { + PRINTF("magic number mismatch"); + return -WM_FAIL; + } + if (g_flash_table.version != PARTITION_TABLE_VERSION) + { + PRINTF("Partition table version mismatch"); + return -WM_FAIL; + } + part_addr += sizeof(struct partition_table); + + if (g_flash_table.partition_entries_no > MAX_FL_COMP) + { + PRINTF( + "Only %d partition entries are supported." + " Current = %d. Truncating ...", + MAX_FL_COMP, g_flash_table.partition_entries_no); + g_flash_table.partition_entries_no = MAX_FL_COMP; + } + + read_size = g_flash_table.partition_entries_no * sizeof(struct partition_entry); + ret = mflash_drv_read(part_addr, (uint32_t *)g_flash_parts, read_size); + if (kStatus_Success != ret) + { + assert(false); + } + + return WM_SUCCESS; +} + +int part_init(void) +{ + static bool part_init_done; + bool act_part_id; + + if (part_init_done == true) + return WM_SUCCESS; + + if (((g_boot_flags & PARTITION_TABLE1_STATE_MASK) != 0U) || ((g_boot_flags & PARTITION_TABLE2_STATE_MASK) != 0U)) + { + /* Not valid boot flags, use part 0. */ + act_part_id = 0U; + } + else + { + /* Get active partition table address as setup by Boot2 */ + act_part_id = !(!(g_boot_flags & BOOT_PARTITION_TABLE_MASK)); + } + + g_active_part_addr = part_get_table_addr_from_id(act_part_id); + part_init_done = true; + return part_read_layout(); +} + +int part_write_layout(void) +{ + /* Get and update passive partition table */ + uint32_t part_addr = part_get_passive_table_addr(); + uint32_t crc; + int write_size; + + mflash_drv_erase(part_addr, FL_PART_SIZE); + + /* Increment active partition table generation level this will get + * written to passive address */ + ++g_flash_table.gen_level; + + /* Update checksum with updated generation level */ + crc = crc32((uint8_t *)&g_flash_table, sizeof(struct partition_table) - 4, 0); + g_flash_table.crc = crc; + + mflash_drv_write(part_addr, (uint32_t *)&g_flash_table, sizeof(struct partition_table)); + + part_addr += sizeof(struct partition_table); + + if (g_flash_table.partition_entries_no > MAX_FL_COMP) + { + PRINTF( + "Only %d partition entries are supported." + "Truncating ...", + MAX_FL_COMP); + g_flash_table.partition_entries_no = MAX_FL_COMP; + } + + write_size = g_flash_table.partition_entries_no * sizeof(struct partition_entry); + mflash_drv_write(part_addr, (uint32_t *)g_flash_parts, write_size); + part_addr += write_size; + + crc = crc32((uint8_t *)g_flash_parts, write_size, 0); + mflash_drv_write(part_addr, (uint32_t *)&crc, sizeof(crc)); + + return 0; +} + +void part_to_flash_desc(struct partition_entry *p, flash_desc_t *f) +{ + f->fl_dev = p->device; + f->fl_start = p->start; + f->fl_size = p->size; +} + +struct partition_entry *part_get_layout_by_id(enum flash_comp comp, short *start_index) +{ + int i = 0; + + if (start_index) + i = *start_index; + + for (; i < g_flash_table.partition_entries_no; i++) + { + if (g_flash_parts[i].type == comp) + { + if (start_index) + *start_index = i + 1; + return &g_flash_parts[i]; + } + } + + return NULL; +} + +struct partition_entry *part_get_layout_by_name(const char *name, short *start_index) +{ + int i = 0; + + if (start_index) + i = *start_index; + + for (; i < g_flash_table.partition_entries_no; i++) + { + if (!strcmp(g_flash_parts[i].name, name)) + { + if (start_index) + *start_index = i + 1; + return &g_flash_parts[i]; + } + } + + return NULL; +} + +struct partition_entry *part_get_active_partition(struct partition_entry *p1, struct partition_entry *p2) +{ + /* Somehow there aren't two partition defined for this */ + if (!p1 || !p2) + return NULL; + + return p1->gen_level >= p2->gen_level ? p1 : p2; +} + +struct partition_entry *part_get_active_partition_by_name(const char *name) +{ + short index = 0; + struct partition_entry *p1 = part_get_layout_by_name(name, &index); + struct partition_entry *p2 = part_get_layout_by_name(name, &index); + + return part_get_active_partition(p1, p2); +} + +struct partition_entry *part_get_passive_partition(struct partition_entry *p1, struct partition_entry *p2) +{ + /* Somehow there aren't two partition defined for this */ + if (!p1 || !p2) + return NULL; + + return p1->gen_level < p2->gen_level ? p1 : p2; +} + +struct partition_entry *part_get_passive_partition_by_name(const char *name) +{ + short index = 0; + struct partition_entry *p1 = part_get_layout_by_name(name, &index); + struct partition_entry *p2 = part_get_layout_by_name(name, &index); + + return part_get_passive_partition(p1, p2); +} + +static bool part_match(struct partition_entry *p1, struct partition_entry *p2) +{ + if (p1->type == p2->type && p1->device == p2->device && p1->start == p2->start && p1->size == p2->size) + return true; + + return false; +} + +int part_set_active_partition(struct partition_entry *p) +{ + short index = 0; + struct partition_entry *p1 = part_get_layout_by_name(p->name, &index); + struct partition_entry *p2 = part_get_layout_by_name(p->name, &index); + + /* Somehow there aren't two partition defined for this */ + if (!p1 || !p2) + return -WM_E_INVAL; + + if (part_match(p1, p) == true) + p1->gen_level = p2->gen_level + 1; + else if (part_match(p2, p) == true) + p2->gen_level = p1->gen_level + 1; + else + return -WM_E_INVAL; + + part_write_layout(); + return WM_SUCCESS; +} + +bool part_is_flash_desc_within_one_partition(flash_desc_t *f) +{ + int i; + uint32_t start = f->fl_start; + uint32_t end = f->fl_start + f->fl_size; + + if (start >= end) + { + return false; + } + + for (i = 0; i < g_flash_table.partition_entries_no; i++) + { + if ((start >= g_flash_parts[i].start) && (end <= (g_flash_parts[i].start + g_flash_parts[i].size))) + { + return true; + } + } + + return false; +} diff --git a/components/boot2_utils/partition.h b/components/boot2_utils/partition.h new file mode 100644 index 000000000..a07ee4966 --- /dev/null +++ b/components/boot2_utils/partition.h @@ -0,0 +1,245 @@ +/* + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +/*! \file partition.h + * \brief Partition Management + * + * This defines functions for managing the flash partitions. + * + * \section part_usage Usage + * + * Applications can define and use their own flash layout using the flashprog + * tool. Each partition in the layout has a name, type, start address and a + * size associated with it. + * Applications can use the part_get_layout_by_name() or part_get_layout_by_id() + * functions to retrieve pointers to the partition entry. This partition entry + * can be converted to a flash descriptor using the part_to_flash_desc() + * function. All components that use the flash accept the flash descriptor to + * recognize what portion of the flash they use. + * + * Additionally, the partition entries store information about active-passive + * upgrades. Applications can define their own components in the flash in an + * active-passive manner. Applications can then retrieve the active component + * using the part_get_active_partition() API. If after an upgrade happens the + * partitions need to be toggled then the part_get_active_partition() API is + * used. + * + * + */ + +#ifndef _PARTITION_H_ +#define _PARTITION_H_ + +#include +#include + +#define MAX_FL_COMP CONFIG_FLASH_PARTITION_COUNT +#define MAX_NAME 8 + +/** Partition Table */ +struct partition_table +{ +#define PARTITION_TABLE_MAGIC (('W' << 0) | ('M' << 8) | ('P' << 16) | ('T' << 24)) + /** The magic identifying the start of the partition table */ + uint32_t magic; +#define PARTITION_TABLE_VERSION 1 + /** The version number of this partition table */ + uint16_t version; + /** The number of partition entries that follow this */ + uint16_t partition_entries_no; + /** Generation level */ + uint32_t gen_level; + /** The CRC of all the above components */ + uint32_t crc; +}; + +/** Partition Entry */ +struct partition_entry +{ + /** The type of the flash component */ + uint8_t type; + /** The device id, internal flash is always id 0 */ + uint8_t device; + /** A descriptive component name */ + char name[MAX_NAME]; + /** Start address on the given device */ + uint32_t start; + /** Size on the given device */ + uint32_t size; + /** Generation level */ + uint32_t gen_level; +}; + +/** The various components in a flash layout */ +enum flash_comp +{ + /** The secondary stage boot loader to assist firmware bootup */ + FC_COMP_BOOT2 = 0, + /** The firmware image. There can be a maximum of two firmware + * components available in a flash layout. These will be used in an + * active-passive mode if rfget module is enabled. + */ + FC_COMP_FW, + /** The wlan firmware image. There can be one wlan firmware image in the + * system. The contents of this location would be downloaded to the WLAN + * chip. + */ + FC_COMP_WLAN_FW, + /** The FTFS image. */ + FC_COMP_FTFS, + /** The PSM data */ + FC_COMP_PSM, + /** Application Specific component */ + FC_COMP_USER_APP, + /** The BT firmware image if external BT/BLE chip is used */ + FC_COMP_BT_FW, +}; + +/** The flash descriptor + * + * All components that work with flash refer to the flash descriptor. The flash + * descriptor captures the details of the component resident in flash. + */ +typedef struct flash_desc +{ + /** The flash device */ + uint8_t fl_dev; + /** The start address on flash */ + uint32_t fl_start; + /** The size on flash */ + uint32_t fl_size; +} flash_desc_t; + +/** Initialize the partitioning module + * + * \return WM_SUCCESS on success or error code + */ +int part_init(void); + +/** Update the partitioning table + * + * \return WM_SUCCESS on success or error code + */ +int part_write_layout(void); + +/** Convert from partition to flash_descriptor + * + * All the components that own a portion of flash in the SDK use the flash + * descriptor function to identify this portion. This function converts a + * partition_entry into a corresponding flash descriptor that can be passed to + * these modules. + * + * \param[in] p a pointer to a partition entry + * \param[out] f a pointer to a flash descriptor + */ +void part_to_flash_desc(struct partition_entry *p, flash_desc_t *f); + +/** Get partition entry by ID + * + * Retrieve the pointer to a partition entry using an ID. This function can be + * called to repetitively to retrieve more entries of the same type. The value + * of start_index is modified by the function so that search starts from this + * index in the next call. + * + * \param [in] comp the flash component to search for + * \param [in,out] start_index the start index for the search. The first call to + * this function should always have a start index of 0. + * + * \return a pointer to a partition entry on success, null otherwise. + */ +struct partition_entry *part_get_layout_by_id(enum flash_comp comp, short *start_index); + +/** Get partition entry by name + * + * Retrieve the pointer to a partition entry using a name. This function can be + * called to repetitively to retrieve more entries of the same type. The value + * of start_index is modified by the function so that search starts from this + * index in the next call. + * + * \param [in] name the flash component's name as mentioned in the layout. + * \param [in,out] start_index the start index for the search. The first call to + * this function should always have a start index of 0. + * + * \return a pointer to a partition entry on success, null otherwise. + */ +struct partition_entry *part_get_layout_by_name(const char *name, short *start_index); + +struct partition_entry *part_get_active_partition_by_name(const char *name); +struct partition_entry *part_get_passive_partition_by_name(const char *name); + +/** Find the active partition + * + * Given two partition entries that are upgrade buddies (that is, have the same + * friendly name), this function returns the partition that is currently marked + * as active. + * \param[in] p1 Pointer to a partition entry + * \param[in] p2 Pointer to the upgrade buddy for the first partition entry + * + * \return a pointer to the active partition entry on success, null otherwise. + */ +struct partition_entry *part_get_active_partition(struct partition_entry *p1, struct partition_entry *p2); + +/** Set active partition + * + * Given a pointer to a currently passive partition entry, this function marks + * this partition entry as active. + * + * \param[in] p Pointer to partition entry object + * + * \return -WM_E_INVAL if invalid parameter. + * \return WM_SUCCESS if operation successful. + */ +int part_set_active_partition(struct partition_entry *p); + +static inline int part_get_desc_from_id(enum flash_comp comp, flash_desc_t *fl) +{ + if (!fl) + return -WM_E_INVAL; + + int rv = part_init(); + if (rv != 0) + return rv; + + struct partition_entry *p = part_get_layout_by_id(comp, NULL); + if (!p) + return -WM_FAIL; + + part_to_flash_desc(p, fl); + + return WM_SUCCESS; +} + +/* Check if the flash descriptor is within a partition in partition table. + * + * When return true, the input flash_desc_t 'f' can be either a subset of + * a partition's flash space or exactly the same as this partition flash + * space itself. + * + * \param[in] f Pointer to a flash descriptor for a flash space range. + * + * \return true if 'f' is part of an existing partition flash space. + * \return false if not. + */ +bool part_is_flash_desc_within_one_partition(flash_desc_t *f); + +#endif /* _PARTITION_H_ */ diff --git a/components/boot2_utils/psm-internal.h b/components/boot2_utils/psm-internal.h new file mode 100644 index 000000000..6740fee96 --- /dev/null +++ b/components/boot2_utils/psm-internal.h @@ -0,0 +1,101 @@ +/** @file psm-internal.h + * + * @brief PSM Internal Header + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#ifndef __PSM_INTERNAL_H__ +#define __PSM_INTERNAL_H__ + +/* #define CONFIG_PSM_INIT_SCAN_DEBUG */ +/* #define CONFIG_PSM_EXTRA_DEBUG */ +/* #define CONFIG_PSM_FUNC_DEBUG */ +/* #define CONFIG_PSM_INDEXING_DEBUG */ +/* #define CONFIG_PSM_LOWLEVEL_FLASH_OPR_DEBUG */ +/* #define CONFIG_PSM_LOCKS_DEBUG */ + +#include + +#ifdef CONFIG_PSM_INIT_SCAN_DEBUG +#define psm_isc(...) wmlog("psm-isc", ##__VA_ARGS__) +#else +#define psm_isc(...) +#endif + +#define psm_e(...) wmlog_e("psm", ##__VA_ARGS__) +#define psm_w(...) wmlog_w("psm", ##__VA_ARGS__) +#ifdef CONFIG_PSM_DEBUG +#define psm_d(...) wmlog("psm", ##__VA_ARGS__) +#else +#define psm_d(...) +#endif /* ! CONFIG_PSM_DEBUG */ +#ifdef CONFIG_PSM_EXTRA_DEBUG +#define psm_ed(...) wmlog("psm-ed", ##__VA_ARGS__) +#else +#define psm_ed(...) +#endif /* ! CONFIG_PSM_EXTRA_DEBUG */ +#ifdef CONFIG_PSM_INDEXING_DEBUG +#define psm_i(...) wmlog("psm-i", ##__VA_ARGS__) +#else +#define psm_i(...) +#endif /* ! CONFIG_PSM_INDEXING_DEBUG */ +#ifdef CONFIG_PSM_LOWLEVEL_FLASH_OPR_DEBUG +#define psm_ll(...) wmlog("psm-ll", ##__VA_ARGS__) +#else +#define psm_ll(...) +#endif /* ! CONFIG_PSM_LOWLEVEL_FLASH_OPR_DEBUG */ + +#ifdef CONFIG_PSM_FUNC_DEBUG +#define psm_entry(_fmt_, ...) wmprintf("######## > %s (" _fmt_ ") ####\n\r", __func__, ##__VA_ARGS__) +#define psm_entry_i(...) wmlog_entry(__VA_ARGS__) +#else +#define psm_entry(...) +#define psm_entry_i(...) +#endif /* ! CONFIG_PSM_DEBUG */ + +typedef enum +{ + PSM_EVENT_READ, + PSM_EVENT_WRITE, + PSM_EVENT_ERASE, + PSM_EVENT_COMPACTION, +} psm_event_t; + +typedef enum +{ + PSM_COMPACTION_1, + PSM_COMPACTION_2, + PSM_COMPACTION_3, + PSM_COMPACTION_4, + PSM_COMPACTION_5, + PSM_COMPACTION_6, + PSM_COMPACTION_7, + PSM_COMPACTION_8, + PSM_COMPACTION_9, + PSM_COMPACTION_10, + PSM_COMPACTION_MAX, +} psm_compaction_evt_t; + +typedef void (*psm_event_callback)(psm_event_t event, void *data, void *data1); + +int psm_register_event_callback(psm_event_callback cb); + +#endif /* __PSM_INTERNAL_H__ */ diff --git a/components/boot2_utils/psm-v2-secure.c b/components/boot2_utils/psm-v2-secure.c new file mode 100644 index 000000000..a7268a8e6 --- /dev/null +++ b/components/boot2_utils/psm-v2-secure.c @@ -0,0 +1,218 @@ +/** @file psm-v2-secure.c + * + * @brief Persistent storage manager version 2 + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#ifdef CONFIG_SECURE_PSM + +#include +#include "psm-v2-secure.h" +#include +#include "psm-internal.h" +#include "wm_os.h" +#include "fsl_aes.h" + +/* + * To encrypt (and decrypt) for each PSM object the "name + value" + * together is considered as a single unit. 'resetkey' function is called at + * the start of enc/dec operation for every object. + * + * Note that IV/nonce will be repeated for each PSM object. As of now each + * object encryption starts will same IV and key. + */ + +typedef struct +{ + bool is_key_copied; + const uint8_t *key; + const uint8_t *iv; + uint16_t key_sz; + uint16_t iv_sz; + /* CTR context */ + uint8_t nonce[AES_BLOCK_SIZE]; + uint8_t streamBlock[AES_BLOCK_SIZE]; + size_t offset; +} sec_data_t; + +static int psm_keystore_get_data(sec_data_t *sec_data) +{ + /* get encryption key & key_size from keystore */ + psm_d("Using secure keystore"); + int rv = keystore_get_ref(KEY_PSM_ENCRYPT_KEY, &sec_data->key_sz, &sec_data->key); + if (rv == ERR_TLV_NOT_FOUND) + { + psm_e( + "psm: Could not read key key_size from keystore. " + "Please flash correct boot2"); + return -WM_E_NOENT; + } + + /* get nonce from keystore */ + rv = keystore_get_ref(KEY_PSM_NONCE, &sec_data->iv_sz, &sec_data->iv); + if (rv == ERR_TLV_NOT_FOUND) + { + psm_e("psm: Could not read nonce"); + return -WM_E_NOENT; + } + + return WM_SUCCESS; +} + +int psm_security_init(psm_sec_hnd_t *sec_handle) +{ + sec_data_t *sec_data = os_mem_calloc(sizeof(sec_data_t)); + if (!sec_data) + return -WM_E_NOMEM; + + int rv = psm_keystore_get_data(sec_data); + if (rv != WM_SUCCESS) + { + os_mem_free(sec_data); + return rv; + } + + sec_data->is_key_copied = false; + + *sec_handle = (psm_sec_hnd_t)sec_data; + return WM_SUCCESS; +} + +int psm_security_init_with_key(psm_sec_hnd_t *sec_handle, psm_cfg_t *psm_cfg) +{ + /* Check if psm_cfg provides a key */ + if ((psm_cfg->key == NULL) || (psm_cfg->iv == NULL) || (psm_cfg->key_sz == 0) || (psm_cfg->iv_sz == 0)) + { + return -WM_E_INVAL; + } + + sec_data_t *sec_data = os_mem_calloc(sizeof(sec_data_t)); + if (!sec_data) + { + return -WM_E_NOMEM; + } + + uint8_t *key = os_mem_calloc(psm_cfg->key_sz); + if (!key) + { + os_mem_free(sec_data); + return -WM_E_NOMEM; + } + memcpy(key, psm_cfg->key, psm_cfg->key_sz); + sec_data->key = key; + sec_data->key_sz = psm_cfg->key_sz; + + uint8_t *iv = os_mem_calloc(psm_cfg->iv_sz); + if (!iv) + { + os_mem_free(key); + os_mem_free(sec_data); + return -WM_E_NOMEM; + } + memcpy(iv, psm_cfg->iv, psm_cfg->iv_sz); + sec_data->iv = iv; + sec_data->iv_sz = psm_cfg->iv_sz; + + sec_data->is_key_copied = true; + + *sec_handle = (psm_sec_hnd_t)sec_data; + return WM_SUCCESS; +} + +#define KEY_IN_KS_UNINIT -1 +#define KEY_IN_KS_ABSENT 0 +#define KEY_IN_KS_PRESENT 1 + +bool psm_is_key_present_in_keystore() +{ + static int8_t key_present = KEY_IN_KS_UNINIT; + + /* Prevent frequent searches */ + if (key_present == KEY_IN_KS_UNINIT) + key_present = ((keystore_get_ref(KEY_PSM_ENCRYPT_KEY, NULL, NULL) != ERR_TLV_NOT_FOUND) && + (keystore_get_ref(KEY_PSM_NONCE, NULL, NULL) != ERR_TLV_NOT_FOUND)); + + return key_present; +} + +int psm_key_reset(psm_sec_hnd_t sec_handle, psm_resetkey_mode_t mode) +{ + sec_data_t *sec_data = (sec_data_t *)sec_handle; + + if (!sec_data) + return -WM_FAIL; + + AES_SetCTRCountModular(AES, 0); + assert(sec_data->iv_sz >= AES_BLOCK_SIZE); + memcpy(sec_data->nonce, sec_data->iv, AES_BLOCK_SIZE); + sec_data->offset = 0U; + + return WM_SUCCESS; +} + +int psm_encrypt(psm_sec_hnd_t sec_handle, const void *plain, void *cipher, uint32_t len) +{ + sec_data_t *sec_data = (sec_data_t *)sec_handle; + int status; + + if (!sec_data) + return -WM_FAIL; + + status = AES_CryptCtrWithLock(AES, sec_data->key, sec_data->key_sz, plain, cipher, len, sec_data->nonce, + sec_data->streamBlock, &sec_data->offset); + + return status; +} + +int psm_decrypt(psm_sec_hnd_t sec_handle, const void *cipher, void *plain, uint32_t len) +{ + sec_data_t *sec_data = (sec_data_t *)sec_handle; + int status; + + if (!sec_data) + return -WM_FAIL; + + status = AES_CryptCtrWithLock(AES, sec_data->key, sec_data->key_sz, cipher, plain, len, sec_data->nonce, + sec_data->streamBlock, &sec_data->offset); + + return status; +} + +void psm_security_deinit(psm_sec_hnd_t *sec_handle) +{ + sec_data_t *sec_data = (sec_data_t *)*sec_handle; + + if (!sec_data) + return; + + uint8_t *key = (uint8_t *)sec_data->key; + uint8_t *iv = (uint8_t *)sec_data->iv; + + if (sec_data->is_key_copied) + { + os_mem_free(iv); + os_mem_free(key); + } + os_mem_free(sec_data); +} +#endif /* CONFIG_SECURE_PSM */ diff --git a/components/boot2_utils/psm-v2-secure.h b/components/boot2_utils/psm-v2-secure.h new file mode 100644 index 000000000..fe10717b9 --- /dev/null +++ b/components/boot2_utils/psm-v2-secure.h @@ -0,0 +1,156 @@ +/** @file psm-v2-secure.h + * + * @brief Persistent storage manager version 2 (secure) + * + * This file is used in case of Secure PSM. The idea is to have easily + * replacable security function. The security functions declared in this + * file need to be implemented. There can be mupliple versions. One of them + * can be selected at compile time. + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include + +typedef void *psm_sec_hnd_t; + +/** Enum values which will be passed back in callback function 'resetkey' */ +typedef enum +{ + SET_ENCRYPTION_KEY = 0, + SET_DECRYPTION_KEY = 1, +} psm_resetkey_mode_t; + +/** + * Security Init. + * + * This function should perform the initialization required for psm + * encryption and decryption operations. This should do everything that is + * required to enable encryption and decryption operations later. This + * function is invoked when psm_module_init() is invoked. + * + * @param[out] sec_handle Pointer to handle. Will be populated by + * psm_security_init() + * + * @return User defined value typically WM_SUCCESS or -WM_FAIL. Any + * failure here will abort the ongoing PSM operation. + */ +int psm_security_init(psm_sec_hnd_t *sec_handle); + +/** + * Security Init with key from caller. + * + * This function is similar to psm_security_init() with key from caller. + * This function should perform the initialization required for psm + * encryption and decryption operations. This should do everything that is + * required to enable encryption and decryption operations later. This + * function is invoked when psm_module_init() is invoked. + * + * @param[out] sec_handle Pointer to handle. Will be populated by + * psm_security_init_with_key() + * @param[in] psm_cfg Pointer to psm_cfg_t where it contains key/iv to be + * used by security encryption/decryption operations. PSMv2 won't need user + * copy of any field in psm_cfg after call returns. + * + * @return User defined value typically WM_SUCCESS or -WM_FAIL. Any + * failure here will abort the ongoing PSM operation. + */ +int psm_security_init_with_key(psm_sec_hnd_t *sec_handle, psm_cfg_t *psm_cfg); + +/** + * Specify if encryption/decryption key is present in keystore or not. + * + * This function returns true if the key is present in + * keystore, otherwise returns false. + * + * @return True if encryption/decryption key is present in keystore, + * otherwise false. + */ +bool psm_is_key_present_in_keystore(); + +/** + * Reset PSM key. + * + * This function should reset the encryption/decryption key and/or + * nonce. This function will be called at the start of operation on every + * PSM object. + * + * Every PSM object is regarded as a independant encryption/decryption unit + * by the PSM. Hence, this function will be called at the start of + * processing of any new object. + * + * @param[in] sec_handle The same handle returned by psm_security_init(). + * @param[in] mode The exact operation that will happen later for this + * key. + * + * @return User defined value typically WM_SUCCESS or -WM_FAIL. Any + * failure here will abort the ongoing PSM operation. + */ +int psm_key_reset(psm_sec_hnd_t sec_handle, psm_resetkey_mode_t mode); + +/** + * Encrypt PSM operation. + * + * This function should perform the encryption of psm data passed as a + * parameter. + * + * @param[in] sec_handle The same handle returned by psm_security_init(). + * @param[in] plain Pointer to data to be encrypted (plain text) + * @param[out] cipher Pointer to encrypted data (cipher text). + * @param[in] len Length of data to be encrypted. + * + * @return User defined value typically WM_SUCCESS or -WM_FAIL. Any + * failure here will abort the ongoing PSM operation. + */ +int psm_encrypt(psm_sec_hnd_t sec_handle, const void *plain, void *cipher, uint32_t len); + +/** + * Decrypt PSM operation. + * + * This function should perform the decryption of psm data passed as a + * parameter. + * + * @param[in] sec_handle The same handle returned by psm_security_init(). + * @param[in] cipher Pointer to data to be decrypted (cipher text) + * @param[out] plain Pointer to buffer where decrypted data (plain + * text) should be stored. Note that cipher and plain point to + * same buffer i.e. PSM-v2 expects in place decryption. + * @param[in] len Length of data to be decrypted. + * + * @return User defined value typically WM_SUCCESS or -WM_FAIL. Any + * failure here will abort the ongoing PSM operation. + */ +int psm_decrypt(psm_sec_hnd_t sec_handle, const void *cipher, void *plain, uint32_t len); + +/** + * Security de-init + * + * This function should perform the de-initialization required to + * free up the resources used for psm encryption and decryption + * operations. After this API no other security related function will be + * invoked. The implementation can free up any resources it is using. This + * function is invoked when psm_module_deinit() is invoked. + * + * @param[in] sec_handle Pointer to the same handle returned by + * psm_security_init(). + */ +void psm_security_deinit(psm_sec_hnd_t *sec_handle); diff --git a/components/boot2_utils/psm-v2.c b/components/boot2_utils/psm-v2.c new file mode 100644 index 000000000..b41d42929 --- /dev/null +++ b/components/boot2_utils/psm-v2.c @@ -0,0 +1,3383 @@ +/** @file psm-v2.c + * + * @brief Persistent storage manager version 2 + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include "psm-internal.h" +#ifdef CONFIG_SECURE_PSM +#include "psm-v2-secure.h" +#endif +#include +#include +#include "mflash_drv.h" +#include "psm_list.h" +#include "crc32.h" + +#define OBJECT_TYPE_INVALID (object_type_t)0x0000 +#define OBJECT_TYPE_SMALL_BINARY (object_type_t)0xAA55 +#define OBJECT_TYPE_SMALL_BINARY_MAX_SIZE (uint16_t)(~0) + +/* + * Terminology: + * + * offset: Offset from the assigned flash block + * address: Address of the flash device + * bit clear: value is '1' + * bit set: value is '0' + * compaction: remove all inactive variables from flash. + * indexing: Save the offset of active objects in RAM for direct access. + */ + +/** + * Defines the single read size during verification. Bigger size will speed + * up verification but may cause stack overflows depending on application + * stack usage pattern. + */ +#define READ_BUFFER_SIZE 64 +#define PSM_INVALID_OBJ_ID 0xFFFF +#define PSM_DATA_SWAP_DEMARCATION 4 +#define CHECKPOINT_MARKER 0x55AA +#define PSM_MAX_OBJNAME_LEN 256 + +/* + * This is soft limit. Is defined to optimize memory usage considering + * real world scenario. Can be increased upto what is supported by flash + * object object-id data type. + */ +#define PSM_MAX_OBJECTS 512 +#define PSM_DEFAULT_INDEX_ELEMENTS 10 + +/** + * fixme: This value needs to be asked from flash driver. Fix this later + * when appropriate API is added in flash driver. + */ +#define PSM_FLASH_SECTOR_SIZE 4096 + +enum +{ + PSM_OBJ_INACTIVE = 0x01, + PSM_OBJ_CACHE_REQ = 0x02, + PSM_OBJ_INDEX_REQ = 0x04, + PSM_OBJ_SECURE_MASK = 0x18, +}; + +/* + * Encoding of secure status bits (PSM_OBJ_SECURE_MASK) is as follows: + * (2b' stands for 2-bit binary bit-field) + * 2b'00 : Encrypted + * 2b'01 : Unencrypted + * 2b'10 : Encrypted (legacy value, update to 2b'00) + * 2b'11 : Unset, set to either 2b'00 or 2b'01 + * Values are shifted by secure status bit-position. + */ +enum +{ + PSM_OBJ_SECURE = 0x00, + PSM_OBJ_UNSECURE = 0x08, + PSM_OBJ_SECURE_LEGACY = 0x10, + PSM_OBJ_SECURE_UNSET = 0x18 +}; + +enum +{ + PSM_WRITE_NO_VERIFY = false, + PSM_WRITE_VERIFY = true +}; + +typedef uint16_t objectid_t; +typedef uint16_t object_type_t; + +PACK_START typedef struct +{ + uint8_t name_len; + uint16_t data_len; + /* If secure PSM is enabled, the name variable will be encrypted. */ + /* void *name */ + /* If secure PSM is enabled, the data buffer will be in decrypted + state */ + /* void *data */ +} PACK_END psm_cache_t; + +typedef struct psm_index_s +{ + uint32_t name_hash; + uint16_t obj_id; + uint32_t flash_offset; + psm_cache_t *cache; +} psm_index_t; + +/* Every PSM object has this structure on the flash */ +PACK_START typedef struct +{ + object_type_t object_type; + /** Flags: + * [7-5]: Reserved + * [3:4] : Secure status bits + * [2] : Index request + * [1] : Cache request + * [0] : Active status + */ + uint8_t flags; + /** CRC32 of entire psm object including metadata */ + uint32_t crc32; + /** Length of the data field */ + uint16_t data_len; + + /** Object ID: A unique id for the object name ASCII string */ + objectid_t obj_id; + /** Length of object name. If this is zero the object has been + * seen before and obj_id->name mapping is present. X-Ref: macro + * PSM_MAX_OBJNAME_LEN + */ + uint8_t name_len; + /** Variable length object name string. */ + /* uint8_t name[]; */ + /** Binary data here. Length == psm_object.data_len member above */ + /* uint8_t bin_data[]; */ +} PACK_END psm_object_t; + +PACK_START typedef struct +{ + uint32_t swap_start_offset; + uint32_t swap_start_offset_inv; + uint16_t checkpoint_marker; + uint16_t checkpoint_marker_inv; +} PACK_END psm_swap_desc_t; + +typedef struct +{ + os_rw_lock_t prwlock; + + uint32_t total_active_object_size; + uint32_t object_offset_limit; + uint32_t data_free_offset; + /* + * We do not re-use object ID's of inactivated objects. It is + * expected that number of used object ID will never actually reach + * the highest number we support. After erase object ID's are + * re-programmed. + */ + objectid_t highest_used_obj_id; + uint32_t index_max_elements; + uint32_t index_elements; + psm_index_t *index; + psm_cfg_t psm_cfg; + + /* Flash driver handle */ + uint8_t fdesc_fl_dev; + uint32_t block_size; + uint32_t block_cnt; + uint32_t part_size; + uint32_t start_address; +#ifdef CONFIG_SECURE_PSM + psm_sec_hnd_t psm_sec_hnd; + uint8_t psm_enc_buf[READ_BUFFER_SIZE]; + /* This will hold encrypted copy of the name for the whole time + the object is open in write mode. For read mode it is valid + only for some time during open */ + uint8_t psm_name_enc_buf[PSM_MAX_OBJNAME_LEN]; +#endif + + psm_list_t node; +} psm_t; + +/* Ephemeral RAM structure corresponding to PSM object in flash */ +typedef struct psm_objinfo_s +{ + psm_t *psm; + psm_object_t pobj; + /* Start of object offset */ + uint32_t object_flash_offset; + /* Will move according to user operations on the object */ + uint32_t curr_flash_offset; + psm_mode_t mode; + /* Communicated by caller in psm_object_open(). */ + uint32_t max_data_len; + /** CRC32 calculated on the fly in read mode */ + uint32_t crc32; + bool old_active_object_present; + /* Pointer to old object structure, if any */ + uint32_t old_object_flash_offset; + uint32_t old_object_size; + + psm_index_t *index; +} psm_objinfo_t; + +#define block_size(__psm__) (__psm__->block_size) +#define block_cnt(__psm__) (__psm__->block_cnt) +#define part_size(__psm__) (__psm__->part_size) +#define start_address(__psm__) (__psm__->start_address) +#define fldev(__psm__) (__psm__->fl_dev) + +#define offset_to_address(__psm__, __offset__) (__psm__->start_address + __offset__) + +#define align_to_block_offset(__psm__, __offset__) (__offset__ & ~(__psm__->block_size - 1)) + +#define is_offset_block_aligned(__psm__, __offset__) (!(__offset__ & (__psm__->block_size - 1))) + +#define object_size(__pobj__) (sizeof(psm_object_t) + (__pobj__)->name_len + (__pobj__)->data_len) + +#define psm_is_data_len_sane(__psm__, __len__) \ + ((__len__ < OBJECT_TYPE_SMALL_BINARY_MAX_SIZE) && (__len__ < (part_size(psm) / 2))) + +#define metadata_size(__pobj__) (sizeof(psm_object_t) + (__pobj__)->name_len) + +#define is_object_active(__pobj__) ((__pobj__)->flags & PSM_OBJ_INACTIVE) +#define is_object_indexable(__pobj__) (!((__pobj__)->flags & PSM_OBJ_INDEX_REQ)) +#define is_object_cacheable(__pobj__) (!((__pobj__)->flags & PSM_OBJ_CACHE_REQ)) + +#ifdef CONFIG_SECURE_PSM +#define get_object_secure_bits(__pobj__) ((__pobj__)->flags & PSM_OBJ_SECURE_MASK) + +#define set_object_secure_bits(__pobj__, bitval) \ + do \ + { \ + (__pobj__)->flags = (((__pobj__)->flags & ~PSM_OBJ_SECURE_MASK) | (bitval)); \ + } while (0) + +static inline bool is_object_secure(psm_object_t *__pobj__) +{ + uint8_t sec_status = get_object_secure_bits(__pobj__); + + switch (sec_status) + { + case PSM_OBJ_SECURE: + return true; + case PSM_OBJ_SECURE_LEGACY: + return true; + case PSM_OBJ_UNSECURE: + return false; + case PSM_OBJ_SECURE_UNSET: + if (psm_is_key_present_in_keystore()) + return true; + else + return false; + } + + /* Default is false */ + return false; +} + +#define set_object_secure(__pobj__) set_object_secure_bits((__pobj__), PSM_OBJ_SECURE) + +#define clear_object_secure(__pobj__) set_object_secure_bits((__pobj__), PSM_OBJ_UNSECURE) +#endif /* CONFIG_SECURE_PSM */ + +#define remaining_part_space(__psm__) (part_size(psm) - data_free_offset) + +#define part_readonly(__psm__) (__psm__->psm_cfg.read_only) +#define part_encrypted(__psm__) (__psm__->psm_cfg.secure) + +psm_event_callback g_psm_event_cb; + +/* This is a list of all initialized PSM partitions */ +static psm_list_t part_list; + +/* Only for test code. */ +#ifdef CONFIG_SECURE_PSM +static bool force_psm_secure; +#endif + +#ifdef CONFIG_PSM_EXTRA_DEBUG +void psm_print_object(psm_object_t *pobj) +{ + wmprintf("*******************\r\n"); + wmprintf("object_type: %x\r\n", pobj->object_type); + wmprintf("flags : %x\r\n", pobj->flags); + wmprintf("crc32 : %x\r\n", pobj->crc32); + wmprintf("data_len : %d\r\n", pobj->data_len); + wmprintf("obj_id : %d\r\n", pobj->obj_id); + wmprintf("name_len : %d\r\n", pobj->name_len); + wmprintf("*******************\r\n"); +} + +void psm_dump_hex(const char *buf, uint32_t size) +{ + int index = 0; + wmprintf("-----------------\r\n"); + for (index = 0; index < size; index++) + { + if (isprint((unsigned char)buf[index])) + wmprintf("%2x-(%c) ", (unsigned char)buf[index], buf[index]); + else + wmprintf("%2x-( ) ", (unsigned char)buf[index]); + if (!((index + 1) % 4)) + wmprintf("\r\n"); + } + wmprintf("\r\n-----------------\r\n"); +} +#endif /* CONFIG_PSM_EXTRA_DEBUG */ + +static int psm_init_locks(psm_t *psm) +{ + int rv = os_rwlock_create(&psm->prwlock, "prwmutex", "prwlock"); + if (rv != WM_SUCCESS) + { + psm_d("%s: rwlock create failed", __func__); + return rv; + } + + return rv; +} + +static int psm_deinit_locks(psm_t *psm) +{ + os_rwlock_delete(&psm->prwlock); + return WM_SUCCESS; +} + +int psm_rwlock_part(psm_t *psm, psm_mode_t mode) +{ +#ifdef CONFIG_PSM_LOCKS_DEBUG + psm_entry_i("mode: %d", mode); +#endif /* CONFIG_PSM_LOCKS_DEBUG */ + + if (mode == PSM_MODE_WRITE) + os_rwlock_write_lock(&psm->prwlock, OS_WAIT_FOREVER); + else + os_rwlock_read_lock(&psm->prwlock, OS_WAIT_FOREVER); + + return WM_SUCCESS; +} + +void psm_rwunlock_part(psm_t *psm, psm_mode_t mode) +{ +#ifdef CONFIG_PSM_LOCKS_DEBUG + psm_entry_i("mode: %d", mode); +#endif /* CONFIG_PSM_LOCKS_DEBUG */ + + if (mode == PSM_MODE_WRITE) + os_rwlock_write_unlock(&psm->prwlock); + else + os_rwlock_read_unlock(&psm->prwlock); +} + +static bool psm_is_objid_available(psm_t *psm) +{ + psm_entry_i(); + if (psm->highest_used_obj_id == (PSM_INVALID_OBJ_ID - 1)) + return false; + else + return true; +} + +bool psm_is_free_space(const psm_object_t *pobj) +{ + if (pobj->object_type == (object_type_t)~0) + return true; + + return false; +} + +/* + * Block size can be a multiple of sector size. For now keep it same as + * sector size. + */ +static int psm_get_block_size() +{ + return PSM_FLASH_SECTOR_SIZE; +} + +static objectid_t psm_get_unused_obj_id(psm_t *psm) +{ + psm_entry_i(); + if (psm->highest_used_obj_id >= (objectid_t)PSM_MAX_OBJECTS) + { + /* + * It is expected that this case would never occur. Put + * other way the number of unique objects in PSM can never + * cross PSM_MAX_OBJECTS. During compaction we re-program + * the object IDs. So, holes are not an issue anyway. + */ + psm_d("Invalid use case"); + return PSM_INVALID_OBJ_ID; + } + + psm->highest_used_obj_id++; + psm_ed("New object id assigned: 0x%x", psm->highest_used_obj_id); + return psm->highest_used_obj_id; +} + +static uint32_t psm_calc_metadata_crc32(psm_object_t *pobj, uint32_t partial_crc32) +{ + /* Backup */ + uint32_t temp_crc32 = pobj->crc32; + /* Init */ + pobj->crc32 = ~0; + /* Calculate */ + uint32_t crc32 = soft_crc32(pobj, sizeof(psm_object_t), partial_crc32); + /* Restore */ + pobj->crc32 = temp_crc32; + return crc32; +} + +/* + * Ensure that offset and size is block aligned. + */ +static int psm_erase_flash(psm_t *psm, uint32_t offset, uint32_t size) +{ + psm_ll("%s: offset: 0x%x size: 0x%x", __func__, offset, size); + + if ((offset % block_size(psm)) || (size % block_size(psm))) + { + psm_d("Misaligned offset or size: %x: %d", offset, size); + return -WM_E_INVAL; + } + + if ((offset + size) > part_size(psm)) + { + psm_d("Invalid params given to erase: %u: %u", offset, size); + return -WM_E_INVAL; + } + + uint32_t address = offset_to_address(psm, offset); + int rv = mflash_drv_erase(address, size); + if (rv != kStatus_Success) + { + psm_d("Unable to erase flash data %x:%d", address, size); + return rv; + } + + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_ERASE, (void *)((unsigned long)address), (void *)((unsigned long)size)); + + return rv; +} + +int psm_read_flash(psm_t *psm, void *buffer, uint32_t size, uint32_t offset) +{ + psm_ll("%s: %x, %d", __func__, offset, size); + + if (size == 0) + psm_d("%s: Zero length read from 0x%x", __func__, (uint32_t)__builtin_return_address(0)); + + if ((offset + size) > part_size(psm)) + { + psm_d("Invalid params given to read: %u: %u", offset, size); + return -WM_E_INVAL; + } + + uint32_t address = offset_to_address(psm, offset); + + int rv = mflash_drv_read(address, buffer, size); + if (rv != kStatus_Success) + { + psm_d("Unable to read from flash: %x: %d", address, size); + return rv; + } + + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_READ, (void *)((unsigned long)address), (void *)((unsigned long)size)); + + return rv; +} + +static int psm_write_verify(psm_t *psm, const uint8_t *reference_buf, uint32_t size, uint32_t offset) +{ + psm_entry_i(); + int rv; + uint32_t read_size; + char buf[READ_BUFFER_SIZE]; + uint32_t index; + for (index = 0; index < size; index += read_size) + { + uint32_t remaining = (size - index); + read_size = remaining > READ_BUFFER_SIZE ? READ_BUFFER_SIZE : remaining; + rv = psm_read_flash(psm, buf, read_size, offset + index); + if (rv != WM_SUCCESS) + { + psm_d("%s: psm_read_flash %x: %d failed", __func__, offset + index, read_size); + return rv; + } + + if (memcmp(&reference_buf[index], buf, read_size)) + { + psm_d("%s: verification failed @ offset: %x: %d", __func__, offset + index, read_size); + return -WM_FAIL; + } + } + + return WM_SUCCESS; +} + +/* + * This function is necessary only when source and destination address is + * from the same flash. + */ +static int psm_write_flash_same_device_rw(psm_t *psm, const void *buffer, uint32_t size, uint32_t address) +{ + int rv = -WM_FAIL; + const int tmpbuf_size = 16; + void *tmpbuf = os_mem_alloc(tmpbuf_size); + if (!tmpbuf) + return -WM_E_NOMEM; + + uint32_t remaining_size = size; + while (remaining_size) + { + int chunk_size = remaining_size > tmpbuf_size ? tmpbuf_size : remaining_size; + memcpy(tmpbuf, buffer, chunk_size); + rv = mflash_drv_write(address, tmpbuf, chunk_size); + if (rv != kStatus_Success) + { + psm_d("Unable to write to flash: %x: %d", address, size); + break; + } + + address += chunk_size; + remaining_size -= chunk_size; + buffer = (const uint8_t *)buffer + chunk_size; + } + + os_mem_free(tmpbuf); + return rv; +} + +/** + * If verify is 'true' the written data will be re-read and verified with + * original given buffer. Note that this uses heap to allocate read + * buffer. + */ +static int psm_write_flash(psm_t *psm, const void *buffer, uint32_t size, uint32_t offset, bool verify) +{ + psm_ll("%s: %x, %d", __func__, offset, size); + + if ((offset + size) > part_size(psm)) + { + psm_d("Invalid params given to write: %u: %u", offset, size); + return -WM_E_INVAL; + } + + int rv; + uint32_t address = offset_to_address(psm, offset); + + rv = mflash_drv_write(address, (void *)buffer, size); + if (rv != kStatus_Success) + { + if (rv == -WM_E_FAULT) + rv = psm_write_flash_same_device_rw(psm, buffer, size, address); + if (rv != kStatus_Success) + psm_d("(rw-flash) Unable to write to flash: %x: %d", address, size); + return rv; + } + + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_WRITE, (void *)((unsigned long)address), (void *)((unsigned long)size)); + + if (verify) + return psm_write_verify(psm, buffer, size, offset); + + return WM_SUCCESS; +} + +static int write_flag_bit(psm_t *psm, uint32_t flag_offset, uint8_t flag) +{ + /* + * Note: As per flash properties '0' value of a bit cannot be + * changed to '1' unless the flash sector is erased. Hence, we do + * not need to do a read-modify-write cycle to set a particular bit + * to zero as long as other bits in the written byte are '1' + */ + uint8_t inv_flag = ~(flag); + return psm_write_flash(psm, &inv_flag, sizeof(uint8_t), flag_offset, PSM_WRITE_NO_VERIFY); +} + +static int read_swap_descriptor(psm_t *psm, psm_swap_desc_t *swap_desc) +{ + psm_entry_i(); + uint32_t offset = part_size(psm) - sizeof(psm_swap_desc_t); + int rv = psm_read_flash(psm, swap_desc, sizeof(psm_swap_desc_t), offset); + if (rv != WM_SUCCESS) + { + psm_d("Unable to read swap descriptor"); + return rv; + } + + return WM_SUCCESS; +} + +static int write_swap_descriptor(psm_t *psm, const psm_swap_desc_t *swap_desc, bool write_swap_offset) +{ + uint32_t offset = part_size(psm) - sizeof(psm_swap_desc_t); + if (write_swap_offset) + { + psm_entry_i("swap_offset: 0x%x", swap_desc->swap_start_offset); + int rv = psm_write_flash(psm, &swap_desc->swap_start_offset, sizeof(swap_desc->swap_start_offset) * 2, offset, + PSM_WRITE_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("Unable to write swap descriptor offset"); + return rv; + } + } + else + { + psm_entry_i("marker: 0x%x", swap_desc->checkpoint_marker); + offset += offsetof(psm_swap_desc_t, checkpoint_marker); + int rv = psm_write_flash(psm, &swap_desc->checkpoint_marker, sizeof(swap_desc->checkpoint_marker) * 2, offset, + PSM_WRITE_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("Unable to write swap descriptor marker"); + return rv; + } + } + + return WM_SUCCESS; +} + +static int invalidate_swap_descriptor(psm_t *psm) +{ + psm_entry_i(); + psm_swap_desc_t swap_desc; + memset(&swap_desc, 0x00, sizeof(psm_swap_desc_t)); + + uint32_t offset = part_size(psm) - sizeof(psm_swap_desc_t); + int rv = psm_write_flash(psm, &swap_desc, sizeof(psm_swap_desc_t), offset, PSM_WRITE_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("Unable to invalidate swap descriptor offset"); + return rv; + } + + return WM_SUCCESS; +} + +typedef enum +{ + /* + * - Data area good. + * - No/Invalid swap descriptor present. + * - Compaction to be done. + */ + CHECKPOINT_0, + /* + * - Data area good. + * - Compaction has/was started. + * - Swap offset is correct. + * - Checkpoint marker is not correct. + */ + CHECKPOINT_1, + /* + * - Swap area is good. + * - Data incorrect assumed. + * - Valid swap descriptor present with checkpoint marker. + */ + CHECKPOINT_2, + /* + * - Data area is good. + * - Swap area descriptor is invalid. + * - Compaction is not needed. Only the swap needs to be brought to + * init state. + */ + CHECKPOINT_3, + /* + * - Data area is good. + * - Swap area is clean. + * - No-op + */ + CHECKPOINT_4, +} checkpoint_t; + +static uint32_t psm_get_swap_start_offset(psm_t *psm) +{ + return align_to_block_offset(psm, (part_size(psm) - sizeof(psm_swap_desc_t) - psm->total_active_object_size)); +} + +#ifdef CONFIG_SECURE_PSM +int resetkey(psm_t *psm, psm_resetkey_mode_t mode) +{ + return psm_key_reset(psm->psm_sec_hnd, mode); +} + +int encrypt_buf(psm_t *psm, const void *plain, void *cipher, int len) +{ + return psm_encrypt(psm->psm_sec_hnd, plain, cipher, len); +} + +int decrypt_buf(psm_t *psm, const void *cipher, void *plain, int len) +{ + return psm_decrypt(psm->psm_sec_hnd, cipher, plain, len); +} +#endif /* CONFIG_SECURE_PSM */ + +static void psm_reset_index(psm_t *psm) +{ + psm_entry_i(); + if (!psm->index) + { + psm->index_elements = 0; + psm->index_max_elements = 0; + return; + } + + int cnt; + for (cnt = 0; cnt < psm->index_elements; cnt++) + { + if (psm->index[cnt].cache) + { + os_mem_free(psm->index[cnt].cache); + psm->index[cnt].cache = NULL; + } + } + + os_mem_free(psm->index); + psm->index = NULL; + psm->index_elements = 0; + psm->index_max_elements = 0; +} + +/* + * Also copies the name to the name buffer is buffer address is supplied. + */ +static int psm_calc_name_hash( + psm_t *psm, psm_object_t *pobj, uint32_t flash_offset, uint32_t *name_hash, uint8_t *name_buf) +{ + uint8_t buf[READ_BUFFER_SIZE]; + uint32_t crc32 = 0; + uint8_t read_size; + uint8_t index; + uint32_t name_flash_offset = flash_offset + sizeof(psm_object_t); + + flash_offset += sizeof(psm_object_t); + for (index = 0; index < pobj->name_len; index += read_size) + { + uint8_t remaining = pobj->name_len - index; + read_size = remaining > READ_BUFFER_SIZE ? READ_BUFFER_SIZE : remaining; + int rv = psm_read_flash(psm, buf, read_size, name_flash_offset); + if (rv != WM_SUCCESS) + { + psm_d("%s: Unable to read name", __func__); + return rv; + } + + if (name_buf) + memcpy(&name_buf[index], buf, read_size); + + name_flash_offset += read_size; + crc32 = soft_crc32(buf, read_size, crc32); + } + + *name_hash = crc32; + return WM_SUCCESS; +} + +static void psm_add_to_index(psm_t *psm, psm_object_t *pobj, uint32_t flash_offset) +{ + psm_i("Indexing obj_id: %d", pobj->obj_id); + if (!psm->index) + { + psm_i("Allocating index"); + uint32_t index_size = sizeof(psm_index_t) * PSM_DEFAULT_INDEX_ELEMENTS; + psm->index = os_mem_calloc(index_size); + if (!psm->index) + { + psm_d("Index allocation failed"); + return; + } + + psm->index_elements = 0; + psm->index_max_elements = PSM_DEFAULT_INDEX_ELEMENTS; + } + + if (psm->index_elements == psm->index_max_elements) + { + /* Indexing space is over. Try to get more space */ + psm_i("Increasing index allocation"); + uint32_t current_index_size = sizeof(psm_index_t) * psm->index_max_elements; + uint32_t new_index_size = current_index_size + (sizeof(psm_index_t) * PSM_DEFAULT_INDEX_ELEMENTS); + psm_index_t *new_index = os_mem_alloc(new_index_size); + + if (!new_index) + { + psm_d("New index allocation failed: %d", new_index_size); + return; + } + memcpy(new_index, psm->index, current_index_size); + os_mem_free(psm->index); + + /* Zero out new allocated area */ + memset(&new_index[psm->index_max_elements], 0x00, (sizeof(psm_index_t) * PSM_DEFAULT_INDEX_ELEMENTS)); + psm->index = new_index; + psm->index_max_elements += PSM_DEFAULT_INDEX_ELEMENTS; + } + + psm_cache_t *cache = NULL; + uint8_t *name_buf = NULL; + uint8_t *data_buf = NULL; + if (is_object_cacheable(pobj)) + { + uint32_t cache_size = sizeof(psm_cache_t) + pobj->name_len + pobj->data_len; + cache = os_mem_calloc(cache_size); + if (cache) + { + cache->name_len = pobj->name_len; + cache->data_len = pobj->data_len; + /* Point name buf to name field of cache */ + name_buf = (uint8_t *)(cache + 1); + data_buf = name_buf + cache->name_len; + } + else + { + psm_d("Cache allocation failed. Ignoring"); + } + } + + psm_index_t *index = &psm->index[psm->index_elements]; + + uint32_t name_hash = 0; + + int rv = psm_calc_name_hash(psm, pobj, flash_offset, &name_hash, name_buf); + if (rv != WM_SUCCESS) + { + psm_d("Name_Hash calculation failed"); + os_mem_free(cache); + return; + } + + index->name_hash = name_hash; + index->obj_id = pobj->obj_id; + index->flash_offset = flash_offset; + index->cache = cache; + + if (!cache) + { + psm->index_elements++; + return; + } + + psm_i("Object %d is also cacheable. Caching name and value (size: %d)", pobj->obj_id, cache->data_len); + /* + * Object is also cacheable. Name field is already read and + * cached. Other fields of cache object are populated. Now cache + * the data field. + */ + if (cache->data_len != 0) + { + rv = psm_read_flash(psm, data_buf, cache->data_len, flash_offset + metadata_size(pobj)); + if (rv != WM_SUCCESS) + { + psm_d("Failed to cache name field"); + os_mem_free(cache); + memset(index, 0x00, sizeof(psm_index_t)); + return; + } + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + { + rv = resetkey(psm, SET_DECRYPTION_KEY); + if (rv != WM_SUCCESS) + { + psm_d("reset enc key (data_i) fail"); + os_mem_free(cache); + memset(index, 0x00, sizeof(psm_index_t)); + return; + } + + /* Use 'psm_name_enc_buf' as temp. buffer */ + rv = decrypt_buf(psm, name_buf, psm->psm_name_enc_buf, cache->name_len); + if (rv != WM_SUCCESS) + { + os_mem_free(cache); + memset(index, 0x00, sizeof(psm_index_t)); + return; + } + + rv = decrypt_buf(psm, data_buf, data_buf, cache->data_len); + if (rv != WM_SUCCESS) + { + psm_d("dec-i fail"); + os_mem_free(cache); + memset(index, 0x00, sizeof(psm_index_t)); + return; + } + } +#endif /* CONFIG_SECURE_PSM */ + } + + psm->index_elements++; +} + +/* + * Return -WM_FAIL if already set. Set bit and return WM_SUCCESS + * otherwise. + */ +static int test_and_set_bitmap(uint8_t *bitmap, objectid_t obj_id) +{ + uint32_t bit_num = (uint32_t)obj_id; + uint32_t array_offset = bit_num / (sizeof(uint8_t) * 8); + uint32_t bit_offset = bit_num % (sizeof(uint8_t) * 8); + + if (bitmap[array_offset] & (uint8_t)(1 << bit_offset)) + return -WM_FAIL; /* Already set */ + + bitmap[array_offset] |= (uint8_t)(1 << bit_offset); + return WM_SUCCESS; +} + +/* + * Kill the object. A recovery would be needed invariably. + */ +static void handle_double_active_object(psm_t *psm, uint32_t object_offset) +{ + /* + * Kill the object and invalidating the object type field. All + * objects after this object will become effectively lost after + * this. This is not so bad because a double active object case + * would is expected to occur when an new object write did not + * complete successfully. Thus, there should be no objects after + * this. + */ + object_type_t invalid_obj = OBJECT_TYPE_INVALID; + (void)psm_write_flash(psm, &invalid_obj, sizeof(invalid_obj), object_offset, false); +} + +static int psm_part_scan(psm_t *psm) +{ + psm_entry_i(); + + uint32_t offset = 0; + + uint32_t limit = psm->object_offset_limit; + psm_object_t pobj; + objectid_t highest_found = 0; + + uint32_t bitmap_size = (PSM_MAX_OBJECTS / 8) + 1; + + /* A bitmap to map all active objects */ + uint8_t *bitmap = os_mem_calloc(bitmap_size); + if (!bitmap) + { + psm_e("unable to alloc psm object bitmap"); + return -WM_E_NOMEM; + } + + int rv = WM_SUCCESS, rv1; + + psm->total_active_object_size = 0; + psm_reset_index(psm); + + while (offset < limit) + { + psm_isc("offset: %p (%p) limit: %p (%p) ", (void *)offset, (void *)offset_to_address(psm, offset), + (void *)limit, (void *)offset_to_address(psm, limit)); + rv1 = psm_read_flash(psm, &pobj, sizeof(psm_object_t), offset); + if (rv1 != WM_SUCCESS) + { + psm_w("scan: could not read object @ off: %x", offset); + rv = rv1; + break; + } + + if (psm_is_free_space(&pobj)) + { + psm_isc("Free space marker found"); + break; + } + + if (pobj.object_type != OBJECT_TYPE_SMALL_BINARY) + { + psm_w( + "scan: Invalid obj (%x) at the end of" + " data area off: %p addr: %p", + pobj.object_type, (void *)((long)offset), (void *)((long)offset_to_address(psm, offset))); + rv = -WM_FAIL; + break; + } + + if (!psm_is_data_len_sane(psm, pobj.data_len)) + { + /* Invalid length of object. Need recovery */ + psm_w("PSM invalid object found during scan."); + rv = -WM_FAIL; + break; + } + + if (pobj.obj_id > highest_found) + highest_found = pobj.obj_id; + + if (!is_object_active(&pobj)) + { + offset += object_size(&pobj); + continue; + } + + rv1 = test_and_set_bitmap(bitmap, pobj.obj_id); + if (rv1 == -WM_FAIL) + { + psm_w("Double active object %d detected", pobj.obj_id); + handle_double_active_object(psm, offset); + /* Report error to start recovery */ + rv = rv1; + break; + } + +#ifdef CONFIG_SECURE_PSM + /* + * Check for partition encryption status vs. object encryption + * status mismatch + */ + if ((part_encrypted(psm) && !is_object_secure(&pobj)) || (!part_encrypted(psm) && is_object_secure(&pobj))) + { + /* + * Report error to start recovery/upgrade. + * Continue scanning however. + */ + psm_d( + "PSM secure status mismatch found during" + " scan"); + rv = -WM_FAIL; + offset += object_size(&pobj); + psm->total_active_object_size += object_size(&pobj); + continue; + } +#else + /* + * Ignore this case, as no recovery/upgrade is possible because + * of absence of encryption/decryption functions + */ +#endif /* CONFIG_SECURE_PSM */ + + if (is_object_indexable(&pobj)) /* Ignore any error */ + psm_add_to_index(psm, &pobj, offset); + + psm_isc("Obj: Name Len: %d Data Len: %d Active: %d", pobj.name_len, pobj.data_len, is_object_active(&pobj)); + + /* Only active objects length is added */ + psm->total_active_object_size += object_size(&pobj); + offset += object_size(&pobj); + } + + psm_isc("Scan complete: Data Free Offset: %p Phy. Address: %p", offset, offset_to_address(psm, offset)); + + psm->highest_used_obj_id = highest_found; + psm->data_free_offset = offset; + psm_d("data_free_offset set to 0x%x", psm->data_free_offset); + + os_mem_free(bitmap); + return rv; +} + +/* + * - Copies an object from source offset (swap) to dest offset (data). + * - Verification of CRC is also done on-the-go. If the CRC is wrong, the + * destination object is marked inactive. + * - Assumes that the source psm_object_t is already read and pobj param is + * populated. + */ +static int psm_copy_object( + psm_t *psm, psm_object_t *pobj, uint32_t source_offset, uint32_t dest_offset, objectid_t new_objid) +{ + psm_entry_i("obj-id: 0x%x len: %d source: 0x%x dest: 0x%x", pobj->obj_id, pobj->data_len, source_offset, + dest_offset); + + psm_ed("Copying object %d\r\n", pobj->obj_id); + + /* + * The destination object ID is different than that of source. CRC + * comparison needs to take care of this fact. Basically, CRC needs + * to be calculated separately for source object and destination + * object. + */ + uint32_t src_ref_crc32 = pobj->crc32; + uint32_t cal_crc32 = 0; + objectid_t saved_src_obj_id = pobj->obj_id; + + uint32_t dest_object_start_offset = dest_offset; + + /* Update Object iD for destination object */ + pobj->obj_id = new_objid; + /* Keep CRC32 field uninitialized */ + pobj->crc32 = (uint32_t)~0; + + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_10, (void *)PSM_COMPACTION_MAX); + + int rv = psm_write_flash(psm, pobj, sizeof(psm_object_t), dest_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: metadata write failed", __func__); + return rv; + } + + dest_offset += sizeof(psm_object_t); + source_offset += sizeof(psm_object_t); + + uint32_t copy_size = pobj->name_len + pobj->data_len; + + uint8_t buf[READ_BUFFER_SIZE]; + uint32_t index; + uint32_t read_size; + for (index = 0; index < copy_size; index += read_size) + { + uint32_t remaining = copy_size - index; + read_size = remaining > READ_BUFFER_SIZE ? READ_BUFFER_SIZE : remaining; + + int rv = psm_read_flash(psm, buf, read_size, source_offset); + if (rv != WM_SUCCESS) + { + psm_d("%s: read failed", __func__); + return rv; + } + + rv = psm_write_flash(psm, buf, read_size, dest_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: write failed", __func__); + return rv; + } + + cal_crc32 = soft_crc32(buf, read_size, cal_crc32); + + source_offset += read_size; + dest_offset += read_size; + } + + uint32_t dest_crc32 = psm_calc_metadata_crc32(pobj, cal_crc32); + + /* Restore obj_id to calculate CRC32 */ + pobj->obj_id = saved_src_obj_id; + uint32_t src_crc32 = psm_calc_metadata_crc32(pobj, cal_crc32); + + psm_ed("src_ref_crc32: 0x%x src_crc32: 0x%x dest_crc32: 0x%x", src_ref_crc32, src_crc32, dest_crc32); + /* + * Check is source object CRC32 was correct. We are doing this + * late to avoid two passes over source object data. + */ + if (src_crc32 == src_ref_crc32) + { + /* + * Write new CRC32. We have to update CRC32 because we have + * programmed new obj-id. + */ + uint32_t crc32_offset = dest_object_start_offset + offsetof(psm_object_t, crc32); + rv = psm_write_flash(psm, &dest_crc32, sizeof(dest_crc32), crc32_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("Failed to update CRC32 of copied object"); + return rv; + } + + return WM_SUCCESS; + } + + /* + * Mark inactive just copied object because CRC calculation + * failed. This effectively deletes the object from the PSM. + */ + psm_d("Object: 0x%x has failed CRC during copy. Marking inactive", pobj->obj_id); + uint32_t flag_offset = dest_object_start_offset + offsetof(psm_object_t, flags); + rv = write_flag_bit(psm, flag_offset, PSM_OBJ_INACTIVE); + if (rv != WM_SUCCESS) + { + psm_d("Failed to mark copied object inactive"); + return rv; + } + + return WM_SUCCESS; +} + +static int psm_upgrade_object( + psm_t *psm, psm_object_t *pobj, uint32_t source_offset, uint32_t dest_offset, objectid_t new_objid) +{ + psm_entry_i("obj-id: 0x%x len: %d source: 0x%x dest: 0x%x", pobj->obj_id, pobj->data_len, source_offset, + dest_offset); + + psm_ed("Upgrading object %d\r\n", pobj->obj_id); + + /* + * The destination object ID is different than that of source. CRC + * comparison needs to take care of this fact. Basically, CRC needs + * to be calculated separately for source object and destination + * object. + */ + uint32_t src_ref_crc32 = pobj->crc32; + uint32_t src_cal_crc32 = 0, dest_cal_crc32 = 0; + objectid_t saved_src_obj_id = pobj->obj_id; + + uint32_t dest_object_start_offset = dest_offset; + + /* Handle object metadata */ + /* Update Object iD for destination object */ + pobj->obj_id = new_objid; + /* Keep CRC32 field uninitialized */ + pobj->crc32 = (uint32_t)~0; + +#ifdef CONFIG_SECURE_PSM + uint8_t saved_object_secure_bits = get_object_secure_bits(pobj); + bool saved_is_object_secure = is_object_secure(pobj); + if (part_encrypted(psm)) + set_object_secure(pobj); + else + clear_object_secure(pobj); +#endif /* CONFIG_SECURE_PSM */ + + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_10, (void *)PSM_COMPACTION_MAX); + + int rv = psm_write_flash(psm, pobj, sizeof(psm_object_t), dest_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: metadata write failed", __func__); + return rv; + } + + dest_offset += sizeof(psm_object_t); + source_offset += sizeof(psm_object_t); + + /* Handle object name & data */ + uint32_t copy_size = pobj->name_len + pobj->data_len; + + uint8_t buf[READ_BUFFER_SIZE]; + uint32_t index; + uint32_t read_size; + +#ifdef CONFIG_SECURE_PSM + /* Encryption/decryption sequence is: + * 1. Reset AES engine (resetkey()) + * 2. Encrypt/decrypt name field in chunks + * 3. Encrypt/decrypt data field in chunks + */ + if (part_encrypted(psm) && !saved_is_object_secure) + { + /* Reset the AES engine */ + rv = resetkey(psm, SET_ENCRYPTION_KEY); + if (rv != WM_SUCCESS) + { + psm_d("upgrade: reset enc key fail"); + return rv; + } + } + else if (!part_encrypted(psm) && saved_is_object_secure) + { + /* Reset the AES engine */ + rv = resetkey(psm, SET_DECRYPTION_KEY); + if (rv != WM_SUCCESS) + { + psm_d("upgrade: reset dec key fail"); + return rv; + } + } +#endif /* CONFIG_SECURE_PSM */ + + for (index = 0; index < copy_size; index += read_size) + { + uint32_t remaining = copy_size - index; + read_size = remaining > READ_BUFFER_SIZE ? READ_BUFFER_SIZE : remaining; + + int rv = psm_read_flash(psm, buf, read_size, source_offset); + if (rv != WM_SUCCESS) + { + psm_d("%s: read failed", __func__); + return rv; + } + + src_cal_crc32 = soft_crc32(buf, read_size, src_cal_crc32); + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm) && !saved_is_object_secure) + { + /* Encrypt the object chunk */ + rv = encrypt_buf(psm, buf, buf, read_size); + if (rv != WM_SUCCESS) + { + psm_d("upgrade: enc fail"); + return rv; + } + } + else if (!part_encrypted(psm) && saved_is_object_secure) + { + /* Decrypt the object chunk */ + rv = decrypt_buf(psm, buf, buf, read_size); + if (rv != WM_SUCCESS) + { + psm_d("upgrade: dec fail"); + return rv; + } + } +#endif /* CONFIG_SECURE_PSM */ + + rv = psm_write_flash(psm, buf, read_size, dest_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: write failed", __func__); + return rv; + } + + dest_cal_crc32 = soft_crc32(buf, read_size, dest_cal_crc32); + + source_offset += read_size; + dest_offset += read_size; + } + + uint32_t dest_crc32 = psm_calc_metadata_crc32(pobj, dest_cal_crc32); + + /* Restore obj_id to calculate CRC32 */ + pobj->obj_id = saved_src_obj_id; +#ifdef CONFIG_SECURE_PSM + /* Restore secure flag to calculate CRC32 */ + set_object_secure_bits(pobj, saved_object_secure_bits); +#endif /* CONFIG_SECURE_PSM */ + + uint32_t src_crc32 = psm_calc_metadata_crc32(pobj, src_cal_crc32); + + psm_ed("src_ref_crc32: 0x%x src_crc32: 0x%x dest_crc32: 0x%x", src_ref_crc32, src_crc32, dest_crc32); + /* + * Check is source object CRC32 was correct. We are doing this + * late to avoid two passes over source object data. + */ + if (src_crc32 == src_ref_crc32) + { + /* + * Write new CRC32. We have to update CRC32 because we have + * programmed new obj-id. + */ + uint32_t crc32_offset = dest_object_start_offset + offsetof(psm_object_t, crc32); + rv = psm_write_flash(psm, &dest_crc32, sizeof(dest_crc32), crc32_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("Failed to update CRC32 of copied object"); + return rv; + } + + return WM_SUCCESS; + } + + /* + * Mark inactive just upgraded object because CRC calculation + * on source object failed. This effectively deletes the object from the PSM. + */ + psm_d("Object: 0x%x has failed CRC during upgrade. Marking inactive", pobj->obj_id); + uint32_t flag_offset = dest_object_start_offset + offsetof(psm_object_t, flags); + rv = write_flag_bit(psm, flag_offset, PSM_OBJ_INACTIVE); + if (rv != WM_SUCCESS) + { + psm_d("Failed to mark copied object inactive"); + return rv; + } + + return WM_SUCCESS; +} + +static int psm_copy_all_objects(psm_t *psm, + checkpoint_t checkpoint, + uint32_t source_offset, + uint32_t source_limit, + uint32_t dest_offset, + uint32_t dest_limit) +{ + psm_entry_i(); + + psm_object_t pobj; + objectid_t objid_counter = 0; + + while (source_offset < source_limit) + { + if (objid_counter >= PSM_MAX_OBJECTS) + { + psm_d("Unexpected error during copy all objs"); + return -WM_FAIL; + } + + int rv = psm_read_flash(psm, &pobj, sizeof(psm_object_t), source_offset); + if (rv != WM_SUCCESS) + { + psm_d("%s: could not read object @ : %x", __func__, source_offset); + return -WM_FAIL; + } + + if (psm_is_free_space(&pobj)) + break; + + if (!psm_is_data_len_sane(psm, pobj.data_len)) + { + psm_d("%s: Invalid data length: %d", __func__, pobj.data_len); + return -WM_FAIL; + } + + if (pobj.object_type != OBJECT_TYPE_SMALL_BINARY) + { + psm_d( + "%s: Invalid obj at the end of data area. " + "Ignoring", + __func__); + break; + } + + if (!is_object_active(&pobj)) + { + psm_ed("Inactive object with id: %x size: %d", pobj.obj_id, pobj.data_len); + source_offset += object_size(&pobj); + continue; + } + + if (checkpoint == CHECKPOINT_1) + { + /* + * This is operation from data area to swap area. + * We upgrade data here to desired psm format, + * instead of simple copy. If no upgrade is required, + * following will do a simple copy + */ + rv = psm_upgrade_object(psm, &pobj, source_offset, dest_offset, ++objid_counter); + } + else if (checkpoint == CHECKPOINT_2) + { + /* + * This is operation from swap area to data area. + * We simply copy data here + */ + rv = psm_copy_object(psm, &pobj, source_offset, dest_offset, ++objid_counter); + } + else + { + rv = -WM_FAIL; + psm_d("Invalid checkpoint during compaction/upgrade"); + } + + if (rv != WM_SUCCESS) + { + psm_d("compaction/upgrade failed"); + return rv; + } + + source_offset += object_size(&pobj); + dest_offset += object_size(&pobj); + + if (dest_offset >= dest_limit) + { + /* + * This case should never occur because we always + * keep tab of total size of active objects. + */ + psm_d("%s: no space left in destination to copy", __func__); + return -WM_FAIL; + } + } + + return WM_SUCCESS; +} + +static uint32_t get_erase_start_offset(psm_t *psm) +{ + uint32_t erase_start; + /* + * We have no idea about start of swap address. So erase all non + * data area. + */ + if (!is_offset_block_aligned(psm, psm->data_free_offset)) + { + erase_start = align_to_block_offset(psm, psm->data_free_offset); + erase_start += block_size(psm); + /* 'erase_start' is now block aligned */ + } + else + { + erase_start = psm->data_free_offset; + } + + return erase_start; +} + +static int handle_recovery(psm_t *psm, checkpoint_t checkpoint, psm_swap_desc_t *swap_desc) +{ + psm_entry_i("Checkpoint: %d", checkpoint); + int rv; + bool swap_erase_done = false; + bool data_erase_done = false; + + switch (checkpoint) + { + case CHECKPOINT_0: + { + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_1, (void *)PSM_COMPACTION_MAX); + /* Swap needs to be erased */ + uint32_t swap_start_offset = psm_get_swap_start_offset(psm); + uint32_t swap_size = part_size(psm) - swap_start_offset; + rv = psm_erase_flash(psm, swap_start_offset, swap_size); + if (rv != WM_SUCCESS) + { + psm_d("CHK-0: Cannot erase swap area"); + return -WM_FAIL; + } + + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_2, (void *)PSM_COMPACTION_MAX); + swap_erase_done = true; + memset(swap_desc, 0xFF, sizeof(psm_swap_desc_t)); + swap_desc->swap_start_offset = swap_start_offset; + swap_desc->swap_start_offset_inv = ~swap_start_offset; + /* Leave checkpoint marker uninit'ed */ + rv = write_swap_descriptor(psm, swap_desc, true); + if (rv != WM_SUCCESS) + { + psm_d("CHK-0: Cannot write swap descriptor"); + return -WM_FAIL; + } + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_3, (void *)PSM_COMPACTION_MAX); + checkpoint = CHECKPOINT_1; + psm_d("Swap des successfully written. Crossing CHK-1"); + } + /* Fall through */ + case CHECKPOINT_1: + { + if (!swap_erase_done) + { + psm_d("Direct jump to chkpt 1 not supported"); + return -WM_FAIL; + } + + uint32_t data_offset = 0; + uint32_t data_limit = psm->data_free_offset; + + uint32_t swap_data_offset = swap_desc->swap_start_offset + PSM_DATA_SWAP_DEMARCATION; + uint32_t swap_limit = part_size(psm) - sizeof(psm_swap_desc_t); + + rv = psm_copy_all_objects(psm, checkpoint, data_offset, data_limit, swap_data_offset, swap_limit); + if (rv != WM_SUCCESS) + { + psm_d("CHK-1: copy/upgrade to swap failed"); + return rv; + } + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_5, (void *)PSM_COMPACTION_MAX); + + swap_desc->checkpoint_marker = CHECKPOINT_MARKER; + swap_desc->checkpoint_marker_inv = ~CHECKPOINT_MARKER; + rv = write_swap_descriptor(psm, swap_desc, false); + if (rv != WM_SUCCESS) + { + psm_d("CHK-1: Can't write swap desc marker"); + return -WM_FAIL; + } + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_6, (void *)PSM_COMPACTION_MAX); + checkpoint = CHECKPOINT_2; + psm_d("Swap now has all objects. Crossing CHK-2"); + } + /* Fall through */ + case CHECKPOINT_2: + { + /* + * Swap descriptor is fully valid and data area + * state is unknown. In this state compaction + * process will have to continue irrespective of + * caller request. + */ + rv = psm_erase_flash(psm, 0, swap_desc->swap_start_offset); + if (rv != WM_SUCCESS) + { + psm_d("Failed to erase data section"); + return rv; + } + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_7, (void *)PSM_COMPACTION_MAX); + data_erase_done = true; + + uint32_t swap_data_offset = swap_desc->swap_start_offset + PSM_DATA_SWAP_DEMARCATION; + uint32_t swap_limit = part_size(psm) - sizeof(psm_swap_desc_t); + + uint32_t data_offset = 0; + uint32_t data_limit = swap_desc->swap_start_offset; + + rv = psm_copy_all_objects(psm, checkpoint, swap_data_offset, swap_limit, data_offset, data_limit); + if (rv != WM_SUCCESS) + { + psm_d("CHK-2: swap copy to data failed"); + return rv; + } + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_8, (void *)PSM_COMPACTION_MAX); + rv = invalidate_swap_descriptor(psm); + if (rv != WM_SUCCESS) + { + psm_d("CHK-2: swap invalidation failed"); + return rv; + } + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_9, (void *)PSM_COMPACTION_MAX); + checkpoint = CHECKPOINT_3; + psm_d("All objs copied to data area. Crossing CHK-3"); + } + /* Fall through */ + case CHECKPOINT_3: + { + /* + * Swap descriptor is invalid. Cleanup the swap area. + */ + uint32_t erase_start; + if (!data_erase_done) + { + erase_start = get_erase_start_offset(psm); + } + else + { + /* Fall through case */ + erase_start = swap_desc->swap_start_offset; + } + + rv = psm_erase_flash(psm, erase_start, part_size(psm) - erase_start); + if (rv != WM_SUCCESS) + { + psm_d("CHK-3 erase failed"); + return -WM_FAIL; + } + if (g_psm_event_cb) + g_psm_event_cb(PSM_EVENT_COMPACTION, (void *)PSM_COMPACTION_10, (void *)PSM_COMPACTION_MAX); + checkpoint = CHECKPOINT_4; + psm_d("Swap area is now erased. Crossing CHK-4"); + } + break; + case CHECKPOINT_4: + /* No-op */ + break; + default: + psm_d("Unknown checkpoint: %d", checkpoint); + return -WM_FAIL; + break; + } + + return WM_SUCCESS; +} + +/* + * 1: Match + * 0: No match + * < 0: Error + * + * 'pobj' is passed because this function should only read name length + * equal to actually present in flash. + */ +static int read_and_match_name(psm_t *psm, const psm_object_t *pobj, const char *name, uint32_t offset) +{ + /* We have ensured that user given and flash name is same in length */ + char buf[READ_BUFFER_SIZE]; + + uint32_t read_size, index; + for (index = 0; index < pobj->name_len; index += read_size) + { + uint32_t remaining = pobj->name_len - index; + read_size = remaining > READ_BUFFER_SIZE ? READ_BUFFER_SIZE : remaining; + int rv = psm_read_flash(psm, buf, read_size, offset + index); + if (rv != WM_SUCCESS) + { + psm_d("Failed to read name data @ off: %x", offset); + return rv; + } + + if (memcmp(&name[index], buf, read_size)) + return 0; + } + + return 1; +} + +/* + * Returns: + * 2 : Object found and matched. + * 1 : An object found but no match. + * 0 : No PSM object found. + * < 0: Error + */ +static int read_and_match_object(psm_t *psm, + psm_object_t *pobj, + objectid_t *obj_id, + const char *name, + uint32_t name_len, + uint32_t offset, + uint32_t limit) +{ + int rv = psm_read_flash(psm, pobj, sizeof(psm_object_t), offset); + if (rv != WM_SUCCESS) + { + psm_d("could not read object @ off: %x", offset); + return rv; + } + + if (psm_is_free_space(pobj)) + return 0; + + if (pobj->object_type != OBJECT_TYPE_SMALL_BINARY) + { + psm_d("Object type not valid @ off %x", offset); + return 0; + } + + /* An object is definately present */ + if (*obj_id == PSM_INVALID_OBJ_ID) + { + /* No mapping has been done yet */ + if (pobj->name_len == 0) + { + psm_d("Object with name length 0 is not supported"); + return -WM_FAIL; + } + + /* Need to use name to match */ + if (name_len != pobj->name_len) + return 1; + + rv = read_and_match_name(psm, pobj, name, offset + sizeof(psm_object_t)); + if (rv < 0) + return rv; + + if (rv == 0) + return 1; + + /* Name has matched */ + *obj_id = pobj->obj_id; + } + else + { + /* A name to obj_id was already done before */ + if (*obj_id != pobj->obj_id) + return 1; + } + + if (is_object_active(pobj)) + { + psm_d("Object active and matched"); + return 2; + } + + return 1; +} + +/* + * 'pobj' will be populated only if found and cache was not present. + */ +static psm_index_t *psm_search_index(psm_t *psm, const char *name, uint32_t name_len, psm_object_t *pobj) +{ + psm_entry_i("name: %s", name); + psm_index_t *index = NULL; + uint32_t name_hash = soft_crc32(name, name_len, 0); + int cnt; + for (cnt = 0; cnt < psm->index_elements; cnt++) + { + index = &psm->index[cnt]; + psm_i("Check: obj_id: %x H: %x: %x", index->obj_id, name_hash, index->name_hash); + if (name_hash != index->name_hash) + continue; + + psm_i("Hash match: obj_id: %x", index->obj_id); + /* + * Name_Hash has matched but there could be a collision. We + * need to probe more. If a cache is present the task is + * simpler. If not we will have to read the name field from + * the object stored in flash. + */ + if (index->cache) + { + psm_i("Cache available: obj_id: %x", index->obj_id); + /* Cache is present */ + psm_cache_t *cache = index->cache; + if (name_len != cache->name_len) + continue; + + psm_i("Cache: check name match: %s", name); + uint8_t *name_buf = (uint8_t *)(cache + 1); + if (memcmp(name, name_buf, name_len)) + continue; /* No match */ + + psm_i("Cache: name matched"); + /* + * Name has matched. Since cache is there flash + * is not supposed to be accessed and thus 'pobj' + * will not be populated. Caller to should care. + */ + return index; + } + + psm_i("Index: Check name match by accessing flash object"); + /* No cache is present. Need to access flash object */ + int rv = psm_read_flash(psm, pobj, sizeof(psm_object_t), index->flash_offset); + if (rv != WM_SUCCESS) + { + psm_d("%s: Unable to read flash", __func__); + break; + } + + if (name_len != pobj->name_len) + { + /* Mismatch */ + psm_i("Name hash matched but name len mismatch"); + continue; + } + + rv = read_and_match_name(psm, pobj, name, index->flash_offset + sizeof(psm_object_t)); + if (rv < 0) + { + psm_i("Error during name match: %d", rv); + break; + } + + if (rv == 1) + { + psm_i("Object %d found in index", pobj->obj_id); + /* A match is found */ + return index; + } + + /* Mismatch */ + psm_i("Name hash matched but name mismatch"); + } + + return NULL; +} + +static void psm_remove_index_entry(psm_t *psm, psm_index_t *index) +{ + psm_i("Removing object: %d from index", index->obj_id); + + if (index->cache) + { + psm_i("Freeing object %d cache", index->obj_id); + os_mem_free(index->cache); + } + + uint32_t cnt = index - psm->index; + if (cnt == (psm->index_elements - 1)) + { + /* Last entry is to be deleted */ + psm->index_elements--; + } + else + { + uint32_t later_index_count = psm->index_elements - cnt - 1; + memmove(index, index + 1, (sizeof(psm_index_t) * later_index_count)); + psm->index_elements--; + } +} + +static int search_active_object(psm_t *psm, + psm_object_t *pobj, + const char *name, + uint32_t name_len, + uint32_t *flash_offset, + bool *found, + objectid_t *obj_id, + psm_index_t **index) +{ + psm_entry_i("%s", name); + + *index = NULL; + if (psm->index) + { + *index = psm_search_index(psm, name, name_len, pobj); + if (*index != NULL) + { + /* Object found in index */ + *flash_offset = (*index)->flash_offset; + *found = true; + + /* + * Load pobj with some values cached. This is tied + * to implementation of function psm_object_open() + * and keep this always in sync with that + * implementation. + */ + pobj->obj_id = (*index)->obj_id; + if ((*index)->cache) + { + pobj->data_len = (*index)->cache->data_len; + pobj->name_len = (*index)->cache->name_len; + } + + psm_ed("Index matched for %s", name); + return WM_SUCCESS; + } + + psm_i("Index miss"); + } + + uint32_t offset = 0; + /* + * Don't try reading flash if remaining size is less than + * necessary. + */ + uint32_t limit = psm->object_offset_limit; + + /* Set default not found */ + *found = false; + + while (offset < limit) + { + int rv = read_and_match_object(psm, pobj, obj_id, name, name_len, offset, limit); + if (rv < 0) + { + psm_d("Failure during object search"); + return rv; + } + + if (rv == 0) + { + psm_d("No more PSM objects"); + return WM_SUCCESS; + } + + if (rv == 2) + { + /* Object found */ + *flash_offset = offset; + *found = true; + return WM_SUCCESS; + } + + offset += object_size(pobj); + } + + return WM_SUCCESS; +} + +static void psm_init_new_object(psm_t *psm, + psm_objinfo_t *objinfo, + objectid_t obj_id, + uint32_t name_len, + psm_objattrib_t *attribs, + psm_mode_t mode, + uint32_t max_data_len) +{ + psm_entry_i("New obj: id: 0x%x", obj_id); + /* Re-use the object structure */ + memset(objinfo, 0x00, sizeof(psm_objinfo_t)); + /* Init all 0xFF as per flash properties */ + memset(&objinfo->pobj, 0xFF, sizeof(psm_object_t)); + + objinfo->psm = psm; + objinfo->mode = mode; + objinfo->max_data_len = max_data_len; + + objinfo->pobj.object_type = OBJECT_TYPE_SMALL_BINARY; + if (attribs) + { + if (attribs->flags & PSM_INDEXING_ENABLED) + objinfo->pobj.flags &= ~PSM_OBJ_INDEX_REQ; + if (attribs->flags & PSM_CACHING_ENABLED) + objinfo->pobj.flags &= ~PSM_OBJ_CACHE_REQ; + } + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + set_object_secure(&(objinfo->pobj)); + else + clear_object_secure(&(objinfo->pobj)); +#endif /* CONFIG_SECURE_PSM */ + + /* Keep data length uninitialized i.e. all bytes to 0xFF */ + objinfo->pobj.name_len = name_len; + objinfo->pobj.obj_id = obj_id; +} + +static int manage_space_constraints(psm_t *psm, uint32_t new_obj_size, bool *compaction_reqd) +{ + psm_entry_i("new_obj_size: %d", new_obj_size); + + if (compaction_reqd) + *compaction_reqd = false; + + if (!psm_is_data_len_sane(psm, new_obj_size)) + { + psm_d("data length invalid for new object: %u", new_obj_size); + return -WM_E_INVAL; + } + + uint32_t proposed_active_objects_size = psm->total_active_object_size + new_obj_size; + uint32_t proposed_swap_start_offset = align_to_block_offset( + psm, (part_size(psm) - sizeof(psm_swap_desc_t) - PSM_DATA_SWAP_DEMARCATION - proposed_active_objects_size)); + uint32_t proposed_data_free_offset = psm->data_free_offset + new_obj_size; + + if (proposed_data_free_offset < proposed_swap_start_offset) + return WM_SUCCESS; + + /* + * If we allow write of this object _no_ space will be left + * for swap handling. Check if compaction will help + */ + if (proposed_active_objects_size > proposed_swap_start_offset) + { + /* Compaction will also _not_ help */ + psm_d("Compaction will not help"); + return -WM_E_NOSPC; + } + + /* Compaction will help */ + if (compaction_reqd) + { + *compaction_reqd = true; + return WM_SUCCESS; + } + + /* Return error as we could not signal compaction reqd status */ + return -WM_FAIL; +} + +static int psm_part_compact(psm_t *psm) +{ + psm_d("Compaction needs to be done to accomodate"); + psm_swap_desc_t swap_desc; + int rv = handle_recovery(psm, CHECKPOINT_0, &swap_desc); + if (rv != WM_SUCCESS) + { + psm_d("%s: compaction failed", __func__); + return rv; + } + + /* Need to scan again as flash layout has changed */ + rv = psm_part_scan(psm); + if (rv != WM_SUCCESS) + { + psm_d("%s: Could not scan", __func__); + return rv; + } + + return WM_SUCCESS; +} + +static int _psm_object_open(psm_t *psm, + psm_objinfo_t *objinfo, + const char *name, + psm_mode_t mode, + uint32_t max_data_len, + psm_objattrib_t *attribs) +{ + psm_entry_i("name: %s mode: %d max_data_len = %d", name, mode, max_data_len); + + uint32_t name_len = strnlen(name, PSM_MAX_OBJNAME_LEN + 1); + if (!name_len || name_len > PSM_MAX_OBJNAME_LEN) + { + psm_d("name length invalid: %d", name_len); + return -WM_E_INVAL; + } + + int rv; + if (mode == PSM_MODE_WRITE) + { + if (part_readonly(psm)) + return -WM_E_PERM; + + bool compaction_reqd; + rv = manage_space_constraints(psm, sizeof(psm_object_t) + name_len + max_data_len, &compaction_reqd); + if (rv != WM_SUCCESS) + { + psm_d("Unable to alloc space for new obj size: %u", max_data_len); + return rv; + } + + if (compaction_reqd) + { + rv = psm_part_compact(psm); + if (rv != WM_SUCCESS) + { + psm_d( + "Compaction to alloc space for new " + "obj size: %u failed", + max_data_len); + return rv; + } + } + } + + memset(objinfo, 0x00, sizeof(psm_objinfo_t)); + + /* The object may be already be present. */ + bool found; + uint32_t flash_offset; + psm_index_t *index = NULL; + objectid_t obj_id = PSM_INVALID_OBJ_ID; + const void *name_to_search = name; + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + { + rv = resetkey(psm, SET_ENCRYPTION_KEY); + if (rv != WM_SUCCESS) + { + psm_d("reset enc key (name) fail"); + return rv; + } + + rv = encrypt_buf(psm, name, psm->psm_name_enc_buf, name_len); + if (rv != WM_SUCCESS) + { + psm_d("enc name fail"); + return rv; + } + + /* Override 'name_to_search' */ + name_to_search = psm->psm_name_enc_buf; + } +#endif /* CONFIG_SECURE_PSM */ + + rv = search_active_object(psm, &objinfo->pobj, name_to_search, name_len, &flash_offset, &found, &obj_id, &index); + if (rv != WM_SUCCESS) + { + psm_d("%s: Failed: %d", __func__, rv); + return rv; + } + + objinfo->object_flash_offset = flash_offset; + objinfo->curr_flash_offset = flash_offset; + if (mode == PSM_MODE_READ) + { + if (!found) + { + psm_d("Object: %s not found for reading", name); + memset(objinfo, 0x00, sizeof(psm_objinfo_t)); + return -WM_FAIL; + } + + objinfo->psm = psm; + /* Point to start of data */ + objinfo->curr_flash_offset += metadata_size(&objinfo->pobj); + + /* Since name has already matched calculate CRC32 using + user name buffer */ + objinfo->crc32 = soft_crc32(name_to_search, name_len, 0); + objinfo->mode = mode; + objinfo->index = index; + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + { + /* + * A Dummy decryption is needed. Since "name + + * data" are encrypted in that sequence the + * decryption also need to happen in that + * sequence. Since we have already encrypted the + * name field we can decrypt it here. + */ + rv = resetkey(psm, SET_DECRYPTION_KEY); + if (rv) + return rv; + + /* The 'psm_name_enc_buf' will not be used after + this. Re-use that buffer. + */ + rv = decrypt_buf(psm, psm->psm_name_enc_buf, psm->psm_name_enc_buf, name_len); + if (rv) + return rv; + } +#endif /* CONFIG_SECURE_PSM */ + + return WM_SUCCESS; + } + + objectid_t old_obj_id; + uint32_t old_object_flash_offset; + if (found) + { + psm_d("Existing object %s is found.", name); + /* Cache the needed values before re-using object */ + old_obj_id = objinfo->pobj.obj_id; + old_object_flash_offset = objinfo->object_flash_offset; + uint32_t old_object_size = object_size(&objinfo->pobj); + psm_init_new_object(psm, objinfo, old_obj_id, name_len, attribs, mode, max_data_len); + objinfo->old_active_object_present = true; + objinfo->old_object_flash_offset = old_object_flash_offset; + objinfo->old_object_size = old_object_size; + } + else + { + if (!psm_is_objid_available(psm)) + { + /* No space */ + psm_d("No space for new objects. No more object ID's"); + return -WM_E_NOSPC; + } + + /* + * It is possible that active object is not found but an + * inactive object was present. + */ + objectid_t new_obj_id = (obj_id == PSM_INVALID_OBJ_ID) ? psm_get_unused_obj_id(psm) : obj_id; + /* Brand new object */ + psm_init_new_object(psm, objinfo, new_obj_id, name_len, attribs, mode, max_data_len); + } + + objinfo->object_flash_offset = psm->data_free_offset; + objinfo->curr_flash_offset = psm->data_free_offset; + + /* Write the metadata structure. Keep data length as undefined + for now */ + psm_d("Writing metadata"); + rv = psm_write_flash(psm, &objinfo->pobj, sizeof(psm_object_t), objinfo->curr_flash_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: metadata write failed.", __func__); + return rv; + } + + /* Initialize length to 0 after object has been written */ + objinfo->pobj.data_len = 0; + + objinfo->curr_flash_offset += sizeof(psm_object_t); + + /* Write name field */ + psm_d("Writing name field"); + + rv = psm_write_flash(psm, name_to_search, name_len, objinfo->curr_flash_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: metadata write failed.", __func__); + return rv; + } + + /* Start CRC calculation with name field */ + objinfo->pobj.crc32 = soft_crc32(name_to_search, name_len, 0); + + objinfo->curr_flash_offset += name_len; + + if (index) + psm_remove_index_entry(psm, index); + return WM_SUCCESS; +} + +static int _psm_object_write(psm_t *psm, psm_objinfo_t *objinfo, const uint8_t *data, uint32_t len) +{ + psm_object_t *pobj = &objinfo->pobj; + psm_entry_i("id: %x len: %d", pobj->obj_id, len); + int rv; + + if (len == 0) + { + psm_d("Ignoring zero length write"); + return WM_SUCCESS; + } + + uint32_t max_allowed_len = objinfo->max_data_len - pobj->data_len; + + if (max_allowed_len < len) + { + psm_d("Write failed. Write more than requested: %d: %d", max_allowed_len, len); + return -WM_E_NOSPC; + } + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + { + int data_remaining = len; + int offset = 0; + while (data_remaining) + { + int enc_len = data_remaining > READ_BUFFER_SIZE ? READ_BUFFER_SIZE : data_remaining; + + rv = encrypt_buf(psm, data + offset, psm->psm_enc_buf, enc_len); + if (rv) + { + psm_d("%s: encryption failed", __func__); + return rv; + } + + rv = psm_write_flash(psm, psm->psm_enc_buf, enc_len, objinfo->curr_flash_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: Write failed", __func__); + return rv; + } + pobj->crc32 = soft_crc32(psm->psm_enc_buf, enc_len, pobj->crc32); + objinfo->curr_flash_offset += enc_len; + + offset += enc_len; + data_remaining -= enc_len; + } + + pobj->data_len += len; + psm_d("Wrote %d bytes of data", len); + return WM_SUCCESS; + } +#endif + rv = psm_write_flash(psm, data, len, objinfo->curr_flash_offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d("%s: Write failed", __func__); + return rv; + } + + /* Update CRC32 */ + pobj->crc32 = soft_crc32(data, len, pobj->crc32); + + objinfo->curr_flash_offset += len; + pobj->data_len += len; + + psm_d("Wrote %d bytes of data", len); + return WM_SUCCESS; +} + +static int _psm_object_read(psm_t *psm, psm_objinfo_t *objinfo, uint8_t *buf, uint32_t max_len) +{ + psm_object_t *pobj = &objinfo->pobj; + psm_entry_i("obj-id: %x mode: %d max_len: %d", pobj->obj_id, objinfo->mode, max_len); + int rv; + + if (!max_len) + { + psm_d("Ignoring zero length read"); + return WM_SUCCESS; + } + + const uint32_t data_start_offset = objinfo->object_flash_offset + metadata_size(pobj); + uint32_t remaining = pobj->data_len - (objinfo->curr_flash_offset - data_start_offset); + if (remaining == 0) + { + psm_d("no data to read"); + return 0; + } + + uint32_t read_size = remaining > max_len ? max_len : remaining; + + if (objinfo->index && objinfo->index->cache) + { + psm_cache_t *cache = objinfo->index->cache; + uint8_t *name_buf = (uint8_t *)(cache + 1); + uint8_t *data_buf = name_buf + cache->name_len; + + uint32_t read_offset = pobj->data_len - remaining; + memcpy(buf, &data_buf[read_offset], read_size); + goto skip_actual_flash_read; + } + + rv = psm_read_flash(psm, buf, read_size, objinfo->curr_flash_offset); + if (rv != WM_SUCCESS) + { + psm_d("%s: read failed size: %d", __func__, read_size); + return rv; + } + + objinfo->crc32 = soft_crc32(buf, read_size, objinfo->crc32); + /* Check if this is the last read */ + if (remaining == read_size) + { + /* + * Since this is last read, CRC32 on-the-fly calculation is + * now done. Verification can be done now + */ + objinfo->crc32 = psm_calc_metadata_crc32(&objinfo->pobj, objinfo->crc32); + if (objinfo->crc32 != pobj->crc32) + { + psm_d( + "Invalid CRC32 during read detected " + "0x%x != 0x%x", + objinfo->crc32, pobj->crc32); + return -WM_E_CRC; + } + } + +#ifdef CONFIG_SECURE_PSM + /* If read data is encrypted, decrypt it before sending back. */ + if (part_encrypted(psm)) + { + rv = decrypt_buf(psm, buf, buf, read_size); + if (rv) + return rv; + } +#endif /* CONFIG_SECURE_PSM */ + +skip_actual_flash_read: + objinfo->curr_flash_offset += read_size; + return read_size; +} + +static int _psm_object_close(psm_t *psm, psm_objinfo_t *objinfo) +{ + psm_entry_i("obj-id: %d mode: %d", objinfo->pobj.obj_id, objinfo->mode); + if (objinfo->mode == PSM_MODE_READ) + { + psm_d("Object %d (opened in read mode) closed", objinfo->pobj.obj_id); + return WM_SUCCESS; + } + + psm_object_t *pobj = &objinfo->pobj; + /* + * CRC32 of name and data is already done. Calculate CRC32 of + * metadata. + */ + pobj->crc32 = psm_calc_metadata_crc32(pobj, pobj->crc32); + + psm_d("Closing object: length: %d Crc32: 0x%x", pobj->data_len, pobj->crc32); + /* Write the crc32 and data length fields to flash */ + uint32_t size = sizeof(pobj->crc32) + sizeof(pobj->data_len); + uint32_t offset = objinfo->object_flash_offset + offsetof(psm_object_t, crc32); + int rv = psm_write_flash(psm, &pobj->crc32, size, offset, PSM_WRITE_NO_VERIFY); + if (rv != WM_SUCCESS) + { + psm_d( + "Failed to update length and crc32 fields for " + "object: %d", + pobj->obj_id); + return rv; + } + + psm->total_active_object_size += object_size(pobj); + psm_d("Checking if need to make earlier object inactive"); + if (objinfo->old_active_object_present) + { + psm_d("Marking earlier object inactive"); + /* Need to make earlier object inactive */ + uint32_t flag_offset = objinfo->old_object_flash_offset + offsetof(psm_object_t, flags); + rv = write_flag_bit(psm, flag_offset, PSM_OBJ_INACTIVE); + if (rv != WM_SUCCESS) + { + psm_d("Failed to make earlier object inactive"); + } + + /* Earlier object size can be reduced */ + psm->total_active_object_size -= objinfo->old_object_size; + objinfo->old_object_flash_offset = 0; + } + + /* For benefit of next object */ + psm->data_free_offset += object_size(&objinfo->pobj); + + if (is_object_indexable(pobj)) /* Ignore any error */ + psm_add_to_index(psm, pobj, objinfo->object_flash_offset); + return WM_SUCCESS; +} + +int psm_object_read(psm_object_handle_t ohandle, void *buf, uint32_t max_len) +{ + psm_entry(); + if (!ohandle || !buf || !max_len) + { + psm_d("%s: Invalid arguments", __func__); + return -WM_E_INVAL; + } + + psm_objinfo_t *objinfo = (psm_objinfo_t *)ohandle; + psm_t *psm = objinfo->psm; + return _psm_object_read(psm, objinfo, buf, max_len); +} + +int psm_object_write(psm_object_handle_t ohandle, const void *buf, uint32_t len) +{ + psm_entry(); + if (!ohandle || !buf || !len) + { + psm_d("%s: Invalid arguments", __func__); + return -WM_E_INVAL; + } + + psm_objinfo_t *objinfo = (psm_objinfo_t *)ohandle; + psm_t *psm = objinfo->psm; + if (objinfo->mode != PSM_MODE_WRITE) + { + psm_d("Cannot write in read mode"); + return -WM_E_PERM; + } + + return _psm_object_write(psm, objinfo, buf, len); +} + +int psm_object_open(psm_hnd_t phandle, + const char *name, + psm_mode_t mode, + uint32_t max_data_len, + psm_objattrib_t *attribs, + psm_object_handle_t *ohandle) +{ + psm_entry("name: %s mode: %d", name, mode); + if (!phandle || !name || !ohandle) + { + psm_d("%s: Invalid arguments", __func__); + return -WM_E_INVAL; + } + + *ohandle = 0; + psm_t *psm = (psm_t *)phandle; + + if (mode == PSM_MODE_WRITE) + { + if (!psm_is_data_len_sane(psm, max_data_len)) + { + psm_d("Unsupported data length for new object: %u", max_data_len); + return -WM_E_INVAL; + } + } + + if (attribs) + if (attribs->flags & PSM_CACHING_ENABLED) + attribs->flags |= PSM_INDEXING_ENABLED; + + psm_rwlock_part(psm, mode); + + psm_objinfo_t *objinfo = os_mem_calloc(sizeof(psm_objinfo_t)); + if (!objinfo) + { + psm_rwunlock_part(psm, mode); + psm_d("unable to alloc psm object"); + return -WM_E_NOMEM; + } + + int rv = _psm_object_open(psm, objinfo, name, mode, max_data_len, attribs); + if (rv != WM_SUCCESS) + { + os_mem_free(objinfo); + psm_rwunlock_part(psm, mode); + return rv; + } + + *ohandle = (psm_object_handle_t)objinfo; + + if (mode == PSM_MODE_WRITE) + return WM_SUCCESS; + else /* READ Mode */ + return objinfo->pobj.data_len; +} + +static int _psm_object_delete(psm_t *psm, const char *name, uint32_t name_len) +{ + psm_entry_i(); + bool found; + psm_object_t pobj; + psm_index_t *index = NULL; + uint32_t flash_offset; + objectid_t obj_id = PSM_INVALID_OBJ_ID; + const void *name_to_search = name; + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + { + int rv = resetkey(psm, SET_ENCRYPTION_KEY); + if (rv != WM_SUCCESS) + { + psm_d("d: reset enc key (name) fail"); + return rv; + } + + rv = encrypt_buf(psm, name, psm->psm_name_enc_buf, name_len); + if (rv != WM_SUCCESS) + { + psm_d("d: enc name fail"); + return rv; + } + + /* Override 'name_to_search' */ + name_to_search = psm->psm_name_enc_buf; + } +#endif /* CONFIG_SECURE_PSM */ + + int rv = search_active_object(psm, &pobj, name_to_search, name_len, &flash_offset, &found, &obj_id, &index); + if (rv != WM_SUCCESS) + { + psm_d("%s: Failure during search: %d", __func__, rv); + return rv; + } + + if (!found) + { + psm_d("Object \"%s\" not found to delete", name); + return WM_SUCCESS; + } + + psm_d("Deleting object \"%s\" by making it inactive", name); + /* Need to make earlier object inactive */ + uint32_t flag_offset = flash_offset + offsetof(psm_object_t, flags); + rv = write_flag_bit(psm, flag_offset, PSM_OBJ_INACTIVE); + if (rv != WM_SUCCESS) + { + psm_d("%s: Failed to make object inactive", __func__); + return rv; + } + + /* Reduce the size counter */ + psm->total_active_object_size -= object_size(&pobj); + + if (index) + psm_remove_index_entry(psm, index); + return rv; +} + +int psm_object_delete(psm_hnd_t phandle, const char *name) +{ + psm_entry("name: %s", name); + if (!phandle || !name) + { + psm_d("Invalid arguments"); + return -WM_E_INVAL; + } + + uint32_t name_len = strnlen(name, PSM_MAX_OBJNAME_LEN + 1); + if (!name_len || name_len > PSM_MAX_OBJNAME_LEN) + { + psm_d("%s: name length invalid: %d", __func__, name_len); + return -WM_E_INVAL; + } + + psm_t *psm = (psm_t *)phandle; + psm_rwlock_part(psm, PSM_MODE_WRITE); + int rv = _psm_object_delete(psm, name, name_len); + psm_rwunlock_part(psm, PSM_MODE_WRITE); + + return rv; +} + +int psm_object_close(psm_object_handle_t *ohandle) +{ + psm_entry(); + if (!ohandle) + { + psm_d("%s: Invalid argument", __func__); + return -WM_E_INVAL; + } + + psm_objinfo_t *objinfo = (psm_objinfo_t *)*ohandle; + + /* Save necessary variables before objinfo is freed */ + psm_t *psm = objinfo->psm; + psm_mode_t mode = objinfo->mode; + + int rv = _psm_object_close(psm, objinfo); + + psm_rwunlock_part(psm, mode); + + memset(objinfo, 0x00, sizeof(psm_objinfo_t)); + os_mem_free(objinfo); + + *ohandle = 0; + return rv; +} + +static int _psm_init_verify_params(const flash_desc_t *fdesc, uint32_t block_size, psm_cfg_t *psm_cfg) +{ + if (!fdesc->fl_size) + { + psm_d("Zero sized partition given"); + return -WM_E_INVAL; + } + + uint32_t block_cnt = fdesc->fl_size / block_size; + /* With read/write capability atleast two blocks are required */ + uint32_t min_block_cnt_req = 2; + if (psm_cfg && psm_cfg->read_only) + min_block_cnt_req = 1; + + if (block_cnt < min_block_cnt_req) + { + psm_d("Atleast %d block(s) are required for PSM operation", min_block_cnt_req); + return -WM_E_PERM; + } + + /* Basic sanity check */ + if (block_size < 64) + { + psm_d("Block size %d is too less\r\n", block_size); + return -WM_E_INVAL; + } + + return WM_SUCCESS; +} + +static int deduce_checkpoint_at_init(psm_t *psm, psm_swap_desc_t *swap_desc, checkpoint_t *checkpoint) +{ + psm_entry_i(); + + int rv = read_swap_descriptor(psm, swap_desc); + if (rv != WM_SUCCESS) + { + psm_d("Parititon check cannot start. Swap read failed"); + return rv; + } + + /* Check if all are 0xFF */ + int index = 0; + uint8_t *ptr = (uint8_t *)swap_desc; + for (index = 0; index < sizeof(psm_swap_desc_t); index++) + if (ptr[index] != 0xFF) + break; + + if (index == sizeof(psm_swap_desc_t)) + { + /* + * Swap area is clean. This implies that no compaction was + * in progress. + */ + *checkpoint = CHECKPOINT_4; + return WM_SUCCESS; + } + + /* + * Swap has some data. If checkpoint marker is not valid it + * implies that compaction process did not complete after the last + * time it started. Set checkpoint such that only swap cleanup will + * be performed. + */ + if (swap_desc->checkpoint_marker == (uint16_t)~swap_desc->checkpoint_marker_inv) + { + if (swap_desc->swap_start_offset == ~swap_desc->swap_start_offset_inv) + { + /* + * The descriptor is fully valid. This implies that + * compaction was interrupted after all objects + * were successfully copied to swap area. Now, we + * need to continue and copy them back to data area. + */ + *checkpoint = CHECKPOINT_2; + return WM_SUCCESS; + } + + /* + * This case is not expected because swap_start_offset is + * always written before checkpoint_marker. Lets erase the + * swap and cross our fingers. + */ + *checkpoint = CHECKPOINT_3; + return WM_SUCCESS; + } + + /* + * Swap descriptor is invalid. This implies that compaction process + * was incomplete. Data area is good. So only perform a cleanup of + * swap area. + */ + *checkpoint = CHECKPOINT_3; + return WM_SUCCESS; +} + +static int psm_module_physical_init(psm_t *psm) +{ + checkpoint_t checkpoint; + psm_swap_desc_t swap_desc; + + int rv = deduce_checkpoint_at_init(psm, &swap_desc, &checkpoint); + if (rv != WM_SUCCESS) + { + psm_d("swap state check failed"); + return rv; + } + + psm_isc("Checkpoint: %d", checkpoint); + if (checkpoint != CHECKPOINT_2) + { + /* Data area valid as per checkpoint. So, do a scan */ + rv = psm_part_scan(psm); + if (rv != WM_SUCCESS) + { + /* + * Since partition scan has failed it implies that + * something is amiss in the data area. Running + * compaction/upgrade may salvage intact objects. + */ + psm_d( + "Partition scan failed. Will try compaction" + "/upgrade"); + + /* Check if space is available for compaction/upgrade */ + bool compaction_reqd; + rv = manage_space_constraints(psm, 0, &compaction_reqd); + if (rv != WM_SUCCESS) + { + psm_d("Unable to alloc space for swap"); + return rv; + } + + /* Force checkpoint and compaction */ + checkpoint = CHECKPOINT_0; + } + } + + rv = handle_recovery(psm, checkpoint, &swap_desc); + if (rv != WM_SUCCESS) + { + psm_d("unexpected error while compaction"); + return rv; + } + + /* Scan is pending */ + if (checkpoint != CHECKPOINT_4) + { + rv = psm_part_scan(psm); + if (rv != WM_SUCCESS) + { + psm_d("psm scan failed after restoring swap to data"); + return rv; + } + } + + return rv; +} + +static psm_t *_get_existing_psm_object(const flash_desc_t *fdesc) +{ + psm_list_t *list; + + if (part_list.next == NULL) + { + /* This is the first partition to be init'ed */ + PSM_List_Init(&part_list); + return NULL; + } + + psm_t *psm; + for (list = part_list.next; list != &part_list; list = list->next) + { + psm = PSM_LIST_OBJ(psm_t *, node, list); + if (psm->fdesc_fl_dev == fdesc->fl_dev && psm->start_address == fdesc->fl_start) + { + /* + * There is a PSM already registered for this start + * address. + */ + psm_w("Using existing psm object"); + return psm; + } + } + + return NULL; +} + +int psm_module_init(flash_desc_t *fdesc, psm_hnd_t *phandle, psm_cfg_t *psm_cfg) +{ + if (!fdesc) + { + psm_d("%s: Invalid arguments", __func__); + return -WM_E_INVAL; + } + + if (phandle) + *phandle = 0; + + /* + * Check is PSM is already registered for received partition and + * return same handle. + */ + int save = os_enter_critical_section(); /* We are working on a list */ + psm_t *psm = _get_existing_psm_object(fdesc); + os_exit_critical_section(save); + if (psm) + { + if (phandle) + *phandle = (psm_hnd_t)psm; + return WM_SUCCESS; + } + + psm_entry("start-address: 0x%x size: %d", fdesc->fl_start, fdesc->fl_size); + + uint32_t block_size = psm_get_block_size(); + int rv = _psm_init_verify_params(fdesc, block_size, psm_cfg); + if (rv != WM_SUCCESS) + return rv; + + /* Allocate partition object. */ + psm = os_mem_calloc(sizeof(psm_t)); + if (!psm) + { + psm_d("cannot allocate PSM instance"); + return -WM_E_NOMEM; + } + + rv = psm_init_locks(psm); + if (rv != WM_SUCCESS) + { + os_mem_free(psm); + return rv; + } + + if (psm_cfg) + memcpy(&psm->psm_cfg, psm_cfg, sizeof(psm_cfg_t)); + +#ifdef CONFIG_SECURE_PSM + /* For test code only */ + if (force_psm_secure) + psm->psm_cfg.secure = true; + + if (psm->psm_cfg.keystore_override == false) + { + /* First check if keystore has a key */ + rv = psm_security_init(&psm->psm_sec_hnd); + if (rv == WM_SUCCESS) + psm_d("Using key from keystore"); + else if (rv == -WM_E_NOENT) + { + psm_d("No key in keystore. Try using key from app"); + rv = psm_security_init_with_key(&psm->psm_sec_hnd, &psm->psm_cfg); + if (rv == WM_SUCCESS) + psm_d("Using key from app"); + else if (rv == -WM_E_INVAL) + psm_e("No app key found"); + } + } + else + { + /* Directly use app key, ignoring keystore key if any. */ + rv = psm_security_init_with_key(&psm->psm_sec_hnd, &psm->psm_cfg); + if (rv == WM_SUCCESS) + psm_d("Using key from app"); + else if (rv == -WM_E_INVAL) + psm_e("No app key found"); + } + + /* Return error only if partition is encrypted. */ + if (part_encrypted(psm) && (rv != WM_SUCCESS)) + { + psm_d("sec init failed"); + psm_deinit_locks(psm); + memset(psm, 0x00, sizeof(psm_t)); + os_mem_free(psm); + return rv; + } +#endif /* CONFIG_SECURE_PSM */ + + psm->fdesc_fl_dev = fdesc->fl_dev; + psm->block_size = block_size; + psm->block_cnt = fdesc->fl_size / block_size; + psm->part_size = psm->block_size * psm->block_cnt; + + psm->start_address = fdesc->fl_start; + + if (!part_readonly(psm)) + { + /* Leave atleast one block for swap */ + psm->object_offset_limit = part_size(psm) - block_size(psm) - sizeof(psm_object_t); + } + else + { + psm->object_offset_limit = part_size(psm) - sizeof(psm_object_t); + } + + psm_rwlock_part(psm, PSM_MODE_WRITE); + rv = psm_module_physical_init(psm); + if (rv != WM_SUCCESS) + { + psm_rwunlock_part(psm, PSM_MODE_WRITE); + psm_deinit_locks(psm); +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + psm_security_deinit(&psm->psm_sec_hnd); +#endif + memset(psm, 0x00, sizeof(psm_t)); + os_mem_free(psm); + return rv; + } + psm_rwunlock_part(psm, PSM_MODE_WRITE); + + save = os_enter_critical_section(); + PSM_List_AddTail(&part_list, &psm->node); + os_exit_critical_section(save); + + if (phandle) + *phandle = (psm_hnd_t)psm; + + return WM_SUCCESS; +} + +int psm_module_deinit(psm_hnd_t *phandle) +{ + psm_entry(); + if (!phandle) + { + psm_d("NULL psm handle"); + return -WM_FAIL; + } + + psm_t *psm = (psm_t *)*phandle; + + /* Ensure that all others have exited */ + psm_rwlock_part(psm, PSM_MODE_WRITE); + psm_rwunlock_part(psm, PSM_MODE_WRITE); + + psm_reset_index(psm); + psm_deinit_locks(psm); + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + psm_security_deinit(&psm->psm_sec_hnd); +#endif + + /* Remove ourselves from the global list */ + int save = os_enter_critical_section(); /* We are working on a list */ + PSM_List_Remove(&psm->node); + os_exit_critical_section(save); + + memset(psm, 0x00, sizeof(psm_t)); + os_mem_free(psm); + + return WM_SUCCESS; +} + +int psm_module_init_ex(const psm_init_part_t *psm_init_part, psm_hnd_t *phandle) +{ + flash_desc_t fl; + int ret; + struct partition_entry *p; + + ret = part_init(); + if (ret != WM_SUCCESS) + { + return ret; + } + + memset(&fl, 0, sizeof(flash_desc_t)); + if (psm_init_part->pitype == PART_INFO_NAME) + { + p = part_get_layout_by_name(psm_init_part->part_info.name, NULL); + if (p == NULL) + return -WM_E_INVAL; + part_to_flash_desc(p, &fl); + } + else if (psm_init_part->pitype == PART_INFO_FL_DESC) + { + memcpy(&fl, psm_init_part->part_info.fl, sizeof(flash_desc_t)); + if (!part_is_flash_desc_within_one_partition(&fl)) + return -WM_E_INVAL; + } + else + return -WM_E_INVAL; + + return psm_module_init(&fl, phandle, psm_init_part->psm_cfg); +} + +int psm_format(psm_hnd_t phandle) +{ + psm_entry(); + if (!phandle) + { + psm_d("NULL psm handle"); + return -WM_E_INVAL; + } + + psm_t *psm = (psm_t *)phandle; + + psm_rwlock_part(psm, PSM_MODE_WRITE); + psm_reset_index(psm); + + psm_d("Erasing psm partition"); + int rv = psm_erase_flash(psm, 0, part_size(psm)); + if (rv != WM_SUCCESS) + { + psm_d("Could not format"); + psm_rwunlock_part(psm, PSM_MODE_WRITE); + return rv; + } + + rv = psm_part_scan(psm); + if (rv != WM_SUCCESS) + { + psm_d("Could not scan after format"); + psm_rwunlock_part(psm, PSM_MODE_WRITE); + return rv; + } + + psm_rwunlock_part(psm, PSM_MODE_WRITE); + + return WM_SUCCESS; +} + +int psm_set_variable(psm_hnd_t phandle, const char *variable, const void *value, uint32_t len) +{ + psm_entry("name: %s data-len: %d", variable, len); + if (!phandle || !variable || !value) + { + psm_d("%s: Invalid arguments", __func__); + return -WM_E_INVAL; + } + + psm_t *psm = (psm_t *)phandle; + if (!psm_is_data_len_sane(psm, len)) + { + psm_d("Unsupported data length for new object: %u", len); + return -WM_E_INVAL; + } + + psm_mode_t mode = PSM_MODE_WRITE; + psm_rwlock_part(psm, mode); + + psm_objinfo_t objinfo; + int rv = _psm_object_open(psm, &objinfo, variable, mode, len, NULL); + if (rv != WM_SUCCESS) + { + psm_d("Failed to open during set var-value"); + psm_rwunlock_part(psm, mode); + return rv; + } + + rv = _psm_object_write(psm, &objinfo, value, len); + if (rv != WM_SUCCESS) + { + psm_d("Failed to write during set var-value"); + psm_rwunlock_part(psm, mode); + return rv; + } + + rv = _psm_object_close(psm, &objinfo); + if (rv != WM_SUCCESS) + { + psm_d("Failed to close during set var-value"); + psm_rwunlock_part(psm, mode); + return rv; + } + + psm_rwunlock_part(psm, mode); + return WM_SUCCESS; +} + +int psm_get_variable(psm_hnd_t phandle, const char *variable, void *value, uint32_t max_len) +{ + int read_len; + + psm_entry("name: %s", variable); + if (!phandle || !variable || !value || !max_len) + { + psm_d("%s: Invalid arguments", __func__); + return -WM_E_INVAL; + } + + psm_mode_t mode = PSM_MODE_READ; + psm_t *psm = (psm_t *)phandle; + psm_rwlock_part(psm, mode); + + psm_objinfo_t objinfo; + int rv = _psm_object_open(psm, &objinfo, variable, mode, 0, NULL); + if (rv != WM_SUCCESS) + { + psm_d("Failed to open during get var-value"); + psm_rwunlock_part(psm, mode); + return rv; + } + + if (objinfo.pobj.data_len > max_len) + { + psm_d("%s: Variable value %d will not fit in given buffer %d", __func__, objinfo.pobj.data_len, max_len); + + rv = _psm_object_close(psm, &objinfo); + if (rv != WM_SUCCESS) + { + psm_d("Failed to close during get var-value (NO_SPC)"); + psm_rwunlock_part(psm, mode); + return rv; + } + + rv = -WM_E_NOSPC; + goto psm_get_skip_read; + } + + read_len = _psm_object_read(psm, &objinfo, value, max_len); + if (read_len < WM_SUCCESS) + { + psm_d("Failed to read during get var-value"); + psm_rwunlock_part(psm, mode); + return rv; + } + + rv = _psm_object_close(psm, &objinfo); + if (rv != WM_SUCCESS) + { + psm_d("Failed to close during get var-value"); + psm_rwunlock_part(psm, mode); + return rv; + } + + rv = read_len; +psm_get_skip_read: + psm_rwunlock_part(psm, mode); + return rv; +} + +int psm_get_variable_size(psm_hnd_t phandle, const char *variable) +{ + psm_entry("name: %s", variable); + if (!phandle || !variable) + { + psm_d("%s: Invalid arguments", __func__); + return -WM_E_INVAL; + } + + psm_mode_t mode = PSM_MODE_READ; + psm_t *psm = (psm_t *)phandle; + psm_rwlock_part(psm, mode); + + psm_objinfo_t objinfo; + int rv = _psm_object_open(psm, &objinfo, variable, mode, 0, NULL); + if (rv != WM_SUCCESS) + { + psm_d("Failed to open during get size"); + psm_rwunlock_part(psm, mode); + return rv; + } + + int obj_size = objinfo.pobj.data_len; + rv = _psm_object_close(psm, &objinfo); + if (rv != WM_SUCCESS) + { + psm_d("Failed to close during get size"); + psm_rwunlock_part(psm, mode); + return rv; + } + + psm_rwunlock_part(psm, mode); + return obj_size; +} + +/* Only for testing interface */ +int psm_register_event_callback(psm_event_callback cb) +{ + g_psm_event_cb = cb; + return WM_SUCCESS; +} + +/* Internal function. Only for testing. */ +void psm_secure_state(bool state) +{ +#ifdef CONFIG_SECURE_PSM + force_psm_secure = state; +#endif +} + +bool is_psm_encrypted(psm_hnd_t phandle) +{ + psm_entry(); + if (!phandle) + return -WM_E_INVAL; + +#ifdef CONFIG_SECURE_PSM + psm_t *psm = (psm_t *)phandle; + return part_encrypted(psm); +#else + return false; +#endif +} + +/* return non-zero value to signify that user does not want more names */ +static int list_object(psm_t *psm, psm_object_t *pobj, uint32_t object_offset, psm_list_cb list_cb) +{ + if (pobj->name_len > READ_BUFFER_SIZE) + { + psm_d("name size more than buffer: %d", pobj->name_len); + return -WM_FAIL; + } + + uint8_t buf[READ_BUFFER_SIZE + 1]; + int rv; + uint32_t name_offset = object_offset + sizeof(psm_object_t); + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + { + rv = resetkey(psm, SET_DECRYPTION_KEY); + if (rv) + return -WM_FAIL; + } +#endif + + /* Read the name field */ + rv = psm_read_flash(psm, buf, pobj->name_len, name_offset); + if (rv != WM_SUCCESS) + { + psm_d("Failed to read name field @ 0x%x", name_offset); + return -WM_FAIL; + } + + /* NULL terminate */ + buf[pobj->name_len] = 0; + +#ifdef CONFIG_SECURE_PSM + if (part_encrypted(psm)) + { + rv = decrypt_buf(psm, buf, buf, pobj->name_len); + if (rv) + return -WM_FAIL; + } +#endif + + /* Pass on to the user through the callback */ + return list_cb(buf); +} + +static void _psm_objects_list(psm_t *psm, psm_list_cb list_cb) +{ + psm_entry_i(); + + uint32_t offset = 0; + + /* + * Don't try reading flash if remaining size is less than + * necessary. + */ + uint32_t limit = psm->object_offset_limit; + psm_object_t pobj; + + while (offset < limit) + { + int rv = psm_read_flash(psm, &pobj, sizeof(psm_object_t), offset); + if (rv != WM_SUCCESS) + { + psm_d("list: could not read object @ off: %x", offset); + return; + } + + if (psm_is_free_space(&pobj)) + { + psm_d("Object list done"); + break; + } + + if (pobj.object_type != OBJECT_TYPE_SMALL_BINARY) + { + psm_d("Invalid object at the end of data area"); + break; + } + + if (!is_object_active(&pobj)) + { + offset += object_size(&pobj); + continue; + } + + if (!pobj.name_len) + { + psm_d("Zero name length objects not supported"); + offset += object_size(&pobj); + continue; + } + + rv = list_object(psm, &pobj, offset, list_cb); + if (rv != WM_SUCCESS) + break; + + offset += object_size(&pobj); + } +} + +void psm_objects_list(psm_hnd_t phandle, psm_list_cb list_cb) +{ + psm_entry(); + if (!phandle) + return; + + psm_t *psm = (psm_t *)phandle; + + psm_rwlock_part(psm, PSM_MODE_READ); + _psm_objects_list(psm, list_cb); + psm_rwunlock_part(psm, PSM_MODE_READ); +} diff --git a/components/boot2_utils/psm-v2.h b/components/boot2_utils/psm-v2.h new file mode 100644 index 000000000..1bd4d61bd --- /dev/null +++ b/components/boot2_utils/psm-v2.h @@ -0,0 +1,829 @@ +/* + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +/** @file psm-v2.h + * + * @brief Persistent storage module version 2 + * + * PSM (Persistent Storage Module) is a module which provides a PSM object + * abstraction layer over low level flash sector read/write operations. This is + * similar to how a filesystem provides a file abstraction over a block + * device driver. + * + * The PSM is specifically developed to work on flash memory devices which + * can be read/written on byte level but erases are possible only on block + * level. PSM helps reduce the flash usage thus helping in wear + * leveling. The working is described in brief as follows. A PSM object is + * an atomic structure on the flash and contains metadata and + * data (value). Metadata contains object name, length, etc. When an object + * value is changed a new object with same name is appended to the flash + * block instead of: + * - Backing up other objects + * - Erasing flash + * - Restoring objects + * - Writing new object. + * + * The earlier object with obsolete value will be inactivated and it is + * practically deleted from the PSM. It will be physically deleted during + * the compaction process. + * + * \section psm-v2_compaction Compaction process + * + * As new objects are appended to current objects a + * time will come when the flash space is close to getting full. At this + * point all the objects (excluding the inactivated ones) are copied to a + * special variable sized reserved area of the same flash partition. The + * data area i.e. the area of the partition which contained the active and + * inactive objects uptill now, is erased and the objects are copied back + * to data area. In effect, all obsolete objects are now physically deleted. + * + * During the process of compaction, or during new object write a power + * failure could occur. PSM is designed to handle this situation and has + * error recovery algorithms. It will ensure that no existing objects are + * corrupted and corrupted objects are safely removed during psm module + * initialization. + * + * The PSM module is designed to be able to read/write to arbitrary sized + * objects spanning multiple flash blocks. The only limitation is flash + * size and space reserved for compaction process. + * + * \section psm-v2_terminology Terminology + * Block + * ----- + * This is the storage unit for the PSM. The size of a block has to + * be in multiples of sector size of the NOR flash chip used. + * + * \section psm-v2_mem_usage Memory usage of PSM module + * + * Flash space usage + * ------------------ + * PSM has 12 bytes of overhead per PSM object. Thus, + * every PSM object size is: Data size (user defined) + name length (user + * defined) + 12 bytes (PSM defined). + * + * Heap usage + * ---------- + * PSM init (psm_module_init()) allocates about 34 bytes for (internal) PSM + * singleton object. This object will be present on heap till + * psm_module_deinit() is called. + * psm_object_open() allocates about 46 bytes internally and remains + * allocated till psm_object_close() is called. If instead + * psm_set_variable() or psm_get_variable() is used no heap is used. + * + * \section psm-v2_thread Thread safety + * PSM module is designed to be completely thread safe. Even across + * multiple instances of PSM module (i.e. multiple psm_module_init() + * calls) on separate sections/partitions of flash. Only caveat is that low + * level flash driver also needs take care of thread safety if multiple PSM + * partitions are on the _same_ flash chip. + * + * \section psm-v2_readonly Read only usage + * In certain use cases it may be desired to use PSM in a read only + * mode. One of the benefits of this is that reserved space is not + * required and PSM can fit in lesser number of sectors. When the read only + * flag is passed to the psm_module_init(), PSM will run in read only mode + * for that partition and not allow any writes. + * + * \section psm-v2_usage Usage + * + * PSM provides two types of API's for separate use cases. First type + * (Simple case) is when the caller has entire value in a buffer for write + * or has a buffer size equal to entire data to be read. Second type ( + * Advanced case) is when caller needs to read/write huge files in + * multiple KB's or MB's. In this case the caller needs an API which helps + * him read/write across multiple calls. Both the cases: are illustrated + * below. + * + * PSM initialization + * ------------------ + * This needs to be done for both the simple and advanced case. It is + * generally done only once after boot. + * + * Statically/dynamically allocate and populate \ref flash_desc_t + * object. Note that this object needs to persist until psm_module_deinit() + * returns. PSM does _not_ make an internal copy of this object to avoid + * wasting space. + * + * \code + * psm_hnd_t phandle; + * int rv = psm_module_init(&ppart, &phandle, NULL); + * if (rv != WM_SUCCESS) { + * wmprintf("PSM init failed"); + * return rv; + * } + * \endcode + * + * This handle 'phandle' can now be used for other API which require + * it. The third parameter is passed as NULL here. If any special flags + * need to be passed the \ref psm_cfg_t param can be passed accordingly. + * + * PSM simple usage case + * --------------------- + * Write and read back a small variable. + * + * \code + * char var[] = "name"; + * char value[] = "Tim"; + * int rv = psm_set_variable(phandle, var, value, strlen(value)); + * if (rv != WM_SUCCESS) { + * wmprintf("Variable write failed"); + * return rv; + * } + * + * char read_value[10]; + * rv = psm_get_variable(phandle, var, read_value, strlen(value)); + * if (rv != WM_SUCCESS) { + * wmprintf("Variable read failed"); + * return rv; + * } + * + * \endcode + * + * PSM advanced use case + * --------------------- + * Write a huge valued object + * + * \code + * char var[] = "hello.mp3"; + * char value[1024]; //Assume data is already in this buffer + * + * psm_object_handle_t ohandle; + * int rv = psm_object_open(phandle, var, PSM_MODE_WRITE, sizeof(value), + * NULL, &ohandle); + * if (rv != WM_SUCCESS) { + * //Failed + * return rv; + * } + * //Write the object in two chunks just to show valid usage pattern + * rv = psm_object_write(ohandle, value, 512); + * if (rv != WM_SUCCESS) { + * //Failed + * return rv; + * } + * + * rv = psm_object_write(ohandle, &value[512], 512); + * if (rv != WM_SUCCESS) { + * //Failed * + * return rv; + * } + * + * rv = psm_object_close(&ohandle); + * if (rv != WM_SUCCESS) { + * //Failed + * return rv; + * } + * + * \endcode + * + * De initialize PSM + * ----------------- + * This would generally be done once only during system shutdown. + * + * \code + * int rv = psm_module_deinit(&phandle); + * if (rv != WM_SUCCESS) { + * //Failed + * return rv; + * } + * + * \endcode + * + * \section psm-v2_index_caching Indexing and caching + * + * Indexing and Caching are additional features to be used when fast + * access to a PSM object is required. Both are to be enabled + * separately per object. When indexing is enabled the address of the PSM + * object is saved in RAM. This avoids a search for the object in the + * flash. When caching is enabled the object name and value are cached in + * RAM. This gives instant access to the values and NO flash is + * accessed. When caching is enabled indexing is also automatically enabled + * for that object. + * + * Predictably caching consumes more RAM and amount of RAM consumed + * depends on the size of the name and value of object. Indexing uses 14 + * bytes per object. + * + * \section psm-v2_secure PSM Encryption (Secure PSM) + * + * User may choose to store the data in PSM in encrypted format. If + * encryption is enabled, data is encrypted before storing it into PSM + * and decrypted when data is retrieved. PSMv2 currently uses AES-CTR for + * encryption. The keys are retrieved from the secure keystore. If + * encryption is enabled and secure keystore does not have the keys psm + * initialization will fail. Each PSM object is encrypted separately + * before storing to flash. The metadata is not encrypted. The name + * field and data field is encrypted. + * + * Note that, even if Secure PSM is enabled, users can still use PSM in + * non-encrypted mode. This is useful when there are more than one + * PSM partitions and only some of them are encrypted. + * + */ + +#ifndef __PSMV2_H__ +#define __PSMV2_H__ + +#include +#include +#include +#include +#include +#include +#define PSM_MODULE_VER "2.0" + +/** PSM Handle */ +typedef void *psm_hnd_t; + +/** PSM Object handle */ +typedef void *psm_object_handle_t; + +/** PSM opening mode */ +typedef enum +{ + /** Read mode */ + PSM_MODE_READ = 1, + /** Write mode */ + PSM_MODE_WRITE = 2, +} psm_mode_t; + +/** PSM Flags + * + * Required in \ref psm_objattrib_t. Please refer \ref psm-v2_index_caching + * for details + */ +typedef enum +{ + /** Indexing enabled */ + PSM_INDEXING_ENABLED = 0x01, + /** Caching enabled */ + PSM_CACHING_ENABLED = 0x02, +} psm_flags_t; + +/** PSM Object attributes + * + * This structure is accepted by psm_object_open() + */ +typedef struct +{ + /** OR of the flags defined in \ref psm_flags_t */ + uint32_t flags; +} psm_objattrib_t; + +/** PSM Configuration + * + * This structure is passed to psm_module_init(). PSMv2 won't need the user + * copy of this structure after call to psm_module_init() returns. + */ +typedef struct +{ + /** If read-only is enabled no writes will be possible to the + partition */ + bool read_only; + /** + * If 'secure' is set, the object will be encrypted before + * writing, and object will be decrypted before reading. If secure + * PSM is enabled KEY_PSM_ENCRYPT_KEY and KEY_PSM_NONCE needs to + * be present in the keystore or must be provided through following + * members. Without these parameters the PSM initialization will fail. + * This variable should not be set in case of mc200. + */ + bool secure; + +#ifdef CONFIG_SECURE_PSM + /** + * If 'keystore_override' is set, and secure is required, then it must + * use below key/iv field so that the keystore will be ignored. + * If 'keystore_override' is not set, and secure is required, then keystore + * key will be checked first before checking below key/iv field, whichever + * has valid key/iv will be used. + */ + bool keystore_override; + + /** + * 'key' from app to be used for encryption/decryption when applicable. + */ + const uint8_t *key; + + /** + * 'iv' from app to be used for encryption/decryption when applicable. + */ + const uint8_t *iv; + + /** + * 'key_sz' from app for the 'key' size in byte. typical 16. + */ + uint16_t key_sz; + + /** + * 'iv_sz' from app for the 'iv' size in byte. typical 16. + */ + uint16_t iv_sz; +#endif /* CONFIG_SECURE_PSM */ +} psm_cfg_t; + +/** Part Info types */ +enum part_info_type +{ + /** part_info.name is valid */ + PART_INFO_NAME = 0, + /** part_info.fl is valid */ + PART_INFO_FL_DESC = 1, +}; + +/** PSM init partition info + * + * This structure is passed to psm_module_init_ex() to specify partition + * details. It allows app to specify an arbitrary flash space + * or an existing partition name in addition to the PSM configuration for + * this partition. PSMv2 won't need the user copy of this structure or + * any pointer within this structure after call to psm_module_init_ex() + * returns. + */ +typedef struct +{ + /** part info type below */ + enum part_info_type pitype; + union + { + /** 'name' is valid if 'pitype'= PART_INFO_NAME */ + const char *name; + /** 'fl' is valid if 'pitype'= PART_INFO_FL_DESC */ + const flash_desc_t *fl; + } part_info; + + /** PSM Configuration settings for this init partition */ + psm_cfg_t *psm_cfg; +} psm_init_part_t; + +/** + * Initialize the PSM module + * + * This API initializes the PSM module. The given flash space will + * be accessed and initialized if necessary. Since this function is the + * first one called after a power cycle, if a flash operation was in + * progress recovery actions will be performed. + * + * @note If secure PSM is enabled KEY_PSM_ENCRYPT_KEY and KEY_PSM_NONCE + * needs to be present in the keystore or can optionally be provided + * through \t ref psm_cfg_t structure. + * + * @param[in] fdesc Populated flash descriptor \ref flash_desc_t having + * partition details. Please refer to \ref partition.h for relevant APIs. + * @param[out] phandle Pointer to the handle \ref psm_hnd_t. Populated by PSM. + * @param[in] psm_cfg \ref psm_cfg_t PSM configuration structure. If NULL + * is passed default configuration i.e. read/write mode is used. + * + * @return WM_SUCCESS Init success. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_E_NOMEM Memory allocation failure. + * @return -WM_FAIL If any other error occurs. + */ +int psm_module_init(flash_desc_t *fdesc, psm_hnd_t *phandle, psm_cfg_t *psm_cfg); + +/** + * Initialize the PSM module with specified partition name or flash space. + * + * This API initializes the PSM module with the enhancement that + * partition details can be specified either as a partition name + * from partition table or as flash descriptor itself. + * + * The given flash spaces will be accessed and initialized if necessary. + * Since this function is the first one called after a power cycle, + * if a flash operation was in progress recovery actions will be performed. + * + * @note If secure PSM is enabled KEY_PSM_ENCRYPT_KEY and KEY_PSM_NONCE + * needs to be present in the keystore or can optionally be provided + * through \t ref psm_cfg_t structure that is part of \ref + * psm_init_part_t structure. + * + * @note there is no corresponding psm_module_deinit_ex() API required. + * Use existing \ref psm_module_deinit() instead. + * + * @param[in] psm_init_part Pointer to \ref psm_init_part_t structure having + * partition details. PSMv2 won't need the user copy of any field in + * psm_init_part after call returns. + * @param[out] phandle Pointer to the handle \ref psm_hnd_t. Populated by PSM. + * + * @return WM_SUCCESS Init success. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_E_NOMEM Memory allocation failure. + * @return -WM_FAIL If any other error occurs. + */ +int psm_module_init_ex(const psm_init_part_t *psm_init_part, psm_hnd_t *phandle); + +/** + * Open an existing or a new PSM object + * + * This API allows the caller to open a new or existing PSM object. + * This call is essential before called psm_object_read() or + * psm_object_write(). + * + * \note If write mode is specified and if an object with the same + * name is already present, the existing object will be deleted + * and replaced with the new one. + * + * @param[in] phandle Handle returned in earlier call to psm_module_init() + * @param[in] name NULL terminated ASCII name of PSM object. + * @param[in] mode Specify read mode (\ref PSM_MODE_READ) or a write + * mode(\ref PSM_MODE_WRITE). + * @param[in] max_data_len Valid only for write mode. This specifies the + * maximum length of the data the caller expect to write across single or + * multiple calls of psm_object_write(). It is okay if the caller later + * actually writes less number of bytes to be object than max_data_len + * given here. For e.g. Giving 'max_data_len' 20 but writing only 4 bytes + * is perfectly alright. The remaining 16 bytes will be released to the + * free space pool once this object is closed. + * @param[in] attribs Additional attributes as per \ref psm_objattrib_t. + * Pass NULL if not required. + * @param[out] ohandle Pointer to Object handle. Will be populated by + * psm_object_open() if open operation was successful. This needs to be + * passed to other psm read/write API's. + * + * @return For read mode: If open is successful size of the object is returned. + * For write mode: If open is successful WM_SUCCESS is returned. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_E_NOMEM Memory allocation failure. + * @return -WM_E_NOSPC If enough space is unavailable for the new + * object. This error can only be returned in write mode. + * @return -WM_FAIL If any other error occurs. + */ +int psm_object_open(psm_hnd_t phandle, + const char *name, + psm_mode_t mode, + uint32_t max_data_len, + psm_objattrib_t *attribs, + psm_object_handle_t *ohandle); + +/** + * Read data of an existing and opened object + * + * This API allows the caller to read data from an object. This + * call can be invoked as many times as the caller wants till the data read + * finishes. Offset from where data is read is automatically incremented + * depending on the size read. When data read is over, zero is returned. + * + * @pre psm_object_open() + * + * @note To avoid double pass over flash data area, CRC calculations are done + * on-the-go as data is being read progressively by the caller. CRC + * verification is done only in the last call to psm_object_read(). The + * downside to this is that whole object needs to be read by caller before + * object integrity can be confirmed. + * + * @note This API will block if other writers are currently using + * the PSM in write mode. + * + * @param[in] ohandle Handle returned from call to psm_object_open(). + * @param[out] buf Destination buffer of data read from flash. Ensure that + * it is atleast equal to max_len + * @param[in] max_len Length of the buffer passed as second parameter. Data + * read can be less than this value is end of object is reached. + * + * @return Non-zero positive value equal to number of bytes written to user + * given buffer + * @return 0 No more data available. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_E_CRC If CRC check failed. + * @return -WM_FAIL If any other error occurs. + */ +int psm_object_read(psm_object_handle_t ohandle, void *buf, uint32_t max_len); + +/** + * Write data to an opened PSM object. + * + * This API allows the caller to write data to an object. This + * call can be invoked as many times as the caller wants as long as total + * size written is less that 'max_len' specified during + * psm_object_open(). Data passed in every invocation is appended to the + * existing data already written. + * + * @pre psm_object_open() + * + * @note This API will block if other readers/writers are currently using + * the PSM. + * + * @param[in] ohandle Handle returned from call to psm_object_open(). + * @param[in] buf Pointer to buffer containing data to be written to flash. + * @param[in] len Length of the data in the buffer passed. + * + * @return WM_SUCCESS Data was written successfully. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_E_PERM If object was opened in read mode. + * @return -WM_E_NOSPC If caller tries to write more data than specified in + * call to psm_object_open(). + * @return -WM_FAIL If any other error occurs. + */ +int psm_object_write(psm_object_handle_t ohandle, const void *buf, uint32_t len); + +/** + * Close the PSM object + * + * This API will close the earlier opened PSM object. The object + * is finalized in the flash only after this call. + * + * @pre psm_object_open() + * + * @param[in] ohandle Handle returned from earlier call to + * psm_object_open() + * + * @return WM_SUCCESS Object was closed successfully. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_FAIL If any other error occurs. + */ +int psm_object_close(psm_object_handle_t *ohandle); + +/** + * Delete a PSM object + * + * This API deletes an object from the PSM. + * + * @param[in] phandle Handle returned from earlier call to + * psm_module_init() + * @param[in] name NULL terminated ASCII name of the PSM object to be + * deleted. + * + * @note This API will block if other readers/writers are currently using + * the PSM. + * + * @return WM_SUCCESS Object was deleted successfully. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_E_NOSPC If caller tries to write more data than specified in + * call to psm_object_open(). + * @return -WM_FAIL If any other error occurs. + */ +int psm_object_delete(psm_hnd_t phandle, const char *name); + +/** + * Format the PSM partition + * + * This API allows the caller to erase and initialize the PSM + * partition. All the existing objects will be erased. + * + * @note This API will block if other readers/writers are currently using + * the PSM. + * + * @param[in] phandle Handle to PSM returned earlier from the call to + * psm_module_init() + * + * @return WM_SUCCESS Format operation was successful. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_FAIL If any other error occurs. + */ +int psm_format(psm_hnd_t phandle); + +/** + * This callback will be invoked 'n' times if there are 'n' total variables + * in the PSM. The user can call any API to read the PSM variables in the + * callback. Any write operation to PSM will cause a deadlock if done in + * the callback implementation. + * + * If the callback implementation returns a non-zero value no futher + * callbacks will be given. This can be useful when the callback has found + * what it was searching for and does not need remaining variables. The + * callback is invoked till all variables are done or callback returns + * WM_SUCCESS, whichever comes first. + */ +typedef int (*psm_list_cb)(const uint8_t *name); + +/** + * Print all the objects and their data to console. + * + * @param[in] phandle Handle to PSM returned earlier from the call to + * psm_module_init() + * @param[in] list_cb Callback invoked by this API to pass on variable + * names one by one to the user. + * + * @return void + */ +void psm_objects_list(psm_hnd_t phandle, psm_list_cb list_cb); + +/* + * Check if PSM module is encrypted. + * + * @param[in] phandle Handle to PSM returned earlier from the call to + * psm_module_init() + * + * @return 'true' if PSM is encrypted or 'false' otherwise. + */ +bool is_psm_encrypted(psm_hnd_t phandle); + +/** + * Set a variable value pair + * + * This API is built on top of existing + * psm_object_open(), psm_object_write() and psm_object_close() + * APIs. This API is preferable when small sized objects + * are being written. + * + * @note psm_object_open() and psm_object_close() are not required to be + * called if this API is used. + * + * @param[in] phandle Handle to PSM returned earlier from the call to + * psm_module_init() + * @param[in] variable Name of the object. + * @param[in] value Pointer to buffer having the data to be written + * @param[in] len Length of the data to be written. + * + * @return WM_SUCCESS Variable-value pair was set successfully. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_FAIL If any other error occurs. + */ +int psm_set_variable(psm_hnd_t phandle, const char *variable, const void *value, uint32_t len); + +/** + * Helper function to simplify set of NULL terminated value. + * + * psm_set_variable_str() will self calculate the length of the NULL + * terminated string sent by caller. + * + * @param[in] phandle See documentation of psm_set_variable() + * @param[in] variable See documentation of psm_set_variable() + * @param[in] value See documentation of psm_set_variable() + * + * @return See documentation of psm_set_variable() + */ +static inline int psm_set_variable_str(psm_hnd_t phandle, const char *variable, const void *value) +{ + return psm_set_variable(phandle, variable, value, strlen((const char *)value)); +} + +/** + * Helper function to set integer value to PSM + * + * This function will convert given int to string representation and store + * it to PSM. psm_get_variable_int() can be used to read the value back + * again in int format. + * + * for e.g. 1234 given by the user will be stored as "1234" + * + * @param[in] phandle See documentation of psm_get_variable() + * @param[in] variable See documentation of psm_get_variable() + * @param[out] value The value to be stored to PSM + * + * @return See documentation of psm_set_variable() + */ +static inline int psm_set_variable_int(psm_hnd_t phandle, const char *variable, int value) +{ + char int_s[14]; + + snprintf(int_s, sizeof(int_s), "%d", value); + return psm_set_variable_str(phandle, variable, int_s); +} + +/** + * Get a variable value pair + * + * This API is built on top of existing + * psm_object_open(), psm_object_read() and psm_object_close() + * APIs. This API is preferable when small sized objects + * are being read. + * + * @note psm_object_open() and psm_object_close() are not required to be + * called if this API is used. + * + * @param[in] phandle Handle to PSM returned earlier from the call to + * psm_module_init() + * @param[in] variable Name of the object. + * @param[out] value Pointer to buffer where value will be written by PSM. + * @param[in] max_len Length of the buffer passed as third parameter. If + * the buffer is not enough to fit the whole object error will be + * returned. Partial read will not be done. + * + * @note Note that this function returns the length of the value. It will + * \b not< NULL terminate the returned data. + * + * @return If operation is a success then length of the value field will be + * returned. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_E_NOSPC If variable value exceeds buffer length given. + * @return -WM_FAIL If any other error occurs. + */ +int psm_get_variable(psm_hnd_t phandle, const char *variable, void *value, uint32_t max_len); + +/** + * Get size of a PSM variable + * + * No changes are done to the PSM. + * + * @param[in] phandle Handle to PSM returned earlier from the call to + * psm_module_init() + * @param[in] variable Name of the variable. + * + * @return Zero or positive value of size of variable if variable is present. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_FAIL if object not found or any error occurred. + */ +int psm_get_variable_size(psm_hnd_t phandle, const char *variable); + +/** + * Check if a variable is present + * + * No changes are done to the PSM. + * + * @param[in] phandle Handle to PSM returned earlier from the call to + * psm_module_init() + * @param[in] variable Name of the variable. + * + * @return 'true' if variable is present. + * @return 'false' if variable is absent or some other error. + */ +static inline bool psm_is_variable_present(psm_hnd_t phandle, const char *variable) +{ + return (psm_get_variable_size(phandle, variable) >= 0); +} + +/** + * Helper function to simplify get of NULL terminated value. + * + * This function will automatically NULL terminate the byte string + * retrieved from PSM. One additional byte should be kept reserved by the + * caller for this NULL terminator. + * + * @param[in] phandle See documentation of psm_get_variable() + * @param[in] variable See documentation of psm_get_variable() + * @param[out] value See documentation of psm_set_gariable() + * @param[in] max_len See documentation of psm_get_variable() + * + * @return See documentation of psm_get_variable() + */ +static inline int psm_get_variable_str(psm_hnd_t phandle, const char *variable, void *value, uint32_t max_len) +{ + if (!max_len) + return -WM_E_INVAL; + + uint8_t *valp = (uint8_t *)value; + + int ret = psm_get_variable(phandle, variable, valp, max_len - 1); + if (ret >= 0) /* NULL terminate */ + valp[ret] = 0; + + return ret; +} + +/** + * Helper function to get integer value from PSM + * + * This function will automatically read string representation of a number + * from PSM and convert it to int format before returning. + * + * for e.g. "1234" stored in PSM will be returned as 1234 in the user given + * int variable. + * + * @param[in] phandle See documentation of psm_get_variable() + * @param[in] variable See documentation of psm_get_variable() + * @param[out] value The value returned. + * + * @return WM_SUCCESS if retrieval was successful + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_FAIL If any other error occurs. + */ +static inline int psm_get_variable_int(psm_hnd_t phandle, const char *variable, int *value) +{ + char int_s[14]; + + int ret = psm_get_variable_str(phandle, variable, int_s, sizeof(int_s)); + if (ret < 0) + return ret; + + *value = strtol(int_s, NULL, 0); + return WM_SUCCESS; +} + +/** + * De-initialize the PSM module + * + * This API unloads the PSM module from handling the flash partition. + * + * @note This API will block till other readers/writers are currently using + * the PSM. + * + * @param[in] phandle Handle to the PSM obtained earlier through + * psm_module_init() + * + * @return WM_SUCCESS Module de-init success. + * @return -WM_E_INVAL Invalid arguments. + * @return -WM_FAIL If any other error occurs. + */ +int psm_module_deinit(psm_hnd_t *phandle); + +#endif /* __PSMV2_H__ */ diff --git a/components/boot2_utils/psm_list.h b/components/boot2_utils/psm_list.h new file mode 100644 index 000000000..c54ef1236 --- /dev/null +++ b/components/boot2_utils/psm_list.h @@ -0,0 +1,146 @@ +/* + * Copyright 2017-2020, NXP + * All rights reserved. + * + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef __PSM_LIST_H__ +#define __PSM_LIST_H__ + +#include + +/*! + * @addtogroup psm + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/** + * @brief Get PSM list object structure pointer. + */ +#define PSM_LIST_OBJ(type, field, list) (type)((uint32_t)list - (uint32_t)(&((type)0)->field)) + +/** + * @brief PSM list fields + */ +typedef struct _psm_list +{ + struct _psm_list *prev; /*!< previous list node */ + struct _psm_list *next; /*!< next list node */ +} psm_list_t; + +/******************************************************************************* + * API + ******************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/*! + * @brief Initialize PSM list head. + * + * @param list PSM list head pointer. + */ +static inline void PSM_List_Init(psm_list_t *list) +{ + assert(list); + + list->prev = list; + list->next = list; +} + +/*! + * @brief Check whether PSM list is empty. + * + * @param list PSM list head pointer. + * @return TRUE when list is empty, FALSE otherwise. + */ +static inline bool PSM_List_IsEmpty(psm_list_t *list) +{ + assert(list); + + return list->next == list; +} + +/*! + * @brief Add list node at list head. + * + * @param list PSM list head pointer. + * @param node PSM list node pointer to add. + */ +static inline void PSM_List_AddHead(psm_list_t *list, psm_list_t *node) +{ + assert(list); + assert(node); + + node->next = list->next; + node->prev = list; + list->next->prev = node; + list->next = node; +} + +/*! + * @brief Add list node at list tail. + * + * @param list PSM list head pointer. + * @param node PSM list node pointer to add. + */ +static inline void PSM_List_AddTail(psm_list_t *list, psm_list_t *node) +{ + assert(list); + assert(node); + + node->prev = list->prev; + node->next = list; + list->prev->next = node; + list->prev = node; +} + +/*! + * @brief Insert list node before another. + * + * @param anchor PSM list anchor node pointer. + * @param node PSM list node pointer to insert. + */ +static inline void PSM_List_InsertBefore(psm_list_t *anchor, psm_list_t *node) +{ + PSM_List_AddTail(anchor, node); +} + +/*! + * @brief Insert list node after another. + * + * @param anchor PSM list anchor node pointer. + * @param node PSM list node pointer to insert. + */ +static inline void PSM_List_InsertAfter(psm_list_t *anchor, psm_list_t *node) +{ + PSM_List_AddHead(anchor, node); +} + +/*! + * @brief Remove list node from list. + * + * @param node PSM list node pointer to remove. + */ +static inline void PSM_List_Remove(psm_list_t *node) +{ + assert(node); + + node->prev->next = node->next; + node->next->prev = node->prev; + /* clear node */ + PSM_List_Init(node); +} + +#ifdef __cplusplus +} +#endif + +/*! @} */ + +#endif /* __PSM_LIST_H__ */ diff --git a/components/boot2_utils/secure_boot.h b/components/boot2_utils/secure_boot.h new file mode 100644 index 000000000..a33e97462 --- /dev/null +++ b/components/boot2_utils/secure_boot.h @@ -0,0 +1,66 @@ +/** @file secure_boot.h + * + * @brief Secure Algo Enums + * + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#ifndef __SECURE_BOOT_H__ +#define __SECURE_BOOT_H__ + +#include +#include + +/* End of SRAM0 address where boot-loader will copy keystore + * Note: Boot loader refers to this macro and same address space is reserved + * in linker script of application fw as well. + * Important point to remember here is, this should note overlap with + * boot-loader CODE/DATA/BSS region, otherwise that may result in undefined + * behaviour. + * Please do not modify. + */ +#define SB_KEYSTORE_ADDR ((volatile uint32_t *)(0x15F000)) +#define SB_KEYSTORE_SIZE (4 * 1024) +#define SB_SEC_IMG_HDR_SIZE (512) + +typedef struct tlv_hdr img_sec_hdr, boot2_ks_hdr; + +enum signing_algo_t +{ + NO_SIGN = 0, + RSA_SIGN, +}; + +enum hash_algo_t +{ + NO_HASH = 0, + SHA256_HASH, +}; + +enum encrypt_algo_t +{ + NO_ENCRYPT = 0, + AES_CCM_256_ENCRYPT, + AES_CTR_128_ENCRYPT, +}; + +#endif /* __SECURE_BOOT_H__ */ diff --git a/components/boot2_utils/wmtlv.c b/components/boot2_utils/wmtlv.c new file mode 100644 index 000000000..66208992f --- /dev/null +++ b/components/boot2_utils/wmtlv.c @@ -0,0 +1,242 @@ +/** @file wmtlv.c + * + * @brief This file provides API for Type Length Value + * + * Copyright 2015-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include +#include +#include + +int tlv_store_init(uint8_t *tlv_buf, uint32_t max_size, uint8_t store_type) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + + if (store_type == BOOT2_KEYSTORE) + thdr->magic = SEC_KEYSTORE_MAGIC_SIG; + else if (IMAGE_SECURE_HEADER) + thdr->magic = SEC_FW_MAGIC_SIG; + else + thdr->magic = SEC_DEFAULT_MAGIC_SIG; + + thdr->len = sizeof(struct tlv_hdr); + + /* At the moment store max size in crc for buffer overflow detection */ + thdr->crc = max_size; + return TLV_SUCCESS; +} + +int tlv_store_add(uint8_t *tlv_buf, uint8_t type, uint16_t len, const uint8_t *value) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + struct tlv_entry *tentry = (struct tlv_entry *)(tlv_buf + thdr->len); + + if ((thdr->len + sizeof(tentry->type) + sizeof(tentry->len) + len) > thdr->crc) + return ERR_TLV_INSUFFICIENT_MEMORY; + + tentry->type = type; + tentry->len = len; + memcpy(tentry->value, value, len); + + thdr->len += sizeof(tentry->type) + sizeof(tentry->len) + len; + + return TLV_SUCCESS; +} + +/* Special routine for XIP image where keystore has to be a + * multiple of 4 bytes */ +int tlv_store_xip_padding(uint8_t *tlv_buf, uint8_t *pad_value) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + struct tlv_entry *tentry = (struct tlv_entry *)(tlv_buf + thdr->len); + uint32_t len; + + /* Already aligned so no padding */ + if (!(thdr->len & (XIP_ALIGN_SIZE - 1))) + return TLV_SUCCESS; + + len = XIP_ALIGN_SIZE - + ((thdr->len + sizeof(tentry->type) + sizeof(tentry->len) + XIP_ALIGN_SIZE) & (XIP_ALIGN_SIZE - 1)); + + if ((thdr->len + len) > thdr->crc) + return ERR_TLV_INSUFFICIENT_MEMORY; + + tentry->type = KEY_FILLER; + tentry->len = len; + memset(tentry->value, *pad_value, tentry->len); + + thdr->len += sizeof(tentry->type) + sizeof(tentry->len) + tentry->len; + + return TLV_SUCCESS; +} + +int tlv_store_get(uint8_t *tlv_buf, uint8_t type, uint16_t len, uint8_t *value) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + struct tlv_entry *tentry = (struct tlv_entry *)(tlv_buf + sizeof(struct tlv_hdr)); + + while ((uint8_t *)tentry < tlv_buf + thdr->len) + { + if (tentry->type == type) + { + if (value && tentry->len <= len) + { + memcpy(value, tentry->value, tentry->len); + return tentry->len; + } + else if (value == NULL) + return tentry->len; + else + return ERR_TLV_BAD_BUF_LEN; + } + tentry = (struct tlv_entry *)((uint8_t *)tentry + sizeof(tentry->type) + sizeof(tentry->len) + tentry->len); + } + + return ERR_TLV_NOT_FOUND; +} + +static struct tlv_hdr *thdr; +static struct tlv_entry *tentry; + +int tlv_store_iterate(uint8_t *tlv_buf, uint8_t *ptype, uint16_t len, uint8_t *value) +{ + if (tlv_buf) + { + thdr = (struct tlv_hdr *)tlv_buf; + tentry = (struct tlv_entry *)(tlv_buf + sizeof(struct tlv_hdr)); + } + + if ((uint8_t *)tentry < (uint8_t *)thdr + thdr->len) + { + if (ptype) + *ptype = tentry->type; + if (value == NULL || tentry->len > len) + return ERR_TLV_BAD_BUF_LEN; + + memcpy(value, tentry->value, tentry->len); + tentry = (struct tlv_entry *)((uint8_t *)tentry + sizeof(tentry->type) + sizeof(tentry->len) + tentry->len); + return tentry->len; + } + + return ERR_TLV_NOT_FOUND; +} + +int tlv_store_get_ref(uint8_t *tlv_buf, uint8_t type, uint16_t *plen, const uint8_t **pvalue) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + struct tlv_entry *tentry = (struct tlv_entry *)(tlv_buf + sizeof(struct tlv_hdr)); + + while ((uint8_t *)tentry < tlv_buf + thdr->len) + { + if (tentry->type == type) + { + if (plen) + *plen = tentry->len; + if (pvalue) + *pvalue = tentry->value; + return tentry->len; + } + tentry = (struct tlv_entry *)((uint8_t *)tentry + sizeof(tentry->type) + sizeof(tentry->len) + tentry->len); + } + + if (plen) + *plen = 0; + if (pvalue) + *pvalue = NULL; + + return ERR_TLV_NOT_FOUND; +} + +int tlv_store_iterate_ref(uint8_t *tlv_buf, uint8_t *ptype, uint16_t *plen, const uint8_t **pvalue) +{ + if (tlv_buf) + { + thdr = (struct tlv_hdr *)tlv_buf; + tentry = (struct tlv_entry *)(tlv_buf + sizeof(struct tlv_hdr)); + } + + if ((uint8_t *)tentry < (uint8_t *)thdr + thdr->len) + { + uint8_t len = tentry->len; + + if (ptype) + *ptype = tentry->type; + if (plen) + *plen = tentry->len; + if (pvalue) + *pvalue = tentry->value; + tentry = (struct tlv_entry *)((uint8_t *)tentry + sizeof(tentry->type) + sizeof(tentry->len) + tentry->len); + return len; + } + + if (plen) + *plen = 0; + if (pvalue) + *pvalue = NULL; + + return ERR_TLV_NOT_FOUND; +} + +int tlv_store_close(uint8_t *tlv_buf, crc_func_t crc_func) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + + thdr->crc = crc_func((tlv_buf + sizeof(struct tlv_hdr)), (thdr->len - sizeof(struct tlv_hdr)), 0); + return TLV_SUCCESS; +} + +int tlv_store_validate(uint8_t *tlv_buf, uint8_t store_type, crc_func_t crc_func) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + uint32_t magic, crc; + + switch (store_type) + { + case BOOT2_KEYSTORE: + magic = SEC_KEYSTORE_MAGIC_SIG; + break; + case IMAGE_SECURE_HEADER: + magic = SEC_FW_MAGIC_SIG; + break; + default: + magic = SEC_DEFAULT_MAGIC_SIG; + break; + } + + if (thdr->magic != magic) + return ERR_TLV_MAGIC_FAILURE; + + crc = crc_func((tlv_buf + sizeof(struct tlv_hdr)), (thdr->len - sizeof(struct tlv_hdr)), 0); + + if (crc != thdr->crc) + return ERR_TLV_CRC_FAILURE; + + return TLV_SUCCESS; +} + +int tlv_store_length(uint8_t *tlv_buf) +{ + struct tlv_hdr *thdr = (struct tlv_hdr *)tlv_buf; + + return thdr->len; +} diff --git a/components/boot2_utils/wmtlv.h b/components/boot2_utils/wmtlv.h new file mode 100644 index 000000000..9f4194bba --- /dev/null +++ b/components/boot2_utils/wmtlv.h @@ -0,0 +1,97 @@ +/** @file wmtlv.h + * + * @brief TLV (Type-Length-Value) module + * + * Copyright 2015-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +/*! \file wmtlv.h + * \brief TLV (Type-Length-Value) module + * + * TLV module is the low-level module on top of which keystore is based. + * (For details of keystore, refer to keystore.h). This module manages + * the pre-defined TLV types. + */ + +#ifndef __TLV_H__ +#define __TLV_H__ + +#include +#include + +#define IS_VALID_TLV_TYPE(tlv_type) (((tlv_type) >= 0 && (tlv_type) <= 255) ? 1 : 0) +#define XIP_ALIGN_SIZE 4 + +PACK_START +struct tlv_hdr +{ + uint32_t magic; + uint32_t len; + uint32_t crc; +} PACK_END; + +PACK_START +struct tlv_entry +{ + uint8_t type; + uint16_t len; + uint8_t value[]; +} PACK_END; + +enum tlv_store_type +{ + BOOT2_KEYSTORE = 0, + IMAGE_SECURE_HEADER, + CONFIG_FILE_STORE +}; + +#define SEC_KEYSTORE_MAGIC_SIG (('S' << 0) | ('B' << 8) | ('K' << 16) | ('S' << 24)) +#define SEC_FW_MAGIC_SIG (('S' << 0) | ('B' << 8) | ('F' << 16) | ('H' << 24)) +#define SEC_DEFAULT_MAGIC_SIG 0x00 + +#define TLV_SUCCESS 0 +#define ERR_TLV_MAGIC_FAILURE -1 +#define ERR_TLV_CRC_FAILURE -2 +#define ERR_TLV_BAD_BUF_LEN -3 +#define ERR_TLV_NOT_FOUND -4 +#define ERR_TLV_BAD_LENGTH -5 +#define ERR_TLV_INSUFFICIENT_MEMORY -6 +#define ERR_TLV_INVALID_TYPE -7 +#define ERR_TLV_INVALID_VALUE -7 + +/* Following apis should not be used directly for accessing keystore. + * Use keystore APIs instead. Refer to keystore.h for details. + */ +typedef uint32_t (*crc_func_t)(const void *data, int data_size, uint32_t crc); + +int tlv_store_init(uint8_t *tlv_buf, uint32_t max_size, uint8_t store_type); +int tlv_store_add(uint8_t *tlv_buf, uint8_t type, uint16_t len, const uint8_t *value); +int tlv_store_close(uint8_t *tlv_buf, crc_func_t crc_func); +int tlv_store_length(uint8_t *tlv_buf); +int tlv_store_validate(uint8_t *tlv_buf, uint8_t store_type, crc_func_t crc_func); +int tlv_store_get(uint8_t *tlv_buf, uint8_t type, uint16_t len, uint8_t *value); +int tlv_store_get_ref(uint8_t *tlv_buf, uint8_t type, uint16_t *plen, const uint8_t **pvalue); +int tlv_store_iterate(uint8_t *tlv_buf, uint8_t *ptype, uint16_t len, uint8_t *value); +int tlv_store_iterate_ref(uint8_t *tlv_buf, uint8_t *ptype, uint16_t *plen, const uint8_t **pvalue); +int tlv_store_xip_padding(uint8_t *tlv_buf, uint8_t *pad_value); + +#endif /* __TLV_H__ */ diff --git a/components/codec/cs42888/driver_cs42888.cmake b/components/codec/cs42888/driver_cs42888.cmake index d84246308..ecb64dadd 100644 --- a/components/codec/cs42888/driver_cs42888.cmake +++ b/components/codec/cs42888/driver_cs42888.cmake @@ -11,9 +11,6 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(component_codec_i2c_MIMXRT1052) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(component_codec_i2c_MIMX8QM6_cm4_core0) endif() @@ -23,6 +20,9 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") include(component_codec_i2c_MIMX8QX6) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(component_codec_i2c_MIMXRT1052) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") include(component_codec_i2c_MIMXRT685S_cm33) endif() diff --git a/components/codec/wm8904/driver_wm8904.cmake b/components/codec/wm8904/driver_wm8904.cmake index 8c2355867..4119da957 100644 --- a/components/codec/wm8904/driver_wm8904.cmake +++ b/components/codec/wm8904/driver_wm8904.cmake @@ -11,30 +11,30 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component +if(${MCUX_DEVICE} STREQUAL "LPC51U68") + include(component_codec_i2c_LPC51U68) +endif() if(${MCUX_DEVICE} STREQUAL "LPC54114_cm4") include(component_codec_i2c_LPC54114_cm4) endif() if(${MCUX_DEVICE} STREQUAL "LPC54628") include(component_codec_i2c_LPC54628) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S16") - include(component_codec_i2c_LPC55S16) -endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018") include(component_codec_i2c_LPC54S018) endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018M") include(component_codec_i2c_LPC54S018M) endif() -if(${MCUX_DEVICE} STREQUAL "LPC51U68") - include(component_codec_i2c_LPC51U68) -endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") - include(component_codec_i2c_LPC55S69_cm33_core0) +if(${MCUX_DEVICE} STREQUAL "LPC55S16") + include(component_codec_i2c_LPC55S16) endif() if(${MCUX_DEVICE} STREQUAL "LPC55S28") include(component_codec_i2c_LPC55S28) endif() +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") + include(component_codec_i2c_LPC55S69_cm33_core0) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") include(component_codec_i2c_MIMXRT685S_cm33) endif() diff --git a/components/codec/wm8960/driver_wm8960.cmake b/components/codec/wm8960/driver_wm8960.cmake index 6d30a7b2d..133974bb5 100644 --- a/components/codec/wm8960/driver_wm8960.cmake +++ b/components/codec/wm8960/driver_wm8960.cmake @@ -11,11 +11,8 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(component_codec_i2c_MIMXRT1052) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(component_codec_i2c_MIMXRT1064) +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") + include(component_codec_i2c_MCIMX7U5) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(component_codec_i2c_MIMX8QM6_cm4_core0) @@ -26,22 +23,25 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") include(component_codec_i2c_MIMX8QX6) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") - include(component_codec_i2c_MIMXRT1021) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") + include(component_codec_i2c_MIMXRT1011) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") - include(component_codec_i2c_MIMXRT1062) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") + include(component_codec_i2c_MIMXRT1015) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") - include(component_codec_i2c_MCIMX7U5) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") + include(component_codec_i2c_MIMXRT1021) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") include(component_codec_i2c_MIMXRT1024) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") - include(component_codec_i2c_MIMXRT1011) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(component_codec_i2c_MIMXRT1052) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") - include(component_codec_i2c_MIMXRT1015) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") + include(component_codec_i2c_MIMXRT1062) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(component_codec_i2c_MIMXRT1064) endif() diff --git a/components/flash/mflash/component_mflash_common.cmake b/components/flash/mflash/component_mflash_common.cmake new file mode 100644 index 000000000..fda58170b --- /dev/null +++ b/components/flash/mflash/component_mflash_common.cmake @@ -0,0 +1,12 @@ +#Description: statically allocated file system for mflash; user_visible: False +include_guard(GLOBAL) +message("component_mflash_common component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + diff --git a/components/flash/mflash/component_mflash_file.cmake b/components/flash/mflash/component_mflash_file.cmake new file mode 100644 index 000000000..e760dd27d --- /dev/null +++ b/components/flash/mflash/component_mflash_file.cmake @@ -0,0 +1,14 @@ +#Description: statically allocated file system for mflash; user_visible: False +include_guard(GLOBAL) +message("component_mflash_file component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/mflash_file.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(component_mflash_mw320) diff --git a/components/flash/mflash/mflash_common.h b/components/flash/mflash/mflash_common.h index 644b39b86..d39cbf2c4 100644 --- a/components/flash/mflash/mflash_common.h +++ b/components/flash/mflash/mflash_common.h @@ -16,8 +16,6 @@ * Common definitions ******************************************************************************/ -#define MFLASH_INVALID_ADDRESS (UINT32_MAX) - #define mflash_drv_is_page_aligned(x) (((x) % (MFLASH_PAGE_SIZE)) == 0) #define mflash_drv_is_sector_aligned(x) (((x) % (MFLASH_SECTOR_SIZE)) == 0) diff --git a/components/flash/mflash/mflash_file.c b/components/flash/mflash/mflash_file.c index 47e10258d..41a74defa 100644 --- a/components/flash/mflash/mflash_file.c +++ b/components/flash/mflash/mflash_file.c @@ -8,622 +8,171 @@ #include #include #include - -#ifdef FSL_RTOS_FREE_RTOS -#include "FreeRTOS.h" -#endif - #include "mflash_file.h" #include "mflash_drv.h" #include "fsl_common.h" -/* Magic numbers to check for presence of the structures below */ -#define MFLASH_DIR_MAGIC_NO (0xF17E07AB) -#define MFLASH_META_MAGIC_NO (0xABECEDA8) -#define MFLASH_FS_VERSION (0x00010000) -#define MFLASH_BLANK_PATTERN (0xFF) - -#if defined(__CC_ARM) || defined(__ARMCC_VERSION) -/* linker symbols imported as described in https://www.keil.com/support/man/docs/armlink/armlink_pge1362065952432.htm */ -extern char Image$$mflash_fs$$Base[]; -#define MFLASH_FS_START ((void *)Image$$mflash_fs$$Base) -#else -extern char __MFLASH_FS_START[]; -#define MFLASH_FS_START ((void *)__MFLASH_FS_START) -#endif - -/* - * The table header and table record structures have to be aligned - * with pages/sectors that are expected to be of 2**n size, hence there is some padding - */ -typedef struct -{ - uint32_t file_offset; - uint32_t alloc_size; - uint8_t path[MFLASH_MAX_PATH_LEN]; -} mflash_dir_record_t; - -typedef struct -{ - uint32_t magic_no; - uint32_t version; - uint32_t page_size; - uint32_t sector_size; - uint32_t file_count; - uint32_t total_size; - uint8_t padding[sizeof(mflash_dir_record_t) - 6 * sizeof(uint32_t)]; -} mflash_fs_header_t; +static mflash_file_t *g_file_table = NULL; +static bool g_mflash_initialized = false; -typedef struct -{ - mflash_fs_header_t header; - mflash_dir_record_t records[]; -} mflash_fs_t; +/* Help to identify mfile without knowing an address */ +#define MFLASH_META_MAGIC_NO (0xABECEDA8) -/* Metadata prepended to the file itself to identify valid (already written) file and keep actual length of the file */ typedef struct { uint32_t file_size; uint32_t magic_no; -} mflash_file_meta_t; +} mfile_meta_t; -/* Pointer to the filesystem */ -static mflash_fs_t *g_mflash_fs = NULL; - -/* API - True if mflash is already initialized */ -bool mflash_is_initialized(void) +bool mflash_is_initialized() { - return (g_mflash_fs != NULL); + return g_mflash_initialized; } -/* Store path string to directory record structure */ -static bool dir_path_store(mflash_dir_record_t *dr, char *path) +int mflash_init(mflash_file_t *user_file_table, bool init_drv) { - assert(dr); - assert(path); - - for (int i = 0; i < MFLASH_MAX_PATH_LEN; i++) - { - dr->path[i] = *path; - - /* End of string, exit the loop */ - if (*path == '\0') - break; - - path++; - } - - /* Check whether the whole given path string was processed */ - if (*path != '\0') + /* Check params */ + if (NULL == user_file_table) return false; - return true; -} - -/* Match path string against directory record */ -static bool dir_path_match(mflash_dir_record_t *dr, char *path) -{ - assert(dr); - assert(path); - - for (int i = 0; i < MFLASH_MAX_PATH_LEN; i++) + /* Check attributes of each file in table */ + for (mflash_file_t *tmp_file = user_file_table; (0 != tmp_file->flash_addr) && (0 != tmp_file->max_size); + tmp_file += 1) { - if (dr->path[i] != *path) + /* NOTE: This loop does not check overlapping sectors !!! */ + /* Assume that zero address and zero size belong to unitialized struct. */ + if ((0 == tmp_file->flash_addr) || (0 == tmp_file->max_size)) + return false; + /* Starting file address ('flash_addr') must be sector aligned */ + if (!mflash_drv_is_sector_aligned(tmp_file->flash_addr)) + return false; + /* File max_size must be multiple of sector size */ + if (!mflash_drv_is_sector_aligned(tmp_file->max_size)) return false; - - /* End of string, there is match */ - if (*path == '\0') - return true; - - path++; } - - /* Check whether the whole given path string was processed */ - if (*path != '\0') - return false; - - return true; -} - -/* Buffer allocation wrapper */ -static void *mflash_page_buf_get(void) -{ - void *page_buf; -#ifdef FSL_RTOS_FREE_RTOS - page_buf = pvPortMalloc(MFLASH_PAGE_SIZE); -#else - page_buf = malloc(MFLASH_PAGE_SIZE); -#endif - return page_buf; -} - -/* Buffer allocation wrapper */ -static void mflash_page_buf_release(void *page_buf) -{ -#ifdef FSL_RTOS_FREE_RTOS - vPortFree(page_buf); -#else - free(page_buf); -#endif -} - -/* Low level abstraction - erase sector of the filesystem */ -static status_t mflash_fs_sector_erase(mflash_fs_t *fs, uint32_t sector_offset) -{ - uint32_t phys_addr; - - /* Translate filesystem offset to physical address in FLASH */ - phys_addr = mflash_drv_log2phys((uint8_t *)fs + sector_offset, MFLASH_SECTOR_SIZE); - if (phys_addr == MFLASH_INVALID_ADDRESS) - return kStatus_Fail; - - return mflash_drv_sector_erase(phys_addr); -} - -/* Low level abstraction - program page of the filesystem */ -static status_t mflash_fs_page_program(mflash_fs_t *fs, uint32_t page_offset, uint32_t *data) -{ - uint32_t phys_addr; - - /* Translate filesystem offset to physical address in FLASH */ - phys_addr = mflash_drv_log2phys((uint8_t *)fs + page_offset, MFLASH_PAGE_SIZE); - if (phys_addr == MFLASH_INVALID_ADDRESS) - return kStatus_Fail; - - return mflash_drv_page_program(phys_addr, data); -} - -/* Low level abstraction - get pointer to filesystem location specified by offset */ -static inline void *mflash_fs_get_ptr(mflash_fs_t *fs, uint32_t offset) -{ - return (void *)((uint8_t *)fs + offset); -} - -/* - * Check whether give area of FLASH is readable by direct pointer access. - * This is necessary on plaforms featuring page checksums as access to page containing invalid data may result in a - * hardfault. - */ -static status_t mflash_readable_check(void *ptr, uint32_t size) -{ -#if MFLASH_PAGE_INTEGRITY_CHECKS - status_t status; - - uintptr_t start_addr = (uintptr_t)ptr - (uintptr_t)ptr % MFLASH_PAGE_SIZE; - uintptr_t end_addr = (uintptr_t)ptr + size; - - for (uintptr_t check_addr = start_addr; check_addr < end_addr; check_addr += MFLASH_PAGE_SIZE) + /* Store reference to user*/ + g_file_table = user_file_table; + /* Init flash driver */ + if (init_drv) { - status = mflash_drv_is_readable(check_addr); - if (status != kStatus_Success) - return status; + mflash_drv_init(); } - return kStatus_Success; -#else - return kStatus_Success; -#endif -} - -/* Check for filesystem presence and validity */ -static status_t mflash_fs_check(mflash_fs_t *fs) -{ - status_t status; - - /* Check params */ - if (fs == NULL) - return kStatus_InvalidArgument; - - /* Check readability before accessing filesystem structure by pointer */ - status = mflash_readable_check(fs, sizeof(mflash_fs_header_t)); - if (status != kStatus_Success) - return status; - - /* Check magic */ - if (fs->header.magic_no != MFLASH_DIR_MAGIC_NO) - return kStatus_Fail; - - /* Check major version */ - if ((fs->header.version & 0xFFFF0000) != (MFLASH_FS_VERSION & 0xFFFF0000)) - return kStatus_Fail; - - /* Check FLASH memory characteristics */ - if (fs->header.page_size != MFLASH_PAGE_SIZE || fs->header.sector_size != MFLASH_SECTOR_SIZE) - return kStatus_Fail; - - /* Check readability of the whole directory */ - status = - mflash_readable_check(fs, sizeof(mflash_fs_header_t) + fs->header.file_count * sizeof(mflash_dir_record_t)); - - return status; + g_mflash_initialized = true; + return true; } -/* Check for presence of a file data */ -static status_t mflash_file_check(mflash_fs_t *fs, mflash_dir_record_t *dr) +/* Find a file in file_table */ +int32_t mflash_find_file(char *path, mflash_file_t *file) { - status_t status; - mflash_file_meta_t *meta; - - /* Check params */ - if (fs == NULL) - return kStatus_InvalidArgument; - - if (dr == NULL) - return kStatus_InvalidArgument; - - /* Get pointer to file meta structure */ - meta = mflash_fs_get_ptr(fs, dr->file_offset); - - /* Check readability before accessing file meta structure */ - status = mflash_readable_check(meta, sizeof(mflash_file_meta_t)); - if (status != kStatus_Success) - return status; - - /* Check magic signature */ - if (meta->magic_no != MFLASH_META_MAGIC_NO) - return kStatus_Fail; - - /* Check wheter actual file size in meta fits the pre-allocated area */ - if (meta->file_size + sizeof(mflash_file_meta_t) > dr->alloc_size) - return kStatus_Fail; + int32_t status = -1; - /* Check readability of the whole file */ - status = mflash_readable_check(meta, sizeof(mflash_file_meta_t) + meta->file_size); + /* Check file_table */ + if (NULL == g_file_table) + return -1; - return kStatus_Success; -} - -/* Searches for directory record with given path and retrieves a copy of it */ -static status_t mflash_dir_lookup(mflash_fs_t *fs, char *path, mflash_dir_record_t *dr_ptr) -{ - int file_count = fs->header.file_count; - mflash_dir_record_t *dr = fs->records; - - for (int i = 0; i < file_count; i++) + for (mflash_file_t *tmp_file = g_file_table; (0 != tmp_file->flash_addr) && (0 != tmp_file->max_size); + tmp_file += 1) { - if (dir_path_match(dr, path)) + /* Found a file by path */ + if (0 == strncmp(path, tmp_file->path, 64)) { - if (dr_ptr) - *dr_ptr = *dr; - return kStatus_Success; + status = 0; + *file = *tmp_file; + break; } - dr++; } - - return kStatus_Fail; + return status; } -/* Create filesystem structure in FLASH according to given directory template */ -static status_t mflash_format_internal(mflash_fs_t *fs, - void *page_buf, - uint32_t fs_size_limit, - const mflash_file_t *dir_template) +/* NOTE: Don't try to store constant data that are located in XIP !! */ +/* API, write to file of path 'pcFileName' */ +int mflash_save_file(char *pcFileName, uint8_t *pucData, uint32_t ulDataSize) { - status_t status; - - int file_count; - int total_sectors; + mflash_file_t tmp_file = {0}; + mfile_meta_t tmp_meta = {0}; - int dir_size; - int dir_sectors; + /* No file was found in file table */ + if (0 != mflash_find_file(pcFileName, &tmp_file)) + return false; + /* Trying to write data over file boundary */ + if (ulDataSize > tmp_file.max_size + sizeof(tmp_meta)) + return false; - uint32_t file_offset; - uint32_t dir_offset; + /* Erase sector for the new file - files are aligned with sectors */ + if (0 != mflash_drv_sector_erase(tmp_file.flash_addr)) + return false; - mflash_fs_header_t *fsh; + /* Set meta data */ + tmp_meta.magic_no = MFLASH_META_MAGIC_NO; + tmp_meta.file_size = ulDataSize; - /* The directory records shall be aligned to page size */ - assert((MFLASH_PAGE_SIZE % sizeof(mflash_dir_record_t)) == 0); + uint32_t page_buff[MFLASH_PAGE_SIZE / sizeof(uint32_t)]; + /* Prepare first page - start with meta data */ + memcpy(page_buff, &tmp_meta, sizeof(tmp_meta)); - /* Count the files and calculate number of FLASH sectors to be occupied by the filesystem */ - file_count = 0; - total_sectors = 0; - for (const mflash_file_t *dt = dir_template; dt->path && dt->path[0] && dt->max_size; dt++) + uint32_t data_len = MFLASH_PAGE_SIZE - sizeof(tmp_meta); + if (data_len > ulDataSize) { - /* Calculate number of sectors to be occupied by the file */ - int file_sectors = (dt->max_size + MFLASH_SECTOR_SIZE - 1) / MFLASH_SECTOR_SIZE; - total_sectors += file_sectors; - file_count++; + data_len = ulDataSize; } - dir_size = file_count * sizeof(mflash_dir_record_t) + sizeof(mflash_fs_header_t); - dir_sectors = (dir_size + MFLASH_SECTOR_SIZE - 1) / MFLASH_SECTOR_SIZE; - total_sectors += dir_sectors; - - /* Check whether the filestytem fits into the given FLASH area */ - if (fs_size_limit && (fs_size_limit < total_sectors * MFLASH_SECTOR_SIZE)) - return kStatus_OutOfRange; + /* Fill the page buffer with data */ + memcpy((void *)((uint32_t)page_buff + sizeof(tmp_meta)), pucData, data_len); - /* Erase the whole FLASH area to be occupied by the filesystem */ - for (int i = 0; i < total_sectors; i++) - { - status = mflash_fs_sector_erase(fs, i * MFLASH_SECTOR_SIZE); - if (status != kStatus_Success) - return status; - } - - /* Clear the page buffer and set inital values for offsets */ - memset(page_buf, MFLASH_BLANK_PATTERN, MFLASH_PAGE_SIZE); - dir_offset = file_count * sizeof(mflash_dir_record_t) + sizeof(mflash_fs_header_t); - file_offset = total_sectors * MFLASH_SECTOR_SIZE; + /* Write the page */ + if (0 != mflash_drv_page_program(tmp_file.flash_addr, page_buff)) + return false; - /* Create directory entries in reverse order so that programming of the page containing the dir header is the last - * step */ - for (int fi = file_count; fi--;) + uint32_t written = data_len; + uint32_t page_idx = 1; + while (written < ulDataSize) { - /* Check for enough space for the directory record */ - assert(dir_offset >= sizeof(mflash_dir_record_t)); - - dir_offset -= sizeof(mflash_dir_record_t); - - mflash_dir_record_t *dr = (mflash_dir_record_t *)((uint8_t *)page_buf + (dir_offset % MFLASH_PAGE_SIZE)); - const mflash_file_t *dt = &dir_template[fi]; - - /* Calculate number of sectors to be occupied by the file */ - int file_sectors = (dt->max_size + MFLASH_SECTOR_SIZE - 1) / MFLASH_SECTOR_SIZE; - - /* Fill in directory record */ - dr->alloc_size = file_sectors * MFLASH_SECTOR_SIZE; - dr->file_offset = (file_offset -= dr->alloc_size); - dir_path_store(dr, dt->path); - - if (dir_offset % MFLASH_PAGE_SIZE == 0) + data_len = ulDataSize - written; + if (data_len > MFLASH_PAGE_SIZE) { - /* We reached the beginning of a page, program it and start over */ - status = mflash_fs_page_program(fs, dir_offset, page_buf); - if (status != kStatus_Success) - return status; - - /* Clear the page buffer */ - memset(page_buf, MFLASH_BLANK_PATTERN, MFLASH_PAGE_SIZE); + data_len = MFLASH_PAGE_SIZE; } - } - - /* There should be space left exactly for the filesystem header */ - assert(dir_offset == sizeof(mflash_fs_header_t)); - - /* Create filesystem header at the very beginning of the first page */ - fsh = (mflash_fs_header_t *)page_buf; - fsh->magic_no = MFLASH_DIR_MAGIC_NO; - fsh->version = MFLASH_FS_VERSION; - fsh->page_size = MFLASH_PAGE_SIZE; - fsh->sector_size = MFLASH_SECTOR_SIZE; - fsh->total_size = total_sectors * MFLASH_SECTOR_SIZE; - fsh->file_count = file_count; - /* Programming of the first page puts header into place marking the filesystem as valid */ - status = mflash_fs_page_program(fs, 0, page_buf); - - return status; -} - -/* API - Create filesystem structure in FLASH according to given directory template */ -status_t mflash_format(mflash_fs_t *fs, uint32_t fs_size_limit, const mflash_file_t *dir_template) -{ - status_t status; - void *page_buf; - - /* Check parameters */ - if (dir_template == NULL) - return kStatus_InvalidArgument; - - /* Get page buffer for FLASH writes */ - page_buf = mflash_page_buf_get(); - if (page_buf == NULL) - return kStatus_Fail; - - /* Actual formatting of the filesystem */ - status = mflash_format_internal(fs, page_buf, fs_size_limit, dir_template); - - /* Release page buffer */ - mflash_page_buf_release(page_buf); - - return status; -} - -/* Match dir against given template. Checks whether all files defined in the template are pre-allocsated in the fs - * directory */ -status_t mflash_template_match(mflash_fs_t *fs, const mflash_file_t *dir_template) -{ - status_t status; - - for (const mflash_file_t *dt = dir_template; dt->path && dt->path[0] && dt->max_size; dt++) - { - mflash_dir_record_t dr; - - /* Lookup directory record */ - status = mflash_dir_lookup(fs, dt->path, &dr); - if (status != kStatus_Success) - return status; - - /* Check whether pre-allocated size is sufficient */ - if (dr.alloc_size < dt->max_size) - return kStatus_Fail; - } - - return kStatus_Success; -} - -/* Initialize mflash driver and filesystem */ -static status_t mflash_fs_init(mflash_fs_t *fs, uint32_t fs_size_limit, const mflash_file_t *dir_template) -{ - status_t status; - - /* Check whether there is a filesystem header and directory already in place */ - status = mflash_fs_check(fs); - - /* Filesystem is valid, check whether its directory provides records for all required files */ - if (status == kStatus_Success) - status = mflash_template_match(fs, dir_template); - - /* The filesystem not present or does not fit the template, create a new one */ - if (status == kStatus_Fail) /* Error codes other then 'Fail' are not captured here but rather intentinally passed to - the caller */ - status = mflash_format(fs, fs_size_limit, dir_template); /* Format the filestem */ - - if (status == kStatus_Success) - g_mflash_fs = fs; /* If all went ok, keep pointer to the filesytem */ - - return status; -} - -/* API - Initialize mflash driver and filesystem at default address specified by linker symbol */ -status_t mflash_init(const mflash_file_t *dir_template, bool init_drv) -{ - status_t status; - mflash_fs_t *fs; - - /* Initialize the driver */ - if (init_drv) - { - status = mflash_drv_init(); - if (status == kStatus_Fail) - return status; - } + /* Fill page buffer with next data */ + memcpy(page_buff, pucData + written, data_len); -#ifdef MFLASH_FILE_BASEADDR - /* Convert physical address in FLASH to memory pointer */ - fs = (mflash_fs_t *)mflash_drv_phys2log(MFLASH_FILE_BASEADDR, 0); -#else - /* Otherwise take address from linker file */ - fs = (mflash_fs_t *)MFLASH_FS_START; -#endif - - if (fs == NULL) - return kStatus_Fail; - - return mflash_fs_init(fs, 0, dir_template); -} - -/* Save file */ -static status_t mflash_file_save_internal( - mflash_fs_t *fs, void *page_buf, mflash_dir_record_t *dr, uint8_t *data, uint32_t size) -{ - status_t status; - - /* Check whether the data + meta fits into the pre-allocated file area */ - if (size + sizeof(mflash_file_meta_t) > dr->alloc_size) - return kStatus_OutOfRange; - - /* Erase the whole file area sector by sector */ - for (int sector_offset = 0; sector_offset < dr->alloc_size; sector_offset += MFLASH_SECTOR_SIZE) - { - /* Erase the sector */ - status = mflash_fs_sector_erase(fs, dr->file_offset + sector_offset); - if (status != kStatus_Success) - return status; - } - - /* Program the file data page by page, skipping the first page containing meta that is going to be programmed in the - * last step */ - for (int data_offset = MFLASH_PAGE_SIZE - sizeof(mflash_file_meta_t); data_offset < size; - data_offset += MFLASH_PAGE_SIZE) - { - /* Pointer and size of the data portion to be programmed */ - void *copy_ptr = data + data_offset; - int copy_size = size - data_offset; - if (copy_size > MFLASH_PAGE_SIZE) - copy_size = MFLASH_PAGE_SIZE; - - memset(page_buf, MFLASH_BLANK_PATTERN, MFLASH_PAGE_SIZE); - memcpy(page_buf, copy_ptr, copy_size); + /* Write the page */ + if (0 != mflash_drv_page_program(tmp_file.flash_addr + page_idx * MFLASH_PAGE_SIZE, page_buff)) + return false; - /* Data offset is off by sizeof(mflash_file_meta_t) as this structure occupies the very beginning of the first - * page */ - status = mflash_fs_page_program(fs, dr->file_offset + data_offset + sizeof(mflash_file_meta_t), page_buf); - if (status != kStatus_Success) - return status; + written += data_len; + page_idx++; } - /* Prepare the missing portion of data to be programme to the first page */ - int copy_size = size; - if (copy_size > MFLASH_PAGE_SIZE - sizeof(mflash_file_meta_t)) - copy_size = MFLASH_PAGE_SIZE - sizeof(mflash_file_meta_t); - - memset(page_buf, MFLASH_BLANK_PATTERN, MFLASH_PAGE_SIZE); - memcpy((uint8_t *)page_buf + sizeof(mflash_file_meta_t), data, copy_size); - - /* Set file metadata */ - mflash_file_meta_t *meta = (mflash_file_meta_t *)page_buf; - meta->file_size = size; - meta->magic_no = MFLASH_META_MAGIC_NO; - - /* Program the first page putting the metadata in place which marks the file as valid */ - status = mflash_fs_page_program(fs, dr->file_offset, page_buf); - - return status; -} - -/* API, save data to file with given path */ -status_t mflash_file_save(char *path, uint8_t *data, uint32_t size) -{ - status_t status; - mflash_dir_record_t dr; - mflash_fs_t *fs = g_mflash_fs; - void *page_buf; - - if (path == NULL) - return kStatus_InvalidArgument; - - if (data == NULL && size != 0) - return kStatus_InvalidArgument; - - /* Lookup directory record */ - status = mflash_dir_lookup(fs, path, &dr); - if (status != kStatus_Success) - return status; - - /* Get page buffer for FLASH writes */ - page_buf = mflash_page_buf_get(); - if (page_buf == NULL) - return kStatus_Fail; - - /* Save the file */ - status = mflash_file_save_internal(fs, page_buf, &dr, data, size); - - /* Release page buffer */ - mflash_page_buf_release(page_buf); - - return status; -} - -/* Get direct pointer to file data */ -static status_t mflash_file_mmap_internal(mflash_fs_t *fs, mflash_dir_record_t *dr, uint8_t **pdata, uint32_t *psize) -{ - status_t status; - mflash_file_meta_t *meta; - - status = mflash_file_check(fs, dr); - if (status != kStatus_Success) - return status; - - meta = mflash_fs_get_ptr(fs, dr->file_offset); - - *pdata = (uint8_t *)meta + sizeof(*meta); - *psize = meta->file_size; - - return kStatus_Success; + return true; } -/* API, get direct pointer to data of file with given path */ -status_t mflash_file_mmap(char *path, uint8_t **pdata, uint32_t *psize) +/* API, read file of path 'pcFileName' */ +int mflash_read_file(char *pcFileName, uint8_t **ppucData, uint32_t *pulDataSize) { - status_t status; - mflash_dir_record_t dr; - mflash_fs_t *fs = g_mflash_fs; - - if (path == NULL) - return kStatus_InvalidArgument; - - if (pdata == NULL || psize == NULL) - return kStatus_InvalidArgument; - - /* Lookup directory record */ - status = mflash_dir_lookup(fs, path, &dr); - if (status != kStatus_Success) - return status; - - status = mflash_file_mmap_internal(fs, &dr, pdata, psize); + mflash_file_t tmp_file = {0}; + mfile_meta_t *tmp_meta = NULL; + /* No file was found in file table */ + if (0 != mflash_find_file(pcFileName, &tmp_file)) + return false; + /* Check whether address is set */ + if (0 == tmp_file.flash_addr) + return false; + /* Obtain pointer to meta data */ + tmp_meta = (mfile_meta_t *)mflash_drv_phys2log(tmp_file.flash_addr, sizeof(mfile_meta_t)); + /* To avoid hard-fault better check NULL ptr */ + if (NULL == tmp_meta) + return false; + /* Magic number does not match, this location is not a valid file */ + if (MFLASH_META_MAGIC_NO != tmp_meta->magic_no) + return false; + /* Set file size */ + *pulDataSize = tmp_meta->file_size; + /* Obtain pointer to real_data */ + *ppucData = (uint8_t *)mflash_drv_phys2log(tmp_file.flash_addr + sizeof(mfile_meta_t), tmp_meta->file_size); + if (NULL == *ppucData) + return false; - return status; + return true; } diff --git a/components/flash/mflash/mflash_file.h b/components/flash/mflash/mflash_file.h index 794ad2573..57d2056b3 100644 --- a/components/flash/mflash/mflash_file.h +++ b/components/flash/mflash/mflash_file.h @@ -7,32 +7,22 @@ #ifndef __MFLASH_FILE__ #define __MFLASH_FILE__ -#include "fsl_common.h" - #include "mflash_drv.h" +#include "mflash_params.h" -#define MFLASH_MAX_PATH_LEN 56 - -/* - * Template for file record defines file path and size to be pre-allocated for that file. - * The actual size of the file shall not exceed the size defined in the template. - */ typedef struct { - char *path; + uint32_t flash_addr; uint32_t max_size; + char path[64]; } mflash_file_t; -/*! @brief Initialization status of mflash subsystem */ bool mflash_is_initialized(void); -/*! @brief Initializes mflash filesystem and driver. Creates new filesystem unless already in place. */ -status_t mflash_init(const mflash_file_t *dir_template, bool init_drv); +int mflash_init(mflash_file_t *user_file_table, bool init_drv); -/*! @brief Saves data to file with given path. */ -status_t mflash_file_save(char *path, uint8_t *data, uint32_t size); +int mflash_read_file(char *pcFileName, uint8_t **ppucData, uint32_t *pulDataSize); -/*! @brief Returns pointer for direct memory mapped access to file data. */ -status_t mflash_file_mmap(char *path, uint8_t **pdata, uint32_t *psize); +int mflash_save_file(char *pcFileName, uint8_t *pucData, uint32_t ulDataSize); #endif diff --git a/components/flash/mflash/mw320/component_mflash_mw320.cmake b/components/flash/mflash/mw320/component_mflash_mw320.cmake new file mode 100644 index 000000000..3033bfe6d --- /dev/null +++ b/components/flash/mflash/mw320/component_mflash_mw320.cmake @@ -0,0 +1,15 @@ +#Description: mflash mw320; user_visible: True +include_guard(GLOBAL) +message("component_mflash_mw320 component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/mflash_drv.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(component_mflash_common) +include(driver_mw_qspi) diff --git a/components/flash/mflash/mw320/mflash_drv.c b/components/flash/mflash/mw320/mflash_drv.c new file mode 100644 index 000000000..ece7732fd --- /dev/null +++ b/components/flash/mflash/mw320/mflash_drv.c @@ -0,0 +1,1351 @@ +/* + * Copyright 2017-2020 NXP + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include + +#include "mflash_drv.h" +#include "board.h" +#include "fsl_qspi.h" +#include "fsl_flashc.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#define FLASH_INS_CODE_WE 0x06 /*!< Write enable */ +#define FLASH_INS_CODE_WE_VSR 0x50 /*!< Write enable for volatile status register */ +#define FLASH_INS_CODE_WD 0x04 /*!< Write disable */ +#define FLASH_INS_CODE_RSR1 0x05 /*!< Read status register 1 */ +#define FLASH_INS_CODE_RSR2 0x35 /*!< Read status register 2 */ +#define FLASH_INS_CODE_WSR1 0x01 /*!< Write status register 1 */ +#define FLASH_INS_CODE_WSR2 0x31 /*!< Write status register 2 */ +#define FLASH_INS_CODE_PP 0x02 /*!< Page program */ +#define FLASH_INS_CODE_QPP 0x32 /*!< Quad page program */ +#define FLASH_INS_CODE_QPP_MX 0x38 /*!< Quad page program for Macronix chip*/ +#define FLASH_INS_CODE_SE 0x20 /*!< Sector(4k) erase */ +#define FLASH_INS_CODE_BE_32K 0x52 /*!< Block(32k) erase */ +#define FLASH_INS_CODE_BE_64K 0xD8 /*!< Block(64k) erase */ +#define FLASH_INS_CODE_CE 0xC7 /*!< Chip erase */ +#define FLASH_INS_CODE_PD 0xB9 /*!< Power down */ + +#define FLASH_INS_CODE_RD 0x03 /*!< Read data */ +#define FLASH_INS_CODE_FR 0x0B /*!< Fast read */ +#define FLASH_INS_CODE_FRDO 0x3B /*!< Fast read dual output */ +#define FLASH_INS_CODE_FRQO 0x6B /*!< Fast read quad output */ +#define FLASH_INS_CODE_FRDIO 0xBB /*!< Fast read dual IO */ +#define FLASH_INS_CODE_FRQIO 0xEB /*!< Fast read quad IO */ +#define FLASH_INS_CODE_WFRQIO 0xE7 /*!< Word Fast read quad IO, A0 must be zero */ +#define FLASH_INS_CODE_OWFRQIO 0xE3 /*!< Octal word Fast read quad IO, A[3:0] must be zero */ +#define FLASH_INS_CODE_FDRST 0xFFFF /*!< Fast dual read mode reset */ +#define FLASH_INS_CODE_FQRST 0xFF /*!< Fast quad read mode reset */ + +#define FLASH_INS_CODE_RPD_DI 0xAB /*!< Release power down or device ID */ +#define FLASH_INS_CODE_RUID 0x4B /*!< Read unique ID number */ +#define FLASH_INS_CODE_JEDEC_ID 0x9F /*!< Read JEDEC ID number */ + +/*! @brief Flash read type */ +typedef enum +{ + kFLASH_NormalRead, /*!< Normal read mode */ + kFLASH_FastRead, /*!< Fast read mode */ + kFLASH_FastReadDualOUT, /*!< Fast read dual output mode */ + kFLASH_FastReadDaulIO, /*!< Fast read dual IO mode */ + kFLASH_FastReadQuadOUT, /*!< Fast read quad output mode */ + kFLASH_FastReadQuadIO, /*!< Fast read quad IO mode */ + kFLASH_WordFastReadQuadIO, /*!< Word fast read quad IO mode */ + kFLASH_OctalWordFastReadQuadIO, /*!< Octal word fast read quad IO mode */ +} flash_read_mode_type_t; + +/*! @brief Flash program type */ +typedef enum +{ + kFLASH_ProgramNormal, /*!< Normal page program mode */ + kFLASH_ProgramQuad, /*!< Quad page program mode */ +} flash_program_mode_type_t; + +#define KILO_BYTE 0x400 /*!< 1KB */ +#define MEGA_BYTE 0x100000 /*!< 1MB */ + +#define FLASH_32K_BLOCK_SIZE 0x8000 /*!< 32KB */ +#define FLASH_64K_BLOCK_SIZE 0x10000 /*!< 64KB */ + +/*! Get the page number according to the address with the page space */ +#define FLASH_PAGE_NUM(addr) ((addr) >> 8) + +#define FLASH_NAME_SIZE 16 + +/*! @brief Flash device configuration structure */ +struct FlashDeviceConfig +{ + char name[FLASH_NAME_SIZE]; /*!< Flash name. */ + uint32_t jedecId; /*!< JEDEC ID. */ + uint32_t chipSize; /*!< Flash memory size. */ + uint32_t sectorSize; /*!< Flash memory sector size. */ + uint32_t blockSize; /*!< Flash memory block size. */ + uint16_t pageSize; /*!< Flash memory page size. */ +}; + +const struct FlashDeviceConfig flashDevList[] = { + {"W25Q80BL", 0xef4014, 1 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"W25Q16CL", 0xef4015, 2 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"W25Q32BV", 0xef4016, 4 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"W25Q32JV", 0xef4016, 4 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"W25Q64CV", 0xef4017, 8 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"W25Q128BV", 0xef4018, 16 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"GD25Q16B", 0xc84015, 2 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"GD25Q16C", 0xc84015, 2 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"GD25Q32C", 0xc84016, 4 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"GD25LQ32C", 0xc86016, 4 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"GD25Q127C", 0xc84018, 16 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25L8035E", 0xc22014, 1 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25L3233F", 0xc22016, 4 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25L6433F", 0xc22017, 8 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25L12835F", 0xc22018, 16 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R512F", 0xc22810, 64 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R1035F", 0xc22811, 128 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R2035F", 0xc22812, 256 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R4035F", 0xc22813, 512 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R8035F", 0xc22814, 1 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R1635F", 0xc22815, 2 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R3235F", 0xc22816, 4 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25R6435F", 0xc22817, 8 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25V512F", 0xc22310, 64 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25V1035F", 0xc22311, 128 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25V2035F", 0xc22312, 256 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25V4035F", 0xc22313, 512 * KILO_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25V8035F", 0xc22314, 1 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, + {"MX25V1635F", 0xc22315, 2 * MEGA_BYTE, 4 * KILO_BYTE, 64 * KILO_BYTE, 256}, +}; + +#define FLASH_WEL_BIT_SET 0x02U +#define FLASH_WEL_BIT_CLEAR 0x00U + +#ifndef FLASH_DEFAULT_INDEX +#define FLASH_DEFAULT_INDEX (0x0C) +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +static status_t FLASH_CheckWriteEnableLatch(QSPI_Type *base); +static uint8_t FLASH_GetStatusReg(QSPI_Type *base, uint8_t index); +static bool FLASH_GetBusyStatus(QSPI_Type *base); + +/******************************************************************************* + * Variables + *****************************************************************************/ +/* Flash address offset from AHB access. */ +static uint32_t mflashOffset; +static bool mflashInitialized; + +static const struct FlashDeviceConfig *g_flashConfig = &flashDevList[FLASH_DEFAULT_INDEX]; + +/******************************************************************************* + * Code + ******************************************************************************/ +static status_t FLASH_CheckWriteEnableLatch(QSPI_Type *base) +{ + status_t status = kStatus_Success; + uint32_t statusReg1Val = 0x00U; + + /*Check WEL bit is cleared or not. */ + statusReg1Val = FLASH_GetStatusReg(base, 0x01U); + if ((statusReg1Val & FLASH_WEL_BIT_SET) == FLASH_WEL_BIT_SET) + { + status = kStatus_Fail; + } + + return status; +} + +/* Set flash write enable / disable */ +static void FLASH_WriteEnable(QSPI_Type *base, bool enable) +{ + qspi_header_count_config_t config; + + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt0Byte; + config.readModeCnt = kQSPI_ReadModeCnt0Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + /* Clear QSPI1 FIFO */ + QSPI_FlushFIFO(base); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI_SetHeaderCount(base, &config); + + /* Set data in counter */ + QSPI_SetDataInCnt(base, 0x00U); + + if (enable == true) + { + /* Set instruction for write enable. */ + QSPI_SetInstruction(base, FLASH_INS_CODE_WE); + } + else + { + /* Set instruction for write disable. */ + QSPI_SetInstruction(base, FLASH_INS_CODE_WD); + } + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); +} + +/* Write enable for volatile status register */ +static void FLASH_WriteEnableVolatileStatusReg(QSPI_Type *base) +{ + qspi_header_count_config_t config; + + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt0Byte; + config.readModeCnt = kQSPI_ReadModeCnt0Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + /* Clear QSPI1 FIFO */ + QSPI_FlushFIFO(base); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI_SetHeaderCount(base, &config); + + /* Set data in counter */ + QSPI_SetDataInCnt(base, 0x00U); + + /* Set instruction for volatile status register. */ + QSPI_SetInstruction(base, FLASH_INS_CODE_WE_VSR); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); +} + +/* Reset Flash Continuous Quad Read mode */ +static void FLASH_ResetFastReadQuad(QSPI_Type *base) +{ + qspi_header_count_config_t config; + + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt0Byte; + config.readModeCnt = kQSPI_ReadModeCnt1Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + /* Clear QSPI1 FIFO */ + QSPI_FlushFIFO(base); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinQuad); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinSingle); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI_SetHeaderCount(base, &config); + + /* Set read mode. */ + QSPI_SetReadMode(base, 0x00U); + + /* Set data in counter */ + QSPI_SetDataInCnt(base, 0x00U); + + /* Set instruction for fast read quad mode reset. */ + QSPI_SetInstruction(base, FLASH_INS_CODE_FQRST); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); +} + +/* Get the flash status register value */ +static uint8_t FLASH_GetStatusReg(QSPI_Type *base, uint8_t index) +{ + uint8_t status; + qspi_header_count_config_t config; + + /* Configure header count. */ + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt0Byte; + config.readModeCnt = kQSPI_ReadModeCnt0Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + /* Clear QSPI1 FIFO */ + QSPI_FlushFIFO(base); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI_SetHeaderCount(base, &config); + + /* Set data in counter */ + QSPI_SetDataInCnt(base, 0x01U); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + if (index == 0x01U) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_RSR1); + } + else if (index == 0x02U) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_RSR2); + } + + /* QSPI one-byte length mode */ + QSPI_UpdateTansferLength(base, kQSPI_TransferLength1Byte); + + /* Set QSPI read */ + QSPI_StartTransfer(base, kQSPI_Read); + + /* Get flash busy status */ + status = QSPI_ReadByte(base); + + /* Disable QSPI */ + QSPI_SetSSEnable(base, false); + + return status; +} + +/* Write flash status register */ +static status_t FLASH_WriteStatusReg(QSPI_Type *base, uint16_t status) +{ + volatile uint32_t localCnt = 0; + uint8_t byte; + + /* 0xC2 is for macronix. */ + if (((g_flashConfig->jedecId >> 16) & 0xFF) == 0xc2) + { + FLASH_WriteEnable(base, true); + } + else + { + /* Enable flash write */ + FLASH_WriteEnableVolatileStatusReg(base); + } + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_WSR1); + + /* QSPI one-byte length mode */ + QSPI_UpdateTansferLength(base, kQSPI_TransferLength1Byte); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Write status[7:0] */ + byte = status & 0xFF; + QSPI_WriteByte(base, byte); + + if ((g_flashConfig->jedecId != 0xc84016) && (g_flashConfig->jedecId != 0xc84018) && + (((g_flashConfig->jedecId >> 16) & 0xFF) != 0xc2)) + { + /* Write status[15:8] */ + byte = (status >> 8) & 0xFF; + QSPI_WriteByte(base, byte); + } + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); + + while (localCnt++ < 100000) + { + /* Check flash busy status */ + if (FLASH_GetBusyStatus(base) == false) + { + if ((g_flashConfig->jedecId != 0xc84016) && (g_flashConfig->jedecId != 0xc84018)) + { + return kStatus_Success; + } + else + { + break; + } + } + } + + /* Following code is specific to GigaDevice Flash GD25Q32C + only and is written as per its datasheet */ + if ((g_flashConfig->jedecId == 0xc84016) || (g_flashConfig->jedecId == 0xc84018)) + { + /* Write enable for volatile status register */ + FLASH_WriteEnableVolatileStatusReg(base); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_WSR2); + + /* QSPI one-byte length mode */ + QSPI_UpdateTansferLength(base, kQSPI_TransferLength1Byte); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Write status[15:8] */ + byte = (status >> 8) & 0xFF; + QSPI_WriteByte(base, byte); + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); + + localCnt = 0; + while (localCnt++ < 100000) + { + /* Check flash busy status */ + if (FLASH_GetBusyStatus(base) == false) + { + return kStatus_Success; + } + } + } + + return kStatus_Fail; +} + +/* Get the flash busy status */ +static bool FLASH_GetBusyStatus(QSPI_Type *base) +{ + bool status; + qspi_header_count_config_t config; + + /* Configure header count. */ + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt0Byte; + config.readModeCnt = kQSPI_ReadModeCnt0Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + /* Clear QSPI1 FIFO */ + QSPI_FlushFIFO(base); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI_SetHeaderCount(base, &config); + + /* Set data in counter */ + QSPI_SetDataInCnt(base, 0x01U); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_RSR1); + + /* QSPI one-byte length mode */ + QSPI_UpdateTansferLength(base, kQSPI_TransferLength1Byte); + + /* Set QSPI read */ + QSPI_StartTransfer(base, kQSPI_Read); + + /* Get flash busy status */ + status = (QSPI_ReadByte(base) & 0x01U) ? true : false; + + /* Disable QSPI */ + QSPI_SetSSEnable(base, false); + + return status; +} + +/* Flash sector erase */ +static status_t FLASH_SectorErase(QSPI_Type *base, uint32_t sectorNumber) +{ + status_t status = kStatus_Fail; + uint32_t sectorAddress; + uint32_t lastSector = (g_flashConfig->chipSize / g_flashConfig->sectorSize) - 0x01U; + volatile uint32_t localCnt = 0U; + + if (!(sectorNumber > lastSector)) + { + /* Enable flash write */ + FLASH_WriteEnable(base, true); + + /* Get start address for sector to be erased */ + sectorAddress = sectorNumber * g_flashConfig->sectorSize; + + /* Set address counter */ + QSPI_SetAddressCnt(base, kQSPI_AddressCnt3Byte); + + /* Set address pin. */ + QSPI_SetAddressPin(base, kQSPI_AddrPinSingle); + + /* Set data pin. */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* Set address */ + QSPI_SetAddress(base, sectorAddress); + + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_SE); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); + + while (localCnt++ < 1000000) + { + /* Check flash busy status */ + if (FLASH_GetBusyStatus(base) == false) + { + status = kStatus_Success; + break; + } + } + } + + /*Check WEL bit is cleared or not. */ + if (kStatus_Success != FLASH_CheckWriteEnableLatch(base)) + { + status = kStatus_Fail; + } + + return status; +} + +/* Flash 32KB block erase */ +static status_t FLASH_Block32KErase(QSPI_Type *base, uint32_t blockNumber) +{ + status_t status = kStatus_Fail; + uint32_t blockAddress; + volatile uint32_t localCnt = 0; + uint32_t last32KBlock = (g_flashConfig->chipSize / FLASH_32K_BLOCK_SIZE) - 1; + + if (!(blockNumber > last32KBlock)) + { + /* Enable flash write */ + FLASH_WriteEnable(base, true); + + /* Get start address of the block to be erased */ + blockAddress = blockNumber * FLASH_32K_BLOCK_SIZE; + + /* Set address counter */ + QSPI_SetAddressCnt(base, kQSPI_AddressCnt3Byte); + + /* Set address pin. */ + QSPI_SetAddressPin(base, kQSPI_AddrPinSingle); + + /* Set data pin. */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* Set address */ + QSPI_SetAddress(base, blockAddress); + + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_BE_32K); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); + + while (localCnt++ < 2000000) + { + /* Check flash busy status */ + if (FLASH_GetBusyStatus(base) == false) + { + status = kStatus_Success; + break; + } + } + } + + /*Check WEL bit is cleared or not. */ + if (kStatus_Success != FLASH_CheckWriteEnableLatch(base)) + { + status = kStatus_Fail; + } + + return status; +} + +/* Flash 64KB block erase */ +static status_t FLASH_Block64KErase(QSPI_Type *base, uint32_t blockNumber) +{ + status_t status = kStatus_Fail; + uint32_t blockAddress; + volatile uint32_t localCnt = 0; + uint32_t last64KBlock = (g_flashConfig->chipSize / FLASH_64K_BLOCK_SIZE) - 1; + + if (!(blockNumber > last64KBlock)) + { + /* Enable flash write */ + FLASH_WriteEnable(base, true); + + /* Get start address of the block to be erased */ + blockAddress = blockNumber * FLASH_64K_BLOCK_SIZE; + + /* Set address counter */ + QSPI_SetAddressCnt(base, kQSPI_AddressCnt3Byte); + + /* Set address pin. */ + QSPI_SetAddressPin(base, kQSPI_AddrPinSingle); + + /* Set data pin. */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* Set address */ + QSPI_SetAddress(base, blockAddress); + + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_BE_64K); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); + + while (localCnt++ < 2000000) + { + /* Check flash busy status */ + if (FLASH_GetBusyStatus(base) == false) + { + status = kStatus_Success; + break; + } + } + } + + /*Check WEL bit is cleared or not. */ + if (kStatus_Success != FLASH_CheckWriteEnableLatch(base)) + { + status = kStatus_Fail; + } + + return status; +} + +/* Erase specfied address of the flash */ +static status_t FLASH_Erase(QSPI_Type *base, uint32_t startAddr, uint32_t endAddr) +{ + status_t ret; + uint32_t sectorNumber, blockNumber, length, validStart; + + length = endAddr - startAddr + 1; + + while (length != 0) + { + if ((startAddr & (FLASH_64K_BLOCK_SIZE - 1)) == 0 && + length > (FLASH_64K_BLOCK_SIZE - g_flashConfig->sectorSize)) + { + /* Address is a multiple of 64K and length is > (64K block -4K sector) + * So directly erase 64K from this address */ + blockNumber = startAddr / FLASH_64K_BLOCK_SIZE; + ret = FLASH_Block64KErase(base, blockNumber); + endAddr = startAddr + FLASH_64K_BLOCK_SIZE; + } + else if ((startAddr & (FLASH_32K_BLOCK_SIZE - 1)) == 0 && + length > (FLASH_32K_BLOCK_SIZE - g_flashConfig->sectorSize)) + { + /* Address is a multiple of 32K and length is > (32K block -4K sector) + * So directly erase 32K from this address */ + blockNumber = startAddr / FLASH_32K_BLOCK_SIZE; + ret = FLASH_Block32KErase(base, blockNumber); + endAddr = startAddr + FLASH_32K_BLOCK_SIZE; + } + else + { + /* Find 4K aligned address and erase 4K sector */ + validStart = startAddr - (startAddr & (g_flashConfig->sectorSize - 1)); + sectorNumber = validStart / g_flashConfig->sectorSize; + ret = FLASH_SectorErase(base, sectorNumber); + endAddr = validStart + g_flashConfig->sectorSize; + } + + /* If erase operation fails then return error */ + if (ret != kStatus_Success) + { + return kStatus_Fail; + } + + /* Calculate the remaining length that is to be erased yet */ + if (length < (endAddr - startAddr)) + { + length = 0; + } + else + { + length -= (endAddr - startAddr); + } + + startAddr = endAddr; + } + + return kStatus_Success; +} + +/* Read flash from specified address to buffer */ +uint32_t FLASH_Read(QSPI_Type *base, flash_read_mode_type_t mode, uint32_t address, uint8_t *buffer, uint32_t size) +{ + uint32_t readBytes = 0x00U; + uint16_t statusWrite = 0x00U; + uint16_t statusReg1 = 0x00U; + uint16_t statusReg2 = 0x00U; + + qspi_header_count_config_t config; + + /* Configure header count. */ + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt3Byte; + config.readModeCnt = kQSPI_ReadModeCnt0Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + /* Enable quad mode. */ + if ((mode == kFLASH_FastReadQuadOUT) || (mode == kFLASH_FastReadQuadIO) || (mode == kFLASH_WordFastReadQuadIO) || + (mode == kFLASH_OctalWordFastReadQuadIO)) + { + /* Get status register 1. */ + statusReg1 = FLASH_GetStatusReg(base, 0x01U); + + if (((g_flashConfig->jedecId >> 16) & 0xFF) != 0xc2U) + { + /* Get status register 2. */ + statusReg2 = FLASH_GetStatusReg(base, 0x02U); + statusWrite = ((statusReg2 << 8) | statusReg1) | 0x0200U; + FLASH_WriteStatusReg(base, statusWrite); + } + else if ((statusReg1 & 0x40U) != 0x40U) + { + statusWrite = statusReg1 | 0x40U; + FLASH_WriteStatusReg(base, statusWrite); + } + } + + /* Clear QSPI FIFO */ + QSPI_FlushFIFO(base); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI_SetHeaderCount(base, &config); + + /* Set read mode */ + QSPI_SetReadMode(base, 0x00U); + + /* Set data in counter */ + QSPI_SetDataInCnt(base, size); + + /* Set address */ + QSPI_SetAddress(base, address); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinSingle); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + if (mode == kFLASH_NormalRead) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_RD); + } + else if (mode == kFLASH_FastRead) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_FR); + + /* Set dummy counter */ + QSPI_SetDummyCnt(base, kQSPI_DummyCnt1Byte); + } + else if (mode == kFLASH_FastReadDualOUT) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_FRDO); + + /* Set dummy counter */ + QSPI_SetDummyCnt(base, kQSPI_DummyCnt1Byte); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinDual); + } + else if (mode == kFLASH_FastReadDaulIO) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_FRDIO); + + /* Set read mode counter */ + QSPI_SetReadModeCnt(base, kQSPI_ReadModeCnt1Byte); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinDual); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinAsData); + } + else if (mode == kFLASH_FastReadQuadOUT) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_FRQO); + + /* Set dummy counter */ + QSPI_SetDummyCnt(base, kQSPI_DummyCnt1Byte); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinQuad); + } + else if (mode == kFLASH_FastReadQuadIO) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_FRQIO); + + /* Set read mode counter */ + QSPI_SetReadModeCnt(base, kQSPI_ReadModeCnt1Byte); + + /* Set dummy counter */ + QSPI_SetDummyCnt(base, kQSPI_DummyCnt2Byte); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinQuad); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinAsData); + } + else if (mode == kFLASH_WordFastReadQuadIO) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_WFRQIO); + + /* Set read mode counter */ + QSPI_SetReadModeCnt(base, kQSPI_ReadModeCnt1Byte); + + /* Set dummy counter */ + QSPI_SetDummyCnt(base, kQSPI_DummyCnt1Byte); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinQuad); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinAsData); + } + else if (mode == kFLASH_OctalWordFastReadQuadIO) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_OWFRQIO); + + /* Set read mode counter */ + QSPI_SetReadModeCnt(base, kQSPI_ReadModeCnt1Byte); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinQuad); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinAsData); + } + else + { + ; /* Intentional empty for MISTA C-2012 rule 15.7. */ + } + + /* QSPI one-byte length mode */ + QSPI_UpdateTansferLength(base, kQSPI_TransferLength1Byte); + + /* Set QSPI read */ + QSPI_StartTransfer(base, kQSPI_Read); + + for (uint32_t i = 0x00U; i < size; i++) + { + buffer[i] = QSPI_ReadByte(base); + readBytes++; + } + + /* Disable QSPI */ + QSPI_SetSSEnable(base, false); + + return readBytes; +} + +/* Program flash within a page */ +static status_t FLASH_PageProgram( + QSPI_Type *base, flash_program_mode_type_t mode, uint32_t address, uint8_t *buffer, uint32_t size) +{ + status_t status = kStatus_Fail; + volatile uint32_t localCnt = 0x00U; + uint16_t statusWrite = 0x00U; + uint16_t statusReg1Val = 0x00U; + uint16_t statusReg2Val = 0x00U; + + qspi_header_count_config_t config; + + /* Configure header count. */ + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt3Byte; + config.readModeCnt = kQSPI_ReadModeCnt0Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + if (mode == kFLASH_ProgramQuad) + { + /* Get status register 1. */ + statusReg1Val = FLASH_GetStatusReg(base, 0x01U); + + if (((g_flashConfig->jedecId >> 16) & 0xFFU) != 0xC2U) + { + /* Get status register 2. */ + statusReg2Val = FLASH_GetStatusReg(base, 0x02U); + statusWrite = ((statusReg2Val << 8) | statusReg1Val) | 0x0200U; + FLASH_WriteStatusReg(base, statusWrite); + } + else if ((statusReg1Val & 0x40U) != 0x40U) + { + statusWrite = statusReg1Val | 0x40U; + FLASH_WriteStatusReg(base, statusWrite); + } + } + + /* Check address validity */ + if ((FLASH_PAGE_NUM(address + size - 1) > FLASH_PAGE_NUM(address)) || size == 0) + { + return kStatus_Fail; + } + + /* Enable flash write */ + FLASH_WriteEnable(base, true); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI_SetHeaderCount(base, &config); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinSingle); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* Set address */ + QSPI_SetAddress(base, address); + + if (mode == kFLASH_ProgramNormal) + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_PP); + } + else if (mode == kFLASH_ProgramQuad) + { + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinQuad); + + if (((g_flashConfig->jedecId >> 16) & 0xFFU) == 0xC2U) + { + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinAsData); + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_QPP_MX); + } + else + { + /* Set instruction */ + QSPI_SetInstruction(base, FLASH_INS_CODE_QPP); + } + } + + /* QSPI one-byte length mode */ + QSPI_UpdateTansferLength(base, kQSPI_TransferLength1Byte); + + /* Set QSPI write */ + QSPI_StartTransfer(base, kQSPI_Write); + + for (uint32_t i = 0x00U; i < size; i++) + { + QSPI_WriteByte(base, buffer[i]); + } + + /* Stop QSPI transfer */ + QSPI_StopTransfer(base); + + while (localCnt++ < 1000000) + { + /* Check flash busy status */ + if (FLASH_GetBusyStatus(base) == false) + { + status = kStatus_Success; + break; + } + } + + statusReg1Val = FLASH_GetStatusReg(base, 0x01U); + + /* Check WEL bit is cleared or not. */ + if ((statusReg1Val & FLASH_WEL_BIT_SET) == FLASH_WEL_BIT_SET) + { + status = kStatus_Fail; + } + + return status; +} + +/* Program flash with any address and size */ +static status_t FLASH_Program( + QSPI_Type *base, flash_program_mode_type_t mode, uint32_t address, uint8_t *buffer, uint32_t size) +{ + uint8_t *programBuf; + uint32_t begPgNum; + uint32_t endPgNum; + uint32_t step; + uint32_t currentAddr; + uint32_t endPgAddr; + status_t status = kStatus_Fail; + + programBuf = buffer; + currentAddr = address; + + /* Get page number of start address */ + begPgNum = FLASH_PAGE_NUM(address); + /* Get page number of end address */ + endPgNum = FLASH_PAGE_NUM(address + size - 1); + + /* Both start address and end address are within the same page */ + if (begPgNum == endPgNum) + { + return (FLASH_PageProgram(base, mode, address, buffer, size)); + } + /* Start address and end address are not in the same page */ + else + { + /* For first page */ + endPgAddr = (g_flashConfig->pageSize * (FLASH_PAGE_NUM(address) + 1U) - 1U); + step = endPgAddr - address + 1; + status = FLASH_PageProgram(base, mode, address, programBuf, step); + if (status == kStatus_Fail) + { + return kStatus_Fail; + } + + programBuf += step; + currentAddr += step; + + for (uint32_t i = begPgNum + 1U; i <= endPgNum; i++) + { + /* For last page */ + if (i == endPgNum) + { + step = (address + size) & 0xFF; + + /* If step is 0, the last page has 256 bytes data to be writen ( size of data is 0x100 ) */ + if (step == 0) + { + step = 0x100; + } + + return (FLASH_PageProgram(base, mode, currentAddr, programBuf, step)); + } + else + { + status = FLASH_PageProgram(base, mode, currentAddr, programBuf, g_flashConfig->pageSize); + if (status == kStatus_Fail) + { + return kStatus_Fail; + } + + programBuf += g_flashConfig->pageSize; + currentAddr += g_flashConfig->pageSize; + } + } + } + + return status; +} + +/* Get JEDEC ID */ +static uint32_t FLASH_GetJEDECID(QSPI_Type *base) +{ + uint32_t jedecID = 0; + qspi_header_count_config_t config; + + /* Configure header count. */ + config.instructionCnt = kQSPI_InstructionCnt1Byte; + config.addressCnt = kQSPI_AddressCnt0Byte; + config.readModeCnt = kQSPI_ReadModeCnt0Byte; + config.dummyCnt = kQSPI_DummyCnt0Byte; + + /* Clear QSPI FIFO */ + QSPI_FlushFIFO(base); + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter*/ + QSPI_SetHeaderCount(base, &config); + + /* Set data in counter */ + QSPI_SetDataInCnt(base, 0x03U); + + /* Read JEDEC ID */ + QSPI_SetInstruction(base, FLASH_INS_CODE_JEDEC_ID); + + /* Set QSPI address pin mode */ + QSPI_SetAddressPin(base, kQSPI_AddrPinSingle); + + /* Set QSPI data pin mode */ + QSPI_SetDatePin(base, kQSPI_DataPinSingle); + + /* QSPI one-byte length mode */ + QSPI_UpdateTansferLength(base, kQSPI_TransferLength1Byte); + + /* Set QSPI read */ + QSPI_StartTransfer(base, kQSPI_Read); + + jedecID = QSPI_ReadByte(base); + jedecID <<= 8; + jedecID |= QSPI_ReadByte(base); + jedecID <<= 8; + jedecID |= QSPI_ReadByte(base); + + /* Disable QSPI */ + QSPI_SetSSEnable(base, false); + + return jedecID; +} + +static const struct FlashDeviceConfig *FLASH_GetConfigFromJedecID(uint32_t jedecID) +{ + uint32_t count = sizeof(flashDevList) / sizeof(struct FlashDeviceConfig); + + for (uint32_t i = 0U; i < count; i++) + { + if (flashDevList[i].jedecId == jedecID) + { + return &flashDevList[i]; + } + } + + return NULL; +} + +static status_t FLASH_SetConfig(uint32_t jedecID) +{ + status_t status = kStatus_Fail; + const struct FlashDeviceConfig *cfg; + + cfg = FLASH_GetConfigFromJedecID(jedecID); + + if (NULL != cfg) + { + g_flashConfig = cfg; + status = kStatus_Success; + } + + return status; +} + +const struct FlashDeviceConfig *FLASH_GetConfig(void) +{ + return g_flashConfig; +} + +static void FLASH_Init(QSPI_Type *base) +{ + qspi_config_t config; + + /*Get QSPI default settings and configure the qspi */ + QSPI_GetDefaultConfig(&config); + + QSPI_Init(base, &config); +} + +static status_t FLASH_EnableQSPI(void) +{ + return FLASHC_EnableQSPIPad(FLASHC); +} + +static void FLASH_EnableFlashC(void) +{ + assert(g_flashConfig != NULL); + + FLASHC_EnableFLASHCPad(FLASHC, kFLASHC_HardwareCmdFastReadQuadIO, g_flashConfig->jedecId); +} + +/* API - initialize 'mflash' */ +int32_t mflash_drv_init(void) +{ + uint32_t jedecID = 0x00U; + status_t status; + uint32_t primask; + + if (mflashInitialized) + { + return kStatus_Success; + } + + assert((FLASHC->FCCR & FLASHC_FCCR_FLASHC_PAD_EN_MASK) != 0U); + + if ((FLASHC->FCACR & FLASHC_FCACR_OFFSET_EN_MASK) == 0U) + { + mflashOffset = 0U; + } + else + { + mflashOffset = FLASHC->FAOFFR; + } + + /* During QSPI operation, no interrupt allowed in XIP case. */ + primask = DisableGlobalIRQ(); + + FLASH_EnableQSPI(); + + FLASH_Init(QSPI); + + FLASH_ResetFastReadQuad(QSPI); + + /*Get JEDEC ID. */ + jedecID = FLASH_GetJEDECID(QSPI); + + status = FLASH_SetConfig(jedecID); + if (status == kStatus_Success) + { + mflashInitialized = true; + } + + FLASH_EnableFlashC(); + + EnableGlobalIRQ(primask); + + return status; +} + +/* Calling wrapper for 'mflash_drv_sector_erase_internal'. + * Erase one sector starting at 'sector_addr' - must be sector aligned. + */ +int32_t mflash_drv_sector_erase(uint32_t sector_addr) +{ + status_t status; + uint32_t primask; + + if (0 == mflash_drv_is_sector_aligned(sector_addr)) + return kStatus_InvalidArgument; + + /* During flash operation, no interrupt allowed in XIP case. */ + primask = DisableGlobalIRQ(); + + FLASH_EnableQSPI(); + + status = FLASH_Erase(QSPI, sector_addr, sector_addr + MFLASH_SECTOR_SIZE - 1U); + + FLASH_EnableFlashC(); + + EnableGlobalIRQ(primask); + + return status; +} + +/* Calling wrapper for 'mflash_drv_page_program_internal'. + * Write 'data' to 'page_addr' - must be page aligned. + * NOTE: Don't try to store constant data that are located in XIP !! + */ +int32_t mflash_drv_page_program(uint32_t page_addr, uint32_t *data) +{ + status_t status; + uint32_t primask; + + if (0 == mflash_drv_is_page_aligned(page_addr)) + return kStatus_InvalidArgument; + + /* During flash operation, no interrupt allowed in XIP case. */ + primask = DisableGlobalIRQ(); + + FLASH_EnableQSPI(); + + status = FLASH_PageProgram(QSPI, kFLASH_ProgramQuad, page_addr, (uint8_t *)data, MFLASH_PAGE_SIZE); + + FLASH_EnableFlashC(); + + EnableGlobalIRQ(primask); + + return status; +} + +/* API - Read data, access by FLASHC. */ +int32_t mflash_drv_read(uint32_t addr, uint32_t *buffer, uint32_t len) +{ + status_t status; + uint32_t primask; + + /* Ensure current flash access via FLASHC. */ + assert((FLASHC->FCCR & FLASHC_FCCR_FLASHC_PAD_EN_MASK) != 0U); + /* If physical address is larger than mflashOffset, access from FLASHC directly. */ + if (addr > mflashOffset) + { + memcpy(buffer, (void *)(addr + MFLASH_BASE_ADDRESS - mflashOffset), len); + status = kStatus_Success; + } + else + { + /* During flash operation, no interrupt allowed in XIP case. */ + primask = DisableGlobalIRQ(); + + FLASH_EnableQSPI(); + + status = (FLASH_Read(QSPI, kFLASH_FastReadQuadIO, addr, (uint8_t *)(void *)buffer, len) == len) ? + kStatus_Success : + kStatus_Fail; + + FLASH_EnableFlashC(); + + EnableGlobalIRQ(primask); + } + + return status; +} + +/* API - Write data */ +int32_t mflash_drv_write(uint32_t addr, uint32_t *buffer, uint32_t len) +{ + status_t status; + uint32_t primask; + + /* Only allow buffer in SRAM, flash address cannot be used in QSPI operation. */ + assert(((uint32_t)buffer & 0x1F000000U) != 0x1F000000U); + + /* During flash operation, no interrupt allowed in XIP case. */ + primask = DisableGlobalIRQ(); + + FLASH_EnableQSPI(); + + status = FLASH_Program(QSPI, kFLASH_ProgramQuad, addr, (uint8_t *)buffer, len); + + FLASH_EnableFlashC(); + + EnableGlobalIRQ(primask); + + return status; +} + +/* API - Erase data */ +int32_t mflash_drv_erase(uint32_t addr, uint32_t len) +{ + status_t status; + uint32_t primask; + + /* During flash operation, no interrupt allowed in XIP case. */ + primask = DisableGlobalIRQ(); + + FLASH_EnableQSPI(); + + status = FLASH_Erase(QSPI, addr, addr + len - 1U); + + FLASH_EnableFlashC(); + + EnableGlobalIRQ(primask); + + return status; +} + +/* API - Get pointer to FLASH region */ +void *mflash_drv_phys2log(uint32_t addr, uint32_t len) +{ + assert(addr > mflashOffset); + return (void *)(addr + MFLASH_BASE_ADDRESS - mflashOffset); +} + +/* API - Get pointer to FLASH region */ +uint32_t mflash_drv_log2phys(void *ptr, uint32_t len) +{ + if ((uint32_t)ptr < MFLASH_BASE_ADDRESS) + return kStatus_InvalidArgument; + + return ((uint32_t)ptr + mflashOffset - MFLASH_BASE_ADDRESS); +} diff --git a/components/flash/mflash/mw320/mflash_drv.h b/components/flash/mflash/mw320/mflash_drv.h new file mode 100644 index 000000000..890e51fe7 --- /dev/null +++ b/components/flash/mflash/mw320/mflash_drv.h @@ -0,0 +1,37 @@ +/* + * Copyright 2017-2020 NXP + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef __MFLASH_DRV_H__ +#define __MFLASH_DRV_H__ + +#include "mflash_common.h" + +/* Flash constants */ +#ifndef MFLASH_SECTOR_SIZE +#define MFLASH_SECTOR_SIZE (4096U) +#endif + +#ifndef MFLASH_PAGE_SIZE +#define MFLASH_PAGE_SIZE (256U) +#endif + +/* Device specific settings */ +#ifndef MFLASH_QSPI +#define MFLASH_QSPI (QSPI) +#endif + +#ifndef MFLASH_BASE_ADDRESS +#define MFLASH_BASE_ADDRESS (0x1F000000U) +#endif + +#define FLASH_SIZE 0x00001000U /* 4MB in KB unit */ + +/*! @brief Write data of arbitrary length */ +int32_t mflash_drv_write(uint32_t addr, uint32_t *buffer, uint32_t len); + +/*! @brief Erase data of arbitrary length */ +int32_t mflash_drv_erase(uint32_t addr, uint32_t len); +#endif diff --git a/components/flash/mflash/mw320/mflash_params.h b/components/flash/mflash/mw320/mflash_params.h new file mode 100644 index 000000000..bd961a6d2 --- /dev/null +++ b/components/flash/mflash/mw320/mflash_params.h @@ -0,0 +1,15 @@ +/* + * Copyright 2017-2020 NXP + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef __MFLASH_PARAMS__ +#define __MFLASH_PARAMS__ + +#include "mflash_drv.h" + +#define MFLASH_FILE_BASEADDR (0x000F0000) /* mem address 0x1F0F0000 */ +#define MFLASH_FILE_SIZE (MFLASH_SECTOR_SIZE) + +#endif diff --git a/components/lists/fsl_component_generic_list.h b/components/lists/fsl_component_generic_list.h index ccdc2192b..fada08c6f 100644 --- a/components/lists/fsl_component_generic_list.h +++ b/components/lists/fsl_component_generic_list.h @@ -15,13 +15,17 @@ * @{ */ -/********************************************************************************** +/*!********************************************************************************* +************************************************************************************* * Include -***********************************************************************************/ +************************************************************************************* +********************************************************************************** */ -/********************************************************************************** +/*! ********************************************************************************* +************************************************************************************* * Public macro definitions -***********************************************************************************/ +************************************************************************************* +********************************************************************************** */ /*! @brief Definition to determine whether use list light. */ #ifndef GENERIC_LIST_LIGHT #define GENERIC_LIST_LIGHT (1) @@ -32,9 +36,11 @@ #define GENERIC_LIST_DUPLICATED_CHECKING (0) #endif -/********************************************************************************** +/*! ********************************************************************************* +************************************************************************************* * Public type definitions -***********************************************************************************/ +************************************************************************************* +********************************************************************************** */ /*! @brief The list status */ typedef enum _list_status { @@ -70,12 +76,14 @@ typedef struct list_element_tag struct list_label *list; /*!< pointer to the list */ } list_element_t, *list_element_handle_t; #endif -/********************************************************************************** +/*! ********************************************************************************* +************************************************************************************* * Public prototypes -***********************************************************************************/ -/********************************************************************************** +************************************************************************************* +********************************************************************************** */ +/******************************************************************************* * API - **********************************************************************************/ + ******************************************************************************/ #if defined(__cplusplus) extern "C" { @@ -166,6 +174,7 @@ list_status_t LIST_RemoveElement(list_element_handle_t element); /*! * @brief Links an element in the previous position relative to a given member of a list. * + * @param list - Handle of the list. * @param element - Handle of the element. * @param newElement - New element to insert before the given member. * diff --git a/components/mem_manager/fsl_component_mem_manager.c b/components/mem_manager/fsl_component_mem_manager.c index 31fff60c6..596449e37 100644 --- a/components/mem_manager/fsl_component_mem_manager.c +++ b/components/mem_manager/fsl_component_mem_manager.c @@ -179,7 +179,7 @@ static void MEM_BufferAllocates_memStatis(void *buffer, uint32_t time, uint32_t s_memStatis.ram_lost += (uint16_t)(block_size - requestedSize); UPDATE_PEAK(s_memStatis.ram_lost, s_memStatis.peak_ram_lost); - /* UPDATE_PEAK(((uint32_t)FreeBlockHdrList.tail + BLOCK_HDR_SIZE), s_memStatis.peak_upper_addr); */ + // UPDATE_PEAK(((uint32_t)FreeBlockHdrList.tail + BLOCK_HDR_SIZE), s_memStatis.peak_upper_addr); #ifdef MEM_MANAGER_BENCH if (time != 0U) @@ -430,7 +430,7 @@ mem_status_t MEM_RemoveBuffer(uint8_t *buffer) MEM_EXIT_CRITICAL(); return kStatus_MemUnknownError; } -#endif /* MEM_MANAGER_BUFFER_REMOVE */ +#endif // MEM_MANAGER_BUFFER_REMOVE /*! * @brief Allocate a block from the memory pools. The function uses the diff --git a/components/mem_manager/fsl_component_mem_manager_light.c b/components/mem_manager/fsl_component_mem_manager_light.c index 959d31d9d..80bf53f98 100644 --- a/components/mem_manager/fsl_component_mem_manager_light.c +++ b/components/mem_manager/fsl_component_mem_manager_light.c @@ -387,7 +387,7 @@ mem_status_t MEM_Init(void) blockHeader_t *firstBlockHdr; firstBlockHdr = ptr.block_hdr_ptr; - /* MEM_DBG_LOG("%x %d\r\n", memHeap, heapSize_c/sizeof(uint32_t)); */ + // MEM_DBG_LOG("%x %d\r\n", memHeap, heapSize_c/sizeof(uint32_t)); /* Init firstBlockHdr as a free block */ firstBlockHdr->next = NULL; @@ -581,7 +581,7 @@ static void *MEM_BufferAllocate(uint32_t numBytes, uint8_t poolId) /* avoid looping */ assert(FreeBlockHdr != FreeBlockHdr->next_free); } while (true); - /* MEM_DBG_LOG("BlockHdrFound: %x", BlockHdrFound); */ + // MEM_DBG_LOG("BlockHdrFound: %x", BlockHdrFound); #ifdef MEM_DEBUG_OUT_OF_MEMORY assert(BlockHdrFound); @@ -675,7 +675,7 @@ mem_status_t MEM_BufferFree(void *buffer /* IN: Block of memory to free*/) MEM_BlockHeaderCheck(BlockHdr->next); #endif - /* MEM_DBG_LOG("%x %d", BlockHdr, BlockHdr->buff_size); */ + // MEM_DBG_LOG("%x %d", BlockHdr, BlockHdr->buff_size); #if defined(MEM_STATISTICS_INTERNAL) MEM_BufferFrees_memStatis(buffer); diff --git a/components/osa/component_osa.cmake b/components/osa/component_osa.cmake index 776e86a78..9b2126a65 100644 --- a/components/osa/component_osa.cmake +++ b/components/osa/component_osa.cmake @@ -12,13 +12,13 @@ target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1052) +if(CONFIG_USE_middleware_freertos-kernel_K32L2A41A) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1064) +if(CONFIG_USE_middleware_freertos-kernel_K32L2B31A) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) @@ -30,109 +30,109 @@ target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ) endif() -if(CONFIG_USE_middleware_freertos-kernel_K32L2B31A) +if(CONFIG_USE_middleware_freertos-kernel_LPC54628) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MK64F12) +if(CONFIG_USE_middleware_freertos-kernel_LPC54S018) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MK66F18) +if(CONFIG_USE_middleware_freertos-kernel_LPC54S018M) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_LPC54628) +if(CONFIG_USE_middleware_freertos-kernel_LPC55S16) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MK22F51212) +if(CONFIG_USE_middleware_freertos-kernel_LPC55S28) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1021) +if(CONFIG_USE_middleware_freertos-kernel_LPC55S69_cm33_core0) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_LPC55S16) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1011) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1062) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1015) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_LPC54S018) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1021) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_LPC54S018M) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1024) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MKL27Z644) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1052) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_LPC55S69_cm33_core0) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1062) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1024) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1064) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1011) +if(CONFIG_USE_middleware_freertos-kernel_MIMXRT685S_cm33) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_LPC55S28) +if(CONFIG_USE_middleware_freertos-kernel_MK22F51212) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_K32L2A41A) +if(CONFIG_USE_middleware_freertos-kernel_MK64F12) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT685S_cm33) +if(CONFIG_USE_middleware_freertos-kernel_MK66F18) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) endif() -if(CONFIG_USE_middleware_freertos-kernel_MIMXRT1015) +if(CONFIG_USE_middleware_freertos-kernel_MKL27Z644) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/fsl_os_abstraction_free_rtos.c ) diff --git a/components/osa/component_osa_free_rtos.cmake b/components/osa/component_osa_free_rtos.cmake index 2daf78c4d..edfc56312 100644 --- a/components/osa/component_osa_free_rtos.cmake +++ b/components/osa/component_osa_free_rtos.cmake @@ -11,53 +11,56 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(middleware_freertos-kernel_MIMXRT1052) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(middleware_freertos-kernel_MIMXRT1064) -endif() -if(${MCUX_DEVICE} STREQUAL "MK28FA15") - include(middleware_freertos-kernel_MK28FA15) +if(${MCUX_DEVICE} STREQUAL "88MW320") + include(middleware_freertos-kernel_88MW320) endif() -if(${MCUX_DEVICE} STREQUAL "MK64F12") - include(middleware_freertos-kernel_MK64F12) +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") + include(middleware_freertos-kernel_K32L3A60_cm0plus) endif() -if(${MCUX_DEVICE} STREQUAL "MK66F18") - include(middleware_freertos-kernel_MK66F18) +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") + include(middleware_freertos-kernel_K32L3A60_cm4) endif() if(${MCUX_DEVICE} STREQUAL "LPC54628") include(middleware_freertos-kernel_LPC54628) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") - include(middleware_freertos-kernel_MIMXRT1021) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") - include(middleware_freertos-kernel_MIMXRT1062) -endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018") include(middleware_freertos-kernel_LPC54S018) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") - include(middleware_freertos-kernel_K32L3A60_cm0plus) -endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") - include(middleware_freertos-kernel_K32L3A60_cm4) -endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018M") include(middleware_freertos-kernel_LPC54S018M) endif() +if(${MCUX_DEVICE} STREQUAL "LPC55S28") + include(middleware_freertos-kernel_LPC55S28) +endif() if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") include(middleware_freertos-kernel_LPC55S69_cm33_core0) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") + include(middleware_freertos-kernel_MIMXRT1021) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") include(middleware_freertos-kernel_MIMXRT1024) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S28") - include(middleware_freertos-kernel_LPC55S28) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(middleware_freertos-kernel_MIMXRT1052) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") + include(middleware_freertos-kernel_MIMXRT1062) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(middleware_freertos-kernel_MIMXRT1064) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") include(middleware_freertos-kernel_MIMXRT685S_cm33) endif() +if(${MCUX_DEVICE} STREQUAL "MK28FA15") + include(middleware_freertos-kernel_MK28FA15) +endif() +if(${MCUX_DEVICE} STREQUAL "MK64F12") + include(middleware_freertos-kernel_MK64F12) +endif() +if(${MCUX_DEVICE} STREQUAL "MK66F18") + include(middleware_freertos-kernel_MK66F18) +endif() include(component_lists) diff --git a/components/osa/fsl_os_abstraction.h b/components/osa/fsl_os_abstraction.h index 805a3bbf8..ecc4390f6 100644 --- a/components/osa/fsl_os_abstraction.h +++ b/components/osa/fsl_os_abstraction.h @@ -792,17 +792,6 @@ osa_status_t OSA_MsgQPut(osa_msgq_handle_t msgqHandle, osa_msg_handle_t pMessage */ osa_status_t OSA_MsgQGet(osa_msgq_handle_t msgqHandle, osa_msg_handle_t pMessage, uint32_t millisec); -/*! - * @brief Get the available message - * - * This function is used to get the available message. - * - * @param msgqHandle Message Queue handler. - * - * @return Available message count - */ -int OSA_MsgQAvailableMsgs(osa_msgq_handle_t msgqHandle); - /*! * @brief Destroys a previously created queue. * diff --git a/components/osa/fsl_os_abstraction_bm.c b/components/osa/fsl_os_abstraction_bm.c index bac5ec50d..58bf72401 100644 --- a/components/osa/fsl_os_abstraction_bm.c +++ b/components/osa/fsl_os_abstraction_bm.c @@ -1157,21 +1157,6 @@ osa_status_t OSA_MsgQGet(osa_msgq_handle_t msgqHandle, osa_msg_handle_t pMessage return status; } -/*FUNCTION********************************************************************** - * - * Function Name : OSA_MsgQAvailableMsgs - * Description : This function is used to get the available message. - * Return : Available message count - * - *END**************************************************************************/ -int OSA_MsgQAvailableMsgs(osa_msgq_handle_t msgqHandle) -{ - assert(msgqHandle); - msg_queue_t *pQueue = (msg_queue_t *)msgqHandle; - - return (int)pQueue->number; -} - /*FUNCTION********************************************************************** * * Function Name : OSA_EXT_MsgQDestroy diff --git a/components/osa/fsl_os_abstraction_config.h b/components/osa/fsl_os_abstraction_config.h index 85aa37b98..03798df93 100644 --- a/components/osa/fsl_os_abstraction_config.h +++ b/components/osa/fsl_os_abstraction_config.h @@ -33,8 +33,4 @@ #define FSL_OSA_TASK_ENABLE 1U #endif /* OSA_USED */ -#ifndef FSL_OSA_MAIN_FUNC_ENABLE -#define FSL_OSA_MAIN_FUNC_ENABLE 1U -#endif - #endif /* _FSL_OS_ABSTRACTION_CONFIG_H_ */ diff --git a/components/osa/fsl_os_abstraction_free_rtos.c b/components/osa/fsl_os_abstraction_free_rtos.c index fa5ece499..98ab17473 100644 --- a/components/osa/fsl_os_abstraction_free_rtos.c +++ b/components/osa/fsl_os_abstraction_free_rtos.c @@ -96,7 +96,7 @@ void startup_task(void *argument); * Public memory declarations ************************************************************************************* ********************************************************************************** */ -const uint8_t gUseRtos_c = USE_RTOS; /* USE_RTOS = 0 for BareMetal and 1 for OS */ +const uint8_t gUseRtos_c = USE_RTOS; // USE_RTOS = 0 for BareMetal and 1 for OS static osa_state_t s_osaState = {0}; /*! ********************************************************************************* @@ -266,18 +266,11 @@ osa_status_t OSA_TaskSetPriority(osa_task_handle_t taskHandle, osa_task_priority #if (defined(FSL_OSA_TASK_ENABLE) && (FSL_OSA_TASK_ENABLE > 0U)) osa_status_t OSA_TaskCreate(osa_task_handle_t taskHandle, const osa_task_def_t *thread_def, osa_task_param_t task_param) { - static uint8_t s_osaTaskListInitialized = 0; assert(sizeof(osa_freertos_task_t) == OSA_TASK_HANDLE_SIZE); assert(taskHandle); TaskHandle_t pxCreatedTask; osa_freertos_task_t *ptask = (osa_freertos_task_t *)taskHandle; - if (0u == s_osaTaskListInitialized) - { - s_osaTaskListInitialized = 1u; - LIST_Init((&s_osaState.taskList), 0); - } - if (xTaskCreate((TaskFunction_t)thread_def->pthread, /* pointer to the task */ (char const *)thread_def->tname, /* task name for kernel awareness debugging */ (configSTACK_DEPTH_TYPE)thread_def->stacksize / sizeof(portSTACK_TYPE), /* task stack size */ @@ -898,21 +891,6 @@ osa_status_t OSA_MsgQGet(osa_msgq_handle_t msgqHandle, osa_msg_handle_t pMessage return osaStatus; } -/*FUNCTION********************************************************************** - * - * Function Name : OSA_MsgQAvailableMsgs - * Description : This function is used to get the available message. - * Return : Available message count - * - *END**************************************************************************/ -int OSA_MsgQAvailableMsgs(osa_msgq_handle_t msgqHandle) -{ - QueueHandle_t handler; - assert(NULL != msgqHandle); - handler = (QueueHandle_t)(void *)(uint32_t *)(*(uint32_t *)msgqHandle); - return (int)uxQueueMessagesWaiting((QueueHandle_t)handler); -} - /*FUNCTION********************************************************************** * * Function Name : OSA_MsgQDestroy @@ -1037,13 +1015,13 @@ void OSA_InstallIntHandler(uint32_t IRQNumber, void (*handler)(void)) ************************************************************************************* ********************************************************************************** */ #if (defined(FSL_OSA_TASK_ENABLE) && (FSL_OSA_TASK_ENABLE > 0U)) -#if (defined(FSL_OSA_MAIN_FUNC_ENABLE) && (FSL_OSA_MAIN_FUNC_ENABLE > 0U)) + static OSA_TASK_DEFINE(startup_task, gMainThreadPriority_c, 1, gMainThreadStackSize_c, 0); -__WEAK_FUNC int main(void) +int main(void) { extern void BOARD_InitHardware(void); - + LIST_Init((&s_osaState.taskList), 0); /* Initialize MCU clock */ BOARD_InitHardware(); @@ -1054,7 +1032,4 @@ __WEAK_FUNC int main(void) vTaskStartScheduler(); return 0; } - -#endif - #endif /* FSL_OSA_TASK_ENABLE */ diff --git a/components/osa/fsl_os_abstraction_free_rtos.h b/components/osa/fsl_os_abstraction_free_rtos.h index 00b4b6011..8cb02b692 100644 --- a/components/osa/fsl_os_abstraction_free_rtos.h +++ b/components/osa/fsl_os_abstraction_free_rtos.h @@ -14,7 +14,7 @@ /** * Workaround to disable MISRA C message suppress warnings for IAR compiler. */ -/* http://supp.iar.com/Support/?note=24725 */ +// http://supp.iar.com/Support/?note=24725 #define MISRAC_DISABLE \ _Pragma( \ @@ -129,4 +129,4 @@ extern void DefaultISR(void); /*! @}*/ /*! @}*/ -#endif /* __FSL_OS_ABSTRACTION_FREERTOS_H__ */ +#endif // __FSL_OS_ABSTRACTION_FREERTOS_H__ diff --git a/components/serial_manager/component_serial_manager_uart.cmake b/components/serial_manager/component_serial_manager_uart.cmake index 1ae025eb3..c7975034c 100644 --- a/components/serial_manager/component_serial_manager_uart.cmake +++ b/components/serial_manager/component_serial_manager_uart.cmake @@ -11,127 +11,130 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") +if(${MCUX_DEVICE} STREQUAL "88MW320") + include(component_mw_uart_adapter) +endif() +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") +if(${MCUX_DEVICE} STREQUAL "K32L2B31A") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MK28FA15") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") include(component_lpuart_adapter) endif() +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") + include(component_lpuart_adapter) +endif() +if(${MCUX_DEVICE} STREQUAL "LPC51U68") + include(component_usart_adapter) +endif() if(${MCUX_DEVICE} STREQUAL "LPC54114_cm0plus") include(component_usart_adapter) endif() if(${MCUX_DEVICE} STREQUAL "LPC54114_cm4") include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") - include(component_iuart_adapter) +if(${MCUX_DEVICE} STREQUAL "LPC54628") + include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8MM6") - include(component_iuart_adapter) +if(${MCUX_DEVICE} STREQUAL "LPC54S018") + include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") - include(component_lpuart_adapter) +if(${MCUX_DEVICE} STREQUAL "LPC54S018M") + include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2B31A") - include(component_lpuart_adapter) +if(${MCUX_DEVICE} STREQUAL "LPC55S16") + include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MK64F12") - include(component_uart_adapter) +if(${MCUX_DEVICE} STREQUAL "LPC55S28") + include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MK66F18") - include(component_uart_adapter) +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") + include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MKE16Z4") +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core1") + include(component_usart_adapter) +endif() +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") include(component_lpuart_adapter) endif() +if(${MCUX_DEVICE} STREQUAL "MIMX8MM6") + include(component_iuart_adapter) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMX8MN6") + include(component_iuart_adapter) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") + include(component_iuart_adapter) +endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(component_lpuart_adapter) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MKV11Z7") - include(component_uart_adapter) -endif() -if(${MCUX_DEVICE} STREQUAL "MKV31F51212") - include(component_uart_adapter) -endif() -if(${MCUX_DEVICE} STREQUAL "LPC54628") - include(component_usart_adapter) -endif() -if(${MCUX_DEVICE} STREQUAL "MK22F51212") - include(component_uart_adapter) +if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") + include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MKE06Z4") - include(component_uart_adapter) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") + include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") include(component_lpuart_adapter) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MKE02Z4") - include(component_uart_adapter) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") + include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S16") - include(component_usart_adapter) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(component_lpuart_adapter) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8MN6") - include(component_iuart_adapter) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "LPC54S018") +if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") include(component_usart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") - include(component_lpuart_adapter) +if(${MCUX_DEVICE} STREQUAL "MK22F51212") + include(component_uart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") +if(${MCUX_DEVICE} STREQUAL "MK28FA15") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "LPC54S018M") - include(component_usart_adapter) -endif() -if(${MCUX_DEVICE} STREQUAL "MKM35Z7") +if(${MCUX_DEVICE} STREQUAL "MK64F12") include(component_uart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "LPC51U68") - include(component_usart_adapter) -endif() -if(${MCUX_DEVICE} STREQUAL "MKL27Z644") - include(component_lpuart_adapter) +if(${MCUX_DEVICE} STREQUAL "MK66F18") + include(component_uart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") - include(component_usart_adapter) +if(${MCUX_DEVICE} STREQUAL "MKE02Z4") + include(component_uart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core1") - include(component_usart_adapter) +if(${MCUX_DEVICE} STREQUAL "MKE06Z4") + include(component_uart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") +if(${MCUX_DEVICE} STREQUAL "MKE16Z4") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") +if(${MCUX_DEVICE} STREQUAL "MKL27Z644") include(component_lpuart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S28") - include(component_usart_adapter) -endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") - include(component_lpuart_adapter) +if(${MCUX_DEVICE} STREQUAL "MKM35Z7") + include(component_uart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") - include(component_usart_adapter) +if(${MCUX_DEVICE} STREQUAL "MKV11Z7") + include(component_uart_adapter) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") - include(component_lpuart_adapter) +if(${MCUX_DEVICE} STREQUAL "MKV31F51212") + include(component_uart_adapter) endif() diff --git a/components/serial_manager/fsl_component_serial_manager.c b/components/serial_manager/fsl_component_serial_manager.c index 5d5bd4026..c7f327196 100644 --- a/components/serial_manager/fsl_component_serial_manager.c +++ b/components/serial_manager/fsl_component_serial_manager.c @@ -616,7 +616,7 @@ static void SerialManager_Task(void *param) ringBufferLength = handle->ringBuffer.ringHead + handle->ringBuffer.ringBufferSize - handle->ringBuffer.ringTail; ringBufferLength = ringBufferLength % handle->ringBuffer.ringBufferSize; - /* Notify there are data in ringbuffer */ + // Notify there are data in ringbuffer if (0U != ringBufferLength) { msg.buffer = NULL; @@ -948,7 +948,7 @@ static serial_manager_status_t SerialManager_Read(serial_read_handle_t readHandl assert(handle); #if (defined(SERIAL_MANAGER_NON_BLOCKING_DUAL_MODE) && (SERIAL_MANAGER_NON_BLOCKING_DUAL_MODE > 0U)) if (handle->handleType == kSerialManager_Blocking) - /* if ((handle->handleType == kSerialManager_Blocking) || (kSerialManager_TransmissionBlocking == mode)) */ + // if ((handle->handleType == kSerialManager_Blocking) || (kSerialManager_TransmissionBlocking == mode)) { return SerialManager_StartReading(handle, serialReadHandle, buffer, length); } diff --git a/components/serial_manager/fsl_component_serial_manager.h b/components/serial_manager/fsl_component_serial_manager.h index 914ddd931..448a63f9a 100644 --- a/components/serial_manager/fsl_component_serial_manager.h +++ b/components/serial_manager/fsl_component_serial_manager.h @@ -12,7 +12,7 @@ #include "fsl_common.h" /*! - * @addtogroup Serial_Manager + * @addtogroup serialmanager * @{ */ diff --git a/components/serial_manager/fsl_component_serial_port_swo.h b/components/serial_manager/fsl_component_serial_port_swo.h index f819643b4..b46104021 100644 --- a/components/serial_manager/fsl_component_serial_port_swo.h +++ b/components/serial_manager/fsl_component_serial_port_swo.h @@ -9,7 +9,8 @@ #define __SERIAL_PORT_SWO_H__ /*! - * @addtogroup serial_port_swo + * @addtogroup serial_port_swo Serial Port SWO + * @ingroup serialmanager * @{ */ diff --git a/components/serial_manager/fsl_component_serial_port_uart.h b/components/serial_manager/fsl_component_serial_port_uart.h index 0b8e35e84..bf1e627cf 100644 --- a/components/serial_manager/fsl_component_serial_port_uart.h +++ b/components/serial_manager/fsl_component_serial_port_uart.h @@ -12,7 +12,8 @@ #include "fsl_adapter_uart.h" /*! - * @addtogroup serial_port_uart + * @addtogroup serial_port_uart Serial Port Uart + * @ingroup serialmanager * @{ */ @@ -71,10 +72,6 @@ typedef struct _serial_port_uart_config #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U)) serial_port_uart_block_mode_t mode; /*!< serial port uart block mode */ #endif /* SERIAL_MANAGER_NON_BLOCKING_MODE */ -#if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u)) - uint8_t txFifoWatermark; - uint8_t rxFifoWatermark; -#endif } serial_port_uart_config_t; /*! @} */ #endif /* __SERIAL_PORT_UART_H__ */ diff --git a/components/srtm/driver_srtm.cmake b/components/srtm/driver_srtm.cmake index 7159c6afe..a8d25254b 100644 --- a/components/srtm/driver_srtm.cmake +++ b/components/srtm/driver_srtm.cmake @@ -14,7 +14,6 @@ target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include ${CMAKE_CURRENT_LIST_DIR}/srtm - ${CMAKE_CURRENT_LIST_DIR}/port ) diff --git a/components/uart/component_mw_uart_adapter.cmake b/components/uart/component_mw_uart_adapter.cmake new file mode 100644 index 000000000..a51b53361 --- /dev/null +++ b/components/uart/component_mw_uart_adapter.cmake @@ -0,0 +1,14 @@ +#Description: uart_adapter; user_visible: True +include_guard(GLOBAL) +message("component_mw_uart_adapter component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_adapter_mwuart.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_mw_uart) diff --git a/components/uart/fsl_adapter_mwuart.c b/components/uart/fsl_adapter_mwuart.c new file mode 100644 index 000000000..838ec1f89 --- /dev/null +++ b/components/uart/fsl_adapter_mwuart.c @@ -0,0 +1,672 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_common.h" +#include "fsl_uart.h" + +#include "fsl_adapter_uart.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#ifndef NDEBUG +#if (defined(DEBUG_CONSOLE_ASSERT_DISABLE) && (DEBUG_CONSOLE_ASSERT_DISABLE > 0U)) +#undef assert +#define assert(n) +#endif +#endif + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) +/*! @brief uart RX state structure. */ +typedef struct _hal_uart_receive_state +{ + volatile uint8_t *buffer; + volatile uint32_t bufferLength; + volatile uint32_t bufferSofar; +} hal_uart_receive_state_t; + +/*! @brief uart TX state structure. */ +typedef struct _hal_uart_send_state +{ + volatile uint8_t *buffer; + volatile uint32_t bufferLength; + volatile uint32_t bufferSofar; +} hal_uart_send_state_t; +#endif +/*! @brief uart state structure. */ +typedef struct _hal_uart_state +{ +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + hal_uart_transfer_callback_t callback; + void *callbackParam; +#if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) + uart_handle_t hardwareHandle; +#endif + hal_uart_receive_state_t rx; + hal_uart_send_state_t tx; +#endif + uint8_t instance; +} hal_uart_state_t; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ +static UART_Type *const s_UartAdapterBase[] = UART_BASE_PTRS; + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + +#if !(defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) +/* Array of UART IRQ number. */ +static const IRQn_Type s_UartIRQ[] = UART_IRQS; + +static hal_uart_state_t *s_UartState[sizeof(s_UartAdapterBase) / sizeof(UART_Type *)]; +#endif + +#endif + +/******************************************************************************* + * Code + ******************************************************************************/ + +#if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) +static hal_uart_status_t HAL_UartGetStatus(status_t status) +{ + hal_uart_status_t uartStatus = kStatus_HAL_UartError; + switch (status) + { + case kStatus_Success: + uartStatus = kStatus_HAL_UartSuccess; + break; + case kStatus_UART_TxBusy: + uartStatus = kStatus_HAL_UartTxBusy; + break; + case kStatus_UART_RxBusy: + uartStatus = kStatus_HAL_UartRxBusy; + break; + case kStatus_UART_TxIdle: + uartStatus = kStatus_HAL_UartTxIdle; + break; + case kStatus_UART_RxIdle: + uartStatus = kStatus_HAL_UartRxIdle; + break; + case kStatus_UART_BaudrateNotSupport: + uartStatus = kStatus_HAL_UartBaudrateNotSupport; + break; + case kStatus_UART_RxFifoError: + case kStatus_UART_FramingError: + case kStatus_UART_ParityError: + uartStatus = kStatus_HAL_UartProtocolError; + break; + default: + /* This comments for MISRA C-2012 Rule 16.4 */ + break; + } + return uartStatus; +} +#else +static hal_uart_status_t HAL_UartGetStatus(status_t status) +{ + if (kStatus_Success == status) + { + return kStatus_HAL_UartSuccess; + } + else + { + return kStatus_HAL_UartError; + } +} +#endif + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + +#if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) +static void HAL_UartCallback(UART_Type *base, uart_handle_t *handle, status_t status, void *callbackParam) +{ + hal_uart_state_t *uartHandle; + hal_uart_status_t uartStatus = HAL_UartGetStatus(status); + assert(callbackParam); + + uartHandle = (hal_uart_state_t *)callbackParam; + + if (kStatus_HAL_UartProtocolError == uartStatus) + { + if (0U != uartHandle->hardwareHandle.rxDataSize) + { + uartStatus = kStatus_HAL_UartError; + } + } + + if (NULL != uartHandle->callback) + { + uartHandle->callback(uartHandle, uartStatus, uartHandle->callbackParam); + } +} + +#else + +static void HAL_UartInterruptHandle(uint8_t instance) +{ + hal_uart_state_t *uartHandle = s_UartState[instance]; + uint16_t status; + + if (NULL == uartHandle) + { + return; + } + + status = UART_GetStatusFlags(s_UartAdapterBase[instance]); + + /* Receive data register full */ + if ((0U != ((uint16_t)kUART_RxDataReadyInterruptFlag & status)) && + (0U != (UART_GetEnabledInterrupts(s_UartAdapterBase[instance]) & (uint8_t)kUART_RxDataReadyInterruptEnable))) + { + if (NULL != uartHandle->rx.buffer) + { + uartHandle->rx.buffer[uartHandle->rx.bufferSofar++] = UART_ReadByte(s_UartAdapterBase[instance]); + if (uartHandle->rx.bufferSofar >= uartHandle->rx.bufferLength) + { + UART_DisableInterrupts(s_UartAdapterBase[instance], (uint8_t)kUART_RxDataReadyInterruptEnable | + (uint8_t)kUART_RxStatusInterruptEnable); + uartHandle->rx.buffer = NULL; + if (NULL != uartHandle->callback) + { + uartHandle->callback(uartHandle, kStatus_HAL_UartRxIdle, uartHandle->callbackParam); + } + } + } + } + + /* Send data register empty and the interrupt is enabled. */ + if ((0U != ((uint16_t)kUART_TxDataRequestInterruptFlag & status)) && + (0U != (UART_GetEnabledInterrupts(s_UartAdapterBase[instance]) & (uint8_t)kUART_TxDataRequestInterruptEnable))) + { + if (NULL != uartHandle->tx.buffer) + { + UART_WriteByte(s_UartAdapterBase[instance], uartHandle->tx.buffer[uartHandle->tx.bufferSofar++]); + if (uartHandle->tx.bufferSofar >= uartHandle->tx.bufferLength) + { + UART_DisableInterrupts(s_UartAdapterBase[uartHandle->instance], + (uint8_t)kUART_TxDataRequestInterruptEnable); + uartHandle->tx.buffer = NULL; + if (NULL != uartHandle->callback) + { + uartHandle->callback(uartHandle, kStatus_HAL_UartTxIdle, uartHandle->callbackParam); + } + } + } + } +} +#endif + +#endif + +hal_uart_status_t HAL_UartInit(hal_uart_handle_t handle, const hal_uart_config_t *config) +{ + hal_uart_state_t *uartHandle; + uart_config_t uartConfig; + status_t status; + assert(handle); + assert(config); + assert(config->instance < (sizeof(s_UartAdapterBase) / sizeof(UART_Type *))); + assert(s_UartAdapterBase[config->instance]); + + assert(HAL_UART_HANDLE_SIZE >= sizeof(hal_uart_state_t)); + + UART_GetDefaultConfig(&uartConfig); + uartConfig.baudRate_Bps = config->baudRate_Bps; + + if (kHAL_UartParityEven == config->parityMode) + { + uartConfig.parityMode = kUART_ParityEven; + } + else if (kHAL_UartParityOdd == config->parityMode) + { + uartConfig.parityMode = kUART_ParityOdd; + } + else + { + uartConfig.parityMode = kUART_ParityDisabled; + } +#if defined(FSL_FEATURE_UART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_UART_HAS_STOP_BIT_CONFIG_SUPPORT + if (kHAL_UartTwoStopBit == config->stopBitCount) + { + uartConfig.stopBitCount = kUART_Stopbits2; + } + else + { + uartConfig.stopBitCount = kUART_Stopbits1; + } +#endif + + uartConfig.enable = (bool)(config->enableRx || config->enableTx); + uartConfig.enableRxRTS = (bool)config->enableRxRTS; + uartConfig.enableTxCTS = (bool)config->enableTxCTS; + uartConfig.fifoConfig.txFifoWatermark = kUART_TxfifoHalfEmpty; + uartConfig.fifoConfig.rxFifoWatermark = kUART_RxfifoByte1; + + status = UART_Init(s_UartAdapterBase[config->instance], &uartConfig, config->srcClock_Hz); + + if (kStatus_Success != status) + { + return HAL_UartGetStatus(status); + } + + uartHandle = (hal_uart_state_t *)handle; + uartHandle->instance = config->instance; + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + +#if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) + UART_TransferCreateHandle(s_UartAdapterBase[config->instance], &uartHandle->hardwareHandle, + (uart_transfer_callback_t)HAL_UartCallback, handle); +#else + s_UartState[uartHandle->instance] = uartHandle; + /* Enable interrupt in NVIC. */ + NVIC_SetPriority((IRQn_Type)s_UartIRQ[config->instance], HAL_UART_ISR_PRIORITY); + (void)EnableIRQ(s_UartIRQ[config->instance]); +#endif + +#endif + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartDeinit(hal_uart_handle_t handle) +{ + hal_uart_state_t *uartHandle; + + assert(handle); + + uartHandle = (hal_uart_state_t *)handle; + + UART_Deinit(s_UartAdapterBase[uartHandle->instance]); + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + +#if !(defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) + s_UartState[uartHandle->instance] = NULL; +#endif + +#endif + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartReceiveBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length) +{ + hal_uart_state_t *uartHandle; + status_t status; + assert(handle); + assert(data); + assert(length); + + uartHandle = (hal_uart_state_t *)handle; + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + if (NULL != uartHandle->rx.buffer) + { + return kStatus_HAL_UartRxBusy; + } +#endif + + status = UART_ReadBlocking(s_UartAdapterBase[uartHandle->instance], data, length); + + return HAL_UartGetStatus(status); +} + +hal_uart_status_t HAL_UartSendBlocking(hal_uart_handle_t handle, const uint8_t *data, size_t length) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(data); + assert(length); + + uartHandle = (hal_uart_state_t *)handle; + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + if (NULL != uartHandle->tx.buffer) + { + return kStatus_HAL_UartTxBusy; + } +#endif + + (void)UART_WriteBlocking(s_UartAdapterBase[uartHandle->instance], data, length); + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartEnterLowpower(hal_uart_handle_t handle) +{ + assert(handle); + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartExitLowpower(hal_uart_handle_t handle) +{ + assert(handle); + + return kStatus_HAL_UartSuccess; +} + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) + +#if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) + +hal_uart_status_t HAL_UartTransferInstallCallback(hal_uart_handle_t handle, + hal_uart_transfer_callback_t callback, + void *callbackParam) +{ + hal_uart_state_t *uartHandle; + + assert(handle); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + uartHandle->callbackParam = callbackParam; + uartHandle->callback = callback; + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartTransferReceiveNonBlocking(hal_uart_handle_t handle, hal_uart_transfer_t *transfer) +{ + hal_uart_state_t *uartHandle; + status_t status; + assert(handle); + assert(transfer); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + status = UART_TransferReceiveNonBlocking(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, + (uart_transfer_t *)(void *)transfer, NULL); + + return HAL_UartGetStatus(status); +} + +hal_uart_status_t HAL_UartTransferSendNonBlocking(hal_uart_handle_t handle, hal_uart_transfer_t *transfer) +{ + hal_uart_state_t *uartHandle; + status_t status; + assert(handle); + assert(transfer); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + status = UART_TransferSendNonBlocking(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, + (uart_transfer_t *)(void *)transfer); + + return HAL_UartGetStatus(status); +} + +hal_uart_status_t HAL_UartTransferGetReceiveCount(hal_uart_handle_t handle, uint32_t *count) +{ + hal_uart_state_t *uartHandle; + status_t status; + assert(handle); + assert(count); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + status = UART_TransferGetReceiveCount(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, count); + + return HAL_UartGetStatus(status); +} + +hal_uart_status_t HAL_UartTransferGetSendCount(hal_uart_handle_t handle, uint32_t *count) +{ + hal_uart_state_t *uartHandle; + status_t status; + assert(handle); + assert(count); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + status = UART_TransferGetSendCount(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle, count); + + return HAL_UartGetStatus(status); +} + +hal_uart_status_t HAL_UartTransferAbortReceive(hal_uart_handle_t handle) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + UART_TransferAbortReceive(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle); + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartTransferAbortSend(hal_uart_handle_t handle) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + UART_TransferAbortSend(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle); + + return kStatus_HAL_UartSuccess; +} + +#else + +/* None transactional API with non-blocking mode. */ +hal_uart_status_t HAL_UartInstallCallback(hal_uart_handle_t handle, + hal_uart_transfer_callback_t callback, + void *callbackParam) +{ + hal_uart_state_t *uartHandle; + + assert(handle); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + uartHandle->callbackParam = callbackParam; + uartHandle->callback = callback; + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartReceiveNonBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(data); + assert(length); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + if (NULL != uartHandle->rx.buffer) + { + return kStatus_HAL_UartRxBusy; + } + + uartHandle->rx.bufferLength = length; + uartHandle->rx.bufferSofar = 0; + uartHandle->rx.buffer = data; + UART_EnableInterrupts(s_UartAdapterBase[uartHandle->instance], + (uint8_t)kUART_RxDataReadyInterruptEnable | (uint8_t)kUART_RxStatusInterruptEnable); + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartSendNonBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(data); + assert(length); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + if (NULL != uartHandle->tx.buffer) + { + return kStatus_HAL_UartTxBusy; + } + uartHandle->tx.bufferLength = length; + uartHandle->tx.bufferSofar = 0; + uartHandle->tx.buffer = (volatile uint8_t *)data; + UART_EnableInterrupts(s_UartAdapterBase[uartHandle->instance], (uint8_t)kUART_TxDataRequestInterruptEnable); + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartGetReceiveCount(hal_uart_handle_t handle, uint32_t *reCount) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(reCount); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + if (NULL != uartHandle->rx.buffer) + { + *reCount = uartHandle->rx.bufferSofar; + return kStatus_HAL_UartSuccess; + } + return kStatus_HAL_UartError; +} + +hal_uart_status_t HAL_UartGetSendCount(hal_uart_handle_t handle, uint32_t *seCount) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(seCount); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + if (NULL != uartHandle->tx.buffer) + { + *seCount = uartHandle->tx.bufferSofar; + return kStatus_HAL_UartSuccess; + } + return kStatus_HAL_UartError; +} + +hal_uart_status_t HAL_UartAbortReceive(hal_uart_handle_t handle) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + if (NULL != uartHandle->rx.buffer) + { + UART_DisableInterrupts(s_UartAdapterBase[uartHandle->instance], + (uint8_t)kUART_RxDataReadyInterruptEnable | (uint8_t)kUART_RxStatusInterruptEnable); + uartHandle->rx.buffer = NULL; + } + + return kStatus_HAL_UartSuccess; +} + +hal_uart_status_t HAL_UartAbortSend(hal_uart_handle_t handle) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + + if (NULL != uartHandle->tx.buffer) + { + UART_DisableInterrupts(s_UartAdapterBase[uartHandle->instance], (uint8_t)kUART_TxDataRequestInterruptEnable); + uartHandle->tx.buffer = NULL; + } + + return kStatus_HAL_UartSuccess; +} + +#endif + +#if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) + +void HAL_UartIsrFunction(hal_uart_handle_t handle) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + +#if 0 + DisableIRQ(s_UartIRQ[uartHandle->instance]); +#endif + UART_TransferHandleIRQ(s_UartAdapterBase[uartHandle->instance], &uartHandle->hardwareHandle); +#if 0 + NVIC_SetPriority((IRQn_Type)s_UartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY); + EnableIRQ(s_UartIRQ[uartHandle->instance]); +#endif +} + +#else + +void HAL_UartIsrFunction(hal_uart_handle_t handle) +{ + hal_uart_state_t *uartHandle; + assert(handle); + assert(!HAL_UART_TRANSFER_MODE); + + uartHandle = (hal_uart_state_t *)handle; + +#if 0 + DisableIRQ(s_UartIRQ[uartHandle->instance]); +#endif + HAL_UartInterruptHandle(uartHandle->instance); +#if 0 + NVIC_SetPriority((IRQn_Type)s_UartIRQ[uartHandle->instance], HAL_UART_ISR_PRIORITY); + EnableIRQ(s_UartIRQ[uartHandle->instance]); +#endif +} + +#if defined(UART0) +void UART0_IRQHandler(void); +void UART0_IRQHandler(void) +{ + HAL_UartInterruptHandle(0); + SDK_ISR_EXIT_BARRIER; +} +#endif + +#if defined(UART1) +void UART1_IRQHandler(void); +void UART1_IRQHandler(void) +{ + HAL_UartInterruptHandle(1); + SDK_ISR_EXIT_BARRIER; +} +#endif + +#if defined(UART2) +void UART2_IRQHandler(void); +void UART2_IRQHandler(void) +{ + HAL_UartInterruptHandle(2); + SDK_ISR_EXIT_BARRIER; +} +#endif +#endif +#endif diff --git a/components/uart/fsl_adapter_uart.h b/components/uart/fsl_adapter_uart.h index f97c00e9b..a9b2e155f 100644 --- a/components/uart/fsl_adapter_uart.h +++ b/components/uart/fsl_adapter_uart.h @@ -58,10 +58,6 @@ #define HAL_UART_ADAPTER_LOWPOWER (0U) #endif /* HAL_UART_ADAPTER_LOWPOWER */ -#ifndef HAL_UART_ADAPTER_FIFO -#define HAL_UART_ADAPTER_FIFO (0U) -#endif /* HAL_UART_ADAPTER_FIFO */ - /*! @brief Definition of uart adapter handle size. */ #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) #define HAL_UART_HANDLE_SIZE (92U + HAL_UART_ADAPTER_LOWPOWER * 16U) @@ -153,10 +149,6 @@ typedef struct _hal_uart_config #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) hal_uart_block_mode_t mode; /*!< Uart block mode */ #endif /* UART_ADAPTER_NON_BLOCKING_MODE */ -#if (defined(HAL_UART_ADAPTER_FIFO) && (HAL_UART_ADAPTER_FIFO > 0u)) - uint8_t txFifoWatermark; - uint8_t rxFifoWatermark; -#endif } hal_uart_config_t; /*! @brief UART transfer callback function. */ diff --git a/devices/88MW320/88MW320.h b/devices/88MW320/88MW320.h new file mode 100644 index 000000000..0447b9777 --- /dev/null +++ b/devices/88MW320/88MW320.h @@ -0,0 +1,19873 @@ +/* +** ################################################################### +** Processor: 88MW320_A0_NAPC +** Compilers: GNU C Compiler +** IAR ANSI C/C++ Compiler for ARM +** Keil ARM C/C++ Compiler +** MCUXpresso Compiler +** +** Reference manual: 88MW320-88MW322, Rev.3, July 2020 +** Version: rev. 1.0, 2020-09-07 +** Build: b201223 +** +** Abstract: +** CMSIS Peripheral Access Layer for 88MW320 +** +** Copyright 1997-2016 Freescale Semiconductor, Inc. +** Copyright 2016-2020 NXP +** All rights reserved. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** http: www.nxp.com +** mail: support@nxp.com +** +** Revisions: +** - rev. 1.0 (2020-09-07) +** Initial version. +** +** ################################################################### +*/ + +/*! + * @file 88MW320.h + * @version 1.0 + * @date 2020-09-07 + * @brief CMSIS Peripheral Access Layer for 88MW320 + * + * CMSIS Peripheral Access Layer for 88MW320 + */ + +#ifndef _88MW320_H_ +#define _88MW320_H_ /**< Symbol preventing repeated inclusion */ + +/** Memory map major version (memory maps with equal major version number are + * compatible) */ +#define MCU_MEM_MAP_VERSION 0x0100U +/** Memory map minor version */ +#define MCU_MEM_MAP_VERSION_MINOR 0x0000U + + +/* ---------------------------------------------------------------------------- + -- Interrupt vector numbers + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Interrupt_vector_numbers Interrupt vector numbers + * @{ + */ + +/** Interrupt Number Definitions */ +#define NUMBER_OF_INT_VECTORS 79 /**< Number of interrupts in the Vector table */ + +typedef enum IRQn { + /* Auxiliary constants */ + NotAvail_IRQn = -128, /**< Not available device specific interrupt */ + + /* Core interrupts */ + NonMaskableInt_IRQn = -14, /**< Non Maskable Interrupt */ + HardFault_IRQn = -13, /**< Cortex-M4 SV Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /**< Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /**< Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /**< Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /**< Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /**< Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /**< Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /**< Cortex-M4 System Tick Interrupt */ + + /* Device specific interrupts */ + EXTPIN0_IRQn = 0, /**< Ext. Pin 0 */ + EXTPIN1_IRQn = 1, /**< Ext. Pin 1 */ + RTC_IRQn = 2, /**< RTC INT */ + CRC_IRQn = 3, /**< CRC INT */ + AES_IRQn = 4, /**< AES INT */ + I2C0_IRQn = 5, /**< I2C0 INT */ + I2C1_IRQn = 6, /**< I2C1 INT */ + Reserved23_IRQn = 7, /**< Reserved interrupt */ + DMAC_IRQn = 8, /**< DMAC INT */ + GPIO_IRQn = 9, /**< GPIO INT */ + SSP0_IRQn = 10, /**< SSP0 INT */ + SSP1_IRQn = 11, /**< SSP1 INT */ + SSP2_IRQn = 12, /**< SSP2 INT */ + QSPI_IRQn = 13, /**< QSPI INT */ + GPT0_IRQn = 14, /**< GPT0 INT */ + GPT1_IRQn = 15, /**< GPT1 INT */ + GPT2_IRQn = 16, /**< GPT2 INT */ + GPT3_IRQn = 17, /**< GPT3 INT */ + UART0_IRQn = 18, /**< UART0 INT */ + UART1_IRQn = 19, /**< UART1 INT */ + UART2_IRQn = 20, /**< UART2 INT */ + Reserved37_IRQn = 21, /**< Reserved interrupt */ + WDT_IRQn = 22, /**< WDT INT */ + Reserved39_IRQn = 23, /**< Reserved interrupt */ + ADC0_IRQn = 24, /**< ADC0 INT */ + DAC_IRQn = 25, /**< DAC INT */ + ACOMP_WAKEUP_IRQn = 26, /**< ACOMP Wake-up INT */ + ACOMP_IRQn = 27, /**< ACOMP INT */ + SDIO_IRQn = 28, /**< SDIO INT */ + USB_IRQn = 29, /**< USB INT */ + Reserved46_IRQn = 30, /**< Reserved interrupt */ + PLL_IRQn = 31, /**< PLL INT */ + Reserved48_IRQn = 32, /**< Reserved interrupt */ + RC32M_IRQn = 33, /**< RC32M INT FUNC */ + GPIO_0_1_IRQn = 34, /**< External Pin 0 selected by PMU.EXT_SEL_REG */ + GPIO_2_3_IRQn = 35, /**< External Pin 1 selected by PMU.EXT_SEL_REG */ + GPIO_4_5_IRQn = 36, /**< External Pin 2 selected by PMU.EXT_SEL_REG */ + GPIO_6_7_IRQn = 37, /**< External Pin 3 selected by PMU.EXT_SEL_REG */ + GPIO_8_9_IRQn = 38, /**< External Pin 4 selected by PMU.EXT_SEL_REG */ + GPIO_10_11_IRQn = 39, /**< External Pin 5 selected by PMU.EXT_SEL_REG */ + GPIO_12_13_IRQn = 40, /**< External Pin 6 selected by PMU.EXT_SEL_REG */ + GPIO_14_15_IRQn = 41, /**< External Pin 7 selected by PMU.EXT_SEL_REG */ + GPIO_16_17_IRQn = 42, /**< External Pin 8 selected by PMU.EXT_SEL_REG */ + GPIO_18_19_IRQn = 43, /**< External Pin 9 selected by PMU.EXT_SEL_REG */ + GPIO_20_21_IRQn = 44, /**< External Pin 10 selected by PMU.EXT_SEL_REG */ + GPIO_22_23_IRQn = 45, /**< External Pin 11 selected by PMU.EXT_SEL_REG */ + GPIO_24_25_IRQn = 46, /**< External Pin 12 selected by PMU.EXT_SEL_REG */ + GPIO_26_27_IRQn = 47, /**< External Pin 13 selected by PMU.EXT_SEL_REG */ + GPIO_28_29_IRQn = 48, /**< External Pin 14 selected by PMU.EXT_SEL_REG */ + GPIO_30_31_IRQn = 49, /**< External Pin 15 selected by PMU.EXT_SEL_REG */ + GPIO_32_33_IRQn = 50, /**< External Pin 16 selected by PMU.EXT_SEL_REG */ + GPIO_34_35_IRQn = 51, /**< External Pin 17 selected by PMU.EXT_SEL_REG */ + GPIO_36_37_IRQn = 52, /**< External Pin 18 selected by PMU.EXT_SEL_REG */ + GPIO_38_39_IRQn = 53, /**< External Pin 19 selected by PMU.EXT_SEL_REG */ + GPIO_40_41_IRQn = 54, /**< External Pin 20 selected by PMU.EXT_SEL_REG */ + GPIO_42_43_IRQn = 55, /**< External Pin 21 selected by PMU.EXT_SEL_REG */ + GPIO_44_45_IRQn = 56, /**< External Pin 22 selected by PMU.EXT_SEL_REG */ + GPIO_46_47_IRQn = 57, /**< External Pin 23 selected by PMU.EXT_SEL_REG */ + GPIO_48_49_IRQn = 58, /**< External Pin 24 selected by PMU.EXT_SEL_REG */ + Reserved75_IRQn = 59, /**< Reserved interrupt */ + PMU_IRQn = 60, /**< ULP COMP */ + BRNOUT_IRQn = 61, /**< Brnout INT */ + WIFIWKUP_IRQn = 62 /**< WiFi Wakeup INT */ +} IRQn_Type; + +/*! + * @} + */ /* end of group Interrupt_vector_numbers */ + + +/* ---------------------------------------------------------------------------- + -- Cortex M4 Core Configuration + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Cortex_Core_Configuration Cortex M4 Core Configuration + * @{ + */ + +#define __MPU_PRESENT 1 /**< Defines if an MPU is present or not */ +#define __NVIC_PRIO_BITS 3 /**< Number of priority bits implemented in the NVIC */ +#define __Vendor_SysTickConfig 0 /**< Vendor specific implementation of SysTickConfig is defined */ +#define __FPU_PRESENT 1 /**< Defines if an FPU is present or not */ + +#include "core_cm4.h" /* Core Peripheral Access Layer */ +#include "system_88MW320.h" /* Device specific configuration file */ + +/*! + * @} + */ /* end of group Cortex_Core_Configuration */ + + +/* ---------------------------------------------------------------------------- + -- Mapping Information + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Mapping_Information Mapping Information + * @{ + */ + +/** Mapping Information */ +/*! + * @addtogroup dmac_peripheral_number + * @{ */ + +/******************************************************************************* + * Definitions +*******************************************************************************/ + +/*! + * @brief Enumeration for the DMAC peripheral request number + * + * Defines the enumeration for the DMAC peripheral request number collections. + */ +typedef enum _dmac_peripheral_number +{ + kDMAC_PeriphNum_None = 0xFFU, /**< Invalid peripheral number */ + kDMAC_PeriphNum_GPT0_0 = 0x00U, /**< PER0 GPT0 CH0 mapping */ + kDMAC_PeriphNum_GPT0_1 = 0x01U, /**< PER1 GPT0 CH1 mapping */ + kDMAC_PeriphNum_GPT1_0 = 0x02U, /**< PER2 GPT1 CH0 mapping */ + kDMAC_PeriphNum_GPT1_1 = 0x03U, /**< PER3 GPT1 CH1 mapping */ + kDMAC_PeriphNum_I2C0_Rx = 0x04U, /**< PER4 I2C0 RX mapping */ + kDMAC_PeriphNum_I2C0_Tx = 0x05U, /**< PER5 I2C0 TX mapping */ + kDMAC_PeriphNum_QSPI0_Rx = 0x06U, /**< PER6 QSPI0 RX mapping */ + kDMAC_PeriphNum_QSPI0_Tx = 0x07U, /**< PER7 QSPI0 TX mapping */ + kDMAC_PeriphNum_SSP0_Rx = 0x0AU, /**< PER10 SSP0 RX mapping */ + kDMAC_PeriphNum_SSP0_Tx = 0x0BU, /**< PER11 SSP0 TX mapping */ + kDMAC_PeriphNum_SSP1_Rx = 0x0CU, /**< PER12 SSP1 RX mapping */ + kDMAC_PeriphNum_SSP1_Tx = 0x0DU, /**< PER13 SSP1 TX mapping */ + kDMAC_PeriphNum_UART0_Rx = 0x0EU, /**< PER14 UART0 RX mapping */ + kDMAC_PeriphNum_UART0_Tx = 0x0FU, /**< PER15 UART0 TX mapping */ + kDMAC_PeriphNum_UART1_Rx = 0x10U, /**< PER16 UART1 RX mapping */ + kDMAC_PeriphNum_UART1_Tx = 0x11U, /**< PER17 UART1 TX mapping */ + kDMAC_PeriphNum_ADC0 = 0x18U, /**< PER24 ADC0 mapping */ + kDMAC_PeriphNum_DAC0 = 0x1AU, /**< PER26 DAC0 mapping */ + kDMAC_PeriphNum_DAC1 = 0x1BU, /**< PER27 DAC1 mapping */ + kDMAC_PeriphNum_GPT2_0 = 0x20U, /**< PER32 GPT2 CH0 mapping */ + kDMAC_PeriphNum_GPT2_1 = 0x21U, /**< PER33 GPT2 CH1 mapping */ + kDMAC_PeriphNum_GPT3_0 = 0x22U, /**< PER34 GPT3 CH0 mapping */ + kDMAC_PeriphNum_GPT3_1 = 0x23U, /**< PER35 GPT3 CH1 mapping */ + kDMAC_PeriphNum_I2C1_Rx = 0x24U, /**< PER36 I2C1 RX mapping */ + kDMAC_PeriphNum_I2C1_Tx = 0x25U, /**< PER37 I2C1 TX mapping */ + kDMAC_PeriphNum_I2C2_Rx = 0x26U, /**< PER38 I2C2 RX mapping */ + kDMAC_PeriphNum_I2C2_Tx = 0x27U, /**< PER39 I2C2 TX mapping */ + kDMAC_PeriphNum_SSP2_Rx = 0x28U, /**< PER40 SSP2 RX mapping */ + kDMAC_PeriphNum_SSP2_Tx = 0x29U, /**< PER41 SSP2 TX mapping */ + kDMAC_PeriphNum_UART2_Rx = 0x2AU, /**< PER42 UART2 RX mapping */ + kDMAC_PeriphNum_UART2_Tx = 0x2BU, /**< PER43 UART2 TX mapping */ + kDMAC_PeriphNum_AES_CrcIn = 0x38U, /**< PER56 AES CRC IN mapping */ + kDMAC_PeriphNum_AES_CrcOut = 0x39U, /**< PER57 AES CRC OUT mapping */ +} dmac_peripheral_number_t; + +/* @} */ + + +/*! + * @} + */ /* end of group Mapping_Information */ + + +/* ---------------------------------------------------------------------------- + -- Device Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Peripheral_access_layer Device Peripheral Access Layer + * @{ + */ + + +/* +** Start of section using anonymous unions +*/ + +#if defined(__ARMCC_VERSION) + #if (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #else + #pragma push + #pragma anon_unions + #endif +#elif defined(__GNUC__) + /* anonymous unions are enabled by default */ +#elif defined(__IAR_SYSTEMS_ICC__) + #pragma language=extended +#else + #error Not supported compiler type +#endif + +/* ---------------------------------------------------------------------------- + -- ACOMP Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ACOMP_Peripheral_Access_Layer ACOMP Peripheral Access Layer + * @{ + */ + +/** ACOMP - Register Layout Typedef */ +typedef struct { + __IO uint32_t CTRL0; /**< ACOMP0 Control Register, offset: 0x0 */ + __IO uint32_t CTRL1; /**< ACOMP1 Control Register, offset: 0x4 */ + __I uint32_t STATUS0; /**< ACOMP0 Status Register, offset: 0x8 */ + __I uint32_t STATUS1; /**< ACOMP1 Status Register, offset: 0xC */ + __IO uint32_t ROUTE0; /**< ACOMP0 Route Register, offset: 0x10 */ + __IO uint32_t ROUTE1; /**< ACOMP1 Route Register, offset: 0x14 */ + __I uint32_t ISR0; /**< ACOMP0 Interrupt Status Register, offset: 0x18 */ + __I uint32_t ISR1; /**< ACOMP1 Interrupt Status Register, offset: 0x1C */ + __IO uint32_t IMR0; /**< ACOMP0 Interrupt Mask Register, offset: 0x20 */ + __IO uint32_t IMR1; /**< ACOMP1 Interrupt Mask Register, offset: 0x24 */ + __I uint32_t IRSR0; /**< ACOMP0 Interrupt Raw Status Register, offset: 0x28 */ + __I uint32_t IRSR1; /**< ACOMP1 Interrupt Raw Status Register, offset: 0x2C */ + __IO uint32_t ICR0; /**< ACOMP0 Interrupt Clear Register, offset: 0x30 */ + __IO uint32_t ICR1; /**< ACOMP1 Interrupt Clear Register, offset: 0x34 */ + __IO uint32_t RST0; /**< ACOMP0 Soft Reset Register, offset: 0x38 */ + __IO uint32_t RST1; /**< ACOMP1 Soft Reset Register, offset: 0x3C */ + uint8_t RESERVED_0[8]; + __IO uint32_t CLK; /**< Clock Register, offset: 0x48 */ +} ACOMP_Type; + +/* ---------------------------------------------------------------------------- + -- ACOMP Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ACOMP_Register_Masks ACOMP Register Masks + * @{ + */ + +/*! @name CTRL0 - ACOMP0 Control Register */ +/*! @{ */ +#define ACOMP_CTRL0_EN_MASK (0x1U) +#define ACOMP_CTRL0_EN_SHIFT (0U) +/*! en - ACOMP0 enable + * 0b0.. + * 0b1.. + */ +#define ACOMP_CTRL0_EN(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_EN_SHIFT)) & ACOMP_CTRL0_EN_MASK) +#define ACOMP_CTRL0_GPIOINV_MASK (0x2U) +#define ACOMP_CTRL0_GPIOINV_SHIFT (1U) +/*! gpioinv - Enable/Disable inversion of ACOMP0 output to GPIO. + * 0b0..do not invert ACOMP0 output + * 0b1..invert ACOMP0 output + */ +#define ACOMP_CTRL0_GPIOINV(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_GPIOINV_SHIFT)) & ACOMP_CTRL0_GPIOINV_MASK) +#define ACOMP_CTRL0_WARMTIME_MASK (0xCU) +#define ACOMP_CTRL0_WARMTIME_SHIFT (2U) +/*! warmtime - Set ACOMP0 Warm-Up time + * 0b00..1 us + * 0b01..2 us + * 0b10..4 us + * 0b11..8 us + */ +#define ACOMP_CTRL0_WARMTIME(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_WARMTIME_SHIFT)) & ACOMP_CTRL0_WARMTIME_MASK) +#define ACOMP_CTRL0_HYST_SELN_MASK (0x70U) +#define ACOMP_CTRL0_HYST_SELN_SHIFT (4U) +/*! hyst_seln - Select ACOMP0 negative hysteresis voltage level. + * 0b000..no hysteresis + * 0b001..-10 mV hysteresis + * 0b010..-20 mV hysteresis + * 0b011..-30 mV hysteresis + * 0b100..-40 mV hysteresis + * 0b101..-50 mV hysteresis + * 0b110..-60 mV hysteresis + * 0b111..-70 mV hysteresis + */ +#define ACOMP_CTRL0_HYST_SELN(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_HYST_SELN_SHIFT)) & ACOMP_CTRL0_HYST_SELN_MASK) +#define ACOMP_CTRL0_HYST_SELP_MASK (0x380U) +#define ACOMP_CTRL0_HYST_SELP_SHIFT (7U) +/*! hyst_selp - Select ACOMP0 positive hysteresis voltage level. + * 0b000..No hysteresis + * 0b001..+10 mV hysteresis + * 0b010..+20 mV hysteresis + * 0b011..+30 mV hysteresis + * 0b100..+40 mV hysteresis + * 0b101..+50 mV hysteresis + * 0b110..+60 mV hysteresis + * 0b111..+70 mV hysteresis + */ +#define ACOMP_CTRL0_HYST_SELP(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_HYST_SELP_SHIFT)) & ACOMP_CTRL0_HYST_SELP_MASK) +#define ACOMP_CTRL0_BIAS_PROG_MASK (0xC00U) +#define ACOMP_CTRL0_BIAS_PROG_SHIFT (10U) +/*! bias_prog - ACOMP0 bias current control bits or response time control bits. + * 0b00..power mode1 (slow response mode) + * 0b01..power mode2 (medium response mode) + * 0b10..power mode3 (fast response mode) + * 0b11..Reserved + */ +#define ACOMP_CTRL0_BIAS_PROG(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_BIAS_PROG_SHIFT)) & ACOMP_CTRL0_BIAS_PROG_MASK) +#define ACOMP_CTRL0_LEVEL_SEL_MASK (0x3F000U) +#define ACOMP_CTRL0_LEVEL_SEL_SHIFT (12U) +/*! level_sel - Scaling factor select bits for VIO reference level. + * 0b000000..Scaling factor=0.25 + * 0b010000..Scaling factor= 0.5 + * 0b100000..Scaling factor= 0.75 + * 0b110000..Scaling factor= 1 + */ +#define ACOMP_CTRL0_LEVEL_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_LEVEL_SEL_SHIFT)) & ACOMP_CTRL0_LEVEL_SEL_MASK) +#define ACOMP_CTRL0_NEG_SEL_MASK (0x3C0000U) +#define ACOMP_CTRL0_NEG_SEL_SHIFT (18U) +/*! neg_sel - ACOMP0 negative input select bits. + * 0b0000..acomp_ch<0> + * 0b0001..acomp_ch<1> + * 0b0010..acomp_ch<2> + * 0b0011..acomp_ch<3> + * 0b0100..acomp_ch<4> + * 0b0101..acomp_ch<5> + * 0b0110..acomp_ch<6> + * 0b0111..acomp_ch<7> + * 0b1000.. + * 0b1001.. + * 0b1010.. + * 0b1011.. + * 0b1100..vio*scaling factor + * 0b1101..vio*scaling factor + * 0b1110..vio*scaling factor + * 0b1111..vio*scaling factor + */ +#define ACOMP_CTRL0_NEG_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_NEG_SEL_SHIFT)) & ACOMP_CTRL0_NEG_SEL_MASK) +#define ACOMP_CTRL0_POS_SEL_MASK (0x3C00000U) +#define ACOMP_CTRL0_POS_SEL_SHIFT (22U) +/*! pos_sel - ACOMP0 positive input select bits. + * 0b0000..acomp_ch<0> + * 0b0001..acomp_ch<1> + * 0b0010..acomp_ch<2> + * 0b0011..acomp_ch<3> + * 0b0100..acomp_ch<4> + * 0b0101..acomp_ch<5> + * 0b0110..acomp_ch<6> + * 0b0111..acomp_ch<7> + * 0b1000.. + * 0b1001.. + */ +#define ACOMP_CTRL0_POS_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_POS_SEL_SHIFT)) & ACOMP_CTRL0_POS_SEL_MASK) +#define ACOMP_CTRL0_MUXEN_MASK (0x4000000U) +#define ACOMP_CTRL0_MUXEN_SHIFT (26U) +/*! muxen - ACOMP0 input MUX enable bit. + * 0b0..disable input mux + * 0b1..enable input mux + */ +#define ACOMP_CTRL0_MUXEN(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_MUXEN_SHIFT)) & ACOMP_CTRL0_MUXEN_MASK) +#define ACOMP_CTRL0_INACT_VAL_MASK (0x8000000U) +#define ACOMP_CTRL0_INACT_VAL_SHIFT (27U) +/*! inact_val - Set output value when ACOMP0 is inactive. + * 0b0..output 0 when ACOMP0 is inactive + * 0b1..output 1 when ACOMP0 is inactive + */ +#define ACOMP_CTRL0_INACT_VAL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_INACT_VAL_SHIFT)) & ACOMP_CTRL0_INACT_VAL_MASK) +#define ACOMP_CTRL0_RIE_MASK (0x10000000U) +#define ACOMP_CTRL0_RIE_SHIFT (28U) +/*! rie - ACOMP0 enable/disable rising edge triggered edge pulse. + * 0b0.. + * 0b1.. + */ +#define ACOMP_CTRL0_RIE(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_RIE_SHIFT)) & ACOMP_CTRL0_RIE_MASK) +#define ACOMP_CTRL0_FIE_MASK (0x20000000U) +#define ACOMP_CTRL0_FIE_SHIFT (29U) +/*! fie - ACOMP0 enable/disable falling edge triggered edge pulse. + * 0b0.. + * 0b1.. + */ +#define ACOMP_CTRL0_FIE(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_FIE_SHIFT)) & ACOMP_CTRL0_FIE_MASK) +#define ACOMP_CTRL0_INT_ACT_HI_MASK (0x40000000U) +#define ACOMP_CTRL0_INT_ACT_HI_SHIFT (30U) +/*! int_act_hi - ACOMP0 interrupt active mode select. + * 0b0..Low level or falling edge triggered interrupt + * 0b1..High level or rising edge triggered interrupt + */ +#define ACOMP_CTRL0_INT_ACT_HI(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_INT_ACT_HI_SHIFT)) & ACOMP_CTRL0_INT_ACT_HI_MASK) +#define ACOMP_CTRL0_EDGE_LEVL_SEL_MASK (0x80000000U) +#define ACOMP_CTRL0_EDGE_LEVL_SEL_SHIFT (31U) +/*! edge_levl_sel - ACOMP0 interrupt type select. + * 0b0..level triggered interrupt + * 0b1..edge triggered interrupt + */ +#define ACOMP_CTRL0_EDGE_LEVL_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL0_EDGE_LEVL_SEL_SHIFT)) & ACOMP_CTRL0_EDGE_LEVL_SEL_MASK) +/*! @} */ + +/*! @name CTRL1 - ACOMP1 Control Register */ +/*! @{ */ +#define ACOMP_CTRL1_EN_MASK (0x1U) +#define ACOMP_CTRL1_EN_SHIFT (0U) +/*! en - ACOMP1 enable bit. + * 0b0.. + * 0b1.. + */ +#define ACOMP_CTRL1_EN(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_EN_SHIFT)) & ACOMP_CTRL1_EN_MASK) +#define ACOMP_CTRL1_GPIOINV_MASK (0x2U) +#define ACOMP_CTRL1_GPIOINV_SHIFT (1U) +/*! gpioinv - Enable/disable inversion of ACOMP1 output to GPIO. + * 0b0..do not invert ACOMP1 output + * 0b1..invert ACOMP1 output + */ +#define ACOMP_CTRL1_GPIOINV(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_GPIOINV_SHIFT)) & ACOMP_CTRL1_GPIOINV_MASK) +#define ACOMP_CTRL1_WARMTIME_MASK (0xCU) +#define ACOMP_CTRL1_WARMTIME_SHIFT (2U) +/*! warmtime - Set ACOMP1 warm-up time. + * 0b00..1 us + * 0b01..2 us + * 0b10..4 us + * 0b11..8 us + */ +#define ACOMP_CTRL1_WARMTIME(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_WARMTIME_SHIFT)) & ACOMP_CTRL1_WARMTIME_MASK) +#define ACOMP_CTRL1_HYST_SELN_MASK (0x70U) +#define ACOMP_CTRL1_HYST_SELN_SHIFT (4U) +/*! hyst_seln - Select ACOMP1 negative hysteresis voltage level. + * 0b000..No hysteresis + * 0b001..-10 mV hysteresis + * 0b010..-20 mV hysteresis + * 0b011..-30 mV hysteresis + * 0b100..-40 mV hysteresis + * 0b101..-50 mV hysteresis + * 0b110..-60 mV hysteresis + * 0b111..-70 mV hysteresis + */ +#define ACOMP_CTRL1_HYST_SELN(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_HYST_SELN_SHIFT)) & ACOMP_CTRL1_HYST_SELN_MASK) +#define ACOMP_CTRL1_HYST_SELP_MASK (0x380U) +#define ACOMP_CTRL1_HYST_SELP_SHIFT (7U) +/*! hyst_selp - Select ACOMP1 positive hysteresis voltage level. + * 0b000..No hysteresis + * 0b001..+10 mV hysteresis + * 0b010..+20 mV hysteresis + * 0b011..+30 mV hysteresis + * 0b100..+40 mV hysteresis + * 0b101..+50 mV hysteresis + * 0b110..+60 mV hysteresis + * 0b111..+70 mV hysteresis + */ +#define ACOMP_CTRL1_HYST_SELP(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_HYST_SELP_SHIFT)) & ACOMP_CTRL1_HYST_SELP_MASK) +#define ACOMP_CTRL1_BIAS_PROG_MASK (0xC00U) +#define ACOMP_CTRL1_BIAS_PROG_SHIFT (10U) +/*! bias_prog - ACOMP1 bias current control bits Or response time control bits. + * 0b00..power mode1 (Slow response mode) + * 0b01..power mode2 (Medium response mode) + * 0b10..power mode3 (Fast response mode) + * 0b11..Reserved + */ +#define ACOMP_CTRL1_BIAS_PROG(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_BIAS_PROG_SHIFT)) & ACOMP_CTRL1_BIAS_PROG_MASK) +#define ACOMP_CTRL1_LEVEL_SEL_MASK (0x3F000U) +#define ACOMP_CTRL1_LEVEL_SEL_SHIFT (12U) +/*! level_sel - Scaling factor select bits for vio reference level. + * 0b000000..Scaling factor=0.25 + * 0b010000..Scaling factor= 0.5 + * 0b100000..Scaling factor= 0.75 + * 0b110000..Scaling factor= 1 + */ +#define ACOMP_CTRL1_LEVEL_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_LEVEL_SEL_SHIFT)) & ACOMP_CTRL1_LEVEL_SEL_MASK) +#define ACOMP_CTRL1_NEG_SEL_MASK (0x3C0000U) +#define ACOMP_CTRL1_NEG_SEL_SHIFT (18U) +/*! neg_sel - ACOMP1 negative input select + * 0b0000..acomp_ch<0> + * 0b0001..acomp_ch<1> + * 0b0010..acomp_ch<2> + * 0b0011..acomp_ch<3> + * 0b0100..acomp_ch<4> + * 0b0101..acomp_ch<5> + * 0b0110..acomp_ch<6> + * 0b0111..acomp_ch<7> + * 0b1000.. + * 0b1001.. + * 0b1010.. + * 0b1011.. + * 0b1100..vio*scaling factor + * 0b1101..vio*scaling factor + * 0b1110..vio*scaling factor + * 0b1111..vio*scaling factor + */ +#define ACOMP_CTRL1_NEG_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_NEG_SEL_SHIFT)) & ACOMP_CTRL1_NEG_SEL_MASK) +#define ACOMP_CTRL1_POS_SEL_MASK (0x3C00000U) +#define ACOMP_CTRL1_POS_SEL_SHIFT (22U) +/*! pos_sel - ACOMP1 positive input select + * 0b0000..acomp_ch<0> + * 0b0001..acomp_ch<1> + * 0b0010..acomp_ch<2> + * 0b0011..acomp_ch<3> + * 0b0100..acomp_ch<4> + * 0b0101..acomp_ch<5> + * 0b0110..acomp_ch<6> + * 0b0111..acomp_ch<7> + * 0b1000.. + * 0b1001.. + */ +#define ACOMP_CTRL1_POS_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_POS_SEL_SHIFT)) & ACOMP_CTRL1_POS_SEL_MASK) +#define ACOMP_CTRL1_MUXEN_MASK (0x4000000U) +#define ACOMP_CTRL1_MUXEN_SHIFT (26U) +/*! muxen - ACOMP1 input MUX enable + * 0b0..disable input mux + * 0b1..enable input mux + */ +#define ACOMP_CTRL1_MUXEN(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_MUXEN_SHIFT)) & ACOMP_CTRL1_MUXEN_MASK) +#define ACOMP_CTRL1_INACT_VAL_MASK (0x8000000U) +#define ACOMP_CTRL1_INACT_VAL_SHIFT (27U) +/*! inact_val - Set output value when ACOMP1 is inactive. + * 0b0..output 0 when ACOMP1 is inactive + * 0b1..output 1 when ACOMP1 is inactive + */ +#define ACOMP_CTRL1_INACT_VAL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_INACT_VAL_SHIFT)) & ACOMP_CTRL1_INACT_VAL_MASK) +#define ACOMP_CTRL1_RIE_MASK (0x10000000U) +#define ACOMP_CTRL1_RIE_SHIFT (28U) +/*! rie - ACOMP1 enable/disable rising edge triggered edge pulse. + * 0b0.. + * 0b1.. + */ +#define ACOMP_CTRL1_RIE(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_RIE_SHIFT)) & ACOMP_CTRL1_RIE_MASK) +#define ACOMP_CTRL1_FIE_MASK (0x20000000U) +#define ACOMP_CTRL1_FIE_SHIFT (29U) +/*! fie - ACOMP1 enable/disable falling edge triggered edge pulse. + * 0b0.. + * 0b1.. + */ +#define ACOMP_CTRL1_FIE(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_FIE_SHIFT)) & ACOMP_CTRL1_FIE_MASK) +#define ACOMP_CTRL1_INT_ACT_HI_MASK (0x40000000U) +#define ACOMP_CTRL1_INT_ACT_HI_SHIFT (30U) +/*! int_act_hi - ACOMP1 interrupt active mode select. + * 0b0..Low level or falling edge triggered interrupt + * 0b1..High level or rising edge triggered interrupt + */ +#define ACOMP_CTRL1_INT_ACT_HI(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_INT_ACT_HI_SHIFT)) & ACOMP_CTRL1_INT_ACT_HI_MASK) +#define ACOMP_CTRL1_EDGE_LEVL_SEL_MASK (0x80000000U) +#define ACOMP_CTRL1_EDGE_LEVL_SEL_SHIFT (31U) +/*! edge_levl_sel - ACOMP1 interrupt type select. + * 0b0..level triggered interrupt + * 0b1..edge triggered interrupt + */ +#define ACOMP_CTRL1_EDGE_LEVL_SEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CTRL1_EDGE_LEVL_SEL_SHIFT)) & ACOMP_CTRL1_EDGE_LEVL_SEL_MASK) +/*! @} */ + +/*! @name STATUS0 - ACOMP0 Status Register */ +/*! @{ */ +#define ACOMP_STATUS0_ACT_MASK (0x1U) +#define ACOMP_STATUS0_ACT_SHIFT (0U) +/*! act - ACOMP0 active status. + * 0b0..ACOMP0 is inactive + * 0b1..ACOMP0 is active + */ +#define ACOMP_STATUS0_ACT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_STATUS0_ACT_SHIFT)) & ACOMP_STATUS0_ACT_MASK) +#define ACOMP_STATUS0_OUT_MASK (0x2U) +#define ACOMP_STATUS0_OUT_SHIFT (1U) +/*! out - ACOMP0 comparison output value. + */ +#define ACOMP_STATUS0_OUT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_STATUS0_OUT_SHIFT)) & ACOMP_STATUS0_OUT_MASK) +/*! @} */ + +/*! @name STATUS1 - ACOMP1 Status Register */ +/*! @{ */ +#define ACOMP_STATUS1_ACT_MASK (0x1U) +#define ACOMP_STATUS1_ACT_SHIFT (0U) +/*! act - ACOMP1 active status. + * 0b0..ACOMP1 is inactive + * 0b1..ACOMP1 is active + */ +#define ACOMP_STATUS1_ACT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_STATUS1_ACT_SHIFT)) & ACOMP_STATUS1_ACT_MASK) +#define ACOMP_STATUS1_OUT_MASK (0x2U) +#define ACOMP_STATUS1_OUT_SHIFT (1U) +/*! out - ACOMP1 comparison output value. + */ +#define ACOMP_STATUS1_OUT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_STATUS1_OUT_SHIFT)) & ACOMP_STATUS1_OUT_MASK) +/*! @} */ + +/*! @name ROUTE0 - ACOMP0 Route Register */ +/*! @{ */ +#define ACOMP_ROUTE0_OUTSEL_MASK (0x1U) +#define ACOMP_ROUTE0_OUTSEL_SHIFT (0U) +/*! outsel - Select ACOMP0 synchronous or asynchronous output to pin. + * 0b0..Synchronous output + * 0b1..Asynchronous output + */ +#define ACOMP_ROUTE0_OUTSEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ROUTE0_OUTSEL_SHIFT)) & ACOMP_ROUTE0_OUTSEL_MASK) +#define ACOMP_ROUTE0_PE_MASK (0x2U) +#define ACOMP_ROUTE0_PE_SHIFT (1U) +/*! pe - Enable/disable ACOMP0 output to pin. + * 0b0.. + * 0b1.. + */ +#define ACOMP_ROUTE0_PE(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ROUTE0_PE_SHIFT)) & ACOMP_ROUTE0_PE_MASK) +/*! @} */ + +/*! @name ROUTE1 - ACOMP1 Route Register */ +/*! @{ */ +#define ACOMP_ROUTE1_OUTSEL_MASK (0x1U) +#define ACOMP_ROUTE1_OUTSEL_SHIFT (0U) +/*! outsel - Select ACOMP1 synchronous or asynchronous output to pin + * 0b0..Synchronous output + * 0b1..Asynchronous output + */ +#define ACOMP_ROUTE1_OUTSEL(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ROUTE1_OUTSEL_SHIFT)) & ACOMP_ROUTE1_OUTSEL_MASK) +#define ACOMP_ROUTE1_PE_MASK (0x2U) +#define ACOMP_ROUTE1_PE_SHIFT (1U) +/*! pe - Enable/disable ACOMP1 output to pin + * 0b0.. + * 0b1.. + */ +#define ACOMP_ROUTE1_PE(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ROUTE1_PE_SHIFT)) & ACOMP_ROUTE1_PE_MASK) +/*! @} */ + +/*! @name ISR0 - ACOMP0 Interrupt Status Register */ +/*! @{ */ +#define ACOMP_ISR0_OUT_INT_MASK (0x1U) +#define ACOMP_ISR0_OUT_INT_SHIFT (0U) +/*! out_int - ACOMP0 Synchronized Output Interrupt + */ +#define ACOMP_ISR0_OUT_INT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ISR0_OUT_INT_SHIFT)) & ACOMP_ISR0_OUT_INT_MASK) +#define ACOMP_ISR0_OUTA_INT_MASK (0x2U) +#define ACOMP_ISR0_OUTA_INT_SHIFT (1U) +/*! outa_int - ACOMP0 Asynchronized Output Interrupt + */ +#define ACOMP_ISR0_OUTA_INT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ISR0_OUTA_INT_SHIFT)) & ACOMP_ISR0_OUTA_INT_MASK) +/*! @} */ + +/*! @name ISR1 - ACOMP1 Interrupt Status Register */ +/*! @{ */ +#define ACOMP_ISR1_OUT_INT_MASK (0x1U) +#define ACOMP_ISR1_OUT_INT_SHIFT (0U) +/*! out_int - ACOMP1 Synchronized Output Interrupt + */ +#define ACOMP_ISR1_OUT_INT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ISR1_OUT_INT_SHIFT)) & ACOMP_ISR1_OUT_INT_MASK) +#define ACOMP_ISR1_OUTA_INT_MASK (0x2U) +#define ACOMP_ISR1_OUTA_INT_SHIFT (1U) +/*! outa_int - ACOMP1 Asynchronized Output Interrupt + */ +#define ACOMP_ISR1_OUTA_INT(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ISR1_OUTA_INT_SHIFT)) & ACOMP_ISR1_OUTA_INT_MASK) +/*! @} */ + +/*! @name IMR0 - ACOMP0 Interrupt Mask Register */ +/*! @{ */ +#define ACOMP_IMR0_OUT_INT_MASK_MASK (0x1U) +#define ACOMP_IMR0_OUT_INT_MASK_SHIFT (0U) +/*! out_int_mask - Mask Synchronized Interrupt + */ +#define ACOMP_IMR0_OUT_INT_MASK(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IMR0_OUT_INT_MASK_SHIFT)) & ACOMP_IMR0_OUT_INT_MASK_MASK) +#define ACOMP_IMR0_OUTA_INT_MASK_MASK (0x2U) +#define ACOMP_IMR0_OUTA_INT_MASK_SHIFT (1U) +/*! outa_int_mask - Mask Asynchronized Interrupt + */ +#define ACOMP_IMR0_OUTA_INT_MASK(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IMR0_OUTA_INT_MASK_SHIFT)) & ACOMP_IMR0_OUTA_INT_MASK_MASK) +/*! @} */ + +/*! @name IMR1 - ACOMP1 Interrupt Mask Register */ +/*! @{ */ +#define ACOMP_IMR1_OUT_INT_MASK_MASK (0x1U) +#define ACOMP_IMR1_OUT_INT_MASK_SHIFT (0U) +/*! out_int_mask - Mask Synchronized Interrupt + */ +#define ACOMP_IMR1_OUT_INT_MASK(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IMR1_OUT_INT_MASK_SHIFT)) & ACOMP_IMR1_OUT_INT_MASK_MASK) +#define ACOMP_IMR1_OUTA_INT_MASK_MASK (0x2U) +#define ACOMP_IMR1_OUTA_INT_MASK_SHIFT (1U) +/*! outa_int_mask - Mask Asynchronized Interrupt + */ +#define ACOMP_IMR1_OUTA_INT_MASK(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IMR1_OUTA_INT_MASK_SHIFT)) & ACOMP_IMR1_OUTA_INT_MASK_MASK) +/*! @} */ + +/*! @name IRSR0 - ACOMP0 Interrupt Raw Status Register */ +/*! @{ */ +#define ACOMP_IRSR0_OUT_INT_RAW_MASK (0x1U) +#define ACOMP_IRSR0_OUT_INT_RAW_SHIFT (0U) +/*! out_int_raw - Raw Mask Synchronized Interrupt + */ +#define ACOMP_IRSR0_OUT_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IRSR0_OUT_INT_RAW_SHIFT)) & ACOMP_IRSR0_OUT_INT_RAW_MASK) +#define ACOMP_IRSR0_OUTA_INT_RAW_MASK (0x2U) +#define ACOMP_IRSR0_OUTA_INT_RAW_SHIFT (1U) +/*! outa_int_raw - Raw Mask Asynchronized Interrupt + */ +#define ACOMP_IRSR0_OUTA_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IRSR0_OUTA_INT_RAW_SHIFT)) & ACOMP_IRSR0_OUTA_INT_RAW_MASK) +/*! @} */ + +/*! @name IRSR1 - ACOMP1 Interrupt Raw Status Register */ +/*! @{ */ +#define ACOMP_IRSR1_OUT_INT_RAW_MASK (0x1U) +#define ACOMP_IRSR1_OUT_INT_RAW_SHIFT (0U) +/*! out_int_raw - Raw Mask Synchronized Interrupt + */ +#define ACOMP_IRSR1_OUT_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IRSR1_OUT_INT_RAW_SHIFT)) & ACOMP_IRSR1_OUT_INT_RAW_MASK) +#define ACOMP_IRSR1_OUTA_INT_RAW_MASK (0x2U) +#define ACOMP_IRSR1_OUTA_INT_RAW_SHIFT (1U) +/*! outa_int_raw - Raw Mask Asynchronized Interrupt + */ +#define ACOMP_IRSR1_OUTA_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_IRSR1_OUTA_INT_RAW_SHIFT)) & ACOMP_IRSR1_OUTA_INT_RAW_MASK) +/*! @} */ + +/*! @name ICR0 - ACOMP0 Interrupt Clear Register */ +/*! @{ */ +#define ACOMP_ICR0_OUT_INT_CLR_MASK (0x1U) +#define ACOMP_ICR0_OUT_INT_CLR_SHIFT (0U) +/*! out_int_clr - ACOMP0 syncrhonized output interrupt flag clear signal. + */ +#define ACOMP_ICR0_OUT_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ICR0_OUT_INT_CLR_SHIFT)) & ACOMP_ICR0_OUT_INT_CLR_MASK) +#define ACOMP_ICR0_OUTA_INT_CLR_MASK (0x2U) +#define ACOMP_ICR0_OUTA_INT_CLR_SHIFT (1U) +/*! outa_int_clr - ACOMP0 asyncrhonized output interrupt flag clear signal. + */ +#define ACOMP_ICR0_OUTA_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ICR0_OUTA_INT_CLR_SHIFT)) & ACOMP_ICR0_OUTA_INT_CLR_MASK) +/*! @} */ + +/*! @name ICR1 - ACOMP1 Interrupt Clear Register */ +/*! @{ */ +#define ACOMP_ICR1_OUT_INT_CLR_MASK (0x1U) +#define ACOMP_ICR1_OUT_INT_CLR_SHIFT (0U) +/*! out_int_clr - ACOMP1 syncrhonized output interrupt flag clear signal. + */ +#define ACOMP_ICR1_OUT_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ICR1_OUT_INT_CLR_SHIFT)) & ACOMP_ICR1_OUT_INT_CLR_MASK) +#define ACOMP_ICR1_OUTA_INT_CLR_MASK (0x2U) +#define ACOMP_ICR1_OUTA_INT_CLR_SHIFT (1U) +/*! outa_int_clr - ACOMP1 asyncrhonized output interrupt flag clear signal. + */ +#define ACOMP_ICR1_OUTA_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_ICR1_OUTA_INT_CLR_SHIFT)) & ACOMP_ICR1_OUTA_INT_CLR_MASK) +/*! @} */ + +/*! @name RST0 - ACOMP0 Soft Reset Register */ +/*! @{ */ +#define ACOMP_RST0_SOFT_RST_MASK (0x1U) +#define ACOMP_RST0_SOFT_RST_SHIFT (0U) +/*! soft_rst - Soft Reset for ACOMP0 (active high) + * 0b0..no action + * 0b1.. + */ +#define ACOMP_RST0_SOFT_RST(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_RST0_SOFT_RST_SHIFT)) & ACOMP_RST0_SOFT_RST_MASK) +/*! @} */ + +/*! @name RST1 - ACOMP1 Soft Reset Register */ +/*! @{ */ +#define ACOMP_RST1_SOFT_RST_MASK (0x1U) +#define ACOMP_RST1_SOFT_RST_SHIFT (0U) +/*! soft_rst - Soft Reset for ACOMP1 (active high) + * 0b0..no action + * 0b1.. + */ +#define ACOMP_RST1_SOFT_RST(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_RST1_SOFT_RST_SHIFT)) & ACOMP_RST1_SOFT_RST_MASK) +/*! @} */ + +/*! @name CLK - Clock Register */ +/*! @{ */ +#define ACOMP_CLK_SOFT_CLK_RST_MASK (0x2U) +#define ACOMP_CLK_SOFT_CLK_RST_SHIFT (1U) +/*! soft_clk_rst - soft reset for clock divider + * 0b0..no action + * 0b1.. + */ +#define ACOMP_CLK_SOFT_CLK_RST(x) (((uint32_t)(((uint32_t)(x)) << ACOMP_CLK_SOFT_CLK_RST_SHIFT)) & ACOMP_CLK_SOFT_CLK_RST_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group ACOMP_Register_Masks */ + + +/* ACOMP - Peripheral instance base addresses */ +/** Peripheral ACOMP base address */ +#define ACOMP_BASE (0x460B0400u) +/** Peripheral ACOMP base pointer */ +#define ACOMP ((ACOMP_Type *)ACOMP_BASE) +/** Array initializer of ACOMP peripheral base addresses */ +#define ACOMP_BASE_ADDRS { ACOMP_BASE } +/** Array initializer of ACOMP peripheral base pointers */ +#define ACOMP_BASE_PTRS { ACOMP } +/** Interrupt vectors for the ACOMP peripheral type */ +#define ACOMP_FUNC_IRQS { ACOMP_IRQn } +#define ACOMP_WAKE_IRQS { ACOMP_WAKEUP_IRQn } + +/*! + * @} + */ /* end of group ACOMP_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- ADC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ADC_Peripheral_Access_Layer ADC Peripheral Access Layer + * @{ + */ + +/** ADC - Register Layout Typedef */ +typedef struct { + __IO uint32_t ADC_REG_CMD; /**< , offset: 0x0 */ + __IO uint32_t ADC_REG_GENERAL; /**< , offset: 0x4 */ + __IO uint32_t ADC_REG_CONFIG; /**< , offset: 0x8 */ + __IO uint32_t ADC_REG_INTERVAL; /**< , offset: 0xC */ + __IO uint32_t ADC_REG_ANA; /**< , offset: 0x10 */ + uint8_t RESERVED_0[4]; + __IO uint32_t ADC_REG_SCN1; /**< adc converation sequence 1, offset: 0x18 */ + __IO uint32_t ADC_REG_SCN2; /**< adc converation sequence 2, offset: 0x1C */ + __IO uint32_t ADC_REG_RESULT_BUF; /**< , offset: 0x20 */ + uint8_t RESERVED_1[4]; + __IO uint32_t ADC_REG_DMAR; /**< , offset: 0x28 */ + __I uint32_t ADC_REG_STATUS; /**< , offset: 0x2C */ + __I uint32_t ADC_REG_ISR; /**< , offset: 0x30 */ + __IO uint32_t ADC_REG_IMR; /**< , offset: 0x34 */ + __I uint32_t ADC_REG_IRSR; /**< , offset: 0x38 */ + __IO uint32_t ADC_REG_ICR; /**< , offset: 0x3C */ + uint8_t RESERVED_2[4]; + __I uint32_t ADC_REG_RESULT; /**< , offset: 0x44 */ + __I uint32_t ADC_REG_RAW_RESULT; /**< , offset: 0x48 */ + __IO uint32_t ADC_REG_OFFSET_CAL; /**< , offset: 0x4C */ + __IO uint32_t ADC_REG_GAIN_CAL; /**< , offset: 0x50 */ + __IO uint32_t ADC_REG_TEST; /**< , offset: 0x54 */ + __IO uint32_t ADC_REG_AUDIO; /**< , offset: 0x58 */ + __IO uint32_t ADC_REG_VOICE_DET; /**< , offset: 0x5C */ + __IO uint32_t ADC_REG_RSVD; /**< , offset: 0x60 */ +} ADC_Type; + +/* ---------------------------------------------------------------------------- + -- ADC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ADC_Register_Masks ADC Register Masks + * @{ + */ + +/*! @name ADC_REG_CMD - */ +/*! @{ */ +#define ADC_ADC_REG_CMD_CONV_START_MASK (0x1U) +#define ADC_ADC_REG_CMD_CONV_START_SHIFT (0U) +/*! conv_start - converaion control bit. + * 0b0..stop converation + * 0b1..start converation. This will clear the FIFO. + */ +#define ADC_ADC_REG_CMD_CONV_START(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CMD_CONV_START_SHIFT)) & ADC_ADC_REG_CMD_CONV_START_MASK) +#define ADC_ADC_REG_CMD_SOFT_RST_MASK (0x2U) +#define ADC_ADC_REG_CMD_SOFT_RST_SHIFT (1U) +/*! soft_rst - user reset the whole block + */ +#define ADC_ADC_REG_CMD_SOFT_RST(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CMD_SOFT_RST_SHIFT)) & ADC_ADC_REG_CMD_SOFT_RST_MASK) +#define ADC_ADC_REG_CMD_SOFT_CLK_RST_MASK (0x4U) +#define ADC_ADC_REG_CMD_SOFT_CLK_RST_SHIFT (2U) +/*! soft_clk_rst - user reset clock + */ +#define ADC_ADC_REG_CMD_SOFT_CLK_RST(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CMD_SOFT_CLK_RST_SHIFT)) & ADC_ADC_REG_CMD_SOFT_CLK_RST_MASK) +/*! @} */ + +/*! @name ADC_REG_GENERAL - */ +/*! @{ */ +#define ADC_ADC_REG_GENERAL_GPADC_MASTER_MASK (0x1U) +#define ADC_ADC_REG_GENERAL_GPADC_MASTER_SHIFT (0U) +/*! gpadc_master - play as master or slave in dual mode, master is the only controller of when slave start + * 0b0..ADC is slave + * 0b1..ADC is master + */ +#define ADC_ADC_REG_GENERAL_GPADC_MASTER(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GENERAL_GPADC_MASTER_SHIFT)) & ADC_ADC_REG_GENERAL_GPADC_MASTER_MASK) +#define ADC_ADC_REG_GENERAL_GLOBAL_EN_MASK (0x2U) +#define ADC_ADC_REG_GENERAL_GLOBAL_EN_SHIFT (1U) +/*! global_en - ADC enable/disable + */ +#define ADC_ADC_REG_GENERAL_GLOBAL_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GENERAL_GLOBAL_EN_SHIFT)) & ADC_ADC_REG_GENERAL_GLOBAL_EN_MASK) +#define ADC_ADC_REG_GENERAL_FORCE_CLK_ON_MASK (0x4U) +#define ADC_ADC_REG_GENERAL_FORCE_CLK_ON_SHIFT (2U) +/*! force_clk_on - override the gpadc_mclk_en from outside + * 0b0..clock disable + * 0b1..clock enable + */ +#define ADC_ADC_REG_GENERAL_FORCE_CLK_ON(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GENERAL_FORCE_CLK_ON_SHIFT)) & ADC_ADC_REG_GENERAL_FORCE_CLK_ON_MASK) +#define ADC_ADC_REG_GENERAL_CLK_ANA64M_INV_MASK (0x8U) +#define ADC_ADC_REG_GENERAL_CLK_ANA64M_INV_SHIFT (3U) +/*! clk_ana64M_inv - analog clock 64M inverted + */ +#define ADC_ADC_REG_GENERAL_CLK_ANA64M_INV(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GENERAL_CLK_ANA64M_INV_SHIFT)) & ADC_ADC_REG_GENERAL_CLK_ANA64M_INV_MASK) +#define ADC_ADC_REG_GENERAL_CLK_ANA2M_INV_MASK (0x10U) +#define ADC_ADC_REG_GENERAL_CLK_ANA2M_INV_SHIFT (4U) +/*! clk_ana2M_inv - analog clock 2M inverted + */ +#define ADC_ADC_REG_GENERAL_CLK_ANA2M_INV(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GENERAL_CLK_ANA2M_INV_SHIFT)) & ADC_ADC_REG_GENERAL_CLK_ANA2M_INV_MASK) +#define ADC_ADC_REG_GENERAL_ADC_CAL_EN_MASK (0x20U) +#define ADC_ADC_REG_GENERAL_ADC_CAL_EN_SHIFT (5U) +/*! adc_cal_en - calibration enable, auto cleared after calibration done + */ +#define ADC_ADC_REG_GENERAL_ADC_CAL_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GENERAL_ADC_CAL_EN_SHIFT)) & ADC_ADC_REG_GENERAL_ADC_CAL_EN_MASK) +#define ADC_ADC_REG_GENERAL_CLK_DIV_RATIO_MASK (0x3F00U) +#define ADC_ADC_REG_GENERAL_CLK_DIV_RATIO_SHIFT (8U) +/*! clk_div_ratio - analog 64M clock division ratio + */ +#define ADC_ADC_REG_GENERAL_CLK_DIV_RATIO(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GENERAL_CLK_DIV_RATIO_SHIFT)) & ADC_ADC_REG_GENERAL_CLK_DIV_RATIO_MASK) +/*! @} */ + +/*! @name ADC_REG_CONFIG - */ +/*! @{ */ +#define ADC_ADC_REG_CONFIG_TRIGGER_SEL_MASK (0xFU) +#define ADC_ADC_REG_CONFIG_TRIGGER_SEL_SHIFT (0U) +/*! trigger_sel - External trigger source select bits + */ +#define ADC_ADC_REG_CONFIG_TRIGGER_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_TRIGGER_SEL_SHIFT)) & ADC_ADC_REG_CONFIG_TRIGGER_SEL_MASK) +#define ADC_ADC_REG_CONFIG_TRIGGER_EN_MASK (0x10U) +#define ADC_ADC_REG_CONFIG_TRIGGER_EN_SHIFT (4U) +/*! trigger_en - External elevel trigger enable bit, support gpadc_trigger/gpadc_data_valid handshake + * 0b0.. + * 0b1..conversion start further controlled by external level signal + */ +#define ADC_ADC_REG_CONFIG_TRIGGER_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_TRIGGER_EN_SHIFT)) & ADC_ADC_REG_CONFIG_TRIGGER_EN_MASK) +#define ADC_ADC_REG_CONFIG_DUAL_MODE_MASK (0x20U) +#define ADC_ADC_REG_CONFIG_DUAL_MODE_SHIFT (5U) +/*! dual_mode - dual mode select + * 0b0..simultaneous mode + * 0b1..interleave mode + */ +#define ADC_ADC_REG_CONFIG_DUAL_MODE(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_DUAL_MODE_SHIFT)) & ADC_ADC_REG_CONFIG_DUAL_MODE_MASK) +#define ADC_ADC_REG_CONFIG_SINGLE_DUAL_MASK (0x40U) +#define ADC_ADC_REG_CONFIG_SINGLE_DUAL_SHIFT (6U) +/*! single_dual - work mode select + * 0b0..independent mode + * 0b1..dual mode + */ +#define ADC_ADC_REG_CONFIG_SINGLE_DUAL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_SINGLE_DUAL_SHIFT)) & ADC_ADC_REG_CONFIG_SINGLE_DUAL_MASK) +#define ADC_ADC_REG_CONFIG_CONT_CONV_EN_MASK (0x100U) +#define ADC_ADC_REG_CONFIG_CONT_CONV_EN_SHIFT (8U) +/*! cont_conv_en - To enable continuous conversion + * 0b0..one shot conversion + * 0b1..continuous conversion + */ +#define ADC_ADC_REG_CONFIG_CONT_CONV_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_CONT_CONV_EN_SHIFT)) & ADC_ADC_REG_CONFIG_CONT_CONV_EN_MASK) +#define ADC_ADC_REG_CONFIG_DATA_FORMAT_SEL_MASK (0x200U) +#define ADC_ADC_REG_CONFIG_DATA_FORMAT_SEL_SHIFT (9U) +/*! data_format_sel - set data format for the final data + * 0b0..signed differential code in two's complement + * 0b1..unsigned single-end code + */ +#define ADC_ADC_REG_CONFIG_DATA_FORMAT_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_DATA_FORMAT_SEL_SHIFT)) & ADC_ADC_REG_CONFIG_DATA_FORMAT_SEL_MASK) +#define ADC_ADC_REG_CONFIG_CAL_VREF_SEL_MASK (0x400U) +#define ADC_ADC_REG_CONFIG_CAL_VREF_SEL_SHIFT (10U) +/*! cal_vref_sel - select input reference channel for gain calibration + * 0b0..select internal vref as input for calibration + * 0b1..select external vref as input for calibration + */ +#define ADC_ADC_REG_CONFIG_CAL_VREF_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_CAL_VREF_SEL_SHIFT)) & ADC_ADC_REG_CONFIG_CAL_VREF_SEL_MASK) +#define ADC_ADC_REG_CONFIG_CAL_DATA_RST_MASK (0x800U) +#define ADC_ADC_REG_CONFIG_CAL_DATA_RST_SHIFT (11U) +/*! cal_data_rst - reset the self calibration data. + * 0b0..no reset + * 0b1.. + */ +#define ADC_ADC_REG_CONFIG_CAL_DATA_RST(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_CAL_DATA_RST_SHIFT)) & ADC_ADC_REG_CONFIG_CAL_DATA_RST_MASK) +#define ADC_ADC_REG_CONFIG_CAL_DATA_SEL_MASK (0x1000U) +#define ADC_ADC_REG_CONFIG_CAL_DATA_SEL_SHIFT (12U) +/*! cal_data_sel - select calibration data source. + * 0b0..use self calibration data + * 0b1..user user defined calibration data + */ +#define ADC_ADC_REG_CONFIG_CAL_DATA_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_CAL_DATA_SEL_SHIFT)) & ADC_ADC_REG_CONFIG_CAL_DATA_SEL_MASK) +#define ADC_ADC_REG_CONFIG_AVG_SEL_MASK (0xE000U) +#define ADC_ADC_REG_CONFIG_AVG_SEL_SHIFT (13U) +/*! avg_sel - moving average length + */ +#define ADC_ADC_REG_CONFIG_AVG_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_AVG_SEL_SHIFT)) & ADC_ADC_REG_CONFIG_AVG_SEL_MASK) +#define ADC_ADC_REG_CONFIG_SCAN_LENGTH_MASK (0xF0000U) +#define ADC_ADC_REG_CONFIG_SCAN_LENGTH_SHIFT (16U) +/*! scan_length - scan converation length, actual length is scan_length+1. + */ +#define ADC_ADC_REG_CONFIG_SCAN_LENGTH(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_SCAN_LENGTH_SHIFT)) & ADC_ADC_REG_CONFIG_SCAN_LENGTH_MASK) +#define ADC_ADC_REG_CONFIG_PWR_MODE_MASK (0x100000U) +#define ADC_ADC_REG_CONFIG_PWR_MODE_SHIFT (20U) +/*! pwr_mode - ADC power mode select. + * 0b0..Power mode 0. Analog biasing and reference block are powered up when both global_en and gpadc_conv_start is 1 + * 0b1..Power mode 1. Analog biasing and reference block are powered up once gpadc_global_en is 1 + */ +#define ADC_ADC_REG_CONFIG_PWR_MODE(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_CONFIG_PWR_MODE_SHIFT)) & ADC_ADC_REG_CONFIG_PWR_MODE_MASK) +/*! @} */ + +/*! @name ADC_REG_INTERVAL - */ +/*! @{ */ +#define ADC_ADC_REG_INTERVAL_WARMUP_TIME_MASK (0x1FU) +#define ADC_ADC_REG_INTERVAL_WARMUP_TIME_SHIFT (0U) +/*! Warmup_time - warmup time, should be set equal to or higher than 1uS. + * 0b00000..ADC warm-up is 1us + * 0b11111..ADC warm-up is 32us + */ +#define ADC_ADC_REG_INTERVAL_WARMUP_TIME(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_INTERVAL_WARMUP_TIME_SHIFT)) & ADC_ADC_REG_INTERVAL_WARMUP_TIME_MASK) +#define ADC_ADC_REG_INTERVAL_BYPASS_WARMUP_MASK (0x20U) +#define ADC_ADC_REG_INTERVAL_BYPASS_WARMUP_SHIFT (5U) +/*! bypass_warmup - Bypass warmup state inside adc. + * 0b0..adc warmup state enabled (warmup period is controlled by warmup time) + * 0b1..adc warmup state bypassed + */ +#define ADC_ADC_REG_INTERVAL_BYPASS_WARMUP(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_INTERVAL_BYPASS_WARMUP_SHIFT)) & ADC_ADC_REG_INTERVAL_BYPASS_WARMUP_MASK) +/*! @} */ + +/*! @name ADC_REG_ANA - */ +/*! @{ */ +#define ADC_ADC_REG_ANA_TSEXT_SEL_MASK (0x1U) +#define ADC_ADC_REG_ANA_TSEXT_SEL_SHIFT (0U) +/*! tsext_sel - temperature sensor diode select + * 0b0..internal diode mode + * 0b1..external diode mode + */ +#define ADC_ADC_REG_ANA_TSEXT_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_TSEXT_SEL_SHIFT)) & ADC_ADC_REG_ANA_TSEXT_SEL_MASK) +#define ADC_ADC_REG_ANA_TS_EN_MASK (0x2U) +#define ADC_ADC_REG_ANA_TS_EN_SHIFT (1U) +/*! ts_en - temperature sensor enable, only enable when channel source is temperature sensor + * 0b0.. + * 0b1.. + */ +#define ADC_ADC_REG_ANA_TS_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_TS_EN_SHIFT)) & ADC_ADC_REG_ANA_TS_EN_MASK) +#define ADC_ADC_REG_ANA_VREF_SCF_BYPASS_MASK (0x4U) +#define ADC_ADC_REG_ANA_VREF_SCF_BYPASS_SHIFT (2U) +/*! vref_scf_bypass - adc voltage reference buffer sc-filter bypass + * 0b0..not bypass sc-filter + * 0b1..bypass sc-filter + */ +#define ADC_ADC_REG_ANA_VREF_SCF_BYPASS(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_VREF_SCF_BYPASS_SHIFT)) & ADC_ADC_REG_ANA_VREF_SCF_BYPASS_MASK) +#define ADC_ADC_REG_ANA_VREF_CHOP_EN_MASK (0x8U) +#define ADC_ADC_REG_ANA_VREF_CHOP_EN_SHIFT (3U) +/*! vref_chop_en - adc voltage reference buffer chopper enable + * 0b0..disable chopper + * 0b1..enable chopper + */ +#define ADC_ADC_REG_ANA_VREF_CHOP_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_VREF_CHOP_EN_SHIFT)) & ADC_ADC_REG_ANA_VREF_CHOP_EN_MASK) +#define ADC_ADC_REG_ANA_VREF_SEL_MASK (0x30U) +#define ADC_ADC_REG_ANA_VREF_SEL_SHIFT (4U) +/*! vref_sel - adc reference voltage select. + * 0b00..Internal 1.8V vaa + * 0b01..Internal 1.2V bandgap + * 0b10..External single-ended reference (gpadc_ch[3]) + * 0b11..Internal 1.2V bandgap with external bypass pin (gpadc_ch[3]) + */ +#define ADC_ADC_REG_ANA_VREF_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_VREF_SEL_SHIFT)) & ADC_ADC_REG_ANA_VREF_SEL_MASK) +#define ADC_ADC_REG_ANA_SINGLEDIFF_MASK (0x400U) +#define ADC_ADC_REG_ANA_SINGLEDIFF_SHIFT (10U) +/*! Singlediff - Select single ended or differential input. + * 0b0..Single-ended input + * 0b1..Differential input + */ +#define ADC_ADC_REG_ANA_SINGLEDIFF(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_SINGLEDIFF_SHIFT)) & ADC_ADC_REG_ANA_SINGLEDIFF_MASK) +#define ADC_ADC_REG_ANA_INBUF_GAIN_MASK (0x1800U) +#define ADC_ADC_REG_ANA_INBUF_GAIN_SHIFT (11U) +/*! inbuf_gain - adc gain control. Also select input voltage range. + * 0b00..PGA gain is 0.5. Input voltage range is 2*vref + * 0b01..PGA gain is 1. Input voltage range is vref + * 0b10..PGA gain is 2. Input voltage range is 0.5*vref + * 0b11..reserved + */ +#define ADC_ADC_REG_ANA_INBUF_GAIN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_INBUF_GAIN_SHIFT)) & ADC_ADC_REG_ANA_INBUF_GAIN_MASK) +#define ADC_ADC_REG_ANA_INBUF_CHOP_EN_MASK (0x2000U) +#define ADC_ADC_REG_ANA_INBUF_CHOP_EN_SHIFT (13U) +/*! inbuf_chop_en - Input buffer chopper enable + * 0b0..disable chopper + * 0b1..enable chopper + */ +#define ADC_ADC_REG_ANA_INBUF_CHOP_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_INBUF_CHOP_EN_SHIFT)) & ADC_ADC_REG_ANA_INBUF_CHOP_EN_MASK) +#define ADC_ADC_REG_ANA_INBUF_EN_MASK (0x4000U) +#define ADC_ADC_REG_ANA_INBUF_EN_SHIFT (14U) +/*! inbuf_en - gpadc input gain buffer enable bit. + * 0b0..input gain buffer disabled + * 0b1..input gain buffer enabled + */ +#define ADC_ADC_REG_ANA_INBUF_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_INBUF_EN_SHIFT)) & ADC_ADC_REG_ANA_INBUF_EN_MASK) +#define ADC_ADC_REG_ANA_CHOP_EN_MASK (0x8000U) +#define ADC_ADC_REG_ANA_CHOP_EN_SHIFT (15U) +/*! chop_en - adc chopper/auto-zero(only in 12bit mode) enable + * 0b0..disable chopper + * 0b1..enable chopper + */ +#define ADC_ADC_REG_ANA_CHOP_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_CHOP_EN_SHIFT)) & ADC_ADC_REG_ANA_CHOP_EN_MASK) +#define ADC_ADC_REG_ANA_BIAS_SEL_MASK (0x10000U) +#define ADC_ADC_REG_ANA_BIAS_SEL_SHIFT (16U) +/*! bias_sel - adc analog portion low power mode select. Half the biasing current for modulator when enabled. + * 0b0..Full biasing current + * 0b1..Half biasing current + */ +#define ADC_ADC_REG_ANA_BIAS_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_BIAS_SEL_SHIFT)) & ADC_ADC_REG_ANA_BIAS_SEL_MASK) +#define ADC_ADC_REG_ANA_RES_SEL_MASK (0x60000U) +#define ADC_ADC_REG_ANA_RES_SEL_SHIFT (17U) +/*! res_sel - adc resolution/data rate select + */ +#define ADC_ADC_REG_ANA_RES_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ANA_RES_SEL_SHIFT)) & ADC_ADC_REG_ANA_RES_SEL_MASK) +/*! @} */ + +/*! @name ADC_REG_SCN1 - adc converation sequence 1 */ +/*! @{ */ +#define ADC_ADC_REG_SCN1_SCAN_CH_0_MASK (0xFU) +#define ADC_ADC_REG_SCN1_SCAN_CH_0_SHIFT (0U) +/*! scan_ch_0 - amux source 0 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_0(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_0_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_0_MASK) +#define ADC_ADC_REG_SCN1_SCAN_CH_1_MASK (0xF0U) +#define ADC_ADC_REG_SCN1_SCAN_CH_1_SHIFT (4U) +/*! scan_ch_1 - amux source 1 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_1(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_1_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_1_MASK) +#define ADC_ADC_REG_SCN1_SCAN_CH_2_MASK (0xF00U) +#define ADC_ADC_REG_SCN1_SCAN_CH_2_SHIFT (8U) +/*! scan_ch_2 - amux source 2 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_2(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_2_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_2_MASK) +#define ADC_ADC_REG_SCN1_SCAN_CH_3_MASK (0xF000U) +#define ADC_ADC_REG_SCN1_SCAN_CH_3_SHIFT (12U) +/*! scan_ch_3 - amux source 3 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_3(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_3_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_3_MASK) +#define ADC_ADC_REG_SCN1_SCAN_CH_4_MASK (0xF0000U) +#define ADC_ADC_REG_SCN1_SCAN_CH_4_SHIFT (16U) +/*! scan_ch_4 - amux source 4 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_4(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_4_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_4_MASK) +#define ADC_ADC_REG_SCN1_SCAN_CH_5_MASK (0xF00000U) +#define ADC_ADC_REG_SCN1_SCAN_CH_5_SHIFT (20U) +/*! scan_ch_5 - amux source 5 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_5(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_5_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_5_MASK) +#define ADC_ADC_REG_SCN1_SCAN_CH_6_MASK (0xF000000U) +#define ADC_ADC_REG_SCN1_SCAN_CH_6_SHIFT (24U) +/*! scan_ch_6 - amux source 6 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_6(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_6_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_6_MASK) +#define ADC_ADC_REG_SCN1_SCAN_CH_7_MASK (0xF0000000U) +#define ADC_ADC_REG_SCN1_SCAN_CH_7_SHIFT (28U) +/*! scan_ch_7 - amux source 7 + */ +#define ADC_ADC_REG_SCN1_SCAN_CH_7(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN1_SCAN_CH_7_SHIFT)) & ADC_ADC_REG_SCN1_SCAN_CH_7_MASK) +/*! @} */ + +/*! @name ADC_REG_SCN2 - adc converation sequence 2 */ +/*! @{ */ +#define ADC_ADC_REG_SCN2_SCAN_CH_8_MASK (0xFU) +#define ADC_ADC_REG_SCN2_SCAN_CH_8_SHIFT (0U) +/*! scan_ch_8 - amux source 8 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_8(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_8_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_8_MASK) +#define ADC_ADC_REG_SCN2_SCAN_CH_9_MASK (0xF0U) +#define ADC_ADC_REG_SCN2_SCAN_CH_9_SHIFT (4U) +/*! scan_ch_9 - amux source 9 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_9(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_9_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_9_MASK) +#define ADC_ADC_REG_SCN2_SCAN_CH_10_MASK (0xF00U) +#define ADC_ADC_REG_SCN2_SCAN_CH_10_SHIFT (8U) +/*! scan_ch_10 - amux source 10 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_10(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_10_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_10_MASK) +#define ADC_ADC_REG_SCN2_SCAN_CH_11_MASK (0xF000U) +#define ADC_ADC_REG_SCN2_SCAN_CH_11_SHIFT (12U) +/*! scan_ch_11 - amux source 11 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_11(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_11_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_11_MASK) +#define ADC_ADC_REG_SCN2_SCAN_CH_12_MASK (0xF0000U) +#define ADC_ADC_REG_SCN2_SCAN_CH_12_SHIFT (16U) +/*! scan_ch_12 - amux source 12 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_12(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_12_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_12_MASK) +#define ADC_ADC_REG_SCN2_SCAN_CH_13_MASK (0xF00000U) +#define ADC_ADC_REG_SCN2_SCAN_CH_13_SHIFT (20U) +/*! scan_ch_13 - amux source 13 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_13(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_13_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_13_MASK) +#define ADC_ADC_REG_SCN2_SCAN_CH_14_MASK (0xF000000U) +#define ADC_ADC_REG_SCN2_SCAN_CH_14_SHIFT (24U) +/*! scan_ch_14 - amux source 14 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_14(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_14_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_14_MASK) +#define ADC_ADC_REG_SCN2_SCAN_CH_15_MASK (0xF0000000U) +#define ADC_ADC_REG_SCN2_SCAN_CH_15_SHIFT (28U) +/*! scan_ch_15 - amux source 15 + */ +#define ADC_ADC_REG_SCN2_SCAN_CH_15(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_SCN2_SCAN_CH_15_SHIFT)) & ADC_ADC_REG_SCN2_SCAN_CH_15_MASK) +/*! @} */ + +/*! @name ADC_REG_RESULT_BUF - */ +/*! @{ */ +#define ADC_ADC_REG_RESULT_BUF_WIDTH_SEL_MASK (0x1U) +#define ADC_ADC_REG_RESULT_BUF_WIDTH_SEL_SHIFT (0U) +/*! width_sel - adc finial result fifo data packed format select, must set scan_length as even when choose 32-bits + * 0b0..16-bits and adc_reg_result fifo is lower 16-bits effective + * 0b1..32-bits and adc_reg_result fifo is 32-bits effective + */ +#define ADC_ADC_REG_RESULT_BUF_WIDTH_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_RESULT_BUF_WIDTH_SEL_SHIFT)) & ADC_ADC_REG_RESULT_BUF_WIDTH_SEL_MASK) +/*! @} */ + +/*! @name ADC_REG_DMAR - */ +/*! @{ */ +#define ADC_ADC_REG_DMAR_DMA_EN_MASK (0x1U) +#define ADC_ADC_REG_DMAR_DMA_EN_SHIFT (0U) +/*! dma_en - dma enbale + * 0b0..disable dma handshake. This will also clear remaining dma request to system dmac + * 0b1..enable dma handshake. Must enable after conv_start is asserted to ensure FIFO is cleared. + */ +#define ADC_ADC_REG_DMAR_DMA_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_DMAR_DMA_EN_SHIFT)) & ADC_ADC_REG_DMAR_DMA_EN_MASK) +#define ADC_ADC_REG_DMAR_FIFO_THL_MASK (0x6U) +#define ADC_ADC_REG_DMAR_FIFO_THL_SHIFT (1U) +/*! fifo_thl - fifo threshold + * 0b00..1 data + * 0b01..4 data + * 0b10..8 data + * 0b11..16 data + */ +#define ADC_ADC_REG_DMAR_FIFO_THL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_DMAR_FIFO_THL_SHIFT)) & ADC_ADC_REG_DMAR_FIFO_THL_MASK) +/*! @} */ + +/*! @name ADC_REG_STATUS - */ +/*! @{ */ +#define ADC_ADC_REG_STATUS_ACT_MASK (0x1U) +#define ADC_ADC_REG_STATUS_ACT_SHIFT (0U) +/*! act - adc status + * 0b0..ADC converstion inactive status + * 0b1..ADC conversion active status + */ +#define ADC_ADC_REG_STATUS_ACT(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_STATUS_ACT_SHIFT)) & ADC_ADC_REG_STATUS_ACT_MASK) +#define ADC_ADC_REG_STATUS_FIFO_NE_MASK (0x2U) +#define ADC_ADC_REG_STATUS_FIFO_NE_SHIFT (1U) +/*! fifo_ne - fifo not empty status + */ +#define ADC_ADC_REG_STATUS_FIFO_NE(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_STATUS_FIFO_NE_SHIFT)) & ADC_ADC_REG_STATUS_FIFO_NE_MASK) +#define ADC_ADC_REG_STATUS_FIFO_FULL_MASK (0x4U) +#define ADC_ADC_REG_STATUS_FIFO_FULL_SHIFT (2U) +/*! fifo_full - fifo full status + */ +#define ADC_ADC_REG_STATUS_FIFO_FULL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_STATUS_FIFO_FULL_SHIFT)) & ADC_ADC_REG_STATUS_FIFO_FULL_MASK) +#define ADC_ADC_REG_STATUS_FIFO_DATA_COUNT_MASK (0x1F8U) +#define ADC_ADC_REG_STATUS_FIFO_DATA_COUNT_SHIFT (3U) +/*! fifo_data_count - fifo data number + */ +#define ADC_ADC_REG_STATUS_FIFO_DATA_COUNT(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_STATUS_FIFO_DATA_COUNT_SHIFT)) & ADC_ADC_REG_STATUS_FIFO_DATA_COUNT_MASK) +/*! @} */ + +/*! @name ADC_REG_ISR - */ +/*! @{ */ +#define ADC_ADC_REG_ISR_RDY_MASK (0x1U) +#define ADC_ADC_REG_ISR_RDY_SHIFT (0U) +/*! rdy - Conversion data ready interrupt flag + */ +#define ADC_ADC_REG_ISR_RDY(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ISR_RDY_SHIFT)) & ADC_ADC_REG_ISR_RDY_MASK) +#define ADC_ADC_REG_ISR_GAINSAT_MASK (0x2U) +#define ADC_ADC_REG_ISR_GAINSAT_SHIFT (1U) +/*! gainsat - Gain correction saturation interrupt flag + */ +#define ADC_ADC_REG_ISR_GAINSAT(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ISR_GAINSAT_SHIFT)) & ADC_ADC_REG_ISR_GAINSAT_MASK) +#define ADC_ADC_REG_ISR_OFFSAT_MASK (0x4U) +#define ADC_ADC_REG_ISR_OFFSAT_SHIFT (2U) +/*! offsat - Offset correction saturation interrupt flag + */ +#define ADC_ADC_REG_ISR_OFFSAT(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ISR_OFFSAT_SHIFT)) & ADC_ADC_REG_ISR_OFFSAT_MASK) +#define ADC_ADC_REG_ISR_DATASAT_NEG_MASK (0x8U) +#define ADC_ADC_REG_ISR_DATASAT_NEG_SHIFT (3U) +/*! datasat_neg - ADC data negative side saturation interrupt flag + */ +#define ADC_ADC_REG_ISR_DATASAT_NEG(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ISR_DATASAT_NEG_SHIFT)) & ADC_ADC_REG_ISR_DATASAT_NEG_MASK) +#define ADC_ADC_REG_ISR_DATASAT_POS_MASK (0x10U) +#define ADC_ADC_REG_ISR_DATASAT_POS_SHIFT (4U) +/*! datasat_pos - ADC data positive side saturation interrupt flag + */ +#define ADC_ADC_REG_ISR_DATASAT_POS(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ISR_DATASAT_POS_SHIFT)) & ADC_ADC_REG_ISR_DATASAT_POS_MASK) +#define ADC_ADC_REG_ISR_FIFO_OVERRUN_MASK (0x20U) +#define ADC_ADC_REG_ISR_FIFO_OVERRUN_SHIFT (5U) +/*! fifo_overrun - FIFO overrun interrupt flag + */ +#define ADC_ADC_REG_ISR_FIFO_OVERRUN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ISR_FIFO_OVERRUN_SHIFT)) & ADC_ADC_REG_ISR_FIFO_OVERRUN_MASK) +#define ADC_ADC_REG_ISR_FIFO_UNDERRUN_MASK (0x40U) +#define ADC_ADC_REG_ISR_FIFO_UNDERRUN_SHIFT (6U) +/*! fifo_underrun - FIFO underrun interrupt flag + */ +#define ADC_ADC_REG_ISR_FIFO_UNDERRUN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ISR_FIFO_UNDERRUN_SHIFT)) & ADC_ADC_REG_ISR_FIFO_UNDERRUN_MASK) +/*! @} */ + +/*! @name ADC_REG_IMR - */ +/*! @{ */ +#define ADC_ADC_REG_IMR_RDY_MASK_MASK (0x1U) +#define ADC_ADC_REG_IMR_RDY_MASK_SHIFT (0U) +/*! rdy_mask - write 1 mask + */ +#define ADC_ADC_REG_IMR_RDY_MASK(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IMR_RDY_MASK_SHIFT)) & ADC_ADC_REG_IMR_RDY_MASK_MASK) +#define ADC_ADC_REG_IMR_GAINSAT_MASK_MASK (0x2U) +#define ADC_ADC_REG_IMR_GAINSAT_MASK_SHIFT (1U) +/*! gainsat_mask - write 1 mask + */ +#define ADC_ADC_REG_IMR_GAINSAT_MASK(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IMR_GAINSAT_MASK_SHIFT)) & ADC_ADC_REG_IMR_GAINSAT_MASK_MASK) +#define ADC_ADC_REG_IMR_OFFSAT_MASK_MASK (0x4U) +#define ADC_ADC_REG_IMR_OFFSAT_MASK_SHIFT (2U) +/*! offsat_mask - write 1 mask + */ +#define ADC_ADC_REG_IMR_OFFSAT_MASK(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IMR_OFFSAT_MASK_SHIFT)) & ADC_ADC_REG_IMR_OFFSAT_MASK_MASK) +#define ADC_ADC_REG_IMR_DATASAT_NEG_MASK_MASK (0x8U) +#define ADC_ADC_REG_IMR_DATASAT_NEG_MASK_SHIFT (3U) +/*! datasat_neg_mask - write 1 mask + */ +#define ADC_ADC_REG_IMR_DATASAT_NEG_MASK(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IMR_DATASAT_NEG_MASK_SHIFT)) & ADC_ADC_REG_IMR_DATASAT_NEG_MASK_MASK) +#define ADC_ADC_REG_IMR_DATASAT_POS_MASK_MASK (0x10U) +#define ADC_ADC_REG_IMR_DATASAT_POS_MASK_SHIFT (4U) +/*! datasat_pos_mask - write 1 mask + */ +#define ADC_ADC_REG_IMR_DATASAT_POS_MASK(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IMR_DATASAT_POS_MASK_SHIFT)) & ADC_ADC_REG_IMR_DATASAT_POS_MASK_MASK) +#define ADC_ADC_REG_IMR_FIFO_OVERRUN_MASK_MASK (0x20U) +#define ADC_ADC_REG_IMR_FIFO_OVERRUN_MASK_SHIFT (5U) +/*! fifo_overrun_mask - write 1 mask + */ +#define ADC_ADC_REG_IMR_FIFO_OVERRUN_MASK(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IMR_FIFO_OVERRUN_MASK_SHIFT)) & ADC_ADC_REG_IMR_FIFO_OVERRUN_MASK_MASK) +#define ADC_ADC_REG_IMR_FIFO_UNDERRUN_MASK_MASK (0x40U) +#define ADC_ADC_REG_IMR_FIFO_UNDERRUN_MASK_SHIFT (6U) +/*! fifo_underrun_mask - write 1 mask + */ +#define ADC_ADC_REG_IMR_FIFO_UNDERRUN_MASK(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IMR_FIFO_UNDERRUN_MASK_SHIFT)) & ADC_ADC_REG_IMR_FIFO_UNDERRUN_MASK_MASK) +/*! @} */ + +/*! @name ADC_REG_IRSR - */ +/*! @{ */ +#define ADC_ADC_REG_IRSR_RDY_RAW_MASK (0x1U) +#define ADC_ADC_REG_IRSR_RDY_RAW_SHIFT (0U) +/*! rdy_raw - The corresponding flag will be captured into this register regardless the interrupt + * mask. Will be cleared only when int_clr is asserted. + */ +#define ADC_ADC_REG_IRSR_RDY_RAW(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IRSR_RDY_RAW_SHIFT)) & ADC_ADC_REG_IRSR_RDY_RAW_MASK) +#define ADC_ADC_REG_IRSR_GAINSAT_RAW_MASK (0x2U) +#define ADC_ADC_REG_IRSR_GAINSAT_RAW_SHIFT (1U) +/*! gainsat_raw - The corresponding flag will be captured into this register regardless the + * interrupt mask. Will be cleared only when int_clr is asserted. + */ +#define ADC_ADC_REG_IRSR_GAINSAT_RAW(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IRSR_GAINSAT_RAW_SHIFT)) & ADC_ADC_REG_IRSR_GAINSAT_RAW_MASK) +#define ADC_ADC_REG_IRSR_OFFSAT_RAW_MASK (0x4U) +#define ADC_ADC_REG_IRSR_OFFSAT_RAW_SHIFT (2U) +/*! offsat_raw - The corresponding flag will be captured into this register regardless the interrupt + * mask. Will be cleared only when int_clr is asserted. + */ +#define ADC_ADC_REG_IRSR_OFFSAT_RAW(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IRSR_OFFSAT_RAW_SHIFT)) & ADC_ADC_REG_IRSR_OFFSAT_RAW_MASK) +#define ADC_ADC_REG_IRSR_DATASAT_NEG_RAW_MASK (0x8U) +#define ADC_ADC_REG_IRSR_DATASAT_NEG_RAW_SHIFT (3U) +/*! datasat_neg_raw - The corresponding flag will be captured into this register regardless the + * interrupt mask. Will be cleared only when int_clr is asserted. + */ +#define ADC_ADC_REG_IRSR_DATASAT_NEG_RAW(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IRSR_DATASAT_NEG_RAW_SHIFT)) & ADC_ADC_REG_IRSR_DATASAT_NEG_RAW_MASK) +#define ADC_ADC_REG_IRSR_DATASAT_POS_RAW_MASK (0x10U) +#define ADC_ADC_REG_IRSR_DATASAT_POS_RAW_SHIFT (4U) +/*! datasat_pos_raw - The corresponding flag will be captured into this register regardless the + * interrupt mask. Will be cleared only when int_clr is asserted. + */ +#define ADC_ADC_REG_IRSR_DATASAT_POS_RAW(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IRSR_DATASAT_POS_RAW_SHIFT)) & ADC_ADC_REG_IRSR_DATASAT_POS_RAW_MASK) +#define ADC_ADC_REG_IRSR_FIFO_OVERRUN_RAW_MASK (0x20U) +#define ADC_ADC_REG_IRSR_FIFO_OVERRUN_RAW_SHIFT (5U) +/*! fifo_overrun_raw - The corresponding flag will be captured into this register regardless the + * interrupt mask. Will be cleared only when int_clr is asserted. + */ +#define ADC_ADC_REG_IRSR_FIFO_OVERRUN_RAW(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IRSR_FIFO_OVERRUN_RAW_SHIFT)) & ADC_ADC_REG_IRSR_FIFO_OVERRUN_RAW_MASK) +#define ADC_ADC_REG_IRSR_FIFO_UNDERRUN_RAW_MASK (0x40U) +#define ADC_ADC_REG_IRSR_FIFO_UNDERRUN_RAW_SHIFT (6U) +/*! fifo_underrun_raw - The corresponding flag will be captured into this register regardless the + * interrupt mask. Will be cleared only when int_clr is asserted. + */ +#define ADC_ADC_REG_IRSR_FIFO_UNDERRUN_RAW(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_IRSR_FIFO_UNDERRUN_RAW_SHIFT)) & ADC_ADC_REG_IRSR_FIFO_UNDERRUN_RAW_MASK) +/*! @} */ + +/*! @name ADC_REG_ICR - */ +/*! @{ */ +#define ADC_ADC_REG_ICR_RDY_CLR_MASK (0x1U) +#define ADC_ADC_REG_ICR_RDY_CLR_SHIFT (0U) +/*! rdy_clr - Write 1 to clear both adc_reg_irsr and adc_reg_isr + */ +#define ADC_ADC_REG_ICR_RDY_CLR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ICR_RDY_CLR_SHIFT)) & ADC_ADC_REG_ICR_RDY_CLR_MASK) +#define ADC_ADC_REG_ICR_GAINSAT_CLR_MASK (0x2U) +#define ADC_ADC_REG_ICR_GAINSAT_CLR_SHIFT (1U) +/*! gainsat_clr - Write 1 to clear both adc_reg_irsr and adc_reg_isr + */ +#define ADC_ADC_REG_ICR_GAINSAT_CLR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ICR_GAINSAT_CLR_SHIFT)) & ADC_ADC_REG_ICR_GAINSAT_CLR_MASK) +#define ADC_ADC_REG_ICR_OFFSAT_CLR_MASK (0x4U) +#define ADC_ADC_REG_ICR_OFFSAT_CLR_SHIFT (2U) +/*! offsat_clr - Write 1 to clear both adc_reg_irsr and adc_reg_isr + */ +#define ADC_ADC_REG_ICR_OFFSAT_CLR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ICR_OFFSAT_CLR_SHIFT)) & ADC_ADC_REG_ICR_OFFSAT_CLR_MASK) +#define ADC_ADC_REG_ICR_DATASAT_NEG_CLR_MASK (0x8U) +#define ADC_ADC_REG_ICR_DATASAT_NEG_CLR_SHIFT (3U) +/*! datasat_neg_clr - Write 1 to clear both adc_reg_irsr and adc_reg_isr + */ +#define ADC_ADC_REG_ICR_DATASAT_NEG_CLR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ICR_DATASAT_NEG_CLR_SHIFT)) & ADC_ADC_REG_ICR_DATASAT_NEG_CLR_MASK) +#define ADC_ADC_REG_ICR_DATASAT_POS_CLR_MASK (0x10U) +#define ADC_ADC_REG_ICR_DATASAT_POS_CLR_SHIFT (4U) +/*! datasat_pos_clr - Write 1 to clear both adc_reg_irsr and adc_reg_isr + */ +#define ADC_ADC_REG_ICR_DATASAT_POS_CLR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ICR_DATASAT_POS_CLR_SHIFT)) & ADC_ADC_REG_ICR_DATASAT_POS_CLR_MASK) +#define ADC_ADC_REG_ICR_FIFO_OVERRUN_CLR_MASK (0x20U) +#define ADC_ADC_REG_ICR_FIFO_OVERRUN_CLR_SHIFT (5U) +/*! fifo_overrun_clr - Write 1 to clear both adc_reg_irsr and adc_reg_isr + */ +#define ADC_ADC_REG_ICR_FIFO_OVERRUN_CLR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ICR_FIFO_OVERRUN_CLR_SHIFT)) & ADC_ADC_REG_ICR_FIFO_OVERRUN_CLR_MASK) +#define ADC_ADC_REG_ICR_FIFO_UNDERRUN_CLR_MASK (0x40U) +#define ADC_ADC_REG_ICR_FIFO_UNDERRUN_CLR_SHIFT (6U) +/*! fifo_underrun_clr - Write 1 to clear both adc_reg_irsr and adc_reg_isr + */ +#define ADC_ADC_REG_ICR_FIFO_UNDERRUN_CLR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_ICR_FIFO_UNDERRUN_CLR_SHIFT)) & ADC_ADC_REG_ICR_FIFO_UNDERRUN_CLR_MASK) +/*! @} */ + +/*! @name ADC_REG_RESULT - */ +/*! @{ */ +#define ADC_ADC_REG_RESULT_DATA_MASK (0xFFFFFFFFU) +#define ADC_ADC_REG_RESULT_DATA_SHIFT (0U) +/*! data - ADC finial conversion result data, after calibratiob and signed/unsigned process + */ +#define ADC_ADC_REG_RESULT_DATA(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_RESULT_DATA_SHIFT)) & ADC_ADC_REG_RESULT_DATA_MASK) +/*! @} */ + +/*! @name ADC_REG_RAW_RESULT - */ +/*! @{ */ +#define ADC_ADC_REG_RAW_RESULT_RAW_DATA_MASK (0x3FFFFFU) +#define ADC_ADC_REG_RAW_RESULT_RAW_DATA_SHIFT (0U) +/*! raw_data - ADC Raw data in signed 22bit format + */ +#define ADC_ADC_REG_RAW_RESULT_RAW_DATA(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_RAW_RESULT_RAW_DATA_SHIFT)) & ADC_ADC_REG_RAW_RESULT_RAW_DATA_MASK) +/*! @} */ + +/*! @name ADC_REG_OFFSET_CAL - */ +/*! @{ */ +#define ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_MASK (0xFFFFU) +#define ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_SHIFT (0U) +/*! offset_cal - ADC self offset calibration value. 16-bit signed . + */ +#define ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_SHIFT)) & ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_MASK) +#define ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_USR_MASK (0xFFFF0000U) +#define ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_USR_SHIFT (16U) +/*! offset_cal_usr - User offset calibration data. 16-bit signed. + */ +#define ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_USR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_USR_SHIFT)) & ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_USR_MASK) +/*! @} */ + +/*! @name ADC_REG_GAIN_CAL - */ +/*! @{ */ +#define ADC_ADC_REG_GAIN_CAL_GAIN_CAL_MASK (0xFFFFU) +#define ADC_ADC_REG_GAIN_CAL_GAIN_CAL_SHIFT (0U) +/*! gain_cal - ADC self gain calibration value. 16-bit signed. + */ +#define ADC_ADC_REG_GAIN_CAL_GAIN_CAL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GAIN_CAL_GAIN_CAL_SHIFT)) & ADC_ADC_REG_GAIN_CAL_GAIN_CAL_MASK) +#define ADC_ADC_REG_GAIN_CAL_GAIN_CAL_USR_MASK (0xFFFF0000U) +#define ADC_ADC_REG_GAIN_CAL_GAIN_CAL_USR_SHIFT (16U) +/*! gain_cal_usr - ADC user gain calibration value. 16-bit signed. + */ +#define ADC_ADC_REG_GAIN_CAL_GAIN_CAL_USR(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_GAIN_CAL_GAIN_CAL_USR_SHIFT)) & ADC_ADC_REG_GAIN_CAL_GAIN_CAL_USR_MASK) +/*! @} */ + +/*! @name ADC_REG_TEST - */ +/*! @{ */ +#define ADC_ADC_REG_TEST_TEST_EN_MASK (0x1U) +#define ADC_ADC_REG_TEST_TEST_EN_SHIFT (0U) +/*! test_en - Analog test enable. + * 0b0..disable analog test. adc_atest=Hi-Z + * 0b1..enable analog test + */ +#define ADC_ADC_REG_TEST_TEST_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_TEST_TEST_EN_SHIFT)) & ADC_ADC_REG_TEST_TEST_EN_MASK) +#define ADC_ADC_REG_TEST_TEST_SEL_MASK (0xEU) +#define ADC_ADC_REG_TEST_TEST_SEL_SHIFT (1U) +#define ADC_ADC_REG_TEST_TEST_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_TEST_TEST_SEL_SHIFT)) & ADC_ADC_REG_TEST_TEST_SEL_MASK) +/*! @} */ + +/*! @name ADC_REG_AUDIO - */ +/*! @{ */ +#define ADC_ADC_REG_AUDIO_EN_MASK (0x1U) +#define ADC_ADC_REG_AUDIO_EN_SHIFT (0U) +/*! en - Audio enable. + * 0b0..disable audio pga and decimation rate select + * 0b1..enable audio pga and decimation rate select + */ +#define ADC_ADC_REG_AUDIO_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_AUDIO_EN_SHIFT)) & ADC_ADC_REG_AUDIO_EN_MASK) +#define ADC_ADC_REG_AUDIO_PGA_GAIN_MASK (0x38U) +#define ADC_ADC_REG_AUDIO_PGA_GAIN_SHIFT (3U) +/*! pga_gain - Audio PGA voltage gain select + */ +#define ADC_ADC_REG_AUDIO_PGA_GAIN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_AUDIO_PGA_GAIN_SHIFT)) & ADC_ADC_REG_AUDIO_PGA_GAIN_MASK) +#define ADC_ADC_REG_AUDIO_PGA_CM_MASK (0x1C0U) +#define ADC_ADC_REG_AUDIO_PGA_CM_SHIFT (6U) +/*! pga_cm - Audio PGA output common mode control + * 0b000..common mode is 0.82V + * 0b001..common mode is 0.84V + * 0b010..common mode is 0.86V + * 0b011..common mode is 0.88V + * 0b100..common mode is 0.90V + * 0b101..common mode is 0.92V + * 0b110..common mode is 0.94V + * 0b111..common mode is 0.96V + */ +#define ADC_ADC_REG_AUDIO_PGA_CM(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_AUDIO_PGA_CM_SHIFT)) & ADC_ADC_REG_AUDIO_PGA_CM_MASK) +#define ADC_ADC_REG_AUDIO_PGA_CHOP_EN_MASK (0x200U) +#define ADC_ADC_REG_AUDIO_PGA_CHOP_EN_SHIFT (9U) +/*! pga_chop_en - Audio PGA chopper enable. + * 0b0..disable audio pga chopper + * 0b1..enable audio pga chopper + */ +#define ADC_ADC_REG_AUDIO_PGA_CHOP_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_AUDIO_PGA_CHOP_EN_SHIFT)) & ADC_ADC_REG_AUDIO_PGA_CHOP_EN_MASK) +/*! @} */ + +/*! @name ADC_REG_VOICE_DET - */ +/*! @{ */ +#define ADC_ADC_REG_VOICE_DET_DET_EN_MASK (0x1U) +#define ADC_ADC_REG_VOICE_DET_DET_EN_SHIFT (0U) +/*! det_en - Voice level detection enable select + * 0b0..Disable level detection + * 0b1..Ensable level detection + */ +#define ADC_ADC_REG_VOICE_DET_DET_EN(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_VOICE_DET_DET_EN_SHIFT)) & ADC_ADC_REG_VOICE_DET_DET_EN_MASK) +#define ADC_ADC_REG_VOICE_DET_LEVEL_SEL_MASK (0xEU) +#define ADC_ADC_REG_VOICE_DET_LEVEL_SEL_SHIFT (1U) +/*! level_sel - Voice level selection. + */ +#define ADC_ADC_REG_VOICE_DET_LEVEL_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_VOICE_DET_LEVEL_SEL_SHIFT)) & ADC_ADC_REG_VOICE_DET_LEVEL_SEL_MASK) +/*! @} */ + +/*! @name ADC_REG_RSVD - */ +/*! @{ */ +#define ADC_ADC_REG_RSVD_UNUSED_RESERVED_ADC_CONTROL_BITS_MASK (0xFFFFU) +#define ADC_ADC_REG_RSVD_UNUSED_RESERVED_ADC_CONTROL_BITS_SHIFT (0U) +#define ADC_ADC_REG_RSVD_UNUSED_RESERVED_ADC_CONTROL_BITS(x) (((uint32_t)(((uint32_t)(x)) << ADC_ADC_REG_RSVD_UNUSED_RESERVED_ADC_CONTROL_BITS_SHIFT)) & ADC_ADC_REG_RSVD_UNUSED_RESERVED_ADC_CONTROL_BITS_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group ADC_Register_Masks */ + + +/* ADC - Peripheral instance base addresses */ +/** Peripheral ADC base address */ +#define ADC_BASE (0x460B0000u) +/** Peripheral ADC base pointer */ +#define ADC ((ADC_Type *)ADC_BASE) +/** Array initializer of ADC peripheral base addresses */ +#define ADC_BASE_ADDRS { ADC_BASE } +/** Array initializer of ADC peripheral base pointers */ +#define ADC_BASE_PTRS { ADC } +/** Interrupt vectors for the ADC peripheral type */ +#define ADC_IRQS { ADC0_IRQn } + +/*! + * @} + */ /* end of group ADC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- AES Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup AES_Peripheral_Access_Layer AES Peripheral Access Layer + * @{ + */ + +/** AES - Register Layout Typedef */ +typedef struct { + __IO uint32_t CTRL1; /**< AES Control Register 1, offset: 0x0 */ + __IO uint32_t CTRL2; /**< AES Control Register 2, offset: 0x4 */ + __I uint32_t STATUS; /**< AES Status Register, offset: 0x8 */ + __IO uint32_t ASTR_LEN; /**< AES Astr Length Register, offset: 0xC */ + __IO uint32_t MSTR_LEN; /**< AES Mstr Length Register, offset: 0x10 */ + __O uint32_t STR_IN; /**< AES Stream Input Register, offset: 0x14 */ + __IO uint32_t IV0; /**< AES Input Vector Register 0, offset: 0x18 */ + __IO uint32_t IV1; /**< AES Input Vector Register 1, offset: 0x1C */ + __IO uint32_t IV2; /**< AES Input Vector Register 2, offset: 0x20 */ + __IO uint32_t IV3; /**< AES Input Vector Register 3, offset: 0x24 */ + __IO uint32_t KEY0; /**< AES Key 0 Register, offset: 0x28 */ + __IO uint32_t KEY1; /**< AES Key 1 Register, offset: 0x2C */ + __IO uint32_t KEY2; /**< AES Key 2 Register, offset: 0x30 */ + __IO uint32_t KEY3; /**< AES Key 3 Register, offset: 0x34 */ + __IO uint32_t KEY4; /**< AES Key 4 Register, offset: 0x38 */ + __IO uint32_t KEY5; /**< AES Key 5 Register, offset: 0x3C */ + __IO uint32_t KEY6; /**< AES Key 6 Register, offset: 0x40 */ + __IO uint32_t KEY7; /**< AES Key 7 Register, offset: 0x44 */ + __I uint32_t STR_OUT; /**< AES Stream Output Port Register, offset: 0x48 */ + __I uint32_t OV0; /**< AES Output Vector 0 Register, offset: 0x4C */ + __I uint32_t OV1; /**< AES Output Vector 1 Register, offset: 0x50 */ + __I uint32_t OV2; /**< AES Output Vector 2 Register, offset: 0x54 */ + __I uint32_t OV3; /**< AES Output Vector 3 Register, offset: 0x58 */ + __I uint32_t ISR; /**< AES Interrupt Status Register, offset: 0x5C */ + __IO uint32_t IMR; /**< AES Interrupt Mask Register, offset: 0x60 */ + __I uint32_t IRSR; /**< AES Interrupt Raw Status Register, offset: 0x64 */ + __IO uint32_t ICR; /**< AES Interrupt Clear Register, offset: 0x68 */ + uint8_t RESERVED_0[32]; + __I uint32_t REV_ID; /**< AES Revision Register, offset: 0x8C */ +} AES_Type; + +/* ---------------------------------------------------------------------------- + -- AES Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup AES_Register_Masks AES Register Masks + * @{ + */ + +/*! @name CTRL1 - AES Control Register 1 */ +/*! @{ */ +#define AES_CTRL1_START_MASK (0x1U) +#define AES_CTRL1_START_SHIFT (0U) +/*! start - Start AES + */ +#define AES_CTRL1_START(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_START_SHIFT)) & AES_CTRL1_START_MASK) +#define AES_CTRL1_LOCK0_MASK (0x2U) +#define AES_CTRL1_LOCK0_SHIFT (1U) +/*! lock0 - Lock AES on MCU side + * 0b0..Write 0 to release AES + * 0b1..Write 1 to lock AES on behalf of MCU + */ +#define AES_CTRL1_LOCK0(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_LOCK0_SHIFT)) & AES_CTRL1_LOCK0_MASK) +#define AES_CTRL1_IF_CLR_MASK (0x4U) +#define AES_CTRL1_IF_CLR_SHIFT (2U) +/*! if_clr - Clear input FIFO + */ +#define AES_CTRL1_IF_CLR(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_IF_CLR_SHIFT)) & AES_CTRL1_IF_CLR_MASK) +#define AES_CTRL1_OF_CLR_MASK (0x8U) +#define AES_CTRL1_OF_CLR_SHIFT (3U) +/*! of_clr - Clear output FIFO + */ +#define AES_CTRL1_OF_CLR(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_OF_CLR_SHIFT)) & AES_CTRL1_OF_CLR_MASK) +#define AES_CTRL1_OUT_MSG_MASK (0x10U) +#define AES_CTRL1_OUT_MSG_SHIFT (4U) +/*! out_msg - Output stream to output FIFO + * 0b0..block output stream from output FIFO + * 0b1..forward output stream to output FIFO + */ +#define AES_CTRL1_OUT_MSG(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_OUT_MSG_SHIFT)) & AES_CTRL1_OUT_MSG_MASK) +#define AES_CTRL1_OUT_HDR_MASK (0x20U) +#define AES_CTRL1_OUT_HDR_SHIFT (5U) +/*! out_hdr - Output B0 and l(a) in CCM* mode + * 0b0..do not output B0 and l(a) at the beginning of output stream + * 0b1..output B0 and l(a) at the beginning of output stream + */ +#define AES_CTRL1_OUT_HDR(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_OUT_HDR_SHIFT)) & AES_CTRL1_OUT_HDR_MASK) +#define AES_CTRL1_PRI0_MASK (0x40U) +#define AES_CTRL1_PRI0_SHIFT (6U) +/*! pri0 - AES priority on MCU (software) side + * 0b0..Low priority + * 0b1..High priority + */ +#define AES_CTRL1_PRI0(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_PRI0_SHIFT)) & AES_CTRL1_PRI0_MASK) +#define AES_CTRL1_PRI1_MASK (0x80U) +#define AES_CTRL1_PRI1_SHIFT (7U) +/*! pri1 - AES priority on hardware (BH-MAC) side + * 0b0..Low priority + * 0b1..High priority + */ +#define AES_CTRL1_PRI1(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_PRI1_SHIFT)) & AES_CTRL1_PRI1_MASK) +#define AES_CTRL1_IO_SRC_MASK (0x100U) +#define AES_CTRL1_IO_SRC_SHIFT (8U) +/*! io_src - AES data input source + * 0b0..I/O through register + * 0b1..I/O through DMA + */ +#define AES_CTRL1_IO_SRC(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_IO_SRC_SHIFT)) & AES_CTRL1_IO_SRC_MASK) +#define AES_CTRL1_DMA_EN_MASK (0x200U) +#define AES_CTRL1_DMA_EN_SHIFT (9U) +/*! dma_en - Enable DMA + * 0b0..Disable DMA + * 0b1..Enable DMA + */ +#define AES_CTRL1_DMA_EN(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_DMA_EN_SHIFT)) & AES_CTRL1_DMA_EN_MASK) +#define AES_CTRL1_KEY_SIZE_MASK (0xC00U) +#define AES_CTRL1_KEY_SIZE_SHIFT (10U) +/*! key_size - Key size parameter + * 0b00..16 bytes + * 0b01..32 bytes + * 0b10..24 bytes + * 0b11..reserved + */ +#define AES_CTRL1_KEY_SIZE(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_KEY_SIZE_SHIFT)) & AES_CTRL1_KEY_SIZE_MASK) +#define AES_CTRL1_MIC_LEN_MASK (0x3000U) +#define AES_CTRL1_MIC_LEN_SHIFT (12U) +/*! mic_len - Length of MIC field + * 0b00..0 bytes + * 0b01..4 bytes + * 0b10..8 bytes + * 0b11..16 bytes + */ +#define AES_CTRL1_MIC_LEN(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_MIC_LEN_SHIFT)) & AES_CTRL1_MIC_LEN_MASK) +#define AES_CTRL1_OUT_MIC_MASK (0x4000U) +#define AES_CTRL1_OUT_MIC_SHIFT (14U) +/*! out_mic - Append MIC/HASH at the end of output stream in CCM* mode + * 0b0..Not append MIC/HASH at the end of output stream in CCM* mode decryption or MMO mode + * 0b1..Append MIC/HASH at the end of output stream in CCM* mode decryption or MMO mode + */ +#define AES_CTRL1_OUT_MIC(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_OUT_MIC_SHIFT)) & AES_CTRL1_OUT_MIC_MASK) +#define AES_CTRL1_DECRYPT_MASK (0x8000U) +#define AES_CTRL1_DECRYPT_SHIFT (15U) +/*! decrypt - Decrypt operation (ignored in MMO and BYPASS mode) + * 0b0.. + * 0b1.. + */ +#define AES_CTRL1_DECRYPT(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_DECRYPT_SHIFT)) & AES_CTRL1_DECRYPT_MASK) +#define AES_CTRL1_MODE_MASK (0x70000U) +#define AES_CTRL1_MODE_SHIFT (16U) +/*! mode - AES running mode + * 0b000.. + * 0b001.. + * 0b010.. + * 0b011..RESERVED + * 0b100..RESERVED + * 0b101..CCM* + * 0b110.. + * 0b111.. + */ +#define AES_CTRL1_MODE(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_MODE_SHIFT)) & AES_CTRL1_MODE_MASK) +#define AES_CTRL1_CTR_MOD_MASK (0x3F80000U) +#define AES_CTRL1_CTR_MOD_SHIFT (19U) +/*! ctr_mod - CTR mode's counter modular + */ +#define AES_CTRL1_CTR_MOD(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_CTR_MOD_SHIFT)) & AES_CTRL1_CTR_MOD_MASK) +#define AES_CTRL1_CTS_MODE_MASK (0x4000000U) +#define AES_CTRL1_CTS_MODE_SHIFT (26U) +/*! cts_mode - Cipher stealing mode of CBC + * 0b0..Marvell mode + * 0b1..NIST-CS2 mode + */ +#define AES_CTRL1_CTS_MODE(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_CTS_MODE_SHIFT)) & AES_CTRL1_CTS_MODE_MASK) +/*! @} */ + +/*! @name CTRL2 - AES Control Register 2 */ +/*! @{ */ +#define AES_CTRL2_AES_RESET_MASK (0x1U) +#define AES_CTRL2_AES_RESET_SHIFT (0U) +/*! aes_reset - Reset AES + * 0b0..un-reset AES + * 0b1..Reset AES + */ +#define AES_CTRL2_AES_RESET(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL2_AES_RESET_SHIFT)) & AES_CTRL2_AES_RESET_MASK) +#define AES_CTRL2_AUTO_RESET_EN_MASK (0x2U) +#define AES_CTRL2_AUTO_RESET_EN_SHIFT (1U) +/*! auto_reset_en - Enable atutomatic reset after lock successfully + * 0b0..No automatic reset + * 0b1..Automatic reset after lock successfully + */ +#define AES_CTRL2_AUTO_RESET_EN(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL2_AUTO_RESET_EN_SHIFT)) & AES_CTRL2_AUTO_RESET_EN_MASK) +/*! @} */ + +/*! @name STATUS - AES Status Register */ +/*! @{ */ +#define AES_STATUS_DONE_MASK (0x1U) +#define AES_STATUS_DONE_SHIFT (0U) +/*! done - AES operation done + * 0b0..AES operation has not done yet + * 0b1..AES operation done + */ +#define AES_STATUS_DONE(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_DONE_SHIFT)) & AES_STATUS_DONE_MASK) +#define AES_STATUS_RSVD0_MASK (0x2U) +#define AES_STATUS_RSVD0_SHIFT (1U) +/*! rsvd0 - AES is locked by MCU + * 0b0..AES is not locked by MCU + * 0b1..AES is locked by MCU + */ +#define AES_STATUS_RSVD0(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_RSVD0_SHIFT)) & AES_STATUS_RSVD0_MASK) +#define AES_STATUS_RSVD1_MASK (0x4U) +#define AES_STATUS_RSVD1_SHIFT (2U) +/*! rsvd1 - AES is locked by hardware (BH-MAC) + * 0b0..AES is not locked by hardware + * 0b1..AES is locked by hardware + */ +#define AES_STATUS_RSVD1(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_RSVD1_SHIFT)) & AES_STATUS_RSVD1_MASK) +#define AES_STATUS_LOCK1_MASK (0x8U) +#define AES_STATUS_LOCK1_SHIFT (3U) +/*! lock1 - Lock AES on hardware (BH-MAC) side + * 0b0..hardware unlocks AES + * 0b1..hardware requests to lock AES + */ +#define AES_STATUS_LOCK1(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_LOCK1_SHIFT)) & AES_STATUS_LOCK1_MASK) +#define AES_STATUS_IF_FULL_MASK (0x10U) +#define AES_STATUS_IF_FULL_SHIFT (4U) +/*! if_full - Input FIFO full + * 0b0..Input FIFO is not full + * 0b1..Input FIFO is full + */ +#define AES_STATUS_IF_FULL(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_IF_FULL_SHIFT)) & AES_STATUS_IF_FULL_MASK) +#define AES_STATUS_OF_RDY_MASK (0x40U) +#define AES_STATUS_OF_RDY_SHIFT (6U) +/*! of_rdy - Output FIFO is ready to read + * 0b0..Output FIFO is not ready to read + * 0b1..Output FIFO is ready to read + */ +#define AES_STATUS_OF_RDY(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_OF_RDY_SHIFT)) & AES_STATUS_OF_RDY_MASK) +#define AES_STATUS_OF_EMPTY_MASK (0x80U) +#define AES_STATUS_OF_EMPTY_SHIFT (7U) +/*! of_empty - Output FIFO empty + * 0b0..Output FIFO is not empty + * 0b1..Output FIFO is empty + */ +#define AES_STATUS_OF_EMPTY(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_OF_EMPTY_SHIFT)) & AES_STATUS_OF_EMPTY_MASK) +#define AES_STATUS_STATUS_MASK (0x3800U) +#define AES_STATUS_STATUS_SHIFT (11U) +/*! status - AES operation error status + * 0b000..No operation error + * 0b001..Input stream size less than 16 byte in ECB,CBC and CTR mode + * 0b010..Data is not multiple of 16 bytes in ECB mode or Data is more than 2^13-1 bytes in MMO mode + * 0b011..Data is not multiple of 16 bytes and less than 16 byte in ECB mode + * 0b100..MIC Mismatch during CCM* Decryption + */ +#define AES_STATUS_STATUS(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_STATUS_SHIFT)) & AES_STATUS_STATUS_MASK) +#define AES_STATUS_IF_DEPTH_MASK (0x1C000U) +#define AES_STATUS_IF_DEPTH_SHIFT (14U) +/*! if_depth - input FIFO depth + */ +#define AES_STATUS_IF_DEPTH(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_IF_DEPTH_SHIFT)) & AES_STATUS_IF_DEPTH_MASK) +#define AES_STATUS_OF_DEPTH_MASK (0xE0000U) +#define AES_STATUS_OF_DEPTH_SHIFT (17U) +/*! of_depth - output FIFO depth + */ +#define AES_STATUS_OF_DEPTH(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_OF_DEPTH_SHIFT)) & AES_STATUS_OF_DEPTH_MASK) +#define AES_STATUS_RSVD_VLD_MASK (0x100000U) +#define AES_STATUS_RSVD_VLD_SHIFT (20U) +/*! rsvd_vld - RSVD Valid + * 0b0..rsvd0 and rsvd1 not valid + * 0b1..rsvd0 and rsvd1 are valid + */ +#define AES_STATUS_RSVD_VLD(x) (((uint32_t)(((uint32_t)(x)) << AES_STATUS_RSVD_VLD_SHIFT)) & AES_STATUS_RSVD_VLD_MASK) +/*! @} */ + +/*! @name ASTR_LEN - AES Astr Length Register */ +/*! @{ */ +#define AES_ASTR_LEN_ASTR_LEN_MASK (0xFFFFFFFFU) +#define AES_ASTR_LEN_ASTR_LEN_SHIFT (0U) +/*! astr_len - Size of associate string + */ +#define AES_ASTR_LEN_ASTR_LEN(x) (((uint32_t)(((uint32_t)(x)) << AES_ASTR_LEN_ASTR_LEN_SHIFT)) & AES_ASTR_LEN_ASTR_LEN_MASK) +/*! @} */ + +/*! @name MSTR_LEN - AES Mstr Length Register */ +/*! @{ */ +#define AES_MSTR_LEN_MSTR_LEN_MASK (0xFFFFFFFFU) +#define AES_MSTR_LEN_MSTR_LEN_SHIFT (0U) +/*! mstr_len - Size of message string + */ +#define AES_MSTR_LEN_MSTR_LEN(x) (((uint32_t)(((uint32_t)(x)) << AES_MSTR_LEN_MSTR_LEN_SHIFT)) & AES_MSTR_LEN_MSTR_LEN_MASK) +/*! @} */ + +/*! @name STR_IN - AES Stream Input Register */ +/*! @{ */ +#define AES_STR_IN_STR_IN_MASK (0xFFFFFFFFU) +#define AES_STR_IN_STR_IN_SHIFT (0U) +/*! str_in - Input message word + */ +#define AES_STR_IN_STR_IN(x) (((uint32_t)(((uint32_t)(x)) << AES_STR_IN_STR_IN_SHIFT)) & AES_STR_IN_STR_IN_MASK) +/*! @} */ + +/*! @name IV0 - AES Input Vector Register 0 */ +/*! @{ */ +#define AES_IV0_IV0_MASK (0xFFFFFFFFU) +#define AES_IV0_IV0_SHIFT (0U) +/*! iv0 - Byte 0-3 of initial vector + */ +#define AES_IV0_IV0(x) (((uint32_t)(((uint32_t)(x)) << AES_IV0_IV0_SHIFT)) & AES_IV0_IV0_MASK) +/*! @} */ + +/*! @name IV1 - AES Input Vector Register 1 */ +/*! @{ */ +#define AES_IV1_IV1_MASK (0xFFFFFFFFU) +#define AES_IV1_IV1_SHIFT (0U) +/*! iv1 - Byte 4-7 of initial vector + */ +#define AES_IV1_IV1(x) (((uint32_t)(((uint32_t)(x)) << AES_IV1_IV1_SHIFT)) & AES_IV1_IV1_MASK) +/*! @} */ + +/*! @name IV2 - AES Input Vector Register 2 */ +/*! @{ */ +#define AES_IV2_IV2_MASK (0xFFFFFFFFU) +#define AES_IV2_IV2_SHIFT (0U) +/*! iv2 - Byte 8-11 of initial vector + */ +#define AES_IV2_IV2(x) (((uint32_t)(((uint32_t)(x)) << AES_IV2_IV2_SHIFT)) & AES_IV2_IV2_MASK) +/*! @} */ + +/*! @name IV3 - AES Input Vector Register 3 */ +/*! @{ */ +#define AES_IV3_IV3_MASK (0xFFFFFFFFU) +#define AES_IV3_IV3_SHIFT (0U) +/*! iv3 - Byte 12-15 of initial vector + */ +#define AES_IV3_IV3(x) (((uint32_t)(((uint32_t)(x)) << AES_IV3_IV3_SHIFT)) & AES_IV3_IV3_MASK) +/*! @} */ + +/*! @name KEY0 - AES Key 0 Register */ +/*! @{ */ +#define AES_KEY0_KEY0_MASK (0xFFFFFFFFU) +#define AES_KEY0_KEY0_SHIFT (0U) +/*! key0 - Byte 0-3 of key + */ +#define AES_KEY0_KEY0(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY0_KEY0_SHIFT)) & AES_KEY0_KEY0_MASK) +/*! @} */ + +/*! @name KEY1 - AES Key 1 Register */ +/*! @{ */ +#define AES_KEY1_KEY1_MASK (0xFFFFFFFFU) +#define AES_KEY1_KEY1_SHIFT (0U) +/*! key1 - Byte 4-7 of key + */ +#define AES_KEY1_KEY1(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY1_KEY1_SHIFT)) & AES_KEY1_KEY1_MASK) +/*! @} */ + +/*! @name KEY2 - AES Key 2 Register */ +/*! @{ */ +#define AES_KEY2_KEY2_MASK (0xFFFFFFFFU) +#define AES_KEY2_KEY2_SHIFT (0U) +/*! key2 - Byte 8-11 of key + */ +#define AES_KEY2_KEY2(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY2_KEY2_SHIFT)) & AES_KEY2_KEY2_MASK) +/*! @} */ + +/*! @name KEY3 - AES Key 3 Register */ +/*! @{ */ +#define AES_KEY3_KEY3_MASK (0xFFFFFFFFU) +#define AES_KEY3_KEY3_SHIFT (0U) +/*! key3 - Byte 12-15 of key + */ +#define AES_KEY3_KEY3(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY3_KEY3_SHIFT)) & AES_KEY3_KEY3_MASK) +/*! @} */ + +/*! @name KEY4 - AES Key 4 Register */ +/*! @{ */ +#define AES_KEY4_KEY4_MASK (0xFFFFFFFFU) +#define AES_KEY4_KEY4_SHIFT (0U) +/*! key4 - Byte 16-19 of key + */ +#define AES_KEY4_KEY4(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY4_KEY4_SHIFT)) & AES_KEY4_KEY4_MASK) +/*! @} */ + +/*! @name KEY5 - AES Key 5 Register */ +/*! @{ */ +#define AES_KEY5_KEY5_MASK (0xFFFFFFFFU) +#define AES_KEY5_KEY5_SHIFT (0U) +/*! key5 - Byte 20-23 of key + */ +#define AES_KEY5_KEY5(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY5_KEY5_SHIFT)) & AES_KEY5_KEY5_MASK) +/*! @} */ + +/*! @name KEY6 - AES Key 6 Register */ +/*! @{ */ +#define AES_KEY6_KEY6_MASK (0xFFFFFFFFU) +#define AES_KEY6_KEY6_SHIFT (0U) +/*! key6 - Byte 24-27 of key + */ +#define AES_KEY6_KEY6(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY6_KEY6_SHIFT)) & AES_KEY6_KEY6_MASK) +/*! @} */ + +/*! @name KEY7 - AES Key 7 Register */ +/*! @{ */ +#define AES_KEY7_KEY7_MASK (0xFFFFFFFFU) +#define AES_KEY7_KEY7_SHIFT (0U) +/*! key7 - Byte 28-31 of key + */ +#define AES_KEY7_KEY7(x) (((uint32_t)(((uint32_t)(x)) << AES_KEY7_KEY7_SHIFT)) & AES_KEY7_KEY7_MASK) +/*! @} */ + +/*! @name STR_OUT - AES Stream Output Port Register */ +/*! @{ */ +#define AES_STR_OUT_STR_OUT_MASK (0xFFFFFFFFU) +#define AES_STR_OUT_STR_OUT_SHIFT (0U) +/*! str_out - Output message word + */ +#define AES_STR_OUT_STR_OUT(x) (((uint32_t)(((uint32_t)(x)) << AES_STR_OUT_STR_OUT_SHIFT)) & AES_STR_OUT_STR_OUT_MASK) +/*! @} */ + +/*! @name OV0 - AES Output Vector 0 Register */ +/*! @{ */ +#define AES_OV0_OV0_MASK (0xFFFFFFFFU) +#define AES_OV0_OV0_SHIFT (0U) +/*! ov0 - Byte 0-3 of output vector + */ +#define AES_OV0_OV0(x) (((uint32_t)(((uint32_t)(x)) << AES_OV0_OV0_SHIFT)) & AES_OV0_OV0_MASK) +/*! @} */ + +/*! @name OV1 - AES Output Vector 1 Register */ +/*! @{ */ +#define AES_OV1_OV1_MASK (0xFFFFFFFFU) +#define AES_OV1_OV1_SHIFT (0U) +/*! ov1 - Byte 4-7 of output vector + */ +#define AES_OV1_OV1(x) (((uint32_t)(((uint32_t)(x)) << AES_OV1_OV1_SHIFT)) & AES_OV1_OV1_MASK) +/*! @} */ + +/*! @name OV2 - AES Output Vector 2 Register */ +/*! @{ */ +#define AES_OV2_OV2_MASK (0xFFFFFFFFU) +#define AES_OV2_OV2_SHIFT (0U) +/*! ov2 - Byte 8-11 of output vector + */ +#define AES_OV2_OV2(x) (((uint32_t)(((uint32_t)(x)) << AES_OV2_OV2_SHIFT)) & AES_OV2_OV2_MASK) +/*! @} */ + +/*! @name OV3 - AES Output Vector 3 Register */ +/*! @{ */ +#define AES_OV3_OV3_MASK (0xFFFFFFFFU) +#define AES_OV3_OV3_SHIFT (0U) +/*! ov3 - Byte 12-15 of output vector + */ +#define AES_OV3_OV3(x) (((uint32_t)(((uint32_t)(x)) << AES_OV3_OV3_SHIFT)) & AES_OV3_OV3_MASK) +/*! @} */ + +/*! @name ISR - AES Interrupt Status Register */ +/*! @{ */ +#define AES_ISR_STATUS_0_MASK (0x1U) +#define AES_ISR_STATUS_0_SHIFT (0U) +/*! status_0 - Status of AES output FIFO empty interrupt + * 0b0..AES operation done interrupt not occurred + * 0b1..AES operation done interrupt occurred + */ +#define AES_ISR_STATUS_0(x) (((uint32_t)(((uint32_t)(x)) << AES_ISR_STATUS_0_SHIFT)) & AES_ISR_STATUS_0_MASK) +#define AES_ISR_STATUS_1_MASK (0x2U) +#define AES_ISR_STATUS_1_SHIFT (1U) +/*! status_1 - Status of AES input FIFO full interrupt + * 0b0..AES input FIFO full interrupt not occurred + * 0b1..AES input FIFO full interrupt occurred + */ +#define AES_ISR_STATUS_1(x) (((uint32_t)(((uint32_t)(x)) << AES_ISR_STATUS_1_SHIFT)) & AES_ISR_STATUS_1_MASK) +#define AES_ISR_STATUS_2_MASK (0x4U) +#define AES_ISR_STATUS_2_SHIFT (2U) +/*! status_2 - Status of AES output FIFO empty interrupt + * 0b0..AES output FIFO empty interrupt not occurred + * 0b1..AES output FIFO empty interrupt occurred + */ +#define AES_ISR_STATUS_2(x) (((uint32_t)(((uint32_t)(x)) << AES_ISR_STATUS_2_SHIFT)) & AES_ISR_STATUS_2_MASK) +/*! @} */ + +/*! @name IMR - AES Interrupt Mask Register */ +/*! @{ */ +#define AES_IMR_MASK_0_MASK (0x1U) +#define AES_IMR_MASK_0_SHIFT (0U) +/*! mask_0 - mask[0]: Mask of AES operation done interrupt + * 0b0..Enable AES operation done interrupt + * 0b1..Disable AES operation done interrupt + */ +#define AES_IMR_MASK_0(x) (((uint32_t)(((uint32_t)(x)) << AES_IMR_MASK_0_SHIFT)) & AES_IMR_MASK_0_MASK) +#define AES_IMR_MASK_1_MASK (0x2U) +#define AES_IMR_MASK_1_SHIFT (1U) +/*! mask_1 - Mask of AES input FIFO full interrupt + * 0b0..Enable AES input FIFO full interrupt + * 0b1..Disable AES input FIFO full interrupt + */ +#define AES_IMR_MASK_1(x) (((uint32_t)(((uint32_t)(x)) << AES_IMR_MASK_1_SHIFT)) & AES_IMR_MASK_1_MASK) +#define AES_IMR_MASK_2_MASK (0x4U) +#define AES_IMR_MASK_2_SHIFT (2U) +/*! mask_2 - Mask of AES output FIFO empty interrupt + * 0b0..Enable AES output FIFO empty interrupt + * 0b1..Disable AES output FIFO empty interrupt + */ +#define AES_IMR_MASK_2(x) (((uint32_t)(((uint32_t)(x)) << AES_IMR_MASK_2_SHIFT)) & AES_IMR_MASK_2_MASK) +/*! @} */ + +/*! @name IRSR - AES Interrupt Raw Status Register */ +/*! @{ */ +#define AES_IRSR_STATUS_RAW_0_MASK (0x1U) +#define AES_IRSR_STATUS_RAW_0_SHIFT (0U) +/*! status_raw_0 - AES operation done interrupt raw status regardless of mask + * 0b0..AES operation done interrupt not occurred + * 0b1..AES operation done interrupt occurred + */ +#define AES_IRSR_STATUS_RAW_0(x) (((uint32_t)(((uint32_t)(x)) << AES_IRSR_STATUS_RAW_0_SHIFT)) & AES_IRSR_STATUS_RAW_0_MASK) +#define AES_IRSR_STATUS_RAW_1_MASK (0x2U) +#define AES_IRSR_STATUS_RAW_1_SHIFT (1U) +/*! status_raw_1 - AES input FIFO full interrupt raw status regardless of mask + * 0b0..AES no input FIFO full interrupt not occurred + * 0b1..AES no input FIFO full interrupt occurred + */ +#define AES_IRSR_STATUS_RAW_1(x) (((uint32_t)(((uint32_t)(x)) << AES_IRSR_STATUS_RAW_1_SHIFT)) & AES_IRSR_STATUS_RAW_1_MASK) +#define AES_IRSR_STATUS_RAW_2_MASK (0x4U) +#define AES_IRSR_STATUS_RAW_2_SHIFT (2U) +/*! status_raw_2 - AES output FIFO empty interrupt raw status regardless of mask + * 0b0..AES output FIFO empty interrupt not occurred + * 0b1..AES output FIFO empty interrupt + */ +#define AES_IRSR_STATUS_RAW_2(x) (((uint32_t)(((uint32_t)(x)) << AES_IRSR_STATUS_RAW_2_SHIFT)) & AES_IRSR_STATUS_RAW_2_MASK) +/*! @} */ + +/*! @name ICR - AES Interrupt Clear Register */ +/*! @{ */ +#define AES_ICR_CLEAR_0_MASK (0x1U) +#define AES_ICR_CLEAR_0_SHIFT (0U) +/*! clear_0 - Clearance of AES operation done interrupt status and raw status + */ +#define AES_ICR_CLEAR_0(x) (((uint32_t)(((uint32_t)(x)) << AES_ICR_CLEAR_0_SHIFT)) & AES_ICR_CLEAR_0_MASK) +#define AES_ICR_CLEAR_1_MASK (0x2U) +#define AES_ICR_CLEAR_1_SHIFT (1U) +/*! clear_1 - Clearance of AES input FIFO full interrupt status and raw status + */ +#define AES_ICR_CLEAR_1(x) (((uint32_t)(((uint32_t)(x)) << AES_ICR_CLEAR_1_SHIFT)) & AES_ICR_CLEAR_1_MASK) +#define AES_ICR_CLEAR_2_MASK (0x4U) +#define AES_ICR_CLEAR_2_SHIFT (2U) +/*! clear_2 - Clearance of AES output FIFO empty interrupt status and raw status + */ +#define AES_ICR_CLEAR_2(x) (((uint32_t)(((uint32_t)(x)) << AES_ICR_CLEAR_2_SHIFT)) & AES_ICR_CLEAR_2_MASK) +/*! @} */ + +/*! @name REV_ID - AES Revision Register */ +/*! @{ */ +#define AES_REV_ID_MINOR_REV_ID_MASK (0xFU) +#define AES_REV_ID_MINOR_REV_ID_SHIFT (0U) +/*! minor_rev_id - Minor revision ID + */ +#define AES_REV_ID_MINOR_REV_ID(x) (((uint32_t)(((uint32_t)(x)) << AES_REV_ID_MINOR_REV_ID_SHIFT)) & AES_REV_ID_MINOR_REV_ID_MASK) +#define AES_REV_ID_MAJOR_REV_ID_MASK (0xF0U) +#define AES_REV_ID_MAJOR_REV_ID_SHIFT (4U) +/*! major_rev_id - Major revision ID + */ +#define AES_REV_ID_MAJOR_REV_ID(x) (((uint32_t)(((uint32_t)(x)) << AES_REV_ID_MAJOR_REV_ID_SHIFT)) & AES_REV_ID_MAJOR_REV_ID_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group AES_Register_Masks */ + + +/* AES - Peripheral instance base addresses */ +/** Peripheral AES base address */ +#define AES_BASE (0x44004000u) +/** Peripheral AES base pointer */ +#define AES ((AES_Type *)AES_BASE) +/** Array initializer of AES peripheral base addresses */ +#define AES_BASE_ADDRS { AES_BASE } +/** Array initializer of AES peripheral base pointers */ +#define AES_BASE_PTRS { AES } +/** Interrupt vectors for the AES peripheral type */ +#define AES_IRQS { AES_IRQn } + +/*! + * @} + */ /* end of group AES_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- BG Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup BG_Peripheral_Access_Layer BG Peripheral Access Layer + * @{ + */ + +/** BG - Register Layout Typedef */ +typedef struct { + __IO uint32_t CTRL; /**< Control Register, offset: 0x0 */ + __I uint32_t STATUS; /**< Status Register, offset: 0x4 */ +} BG_Type; + +/* ---------------------------------------------------------------------------- + -- BG Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup BG_Register_Masks BG Register Masks + * @{ + */ + +/*! @name CTRL - Control Register */ +/*! @{ */ +#define BG_CTRL_PD_MASK (0x1U) +#define BG_CTRL_PD_SHIFT (0U) +/*! pd - Bandgap power down. + * 0b0..Power up + * 0b1..Power down + */ +#define BG_CTRL_PD(x) (((uint32_t)(((uint32_t)(x)) << BG_CTRL_PD_SHIFT)) & BG_CTRL_PD_MASK) +#define BG_CTRL_RES_TRIM_MASK (0xF0U) +#define BG_CTRL_RES_TRIM_SHIFT (4U) +/*! res_trim - 1.2V voltage reference resistor trim. + * 0b0000..1.159V + * 0b0001..1.163V + * 0b0010..1.168V + * 0b0011..1.172V + * 0b0100..1.177V + * 0b0101..1.181V + * 0b0110..1.186V + * 0b0111..1.190V + * 0b1000..1.194V + * 0b1001..1.199V + * 0b1010..1.204V + * 0b1011..1.208V + * 0b1100..1.213V + * 0b1101..1.217V + * 0b1110..1.222V + * 0b1111..1.226V + */ +#define BG_CTRL_RES_TRIM(x) (((uint32_t)(((uint32_t)(x)) << BG_CTRL_RES_TRIM_SHIFT)) & BG_CTRL_RES_TRIM_MASK) +/*! @} */ + +/*! @name STATUS - Status Register */ +/*! @{ */ +#define BG_STATUS_RDY_MASK (0x1U) +#define BG_STATUS_RDY_SHIFT (0U) +/*! rdy - 1'b1 indicates BG ready flag. + */ +#define BG_STATUS_RDY(x) (((uint32_t)(((uint32_t)(x)) << BG_STATUS_RDY_SHIFT)) & BG_STATUS_RDY_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group BG_Register_Masks */ + + +/* BG - Peripheral instance base addresses */ +/** Peripheral BG base address */ +#define BG_BASE (0x460B0700u) +/** Peripheral BG base pointer */ +#define BG ((BG_Type *)BG_BASE) +/** Array initializer of BG peripheral base addresses */ +#define BG_BASE_ADDRS { BG_BASE } +/** Array initializer of BG peripheral base pointers */ +#define BG_BASE_PTRS { BG } + +/*! + * @} + */ /* end of group BG_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- CRC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup CRC_Peripheral_Access_Layer CRC Peripheral Access Layer + * @{ + */ + +/** CRC - Register Layout Typedef */ +typedef struct { + __I uint32_t ISR; /**< Interrupt Status Register, offset: 0x0 */ + __I uint32_t IRSR; /**< Interrupt Raw Status Register, offset: 0x4 */ + __O uint32_t ICR; /**< Interrupt Clear Register, offset: 0x8 */ + __IO uint32_t IMR; /**< Interrupt Mask Register, offset: 0xC */ + __IO uint32_t CTRL; /**< CRC Module Control Register, offset: 0x10 */ + __IO uint32_t STREAM_LEN_M1; /**< Stream Length Minus 1 Register, offset: 0x14 */ + __IO uint32_t STREAM_IN; /**< Stream Input Register, offset: 0x18 */ + __I uint32_t RESULT; /**< CRC Calculation Result Register, offset: 0x1C */ + uint8_t RESERVED_0[28]; + __I uint32_t REV_ID; /**< CRC Revision ID register, offset: 0x3C */ +} CRC_Type; + +/* ---------------------------------------------------------------------------- + -- CRC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup CRC_Register_Masks CRC Register Masks + * @{ + */ + +/*! @name ISR - Interrupt Status Register */ +/*! @{ */ +#define CRC_ISR_STATUS_MASK (0x1U) +#define CRC_ISR_STATUS_SHIFT (0U) +/*! status - CRC calculation interrupt status after mask + * 0b0..interrupt is not occurred + * 0b1..interrupt is occurred + */ +#define CRC_ISR_STATUS(x) (((uint32_t)(((uint32_t)(x)) << CRC_ISR_STATUS_SHIFT)) & CRC_ISR_STATUS_MASK) +/*! @} */ + +/*! @name IRSR - Interrupt Raw Status Register */ +/*! @{ */ +#define CRC_IRSR_STATUS_RAW_0_MASK (0x1U) +#define CRC_IRSR_STATUS_RAW_0_SHIFT (0U) +/*! status_raw_0 - Raw status of IRQ regardless of mask + */ +#define CRC_IRSR_STATUS_RAW_0(x) (((uint32_t)(((uint32_t)(x)) << CRC_IRSR_STATUS_RAW_0_SHIFT)) & CRC_IRSR_STATUS_RAW_0_MASK) +/*! @} */ + +/*! @name ICR - Interrupt Clear Register */ +/*! @{ */ +#define CRC_ICR_CLEAR_MASK (0x1U) +#define CRC_ICR_CLEAR_SHIFT (0U) +/*! clear - Clearance of status[0] and status_raw[0] + */ +#define CRC_ICR_CLEAR(x) (((uint32_t)(((uint32_t)(x)) << CRC_ICR_CLEAR_SHIFT)) & CRC_ICR_CLEAR_MASK) +/*! @} */ + +/*! @name IMR - Interrupt Mask Register */ +/*! @{ */ +#define CRC_IMR_MASK_MASK (0x1U) +#define CRC_IMR_MASK_SHIFT (0U) +/*! mask - Mask of interrupt + * 0b0..enable generation of IRQ and corresponding status[0] + * 0b1..disable generation of IRQ and corresponding status[0] + */ +#define CRC_IMR_MASK(x) (((uint32_t)(((uint32_t)(x)) << CRC_IMR_MASK_SHIFT)) & CRC_IMR_MASK_MASK) +/*! @} */ + +/*! @name CTRL - CRC Module Control Register */ +/*! @{ */ +#define CRC_CTRL_ENABLE_MASK (0x1U) +#define CRC_CTRL_ENABLE_SHIFT (0U) +/*! enable - CRC calcuate enable + * 0b0..diable CRC calculation + * 0b1..enable CRC calculation (automatically cleared when CRC calculation is finished) + */ +#define CRC_CTRL_ENABLE(x) (((uint32_t)(((uint32_t)(x)) << CRC_CTRL_ENABLE_SHIFT)) & CRC_CTRL_ENABLE_MASK) +#define CRC_CTRL_MODE_MASK (0xEU) +#define CRC_CTRL_MODE_SHIFT (1U) +/*! mode - CRC mode select + * 0b000..x**16+x**12+x**5+1 (CRC-16-CCITT, CRC-CCITT) + * 0b001..x**16+x**15+x**2+1 (CRC-16, CRC-16-IBM, CRC-16-ANSI) + * 0b010..x**16+x**15+x**11+x**9+x**8+x**7+x**5+x**4+x**2+x+1 (CRC-16-T10-DIF) + * 0b011..x**32+x**26+x**23+x**22+x**16+x**12+x**11+x**10+x**8+x**7+x**5+x**4+x**2+x+1 (CRC-32-IEEE802.3) + * 0b100..x**16+x**13+x**12+x**11+x**10+x**8+x**6+x**5+x**2+1(CRC-16-DNP) + */ +#define CRC_CTRL_MODE(x) (((uint32_t)(((uint32_t)(x)) << CRC_CTRL_MODE_SHIFT)) & CRC_CTRL_MODE_MASK) +/*! @} */ + +/*! @name STREAM_LEN_M1 - Stream Length Minus 1 Register */ +/*! @{ */ +#define CRC_STREAM_LEN_M1_LENGTH_M1_MASK (0xFFFFFFFFU) +#define CRC_STREAM_LEN_M1_LENGTH_M1_SHIFT (0U) +/*! length_m1 - Input stream length minus 1 (units of bytes) + * 0b00000000000000000000000000000000..input stream length of 1 byte + * 0b00000000000000000000000011111111..input stream length of 256 bytes + */ +#define CRC_STREAM_LEN_M1_LENGTH_M1(x) (((uint32_t)(((uint32_t)(x)) << CRC_STREAM_LEN_M1_LENGTH_M1_SHIFT)) & CRC_STREAM_LEN_M1_LENGTH_M1_MASK) +/*! @} */ + +/*! @name STREAM_IN - Stream Input Register */ +/*! @{ */ +#define CRC_STREAM_IN_DATA_MASK (0xFFFFFFFFU) +#define CRC_STREAM_IN_DATA_SHIFT (0U) +/*! data - Stream input data + */ +#define CRC_STREAM_IN_DATA(x) (((uint32_t)(((uint32_t)(x)) << CRC_STREAM_IN_DATA_SHIFT)) & CRC_STREAM_IN_DATA_MASK) +/*! @} */ + +/*! @name RESULT - CRC Calculation Result Register */ +/*! @{ */ +#define CRC_RESULT_DATA_MASK (0xFFFFFFFFU) +#define CRC_RESULT_DATA_SHIFT (0U) +/*! data - CRC calculation result + */ +#define CRC_RESULT_DATA(x) (((uint32_t)(((uint32_t)(x)) << CRC_RESULT_DATA_SHIFT)) & CRC_RESULT_DATA_MASK) +/*! @} */ + +/*! @name REV_ID - CRC Revision ID register */ +/*! @{ */ +#define CRC_REV_ID_MINOR_REV_ID_MASK (0xFU) +#define CRC_REV_ID_MINOR_REV_ID_SHIFT (0U) +/*! minor_rev_id - Minor revision ID + */ +#define CRC_REV_ID_MINOR_REV_ID(x) (((uint32_t)(((uint32_t)(x)) << CRC_REV_ID_MINOR_REV_ID_SHIFT)) & CRC_REV_ID_MINOR_REV_ID_MASK) +#define CRC_REV_ID_MAJOR_REV_ID_MASK (0xF0U) +#define CRC_REV_ID_MAJOR_REV_ID_SHIFT (4U) +/*! major_rev_id - Major revision ID + */ +#define CRC_REV_ID_MAJOR_REV_ID(x) (((uint32_t)(((uint32_t)(x)) << CRC_REV_ID_MAJOR_REV_ID_SHIFT)) & CRC_REV_ID_MAJOR_REV_ID_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group CRC_Register_Masks */ + + +/* CRC - Peripheral instance base addresses */ +/** Peripheral CRC base address */ +#define CRC_BASE (0x44005000u) +/** Peripheral CRC base pointer */ +#define CRC ((CRC_Type *)CRC_BASE) +/** Array initializer of CRC peripheral base addresses */ +#define CRC_BASE_ADDRS { CRC_BASE } +/** Array initializer of CRC peripheral base pointers */ +#define CRC_BASE_PTRS { CRC } +/** Interrupt vectors for the CRC peripheral type */ +#define CRC_IRQS { CRC_IRQn } + +/*! + * @} + */ /* end of group CRC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- DAC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DAC_Peripheral_Access_Layer DAC Peripheral Access Layer + * @{ + */ + +/** DAC - Register Layout Typedef */ +typedef struct { + __IO uint32_t CTRL; /**< DAC Control Register, offset: 0x0 */ + __I uint32_t STATUS; /**< DAC Status Register, offset: 0x4 */ + __IO uint32_t ACTRL; /**< Channel A Control Register, offset: 0x8 */ + __IO uint32_t BCTRL; /**< Channel B Control Register, offset: 0xC */ + __IO uint32_t ADATA; /**< Channel A Data Register, offset: 0x10 */ + __IO uint32_t BDATA; /**< Channel B Data Register, offset: 0x14 */ + __I uint32_t ISR; /**< Interrupt Status Register, offset: 0x18 */ + __IO uint32_t IMR; /**< Interrupt Mask Register, offset: 0x1C */ + __I uint32_t IRSR; /**< Interrupt Raw Status Register, offset: 0x20 */ + __IO uint32_t ICR; /**< Interrupt Clear Register, offset: 0x24 */ + __IO uint32_t CLK; /**< Clock Register, offset: 0x28 */ + __IO uint32_t RST; /**< Soft Reset Register, offset: 0x2C */ +} DAC_Type; + +/* ---------------------------------------------------------------------------- + -- DAC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DAC_Register_Masks DAC Register Masks + * @{ + */ + +/*! @name CTRL - DAC Control Register */ +/*! @{ */ +#define DAC_CTRL_REF_SEL_MASK (0x1U) +#define DAC_CTRL_REF_SEL_SHIFT (0U) +/*! ref_sel - Reference selector + * 0b0..internal reference + * 0b1..external reference + */ +#define DAC_CTRL_REF_SEL(x) (((uint32_t)(((uint32_t)(x)) << DAC_CTRL_REF_SEL_SHIFT)) & DAC_CTRL_REF_SEL_MASK) +/*! @} */ + +/*! @name STATUS - DAC Status Register */ +/*! @{ */ +#define DAC_STATUS_A_DV_MASK (0x1U) +#define DAC_STATUS_A_DV_SHIFT (0U) +/*! a_dv - DACA conversion status. + * 0b0..channel A conversion is not done + * 0b1..channel A conversion complete + */ +#define DAC_STATUS_A_DV(x) (((uint32_t)(((uint32_t)(x)) << DAC_STATUS_A_DV_SHIFT)) & DAC_STATUS_A_DV_MASK) +#define DAC_STATUS_B_DV_MASK (0x2U) +#define DAC_STATUS_B_DV_SHIFT (1U) +/*! b_dv - DACB conversion status + * 0b0..channel B conversion is not done + * 0b1..channel B conversion complete + */ +#define DAC_STATUS_B_DV(x) (((uint32_t)(((uint32_t)(x)) << DAC_STATUS_B_DV_SHIFT)) & DAC_STATUS_B_DV_MASK) +/*! @} */ + +/*! @name ACTRL - Channel A Control Register */ +/*! @{ */ +#define DAC_ACTRL_A_EN_MASK (0x1U) +#define DAC_ACTRL_A_EN_SHIFT (0U) +/*! a_en - Channel A Enable/Disable signal + * 0b0..disable channel A conversion + * 0b1..enable channel A conversion + */ +#define DAC_ACTRL_A_EN(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_EN_SHIFT)) & DAC_ACTRL_A_EN_MASK) +#define DAC_ACTRL_A_IO_EN_MASK (0x2U) +#define DAC_ACTRL_A_IO_EN_SHIFT (1U) +/*! a_io_en - Channel A conversion output to pad enable + * 0b0..disable channel A conversion result to GPIO + * 0b1..enable channel A conversion result to GPIO + */ +#define DAC_ACTRL_A_IO_EN(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_IO_EN_SHIFT)) & DAC_ACTRL_A_IO_EN_MASK) +#define DAC_ACTRL_A_TRIG_EN_MASK (0x4U) +#define DAC_ACTRL_A_TRIG_EN_SHIFT (2U) +/*! a_trig_en - Channel A trigger enable + * 0b0..Channel A conversion triggered by external event disabled + * 0b1..Channel A conversion triggered by external event enabled + */ +#define DAC_ACTRL_A_TRIG_EN(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_TRIG_EN_SHIFT)) & DAC_ACTRL_A_TRIG_EN_MASK) +#define DAC_ACTRL_A_TRIG_SEL_MASK (0x18U) +#define DAC_ACTRL_A_TRIG_SEL_SHIFT (3U) +/*! a_trig_sel - Channel A trigger selector + */ +#define DAC_ACTRL_A_TRIG_SEL(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_TRIG_SEL_SHIFT)) & DAC_ACTRL_A_TRIG_SEL_MASK) +#define DAC_ACTRL_A_TRIG_TYP_MASK (0x60U) +#define DAC_ACTRL_A_TRIG_TYP_SHIFT (5U) +/*! a_trig_typ - Channel A trigger type + * 0b00..reserved + * 0b01..rising edge trigger + * 0b10..falling edge trigger + * 0b11..both rising and falling edge trigger + */ +#define DAC_ACTRL_A_TRIG_TYP(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_TRIG_TYP_SHIFT)) & DAC_ACTRL_A_TRIG_TYP_MASK) +#define DAC_ACTRL_A_DEN_MASK (0x80U) +#define DAC_ACTRL_A_DEN_SHIFT (7U) +/*! a_den - Channel A DMA enable + * 0b0..DMA data transfer disabled + * 0b1..DMA data transfer enabled + */ +#define DAC_ACTRL_A_DEN(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_DEN_SHIFT)) & DAC_ACTRL_A_DEN_MASK) +#define DAC_ACTRL_A_TIME_MODE_MASK (0x100U) +#define DAC_ACTRL_A_TIME_MODE_SHIFT (8U) +/*! a_time_mode - Channel A Mode + * 0b0..non-timing related + * 0b1..timing related + */ +#define DAC_ACTRL_A_TIME_MODE(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_TIME_MODE_SHIFT)) & DAC_ACTRL_A_TIME_MODE_MASK) +#define DAC_ACTRL_A_TRIA_HALF_MASK (0x200U) +#define DAC_ACTRL_A_TRIA_HALF_SHIFT (9U) +/*! a_tria_half - Channel A triangle wave type selector. + * 0b0..full triangle + * 0b1..half triangle + */ +#define DAC_ACTRL_A_TRIA_HALF(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_TRIA_HALF_SHIFT)) & DAC_ACTRL_A_TRIA_HALF_MASK) +#define DAC_ACTRL_A_TRIA_MAMP_SEL_MASK (0x3C00U) +#define DAC_ACTRL_A_TRIA_MAMP_SEL_SHIFT (10U) +/*! a_tria_mamp_sel - Channel A triangle wave max amplitude selector. + * 0b0000..63 + * 0b0001..127 + * 0b0010..191 + * 0b0011..255 + * 0b0100..319 + * 0b0101..383 + * 0b0110..447 + * 0b0111..511 + * 0b1000..575 + * 0b1001..639 + * 0b1010..703 + * 0b1011..767 + * 0b1100..831 + * 0b1101..895 + * 0b1110..959 + * 0b1111..1023 + */ +#define DAC_ACTRL_A_TRIA_MAMP_SEL(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_TRIA_MAMP_SEL_SHIFT)) & DAC_ACTRL_A_TRIA_MAMP_SEL_MASK) +#define DAC_ACTRL_A_TRIA_STEP_SEL_MASK (0xC000U) +#define DAC_ACTRL_A_TRIA_STEP_SEL_SHIFT (14U) +/*! a_tria_step_sel - Channel A triangle wave step selector. + * 0b00..1 + * 0b01..3 + * 0b10..15 + * 0b11..511 + */ +#define DAC_ACTRL_A_TRIA_STEP_SEL(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_TRIA_STEP_SEL_SHIFT)) & DAC_ACTRL_A_TRIA_STEP_SEL_MASK) +#define DAC_ACTRL_A_WAVE_MASK (0x30000U) +#define DAC_ACTRL_A_WAVE_SHIFT (16U) +/*! a_wave - Channel A wave type select. + * 0b00.. + * 0b01..triangle wave + * 0b10..sine wave + * 0b11.. + */ +#define DAC_ACTRL_A_WAVE(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_WAVE_SHIFT)) & DAC_ACTRL_A_WAVE_MASK) +#define DAC_ACTRL_A_RANGE_MASK (0xC0000U) +#define DAC_ACTRL_A_RANGE_SHIFT (18U) +/*! a_range - Output voltage range control, with Internal/External reference + * 0b00..0.16+(0.64*input code/1023) with ref_sel=0(internal)/0.08* Vref_ext+(0.32* Vref_ext*input_code/1023) with ref_sel=1(external) + * 0b01..0.19+(1.01*input code /1023) with ref_sel=0(internal)/0.095* Vref_ext+(0.505* Vref_ext*input_code/1023) with ref_sel=1(external) + * 0b10..0.19+(1.01*input code /1023) with ref_sel=0(internal)/0.095* Vref_ext+(0.505* Vref_ext*input_code/1023) with ref_sel=1(external) + * 0b11..0.18+(1.42*input code /1023) with ref_sel=0(internal)/0.09*Vref_ext+(0.71* Vref_ext*input_code/1023) with ref_sel=1(external) + */ +#define DAC_ACTRL_A_RANGE(x) (((uint32_t)(((uint32_t)(x)) << DAC_ACTRL_A_RANGE_SHIFT)) & DAC_ACTRL_A_RANGE_MASK) +/*! @} */ + +/*! @name BCTRL - Channel B Control Register */ +/*! @{ */ +#define DAC_BCTRL_B_EN_MASK (0x1U) +#define DAC_BCTRL_B_EN_SHIFT (0U) +/*! b_en - Channel B Enable/Disable signal + * 0b0..disable channel B conversion + * 0b1..enable channel B conversion + */ +#define DAC_BCTRL_B_EN(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_EN_SHIFT)) & DAC_BCTRL_B_EN_MASK) +#define DAC_BCTRL_B_IO_EN_MASK (0x2U) +#define DAC_BCTRL_B_IO_EN_SHIFT (1U) +/*! b_io_en - Channel B conversion output to pad enable + * 0b0..disable channel B conversion result to GPIO + * 0b1..enable channel B conversion result to GPIO + */ +#define DAC_BCTRL_B_IO_EN(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_IO_EN_SHIFT)) & DAC_BCTRL_B_IO_EN_MASK) +#define DAC_BCTRL_B_TRIG_EN_MASK (0x4U) +#define DAC_BCTRL_B_TRIG_EN_SHIFT (2U) +/*! b_trig_en - Channel B trigger enable + * 0b0..Channel B conversion triggered by external event disabled + * 0b1..Channel B conversion triggered by external event enabled + */ +#define DAC_BCTRL_B_TRIG_EN(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_TRIG_EN_SHIFT)) & DAC_BCTRL_B_TRIG_EN_MASK) +#define DAC_BCTRL_B_TRIG_SEL_MASK (0x18U) +#define DAC_BCTRL_B_TRIG_SEL_SHIFT (3U) +/*! b_trig_sel - Channel B trigger selector + */ +#define DAC_BCTRL_B_TRIG_SEL(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_TRIG_SEL_SHIFT)) & DAC_BCTRL_B_TRIG_SEL_MASK) +#define DAC_BCTRL_B_TRIG_TYP_MASK (0x60U) +#define DAC_BCTRL_B_TRIG_TYP_SHIFT (5U) +/*! b_trig_typ - Channel B trigger type + * 0b00..reserved + * 0b01..rising edge trigger + * 0b10..falling edge trigger + * 0b11..both rising and falling edge trigger + */ +#define DAC_BCTRL_B_TRIG_TYP(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_TRIG_TYP_SHIFT)) & DAC_BCTRL_B_TRIG_TYP_MASK) +#define DAC_BCTRL_B_DEN_MASK (0x80U) +#define DAC_BCTRL_B_DEN_SHIFT (7U) +/*! b_den - Channel B DMA enable + * 0b0..DMA data transfer disabled + * 0b1..DMA data transfer enabled + */ +#define DAC_BCTRL_B_DEN(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_DEN_SHIFT)) & DAC_BCTRL_B_DEN_MASK) +#define DAC_BCTRL_B_TIME_MODE_MASK (0x100U) +#define DAC_BCTRL_B_TIME_MODE_SHIFT (8U) +/*! b_time_mode - Channel B Mode + * 0b0..non-timing related + * 0b1..timing related + */ +#define DAC_BCTRL_B_TIME_MODE(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_TIME_MODE_SHIFT)) & DAC_BCTRL_B_TIME_MODE_MASK) +#define DAC_BCTRL_B_WAVE_MASK (0x600U) +#define DAC_BCTRL_B_WAVE_SHIFT (9U) +/*! b_wave - Channel B wave type select. + * 0b00.. + * 0b01..reserved + * 0b10..reserved + * 0b11..differential mode with channel A + */ +#define DAC_BCTRL_B_WAVE(x) (((uint32_t)(((uint32_t)(x)) << DAC_BCTRL_B_WAVE_SHIFT)) & DAC_BCTRL_B_WAVE_MASK) +/*! @} */ + +/*! @name ADATA - Channel A Data Register */ +/*! @{ */ +#define DAC_ADATA_A_DATA_MASK (0x3FFU) +#define DAC_ADATA_A_DATA_SHIFT (0U) +/*! a_data - Channel A Data input + */ +#define DAC_ADATA_A_DATA(x) (((uint32_t)(((uint32_t)(x)) << DAC_ADATA_A_DATA_SHIFT)) & DAC_ADATA_A_DATA_MASK) +/*! @} */ + +/*! @name BDATA - Channel B Data Register */ +/*! @{ */ +#define DAC_BDATA_B_DATA_MASK (0x3FFU) +#define DAC_BDATA_B_DATA_SHIFT (0U) +/*! b_data - Channel B Data input + */ +#define DAC_BDATA_B_DATA(x) (((uint32_t)(((uint32_t)(x)) << DAC_BDATA_B_DATA_SHIFT)) & DAC_BDATA_B_DATA_MASK) +/*! @} */ + +/*! @name ISR - Interrupt Status Register */ +/*! @{ */ +#define DAC_ISR_A_RDY_INT_MASK (0x1U) +#define DAC_ISR_A_RDY_INT_SHIFT (0U) +/*! a_rdy_int - Channel A Data Ready + */ +#define DAC_ISR_A_RDY_INT(x) (((uint32_t)(((uint32_t)(x)) << DAC_ISR_A_RDY_INT_SHIFT)) & DAC_ISR_A_RDY_INT_MASK) +#define DAC_ISR_B_RDY_INT_MASK (0x2U) +#define DAC_ISR_B_RDY_INT_SHIFT (1U) +/*! b_rdy_int - Channel B Data Ready + */ +#define DAC_ISR_B_RDY_INT(x) (((uint32_t)(((uint32_t)(x)) << DAC_ISR_B_RDY_INT_SHIFT)) & DAC_ISR_B_RDY_INT_MASK) +#define DAC_ISR_A_TO_INT_MASK (0x4U) +#define DAC_ISR_A_TO_INT_SHIFT (2U) +/*! a_to_int - Channel A Timeout + */ +#define DAC_ISR_A_TO_INT(x) (((uint32_t)(((uint32_t)(x)) << DAC_ISR_A_TO_INT_SHIFT)) & DAC_ISR_A_TO_INT_MASK) +#define DAC_ISR_B_TO_INT_MASK (0x8U) +#define DAC_ISR_B_TO_INT_SHIFT (3U) +/*! b_to_int - Channel B Timeout + */ +#define DAC_ISR_B_TO_INT(x) (((uint32_t)(((uint32_t)(x)) << DAC_ISR_B_TO_INT_SHIFT)) & DAC_ISR_B_TO_INT_MASK) +#define DAC_ISR_TRIA_OVFL_INT_MASK (0x10U) +#define DAC_ISR_TRIA_OVFL_INT_SHIFT (4U) +/*! tria_ovfl_int - Triangle Overflow + */ +#define DAC_ISR_TRIA_OVFL_INT(x) (((uint32_t)(((uint32_t)(x)) << DAC_ISR_TRIA_OVFL_INT_SHIFT)) & DAC_ISR_TRIA_OVFL_INT_MASK) +/*! @} */ + +/*! @name IMR - Interrupt Mask Register */ +/*! @{ */ +#define DAC_IMR_A_RDY_INT_MSK_MASK (0x1U) +#define DAC_IMR_A_RDY_INT_MSK_SHIFT (0U) +/*! a_rdy_int_msk - Channel A Data Ready Mask + */ +#define DAC_IMR_A_RDY_INT_MSK(x) (((uint32_t)(((uint32_t)(x)) << DAC_IMR_A_RDY_INT_MSK_SHIFT)) & DAC_IMR_A_RDY_INT_MSK_MASK) +#define DAC_IMR_B_RDY_INT_MSK_MASK (0x2U) +#define DAC_IMR_B_RDY_INT_MSK_SHIFT (1U) +/*! b_rdy_int_msk - Channel B Data Ready Mask + */ +#define DAC_IMR_B_RDY_INT_MSK(x) (((uint32_t)(((uint32_t)(x)) << DAC_IMR_B_RDY_INT_MSK_SHIFT)) & DAC_IMR_B_RDY_INT_MSK_MASK) +#define DAC_IMR_A_TO_INT_MSK_MASK (0x4U) +#define DAC_IMR_A_TO_INT_MSK_SHIFT (2U) +/*! a_to_int_msk - Channel A Timeout Mask + */ +#define DAC_IMR_A_TO_INT_MSK(x) (((uint32_t)(((uint32_t)(x)) << DAC_IMR_A_TO_INT_MSK_SHIFT)) & DAC_IMR_A_TO_INT_MSK_MASK) +#define DAC_IMR_B_TO_INT_MSK_MASK (0x8U) +#define DAC_IMR_B_TO_INT_MSK_SHIFT (3U) +/*! b_to_int_msk - Channel B Timeout Mask + */ +#define DAC_IMR_B_TO_INT_MSK(x) (((uint32_t)(((uint32_t)(x)) << DAC_IMR_B_TO_INT_MSK_SHIFT)) & DAC_IMR_B_TO_INT_MSK_MASK) +#define DAC_IMR_TRIA_OVFL_INT_MSK_MASK (0x10U) +#define DAC_IMR_TRIA_OVFL_INT_MSK_SHIFT (4U) +/*! tria_ovfl_int_msk - Triangle Overflow Mask + */ +#define DAC_IMR_TRIA_OVFL_INT_MSK(x) (((uint32_t)(((uint32_t)(x)) << DAC_IMR_TRIA_OVFL_INT_MSK_SHIFT)) & DAC_IMR_TRIA_OVFL_INT_MSK_MASK) +/*! @} */ + +/*! @name IRSR - Interrupt Raw Status Register */ +/*! @{ */ +#define DAC_IRSR_A_RDY_INT_RAW_MASK (0x1U) +#define DAC_IRSR_A_RDY_INT_RAW_SHIFT (0U) +/*! a_rdy_int_raw - Channel A Data Ready Raw + */ +#define DAC_IRSR_A_RDY_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << DAC_IRSR_A_RDY_INT_RAW_SHIFT)) & DAC_IRSR_A_RDY_INT_RAW_MASK) +#define DAC_IRSR_B_RDY_INT_RAW_MASK (0x2U) +#define DAC_IRSR_B_RDY_INT_RAW_SHIFT (1U) +/*! b_rdy_int_raw - Channel B Data Ready Raw + */ +#define DAC_IRSR_B_RDY_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << DAC_IRSR_B_RDY_INT_RAW_SHIFT)) & DAC_IRSR_B_RDY_INT_RAW_MASK) +#define DAC_IRSR_A_TO_INT_RAW_MASK (0x4U) +#define DAC_IRSR_A_TO_INT_RAW_SHIFT (2U) +/*! a_to_int_raw - Channel A Timeout Raw + */ +#define DAC_IRSR_A_TO_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << DAC_IRSR_A_TO_INT_RAW_SHIFT)) & DAC_IRSR_A_TO_INT_RAW_MASK) +#define DAC_IRSR_B_TO_INT_RAW_MASK (0x8U) +#define DAC_IRSR_B_TO_INT_RAW_SHIFT (3U) +/*! b_to_int_raw - Channel B Timeout Raw + */ +#define DAC_IRSR_B_TO_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << DAC_IRSR_B_TO_INT_RAW_SHIFT)) & DAC_IRSR_B_TO_INT_RAW_MASK) +#define DAC_IRSR_TRIA_OVFL_INT_RAW_MASK (0x10U) +#define DAC_IRSR_TRIA_OVFL_INT_RAW_SHIFT (4U) +/*! tria_ovfl_int_raw - Triangle Overflow Raw + */ +#define DAC_IRSR_TRIA_OVFL_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << DAC_IRSR_TRIA_OVFL_INT_RAW_SHIFT)) & DAC_IRSR_TRIA_OVFL_INT_RAW_MASK) +/*! @} */ + +/*! @name ICR - Interrupt Clear Register */ +/*! @{ */ +#define DAC_ICR_A_RDY_INT_CLR_MASK (0x1U) +#define DAC_ICR_A_RDY_INT_CLR_SHIFT (0U) +/*! a_rdy_int_clr - Channel A Data Ready Clear + */ +#define DAC_ICR_A_RDY_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << DAC_ICR_A_RDY_INT_CLR_SHIFT)) & DAC_ICR_A_RDY_INT_CLR_MASK) +#define DAC_ICR_B_RDY_INT_CLR_MASK (0x2U) +#define DAC_ICR_B_RDY_INT_CLR_SHIFT (1U) +/*! b_rdy_int_clr - Channel B Data Ready Clear + */ +#define DAC_ICR_B_RDY_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << DAC_ICR_B_RDY_INT_CLR_SHIFT)) & DAC_ICR_B_RDY_INT_CLR_MASK) +#define DAC_ICR_A_TO_INT_CLR_MASK (0x4U) +#define DAC_ICR_A_TO_INT_CLR_SHIFT (2U) +/*! a_to_int_clr - Channel A Timeout Clear + */ +#define DAC_ICR_A_TO_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << DAC_ICR_A_TO_INT_CLR_SHIFT)) & DAC_ICR_A_TO_INT_CLR_MASK) +#define DAC_ICR_B_TO_INT_CLR_MASK (0x8U) +#define DAC_ICR_B_TO_INT_CLR_SHIFT (3U) +/*! b_to_int_clr - Channel B Timeout Clear + */ +#define DAC_ICR_B_TO_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << DAC_ICR_B_TO_INT_CLR_SHIFT)) & DAC_ICR_B_TO_INT_CLR_MASK) +#define DAC_ICR_TRIA_OVFL_INT_CLR_MASK (0x10U) +#define DAC_ICR_TRIA_OVFL_INT_CLR_SHIFT (4U) +/*! tria_ovfl_int_clr - Triangle Overflow Clear + */ +#define DAC_ICR_TRIA_OVFL_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << DAC_ICR_TRIA_OVFL_INT_CLR_SHIFT)) & DAC_ICR_TRIA_OVFL_INT_CLR_MASK) +/*! @} */ + +/*! @name CLK - Clock Register */ +/*! @{ */ +#define DAC_CLK_CLK_CTRL_MASK (0x6U) +#define DAC_CLK_CLK_CTRL_SHIFT (1U) +/*! clk_ctrl - DAC conversion rate selector. + * 0b00..62.5K + * 0b01..125K + * 0b10..250K + * 0b11..500K + */ +#define DAC_CLK_CLK_CTRL(x) (((uint32_t)(((uint32_t)(x)) << DAC_CLK_CLK_CTRL_SHIFT)) & DAC_CLK_CLK_CTRL_MASK) +#define DAC_CLK_SOFT_CLK_RST_MASK (0x10U) +#define DAC_CLK_SOFT_CLK_RST_SHIFT (4U) +/*! soft_clk_rst - Soft reset for clock divider + * 0b0.. + * 0b1.. + */ +#define DAC_CLK_SOFT_CLK_RST(x) (((uint32_t)(((uint32_t)(x)) << DAC_CLK_SOFT_CLK_RST_SHIFT)) & DAC_CLK_SOFT_CLK_RST_MASK) +/*! @} */ + +/*! @name RST - Soft Reset Register */ +/*! @{ */ +#define DAC_RST_A_SOFT_RST_MASK (0x1U) +#define DAC_RST_A_SOFT_RST_SHIFT (0U) +/*! a_soft_rst - Soft reset for DAC channel A, active high + * 0b0..no action + * 0b1.. + */ +#define DAC_RST_A_SOFT_RST(x) (((uint32_t)(((uint32_t)(x)) << DAC_RST_A_SOFT_RST_SHIFT)) & DAC_RST_A_SOFT_RST_MASK) +#define DAC_RST_B_SOFT_RST_MASK (0x2U) +#define DAC_RST_B_SOFT_RST_SHIFT (1U) +/*! b_soft_rst - Soft reset for DAC channel B, active high + * 0b0..no action + * 0b1.. + */ +#define DAC_RST_B_SOFT_RST(x) (((uint32_t)(((uint32_t)(x)) << DAC_RST_B_SOFT_RST_SHIFT)) & DAC_RST_B_SOFT_RST_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group DAC_Register_Masks */ + + +/* DAC - Peripheral instance base addresses */ +/** Peripheral DAC base address */ +#define DAC_BASE (0x460B0200u) +/** Peripheral DAC base pointer */ +#define DAC ((DAC_Type *)DAC_BASE) +/** Array initializer of DAC peripheral base addresses */ +#define DAC_BASE_ADDRS { DAC_BASE } +/** Array initializer of DAC peripheral base pointers */ +#define DAC_BASE_PTRS { DAC } +/** Interrupt vectors for the DAC peripheral type */ +#define DAC_IRQS { DAC_IRQn } + +/*! + * @} + */ /* end of group DAC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- DMAC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DMAC_Peripheral_Access_Layer DMAC Peripheral Access Layer + * @{ + */ + +/** DMAC - Register Layout Typedef */ +typedef struct { + __IO uint32_t MASK_BLOCKINT; /**< DMA channel BLOCK TRANSFER INTERRUPT MASK registers, offset: 0x0 */ + __IO uint32_t STATUS_BLOCKINT; /**< DMA channel BLOCK TRANSFER INTERRUPT Registers, offset: 0x4 */ + __IO uint32_t MASK_TFRINT; /**< DMA Channel transfer completion interrupt mask Registers, offset: 0x8 */ + __IO uint32_t STATUS_TFRINT; /**< DMA Channel transfer completion interrupt Registers, offset: 0xC */ + __IO uint32_t MASK_BUSERRINT; /**< DMA Channel bus error interrupt mask Registers, offset: 0x10 */ + __IO uint32_t STATUS_BUSERRINT; /**< DMA Channel bus error interrupt mask Registers, offset: 0x14 */ + __IO uint32_t MASK_ADDRERRINT; /**< DMA Channel source/target address alignment error interrupt mask Registers, offset: 0x18 */ + __IO uint32_t STATUS_ADDRERRINT; /**< DMA Channel source/target address alignment error interrupt Registers, offset: 0x1C */ + __I uint32_t STATUS_CHLINT; /**< DMA CHANNEL INTERRUPT REGISTER, offset: 0x20 */ + uint8_t RESERVED_0[92]; + __IO uint32_t HPROT; /**< THE PROTECTION CONTROL SIGNALS REGISTERS, offset: 0x80 */ + uint8_t RESERVED_1[124]; + struct { /* offset: 0x100, array step: 0x30 */ + __IO uint32_t SADR; /**< DMA SOURCE ADDRESS REGISTERS, array offset: 0x100, array step: 0x30 */ + __IO uint32_t TADR; /**< DMA TARGET ADDRESS REGISTERS, array offset: 0x104, array step: 0x30 */ + __IO uint32_t CTRLA; /**< DMA CONTROL REGISTERS A, array offset: 0x108, array step: 0x30 */ + __IO uint32_t CTRLB; /**< DMA CONTROL REGISTERS B, array offset: 0x10C, array step: 0x30 */ + __IO uint32_t CHL_EN; /**< DMA CHANNEL ENABLE REGISTERS, array offset: 0x110, array step: 0x30 */ + __IO uint32_t CHL_STOP; /**< DMA CHANNEL STOP REGISTERS, array offset: 0x114, array step: 0x30 */ + uint8_t RESERVED_0[24]; + } CHANNEL[32]; + uint8_t RESERVED_2[256]; + __IO uint32_t ACK_DELAY; /**< DMA ACK DELAY CYCLE for single transfer in M2P transfer type Registers, offset: 0x800 */ + uint8_t RESERVED_3[252]; + __I uint32_t ERR_INFO0; /**< DMA ERROR INFORMATION REGISTER 0, offset: 0x900 */ + __I uint32_t ERR_INFO1; /**< DMA ERROR INFORMATION REGISTER 1, offset: 0x904 */ + __I uint32_t DIAGNOSE_INFO0; /**< DMA DIAGNOSE INFORMATION REGISTER 0, offset: 0x908 */ + __I uint32_t DIAGNOSE_INFO1; /**< DMA DIAGNOSE INFORMATION REGISTER 1, offset: 0x90C */ + __I uint32_t DIAGNOSE_INFO2; /**< DMA DIAGNOSE INFORMATION REGISTER 2, offset: 0x910 */ + __I uint32_t DIAGNOSE_INFO3; /**< DMA DIAGNOSE INFORMATION REGISTER 3, offset: 0x914 */ + __I uint32_t DIAGNOSE_INFO4; /**< DMA DIAGNOSE INFORMATION REGISTER 4, offset: 0x918 */ + __I uint32_t DIAGNOSE_INFO5; /**< DMA DIAGNOSE INFORMATION REGISTER 5, offset: 0x91C */ + __I uint32_t DIAGNOSE_INFO6; /**< DMA DIAGNOSE INFORMATION REGISTER 6, offset: 0x920 */ + __I uint32_t DIAGNOSE_INFO7; /**< DMA DIAGNOSE INFORMATION REGISTER 7, offset: 0x924 */ +} DMAC_Type; + +/* ---------------------------------------------------------------------------- + -- DMAC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DMAC_Register_Masks DMAC Register Masks + * @{ + */ + +/*! @name MASK_BLOCKINT - DMA channel BLOCK TRANSFER INTERRUPT MASK registers */ +/*! @{ */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT0_MASK (0x1U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT0_SHIFT (0U) +/*! MASK_BLOCKINT0 - DMA channel 0 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT0_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT0_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT1_MASK (0x2U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT1_SHIFT (1U) +/*! MASK_BLOCKINT1 - DMA channel 1 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT1_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT1_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT2_MASK (0x4U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT2_SHIFT (2U) +/*! MASK_BLOCKINT2 - DMA channel 2 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT2_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT2_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT3_MASK (0x8U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT3_SHIFT (3U) +/*! MASK_BLOCKINT3 - DMA channel 3 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT3_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT3_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT4_MASK (0x10U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT4_SHIFT (4U) +/*! MASK_BLOCKINT4 - DMA channel 4 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT4_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT4_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT5_MASK (0x20U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT5_SHIFT (5U) +/*! MASK_BLOCKINT5 - DMA channel 5 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT5_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT5_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT6_MASK (0x40U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT6_SHIFT (6U) +/*! MASK_BLOCKINT6 - DMA channel 6 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT6_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT6_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT7_MASK (0x80U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT7_SHIFT (7U) +/*! MASK_BLOCKINT7 - DMA channel 7 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT7_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT7_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT8_MASK (0x100U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT8_SHIFT (8U) +/*! MASK_BLOCKINT8 - DMA channel 8 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT8_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT8_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT9_MASK (0x200U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT9_SHIFT (9U) +/*! MASK_BLOCKINT9 - DMA channel 9 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT9_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT9_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT10_MASK (0x400U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT10_SHIFT (10U) +/*! MASK_BLOCKINT10 - DMA channel 10 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT10_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT10_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT11_MASK (0x800U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT11_SHIFT (11U) +/*! MASK_BLOCKINT11 - DMA channel 11 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT11_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT11_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT12_MASK (0x1000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT12_SHIFT (12U) +/*! MASK_BLOCKINT12 - DMA channel 12 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT12_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT12_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT13_MASK (0x2000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT13_SHIFT (13U) +/*! MASK_BLOCKINT13 - DMA channel 13 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT13_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT13_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT14_MASK (0x4000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT14_SHIFT (14U) +/*! MASK_BLOCKINT14 - DMA channel 14 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT14_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT14_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT15_MASK (0x8000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT15_SHIFT (15U) +/*! MASK_BLOCKINT15 - DMA channel 15 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT15_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT15_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT16_MASK (0x10000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT16_SHIFT (16U) +/*! MASK_BLOCKINT16 - DMA channel 16 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT16_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT16_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT17_MASK (0x20000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT17_SHIFT (17U) +/*! MASK_BLOCKINT17 - DMA channel 17 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT17_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT17_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT18_MASK (0x40000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT18_SHIFT (18U) +/*! MASK_BLOCKINT18 - DMA channel 18 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT18_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT18_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT19_MASK (0x80000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT19_SHIFT (19U) +/*! MASK_BLOCKINT19 - DMA channel 19 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT19_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT19_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT20_MASK (0x100000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT20_SHIFT (20U) +/*! MASK_BLOCKINT20 - DMA channel 20 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT20_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT20_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT21_MASK (0x200000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT21_SHIFT (21U) +/*! MASK_BLOCKINT21 - DMA channel 21 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT21_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT21_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT22_MASK (0x400000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT22_SHIFT (22U) +/*! MASK_BLOCKINT22 - DMA channel 22 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT22_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT22_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT23_MASK (0x800000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT23_SHIFT (23U) +/*! MASK_BLOCKINT23 - DMA channel 23 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT23_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT23_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT24_MASK (0x1000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT24_SHIFT (24U) +/*! MASK_BLOCKINT24 - DMA channel 24 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT24_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT24_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT25_MASK (0x2000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT25_SHIFT (25U) +/*! MASK_BLOCKINT25 - DMA channel 25 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT25_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT25_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT26_MASK (0x4000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT26_SHIFT (26U) +/*! MASK_BLOCKINT26 - DMA channel 26 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT26_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT26_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT27_MASK (0x8000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT27_SHIFT (27U) +/*! MASK_BLOCKINT27 - DMA channel 27 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT27_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT27_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT28_MASK (0x10000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT28_SHIFT (28U) +/*! MASK_BLOCKINT28 - DMA channel 28 block transfer interrupt mask bit + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT28_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT28_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT29_MASK (0x20000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT29_SHIFT (29U) +/*! MASK_BLOCKINT29 - DMA channel 29 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT29_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT29_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT30_MASK (0x40000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT30_SHIFT (30U) +/*! MASK_BLOCKINT30 - DMA channel 30 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT30_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT30_MASK) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT31_MASK (0x80000000U) +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT31_SHIFT (31U) +/*! MASK_BLOCKINT31 - DMA channel 31 block transfer interrupt mask bit + * 0b0..mask the corresponding block interrupt + * 0b1..unmask the corresponding block interrupt + */ +#define DMAC_MASK_BLOCKINT_MASK_BLOCKINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BLOCKINT_MASK_BLOCKINT31_SHIFT)) & DMAC_MASK_BLOCKINT_MASK_BLOCKINT31_MASK) +/*! @} */ + +/*! @name STATUS_BLOCKINT - DMA channel BLOCK TRANSFER INTERRUPT Registers */ +/*! @{ */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT0_MASK (0x1U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT0_SHIFT (0U) +/*! STATUS_BLOCKINT0 - DMA channel 0 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT0_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT0_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT1_MASK (0x2U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT1_SHIFT (1U) +/*! STATUS_BLOCKINT1 - DMA channel 1 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT1_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT1_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT2_MASK (0x4U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT2_SHIFT (2U) +/*! STATUS_BLOCKINT2 - DMA channel 2 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT2_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT2_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT3_MASK (0x8U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT3_SHIFT (3U) +/*! STATUS_BLOCKINT3 - DMA channel 3 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT3_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT3_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT4_MASK (0x10U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT4_SHIFT (4U) +/*! STATUS_BLOCKINT4 - DMA channel 4 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT4_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT4_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT5_MASK (0x20U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT5_SHIFT (5U) +/*! STATUS_BLOCKINT5 - DMA channel 5 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT5_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT5_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT6_MASK (0x40U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT6_SHIFT (6U) +/*! STATUS_BLOCKINT6 - DMA channel 6 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT6_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT6_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT7_MASK (0x80U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT7_SHIFT (7U) +/*! STATUS_BLOCKINT7 - DMA channel 7 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT7_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT7_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT8_MASK (0x100U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT8_SHIFT (8U) +/*! STATUS_BLOCKINT8 - DMA channel 8 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT8_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT8_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT9_MASK (0x200U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT9_SHIFT (9U) +/*! STATUS_BLOCKINT9 - DMA channel 9 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT9_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT9_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT10_MASK (0x400U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT10_SHIFT (10U) +/*! STATUS_BLOCKINT10 - DMA channel 10 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT10_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT10_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT11_MASK (0x800U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT11_SHIFT (11U) +/*! STATUS_BLOCKINT11 - DMA channel 11 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT11_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT11_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT12_MASK (0x1000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT12_SHIFT (12U) +/*! STATUS_BLOCKINT12 - DMA channel 12 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT12_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT12_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT13_MASK (0x2000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT13_SHIFT (13U) +/*! STATUS_BLOCKINT13 - DMA channel 13 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT13_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT13_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT14_MASK (0x4000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT14_SHIFT (14U) +/*! STATUS_BLOCKINT14 - DMA channel 14 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT14_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT14_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT15_MASK (0x8000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT15_SHIFT (15U) +/*! STATUS_BLOCKINT15 - DMA channel 15 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT15_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT15_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT16_MASK (0x10000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT16_SHIFT (16U) +/*! STATUS_BLOCKINT16 - DMA channel 16 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT16_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT16_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT17_MASK (0x20000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT17_SHIFT (17U) +/*! STATUS_BLOCKINT17 - DMA channel 17 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT17_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT17_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT18_MASK (0x40000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT18_SHIFT (18U) +/*! STATUS_BLOCKINT18 - DMA channel 18 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT18_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT18_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT19_MASK (0x80000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT19_SHIFT (19U) +/*! STATUS_BLOCKINT19 - DMA channel 19 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT19_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT19_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT20_MASK (0x100000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT20_SHIFT (20U) +/*! STATUS_BLOCKINT20 - DMA channel 20 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT20_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT20_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT21_MASK (0x200000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT21_SHIFT (21U) +/*! STATUS_BLOCKINT21 - DMA channel 21 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT21_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT21_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT22_MASK (0x400000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT22_SHIFT (22U) +/*! STATUS_BLOCKINT22 - DMA channel 22 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT22_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT22_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT23_MASK (0x800000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT23_SHIFT (23U) +/*! STATUS_BLOCKINT23 - DMA channel 23 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT23_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT23_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT24_MASK (0x1000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT24_SHIFT (24U) +/*! STATUS_BLOCKINT24 - DMA channel 24 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT24_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT24_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT25_MASK (0x2000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT25_SHIFT (25U) +/*! STATUS_BLOCKINT25 - DMA channel 25 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT25_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT25_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT26_MASK (0x4000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT26_SHIFT (26U) +/*! STATUS_BLOCKINT26 - DMA channel 26 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT26_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT26_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT27_MASK (0x8000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT27_SHIFT (27U) +/*! STATUS_BLOCKINT27 - DMA channel 27 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT27_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT27_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT28_MASK (0x10000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT28_SHIFT (28U) +/*! STATUS_BLOCKINT28 - DMA channel 28 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT28_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT28_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT29_MASK (0x20000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT29_SHIFT (29U) +/*! STATUS_BLOCKINT29 - DMA channel 29 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT29_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT29_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT30_MASK (0x40000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT30_SHIFT (30U) +/*! STATUS_BLOCKINT30 - DMA channel 30 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT30_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT30_MASK) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT31_MASK (0x80000000U) +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT31_SHIFT (31U) +/*! STATUS_BLOCKINT31 - DMA channel 31 block transfer interrupt bit + * 0b0..DMA block burst/single transfer is not completed + * 0b1..DMA block burst/single transfer is completed + */ +#define DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT31_SHIFT)) & DMAC_STATUS_BLOCKINT_STATUS_BLOCKINT31_MASK) +/*! @} */ + +/*! @name MASK_TFRINT - DMA Channel transfer completion interrupt mask Registers */ +/*! @{ */ +#define DMAC_MASK_TFRINT_MASK_TFRINT0_MASK (0x1U) +#define DMAC_MASK_TFRINT_MASK_TFRINT0_SHIFT (0U) +/*! MASK_TFRINT0 - DMA channel 0 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT0_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT0_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT1_MASK (0x2U) +#define DMAC_MASK_TFRINT_MASK_TFRINT1_SHIFT (1U) +/*! MASK_TFRINT1 - DMA channel 1 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT1_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT1_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT2_MASK (0x4U) +#define DMAC_MASK_TFRINT_MASK_TFRINT2_SHIFT (2U) +/*! MASK_TFRINT2 - DMA channel 2 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT2_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT2_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT3_MASK (0x8U) +#define DMAC_MASK_TFRINT_MASK_TFRINT3_SHIFT (3U) +/*! MASK_TFRINT3 - DMA channel 3 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT3_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT3_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT4_MASK (0x10U) +#define DMAC_MASK_TFRINT_MASK_TFRINT4_SHIFT (4U) +/*! MASK_TFRINT4 - DMA channel 4 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT4_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT4_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT5_MASK (0x20U) +#define DMAC_MASK_TFRINT_MASK_TFRINT5_SHIFT (5U) +/*! MASK_TFRINT5 - DMA channel 5 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT5_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT5_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT6_MASK (0x40U) +#define DMAC_MASK_TFRINT_MASK_TFRINT6_SHIFT (6U) +/*! MASK_TFRINT6 - DMA channel 6 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT6_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT6_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT7_MASK (0x80U) +#define DMAC_MASK_TFRINT_MASK_TFRINT7_SHIFT (7U) +/*! MASK_TFRINT7 - DMA channel 7 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT7_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT7_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT8_MASK (0x100U) +#define DMAC_MASK_TFRINT_MASK_TFRINT8_SHIFT (8U) +/*! MASK_TFRINT8 - DMA channel 8 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT8_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT8_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT9_MASK (0x200U) +#define DMAC_MASK_TFRINT_MASK_TFRINT9_SHIFT (9U) +/*! MASK_TFRINT9 - DMA channel 9 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT9_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT9_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT10_MASK (0x400U) +#define DMAC_MASK_TFRINT_MASK_TFRINT10_SHIFT (10U) +/*! MASK_TFRINT10 - DMA channel 10 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT10_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT10_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT11_MASK (0x800U) +#define DMAC_MASK_TFRINT_MASK_TFRINT11_SHIFT (11U) +/*! MASK_TFRINT11 - DMA channel 11 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT11_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT11_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT12_MASK (0x1000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT12_SHIFT (12U) +/*! MASK_TFRINT12 - DMA channel 12 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT12_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT12_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT13_MASK (0x2000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT13_SHIFT (13U) +/*! MASK_TFRINT13 - DMA channel 13 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT13_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT13_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT14_MASK (0x4000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT14_SHIFT (14U) +/*! MASK_TFRINT14 - DMA channel 14 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT14_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT14_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT15_MASK (0x8000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT15_SHIFT (15U) +/*! MASK_TFRINT15 - DMA channel 15 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT15_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT15_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT16_MASK (0x10000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT16_SHIFT (16U) +/*! MASK_TFRINT16 - DMA channel 16 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT16_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT16_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT17_MASK (0x20000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT17_SHIFT (17U) +/*! MASK_TFRINT17 - DMA channel 17 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT17_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT17_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT18_MASK (0x40000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT18_SHIFT (18U) +/*! MASK_TFRINT18 - DMA channel 18 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT18_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT18_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT19_MASK (0x80000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT19_SHIFT (19U) +/*! MASK_TFRINT19 - DMA channel 19 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT19_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT19_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT20_MASK (0x100000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT20_SHIFT (20U) +/*! MASK_TFRINT20 - DMA channel 20 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT20_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT20_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT21_MASK (0x200000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT21_SHIFT (21U) +/*! MASK_TFRINT21 - DMA channel 21 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT21_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT21_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT22_MASK (0x400000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT22_SHIFT (22U) +/*! MASK_TFRINT22 - DMA channel 22 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT22_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT22_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT23_MASK (0x800000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT23_SHIFT (23U) +/*! MASK_TFRINT23 - DMA channel 23 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT23_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT23_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT24_MASK (0x1000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT24_SHIFT (24U) +/*! MASK_TFRINT24 - DMA channel 24 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT24_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT24_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT25_MASK (0x2000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT25_SHIFT (25U) +/*! MASK_TFRINT25 - DMA channel 25 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT25_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT25_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT26_MASK (0x4000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT26_SHIFT (26U) +/*! MASK_TFRINT26 - DMA channel 26 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT26_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT26_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT27_MASK (0x8000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT27_SHIFT (27U) +/*! MASK_TFRINT27 - DMA channel 27 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT27_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT27_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT28_MASK (0x10000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT28_SHIFT (28U) +/*! MASK_TFRINT28 - DMA channel 28 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT28_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT28_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT29_MASK (0x20000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT29_SHIFT (29U) +/*! MASK_TFRINT29 - DMA channel 29 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT29_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT29_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT30_MASK (0x40000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT30_SHIFT (30U) +/*! MASK_TFRINT30 - DMA channel 30 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT30_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT30_MASK) +#define DMAC_MASK_TFRINT_MASK_TFRINT31_MASK (0x80000000U) +#define DMAC_MASK_TFRINT_MASK_TFRINT31_SHIFT (31U) +/*! MASK_TFRINT31 - DMA channel 31 transfer completion interrupt mask bit + * 0b0..mask the corresponding transfer completion interrupt + * 0b1..unmask the corresponding transfer completion interrupt + */ +#define DMAC_MASK_TFRINT_MASK_TFRINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_TFRINT_MASK_TFRINT31_SHIFT)) & DMAC_MASK_TFRINT_MASK_TFRINT31_MASK) +/*! @} */ + +/*! @name STATUS_TFRINT - DMA Channel transfer completion interrupt Registers */ +/*! @{ */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT0_MASK (0x1U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT0_SHIFT (0U) +/*! STATUS_TFRINT0 - DMA channel 0 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT0_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT0_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT1_MASK (0x2U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT1_SHIFT (1U) +/*! STATUS_TFRINT1 - DMA channel 1 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT1_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT1_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT2_MASK (0x4U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT2_SHIFT (2U) +/*! STATUS_TFRINT2 - DMA channel 2 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT2_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT2_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT3_MASK (0x8U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT3_SHIFT (3U) +/*! STATUS_TFRINT3 - DMA channel 3 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT3_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT3_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT4_MASK (0x10U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT4_SHIFT (4U) +/*! STATUS_TFRINT4 - DMA channel 4 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT4_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT4_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT5_MASK (0x20U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT5_SHIFT (5U) +/*! STATUS_TFRINT5 - DMA channel 5 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT5_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT5_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT6_MASK (0x40U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT6_SHIFT (6U) +/*! STATUS_TFRINT6 - DMA channel 6 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT6_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT6_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT7_MASK (0x80U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT7_SHIFT (7U) +/*! STATUS_TFRINT7 - DMA channel 7 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT7_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT7_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT8_MASK (0x100U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT8_SHIFT (8U) +/*! STATUS_TFRINT8 - DMA channel 8 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT8_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT8_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT9_MASK (0x200U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT9_SHIFT (9U) +/*! STATUS_TFRINT9 - DMA channel 9 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT9_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT9_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT10_MASK (0x400U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT10_SHIFT (10U) +/*! STATUS_TFRINT10 - DMA channel 10 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT10_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT10_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT11_MASK (0x800U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT11_SHIFT (11U) +/*! STATUS_TFRINT11 - DMA channel 11 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT11_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT11_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT12_MASK (0x1000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT12_SHIFT (12U) +/*! STATUS_TFRINT12 - DMA channel 12 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT12_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT12_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT13_MASK (0x2000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT13_SHIFT (13U) +/*! STATUS_TFRINT13 - DMA channel 13 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT13_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT13_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT14_MASK (0x4000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT14_SHIFT (14U) +/*! STATUS_TFRINT14 - DMA channel 14 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT14_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT14_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT15_MASK (0x8000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT15_SHIFT (15U) +/*! STATUS_TFRINT15 - DMA channel 15 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT15_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT15_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT16_MASK (0x10000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT16_SHIFT (16U) +/*! STATUS_TFRINT16 - DMA channel 16 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT16_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT16_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT17_MASK (0x20000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT17_SHIFT (17U) +/*! STATUS_TFRINT17 - DMA channel 17 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT17_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT17_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT18_MASK (0x40000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT18_SHIFT (18U) +/*! STATUS_TFRINT18 - DMA channel 18 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT18_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT18_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT19_MASK (0x80000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT19_SHIFT (19U) +/*! STATUS_TFRINT19 - DMA channel 19 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT19_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT19_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT20_MASK (0x100000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT20_SHIFT (20U) +/*! STATUS_TFRINT20 - DMA channel 20 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT20_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT20_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT21_MASK (0x200000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT21_SHIFT (21U) +/*! STATUS_TFRINT21 - DMA channel 21 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT21_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT21_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT22_MASK (0x400000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT22_SHIFT (22U) +/*! STATUS_TFRINT22 - DMA channel 22 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT22_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT22_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT23_MASK (0x800000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT23_SHIFT (23U) +/*! STATUS_TFRINT23 - DMA channel 23 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT23_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT23_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT24_MASK (0x1000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT24_SHIFT (24U) +/*! STATUS_TFRINT24 - DMA channel 24 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT24_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT24_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT25_MASK (0x2000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT25_SHIFT (25U) +/*! STATUS_TFRINT25 - DMA channel 25 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT25_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT25_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT26_MASK (0x4000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT26_SHIFT (26U) +/*! STATUS_TFRINT26 - DMA channel 26 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT26_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT26_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT27_MASK (0x8000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT27_SHIFT (27U) +/*! STATUS_TFRINT27 - DMA channel 27 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT27_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT27_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT28_MASK (0x10000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT28_SHIFT (28U) +/*! STATUS_TFRINT28 - DMA channel 28 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT28_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT28_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT29_MASK (0x20000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT29_SHIFT (29U) +/*! STATUS_TFRINT29 - DMA channel 29 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT29_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT29_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT30_MASK (0x40000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT30_SHIFT (30U) +/*! STATUS_TFRINT30 - DMA channel 30 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT30_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT30_MASK) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT31_MASK (0x80000000U) +#define DMAC_STATUS_TFRINT_STATUS_TFRINT31_SHIFT (31U) +/*! STATUS_TFRINT31 - DMA channel 31 transfer completion interrupt + * 0b0..transfer is not completed + * 0b1..transfer is completed + */ +#define DMAC_STATUS_TFRINT_STATUS_TFRINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_TFRINT_STATUS_TFRINT31_SHIFT)) & DMAC_STATUS_TFRINT_STATUS_TFRINT31_MASK) +/*! @} */ + +/*! @name MASK_BUSERRINT - DMA Channel bus error interrupt mask Registers */ +/*! @{ */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT0_MASK (0x1U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT0_SHIFT (0U) +/*! MASK_BUSERRINT0 - DMA Channel 0 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT0_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT0_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT1_MASK (0x2U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT1_SHIFT (1U) +/*! MASK_BUSERRINT1 - DMA Channel 1 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT1_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT1_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT2_MASK (0x4U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT2_SHIFT (2U) +/*! MASK_BUSERRINT2 - DMA Channel 2 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT2_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT2_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT3_MASK (0x8U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT3_SHIFT (3U) +/*! MASK_BUSERRINT3 - DMA Channel 3 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT3_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT3_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT4_MASK (0x10U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT4_SHIFT (4U) +/*! MASK_BUSERRINT4 - DMA Channel 4 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT4_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT4_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT5_MASK (0x20U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT5_SHIFT (5U) +/*! MASK_BUSERRINT5 - DMA Channel 5 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT5_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT5_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT6_MASK (0x40U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT6_SHIFT (6U) +/*! MASK_BUSERRINT6 - DMA Channel 6 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT6_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT6_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT7_MASK (0x80U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT7_SHIFT (7U) +/*! MASK_BUSERRINT7 - DMA Channel 7 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT7_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT7_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT8_MASK (0x100U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT8_SHIFT (8U) +/*! MASK_BUSERRINT8 - DMA Channel 8 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT8_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT8_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT9_MASK (0x200U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT9_SHIFT (9U) +/*! MASK_BUSERRINT9 - DMA Channel 9 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT9_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT9_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT10_MASK (0x400U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT10_SHIFT (10U) +/*! MASK_BUSERRINT10 - DMA Channel 10 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT10_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT10_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT11_MASK (0x800U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT11_SHIFT (11U) +/*! MASK_BUSERRINT11 - DMA Channel 11 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT11_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT11_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT12_MASK (0x1000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT12_SHIFT (12U) +/*! MASK_BUSERRINT12 - DMA Channel 12 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT12_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT12_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT13_MASK (0x2000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT13_SHIFT (13U) +/*! MASK_BUSERRINT13 - DMA Channel 13 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT13_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT13_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT14_MASK (0x4000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT14_SHIFT (14U) +/*! MASK_BUSERRINT14 - DMA Channel 14 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT14_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT14_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT15_MASK (0x8000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT15_SHIFT (15U) +/*! MASK_BUSERRINT15 - DMA Channel 15 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT15_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT15_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT16_MASK (0x10000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT16_SHIFT (16U) +/*! MASK_BUSERRINT16 - DMA Channel 16 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT16_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT16_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT17_MASK (0x20000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT17_SHIFT (17U) +/*! MASK_BUSERRINT17 - DMA Channel 17 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT17_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT17_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT18_MASK (0x40000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT18_SHIFT (18U) +/*! MASK_BUSERRINT18 - DMA Channel 18 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT18_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT18_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT19_MASK (0x80000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT19_SHIFT (19U) +/*! MASK_BUSERRINT19 - DMA Channel 19 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT19_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT19_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT20_MASK (0x100000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT20_SHIFT (20U) +/*! MASK_BUSERRINT20 - DMA Channel 20 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT20_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT20_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT21_MASK (0x200000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT21_SHIFT (21U) +/*! MASK_BUSERRINT21 - DMA Channel 21 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT21_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT21_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT22_MASK (0x400000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT22_SHIFT (22U) +/*! MASK_BUSERRINT22 - DMA Channel 22 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT22_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT22_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT23_MASK (0x800000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT23_SHIFT (23U) +/*! MASK_BUSERRINT23 - DMA Channel 23 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT23_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT23_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT24_MASK (0x1000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT24_SHIFT (24U) +/*! MASK_BUSERRINT24 - DMA Channel 24 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT24_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT24_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT25_MASK (0x2000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT25_SHIFT (25U) +/*! MASK_BUSERRINT25 - DMA Channel 25 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT25_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT25_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT26_MASK (0x4000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT26_SHIFT (26U) +/*! MASK_BUSERRINT26 - DMA Channel 26 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT26_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT26_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT27_MASK (0x8000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT27_SHIFT (27U) +/*! MASK_BUSERRINT27 - DMA Channel 27 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT27_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT27_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT28_MASK (0x10000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT28_SHIFT (28U) +/*! MASK_BUSERRINT28 - DMA Channel 28 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT28_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT28_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT29_MASK (0x20000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT29_SHIFT (29U) +/*! MASK_BUSERRINT29 - DMA Channel 29 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT29_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT29_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT30_MASK (0x40000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT30_SHIFT (30U) +/*! MASK_BUSERRINT30 - DMA Channel 30 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT30_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT30_MASK) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT31_MASK (0x80000000U) +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT31_SHIFT (31U) +/*! MASK_BUSERRINT31 - DMA Channel 31 bus error interrupt mask bit + * 0b0..mask the corresponding bus error interrupt + * 0b1..unmask the corresponding bus error interrupt + */ +#define DMAC_MASK_BUSERRINT_MASK_BUSERRINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_BUSERRINT_MASK_BUSERRINT31_SHIFT)) & DMAC_MASK_BUSERRINT_MASK_BUSERRINT31_MASK) +/*! @} */ + +/*! @name STATUS_BUSERRINT - DMA Channel bus error interrupt mask Registers */ +/*! @{ */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT0_MASK (0x1U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT0_SHIFT (0U) +/*! STATUS_BUSERRINT0 - DMA channel 0 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT0_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT0_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT1_MASK (0x2U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT1_SHIFT (1U) +/*! STATUS_BUSERRINT1 - DMA channel 1 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT1_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT1_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT2_MASK (0x4U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT2_SHIFT (2U) +/*! STATUS_BUSERRINT2 - DMA channel 2 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT2_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT2_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT3_MASK (0x8U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT3_SHIFT (3U) +/*! STATUS_BUSERRINT3 - DMA channel 3 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT3_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT3_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT4_MASK (0x10U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT4_SHIFT (4U) +/*! STATUS_BUSERRINT4 - DMA channel 4 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT4_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT4_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT5_MASK (0x20U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT5_SHIFT (5U) +/*! STATUS_BUSERRINT5 - DMA channel 5 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT5_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT5_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT6_MASK (0x40U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT6_SHIFT (6U) +/*! STATUS_BUSERRINT6 - DMA channel 6 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT6_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT6_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT7_MASK (0x80U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT7_SHIFT (7U) +/*! STATUS_BUSERRINT7 - DMA channel 7 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT7_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT7_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT8_MASK (0x100U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT8_SHIFT (8U) +/*! STATUS_BUSERRINT8 - DMA channel 8 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT8_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT8_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT9_MASK (0x200U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT9_SHIFT (9U) +/*! STATUS_BUSERRINT9 - DMA channel 9 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT9_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT9_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT10_MASK (0x400U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT10_SHIFT (10U) +/*! STATUS_BUSERRINT10 - DMA channel 10 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT10_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT10_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT11_MASK (0x800U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT11_SHIFT (11U) +/*! STATUS_BUSERRINT11 - DMA channel 11 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT11_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT11_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT12_MASK (0x1000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT12_SHIFT (12U) +/*! STATUS_BUSERRINT12 - DMA channel 12 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT12_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT12_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT13_MASK (0x2000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT13_SHIFT (13U) +/*! STATUS_BUSERRINT13 - DMA channel 13 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT13_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT13_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT14_MASK (0x4000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT14_SHIFT (14U) +/*! STATUS_BUSERRINT14 - DMA channel 14 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT14_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT14_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT15_MASK (0x8000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT15_SHIFT (15U) +/*! STATUS_BUSERRINT15 - DMA channel 15 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT15_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT15_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT16_MASK (0x10000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT16_SHIFT (16U) +/*! STATUS_BUSERRINT16 - DMA channel 16 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT16_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT16_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT17_MASK (0x20000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT17_SHIFT (17U) +/*! STATUS_BUSERRINT17 - DMA channel 17 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT17_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT17_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT18_MASK (0x40000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT18_SHIFT (18U) +/*! STATUS_BUSERRINT18 - DMA channel 18 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT18_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT18_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT19_MASK (0x80000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT19_SHIFT (19U) +/*! STATUS_BUSERRINT19 - DMA channel 19 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT19_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT19_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT20_MASK (0x100000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT20_SHIFT (20U) +/*! STATUS_BUSERRINT20 - DMA channel 20 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT20_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT20_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT21_MASK (0x200000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT21_SHIFT (21U) +/*! STATUS_BUSERRINT21 - DMA channel 21 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT21_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT21_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT22_MASK (0x400000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT22_SHIFT (22U) +/*! STATUS_BUSERRINT22 - DMA channel 22 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT22_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT22_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT23_MASK (0x800000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT23_SHIFT (23U) +/*! STATUS_BUSERRINT23 - DMA channel 23 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT23_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT23_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT24_MASK (0x1000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT24_SHIFT (24U) +/*! STATUS_BUSERRINT24 - DMA channel 24 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT24_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT24_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT25_MASK (0x2000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT25_SHIFT (25U) +/*! STATUS_BUSERRINT25 - DMA channel 25 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT25_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT25_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT26_MASK (0x4000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT26_SHIFT (26U) +/*! STATUS_BUSERRINT26 - DMA channel 26 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT26_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT26_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT27_MASK (0x8000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT27_SHIFT (27U) +/*! STATUS_BUSERRINT27 - DMA channel 27 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT27_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT27_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT28_MASK (0x10000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT28_SHIFT (28U) +/*! STATUS_BUSERRINT28 - DMA channel 28 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT28_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT28_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT29_MASK (0x20000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT29_SHIFT (29U) +/*! STATUS_BUSERRINT29 - DMA channel 29 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT29_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT29_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT30_MASK (0x40000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT30_SHIFT (30U) +/*! STATUS_BUSERRINT30 - DMA channel 30 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT30_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT30_MASK) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT31_MASK (0x80000000U) +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT31_SHIFT (31U) +/*! STATUS_BUSERRINT31 - DMA channel 31 bus error interrupt bit + * 0b0..no bus error interrupt is generated + * 0b1..bus error interrupt is generated + */ +#define DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT31_SHIFT)) & DMAC_STATUS_BUSERRINT_STATUS_BUSERRINT31_MASK) +/*! @} */ + +/*! @name MASK_ADDRERRINT - DMA Channel source/target address alignment error interrupt mask Registers */ +/*! @{ */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT0_MASK (0x1U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT0_SHIFT (0U) +/*! MASK_ADDRERRINT0 - DMA Channel 0 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT0_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT0_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT1_MASK (0x2U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT1_SHIFT (1U) +/*! MASK_ADDRERRINT1 - DMA Channel 1 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT1_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT1_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT2_MASK (0x4U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT2_SHIFT (2U) +/*! MASK_ADDRERRINT2 - DMA Channel 2 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT2_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT2_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT3_MASK (0x8U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT3_SHIFT (3U) +/*! MASK_ADDRERRINT3 - DMA Channel 3 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT3_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT3_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT4_MASK (0x10U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT4_SHIFT (4U) +/*! MASK_ADDRERRINT4 - DMA Channel 4 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT4_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT4_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT5_MASK (0x20U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT5_SHIFT (5U) +/*! MASK_ADDRERRINT5 - DMA Channel 5 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT5_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT5_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT6_MASK (0x40U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT6_SHIFT (6U) +/*! MASK_ADDRERRINT6 - DMA Channel 6 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT6_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT6_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT7_MASK (0x80U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT7_SHIFT (7U) +/*! MASK_ADDRERRINT7 - DMA Channel 7 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT7_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT7_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT8_MASK (0x100U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT8_SHIFT (8U) +/*! MASK_ADDRERRINT8 - DMA Channel 8 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT8_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT8_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT9_MASK (0x200U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT9_SHIFT (9U) +/*! MASK_ADDRERRINT9 - DMA Channel 9 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT9_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT9_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT10_MASK (0x400U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT10_SHIFT (10U) +/*! MASK_ADDRERRINT10 - DMA Channel 10 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT10_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT10_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT11_MASK (0x800U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT11_SHIFT (11U) +/*! MASK_ADDRERRINT11 - DMA Channel 11 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT11_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT11_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT12_MASK (0x1000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT12_SHIFT (12U) +/*! MASK_ADDRERRINT12 - DMA Channel 12 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT12_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT12_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT13_MASK (0x2000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT13_SHIFT (13U) +/*! MASK_ADDRERRINT13 - DMA Channel 13 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT13_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT13_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT14_MASK (0x4000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT14_SHIFT (14U) +/*! MASK_ADDRERRINT14 - DMA Channel 14 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT14_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT14_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT15_MASK (0x8000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT15_SHIFT (15U) +/*! MASK_ADDRERRINT15 - DMA Channel 15 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT15_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT15_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT16_MASK (0x10000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT16_SHIFT (16U) +/*! MASK_ADDRERRINT16 - DMA Channel 16 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT16_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT16_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT17_MASK (0x20000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT17_SHIFT (17U) +/*! MASK_ADDRERRINT17 - DMA Channel 17 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT17_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT17_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT18_MASK (0x40000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT18_SHIFT (18U) +/*! MASK_ADDRERRINT18 - DMA Channel 18 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT18_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT18_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT19_MASK (0x80000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT19_SHIFT (19U) +/*! MASK_ADDRERRINT19 - DMA Channel 19 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT19_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT19_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT20_MASK (0x100000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT20_SHIFT (20U) +/*! MASK_ADDRERRINT20 - DMA Channel 20 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT20_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT20_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT21_MASK (0x200000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT21_SHIFT (21U) +/*! MASK_ADDRERRINT21 - DMA Channel 21 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT21_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT21_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT22_MASK (0x400000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT22_SHIFT (22U) +/*! MASK_ADDRERRINT22 - DMA Channel 22 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT22_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT22_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT23_MASK (0x800000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT23_SHIFT (23U) +/*! MASK_ADDRERRINT23 - DMA Channel 23 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT23_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT23_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT24_MASK (0x1000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT24_SHIFT (24U) +/*! MASK_ADDRERRINT24 - DMA Channel 24 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT24_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT24_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT25_MASK (0x2000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT25_SHIFT (25U) +/*! MASK_ADDRERRINT25 - DMA Channel 25 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT25_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT25_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT26_MASK (0x4000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT26_SHIFT (26U) +/*! MASK_ADDRERRINT26 - DMA Channel 26 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT26_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT26_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT27_MASK (0x8000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT27_SHIFT (27U) +/*! MASK_ADDRERRINT27 - DMA Channel 27 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT27_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT27_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT28_MASK (0x10000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT28_SHIFT (28U) +/*! MASK_ADDRERRINT28 - DMA Channel 28 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT28_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT28_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT29_MASK (0x20000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT29_SHIFT (29U) +/*! MASK_ADDRERRINT29 - DMA Channel 29 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT29_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT29_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT30_MASK (0x40000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT30_SHIFT (30U) +/*! MASK_ADDRERRINT30 - DMA Channel 30 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT30_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT30_MASK) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT31_MASK (0x80000000U) +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT31_SHIFT (31U) +/*! MASK_ADDRERRINT31 - DMA Channel 31 source/target address alignment error interrupt mask bit + * 0b0..mask the corresponding address error interrupt + * 0b1..unmask the corresponding address error interrupt + */ +#define DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT31_SHIFT)) & DMAC_MASK_ADDRERRINT_MASK_ADDRERRINT31_MASK) +/*! @} */ + +/*! @name STATUS_ADDRERRINT - DMA Channel source/target address alignment error interrupt Registers */ +/*! @{ */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT0_MASK (0x1U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT0_SHIFT (0U) +/*! STATUS_ADDRERRINT0 - DMA Channel 0 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT0_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT0_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT1_MASK (0x2U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT1_SHIFT (1U) +/*! STATUS_ADDRERRINT1 - DMA Channel 1 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT1_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT1_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT2_MASK (0x4U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT2_SHIFT (2U) +/*! STATUS_ADDRERRINT2 - DMA Channel 2 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT2_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT2_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT3_MASK (0x8U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT3_SHIFT (3U) +/*! STATUS_ADDRERRINT3 - DMA Channel 3 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT3_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT3_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT4_MASK (0x10U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT4_SHIFT (4U) +/*! STATUS_ADDRERRINT4 - DMA Channel 4 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT4_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT4_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT5_MASK (0x20U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT5_SHIFT (5U) +/*! STATUS_ADDRERRINT5 - DMA Channel 5 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT5_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT5_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT6_MASK (0x40U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT6_SHIFT (6U) +/*! STATUS_ADDRERRINT6 - DMA Channel 6 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT6_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT6_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT7_MASK (0x80U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT7_SHIFT (7U) +/*! STATUS_ADDRERRINT7 - DMA Channel 7 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT7_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT7_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT8_MASK (0x100U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT8_SHIFT (8U) +/*! STATUS_ADDRERRINT8 - DMA Channel 8 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT8_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT8_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT9_MASK (0x200U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT9_SHIFT (9U) +/*! STATUS_ADDRERRINT9 - DMA Channel 9 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT9_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT9_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT10_MASK (0x400U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT10_SHIFT (10U) +/*! STATUS_ADDRERRINT10 - DMA Channel 10 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT10_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT10_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT11_MASK (0x800U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT11_SHIFT (11U) +/*! STATUS_ADDRERRINT11 - DMA Channel 11 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT11_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT11_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT12_MASK (0x1000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT12_SHIFT (12U) +/*! STATUS_ADDRERRINT12 - DMA Channel 12 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT12_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT12_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT13_MASK (0x2000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT13_SHIFT (13U) +/*! STATUS_ADDRERRINT13 - DMA Channel 13 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT13_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT13_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT14_MASK (0x4000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT14_SHIFT (14U) +/*! STATUS_ADDRERRINT14 - DMA Channel 14 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT14_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT14_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT15_MASK (0x8000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT15_SHIFT (15U) +/*! STATUS_ADDRERRINT15 - DMA Channel 15 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT15_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT15_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT16_MASK (0x10000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT16_SHIFT (16U) +/*! STATUS_ADDRERRINT16 - DMA Channel 16 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT16_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT16_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT17_MASK (0x20000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT17_SHIFT (17U) +/*! STATUS_ADDRERRINT17 - DMA Channel 17 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT17_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT17_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT18_MASK (0x40000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT18_SHIFT (18U) +/*! STATUS_ADDRERRINT18 - DMA Channel 18 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT18_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT18_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT19_MASK (0x80000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT19_SHIFT (19U) +/*! STATUS_ADDRERRINT19 - DMA Channel 19 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT19_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT19_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT20_MASK (0x100000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT20_SHIFT (20U) +/*! STATUS_ADDRERRINT20 - DMA Channel 20 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT20_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT20_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT21_MASK (0x200000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT21_SHIFT (21U) +/*! STATUS_ADDRERRINT21 - DMA Channel 21 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT21_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT21_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT22_MASK (0x400000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT22_SHIFT (22U) +/*! STATUS_ADDRERRINT22 - DMA Channel 22 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT22_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT22_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT23_MASK (0x800000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT23_SHIFT (23U) +/*! STATUS_ADDRERRINT23 - DMA Channel 23 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT23_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT23_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT24_MASK (0x1000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT24_SHIFT (24U) +/*! STATUS_ADDRERRINT24 - DMA Channel 24 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT24_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT24_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT25_MASK (0x2000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT25_SHIFT (25U) +/*! STATUS_ADDRERRINT25 - DMA Channel 25 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT25_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT25_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT26_MASK (0x4000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT26_SHIFT (26U) +/*! STATUS_ADDRERRINT26 - DMA Channel 26 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT26_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT26_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT27_MASK (0x8000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT27_SHIFT (27U) +/*! STATUS_ADDRERRINT27 - DMA Channel 27 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT27_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT27_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT28_MASK (0x10000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT28_SHIFT (28U) +/*! STATUS_ADDRERRINT28 - DMA Channel 28 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT28_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT28_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT29_MASK (0x20000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT29_SHIFT (29U) +/*! STATUS_ADDRERRINT29 - DMA Channel 29 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT29_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT29_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT30_MASK (0x40000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT30_SHIFT (30U) +/*! STATUS_ADDRERRINT30 - DMA Channel 30 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT30_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT30_MASK) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT31_MASK (0x80000000U) +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT31_SHIFT (31U) +/*! STATUS_ADDRERRINT31 - DMA Channel 31 source/target address alignment error interrupt bit + * 0b0..no address error interrupt is generated + * 0b1..address error interrupt is generated + */ +#define DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT31_SHIFT)) & DMAC_STATUS_ADDRERRINT_STATUS_ADDRERRINT31_MASK) +/*! @} */ + +/*! @name STATUS_CHLINT - DMA CHANNEL INTERRUPT REGISTER */ +/*! @{ */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT0_MASK (0x1U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT0_SHIFT (0U) +/*! STATUS_CHLINT0 - DMA channel 0 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT0_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT0_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT1_MASK (0x2U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT1_SHIFT (1U) +/*! STATUS_CHLINT1 - DMA channel 1 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT1(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT1_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT1_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT2_MASK (0x4U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT2_SHIFT (2U) +/*! STATUS_CHLINT2 - DMA channel 2 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT2(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT2_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT2_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT3_MASK (0x8U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT3_SHIFT (3U) +/*! STATUS_CHLINT3 - DMA channel 3 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT3(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT3_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT3_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT4_MASK (0x10U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT4_SHIFT (4U) +/*! STATUS_CHLINT4 - DMA channel 4 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT4(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT4_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT4_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT5_MASK (0x20U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT5_SHIFT (5U) +/*! STATUS_CHLINT5 - DMA channel 5 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT5(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT5_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT5_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT6_MASK (0x40U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT6_SHIFT (6U) +/*! STATUS_CHLINT6 - DMA channel 6 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT6(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT6_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT6_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT7_MASK (0x80U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT7_SHIFT (7U) +/*! STATUS_CHLINT7 - DMA channel 7 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT7(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT7_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT7_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT8_MASK (0x100U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT8_SHIFT (8U) +/*! STATUS_CHLINT8 - DMA channel 8 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT8(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT8_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT8_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT9_MASK (0x200U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT9_SHIFT (9U) +/*! STATUS_CHLINT9 - DMA channel 9 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT9(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT9_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT9_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT10_MASK (0x400U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT10_SHIFT (10U) +/*! STATUS_CHLINT10 - DMA channel 10 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT10(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT10_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT10_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT11_MASK (0x800U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT11_SHIFT (11U) +/*! STATUS_CHLINT11 - DMA channel 11 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT11(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT11_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT11_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT12_MASK (0x1000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT12_SHIFT (12U) +/*! STATUS_CHLINT12 - DMA channel 12 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT12(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT12_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT12_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT13_MASK (0x2000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT13_SHIFT (13U) +/*! STATUS_CHLINT13 - DMA channel 13 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT13(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT13_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT13_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT14_MASK (0x4000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT14_SHIFT (14U) +/*! STATUS_CHLINT14 - DMA channel 14 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT14(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT14_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT14_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT15_MASK (0x8000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT15_SHIFT (15U) +/*! STATUS_CHLINT15 - DMA channel 15 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT15(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT15_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT15_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT16_MASK (0x10000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT16_SHIFT (16U) +/*! STATUS_CHLINT16 - DMA channel 16 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT16(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT16_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT16_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT17_MASK (0x20000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT17_SHIFT (17U) +/*! STATUS_CHLINT17 - DMA channel 17 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT17(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT17_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT17_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT18_MASK (0x40000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT18_SHIFT (18U) +/*! STATUS_CHLINT18 - DMA channel 18 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT18(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT18_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT18_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT19_MASK (0x80000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT19_SHIFT (19U) +/*! STATUS_CHLINT19 - DMA channel 19 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT19(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT19_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT19_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT20_MASK (0x100000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT20_SHIFT (20U) +/*! STATUS_CHLINT20 - DMA channel 20 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT20(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT20_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT20_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT21_MASK (0x200000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT21_SHIFT (21U) +/*! STATUS_CHLINT21 - DMA channel 21 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT21(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT21_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT21_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT22_MASK (0x400000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT22_SHIFT (22U) +/*! STATUS_CHLINT22 - DMA channel 22 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT22(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT22_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT22_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT23_MASK (0x800000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT23_SHIFT (23U) +/*! STATUS_CHLINT23 - DMA channel 23 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT23(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT23_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT23_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT24_MASK (0x1000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT24_SHIFT (24U) +/*! STATUS_CHLINT24 - DMA channel 24 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT24(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT24_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT24_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT25_MASK (0x2000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT25_SHIFT (25U) +/*! STATUS_CHLINT25 - DMA channel 25 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT25(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT25_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT25_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT26_MASK (0x4000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT26_SHIFT (26U) +/*! STATUS_CHLINT26 - DMA channel 26 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT26(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT26_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT26_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT27_MASK (0x8000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT27_SHIFT (27U) +/*! STATUS_CHLINT27 - DMA channel 27 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT27(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT27_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT27_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT28_MASK (0x10000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT28_SHIFT (28U) +/*! STATUS_CHLINT28 - DMA channel 28 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT28(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT28_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT28_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT29_MASK (0x20000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT29_SHIFT (29U) +/*! STATUS_CHLINT29 - DMA channel 29 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT29(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT29_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT29_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT30_MASK (0x40000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT30_SHIFT (30U) +/*! STATUS_CHLINT30 - DMA channel 30 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT30(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT30_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT30_MASK) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT31_MASK (0x80000000U) +#define DMAC_STATUS_CHLINT_STATUS_CHLINT31_SHIFT (31U) +/*! STATUS_CHLINT31 - DMA channel 31 interrupt + */ +#define DMAC_STATUS_CHLINT_STATUS_CHLINT31(x) (((uint32_t)(((uint32_t)(x)) << DMAC_STATUS_CHLINT_STATUS_CHLINT31_SHIFT)) & DMAC_STATUS_CHLINT_STATUS_CHLINT31_MASK) +/*! @} */ + +/*! @name HPROT - THE PROTECTION CONTROL SIGNALS REGISTERS */ +/*! @{ */ +#define DMAC_HPROT_HPROT_MASK (0xFU) +#define DMAC_HPROT_HPROT_SHIFT (0U) +/*! HPROT - protection control signals + */ +#define DMAC_HPROT_HPROT(x) (((uint32_t)(((uint32_t)(x)) << DMAC_HPROT_HPROT_SHIFT)) & DMAC_HPROT_HPROT_MASK) +/*! @} */ + +/*! @name SADR - DMA SOURCE ADDRESS REGISTERS */ +/*! @{ */ +#define DMAC_SADR_SRCADDR0_MASK (0x3U) +#define DMAC_SADR_SRCADDR0_SHIFT (0U) +/*! SRCADDR0 - SRCADDR0 + */ +#define DMAC_SADR_SRCADDR0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_SADR_SRCADDR0_SHIFT)) & DMAC_SADR_SRCADDR0_MASK) +#define DMAC_SADR_SRCADDR_MASK (0xFFFFFFFCU) +#define DMAC_SADR_SRCADDR_SHIFT (2U) +/*! SRCADDR - SOURCE ADDRESS + */ +#define DMAC_SADR_SRCADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_SADR_SRCADDR_SHIFT)) & DMAC_SADR_SRCADDR_MASK) +/*! @} */ + +/* The count of DMAC_SADR */ +#define DMAC_SADR_COUNT (32U) + +/*! @name TADR - DMA TARGET ADDRESS REGISTERS */ +/*! @{ */ +#define DMAC_TADR_TRGADDR0_MASK (0x3U) +#define DMAC_TADR_TRGADDR0_SHIFT (0U) +/*! TRGADDR0 - TRGADDR0 + */ +#define DMAC_TADR_TRGADDR0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_TADR_TRGADDR0_SHIFT)) & DMAC_TADR_TRGADDR0_MASK) +#define DMAC_TADR_TRGADDR_MASK (0xFFFFFFFCU) +#define DMAC_TADR_TRGADDR_SHIFT (2U) +/*! TRGADDR - TARGET ADDRESS + */ +#define DMAC_TADR_TRGADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_TADR_TRGADDR_SHIFT)) & DMAC_TADR_TRGADDR_MASK) +/*! @} */ + +/* The count of DMAC_TADR */ +#define DMAC_TADR_COUNT (32U) + +/*! @name CTRLA - DMA CONTROL REGISTERS A */ +/*! @{ */ +#define DMAC_CTRLA_LEN_MASK (0x1FFFU) +#define DMAC_CTRLA_LEN_SHIFT (0U) +/*! LEN - Length of the transfer in bytes + */ +#define DMAC_CTRLA_LEN(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CTRLA_LEN_SHIFT)) & DMAC_CTRLA_LEN_MASK) +#define DMAC_CTRLA_WIDTH_MASK (0x6000U) +#define DMAC_CTRLA_WIDTH_SHIFT (13U) +/*! WIDTH - Width + * 0b00..reserved for on-chip peripheral-related transactions (1 byte) + * 0b01..1 byte + * 0b10..half-word (2 bytes) + * 0b11..word (4 bytes) + */ +#define DMAC_CTRLA_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CTRLA_WIDTH_SHIFT)) & DMAC_CTRLA_WIDTH_MASK) +#define DMAC_CTRLA_TRAN_SIZE_MASK (0x18000U) +#define DMAC_CTRLA_TRAN_SIZE_SHIFT (15U) +/*! TRAN_SIZE - Size + * 0b00..1 + * 0b01..4 + * 0b10..8 + * 0b11..16 + */ +#define DMAC_CTRLA_TRAN_SIZE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CTRLA_TRAN_SIZE_SHIFT)) & DMAC_CTRLA_TRAN_SIZE_MASK) +#define DMAC_CTRLA_TRAN_TYPE_MASK (0x60000U) +#define DMAC_CTRLA_TRAN_TYPE_SHIFT (17U) +/*! TRAN_TYPE - Source to target transfer type + * 0b00..M2M + * 0b01..M2P + * 0b10..P2M + * 0b11..reserved + */ +#define DMAC_CTRLA_TRAN_TYPE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CTRLA_TRAN_TYPE_SHIFT)) & DMAC_CTRLA_TRAN_TYPE_MASK) +#define DMAC_CTRLA_INCTRGADDR_MASK (0x20000000U) +#define DMAC_CTRLA_INCTRGADDR_SHIFT (29U) +/*! INCTRGADDR - Target address increment + * 0b0..do not increment target address + * 0b1..increment target address + */ +#define DMAC_CTRLA_INCTRGADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CTRLA_INCTRGADDR_SHIFT)) & DMAC_CTRLA_INCTRGADDR_MASK) +#define DMAC_CTRLA_INCSRCADDR_MASK (0x40000000U) +#define DMAC_CTRLA_INCSRCADDR_SHIFT (30U) +/*! INCSRCADDR - Source address increment + * 0b0..do not increment source address + * 0b1..stop the running channel + */ +#define DMAC_CTRLA_INCSRCADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CTRLA_INCSRCADDR_SHIFT)) & DMAC_CTRLA_INCSRCADDR_MASK) +/*! @} */ + +/* The count of DMAC_CTRLA */ +#define DMAC_CTRLA_COUNT (32U) + +/*! @name CTRLB - DMA CONTROL REGISTERS B */ +/*! @{ */ +#define DMAC_CTRLB_PERNUM_MASK (0x3FU) +#define DMAC_CTRLB_PERNUM_SHIFT (0U) +/*! PERNUM - peripheral number + */ +#define DMAC_CTRLB_PERNUM(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CTRLB_PERNUM_SHIFT)) & DMAC_CTRLB_PERNUM_MASK) +/*! @} */ + +/* The count of DMAC_CTRLB */ +#define DMAC_CTRLB_COUNT (32U) + +/*! @name CHL_EN - DMA CHANNEL ENABLE REGISTERS */ +/*! @{ */ +#define DMAC_CHL_EN_CHL_EN_MASK (0x80000000U) +#define DMAC_CHL_EN_CHL_EN_SHIFT (31U) +/*! CHL_EN - Enable/Disable the channel + * 0b0..disable the channel + * 0b1..enable the channel + */ +#define DMAC_CHL_EN_CHL_EN(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CHL_EN_CHL_EN_SHIFT)) & DMAC_CHL_EN_CHL_EN_MASK) +/*! @} */ + +/* The count of DMAC_CHL_EN */ +#define DMAC_CHL_EN_COUNT (32U) + +/*! @name CHL_STOP - DMA CHANNEL STOP REGISTERS */ +/*! @{ */ +#define DMAC_CHL_STOP_CHL_STOP_MASK (0x80000000U) +#define DMAC_CHL_STOP_CHL_STOP_SHIFT (31U) +/*! CHL_STOP - Stop the running channel + * 0b0..no impact on the channel + * 0b1..stop the running channel + */ +#define DMAC_CHL_STOP_CHL_STOP(x) (((uint32_t)(((uint32_t)(x)) << DMAC_CHL_STOP_CHL_STOP_SHIFT)) & DMAC_CHL_STOP_CHL_STOP_MASK) +/*! @} */ + +/* The count of DMAC_CHL_STOP */ +#define DMAC_CHL_STOP_COUNT (32U) + +/*! @name ACK_DELAY - DMA ACK DELAY CYCLE for single transfer in M2P transfer type Registers */ +/*! @{ */ +#define DMAC_ACK_DELAY_ACK_DELAY_NUM_MASK (0x3FFU) +#define DMAC_ACK_DELAY_ACK_DELAY_NUM_SHIFT (0U) +/*! ACK_DELAY_NUM - DMA ACK DELAY CYCLE for single write transaction to peripheral + */ +#define DMAC_ACK_DELAY_ACK_DELAY_NUM(x) (((uint32_t)(((uint32_t)(x)) << DMAC_ACK_DELAY_ACK_DELAY_NUM_SHIFT)) & DMAC_ACK_DELAY_ACK_DELAY_NUM_MASK) +/*! @} */ + +/*! @name ERR_INFO0 - DMA ERROR INFORMATION REGISTER 0 */ +/*! @{ */ +#define DMAC_ERR_INFO0_ERR_ADDR_MASK (0xFFFFFFFFU) +#define DMAC_ERR_INFO0_ERR_ADDR_SHIFT (0U) +/*! ERR_ADDR - ADDRESS INFORMATION RELATED ERROR + */ +#define DMAC_ERR_INFO0_ERR_ADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_ERR_INFO0_ERR_ADDR_SHIFT)) & DMAC_ERR_INFO0_ERR_ADDR_MASK) +/*! @} */ + +/*! @name ERR_INFO1 - DMA ERROR INFORMATION REGISTER 1 */ +/*! @{ */ +#define DMAC_ERR_INFO1_ERR_CHLNUM_MASK (0xF8000000U) +#define DMAC_ERR_INFO1_ERR_CHLNUM_SHIFT (27U) +/*! ERR_CHLNUM - CHANNEL ID INFORMATION RELATED ERROR + */ +#define DMAC_ERR_INFO1_ERR_CHLNUM(x) (((uint32_t)(((uint32_t)(x)) << DMAC_ERR_INFO1_ERR_CHLNUM_SHIFT)) & DMAC_ERR_INFO1_ERR_CHLNUM_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO0 - DMA DIAGNOSE INFORMATION REGISTER 0 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO0_DIAGNOSE_ADDR_MASK (0xFFFFFFFFU) +#define DMAC_DIAGNOSE_INFO0_DIAGNOSE_ADDR_SHIFT (0U) +/*! DIAGNOSE_ADDR - ADDRESS INFORMATION RELATED DIAGNOSE + */ +#define DMAC_DIAGNOSE_INFO0_DIAGNOSE_ADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO0_DIAGNOSE_ADDR_SHIFT)) & DMAC_DIAGNOSE_INFO0_DIAGNOSE_ADDR_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO1 - DMA DIAGNOSE INFORMATION REGISTER 1 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_CHLNUM_MASK (0x1FU) +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_CHLNUM_SHIFT (0U) +/*! DIAGNOSE_REQ_CHL_DATA_CHLNUM - INDICATE WHICH CHANNEL IS IN SERVICE + */ +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_CHLNUM(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_CHLNUM_SHIFT)) & DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_CHLNUM_MASK) +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REST_LEN_MASK (0x7FFC0000U) +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REST_LEN_SHIFT (18U) +/*! DIAGNOSE_REST_LEN - INDICATE THE REMAINING DATA LENGTH OF THE SELESTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REST_LEN(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO1_DIAGNOSE_REST_LEN_SHIFT)) & DMAC_DIAGNOSE_INFO1_DIAGNOSE_REST_LEN_MASK) +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_MASK (0x80000000U) +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_SHIFT (31U) +/*! DIAGNOSE_REQ_CHL_DATA - INDICATE WHETHER THERE IS A VALID REQUEST + */ +#define DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_SHIFT)) & DMAC_DIAGNOSE_INFO1_DIAGNOSE_REQ_CHL_DATA_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO2 - DMA DIAGNOSE INFORMATION REGISTER 2 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO2_DIAGNOSE_CHL_STATE_MASK (0xF0000000U) +#define DMAC_DIAGNOSE_INFO2_DIAGNOSE_CHL_STATE_SHIFT (28U) +/*! DIAGNOSE_CHL_STATE - INDICATE THE CHANNEL STATE + */ +#define DMAC_DIAGNOSE_INFO2_DIAGNOSE_CHL_STATE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO2_DIAGNOSE_CHL_STATE_SHIFT)) & DMAC_DIAGNOSE_INFO2_DIAGNOSE_CHL_STATE_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO3 - DMA DIAGNOSE INFORMATION REGISTER 3 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR0_MASK (0x3U) +#define DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR0_SHIFT (0U) +/*! DIAGNOSE_SRC_ADDR0 - INDICATE THE SOURCE ADDRESS 0 OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR0_SHIFT)) & DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR0_MASK) +#define DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR_MASK (0xFFFFFFFCU) +#define DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR_SHIFT (2U) +/*! DIAGNOSE_SRC_ADDR - INDICATE THE SOURCE ADDRESS OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR_SHIFT)) & DMAC_DIAGNOSE_INFO3_DIAGNOSE_SRC_ADDR_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO4 - DMA DIAGNOSE INFORMATION REGISTER 4 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR0_MASK (0x3U) +#define DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR0_SHIFT (0U) +/*! DIAGNOSE_TRG_ADDR0 - INDICATE THE TARGET ADDRESS 0 OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR0(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR0_SHIFT)) & DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR0_MASK) +#define DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR_MASK (0xFFFFFFFCU) +#define DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR_SHIFT (2U) +/*! DIAGNOSE_TRG_ADDR - INDICATE THE TARGET ADDRESS OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR_SHIFT)) & DMAC_DIAGNOSE_INFO4_DIAGNOSE_TRG_ADDR_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO5 - DMA DIAGNOSE INFORMATION REGISTER 5 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_WIDTH_MASK (0xC00U) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_WIDTH_SHIFT (10U) +/*! DIAGNOSE_CTRL_WIDTH - INDICATE THE WIDTH INFORMATION OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_WIDTH_SHIFT)) & DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_WIDTH_MASK) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANTYPE_MASK (0x3000U) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANTYPE_SHIFT (12U) +/*! DIAGNOSE_CTRL_TRANTYPE - INDICATE THE TRANSFER TYPE INFORMATION OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANTYPE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANTYPE_SHIFT)) & DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANTYPE_MASK) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANSIZE_MASK (0xC000U) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANSIZE_SHIFT (14U) +/*! DIAGNOSE_CTRL_TRANSIZE - INDICATE THE TRANSFER SIZE INFORMATION OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANSIZE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANSIZE_SHIFT)) & DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_TRANSIZE_MASK) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_LEN_MASK (0x1FFF0000U) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_LEN_SHIFT (16U) +/*! DIAGNOSE_CTRL_LEN - INDICATE THE LENGTH INFORMATION OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_LEN(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_LEN_SHIFT)) & DMAC_DIAGNOSE_INFO5_DIAGNOSE_CTRL_LEN_MASK) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRTRGADDR_MASK (0x20000000U) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRTRGADDR_SHIFT (29U) +/*! DIAGNOSE_INCRTRGADDR - INDICATE WHETHER TO INCREASE THE TRG ADDRESS OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRTRGADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRTRGADDR_SHIFT)) & DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRTRGADDR_MASK) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRSRCADDR_MASK (0x40000000U) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRSRCADDR_SHIFT (30U) +/*! DIAGNOSE_INCRSRCADDR - INDICATE WHETHER TO INCREASE THE SRC ADDRESS OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRSRCADDR(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRSRCADDR_SHIFT)) & DMAC_DIAGNOSE_INFO5_DIAGNOSE_INCRSRCADDR_MASK) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CHL_EN_MASK (0x80000000U) +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CHL_EN_SHIFT (31U) +/*! DIAGNOSE_CHL_EN - INDICATE THE CHANNEL ENABLE STATE OF THE SELECTED CHANNEL + */ +#define DMAC_DIAGNOSE_INFO5_DIAGNOSE_CHL_EN(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO5_DIAGNOSE_CHL_EN_SHIFT)) & DMAC_DIAGNOSE_INFO5_DIAGNOSE_CHL_EN_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO6 - DMA DIAGNOSE INFORMATION REGISTER 6 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_HALFWORD_MASK (0x20000U) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_HALFWORD_SHIFT (17U) +/*! DIAGNOSE_SPLIT_HALFWORD - INDICATE SOME OUTPUT INFO FROM MAIN DATAPATH + */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_HALFWORD(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_HALFWORD_SHIFT)) & DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_HALFWORD_MASK) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_WORD_MASK (0x40000U) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_WORD_SHIFT (18U) +/*! DIAGNOSE_SPLIT_WORD - INDICATE SOME OUTPUT INFO FROM MAIN DATAPATH + */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_WORD(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_WORD_SHIFT)) & DMAC_DIAGNOSE_INFO6_DIAGNOSE_SPLIT_WORD_MASK) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SLICECNT_MASK (0x3F80000U) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SLICECNT_SHIFT (19U) +/*! DIAGNOSE_SLICECNT - INDICATE SOME OUTPUT INFO FROM MAIN DATAPATH + */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_SLICECNT(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO6_DIAGNOSE_SLICECNT_SHIFT)) & DMAC_DIAGNOSE_INFO6_DIAGNOSE_SLICECNT_MASK) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_BURST_MASK (0xC000000U) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_BURST_SHIFT (26U) +/*! DIAGNOSE_AHB_BURST - INDICATE SOME OUTPUT INFO FROM MAIN DATAPATH + */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_BURST(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_BURST_SHIFT)) & DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_BURST_MASK) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_SIZE_MASK (0x30000000U) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_SIZE_SHIFT (28U) +/*! DIAGNOSE_AHB_SIZE - INDICATE SOME OUTPUT INFO FROM MAIN DATAPATH + */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_SIZE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_SIZE_SHIFT)) & DMAC_DIAGNOSE_INFO6_DIAGNOSE_AHB_SIZE_MASK) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_WRITE_MASK (0x40000000U) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_WRITE_SHIFT (30U) +/*! DIAGNOSE_MAS_WRITE - INDICATE SOME OUTPUT INFO FROM MAIN DATAPATH + */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_WRITE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_WRITE_SHIFT)) & DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_WRITE_MASK) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_READ_MASK (0x80000000U) +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_READ_SHIFT (31U) +/*! DIAGNOSE_MAS_READ - INDICATE SOME OUTPUT INFO FROM MAIN DATAPATH + */ +#define DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_READ(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_READ_SHIFT)) & DMAC_DIAGNOSE_INFO6_DIAGNOSE_MAS_READ_MASK) +/*! @} */ + +/*! @name DIAGNOSE_INFO7 - DMA DIAGNOSE INFORMATION REGISTER 7 */ +/*! @{ */ +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HRESP_MASK (0x400000U) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HRESP_SHIFT (22U) +/*! DIAGNOSE_AHB_HRESP - INDICATE SOME AHB MASTER INFO + */ +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HRESP(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HRESP_SHIFT)) & DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HRESP_MASK) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HREADY_MASK (0x800000U) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HREADY_SHIFT (23U) +/*! DIAGNOSE_AHB_HREADY - INDICATE SOME AHB MASTER INFO + */ +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HREADY(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HREADY_SHIFT)) & DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_HREADY_MASK) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_SIZE_MASK (0x7000000U) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_SIZE_SHIFT (24U) +/*! DIAGNOSE_AHB_SIZE - INDICATE SOME AHB MASTER INFO + */ +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_SIZE(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_SIZE_SHIFT)) & DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_SIZE_MASK) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_TRANS_MASK (0x18000000U) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_TRANS_SHIFT (27U) +/*! DIAGNOSE_AHB_TRANS - INDICATE SOME AHB MASTER INFO + */ +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_TRANS(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_TRANS_SHIFT)) & DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_TRANS_MASK) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_BURST_MASK (0xE0000000U) +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_BURST_SHIFT (29U) +/*! DIAGNOSE_AHB_BURST - INDICATE SOME AHB MASTER INFO + */ +#define DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_BURST(x) (((uint32_t)(((uint32_t)(x)) << DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_BURST_SHIFT)) & DMAC_DIAGNOSE_INFO7_DIAGNOSE_AHB_BURST_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group DMAC_Register_Masks */ + + +/* DMAC - Peripheral instance base addresses */ +/** Peripheral DMAC base address */ +#define DMAC_BASE (0x44000000u) +/** Peripheral DMAC base pointer */ +#define DMAC ((DMAC_Type *)DMAC_BASE) +/** Array initializer of DMAC peripheral base addresses */ +#define DMAC_BASE_ADDRS { DMAC_BASE } +/** Array initializer of DMAC peripheral base pointers */ +#define DMAC_BASE_PTRS { DMAC } +/** Interrupt vectors for the DMAC peripheral type */ +#define DMAC_IRQS { DMAC_IRQn } + +/*! + * @} + */ /* end of group DMAC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- FLASHC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FLASHC_Peripheral_Access_Layer FLASHC Peripheral Access Layer + * @{ + */ + +/** FLASHC - Register Layout Typedef */ +typedef struct { + __IO uint32_t FCCR; /**< Flash Controller Configuration Register, offset: 0x0 */ + __IO uint32_t FCTR; /**< Flash Controller Timing Register, offset: 0x4 */ + __IO uint32_t FCSR; /**< Flash Controller Status Register, offset: 0x8 */ + __IO uint32_t FCACR; /**< Flash Controller Auxiliary Configuration Register, offset: 0xC */ + __IO uint32_t FCHCR; /**< Flash Controller Hit Count Register, offset: 0x10 */ + __IO uint32_t FCMCR; /**< Flash Controller Miss Count Register, offset: 0x14 */ + __IO uint32_t FAOFFR; /**< Flash Address Offset Register, offset: 0x18 */ + __IO uint32_t FADDMAT; /**< Flash Address Match register, offset: 0x1C */ + __IO uint32_t FWAITR; /**< Flash Wait Register, offset: 0x20 */ + __IO uint32_t FCCR2; /**< Flash Controller Configurationb Register2, offset: 0x24 */ + __IO uint32_t FINSTR; /**< Flash Instruction Register, offset: 0x28 */ + __IO uint32_t FRMR; /**< Flash Read Mode Register, offset: 0x2C */ +} FLASHC_Type; + +/* ---------------------------------------------------------------------------- + -- FLASHC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FLASHC_Register_Masks FLASHC Register Masks + * @{ + */ + +/*! @name FCCR - Flash Controller Configuration Register */ +/*! @{ */ +#define FLASHC_FCCR_CMD_TYPE_MASK (0xFU) +#define FLASHC_FCCR_CMD_TYPE_SHIFT (0U) +/*! CMD_TYPE - Serial Flash Command typeclocks (based on this Command Type field for Winbond devices) + */ +#define FLASHC_FCCR_CMD_TYPE(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_CMD_TYPE_SHIFT)) & FLASHC_FCCR_CMD_TYPE_MASK) +#define FLASHC_FCCR_CLK_PRESCALE_MASK (0x1F00U) +#define FLASHC_FCCR_CLK_PRESCALE_SHIFT (8U) +/*! CLK_PRESCALE - Serial interface clock prescaler (from base SPI clock) + */ +#define FLASHC_FCCR_CLK_PRESCALE(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_CLK_PRESCALE_SHIFT)) & FLASHC_FCCR_CLK_PRESCALE_MASK) +#define FLASHC_FCCR_CLK_POL_MASK (0x4000U) +#define FLASHC_FCCR_CLK_POL_SHIFT (14U) +/*! CLK_POL - Serial Interface Clock Polarity + * 0b0..Serial Interface clock is LOW when inactive. + * 0b1..Serial Interface clock is HIGH when inactive. + */ +#define FLASHC_FCCR_CLK_POL(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_CLK_POL_SHIFT)) & FLASHC_FCCR_CLK_POL_MASK) +#define FLASHC_FCCR_CLK_PHA_MASK (0x8000U) +#define FLASHC_FCCR_CLK_PHA_SHIFT (15U) +/*! CLK_PHA - Serial Interface Clock Phase + * 0b0..Data is captured on the rising edge of the serial clock when CLK_POL=0 and on the falling edge when CLK_POL=1. + * 0b1..Data is captured on the falling edge of the serial clock when CLK_POL=0 and on the rising edge when CLK_POL=1. + */ +#define FLASHC_FCCR_CLK_PHA(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_CLK_PHA_SHIFT)) & FLASHC_FCCR_CLK_PHA_MASK) +#define FLASHC_FCCR_SRAM_MODE_EN_MASK (0x10000000U) +#define FLASHC_FCCR_SRAM_MODE_EN_SHIFT (28U) +/*! SRAM_MODE_EN - SRAM Mode Enable + */ +#define FLASHC_FCCR_SRAM_MODE_EN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_SRAM_MODE_EN_SHIFT)) & FLASHC_FCCR_SRAM_MODE_EN_MASK) +#define FLASHC_FCCR_CACHE_LINE_FLUSH_MASK (0x20000000U) +#define FLASHC_FCCR_CACHE_LINE_FLUSH_SHIFT (29U) +/*! CACHE_LINE_FLUSH - Cache Line Flush + */ +#define FLASHC_FCCR_CACHE_LINE_FLUSH(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_CACHE_LINE_FLUSH_SHIFT)) & FLASHC_FCCR_CACHE_LINE_FLUSH_MASK) +#define FLASHC_FCCR_CACHE_EN_MASK (0x40000000U) +#define FLASHC_FCCR_CACHE_EN_SHIFT (30U) +/*! CACHE_EN - Flash cache enable + */ +#define FLASHC_FCCR_CACHE_EN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_CACHE_EN_SHIFT)) & FLASHC_FCCR_CACHE_EN_MASK) +#define FLASHC_FCCR_FLASHC_PAD_EN_MASK (0x80000000U) +#define FLASHC_FCCR_FLASHC_PAD_EN_SHIFT (31U) +/*! FLASHC_PAD_EN - Flashc pad enable + * 0b0..APB QSPI connects to the Flash device. + * 0b1..Flashc connects to the Flash device. + */ +#define FLASHC_FCCR_FLASHC_PAD_EN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR_FLASHC_PAD_EN_SHIFT)) & FLASHC_FCCR_FLASHC_PAD_EN_MASK) +/*! @} */ + +/*! @name FCTR - Flash Controller Timing Register */ +/*! @{ */ +#define FLASHC_FCTR_DIN_DLY_MASK (0x3U) +#define FLASHC_FCTR_DIN_DLY_SHIFT (0U) +/*! DIN_DLY - Data Input Delay + */ +#define FLASHC_FCTR_DIN_DLY(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCTR_DIN_DLY_SHIFT)) & FLASHC_FCTR_DIN_DLY_MASK) +#define FLASHC_FCTR_CLK_IN_DLY_MASK (0xCU) +#define FLASHC_FCTR_CLK_IN_DLY_SHIFT (2U) +/*! CLK_IN_DLY - Clock Input Delay + */ +#define FLASHC_FCTR_CLK_IN_DLY(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCTR_CLK_IN_DLY_SHIFT)) & FLASHC_FCTR_CLK_IN_DLY_MASK) +#define FLASHC_FCTR_CLK_CAPT_EDGE_MASK (0x10U) +#define FLASHC_FCTR_CLK_CAPT_EDGE_SHIFT (4U) +/*! CLK_CAPT_EDGE - Serial Interface data capture clock edge + */ +#define FLASHC_FCTR_CLK_CAPT_EDGE(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCTR_CLK_CAPT_EDGE_SHIFT)) & FLASHC_FCTR_CLK_CAPT_EDGE_MASK) +#define FLASHC_FCTR_CLK_OUT_DLY_MASK (0x60U) +#define FLASHC_FCTR_CLK_OUT_DLY_SHIFT (5U) +/*! CLK_OUT_DLY - Add delay on the outgoing Clock to the flash. + */ +#define FLASHC_FCTR_CLK_OUT_DLY(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCTR_CLK_OUT_DLY_SHIFT)) & FLASHC_FCTR_CLK_OUT_DLY_MASK) +/*! @} */ + +/*! @name FCSR - Flash Controller Status Register */ +/*! @{ */ +#define FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK (0x1U) +#define FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_SHIFT (0U) +/*! CONT_RD_MD_EXIT_DONE - Continuous Read Mode Exit status + * 0b0..continuous read mode exit not complete. + * 0b1..continuous read mode exit complete. + */ +#define FLASHC_FCSR_CONT_RD_MD_EXIT_DONE(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_SHIFT)) & FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) +/*! @} */ + +/*! @name FCACR - Flash Controller Auxiliary Configuration Register */ +/*! @{ */ +#define FLASHC_FCACR_HIT_CNT_EN_MASK (0x1U) +#define FLASHC_FCACR_HIT_CNT_EN_SHIFT (0U) +/*! HIT_CNT_EN - Miss Count Enable + * 0b0..Disable the counting of hits. + * 0b1..Enable the counting of number of hits to the cache. + */ +#define FLASHC_FCACR_HIT_CNT_EN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCACR_HIT_CNT_EN_SHIFT)) & FLASHC_FCACR_HIT_CNT_EN_MASK) +#define FLASHC_FCACR_MISS_CNT_EN_MASK (0x2U) +#define FLASHC_FCACR_MISS_CNT_EN_SHIFT (1U) +/*! MISS_CNT_EN - Miss Count Enable + * 0b0..Disable the counting of misses. + * 0b1..Enable the counting of number of misses to the cache. + */ +#define FLASHC_FCACR_MISS_CNT_EN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCACR_MISS_CNT_EN_SHIFT)) & FLASHC_FCACR_MISS_CNT_EN_MASK) +#define FLASHC_FCACR_ADDR_MATCH_EN_MASK (0x4U) +#define FLASHC_FCACR_ADDR_MATCH_EN_SHIFT (2U) +/*! ADDR_MATCH_EN - Address Match Enable + * 0b0..disable Counting of Misses to a specific address + * 0b1..enable Counting of Misses to a specific address defined in FADDMAT + */ +#define FLASHC_FCACR_ADDR_MATCH_EN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCACR_ADDR_MATCH_EN_SHIFT)) & FLASHC_FCACR_ADDR_MATCH_EN_MASK) +#define FLASHC_FCACR_OFFSET_EN_MASK (0x8U) +#define FLASHC_FCACR_OFFSET_EN_SHIFT (3U) +/*! OFFSET_EN - Address Offset Enable + * 0b0..All Flash Memory accesses Do not use Address Offset register. + * 0b1..Using Address Offset defined in FAOFFR is Enabled for all Flash Memory accesses. + */ +#define FLASHC_FCACR_OFFSET_EN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCACR_OFFSET_EN_SHIFT)) & FLASHC_FCACR_OFFSET_EN_MASK) +/*! @} */ + +/*! @name FCHCR - Flash Controller Hit Count Register */ +/*! @{ */ +#define FLASHC_FCHCR_HIT_COUNT_MASK (0xFFFFFFFFU) +#define FLASHC_FCHCR_HIT_COUNT_SHIFT (0U) +/*! HIT_COUNT - Hit Counter + */ +#define FLASHC_FCHCR_HIT_COUNT(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCHCR_HIT_COUNT_SHIFT)) & FLASHC_FCHCR_HIT_COUNT_MASK) +/*! @} */ + +/*! @name FCMCR - Flash Controller Miss Count Register */ +/*! @{ */ +#define FLASHC_FCMCR_MISS_COUNT_MASK (0xFFFFFFFFU) +#define FLASHC_FCMCR_MISS_COUNT_SHIFT (0U) +/*! MISS_COUNT - Hit Counter + */ +#define FLASHC_FCMCR_MISS_COUNT(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCMCR_MISS_COUNT_SHIFT)) & FLASHC_FCMCR_MISS_COUNT_MASK) +/*! @} */ + +/*! @name FAOFFR - Flash Address Offset Register */ +/*! @{ */ +#define FLASHC_FAOFFR_OFFSET_VAL_MASK (0xFFFFFFFFU) +#define FLASHC_FAOFFR_OFFSET_VAL_SHIFT (0U) +/*! OFFSET_VAL - Flash Address Offset value + */ +#define FLASHC_FAOFFR_OFFSET_VAL(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FAOFFR_OFFSET_VAL_SHIFT)) & FLASHC_FAOFFR_OFFSET_VAL_MASK) +/*! @} */ + +/*! @name FADDMAT - Flash Address Match register */ +/*! @{ */ +#define FLASHC_FADDMAT_ADDR_MASK (0xFFFFFFFFU) +#define FLASHC_FADDMAT_ADDR_SHIFT (0U) +/*! ADDR - Flash Memory address to compare and match + */ +#define FLASHC_FADDMAT_ADDR(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FADDMAT_ADDR_SHIFT)) & FLASHC_FADDMAT_ADDR_MASK) +/*! @} */ + +/*! @name FWAITR - Flash Wait Register */ +/*! @{ */ +#define FLASHC_FWAITR_ZWAIT_MASK (0x1U) +#define FLASHC_FWAITR_ZWAIT_SHIFT (0U) +/*! ZWAIT - Zero Wait. + */ +#define FLASHC_FWAITR_ZWAIT(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FWAITR_ZWAIT_SHIFT)) & FLASHC_FWAITR_ZWAIT_MASK) +/*! @} */ + +/*! @name FCCR2 - Flash Controller Configurationb Register2 */ +/*! @{ */ +#define FLASHC_FCCR2_INSTR_CNT_MASK (0x3U) +#define FLASHC_FCCR2_INSTR_CNT_SHIFT (0U) +/*! INSTR_CNT - Instruction Count + * 0b00..0 bytes. + * 0b01..1 byte + * 0b10..2 bytes. + * 0b11..Reserved. + */ +#define FLASHC_FCCR2_INSTR_CNT(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_INSTR_CNT_SHIFT)) & FLASHC_FCCR2_INSTR_CNT_MASK) +#define FLASHC_FCCR2_ADDR_CNT_MASK (0x70U) +#define FLASHC_FCCR2_ADDR_CNT_SHIFT (4U) +/*! ADDR_CNT - Address Count + * 0b000..0 bytes. + * 0b001..1 byte. + * 0b010..2 bytes. + * 0b011..3 bytes. + * 0b100..4 bytes. + * 0b101..reserved + * 0b110..reserved + * 0b111..reserved + */ +#define FLASHC_FCCR2_ADDR_CNT(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_ADDR_CNT_SHIFT)) & FLASHC_FCCR2_ADDR_CNT_MASK) +#define FLASHC_FCCR2_RM_CNT_MASK (0x300U) +#define FLASHC_FCCR2_RM_CNT_SHIFT (8U) +/*! RM_CNT - Read Mode Count + * 0b00..0 bytes. + * 0b01..1 byte. + * 0b10..2 bytes. + * 0b11..Reserved. + */ +#define FLASHC_FCCR2_RM_CNT(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_RM_CNT_SHIFT)) & FLASHC_FCCR2_RM_CNT_MASK) +#define FLASHC_FCCR2_DUMMY_CNT_MASK (0x3000U) +#define FLASHC_FCCR2_DUMMY_CNT_SHIFT (12U) +/*! DUMMY_CNT - Dummy count + * 0b00..0 bytes. + * 0b01..1 byte. + * 0b10..2 bytes. + * 0b11..Reserved. + */ +#define FLASHC_FCCR2_DUMMY_CNT(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_DUMMY_CNT_SHIFT)) & FLASHC_FCCR2_DUMMY_CNT_MASK) +#define FLASHC_FCCR2_BYTE_LEN_MASK (0x8000000U) +#define FLASHC_FCCR2_BYTE_LEN_SHIFT (27U) +/*! BYTE_LEN - Byte length + * 0b0..1 byte. + * 0b1..4 bytes. + */ +#define FLASHC_FCCR2_BYTE_LEN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_BYTE_LEN_SHIFT)) & FLASHC_FCCR2_BYTE_LEN_MASK) +#define FLASHC_FCCR2_ADDR_PIN_MASK (0x10000000U) +#define FLASHC_FCCR2_ADDR_PIN_SHIFT (28U) +/*! ADDR_PIN - Address transfer pins + * 0b0..Use one pin. + * 0b1..Use number of pins as indicated by DATA_PIN field in this register. + */ +#define FLASHC_FCCR2_ADDR_PIN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_ADDR_PIN_SHIFT)) & FLASHC_FCCR2_ADDR_PIN_MASK) +#define FLASHC_FCCR2_DATA_PIN_MASK (0x60000000U) +#define FLASHC_FCCR2_DATA_PIN_SHIFT (29U) +/*! DATA_PIN - Data transfer pins + * 0b00..Use 1 pin for data. + * 0b01..Use 2 pins for data. + * 0b10..Use 4 pins for data. + * 0b11..Reserved. + */ +#define FLASHC_FCCR2_DATA_PIN(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_DATA_PIN_SHIFT)) & FLASHC_FCCR2_DATA_PIN_MASK) +#define FLASHC_FCCR2_USE_CFG_OVRD_MASK (0x80000000U) +#define FLASHC_FCCR2_USE_CFG_OVRD_SHIFT (31U) +/*! USE_CFG_OVRD - Use Configuration Override + * 0b0..Use FCCR.CMD_TYPE to determine/build Flash command/transfer + * 0b1..Use Configuration FCCR2 to determine/build Flash Command/transfer + */ +#define FLASHC_FCCR2_USE_CFG_OVRD(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FCCR2_USE_CFG_OVRD_SHIFT)) & FLASHC_FCCR2_USE_CFG_OVRD_MASK) +/*! @} */ + +/*! @name FINSTR - Flash Instruction Register */ +/*! @{ */ +#define FLASHC_FINSTR_INSTR_MASK (0xFFFFU) +#define FLASHC_FINSTR_INSTR_SHIFT (0U) +/*! INSTR - Flash Instruction + */ +#define FLASHC_FINSTR_INSTR(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FINSTR_INSTR_SHIFT)) & FLASHC_FINSTR_INSTR_MASK) +/*! @} */ + +/*! @name FRMR - Flash Read Mode Register */ +/*! @{ */ +#define FLASHC_FRMR_RDMODE_MASK (0xFFFFU) +#define FLASHC_FRMR_RDMODE_SHIFT (0U) +/*! RDMODE - Flash Read Mode + */ +#define FLASHC_FRMR_RDMODE(x) (((uint32_t)(((uint32_t)(x)) << FLASHC_FRMR_RDMODE_SHIFT)) & FLASHC_FRMR_RDMODE_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group FLASHC_Register_Masks */ + + +/* FLASHC - Peripheral instance base addresses */ +/** Peripheral FLASHC base address */ +#define FLASHC_BASE (0x44003000u) +/** Peripheral FLASHC base pointer */ +#define FLASHC ((FLASHC_Type *)FLASHC_BASE) +/** Array initializer of FLASHC peripheral base addresses */ +#define FLASHC_BASE_ADDRS { FLASHC_BASE } +/** Array initializer of FLASHC peripheral base pointers */ +#define FLASHC_BASE_PTRS { FLASHC } + +/*! + * @} + */ /* end of group FLASHC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- GPIO Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup GPIO_Peripheral_Access_Layer GPIO Peripheral Access Layer + * @{ + */ + +/** GPIO - Register Layout Typedef */ +typedef struct { + __I uint32_t GPLR_REG[3]; /**< GPIO Pin Level Register0..GPIO Pin Level Register2, array offset: 0x0, array step: 0x4 */ + __IO uint32_t GPDR_REG[3]; /**< GPIO Pin Direction Register0..GPIO Pin Direction Register2, array offset: 0xC, array step: 0x4 */ + __O uint32_t GPSR_REG[3]; /**< GPIO Pin Output Set Register 0..GPIO Pin Output Set Register 2, array offset: 0x18, array step: 0x4 */ + __O uint32_t GPCR_REG[3]; /**< GPIO Pin Output Clear Register 0..GPIO Pin Output Clear Register 2, array offset: 0x24, array step: 0x4 */ + __IO uint32_t GRER_REG[3]; /**< GPIO Rising Edge detect Enable Register 0..GPIO Rising Edge detect Enable Register 2, array offset: 0x30, array step: 0x4 */ + __IO uint32_t GFER_REG[3]; /**< GPIO Falling Edge detect Enable Register 0..GPIO Falling Edge detect Enable Register 2, array offset: 0x3C, array step: 0x4 */ + __IO uint32_t GEDR_REG[3]; /**< GPIO Edge detect Status Register 0..GPIO Edge detect Status Register 2, array offset: 0x48, array step: 0x4 */ + __O uint32_t GSDR_REG[3]; /**< GPIO Pin Bitwise Set Direction Register 0..GPIO Pin Bitwise Set Direction Register 2, array offset: 0x54, array step: 0x4 */ + __O uint32_t GCDR_REG[3]; /**< GPIO Pin Bitwise Clear Direction Register 0..GPIO Pin Bitwise Clear Direction Register 2, array offset: 0x60, array step: 0x4 */ + __O uint32_t GSRER_REG[3]; /**< GPIO Bitwise Set Rising Edge detect Enable Register 0..GPIO Bitwise set Rising Edge detect Enable Register 2, array offset: 0x6C, array step: 0x4 */ + __O uint32_t GCRER_REG[3]; /**< GPIO Bitwise Clear Rising Edge detect Enable Register 0..GPIO Bitwise Clear Rising Edge detect Enable Register 2, array offset: 0x78, array step: 0x4 */ + __O uint32_t GSFER_REG[3]; /**< GPIO Bitwise Set Falling Edge detect Enable Register 0..GPIO Bitwise set Falling Edge detect Enable Register 2, array offset: 0x84, array step: 0x4 */ + __O uint32_t GCFER_REG[3]; /**< GPIO Bitwise Clear Falling Edge detect Enable Register 0..GPIO Bitwise Clear Falling Edge detect Enable Register 2, array offset: 0x90, array step: 0x4 */ + __IO uint32_t APMASK_REG[3]; /**< GPIO Bitwise mask of Edge detect Status Register 0..GPIO Bitwise mask of Edge detect Status Register 2, array offset: 0x9C, array step: 0x4 */ +} GPIO_Type; + +/* ---------------------------------------------------------------------------- + -- GPIO Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup GPIO_Register_Masks GPIO Register Masks + * @{ + */ + +/*! @name GPLR_REG - GPIO Pin Level Register0..GPIO Pin Level Register2 */ +/*! @{ */ +#define GPIO_GPLR_REG_GPLR_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GPLR_REG_GPLR_REG0_SHIFT (0U) +/*! GPLR_REG0 - GPLR Reg0 + * 0b00000000000000000000000000000000..Port State Low + * 0b00000000000000000000000000000001..Port State High + */ +#define GPIO_GPLR_REG_GPLR_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPLR_REG_GPLR_REG0_SHIFT)) & GPIO_GPLR_REG_GPLR_REG0_MASK) +#define GPIO_GPLR_REG_GPLR_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GPLR_REG_GPLR_REG1_SHIFT (0U) +/*! GPLR_REG1 - GPLR Reg1 + * 0b00000000000000000000000000000000..Port State Low + * 0b00000000000000000000000000000001..Port State High + */ +#define GPIO_GPLR_REG_GPLR_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPLR_REG_GPLR_REG1_SHIFT)) & GPIO_GPLR_REG_GPLR_REG1_MASK) +#define GPIO_GPLR_REG_GPLR_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GPLR_REG_GPLR_REG2_SHIFT (0U) +/*! GPLR_REG2 - GPLR Reg2 + * 0b00000000000000000000000000000000..Port State Low + * 0b00000000000000000000000000000001..Port State High + */ +#define GPIO_GPLR_REG_GPLR_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPLR_REG_GPLR_REG2_SHIFT)) & GPIO_GPLR_REG_GPLR_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GPLR_REG */ +#define GPIO_GPLR_REG_COUNT (3U) + +/*! @name GPDR_REG - GPIO Pin Direction Register0..GPIO Pin Direction Register2 */ +/*! @{ */ +#define GPIO_GPDR_REG_GPDR_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GPDR_REG_GPDR_REG0_SHIFT (0U) +/*! GPDR_REG0 - GPDR Reg0 + * 0b00000000000000000000000000000000..Input port + * 0b00000000000000000000000000000001..Output Port + */ +#define GPIO_GPDR_REG_GPDR_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPDR_REG_GPDR_REG0_SHIFT)) & GPIO_GPDR_REG_GPDR_REG0_MASK) +#define GPIO_GPDR_REG_GPDR_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GPDR_REG_GPDR_REG1_SHIFT (0U) +/*! GPDR_REG1 - GPDR Reg1 + * 0b00000000000000000000000000000000..Input port + * 0b00000000000000000000000000000001..Output Port + */ +#define GPIO_GPDR_REG_GPDR_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPDR_REG_GPDR_REG1_SHIFT)) & GPIO_GPDR_REG_GPDR_REG1_MASK) +#define GPIO_GPDR_REG_GPDR_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GPDR_REG_GPDR_REG2_SHIFT (0U) +/*! GPDR_REG2 - GPDR Reg2 + * 0b00000000000000000000000000000000..Input port + * 0b00000000000000000000000000000001..Output Port + */ +#define GPIO_GPDR_REG_GPDR_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPDR_REG_GPDR_REG2_SHIFT)) & GPIO_GPDR_REG_GPDR_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GPDR_REG */ +#define GPIO_GPDR_REG_COUNT (3U) + +/*! @name GPSR_REG - GPIO Pin Output Set Register 0..GPIO Pin Output Set Register 2 */ +/*! @{ */ +#define GPIO_GPSR_REG_GPSR_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GPSR_REG_GPSR_REG0_SHIFT (0U) +/*! GPSR_REG0 - GPSR Reg0 + * 0b00000000000000000000000000000000.. + * 0b00000000000000000000000000000001..Port set if GPIO is configured as output + */ +#define GPIO_GPSR_REG_GPSR_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPSR_REG_GPSR_REG0_SHIFT)) & GPIO_GPSR_REG_GPSR_REG0_MASK) +#define GPIO_GPSR_REG_GPSR_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GPSR_REG_GPSR_REG1_SHIFT (0U) +/*! GPSR_REG1 - GPSR Reg1 + * 0b00000000000000000000000000000000.. + * 0b00000000000000000000000000000001..Port set if GPIO is configured as output + */ +#define GPIO_GPSR_REG_GPSR_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPSR_REG_GPSR_REG1_SHIFT)) & GPIO_GPSR_REG_GPSR_REG1_MASK) +#define GPIO_GPSR_REG_GPSR_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GPSR_REG_GPSR_REG2_SHIFT (0U) +/*! GPSR_REG2 - GPSR Reg2 + * 0b00000000000000000000000000000000.. + * 0b00000000000000000000000000000001..Port set if GPIO is configured as output + */ +#define GPIO_GPSR_REG_GPSR_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPSR_REG_GPSR_REG2_SHIFT)) & GPIO_GPSR_REG_GPSR_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GPSR_REG */ +#define GPIO_GPSR_REG_COUNT (3U) + +/*! @name GPCR_REG - GPIO Pin Output Clear Register 0..GPIO Pin Output Clear Register 2 */ +/*! @{ */ +#define GPIO_GPCR_REG_GPCR_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GPCR_REG_GPCR_REG0_SHIFT (0U) +/*! GPCR_REG0 - GPCR Reg0 + * 0b00000000000000000000000000000000.. + * 0b00000000000000000000000000000001..Port Clear if GPIO is configured as output + */ +#define GPIO_GPCR_REG_GPCR_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPCR_REG_GPCR_REG0_SHIFT)) & GPIO_GPCR_REG_GPCR_REG0_MASK) +#define GPIO_GPCR_REG_GPCR_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GPCR_REG_GPCR_REG1_SHIFT (0U) +/*! GPCR_REG1 - GPCR Reg1 + * 0b00000000000000000000000000000000.. + * 0b00000000000000000000000000000001..Port Clear if GPIO is configured as output + */ +#define GPIO_GPCR_REG_GPCR_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPCR_REG_GPCR_REG1_SHIFT)) & GPIO_GPCR_REG_GPCR_REG1_MASK) +#define GPIO_GPCR_REG_GPCR_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GPCR_REG_GPCR_REG2_SHIFT (0U) +/*! GPCR_REG2 - GPCR Reg2 + * 0b00000000000000000000000000000000.. + * 0b00000000000000000000000000000001..Port Clear if GPIO is configured as output + */ +#define GPIO_GPCR_REG_GPCR_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GPCR_REG_GPCR_REG2_SHIFT)) & GPIO_GPCR_REG_GPCR_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GPCR_REG */ +#define GPIO_GPCR_REG_COUNT (3U) + +/*! @name GRER_REG - GPIO Rising Edge detect Enable Register 0..GPIO Rising Edge detect Enable Register 2 */ +/*! @{ */ +#define GPIO_GRER_REG_GRER_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GRER_REG_GRER_REG0_SHIFT (0U) +/*! GRER_REG0 - GRER Reg0 + * 0b00000000000000000000000000000000..Disable Rising Edge detection + * 0b00000000000000000000000000000001..Set corresponding GEDR Status bit when Rising edge is detected on GPIO input + */ +#define GPIO_GRER_REG_GRER_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GRER_REG_GRER_REG0_SHIFT)) & GPIO_GRER_REG_GRER_REG0_MASK) +#define GPIO_GRER_REG_GRER_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GRER_REG_GRER_REG1_SHIFT (0U) +/*! GRER_REG1 - GRER Reg1 + * 0b00000000000000000000000000000000..Disable Rising Edge detection + * 0b00000000000000000000000000000001..Set corresponding GEDR Status bit when Rising edge is detected on GPIO input + */ +#define GPIO_GRER_REG_GRER_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GRER_REG_GRER_REG1_SHIFT)) & GPIO_GRER_REG_GRER_REG1_MASK) +#define GPIO_GRER_REG_GRER_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GRER_REG_GRER_REG2_SHIFT (0U) +/*! GRER_REG2 - GRER Reg2 + * 0b00000000000000000000000000000000..Disable Rising Edge detection + * 0b00000000000000000000000000000001..Set corresponding GEDR Status bit when Rising edge is detected on GPIO input + */ +#define GPIO_GRER_REG_GRER_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GRER_REG_GRER_REG2_SHIFT)) & GPIO_GRER_REG_GRER_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GRER_REG */ +#define GPIO_GRER_REG_COUNT (3U) + +/*! @name GFER_REG - GPIO Falling Edge detect Enable Register 0..GPIO Falling Edge detect Enable Register 2 */ +/*! @{ */ +#define GPIO_GFER_REG_GFER_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GFER_REG_GFER_REG0_SHIFT (0U) +/*! GFER_REG0 - GFER Reg0 + * 0b00000000000000000000000000000000..Disable Falling Edge detection + * 0b00000000000000000000000000000001..Set corresponding GEDR Status bit when Falling edge is detected on GPIO input + */ +#define GPIO_GFER_REG_GFER_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GFER_REG_GFER_REG0_SHIFT)) & GPIO_GFER_REG_GFER_REG0_MASK) +#define GPIO_GFER_REG_GFER_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GFER_REG_GFER_REG1_SHIFT (0U) +/*! GFER_REG1 - GFER Reg1 + * 0b00000000000000000000000000000000..Disable Falling Edge detection + * 0b00000000000000000000000000000001..Set corresponding GEDR Status bit when Falling edge is detected on GPIO input + */ +#define GPIO_GFER_REG_GFER_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GFER_REG_GFER_REG1_SHIFT)) & GPIO_GFER_REG_GFER_REG1_MASK) +#define GPIO_GFER_REG_GFER_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GFER_REG_GFER_REG2_SHIFT (0U) +/*! GFER_REG2 - GFER Reg2 + * 0b00000000000000000000000000000000..Disable Falling Edge detection + * 0b00000000000000000000000000000001..Set corresponding GEDR Status bit when Falling edge is detected on GPIO input + */ +#define GPIO_GFER_REG_GFER_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GFER_REG_GFER_REG2_SHIFT)) & GPIO_GFER_REG_GFER_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GFER_REG */ +#define GPIO_GFER_REG_COUNT (3U) + +/*! @name GEDR_REG - GPIO Edge detect Status Register 0..GPIO Edge detect Status Register 2 */ +/*! @{ */ +#define GPIO_GEDR_REG_GEDR_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GEDR_REG_GEDR_REG0_SHIFT (0U) +/*! GEDR_REG0 - GEDR Reg0 + * 0b00000000000000000000000000000000..No edge detected on a port as specified by GRERx or GFERx + * 0b00000000000000000000000000000001..Edge detected on a port as specified by GRERx or GFERx + */ +#define GPIO_GEDR_REG_GEDR_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GEDR_REG_GEDR_REG0_SHIFT)) & GPIO_GEDR_REG_GEDR_REG0_MASK) +#define GPIO_GEDR_REG_GEDR_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GEDR_REG_GEDR_REG1_SHIFT (0U) +/*! GEDR_REG1 - GEDR Reg1 + * 0b00000000000000000000000000000000..No edge detected on a port as specified by GRERx or GFERx + * 0b00000000000000000000000000000001..Edge detected on a port as specified by GRERx or GFERx + */ +#define GPIO_GEDR_REG_GEDR_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GEDR_REG_GEDR_REG1_SHIFT)) & GPIO_GEDR_REG_GEDR_REG1_MASK) +#define GPIO_GEDR_REG_GEDR_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GEDR_REG_GEDR_REG2_SHIFT (0U) +/*! GEDR_REG2 - GEDR Reg2 + * 0b00000000000000000000000000000000..No edge detected on a port as specified by GRERx or GFERx + * 0b00000000000000000000000000000001..Edge detected on a port as specified by GRERx or GFERx + */ +#define GPIO_GEDR_REG_GEDR_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GEDR_REG_GEDR_REG2_SHIFT)) & GPIO_GEDR_REG_GEDR_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GEDR_REG */ +#define GPIO_GEDR_REG_COUNT (3U) + +/*! @name GSDR_REG - GPIO Pin Bitwise Set Direction Register 0..GPIO Pin Bitwise Set Direction Register 2 */ +/*! @{ */ +#define GPIO_GSDR_REG_GSDR_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GSDR_REG_GSDR_REG0_SHIFT (0U) +/*! GSDR_REG0 - GSDR Reg0 + * 0b00000000000000000000000000000000..GPDR bit unaffected + * 0b00000000000000000000000000000001..GPDR Bit set and GPIO Pin is set as output + */ +#define GPIO_GSDR_REG_GSDR_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSDR_REG_GSDR_REG0_SHIFT)) & GPIO_GSDR_REG_GSDR_REG0_MASK) +#define GPIO_GSDR_REG_GSDR_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GSDR_REG_GSDR_REG1_SHIFT (0U) +/*! GSDR_REG1 - GSDR Reg1 + * 0b00000000000000000000000000000000..GPDR bit unaffected + * 0b00000000000000000000000000000001..GPDR Bit set and GPIO Pin is set as output + */ +#define GPIO_GSDR_REG_GSDR_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSDR_REG_GSDR_REG1_SHIFT)) & GPIO_GSDR_REG_GSDR_REG1_MASK) +#define GPIO_GSDR_REG_GSDR_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GSDR_REG_GSDR_REG2_SHIFT (0U) +/*! GSDR_REG2 - GSDR Reg2 + * 0b00000000000000000000000000000000..GPDR bit unaffected + * 0b00000000000000000000000000000001..GPDR Bit set and GPIO Pin is set as output + */ +#define GPIO_GSDR_REG_GSDR_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSDR_REG_GSDR_REG2_SHIFT)) & GPIO_GSDR_REG_GSDR_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GSDR_REG */ +#define GPIO_GSDR_REG_COUNT (3U) + +/*! @name GCDR_REG - GPIO Pin Bitwise Clear Direction Register 0..GPIO Pin Bitwise Clear Direction Register 2 */ +/*! @{ */ +#define GPIO_GCDR_REG_GCDR_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GCDR_REG_GCDR_REG0_SHIFT (0U) +/*! GCDR_REG0 - GCDR Reg0 + * 0b00000000000000000000000000000000..GPDR bit unaffected + * 0b00000000000000000000000000000001..GPDR Bit clear and GPIO Pin is set as input + */ +#define GPIO_GCDR_REG_GCDR_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCDR_REG_GCDR_REG0_SHIFT)) & GPIO_GCDR_REG_GCDR_REG0_MASK) +#define GPIO_GCDR_REG_GCDR_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GCDR_REG_GCDR_REG1_SHIFT (0U) +/*! GCDR_REG1 - GCDR Reg1 + * 0b00000000000000000000000000000000..GPDR bit unaffected + * 0b00000000000000000000000000000001..GPDR Bit clear and GPIO Pin is set as input + */ +#define GPIO_GCDR_REG_GCDR_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCDR_REG_GCDR_REG1_SHIFT)) & GPIO_GCDR_REG_GCDR_REG1_MASK) +#define GPIO_GCDR_REG_GCDR_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GCDR_REG_GCDR_REG2_SHIFT (0U) +/*! GCDR_REG2 - GCDR Reg2 + * 0b00000000000000000000000000000000..GPDR bit unaffected + * 0b00000000000000000000000000000001..GPDR Bit clear and GPIO Pin is set as input + */ +#define GPIO_GCDR_REG_GCDR_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCDR_REG_GCDR_REG2_SHIFT)) & GPIO_GCDR_REG_GCDR_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GCDR_REG */ +#define GPIO_GCDR_REG_COUNT (3U) + +/*! @name GSRER_REG - GPIO Bitwise Set Rising Edge detect Enable Register 0..GPIO Bitwise set Rising Edge detect Enable Register 2 */ +/*! @{ */ +#define GPIO_GSRER_REG_GSRER_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GSRER_REG_GSRER_REG0_SHIFT (0U) +/*! GSRER_REG0 - GSRER Reg0 + * 0b00000000000000000000000000000000..GRER bit Unaffected + * 0b00000000000000000000000000000001..GRER Bit set + */ +#define GPIO_GSRER_REG_GSRER_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSRER_REG_GSRER_REG0_SHIFT)) & GPIO_GSRER_REG_GSRER_REG0_MASK) +#define GPIO_GSRER_REG_GSRER_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GSRER_REG_GSRER_REG1_SHIFT (0U) +/*! GSRER_REG1 - GSRER Reg1 + * 0b00000000000000000000000000000000..GRER bit Unaffected + * 0b00000000000000000000000000000001..GRER Bit set + */ +#define GPIO_GSRER_REG_GSRER_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSRER_REG_GSRER_REG1_SHIFT)) & GPIO_GSRER_REG_GSRER_REG1_MASK) +#define GPIO_GSRER_REG_GSRER_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GSRER_REG_GSRER_REG2_SHIFT (0U) +/*! GSRER_REG2 - GSRER Reg2 + * 0b00000000000000000000000000000000..GRER bit Unaffected + * 0b00000000000000000000000000000001..GRER Bit set + */ +#define GPIO_GSRER_REG_GSRER_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSRER_REG_GSRER_REG2_SHIFT)) & GPIO_GSRER_REG_GSRER_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GSRER_REG */ +#define GPIO_GSRER_REG_COUNT (3U) + +/*! @name GCRER_REG - GPIO Bitwise Clear Rising Edge detect Enable Register 0..GPIO Bitwise Clear Rising Edge detect Enable Register 2 */ +/*! @{ */ +#define GPIO_GCRER_REG_GCRER_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GCRER_REG_GCRER_REG0_SHIFT (0U) +/*! GCRER_REG0 - GCRER Reg0 + * 0b00000000000000000000000000000000..GRER bit Unaffected + * 0b00000000000000000000000000000001..GRER Bit Clear + */ +#define GPIO_GCRER_REG_GCRER_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCRER_REG_GCRER_REG0_SHIFT)) & GPIO_GCRER_REG_GCRER_REG0_MASK) +#define GPIO_GCRER_REG_GCRER_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GCRER_REG_GCRER_REG1_SHIFT (0U) +/*! GCRER_REG1 - GCRER Reg1 + * 0b00000000000000000000000000000000..GRER bit Unaffected + * 0b00000000000000000000000000000001..GRER Bit Clear + */ +#define GPIO_GCRER_REG_GCRER_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCRER_REG_GCRER_REG1_SHIFT)) & GPIO_GCRER_REG_GCRER_REG1_MASK) +#define GPIO_GCRER_REG_GCRER_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GCRER_REG_GCRER_REG2_SHIFT (0U) +/*! GCRER_REG2 - GCRER Reg2 + * 0b00000000000000000000000000000000..GRER bit Unaffected + * 0b00000000000000000000000000000001..GRER Bit Clear + */ +#define GPIO_GCRER_REG_GCRER_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCRER_REG_GCRER_REG2_SHIFT)) & GPIO_GCRER_REG_GCRER_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GCRER_REG */ +#define GPIO_GCRER_REG_COUNT (3U) + +/*! @name GSFER_REG - GPIO Bitwise Set Falling Edge detect Enable Register 0..GPIO Bitwise set Falling Edge detect Enable Register 2 */ +/*! @{ */ +#define GPIO_GSFER_REG_GSFER_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GSFER_REG_GSFER_REG0_SHIFT (0U) +/*! GSFER_REG0 - GSFER Reg0 + * 0b00000000000000000000000000000000..GFER bit Unaffected + * 0b00000000000000000000000000000001..GFER Bit set + */ +#define GPIO_GSFER_REG_GSFER_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSFER_REG_GSFER_REG0_SHIFT)) & GPIO_GSFER_REG_GSFER_REG0_MASK) +#define GPIO_GSFER_REG_GSFER_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GSFER_REG_GSFER_REG1_SHIFT (0U) +/*! GSFER_REG1 - GSFER Reg1 + * 0b00000000000000000000000000000000..GFER bit Unaffected + * 0b00000000000000000000000000000001..GFER Bit set + */ +#define GPIO_GSFER_REG_GSFER_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSFER_REG_GSFER_REG1_SHIFT)) & GPIO_GSFER_REG_GSFER_REG1_MASK) +#define GPIO_GSFER_REG_GSFER_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GSFER_REG_GSFER_REG2_SHIFT (0U) +/*! GSFER_REG2 - GSFER Reg2 + * 0b00000000000000000000000000000000..GFER bit Unaffected + * 0b00000000000000000000000000000001..GFER Bit set + */ +#define GPIO_GSFER_REG_GSFER_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GSFER_REG_GSFER_REG2_SHIFT)) & GPIO_GSFER_REG_GSFER_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GSFER_REG */ +#define GPIO_GSFER_REG_COUNT (3U) + +/*! @name GCFER_REG - GPIO Bitwise Clear Falling Edge detect Enable Register 0..GPIO Bitwise Clear Falling Edge detect Enable Register 2 */ +/*! @{ */ +#define GPIO_GCFER_REG_GCFER_REG0_MASK (0xFFFFFFFFU) +#define GPIO_GCFER_REG_GCFER_REG0_SHIFT (0U) +/*! GCFER_REG0 - GCFER Reg0 + * 0b00000000000000000000000000000000..GFER bit Unaffected + * 0b00000000000000000000000000000001..GFER Bit Clear + */ +#define GPIO_GCFER_REG_GCFER_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCFER_REG_GCFER_REG0_SHIFT)) & GPIO_GCFER_REG_GCFER_REG0_MASK) +#define GPIO_GCFER_REG_GCFER_REG1_MASK (0xFFFFFFFFU) +#define GPIO_GCFER_REG_GCFER_REG1_SHIFT (0U) +/*! GCFER_REG1 - GCFER Reg1 + * 0b00000000000000000000000000000000..GFER bit Unaffected + * 0b00000000000000000000000000000001..GFER Bit Clear + */ +#define GPIO_GCFER_REG_GCFER_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCFER_REG_GCFER_REG1_SHIFT)) & GPIO_GCFER_REG_GCFER_REG1_MASK) +#define GPIO_GCFER_REG_GCFER_REG2_MASK (0xFFFFFFFFU) +#define GPIO_GCFER_REG_GCFER_REG2_SHIFT (0U) +/*! GCFER_REG2 - GCFER Reg2 + * 0b00000000000000000000000000000000..GFER bit Unaffected + * 0b00000000000000000000000000000001..GFER Bit Clear + */ +#define GPIO_GCFER_REG_GCFER_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_GCFER_REG_GCFER_REG2_SHIFT)) & GPIO_GCFER_REG_GCFER_REG2_MASK) +/*! @} */ + +/* The count of GPIO_GCFER_REG */ +#define GPIO_GCFER_REG_COUNT (3U) + +/*! @name APMASK_REG - GPIO Bitwise mask of Edge detect Status Register 0..GPIO Bitwise mask of Edge detect Status Register 2 */ +/*! @{ */ +#define GPIO_APMASK_REG_APMASK_REG0_MASK (0xFFFFFFFFU) +#define GPIO_APMASK_REG_APMASK_REG0_SHIFT (0U) +/*! APMASK_REG0 - APMASK Reg0 + * 0b00000000000000000000000000000000..GPIO Edge detects are masked + * 0b00000000000000000000000000000001..GPIO Edge detects are not masked + */ +#define GPIO_APMASK_REG_APMASK_REG0(x) (((uint32_t)(((uint32_t)(x)) << GPIO_APMASK_REG_APMASK_REG0_SHIFT)) & GPIO_APMASK_REG_APMASK_REG0_MASK) +#define GPIO_APMASK_REG_APMASK_REG1_MASK (0xFFFFFFFFU) +#define GPIO_APMASK_REG_APMASK_REG1_SHIFT (0U) +/*! APMASK_REG1 - APMASK Reg1 + * 0b00000000000000000000000000000000..GPIO Edge detects are masked + * 0b00000000000000000000000000000001..GPIO Edge detects are not masked + */ +#define GPIO_APMASK_REG_APMASK_REG1(x) (((uint32_t)(((uint32_t)(x)) << GPIO_APMASK_REG_APMASK_REG1_SHIFT)) & GPIO_APMASK_REG_APMASK_REG1_MASK) +#define GPIO_APMASK_REG_APMASK_REG2_MASK (0xFFFFFFFFU) +#define GPIO_APMASK_REG_APMASK_REG2_SHIFT (0U) +/*! APMASK_REG2 - APMASK Reg2 + * 0b00000000000000000000000000000000..GPIO Edge detects are masked + * 0b00000000000000000000000000000001..GPIO Edge detects are not masked + */ +#define GPIO_APMASK_REG_APMASK_REG2(x) (((uint32_t)(((uint32_t)(x)) << GPIO_APMASK_REG_APMASK_REG2_SHIFT)) & GPIO_APMASK_REG_APMASK_REG2_MASK) +/*! @} */ + +/* The count of GPIO_APMASK_REG */ +#define GPIO_APMASK_REG_COUNT (3U) + + +/*! + * @} + */ /* end of group GPIO_Register_Masks */ + + +/* GPIO - Peripheral instance base addresses */ +/** Peripheral GPIO base address */ +#define GPIO_BASE (0x46060000u) +/** Peripheral GPIO base pointer */ +#define GPIO ((GPIO_Type *)GPIO_BASE) +/** Array initializer of GPIO peripheral base addresses */ +#define GPIO_BASE_ADDRS { GPIO_BASE } +/** Array initializer of GPIO peripheral base pointers */ +#define GPIO_BASE_PTRS { GPIO } +/** Interrupt vectors for the GPIO peripheral type */ +#define GPIO_IRQS { GPIO_IRQn } + +/*! + * @} + */ /* end of group GPIO_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- GPT Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup GPT_Peripheral_Access_Layer GPT Peripheral Access Layer + * @{ + */ + +/** GPT - Register Layout Typedef */ +typedef struct { + __IO uint32_t CNT_EN_REG; /**< Counter Enable Register, offset: 0x0 */ + uint8_t RESERVED_0[28]; + __IO uint32_t STS_REG; /**< Status Register, offset: 0x20 */ + __I uint32_t INT_REG; /**< Interrupt Register, offset: 0x24 */ + __IO uint32_t INT_MSK_REG; /**< Interrupt Mask Register, offset: 0x28 */ + uint8_t RESERVED_1[20]; + __IO uint32_t CNT_CNTL_REG; /**< Counter Control Register, offset: 0x40 */ + uint8_t RESERVED_2[12]; + __I uint32_t CNT_VAL_REG; /**< Counter Value Register, offset: 0x50 */ + uint8_t RESERVED_3[12]; + __IO uint32_t CNT_UPP_VAL_REG; /**< Counter Upper Value Register, offset: 0x60 */ + uint8_t RESERVED_4[28]; + __IO uint32_t CLK_CNTL_REG; /**< Clock Control Register, offset: 0x80 */ + uint8_t RESERVED_5[4]; + __IO uint32_t IC_CNTL_REG; /**< Input Capture Control Register, offset: 0x88 */ + uint8_t RESERVED_6[20]; + __IO uint32_t DMA_CNTL_EN_REG; /**< DMA Control Enable Register, offset: 0xA0 */ + __IO uint32_t DMA_CNTL_CH_REG; /**< DMA Control Channel Register, offset: 0xA4 */ + uint8_t RESERVED_7[40]; + __IO uint32_t ADCT_REG; /**< ADC Trigger Control Register, offset: 0xD0 */ + uint8_t RESERVED_8[4]; + __IO uint32_t ADCT_DLY_REG; /**< ADC Trigger Delay Register, offset: 0xD8 */ + uint8_t RESERVED_9[20]; + __O uint32_t USER_REQ_REG; /**< User Request Register, offset: 0xF0 */ + uint8_t RESERVED_10[268]; + struct { /* offset: 0x200, array step: 0x40 */ + __IO uint32_t CH_CNTL_REG; /**< Channel 0 Control Register..Channel 5 Control Register, array offset: 0x200, array step: 0x40 */ + uint8_t RESERVED_0[12]; + __IO uint32_t CH_CMR0_REG; /**< Channel 0 Counter Match Register 0..Channel 5 Counter Match Register 0, array offset: 0x210, array step: 0x40 */ + __I uint32_t CH_STS_REG; /**< Channel 0 Status Register 0..Channel 5 Status Register 0, array offset: 0x214, array step: 0x40 */ + uint8_t RESERVED_1[8]; + __IO uint32_t CH_CMR1_REG; /**< Channel 0 Counter Match Register 1..Channel 5 Counter Match Register 1, array offset: 0x220, array step: 0x40 */ + uint8_t RESERVED_2[28]; + } CH[6]; +} GPT_Type; + +/* ---------------------------------------------------------------------------- + -- GPT Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup GPT_Register_Masks GPT Register Masks + * @{ + */ + +/*! @name CNT_EN_REG - Counter Enable Register */ +/*! @{ */ +#define GPT_CNT_EN_REG_CNT_START_MASK (0x1U) +#define GPT_CNT_EN_REG_CNT_START_SHIFT (0U) +/*! CNT_START - Counter Start + * 0b0..No action + * 0b1..Enable the counter (poll CNT_RUN for 1 to confirm that the counter is enabled internally) + */ +#define GPT_CNT_EN_REG_CNT_START(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_EN_REG_CNT_START_SHIFT)) & GPT_CNT_EN_REG_CNT_START_MASK) +#define GPT_CNT_EN_REG_CNT_STOP_MASK (0x2U) +#define GPT_CNT_EN_REG_CNT_STOP_SHIFT (1U) +/*! CNT_STOP - Counter Stop + * 0b0..No action + * 0b1..Disable the counter (poll CNT_RUN for 0 to confirm that the counter is disabled internally) + */ +#define GPT_CNT_EN_REG_CNT_STOP(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_EN_REG_CNT_STOP_SHIFT)) & GPT_CNT_EN_REG_CNT_STOP_MASK) +#define GPT_CNT_EN_REG_CNT_RESET_MASK (0x4U) +#define GPT_CNT_EN_REG_CNT_RESET_SHIFT (2U) +/*! CNT_RESET - Counter Reset + * 0b0..No action + * 0b1..Reset the counter (counter is reset to 0; channel output states are reset to 0; poll CNT_RST_DONE for 1 + * before writing to any other registers) + */ +#define GPT_CNT_EN_REG_CNT_RESET(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_EN_REG_CNT_RESET_SHIFT)) & GPT_CNT_EN_REG_CNT_RESET_MASK) +#define GPT_CNT_EN_REG_CNT_RUN_MASK (0x10000U) +#define GPT_CNT_EN_REG_CNT_RUN_SHIFT (16U) +/*! CNT_RUN - Counter Enabled Status + * 0b0..Counter is disabled + * 0b1..Counter is enabled + */ +#define GPT_CNT_EN_REG_CNT_RUN(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_EN_REG_CNT_RUN_SHIFT)) & GPT_CNT_EN_REG_CNT_RUN_MASK) +#define GPT_CNT_EN_REG_CNT_RST_DONE_MASK (0x20000U) +#define GPT_CNT_EN_REG_CNT_RST_DONE_SHIFT (17U) +/*! CNT_RST_DONE - Counter Reset Done Status + * 0b0..Indicates that the counter is still resetting + * 0b1..Indicates that the counter has been reset + */ +#define GPT_CNT_EN_REG_CNT_RST_DONE(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_EN_REG_CNT_RST_DONE_SHIFT)) & GPT_CNT_EN_REG_CNT_RST_DONE_MASK) +#define GPT_CNT_EN_REG_STS_RESETN_MASK (0x40000U) +#define GPT_CNT_EN_REG_STS_RESETN_SHIFT (18U) +/*! STS_RESETN - System Reset Status + * 0b0..Indicates that the system reset is still asserted + * 0b1..Indicates that the system reset is deasserted + */ +#define GPT_CNT_EN_REG_STS_RESETN(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_EN_REG_STS_RESETN_SHIFT)) & GPT_CNT_EN_REG_STS_RESETN_MASK) +/*! @} */ + +/*! @name STS_REG - Status Register */ +/*! @{ */ +#define GPT_STS_REG_CH0_STS_MASK (0x1U) +#define GPT_STS_REG_CH0_STS_SHIFT (0U) +/*! CH0_STS - Channel Status + * 0b0..Status cleared + * 0b1..Status bit for this channel has been set + */ +#define GPT_STS_REG_CH0_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH0_STS_SHIFT)) & GPT_STS_REG_CH0_STS_MASK) +#define GPT_STS_REG_CH1_STS_MASK (0x2U) +#define GPT_STS_REG_CH1_STS_SHIFT (1U) +/*! CH1_STS - See CH0_STS. + */ +#define GPT_STS_REG_CH1_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH1_STS_SHIFT)) & GPT_STS_REG_CH1_STS_MASK) +#define GPT_STS_REG_CH2_STS_MASK (0x4U) +#define GPT_STS_REG_CH2_STS_SHIFT (2U) +/*! CH2_STS - See CH0_STS. + */ +#define GPT_STS_REG_CH2_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH2_STS_SHIFT)) & GPT_STS_REG_CH2_STS_MASK) +#define GPT_STS_REG_CH3_STS_MASK (0x8U) +#define GPT_STS_REG_CH3_STS_SHIFT (3U) +/*! CH3_STS - See CH0_STS. + */ +#define GPT_STS_REG_CH3_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH3_STS_SHIFT)) & GPT_STS_REG_CH3_STS_MASK) +#define GPT_STS_REG_CH4_STS_MASK (0x10U) +#define GPT_STS_REG_CH4_STS_SHIFT (4U) +/*! CH4_STS - See CH0_STS. + */ +#define GPT_STS_REG_CH4_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH4_STS_SHIFT)) & GPT_STS_REG_CH4_STS_MASK) +#define GPT_STS_REG_CH5_STS_MASK (0x20U) +#define GPT_STS_REG_CH5_STS_SHIFT (5U) +/*! CH5_STS - See CH0_STS. + */ +#define GPT_STS_REG_CH5_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH5_STS_SHIFT)) & GPT_STS_REG_CH5_STS_MASK) +#define GPT_STS_REG_CH0_ERR_STS_MASK (0x100U) +#define GPT_STS_REG_CH0_ERR_STS_SHIFT (8U) +/*! CH0_ERR_STS - Channel Error Status + * 0b0..Status cleared + * 0b1..An error has occurred in this channel + */ +#define GPT_STS_REG_CH0_ERR_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH0_ERR_STS_SHIFT)) & GPT_STS_REG_CH0_ERR_STS_MASK) +#define GPT_STS_REG_CH1_ERR_STS_MASK (0x200U) +#define GPT_STS_REG_CH1_ERR_STS_SHIFT (9U) +/*! CH1_ERR_STS - See CH0_ERR_STS. + */ +#define GPT_STS_REG_CH1_ERR_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH1_ERR_STS_SHIFT)) & GPT_STS_REG_CH1_ERR_STS_MASK) +#define GPT_STS_REG_CH2_ERR_STS_MASK (0x400U) +#define GPT_STS_REG_CH2_ERR_STS_SHIFT (10U) +/*! CH2_ERR_STS - See CH0_ERR_STS. + */ +#define GPT_STS_REG_CH2_ERR_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH2_ERR_STS_SHIFT)) & GPT_STS_REG_CH2_ERR_STS_MASK) +#define GPT_STS_REG_CH3_ERR_STS_MASK (0x800U) +#define GPT_STS_REG_CH3_ERR_STS_SHIFT (11U) +/*! CH3_ERR_STS - See CH0_ERR_STS. + */ +#define GPT_STS_REG_CH3_ERR_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH3_ERR_STS_SHIFT)) & GPT_STS_REG_CH3_ERR_STS_MASK) +#define GPT_STS_REG_CH4_ERR_STS_MASK (0x1000U) +#define GPT_STS_REG_CH4_ERR_STS_SHIFT (12U) +/*! CH4_ERR_STS - See CH0_ERR_STS. + */ +#define GPT_STS_REG_CH4_ERR_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH4_ERR_STS_SHIFT)) & GPT_STS_REG_CH4_ERR_STS_MASK) +#define GPT_STS_REG_CH5_ERR_STS_MASK (0x2000U) +#define GPT_STS_REG_CH5_ERR_STS_SHIFT (13U) +/*! CH5_ERR_STS - See CH0_ERR_STS. + */ +#define GPT_STS_REG_CH5_ERR_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CH5_ERR_STS_SHIFT)) & GPT_STS_REG_CH5_ERR_STS_MASK) +#define GPT_STS_REG_CNT_UPP_STS_MASK (0x10000U) +#define GPT_STS_REG_CNT_UPP_STS_SHIFT (16U) +/*! CNT_UPP_STS - Counter-Reach-Upper Status + */ +#define GPT_STS_REG_CNT_UPP_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_CNT_UPP_STS_SHIFT)) & GPT_STS_REG_CNT_UPP_STS_MASK) +#define GPT_STS_REG_DMA0_OF_STS_MASK (0x1000000U) +#define GPT_STS_REG_DMA0_OF_STS_SHIFT (24U) +/*! DMA0_OF_STS - DMA Overflow Status + * 0b0..Status cleared + * 0b1..Indicates that there has been a new input capture before this DMA channel could transfer the captured data away + */ +#define GPT_STS_REG_DMA0_OF_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_DMA0_OF_STS_SHIFT)) & GPT_STS_REG_DMA0_OF_STS_MASK) +#define GPT_STS_REG_DMA1_OF_STS_MASK (0x2000000U) +#define GPT_STS_REG_DMA1_OF_STS_SHIFT (25U) +/*! DMA1_OF_STS - See DMA0_OF_STS. + */ +#define GPT_STS_REG_DMA1_OF_STS(x) (((uint32_t)(((uint32_t)(x)) << GPT_STS_REG_DMA1_OF_STS_SHIFT)) & GPT_STS_REG_DMA1_OF_STS_MASK) +/*! @} */ + +/*! @name INT_REG - Interrupt Register */ +/*! @{ */ +#define GPT_INT_REG_CH0_INTR_MASK (0x1U) +#define GPT_INT_REG_CH0_INTR_SHIFT (0U) +/*! CH0_INTR - Masked signal of CH0_STS + */ +#define GPT_INT_REG_CH0_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH0_INTR_SHIFT)) & GPT_INT_REG_CH0_INTR_MASK) +#define GPT_INT_REG_CH1_INTR_MASK (0x2U) +#define GPT_INT_REG_CH1_INTR_SHIFT (1U) +/*! CH1_INTR - Masked signal of CH1_STS + */ +#define GPT_INT_REG_CH1_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH1_INTR_SHIFT)) & GPT_INT_REG_CH1_INTR_MASK) +#define GPT_INT_REG_CH2_INTR_MASK (0x4U) +#define GPT_INT_REG_CH2_INTR_SHIFT (2U) +/*! CH2_INTR - Masked signal of CH2_STS + */ +#define GPT_INT_REG_CH2_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH2_INTR_SHIFT)) & GPT_INT_REG_CH2_INTR_MASK) +#define GPT_INT_REG_CH3_INTR_MASK (0x8U) +#define GPT_INT_REG_CH3_INTR_SHIFT (3U) +/*! CH3_INTR - Masked signal of CH3_STS + */ +#define GPT_INT_REG_CH3_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH3_INTR_SHIFT)) & GPT_INT_REG_CH3_INTR_MASK) +#define GPT_INT_REG_CH4_INTR_MASK (0x10U) +#define GPT_INT_REG_CH4_INTR_SHIFT (4U) +/*! CH4_INTR - Masked signal of CH4_STS + */ +#define GPT_INT_REG_CH4_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH4_INTR_SHIFT)) & GPT_INT_REG_CH4_INTR_MASK) +#define GPT_INT_REG_CH5_INTR_MASK (0x20U) +#define GPT_INT_REG_CH5_INTR_SHIFT (5U) +/*! CH5_INTR - Masked signal of CH5_STS + */ +#define GPT_INT_REG_CH5_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH5_INTR_SHIFT)) & GPT_INT_REG_CH5_INTR_MASK) +#define GPT_INT_REG_CH0_ERR_INTR_MASK (0x100U) +#define GPT_INT_REG_CH0_ERR_INTR_SHIFT (8U) +/*! CH0_ERR_INTR - Masked signal of CH0_ERR_STS + */ +#define GPT_INT_REG_CH0_ERR_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH0_ERR_INTR_SHIFT)) & GPT_INT_REG_CH0_ERR_INTR_MASK) +#define GPT_INT_REG_CH1_ERR_INTR_MASK (0x200U) +#define GPT_INT_REG_CH1_ERR_INTR_SHIFT (9U) +/*! CH1_ERR_INTR - Masked signal of CH1_ERR_STS + */ +#define GPT_INT_REG_CH1_ERR_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH1_ERR_INTR_SHIFT)) & GPT_INT_REG_CH1_ERR_INTR_MASK) +#define GPT_INT_REG_CH2_ERR_INTR_MASK (0x400U) +#define GPT_INT_REG_CH2_ERR_INTR_SHIFT (10U) +/*! CH2_ERR_INTR - Masked signal of CH2_ERR_STS + */ +#define GPT_INT_REG_CH2_ERR_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH2_ERR_INTR_SHIFT)) & GPT_INT_REG_CH2_ERR_INTR_MASK) +#define GPT_INT_REG_CH3_ERR_INTR_MASK (0x800U) +#define GPT_INT_REG_CH3_ERR_INTR_SHIFT (11U) +/*! CH3_ERR_INTR - Masked signal of CH3_ERR_STS + */ +#define GPT_INT_REG_CH3_ERR_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH3_ERR_INTR_SHIFT)) & GPT_INT_REG_CH3_ERR_INTR_MASK) +#define GPT_INT_REG_CH4_ERR_INTR_MASK (0x1000U) +#define GPT_INT_REG_CH4_ERR_INTR_SHIFT (12U) +/*! CH4_ERR_INTR - Masked signal of CH4_ERR_STS + */ +#define GPT_INT_REG_CH4_ERR_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH4_ERR_INTR_SHIFT)) & GPT_INT_REG_CH4_ERR_INTR_MASK) +#define GPT_INT_REG_CH5_ERR_INTR_MASK (0x2000U) +#define GPT_INT_REG_CH5_ERR_INTR_SHIFT (13U) +/*! CH5_ERR_INTR - Masked signal of CH5_ERR_STS + */ +#define GPT_INT_REG_CH5_ERR_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CH5_ERR_INTR_SHIFT)) & GPT_INT_REG_CH5_ERR_INTR_MASK) +#define GPT_INT_REG_CNT_UPP_INTR_MASK (0x10000U) +#define GPT_INT_REG_CNT_UPP_INTR_SHIFT (16U) +/*! CNT_UPP_INTR - Masked signal of CNT_UPP_STS + */ +#define GPT_INT_REG_CNT_UPP_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_CNT_UPP_INTR_SHIFT)) & GPT_INT_REG_CNT_UPP_INTR_MASK) +#define GPT_INT_REG_DMA0_OF_INTR_MASK (0x1000000U) +#define GPT_INT_REG_DMA0_OF_INTR_SHIFT (24U) +/*! DMA0_OF_INTR - Masked signal of DMA0_OF_STS + */ +#define GPT_INT_REG_DMA0_OF_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_DMA0_OF_INTR_SHIFT)) & GPT_INT_REG_DMA0_OF_INTR_MASK) +#define GPT_INT_REG_DMA1_OF_INTR_MASK (0x2000000U) +#define GPT_INT_REG_DMA1_OF_INTR_SHIFT (25U) +/*! DMA1_OF_INTR - Masked signal of DMA1_OF_STS + */ +#define GPT_INT_REG_DMA1_OF_INTR(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_REG_DMA1_OF_INTR_SHIFT)) & GPT_INT_REG_DMA1_OF_INTR_MASK) +/*! @} */ + +/*! @name INT_MSK_REG - Interrupt Mask Register */ +/*! @{ */ +#define GPT_INT_MSK_REG_CH0_MSK_MASK (0x1U) +#define GPT_INT_MSK_REG_CH0_MSK_SHIFT (0U) +/*! CH0_MSK - Channel Interrupt Mask + * 0b0..Do not mask CH0_STS + * 0b1..Mask CH0_STS + */ +#define GPT_INT_MSK_REG_CH0_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH0_MSK_SHIFT)) & GPT_INT_MSK_REG_CH0_MSK_MASK) +#define GPT_INT_MSK_REG_CH1_MSK_MASK (0x2U) +#define GPT_INT_MSK_REG_CH1_MSK_SHIFT (1U) +/*! CH1_MSK - See CH0_STS. + */ +#define GPT_INT_MSK_REG_CH1_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH1_MSK_SHIFT)) & GPT_INT_MSK_REG_CH1_MSK_MASK) +#define GPT_INT_MSK_REG_CH2_MSK_MASK (0x4U) +#define GPT_INT_MSK_REG_CH2_MSK_SHIFT (2U) +/*! CH2_MSK - See CH0_STS. + */ +#define GPT_INT_MSK_REG_CH2_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH2_MSK_SHIFT)) & GPT_INT_MSK_REG_CH2_MSK_MASK) +#define GPT_INT_MSK_REG_CH3_MSK_MASK (0x8U) +#define GPT_INT_MSK_REG_CH3_MSK_SHIFT (3U) +/*! CH3_MSK - See CH0_STS. + */ +#define GPT_INT_MSK_REG_CH3_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH3_MSK_SHIFT)) & GPT_INT_MSK_REG_CH3_MSK_MASK) +#define GPT_INT_MSK_REG_CH4_MSK_MASK (0x10U) +#define GPT_INT_MSK_REG_CH4_MSK_SHIFT (4U) +/*! CH4_MSK - See CH0_STS. + */ +#define GPT_INT_MSK_REG_CH4_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH4_MSK_SHIFT)) & GPT_INT_MSK_REG_CH4_MSK_MASK) +#define GPT_INT_MSK_REG_CH5_MSK_MASK (0x20U) +#define GPT_INT_MSK_REG_CH5_MSK_SHIFT (5U) +/*! CH5_MSK - See CH0_STS. + */ +#define GPT_INT_MSK_REG_CH5_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH5_MSK_SHIFT)) & GPT_INT_MSK_REG_CH5_MSK_MASK) +#define GPT_INT_MSK_REG_CH0_ERR_MSK_MASK (0x100U) +#define GPT_INT_MSK_REG_CH0_ERR_MSK_SHIFT (8U) +/*! CH0_ERR_MSK - Channel Error Interrupt Mask + * 0b0..Do not mask CH0_ERR_STS + * 0b1..Mask CH0_ERR_STS + */ +#define GPT_INT_MSK_REG_CH0_ERR_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH0_ERR_MSK_SHIFT)) & GPT_INT_MSK_REG_CH0_ERR_MSK_MASK) +#define GPT_INT_MSK_REG_CH1_ERR_MSK_MASK (0x200U) +#define GPT_INT_MSK_REG_CH1_ERR_MSK_SHIFT (9U) +/*! CH1_ERR_MSK - See CH0_ERR_STS. + */ +#define GPT_INT_MSK_REG_CH1_ERR_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH1_ERR_MSK_SHIFT)) & GPT_INT_MSK_REG_CH1_ERR_MSK_MASK) +#define GPT_INT_MSK_REG_CH2_ERR_MSK_MASK (0x400U) +#define GPT_INT_MSK_REG_CH2_ERR_MSK_SHIFT (10U) +/*! CH2_ERR_MSK - See CH0_ERR_STS. + */ +#define GPT_INT_MSK_REG_CH2_ERR_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH2_ERR_MSK_SHIFT)) & GPT_INT_MSK_REG_CH2_ERR_MSK_MASK) +#define GPT_INT_MSK_REG_CH3_ERR_MSK_MASK (0x800U) +#define GPT_INT_MSK_REG_CH3_ERR_MSK_SHIFT (11U) +/*! CH3_ERR_MSK - See CH0_ERR_STS. + */ +#define GPT_INT_MSK_REG_CH3_ERR_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH3_ERR_MSK_SHIFT)) & GPT_INT_MSK_REG_CH3_ERR_MSK_MASK) +#define GPT_INT_MSK_REG_CH4_ERR_MSK_MASK (0x1000U) +#define GPT_INT_MSK_REG_CH4_ERR_MSK_SHIFT (12U) +/*! CH4_ERR_MSK - See CH0_ERR_STS. + */ +#define GPT_INT_MSK_REG_CH4_ERR_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH4_ERR_MSK_SHIFT)) & GPT_INT_MSK_REG_CH4_ERR_MSK_MASK) +#define GPT_INT_MSK_REG_CH5_ERR_MSK_MASK (0x2000U) +#define GPT_INT_MSK_REG_CH5_ERR_MSK_SHIFT (13U) +/*! CH5_ERR_MSK - See CH0_ERR_STS. + */ +#define GPT_INT_MSK_REG_CH5_ERR_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CH5_ERR_MSK_SHIFT)) & GPT_INT_MSK_REG_CH5_ERR_MSK_MASK) +#define GPT_INT_MSK_REG_CNT_UPP_MSK_MASK (0x10000U) +#define GPT_INT_MSK_REG_CNT_UPP_MSK_SHIFT (16U) +/*! CNT_UPP_MSK - Upper Value Interrupt Mask + * 0b0..Do not mask CNT_UPP_STS + * 0b1..Mask CNT_UPP_STS + */ +#define GPT_INT_MSK_REG_CNT_UPP_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_CNT_UPP_MSK_SHIFT)) & GPT_INT_MSK_REG_CNT_UPP_MSK_MASK) +#define GPT_INT_MSK_REG_DMA0_OF_MSK_MASK (0x1000000U) +#define GPT_INT_MSK_REG_DMA0_OF_MSK_SHIFT (24U) +/*! DMA0_OF_MSK - DMA Channel Overflow Mask + * 0b0..Do not mask DMA0_OF_STS + * 0b1..Mask DMA0_OF_STS + */ +#define GPT_INT_MSK_REG_DMA0_OF_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_DMA0_OF_MSK_SHIFT)) & GPT_INT_MSK_REG_DMA0_OF_MSK_MASK) +#define GPT_INT_MSK_REG_DMA1_OF_MSK_MASK (0x2000000U) +#define GPT_INT_MSK_REG_DMA1_OF_MSK_SHIFT (25U) +/*! DMA1_OF_MSK - See DMA0_OF_MSK + */ +#define GPT_INT_MSK_REG_DMA1_OF_MSK(x) (((uint32_t)(((uint32_t)(x)) << GPT_INT_MSK_REG_DMA1_OF_MSK_SHIFT)) & GPT_INT_MSK_REG_DMA1_OF_MSK_MASK) +/*! @} */ + +/*! @name CNT_CNTL_REG - Counter Control Register */ +/*! @{ */ +#define GPT_CNT_CNTL_REG_CNT_DBG_ACT_MASK (0x10U) +#define GPT_CNT_CNTL_REG_CNT_DBG_ACT_SHIFT (4U) +/*! CNT_DBG_ACT - Counter Debug Mode Action Mask + * 0b0..In debug mode, stop the counter + * 0b1..In debug mode, the counter is not affected + */ +#define GPT_CNT_CNTL_REG_CNT_DBG_ACT(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_CNTL_REG_CNT_DBG_ACT_SHIFT)) & GPT_CNT_CNTL_REG_CNT_DBG_ACT_MASK) +#define GPT_CNT_CNTL_REG_CNT_UPDT_MOD_MASK (0x300U) +#define GPT_CNT_CNTL_REG_CNT_UPDT_MOD_SHIFT (8U) +/*! CNT_UPDT_MOD - Counter Value Update Mode + * 0b00..Auto-update normal (can be used for any clock relationship between the counter clock and the APB clock; + * only every 3-4 counter ticks are updated to CNT_VAL) + * 0b01..Auto-update fast (use when counter clock is at least 5 times slower than the APB clock; every counter tick is updated to CNT_VAL) + * 0b10..Reserved + * 0b11..Update off (of CNT_VAL does not need to be read, CNT_UPDT_MOD can be set to off to save power) + */ +#define GPT_CNT_CNTL_REG_CNT_UPDT_MOD(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_CNTL_REG_CNT_UPDT_MOD_SHIFT)) & GPT_CNT_CNTL_REG_CNT_UPDT_MOD_MASK) +/*! @} */ + +/*! @name CNT_VAL_REG - Counter Value Register */ +/*! @{ */ +#define GPT_CNT_VAL_REG_CNT_VAL_MASK (0xFFFFFFFFU) +#define GPT_CNT_VAL_REG_CNT_VAL_SHIFT (0U) +/*! CNT_VAL - Counter Value + */ +#define GPT_CNT_VAL_REG_CNT_VAL(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_VAL_REG_CNT_VAL_SHIFT)) & GPT_CNT_VAL_REG_CNT_VAL_MASK) +/*! @} */ + +/*! @name CNT_UPP_VAL_REG - Counter Upper Value Register */ +/*! @{ */ +#define GPT_CNT_UPP_VAL_REG_UPP_VAL_MASK (0xFFFFFFFFU) +#define GPT_CNT_UPP_VAL_REG_UPP_VAL_SHIFT (0U) +/*! UPP_VAL - Counter Upper Value + */ +#define GPT_CNT_UPP_VAL_REG_UPP_VAL(x) (((uint32_t)(((uint32_t)(x)) << GPT_CNT_UPP_VAL_REG_UPP_VAL_SHIFT)) & GPT_CNT_UPP_VAL_REG_UPP_VAL_MASK) +/*! @} */ + +/*! @name CLK_CNTL_REG - Clock Control Register */ +/*! @{ */ +#define GPT_CLK_CNTL_REG_CLK_SRC_MASK (0x1U) +#define GPT_CLK_CNTL_REG_CLK_SRC_SHIFT (0U) +/*! CLK_SRC - Counter Clock Select + * 0b0..Select clock 0 + * 0b1..Select clock 1 + */ +#define GPT_CLK_CNTL_REG_CLK_SRC(x) (((uint32_t)(((uint32_t)(x)) << GPT_CLK_CNTL_REG_CLK_SRC_SHIFT)) & GPT_CLK_CNTL_REG_CLK_SRC_MASK) +#define GPT_CLK_CNTL_REG_CLK_DIV_MASK (0xF00U) +#define GPT_CLK_CNTL_REG_CLK_DIV_SHIFT (8U) +/*! CLK_DIV - Clock Divider + */ +#define GPT_CLK_CNTL_REG_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << GPT_CLK_CNTL_REG_CLK_DIV_SHIFT)) & GPT_CLK_CNTL_REG_CLK_DIV_MASK) +#define GPT_CLK_CNTL_REG_CLK_PRE_MASK (0xFF0000U) +#define GPT_CLK_CNTL_REG_CLK_PRE_SHIFT (16U) +/*! CLK_PRE - Clock Pre-Scalar + */ +#define GPT_CLK_CNTL_REG_CLK_PRE(x) (((uint32_t)(((uint32_t)(x)) << GPT_CLK_CNTL_REG_CLK_PRE_SHIFT)) & GPT_CLK_CNTL_REG_CLK_PRE_MASK) +/*! @} */ + +/*! @name IC_CNTL_REG - Input Capture Control Register */ +/*! @{ */ +#define GPT_IC_CNTL_REG_CHX_IC_WIDTH_MASK (0x7U) +#define GPT_IC_CNTL_REG_CHX_IC_WIDTH_SHIFT (0U) +/*! CHx_IC_WIDTH - Input Capture Filter Width + * 0b000..No filtering (1 cycle) + * 0b001..2 cycles + * 0b010..3 cycles + * 0b011..4 cycles + * 0b100..5 cycles + * 0b101..6 cycles + * 0b110..7 cycles + * 0b111..Reserved + */ +#define GPT_IC_CNTL_REG_CHX_IC_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << GPT_IC_CNTL_REG_CHX_IC_WIDTH_SHIFT)) & GPT_IC_CNTL_REG_CHX_IC_WIDTH_MASK) +#define GPT_IC_CNTL_REG_CHX_IC_DIV_MASK (0x70U) +#define GPT_IC_CNTL_REG_CHX_IC_DIV_SHIFT (4U) +/*! CHx_IC_DIV - Input Capture Sampling Clock Divider + */ +#define GPT_IC_CNTL_REG_CHX_IC_DIV(x) (((uint32_t)(((uint32_t)(x)) << GPT_IC_CNTL_REG_CHX_IC_DIV_SHIFT)) & GPT_IC_CNTL_REG_CHX_IC_DIV_MASK) +/*! @} */ + +/*! @name DMA_CNTL_EN_REG - DMA Control Enable Register */ +/*! @{ */ +#define GPT_DMA_CNTL_EN_REG_DMA0_EN_MASK (0x1U) +#define GPT_DMA_CNTL_EN_REG_DMA0_EN_SHIFT (0U) +/*! DMA0_EN - DMA Channel Enable + * 0b0..Disable this DMA channel + * 0b1..Enable this DMA channel. In input capture mode, DMA controller will be notified when a value is captured. + */ +#define GPT_DMA_CNTL_EN_REG_DMA0_EN(x) (((uint32_t)(((uint32_t)(x)) << GPT_DMA_CNTL_EN_REG_DMA0_EN_SHIFT)) & GPT_DMA_CNTL_EN_REG_DMA0_EN_MASK) +#define GPT_DMA_CNTL_EN_REG_DMA1_EN_MASK (0x2U) +#define GPT_DMA_CNTL_EN_REG_DMA1_EN_SHIFT (1U) +/*! DMA1_EN - See DMA0_EN. + */ +#define GPT_DMA_CNTL_EN_REG_DMA1_EN(x) (((uint32_t)(((uint32_t)(x)) << GPT_DMA_CNTL_EN_REG_DMA1_EN_SHIFT)) & GPT_DMA_CNTL_EN_REG_DMA1_EN_MASK) +/*! @} */ + +/*! @name DMA_CNTL_CH_REG - DMA Control Channel Register */ +/*! @{ */ +#define GPT_DMA_CNTL_CH_REG_DMA0_CH_MASK (0x7U) +#define GPT_DMA_CNTL_CH_REG_DMA0_CH_SHIFT (0U) +/*! DMA0_CH - DMA Channel Select + * 0b000..Connect to channel 0 + * 0b001..Connect to channel 1 + * 0b010..Connect to channel 2 + * 0b011..Connect to channel 3 + * 0b100..Connect to channel 4 + * 0b101..Connect to channel 5 + */ +#define GPT_DMA_CNTL_CH_REG_DMA0_CH(x) (((uint32_t)(((uint32_t)(x)) << GPT_DMA_CNTL_CH_REG_DMA0_CH_SHIFT)) & GPT_DMA_CNTL_CH_REG_DMA0_CH_MASK) +#define GPT_DMA_CNTL_CH_REG_DMA1_CH_MASK (0x70U) +#define GPT_DMA_CNTL_CH_REG_DMA1_CH_SHIFT (4U) +/*! DMA1_CH - See DMA0_CH. + */ +#define GPT_DMA_CNTL_CH_REG_DMA1_CH(x) (((uint32_t)(((uint32_t)(x)) << GPT_DMA_CNTL_CH_REG_DMA1_CH_SHIFT)) & GPT_DMA_CNTL_CH_REG_DMA1_CH_MASK) +/*! @} */ + +/*! @name ADCT_REG - ADC Trigger Control Register */ +/*! @{ */ +#define GPT_ADCT_REG_ADCT_CHSEL_MASK (0x7U) +#define GPT_ADCT_REG_ADCT_CHSEL_SHIFT (0U) +/*! ADCT_CHSEL - ADC Trigger Channel Select + * 0b000..Connect to channel 0 + * 0b001..Connect to channel 1 + * 0b010..Connect to channel 2 + * 0b011..Connect to channel 3 + * 0b100..Connect to channel 4 + * 0b101..Connect to channel 5 + */ +#define GPT_ADCT_REG_ADCT_CHSEL(x) (((uint32_t)(((uint32_t)(x)) << GPT_ADCT_REG_ADCT_CHSEL_SHIFT)) & GPT_ADCT_REG_ADCT_CHSEL_MASK) +#define GPT_ADCT_REG_ADCT_EN_MASK (0x100U) +#define GPT_ADCT_REG_ADCT_EN_SHIFT (8U) +/*! ADCT_EN - ADC Trigger Enable + * 0b0..Disable the ADC trigger + * 0b1..Enable the ADC trigger + */ +#define GPT_ADCT_REG_ADCT_EN(x) (((uint32_t)(((uint32_t)(x)) << GPT_ADCT_REG_ADCT_EN_SHIFT)) & GPT_ADCT_REG_ADCT_EN_MASK) +/*! @} */ + +/*! @name ADCT_DLY_REG - ADC Trigger Delay Register */ +/*! @{ */ +#define GPT_ADCT_DLY_REG_ADCT_DLY_MASK (0xFFFFFFFFU) +#define GPT_ADCT_DLY_REG_ADCT_DLY_SHIFT (0U) +/*! ADCT_DLY - ADC Trigger Delay + */ +#define GPT_ADCT_DLY_REG_ADCT_DLY(x) (((uint32_t)(((uint32_t)(x)) << GPT_ADCT_DLY_REG_ADCT_DLY_SHIFT)) & GPT_ADCT_DLY_REG_ADCT_DLY_MASK) +/*! @} */ + +/*! @name USER_REQ_REG - User Request Register */ +/*! @{ */ +#define GPT_USER_REQ_REG_CH0_USER_ITRIG_MASK (0x1U) +#define GPT_USER_REQ_REG_CH0_USER_ITRIG_SHIFT (0U) +/*! CH0_USER_ITRIG - User Input Trigger + * 0b0..No action + * 0b1..If this channel (channel 0) is configured to input-capture mode, generate a manual input trigger to + * capture the current counter value (this trigger bypasses the input capture control settings) + */ +#define GPT_USER_REQ_REG_CH0_USER_ITRIG(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH0_USER_ITRIG_SHIFT)) & GPT_USER_REQ_REG_CH0_USER_ITRIG_MASK) +#define GPT_USER_REQ_REG_CH1_USER_ITRIG_MASK (0x2U) +#define GPT_USER_REQ_REG_CH1_USER_ITRIG_SHIFT (1U) +/*! CH1_USER_ITRIG - See CH0_USER_ITRIG. + */ +#define GPT_USER_REQ_REG_CH1_USER_ITRIG(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH1_USER_ITRIG_SHIFT)) & GPT_USER_REQ_REG_CH1_USER_ITRIG_MASK) +#define GPT_USER_REQ_REG_CH2_USER_ITRIG_MASK (0x4U) +#define GPT_USER_REQ_REG_CH2_USER_ITRIG_SHIFT (2U) +/*! CH2_USER_ITRIG - See CH0_USER_ITRIG. + */ +#define GPT_USER_REQ_REG_CH2_USER_ITRIG(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH2_USER_ITRIG_SHIFT)) & GPT_USER_REQ_REG_CH2_USER_ITRIG_MASK) +#define GPT_USER_REQ_REG_CH3_USER_ITRIG_MASK (0x8U) +#define GPT_USER_REQ_REG_CH3_USER_ITRIG_SHIFT (3U) +/*! CH3_USER_ITRIG - See CH0_USER_ITRIG. + */ +#define GPT_USER_REQ_REG_CH3_USER_ITRIG(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH3_USER_ITRIG_SHIFT)) & GPT_USER_REQ_REG_CH3_USER_ITRIG_MASK) +#define GPT_USER_REQ_REG_CH4_USER_ITRIG_MASK (0x10U) +#define GPT_USER_REQ_REG_CH4_USER_ITRIG_SHIFT (4U) +/*! CH4_USER_ITRIG - See CH0_USER_ITRIG. + */ +#define GPT_USER_REQ_REG_CH4_USER_ITRIG(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH4_USER_ITRIG_SHIFT)) & GPT_USER_REQ_REG_CH4_USER_ITRIG_MASK) +#define GPT_USER_REQ_REG_CH5_USER_ITRIG_MASK (0x20U) +#define GPT_USER_REQ_REG_CH5_USER_ITRIG_SHIFT (5U) +/*! CH5_USER_ITRIG - See CH0_USER_ITRIG. + */ +#define GPT_USER_REQ_REG_CH5_USER_ITRIG(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH5_USER_ITRIG_SHIFT)) & GPT_USER_REQ_REG_CH5_USER_ITRIG_MASK) +#define GPT_USER_REQ_REG_CH0_RST_MASK (0x100U) +#define GPT_USER_REQ_REG_CH0_RST_SHIFT (8U) +/*! CH0_RST - Channel Reset + * 0b0..No action + * 0b1..Reset this channel + */ +#define GPT_USER_REQ_REG_CH0_RST(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH0_RST_SHIFT)) & GPT_USER_REQ_REG_CH0_RST_MASK) +#define GPT_USER_REQ_REG_CH1_RST_MASK (0x200U) +#define GPT_USER_REQ_REG_CH1_RST_SHIFT (9U) +/*! CH1_RST - See CH0_RST. + */ +#define GPT_USER_REQ_REG_CH1_RST(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH1_RST_SHIFT)) & GPT_USER_REQ_REG_CH1_RST_MASK) +#define GPT_USER_REQ_REG_CH2_RST_MASK (0x400U) +#define GPT_USER_REQ_REG_CH2_RST_SHIFT (10U) +/*! CH2_RST - See CH0_RST. + */ +#define GPT_USER_REQ_REG_CH2_RST(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH2_RST_SHIFT)) & GPT_USER_REQ_REG_CH2_RST_MASK) +#define GPT_USER_REQ_REG_CH3_RST_MASK (0x800U) +#define GPT_USER_REQ_REG_CH3_RST_SHIFT (11U) +/*! CH3_RST - See CH0_RST. + */ +#define GPT_USER_REQ_REG_CH3_RST(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH3_RST_SHIFT)) & GPT_USER_REQ_REG_CH3_RST_MASK) +#define GPT_USER_REQ_REG_CH4_RST_MASK (0x1000U) +#define GPT_USER_REQ_REG_CH4_RST_SHIFT (12U) +/*! CH4_RST - See CH0_RST. + */ +#define GPT_USER_REQ_REG_CH4_RST(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH4_RST_SHIFT)) & GPT_USER_REQ_REG_CH4_RST_MASK) +#define GPT_USER_REQ_REG_CH5_RST_MASK (0x2000U) +#define GPT_USER_REQ_REG_CH5_RST_SHIFT (13U) +/*! CH5_RST - See CH0_RST. + */ +#define GPT_USER_REQ_REG_CH5_RST(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH5_RST_SHIFT)) & GPT_USER_REQ_REG_CH5_RST_MASK) +#define GPT_USER_REQ_REG_CH0_CMR_UPDT_MASK (0x10000U) +#define GPT_USER_REQ_REG_CH0_CMR_UPDT_SHIFT (16U) +/*! CH0_CMR_UPDT - Channel CMR Update + * 0b0..No action + * 0b1..Update CMR0 and CMR1 to the internal shadow registers + */ +#define GPT_USER_REQ_REG_CH0_CMR_UPDT(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH0_CMR_UPDT_SHIFT)) & GPT_USER_REQ_REG_CH0_CMR_UPDT_MASK) +#define GPT_USER_REQ_REG_CH1_CMR_UPDT_MASK (0x20000U) +#define GPT_USER_REQ_REG_CH1_CMR_UPDT_SHIFT (17U) +/*! CH1_CMR_UPDT - See CH0_CMR_UPDT. + */ +#define GPT_USER_REQ_REG_CH1_CMR_UPDT(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH1_CMR_UPDT_SHIFT)) & GPT_USER_REQ_REG_CH1_CMR_UPDT_MASK) +#define GPT_USER_REQ_REG_CH2_CMR_UPDT_MASK (0x40000U) +#define GPT_USER_REQ_REG_CH2_CMR_UPDT_SHIFT (18U) +/*! CH2_CMR_UPDT - See CH0_CMR_UPDT. + */ +#define GPT_USER_REQ_REG_CH2_CMR_UPDT(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH2_CMR_UPDT_SHIFT)) & GPT_USER_REQ_REG_CH2_CMR_UPDT_MASK) +#define GPT_USER_REQ_REG_CH3_CMR_UPDT_MASK (0x80000U) +#define GPT_USER_REQ_REG_CH3_CMR_UPDT_SHIFT (19U) +/*! CH3_CMR_UPDT - See CH0_CMR_UPDT. + */ +#define GPT_USER_REQ_REG_CH3_CMR_UPDT(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH3_CMR_UPDT_SHIFT)) & GPT_USER_REQ_REG_CH3_CMR_UPDT_MASK) +#define GPT_USER_REQ_REG_CH4_CMR_UPDT_MASK (0x100000U) +#define GPT_USER_REQ_REG_CH4_CMR_UPDT_SHIFT (20U) +/*! CH4_CMR_UPDT - See CH0_CMR_UPDT. + */ +#define GPT_USER_REQ_REG_CH4_CMR_UPDT(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH4_CMR_UPDT_SHIFT)) & GPT_USER_REQ_REG_CH4_CMR_UPDT_MASK) +#define GPT_USER_REQ_REG_CH5_CMR_UPDT_MASK (0x200000U) +#define GPT_USER_REQ_REG_CH5_CMR_UPDT_SHIFT (21U) +/*! CH5_CMR_UPDT - See CH0_CMR_UPDT. + */ +#define GPT_USER_REQ_REG_CH5_CMR_UPDT(x) (((uint32_t)(((uint32_t)(x)) << GPT_USER_REQ_REG_CH5_CMR_UPDT_SHIFT)) & GPT_USER_REQ_REG_CH5_CMR_UPDT_MASK) +/*! @} */ + +/*! @name CH_CNTL_REG - Channel 0 Control Register..Channel 5 Control Register */ +/*! @{ */ +#define GPT_CH_CNTL_REG_CHX_IO_MASK (0x7U) +#define GPT_CH_CNTL_REG_CHX_IO_SHIFT (0U) +/*! CHx_IO - Channel Mode + * 0b000..No function + * 0b001..Input capture mode + * 0b100..One-shot mode (pulse) + * 0b101..One-shot mode (edge) + * 0b110..PWM mode (edge-aligned) + * 0b111..PWM mode (center-aligned) + */ +#define GPT_CH_CNTL_REG_CHX_IO(x) (((uint32_t)(((uint32_t)(x)) << GPT_CH_CNTL_REG_CHX_IO_SHIFT)) & GPT_CH_CNTL_REG_CHX_IO_MASK) +#define GPT_CH_CNTL_REG_IC_EDGE_MASK (0x7000U) +#define GPT_CH_CNTL_REG_IC_EDGE_SHIFT (12U) +/*! IC_EDGE - Channel Input Capture Edge + * 0b000..Capture rising edge in CMR0 + * 0b001..Capture falling edge in CMR0 + */ +#define GPT_CH_CNTL_REG_IC_EDGE(x) (((uint32_t)(((uint32_t)(x)) << GPT_CH_CNTL_REG_IC_EDGE_SHIFT)) & GPT_CH_CNTL_REG_IC_EDGE_MASK) +#define GPT_CH_CNTL_REG_POL_MASK (0x10000U) +#define GPT_CH_CNTL_REG_POL_SHIFT (16U) +/*! POL - Channel Polarity + * 0b0..Reset to 0 + * 0b1..Reset to 1 + */ +#define GPT_CH_CNTL_REG_POL(x) (((uint32_t)(((uint32_t)(x)) << GPT_CH_CNTL_REG_POL_SHIFT)) & GPT_CH_CNTL_REG_POL_MASK) +/*! @} */ + +/* The count of GPT_CH_CNTL_REG */ +#define GPT_CH_CNTL_REG_COUNT (6U) + +/*! @name CH_CMR0_REG - Channel 0 Counter Match Register 0..Channel 5 Counter Match Register 0 */ +/*! @{ */ +#define GPT_CH_CMR0_REG_CMR0_MASK (0xFFFFFFFFU) +#define GPT_CH_CMR0_REG_CMR0_SHIFT (0U) +/*! CMR0 - Channel Counter Match Register 0 + */ +#define GPT_CH_CMR0_REG_CMR0(x) (((uint32_t)(((uint32_t)(x)) << GPT_CH_CMR0_REG_CMR0_SHIFT)) & GPT_CH_CMR0_REG_CMR0_MASK) +/*! @} */ + +/* The count of GPT_CH_CMR0_REG */ +#define GPT_CH_CMR0_REG_COUNT (6U) + +/*! @name CH_STS_REG - Channel 0 Status Register 0..Channel 5 Status Register 0 */ +/*! @{ */ +#define GPT_CH_STS_REG_OUT_ST_MASK (0x1U) +#define GPT_CH_STS_REG_OUT_ST_SHIFT (0U) +/*! OUT_ST - Channel Output State + */ +#define GPT_CH_STS_REG_OUT_ST(x) (((uint32_t)(((uint32_t)(x)) << GPT_CH_STS_REG_OUT_ST_SHIFT)) & GPT_CH_STS_REG_OUT_ST_MASK) +/*! @} */ + +/* The count of GPT_CH_STS_REG */ +#define GPT_CH_STS_REG_COUNT (6U) + +/*! @name CH_CMR1_REG - Channel 0 Counter Match Register 1..Channel 5 Counter Match Register 1 */ +/*! @{ */ +#define GPT_CH_CMR1_REG_CMR1_MASK (0xFFFFFFFFU) +#define GPT_CH_CMR1_REG_CMR1_SHIFT (0U) +/*! CMR1 - Channel Counter Match Register 1 + */ +#define GPT_CH_CMR1_REG_CMR1(x) (((uint32_t)(((uint32_t)(x)) << GPT_CH_CMR1_REG_CMR1_SHIFT)) & GPT_CH_CMR1_REG_CMR1_MASK) +/*! @} */ + +/* The count of GPT_CH_CMR1_REG */ +#define GPT_CH_CMR1_REG_COUNT (6U) + + +/*! + * @} + */ /* end of group GPT_Register_Masks */ + + +/* GPT - Peripheral instance base addresses */ +/** Peripheral GPT0 base address */ +#define GPT0_BASE (0x46070000u) +/** Peripheral GPT0 base pointer */ +#define GPT0 ((GPT_Type *)GPT0_BASE) +/** Peripheral GPT1 base address */ +#define GPT1_BASE (0x46080000u) +/** Peripheral GPT1 base pointer */ +#define GPT1 ((GPT_Type *)GPT1_BASE) +/** Peripheral GPT2 base address */ +#define GPT2_BASE (0x48070000u) +/** Peripheral GPT2 base pointer */ +#define GPT2 ((GPT_Type *)GPT2_BASE) +/** Peripheral GPT3 base address */ +#define GPT3_BASE (0x48080000u) +/** Peripheral GPT3 base pointer */ +#define GPT3 ((GPT_Type *)GPT3_BASE) +/** Array initializer of GPT peripheral base addresses */ +#define GPT_BASE_ADDRS { GPT0_BASE, GPT1_BASE, GPT2_BASE, GPT3_BASE } +/** Array initializer of GPT peripheral base pointers */ +#define GPT_BASE_PTRS { GPT0, GPT1, GPT2, GPT3 } +/** Interrupt vectors for the GPT peripheral type */ +#define GPT_IRQS { GPT0_IRQn, GPT1_IRQn, GPT2_IRQn, GPT3_IRQn } + +/*! + * @} + */ /* end of group GPT_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- I2C Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup I2C_Peripheral_Access_Layer I2C Peripheral Access Layer + * @{ + */ + +/** I2C - Register Layout Typedef */ +typedef struct { + __IO uint32_t IC_CON; /**< , offset: 0x0 */ + __IO uint32_t IC_TAR; /**< , offset: 0x4 */ + __IO uint32_t IC_SAR; /**< , offset: 0x8 */ + __IO uint32_t IC_HS_MADDR; /**< , offset: 0xC */ + __IO uint32_t IC_DATA_CMD; /**< , offset: 0x10 */ + __IO uint32_t IC_SS_SCL_HCNT; /**< , offset: 0x14 */ + __IO uint32_t IC_SS_SCL_LCNT; /**< , offset: 0x18 */ + __IO uint32_t IC_FS_SCL_HCNT; /**< , offset: 0x1C */ + __IO uint32_t IC_FS_SCL_LCNT; /**< , offset: 0x20 */ + __IO uint32_t IC_HS_SCL_HCNT; /**< , offset: 0x24 */ + __IO uint32_t IC_HS_SCL_LCNT; /**< , offset: 0x28 */ + __I uint32_t IC_INTR_STAT; /**< , offset: 0x2C */ + __IO uint32_t IC_INTR_MASK; /**< , offset: 0x30 */ + __I uint32_t IC_RAW_INTR_STAT; /**< , offset: 0x34 */ + __IO uint32_t IC_RX_TL; /**< , offset: 0x38 */ + __IO uint32_t IC_TX_TL; /**< , offset: 0x3C */ + __I uint32_t IC_CLR_INTR; /**< , offset: 0x40 */ + __I uint32_t IC_CLR_RX_UNDER; /**< , offset: 0x44 */ + __I uint32_t IC_CLR_RX_OVER; /**< , offset: 0x48 */ + __I uint32_t IC_CLR_TX_OVER; /**< , offset: 0x4C */ + __I uint32_t IC_CLR_RD_REQ; /**< , offset: 0x50 */ + __I uint32_t IC_CLR_TX_ABRT; /**< , offset: 0x54 */ + __I uint32_t IC_CLR_RX_DONE; /**< , offset: 0x58 */ + __I uint32_t IC_CLR_ACTIVITY; /**< , offset: 0x5C */ + __I uint32_t IC_CLR_STOP_DET; /**< , offset: 0x60 */ + __I uint32_t IC_CLR_START_DET; /**< , offset: 0x64 */ + __I uint32_t IC_CLR_GEN_CALL; /**< , offset: 0x68 */ + __IO uint32_t IC_ENABLE; /**< , offset: 0x6C */ + __I uint32_t IC_STATUS; /**< , offset: 0x70 */ + __I uint32_t IC_TXFLR; /**< , offset: 0x74 */ + __I uint32_t IC_RXFLR; /**< , offset: 0x78 */ + __IO uint32_t IC_SDA_HOLD; /**< , offset: 0x7C */ + __I uint32_t IC_TX_ABRT_SOURCE; /**< , offset: 0x80 */ + __IO uint32_t IC_SLV_DATA_NACK_ONLY; /**< , offset: 0x84 */ + __IO uint32_t IC_DMA_CR; /**< , offset: 0x88 */ + __IO uint32_t IC_DMA_TDLR; /**< , offset: 0x8C */ + __IO uint32_t IC_DMA_RDLR; /**< , offset: 0x90 */ + __IO uint32_t IC_SDA_SETUP; /**< , offset: 0x94 */ + __IO uint32_t IC_ACK_GENERAL_CALL; /**< , offset: 0x98 */ + __I uint32_t IC_ENABLE_STATUS; /**< , offset: 0x9C */ + __IO uint32_t IC_FS_SPKLEN; /**< , offset: 0xA0 */ + __IO uint32_t IC_HS_SPKLEN; /**< , offset: 0xA4 */ + uint8_t RESERVED_0[76]; + __I uint32_t IC_COMP_PARAM_1; /**< , offset: 0xF4 */ + __I uint32_t IC_COMP_VERSION; /**< , offset: 0xF8 */ + __I uint32_t IC_COMP_TYPE; /**< , offset: 0xFC */ +} I2C_Type; + +/* ---------------------------------------------------------------------------- + -- I2C Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup I2C_Register_Masks I2C Register Masks + * @{ + */ + +/*! @name IC_CON - */ +/*! @{ */ +#define I2C_IC_CON_MASTER_MODE_MASK (0x1U) +#define I2C_IC_CON_MASTER_MODE_SHIFT (0U) +/*! MASTER_MODE + * 0b0..master disabled + * 0b1..master enabled + */ +#define I2C_IC_CON_MASTER_MODE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CON_MASTER_MODE_SHIFT)) & I2C_IC_CON_MASTER_MODE_MASK) +#define I2C_IC_CON_SPEED_MASK (0x6U) +#define I2C_IC_CON_SPEED_SHIFT (1U) +/*! SPEED + * 0b01..standard mode (100 kbit/s) + * 0b10..fast mode (400 kbit/s) + * 0b11..high speed mode (3.4 Mbit/s) + */ +#define I2C_IC_CON_SPEED(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CON_SPEED_SHIFT)) & I2C_IC_CON_SPEED_MASK) +#define I2C_IC_CON_IC_10BITADDR_SLAVE_MASK (0x8U) +#define I2C_IC_CON_IC_10BITADDR_SLAVE_SHIFT (3U) +/*! IC_10BITADDR_SLAVE + * 0b0..7-bit addressing. The DW_apb_i2c ignores transactions that involve 10-bit addressing; for 7-bit + * addressing, only the lower 7 bits of the IC_SAR register are compared. + * 0b1..10-bit addressing. The DW_apb_i2c responds to only 10-bit addressing transfers that match the full 10 bits of the IC_SAR register. + */ +#define I2C_IC_CON_IC_10BITADDR_SLAVE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CON_IC_10BITADDR_SLAVE_SHIFT)) & I2C_IC_CON_IC_10BITADDR_SLAVE_MASK) +#define I2C_IC_CON_IC_10BITADDR_MASTER_RD_ONLY_MASK (0x10U) +#define I2C_IC_CON_IC_10BITADDR_MASTER_RD_ONLY_SHIFT (4U) +/*! IC_10BITADDR_MASTER_rd_only + * 0b0..7-bit addressing + * 0b1..10-bit addressing + */ +#define I2C_IC_CON_IC_10BITADDR_MASTER_RD_ONLY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CON_IC_10BITADDR_MASTER_RD_ONLY_SHIFT)) & I2C_IC_CON_IC_10BITADDR_MASTER_RD_ONLY_MASK) +#define I2C_IC_CON_IC_RESTART_EN_MASK (0x20U) +#define I2C_IC_CON_IC_RESTART_EN_SHIFT (5U) +/*! IC_RESTART_EN + * 0b0..disable + * 0b1..enable + */ +#define I2C_IC_CON_IC_RESTART_EN(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CON_IC_RESTART_EN_SHIFT)) & I2C_IC_CON_IC_RESTART_EN_MASK) +#define I2C_IC_CON_IC_SLAVE_DISABLE_MASK (0x40U) +#define I2C_IC_CON_IC_SLAVE_DISABLE_SHIFT (6U) +/*! IC_SLAVE_DISABLE + * 0b0..slave is enabled + * 0b1..slave is disabled + */ +#define I2C_IC_CON_IC_SLAVE_DISABLE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CON_IC_SLAVE_DISABLE_SHIFT)) & I2C_IC_CON_IC_SLAVE_DISABLE_MASK) +/*! @} */ + +/*! @name IC_TAR - */ +/*! @{ */ +#define I2C_IC_TAR_IC_TAR_MASK (0x3FFU) +#define I2C_IC_TAR_IC_TAR_SHIFT (0U) +#define I2C_IC_TAR_IC_TAR(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TAR_IC_TAR_SHIFT)) & I2C_IC_TAR_IC_TAR_MASK) +#define I2C_IC_TAR_GC_OR_START_MASK (0x400U) +#define I2C_IC_TAR_GC_OR_START_SHIFT (10U) +/*! GC_OR_START + * 0b0..General Call Address after issuing a General Call, only writes may be performed. Attempting to issue a + * read command results in setting bit 6 (TX_ABRT) of the IC_RAW_INTR_STAT register. The DW_apb_i2c remains in + * General Call mode until the SPECIAL bit value (bit 11) is cleared. + * 0b1..START BYTE + */ +#define I2C_IC_TAR_GC_OR_START(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TAR_GC_OR_START_SHIFT)) & I2C_IC_TAR_GC_OR_START_MASK) +#define I2C_IC_TAR_SPECIAL_MASK (0x800U) +#define I2C_IC_TAR_SPECIAL_SHIFT (11U) +/*! SPECIAL + * 0b0..ignore bit 10 GC_OR_START and use IC_TAR normally + * 0b1..perform special I2C command as specified in GC_OR_START bit + */ +#define I2C_IC_TAR_SPECIAL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TAR_SPECIAL_SHIFT)) & I2C_IC_TAR_SPECIAL_MASK) +#define I2C_IC_TAR_IC_10BITADDR_MASTER_MASK (0x1000U) +#define I2C_IC_TAR_IC_10BITADDR_MASTER_SHIFT (12U) +/*! IC_10BITADDR_MASTER + * 0b0..7-bit addressing + * 0b1..10-bit addressing + */ +#define I2C_IC_TAR_IC_10BITADDR_MASTER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TAR_IC_10BITADDR_MASTER_SHIFT)) & I2C_IC_TAR_IC_10BITADDR_MASTER_MASK) +/*! @} */ + +/*! @name IC_SAR - */ +/*! @{ */ +#define I2C_IC_SAR_IC_SAR_MASK (0x3FFU) +#define I2C_IC_SAR_IC_SAR_SHIFT (0U) +#define I2C_IC_SAR_IC_SAR(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_SAR_IC_SAR_SHIFT)) & I2C_IC_SAR_IC_SAR_MASK) +/*! @} */ + +/*! @name IC_HS_MADDR - */ +/*! @{ */ +#define I2C_IC_HS_MADDR_IC_HS_MAR_MASK (0x7U) +#define I2C_IC_HS_MADDR_IC_HS_MAR_SHIFT (0U) +#define I2C_IC_HS_MADDR_IC_HS_MAR(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_HS_MADDR_IC_HS_MAR_SHIFT)) & I2C_IC_HS_MADDR_IC_HS_MAR_MASK) +/*! @} */ + +/*! @name IC_DATA_CMD - */ +/*! @{ */ +#define I2C_IC_DATA_CMD_DAT_MASK (0xFFU) +#define I2C_IC_DATA_CMD_DAT_SHIFT (0U) +#define I2C_IC_DATA_CMD_DAT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_DATA_CMD_DAT_SHIFT)) & I2C_IC_DATA_CMD_DAT_MASK) +#define I2C_IC_DATA_CMD_CMD_MASK (0x100U) +#define I2C_IC_DATA_CMD_CMD_SHIFT (8U) +/*! CMD + * 0b0..Write + * 0b1..Read + */ +#define I2C_IC_DATA_CMD_CMD(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_DATA_CMD_CMD_SHIFT)) & I2C_IC_DATA_CMD_CMD_MASK) +/*! @} */ + +/*! @name IC_SS_SCL_HCNT - */ +/*! @{ */ +#define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_MASK (0xFFFFU) +#define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_SHIFT (0U) +#define I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_SHIFT)) & I2C_IC_SS_SCL_HCNT_IC_SS_SCL_HCNT_MASK) +/*! @} */ + +/*! @name IC_SS_SCL_LCNT - */ +/*! @{ */ +#define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_MASK (0xFFFFU) +#define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_SHIFT (0U) +#define I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_SHIFT)) & I2C_IC_SS_SCL_LCNT_IC_SS_SCL_LCNT_MASK) +/*! @} */ + +/*! @name IC_FS_SCL_HCNT - */ +/*! @{ */ +#define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_MASK (0xFFFFU) +#define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_SHIFT (0U) +#define I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_SHIFT)) & I2C_IC_FS_SCL_HCNT_IC_FS_SCL_HCNT_MASK) +/*! @} */ + +/*! @name IC_FS_SCL_LCNT - */ +/*! @{ */ +#define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_MASK (0xFFFFU) +#define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_SHIFT (0U) +#define I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_SHIFT)) & I2C_IC_FS_SCL_LCNT_IC_FS_SCL_LCNT_MASK) +/*! @} */ + +/*! @name IC_HS_SCL_HCNT - */ +/*! @{ */ +#define I2C_IC_HS_SCL_HCNT_IC_HS_SCL_HCNT_MASK (0xFFFFU) +#define I2C_IC_HS_SCL_HCNT_IC_HS_SCL_HCNT_SHIFT (0U) +#define I2C_IC_HS_SCL_HCNT_IC_HS_SCL_HCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_HS_SCL_HCNT_IC_HS_SCL_HCNT_SHIFT)) & I2C_IC_HS_SCL_HCNT_IC_HS_SCL_HCNT_MASK) +/*! @} */ + +/*! @name IC_HS_SCL_LCNT - */ +/*! @{ */ +#define I2C_IC_HS_SCL_LCNT_IC_HS_SCL_LCNT_MASK (0xFFFFU) +#define I2C_IC_HS_SCL_LCNT_IC_HS_SCL_LCNT_SHIFT (0U) +#define I2C_IC_HS_SCL_LCNT_IC_HS_SCL_LCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_HS_SCL_LCNT_IC_HS_SCL_LCNT_SHIFT)) & I2C_IC_HS_SCL_LCNT_IC_HS_SCL_LCNT_MASK) +/*! @} */ + +/*! @name IC_INTR_STAT - */ +/*! @{ */ +#define I2C_IC_INTR_STAT_R_RX_UNDER_MASK (0x1U) +#define I2C_IC_INTR_STAT_R_RX_UNDER_SHIFT (0U) +#define I2C_IC_INTR_STAT_R_RX_UNDER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_RX_UNDER_SHIFT)) & I2C_IC_INTR_STAT_R_RX_UNDER_MASK) +#define I2C_IC_INTR_STAT_R_RX_OVER_MASK (0x2U) +#define I2C_IC_INTR_STAT_R_RX_OVER_SHIFT (1U) +#define I2C_IC_INTR_STAT_R_RX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_RX_OVER_SHIFT)) & I2C_IC_INTR_STAT_R_RX_OVER_MASK) +#define I2C_IC_INTR_STAT_R_RX_FULL_MASK (0x4U) +#define I2C_IC_INTR_STAT_R_RX_FULL_SHIFT (2U) +#define I2C_IC_INTR_STAT_R_RX_FULL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_RX_FULL_SHIFT)) & I2C_IC_INTR_STAT_R_RX_FULL_MASK) +#define I2C_IC_INTR_STAT_R_TX_OVER_MASK (0x8U) +#define I2C_IC_INTR_STAT_R_TX_OVER_SHIFT (3U) +#define I2C_IC_INTR_STAT_R_TX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_TX_OVER_SHIFT)) & I2C_IC_INTR_STAT_R_TX_OVER_MASK) +#define I2C_IC_INTR_STAT_R_TX_EMPTY_MASK (0x10U) +#define I2C_IC_INTR_STAT_R_TX_EMPTY_SHIFT (4U) +#define I2C_IC_INTR_STAT_R_TX_EMPTY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_TX_EMPTY_SHIFT)) & I2C_IC_INTR_STAT_R_TX_EMPTY_MASK) +#define I2C_IC_INTR_STAT_R_RD_REQ_MASK (0x20U) +#define I2C_IC_INTR_STAT_R_RD_REQ_SHIFT (5U) +#define I2C_IC_INTR_STAT_R_RD_REQ(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_RD_REQ_SHIFT)) & I2C_IC_INTR_STAT_R_RD_REQ_MASK) +#define I2C_IC_INTR_STAT_R_TX_ABRT_MASK (0x40U) +#define I2C_IC_INTR_STAT_R_TX_ABRT_SHIFT (6U) +#define I2C_IC_INTR_STAT_R_TX_ABRT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_TX_ABRT_SHIFT)) & I2C_IC_INTR_STAT_R_TX_ABRT_MASK) +#define I2C_IC_INTR_STAT_R_RX_DONE_MASK (0x80U) +#define I2C_IC_INTR_STAT_R_RX_DONE_SHIFT (7U) +#define I2C_IC_INTR_STAT_R_RX_DONE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_RX_DONE_SHIFT)) & I2C_IC_INTR_STAT_R_RX_DONE_MASK) +#define I2C_IC_INTR_STAT_R_ACTIVITY_MASK (0x100U) +#define I2C_IC_INTR_STAT_R_ACTIVITY_SHIFT (8U) +#define I2C_IC_INTR_STAT_R_ACTIVITY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_ACTIVITY_SHIFT)) & I2C_IC_INTR_STAT_R_ACTIVITY_MASK) +#define I2C_IC_INTR_STAT_R_STOP_DET_MASK (0x200U) +#define I2C_IC_INTR_STAT_R_STOP_DET_SHIFT (9U) +#define I2C_IC_INTR_STAT_R_STOP_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_STOP_DET_SHIFT)) & I2C_IC_INTR_STAT_R_STOP_DET_MASK) +#define I2C_IC_INTR_STAT_R_START_DET_MASK (0x400U) +#define I2C_IC_INTR_STAT_R_START_DET_SHIFT (10U) +#define I2C_IC_INTR_STAT_R_START_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_START_DET_SHIFT)) & I2C_IC_INTR_STAT_R_START_DET_MASK) +#define I2C_IC_INTR_STAT_R_GEN_CALL_MASK (0x800U) +#define I2C_IC_INTR_STAT_R_GEN_CALL_SHIFT (11U) +#define I2C_IC_INTR_STAT_R_GEN_CALL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_STAT_R_GEN_CALL_SHIFT)) & I2C_IC_INTR_STAT_R_GEN_CALL_MASK) +/*! @} */ + +/*! @name IC_INTR_MASK - */ +/*! @{ */ +#define I2C_IC_INTR_MASK_M_RX_UNDER_MASK (0x1U) +#define I2C_IC_INTR_MASK_M_RX_UNDER_SHIFT (0U) +#define I2C_IC_INTR_MASK_M_RX_UNDER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_RX_UNDER_SHIFT)) & I2C_IC_INTR_MASK_M_RX_UNDER_MASK) +#define I2C_IC_INTR_MASK_M_RX_OVER_MASK (0x2U) +#define I2C_IC_INTR_MASK_M_RX_OVER_SHIFT (1U) +#define I2C_IC_INTR_MASK_M_RX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_RX_OVER_SHIFT)) & I2C_IC_INTR_MASK_M_RX_OVER_MASK) +#define I2C_IC_INTR_MASK_M_RX_FULL_MASK (0x4U) +#define I2C_IC_INTR_MASK_M_RX_FULL_SHIFT (2U) +#define I2C_IC_INTR_MASK_M_RX_FULL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_RX_FULL_SHIFT)) & I2C_IC_INTR_MASK_M_RX_FULL_MASK) +#define I2C_IC_INTR_MASK_M_TX_OVER_MASK (0x8U) +#define I2C_IC_INTR_MASK_M_TX_OVER_SHIFT (3U) +#define I2C_IC_INTR_MASK_M_TX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_TX_OVER_SHIFT)) & I2C_IC_INTR_MASK_M_TX_OVER_MASK) +#define I2C_IC_INTR_MASK_M_TX_EMPTY_MASK (0x10U) +#define I2C_IC_INTR_MASK_M_TX_EMPTY_SHIFT (4U) +#define I2C_IC_INTR_MASK_M_TX_EMPTY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_TX_EMPTY_SHIFT)) & I2C_IC_INTR_MASK_M_TX_EMPTY_MASK) +#define I2C_IC_INTR_MASK_M_RD_REQ_MASK (0x20U) +#define I2C_IC_INTR_MASK_M_RD_REQ_SHIFT (5U) +#define I2C_IC_INTR_MASK_M_RD_REQ(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_RD_REQ_SHIFT)) & I2C_IC_INTR_MASK_M_RD_REQ_MASK) +#define I2C_IC_INTR_MASK_M_TX_ABRT_MASK (0x40U) +#define I2C_IC_INTR_MASK_M_TX_ABRT_SHIFT (6U) +#define I2C_IC_INTR_MASK_M_TX_ABRT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_TX_ABRT_SHIFT)) & I2C_IC_INTR_MASK_M_TX_ABRT_MASK) +#define I2C_IC_INTR_MASK_M_RX_DONE_MASK (0x80U) +#define I2C_IC_INTR_MASK_M_RX_DONE_SHIFT (7U) +#define I2C_IC_INTR_MASK_M_RX_DONE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_RX_DONE_SHIFT)) & I2C_IC_INTR_MASK_M_RX_DONE_MASK) +#define I2C_IC_INTR_MASK_M_ACTIVITY_MASK (0x100U) +#define I2C_IC_INTR_MASK_M_ACTIVITY_SHIFT (8U) +#define I2C_IC_INTR_MASK_M_ACTIVITY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_ACTIVITY_SHIFT)) & I2C_IC_INTR_MASK_M_ACTIVITY_MASK) +#define I2C_IC_INTR_MASK_M_STOP_DET_MASK (0x200U) +#define I2C_IC_INTR_MASK_M_STOP_DET_SHIFT (9U) +#define I2C_IC_INTR_MASK_M_STOP_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_STOP_DET_SHIFT)) & I2C_IC_INTR_MASK_M_STOP_DET_MASK) +#define I2C_IC_INTR_MASK_M_START_DET_MASK (0x400U) +#define I2C_IC_INTR_MASK_M_START_DET_SHIFT (10U) +#define I2C_IC_INTR_MASK_M_START_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_START_DET_SHIFT)) & I2C_IC_INTR_MASK_M_START_DET_MASK) +#define I2C_IC_INTR_MASK_M_GEN_CALL_MASK (0x800U) +#define I2C_IC_INTR_MASK_M_GEN_CALL_SHIFT (11U) +#define I2C_IC_INTR_MASK_M_GEN_CALL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_INTR_MASK_M_GEN_CALL_SHIFT)) & I2C_IC_INTR_MASK_M_GEN_CALL_MASK) +/*! @} */ + +/*! @name IC_RAW_INTR_STAT - */ +/*! @{ */ +#define I2C_IC_RAW_INTR_STAT_RX_UNDER_MASK (0x1U) +#define I2C_IC_RAW_INTR_STAT_RX_UNDER_SHIFT (0U) +#define I2C_IC_RAW_INTR_STAT_RX_UNDER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_RX_UNDER_SHIFT)) & I2C_IC_RAW_INTR_STAT_RX_UNDER_MASK) +#define I2C_IC_RAW_INTR_STAT_RX_OVER_MASK (0x2U) +#define I2C_IC_RAW_INTR_STAT_RX_OVER_SHIFT (1U) +#define I2C_IC_RAW_INTR_STAT_RX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_RX_OVER_SHIFT)) & I2C_IC_RAW_INTR_STAT_RX_OVER_MASK) +#define I2C_IC_RAW_INTR_STAT_RX_FULL_MASK (0x4U) +#define I2C_IC_RAW_INTR_STAT_RX_FULL_SHIFT (2U) +#define I2C_IC_RAW_INTR_STAT_RX_FULL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_RX_FULL_SHIFT)) & I2C_IC_RAW_INTR_STAT_RX_FULL_MASK) +#define I2C_IC_RAW_INTR_STAT_TX_OVER_MASK (0x8U) +#define I2C_IC_RAW_INTR_STAT_TX_OVER_SHIFT (3U) +#define I2C_IC_RAW_INTR_STAT_TX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_TX_OVER_SHIFT)) & I2C_IC_RAW_INTR_STAT_TX_OVER_MASK) +#define I2C_IC_RAW_INTR_STAT_TX_EMPTY_MASK (0x10U) +#define I2C_IC_RAW_INTR_STAT_TX_EMPTY_SHIFT (4U) +#define I2C_IC_RAW_INTR_STAT_TX_EMPTY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_TX_EMPTY_SHIFT)) & I2C_IC_RAW_INTR_STAT_TX_EMPTY_MASK) +#define I2C_IC_RAW_INTR_STAT_RD_REQ_MASK (0x20U) +#define I2C_IC_RAW_INTR_STAT_RD_REQ_SHIFT (5U) +#define I2C_IC_RAW_INTR_STAT_RD_REQ(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_RD_REQ_SHIFT)) & I2C_IC_RAW_INTR_STAT_RD_REQ_MASK) +#define I2C_IC_RAW_INTR_STAT_TX_ABRT_MASK (0x40U) +#define I2C_IC_RAW_INTR_STAT_TX_ABRT_SHIFT (6U) +#define I2C_IC_RAW_INTR_STAT_TX_ABRT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_TX_ABRT_SHIFT)) & I2C_IC_RAW_INTR_STAT_TX_ABRT_MASK) +#define I2C_IC_RAW_INTR_STAT_RX_DONE_MASK (0x80U) +#define I2C_IC_RAW_INTR_STAT_RX_DONE_SHIFT (7U) +#define I2C_IC_RAW_INTR_STAT_RX_DONE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_RX_DONE_SHIFT)) & I2C_IC_RAW_INTR_STAT_RX_DONE_MASK) +#define I2C_IC_RAW_INTR_STAT_ACTIVITY_MASK (0x100U) +#define I2C_IC_RAW_INTR_STAT_ACTIVITY_SHIFT (8U) +#define I2C_IC_RAW_INTR_STAT_ACTIVITY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_ACTIVITY_SHIFT)) & I2C_IC_RAW_INTR_STAT_ACTIVITY_MASK) +#define I2C_IC_RAW_INTR_STAT_STOP_DET_MASK (0x200U) +#define I2C_IC_RAW_INTR_STAT_STOP_DET_SHIFT (9U) +#define I2C_IC_RAW_INTR_STAT_STOP_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_STOP_DET_SHIFT)) & I2C_IC_RAW_INTR_STAT_STOP_DET_MASK) +#define I2C_IC_RAW_INTR_STAT_START_DET_MASK (0x400U) +#define I2C_IC_RAW_INTR_STAT_START_DET_SHIFT (10U) +#define I2C_IC_RAW_INTR_STAT_START_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_START_DET_SHIFT)) & I2C_IC_RAW_INTR_STAT_START_DET_MASK) +#define I2C_IC_RAW_INTR_STAT_GEN_CALL_MASK (0x800U) +#define I2C_IC_RAW_INTR_STAT_GEN_CALL_SHIFT (11U) +#define I2C_IC_RAW_INTR_STAT_GEN_CALL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RAW_INTR_STAT_GEN_CALL_SHIFT)) & I2C_IC_RAW_INTR_STAT_GEN_CALL_MASK) +/*! @} */ + +/*! @name IC_RX_TL - */ +/*! @{ */ +#define I2C_IC_RX_TL_RX_TL_MASK (0xFFU) +#define I2C_IC_RX_TL_RX_TL_SHIFT (0U) +#define I2C_IC_RX_TL_RX_TL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RX_TL_RX_TL_SHIFT)) & I2C_IC_RX_TL_RX_TL_MASK) +/*! @} */ + +/*! @name IC_TX_TL - */ +/*! @{ */ +#define I2C_IC_TX_TL_TX_TL_MASK (0xFFU) +#define I2C_IC_TX_TL_TX_TL_SHIFT (0U) +#define I2C_IC_TX_TL_TX_TL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_TL_TX_TL_SHIFT)) & I2C_IC_TX_TL_TX_TL_MASK) +/*! @} */ + +/*! @name IC_CLR_INTR - */ +/*! @{ */ +#define I2C_IC_CLR_INTR_CLR_INTR_MASK (0x1U) +#define I2C_IC_CLR_INTR_CLR_INTR_SHIFT (0U) +#define I2C_IC_CLR_INTR_CLR_INTR(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_INTR_CLR_INTR_SHIFT)) & I2C_IC_CLR_INTR_CLR_INTR_MASK) +/*! @} */ + +/*! @name IC_CLR_RX_UNDER - */ +/*! @{ */ +#define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_MASK (0x1U) +#define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_SHIFT (0U) +#define I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_SHIFT)) & I2C_IC_CLR_RX_UNDER_CLR_RX_UNDER_MASK) +/*! @} */ + +/*! @name IC_CLR_RX_OVER - */ +/*! @{ */ +#define I2C_IC_CLR_RX_OVER_CLR_RX_OVER_MASK (0x1U) +#define I2C_IC_CLR_RX_OVER_CLR_RX_OVER_SHIFT (0U) +#define I2C_IC_CLR_RX_OVER_CLR_RX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_RX_OVER_CLR_RX_OVER_SHIFT)) & I2C_IC_CLR_RX_OVER_CLR_RX_OVER_MASK) +/*! @} */ + +/*! @name IC_CLR_TX_OVER - */ +/*! @{ */ +#define I2C_IC_CLR_TX_OVER_CLR_TX_OVER_MASK (0x1U) +#define I2C_IC_CLR_TX_OVER_CLR_TX_OVER_SHIFT (0U) +#define I2C_IC_CLR_TX_OVER_CLR_TX_OVER(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_TX_OVER_CLR_TX_OVER_SHIFT)) & I2C_IC_CLR_TX_OVER_CLR_TX_OVER_MASK) +/*! @} */ + +/*! @name IC_CLR_RD_REQ - */ +/*! @{ */ +#define I2C_IC_CLR_RD_REQ_CLR_RD_REQ_MASK (0x1U) +#define I2C_IC_CLR_RD_REQ_CLR_RD_REQ_SHIFT (0U) +#define I2C_IC_CLR_RD_REQ_CLR_RD_REQ(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_RD_REQ_CLR_RD_REQ_SHIFT)) & I2C_IC_CLR_RD_REQ_CLR_RD_REQ_MASK) +/*! @} */ + +/*! @name IC_CLR_TX_ABRT - */ +/*! @{ */ +#define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_MASK (0x1U) +#define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_SHIFT (0U) +#define I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_SHIFT)) & I2C_IC_CLR_TX_ABRT_CLR_TX_ABRT_MASK) +/*! @} */ + +/*! @name IC_CLR_RX_DONE - */ +/*! @{ */ +#define I2C_IC_CLR_RX_DONE_CLR_RX_DONE_MASK (0x1U) +#define I2C_IC_CLR_RX_DONE_CLR_RX_DONE_SHIFT (0U) +#define I2C_IC_CLR_RX_DONE_CLR_RX_DONE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_RX_DONE_CLR_RX_DONE_SHIFT)) & I2C_IC_CLR_RX_DONE_CLR_RX_DONE_MASK) +/*! @} */ + +/*! @name IC_CLR_ACTIVITY - */ +/*! @{ */ +#define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_MASK (0x1U) +#define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_SHIFT (0U) +#define I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_SHIFT)) & I2C_IC_CLR_ACTIVITY_CLR_ACTIVITY_MASK) +/*! @} */ + +/*! @name IC_CLR_STOP_DET - */ +/*! @{ */ +#define I2C_IC_CLR_STOP_DET_CLR_STOP_DET_MASK (0x1U) +#define I2C_IC_CLR_STOP_DET_CLR_STOP_DET_SHIFT (0U) +#define I2C_IC_CLR_STOP_DET_CLR_STOP_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_STOP_DET_CLR_STOP_DET_SHIFT)) & I2C_IC_CLR_STOP_DET_CLR_STOP_DET_MASK) +/*! @} */ + +/*! @name IC_CLR_START_DET - */ +/*! @{ */ +#define I2C_IC_CLR_START_DET_CLR_START_DET_MASK (0x1U) +#define I2C_IC_CLR_START_DET_CLR_START_DET_SHIFT (0U) +#define I2C_IC_CLR_START_DET_CLR_START_DET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_START_DET_CLR_START_DET_SHIFT)) & I2C_IC_CLR_START_DET_CLR_START_DET_MASK) +/*! @} */ + +/*! @name IC_CLR_GEN_CALL - */ +/*! @{ */ +#define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_MASK (0x1U) +#define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_SHIFT (0U) +#define I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_SHIFT)) & I2C_IC_CLR_GEN_CALL_CLR_GEN_CALL_MASK) +/*! @} */ + +/*! @name IC_ENABLE - */ +/*! @{ */ +#define I2C_IC_ENABLE_ENABLE_MASK (0x1U) +#define I2C_IC_ENABLE_ENABLE_SHIFT (0U) +/*! ENABLE + * 0b0..Disables DW_apb_i2c (TX and RX FIFOs are held in an erased state) + * 0b1..Enables DW_apb_i2c Software can disable DW_apb_i2c while it is active. However, it is important that care + * be taken to ensure that DW_apb_i2c is disabled properly. When DW_apb_i2c is disabled, the following + * occurs: + */ +#define I2C_IC_ENABLE_ENABLE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_ENABLE_ENABLE_SHIFT)) & I2C_IC_ENABLE_ENABLE_MASK) +/*! @} */ + +/*! @name IC_STATUS - */ +/*! @{ */ +#define I2C_IC_STATUS_ACTIVITY_MASK (0x1U) +#define I2C_IC_STATUS_ACTIVITY_SHIFT (0U) +#define I2C_IC_STATUS_ACTIVITY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_STATUS_ACTIVITY_SHIFT)) & I2C_IC_STATUS_ACTIVITY_MASK) +#define I2C_IC_STATUS_TFNF_MASK (0x2U) +#define I2C_IC_STATUS_TFNF_SHIFT (1U) +/*! TFNF + * 0b0..Transmit FIFO is full + * 0b1..Transmit FIFO is not full + */ +#define I2C_IC_STATUS_TFNF(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_STATUS_TFNF_SHIFT)) & I2C_IC_STATUS_TFNF_MASK) +#define I2C_IC_STATUS_TFE_MASK (0x4U) +#define I2C_IC_STATUS_TFE_SHIFT (2U) +/*! TFE + * 0b0..Transmit FIFO is not empty + * 0b1..Transmit FIFO is empty + */ +#define I2C_IC_STATUS_TFE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_STATUS_TFE_SHIFT)) & I2C_IC_STATUS_TFE_MASK) +#define I2C_IC_STATUS_RFNE_MASK (0x8U) +#define I2C_IC_STATUS_RFNE_SHIFT (3U) +/*! RFNE + * 0b0..Receive FIFO is empty + * 0b1..Receive FIFO is not empty + */ +#define I2C_IC_STATUS_RFNE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_STATUS_RFNE_SHIFT)) & I2C_IC_STATUS_RFNE_MASK) +#define I2C_IC_STATUS_RFF_MASK (0x10U) +#define I2C_IC_STATUS_RFF_SHIFT (4U) +/*! RFF + * 0b0..Receive FIFO is not full + * 0b1..Receive FIFO is full + */ +#define I2C_IC_STATUS_RFF(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_STATUS_RFF_SHIFT)) & I2C_IC_STATUS_RFF_MASK) +#define I2C_IC_STATUS_MST_ACTIVITY_MASK (0x20U) +#define I2C_IC_STATUS_MST_ACTIVITY_SHIFT (5U) +/*! MST_ACTIVITY + * 0b0..Master FSM is in IDLE state so the Master part of DW_apb_i2c is not Active + * 0b1..Master FSM is not in IDLE state so the Master part of DW_apb_i2c is Active Note IC_STATUS[0]-that is, + * ACTIVITY bit-is the OR of SLV_ACTIVITY and MST_ACTIVITY bits. + */ +#define I2C_IC_STATUS_MST_ACTIVITY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_STATUS_MST_ACTIVITY_SHIFT)) & I2C_IC_STATUS_MST_ACTIVITY_MASK) +#define I2C_IC_STATUS_SLV_ACTIVITY_MASK (0x40U) +#define I2C_IC_STATUS_SLV_ACTIVITY_SHIFT (6U) +/*! SLV_ACTIVITY + * 0b0..Slave FSM is in IDLE state so the Slave part of DW_apb_i2c is not Active + * 0b1..Slave FSM is not in IDLE state so the Slave part of DW_apb_i2c is Active + */ +#define I2C_IC_STATUS_SLV_ACTIVITY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_STATUS_SLV_ACTIVITY_SHIFT)) & I2C_IC_STATUS_SLV_ACTIVITY_MASK) +/*! @} */ + +/*! @name IC_TXFLR - */ +/*! @{ */ +#define I2C_IC_TXFLR_TXFLR_MASK (0x1FU) +#define I2C_IC_TXFLR_TXFLR_SHIFT (0U) +#define I2C_IC_TXFLR_TXFLR(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TXFLR_TXFLR_SHIFT)) & I2C_IC_TXFLR_TXFLR_MASK) +/*! @} */ + +/*! @name IC_RXFLR - */ +/*! @{ */ +#define I2C_IC_RXFLR_RXFLR_MASK (0x1FU) +#define I2C_IC_RXFLR_RXFLR_SHIFT (0U) +#define I2C_IC_RXFLR_RXFLR(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_RXFLR_RXFLR_SHIFT)) & I2C_IC_RXFLR_RXFLR_MASK) +/*! @} */ + +/*! @name IC_SDA_HOLD - */ +/*! @{ */ +#define I2C_IC_SDA_HOLD_IC_SDA_HOLD_MASK (0xFFFFU) +#define I2C_IC_SDA_HOLD_IC_SDA_HOLD_SHIFT (0U) +#define I2C_IC_SDA_HOLD_IC_SDA_HOLD(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_SDA_HOLD_IC_SDA_HOLD_SHIFT)) & I2C_IC_SDA_HOLD_IC_SDA_HOLD_MASK) +/*! @} */ + +/*! @name IC_TX_ABRT_SOURCE - */ +/*! @{ */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_MASK (0x1U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_SHIFT (0U) +/*! ABRT_7B_ADDR_NOACK + * 0b1..Master is in 7-bit addressing mode and the address sent was not acknowledged by any slave. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_MASK (0x2U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_SHIFT (1U) +/*! ABRT_10ADDR1_NOACK + * 0b1..Master is in 10-bit address mode and the first 10-bit address byte was not acknowledged by any slave. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_MASK (0x4U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_SHIFT (2U) +/*! ABRT_10ADDR2_NOACK + * 0b1..Master is in 10-bit address mode and the second address byte of the 10-bit address was not acknowledged by any slave. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_MASK (0x8U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_SHIFT (3U) +/*! ABRT_TXDATA_NOACK + * 0b1..This is a master-mode only bit. Master has received an acknowledgement for the address, but when it sent + * data byte(s) following the address, it did not receive an acknowledge from the remote slave(s). + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_MASK (0x10U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_SHIFT (4U) +/*! ABRT_GCALL_NOACK + * 0b1..DW_apb_i2c in master mode sent a General Call and no slave on the bus acknowledged the General Call. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_MASK (0x20U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_SHIFT (5U) +/*! ABRT_GCALL_READ + * 0b1..DW_apb_i2c in master mode sent a General Call but the user programmed the byte following the General Call + * to be a read from the bus (IC_DATA_CMD[9] is set to 1). + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_MASK (0x40U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_SHIFT (6U) +/*! ABRT_HS_ACKDET + * 0b1..Master is in High Speed mode and the High Speed Master code was acknowledged (wrong behavior). + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_MASK (0x80U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_SHIFT (7U) +/*! ABRT_SBYTE_ACKDET + * 0b1..Master has sent a START Byte and the START Byte was acknowledged (wrong behavior). + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_MASK (0x100U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_SHIFT (8U) +/*! ABRT_HS_NORSTRT + * 0b1..The restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to use the master to transfer data in High Speed mode. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_MASK (0x200U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_SHIFT (9U) +/*! ABRT_SBYTE_NORSTRT + * 0b1..The restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the user is trying to send a START Byte. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_MASK (0x400U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_SHIFT (10U) +/*! ABRT_10B_RD_NORSTRT + * 0b1..The restart is disabled (IC_RESTART_EN bit (IC_CON[5]) =0) and the master sends a read command in 10-bit addressing mode. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_MASK (0x800U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_SHIFT (11U) +/*! ABRT_MASTER_DIS + * 0b1..User tries to initiate a Master operation with the Master mode disabled. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_MASK (0x1000U) +#define I2C_IC_TX_ABRT_SOURCE_ARB_LOST_SHIFT (12U) +/*! ARB_LOST + * 0b1..Master has lost arbitration, or if IC_TX_ABRT_SOURCE[14] is also set, then the slave transmitter has lost arbitration. + */ +#define I2C_IC_TX_ABRT_SOURCE_ARB_LOST(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ARB_LOST_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ARB_LOST_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_MASK (0x2000U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_SHIFT (13U) +/*! ABRT_SLVFLUSH_TXFIFO + * 0b1..Slave has received a read command and some data exists in the TX FIFO so the slave issues a TX_ABRT interrupt to flush old data in TX FIFO. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_MASK (0x4000U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_SHIFT (14U) +/*! ABRT_SLV_ARBLOST + * 0b1..Slave lost the bus while transmitting data to a remote master. IC_TX_ABRT_SOURCE[12] is set at the same time. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_MASK) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_MASK (0x8000U) +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_SHIFT (15U) +/*! ABRT_SLVRD_INTX + * 0b1..When the processor side responds to a slave mode request for data to be transmitted to a remote master + * and user writes a 1 in CMD (bit 8) of IC_DATA_CMD register. + */ +#define I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_SHIFT)) & I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_MASK) +/*! @} */ + +/*! @name IC_SLV_DATA_NACK_ONLY - */ +/*! @{ */ +#define I2C_IC_SLV_DATA_NACK_ONLY_NACK_MASK (0x1U) +#define I2C_IC_SLV_DATA_NACK_ONLY_NACK_SHIFT (0U) +/*! NACK + * 0b0..generate NACK/ACK normally + * 0b1..generate NACK after data byte received + */ +#define I2C_IC_SLV_DATA_NACK_ONLY_NACK(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_SLV_DATA_NACK_ONLY_NACK_SHIFT)) & I2C_IC_SLV_DATA_NACK_ONLY_NACK_MASK) +/*! @} */ + +/*! @name IC_DMA_CR - */ +/*! @{ */ +#define I2C_IC_DMA_CR_RDMAE_MASK (0x1U) +#define I2C_IC_DMA_CR_RDMAE_SHIFT (0U) +/*! RDMAE + * 0b0..Receive DMA disabled + * 0b1..Receive DMA enabled + */ +#define I2C_IC_DMA_CR_RDMAE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_DMA_CR_RDMAE_SHIFT)) & I2C_IC_DMA_CR_RDMAE_MASK) +#define I2C_IC_DMA_CR_TDMAE_MASK (0x2U) +#define I2C_IC_DMA_CR_TDMAE_SHIFT (1U) +/*! TDMAE + * 0b0..Transmit DMA disabled + * 0b1..Transmit DMA enabled + */ +#define I2C_IC_DMA_CR_TDMAE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_DMA_CR_TDMAE_SHIFT)) & I2C_IC_DMA_CR_TDMAE_MASK) +/*! @} */ + +/*! @name IC_DMA_TDLR - */ +/*! @{ */ +#define I2C_IC_DMA_TDLR_DMATDL_MASK (0xFU) +#define I2C_IC_DMA_TDLR_DMATDL_SHIFT (0U) +#define I2C_IC_DMA_TDLR_DMATDL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_DMA_TDLR_DMATDL_SHIFT)) & I2C_IC_DMA_TDLR_DMATDL_MASK) +/*! @} */ + +/*! @name IC_DMA_RDLR - */ +/*! @{ */ +#define I2C_IC_DMA_RDLR_DMARDL_MASK (0xFU) +#define I2C_IC_DMA_RDLR_DMARDL_SHIFT (0U) +#define I2C_IC_DMA_RDLR_DMARDL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_DMA_RDLR_DMARDL_SHIFT)) & I2C_IC_DMA_RDLR_DMARDL_MASK) +/*! @} */ + +/*! @name IC_SDA_SETUP - */ +/*! @{ */ +#define I2C_IC_SDA_SETUP_SDA_SETUP_MASK (0xFFU) +#define I2C_IC_SDA_SETUP_SDA_SETUP_SHIFT (0U) +#define I2C_IC_SDA_SETUP_SDA_SETUP(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_SDA_SETUP_SDA_SETUP_SHIFT)) & I2C_IC_SDA_SETUP_SDA_SETUP_MASK) +/*! @} */ + +/*! @name IC_ACK_GENERAL_CALL - */ +/*! @{ */ +#define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_MASK (0x1U) +#define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_SHIFT (0U) +#define I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_SHIFT)) & I2C_IC_ACK_GENERAL_CALL_ACK_GEN_CALL_MASK) +/*! @} */ + +/*! @name IC_ENABLE_STATUS - */ +/*! @{ */ +#define I2C_IC_ENABLE_STATUS_IC_EN_MASK (0x1U) +#define I2C_IC_ENABLE_STATUS_IC_EN_SHIFT (0U) +#define I2C_IC_ENABLE_STATUS_IC_EN(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_ENABLE_STATUS_IC_EN_SHIFT)) & I2C_IC_ENABLE_STATUS_IC_EN_MASK) +#define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_MASK (0x2U) +#define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_SHIFT (1U) +#define I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_SHIFT)) & I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_MASK) +#define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_MASK (0x4U) +#define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_SHIFT (2U) +#define I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_SHIFT)) & I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_MASK) +/*! @} */ + +/*! @name IC_FS_SPKLEN - */ +/*! @{ */ +#define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_MASK (0xFFU) +#define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_SHIFT (0U) +#define I2C_IC_FS_SPKLEN_IC_FS_SPKLEN(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_SHIFT)) & I2C_IC_FS_SPKLEN_IC_FS_SPKLEN_MASK) +/*! @} */ + +/*! @name IC_HS_SPKLEN - */ +/*! @{ */ +#define I2C_IC_HS_SPKLEN_IC_HS_SPKLEN_MASK (0xFFU) +#define I2C_IC_HS_SPKLEN_IC_HS_SPKLEN_SHIFT (0U) +#define I2C_IC_HS_SPKLEN_IC_HS_SPKLEN(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_HS_SPKLEN_IC_HS_SPKLEN_SHIFT)) & I2C_IC_HS_SPKLEN_IC_HS_SPKLEN_MASK) +/*! @} */ + +/*! @name IC_COMP_PARAM_1 - */ +/*! @{ */ +#define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_MASK (0x3U) +#define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_SHIFT (0U) +/*! APB_DATA_WIDTH + * 0b00..8 bits + * 0b01..16 bits + * 0b10..32 bits + * 0b11..Reserved + */ +#define I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_SHIFT)) & I2C_IC_COMP_PARAM_1_APB_DATA_WIDTH_MASK) +#define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_MASK (0xCU) +#define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_SHIFT (2U) +/*! MAX_SPEED_MODE + * 0b00..Reserved + * 0b01..Standard + * 0b10..Fast + * 0b11..High + */ +#define I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_SHIFT)) & I2C_IC_COMP_PARAM_1_MAX_SPEED_MODE_MASK) +#define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_MASK (0x10U) +#define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_SHIFT (4U) +/*! HC_COUNT_VALUES + * 0b0..False + * 0b1..True + */ +#define I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_SHIFT)) & I2C_IC_COMP_PARAM_1_HC_COUNT_VALUES_MASK) +#define I2C_IC_COMP_PARAM_1_INTR_IO_MASK (0x20U) +#define I2C_IC_COMP_PARAM_1_INTR_IO_SHIFT (5U) +/*! INTR_IO + * 0b0..Individual + * 0b1..Combined + */ +#define I2C_IC_COMP_PARAM_1_INTR_IO(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_INTR_IO_SHIFT)) & I2C_IC_COMP_PARAM_1_INTR_IO_MASK) +#define I2C_IC_COMP_PARAM_1_HAS_DMA_MASK (0x40U) +#define I2C_IC_COMP_PARAM_1_HAS_DMA_SHIFT (6U) +/*! HAS_DMA + * 0b0..False + * 0b1..True + */ +#define I2C_IC_COMP_PARAM_1_HAS_DMA(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_HAS_DMA_SHIFT)) & I2C_IC_COMP_PARAM_1_HAS_DMA_MASK) +#define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_MASK (0x80U) +#define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_SHIFT (7U) +/*! ADD_ENCODED_PARAMS + * 0b0..False + * 0b1..True + */ +#define I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_SHIFT)) & I2C_IC_COMP_PARAM_1_ADD_ENCODED_PARAMS_MASK) +#define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_MASK (0xFF00U) +#define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_SHIFT (8U) +/*! RX_BUFFER_DEPTH + * 0b00000000..Reserved + * 0b00000001..2 + * 0b00000010..3 to + * 0b11111111..256 + */ +#define I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_SHIFT)) & I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_MASK) +#define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_MASK (0xFF0000U) +#define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_SHIFT (16U) +/*! TX_BUFFER_DEPTH + * 0b00000000..Reserved + * 0b00000001..2 + * 0b00000010..3 to + * 0b11111111..256 + */ +#define I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_SHIFT)) & I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_MASK) +/*! @} */ + +/*! @name IC_COMP_VERSION - */ +/*! @{ */ +#define I2C_IC_COMP_VERSION_IC_COMP_VERSION_MASK (0xFFFFFFFFU) +#define I2C_IC_COMP_VERSION_IC_COMP_VERSION_SHIFT (0U) +#define I2C_IC_COMP_VERSION_IC_COMP_VERSION(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_VERSION_IC_COMP_VERSION_SHIFT)) & I2C_IC_COMP_VERSION_IC_COMP_VERSION_MASK) +/*! @} */ + +/*! @name IC_COMP_TYPE - */ +/*! @{ */ +#define I2C_IC_COMP_TYPE_IC_COMP_TYPE_MASK (0xFFFFFFFFU) +#define I2C_IC_COMP_TYPE_IC_COMP_TYPE_SHIFT (0U) +#define I2C_IC_COMP_TYPE_IC_COMP_TYPE(x) (((uint32_t)(((uint32_t)(x)) << I2C_IC_COMP_TYPE_IC_COMP_TYPE_SHIFT)) & I2C_IC_COMP_TYPE_IC_COMP_TYPE_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group I2C_Register_Masks */ + + +/* I2C - Peripheral instance base addresses */ +/** Peripheral I2C0 base address */ +#define I2C0_BASE (0x46000000u) +/** Peripheral I2C0 base pointer */ +#define I2C0 ((I2C_Type *)I2C0_BASE) +/** Peripheral I2C1 base address */ +#define I2C1_BASE (0x48050000u) +/** Peripheral I2C1 base pointer */ +#define I2C1 ((I2C_Type *)I2C1_BASE) +/** Array initializer of I2C peripheral base addresses */ +#define I2C_BASE_ADDRS { I2C0_BASE, I2C1_BASE } +/** Array initializer of I2C peripheral base pointers */ +#define I2C_BASE_PTRS { I2C0, I2C1 } +/** Interrupt vectors for the I2C peripheral type */ +#define I2C_IRQS { I2C0_IRQn, I2C1_IRQn } + +/*! + * @} + */ /* end of group I2C_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- PINMUX Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PINMUX_Peripheral_Access_Layer PINMUX Peripheral Access Layer + * @{ + */ + +/** PINMUX - Register Layout Typedef */ +typedef struct { + __IO uint32_t _GPIO0; /**< padring pin Register, offset: 0x0 */ + __IO uint32_t _GPIO1; /**< padring pin Register, offset: 0x4 */ + __IO uint32_t _GPIO2; /**< padring pin Register, offset: 0x8 */ + __IO uint32_t _GPIO3; /**< padring pin Register, offset: 0xC */ + __IO uint32_t _GPIO4; /**< padring pin Register, offset: 0x10 */ + __IO uint32_t _GPIO5; /**< padring pin Register, offset: 0x14 */ + __IO uint32_t _GPIO6; /**< padring pin Register, offset: 0x18 */ + __IO uint32_t _GPIO7; /**< padring pin Register, offset: 0x1C */ + __IO uint32_t _GPIO8; /**< padring pin Register, offset: 0x20 */ + __IO uint32_t _GPIO9; /**< padring pin Register, offset: 0x24 */ + __IO uint32_t _GPIO10; /**< padring pin Register, offset: 0x28 */ + __IO uint32_t _GPIO11; /**< padring pin Register, offset: 0x2C */ + __IO uint32_t _GPIO12; /**< padring pin Register, offset: 0x30 */ + __IO uint32_t _GPIO13; /**< padring pin Register, offset: 0x34 */ + __IO uint32_t _GPIO14; /**< padring pin Register, offset: 0x38 */ + __IO uint32_t _GPIO15; /**< padring pin Register, offset: 0x3C */ + __IO uint32_t _GPIO16; /**< padring pin Register, offset: 0x40 */ + __IO uint32_t _GPIO17; /**< padring pin Register, offset: 0x44 */ + __IO uint32_t _GPIO18; /**< padring pin Register, offset: 0x48 */ + __IO uint32_t _GPIO19; /**< padring pin Register, offset: 0x4C */ + __IO uint32_t _GPIO20; /**< padring pin Register, offset: 0x50 */ + __IO uint32_t _GPIO21; /**< padring pin Register, offset: 0x54 */ + __IO uint32_t _GPIO22; /**< padring pin Register, offset: 0x58 */ + __IO uint32_t _GPIO23; /**< padring pin Register, offset: 0x5C */ + __IO uint32_t _GPIO24; /**< padring pin Register, offset: 0x60 */ + __IO uint32_t _GPIO25; /**< padring pin Register, offset: 0x64 */ + __IO uint32_t _GPIO26; /**< padring pin Register, offset: 0x68 */ + __IO uint32_t _GPIO27; /**< padring pin Register, offset: 0x6C */ + __IO uint32_t _GPIO28; /**< padring pin Register, offset: 0x70 */ + __IO uint32_t _GPIO29; /**< padring pin Register, offset: 0x74 */ + __IO uint32_t _GPIO30; /**< padring pin Register, offset: 0x78 */ + __IO uint32_t _GPIO31; /**< padring pin Register, offset: 0x7C */ + __IO uint32_t _GPIO32; /**< padring pin Register, offset: 0x80 */ + __IO uint32_t _GPIO33; /**< padring pin Register, offset: 0x84 */ + __IO uint32_t _GPIO34; /**< padring pin Register, offset: 0x88 */ + __IO uint32_t _GPIO35; /**< padring pin Register, offset: 0x8C */ + __IO uint32_t _GPIO36; /**< padring pin Register, offset: 0x90 */ + __IO uint32_t _GPIO37; /**< padring pin Register, offset: 0x94 */ + __IO uint32_t _GPIO38; /**< padring pin Register, offset: 0x98 */ + __IO uint32_t _GPIO39; /**< padring pin Register, offset: 0x9C */ + __IO uint32_t _GPIO40; /**< padring pin Register, offset: 0xA0 */ + __IO uint32_t _GPIO41; /**< padring pin Register, offset: 0xA4 */ + __IO uint32_t _GPIO42; /**< padring pin Register, offset: 0xA8 */ + __IO uint32_t _GPIO43; /**< padring pin Register, offset: 0xAC */ + __IO uint32_t _GPIO44; /**< padring pin Register, offset: 0xB0 */ + __IO uint32_t _GPIO45; /**< padring pin Register, offset: 0xB4 */ + __IO uint32_t _GPIO46; /**< padring pin Register, offset: 0xB8 */ + __IO uint32_t _GPIO47; /**< padring pin Register, offset: 0xBC */ + __IO uint32_t _GPIO48; /**< padring pin Register, offset: 0xC0 */ + __IO uint32_t _GPIO49; /**< padring pin Register, offset: 0xC4 */ + __IO uint32_t _GPIO50; /**< padring pin Register, offset: 0xC8 */ + __IO uint32_t _GPIO51; /**< padring pin Register, offset: 0xCC */ + __IO uint32_t _GPIO52; /**< padring pin Register, offset: 0xD0 */ + __IO uint32_t _GPIO53; /**< padring pin Register, offset: 0xD4 */ + __IO uint32_t _GPIO54; /**< padring pin Register, offset: 0xD8 */ + __IO uint32_t _GPIO55; /**< padring pin Register, offset: 0xDC */ +} PINMUX_Type; + +/* ---------------------------------------------------------------------------- + -- PINMUX Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PINMUX_Register_Masks PINMUX Register Masks + * @{ + */ + +/*! @name _GPIO0 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO0_FSEL_MASK (0x7U) +#define PINMUX__GPIO0_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO0_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO0_FSEL_SHIFT)) & PINMUX__GPIO0_FSEL_MASK) +#define PINMUX__GPIO0_DI_EN_MASK (0x8U) +#define PINMUX__GPIO0_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO0_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO0_DI_EN_SHIFT)) & PINMUX__GPIO0_DI_EN_MASK) +#define PINMUX__GPIO0_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO0_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO0_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO0_SLP_VAL_SHIFT)) & PINMUX__GPIO0_SLP_VAL_MASK) +#define PINMUX__GPIO0_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO0_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO0_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO0_SLP_OE_SHIFT)) & PINMUX__GPIO0_SLP_OE_MASK) +#define PINMUX__GPIO0_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO0_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO0_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO0_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO0_PIO_PULL_DN_MASK) +#define PINMUX__GPIO0_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO0_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO0_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO0_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO0_PIO_PULL_UP_MASK) +#define PINMUX__GPIO0_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO0_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO0_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO0_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO0_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO1 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO1_FSEL_MASK (0x7U) +#define PINMUX__GPIO1_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO1_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO1_FSEL_SHIFT)) & PINMUX__GPIO1_FSEL_MASK) +#define PINMUX__GPIO1_DI_EN_MASK (0x8U) +#define PINMUX__GPIO1_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO1_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO1_DI_EN_SHIFT)) & PINMUX__GPIO1_DI_EN_MASK) +#define PINMUX__GPIO1_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO1_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO1_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO1_SLP_VAL_SHIFT)) & PINMUX__GPIO1_SLP_VAL_MASK) +#define PINMUX__GPIO1_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO1_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO1_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO1_SLP_OE_SHIFT)) & PINMUX__GPIO1_SLP_OE_MASK) +#define PINMUX__GPIO1_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO1_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO1_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO1_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO1_PIO_PULL_DN_MASK) +#define PINMUX__GPIO1_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO1_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO1_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO1_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO1_PIO_PULL_UP_MASK) +#define PINMUX__GPIO1_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO1_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO1_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO1_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO1_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO2 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO2_FSEL_MASK (0x7U) +#define PINMUX__GPIO2_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO2_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO2_FSEL_SHIFT)) & PINMUX__GPIO2_FSEL_MASK) +#define PINMUX__GPIO2_DI_EN_MASK (0x8U) +#define PINMUX__GPIO2_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO2_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO2_DI_EN_SHIFT)) & PINMUX__GPIO2_DI_EN_MASK) +#define PINMUX__GPIO2_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO2_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO2_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO2_SLP_VAL_SHIFT)) & PINMUX__GPIO2_SLP_VAL_MASK) +#define PINMUX__GPIO2_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO2_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO2_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO2_SLP_OE_SHIFT)) & PINMUX__GPIO2_SLP_OE_MASK) +#define PINMUX__GPIO2_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO2_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO2_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO2_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO2_PIO_PULL_DN_MASK) +#define PINMUX__GPIO2_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO2_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO2_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO2_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO2_PIO_PULL_UP_MASK) +#define PINMUX__GPIO2_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO2_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO2_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO2_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO2_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO3 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO3_FSEL_MASK (0x7U) +#define PINMUX__GPIO3_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO3_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO3_FSEL_SHIFT)) & PINMUX__GPIO3_FSEL_MASK) +#define PINMUX__GPIO3_DI_EN_MASK (0x8U) +#define PINMUX__GPIO3_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO3_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO3_DI_EN_SHIFT)) & PINMUX__GPIO3_DI_EN_MASK) +#define PINMUX__GPIO3_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO3_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO3_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO3_SLP_VAL_SHIFT)) & PINMUX__GPIO3_SLP_VAL_MASK) +#define PINMUX__GPIO3_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO3_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO3_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO3_SLP_OE_SHIFT)) & PINMUX__GPIO3_SLP_OE_MASK) +#define PINMUX__GPIO3_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO3_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO3_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO3_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO3_PIO_PULL_DN_MASK) +#define PINMUX__GPIO3_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO3_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO3_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO3_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO3_PIO_PULL_UP_MASK) +#define PINMUX__GPIO3_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO3_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO3_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO3_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO3_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO4 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO4_FSEL_MASK (0x7U) +#define PINMUX__GPIO4_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO4_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO4_FSEL_SHIFT)) & PINMUX__GPIO4_FSEL_MASK) +#define PINMUX__GPIO4_DI_EN_MASK (0x8U) +#define PINMUX__GPIO4_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO4_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO4_DI_EN_SHIFT)) & PINMUX__GPIO4_DI_EN_MASK) +#define PINMUX__GPIO4_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO4_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO4_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO4_SLP_VAL_SHIFT)) & PINMUX__GPIO4_SLP_VAL_MASK) +#define PINMUX__GPIO4_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO4_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO4_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO4_SLP_OE_SHIFT)) & PINMUX__GPIO4_SLP_OE_MASK) +#define PINMUX__GPIO4_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO4_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO4_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO4_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO4_PIO_PULL_DN_MASK) +#define PINMUX__GPIO4_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO4_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO4_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO4_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO4_PIO_PULL_UP_MASK) +#define PINMUX__GPIO4_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO4_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO4_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO4_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO4_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO5 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO5_FSEL_MASK (0x7U) +#define PINMUX__GPIO5_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO5_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO5_FSEL_SHIFT)) & PINMUX__GPIO5_FSEL_MASK) +#define PINMUX__GPIO5_DI_EN_MASK (0x8U) +#define PINMUX__GPIO5_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO5_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO5_DI_EN_SHIFT)) & PINMUX__GPIO5_DI_EN_MASK) +#define PINMUX__GPIO5_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO5_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO5_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO5_SLP_VAL_SHIFT)) & PINMUX__GPIO5_SLP_VAL_MASK) +#define PINMUX__GPIO5_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO5_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO5_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO5_SLP_OE_SHIFT)) & PINMUX__GPIO5_SLP_OE_MASK) +#define PINMUX__GPIO5_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO5_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO5_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO5_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO5_PIO_PULL_DN_MASK) +#define PINMUX__GPIO5_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO5_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO5_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO5_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO5_PIO_PULL_UP_MASK) +#define PINMUX__GPIO5_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO5_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO5_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO5_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO5_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO6 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO6_FSEL_MASK (0x7U) +#define PINMUX__GPIO6_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO6_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO6_FSEL_SHIFT)) & PINMUX__GPIO6_FSEL_MASK) +#define PINMUX__GPIO6_DI_EN_MASK (0x8U) +#define PINMUX__GPIO6_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO6_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO6_DI_EN_SHIFT)) & PINMUX__GPIO6_DI_EN_MASK) +#define PINMUX__GPIO6_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO6_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO6_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO6_SLP_VAL_SHIFT)) & PINMUX__GPIO6_SLP_VAL_MASK) +#define PINMUX__GPIO6_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO6_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO6_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO6_SLP_OE_SHIFT)) & PINMUX__GPIO6_SLP_OE_MASK) +#define PINMUX__GPIO6_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO6_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO6_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO6_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO6_PIO_PULL_DN_MASK) +#define PINMUX__GPIO6_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO6_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO6_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO6_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO6_PIO_PULL_UP_MASK) +#define PINMUX__GPIO6_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO6_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO6_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO6_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO6_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO7 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO7_FSEL_MASK (0x7U) +#define PINMUX__GPIO7_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO7_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO7_FSEL_SHIFT)) & PINMUX__GPIO7_FSEL_MASK) +#define PINMUX__GPIO7_DI_EN_MASK (0x8U) +#define PINMUX__GPIO7_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO7_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO7_DI_EN_SHIFT)) & PINMUX__GPIO7_DI_EN_MASK) +#define PINMUX__GPIO7_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO7_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO7_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO7_SLP_VAL_SHIFT)) & PINMUX__GPIO7_SLP_VAL_MASK) +#define PINMUX__GPIO7_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO7_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO7_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO7_SLP_OE_SHIFT)) & PINMUX__GPIO7_SLP_OE_MASK) +#define PINMUX__GPIO7_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO7_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO7_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO7_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO7_PIO_PULL_DN_MASK) +#define PINMUX__GPIO7_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO7_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO7_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO7_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO7_PIO_PULL_UP_MASK) +#define PINMUX__GPIO7_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO7_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO7_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO7_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO7_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO8 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO8_FSEL_MASK (0x7U) +#define PINMUX__GPIO8_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO8_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO8_FSEL_SHIFT)) & PINMUX__GPIO8_FSEL_MASK) +#define PINMUX__GPIO8_DI_EN_MASK (0x8U) +#define PINMUX__GPIO8_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO8_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO8_DI_EN_SHIFT)) & PINMUX__GPIO8_DI_EN_MASK) +#define PINMUX__GPIO8_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO8_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO8_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO8_SLP_VAL_SHIFT)) & PINMUX__GPIO8_SLP_VAL_MASK) +#define PINMUX__GPIO8_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO8_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO8_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO8_SLP_OE_SHIFT)) & PINMUX__GPIO8_SLP_OE_MASK) +#define PINMUX__GPIO8_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO8_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO8_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO8_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO8_PIO_PULL_DN_MASK) +#define PINMUX__GPIO8_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO8_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO8_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO8_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO8_PIO_PULL_UP_MASK) +#define PINMUX__GPIO8_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO8_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO8_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO8_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO8_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO9 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO9_FSEL_MASK (0x7U) +#define PINMUX__GPIO9_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO9_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO9_FSEL_SHIFT)) & PINMUX__GPIO9_FSEL_MASK) +#define PINMUX__GPIO9_DI_EN_MASK (0x8U) +#define PINMUX__GPIO9_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO9_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO9_DI_EN_SHIFT)) & PINMUX__GPIO9_DI_EN_MASK) +#define PINMUX__GPIO9_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO9_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO9_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO9_SLP_VAL_SHIFT)) & PINMUX__GPIO9_SLP_VAL_MASK) +#define PINMUX__GPIO9_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO9_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO9_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO9_SLP_OE_SHIFT)) & PINMUX__GPIO9_SLP_OE_MASK) +#define PINMUX__GPIO9_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO9_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO9_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO9_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO9_PIO_PULL_DN_MASK) +#define PINMUX__GPIO9_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO9_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO9_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO9_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO9_PIO_PULL_UP_MASK) +#define PINMUX__GPIO9_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO9_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO9_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO9_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO9_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO10 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO10_FSEL_MASK (0x7U) +#define PINMUX__GPIO10_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO10_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO10_FSEL_SHIFT)) & PINMUX__GPIO10_FSEL_MASK) +#define PINMUX__GPIO10_DI_EN_MASK (0x8U) +#define PINMUX__GPIO10_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO10_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO10_DI_EN_SHIFT)) & PINMUX__GPIO10_DI_EN_MASK) +#define PINMUX__GPIO10_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO10_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO10_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO10_SLP_VAL_SHIFT)) & PINMUX__GPIO10_SLP_VAL_MASK) +#define PINMUX__GPIO10_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO10_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO10_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO10_SLP_OE_SHIFT)) & PINMUX__GPIO10_SLP_OE_MASK) +#define PINMUX__GPIO10_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO10_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO10_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO10_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO10_PIO_PULL_DN_MASK) +#define PINMUX__GPIO10_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO10_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO10_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO10_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO10_PIO_PULL_UP_MASK) +#define PINMUX__GPIO10_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO10_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO10_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO10_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO10_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO11 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO11_FSEL_MASK (0x7U) +#define PINMUX__GPIO11_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO11_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO11_FSEL_SHIFT)) & PINMUX__GPIO11_FSEL_MASK) +#define PINMUX__GPIO11_DI_EN_MASK (0x8U) +#define PINMUX__GPIO11_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO11_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO11_DI_EN_SHIFT)) & PINMUX__GPIO11_DI_EN_MASK) +#define PINMUX__GPIO11_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO11_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO11_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO11_SLP_VAL_SHIFT)) & PINMUX__GPIO11_SLP_VAL_MASK) +#define PINMUX__GPIO11_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO11_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO11_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO11_SLP_OE_SHIFT)) & PINMUX__GPIO11_SLP_OE_MASK) +#define PINMUX__GPIO11_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO11_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO11_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO11_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO11_PIO_PULL_DN_MASK) +#define PINMUX__GPIO11_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO11_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO11_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO11_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO11_PIO_PULL_UP_MASK) +#define PINMUX__GPIO11_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO11_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO11_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO11_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO11_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO12 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO12_FSEL_MASK (0x7U) +#define PINMUX__GPIO12_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO12_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO12_FSEL_SHIFT)) & PINMUX__GPIO12_FSEL_MASK) +#define PINMUX__GPIO12_DI_EN_MASK (0x8U) +#define PINMUX__GPIO12_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO12_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO12_DI_EN_SHIFT)) & PINMUX__GPIO12_DI_EN_MASK) +#define PINMUX__GPIO12_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO12_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO12_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO12_SLP_VAL_SHIFT)) & PINMUX__GPIO12_SLP_VAL_MASK) +#define PINMUX__GPIO12_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO12_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO12_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO12_SLP_OE_SHIFT)) & PINMUX__GPIO12_SLP_OE_MASK) +#define PINMUX__GPIO12_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO12_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO12_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO12_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO12_PIO_PULL_DN_MASK) +#define PINMUX__GPIO12_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO12_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO12_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO12_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO12_PIO_PULL_UP_MASK) +#define PINMUX__GPIO12_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO12_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO12_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO12_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO12_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO13 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO13_FSEL_MASK (0x7U) +#define PINMUX__GPIO13_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO13_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO13_FSEL_SHIFT)) & PINMUX__GPIO13_FSEL_MASK) +#define PINMUX__GPIO13_DI_EN_MASK (0x8U) +#define PINMUX__GPIO13_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO13_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO13_DI_EN_SHIFT)) & PINMUX__GPIO13_DI_EN_MASK) +#define PINMUX__GPIO13_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO13_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO13_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO13_SLP_VAL_SHIFT)) & PINMUX__GPIO13_SLP_VAL_MASK) +#define PINMUX__GPIO13_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO13_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO13_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO13_SLP_OE_SHIFT)) & PINMUX__GPIO13_SLP_OE_MASK) +#define PINMUX__GPIO13_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO13_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO13_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO13_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO13_PIO_PULL_DN_MASK) +#define PINMUX__GPIO13_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO13_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO13_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO13_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO13_PIO_PULL_UP_MASK) +#define PINMUX__GPIO13_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO13_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO13_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO13_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO13_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO14 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO14_FSEL_MASK (0x7U) +#define PINMUX__GPIO14_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO14_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO14_FSEL_SHIFT)) & PINMUX__GPIO14_FSEL_MASK) +#define PINMUX__GPIO14_DI_EN_MASK (0x8U) +#define PINMUX__GPIO14_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO14_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO14_DI_EN_SHIFT)) & PINMUX__GPIO14_DI_EN_MASK) +#define PINMUX__GPIO14_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO14_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO14_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO14_SLP_VAL_SHIFT)) & PINMUX__GPIO14_SLP_VAL_MASK) +#define PINMUX__GPIO14_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO14_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO14_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO14_SLP_OE_SHIFT)) & PINMUX__GPIO14_SLP_OE_MASK) +#define PINMUX__GPIO14_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO14_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO14_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO14_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO14_PIO_PULL_DN_MASK) +#define PINMUX__GPIO14_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO14_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO14_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO14_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO14_PIO_PULL_UP_MASK) +#define PINMUX__GPIO14_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO14_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO14_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO14_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO14_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO15 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO15_FSEL_MASK (0x7U) +#define PINMUX__GPIO15_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO15_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO15_FSEL_SHIFT)) & PINMUX__GPIO15_FSEL_MASK) +#define PINMUX__GPIO15_DI_EN_MASK (0x8U) +#define PINMUX__GPIO15_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO15_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO15_DI_EN_SHIFT)) & PINMUX__GPIO15_DI_EN_MASK) +#define PINMUX__GPIO15_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO15_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO15_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO15_SLP_VAL_SHIFT)) & PINMUX__GPIO15_SLP_VAL_MASK) +#define PINMUX__GPIO15_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO15_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO15_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO15_SLP_OE_SHIFT)) & PINMUX__GPIO15_SLP_OE_MASK) +#define PINMUX__GPIO15_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO15_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO15_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO15_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO15_PIO_PULL_DN_MASK) +#define PINMUX__GPIO15_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO15_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO15_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO15_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO15_PIO_PULL_UP_MASK) +#define PINMUX__GPIO15_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO15_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO15_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO15_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO15_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO16 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO16_FSEL_MASK (0x7U) +#define PINMUX__GPIO16_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO16_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO16_FSEL_SHIFT)) & PINMUX__GPIO16_FSEL_MASK) +#define PINMUX__GPIO16_DI_EN_MASK (0x8U) +#define PINMUX__GPIO16_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO16_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO16_DI_EN_SHIFT)) & PINMUX__GPIO16_DI_EN_MASK) +#define PINMUX__GPIO16_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO16_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO16_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO16_SLP_VAL_SHIFT)) & PINMUX__GPIO16_SLP_VAL_MASK) +#define PINMUX__GPIO16_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO16_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO16_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO16_SLP_OE_SHIFT)) & PINMUX__GPIO16_SLP_OE_MASK) +#define PINMUX__GPIO16_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO16_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO16_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO16_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO16_PIO_PULL_DN_MASK) +#define PINMUX__GPIO16_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO16_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO16_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO16_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO16_PIO_PULL_UP_MASK) +#define PINMUX__GPIO16_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO16_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO16_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO16_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO16_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO17 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO17_FSEL_MASK (0x7U) +#define PINMUX__GPIO17_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO17_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO17_FSEL_SHIFT)) & PINMUX__GPIO17_FSEL_MASK) +#define PINMUX__GPIO17_DI_EN_MASK (0x8U) +#define PINMUX__GPIO17_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO17_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO17_DI_EN_SHIFT)) & PINMUX__GPIO17_DI_EN_MASK) +#define PINMUX__GPIO17_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO17_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO17_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO17_SLP_VAL_SHIFT)) & PINMUX__GPIO17_SLP_VAL_MASK) +#define PINMUX__GPIO17_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO17_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO17_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO17_SLP_OE_SHIFT)) & PINMUX__GPIO17_SLP_OE_MASK) +#define PINMUX__GPIO17_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO17_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO17_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO17_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO17_PIO_PULL_DN_MASK) +#define PINMUX__GPIO17_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO17_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO17_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO17_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO17_PIO_PULL_UP_MASK) +#define PINMUX__GPIO17_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO17_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO17_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO17_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO17_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO18 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO18_FSEL_MASK (0x7U) +#define PINMUX__GPIO18_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO18_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO18_FSEL_SHIFT)) & PINMUX__GPIO18_FSEL_MASK) +#define PINMUX__GPIO18_DI_EN_MASK (0x8U) +#define PINMUX__GPIO18_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO18_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO18_DI_EN_SHIFT)) & PINMUX__GPIO18_DI_EN_MASK) +#define PINMUX__GPIO18_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO18_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO18_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO18_SLP_VAL_SHIFT)) & PINMUX__GPIO18_SLP_VAL_MASK) +#define PINMUX__GPIO18_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO18_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO18_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO18_SLP_OE_SHIFT)) & PINMUX__GPIO18_SLP_OE_MASK) +#define PINMUX__GPIO18_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO18_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO18_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO18_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO18_PIO_PULL_DN_MASK) +#define PINMUX__GPIO18_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO18_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO18_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO18_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO18_PIO_PULL_UP_MASK) +#define PINMUX__GPIO18_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO18_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO18_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO18_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO18_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO19 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO19_FSEL_MASK (0x7U) +#define PINMUX__GPIO19_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO19_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO19_FSEL_SHIFT)) & PINMUX__GPIO19_FSEL_MASK) +#define PINMUX__GPIO19_DI_EN_MASK (0x8U) +#define PINMUX__GPIO19_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO19_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO19_DI_EN_SHIFT)) & PINMUX__GPIO19_DI_EN_MASK) +#define PINMUX__GPIO19_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO19_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO19_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO19_SLP_VAL_SHIFT)) & PINMUX__GPIO19_SLP_VAL_MASK) +#define PINMUX__GPIO19_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO19_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO19_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO19_SLP_OE_SHIFT)) & PINMUX__GPIO19_SLP_OE_MASK) +#define PINMUX__GPIO19_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO19_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO19_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO19_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO19_PIO_PULL_DN_MASK) +#define PINMUX__GPIO19_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO19_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO19_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO19_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO19_PIO_PULL_UP_MASK) +#define PINMUX__GPIO19_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO19_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO19_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO19_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO19_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO20 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO20_FSEL_MASK (0x7U) +#define PINMUX__GPIO20_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO20_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO20_FSEL_SHIFT)) & PINMUX__GPIO20_FSEL_MASK) +#define PINMUX__GPIO20_DI_EN_MASK (0x8U) +#define PINMUX__GPIO20_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO20_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO20_DI_EN_SHIFT)) & PINMUX__GPIO20_DI_EN_MASK) +#define PINMUX__GPIO20_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO20_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO20_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO20_SLP_VAL_SHIFT)) & PINMUX__GPIO20_SLP_VAL_MASK) +#define PINMUX__GPIO20_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO20_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO20_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO20_SLP_OE_SHIFT)) & PINMUX__GPIO20_SLP_OE_MASK) +#define PINMUX__GPIO20_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO20_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO20_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO20_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO20_PIO_PULL_DN_MASK) +#define PINMUX__GPIO20_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO20_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO20_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO20_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO20_PIO_PULL_UP_MASK) +#define PINMUX__GPIO20_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO20_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO20_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO20_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO20_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO21 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO21_FSEL_MASK (0x7U) +#define PINMUX__GPIO21_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO21_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO21_FSEL_SHIFT)) & PINMUX__GPIO21_FSEL_MASK) +#define PINMUX__GPIO21_DI_EN_MASK (0x8U) +#define PINMUX__GPIO21_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO21_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO21_DI_EN_SHIFT)) & PINMUX__GPIO21_DI_EN_MASK) +#define PINMUX__GPIO21_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO21_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO21_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO21_SLP_VAL_SHIFT)) & PINMUX__GPIO21_SLP_VAL_MASK) +#define PINMUX__GPIO21_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO21_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO21_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO21_SLP_OE_SHIFT)) & PINMUX__GPIO21_SLP_OE_MASK) +#define PINMUX__GPIO21_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO21_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO21_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO21_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO21_PIO_PULL_DN_MASK) +#define PINMUX__GPIO21_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO21_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO21_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO21_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO21_PIO_PULL_UP_MASK) +#define PINMUX__GPIO21_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO21_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO21_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO21_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO21_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO22 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO22_FSEL_MASK (0x7U) +#define PINMUX__GPIO22_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO22_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO22_FSEL_SHIFT)) & PINMUX__GPIO22_FSEL_MASK) +#define PINMUX__GPIO22_DI_EN_MASK (0x8U) +#define PINMUX__GPIO22_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO22_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO22_DI_EN_SHIFT)) & PINMUX__GPIO22_DI_EN_MASK) +#define PINMUX__GPIO22_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO22_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO22_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO22_SLP_VAL_SHIFT)) & PINMUX__GPIO22_SLP_VAL_MASK) +#define PINMUX__GPIO22_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO22_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO22_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO22_SLP_OE_SHIFT)) & PINMUX__GPIO22_SLP_OE_MASK) +#define PINMUX__GPIO22_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO22_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO22_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO22_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO22_PIO_PULL_DN_MASK) +#define PINMUX__GPIO22_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO22_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO22_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO22_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO22_PIO_PULL_UP_MASK) +#define PINMUX__GPIO22_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO22_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO22_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO22_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO22_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO23 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO23_FSEL_MASK (0x7U) +#define PINMUX__GPIO23_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO23_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO23_FSEL_SHIFT)) & PINMUX__GPIO23_FSEL_MASK) +#define PINMUX__GPIO23_DI_EN_MASK (0x8U) +#define PINMUX__GPIO23_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO23_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO23_DI_EN_SHIFT)) & PINMUX__GPIO23_DI_EN_MASK) +#define PINMUX__GPIO23_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO23_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO23_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO23_SLP_VAL_SHIFT)) & PINMUX__GPIO23_SLP_VAL_MASK) +#define PINMUX__GPIO23_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO23_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO23_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO23_SLP_OE_SHIFT)) & PINMUX__GPIO23_SLP_OE_MASK) +#define PINMUX__GPIO23_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO23_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO23_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO23_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO23_PIO_PULL_DN_MASK) +#define PINMUX__GPIO23_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO23_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO23_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO23_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO23_PIO_PULL_UP_MASK) +#define PINMUX__GPIO23_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO23_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO23_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO23_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO23_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO24 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO24_FSEL_MASK (0x7U) +#define PINMUX__GPIO24_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO24_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO24_FSEL_SHIFT)) & PINMUX__GPIO24_FSEL_MASK) +#define PINMUX__GPIO24_DI_EN_MASK (0x8U) +#define PINMUX__GPIO24_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO24_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO24_DI_EN_SHIFT)) & PINMUX__GPIO24_DI_EN_MASK) +#define PINMUX__GPIO24_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO24_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO24_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO24_SLP_VAL_SHIFT)) & PINMUX__GPIO24_SLP_VAL_MASK) +#define PINMUX__GPIO24_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO24_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO24_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO24_SLP_OE_SHIFT)) & PINMUX__GPIO24_SLP_OE_MASK) +#define PINMUX__GPIO24_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO24_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO24_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO24_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO24_PIO_PULL_DN_MASK) +#define PINMUX__GPIO24_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO24_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO24_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO24_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO24_PIO_PULL_UP_MASK) +#define PINMUX__GPIO24_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO24_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO24_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO24_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO24_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO25 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO25_FSEL_MASK (0x7U) +#define PINMUX__GPIO25_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO25_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO25_FSEL_SHIFT)) & PINMUX__GPIO25_FSEL_MASK) +#define PINMUX__GPIO25_DI_EN_MASK (0x8U) +#define PINMUX__GPIO25_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO25_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO25_DI_EN_SHIFT)) & PINMUX__GPIO25_DI_EN_MASK) +#define PINMUX__GPIO25_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO25_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO25_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO25_SLP_VAL_SHIFT)) & PINMUX__GPIO25_SLP_VAL_MASK) +#define PINMUX__GPIO25_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO25_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO25_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO25_SLP_OE_SHIFT)) & PINMUX__GPIO25_SLP_OE_MASK) +#define PINMUX__GPIO25_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO25_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO25_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO25_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO25_PIO_PULL_DN_MASK) +#define PINMUX__GPIO25_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO25_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO25_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO25_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO25_PIO_PULL_UP_MASK) +#define PINMUX__GPIO25_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO25_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO25_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO25_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO25_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO26 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO26_FSEL_MASK (0x7U) +#define PINMUX__GPIO26_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO26_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO26_FSEL_SHIFT)) & PINMUX__GPIO26_FSEL_MASK) +#define PINMUX__GPIO26_DI_EN_MASK (0x8U) +#define PINMUX__GPIO26_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO26_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO26_DI_EN_SHIFT)) & PINMUX__GPIO26_DI_EN_MASK) +#define PINMUX__GPIO26_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO26_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO26_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO26_SLP_VAL_SHIFT)) & PINMUX__GPIO26_SLP_VAL_MASK) +#define PINMUX__GPIO26_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO26_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO26_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO26_SLP_OE_SHIFT)) & PINMUX__GPIO26_SLP_OE_MASK) +#define PINMUX__GPIO26_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO26_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO26_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO26_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO26_PIO_PULL_DN_MASK) +#define PINMUX__GPIO26_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO26_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO26_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO26_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO26_PIO_PULL_UP_MASK) +#define PINMUX__GPIO26_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO26_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO26_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO26_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO26_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO27 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO27_FSEL_MASK (0x7U) +#define PINMUX__GPIO27_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO27_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO27_FSEL_SHIFT)) & PINMUX__GPIO27_FSEL_MASK) +#define PINMUX__GPIO27_DI_EN_MASK (0x8U) +#define PINMUX__GPIO27_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO27_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO27_DI_EN_SHIFT)) & PINMUX__GPIO27_DI_EN_MASK) +#define PINMUX__GPIO27_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO27_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO27_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO27_SLP_VAL_SHIFT)) & PINMUX__GPIO27_SLP_VAL_MASK) +#define PINMUX__GPIO27_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO27_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO27_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO27_SLP_OE_SHIFT)) & PINMUX__GPIO27_SLP_OE_MASK) +#define PINMUX__GPIO27_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO27_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO27_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO27_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO27_PIO_PULL_DN_MASK) +#define PINMUX__GPIO27_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO27_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO27_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO27_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO27_PIO_PULL_UP_MASK) +#define PINMUX__GPIO27_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO27_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO27_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO27_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO27_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO28 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO28_FSEL_MASK (0x7U) +#define PINMUX__GPIO28_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO28_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO28_FSEL_SHIFT)) & PINMUX__GPIO28_FSEL_MASK) +#define PINMUX__GPIO28_DI_EN_MASK (0x8U) +#define PINMUX__GPIO28_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO28_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO28_DI_EN_SHIFT)) & PINMUX__GPIO28_DI_EN_MASK) +#define PINMUX__GPIO28_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO28_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO28_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO28_SLP_VAL_SHIFT)) & PINMUX__GPIO28_SLP_VAL_MASK) +#define PINMUX__GPIO28_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO28_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO28_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO28_SLP_OE_SHIFT)) & PINMUX__GPIO28_SLP_OE_MASK) +#define PINMUX__GPIO28_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO28_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO28_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO28_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO28_PIO_PULL_DN_MASK) +#define PINMUX__GPIO28_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO28_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO28_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO28_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO28_PIO_PULL_UP_MASK) +#define PINMUX__GPIO28_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO28_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO28_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO28_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO28_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO29 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO29_FSEL_MASK (0x7U) +#define PINMUX__GPIO29_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO29_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO29_FSEL_SHIFT)) & PINMUX__GPIO29_FSEL_MASK) +#define PINMUX__GPIO29_DI_EN_MASK (0x8U) +#define PINMUX__GPIO29_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO29_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO29_DI_EN_SHIFT)) & PINMUX__GPIO29_DI_EN_MASK) +#define PINMUX__GPIO29_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO29_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO29_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO29_SLP_VAL_SHIFT)) & PINMUX__GPIO29_SLP_VAL_MASK) +#define PINMUX__GPIO29_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO29_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO29_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO29_SLP_OE_SHIFT)) & PINMUX__GPIO29_SLP_OE_MASK) +#define PINMUX__GPIO29_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO29_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO29_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO29_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO29_PIO_PULL_DN_MASK) +#define PINMUX__GPIO29_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO29_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO29_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO29_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO29_PIO_PULL_UP_MASK) +#define PINMUX__GPIO29_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO29_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO29_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO29_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO29_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO30 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO30_FSEL_MASK (0x7U) +#define PINMUX__GPIO30_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO30_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO30_FSEL_SHIFT)) & PINMUX__GPIO30_FSEL_MASK) +#define PINMUX__GPIO30_DI_EN_MASK (0x8U) +#define PINMUX__GPIO30_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO30_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO30_DI_EN_SHIFT)) & PINMUX__GPIO30_DI_EN_MASK) +#define PINMUX__GPIO30_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO30_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO30_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO30_SLP_VAL_SHIFT)) & PINMUX__GPIO30_SLP_VAL_MASK) +#define PINMUX__GPIO30_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO30_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO30_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO30_SLP_OE_SHIFT)) & PINMUX__GPIO30_SLP_OE_MASK) +#define PINMUX__GPIO30_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO30_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO30_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO30_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO30_PIO_PULL_DN_MASK) +#define PINMUX__GPIO30_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO30_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO30_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO30_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO30_PIO_PULL_UP_MASK) +#define PINMUX__GPIO30_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO30_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO30_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO30_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO30_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO31 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO31_FSEL_MASK (0x7U) +#define PINMUX__GPIO31_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO31_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO31_FSEL_SHIFT)) & PINMUX__GPIO31_FSEL_MASK) +#define PINMUX__GPIO31_DI_EN_MASK (0x8U) +#define PINMUX__GPIO31_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO31_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO31_DI_EN_SHIFT)) & PINMUX__GPIO31_DI_EN_MASK) +#define PINMUX__GPIO31_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO31_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO31_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO31_SLP_VAL_SHIFT)) & PINMUX__GPIO31_SLP_VAL_MASK) +#define PINMUX__GPIO31_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO31_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO31_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO31_SLP_OE_SHIFT)) & PINMUX__GPIO31_SLP_OE_MASK) +#define PINMUX__GPIO31_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO31_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO31_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO31_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO31_PIO_PULL_DN_MASK) +#define PINMUX__GPIO31_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO31_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO31_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO31_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO31_PIO_PULL_UP_MASK) +#define PINMUX__GPIO31_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO31_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO31_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO31_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO31_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO32 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO32_FSEL_MASK (0x7U) +#define PINMUX__GPIO32_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO32_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO32_FSEL_SHIFT)) & PINMUX__GPIO32_FSEL_MASK) +#define PINMUX__GPIO32_DI_EN_MASK (0x8U) +#define PINMUX__GPIO32_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO32_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO32_DI_EN_SHIFT)) & PINMUX__GPIO32_DI_EN_MASK) +#define PINMUX__GPIO32_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO32_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO32_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO32_SLP_VAL_SHIFT)) & PINMUX__GPIO32_SLP_VAL_MASK) +#define PINMUX__GPIO32_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO32_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO32_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO32_SLP_OE_SHIFT)) & PINMUX__GPIO32_SLP_OE_MASK) +#define PINMUX__GPIO32_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO32_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO32_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO32_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO32_PIO_PULL_DN_MASK) +#define PINMUX__GPIO32_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO32_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO32_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO32_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO32_PIO_PULL_UP_MASK) +#define PINMUX__GPIO32_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO32_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO32_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO32_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO32_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO33 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO33_FSEL_MASK (0x7U) +#define PINMUX__GPIO33_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO33_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO33_FSEL_SHIFT)) & PINMUX__GPIO33_FSEL_MASK) +#define PINMUX__GPIO33_DI_EN_MASK (0x8U) +#define PINMUX__GPIO33_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO33_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO33_DI_EN_SHIFT)) & PINMUX__GPIO33_DI_EN_MASK) +#define PINMUX__GPIO33_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO33_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO33_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO33_SLP_VAL_SHIFT)) & PINMUX__GPIO33_SLP_VAL_MASK) +#define PINMUX__GPIO33_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO33_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO33_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO33_SLP_OE_SHIFT)) & PINMUX__GPIO33_SLP_OE_MASK) +#define PINMUX__GPIO33_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO33_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO33_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO33_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO33_PIO_PULL_DN_MASK) +#define PINMUX__GPIO33_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO33_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO33_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO33_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO33_PIO_PULL_UP_MASK) +#define PINMUX__GPIO33_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO33_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO33_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO33_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO33_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO34 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO34_FSEL_MASK (0x7U) +#define PINMUX__GPIO34_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO34_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO34_FSEL_SHIFT)) & PINMUX__GPIO34_FSEL_MASK) +#define PINMUX__GPIO34_DI_EN_MASK (0x8U) +#define PINMUX__GPIO34_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO34_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO34_DI_EN_SHIFT)) & PINMUX__GPIO34_DI_EN_MASK) +#define PINMUX__GPIO34_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO34_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO34_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO34_SLP_VAL_SHIFT)) & PINMUX__GPIO34_SLP_VAL_MASK) +#define PINMUX__GPIO34_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO34_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO34_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO34_SLP_OE_SHIFT)) & PINMUX__GPIO34_SLP_OE_MASK) +#define PINMUX__GPIO34_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO34_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO34_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO34_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO34_PIO_PULL_DN_MASK) +#define PINMUX__GPIO34_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO34_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO34_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO34_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO34_PIO_PULL_UP_MASK) +#define PINMUX__GPIO34_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO34_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO34_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO34_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO34_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO35 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO35_FSEL_MASK (0x7U) +#define PINMUX__GPIO35_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO35_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO35_FSEL_SHIFT)) & PINMUX__GPIO35_FSEL_MASK) +#define PINMUX__GPIO35_DI_EN_MASK (0x8U) +#define PINMUX__GPIO35_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO35_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO35_DI_EN_SHIFT)) & PINMUX__GPIO35_DI_EN_MASK) +#define PINMUX__GPIO35_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO35_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO35_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO35_SLP_VAL_SHIFT)) & PINMUX__GPIO35_SLP_VAL_MASK) +#define PINMUX__GPIO35_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO35_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO35_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO35_SLP_OE_SHIFT)) & PINMUX__GPIO35_SLP_OE_MASK) +#define PINMUX__GPIO35_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO35_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO35_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO35_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO35_PIO_PULL_DN_MASK) +#define PINMUX__GPIO35_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO35_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO35_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO35_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO35_PIO_PULL_UP_MASK) +#define PINMUX__GPIO35_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO35_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO35_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO35_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO35_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO36 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO36_FSEL_MASK (0x7U) +#define PINMUX__GPIO36_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO36_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO36_FSEL_SHIFT)) & PINMUX__GPIO36_FSEL_MASK) +#define PINMUX__GPIO36_DI_EN_MASK (0x8U) +#define PINMUX__GPIO36_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO36_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO36_DI_EN_SHIFT)) & PINMUX__GPIO36_DI_EN_MASK) +#define PINMUX__GPIO36_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO36_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO36_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO36_SLP_VAL_SHIFT)) & PINMUX__GPIO36_SLP_VAL_MASK) +#define PINMUX__GPIO36_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO36_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO36_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO36_SLP_OE_SHIFT)) & PINMUX__GPIO36_SLP_OE_MASK) +#define PINMUX__GPIO36_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO36_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO36_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO36_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO36_PIO_PULL_DN_MASK) +#define PINMUX__GPIO36_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO36_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO36_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO36_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO36_PIO_PULL_UP_MASK) +#define PINMUX__GPIO36_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO36_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO36_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO36_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO36_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO37 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO37_FSEL_MASK (0x7U) +#define PINMUX__GPIO37_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO37_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO37_FSEL_SHIFT)) & PINMUX__GPIO37_FSEL_MASK) +#define PINMUX__GPIO37_DI_EN_MASK (0x8U) +#define PINMUX__GPIO37_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO37_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO37_DI_EN_SHIFT)) & PINMUX__GPIO37_DI_EN_MASK) +#define PINMUX__GPIO37_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO37_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO37_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO37_SLP_VAL_SHIFT)) & PINMUX__GPIO37_SLP_VAL_MASK) +#define PINMUX__GPIO37_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO37_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO37_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO37_SLP_OE_SHIFT)) & PINMUX__GPIO37_SLP_OE_MASK) +#define PINMUX__GPIO37_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO37_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO37_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO37_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO37_PIO_PULL_DN_MASK) +#define PINMUX__GPIO37_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO37_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO37_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO37_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO37_PIO_PULL_UP_MASK) +#define PINMUX__GPIO37_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO37_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO37_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO37_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO37_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO38 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO38_FSEL_MASK (0x7U) +#define PINMUX__GPIO38_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO38_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO38_FSEL_SHIFT)) & PINMUX__GPIO38_FSEL_MASK) +#define PINMUX__GPIO38_DI_EN_MASK (0x8U) +#define PINMUX__GPIO38_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO38_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO38_DI_EN_SHIFT)) & PINMUX__GPIO38_DI_EN_MASK) +#define PINMUX__GPIO38_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO38_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO38_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO38_SLP_VAL_SHIFT)) & PINMUX__GPIO38_SLP_VAL_MASK) +#define PINMUX__GPIO38_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO38_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO38_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO38_SLP_OE_SHIFT)) & PINMUX__GPIO38_SLP_OE_MASK) +#define PINMUX__GPIO38_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO38_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO38_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO38_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO38_PIO_PULL_DN_MASK) +#define PINMUX__GPIO38_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO38_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO38_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO38_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO38_PIO_PULL_UP_MASK) +#define PINMUX__GPIO38_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO38_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO38_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO38_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO38_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO39 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO39_FSEL_MASK (0x7U) +#define PINMUX__GPIO39_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO39_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO39_FSEL_SHIFT)) & PINMUX__GPIO39_FSEL_MASK) +#define PINMUX__GPIO39_DI_EN_MASK (0x8U) +#define PINMUX__GPIO39_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO39_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO39_DI_EN_SHIFT)) & PINMUX__GPIO39_DI_EN_MASK) +#define PINMUX__GPIO39_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO39_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO39_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO39_SLP_VAL_SHIFT)) & PINMUX__GPIO39_SLP_VAL_MASK) +#define PINMUX__GPIO39_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO39_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO39_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO39_SLP_OE_SHIFT)) & PINMUX__GPIO39_SLP_OE_MASK) +#define PINMUX__GPIO39_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO39_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO39_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO39_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO39_PIO_PULL_DN_MASK) +#define PINMUX__GPIO39_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO39_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO39_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO39_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO39_PIO_PULL_UP_MASK) +#define PINMUX__GPIO39_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO39_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO39_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO39_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO39_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO40 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO40_FSEL_MASK (0x7U) +#define PINMUX__GPIO40_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO40_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO40_FSEL_SHIFT)) & PINMUX__GPIO40_FSEL_MASK) +#define PINMUX__GPIO40_DI_EN_MASK (0x8U) +#define PINMUX__GPIO40_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO40_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO40_DI_EN_SHIFT)) & PINMUX__GPIO40_DI_EN_MASK) +#define PINMUX__GPIO40_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO40_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO40_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO40_SLP_VAL_SHIFT)) & PINMUX__GPIO40_SLP_VAL_MASK) +#define PINMUX__GPIO40_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO40_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO40_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO40_SLP_OE_SHIFT)) & PINMUX__GPIO40_SLP_OE_MASK) +#define PINMUX__GPIO40_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO40_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO40_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO40_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO40_PIO_PULL_DN_MASK) +#define PINMUX__GPIO40_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO40_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO40_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO40_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO40_PIO_PULL_UP_MASK) +#define PINMUX__GPIO40_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO40_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO40_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO40_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO40_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO41 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO41_FSEL_MASK (0x7U) +#define PINMUX__GPIO41_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO41_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO41_FSEL_SHIFT)) & PINMUX__GPIO41_FSEL_MASK) +#define PINMUX__GPIO41_DI_EN_MASK (0x8U) +#define PINMUX__GPIO41_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO41_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO41_DI_EN_SHIFT)) & PINMUX__GPIO41_DI_EN_MASK) +#define PINMUX__GPIO41_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO41_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO41_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO41_SLP_VAL_SHIFT)) & PINMUX__GPIO41_SLP_VAL_MASK) +#define PINMUX__GPIO41_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO41_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO41_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO41_SLP_OE_SHIFT)) & PINMUX__GPIO41_SLP_OE_MASK) +#define PINMUX__GPIO41_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO41_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO41_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO41_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO41_PIO_PULL_DN_MASK) +#define PINMUX__GPIO41_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO41_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO41_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO41_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO41_PIO_PULL_UP_MASK) +#define PINMUX__GPIO41_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO41_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO41_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO41_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO41_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO42 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO42_FSEL_MASK (0x7U) +#define PINMUX__GPIO42_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO42_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO42_FSEL_SHIFT)) & PINMUX__GPIO42_FSEL_MASK) +#define PINMUX__GPIO42_DI_EN_MASK (0x8U) +#define PINMUX__GPIO42_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO42_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO42_DI_EN_SHIFT)) & PINMUX__GPIO42_DI_EN_MASK) +#define PINMUX__GPIO42_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO42_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO42_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO42_SLP_VAL_SHIFT)) & PINMUX__GPIO42_SLP_VAL_MASK) +#define PINMUX__GPIO42_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO42_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO42_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO42_SLP_OE_SHIFT)) & PINMUX__GPIO42_SLP_OE_MASK) +#define PINMUX__GPIO42_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO42_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO42_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO42_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO42_PIO_PULL_DN_MASK) +#define PINMUX__GPIO42_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO42_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO42_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO42_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO42_PIO_PULL_UP_MASK) +#define PINMUX__GPIO42_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO42_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO42_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO42_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO42_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO43 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO43_FSEL_MASK (0x7U) +#define PINMUX__GPIO43_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO43_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO43_FSEL_SHIFT)) & PINMUX__GPIO43_FSEL_MASK) +#define PINMUX__GPIO43_DI_EN_MASK (0x8U) +#define PINMUX__GPIO43_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO43_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO43_DI_EN_SHIFT)) & PINMUX__GPIO43_DI_EN_MASK) +#define PINMUX__GPIO43_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO43_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO43_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO43_SLP_VAL_SHIFT)) & PINMUX__GPIO43_SLP_VAL_MASK) +#define PINMUX__GPIO43_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO43_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO43_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO43_SLP_OE_SHIFT)) & PINMUX__GPIO43_SLP_OE_MASK) +#define PINMUX__GPIO43_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO43_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO43_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO43_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO43_PIO_PULL_DN_MASK) +#define PINMUX__GPIO43_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO43_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO43_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO43_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO43_PIO_PULL_UP_MASK) +#define PINMUX__GPIO43_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO43_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO43_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO43_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO43_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO44 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO44_FSEL_MASK (0x7U) +#define PINMUX__GPIO44_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO44_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO44_FSEL_SHIFT)) & PINMUX__GPIO44_FSEL_MASK) +#define PINMUX__GPIO44_DI_EN_MASK (0x8U) +#define PINMUX__GPIO44_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO44_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO44_DI_EN_SHIFT)) & PINMUX__GPIO44_DI_EN_MASK) +#define PINMUX__GPIO44_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO44_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO44_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO44_SLP_VAL_SHIFT)) & PINMUX__GPIO44_SLP_VAL_MASK) +#define PINMUX__GPIO44_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO44_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO44_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO44_SLP_OE_SHIFT)) & PINMUX__GPIO44_SLP_OE_MASK) +#define PINMUX__GPIO44_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO44_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO44_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO44_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO44_PIO_PULL_DN_MASK) +#define PINMUX__GPIO44_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO44_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO44_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO44_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO44_PIO_PULL_UP_MASK) +#define PINMUX__GPIO44_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO44_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO44_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO44_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO44_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO45 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO45_FSEL_MASK (0x7U) +#define PINMUX__GPIO45_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO45_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO45_FSEL_SHIFT)) & PINMUX__GPIO45_FSEL_MASK) +#define PINMUX__GPIO45_DI_EN_MASK (0x8U) +#define PINMUX__GPIO45_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO45_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO45_DI_EN_SHIFT)) & PINMUX__GPIO45_DI_EN_MASK) +#define PINMUX__GPIO45_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO45_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO45_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO45_SLP_VAL_SHIFT)) & PINMUX__GPIO45_SLP_VAL_MASK) +#define PINMUX__GPIO45_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO45_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO45_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO45_SLP_OE_SHIFT)) & PINMUX__GPIO45_SLP_OE_MASK) +#define PINMUX__GPIO45_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO45_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO45_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO45_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO45_PIO_PULL_DN_MASK) +#define PINMUX__GPIO45_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO45_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO45_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO45_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO45_PIO_PULL_UP_MASK) +#define PINMUX__GPIO45_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO45_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO45_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO45_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO45_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO46 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO46_FSEL_MASK (0x7U) +#define PINMUX__GPIO46_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO46_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO46_FSEL_SHIFT)) & PINMUX__GPIO46_FSEL_MASK) +#define PINMUX__GPIO46_DI_EN_MASK (0x8U) +#define PINMUX__GPIO46_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO46_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO46_DI_EN_SHIFT)) & PINMUX__GPIO46_DI_EN_MASK) +#define PINMUX__GPIO46_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO46_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO46_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO46_SLP_VAL_SHIFT)) & PINMUX__GPIO46_SLP_VAL_MASK) +#define PINMUX__GPIO46_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO46_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO46_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO46_SLP_OE_SHIFT)) & PINMUX__GPIO46_SLP_OE_MASK) +#define PINMUX__GPIO46_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO46_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO46_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO46_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO46_PIO_PULL_DN_MASK) +#define PINMUX__GPIO46_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO46_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO46_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO46_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO46_PIO_PULL_UP_MASK) +#define PINMUX__GPIO46_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO46_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO46_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO46_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO46_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO47 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO47_FSEL_MASK (0x7U) +#define PINMUX__GPIO47_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO47_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO47_FSEL_SHIFT)) & PINMUX__GPIO47_FSEL_MASK) +#define PINMUX__GPIO47_DI_EN_MASK (0x8U) +#define PINMUX__GPIO47_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO47_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO47_DI_EN_SHIFT)) & PINMUX__GPIO47_DI_EN_MASK) +#define PINMUX__GPIO47_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO47_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO47_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO47_SLP_VAL_SHIFT)) & PINMUX__GPIO47_SLP_VAL_MASK) +#define PINMUX__GPIO47_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO47_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO47_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO47_SLP_OE_SHIFT)) & PINMUX__GPIO47_SLP_OE_MASK) +#define PINMUX__GPIO47_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO47_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO47_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO47_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO47_PIO_PULL_DN_MASK) +#define PINMUX__GPIO47_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO47_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO47_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO47_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO47_PIO_PULL_UP_MASK) +#define PINMUX__GPIO47_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO47_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO47_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO47_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO47_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO48 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO48_FSEL_MASK (0x7U) +#define PINMUX__GPIO48_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO48_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO48_FSEL_SHIFT)) & PINMUX__GPIO48_FSEL_MASK) +#define PINMUX__GPIO48_DI_EN_MASK (0x8U) +#define PINMUX__GPIO48_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO48_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO48_DI_EN_SHIFT)) & PINMUX__GPIO48_DI_EN_MASK) +#define PINMUX__GPIO48_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO48_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO48_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO48_SLP_VAL_SHIFT)) & PINMUX__GPIO48_SLP_VAL_MASK) +#define PINMUX__GPIO48_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO48_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO48_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO48_SLP_OE_SHIFT)) & PINMUX__GPIO48_SLP_OE_MASK) +#define PINMUX__GPIO48_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO48_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO48_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO48_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO48_PIO_PULL_DN_MASK) +#define PINMUX__GPIO48_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO48_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO48_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO48_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO48_PIO_PULL_UP_MASK) +#define PINMUX__GPIO48_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO48_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO48_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO48_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO48_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO49 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO49_FSEL_MASK (0x7U) +#define PINMUX__GPIO49_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO49_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO49_FSEL_SHIFT)) & PINMUX__GPIO49_FSEL_MASK) +#define PINMUX__GPIO49_DI_EN_MASK (0x8U) +#define PINMUX__GPIO49_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO49_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO49_DI_EN_SHIFT)) & PINMUX__GPIO49_DI_EN_MASK) +#define PINMUX__GPIO49_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO49_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO49_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO49_SLP_VAL_SHIFT)) & PINMUX__GPIO49_SLP_VAL_MASK) +#define PINMUX__GPIO49_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO49_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO49_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO49_SLP_OE_SHIFT)) & PINMUX__GPIO49_SLP_OE_MASK) +#define PINMUX__GPIO49_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO49_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO49_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO49_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO49_PIO_PULL_DN_MASK) +#define PINMUX__GPIO49_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO49_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO49_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO49_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO49_PIO_PULL_UP_MASK) +#define PINMUX__GPIO49_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO49_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO49_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO49_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO49_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO50 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO50_FSEL_MASK (0x7U) +#define PINMUX__GPIO50_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO50_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO50_FSEL_SHIFT)) & PINMUX__GPIO50_FSEL_MASK) +#define PINMUX__GPIO50_DI_EN_MASK (0x8U) +#define PINMUX__GPIO50_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO50_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO50_DI_EN_SHIFT)) & PINMUX__GPIO50_DI_EN_MASK) +#define PINMUX__GPIO50_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO50_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO50_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO50_SLP_VAL_SHIFT)) & PINMUX__GPIO50_SLP_VAL_MASK) +#define PINMUX__GPIO50_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO50_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO50_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO50_SLP_OE_SHIFT)) & PINMUX__GPIO50_SLP_OE_MASK) +#define PINMUX__GPIO50_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO50_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO50_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO50_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO50_PIO_PULL_DN_MASK) +#define PINMUX__GPIO50_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO50_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO50_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO50_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO50_PIO_PULL_UP_MASK) +#define PINMUX__GPIO50_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO50_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO50_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO50_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO50_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO51 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO51_FSEL_MASK (0x7U) +#define PINMUX__GPIO51_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO51_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO51_FSEL_SHIFT)) & PINMUX__GPIO51_FSEL_MASK) +#define PINMUX__GPIO51_DI_EN_MASK (0x8U) +#define PINMUX__GPIO51_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO51_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO51_DI_EN_SHIFT)) & PINMUX__GPIO51_DI_EN_MASK) +#define PINMUX__GPIO51_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO51_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO51_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO51_SLP_VAL_SHIFT)) & PINMUX__GPIO51_SLP_VAL_MASK) +#define PINMUX__GPIO51_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO51_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO51_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO51_SLP_OE_SHIFT)) & PINMUX__GPIO51_SLP_OE_MASK) +#define PINMUX__GPIO51_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO51_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO51_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO51_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO51_PIO_PULL_DN_MASK) +#define PINMUX__GPIO51_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO51_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO51_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO51_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO51_PIO_PULL_UP_MASK) +#define PINMUX__GPIO51_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO51_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO51_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO51_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO51_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO52 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO52_FSEL_MASK (0x7U) +#define PINMUX__GPIO52_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO52_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO52_FSEL_SHIFT)) & PINMUX__GPIO52_FSEL_MASK) +#define PINMUX__GPIO52_DI_EN_MASK (0x8U) +#define PINMUX__GPIO52_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO52_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO52_DI_EN_SHIFT)) & PINMUX__GPIO52_DI_EN_MASK) +#define PINMUX__GPIO52_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO52_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO52_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO52_SLP_VAL_SHIFT)) & PINMUX__GPIO52_SLP_VAL_MASK) +#define PINMUX__GPIO52_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO52_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO52_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO52_SLP_OE_SHIFT)) & PINMUX__GPIO52_SLP_OE_MASK) +#define PINMUX__GPIO52_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO52_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO52_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO52_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO52_PIO_PULL_DN_MASK) +#define PINMUX__GPIO52_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO52_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO52_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO52_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO52_PIO_PULL_UP_MASK) +#define PINMUX__GPIO52_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO52_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO52_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO52_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO52_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO53 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO53_FSEL_MASK (0x7U) +#define PINMUX__GPIO53_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO53_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO53_FSEL_SHIFT)) & PINMUX__GPIO53_FSEL_MASK) +#define PINMUX__GPIO53_DI_EN_MASK (0x8U) +#define PINMUX__GPIO53_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO53_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO53_DI_EN_SHIFT)) & PINMUX__GPIO53_DI_EN_MASK) +#define PINMUX__GPIO53_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO53_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO53_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO53_SLP_VAL_SHIFT)) & PINMUX__GPIO53_SLP_VAL_MASK) +#define PINMUX__GPIO53_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO53_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO53_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO53_SLP_OE_SHIFT)) & PINMUX__GPIO53_SLP_OE_MASK) +#define PINMUX__GPIO53_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO53_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO53_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO53_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO53_PIO_PULL_DN_MASK) +#define PINMUX__GPIO53_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO53_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO53_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO53_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO53_PIO_PULL_UP_MASK) +#define PINMUX__GPIO53_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO53_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO53_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO53_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO53_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO54 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO54_FSEL_MASK (0x7U) +#define PINMUX__GPIO54_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO54_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO54_FSEL_SHIFT)) & PINMUX__GPIO54_FSEL_MASK) +#define PINMUX__GPIO54_DI_EN_MASK (0x8U) +#define PINMUX__GPIO54_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO54_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO54_DI_EN_SHIFT)) & PINMUX__GPIO54_DI_EN_MASK) +#define PINMUX__GPIO54_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO54_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO54_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO54_SLP_VAL_SHIFT)) & PINMUX__GPIO54_SLP_VAL_MASK) +#define PINMUX__GPIO54_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO54_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO54_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO54_SLP_OE_SHIFT)) & PINMUX__GPIO54_SLP_OE_MASK) +#define PINMUX__GPIO54_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO54_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO54_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO54_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO54_PIO_PULL_DN_MASK) +#define PINMUX__GPIO54_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO54_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO54_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO54_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO54_PIO_PULL_UP_MASK) +#define PINMUX__GPIO54_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO54_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO54_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO54_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO54_PIO_PULL_SEL_MASK) +/*! @} */ + +/*! @name _GPIO55 - padring pin Register */ +/*! @{ */ +#define PINMUX__GPIO55_FSEL_MASK (0x7U) +#define PINMUX__GPIO55_FSEL_SHIFT (0U) +/*! FSEL - padring function select + */ +#define PINMUX__GPIO55_FSEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO55_FSEL_SHIFT)) & PINMUX__GPIO55_FSEL_MASK) +#define PINMUX__GPIO55_DI_EN_MASK (0x8U) +#define PINMUX__GPIO55_DI_EN_SHIFT (3U) +/*! DI_EN - input enable control + * 0b0..receiver will be tri-stated + * 0b1..receive data from PAD + */ +#define PINMUX__GPIO55_DI_EN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO55_DI_EN_SHIFT)) & PINMUX__GPIO55_DI_EN_MASK) +#define PINMUX__GPIO55_SLP_VAL_MASK (0x10U) +#define PINMUX__GPIO55_SLP_VAL_SHIFT (4U) +/*! SLP_VAL - reserved for test purpose + */ +#define PINMUX__GPIO55_SLP_VAL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO55_SLP_VAL_SHIFT)) & PINMUX__GPIO55_SLP_VAL_MASK) +#define PINMUX__GPIO55_SLP_OE_MASK (0x20U) +#define PINMUX__GPIO55_SLP_OE_SHIFT (5U) +/*! SLP_OE - reserved for test purpose + */ +#define PINMUX__GPIO55_SLP_OE(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO55_SLP_OE_SHIFT)) & PINMUX__GPIO55_SLP_OE_MASK) +#define PINMUX__GPIO55_PIO_PULL_DN_MASK (0x2000U) +#define PINMUX__GPIO55_PIO_PULL_DN_SHIFT (13U) +/*! PIO_PULL_DN - pull-down enable + * 0b0..pull-down disabled + * 0b1..pull-down enabled + */ +#define PINMUX__GPIO55_PIO_PULL_DN(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO55_PIO_PULL_DN_SHIFT)) & PINMUX__GPIO55_PIO_PULL_DN_MASK) +#define PINMUX__GPIO55_PIO_PULL_UP_MASK (0x4000U) +#define PINMUX__GPIO55_PIO_PULL_UP_SHIFT (14U) +/*! PIO_PULL_UP - pull-up enable + * 0b0..pull-up disabled + * 0b1..pull-up enabled + */ +#define PINMUX__GPIO55_PIO_PULL_UP(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO55_PIO_PULL_UP_SHIFT)) & PINMUX__GPIO55_PIO_PULL_UP_MASK) +#define PINMUX__GPIO55_PIO_PULL_SEL_MASK (0x8000U) +#define PINMUX__GPIO55_PIO_PULL_SEL_SHIFT (15U) +/*! PIO_PULL_SEL - custom pull-up and -down configuration control + * 0b0..pull-up and pull-down from io_mux + * 0b1..pull-up and pull-down from bits [14:13] + */ +#define PINMUX__GPIO55_PIO_PULL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PINMUX__GPIO55_PIO_PULL_SEL_SHIFT)) & PINMUX__GPIO55_PIO_PULL_SEL_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group PINMUX_Register_Masks */ + + +/* PINMUX - Peripheral instance base addresses */ +/** Peripheral PIN_MUX base address */ +#define PIN_MUX_BASE (0x48010000u) +/** Peripheral PIN_MUX base pointer */ +#define PIN_MUX ((PINMUX_Type *)PIN_MUX_BASE) +/** Array initializer of PINMUX peripheral base addresses */ +#define PINMUX_BASE_ADDRS { PIN_MUX_BASE } +/** Array initializer of PINMUX peripheral base pointers */ +#define PINMUX_BASE_PTRS { PIN_MUX } + +/*! + * @} + */ /* end of group PINMUX_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- PMU Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PMU_Peripheral_Access_Layer PMU Peripheral Access Layer + * @{ + */ + +/** PMU - Register Layout Typedef */ +typedef struct { + __O uint32_t PWR_MODE; /**< Power mode control register, offset: 0x0 */ + __IO uint32_t BOOT_JTAG; /**< BOOT_JTAG register, offset: 0x4 */ + __I uint32_t LAST_RST_CAUSE; /**< Last Reset Cause Register, offset: 0x8 */ + __IO uint32_t LAST_RST_CLR; /**< Last Reset Cause Clear Register, offset: 0xC */ + __IO uint32_t WAKE_SRC_CLR; /**< Wake up source clear register, offset: 0x10 */ + __I uint32_t PWR_MODE_STATUS; /**< Power mode status register, offset: 0x14 */ + __IO uint32_t CLK_SRC; /**< Clock source selection register, offset: 0x18 */ + __I uint32_t WAKEUP_STATUS; /**< Wakeup status register, offset: 0x1C */ + __IO uint32_t PMIP_BRN_INT_SEL; /**< PMIP Brown Interrupt Select, offset: 0x20 */ + uint8_t RESERVED_0[4]; + __I uint32_t CLK_RDY; /**< Clock ready register, offset: 0x28 */ + __IO uint32_t RC32M_CTRL; /**< RC 32M control Register, offset: 0x2C */ + uint8_t RESERVED_1[4]; + __IO uint32_t SFLL_CTRL1; /**< SFLL control register 1, offset: 0x34 */ + __IO uint32_t ANA_GRP_CTRL0; /**< Analog group control register, offset: 0x38 */ + __IO uint32_t SFLL_CTRL0; /**< SFLL control register 2, offset: 0x3C */ + __IO uint32_t PWR_CFG; /**< Power configuration register, offset: 0x40 */ + __I uint32_t PWR_STAT; /**< Power status register, offset: 0x44 */ + __IO uint32_t WF_OPT0; /**< WF OPT Power-Saving register 0, offset: 0x48 */ + __IO uint32_t WF_OPT1; /**< WF OPT Power-Saving register 1, offset: 0x4C */ + uint8_t RESERVED_2[4]; + __IO uint32_t PMIP_BRN_CFG; /**< Brownout configuration register, offset: 0x54 */ + __IO uint32_t AUPLL_LOCK; /**< AUPLL lock status register, offset: 0x58 */ + __IO uint32_t ANA_GRP_CTRL1; /**< BG control register, offset: 0x5C */ + __IO uint32_t PMIP_PWR_CONFIG; /**< Power Configuration register, offset: 0x60 */ + uint8_t RESERVED_3[8]; + __IO uint32_t PMIP_TEST; /**< PMIP test register, offset: 0x6C */ + uint8_t RESERVED_4[8]; + __IO uint32_t AUPLL_CTRL0; /**< Audio PLL control register, offset: 0x78 */ + __IO uint32_t PERI_CLK_EN; /**< Peripheral clock enable register, offset: 0x7C */ + __IO uint32_t UART_FAST_CLK_DIV; /**< UART fast clock div register, offset: 0x80 */ + __IO uint32_t UART_SLOW_CLK_DIV; /**< UART slow clock div register, offset: 0x84 */ + __IO uint32_t UART_CLK_SEL; /**< UART clock select register, offset: 0x88 */ + __IO uint32_t MCU_CORE_CLK_DIV; /**< MCU CORE clock divider ratio register, offset: 0x8C */ + __IO uint32_t PERI0_CLK_DIV; /**< Peripheral0 clock divider ratio register, offset: 0x90 */ + __IO uint32_t PERI1_CLK_DIV; /**< Peripheral1 clock divider ratio register, offset: 0x94 */ + __IO uint32_t PERI2_CLK_DIV; /**< Peripheral2 Clock Divider Ratio Register, offset: 0x98 */ + __IO uint32_t CAU_CLK_SEL; /**< select signal for CAU MCLK register, offset: 0x9C */ + __IO uint32_t LOW_PWR_CTRL; /**< low power control in PM3/PM4 mode register, offset: 0xA0 */ + __IO uint32_t IO_PAD_PWR_CFG; /**< I/O Pad Power configuration register, offset: 0xA4 */ + __IO uint32_t EXT_SEL_REG0; /**< extra interrupt select register 0, offset: 0xA8 */ + uint8_t RESERVED_5[4]; + __IO uint32_t AUPLL_CTRL1; /**< USB and audio PLL control register, offset: 0xB0 */ + __IO uint32_t CAU_CTRL; /**< CAU Control Register, offset: 0xB4 */ + __IO uint32_t RC32K_CTRL0; /**< RC32k Control 0 Register, offset: 0xB8 */ + __IO uint32_t RC32K_CTRL1; /**< RC32k Control 1 Register, offset: 0xBC */ + __IO uint32_t XTAL32K_CTRL; /**< XTAL32k Control Register, offset: 0xC0 */ + __IO uint32_t PMIP_CMP_CTRL; /**< PMIP Comparator Control Register, offset: 0xC4 */ + __IO uint32_t PMIP_BRNDET_AV18; /**< PMIP Brownout AV18 Register, offset: 0xC8 */ + uint8_t RESERVED_6[4]; + __IO uint32_t PMIP_BRNDET_VBAT; /**< PMIP Brownout VBAT Register, offset: 0xD0 */ + __IO uint32_t PMIP_BRNDET_V12; /**< PMIP Brownout V12 Register, offset: 0xD4 */ + __IO uint32_t PMIP_LDO_CTRL; /**< PMIP LDO Control Register, offset: 0xD8 */ + __IO uint32_t PERI_CLK_SRC; /**< PERI Clock Source Register, offset: 0xDC */ + __IO uint32_t PMIP_RSVD; /**< Unused Register, offset: 0xE0 */ + __IO uint32_t GPT0_CTRL; /**< GPT0 Control Register, offset: 0xE4 */ + __IO uint32_t GPT1_CTRL; /**< GPT1 Control Register, offset: 0xE8 */ + __IO uint32_t GPT2_CTRL; /**< GPT2 Control Register, offset: 0xEC */ + __IO uint32_t GPT3_CTRL; /**< GPT3 Control Register, offset: 0xF0 */ + __IO uint32_t WAKEUP_EDGE_DETECT; /**< Wakeup Edge Detect Register, offset: 0xF4 */ + __IO uint32_t AON_CLK_CTRL; /**< AON Clock Control Register, offset: 0xF8 */ + __IO uint32_t PERI3_CTRL; /**< PERI3 Control Register, offset: 0xFC */ + __IO uint32_t IO_LPM_G03_; /**< I/O LPM G03 Register, offset: 0x100 */ + __IO uint32_t IO_LPM_G47_; /**< I/O LPM G47 Register, offset: 0x104 */ + __IO uint32_t IO_LPM_G811_; /**< I/O LPM G811 Register, offset: 0x108 */ + __IO uint32_t IO_LPM_G1215_; /**< I/O LPM G1215 Register, offset: 0x10C */ + __IO uint32_t IO_LPM_G1617_; /**< I/O LPM G1617 Register, offset: 0x110 */ + __IO uint32_t WAKEUP_MASK; /**< Wakeup Mask Interrupt Register, offset: 0x114 */ + __IO uint32_t WLAN_CTRL; /**< WLAN Control Register, offset: 0x118 */ + __IO uint32_t WLAN_CTRL1; /**< WLAN Control 1 Register, offset: 0x11C */ +} PMU_Type; + +/* ---------------------------------------------------------------------------- + -- PMU Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PMU_Register_Masks PMU Register Masks + * @{ + */ + +/*! @name PWR_MODE - Power mode control register */ +/*! @{ */ +#define PMU_PWR_MODE_PWR_MODE_MASK (0x3U) +#define PMU_PWR_MODE_PWR_MODE_SHIFT (0U) +/*! pwr_mode - Power mode switch + * 0b00..PM0 or PM1 + * 0b01.. + * 0b10.. + * 0b11.. + */ +#define PMU_PWR_MODE_PWR_MODE(x) (((uint32_t)(((uint32_t)(x)) << PMU_PWR_MODE_PWR_MODE_SHIFT)) & PMU_PWR_MODE_PWR_MODE_MASK) +/*! @} */ + +/*! @name BOOT_JTAG - BOOT_JTAG register */ +/*! @{ */ +#define PMU_BOOT_JTAG_JTAG_EN_MASK (0x1U) +#define PMU_BOOT_JTAG_JTAG_EN_SHIFT (0U) +/*! jtag_en - JTAG Enable + * 0b0..disable JTAG + * 0b1..enable JTAG + */ +#define PMU_BOOT_JTAG_JTAG_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_BOOT_JTAG_JTAG_EN_SHIFT)) & PMU_BOOT_JTAG_JTAG_EN_MASK) +#define PMU_BOOT_JTAG_BOOT_MODE_REG_MASK (0x6U) +#define PMU_BOOT_JTAG_BOOT_MODE_REG_SHIFT (1U) +/*! boot_mode_reg - Boot Mode + * 0b00..do not boot from Flash + * 0b01..boot from Flash + */ +#define PMU_BOOT_JTAG_BOOT_MODE_REG(x) (((uint32_t)(((uint32_t)(x)) << PMU_BOOT_JTAG_BOOT_MODE_REG_SHIFT)) & PMU_BOOT_JTAG_BOOT_MODE_REG_MASK) +#define PMU_BOOT_JTAG_FLASH_OPT_MASK (0x8U) +#define PMU_BOOT_JTAG_FLASH_OPT_SHIFT (3U) +/*! flash_opt - Flash opt + * 0b0..chip with Flash + * 0b1..chip without Flash + */ +#define PMU_BOOT_JTAG_FLASH_OPT(x) (((uint32_t)(((uint32_t)(x)) << PMU_BOOT_JTAG_FLASH_OPT_SHIFT)) & PMU_BOOT_JTAG_FLASH_OPT_MASK) +/*! @} */ + +/*! @name LAST_RST_CAUSE - Last Reset Cause Register */ +/*! @{ */ +#define PMU_LAST_RST_CAUSE_BROWNOUT_VBAT_MASK (0x1U) +#define PMU_LAST_RST_CAUSE_BROWNOUT_VBAT_SHIFT (0U) +/*! brownout_vbat - VBAT power brownout + * 0b0..VBAT power brownout not detected + * 0b1..VBAT power brownout detected + */ +#define PMU_LAST_RST_CAUSE_BROWNOUT_VBAT(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CAUSE_BROWNOUT_VBAT_SHIFT)) & PMU_LAST_RST_CAUSE_BROWNOUT_VBAT_MASK) +#define PMU_LAST_RST_CAUSE_BROWNOUT_V12_MASK (0x2U) +#define PMU_LAST_RST_CAUSE_BROWNOUT_V12_SHIFT (1U) +/*! brownout_v12 - AV12 power brownout + * 0b0..AV12 power brownout not detected + * 0b1..AV12 power brownout detected + */ +#define PMU_LAST_RST_CAUSE_BROWNOUT_V12(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CAUSE_BROWNOUT_V12_SHIFT)) & PMU_LAST_RST_CAUSE_BROWNOUT_V12_MASK) +#define PMU_LAST_RST_CAUSE_BROWNOUT_AV18_MASK (0x4U) +#define PMU_LAST_RST_CAUSE_BROWNOUT_AV18_SHIFT (2U) +/*! brownout_av18 - AV18 power brownout + * 0b0..AV18 power brownout not detected + * 0b1..AV18 power brownout detected + */ +#define PMU_LAST_RST_CAUSE_BROWNOUT_AV18(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CAUSE_BROWNOUT_AV18_SHIFT)) & PMU_LAST_RST_CAUSE_BROWNOUT_AV18_MASK) +#define PMU_LAST_RST_CAUSE_CM3_SYSRESETREQ_MASK (0x8U) +#define PMU_LAST_RST_CAUSE_CM3_SYSRESETREQ_SHIFT (3U) +/*! cm3_sysresetreq - CM3 System software reset request + * 0b0..reset cause is not system software reset request + * 0b1..reset cause is system software reset request + */ +#define PMU_LAST_RST_CAUSE_CM3_SYSRESETREQ(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CAUSE_CM3_SYSRESETREQ_SHIFT)) & PMU_LAST_RST_CAUSE_CM3_SYSRESETREQ_MASK) +#define PMU_LAST_RST_CAUSE_CM3_LOCKUP_MASK (0x10U) +#define PMU_LAST_RST_CAUSE_CM3_LOCKUP_SHIFT (4U) +/*! cm3_lockup - CM3 Lockup + * 0b0..reset cause is not lockup + * 0b1..reset cause is lockup + */ +#define PMU_LAST_RST_CAUSE_CM3_LOCKUP(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CAUSE_CM3_LOCKUP_SHIFT)) & PMU_LAST_RST_CAUSE_CM3_LOCKUP_MASK) +#define PMU_LAST_RST_CAUSE_WDT_RST_MASK (0x20U) +#define PMU_LAST_RST_CAUSE_WDT_RST_SHIFT (5U) +/*! wdt_rst - WDT Reset + * 0b0..reset cause is not watchdog timer + * 0b1..reset cause is watchdog timer + */ +#define PMU_LAST_RST_CAUSE_WDT_RST(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CAUSE_WDT_RST_SHIFT)) & PMU_LAST_RST_CAUSE_WDT_RST_MASK) +/*! @} */ + +/*! @name LAST_RST_CLR - Last Reset Cause Clear Register */ +/*! @{ */ +#define PMU_LAST_RST_CLR_BROWNOUT_VBAT_CLR_MASK (0x1U) +#define PMU_LAST_RST_CLR_BROWNOUT_VBAT_CLR_SHIFT (0U) +/*! brownout_vbat_clr - Brownout VBAT Clear + */ +#define PMU_LAST_RST_CLR_BROWNOUT_VBAT_CLR(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CLR_BROWNOUT_VBAT_CLR_SHIFT)) & PMU_LAST_RST_CLR_BROWNOUT_VBAT_CLR_MASK) +#define PMU_LAST_RST_CLR_BROWNOUT_V12_CLR_MASK (0x2U) +#define PMU_LAST_RST_CLR_BROWNOUT_V12_CLR_SHIFT (1U) +/*! brownout_v12_clr - Brownout V12 Clear + */ +#define PMU_LAST_RST_CLR_BROWNOUT_V12_CLR(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CLR_BROWNOUT_V12_CLR_SHIFT)) & PMU_LAST_RST_CLR_BROWNOUT_V12_CLR_MASK) +#define PMU_LAST_RST_CLR_BROWNOUT_AV18_CLR_MASK (0x4U) +#define PMU_LAST_RST_CLR_BROWNOUT_AV18_CLR_SHIFT (2U) +/*! brownout_av18_clr - Brownout V18 Clear + */ +#define PMU_LAST_RST_CLR_BROWNOUT_AV18_CLR(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CLR_BROWNOUT_AV18_CLR_SHIFT)) & PMU_LAST_RST_CLR_BROWNOUT_AV18_CLR_MASK) +#define PMU_LAST_RST_CLR_CM3_SYSRESETREQ_CLR_MASK (0x8U) +#define PMU_LAST_RST_CLR_CM3_SYSRESETREQ_CLR_SHIFT (3U) +/*! cm3_sysresetreq_clr - Clear system reset request + */ +#define PMU_LAST_RST_CLR_CM3_SYSRESETREQ_CLR(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CLR_CM3_SYSRESETREQ_CLR_SHIFT)) & PMU_LAST_RST_CLR_CM3_SYSRESETREQ_CLR_MASK) +#define PMU_LAST_RST_CLR_CM3_LOCKUP_CLR_MASK (0x10U) +#define PMU_LAST_RST_CLR_CM3_LOCKUP_CLR_SHIFT (4U) +/*! cm3_lockup_clr - Clear lockup request + */ +#define PMU_LAST_RST_CLR_CM3_LOCKUP_CLR(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CLR_CM3_LOCKUP_CLR_SHIFT)) & PMU_LAST_RST_CLR_CM3_LOCKUP_CLR_MASK) +#define PMU_LAST_RST_CLR_WDT_RST_CLR_MASK (0x20U) +#define PMU_LAST_RST_CLR_WDT_RST_CLR_SHIFT (5U) +/*! wdt_rst_clr - Clear watchdog timer reset request + */ +#define PMU_LAST_RST_CLR_WDT_RST_CLR(x) (((uint32_t)(((uint32_t)(x)) << PMU_LAST_RST_CLR_WDT_RST_CLR_SHIFT)) & PMU_LAST_RST_CLR_WDT_RST_CLR_MASK) +/*! @} */ + +/*! @name WAKE_SRC_CLR - Wake up source clear register */ +/*! @{ */ +#define PMU_WAKE_SRC_CLR_CLR_PIN0_INT_MASK (0x1U) +#define PMU_WAKE_SRC_CLR_CLR_PIN0_INT_SHIFT (0U) +/*! clr_pin0_int - Clear Pin0 interrupt request + */ +#define PMU_WAKE_SRC_CLR_CLR_PIN0_INT(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKE_SRC_CLR_CLR_PIN0_INT_SHIFT)) & PMU_WAKE_SRC_CLR_CLR_PIN0_INT_MASK) +#define PMU_WAKE_SRC_CLR_CLR_PIN1_INT_MASK (0x2U) +#define PMU_WAKE_SRC_CLR_CLR_PIN1_INT_SHIFT (1U) +/*! clr_pin1_int - Clear Pin1 interrupt request + */ +#define PMU_WAKE_SRC_CLR_CLR_PIN1_INT(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKE_SRC_CLR_CLR_PIN1_INT_SHIFT)) & PMU_WAKE_SRC_CLR_CLR_PIN1_INT_MASK) +#define PMU_WAKE_SRC_CLR_CLR_WL_INT_MASK (0x4U) +#define PMU_WAKE_SRC_CLR_CLR_WL_INT_SHIFT (2U) +/*! clr_wl_int - Clear WL interrupt request + */ +#define PMU_WAKE_SRC_CLR_CLR_WL_INT(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKE_SRC_CLR_CLR_WL_INT_SHIFT)) & PMU_WAKE_SRC_CLR_CLR_WL_INT_MASK) +#define PMU_WAKE_SRC_CLR_CLR_RTC_INT_MASK (0x8U) +#define PMU_WAKE_SRC_CLR_CLR_RTC_INT_SHIFT (3U) +/*! clr_rtc_int - Clear RTC interrupt request + */ +#define PMU_WAKE_SRC_CLR_CLR_RTC_INT(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKE_SRC_CLR_CLR_RTC_INT_SHIFT)) & PMU_WAKE_SRC_CLR_CLR_RTC_INT_MASK) +#define PMU_WAKE_SRC_CLR_CLR_COMP_INT_MASK (0x10U) +#define PMU_WAKE_SRC_CLR_CLR_COMP_INT_SHIFT (4U) +/*! clr_comp_int - Clear PMIP comp interrupt request + */ +#define PMU_WAKE_SRC_CLR_CLR_COMP_INT(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKE_SRC_CLR_CLR_COMP_INT_SHIFT)) & PMU_WAKE_SRC_CLR_CLR_COMP_INT_MASK) +/*! @} */ + +/*! @name PWR_MODE_STATUS - Power mode status register */ +/*! @{ */ +#define PMU_PWR_MODE_STATUS_PWR_MODE_STATUS_MASK (0x3U) +#define PMU_PWR_MODE_STATUS_PWR_MODE_STATUS_SHIFT (0U) +/*! pwr_mode_status - Power mode status + * 0b00..reset the power system + * 0b01..do not reset the power system + */ +#define PMU_PWR_MODE_STATUS_PWR_MODE_STATUS(x) (((uint32_t)(((uint32_t)(x)) << PMU_PWR_MODE_STATUS_PWR_MODE_STATUS_SHIFT)) & PMU_PWR_MODE_STATUS_PWR_MODE_STATUS_MASK) +/*! @} */ + +/*! @name CLK_SRC - Clock source selection register */ +/*! @{ */ +#define PMU_CLK_SRC_SYS_CLK_SEL_MASK (0x3U) +#define PMU_CLK_SRC_SYS_CLK_SEL_SHIFT (0U) +/*! sys_clk_sel - System Clock Select + * 0b00..PLL 128 MHz clock + * 0b01..RC 32 MHz clock + * 0b10..XTAL 32 MHz clock + * 0b11..RC 32 MHz clock + */ +#define PMU_CLK_SRC_SYS_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_CLK_SRC_SYS_CLK_SEL_SHIFT)) & PMU_CLK_SRC_SYS_CLK_SEL_MASK) +/*! @} */ + +/*! @name WAKEUP_STATUS - Wakeup status register */ +/*! @{ */ +#define PMU_WAKEUP_STATUS_PIN0_WAKEUP_STATUS_MASK (0x1U) +#define PMU_WAKEUP_STATUS_PIN0_WAKEUP_STATUS_SHIFT (0U) +/*! pin0_wakeup_status - External Pin0 wakeup status + */ +#define PMU_WAKEUP_STATUS_PIN0_WAKEUP_STATUS(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_STATUS_PIN0_WAKEUP_STATUS_SHIFT)) & PMU_WAKEUP_STATUS_PIN0_WAKEUP_STATUS_MASK) +#define PMU_WAKEUP_STATUS_PIN1_WAKEUP_STATUS_MASK (0x2U) +#define PMU_WAKEUP_STATUS_PIN1_WAKEUP_STATUS_SHIFT (1U) +/*! pin1_wakeup_status - External Pin1 wakeup status + */ +#define PMU_WAKEUP_STATUS_PIN1_WAKEUP_STATUS(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_STATUS_PIN1_WAKEUP_STATUS_SHIFT)) & PMU_WAKEUP_STATUS_PIN1_WAKEUP_STATUS_MASK) +#define PMU_WAKEUP_STATUS_WLINT_WAKEUP_STATUS_MASK (0x4U) +#define PMU_WAKEUP_STATUS_WLINT_WAKEUP_STATUS_SHIFT (2U) +/*! wlint_wakeup_status - WLAN interrupt wakeup status + */ +#define PMU_WAKEUP_STATUS_WLINT_WAKEUP_STATUS(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_STATUS_WLINT_WAKEUP_STATUS_SHIFT)) & PMU_WAKEUP_STATUS_WLINT_WAKEUP_STATUS_MASK) +#define PMU_WAKEUP_STATUS_RTC_WAKEUP_STATUS_MASK (0x8U) +#define PMU_WAKEUP_STATUS_RTC_WAKEUP_STATUS_SHIFT (3U) +/*! rtc_wakeup_status - RTC wakeup status + */ +#define PMU_WAKEUP_STATUS_RTC_WAKEUP_STATUS(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_STATUS_RTC_WAKEUP_STATUS_SHIFT)) & PMU_WAKEUP_STATUS_RTC_WAKEUP_STATUS_MASK) +#define PMU_WAKEUP_STATUS_PMIP_COMP_WAKEUP_STATUS_MASK (0x10U) +#define PMU_WAKEUP_STATUS_PMIP_COMP_WAKEUP_STATUS_SHIFT (4U) +/*! pmip_comp_wakeup_status - pmip_comp wakeup status + */ +#define PMU_WAKEUP_STATUS_PMIP_COMP_WAKEUP_STATUS(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_STATUS_PMIP_COMP_WAKEUP_STATUS_SHIFT)) & PMU_WAKEUP_STATUS_PMIP_COMP_WAKEUP_STATUS_MASK) +/*! @} */ + +/*! @name PMIP_BRN_INT_SEL - PMIP Brown Interrupt Select */ +/*! @{ */ +#define PMU_PMIP_BRN_INT_SEL_PMIP_BRN_INT_SEL_MASK (0x1U) +#define PMU_PMIP_BRN_INT_SEL_PMIP_BRN_INT_SEL_SHIFT (0U) +/*! pmip_brn_int_sel - PMIP Brownout Interrupt Select + * 0b0..generate an interrupt when VBAT brownout + * 0b1..reset chip when VBAT brownout + */ +#define PMU_PMIP_BRN_INT_SEL_PMIP_BRN_INT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRN_INT_SEL_PMIP_BRN_INT_SEL_SHIFT)) & PMU_PMIP_BRN_INT_SEL_PMIP_BRN_INT_SEL_MASK) +/*! @} */ + +/*! @name CLK_RDY - Clock ready register */ +/*! @{ */ +#define PMU_CLK_RDY_PLL_CLK_RDY_MASK (0x1U) +#define PMU_CLK_RDY_PLL_CLK_RDY_SHIFT (0U) +/*! pll_clk_rdy - PLL clock ready + * 0b0..PLL clock not ready for use + * 0b1..PLL clock ready for use + */ +#define PMU_CLK_RDY_PLL_CLK_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_CLK_RDY_PLL_CLK_RDY_SHIFT)) & PMU_CLK_RDY_PLL_CLK_RDY_MASK) +#define PMU_CLK_RDY_RC32M_RDY_MASK (0x4U) +#define PMU_CLK_RDY_RC32M_RDY_SHIFT (2U) +/*! rc32m_rdy - RC 32M Ready + * 0b0..RC 32M clock not ready for use + * 0b1..RC 32M clock ready for use + */ +#define PMU_CLK_RDY_RC32M_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_CLK_RDY_RC32M_RDY_SHIFT)) & PMU_CLK_RDY_RC32M_RDY_MASK) +#define PMU_CLK_RDY_X32K_RDY_MASK (0x8U) +#define PMU_CLK_RDY_X32K_RDY_SHIFT (3U) +/*! x32k_rdy - XTAL 32k Ready + * 0b0..XTAL 32k clock not ready for use + * 0b1..XTAL 32k clock ready for use + */ +#define PMU_CLK_RDY_X32K_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_CLK_RDY_X32K_RDY_SHIFT)) & PMU_CLK_RDY_X32K_RDY_MASK) +#define PMU_CLK_RDY_PLL_AUDIO_RDY_MASK (0x10U) +#define PMU_CLK_RDY_PLL_AUDIO_RDY_SHIFT (4U) +/*! pll_audio_rdy - PLL audio ready + * 0b0..PLL audio clock not ready for use + * 0b1..PLL audio clock ready for use + */ +#define PMU_CLK_RDY_PLL_AUDIO_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_CLK_RDY_PLL_AUDIO_RDY_SHIFT)) & PMU_CLK_RDY_PLL_AUDIO_RDY_MASK) +#define PMU_CLK_RDY_XTAL32M_CLK_RDY_MASK (0x40U) +#define PMU_CLK_RDY_XTAL32M_CLK_RDY_SHIFT (6U) +/*! xtal32m_clk_rdy - XTAL32M Clock Ready + */ +#define PMU_CLK_RDY_XTAL32M_CLK_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_CLK_RDY_XTAL32M_CLK_RDY_SHIFT)) & PMU_CLK_RDY_XTAL32M_CLK_RDY_MASK) +/*! @} */ + +/*! @name RC32M_CTRL - RC 32M control Register */ +/*! @{ */ +#define PMU_RC32M_CTRL_CAL_IN_PROGRESS_MASK (0x1U) +#define PMU_RC32M_CTRL_CAL_IN_PROGRESS_SHIFT (0U) +/*! cal_in_progress - Asserts high when calibration in progress + */ +#define PMU_RC32M_CTRL_CAL_IN_PROGRESS(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32M_CTRL_CAL_IN_PROGRESS_SHIFT)) & PMU_RC32M_CTRL_CAL_IN_PROGRESS_MASK) +#define PMU_RC32M_CTRL_CAL_ALLOW_MASK (0x2U) +#define PMU_RC32M_CTRL_CAL_ALLOW_SHIFT (1U) +/*! cal_allow - Allow calibration command from PMU + */ +#define PMU_RC32M_CTRL_CAL_ALLOW(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32M_CTRL_CAL_ALLOW_SHIFT)) & PMU_RC32M_CTRL_CAL_ALLOW_MASK) +/*! @} */ + +/*! @name SFLL_CTRL1 - SFLL control register 1 */ +/*! @{ */ +#define PMU_SFLL_CTRL1_SFLL_REFDIV_MASK (0x1FFU) +#define PMU_SFLL_CTRL1_SFLL_REFDIV_SHIFT (0U) +/*! sfll_refdiv - Reference clock divider select + */ +#define PMU_SFLL_CTRL1_SFLL_REFDIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL1_SFLL_REFDIV_SHIFT)) & PMU_SFLL_CTRL1_SFLL_REFDIV_MASK) +#define PMU_SFLL_CTRL1_SFLL_TEST_ANA_MASK (0xE00U) +#define PMU_SFLL_CTRL1_SFLL_TEST_ANA_SHIFT (9U) +/*! sfll_test_ana - DC points Testing control + */ +#define PMU_SFLL_CTRL1_SFLL_TEST_ANA(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL1_SFLL_TEST_ANA_SHIFT)) & PMU_SFLL_CTRL1_SFLL_TEST_ANA_MASK) +#define PMU_SFLL_CTRL1_SFLL_DIV_SEL_MASK (0x180000U) +#define PMU_SFLL_CTRL1_SFLL_DIV_SEL_SHIFT (19U) +/*! sfll_div_sel - Post divider + * 0b00..divide by 1 (bypass) + * 0b01..divide by 2 + * 0b10..divide by 4 + * 0b11..divide by 8 + */ +#define PMU_SFLL_CTRL1_SFLL_DIV_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL1_SFLL_DIV_SEL_SHIFT)) & PMU_SFLL_CTRL1_SFLL_DIV_SEL_MASK) +#define PMU_SFLL_CTRL1_SFLL_RESERVE_IN_MASK (0x7F800000U) +#define PMU_SFLL_CTRL1_SFLL_RESERVE_IN_SHIFT (23U) +/*! sfll_reserve_in - SFLL Reserved Input + */ +#define PMU_SFLL_CTRL1_SFLL_RESERVE_IN(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL1_SFLL_RESERVE_IN_SHIFT)) & PMU_SFLL_CTRL1_SFLL_RESERVE_IN_MASK) +#define PMU_SFLL_CTRL1_REG_PLL_PU_INT_MASK (0x80000000U) +#define PMU_SFLL_CTRL1_REG_PLL_PU_INT_SHIFT (31U) +/*! reg_pll_pu_int - PLL PU Int + */ +#define PMU_SFLL_CTRL1_REG_PLL_PU_INT(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL1_REG_PLL_PU_INT_SHIFT)) & PMU_SFLL_CTRL1_REG_PLL_PU_INT_MASK) +/*! @} */ + +/*! @name ANA_GRP_CTRL0 - Analog group control register */ +/*! @{ */ +#define PMU_ANA_GRP_CTRL0_PU_OSC_MASK (0x1U) +#define PMU_ANA_GRP_CTRL0_PU_OSC_SHIFT (0U) +/*! PU_OSC - Power-up signal for OSC circuit + */ +#define PMU_ANA_GRP_CTRL0_PU_OSC(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL0_PU_OSC_SHIFT)) & PMU_ANA_GRP_CTRL0_PU_OSC_MASK) +#define PMU_ANA_GRP_CTRL0_PU_XTAL_MASK (0x2U) +#define PMU_ANA_GRP_CTRL0_PU_XTAL_SHIFT (1U) +/*! PU_XTAL - Power-up signal for XTAL circuit + */ +#define PMU_ANA_GRP_CTRL0_PU_XTAL(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL0_PU_XTAL_SHIFT)) & PMU_ANA_GRP_CTRL0_PU_XTAL_MASK) +#define PMU_ANA_GRP_CTRL0_PU_MASK (0x4U) +#define PMU_ANA_GRP_CTRL0_PU_SHIFT (2U) +/*! PU - Power-up signal for whole block + */ +#define PMU_ANA_GRP_CTRL0_PU(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL0_PU_SHIFT)) & PMU_ANA_GRP_CTRL0_PU_MASK) +/*! @} */ + +/*! @name SFLL_CTRL0 - SFLL control register 2 */ +/*! @{ */ +#define PMU_SFLL_CTRL0_SFLL_PU_MASK (0x1U) +#define PMU_SFLL_CTRL0_SFLL_PU_SHIFT (0U) +/*! sfll_pu - Power-up signal for the Flock + * 0b0..power down + * 0b1..power up + */ +#define PMU_SFLL_CTRL0_SFLL_PU(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL0_SFLL_PU_SHIFT)) & PMU_SFLL_CTRL0_SFLL_PU_MASK) +#define PMU_SFLL_CTRL0_SFLL_FBDIV_MASK (0xFF80U) +#define PMU_SFLL_CTRL0_SFLL_FBDIV_SHIFT (7U) +/*! sfll_fbdiv - Feedback clock divider select + */ +#define PMU_SFLL_CTRL0_SFLL_FBDIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL0_SFLL_FBDIV_SHIFT)) & PMU_SFLL_CTRL0_SFLL_FBDIV_MASK) +#define PMU_SFLL_CTRL0_SFLL_KVCO_MASK (0x300000U) +#define PMU_SFLL_CTRL0_SFLL_KVCO_SHIFT (20U) +/*! sfll_kvco - Select VCO Running Range Default value for output clock=200M + */ +#define PMU_SFLL_CTRL0_SFLL_KVCO(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL0_SFLL_KVCO_SHIFT)) & PMU_SFLL_CTRL0_SFLL_KVCO_MASK) +#define PMU_SFLL_CTRL0_SFLL_REFCLK_SEL_MASK (0x2000000U) +#define PMU_SFLL_CTRL0_SFLL_REFCLK_SEL_SHIFT (25U) +/*! sfll_refclk_sel - Reference clock source select + * 0b0..RC 32M + * 0b1..XTAL 32M from WLAN + */ +#define PMU_SFLL_CTRL0_SFLL_REFCLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL0_SFLL_REFCLK_SEL_SHIFT)) & PMU_SFLL_CTRL0_SFLL_REFCLK_SEL_MASK) +#define PMU_SFLL_CTRL0_SFLL_LOCK_MASK (0x4000000U) +#define PMU_SFLL_CTRL0_SFLL_LOCK_SHIFT (26U) +/*! sfll_lock - SFLL Lock + * 0b0..PLL module unlocked + * 0b1..PLL module locked + */ +#define PMU_SFLL_CTRL0_SFLL_LOCK(x) (((uint32_t)(((uint32_t)(x)) << PMU_SFLL_CTRL0_SFLL_LOCK_SHIFT)) & PMU_SFLL_CTRL0_SFLL_LOCK_MASK) +/*! @} */ + +/*! @name PWR_CFG - Power configuration register */ +/*! @{ */ +#define PMU_PWR_CFG_PM3_RET_MEM_CFG_MASK (0x7F0U) +#define PMU_PWR_CFG_PM3_RET_MEM_CFG_SHIFT (4U) +/*! PM3_RET_MEM_CFG - Retention memory enable register in PM3 mode + */ +#define PMU_PWR_CFG_PM3_RET_MEM_CFG(x) (((uint32_t)(((uint32_t)(x)) << PMU_PWR_CFG_PM3_RET_MEM_CFG_SHIFT)) & PMU_PWR_CFG_PM3_RET_MEM_CFG_MASK) +/*! @} */ + +/*! @name PWR_STAT - Power status register */ +/*! @{ */ +#define PMU_PWR_STAT_V12_LDO_RDY_MASK (0x2U) +#define PMU_PWR_STAT_V12_LDO_RDY_SHIFT (1U) +/*! v12_ldo_rdy - v12_ldo_rdy + */ +#define PMU_PWR_STAT_V12_LDO_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_PWR_STAT_V12_LDO_RDY_SHIFT)) & PMU_PWR_STAT_V12_LDO_RDY_MASK) +#define PMU_PWR_STAT_AV18_RDY_MASK (0x80U) +#define PMU_PWR_STAT_AV18_RDY_SHIFT (7U) +/*! av18_rdy - av18_rdy + */ +#define PMU_PWR_STAT_AV18_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_PWR_STAT_AV18_RDY_SHIFT)) & PMU_PWR_STAT_AV18_RDY_MASK) +/*! @} */ + +/*! @name WF_OPT0 - WF OPT Power-Saving register 0 */ +/*! @{ */ +#define PMU_WF_OPT0_MAX_FREQ_CTRL_MASK (0x2U) +#define PMU_WF_OPT0_MAX_FREQ_CTRL_SHIFT (1U) +/*! max_freq_ctrl - maximum frequency control + * 0b0..normal mode + * 0b1..maximum frequency is 125 MHz + */ +#define PMU_WF_OPT0_MAX_FREQ_CTRL(x) (((uint32_t)(((uint32_t)(x)) << PMU_WF_OPT0_MAX_FREQ_CTRL_SHIFT)) & PMU_WF_OPT0_MAX_FREQ_CTRL_MASK) +#define PMU_WF_OPT0_MEM_CTRL_MASK (0x4U) +#define PMU_WF_OPT0_MEM_CTRL_SHIFT (2U) +/*! mem_ctrl - sram_memory control + * 0b0..normal mode + * 0b1..limit SRAM to 192K + */ +#define PMU_WF_OPT0_MEM_CTRL(x) (((uint32_t)(((uint32_t)(x)) << PMU_WF_OPT0_MEM_CTRL_SHIFT)) & PMU_WF_OPT0_MEM_CTRL_MASK) +/*! @} */ + +/*! @name WF_OPT1 - WF OPT Power-Saving register 1 */ +/*! @{ */ +#define PMU_WF_OPT1_SPARE_MASK (0xCU) +#define PMU_WF_OPT1_SPARE_SHIFT (2U) +/*! spare - Spare + */ +#define PMU_WF_OPT1_SPARE(x) (((uint32_t)(((uint32_t)(x)) << PMU_WF_OPT1_SPARE_SHIFT)) & PMU_WF_OPT1_SPARE_MASK) +/*! @} */ + +/*! @name PMIP_BRN_CFG - Brownout configuration register */ +/*! @{ */ +#define PMU_PMIP_BRN_CFG_BRNDET_V12_RST_EN_MASK (0x1U) +#define PMU_PMIP_BRN_CFG_BRNDET_V12_RST_EN_SHIFT (0U) +/*! brndet_v12_rst_en - Brownout AV12 Reset Enable + */ +#define PMU_PMIP_BRN_CFG_BRNDET_V12_RST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRN_CFG_BRNDET_V12_RST_EN_SHIFT)) & PMU_PMIP_BRN_CFG_BRNDET_V12_RST_EN_MASK) +#define PMU_PMIP_BRN_CFG_BRNDET_VBAT_RST_EN_MASK (0x2U) +#define PMU_PMIP_BRN_CFG_BRNDET_VBAT_RST_EN_SHIFT (1U) +/*! brndet_vbat_rst_en - Brownout VBAT Reset Enable + */ +#define PMU_PMIP_BRN_CFG_BRNDET_VBAT_RST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRN_CFG_BRNDET_VBAT_RST_EN_SHIFT)) & PMU_PMIP_BRN_CFG_BRNDET_VBAT_RST_EN_MASK) +#define PMU_PMIP_BRN_CFG_BRNDET_AV18_RST_EN_MASK (0x8U) +#define PMU_PMIP_BRN_CFG_BRNDET_AV18_RST_EN_SHIFT (3U) +/*! brndet_av18_rst_en - Brownout AV18 Reset Enable + */ +#define PMU_PMIP_BRN_CFG_BRNDET_AV18_RST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRN_CFG_BRNDET_AV18_RST_EN_SHIFT)) & PMU_PMIP_BRN_CFG_BRNDET_AV18_RST_EN_MASK) +/*! @} */ + +/*! @name AUPLL_LOCK - AUPLL lock status register */ +/*! @{ */ +#define PMU_AUPLL_LOCK_RESERVED_OUT_0_MASK (0x3U) +#define PMU_AUPLL_LOCK_RESERVED_OUT_0_SHIFT (0U) +/*! Reserved_out_0 - Reserved Out 0 + */ +#define PMU_AUPLL_LOCK_RESERVED_OUT_0(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_LOCK_RESERVED_OUT_0_SHIFT)) & PMU_AUPLL_LOCK_RESERVED_OUT_0_MASK) +#define PMU_AUPLL_LOCK_AUPLL_LOCK_MASK (0x4U) +#define PMU_AUPLL_LOCK_AUPLL_LOCK_SHIFT (2U) +/*! aupll_lock - AUPLL Lock + */ +#define PMU_AUPLL_LOCK_AUPLL_LOCK(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_LOCK_AUPLL_LOCK_SHIFT)) & PMU_AUPLL_LOCK_AUPLL_LOCK_MASK) +#define PMU_AUPLL_LOCK_RESERVED_OUT_1_MASK (0xFFFFFFF8U) +#define PMU_AUPLL_LOCK_RESERVED_OUT_1_SHIFT (3U) +/*! Reserved_out_1 - Reserved Out 1 + */ +#define PMU_AUPLL_LOCK_RESERVED_OUT_1(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_LOCK_RESERVED_OUT_1_SHIFT)) & PMU_AUPLL_LOCK_RESERVED_OUT_1_MASK) +/*! @} */ + +/*! @name ANA_GRP_CTRL1 - BG control register */ +/*! @{ */ +#define PMU_ANA_GRP_CTRL1_BG_CTRL_MASK (0x7U) +#define PMU_ANA_GRP_CTRL1_BG_CTRL_SHIFT (0U) +/*! bg_ctrl - bandgap control + */ +#define PMU_ANA_GRP_CTRL1_BG_CTRL(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL1_BG_CTRL_SHIFT)) & PMU_ANA_GRP_CTRL1_BG_CTRL_MASK) +#define PMU_ANA_GRP_CTRL1_GAINX2_MASK (0x8U) +#define PMU_ANA_GRP_CTRL1_GAINX2_SHIFT (3U) +/*! GAINX2 - OSC gain control + */ +#define PMU_ANA_GRP_CTRL1_GAINX2(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL1_GAINX2_SHIFT)) & PMU_ANA_GRP_CTRL1_GAINX2_MASK) +#define PMU_ANA_GRP_CTRL1_R_ORIEN_SEL_MASK (0x10U) +#define PMU_ANA_GRP_CTRL1_R_ORIEN_SEL_SHIFT (4U) +/*! R_ORIEN_SEL - RPP resister orientation selection + */ +#define PMU_ANA_GRP_CTRL1_R_ORIEN_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL1_R_ORIEN_SEL_SHIFT)) & PMU_ANA_GRP_CTRL1_R_ORIEN_SEL_MASK) +#define PMU_ANA_GRP_CTRL1_BG_SEL_MASK (0x60U) +#define PMU_ANA_GRP_CTRL1_BG_SEL_SHIFT (5U) +/*! BG_SEL - Selects the Bandgap Voltage + */ +#define PMU_ANA_GRP_CTRL1_BG_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL1_BG_SEL_SHIFT)) & PMU_ANA_GRP_CTRL1_BG_SEL_MASK) +#define PMU_ANA_GRP_CTRL1_TEST_MASK (0x380U) +#define PMU_ANA_GRP_CTRL1_TEST_SHIFT (7U) +/*! TEST - Analog test control bits + */ +#define PMU_ANA_GRP_CTRL1_TEST(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL1_TEST_SHIFT)) & PMU_ANA_GRP_CTRL1_TEST_MASK) +#define PMU_ANA_GRP_CTRL1_BYPASS_MASK (0x400U) +#define PMU_ANA_GRP_CTRL1_BYPASS_SHIFT (10U) +/*! BYPASS - XTAL OSC bypass control signal + */ +#define PMU_ANA_GRP_CTRL1_BYPASS(x) (((uint32_t)(((uint32_t)(x)) << PMU_ANA_GRP_CTRL1_BYPASS_SHIFT)) & PMU_ANA_GRP_CTRL1_BYPASS_MASK) +/*! @} */ + +/*! @name PMIP_PWR_CONFIG - Power Configuration register */ +/*! @{ */ +#define PMU_PMIP_PWR_CONFIG_STATUS_DEL_SEL_MASK (0x3U) +#define PMU_PMIP_PWR_CONFIG_STATUS_DEL_SEL_SHIFT (0U) +/*! status_del_sel - Control counter in delay for rdy/rdy<0> handshaking + */ +#define PMU_PMIP_PWR_CONFIG_STATUS_DEL_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_PWR_CONFIG_STATUS_DEL_SEL_SHIFT)) & PMU_PMIP_PWR_CONFIG_STATUS_DEL_SEL_MASK) +#define PMU_PMIP_PWR_CONFIG_AV18_EXT_MASK (0x4U) +#define PMU_PMIP_PWR_CONFIG_AV18_EXT_SHIFT (2U) +/*! av18_ext - AV18 External + */ +#define PMU_PMIP_PWR_CONFIG_AV18_EXT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_PWR_CONFIG_AV18_EXT_SHIFT)) & PMU_PMIP_PWR_CONFIG_AV18_EXT_MASK) +/*! @} */ + +/*! @name PMIP_TEST - PMIP test register */ +/*! @{ */ +#define PMU_PMIP_TEST_PMIP_TEST_MASK (0xFU) +#define PMU_PMIP_TEST_PMIP_TEST_SHIFT (0U) +/*! pmip_test - Test mux output + */ +#define PMU_PMIP_TEST_PMIP_TEST(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_TEST_PMIP_TEST_SHIFT)) & PMU_PMIP_TEST_PMIP_TEST_MASK) +#define PMU_PMIP_TEST_PMIP_TEST_EN_MASK (0x10U) +#define PMU_PMIP_TEST_PMIP_TEST_EN_SHIFT (4U) +/*! pmip_test_en - PMIP Test Enable + * 0b0..disable PMIP analog test mux + * 0b1..enable PMIP analog test mux + */ +#define PMU_PMIP_TEST_PMIP_TEST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_TEST_PMIP_TEST_EN_SHIFT)) & PMU_PMIP_TEST_PMIP_TEST_EN_MASK) +#define PMU_PMIP_TEST_PMU_PMIP_TEST_MASK (0x1E0U) +#define PMU_PMIP_TEST_PMU_PMIP_TEST_SHIFT (5U) +/*! pmu_pmip_test - Test mux input + */ +#define PMU_PMIP_TEST_PMU_PMIP_TEST(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_TEST_PMU_PMIP_TEST_SHIFT)) & PMU_PMIP_TEST_PMU_PMIP_TEST_MASK) +#define PMU_PMIP_TEST_PMU_PMIP_TEST_EN_MASK (0x200U) +#define PMU_PMIP_TEST_PMU_PMIP_TEST_EN_SHIFT (9U) +/*! pmu_pmip_test_en - Enable test mux + */ +#define PMU_PMIP_TEST_PMU_PMIP_TEST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_TEST_PMU_PMIP_TEST_EN_SHIFT)) & PMU_PMIP_TEST_PMU_PMIP_TEST_EN_MASK) +/*! @} */ + +/*! @name AUPLL_CTRL0 - Audio PLL control register */ +/*! @{ */ +#define PMU_AUPLL_CTRL0_FRACT_MASK (0xFFFFFU) +#define PMU_AUPLL_CTRL0_FRACT_SHIFT (0U) +/*! FRACT - Fractional Part of PLL feedback divider + */ +#define PMU_AUPLL_CTRL0_FRACT(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL0_FRACT_SHIFT)) & PMU_AUPLL_CTRL0_FRACT_MASK) +#define PMU_AUPLL_CTRL0_PU_MASK (0x100000U) +#define PMU_AUPLL_CTRL0_PU_SHIFT (20U) +/*! PU - Power-up signal for the PLL + */ +#define PMU_AUPLL_CTRL0_PU(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL0_PU_SHIFT)) & PMU_AUPLL_CTRL0_PU_MASK) +/*! @} */ + +/*! @name PERI_CLK_EN - Peripheral clock enable register */ +/*! @{ */ +#define PMU_PERI_CLK_EN_USIM_CLK_EN_MASK (0x1U) +#define PMU_PERI_CLK_EN_USIM_CLK_EN_SHIFT (0U) +/*! usim_clk_en - USIM clock enable + */ +#define PMU_PERI_CLK_EN_USIM_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_USIM_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_USIM_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_QSPI0_CLK_EN_MASK (0x2U) +#define PMU_PERI_CLK_EN_QSPI0_CLK_EN_SHIFT (1U) +/*! qspi0_clk_en - QSPI0 clock enable + */ +#define PMU_PERI_CLK_EN_QSPI0_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_QSPI0_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_QSPI0_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_IR_CLK_EN_MASK (0x4U) +#define PMU_PERI_CLK_EN_IR_CLK_EN_SHIFT (2U) +/*! ir_clk_en - IR clock enable + */ +#define PMU_PERI_CLK_EN_IR_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_IR_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_IR_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_PDM_CLK_EN_MASK (0x8U) +#define PMU_PERI_CLK_EN_PDM_CLK_EN_SHIFT (3U) +/*! pdm_clk_en - PDM clock enable + */ +#define PMU_PERI_CLK_EN_PDM_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_PDM_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_PDM_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_GPIO_CLK_EN_MASK (0x10U) +#define PMU_PERI_CLK_EN_GPIO_CLK_EN_SHIFT (4U) +/*! gpio_clk_en - GPIO clock enable + */ +#define PMU_PERI_CLK_EN_GPIO_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_GPIO_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_GPIO_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_UART0_CLK_EN_MASK (0x20U) +#define PMU_PERI_CLK_EN_UART0_CLK_EN_SHIFT (5U) +/*! uart0_clk_en - UART0 clock enable + */ +#define PMU_PERI_CLK_EN_UART0_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_UART0_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_UART0_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_UART1_CLK_EN_MASK (0x40U) +#define PMU_PERI_CLK_EN_UART1_CLK_EN_SHIFT (6U) +/*! uart1_clk_en - UART1 clock enable + */ +#define PMU_PERI_CLK_EN_UART1_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_UART1_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_UART1_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_I2C0_CLK_EN_MASK (0x80U) +#define PMU_PERI_CLK_EN_I2C0_CLK_EN_SHIFT (7U) +/*! i2c0_clk_en - I2C0 clock enable + */ +#define PMU_PERI_CLK_EN_I2C0_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_I2C0_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_I2C0_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_SSP0_CLK_EN_MASK (0x100U) +#define PMU_PERI_CLK_EN_SSP0_CLK_EN_SHIFT (8U) +/*! ssp0_clk_en - SSP0 clock enable + */ +#define PMU_PERI_CLK_EN_SSP0_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_SSP0_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_SSP0_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_SSP1_CLK_EN_MASK (0x200U) +#define PMU_PERI_CLK_EN_SSP1_CLK_EN_SHIFT (9U) +/*! ssp1_clk_en - SSP1 clock enable + */ +#define PMU_PERI_CLK_EN_SSP1_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_SSP1_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_SSP1_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_GPT0_CLK_EN_MASK (0x400U) +#define PMU_PERI_CLK_EN_GPT0_CLK_EN_SHIFT (10U) +/*! gpt0_clk_en - GPT0 clock enable + */ +#define PMU_PERI_CLK_EN_GPT0_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_GPT0_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_GPT0_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_GPT1_CLK_EN_MASK (0x800U) +#define PMU_PERI_CLK_EN_GPT1_CLK_EN_SHIFT (11U) +/*! gpt1_clk_en - GPT1 clock enable + */ +#define PMU_PERI_CLK_EN_GPT1_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_GPT1_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_GPT1_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_UART2_CLK_EN_MASK (0x8000U) +#define PMU_PERI_CLK_EN_UART2_CLK_EN_SHIFT (15U) +/*! uart2_clk_en - UART2 clock enable + */ +#define PMU_PERI_CLK_EN_UART2_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_UART2_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_UART2_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_UART3_CLK_EN_MASK (0x10000U) +#define PMU_PERI_CLK_EN_UART3_CLK_EN_SHIFT (16U) +/*! uart3_clk_en - UART3 clock enable + */ +#define PMU_PERI_CLK_EN_UART3_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_UART3_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_UART3_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_SSP2_CLK_EN_MASK (0x20000U) +#define PMU_PERI_CLK_EN_SSP2_CLK_EN_SHIFT (17U) +/*! ssp2_clk_en - SSP2 clock enable + */ +#define PMU_PERI_CLK_EN_SSP2_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_SSP2_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_SSP2_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_I2C1_CLK_EN_MASK (0x80000U) +#define PMU_PERI_CLK_EN_I2C1_CLK_EN_SHIFT (19U) +/*! i2c1_clk_en - I2C1 clock enable + */ +#define PMU_PERI_CLK_EN_I2C1_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_I2C1_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_I2C1_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_I2C2_CLK_EN_MASK (0x100000U) +#define PMU_PERI_CLK_EN_I2C2_CLK_EN_SHIFT (20U) +/*! i2c2_clk_en - I2C2 clock enable + */ +#define PMU_PERI_CLK_EN_I2C2_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_I2C2_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_I2C2_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_GPT2_CLK_EN_MASK (0x200000U) +#define PMU_PERI_CLK_EN_GPT2_CLK_EN_SHIFT (21U) +/*! gpt2_clk_en - GPT2 clock enable + */ +#define PMU_PERI_CLK_EN_GPT2_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_GPT2_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_GPT2_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_GPT3_CLK_EN_MASK (0x400000U) +#define PMU_PERI_CLK_EN_GPT3_CLK_EN_SHIFT (22U) +/*! gpt3_clk_en - GPT3 clock enable + */ +#define PMU_PERI_CLK_EN_GPT3_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_GPT3_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_GPT3_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_WDT_CLK_EN_MASK (0x800000U) +#define PMU_PERI_CLK_EN_WDT_CLK_EN_SHIFT (23U) +/*! wdt_clk_en - WDT clock enable + */ +#define PMU_PERI_CLK_EN_WDT_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_WDT_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_WDT_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_QSPI1_CLK_EN_MASK (0x1000000U) +#define PMU_PERI_CLK_EN_QSPI1_CLK_EN_SHIFT (24U) +/*! qspi1_clk_en - QSPI1 clock enable + */ +#define PMU_PERI_CLK_EN_QSPI1_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_QSPI1_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_QSPI1_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_SDIO_CLK_EN_MASK (0x2000000U) +#define PMU_PERI_CLK_EN_SDIO_CLK_EN_SHIFT (25U) +/*! sdio_clk_en - SDIO clock enable + */ +#define PMU_PERI_CLK_EN_SDIO_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_SDIO_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_SDIO_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_ADC_CLK_EN_MASK (0x4000000U) +#define PMU_PERI_CLK_EN_ADC_CLK_EN_SHIFT (26U) +/*! adc_clk_en - ADC clock enable + */ +#define PMU_PERI_CLK_EN_ADC_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_ADC_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_ADC_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_USBC_CLK_EN_MASK (0x8000000U) +#define PMU_PERI_CLK_EN_USBC_CLK_EN_SHIFT (27U) +/*! usbc_clk_en - USBC clock enable + */ +#define PMU_PERI_CLK_EN_USBC_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_USBC_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_USBC_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_USBC_AHB_CLK_EN_MASK (0x40000000U) +#define PMU_PERI_CLK_EN_USBC_AHB_CLK_EN_SHIFT (30U) +/*! usbc_ahb_clk_en - AHB USBC clock enable + */ +#define PMU_PERI_CLK_EN_USBC_AHB_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_USBC_AHB_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_USBC_AHB_CLK_EN_MASK) +#define PMU_PERI_CLK_EN_SDIO_AHB_CLK_EN_MASK (0x80000000U) +#define PMU_PERI_CLK_EN_SDIO_AHB_CLK_EN_SHIFT (31U) +/*! sdio_ahb_clk_en - AHB SDIO clock enable + */ +#define PMU_PERI_CLK_EN_SDIO_AHB_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_EN_SDIO_AHB_CLK_EN_SHIFT)) & PMU_PERI_CLK_EN_SDIO_AHB_CLK_EN_MASK) +/*! @} */ + +/*! @name UART_FAST_CLK_DIV - UART fast clock div register */ +/*! @{ */ +#define PMU_UART_FAST_CLK_DIV_DENOMINATOR_MASK (0x7FFU) +#define PMU_UART_FAST_CLK_DIV_DENOMINATOR_SHIFT (0U) +/*! denominator - 11-Bit denominator for fractional divider + */ +#define PMU_UART_FAST_CLK_DIV_DENOMINATOR(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_FAST_CLK_DIV_DENOMINATOR_SHIFT)) & PMU_UART_FAST_CLK_DIV_DENOMINATOR_MASK) +#define PMU_UART_FAST_CLK_DIV_NOMINATOR_MASK (0xFFF800U) +#define PMU_UART_FAST_CLK_DIV_NOMINATOR_SHIFT (11U) +/*! nominator - 13-Bit nominator for fraction divider + */ +#define PMU_UART_FAST_CLK_DIV_NOMINATOR(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_FAST_CLK_DIV_NOMINATOR_SHIFT)) & PMU_UART_FAST_CLK_DIV_NOMINATOR_MASK) +/*! @} */ + +/*! @name UART_SLOW_CLK_DIV - UART slow clock div register */ +/*! @{ */ +#define PMU_UART_SLOW_CLK_DIV_DENOMINATOR_MASK (0x7FFU) +#define PMU_UART_SLOW_CLK_DIV_DENOMINATOR_SHIFT (0U) +/*! denominator - 11-Bit denominator for fractional divider + */ +#define PMU_UART_SLOW_CLK_DIV_DENOMINATOR(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_SLOW_CLK_DIV_DENOMINATOR_SHIFT)) & PMU_UART_SLOW_CLK_DIV_DENOMINATOR_MASK) +#define PMU_UART_SLOW_CLK_DIV_NOMINATOR_MASK (0xFFF800U) +#define PMU_UART_SLOW_CLK_DIV_NOMINATOR_SHIFT (11U) +/*! nominator - 13-Bit nominator for fraction divider + */ +#define PMU_UART_SLOW_CLK_DIV_NOMINATOR(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_SLOW_CLK_DIV_NOMINATOR_SHIFT)) & PMU_UART_SLOW_CLK_DIV_NOMINATOR_MASK) +/*! @} */ + +/*! @name UART_CLK_SEL - UART clock select register */ +/*! @{ */ +#define PMU_UART_CLK_SEL_UART0_CLK_SEL_MASK (0x1U) +#define PMU_UART_CLK_SEL_UART0_CLK_SEL_SHIFT (0U) +/*! uart0_clk_sel - UART0 APB0 UART clock select + * 0b0.. + * 0b1.. + */ +#define PMU_UART_CLK_SEL_UART0_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_CLK_SEL_UART0_CLK_SEL_SHIFT)) & PMU_UART_CLK_SEL_UART0_CLK_SEL_MASK) +#define PMU_UART_CLK_SEL_UART1_CLK_SEL_MASK (0x2U) +#define PMU_UART_CLK_SEL_UART1_CLK_SEL_SHIFT (1U) +/*! uart1_clk_sel - UART1 APB0 UART clock select + * 0b0.. + * 0b1.. + */ +#define PMU_UART_CLK_SEL_UART1_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_CLK_SEL_UART1_CLK_SEL_SHIFT)) & PMU_UART_CLK_SEL_UART1_CLK_SEL_MASK) +#define PMU_UART_CLK_SEL_UART2_CLK_SEL_MASK (0x4U) +#define PMU_UART_CLK_SEL_UART2_CLK_SEL_SHIFT (2U) +/*! uart2_clk_sel - UART2 APB1 UART clock select + * 0b0.. + * 0b1.. + */ +#define PMU_UART_CLK_SEL_UART2_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_CLK_SEL_UART2_CLK_SEL_SHIFT)) & PMU_UART_CLK_SEL_UART2_CLK_SEL_MASK) +#define PMU_UART_CLK_SEL_UART3_CLK_SEL_MASK (0x8U) +#define PMU_UART_CLK_SEL_UART3_CLK_SEL_SHIFT (3U) +/*! uart3_clk_sel - UART3 APB1 UART clock select + * 0b0.. + * 0b1.. + */ +#define PMU_UART_CLK_SEL_UART3_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_UART_CLK_SEL_UART3_CLK_SEL_SHIFT)) & PMU_UART_CLK_SEL_UART3_CLK_SEL_MASK) +/*! @} */ + +/*! @name MCU_CORE_CLK_DIV - MCU CORE clock divider ratio register */ +/*! @{ */ +#define PMU_MCU_CORE_CLK_DIV_FCLK_DIV_MASK (0x3FU) +#define PMU_MCU_CORE_CLK_DIV_FCLK_DIV_SHIFT (0U) +/*! fclk_div - FCLK divisor + */ +#define PMU_MCU_CORE_CLK_DIV_FCLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_MCU_CORE_CLK_DIV_FCLK_DIV_SHIFT)) & PMU_MCU_CORE_CLK_DIV_FCLK_DIV_MASK) +/*! @} */ + +/*! @name PERI0_CLK_DIV - Peripheral0 clock divider ratio register */ +/*! @{ */ +#define PMU_PERI0_CLK_DIV_SSP0_CLK_DIV_MASK (0x1FU) +#define PMU_PERI0_CLK_DIV_SSP0_CLK_DIV_SHIFT (0U) +/*! ssp0_clk_div - SSP0 APB0 clock divisor + */ +#define PMU_PERI0_CLK_DIV_SSP0_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI0_CLK_DIV_SSP0_CLK_DIV_SHIFT)) & PMU_PERI0_CLK_DIV_SSP0_CLK_DIV_MASK) +#define PMU_PERI0_CLK_DIV_SSP1_CLK_DIV_MASK (0x3E0U) +#define PMU_PERI0_CLK_DIV_SSP1_CLK_DIV_SHIFT (5U) +/*! ssp1_clk_div - SSP1 APB0 clock divisor + */ +#define PMU_PERI0_CLK_DIV_SSP1_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI0_CLK_DIV_SSP1_CLK_DIV_SHIFT)) & PMU_PERI0_CLK_DIV_SSP1_CLK_DIV_MASK) +#define PMU_PERI0_CLK_DIV_SSP2_CLK_DIV_MASK (0x7C00U) +#define PMU_PERI0_CLK_DIV_SSP2_CLK_DIV_SHIFT (10U) +/*! ssp2_clk_div - SSP2 APB1 clock divisor + */ +#define PMU_PERI0_CLK_DIV_SSP2_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI0_CLK_DIV_SSP2_CLK_DIV_SHIFT)) & PMU_PERI0_CLK_DIV_SSP2_CLK_DIV_MASK) +#define PMU_PERI0_CLK_DIV_SDIO_CLK_DIV_MASK (0xF0000U) +#define PMU_PERI0_CLK_DIV_SDIO_CLK_DIV_SHIFT (16U) +/*! sdio_clk_div - SDIO clock divisor + */ +#define PMU_PERI0_CLK_DIV_SDIO_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI0_CLK_DIV_SDIO_CLK_DIV_SHIFT)) & PMU_PERI0_CLK_DIV_SDIO_CLK_DIV_MASK) +#define PMU_PERI0_CLK_DIV_IR_CLK_DIV_MASK (0x3F00000U) +#define PMU_PERI0_CLK_DIV_IR_CLK_DIV_SHIFT (20U) +/*! ir_clk_div - IR clock divisor + */ +#define PMU_PERI0_CLK_DIV_IR_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI0_CLK_DIV_IR_CLK_DIV_SHIFT)) & PMU_PERI0_CLK_DIV_IR_CLK_DIV_MASK) +#define PMU_PERI0_CLK_DIV_PDM_CLK_DIV_MASK (0x7C000000U) +#define PMU_PERI0_CLK_DIV_PDM_CLK_DIV_SHIFT (26U) +/*! pdm_clk_div - PDM clock divisor + */ +#define PMU_PERI0_CLK_DIV_PDM_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI0_CLK_DIV_PDM_CLK_DIV_SHIFT)) & PMU_PERI0_CLK_DIV_PDM_CLK_DIV_MASK) +/*! @} */ + +/*! @name PERI1_CLK_DIV - Peripheral1 clock divider ratio register */ +/*! @{ */ +#define PMU_PERI1_CLK_DIV_FLASH_CLK_DIV_MASK (0x70U) +#define PMU_PERI1_CLK_DIV_FLASH_CLK_DIV_SHIFT (4U) +/*! flash_clk_div - Flash QSPI clock divisor + */ +#define PMU_PERI1_CLK_DIV_FLASH_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI1_CLK_DIV_FLASH_CLK_DIV_SHIFT)) & PMU_PERI1_CLK_DIV_FLASH_CLK_DIV_MASK) +#define PMU_PERI1_CLK_DIV_QSPI0_CLK_DIV_MASK (0x700U) +#define PMU_PERI1_CLK_DIV_QSPI0_CLK_DIV_SHIFT (8U) +/*! qspi0_clk_div - QSPI0 APB0 clock divisor + */ +#define PMU_PERI1_CLK_DIV_QSPI0_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI1_CLK_DIV_QSPI0_CLK_DIV_SHIFT)) & PMU_PERI1_CLK_DIV_QSPI0_CLK_DIV_MASK) +#define PMU_PERI1_CLK_DIV_QSPI1_CLK_DIV_MASK (0x7000U) +#define PMU_PERI1_CLK_DIV_QSPI1_CLK_DIV_SHIFT (12U) +/*! qspi1_clk_div - QSPI1 APB0 clock divisor + */ +#define PMU_PERI1_CLK_DIV_QSPI1_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI1_CLK_DIV_QSPI1_CLK_DIV_SHIFT)) & PMU_PERI1_CLK_DIV_QSPI1_CLK_DIV_MASK) +#define PMU_PERI1_CLK_DIV_USIM_CLK_DIV_MASK (0x1F00000U) +#define PMU_PERI1_CLK_DIV_USIM_CLK_DIV_SHIFT (20U) +/*! usim_clk_div - USIM clock divisor + */ +#define PMU_PERI1_CLK_DIV_USIM_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI1_CLK_DIV_USIM_CLK_DIV_SHIFT)) & PMU_PERI1_CLK_DIV_USIM_CLK_DIV_MASK) +/*! @} */ + +/*! @name PERI2_CLK_DIV - Peripheral2 Clock Divider Ratio Register */ +/*! @{ */ +#define PMU_PERI2_CLK_DIV_GPT_SAMPLE_CLK_DIV_MASK (0x7U) +#define PMU_PERI2_CLK_DIV_GPT_SAMPLE_CLK_DIV_SHIFT (0U) +/*! gpt_sample_clk_div - GPT sample clock divisor + */ +#define PMU_PERI2_CLK_DIV_GPT_SAMPLE_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI2_CLK_DIV_GPT_SAMPLE_CLK_DIV_SHIFT)) & PMU_PERI2_CLK_DIV_GPT_SAMPLE_CLK_DIV_MASK) +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_MASK (0x70U) +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_SHIFT (4U) +/*! wdt_clk_div_5_3 - See bit[25:24] + */ +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_SHIFT)) & PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_MASK) +#define PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_MASK (0x700U) +#define PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_SHIFT (8U) +/*! gpt3_clk_div_2_0 - GPT3 clock divisor[2:0] + * 0b000..(divisor = 1) + */ +#define PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_SHIFT)) & PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_MASK) +#define PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_MASK (0x7000U) +#define PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_SHIFT (12U) +/*! gpt3_clk_div_5_3 - See bit[10:8] + */ +#define PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_SHIFT)) & PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_MASK) +#define PMU_PERI2_CLK_DIV_I2C_CLK_DIV_MASK (0x300000U) +#define PMU_PERI2_CLK_DIV_I2C_CLK_DIV_SHIFT (20U) +/*! i2c_clk_div - i2c function clock divisor, divisor = i2c_clk_div + * 0b00..(divisor = 1) + */ +#define PMU_PERI2_CLK_DIV_I2C_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI2_CLK_DIV_I2C_CLK_DIV_SHIFT)) & PMU_PERI2_CLK_DIV_I2C_CLK_DIV_MASK) +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_MASK (0x3000000U) +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_SHIFT (24U) +/*! wdt_clk_div_1_0 - WDT clock divisor + * 0b00..(divisor = 1) + */ +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_SHIFT)) & PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_MASK) +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_MASK (0x10000000U) +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_SHIFT (28U) +/*! wdt_clk_div_2_2 - See bit[25:24] + */ +#define PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_SHIFT)) & PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_MASK) +/*! @} */ + +/*! @name CAU_CLK_SEL - select signal for CAU MCLK register */ +/*! @{ */ +#define PMU_CAU_CLK_SEL_CAU_CLK_SEL_MASK (0x3U) +#define PMU_CAU_CLK_SEL_CAU_CLK_SEL_SHIFT (0U) +/*! cau_clk_sel - select signal for cau mclk + * 0b00..192M PLL clock + * 0b01..RC32 MHz clock + * 0b10..XTAL32 MHz clock + * 0b11..AUDIO PLL clock + */ +#define PMU_CAU_CLK_SEL_CAU_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_CAU_CLK_SEL_CAU_CLK_SEL_SHIFT)) & PMU_CAU_CLK_SEL_CAU_CLK_SEL_MASK) +#define PMU_CAU_CLK_SEL_CAU_SW_GATE_MASK (0x4U) +#define PMU_CAU_CLK_SEL_CAU_SW_GATE_SHIFT (2U) +/*! cau_sw_gate - gate signal for cau mclk + */ +#define PMU_CAU_CLK_SEL_CAU_SW_GATE(x) (((uint32_t)(((uint32_t)(x)) << PMU_CAU_CLK_SEL_CAU_SW_GATE_SHIFT)) & PMU_CAU_CLK_SEL_CAU_SW_GATE_MASK) +/*! @} */ + +/*! @name LOW_PWR_CTRL - low power control in PM3/PM4 mode register */ +/*! @{ */ +#define PMU_LOW_PWR_CTRL_CACHE_LINE_FLUSH_MASK (0x2U) +#define PMU_LOW_PWR_CTRL_CACHE_LINE_FLUSH_SHIFT (1U) +/*! cache_line_flush - flushes the cache + */ +#define PMU_LOW_PWR_CTRL_CACHE_LINE_FLUSH(x) (((uint32_t)(((uint32_t)(x)) << PMU_LOW_PWR_CTRL_CACHE_LINE_FLUSH_SHIFT)) & PMU_LOW_PWR_CTRL_CACHE_LINE_FLUSH_MASK) +#define PMU_LOW_PWR_CTRL_SLP_CTRL_MASK (0x8U) +#define PMU_LOW_PWR_CTRL_SLP_CTRL_SHIFT (3U) +/*! SLP_CTRL - 32k output clock enable signal + * 0b0..PU enabled while PD disabled + * 0b1..PU disabled while PD enabled + */ +#define PMU_LOW_PWR_CTRL_SLP_CTRL(x) (((uint32_t)(((uint32_t)(x)) << PMU_LOW_PWR_CTRL_SLP_CTRL_SHIFT)) & PMU_LOW_PWR_CTRL_SLP_CTRL_MASK) +#define PMU_LOW_PWR_CTRL_RC_OSC_SEL_MASK (0x10U) +#define PMU_LOW_PWR_CTRL_RC_OSC_SEL_SHIFT (4U) +/*! RC_OSC_SEL - RC32k and XTAL32k output clock selection + */ +#define PMU_LOW_PWR_CTRL_RC_OSC_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_LOW_PWR_CTRL_RC_OSC_SEL_SHIFT)) & PMU_LOW_PWR_CTRL_RC_OSC_SEL_MASK) +/*! @} */ + +/*! @name IO_PAD_PWR_CFG - I/O Pad Power configuration register */ +/*! @{ */ +#define PMU_IO_PAD_PWR_CFG_GPIO0_PDB_MASK (0x1U) +#define PMU_IO_PAD_PWR_CFG_GPIO0_PDB_SHIFT (0U) +/*! GPIO0_PDB - GPIO0 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO0_PDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO0_PDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO0_PDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO1_PDB_MASK (0x2U) +#define PMU_IO_PAD_PWR_CFG_GPIO1_PDB_SHIFT (1U) +/*! GPIO1_PDB - GPIO1 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO1_PDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO1_PDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO1_PDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO2_PDB_MASK (0x4U) +#define PMU_IO_PAD_PWR_CFG_GPIO2_PDB_SHIFT (2U) +/*! GPIO2_PDB - GPIO2 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO2_PDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO2_PDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO2_PDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO3_PDB_MASK (0x8U) +#define PMU_IO_PAD_PWR_CFG_GPIO3_PDB_SHIFT (3U) +/*! GPIO3_PDB - GPIO3 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO3_PDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO3_PDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO3_PDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO0_V25_MASK (0x10U) +#define PMU_IO_PAD_PWR_CFG_GPIO0_V25_SHIFT (4U) +/*! GPIO0_V25 - GPIO0 PAD group voltage select signal + * 0b0..3.3V + * 0b1..2.5V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO0_V25(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO0_V25_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO0_V25_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO1_V25_MASK (0x20U) +#define PMU_IO_PAD_PWR_CFG_GPIO1_V25_SHIFT (5U) +/*! GPIO1_V25 - GPIO1 PAD group voltage select signal + * 0b0..3.3V + * 0b1..2.5V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO1_V25(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO1_V25_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO1_V25_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO2_V25_MASK (0x40U) +#define PMU_IO_PAD_PWR_CFG_GPIO2_V25_SHIFT (6U) +/*! GPIO2_V25 - GPIO2 PAD group voltage select signal + * 0b0..3.3V + * 0b1..2.5V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO2_V25(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO2_V25_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO2_V25_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO3_V25_MASK (0x80U) +#define PMU_IO_PAD_PWR_CFG_GPIO3_V25_SHIFT (7U) +/*! GPIO3_V25 - GPIO3 PAD group voltage select signal + * 0b0..3.3V + * 0b1..2.5V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO3_V25(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO3_V25_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO3_V25_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO0_V18_MASK (0x100U) +#define PMU_IO_PAD_PWR_CFG_GPIO0_V18_SHIFT (8U) +/*! GPIO0_V18 - GPIO0 PAD group voltage select signal + * 0b0..2.5V or 3.3V + * 0b1..1.8V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO0_V18(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO0_V18_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO0_V18_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO1_V18_MASK (0x200U) +#define PMU_IO_PAD_PWR_CFG_GPIO1_V18_SHIFT (9U) +/*! GPIO1_V18 - GPIO1 PAD group voltage select signal + * 0b0..2.5V or 3.3V + * 0b1..1.8V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO1_V18(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO1_V18_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO1_V18_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO2_V18_MASK (0x400U) +#define PMU_IO_PAD_PWR_CFG_GPIO2_V18_SHIFT (10U) +/*! GPIO2_V18 - GPIO2 PAD group voltage select signal + * 0b0..2.5V or 3.3V + * 0b1..1.8V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO2_V18(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO2_V18_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO2_V18_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO3_V18_MASK (0x800U) +#define PMU_IO_PAD_PWR_CFG_GPIO3_V18_SHIFT (11U) +/*! GPIO3_V18 - GPIO3 PAD group voltage select signal + * 0b0..2.5V or 3.3V + * 0b1..1.8V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO3_V18(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO3_V18_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO3_V18_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_MASK (0x1000U) +#define PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_SHIFT (12U) +/*! GPIO0_LOW_VDDB - GPIO0 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO1_LOW_VDDB_MASK (0x2000U) +#define PMU_IO_PAD_PWR_CFG_GPIO1_LOW_VDDB_SHIFT (13U) +/*! GPIO1_LOW_VDDB - GPIO1 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO1_LOW_VDDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO1_LOW_VDDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO1_LOW_VDDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO2_LOW_VDDB_MASK (0x4000U) +#define PMU_IO_PAD_PWR_CFG_GPIO2_LOW_VDDB_SHIFT (14U) +/*! GPIO2_LOW_VDDB - GPIO2 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO2_LOW_VDDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO2_LOW_VDDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO2_LOW_VDDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO3_LOW_VDDB_MASK (0x8000U) +#define PMU_IO_PAD_PWR_CFG_GPIO3_LOW_VDDB_SHIFT (15U) +/*! GPIO3_LOW_VDDB - GPIO3 PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO3_LOW_VDDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO3_LOW_VDDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO3_LOW_VDDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_LOW_VDDB_MASK (0x10000U) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_LOW_VDDB_SHIFT (16U) +/*! GPIO_AON_LOW_VDDB - Always on PAD group power switch signal + * 0b0..Power off + * 0b1..Power on + */ +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_LOW_VDDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO_AON_LOW_VDDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO_AON_LOW_VDDB_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_V25_MASK (0x20000U) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_V25_SHIFT (17U) +/*! GPIO_AON_V25 - Always on PAD group voltage select signal + * 0b0..3.3V + * 0b1..2.5V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_V25(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO_AON_V25_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO_AON_V25_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_V18_MASK (0x40000U) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_V18_SHIFT (18U) +/*! GPIO_AON_V18 - Always on PAD group voltage select signal + * 0b0..2.5V or 3.3V + * 0b1..1.8V + */ +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_V18(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO_AON_V18_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO_AON_V18_MASK) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB_MASK (0x80000U) +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB_SHIFT (19U) +/*! GPIO_AON_PDB - Always on PAD group power down mode control + * 0b0..power down mode + * 0b1..normal mode + */ +#define PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB_SHIFT)) & PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB_MASK) +/*! @} */ + +/*! @name EXT_SEL_REG0 - extra interrupt select register 0 */ +/*! @{ */ +#define PMU_EXT_SEL_REG0_SEL_34_MASK (0x1U) +#define PMU_EXT_SEL_REG0_SEL_34_SHIFT (0U) +/*! SEL_34 - select signal for extra interrupt 34 + * 0b0..from GPIO_0 + * 0b1..from GPIO_1 + */ +#define PMU_EXT_SEL_REG0_SEL_34(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_34_SHIFT)) & PMU_EXT_SEL_REG0_SEL_34_MASK) +#define PMU_EXT_SEL_REG0_SEL_35_MASK (0x2U) +#define PMU_EXT_SEL_REG0_SEL_35_SHIFT (1U) +/*! SEL_35 - select signal for extra interrupt 35 + * 0b0..from GPIO_2 + * 0b1..from GPIO_3 + */ +#define PMU_EXT_SEL_REG0_SEL_35(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_35_SHIFT)) & PMU_EXT_SEL_REG0_SEL_35_MASK) +#define PMU_EXT_SEL_REG0_SEL_36_MASK (0x4U) +#define PMU_EXT_SEL_REG0_SEL_36_SHIFT (2U) +/*! SEL_36 - select signal for extra interrupt 36 + * 0b0..from GPIO_4 + * 0b1..from GPIO_5 + */ +#define PMU_EXT_SEL_REG0_SEL_36(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_36_SHIFT)) & PMU_EXT_SEL_REG0_SEL_36_MASK) +#define PMU_EXT_SEL_REG0_SEL_37_MASK (0x8U) +#define PMU_EXT_SEL_REG0_SEL_37_SHIFT (3U) +/*! SEL_37 - select signal for extra interrupt 37 + * 0b0..from GPIO_6 + * 0b1..from GPIO_7 + */ +#define PMU_EXT_SEL_REG0_SEL_37(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_37_SHIFT)) & PMU_EXT_SEL_REG0_SEL_37_MASK) +#define PMU_EXT_SEL_REG0_SEL_38_MASK (0x10U) +#define PMU_EXT_SEL_REG0_SEL_38_SHIFT (4U) +/*! SEL_38 - select signal for extra interrupt 38 + * 0b0..from GPIO_8 + * 0b1..from GPIO_9 + */ +#define PMU_EXT_SEL_REG0_SEL_38(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_38_SHIFT)) & PMU_EXT_SEL_REG0_SEL_38_MASK) +#define PMU_EXT_SEL_REG0_SEL_39_MASK (0x20U) +#define PMU_EXT_SEL_REG0_SEL_39_SHIFT (5U) +/*! SEL_39 - select signal for extra interrupt 39 + * 0b0..from GPIO_10 + * 0b1..from GPIO_11 + */ +#define PMU_EXT_SEL_REG0_SEL_39(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_39_SHIFT)) & PMU_EXT_SEL_REG0_SEL_39_MASK) +#define PMU_EXT_SEL_REG0_SEL_40_MASK (0x40U) +#define PMU_EXT_SEL_REG0_SEL_40_SHIFT (6U) +/*! SEL_40 - select signal for extra interrupt 40 + * 0b0..from GPIO_12 + * 0b1..from GPIO_13 + */ +#define PMU_EXT_SEL_REG0_SEL_40(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_40_SHIFT)) & PMU_EXT_SEL_REG0_SEL_40_MASK) +#define PMU_EXT_SEL_REG0_SEL_41_MASK (0x80U) +#define PMU_EXT_SEL_REG0_SEL_41_SHIFT (7U) +/*! SEL_41 - select signal for extra interrupt 41 + * 0b0..from GPIO_14 + * 0b1..from GPIO_15 + */ +#define PMU_EXT_SEL_REG0_SEL_41(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_41_SHIFT)) & PMU_EXT_SEL_REG0_SEL_41_MASK) +#define PMU_EXT_SEL_REG0_SEL_42_MASK (0x100U) +#define PMU_EXT_SEL_REG0_SEL_42_SHIFT (8U) +/*! SEL_42 - select signal for extra interrupt 42 + * 0b0..from GPIO_16 + * 0b1..from GPIO_17 + */ +#define PMU_EXT_SEL_REG0_SEL_42(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_42_SHIFT)) & PMU_EXT_SEL_REG0_SEL_42_MASK) +#define PMU_EXT_SEL_REG0_SEL_43_MASK (0x200U) +#define PMU_EXT_SEL_REG0_SEL_43_SHIFT (9U) +/*! SEL_43 - select signal for extra interrupt 43 + * 0b0..from GPIO_18 + * 0b1..from GPIO_19 + */ +#define PMU_EXT_SEL_REG0_SEL_43(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_43_SHIFT)) & PMU_EXT_SEL_REG0_SEL_43_MASK) +#define PMU_EXT_SEL_REG0_SEL_44_MASK (0x400U) +#define PMU_EXT_SEL_REG0_SEL_44_SHIFT (10U) +/*! SEL_44 - select signal for extra interrupt 44 + * 0b0..from GPIO_20 + * 0b1..from GPIO_21 + */ +#define PMU_EXT_SEL_REG0_SEL_44(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_44_SHIFT)) & PMU_EXT_SEL_REG0_SEL_44_MASK) +#define PMU_EXT_SEL_REG0_SEL_45_MASK (0x800U) +#define PMU_EXT_SEL_REG0_SEL_45_SHIFT (11U) +/*! SEL_45 - select signal for extra interrupt 45 + * 0b0..from GPIO_22 + * 0b1..from GPIO_23 + */ +#define PMU_EXT_SEL_REG0_SEL_45(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_45_SHIFT)) & PMU_EXT_SEL_REG0_SEL_45_MASK) +#define PMU_EXT_SEL_REG0_SEL_46_MASK (0x1000U) +#define PMU_EXT_SEL_REG0_SEL_46_SHIFT (12U) +/*! SEL_46 - select signal for extra interrupt 46 + * 0b0..from GPIO_24 + * 0b1..from GPIO_25 + */ +#define PMU_EXT_SEL_REG0_SEL_46(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_46_SHIFT)) & PMU_EXT_SEL_REG0_SEL_46_MASK) +#define PMU_EXT_SEL_REG0_SEL_47_MASK (0x2000U) +#define PMU_EXT_SEL_REG0_SEL_47_SHIFT (13U) +/*! SEL_47 - select signal for extra interrupt 47 + * 0b0..from GPIO_26 + * 0b1..from GPIO_27 + */ +#define PMU_EXT_SEL_REG0_SEL_47(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_47_SHIFT)) & PMU_EXT_SEL_REG0_SEL_47_MASK) +#define PMU_EXT_SEL_REG0_SEL_48_MASK (0x4000U) +#define PMU_EXT_SEL_REG0_SEL_48_SHIFT (14U) +/*! SEL_48 - select signal for extra interrupt 48 + * 0b0..from GPIO_28 + * 0b1..from GPIO_29 + */ +#define PMU_EXT_SEL_REG0_SEL_48(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_48_SHIFT)) & PMU_EXT_SEL_REG0_SEL_48_MASK) +#define PMU_EXT_SEL_REG0_SEL_49_MASK (0x8000U) +#define PMU_EXT_SEL_REG0_SEL_49_SHIFT (15U) +/*! SEL_49 - select signal for extra interrupt 49 + * 0b0..from GPIO_30 + * 0b1..from GPIO_31 + */ +#define PMU_EXT_SEL_REG0_SEL_49(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_49_SHIFT)) & PMU_EXT_SEL_REG0_SEL_49_MASK) +#define PMU_EXT_SEL_REG0_SEL_50_MASK (0x10000U) +#define PMU_EXT_SEL_REG0_SEL_50_SHIFT (16U) +/*! SEL_50 - select signal for extra interrupt 50 + * 0b0..from GPIO_32 + * 0b1..from GPIO_33 + */ +#define PMU_EXT_SEL_REG0_SEL_50(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_50_SHIFT)) & PMU_EXT_SEL_REG0_SEL_50_MASK) +#define PMU_EXT_SEL_REG0_SEL_51_MASK (0x20000U) +#define PMU_EXT_SEL_REG0_SEL_51_SHIFT (17U) +/*! SEL_51 - select signal for extra interrupt 51 + * 0b0..from GPIO_34 + * 0b1..from GPIO_35 + */ +#define PMU_EXT_SEL_REG0_SEL_51(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_51_SHIFT)) & PMU_EXT_SEL_REG0_SEL_51_MASK) +#define PMU_EXT_SEL_REG0_SEL_52_MASK (0x40000U) +#define PMU_EXT_SEL_REG0_SEL_52_SHIFT (18U) +/*! SEL_52 - select signal for extra interrupt 52 + * 0b0..from GPIO_36 + * 0b1..from GPIO_37 + */ +#define PMU_EXT_SEL_REG0_SEL_52(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_52_SHIFT)) & PMU_EXT_SEL_REG0_SEL_52_MASK) +#define PMU_EXT_SEL_REG0_SEL_53_MASK (0x80000U) +#define PMU_EXT_SEL_REG0_SEL_53_SHIFT (19U) +/*! SEL_53 - select signal for extra interrupt 53 + * 0b0..from GPIO_38 + * 0b1..from GPIO_39 + */ +#define PMU_EXT_SEL_REG0_SEL_53(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_53_SHIFT)) & PMU_EXT_SEL_REG0_SEL_53_MASK) +#define PMU_EXT_SEL_REG0_SEL_54_MASK (0x100000U) +#define PMU_EXT_SEL_REG0_SEL_54_SHIFT (20U) +/*! SEL_54 - select signal for extra interrupt 54 + * 0b0..from GPIO_40 + * 0b1..from GPIO_41 + */ +#define PMU_EXT_SEL_REG0_SEL_54(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_54_SHIFT)) & PMU_EXT_SEL_REG0_SEL_54_MASK) +#define PMU_EXT_SEL_REG0_SEL_55_MASK (0x200000U) +#define PMU_EXT_SEL_REG0_SEL_55_SHIFT (21U) +/*! SEL_55 - select signal for extra interrupt 55 + * 0b0..from GPIO_42 + * 0b1..from GPIO_43 + */ +#define PMU_EXT_SEL_REG0_SEL_55(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_55_SHIFT)) & PMU_EXT_SEL_REG0_SEL_55_MASK) +#define PMU_EXT_SEL_REG0_SEL_56_MASK (0x400000U) +#define PMU_EXT_SEL_REG0_SEL_56_SHIFT (22U) +/*! SEL_56 - select signal for extra interrupt 56 + * 0b0..from GPIO_44 + * 0b1..from GPIO_45 + */ +#define PMU_EXT_SEL_REG0_SEL_56(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_56_SHIFT)) & PMU_EXT_SEL_REG0_SEL_56_MASK) +#define PMU_EXT_SEL_REG0_SEL_57_MASK (0x800000U) +#define PMU_EXT_SEL_REG0_SEL_57_SHIFT (23U) +/*! SEL_57 - select signal for extra interrupt 57 + * 0b0..from GPIO_46 + * 0b1..from GPIO_47 + */ +#define PMU_EXT_SEL_REG0_SEL_57(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_57_SHIFT)) & PMU_EXT_SEL_REG0_SEL_57_MASK) +#define PMU_EXT_SEL_REG0_SEL_58_MASK (0x1000000U) +#define PMU_EXT_SEL_REG0_SEL_58_SHIFT (24U) +/*! SEL_58 - select signal for extra interrupt 58 + * 0b0..from GPIO_48 + * 0b1..from GPIO_49 + */ +#define PMU_EXT_SEL_REG0_SEL_58(x) (((uint32_t)(((uint32_t)(x)) << PMU_EXT_SEL_REG0_SEL_58_SHIFT)) & PMU_EXT_SEL_REG0_SEL_58_MASK) +/*! @} */ + +/*! @name AUPLL_CTRL1 - USB and audio PLL control register */ +/*! @{ */ +#define PMU_AUPLL_CTRL1_PD_OVPROT_MASK (0x1U) +#define PMU_AUPLL_CTRL1_PD_OVPROT_SHIFT (0U) +/*! PD_OVPROT - Enable Over-Voltage protection on VCO + */ +#define PMU_AUPLL_CTRL1_PD_OVPROT(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_PD_OVPROT_SHIFT)) & PMU_AUPLL_CTRL1_PD_OVPROT_MASK) +#define PMU_AUPLL_CTRL1_REFCLK_SEL_MASK (0x2U) +#define PMU_AUPLL_CTRL1_REFCLK_SEL_SHIFT (1U) +/*! REFCLK_SEL - Reference clock selection + */ +#define PMU_AUPLL_CTRL1_REFCLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_REFCLK_SEL_SHIFT)) & PMU_AUPLL_CTRL1_REFCLK_SEL_MASK) +#define PMU_AUPLL_CTRL1_ICP_MASK (0xCU) +#define PMU_AUPLL_CTRL1_ICP_SHIFT (2U) +/*! ICP - Charge-Pump current control bits + */ +#define PMU_AUPLL_CTRL1_ICP(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_ICP_SHIFT)) & PMU_AUPLL_CTRL1_ICP_MASK) +#define PMU_AUPLL_CTRL1_ENA_DITHER_MASK (0x10U) +#define PMU_AUPLL_CTRL1_ENA_DITHER_SHIFT (4U) +/*! ENA_DITHER - ENA Dither + */ +#define PMU_AUPLL_CTRL1_ENA_DITHER(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_ENA_DITHER_SHIFT)) & PMU_AUPLL_CTRL1_ENA_DITHER_MASK) +#define PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_MASK (0x60U) +#define PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_SHIFT (5U) +/*! DIV_OCLK_PATTERN - Output clock divider control + */ +#define PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_SHIFT)) & PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_MASK) +#define PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_MASK (0x380U) +#define PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_SHIFT (7U) +/*! DIV_OCLK_MODULO - Output clock divider control + */ +#define PMU_AUPLL_CTRL1_DIV_OCLK_MODULO(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_SHIFT)) & PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_MASK) +#define PMU_AUPLL_CTRL1_DIV_MCLK_MASK (0x3C00U) +#define PMU_AUPLL_CTRL1_DIV_MCLK_SHIFT (10U) +/*! DIV_MCLK - MCLK divider + */ +#define PMU_AUPLL_CTRL1_DIV_MCLK(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_DIV_MCLK_SHIFT)) & PMU_AUPLL_CTRL1_DIV_MCLK_MASK) +#define PMU_AUPLL_CTRL1_DIV_FBCCLK_MASK (0xFC000U) +#define PMU_AUPLL_CTRL1_DIV_FBCCLK_SHIFT (14U) +/*! DIV_FBCCLK - FBC divider + */ +#define PMU_AUPLL_CTRL1_DIV_FBCCLK(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_DIV_FBCCLK_SHIFT)) & PMU_AUPLL_CTRL1_DIV_FBCCLK_MASK) +#define PMU_AUPLL_CTRL1_ANA_TSTPNT_MASK (0x300000U) +#define PMU_AUPLL_CTRL1_ANA_TSTPNT_SHIFT (20U) +/*! ANA_TSTPNT - Analog test select + */ +#define PMU_AUPLL_CTRL1_ANA_TSTPNT(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_ANA_TSTPNT_SHIFT)) & PMU_AUPLL_CTRL1_ANA_TSTPNT_MASK) +#define PMU_AUPLL_CTRL1_DIG_TSTPNT_MASK (0xC00000U) +#define PMU_AUPLL_CTRL1_DIG_TSTPNT_SHIFT (22U) +/*! DIG_TSTPNT - Digital test select + */ +#define PMU_AUPLL_CTRL1_DIG_TSTPNT(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_DIG_TSTPNT_SHIFT)) & PMU_AUPLL_CTRL1_DIG_TSTPNT_MASK) +#define PMU_AUPLL_CTRL1_EN_VCOX2_MASK (0x20000000U) +#define PMU_AUPLL_CTRL1_EN_VCOX2_SHIFT (29U) +/*! EN_VCOX2 - Enable or Disable VCOCLK_X2 + */ +#define PMU_AUPLL_CTRL1_EN_VCOX2(x) (((uint32_t)(((uint32_t)(x)) << PMU_AUPLL_CTRL1_EN_VCOX2_SHIFT)) & PMU_AUPLL_CTRL1_EN_VCOX2_MASK) +/*! @} */ + +/*! @name CAU_CTRL - CAU Control Register */ +/*! @{ */ +#define PMU_CAU_CTRL_CAU_ACOMP_MCLK_EN_MASK (0x1U) +#define PMU_CAU_CTRL_CAU_ACOMP_MCLK_EN_SHIFT (0U) +/*! cau_acomp_mclk_en - cau_acomp module main clock enable signal + * 0b0..do not enable + * 0b1.. + */ +#define PMU_CAU_CTRL_CAU_ACOMP_MCLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_CAU_CTRL_CAU_ACOMP_MCLK_EN_SHIFT)) & PMU_CAU_CTRL_CAU_ACOMP_MCLK_EN_MASK) +#define PMU_CAU_CTRL_CAU_GPDAC_MCLK_EN_MASK (0x2U) +#define PMU_CAU_CTRL_CAU_GPDAC_MCLK_EN_SHIFT (1U) +/*! cau_gpdac_mclk_en - cau_gpdac module main clock enable signal + * 0b0..do not enable + * 0b1.. + */ +#define PMU_CAU_CTRL_CAU_GPDAC_MCLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_CAU_CTRL_CAU_GPDAC_MCLK_EN_SHIFT)) & PMU_CAU_CTRL_CAU_GPDAC_MCLK_EN_MASK) +#define PMU_CAU_CTRL_CAU_GPADC1_MCLK_EN_MASK (0x4U) +#define PMU_CAU_CTRL_CAU_GPADC1_MCLK_EN_SHIFT (2U) +/*! cau_gpadc1_mclk_en - cau_gpadc1 module main clock enable signal + * 0b0..do not enable + * 0b1.. + */ +#define PMU_CAU_CTRL_CAU_GPADC1_MCLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_CAU_CTRL_CAU_GPADC1_MCLK_EN_SHIFT)) & PMU_CAU_CTRL_CAU_GPADC1_MCLK_EN_MASK) +#define PMU_CAU_CTRL_CAU_GPADC0_MCLK_EN_MASK (0x8U) +#define PMU_CAU_CTRL_CAU_GPADC0_MCLK_EN_SHIFT (3U) +/*! cau_gpadc0_mclk_en - cau_gpadc0 module main clock enable signal + * 0b0..do not enable + * 0b1.. + */ +#define PMU_CAU_CTRL_CAU_GPADC0_MCLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_CAU_CTRL_CAU_GPADC0_MCLK_EN_SHIFT)) & PMU_CAU_CTRL_CAU_GPADC0_MCLK_EN_MASK) +#define PMU_CAU_CTRL_CAU_BG_MCLK_EN_MASK (0x10U) +#define PMU_CAU_CTRL_CAU_BG_MCLK_EN_SHIFT (4U) +/*! cau_bg_mclk_en - cau_bg module main clock enable signal + * 0b0..do not enable + * 0b1.. + */ +#define PMU_CAU_CTRL_CAU_BG_MCLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_CAU_CTRL_CAU_BG_MCLK_EN_SHIFT)) & PMU_CAU_CTRL_CAU_BG_MCLK_EN_MASK) +/*! @} */ + +/*! @name RC32K_CTRL0 - RC32k Control 0 Register */ +/*! @{ */ +#define PMU_RC32K_CTRL0_RC32K_CODE_FR_EXT_MASK (0x3FFFU) +#define PMU_RC32K_CTRL0_RC32K_CODE_FR_EXT_SHIFT (0U) +/*! rc32k_code_fr_ext - External code In for frequency setting + */ +#define PMU_RC32K_CTRL0_RC32K_CODE_FR_EXT(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL0_RC32K_CODE_FR_EXT_SHIFT)) & PMU_RC32K_CTRL0_RC32K_CODE_FR_EXT_MASK) +#define PMU_RC32K_CTRL0_RC32K_CAL_EN_MASK (0x4000U) +#define PMU_RC32K_CTRL0_RC32K_CAL_EN_SHIFT (14U) +/*! rc32k_cal_en - Enable calibration of 32k oscillator + */ +#define PMU_RC32K_CTRL0_RC32K_CAL_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL0_RC32K_CAL_EN_SHIFT)) & PMU_RC32K_CTRL0_RC32K_CAL_EN_MASK) +#define PMU_RC32K_CTRL0_RC32K_PD_MASK (0x8000U) +#define PMU_RC32K_CTRL0_RC32K_PD_SHIFT (15U) +/*! rc32k_pd - Power down 32k oscillator + */ +#define PMU_RC32K_CTRL0_RC32K_PD(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL0_RC32K_PD_SHIFT)) & PMU_RC32K_CTRL0_RC32K_PD_MASK) +/*! @} */ + +/*! @name RC32K_CTRL1 - RC32k Control 1 Register */ +/*! @{ */ +#define PMU_RC32K_CTRL1_RC32K_CAL_DONE_MASK (0x1U) +#define PMU_RC32K_CTRL1_RC32K_CAL_DONE_SHIFT (0U) +/*! rc32k_cal_done - Asserts high when calibration is done + */ +#define PMU_RC32K_CTRL1_RC32K_CAL_DONE(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_CAL_DONE_SHIFT)) & PMU_RC32K_CTRL1_RC32K_CAL_DONE_MASK) +#define PMU_RC32K_CTRL1_RC32K_RDY_MASK (0x2U) +#define PMU_RC32K_CTRL1_RC32K_RDY_SHIFT (1U) +/*! rc32k_rdy - Asserts high when 32k clock is ready upon pwrup + */ +#define PMU_RC32K_CTRL1_RC32K_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_RDY_SHIFT)) & PMU_RC32K_CTRL1_RC32K_RDY_MASK) +#define PMU_RC32K_CTRL1_RC32K_MASK (0x4U) +#define PMU_RC32K_CTRL1_RC32K_SHIFT (2U) +/*! rc32k - RC32k + */ +#define PMU_RC32K_CTRL1_RC32K(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_SHIFT)) & PMU_RC32K_CTRL1_RC32K_MASK) +#define PMU_RC32K_CTRL1_RC32K_CAL_INPROGRESS_MASK (0x8U) +#define PMU_RC32K_CTRL1_RC32K_CAL_INPROGRESS_SHIFT (3U) +/*! rc32k_cal_inprogress - Asserts high when calibration is in progress + */ +#define PMU_RC32K_CTRL1_RC32K_CAL_INPROGRESS(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_CAL_INPROGRESS_SHIFT)) & PMU_RC32K_CTRL1_RC32K_CAL_INPROGRESS_MASK) +#define PMU_RC32K_CTRL1_RC32K_CODE_FR_CAL_MASK (0x3FFF0U) +#define PMU_RC32K_CTRL1_RC32K_CODE_FR_CAL_SHIFT (4U) +/*! rc32k_code_fr_cal - After calibration hold calibrated code + */ +#define PMU_RC32K_CTRL1_RC32K_CODE_FR_CAL(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_CODE_FR_CAL_SHIFT)) & PMU_RC32K_CTRL1_RC32K_CODE_FR_CAL_MASK) +#define PMU_RC32K_CTRL1_RC32K_ALLOW_CAL_MASK (0x40000U) +#define PMU_RC32K_CTRL1_RC32K_ALLOW_CAL_SHIFT (18U) +/*! rc32k_allow_cal - Allow calibration to be performed (monitor system clock) + */ +#define PMU_RC32K_CTRL1_RC32K_ALLOW_CAL(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_ALLOW_CAL_SHIFT)) & PMU_RC32K_CTRL1_RC32K_ALLOW_CAL_MASK) +#define PMU_RC32K_CTRL1_RC32K_CAL_DIV_MASK (0x380000U) +#define PMU_RC32K_CTRL1_RC32K_CAL_DIV_SHIFT (19U) +/*! rc32k_cal_div - Divider for the clock step during calibration + */ +#define PMU_RC32K_CTRL1_RC32K_CAL_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_CAL_DIV_SHIFT)) & PMU_RC32K_CTRL1_RC32K_CAL_DIV_MASK) +#define PMU_RC32K_CTRL1_RC32K_REFCLK32K_MASK (0x400000U) +#define PMU_RC32K_CTRL1_RC32K_REFCLK32K_SHIFT (22U) +/*! rc32k_refclk32k - RC32k Reference Clock + */ +#define PMU_RC32K_CTRL1_RC32K_REFCLK32K(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_REFCLK32K_SHIFT)) & PMU_RC32K_CTRL1_RC32K_REFCLK32K_MASK) +#define PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_MASK (0x800000U) +#define PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_SHIFT (23U) +/*! rc32k_ext_code_en - Allow external code in to go into the ckt + */ +#define PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_SHIFT)) & PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_MASK) +/*! @} */ + +/*! @name XTAL32K_CTRL - XTAL32k Control Register */ +/*! @{ */ +#define PMU_XTAL32K_CTRL_X32K_RDY_MASK (0x1U) +#define PMU_XTAL32K_CTRL_X32K_RDY_SHIFT (0U) +/*! x32k_rdy - Assert high when ready + */ +#define PMU_XTAL32K_CTRL_X32K_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_RDY_SHIFT)) & PMU_XTAL32K_CTRL_X32K_RDY_MASK) +#define PMU_XTAL32K_CTRL_XCLK32K_MASK (0x2U) +#define PMU_XTAL32K_CTRL_XCLK32K_SHIFT (1U) +/*! xclk32k - xclk32k + */ +#define PMU_XTAL32K_CTRL_XCLK32K(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_XCLK32K_SHIFT)) & PMU_XTAL32K_CTRL_XCLK32K_MASK) +#define PMU_XTAL32K_CTRL_X32K_STUP_ASSIST_MASK (0xCU) +#define PMU_XTAL32K_CTRL_X32K_STUP_ASSIST_SHIFT (2U) +/*! x32k_stup_assist - Use startup assist ckt for 32 kHz xosc + */ +#define PMU_XTAL32K_CTRL_X32K_STUP_ASSIST(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_STUP_ASSIST_SHIFT)) & PMU_XTAL32K_CTRL_X32K_STUP_ASSIST_MASK) +#define PMU_XTAL32K_CTRL_X32K_TEST_EN_MASK (0x10U) +#define PMU_XTAL32K_CTRL_X32K_TEST_EN_SHIFT (4U) +/*! x32k_test_en - Test enabling for 32k xtal ckt + */ +#define PMU_XTAL32K_CTRL_X32K_TEST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_TEST_EN_SHIFT)) & PMU_XTAL32K_CTRL_X32K_TEST_EN_MASK) +#define PMU_XTAL32K_CTRL_X32K_TMODE_MASK (0x60U) +#define PMU_XTAL32K_CTRL_X32K_TMODE_SHIFT (5U) +/*! x32k_tmode - Test mode enabling for 32k xtal ckt + */ +#define PMU_XTAL32K_CTRL_X32K_TMODE(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_TMODE_SHIFT)) & PMU_XTAL32K_CTRL_X32K_TMODE_MASK) +#define PMU_XTAL32K_CTRL_X32K_VDDXO_CNTL_MASK (0x600U) +#define PMU_XTAL32K_CTRL_X32K_VDDXO_CNTL_SHIFT (9U) +/*! x32k_vddxo_cntl - Control VDDXO level + */ +#define PMU_XTAL32K_CTRL_X32K_VDDXO_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_VDDXO_CNTL_SHIFT)) & PMU_XTAL32K_CTRL_X32K_VDDXO_CNTL_MASK) +#define PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN_MASK (0x800U) +#define PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN_SHIFT (11U) +/*! x32k_ext_osc_en - Enable external oscillator mode for outside clock + */ +#define PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN_SHIFT)) & PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN_MASK) +#define PMU_XTAL32K_CTRL_X32K_EN_MASK (0x1000U) +#define PMU_XTAL32K_CTRL_X32K_EN_SHIFT (12U) +/*! x32k_en - Enable 32k oscillator + */ +#define PMU_XTAL32K_CTRL_X32K_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_EN_SHIFT)) & PMU_XTAL32K_CTRL_X32K_EN_MASK) +#define PMU_XTAL32K_CTRL_X32K_DLY_SEL_MASK (0x6000U) +#define PMU_XTAL32K_CTRL_X32K_DLY_SEL_SHIFT (13U) +/*! x32k_dly_sel - 32k Delay Select + */ +#define PMU_XTAL32K_CTRL_X32K_DLY_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_XTAL32K_CTRL_X32K_DLY_SEL_SHIFT)) & PMU_XTAL32K_CTRL_X32K_DLY_SEL_MASK) +/*! @} */ + +/*! @name PMIP_CMP_CTRL - PMIP Comparator Control Register */ +/*! @{ */ +#define PMU_PMIP_CMP_CTRL_COMP_OUT_MASK (0x1U) +#define PMU_PMIP_CMP_CTRL_COMP_OUT_SHIFT (0U) +/*! comp_out - Output of AON domain comparator + */ +#define PMU_PMIP_CMP_CTRL_COMP_OUT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_CMP_CTRL_COMP_OUT_SHIFT)) & PMU_PMIP_CMP_CTRL_COMP_OUT_MASK) +#define PMU_PMIP_CMP_CTRL_COMP_RDY_MASK (0x2U) +#define PMU_PMIP_CMP_CTRL_COMP_RDY_SHIFT (1U) +/*! comp_rdy - Ready to use AON domain comparator + */ +#define PMU_PMIP_CMP_CTRL_COMP_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_CMP_CTRL_COMP_RDY_SHIFT)) & PMU_PMIP_CMP_CTRL_COMP_RDY_MASK) +#define PMU_PMIP_CMP_CTRL_COMP_REF_SEL_MASK (0x1CU) +#define PMU_PMIP_CMP_CTRL_COMP_REF_SEL_SHIFT (2U) +/*! comp_ref_sel - Select comparator reference for single-ended mode + */ +#define PMU_PMIP_CMP_CTRL_COMP_REF_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_CMP_CTRL_COMP_REF_SEL_SHIFT)) & PMU_PMIP_CMP_CTRL_COMP_REF_SEL_MASK) +#define PMU_PMIP_CMP_CTRL_COMP_DIFF_EN_MASK (0x20U) +#define PMU_PMIP_CMP_CTRL_COMP_DIFF_EN_SHIFT (5U) +/*! comp_diff_en - Enable Differential mode for AON comparator + */ +#define PMU_PMIP_CMP_CTRL_COMP_DIFF_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_CMP_CTRL_COMP_DIFF_EN_SHIFT)) & PMU_PMIP_CMP_CTRL_COMP_DIFF_EN_MASK) +#define PMU_PMIP_CMP_CTRL_COMP_EN_MASK (0x40U) +#define PMU_PMIP_CMP_CTRL_COMP_EN_SHIFT (6U) +/*! comp_en - Enable AON domain comparator + */ +#define PMU_PMIP_CMP_CTRL_COMP_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_CMP_CTRL_COMP_EN_SHIFT)) & PMU_PMIP_CMP_CTRL_COMP_EN_MASK) +#define PMU_PMIP_CMP_CTRL_COMP_HYST_MASK (0x180U) +#define PMU_PMIP_CMP_CTRL_COMP_HYST_SHIFT (7U) +/*! comp_hyst - Control of comparator hysteresis + */ +#define PMU_PMIP_CMP_CTRL_COMP_HYST(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_CMP_CTRL_COMP_HYST_SHIFT)) & PMU_PMIP_CMP_CTRL_COMP_HYST_MASK) +#define PMU_PMIP_CMP_CTRL_CAU_REF_EN_MASK (0x200U) +#define PMU_PMIP_CMP_CTRL_CAU_REF_EN_SHIFT (9U) +/*! cau_ref_en - CAU Reference Enable + */ +#define PMU_PMIP_CMP_CTRL_CAU_REF_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_CMP_CTRL_CAU_REF_EN_SHIFT)) & PMU_PMIP_CMP_CTRL_CAU_REF_EN_MASK) +/*! @} */ + +/*! @name PMIP_BRNDET_AV18 - PMIP Brownout AV18 Register */ +/*! @{ */ +#define PMU_PMIP_BRNDET_AV18_DEL_AV18_SEL_MASK (0x3U) +#define PMU_PMIP_BRNDET_AV18_DEL_AV18_SEL_SHIFT (0U) +/*! del_av18_sel - Control of rdygen_av18 rising edge delay circiut + */ +#define PMU_PMIP_BRNDET_AV18_DEL_AV18_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_DEL_AV18_SEL_SHIFT)) & PMU_PMIP_BRNDET_AV18_DEL_AV18_SEL_MASK) +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_HYST_MASK (0xCU) +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_HYST_SHIFT (2U) +/*! ldo_aon_av18_hyst - Control of ldo_aon_av18 hysteresis + */ +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_HYST(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_HYST_SHIFT)) & PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_HYST_MASK) +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_SEL_MASK (0x70U) +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_SEL_SHIFT (4U) +/*! ldo_aon_av18_sel - Select output voltage of ldo_aon_av18 + */ +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_SEL_SHIFT)) & PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_SEL_MASK) +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_EN_MASK (0x80U) +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_EN_SHIFT (7U) +/*! ldo_aon_av18_en - Enable ldo_aon_av18 + */ +#define PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_EN_SHIFT)) & PMU_PMIP_BRNDET_AV18_LDO_AON_AV18_EN_MASK) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_OUT_MASK (0x100U) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_OUT_SHIFT (8U) +/*! brndet_av18_out - Assert high if av18 brnout happened + */ +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_OUT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_BRNDET_AV18_OUT_SHIFT)) & PMU_PMIP_BRNDET_AV18_BRNDET_AV18_OUT_MASK) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_RDY_MASK (0x200U) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_RDY_SHIFT (9U) +/*! brndet_av18_rdy - Assert high if av18 brnout is rdy --> out can be taken + */ +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_BRNDET_AV18_RDY_SHIFT)) & PMU_PMIP_BRNDET_AV18_BRNDET_AV18_RDY_MASK) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_FILT_MASK (0xC00U) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_FILT_SHIFT (10U) +/*! brndet_av18_filt - Select filtering level for av18 pulse to av18 brndet + */ +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_FILT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_BRNDET_AV18_FILT_SHIFT)) & PMU_PMIP_BRNDET_AV18_BRNDET_AV18_FILT_MASK) +#define PMU_PMIP_BRNDET_AV18_BRNHYST_AV18_CNTL_MASK (0x3000U) +#define PMU_PMIP_BRNDET_AV18_BRNHYST_AV18_CNTL_SHIFT (12U) +/*! brnhyst_av18_cntl - Control of av18 brown-out detector hysteresis + */ +#define PMU_PMIP_BRNDET_AV18_BRNHYST_AV18_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_BRNHYST_AV18_CNTL_SHIFT)) & PMU_PMIP_BRNDET_AV18_BRNHYST_AV18_CNTL_MASK) +#define PMU_PMIP_BRNDET_AV18_BRNTRIG_AV18_CNTL_MASK (0x1C000U) +#define PMU_PMIP_BRNDET_AV18_BRNTRIG_AV18_CNTL_SHIFT (14U) +/*! brntrig_av18_cntl - Control trigger voltage of av18 brndet + */ +#define PMU_PMIP_BRNDET_AV18_BRNTRIG_AV18_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_BRNTRIG_AV18_CNTL_SHIFT)) & PMU_PMIP_BRNDET_AV18_BRNTRIG_AV18_CNTL_MASK) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_EN_MASK (0x20000U) +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_EN_SHIFT (17U) +/*! brndet_av18_en - Enable av18 brown-out detector + */ +#define PMU_PMIP_BRNDET_AV18_BRNDET_AV18_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_BRNDET_AV18_EN_SHIFT)) & PMU_PMIP_BRNDET_AV18_BRNDET_AV18_EN_MASK) +#define PMU_PMIP_BRNDET_AV18_DEL_AV18_HYST_MASK (0xC0000U) +#define PMU_PMIP_BRNDET_AV18_DEL_AV18_HYST_SHIFT (18U) +/*! del_av18_hyst - Del av18 Hysteresis + */ +#define PMU_PMIP_BRNDET_AV18_DEL_AV18_HYST(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_AV18_DEL_AV18_HYST_SHIFT)) & PMU_PMIP_BRNDET_AV18_DEL_AV18_HYST_MASK) +/*! @} */ + +/*! @name PMIP_BRNDET_VBAT - PMIP Brownout VBAT Register */ +/*! @{ */ +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_OUT_MASK (0x1U) +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_OUT_SHIFT (0U) +/*! mon_vbat_out - Assert high if vbat is lower than ~2.8V trigger level + */ +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_OUT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_MON_VBAT_OUT_SHIFT)) & PMU_PMIP_BRNDET_VBAT_MON_VBAT_OUT_MASK) +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_RDY_MASK (0x2U) +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_RDY_SHIFT (1U) +/*! mon_vbat_rdy - Assert high if vbat monitor is rdy--> out can be taken + */ +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_MON_VBAT_RDY_SHIFT)) & PMU_PMIP_BRNDET_VBAT_MON_VBAT_RDY_MASK) +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_FILT_MASK (0xCU) +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_FILT_SHIFT (2U) +/*! mon_vbat_filt - Select filtering level for vbat pulse to vbat monitor + */ +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_FILT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_MON_VBAT_FILT_SHIFT)) & PMU_PMIP_BRNDET_VBAT_MON_VBAT_FILT_MASK) +#define PMU_PMIP_BRNDET_VBAT_MONHYST_VBAT_CNTL_MASK (0x30U) +#define PMU_PMIP_BRNDET_VBAT_MONHYST_VBAT_CNTL_SHIFT (4U) +/*! monhyst_vbat_cntl - Control of vbat monitor hysteresis + */ +#define PMU_PMIP_BRNDET_VBAT_MONHYST_VBAT_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_MONHYST_VBAT_CNTL_SHIFT)) & PMU_PMIP_BRNDET_VBAT_MONHYST_VBAT_CNTL_MASK) +#define PMU_PMIP_BRNDET_VBAT_MONTRIG_VBAT_CNTL_MASK (0x1C0U) +#define PMU_PMIP_BRNDET_VBAT_MONTRIG_VBAT_CNTL_SHIFT (6U) +/*! montrig_vbat_cntl - Control trigger voltage of vbat monitor (around 2.8V) + */ +#define PMU_PMIP_BRNDET_VBAT_MONTRIG_VBAT_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_MONTRIG_VBAT_CNTL_SHIFT)) & PMU_PMIP_BRNDET_VBAT_MONTRIG_VBAT_CNTL_MASK) +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_EN_MASK (0x200U) +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_EN_SHIFT (9U) +/*! mon_vbat_en - Enable vbat monitor + */ +#define PMU_PMIP_BRNDET_VBAT_MON_VBAT_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_MON_VBAT_EN_SHIFT)) & PMU_PMIP_BRNDET_VBAT_MON_VBAT_EN_MASK) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_OUT_MASK (0x400U) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_OUT_SHIFT (10U) +/*! brndet_vbat_out - Assert high if vbat brnout happened + */ +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_OUT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_OUT_SHIFT)) & PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_OUT_MASK) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_RDY_MASK (0x800U) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_RDY_SHIFT (11U) +/*! brndet_vbat_rdy - Assert high if vbat brnout is rdy--> out can be taken + */ +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_RDY_SHIFT)) & PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_RDY_MASK) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_FILT_MASK (0x3000U) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_FILT_SHIFT (12U) +/*! brndet_vbat_filt - Select filtering level for vbat pulse to vbat brndet + */ +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_FILT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_FILT_SHIFT)) & PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_FILT_MASK) +#define PMU_PMIP_BRNDET_VBAT_BRNHYST_VBAT_CNTL_MASK (0xC000U) +#define PMU_PMIP_BRNDET_VBAT_BRNHYST_VBAT_CNTL_SHIFT (14U) +/*! brnhyst_vbat_cntl - Control of vbat brown-out detector hysteresis + */ +#define PMU_PMIP_BRNDET_VBAT_BRNHYST_VBAT_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_BRNHYST_VBAT_CNTL_SHIFT)) & PMU_PMIP_BRNDET_VBAT_BRNHYST_VBAT_CNTL_MASK) +#define PMU_PMIP_BRNDET_VBAT_BRNTRIG_VBAT_CNTL_MASK (0x70000U) +#define PMU_PMIP_BRNDET_VBAT_BRNTRIG_VBAT_CNTL_SHIFT (16U) +/*! brntrig_vbat_cntl - Control trigger voltage of vbat brndet + */ +#define PMU_PMIP_BRNDET_VBAT_BRNTRIG_VBAT_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_BRNTRIG_VBAT_CNTL_SHIFT)) & PMU_PMIP_BRNDET_VBAT_BRNTRIG_VBAT_CNTL_MASK) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_EN_MASK (0x80000U) +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_EN_SHIFT (19U) +/*! brndet_vbat_en - Enable vbat brown-out detector + */ +#define PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_EN_SHIFT)) & PMU_PMIP_BRNDET_VBAT_BRNDET_VBAT_EN_MASK) +/*! @} */ + +/*! @name PMIP_BRNDET_V12 - PMIP Brownout V12 Register */ +/*! @{ */ +#define PMU_PMIP_BRNDET_V12_LDO_AON_V12_HYST_MASK (0x3U) +#define PMU_PMIP_BRNDET_V12_LDO_AON_V12_HYST_SHIFT (0U) +/*! ldo_aon_v12_hyst - Control of ldo_aon_v12 hysteresis + */ +#define PMU_PMIP_BRNDET_V12_LDO_AON_V12_HYST(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_LDO_AON_V12_HYST_SHIFT)) & PMU_PMIP_BRNDET_V12_LDO_AON_V12_HYST_MASK) +#define PMU_PMIP_BRNDET_V12_LDO_AON_V12_SEL_MASK (0x1CU) +#define PMU_PMIP_BRNDET_V12_LDO_AON_V12_SEL_SHIFT (2U) +/*! ldo_aon_v12_sel - Select output voltage of ldo_aon_v12 + */ +#define PMU_PMIP_BRNDET_V12_LDO_AON_V12_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_LDO_AON_V12_SEL_SHIFT)) & PMU_PMIP_BRNDET_V12_LDO_AON_V12_SEL_MASK) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_OUT_MASK (0x20U) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_OUT_SHIFT (5U) +/*! brndet_v12_out - Assert high if v12 brnout happened + */ +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_OUT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_BRNDET_V12_OUT_SHIFT)) & PMU_PMIP_BRNDET_V12_BRNDET_V12_OUT_MASK) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_RDY_MASK (0x40U) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_RDY_SHIFT (6U) +/*! brndet_v12_rdy - Assert high if v12 brnout is rdy--> out can be taken + */ +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_BRNDET_V12_RDY_SHIFT)) & PMU_PMIP_BRNDET_V12_BRNDET_V12_RDY_MASK) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_FILT_MASK (0x180U) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_FILT_SHIFT (7U) +/*! brndet_v12_filt - Select filtering level for v12 pulse to v12 brndet + */ +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_FILT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_BRNDET_V12_FILT_SHIFT)) & PMU_PMIP_BRNDET_V12_BRNDET_V12_FILT_MASK) +#define PMU_PMIP_BRNDET_V12_BRNHYST_V12_CNTL_MASK (0x600U) +#define PMU_PMIP_BRNDET_V12_BRNHYST_V12_CNTL_SHIFT (9U) +/*! brnhyst_v12_cntl - Control of v12 brown-out detector hysteresis + */ +#define PMU_PMIP_BRNDET_V12_BRNHYST_V12_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_BRNHYST_V12_CNTL_SHIFT)) & PMU_PMIP_BRNDET_V12_BRNHYST_V12_CNTL_MASK) +#define PMU_PMIP_BRNDET_V12_BRNTRIG_V12_CNTL_MASK (0x3800U) +#define PMU_PMIP_BRNDET_V12_BRNTRIG_V12_CNTL_SHIFT (11U) +/*! brntrig_v12_cntl - Control trigger voltage of v12 brndet + */ +#define PMU_PMIP_BRNDET_V12_BRNTRIG_V12_CNTL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_BRNTRIG_V12_CNTL_SHIFT)) & PMU_PMIP_BRNDET_V12_BRNTRIG_V12_CNTL_MASK) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_EN_MASK (0x4000U) +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_EN_SHIFT (14U) +/*! brndet_v12_en - Enable v12 brown-out detector + */ +#define PMU_PMIP_BRNDET_V12_BRNDET_V12_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_BRNDET_V12_BRNDET_V12_EN_SHIFT)) & PMU_PMIP_BRNDET_V12_BRNDET_V12_EN_MASK) +/*! @} */ + +/*! @name PMIP_LDO_CTRL - PMIP LDO Control Register */ +/*! @{ */ +#define PMU_PMIP_LDO_CTRL_LDO_V12_REF_SEL_MASK (0x1U) +#define PMU_PMIP_LDO_CTRL_LDO_V12_REF_SEL_SHIFT (0U) +/*! ldo_v12_ref_sel - ldo v12 reference select + * 0b0..from igen + * 0b1..directly from bandgap + */ +#define PMU_PMIP_LDO_CTRL_LDO_V12_REF_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_V12_REF_SEL_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_V12_REF_SEL_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_V12_SOFTST_EN_MASK (0x2U) +#define PMU_PMIP_LDO_CTRL_LDO_V12_SOFTST_EN_SHIFT (1U) +/*! ldo_v12_softst_en - Enable soft-start for ldo_v12 + */ +#define PMU_PMIP_LDO_CTRL_LDO_V12_SOFTST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_V12_SOFTST_EN_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_V12_SOFTST_EN_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_V12_VOUT_SEL_MASK (0x1CU) +#define PMU_PMIP_LDO_CTRL_LDO_V12_VOUT_SEL_SHIFT (2U) +/*! ldo_v12_vout_sel - Select output voltage for v12 + */ +#define PMU_PMIP_LDO_CTRL_LDO_V12_VOUT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_V12_VOUT_SEL_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_V12_VOUT_SEL_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_V12_EN_MASK (0x20U) +#define PMU_PMIP_LDO_CTRL_LDO_V12_EN_SHIFT (5U) +/*! ldo_v12_en - Enable ldo_v12 + */ +#define PMU_PMIP_LDO_CTRL_LDO_V12_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_V12_EN_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_V12_EN_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_PWRSW_EN_MASK (0x40U) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_PWRSW_EN_SHIFT (6U) +/*! ldo_av18_pwrsw_en - Enable bypass (power switch mode) for ldo_av18 + */ +#define PMU_PMIP_LDO_CTRL_LDO_AV18_PWRSW_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_AV18_PWRSW_EN_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_AV18_PWRSW_EN_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_SOFTST_EN_MASK (0x80U) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_SOFTST_EN_SHIFT (7U) +/*! ldo_av18_softst_en - Enable soft-start for ldo_av18 + */ +#define PMU_PMIP_LDO_CTRL_LDO_AV18_SOFTST_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_AV18_SOFTST_EN_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_AV18_SOFTST_EN_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_VOUT_SEL_MASK (0x700U) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_VOUT_SEL_SHIFT (8U) +/*! ldo_av18_vout_sel - Select output voltage for ldo_av18 + */ +#define PMU_PMIP_LDO_CTRL_LDO_AV18_VOUT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_AV18_VOUT_SEL_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_AV18_VOUT_SEL_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_EN_MASK (0x800U) +#define PMU_PMIP_LDO_CTRL_LDO_AV18_EN_SHIFT (11U) +/*! ldo_av18_en - Enable ldo_av18 + */ +#define PMU_PMIP_LDO_CTRL_LDO_AV18_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_AV18_EN_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_AV18_EN_MASK) +#define PMU_PMIP_LDO_CTRL_LDO_VFL_PWRSW_EN_MASK (0x1000U) +#define PMU_PMIP_LDO_CTRL_LDO_VFL_PWRSW_EN_SHIFT (12U) +/*! ldo_vfl_pwrsw_en - Enable bypass (power switch mode) for ldo_vfl + */ +#define PMU_PMIP_LDO_CTRL_LDO_VFL_PWRSW_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_LDO_CTRL_LDO_VFL_PWRSW_EN_SHIFT)) & PMU_PMIP_LDO_CTRL_LDO_VFL_PWRSW_EN_MASK) +/*! @} */ + +/*! @name PERI_CLK_SRC - PERI Clock Source Register */ +/*! @{ */ +#define PMU_PERI_CLK_SRC_SSP0_AUDIO_SEL_MASK (0x1U) +#define PMU_PERI_CLK_SRC_SSP0_AUDIO_SEL_SHIFT (0U) +/*! ssp0_audio_sel - SSP0 Audio Select + * 0b0..divided by system clock + * 0b1..audio PLL clock + */ +#define PMU_PERI_CLK_SRC_SSP0_AUDIO_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_SSP0_AUDIO_SEL_SHIFT)) & PMU_PERI_CLK_SRC_SSP0_AUDIO_SEL_MASK) +#define PMU_PERI_CLK_SRC_SSP1_AUDIO_SEL_MASK (0x2U) +#define PMU_PERI_CLK_SRC_SSP1_AUDIO_SEL_SHIFT (1U) +/*! ssp1_audio_sel - SSP1 Audio Select + * 0b0..divided by system clock + * 0b1..audio PLL clock + */ +#define PMU_PERI_CLK_SRC_SSP1_AUDIO_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_SSP1_AUDIO_SEL_SHIFT)) & PMU_PERI_CLK_SRC_SSP1_AUDIO_SEL_MASK) +#define PMU_PERI_CLK_SRC_SSP2_AUDIO_SEL_MASK (0x4U) +#define PMU_PERI_CLK_SRC_SSP2_AUDIO_SEL_SHIFT (2U) +/*! ssp2_audio_sel - SSP2 Audio Select + * 0b0..divided by system clock + * 0b1..audio PLL clock + */ +#define PMU_PERI_CLK_SRC_SSP2_AUDIO_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_SSP2_AUDIO_SEL_SHIFT)) & PMU_PERI_CLK_SRC_SSP2_AUDIO_SEL_MASK) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL0_MASK (0x10U) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL0_SHIFT (4U) +/*! gpt_int_sel0 - GPT Int Select 0 + */ +#define PMU_PERI_CLK_SRC_GPT_INT_SEL0(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT_INT_SEL0_SHIFT)) & PMU_PERI_CLK_SRC_GPT_INT_SEL0_MASK) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL1_MASK (0x20U) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL1_SHIFT (5U) +/*! gpt_int_sel1 - GPT Int Select 1 + */ +#define PMU_PERI_CLK_SRC_GPT_INT_SEL1(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT_INT_SEL1_SHIFT)) & PMU_PERI_CLK_SRC_GPT_INT_SEL1_MASK) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL2_MASK (0x40U) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL2_SHIFT (6U) +/*! gpt_int_sel2 - GPT Int Select 2 + */ +#define PMU_PERI_CLK_SRC_GPT_INT_SEL2(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT_INT_SEL2_SHIFT)) & PMU_PERI_CLK_SRC_GPT_INT_SEL2_MASK) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL3_MASK (0x80U) +#define PMU_PERI_CLK_SRC_GPT_INT_SEL3_SHIFT (7U) +/*! gpt_int_sel3 - GPT Int Select 3 + */ +#define PMU_PERI_CLK_SRC_GPT_INT_SEL3(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT_INT_SEL3_SHIFT)) & PMU_PERI_CLK_SRC_GPT_INT_SEL3_MASK) +#define PMU_PERI_CLK_SRC_GPT0_INT_SEL_MASK (0x100U) +#define PMU_PERI_CLK_SRC_GPT0_INT_SEL_SHIFT (8U) +/*! gpt0_int_sel - GPT0 Int Select + */ +#define PMU_PERI_CLK_SRC_GPT0_INT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT0_INT_SEL_SHIFT)) & PMU_PERI_CLK_SRC_GPT0_INT_SEL_MASK) +#define PMU_PERI_CLK_SRC_GPT1_INT_SEL_MASK (0x200U) +#define PMU_PERI_CLK_SRC_GPT1_INT_SEL_SHIFT (9U) +/*! gpt1_int_sel - GPT1 Int Select + */ +#define PMU_PERI_CLK_SRC_GPT1_INT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT1_INT_SEL_SHIFT)) & PMU_PERI_CLK_SRC_GPT1_INT_SEL_MASK) +#define PMU_PERI_CLK_SRC_GPT2_INT_SEL_MASK (0x400U) +#define PMU_PERI_CLK_SRC_GPT2_INT_SEL_SHIFT (10U) +/*! gpt2_int_sel - GPT2 Int Select + */ +#define PMU_PERI_CLK_SRC_GPT2_INT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT2_INT_SEL_SHIFT)) & PMU_PERI_CLK_SRC_GPT2_INT_SEL_MASK) +#define PMU_PERI_CLK_SRC_GPT3_INT_SEL_MASK (0x800U) +#define PMU_PERI_CLK_SRC_GPT3_INT_SEL_SHIFT (11U) +/*! gpt3_int_sel - GPT3 Int Select + */ +#define PMU_PERI_CLK_SRC_GPT3_INT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_GPT3_INT_SEL_SHIFT)) & PMU_PERI_CLK_SRC_GPT3_INT_SEL_MASK) +#define PMU_PERI_CLK_SRC_PDM_AUDIO_SEL_MASK (0x1000U) +#define PMU_PERI_CLK_SRC_PDM_AUDIO_SEL_SHIFT (12U) +/*! pdm_audio_sel - PDM Audio Select + * 0b0..divided by system clock + * 0b1..audio PLL clock + */ +#define PMU_PERI_CLK_SRC_PDM_AUDIO_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_PDM_AUDIO_SEL_SHIFT)) & PMU_PERI_CLK_SRC_PDM_AUDIO_SEL_MASK) +#define PMU_PERI_CLK_SRC_USIM_AUDIO_SEL_MASK (0x2000U) +#define PMU_PERI_CLK_SRC_USIM_AUDIO_SEL_SHIFT (13U) +/*! usim_audio_sel - USIM Audio Select + * 0b0..divided by system clock + * 0b1..audio PLL clock + */ +#define PMU_PERI_CLK_SRC_USIM_AUDIO_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI_CLK_SRC_USIM_AUDIO_SEL_SHIFT)) & PMU_PERI_CLK_SRC_USIM_AUDIO_SEL_MASK) +/*! @} */ + +/*! @name PMIP_RSVD - Unused Register */ +/*! @{ */ +#define PMU_PMIP_RSVD_RESERVE_IN_MASK (0x3FFU) +#define PMU_PMIP_RSVD_RESERVE_IN_SHIFT (0U) +/*! reserve_in - Unused. Do not change the reset value. + */ +#define PMU_PMIP_RSVD_RESERVE_IN(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_RSVD_RESERVE_IN_SHIFT)) & PMU_PMIP_RSVD_RESERVE_IN_MASK) +#define PMU_PMIP_RSVD_RESERVE_OUT_MASK (0xFC00U) +#define PMU_PMIP_RSVD_RESERVE_OUT_SHIFT (10U) +/*! reserve_out - Unused. Do not change the reset value. + */ +#define PMU_PMIP_RSVD_RESERVE_OUT(x) (((uint32_t)(((uint32_t)(x)) << PMU_PMIP_RSVD_RESERVE_OUT_SHIFT)) & PMU_PMIP_RSVD_RESERVE_OUT_MASK) +/*! @} */ + +/*! @name GPT0_CTRL - GPT0 Control Register */ +/*! @{ */ +#define PMU_GPT0_CTRL_GPT0_CLK_DIV_MASK (0x3FU) +#define PMU_GPT0_CTRL_GPT0_CLK_DIV_SHIFT (0U) +/*! gpt0_clk_div - clock divisor + */ +#define PMU_GPT0_CTRL_GPT0_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT0_CTRL_GPT0_CLK_DIV_SHIFT)) & PMU_GPT0_CTRL_GPT0_CLK_DIV_MASK) +#define PMU_GPT0_CTRL_GPT0_FREQ_CHANGE_MASK (0x40U) +#define PMU_GPT0_CTRL_GPT0_FREQ_CHANGE_SHIFT (6U) +/*! gpt0_freq_change - frequency change enable + */ +#define PMU_GPT0_CTRL_GPT0_FREQ_CHANGE(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT0_CTRL_GPT0_FREQ_CHANGE_SHIFT)) & PMU_GPT0_CTRL_GPT0_FREQ_CHANGE_MASK) +#define PMU_GPT0_CTRL_GPT0_CLK_SEL1_MASK (0x180U) +#define PMU_GPT0_CTRL_GPT0_CLK_SEL1_SHIFT (7U) +/*! gpt0_clk_sel1 - select signal for mux after frequency divisor + */ +#define PMU_GPT0_CTRL_GPT0_CLK_SEL1(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT0_CTRL_GPT0_CLK_SEL1_SHIFT)) & PMU_GPT0_CTRL_GPT0_CLK_SEL1_MASK) +#define PMU_GPT0_CTRL_GPT0_CLK_SEL0_MASK (0x600U) +#define PMU_GPT0_CTRL_GPT0_CLK_SEL0_SHIFT (9U) +/*! gpt0_clk_sel0 - select signal for mux before frequency divisor + */ +#define PMU_GPT0_CTRL_GPT0_CLK_SEL0(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT0_CTRL_GPT0_CLK_SEL0_SHIFT)) & PMU_GPT0_CTRL_GPT0_CLK_SEL0_MASK) +/*! @} */ + +/*! @name GPT1_CTRL - GPT1 Control Register */ +/*! @{ */ +#define PMU_GPT1_CTRL_GPT1_CLK_DIV_MASK (0x3FU) +#define PMU_GPT1_CTRL_GPT1_CLK_DIV_SHIFT (0U) +/*! gpt1_clk_div - clock divisor + */ +#define PMU_GPT1_CTRL_GPT1_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT1_CTRL_GPT1_CLK_DIV_SHIFT)) & PMU_GPT1_CTRL_GPT1_CLK_DIV_MASK) +#define PMU_GPT1_CTRL_GPT1_FREQ_CHANGE_MASK (0x40U) +#define PMU_GPT1_CTRL_GPT1_FREQ_CHANGE_SHIFT (6U) +/*! gpt1_freq_change - frequency change enable + */ +#define PMU_GPT1_CTRL_GPT1_FREQ_CHANGE(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT1_CTRL_GPT1_FREQ_CHANGE_SHIFT)) & PMU_GPT1_CTRL_GPT1_FREQ_CHANGE_MASK) +#define PMU_GPT1_CTRL_GPT1_CLK_SEL1_MASK (0x180U) +#define PMU_GPT1_CTRL_GPT1_CLK_SEL1_SHIFT (7U) +/*! gpt1_clk_sel1 - select signal for mux after frequency divisor + */ +#define PMU_GPT1_CTRL_GPT1_CLK_SEL1(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT1_CTRL_GPT1_CLK_SEL1_SHIFT)) & PMU_GPT1_CTRL_GPT1_CLK_SEL1_MASK) +#define PMU_GPT1_CTRL_GPT1_CLK_SEL0_MASK (0x600U) +#define PMU_GPT1_CTRL_GPT1_CLK_SEL0_SHIFT (9U) +/*! gpt1_clk_sel0 - select signal for mux before frequency divisor + */ +#define PMU_GPT1_CTRL_GPT1_CLK_SEL0(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT1_CTRL_GPT1_CLK_SEL0_SHIFT)) & PMU_GPT1_CTRL_GPT1_CLK_SEL0_MASK) +/*! @} */ + +/*! @name GPT2_CTRL - GPT2 Control Register */ +/*! @{ */ +#define PMU_GPT2_CTRL_GPT2_CLK_DIV_MASK (0x3FU) +#define PMU_GPT2_CTRL_GPT2_CLK_DIV_SHIFT (0U) +/*! gpt2_clk_div - clock divisor + */ +#define PMU_GPT2_CTRL_GPT2_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT2_CTRL_GPT2_CLK_DIV_SHIFT)) & PMU_GPT2_CTRL_GPT2_CLK_DIV_MASK) +#define PMU_GPT2_CTRL_GPT2_FREQ_CHANGE_MASK (0x40U) +#define PMU_GPT2_CTRL_GPT2_FREQ_CHANGE_SHIFT (6U) +/*! gpt2_freq_change - frequency change enable + */ +#define PMU_GPT2_CTRL_GPT2_FREQ_CHANGE(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT2_CTRL_GPT2_FREQ_CHANGE_SHIFT)) & PMU_GPT2_CTRL_GPT2_FREQ_CHANGE_MASK) +#define PMU_GPT2_CTRL_GPT2_CLK_SEL1_MASK (0x180U) +#define PMU_GPT2_CTRL_GPT2_CLK_SEL1_SHIFT (7U) +/*! gpt2_clk_sel1 - select signal for mux after frequency divisor + */ +#define PMU_GPT2_CTRL_GPT2_CLK_SEL1(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT2_CTRL_GPT2_CLK_SEL1_SHIFT)) & PMU_GPT2_CTRL_GPT2_CLK_SEL1_MASK) +#define PMU_GPT2_CTRL_GPT2_CLK_SEL0_MASK (0x600U) +#define PMU_GPT2_CTRL_GPT2_CLK_SEL0_SHIFT (9U) +/*! gpt2_clk_sel0 - select signal for mux before frequency divisor + */ +#define PMU_GPT2_CTRL_GPT2_CLK_SEL0(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT2_CTRL_GPT2_CLK_SEL0_SHIFT)) & PMU_GPT2_CTRL_GPT2_CLK_SEL0_MASK) +/*! @} */ + +/*! @name GPT3_CTRL - GPT3 Control Register */ +/*! @{ */ +#define PMU_GPT3_CTRL_GPT3_CLK_DIV_MASK (0x3FU) +#define PMU_GPT3_CTRL_GPT3_CLK_DIV_SHIFT (0U) +/*! gpt3_clk_div - clock divisor + */ +#define PMU_GPT3_CTRL_GPT3_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT3_CTRL_GPT3_CLK_DIV_SHIFT)) & PMU_GPT3_CTRL_GPT3_CLK_DIV_MASK) +#define PMU_GPT3_CTRL_GPT3_FREQ_CHANGE_MASK (0x40U) +#define PMU_GPT3_CTRL_GPT3_FREQ_CHANGE_SHIFT (6U) +/*! gpt3_freq_change - frequency change enable + */ +#define PMU_GPT3_CTRL_GPT3_FREQ_CHANGE(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT3_CTRL_GPT3_FREQ_CHANGE_SHIFT)) & PMU_GPT3_CTRL_GPT3_FREQ_CHANGE_MASK) +#define PMU_GPT3_CTRL_GPT3_CLK_SEL1_MASK (0x180U) +#define PMU_GPT3_CTRL_GPT3_CLK_SEL1_SHIFT (7U) +/*! gpt3_clk_sel1 - select signal for mux after frequency divisor + */ +#define PMU_GPT3_CTRL_GPT3_CLK_SEL1(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT3_CTRL_GPT3_CLK_SEL1_SHIFT)) & PMU_GPT3_CTRL_GPT3_CLK_SEL1_MASK) +#define PMU_GPT3_CTRL_GPT3_CLK_SEL0_MASK (0x600U) +#define PMU_GPT3_CTRL_GPT3_CLK_SEL0_SHIFT (9U) +/*! gpt3_clk_sel0 - select signal for mux before frequency divisor + */ +#define PMU_GPT3_CTRL_GPT3_CLK_SEL0(x) (((uint32_t)(((uint32_t)(x)) << PMU_GPT3_CTRL_GPT3_CLK_SEL0_SHIFT)) & PMU_GPT3_CTRL_GPT3_CLK_SEL0_MASK) +/*! @} */ + +/*! @name WAKEUP_EDGE_DETECT - Wakeup Edge Detect Register */ +/*! @{ */ +#define PMU_WAKEUP_EDGE_DETECT_WAKEUP0_MASK (0x1U) +#define PMU_WAKEUP_EDGE_DETECT_WAKEUP0_SHIFT (0U) +/*! wakeup0 - external pin0 wakeup_edge_detect + */ +#define PMU_WAKEUP_EDGE_DETECT_WAKEUP0(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_EDGE_DETECT_WAKEUP0_SHIFT)) & PMU_WAKEUP_EDGE_DETECT_WAKEUP0_MASK) +#define PMU_WAKEUP_EDGE_DETECT_WAKEUP1_MASK (0x2U) +#define PMU_WAKEUP_EDGE_DETECT_WAKEUP1_SHIFT (1U) +/*! wakeup1 - external pin1 wakeup_edge_detect + */ +#define PMU_WAKEUP_EDGE_DETECT_WAKEUP1(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_EDGE_DETECT_WAKEUP1_SHIFT)) & PMU_WAKEUP_EDGE_DETECT_WAKEUP1_MASK) +/*! @} */ + +/*! @name AON_CLK_CTRL - AON Clock Control Register */ +/*! @{ */ +#define PMU_AON_CLK_CTRL_PMU_CLK_DIV_MASK (0xFU) +#define PMU_AON_CLK_CTRL_PMU_CLK_DIV_SHIFT (0U) +/*! pmu_clk_div - PMU clock divisor + */ +#define PMU_AON_CLK_CTRL_PMU_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_AON_CLK_CTRL_PMU_CLK_DIV_SHIFT)) & PMU_AON_CLK_CTRL_PMU_CLK_DIV_MASK) +#define PMU_AON_CLK_CTRL_RTC_CLK_EN_MASK (0x10U) +#define PMU_AON_CLK_CTRL_RTC_CLK_EN_SHIFT (4U) +/*! rtc_clk_en - RTC clock enable + */ +#define PMU_AON_CLK_CTRL_RTC_CLK_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_AON_CLK_CTRL_RTC_CLK_EN_SHIFT)) & PMU_AON_CLK_CTRL_RTC_CLK_EN_MASK) +#define PMU_AON_CLK_CTRL_RTC_INT_SEL_MASK (0x20U) +#define PMU_AON_CLK_CTRL_RTC_INT_SEL_SHIFT (5U) +/*! rtc_int_sel - RTC Interrupt Select + */ +#define PMU_AON_CLK_CTRL_RTC_INT_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_AON_CLK_CTRL_RTC_INT_SEL_SHIFT)) & PMU_AON_CLK_CTRL_RTC_INT_SEL_MASK) +#define PMU_AON_CLK_CTRL_DMA_CLK_GATE_EN_MASK (0x40U) +#define PMU_AON_CLK_CTRL_DMA_CLK_GATE_EN_SHIFT (6U) +/*! dma_clk_gate_en - DMA Clock Gate Enable + */ +#define PMU_AON_CLK_CTRL_DMA_CLK_GATE_EN(x) (((uint32_t)(((uint32_t)(x)) << PMU_AON_CLK_CTRL_DMA_CLK_GATE_EN_SHIFT)) & PMU_AON_CLK_CTRL_DMA_CLK_GATE_EN_MASK) +#define PMU_AON_CLK_CTRL_APB0_CLK_DIV_MASK (0x180U) +#define PMU_AON_CLK_CTRL_APB0_CLK_DIV_SHIFT (7U) +/*! apb0_clk_div - APB0 clock divisor + */ +#define PMU_AON_CLK_CTRL_APB0_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_AON_CLK_CTRL_APB0_CLK_DIV_SHIFT)) & PMU_AON_CLK_CTRL_APB0_CLK_DIV_MASK) +#define PMU_AON_CLK_CTRL_APB1_CLK_DIV_MASK (0x600U) +#define PMU_AON_CLK_CTRL_APB1_CLK_DIV_SHIFT (9U) +/*! apb1_clk_div - APB1 clock divisor + */ +#define PMU_AON_CLK_CTRL_APB1_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_AON_CLK_CTRL_APB1_CLK_DIV_SHIFT)) & PMU_AON_CLK_CTRL_APB1_CLK_DIV_MASK) +/*! @} */ + +/*! @name PERI3_CTRL - PERI3 Control Register */ +/*! @{ */ +#define PMU_PERI3_CTRL_CAN_DIV_MASK (0x7U) +#define PMU_PERI3_CTRL_CAN_DIV_SHIFT (0U) +/*! can_div - CAN clock div ratio + */ +#define PMU_PERI3_CTRL_CAN_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_CAN_DIV_SHIFT)) & PMU_PERI3_CTRL_CAN_DIV_MASK) +#define PMU_PERI3_CTRL_CAN_GATE_MASK (0x8U) +#define PMU_PERI3_CTRL_CAN_GATE_SHIFT (3U) +/*! can_gate - CAN clock gate + */ +#define PMU_PERI3_CTRL_CAN_GATE(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_CAN_GATE_SHIFT)) & PMU_PERI3_CTRL_CAN_GATE_MASK) +#define PMU_PERI3_CTRL_KP_CLK_SEL_MASK (0x10U) +#define PMU_PERI3_CTRL_KP_CLK_SEL_SHIFT (4U) +/*! kp_clk_sel - keypad clock select + */ +#define PMU_PERI3_CTRL_KP_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_KP_CLK_SEL_SHIFT)) & PMU_PERI3_CTRL_KP_CLK_SEL_MASK) +#define PMU_PERI3_CTRL_KP_GATE_MASK (0x20U) +#define PMU_PERI3_CTRL_KP_GATE_SHIFT (5U) +/*! kp_gate - keypad clock gate + */ +#define PMU_PERI3_CTRL_KP_GATE(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_KP_GATE_SHIFT)) & PMU_PERI3_CTRL_KP_GATE_MASK) +#define PMU_PERI3_CTRL_CB_CLK_SEL_MASK (0x40U) +#define PMU_PERI3_CTRL_CB_CLK_SEL_SHIFT (6U) +/*! cb_clk_sel - cbutton clock select + */ +#define PMU_PERI3_CTRL_CB_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_CB_CLK_SEL_SHIFT)) & PMU_PERI3_CTRL_CB_CLK_SEL_MASK) +#define PMU_PERI3_CTRL_CB_GATE_MASK (0x80U) +#define PMU_PERI3_CTRL_CB_GATE_SHIFT (7U) +/*! cb_gate - cbutton clock gate + */ +#define PMU_PERI3_CTRL_CB_GATE(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_CB_GATE_SHIFT)) & PMU_PERI3_CTRL_CB_GATE_MASK) +#define PMU_PERI3_CTRL_GAU_DIV_MASK (0x1F00U) +#define PMU_PERI3_CTRL_GAU_DIV_SHIFT (8U) +/*! gau_div - GAU clock div ratio + */ +#define PMU_PERI3_CTRL_GAU_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_GAU_DIV_SHIFT)) & PMU_PERI3_CTRL_GAU_DIV_MASK) +#define PMU_PERI3_CTRL_RC32M_DIV_MASK (0x3E000U) +#define PMU_PERI3_CTRL_RC32M_DIV_SHIFT (13U) +/*! rc32m_div - RC32M clock div ratio + */ +#define PMU_PERI3_CTRL_RC32M_DIV(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_RC32M_DIV_SHIFT)) & PMU_PERI3_CTRL_RC32M_DIV_MASK) +#define PMU_PERI3_CTRL_RC32M_GATE_MASK (0x40000U) +#define PMU_PERI3_CTRL_RC32M_GATE_SHIFT (18U) +/*! rc32m_gate - RC32M reference clock gate + */ +#define PMU_PERI3_CTRL_RC32M_GATE(x) (((uint32_t)(((uint32_t)(x)) << PMU_PERI3_CTRL_RC32M_GATE_SHIFT)) & PMU_PERI3_CTRL_RC32M_GATE_MASK) +/*! @} */ + +/*! @name IO_LPM_G03_ - I/O LPM G03 Register */ +/*! @{ */ +#define PMU_IO_LPM_G03__IO_LPM_G03_MASK (0xFFFFFFFFU) +#define PMU_IO_LPM_G03__IO_LPM_G03_SHIFT (0U) +/*! io_lpm_G03 - I/O low power mode + */ +#define PMU_IO_LPM_G03__IO_LPM_G03(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_LPM_G03__IO_LPM_G03_SHIFT)) & PMU_IO_LPM_G03__IO_LPM_G03_MASK) +/*! @} */ + +/*! @name IO_LPM_G47_ - I/O LPM G47 Register */ +/*! @{ */ +#define PMU_IO_LPM_G47__IO_LPM_G47_MASK (0xFFFFFFFFU) +#define PMU_IO_LPM_G47__IO_LPM_G47_SHIFT (0U) +/*! io_lpm_G47 - I/O low power mode + */ +#define PMU_IO_LPM_G47__IO_LPM_G47(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_LPM_G47__IO_LPM_G47_SHIFT)) & PMU_IO_LPM_G47__IO_LPM_G47_MASK) +/*! @} */ + +/*! @name IO_LPM_G811_ - I/O LPM G811 Register */ +/*! @{ */ +#define PMU_IO_LPM_G811__IO_LPM_G811_MASK (0xFFFFFFFFU) +#define PMU_IO_LPM_G811__IO_LPM_G811_SHIFT (0U) +/*! io_lpm_G811 - I/O low power mode + */ +#define PMU_IO_LPM_G811__IO_LPM_G811(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_LPM_G811__IO_LPM_G811_SHIFT)) & PMU_IO_LPM_G811__IO_LPM_G811_MASK) +/*! @} */ + +/*! @name IO_LPM_G1215_ - I/O LPM G1215 Register */ +/*! @{ */ +#define PMU_IO_LPM_G1215__IO_LPM_G1215_MASK (0xFFFFFFFFU) +#define PMU_IO_LPM_G1215__IO_LPM_G1215_SHIFT (0U) +/*! io_lpm_G1215 - I/O low power mode + */ +#define PMU_IO_LPM_G1215__IO_LPM_G1215(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_LPM_G1215__IO_LPM_G1215_SHIFT)) & PMU_IO_LPM_G1215__IO_LPM_G1215_MASK) +/*! @} */ + +/*! @name IO_LPM_G1617_ - I/O LPM G1617 Register */ +/*! @{ */ +#define PMU_IO_LPM_G1617__IO_LPM_G1617_MASK (0xFFFFFFFFU) +#define PMU_IO_LPM_G1617__IO_LPM_G1617_SHIFT (0U) +/*! io_lpm_G1617 - I/O low power mode + */ +#define PMU_IO_LPM_G1617__IO_LPM_G1617(x) (((uint32_t)(((uint32_t)(x)) << PMU_IO_LPM_G1617__IO_LPM_G1617_SHIFT)) & PMU_IO_LPM_G1617__IO_LPM_G1617_MASK) +/*! @} */ + +/*! @name WAKEUP_MASK - Wakeup Mask Interrupt Register */ +/*! @{ */ +#define PMU_WAKEUP_MASK_PIN0_WAKEUP_MASK_MASK (0x8U) +#define PMU_WAKEUP_MASK_PIN0_WAKEUP_MASK_SHIFT (3U) +/*! pin0_wakeup_mask - Pin0 Wakeup Mask + * 0b0..mask pin0 wakeup interrupt + * 0b1..unmask pin0 wakeup interrupt + */ +#define PMU_WAKEUP_MASK_PIN0_WAKEUP_MASK(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_MASK_PIN0_WAKEUP_MASK_SHIFT)) & PMU_WAKEUP_MASK_PIN0_WAKEUP_MASK_MASK) +#define PMU_WAKEUP_MASK_PIN1_WAKEUP_MASK_MASK (0x10U) +#define PMU_WAKEUP_MASK_PIN1_WAKEUP_MASK_SHIFT (4U) +/*! pin1_wakeup_mask - Pin1 Wakeup Mask + * 0b0..mask pin1 wakeup interrupt + * 0b1..unmask pin1 wakeup interrupt + */ +#define PMU_WAKEUP_MASK_PIN1_WAKEUP_MASK(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_MASK_PIN1_WAKEUP_MASK_SHIFT)) & PMU_WAKEUP_MASK_PIN1_WAKEUP_MASK_MASK) +#define PMU_WAKEUP_MASK_RTC_WAKEUP_MASK_MASK (0x20U) +#define PMU_WAKEUP_MASK_RTC_WAKEUP_MASK_SHIFT (5U) +/*! rtc_wakeup_mask - RTC Wakeup Mask + * 0b0..mask RTC wakeup interrupt + * 0b1..unmask RTC wakeup interrupt + */ +#define PMU_WAKEUP_MASK_RTC_WAKEUP_MASK(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_MASK_RTC_WAKEUP_MASK_SHIFT)) & PMU_WAKEUP_MASK_RTC_WAKEUP_MASK_MASK) +#define PMU_WAKEUP_MASK_PMIP_COMP_WAKEUP_MASK_MASK (0x40U) +#define PMU_WAKEUP_MASK_PMIP_COMP_WAKEUP_MASK_SHIFT (6U) +/*! pmip_comp_wakeup_mask - PMIP Comparator Wakeup Mask + * 0b0..mask PMIP comparator wakeup interrupt + * 0b1..unmask PMIP comparator wakeup interrupt + */ +#define PMU_WAKEUP_MASK_PMIP_COMP_WAKEUP_MASK(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_MASK_PMIP_COMP_WAKEUP_MASK_SHIFT)) & PMU_WAKEUP_MASK_PMIP_COMP_WAKEUP_MASK_MASK) +#define PMU_WAKEUP_MASK_WL_WAKEUP_MASK_MASK (0x80U) +#define PMU_WAKEUP_MASK_WL_WAKEUP_MASK_SHIFT (7U) +/*! wl_wakeup_mask - WLAN Wakeup Mask + * 0b0..mask WLAN wakeup interrupt + * 0b1..unmask WLAN wakeup interrupt + */ +#define PMU_WAKEUP_MASK_WL_WAKEUP_MASK(x) (((uint32_t)(((uint32_t)(x)) << PMU_WAKEUP_MASK_WL_WAKEUP_MASK_SHIFT)) & PMU_WAKEUP_MASK_WL_WAKEUP_MASK_MASK) +/*! @} */ + +/*! @name WLAN_CTRL - WLAN Control Register */ +/*! @{ */ +#define PMU_WLAN_CTRL_PD_MASK (0x1U) +#define PMU_WLAN_CTRL_PD_SHIFT (0U) +/*! pd - WLAN power down function + */ +#define PMU_WLAN_CTRL_PD(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_PD_SHIFT)) & PMU_WLAN_CTRL_PD_MASK) +#define PMU_WLAN_CTRL_REFCLK_SYS_REQ_MASK (0x2U) +#define PMU_WLAN_CTRL_REFCLK_SYS_REQ_SHIFT (1U) +/*! refclk_sys_req - WLAN SYS reference clock request + */ +#define PMU_WLAN_CTRL_REFCLK_SYS_REQ(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_REFCLK_SYS_REQ_SHIFT)) & PMU_WLAN_CTRL_REFCLK_SYS_REQ_MASK) +#define PMU_WLAN_CTRL_REFCLK_AUD_REQ_MASK (0x4U) +#define PMU_WLAN_CTRL_REFCLK_AUD_REQ_SHIFT (2U) +/*! refclk_aud_req - WLAN AUD reference clock request + */ +#define PMU_WLAN_CTRL_REFCLK_AUD_REQ(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_REFCLK_AUD_REQ_SHIFT)) & PMU_WLAN_CTRL_REFCLK_AUD_REQ_MASK) +#define PMU_WLAN_CTRL_REFCLK_USB_REQ_MASK (0x8U) +#define PMU_WLAN_CTRL_REFCLK_USB_REQ_SHIFT (3U) +/*! refclk_usb_req - WLAN USB reference clock request + */ +#define PMU_WLAN_CTRL_REFCLK_USB_REQ(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_REFCLK_USB_REQ_SHIFT)) & PMU_WLAN_CTRL_REFCLK_USB_REQ_MASK) +#define PMU_WLAN_CTRL_REFCLK_SYS_RDY_MASK (0x10U) +#define PMU_WLAN_CTRL_REFCLK_SYS_RDY_SHIFT (4U) +/*! refclk_sys_rdy - WLAN reference clock ready + */ +#define PMU_WLAN_CTRL_REFCLK_SYS_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_REFCLK_SYS_RDY_SHIFT)) & PMU_WLAN_CTRL_REFCLK_SYS_RDY_MASK) +#define PMU_WLAN_CTRL_REFCLK_AUD_RDY_MASK (0x20U) +#define PMU_WLAN_CTRL_REFCLK_AUD_RDY_SHIFT (5U) +/*! refclk_aud_rdy - WLAN reference clock ready + */ +#define PMU_WLAN_CTRL_REFCLK_AUD_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_REFCLK_AUD_RDY_SHIFT)) & PMU_WLAN_CTRL_REFCLK_AUD_RDY_MASK) +#define PMU_WLAN_CTRL_REFCLK_USB_RDY_MASK (0x40U) +#define PMU_WLAN_CTRL_REFCLK_USB_RDY_SHIFT (6U) +/*! refclk_usb_rdy - WLAN reference clock ready + */ +#define PMU_WLAN_CTRL_REFCLK_USB_RDY(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_REFCLK_USB_RDY_SHIFT)) & PMU_WLAN_CTRL_REFCLK_USB_RDY_MASK) +#define PMU_WLAN_CTRL_WL_PD_DEL_CFG_MASK (0x3FF80U) +#define PMU_WLAN_CTRL_WL_PD_DEL_CFG_SHIFT (7U) +/*! wl_pd_del_cfg - count for 30ms + */ +#define PMU_WLAN_CTRL_WL_PD_DEL_CFG(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL_WL_PD_DEL_CFG_SHIFT)) & PMU_WLAN_CTRL_WL_PD_DEL_CFG_MASK) +/*! @} */ + +/*! @name WLAN_CTRL1 - WLAN Control 1 Register */ +/*! @{ */ +#define PMU_WLAN_CTRL1_MCI_WL_WAKEUP_MASK (0x800U) +#define PMU_WLAN_CTRL1_MCI_WL_WAKEUP_SHIFT (11U) +/*! MCI_WL_WAKEUP - MCI_WL_WAKEUP + */ +#define PMU_WLAN_CTRL1_MCI_WL_WAKEUP(x) (((uint32_t)(((uint32_t)(x)) << PMU_WLAN_CTRL1_MCI_WL_WAKEUP_SHIFT)) & PMU_WLAN_CTRL1_MCI_WL_WAKEUP_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group PMU_Register_Masks */ + + +/* PMU - Peripheral instance base addresses */ +/** Peripheral PMU base address */ +#define PMU_BASE (0x480A0000u) +/** Peripheral PMU base pointer */ +#define PMU ((PMU_Type *)PMU_BASE) +/** Array initializer of PMU peripheral base addresses */ +#define PMU_BASE_ADDRS { PMU_BASE } +/** Array initializer of PMU peripheral base pointers */ +#define PMU_BASE_PTRS { PMU } +/** Interrupt vectors for the PMU peripheral type */ +#define PMU_IRQS { PMU_IRQn } + +/*! + * @} + */ /* end of group PMU_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- QSPI Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup QSPI_Peripheral_Access_Layer QSPI Peripheral Access Layer + * @{ + */ + +/** QSPI - Register Layout Typedef */ +typedef struct { + __IO uint32_t CNTL; /**< Serial Interface Control Register, offset: 0x0 */ + __IO uint32_t CONF; /**< Serial Interface Configuration Register, offset: 0x4 */ + __IO uint32_t DOUT; /**< Serial Interface Data Out Register, offset: 0x8 */ + __I uint32_t DIN; /**< Serial Interface Data Input Register, offset: 0xC */ + __IO uint32_t INSTR; /**< Serial Interface Instruction Register, offset: 0x10 */ + __IO uint32_t ADDR; /**< Serial Interface Address Register, offset: 0x14 */ + __IO uint32_t RDMODE; /**< Serial Interface Read Mode Register, offset: 0x18 */ + __IO uint32_t HDRCNT; /**< Serial Interface Header Count Register, offset: 0x1C */ + __IO uint32_t DINCNT; /**< Serial Interface Data Input Count Register, offset: 0x20 */ + __IO uint32_t TIMING; /**< Serial Interface Timing Register, offset: 0x24 */ + __IO uint32_t CONF2; /**< Serial Interface Configuration 2 Register, offset: 0x28 */ + __I uint32_t ISR; /**< Serial Interface Interrupt Status Register, offset: 0x2C */ + __IO uint32_t IMR; /**< Serial Interface Interrupt Mask Register, offset: 0x30 */ + __I uint32_t IRSR; /**< Serial Interface Interrupt Raw Status Register, offset: 0x34 */ + __O uint32_t ISC; /**< Serial Interface Interrupt Clear Register, offset: 0x38 */ +} QSPI_Type; + +/* ---------------------------------------------------------------------------- + -- QSPI Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup QSPI_Register_Masks QSPI Register Masks + * @{ + */ + +/*! @name CNTL - Serial Interface Control Register */ +/*! @{ */ +#define QSPI_CNTL_SS_EN_MASK (0x1U) +#define QSPI_CNTL_SS_EN_SHIFT (0U) +/*! SS_EN - Serial Select Enable. + * 0b0..Serial select is de-activated, ss_n (serial interface select) output is driven high. + * 0b1..Serial select is activated, ss_n (serial interface select) output is driven low + */ +#define QSPI_CNTL_SS_EN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_SS_EN_SHIFT)) & QSPI_CNTL_SS_EN_MASK) +#define QSPI_CNTL_XFER_RDY_MASK (0x2U) +#define QSPI_CNTL_XFER_RDY_SHIFT (1U) +/*! XFER_RDY - Serial Interface Transfer Ready. + * 0b0..Serial Interface is currently transferring data. + * 0b1..Serial Interface is ready for a new transfer. + */ +#define QSPI_CNTL_XFER_RDY(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_XFER_RDY_SHIFT)) & QSPI_CNTL_XFER_RDY_MASK) +#define QSPI_CNTL_RFIFO_EMPTY_MASK (0x10U) +#define QSPI_CNTL_RFIFO_EMPTY_SHIFT (4U) +/*! RFIFO_EMPTY - Read FIFO Empty. + * 0b0..Read FIFO is not emptied. + * 0b1..Read FIFO is emptied + */ +#define QSPI_CNTL_RFIFO_EMPTY(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_RFIFO_EMPTY_SHIFT)) & QSPI_CNTL_RFIFO_EMPTY_MASK) +#define QSPI_CNTL_RFIFO_FULL_MASK (0x20U) +#define QSPI_CNTL_RFIFO_FULL_SHIFT (5U) +/*! RFIFO_FULL - Read FIFO Full. + * 0b0..Read FIFO is not fulled. + * 0b1..Read FIFO is fulled. + */ +#define QSPI_CNTL_RFIFO_FULL(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_RFIFO_FULL_SHIFT)) & QSPI_CNTL_RFIFO_FULL_MASK) +#define QSPI_CNTL_WFIFO_EMPTY_MASK (0x40U) +#define QSPI_CNTL_WFIFO_EMPTY_SHIFT (6U) +/*! WFIFO_EMPTY - Write FIFO Empty. + * 0b0..Write FIFO is not emptied. + * 0b1..Write FIFO is emptied. + */ +#define QSPI_CNTL_WFIFO_EMPTY(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_WFIFO_EMPTY_SHIFT)) & QSPI_CNTL_WFIFO_EMPTY_MASK) +#define QSPI_CNTL_WFIFO_FULL_MASK (0x80U) +#define QSPI_CNTL_WFIFO_FULL_SHIFT (7U) +/*! WFIFO_FULL - Write FIFO Full. + * 0b0..Write FIFO is not fulled. + * 0b1..Write FIFO is fulled. + */ +#define QSPI_CNTL_WFIFO_FULL(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_WFIFO_FULL_SHIFT)) & QSPI_CNTL_WFIFO_FULL_MASK) +#define QSPI_CNTL_RFIFO_UNDRFLW_MASK (0x100U) +#define QSPI_CNTL_RFIFO_UNDRFLW_SHIFT (8U) +/*! RFIFO_UNDRFLW - Read FIFO Underflow. + * 0b0..Read FIFO is not underflowed. + * 0b1..Read FIFO is underflowed. + */ +#define QSPI_CNTL_RFIFO_UNDRFLW(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_RFIFO_UNDRFLW_SHIFT)) & QSPI_CNTL_RFIFO_UNDRFLW_MASK) +#define QSPI_CNTL_RFIFO_OVRFLW_MASK (0x200U) +#define QSPI_CNTL_RFIFO_OVRFLW_SHIFT (9U) +/*! RFIFO_OVRFLW - Read FIFO Overflow. + * 0b0..Read FIFO is not overflowed. + * 0b1..Read FIFO is overflowed + */ +#define QSPI_CNTL_RFIFO_OVRFLW(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_RFIFO_OVRFLW_SHIFT)) & QSPI_CNTL_RFIFO_OVRFLW_MASK) +#define QSPI_CNTL_WFIFO_UNDRFLW_MASK (0x400U) +#define QSPI_CNTL_WFIFO_UNDRFLW_SHIFT (10U) +/*! WFIFO_UNDRFLW - Write FIFO Underflow. + * 0b0..Write FIFO is not underflowed. + * 0b1..Write FIFO is underflowed. + */ +#define QSPI_CNTL_WFIFO_UNDRFLW(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_WFIFO_UNDRFLW_SHIFT)) & QSPI_CNTL_WFIFO_UNDRFLW_MASK) +#define QSPI_CNTL_WFIFO_OVERFLW_MASK (0x800U) +#define QSPI_CNTL_WFIFO_OVERFLW_SHIFT (11U) +/*! WFIFO_OVERFLW - Write FIFO Overflow. + * 0b0..Write FIFO is not overflowed. + * 0b1..Write FIFO is overflowed. + */ +#define QSPI_CNTL_WFIFO_OVERFLW(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CNTL_WFIFO_OVERFLW_SHIFT)) & QSPI_CNTL_WFIFO_OVERFLW_MASK) +/*! @} */ + +/*! @name CONF - Serial Interface Configuration Register */ +/*! @{ */ +#define QSPI_CONF_CLK_PRESCALE_MASK (0x1FU) +#define QSPI_CONF_CLK_PRESCALE_SHIFT (0U) +/*! CLK_PRESCALE - Serial Interface Clock Prescaler (from SPI clock) + * 0b00000..SPI clock/1 + * 0b00001..SPI clock/1 + * 0b00010..SPI clock/2 + * 0b00011..SPI clock/3 + * 0b00100..SPI clock/4 + * 0b00101..SPI clock/5 + * 0b01101..SPI clock/13 + * 0b01110..SPI clock/14 + * 0b01111..SPI clock/15 + * 0b10000..SPI clock/2 + * 0b10001..SPI clock/2 + * 0b10010..SPI clock/4 + * 0b10011..SPI clock/6 + * 0b10100..SPI clock/8 + * 0b10101..SPI clock/10 + * 0b11101..SPI clock/26 + * 0b11110..SPI clock/28 + * 0b11111..SPI clock/30 + */ +#define QSPI_CONF_CLK_PRESCALE(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_CLK_PRESCALE_SHIFT)) & QSPI_CONF_CLK_PRESCALE_MASK) +#define QSPI_CONF_BYTE_LEN_MASK (0x20U) +#define QSPI_CONF_BYTE_LEN_SHIFT (5U) +/*! BYTE_LEN - Byte Length + * 0b0..1 byte. + * 0b1..4 bytes. + */ +#define QSPI_CONF_BYTE_LEN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_BYTE_LEN_SHIFT)) & QSPI_CONF_BYTE_LEN_MASK) +#define QSPI_CONF_CLK_PHA_MASK (0x80U) +#define QSPI_CONF_CLK_PHA_SHIFT (7U) +/*! CLK_PHA - Serial Interface Clock Phase + * 0b0..Data is latched at the rising edge of the serial interface clock when CLK_POL (R04h [8]) = 0, and at the + * falling edge of the serial interface clock when CLK_POL = 1. + * 0b1..Data is latched at the falling edge of the serial interface clock when + */ +#define QSPI_CONF_CLK_PHA(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_CLK_PHA_SHIFT)) & QSPI_CONF_CLK_PHA_MASK) +#define QSPI_CONF_CLK_POL_MASK (0x100U) +#define QSPI_CONF_CLK_POL_SHIFT (8U) +/*! CLK_POL - Serial Interface Clock Polarity + * 0b0..Serial interface clock is low when inactive. + * 0b1..Serial interface clock is high when inactive. + */ +#define QSPI_CONF_CLK_POL(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_CLK_POL_SHIFT)) & QSPI_CONF_CLK_POL_MASK) +#define QSPI_CONF_FIFO_FLUSH_MASK (0x200U) +#define QSPI_CONF_FIFO_FLUSH_SHIFT (9U) +/*! FIFO_FLUSH - Flush Read and Write FIFOs + * 0b0..Read and Write FIFOs are not flushed. + * 0b1..Read and Write FIFOs are flushed. + */ +#define QSPI_CONF_FIFO_FLUSH(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_FIFO_FLUSH_SHIFT)) & QSPI_CONF_FIFO_FLUSH_MASK) +#define QSPI_CONF_DATA_PIN_MASK (0xC00U) +#define QSPI_CONF_DATA_PIN_SHIFT (10U) +/*! DATA_PIN - Data Transfer Pin + * 0b00..Use 1 serial interface pin (use in single mode). + * 0b01..Use 2 serial interface pins (use in dual mode). + * 0b10..Use 4 serial interface pins (use in quad mode). + * 0b11..Reserved. + */ +#define QSPI_CONF_DATA_PIN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_DATA_PIN_SHIFT)) & QSPI_CONF_DATA_PIN_MASK) +#define QSPI_CONF_ADDR_PIN_MASK (0x1000U) +#define QSPI_CONF_ADDR_PIN_SHIFT (12U) +/*! ADDR_PIN - Address Transfer Pin + * 0b0..Use one serial interface pin. + * 0b1..Use the number of pins as indicated in DATA_PIN (R04h [11:10]). + */ +#define QSPI_CONF_ADDR_PIN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_ADDR_PIN_SHIFT)) & QSPI_CONF_ADDR_PIN_MASK) +#define QSPI_CONF_RW_EN_MASK (0x2000U) +#define QSPI_CONF_RW_EN_SHIFT (13U) +/*! RW_EN - Read Write Enable. + * 0b0..Read data from the serial interface. + * 0b1..Write data to the serial interface. + */ +#define QSPI_CONF_RW_EN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_RW_EN_SHIFT)) & QSPI_CONF_RW_EN_MASK) +#define QSPI_CONF_XFER_STOP_MASK (0x4000U) +#define QSPI_CONF_XFER_STOP_SHIFT (14U) +/*! XFER_STOP - Transfer Stop + * 0b0..Continue current transfer + * 0b1..Stop current transfer. + */ +#define QSPI_CONF_XFER_STOP(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_XFER_STOP_SHIFT)) & QSPI_CONF_XFER_STOP_MASK) +#define QSPI_CONF_XFER_START_MASK (0x8000U) +#define QSPI_CONF_XFER_START_SHIFT (15U) +/*! XFER_START - Transfer Start. + * 0b0..Transfer has completed. + * 0b1..Transfer has started. + */ +#define QSPI_CONF_XFER_START(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF_XFER_START_SHIFT)) & QSPI_CONF_XFER_START_MASK) +/*! @} */ + +/*! @name DOUT - Serial Interface Data Out Register */ +/*! @{ */ +#define QSPI_DOUT_DATA_OUT_MASK (0xFFFFFFFFU) +#define QSPI_DOUT_DATA_OUT_SHIFT (0U) +/*! DATA_OUT - Serial Interface Data Out. + */ +#define QSPI_DOUT_DATA_OUT(x) (((uint32_t)(((uint32_t)(x)) << QSPI_DOUT_DATA_OUT_SHIFT)) & QSPI_DOUT_DATA_OUT_MASK) +/*! @} */ + +/*! @name DIN - Serial Interface Data Input Register */ +/*! @{ */ +#define QSPI_DIN_DATA_IN_MASK (0xFFFFFFFFU) +#define QSPI_DIN_DATA_IN_SHIFT (0U) +/*! DATA_IN - Serial Interface Data In. + */ +#define QSPI_DIN_DATA_IN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_DIN_DATA_IN_SHIFT)) & QSPI_DIN_DATA_IN_MASK) +/*! @} */ + +/*! @name INSTR - Serial Interface Instruction Register */ +/*! @{ */ +#define QSPI_INSTR_INSTR_MASK (0xFFFFU) +#define QSPI_INSTR_INSTR_SHIFT (0U) +/*! INSTR - Instruction + */ +#define QSPI_INSTR_INSTR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_INSTR_INSTR_SHIFT)) & QSPI_INSTR_INSTR_MASK) +/*! @} */ + +/*! @name ADDR - Serial Interface Address Register */ +/*! @{ */ +#define QSPI_ADDR_ADDR_MASK (0xFFFFFFFFU) +#define QSPI_ADDR_ADDR_SHIFT (0U) +/*! ADDR - Serial Interface Address. + */ +#define QSPI_ADDR_ADDR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ADDR_ADDR_SHIFT)) & QSPI_ADDR_ADDR_MASK) +/*! @} */ + +/*! @name RDMODE - Serial Interface Read Mode Register */ +/*! @{ */ +#define QSPI_RDMODE_RMODE_MASK (0xFFFFU) +#define QSPI_RDMODE_RMODE_SHIFT (0U) +/*! RMODE - Serial Interface Read Mode. + */ +#define QSPI_RDMODE_RMODE(x) (((uint32_t)(((uint32_t)(x)) << QSPI_RDMODE_RMODE_SHIFT)) & QSPI_RDMODE_RMODE_MASK) +/*! @} */ + +/*! @name HDRCNT - Serial Interface Header Count Register */ +/*! @{ */ +#define QSPI_HDRCNT_INSTR_CNT_MASK (0x3U) +#define QSPI_HDRCNT_INSTR_CNT_SHIFT (0U) +/*! INSTR_CNT - Instruction Count. + * 0b00..0 byte. + * 0b01..1 byte. + * 0b10..2 bytes. + * 0b11..Reserved. + */ +#define QSPI_HDRCNT_INSTR_CNT(x) (((uint32_t)(((uint32_t)(x)) << QSPI_HDRCNT_INSTR_CNT_SHIFT)) & QSPI_HDRCNT_INSTR_CNT_MASK) +#define QSPI_HDRCNT_ADDR_CNT_MASK (0x70U) +#define QSPI_HDRCNT_ADDR_CNT_SHIFT (4U) +/*! ADDR_CNT - Address Count. + * 0b000..0 byte. + * 0b001..1 byte. + * 0b010..2 bytes. + * 0b011..3 bytes. + * 0b100..4 bytes. + */ +#define QSPI_HDRCNT_ADDR_CNT(x) (((uint32_t)(((uint32_t)(x)) << QSPI_HDRCNT_ADDR_CNT_SHIFT)) & QSPI_HDRCNT_ADDR_CNT_MASK) +#define QSPI_HDRCNT_RM_CNT_MASK (0x300U) +#define QSPI_HDRCNT_RM_CNT_SHIFT (8U) +/*! RM_CNT - Read Mode Count. + * 0b00..0 byte. + * 0b01..1 byte. + * 0b10..2 bytes. + * 0b11..Reserved. + */ +#define QSPI_HDRCNT_RM_CNT(x) (((uint32_t)(((uint32_t)(x)) << QSPI_HDRCNT_RM_CNT_SHIFT)) & QSPI_HDRCNT_RM_CNT_MASK) +#define QSPI_HDRCNT_DUMMY_CNT_MASK (0x3000U) +#define QSPI_HDRCNT_DUMMY_CNT_SHIFT (12U) +/*! DUMMY_CNT - Dummy Count. + * 0b00..0 byte. + * 0b01..1 byte. + * 0b10..2 bytes. + * 0b11..3 bytes. + */ +#define QSPI_HDRCNT_DUMMY_CNT(x) (((uint32_t)(((uint32_t)(x)) << QSPI_HDRCNT_DUMMY_CNT_SHIFT)) & QSPI_HDRCNT_DUMMY_CNT_MASK) +/*! @} */ + +/*! @name DINCNT - Serial Interface Data Input Count Register */ +/*! @{ */ +#define QSPI_DINCNT_DATA_IN_CNT_MASK (0xFFFFFU) +#define QSPI_DINCNT_DATA_IN_CNT_SHIFT (0U) +/*! DATA_IN_CNT - Serial Interface Data In Count. + */ +#define QSPI_DINCNT_DATA_IN_CNT(x) (((uint32_t)(((uint32_t)(x)) << QSPI_DINCNT_DATA_IN_CNT_SHIFT)) & QSPI_DINCNT_DATA_IN_CNT_MASK) +/*! @} */ + +/*! @name TIMING - Serial Interface Timing Register */ +/*! @{ */ +#define QSPI_TIMING_DATA_IN_DLY_MASK (0x3U) +#define QSPI_TIMING_DATA_IN_DLY_SHIFT (0U) +/*! DATA_IN_DLY - Serial Interface Data Input Delay + * 0b00..No delay. + * 0b01..1 serial interface clock delay. + * 0b10..2 serial interface clock delay. + * 0b11..Reserved + */ +#define QSPI_TIMING_DATA_IN_DLY(x) (((uint32_t)(((uint32_t)(x)) << QSPI_TIMING_DATA_IN_DLY_SHIFT)) & QSPI_TIMING_DATA_IN_DLY_MASK) +#define QSPI_TIMING_CLK_IN_DLY_MASK (0x30U) +#define QSPI_TIMING_CLK_IN_DLY_SHIFT (4U) +/*! CLK_IN_DLY - Serial Interface Clock In Delay. + * 0b00..No delay. + * 0b01..Add 0.2 ns delay. + * 0b10..Add 0.4 ns delay + * 0b11..Add 0.6 ns delay + */ +#define QSPI_TIMING_CLK_IN_DLY(x) (((uint32_t)(((uint32_t)(x)) << QSPI_TIMING_CLK_IN_DLY_SHIFT)) & QSPI_TIMING_CLK_IN_DLY_MASK) +#define QSPI_TIMING_CLK_CAPT_EDGE_MASK (0x40U) +#define QSPI_TIMING_CLK_CAPT_EDGE_SHIFT (6U) +/*! CLK_CAPT_EDGE - Serial Interface Capture Clock Edge. + * 0b0..rising edge + * 0b1..falling edge + */ +#define QSPI_TIMING_CLK_CAPT_EDGE(x) (((uint32_t)(((uint32_t)(x)) << QSPI_TIMING_CLK_CAPT_EDGE_SHIFT)) & QSPI_TIMING_CLK_CAPT_EDGE_MASK) +#define QSPI_TIMING_CLK_OUT_DLY_MASK (0x300U) +#define QSPI_TIMING_CLK_OUT_DLY_SHIFT (8U) +/*! CLK_OUT_DLY - Serial Interface Clock Out Delay. + * 0b00..No delay. + * 0b01..Add 0.2 ns delay. + * 0b10..Add 0.4 ns delay. + * 0b11..Add 0.6 ns delay. + */ +#define QSPI_TIMING_CLK_OUT_DLY(x) (((uint32_t)(((uint32_t)(x)) << QSPI_TIMING_CLK_OUT_DLY_SHIFT)) & QSPI_TIMING_CLK_OUT_DLY_MASK) +/*! @} */ + +/*! @name CONF2 - Serial Interface Configuration 2 Register */ +/*! @{ */ +#define QSPI_CONF2_SRST_MASK (0x1U) +#define QSPI_CONF2_SRST_SHIFT (0U) +/*! SRST - Soft Reset. + * 0b0..Hardware is not in reset. + * 0b1..Hardware is in reset. + */ +#define QSPI_CONF2_SRST(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF2_SRST_SHIFT)) & QSPI_CONF2_SRST_MASK) +#define QSPI_CONF2_DMA_RD_EN_MASK (0x2U) +#define QSPI_CONF2_DMA_RD_EN_SHIFT (1U) +/*! DMA_RD_EN - DMA Read Enable. + * 0b0..DMA read is disabled. + * 0b1..DMA read is enabled. + */ +#define QSPI_CONF2_DMA_RD_EN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF2_DMA_RD_EN_SHIFT)) & QSPI_CONF2_DMA_RD_EN_MASK) +#define QSPI_CONF2_DMA_WR_EN_MASK (0x4U) +#define QSPI_CONF2_DMA_WR_EN_SHIFT (2U) +/*! DMA_WR_EN - DMA Write Enable. + * 0b0..DMA write is disabled. + * 0b1..DMA write is enabled. + */ +#define QSPI_CONF2_DMA_WR_EN(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF2_DMA_WR_EN_SHIFT)) & QSPI_CONF2_DMA_WR_EN_MASK) +#define QSPI_CONF2_DMA_RD_BURST_MASK (0x300U) +#define QSPI_CONF2_DMA_RD_BURST_SHIFT (8U) +/*! DMA_RD_BURST - DMA Read Burst. + * 0b00..1 data. + * 0b01..4 data. + * 0b10..8 data. + * 0b11..Reserved. + */ +#define QSPI_CONF2_DMA_RD_BURST(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF2_DMA_RD_BURST_SHIFT)) & QSPI_CONF2_DMA_RD_BURST_MASK) +#define QSPI_CONF2_DMA_WR_BURST_MASK (0x3000U) +#define QSPI_CONF2_DMA_WR_BURST_SHIFT (12U) +/*! DMA_WR_BURST - DMA Write Burst. + * 0b00..1 data. + * 0b01..4 data. + * 0b10..8 data. + * 0b11..Reserved. + */ +#define QSPI_CONF2_DMA_WR_BURST(x) (((uint32_t)(((uint32_t)(x)) << QSPI_CONF2_DMA_WR_BURST_SHIFT)) & QSPI_CONF2_DMA_WR_BURST_MASK) +/*! @} */ + +/*! @name ISR - Serial Interface Interrupt Status Register */ +/*! @{ */ +#define QSPI_ISR_XFER_DONE_IS_MASK (0x1U) +#define QSPI_ISR_XFER_DONE_IS_SHIFT (0U) +/*! XFER_DONE_IS - Transfer Done Interrupt Status. + * 0b0..Transfer has not completed after masking. + * 0b1..Transfer has completed after masking. + */ +#define QSPI_ISR_XFER_DONE_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_XFER_DONE_IS_SHIFT)) & QSPI_ISR_XFER_DONE_IS_MASK) +#define QSPI_ISR_XFER_RDY_IS_MASK (0x2U) +#define QSPI_ISR_XFER_RDY_IS_SHIFT (1U) +/*! XFER_RDY_IS - Serial Interface Transfer Ready Interrupt Status + * 0b0..Serial interface is currently transferring data after masking. + * 0b1..Serial interface is ready for a new transfer after masking. + */ +#define QSPI_ISR_XFER_RDY_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_XFER_RDY_IS_SHIFT)) & QSPI_ISR_XFER_RDY_IS_MASK) +#define QSPI_ISR_RFIFO_DMA_BURST_IS_MASK (0x4U) +#define QSPI_ISR_RFIFO_DMA_BURST_IS_SHIFT (2U) +/*! RFIFO_DMA_BURST_IS - Read FIFO DMA Burst Interrupt Status. + * 0b0..Number of available data in the Read FIFO is less than DMA_RD_BURST (R28h [9:8]) after masking. + * 0b1..Number of available data in the Read FIFO is greater than or equal to DMA_RD_BURST (R28h [9:8]) after masking. + */ +#define QSPI_ISR_RFIFO_DMA_BURST_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_RFIFO_DMA_BURST_IS_SHIFT)) & QSPI_ISR_RFIFO_DMA_BURST_IS_MASK) +#define QSPI_ISR_WFIFO_DMA_BURST_IS_MASK (0x8U) +#define QSPI_ISR_WFIFO_DMA_BURST_IS_SHIFT (3U) +/*! WFIFO_DMA_BURST_IS - Write FIFO DMA burst Interrupt Status. + * 0b0..Number of unused entries in the Write FIFO is less than DMA_WR_BURST (R28h [13:12]) after masking. + * 0b1..Number of unused entries in the Write FIFO is greater than or equal to DMA_WR_BURST (R28h [13:12]) after masking. + */ +#define QSPI_ISR_WFIFO_DMA_BURST_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_WFIFO_DMA_BURST_IS_SHIFT)) & QSPI_ISR_WFIFO_DMA_BURST_IS_MASK) +#define QSPI_ISR_RFIFO_EMPTY_IS_MASK (0x10U) +#define QSPI_ISR_RFIFO_EMPTY_IS_SHIFT (4U) +/*! RFIFO_EMPTY_IS - Read FIFO Empty Interrupt Status. + * 0b0..Read FIFO is not emptied after masking. + * 0b1..Read FIFO is empty after masking. + */ +#define QSPI_ISR_RFIFO_EMPTY_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_RFIFO_EMPTY_IS_SHIFT)) & QSPI_ISR_RFIFO_EMPTY_IS_MASK) +#define QSPI_ISR_RFIFO_FULL_IS_MASK (0x20U) +#define QSPI_ISR_RFIFO_FULL_IS_SHIFT (5U) +/*! RFIFO_FULL_IS - Read FIFO Full Interrupt Status. + * 0b0..Read FIFO is not fulled after masking. + * 0b1..Read FIFO is fulled after masking. + */ +#define QSPI_ISR_RFIFO_FULL_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_RFIFO_FULL_IS_SHIFT)) & QSPI_ISR_RFIFO_FULL_IS_MASK) +#define QSPI_ISR_WFIFO_EMPTY_IS_MASK (0x40U) +#define QSPI_ISR_WFIFO_EMPTY_IS_SHIFT (6U) +/*! WFIFO_EMPTY_IS - Write FIFO Empty Interrupt Status. + * 0b0..Write FIFO is not emptied after masking. + * 0b1..Write FIFO is emptied after masking. + */ +#define QSPI_ISR_WFIFO_EMPTY_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_WFIFO_EMPTY_IS_SHIFT)) & QSPI_ISR_WFIFO_EMPTY_IS_MASK) +#define QSPI_ISR_WFIFO_FULL_IS_MASK (0x80U) +#define QSPI_ISR_WFIFO_FULL_IS_SHIFT (7U) +/*! WFIFO_FULL_IS - Write FIFO Full Interrupt Status. + * 0b0..Write FIFO is not fulled after masking. + * 0b1..Write FIFO is fulled after masking. + */ +#define QSPI_ISR_WFIFO_FULL_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_WFIFO_FULL_IS_SHIFT)) & QSPI_ISR_WFIFO_FULL_IS_MASK) +#define QSPI_ISR_RFIFO_UNDRFLW_IS_MASK (0x100U) +#define QSPI_ISR_RFIFO_UNDRFLW_IS_SHIFT (8U) +/*! RFIFO_UNDRFLW_IS - Read FIFO Underflow Interrupt Status. + * 0b0..Read FIFO is not underflowed after masking. + * 0b1..Read FIFO is underflowed after masking. + */ +#define QSPI_ISR_RFIFO_UNDRFLW_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_RFIFO_UNDRFLW_IS_SHIFT)) & QSPI_ISR_RFIFO_UNDRFLW_IS_MASK) +#define QSPI_ISR_RFIFO_OVRFLW_IS_MASK (0x200U) +#define QSPI_ISR_RFIFO_OVRFLW_IS_SHIFT (9U) +/*! RFIFO_OVRFLW_IS - Read FIFO Overflow Interrupt Status. + * 0b0..Read FIFO is not overflowed after masking. + * 0b1..Read FIFO is overflowed after masking. + */ +#define QSPI_ISR_RFIFO_OVRFLW_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_RFIFO_OVRFLW_IS_SHIFT)) & QSPI_ISR_RFIFO_OVRFLW_IS_MASK) +#define QSPI_ISR_WFIFO_UNDRFLW_IS_MASK (0x400U) +#define QSPI_ISR_WFIFO_UNDRFLW_IS_SHIFT (10U) +/*! WFIFO_UNDRFLW_IS - Write FIFO Underflow Interrupt Status. + * 0b0..Write FIFO is not underflowed after masking. + * 0b1..Write FIFO is underflowed after masking. + */ +#define QSPI_ISR_WFIFO_UNDRFLW_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_WFIFO_UNDRFLW_IS_SHIFT)) & QSPI_ISR_WFIFO_UNDRFLW_IS_MASK) +#define QSPI_ISR_WFIFO_OVRFLW_IS_MASK (0x800U) +#define QSPI_ISR_WFIFO_OVRFLW_IS_SHIFT (11U) +/*! WFIFO_OVRFLW_IS - Write FIFO Overflow Interrupt Status. + * 0b0..Write FIFO is not overflowed after masking. + * 0b1..Write FIFO is overflowed after masking. + */ +#define QSPI_ISR_WFIFO_OVRFLW_IS(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISR_WFIFO_OVRFLW_IS_SHIFT)) & QSPI_ISR_WFIFO_OVRFLW_IS_MASK) +/*! @} */ + +/*! @name IMR - Serial Interface Interrupt Mask Register */ +/*! @{ */ +#define QSPI_IMR_XFER_DONE_IM_MASK (0x1U) +#define QSPI_IMR_XFER_DONE_IM_SHIFT (0U) +/*! XFER_DONE_IM - Transfer Done Interrupt Mask. + * 0b0..Transfer done interrupt is not masked. + * 0b1..Transfer done interrupt is masked. + */ +#define QSPI_IMR_XFER_DONE_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_XFER_DONE_IM_SHIFT)) & QSPI_IMR_XFER_DONE_IM_MASK) +#define QSPI_IMR_XFER_RDY_IM_MASK (0x2U) +#define QSPI_IMR_XFER_RDY_IM_SHIFT (1U) +/*! XFER_RDY_IM - Serial Interface Transfer Ready Mask. + * 0b0..Transfer ready interrupt is not masked. + * 0b1..Transfer ready interrupt is masked. + */ +#define QSPI_IMR_XFER_RDY_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_XFER_RDY_IM_SHIFT)) & QSPI_IMR_XFER_RDY_IM_MASK) +#define QSPI_IMR_RFIFO_DMA_BURST_IM_MASK (0x4U) +#define QSPI_IMR_RFIFO_DMA_BURST_IM_SHIFT (2U) +/*! RFIFO_DMA_BURST_IM - Read FIFO DMA Burst Interrupt Mask. + * 0b0..Read FIFO DMA burst interrupt is not masked. + * 0b1..Read FIFO DMA burst interrupt is masked. + */ +#define QSPI_IMR_RFIFO_DMA_BURST_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_RFIFO_DMA_BURST_IM_SHIFT)) & QSPI_IMR_RFIFO_DMA_BURST_IM_MASK) +#define QSPI_IMR_WFIFO_DMA_BURST_IM_MASK (0x8U) +#define QSPI_IMR_WFIFO_DMA_BURST_IM_SHIFT (3U) +/*! WFIFO_DMA_BURST_IM - Write FIFO DMA Burst Interrupt Mask. + * 0b0..Write FIFO DMA burst interrupt is not masked. + * 0b1..Write FIFO DMA burst interrupt is masked. + */ +#define QSPI_IMR_WFIFO_DMA_BURST_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_WFIFO_DMA_BURST_IM_SHIFT)) & QSPI_IMR_WFIFO_DMA_BURST_IM_MASK) +#define QSPI_IMR_RFIFO_EMPTY_IM_MASK (0x10U) +#define QSPI_IMR_RFIFO_EMPTY_IM_SHIFT (4U) +/*! RFIFO_EMPTY_IM - Read FIFO Empty Interrupt Mask. + * 0b0..Read FIFO empty interrupt is not masked. + * 0b1..Read FIFO empty interrupt is masked. + */ +#define QSPI_IMR_RFIFO_EMPTY_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_RFIFO_EMPTY_IM_SHIFT)) & QSPI_IMR_RFIFO_EMPTY_IM_MASK) +#define QSPI_IMR_RFIFO_FULL_IM_MASK (0x20U) +#define QSPI_IMR_RFIFO_FULL_IM_SHIFT (5U) +/*! RFIFO_FULL_IM - Read FIFO Full Interrupt Mask. + * 0b0..Read FIFO full interrupt is not masked. + * 0b1..Read FIFO full interrupt is masked. + */ +#define QSPI_IMR_RFIFO_FULL_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_RFIFO_FULL_IM_SHIFT)) & QSPI_IMR_RFIFO_FULL_IM_MASK) +#define QSPI_IMR_WFIFO_EMPTY_IM_MASK (0x40U) +#define QSPI_IMR_WFIFO_EMPTY_IM_SHIFT (6U) +/*! WFIFO_EMPTY_IM - Write FIFO Empty Interrupt Mask. + * 0b0..Write FIFO empty interrupt is not masked. + * 0b1..Write FIFO empty interrupt is masked. + */ +#define QSPI_IMR_WFIFO_EMPTY_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_WFIFO_EMPTY_IM_SHIFT)) & QSPI_IMR_WFIFO_EMPTY_IM_MASK) +#define QSPI_IMR_WFIFO_FULL_IM_MASK (0x80U) +#define QSPI_IMR_WFIFO_FULL_IM_SHIFT (7U) +/*! WFIFO_FULL_IM - Write FIFO Full Interrupt Mask. + * 0b0..Write FIFO full interrupt is not masked. + * 0b1..Write FIFO full interrupt is masked. + */ +#define QSPI_IMR_WFIFO_FULL_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_WFIFO_FULL_IM_SHIFT)) & QSPI_IMR_WFIFO_FULL_IM_MASK) +#define QSPI_IMR_RFIFO_UNDRFLW_IM_MASK (0x100U) +#define QSPI_IMR_RFIFO_UNDRFLW_IM_SHIFT (8U) +/*! RFIFO_UNDRFLW_IM - Read FIFO Underflow Interrupt Mask. + * 0b0..Read FIFO underflow interrupt is not masked. + * 0b1..Read FIFO underflow interrupt is masked. + */ +#define QSPI_IMR_RFIFO_UNDRFLW_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_RFIFO_UNDRFLW_IM_SHIFT)) & QSPI_IMR_RFIFO_UNDRFLW_IM_MASK) +#define QSPI_IMR_RFIFO_OVRFLW_IM_MASK (0x200U) +#define QSPI_IMR_RFIFO_OVRFLW_IM_SHIFT (9U) +/*! RFIFO_OVRFLW_IM - Read FIFO Overflow Interrupt Mask. + * 0b0..Read FIFO overflow interrupt is not masked. + * 0b1..Read FIFO overflow interrupt is masked. + */ +#define QSPI_IMR_RFIFO_OVRFLW_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_RFIFO_OVRFLW_IM_SHIFT)) & QSPI_IMR_RFIFO_OVRFLW_IM_MASK) +#define QSPI_IMR_WFIFO_UNDRFLW_IM_MASK (0x400U) +#define QSPI_IMR_WFIFO_UNDRFLW_IM_SHIFT (10U) +/*! WFIFO_UNDRFLW_IM - Write FIFO Underflow Interrupt Mask. + * 0b0..Write FIFO underflow interrupt is not masked. + * 0b1..Write FIFO underflow interrupt is masked. + */ +#define QSPI_IMR_WFIFO_UNDRFLW_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_WFIFO_UNDRFLW_IM_SHIFT)) & QSPI_IMR_WFIFO_UNDRFLW_IM_MASK) +#define QSPI_IMR_WFIFO_OVRFLW_IM_MASK (0x800U) +#define QSPI_IMR_WFIFO_OVRFLW_IM_SHIFT (11U) +/*! WFIFO_OVRFLW_IM - Write FIFO Overflow Interrupt Mask. + * 0b0..Write FIFO overflow interrupt is not masked. + * 0b1..Write FIFO overflow interrupt is masked. + */ +#define QSPI_IMR_WFIFO_OVRFLW_IM(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IMR_WFIFO_OVRFLW_IM_SHIFT)) & QSPI_IMR_WFIFO_OVRFLW_IM_MASK) +/*! @} */ + +/*! @name IRSR - Serial Interface Interrupt Raw Status Register */ +/*! @{ */ +#define QSPI_IRSR_XFER_DONE_IR_MASK (0x1U) +#define QSPI_IRSR_XFER_DONE_IR_SHIFT (0U) +/*! XFER_DONE_IR - Transfer Done Interrupt Raw. + * 0b0..Transfer has not completed before masking. + * 0b1..Transfer has completed before masking. + */ +#define QSPI_IRSR_XFER_DONE_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_XFER_DONE_IR_SHIFT)) & QSPI_IRSR_XFER_DONE_IR_MASK) +#define QSPI_IRSR_XFER_RDY_IR_MASK (0x2U) +#define QSPI_IRSR_XFER_RDY_IR_SHIFT (1U) +/*! XFER_RDY_IR - Serial Interface Transfer Ready Raw. + * 0b0..Serial interface is currently transferring data before masking. + * 0b1..Serial interface is ready for a new transfer before masking. + */ +#define QSPI_IRSR_XFER_RDY_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_XFER_RDY_IR_SHIFT)) & QSPI_IRSR_XFER_RDY_IR_MASK) +#define QSPI_IRSR_RFIFO_DMA_BURST_IR_MASK (0x4U) +#define QSPI_IRSR_RFIFO_DMA_BURST_IR_SHIFT (2U) +/*! RFIFO_DMA_BURST_IR - Read FIFO DMA Burst Interrupt Raw. + * 0b0..Number of available data in the Read FIFO is less than DMA_RD_BURST (R28h [9:8]) before masking. + * 0b1..Number of available data in the Read FIFO is greater than or equal to DMA_RD_BURST (R28h [9:8]) before masking. + */ +#define QSPI_IRSR_RFIFO_DMA_BURST_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_RFIFO_DMA_BURST_IR_SHIFT)) & QSPI_IRSR_RFIFO_DMA_BURST_IR_MASK) +#define QSPI_IRSR_WFIFO_DMA_BURST_IR_MASK (0x8U) +#define QSPI_IRSR_WFIFO_DMA_BURST_IR_SHIFT (3U) +/*! WFIFO_DMA_BURST_IR - Write FIFO DMA Burst Interrupt Raw. + * 0b0..Number of unused entries in the Write FIFO is less than DMA_WR_BURST (R28h [13:12]) before masking. + * 0b1..Number of unused entries in the Write FIFO is greater than or equal to DMA_WR_BURST (R28h [13:12]) before masking. + */ +#define QSPI_IRSR_WFIFO_DMA_BURST_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_WFIFO_DMA_BURST_IR_SHIFT)) & QSPI_IRSR_WFIFO_DMA_BURST_IR_MASK) +#define QSPI_IRSR_RFIFO_EMPTY_IR_MASK (0x10U) +#define QSPI_IRSR_RFIFO_EMPTY_IR_SHIFT (4U) +/*! RFIFO_EMPTY_IR - Read FIFO Empty Interrupt Raw. + * 0b0..Read FIFO is not emptied before masking. + * 0b1..Read FIFO is empty before masking. + */ +#define QSPI_IRSR_RFIFO_EMPTY_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_RFIFO_EMPTY_IR_SHIFT)) & QSPI_IRSR_RFIFO_EMPTY_IR_MASK) +#define QSPI_IRSR_RFIFO_FULL_IR_MASK (0x20U) +#define QSPI_IRSR_RFIFO_FULL_IR_SHIFT (5U) +/*! RFIFO_FULL_IR - Read FIFO Full Interrupt Raw. + * 0b0..Read FIFO is not fulled before masking. + * 0b1..Read FIFO is fulled before masking. + */ +#define QSPI_IRSR_RFIFO_FULL_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_RFIFO_FULL_IR_SHIFT)) & QSPI_IRSR_RFIFO_FULL_IR_MASK) +#define QSPI_IRSR_WFIFO_EMPTY_IR_MASK (0x40U) +#define QSPI_IRSR_WFIFO_EMPTY_IR_SHIFT (6U) +/*! WFIFO_EMPTY_IR - Write FIFO Empty Interrupt Raw. + * 0b0..Write FIFO is not emptied before masking. + * 0b1..Write FIFO is emptied before masking. + */ +#define QSPI_IRSR_WFIFO_EMPTY_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_WFIFO_EMPTY_IR_SHIFT)) & QSPI_IRSR_WFIFO_EMPTY_IR_MASK) +#define QSPI_IRSR_WFIFO_FULL_IR_MASK (0x80U) +#define QSPI_IRSR_WFIFO_FULL_IR_SHIFT (7U) +/*! WFIFO_FULL_IR - Write FIFO Full Interrupt Raw. + * 0b0..Write FIFO is not fulled before masking. + * 0b1..Write FIFO is fulled before masking. + */ +#define QSPI_IRSR_WFIFO_FULL_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_WFIFO_FULL_IR_SHIFT)) & QSPI_IRSR_WFIFO_FULL_IR_MASK) +#define QSPI_IRSR_RFIFO_UNDRFLW_IR_MASK (0x100U) +#define QSPI_IRSR_RFIFO_UNDRFLW_IR_SHIFT (8U) +/*! RFIFO_UNDRFLW_IR - Read FIFO Underflow Interrupt Raw. + * 0b0..Read FIFO is not underflowed before masking. + * 0b1..Read FIFO is underflowed before masking. + */ +#define QSPI_IRSR_RFIFO_UNDRFLW_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_RFIFO_UNDRFLW_IR_SHIFT)) & QSPI_IRSR_RFIFO_UNDRFLW_IR_MASK) +#define QSPI_IRSR_RFIFO_OVRFLW_IR_MASK (0x200U) +#define QSPI_IRSR_RFIFO_OVRFLW_IR_SHIFT (9U) +/*! RFIFO_OVRFLW_IR - Read FIFO Overflow Interrupt Raw. + * 0b0..Read FIFO is not overflowed before masking. + * 0b1..Read FIFO is overflowed before masking. + */ +#define QSPI_IRSR_RFIFO_OVRFLW_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_RFIFO_OVRFLW_IR_SHIFT)) & QSPI_IRSR_RFIFO_OVRFLW_IR_MASK) +#define QSPI_IRSR_WFIFO_UNDRFLW_IR_MASK (0x400U) +#define QSPI_IRSR_WFIFO_UNDRFLW_IR_SHIFT (10U) +/*! WFIFO_UNDRFLW_IR - Write FIFO Underflow Interrupt Raw. + * 0b0..Write FIFO is not underflowed before masking. + * 0b1..Write FIFO is underflowed before masking. + */ +#define QSPI_IRSR_WFIFO_UNDRFLW_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_WFIFO_UNDRFLW_IR_SHIFT)) & QSPI_IRSR_WFIFO_UNDRFLW_IR_MASK) +#define QSPI_IRSR_WFIFO_OVRFLW_IR_MASK (0x800U) +#define QSPI_IRSR_WFIFO_OVRFLW_IR_SHIFT (11U) +/*! WFIFO_OVRFLW_IR - Write FIFO Overflow Interrupt Raw. + * 0b0..Write FIFO is not overflowed before masking. + * 0b1..Write FIFO is overflowed before masking. + */ +#define QSPI_IRSR_WFIFO_OVRFLW_IR(x) (((uint32_t)(((uint32_t)(x)) << QSPI_IRSR_WFIFO_OVRFLW_IR_SHIFT)) & QSPI_IRSR_WFIFO_OVRFLW_IR_MASK) +/*! @} */ + +/*! @name ISC - Serial Interface Interrupt Clear Register */ +/*! @{ */ +#define QSPI_ISC_XFER_DONE_IC_MASK (0x1U) +#define QSPI_ISC_XFER_DONE_IC_SHIFT (0U) +/*! XFER_DONE_IC - Transfer Done Interrupt Clear. + * 0b0..Transfer done interrupt is not cleared. + * 0b1..Transfer done interrupt is cleared. + */ +#define QSPI_ISC_XFER_DONE_IC(x) (((uint32_t)(((uint32_t)(x)) << QSPI_ISC_XFER_DONE_IC_SHIFT)) & QSPI_ISC_XFER_DONE_IC_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group QSPI_Register_Masks */ + + +/* QSPI - Peripheral instance base addresses */ +/** Peripheral QSPI base address */ +#define QSPI_BASE (0x46010000u) +/** Peripheral QSPI base pointer */ +#define QSPI ((QSPI_Type *)QSPI_BASE) +/** Array initializer of QSPI peripheral base addresses */ +#define QSPI_BASE_ADDRS { QSPI_BASE } +/** Array initializer of QSPI peripheral base pointers */ +#define QSPI_BASE_PTRS { QSPI } +/** Interrupt vectors for the QSPI peripheral type */ +#define QSPI_IRQS { QSPI_IRQn } + +/*! + * @} + */ /* end of group QSPI_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- RC32 Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RC32_Peripheral_Access_Layer RC32 Peripheral Access Layer + * @{ + */ + +/** RC32 - Register Layout Typedef */ +typedef struct { + __IO uint32_t CTRL; /**< Control Register, offset: 0x0 */ + __I uint32_t STATUS; /**< Status Register, offset: 0x4 */ + __I uint32_t ISR; /**< Interrupt Status Register, offset: 0x8 */ + __IO uint32_t IMR; /**< Interrupt Mask Register, offset: 0xC */ + __I uint32_t IRSR; /**< Interrupt Raw Status Register, offset: 0x10 */ + __IO uint32_t ICR; /**< Interrupt Clear Register, offset: 0x14 */ + __IO uint32_t CLK; /**< Clock Register, offset: 0x18 */ + __IO uint32_t RST; /**< Soft Reset Register, offset: 0x1C */ +} RC32_Type; + +/* ---------------------------------------------------------------------------- + -- RC32 Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RC32_Register_Masks RC32 Register Masks + * @{ + */ + +/*! @name CTRL - Control Register */ +/*! @{ */ +#define RC32_CTRL_EN_MASK (0x1U) +#define RC32_CTRL_EN_SHIFT (0U) +/*! en - Calibration reference clock enable + * 0b0.. + * 0b1.. + */ +#define RC32_CTRL_EN(x) (((uint32_t)(((uint32_t)(x)) << RC32_CTRL_EN_SHIFT)) & RC32_CTRL_EN_MASK) +#define RC32_CTRL_CAL_EN_MASK (0x2U) +#define RC32_CTRL_CAL_EN_SHIFT (1U) +/*! cal_en - Calibration enable + * 0b0.. + * 0b1.. + */ +#define RC32_CTRL_CAL_EN(x) (((uint32_t)(((uint32_t)(x)) << RC32_CTRL_CAL_EN_SHIFT)) & RC32_CTRL_CAL_EN_MASK) +#define RC32_CTRL_EXT_CODE_EN_MASK (0x4U) +#define RC32_CTRL_EXT_CODE_EN_SHIFT (2U) +/*! ext_code_en - Calibration code from external enable + * 0b0..calibration code from internal + * 0b1..calibration code from external + */ +#define RC32_CTRL_EXT_CODE_EN(x) (((uint32_t)(((uint32_t)(x)) << RC32_CTRL_EXT_CODE_EN_SHIFT)) & RC32_CTRL_EXT_CODE_EN_MASK) +#define RC32_CTRL_PD_MASK (0x8U) +#define RC32_CTRL_PD_SHIFT (3U) +/*! pd - Clock Power down + * 0b0..Power up. + * 0b1..Power down + */ +#define RC32_CTRL_PD(x) (((uint32_t)(((uint32_t)(x)) << RC32_CTRL_PD_SHIFT)) & RC32_CTRL_PD_MASK) +#define RC32_CTRL_CODE_FR_EXT_MASK (0xFF0U) +#define RC32_CTRL_CODE_FR_EXT_SHIFT (4U) +/*! code_fr_ext - External code input for calibration. + */ +#define RC32_CTRL_CODE_FR_EXT(x) (((uint32_t)(((uint32_t)(x)) << RC32_CTRL_CODE_FR_EXT_SHIFT)) & RC32_CTRL_CODE_FR_EXT_MASK) +/*! @} */ + +/*! @name STATUS - Status Register */ +/*! @{ */ +#define RC32_STATUS_CLK_RDY_MASK (0x1U) +#define RC32_STATUS_CLK_RDY_SHIFT (0U) +/*! clk_rdy - Clock Ready + */ +#define RC32_STATUS_CLK_RDY(x) (((uint32_t)(((uint32_t)(x)) << RC32_STATUS_CLK_RDY_SHIFT)) & RC32_STATUS_CLK_RDY_MASK) +#define RC32_STATUS_CAL_DONE_MASK (0x2U) +#define RC32_STATUS_CAL_DONE_SHIFT (1U) +/*! cal_done - Calibration finish flag + * 0b0..calibration not done + * 0b1..calibration done + */ +#define RC32_STATUS_CAL_DONE(x) (((uint32_t)(((uint32_t)(x)) << RC32_STATUS_CAL_DONE_SHIFT)) & RC32_STATUS_CAL_DONE_MASK) +#define RC32_STATUS_CODE_FR_CAL_MASK (0x3FCU) +#define RC32_STATUS_CODE_FR_CAL_SHIFT (2U) +/*! code_fr_cal - Calibration code + */ +#define RC32_STATUS_CODE_FR_CAL(x) (((uint32_t)(((uint32_t)(x)) << RC32_STATUS_CODE_FR_CAL_SHIFT)) & RC32_STATUS_CODE_FR_CAL_MASK) +/*! @} */ + +/*! @name ISR - Interrupt Status Register */ +/*! @{ */ +#define RC32_ISR_CALDON_INT_MASK (0x1U) +#define RC32_ISR_CALDON_INT_SHIFT (0U) +/*! caldon_int - Calibration Done Interrupt + */ +#define RC32_ISR_CALDON_INT(x) (((uint32_t)(((uint32_t)(x)) << RC32_ISR_CALDON_INT_SHIFT)) & RC32_ISR_CALDON_INT_MASK) +#define RC32_ISR_CKRDY_INT_MASK (0x2U) +#define RC32_ISR_CKRDY_INT_SHIFT (1U) +/*! ckrdy_int - Clock Ready Interrupt + */ +#define RC32_ISR_CKRDY_INT(x) (((uint32_t)(((uint32_t)(x)) << RC32_ISR_CKRDY_INT_SHIFT)) & RC32_ISR_CKRDY_INT_MASK) +/*! @} */ + +/*! @name IMR - Interrupt Mask Register */ +/*! @{ */ +#define RC32_IMR_CALDON_INT_MSK_MASK (0x1U) +#define RC32_IMR_CALDON_INT_MSK_SHIFT (0U) +/*! caldon_int_msk - Calibration Done Interrupt Mask + */ +#define RC32_IMR_CALDON_INT_MSK(x) (((uint32_t)(((uint32_t)(x)) << RC32_IMR_CALDON_INT_MSK_SHIFT)) & RC32_IMR_CALDON_INT_MSK_MASK) +#define RC32_IMR_CKRDY_INT_MSK_MASK (0x2U) +#define RC32_IMR_CKRDY_INT_MSK_SHIFT (1U) +/*! ckrdy_int_msk - Clock Ready Interrupt Mask + */ +#define RC32_IMR_CKRDY_INT_MSK(x) (((uint32_t)(((uint32_t)(x)) << RC32_IMR_CKRDY_INT_MSK_SHIFT)) & RC32_IMR_CKRDY_INT_MSK_MASK) +/*! @} */ + +/*! @name IRSR - Interrupt Raw Status Register */ +/*! @{ */ +#define RC32_IRSR_CALDON_INT_RAW_MASK (0x1U) +#define RC32_IRSR_CALDON_INT_RAW_SHIFT (0U) +/*! caldon_int_raw - Calibration Done Interrupt Raw + */ +#define RC32_IRSR_CALDON_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << RC32_IRSR_CALDON_INT_RAW_SHIFT)) & RC32_IRSR_CALDON_INT_RAW_MASK) +#define RC32_IRSR_CKRDY_INT_RAW_MASK (0x2U) +#define RC32_IRSR_CKRDY_INT_RAW_SHIFT (1U) +/*! ckrdy_int_raw - Clock Ready Interrupt Raw + */ +#define RC32_IRSR_CKRDY_INT_RAW(x) (((uint32_t)(((uint32_t)(x)) << RC32_IRSR_CKRDY_INT_RAW_SHIFT)) & RC32_IRSR_CKRDY_INT_RAW_MASK) +/*! @} */ + +/*! @name ICR - Interrupt Clear Register */ +/*! @{ */ +#define RC32_ICR_CALDON_INT_CLR_MASK (0x1U) +#define RC32_ICR_CALDON_INT_CLR_SHIFT (0U) +/*! caldon_int_clr - Calibration Done Interrupt Raw + */ +#define RC32_ICR_CALDON_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << RC32_ICR_CALDON_INT_CLR_SHIFT)) & RC32_ICR_CALDON_INT_CLR_MASK) +#define RC32_ICR_CKRDY_INT_CLR_MASK (0x2U) +#define RC32_ICR_CKRDY_INT_CLR_SHIFT (1U) +/*! ckrdy_int_clr - Clock Ready Interrupt Clear + */ +#define RC32_ICR_CKRDY_INT_CLR(x) (((uint32_t)(((uint32_t)(x)) << RC32_ICR_CKRDY_INT_CLR_SHIFT)) & RC32_ICR_CKRDY_INT_CLR_MASK) +/*! @} */ + +/*! @name CLK - Clock Register */ +/*! @{ */ +#define RC32_CLK_REF_SEL_MASK (0x4U) +#define RC32_CLK_REF_SEL_SHIFT (2U) +/*! ref_sel - Reference clock frequency select. + * 0b0..Half-divided reference clock + * 0b1..Original reference clock + */ +#define RC32_CLK_REF_SEL(x) (((uint32_t)(((uint32_t)(x)) << RC32_CLK_REF_SEL_SHIFT)) & RC32_CLK_REF_SEL_MASK) +#define RC32_CLK_SOFT_CLK_RST_MASK (0x8U) +#define RC32_CLK_SOFT_CLK_RST_SHIFT (3U) +/*! soft_clk_rst - Soft reset for clock divider + * 0b0..No action + * 0b1.. + */ +#define RC32_CLK_SOFT_CLK_RST(x) (((uint32_t)(((uint32_t)(x)) << RC32_CLK_SOFT_CLK_RST_SHIFT)) & RC32_CLK_SOFT_CLK_RST_MASK) +/*! @} */ + +/*! @name RST - Soft Reset Register */ +/*! @{ */ +#define RC32_RST_SOFT_RST_MASK (0x1U) +#define RC32_RST_SOFT_RST_SHIFT (0U) +/*! soft_rst - Soft reset for module, active high + * 0b0..No action + * 0b1.. + */ +#define RC32_RST_SOFT_RST(x) (((uint32_t)(((uint32_t)(x)) << RC32_RST_SOFT_RST_SHIFT)) & RC32_RST_SOFT_RST_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group RC32_Register_Masks */ + + +/* RC32 - Peripheral instance base addresses */ +/** Peripheral RC32 base address */ +#define RC32_BASE (0x460A0000u) +/** Peripheral RC32 base pointer */ +#define RC32 ((RC32_Type *)RC32_BASE) +/** Array initializer of RC32 peripheral base addresses */ +#define RC32_BASE_ADDRS { RC32_BASE } +/** Array initializer of RC32 peripheral base pointers */ +#define RC32_BASE_PTRS { RC32 } +/** Interrupt vectors for the RC32 peripheral type */ +#define RC32_IRQS { RC32M_IRQn } + +/*! + * @} + */ /* end of group RC32_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- RTC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RTC_Peripheral_Access_Layer RTC Peripheral Access Layer + * @{ + */ + +/** RTC - Register Layout Typedef */ +typedef struct { + __IO uint32_t CNT_EN_REG; /**< Counter Enable Register, offset: 0x0 */ + uint8_t RESERVED_0[28]; + __IO uint32_t INT_RAW_REG; /**< Interrupt Raw Register, offset: 0x20 */ + __I uint32_t INT_REG; /**< Interrupt Register, offset: 0x24 */ + __IO uint32_t INT_MSK_REG; /**< Interrupt Mask Register, offset: 0x28 */ + uint8_t RESERVED_1[20]; + __IO uint32_t CNT_CNTL_REG; /**< Counter Control Register, offset: 0x40 */ + uint8_t RESERVED_2[12]; + __I uint32_t CNT_VAL_REG; /**< Counter Value Register, offset: 0x50 */ + uint8_t RESERVED_3[12]; + __IO uint32_t CNT_UPP_VAL_REG; /**< Counter Upper Value Register, offset: 0x60 */ + uint8_t RESERVED_4[12]; + __IO uint32_t CNT_ALARM_VAL_REG; /**< Counter Alarm Value Register, offset: 0x70 */ + uint8_t RESERVED_5[12]; + __IO uint32_t CLK_CNTL_REG; /**< Clock control register, offset: 0x80 */ +} RTC_Type; + +/* ---------------------------------------------------------------------------- + -- RTC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RTC_Register_Masks RTC Register Masks + * @{ + */ + +/*! @name CNT_EN_REG - Counter Enable Register */ +/*! @{ */ +#define RTC_CNT_EN_REG_CNT_START_MASK (0x1U) +#define RTC_CNT_EN_REG_CNT_START_SHIFT (0U) +/*! CNT_START - Counter Enable + * 0b0..No action + * 0b1..Enable the counter (poll CNT_RUN for 1 to confirm that the counter is enabled internally) + */ +#define RTC_CNT_EN_REG_CNT_START(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_EN_REG_CNT_START_SHIFT)) & RTC_CNT_EN_REG_CNT_START_MASK) +#define RTC_CNT_EN_REG_CNT_STOP_MASK (0x2U) +#define RTC_CNT_EN_REG_CNT_STOP_SHIFT (1U) +/*! CNT_STOP - Counter Disable + * 0b0..No action + * 0b1..Disable the counter (poll CNT_RUN for 0 to confirm that the counter is disabled internally) + */ +#define RTC_CNT_EN_REG_CNT_STOP(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_EN_REG_CNT_STOP_SHIFT)) & RTC_CNT_EN_REG_CNT_STOP_MASK) +#define RTC_CNT_EN_REG_CNT_RESET_MASK (0x4U) +#define RTC_CNT_EN_REG_CNT_RESET_SHIFT (2U) +/*! CNT_RESET - Counter Reset + * 0b0..No action + * 0b1..Reset the counter (counter is reset to 0; channel output states are reset to 0; poll CNT_RST_DONE for 1 + * before writing to any other registers) + */ +#define RTC_CNT_EN_REG_CNT_RESET(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_EN_REG_CNT_RESET_SHIFT)) & RTC_CNT_EN_REG_CNT_RESET_MASK) +#define RTC_CNT_EN_REG_CNT_RUN_MASK (0x10000U) +#define RTC_CNT_EN_REG_CNT_RUN_SHIFT (16U) +/*! CNT_RUN - Counter Enabled Status + * 0b0..Counter is disabled + * 0b1..Counter is enabled + */ +#define RTC_CNT_EN_REG_CNT_RUN(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_EN_REG_CNT_RUN_SHIFT)) & RTC_CNT_EN_REG_CNT_RUN_MASK) +#define RTC_CNT_EN_REG_CNT_RST_DONE_MASK (0x20000U) +#define RTC_CNT_EN_REG_CNT_RST_DONE_SHIFT (17U) +/*! CNT_RST_DONE - Counter Reset Done Status + * 0b0..Indicates that the counter is still resetting + * 0b1..Indicates that the counter has been reset + */ +#define RTC_CNT_EN_REG_CNT_RST_DONE(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_EN_REG_CNT_RST_DONE_SHIFT)) & RTC_CNT_EN_REG_CNT_RST_DONE_MASK) +#define RTC_CNT_EN_REG_STS_RESETN_MASK (0x40000U) +#define RTC_CNT_EN_REG_STS_RESETN_SHIFT (18U) +/*! STS_RESETN - System Reset Status + * 0b0..Indicates that the system reset is still asserted + * 0b1..Indicates that the system reset is deasserted + */ +#define RTC_CNT_EN_REG_STS_RESETN(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_EN_REG_STS_RESETN_SHIFT)) & RTC_CNT_EN_REG_STS_RESETN_MASK) +/*! @} */ + +/*! @name INT_RAW_REG - Interrupt Raw Register */ +/*! @{ */ +#define RTC_INT_RAW_REG_CNT_ALARM_INT_MASK (0x8000U) +#define RTC_INT_RAW_REG_CNT_ALARM_INT_SHIFT (15U) +/*! CNT_ALARM_INT - Counter-Reach-Alarm Interrupt Status + * 0b0..Status cleared + * 0b1..Counter has reached ALARM_VAL + */ +#define RTC_INT_RAW_REG_CNT_ALARM_INT(x) (((uint32_t)(((uint32_t)(x)) << RTC_INT_RAW_REG_CNT_ALARM_INT_SHIFT)) & RTC_INT_RAW_REG_CNT_ALARM_INT_MASK) +#define RTC_INT_RAW_REG_CNT_UPP_INT_MASK (0x10000U) +#define RTC_INT_RAW_REG_CNT_UPP_INT_SHIFT (16U) +/*! CNT_UPP_INT - Counter-Reach-Upper Interrupt Status + * 0b0..Status cleared + * 0b1..Counter has reached UPP_VAL + */ +#define RTC_INT_RAW_REG_CNT_UPP_INT(x) (((uint32_t)(((uint32_t)(x)) << RTC_INT_RAW_REG_CNT_UPP_INT_SHIFT)) & RTC_INT_RAW_REG_CNT_UPP_INT_MASK) +/*! @} */ + +/*! @name INT_REG - Interrupt Register */ +/*! @{ */ +#define RTC_INT_REG_CNT_ALARM_INTR_MASK (0x8000U) +#define RTC_INT_REG_CNT_ALARM_INTR_SHIFT (15U) +/*! CNT_ALARM_INTR - Masked Signal of CNT_ALARM_INT + */ +#define RTC_INT_REG_CNT_ALARM_INTR(x) (((uint32_t)(((uint32_t)(x)) << RTC_INT_REG_CNT_ALARM_INTR_SHIFT)) & RTC_INT_REG_CNT_ALARM_INTR_MASK) +#define RTC_INT_REG_CNT_UPP_INTR_MASK (0x10000U) +#define RTC_INT_REG_CNT_UPP_INTR_SHIFT (16U) +/*! CNT_UPP_INTR - Masked Signal of CNT_UPP_INT + */ +#define RTC_INT_REG_CNT_UPP_INTR(x) (((uint32_t)(((uint32_t)(x)) << RTC_INT_REG_CNT_UPP_INTR_SHIFT)) & RTC_INT_REG_CNT_UPP_INTR_MASK) +/*! @} */ + +/*! @name INT_MSK_REG - Interrupt Mask Register */ +/*! @{ */ +#define RTC_INT_MSK_REG_CNT_ALARM_MSK_MASK (0x8000U) +#define RTC_INT_MSK_REG_CNT_ALARM_MSK_SHIFT (15U) +/*! CNT_ALARM_MSK - CNT_ALARM_INT Interrupt Mask + * 0b0..Do not mask CNT_ALARM_INT + * 0b1..Mask interrupt CNT_ALARM_INT + */ +#define RTC_INT_MSK_REG_CNT_ALARM_MSK(x) (((uint32_t)(((uint32_t)(x)) << RTC_INT_MSK_REG_CNT_ALARM_MSK_SHIFT)) & RTC_INT_MSK_REG_CNT_ALARM_MSK_MASK) +#define RTC_INT_MSK_REG_CNT_UPP_MSK_MASK (0x10000U) +#define RTC_INT_MSK_REG_CNT_UPP_MSK_SHIFT (16U) +/*! CNT_UPP_MSK - CNT_UPP_INT Interrupt Mask + * 0b0..Do not mask CNT_UPP_INT + * 0b1..Mask interrupt CNT_UPP_INT + */ +#define RTC_INT_MSK_REG_CNT_UPP_MSK(x) (((uint32_t)(((uint32_t)(x)) << RTC_INT_MSK_REG_CNT_UPP_MSK_SHIFT)) & RTC_INT_MSK_REG_CNT_UPP_MSK_MASK) +/*! @} */ + +/*! @name CNT_CNTL_REG - Counter Control Register */ +/*! @{ */ +#define RTC_CNT_CNTL_REG_CNT_DBG_ACT_MASK (0x10U) +#define RTC_CNT_CNTL_REG_CNT_DBG_ACT_SHIFT (4U) +/*! CNT_DBG_ACT - Counter Debug Mode Action Mask + * 0b0..In debug mode, stop the counters + * 0b1..In debug mode, counters are not affected + */ +#define RTC_CNT_CNTL_REG_CNT_DBG_ACT(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_CNTL_REG_CNT_DBG_ACT_SHIFT)) & RTC_CNT_CNTL_REG_CNT_DBG_ACT_MASK) +#define RTC_CNT_CNTL_REG_CNT_UPDT_MOD_MASK (0x300U) +#define RTC_CNT_CNTL_REG_CNT_UPDT_MOD_SHIFT (8U) +/*! CNT_UPDT_MOD - Counter Update Mode + * 0b00..Update off + * 0b01..Reserved. + * 0b10..Auto-update (use when counter clock is at least 5 times slower than the register bus clock) + * 0b11..Reserved + */ +#define RTC_CNT_CNTL_REG_CNT_UPDT_MOD(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_CNTL_REG_CNT_UPDT_MOD_SHIFT)) & RTC_CNT_CNTL_REG_CNT_UPDT_MOD_MASK) +/*! @} */ + +/*! @name CNT_VAL_REG - Counter Value Register */ +/*! @{ */ +#define RTC_CNT_VAL_REG_CNT_VAL_MASK (0xFFFFFFFFU) +#define RTC_CNT_VAL_REG_CNT_VAL_SHIFT (0U) +/*! CNT_VAL - Counter Value + */ +#define RTC_CNT_VAL_REG_CNT_VAL(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_VAL_REG_CNT_VAL_SHIFT)) & RTC_CNT_VAL_REG_CNT_VAL_MASK) +/*! @} */ + +/*! @name CNT_UPP_VAL_REG - Counter Upper Value Register */ +/*! @{ */ +#define RTC_CNT_UPP_VAL_REG_UPP_VAL_MASK (0xFFFFFFFFU) +#define RTC_CNT_UPP_VAL_REG_UPP_VAL_SHIFT (0U) +/*! UPP_VAL - Counter Upper Value + */ +#define RTC_CNT_UPP_VAL_REG_UPP_VAL(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_UPP_VAL_REG_UPP_VAL_SHIFT)) & RTC_CNT_UPP_VAL_REG_UPP_VAL_MASK) +/*! @} */ + +/*! @name CNT_ALARM_VAL_REG - Counter Alarm Value Register */ +/*! @{ */ +#define RTC_CNT_ALARM_VAL_REG_ALARM_VAL_MASK (0xFFFFFFFFU) +#define RTC_CNT_ALARM_VAL_REG_ALARM_VAL_SHIFT (0U) +/*! ALARM_VAL - Counter Alarm Value + */ +#define RTC_CNT_ALARM_VAL_REG_ALARM_VAL(x) (((uint32_t)(((uint32_t)(x)) << RTC_CNT_ALARM_VAL_REG_ALARM_VAL_SHIFT)) & RTC_CNT_ALARM_VAL_REG_ALARM_VAL_MASK) +/*! @} */ + +/*! @name CLK_CNTL_REG - Clock control register */ +/*! @{ */ +#define RTC_CLK_CNTL_REG_CLK_DIV_MASK (0xF00U) +#define RTC_CLK_CNTL_REG_CLK_DIV_SHIFT (8U) +/*! CLK_DIV - Clock Divider + */ +#define RTC_CLK_CNTL_REG_CLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << RTC_CLK_CNTL_REG_CLK_DIV_SHIFT)) & RTC_CLK_CNTL_REG_CLK_DIV_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group RTC_Register_Masks */ + + +/* RTC - Peripheral instance base addresses */ +/** Peripheral RTC base address */ +#define RTC_BASE (0x48090000u) +/** Peripheral RTC base pointer */ +#define RTC ((RTC_Type *)RTC_BASE) +/** Array initializer of RTC peripheral base addresses */ +#define RTC_BASE_ADDRS { RTC_BASE } +/** Array initializer of RTC peripheral base pointers */ +#define RTC_BASE_PTRS { RTC } +/** Interrupt vectors for the RTC peripheral type */ +#define RTC_IRQS { RTC_IRQn } + +/*! + * @} + */ /* end of group RTC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- SDIOC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SDIOC_Peripheral_Access_Layer SDIOC Peripheral Access Layer + * @{ + */ + +/** SDIOC - Register Layout Typedef */ +typedef struct { + __IO uint32_t MM4_SYSADDR; /**< MMC4 System Address Register, offset: 0x0 */ + __IO uint32_t MM4_BLK_CNTL; /**< MMC4 Block Control Register, offset: 0x4 */ + __IO uint32_t MM4_ARG; /**< MMC4 Command Argument Register, offset: 0x8 */ + __IO uint32_t MM4_CMD_XFRMD; /**< MMC4 Command and Transfer Mode Register, offset: 0xC */ + __I uint32_t MM4_RESP0; /**< MMC4 Command Response Register0, offset: 0x10 */ + __I uint32_t MM4_RESP1; /**< MMC4 Command Response Register1, offset: 0x14 */ + __I uint32_t MM4_RESP2; /**< MMC4 Command Response Register2, offset: 0x18 */ + __I uint32_t MM4_RESP3; /**< MMC4 Command Response Register3, offset: 0x1C */ + __IO uint32_t MM4_DP; /**< MMC4 Buffer Data Port Register, offset: 0x20 */ + __I uint32_t MM4_STATE; /**< MMC4 Present State Register, offset: 0x24 */ + __IO uint32_t MM4_CNTL1; /**< MMC4 Host Control Register 1, offset: 0x28 */ + __IO uint32_t MM4_CNTL2; /**< MMC4 Host Control Register 2, offset: 0x2C */ + __IO uint32_t MM4_I_STAT; /**< Align Detection Timeout Value Register, offset: 0x30 */ + __IO uint32_t MM4_I_STAT_EN; /**< MMC4 Interrupt Status Enable Register, offset: 0x34 */ + __IO uint32_t MM4_I_SIG_EN; /**< MMC4 Interrupt Signal Enable Register, offset: 0x38 */ + __I uint32_t MM4_ACMD12_ER; /**< MMC4 Auto CMD12 Error Status Register, offset: 0x3C */ + __I uint32_t MM4_CAP0; /**< MMC4 Capabilities Register 0, offset: 0x40 */ + uint8_t RESERVED_0[4]; + __I uint32_t MM4_CUR_CAP0; /**< MMC4 Maximum Current Capabilities Register 0, offset: 0x48 */ + uint8_t RESERVED_1[176]; + __I uint32_t MM4_VER; /**< MMC4 Controller Version Status, offset: 0xFC */ +} SDIOC_Type; + +/* ---------------------------------------------------------------------------- + -- SDIOC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SDIOC_Register_Masks SDIOC Register Masks + * @{ + */ + +/*! @name MM4_SYSADDR - MMC4 System Address Register */ +/*! @{ */ +#define SDIOC_MM4_SYSADDR_SYSADDR_MASK (0xFFFFFFFFU) +#define SDIOC_MM4_SYSADDR_SYSADDR_SHIFT (0U) +/*! SYSADDR - SYSADDR + */ +#define SDIOC_MM4_SYSADDR_SYSADDR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_SYSADDR_SYSADDR_SHIFT)) & SDIOC_MM4_SYSADDR_SYSADDR_MASK) +/*! @} */ + +/*! @name MM4_BLK_CNTL - MMC4 Block Control Register */ +/*! @{ */ +#define SDIOC_MM4_BLK_CNTL_XFR_BLKSZ_MASK (0xFFFU) +#define SDIOC_MM4_BLK_CNTL_XFR_BLKSZ_SHIFT (0U) +/*! XFR_BLKSZ - XFR_BLKSZ + */ +#define SDIOC_MM4_BLK_CNTL_XFR_BLKSZ(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_BLK_CNTL_XFR_BLKSZ_SHIFT)) & SDIOC_MM4_BLK_CNTL_XFR_BLKSZ_MASK) +#define SDIOC_MM4_BLK_CNTL_DMA_BUFSZ_MASK (0x7000U) +#define SDIOC_MM4_BLK_CNTL_DMA_BUFSZ_SHIFT (12U) +/*! DMA_BUFSZ - DMA_BUFSZ + */ +#define SDIOC_MM4_BLK_CNTL_DMA_BUFSZ(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_BLK_CNTL_DMA_BUFSZ_SHIFT)) & SDIOC_MM4_BLK_CNTL_DMA_BUFSZ_MASK) +#define SDIOC_MM4_BLK_CNTL_BLK_CNT_MASK (0xFFFF0000U) +#define SDIOC_MM4_BLK_CNTL_BLK_CNT_SHIFT (16U) +/*! BLK_CNT - BLK_CNT + */ +#define SDIOC_MM4_BLK_CNTL_BLK_CNT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_BLK_CNTL_BLK_CNT_SHIFT)) & SDIOC_MM4_BLK_CNTL_BLK_CNT_MASK) +/*! @} */ + +/*! @name MM4_ARG - MMC4 Command Argument Register */ +/*! @{ */ +#define SDIOC_MM4_ARG_ARG_MASK (0xFFFFFFFFU) +#define SDIOC_MM4_ARG_ARG_SHIFT (0U) +/*! ARG - ARG + */ +#define SDIOC_MM4_ARG_ARG(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_ARG_ARG_SHIFT)) & SDIOC_MM4_ARG_ARG_MASK) +/*! @} */ + +/*! @name MM4_CMD_XFRMD - MMC4 Command and Transfer Mode Register */ +/*! @{ */ +#define SDIOC_MM4_CMD_XFRMD_DMA_EN_MASK (0x1U) +#define SDIOC_MM4_CMD_XFRMD_DMA_EN_SHIFT (0U) +/*! DMA_EN - DMA_EN + */ +#define SDIOC_MM4_CMD_XFRMD_DMA_EN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_DMA_EN_SHIFT)) & SDIOC_MM4_CMD_XFRMD_DMA_EN_MASK) +#define SDIOC_MM4_CMD_XFRMD_BLKCNTEN_MASK (0x2U) +#define SDIOC_MM4_CMD_XFRMD_BLKCNTEN_SHIFT (1U) +/*! BLKCNTEN - BLKCNTEN + */ +#define SDIOC_MM4_CMD_XFRMD_BLKCNTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_BLKCNTEN_SHIFT)) & SDIOC_MM4_CMD_XFRMD_BLKCNTEN_MASK) +#define SDIOC_MM4_CMD_XFRMD_AUTOCMD12_MASK (0x4U) +#define SDIOC_MM4_CMD_XFRMD_AUTOCMD12_SHIFT (2U) +/*! AUTOCMD12 - AUTOCMD12 + */ +#define SDIOC_MM4_CMD_XFRMD_AUTOCMD12(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_AUTOCMD12_SHIFT)) & SDIOC_MM4_CMD_XFRMD_AUTOCMD12_MASK) +#define SDIOC_MM4_CMD_XFRMD_DXFRDIR_MASK (0x10U) +#define SDIOC_MM4_CMD_XFRMD_DXFRDIR_SHIFT (4U) +/*! DXFRDIR - DXFRDIR + */ +#define SDIOC_MM4_CMD_XFRMD_DXFRDIR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_DXFRDIR_SHIFT)) & SDIOC_MM4_CMD_XFRMD_DXFRDIR_MASK) +#define SDIOC_MM4_CMD_XFRMD_MS_BLKSEL_MASK (0x20U) +#define SDIOC_MM4_CMD_XFRMD_MS_BLKSEL_SHIFT (5U) +/*! MS_BLKSEL - MS_BLKSEL + */ +#define SDIOC_MM4_CMD_XFRMD_MS_BLKSEL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_MS_BLKSEL_SHIFT)) & SDIOC_MM4_CMD_XFRMD_MS_BLKSEL_MASK) +#define SDIOC_MM4_CMD_XFRMD_CMD_COMP_ATA_MASK (0x40U) +#define SDIOC_MM4_CMD_XFRMD_CMD_COMP_ATA_SHIFT (6U) +/*! CMD_COMP_ATA - CMD_COMP_ATA + */ +#define SDIOC_MM4_CMD_XFRMD_CMD_COMP_ATA(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_CMD_COMP_ATA_SHIFT)) & SDIOC_MM4_CMD_XFRMD_CMD_COMP_ATA_MASK) +#define SDIOC_MM4_CMD_XFRMD_RES_TYPE_MASK (0x30000U) +#define SDIOC_MM4_CMD_XFRMD_RES_TYPE_SHIFT (16U) +/*! RES_TYPE - RES_TYPE + */ +#define SDIOC_MM4_CMD_XFRMD_RES_TYPE(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_RES_TYPE_SHIFT)) & SDIOC_MM4_CMD_XFRMD_RES_TYPE_MASK) +#define SDIOC_MM4_CMD_XFRMD_CRCCHKEN_MASK (0x80000U) +#define SDIOC_MM4_CMD_XFRMD_CRCCHKEN_SHIFT (19U) +/*! CRCCHKEN - CRCCHKEN + */ +#define SDIOC_MM4_CMD_XFRMD_CRCCHKEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_CRCCHKEN_SHIFT)) & SDIOC_MM4_CMD_XFRMD_CRCCHKEN_MASK) +#define SDIOC_MM4_CMD_XFRMD_IDXCHKEN_MASK (0x100000U) +#define SDIOC_MM4_CMD_XFRMD_IDXCHKEN_SHIFT (20U) +/*! IDXCHKEN - IDXCHKEN + */ +#define SDIOC_MM4_CMD_XFRMD_IDXCHKEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_IDXCHKEN_SHIFT)) & SDIOC_MM4_CMD_XFRMD_IDXCHKEN_MASK) +#define SDIOC_MM4_CMD_XFRMD_DPSEL_MASK (0x200000U) +#define SDIOC_MM4_CMD_XFRMD_DPSEL_SHIFT (21U) +/*! DPSEL - DPSEL + */ +#define SDIOC_MM4_CMD_XFRMD_DPSEL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_DPSEL_SHIFT)) & SDIOC_MM4_CMD_XFRMD_DPSEL_MASK) +#define SDIOC_MM4_CMD_XFRMD_CMD_TYPE_MASK (0xC00000U) +#define SDIOC_MM4_CMD_XFRMD_CMD_TYPE_SHIFT (22U) +/*! CMD_TYPE - CMD_TYPE + */ +#define SDIOC_MM4_CMD_XFRMD_CMD_TYPE(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_CMD_TYPE_SHIFT)) & SDIOC_MM4_CMD_XFRMD_CMD_TYPE_MASK) +#define SDIOC_MM4_CMD_XFRMD_CMD_IDX_MASK (0x3F000000U) +#define SDIOC_MM4_CMD_XFRMD_CMD_IDX_SHIFT (24U) +/*! CMD_IDX - CMD_IDX + */ +#define SDIOC_MM4_CMD_XFRMD_CMD_IDX(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CMD_XFRMD_CMD_IDX_SHIFT)) & SDIOC_MM4_CMD_XFRMD_CMD_IDX_MASK) +/*! @} */ + +/*! @name MM4_RESP0 - MMC4 Command Response Register0 */ +/*! @{ */ +#define SDIOC_MM4_RESP0_RESP_31_0_MASK (0xFFFFFFFFU) +#define SDIOC_MM4_RESP0_RESP_31_0_SHIFT (0U) +/*! RESP_31_0 - RESP[31:0] + */ +#define SDIOC_MM4_RESP0_RESP_31_0(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_RESP0_RESP_31_0_SHIFT)) & SDIOC_MM4_RESP0_RESP_31_0_MASK) +/*! @} */ + +/*! @name MM4_RESP1 - MMC4 Command Response Register1 */ +/*! @{ */ +#define SDIOC_MM4_RESP1_RESP_63_32_MASK (0xFFFFFFFFU) +#define SDIOC_MM4_RESP1_RESP_63_32_SHIFT (0U) +/*! RESP_63_32 - RESP[63:32] + */ +#define SDIOC_MM4_RESP1_RESP_63_32(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_RESP1_RESP_63_32_SHIFT)) & SDIOC_MM4_RESP1_RESP_63_32_MASK) +/*! @} */ + +/*! @name MM4_RESP2 - MMC4 Command Response Register2 */ +/*! @{ */ +#define SDIOC_MM4_RESP2_RESP_95_64_MASK (0xFFFFFFFFU) +#define SDIOC_MM4_RESP2_RESP_95_64_SHIFT (0U) +/*! RESP_95_64 - RESP[95:64] + */ +#define SDIOC_MM4_RESP2_RESP_95_64(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_RESP2_RESP_95_64_SHIFT)) & SDIOC_MM4_RESP2_RESP_95_64_MASK) +/*! @} */ + +/*! @name MM4_RESP3 - MMC4 Command Response Register3 */ +/*! @{ */ +#define SDIOC_MM4_RESP3_RESP_127_96_MASK (0xFFFFFFFFU) +#define SDIOC_MM4_RESP3_RESP_127_96_SHIFT (0U) +/*! RESP_127_96 - RESP[127:96] + */ +#define SDIOC_MM4_RESP3_RESP_127_96(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_RESP3_RESP_127_96_SHIFT)) & SDIOC_MM4_RESP3_RESP_127_96_MASK) +/*! @} */ + +/*! @name MM4_DP - MMC4 Buffer Data Port Register */ +/*! @{ */ +#define SDIOC_MM4_DP_BFR_DATA_MASK (0xFFFFFFFFU) +#define SDIOC_MM4_DP_BFR_DATA_SHIFT (0U) +/*! BFR_DATA - BFR_DATA + */ +#define SDIOC_MM4_DP_BFR_DATA(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_DP_BFR_DATA_SHIFT)) & SDIOC_MM4_DP_BFR_DATA_MASK) +/*! @} */ + +/*! @name MM4_STATE - MMC4 Present State Register */ +/*! @{ */ +#define SDIOC_MM4_STATE_CCMDINHBT_MASK (0x1U) +#define SDIOC_MM4_STATE_CCMDINHBT_SHIFT (0U) +/*! CCMDINHBT - CCMDINHBT + */ +#define SDIOC_MM4_STATE_CCMDINHBT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_CCMDINHBT_SHIFT)) & SDIOC_MM4_STATE_CCMDINHBT_MASK) +#define SDIOC_MM4_STATE_DCMDINHBT_MASK (0x2U) +#define SDIOC_MM4_STATE_DCMDINHBT_SHIFT (1U) +/*! DCMDINHBT - DCMDINHBT + */ +#define SDIOC_MM4_STATE_DCMDINHBT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_DCMDINHBT_SHIFT)) & SDIOC_MM4_STATE_DCMDINHBT_MASK) +#define SDIOC_MM4_STATE_DATACTV_MASK (0x4U) +#define SDIOC_MM4_STATE_DATACTV_SHIFT (2U) +/*! DATACTV - DATACTV + */ +#define SDIOC_MM4_STATE_DATACTV(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_DATACTV_SHIFT)) & SDIOC_MM4_STATE_DATACTV_MASK) +#define SDIOC_MM4_STATE_WRACTV_MASK (0x100U) +#define SDIOC_MM4_STATE_WRACTV_SHIFT (8U) +/*! WRACTV - WRACTV + */ +#define SDIOC_MM4_STATE_WRACTV(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_WRACTV_SHIFT)) & SDIOC_MM4_STATE_WRACTV_MASK) +#define SDIOC_MM4_STATE_RDACTV_MASK (0x200U) +#define SDIOC_MM4_STATE_RDACTV_SHIFT (9U) +/*! RDACTV - RDACTV + */ +#define SDIOC_MM4_STATE_RDACTV(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_RDACTV_SHIFT)) & SDIOC_MM4_STATE_RDACTV_MASK) +#define SDIOC_MM4_STATE_BUFWREN_MASK (0x400U) +#define SDIOC_MM4_STATE_BUFWREN_SHIFT (10U) +/*! BUFWREN - BUFWREN + */ +#define SDIOC_MM4_STATE_BUFWREN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_BUFWREN_SHIFT)) & SDIOC_MM4_STATE_BUFWREN_MASK) +#define SDIOC_MM4_STATE_BUFRDEN_MASK (0x800U) +#define SDIOC_MM4_STATE_BUFRDEN_SHIFT (11U) +/*! BUFRDEN - BUFRDEN + */ +#define SDIOC_MM4_STATE_BUFRDEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_BUFRDEN_SHIFT)) & SDIOC_MM4_STATE_BUFRDEN_MASK) +#define SDIOC_MM4_STATE_CDINSTD_MASK (0x10000U) +#define SDIOC_MM4_STATE_CDINSTD_SHIFT (16U) +/*! CDINSTD - CDINSTD + */ +#define SDIOC_MM4_STATE_CDINSTD(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_CDINSTD_SHIFT)) & SDIOC_MM4_STATE_CDINSTD_MASK) +#define SDIOC_MM4_STATE_CDSTBL_MASK (0x20000U) +#define SDIOC_MM4_STATE_CDSTBL_SHIFT (17U) +/*! CDSTBL - CDSTBL + */ +#define SDIOC_MM4_STATE_CDSTBL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_CDSTBL_SHIFT)) & SDIOC_MM4_STATE_CDSTBL_MASK) +#define SDIOC_MM4_STATE_CDDETLVL_MASK (0x40000U) +#define SDIOC_MM4_STATE_CDDETLVL_SHIFT (18U) +/*! CDDETLVL - CDDETLVL + */ +#define SDIOC_MM4_STATE_CDDETLVL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_CDDETLVL_SHIFT)) & SDIOC_MM4_STATE_CDDETLVL_MASK) +#define SDIOC_MM4_STATE_WPSWLVL_MASK (0x80000U) +#define SDIOC_MM4_STATE_WPSWLVL_SHIFT (19U) +/*! WPSWLVL - WPSWLVL + */ +#define SDIOC_MM4_STATE_WPSWLVL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_WPSWLVL_SHIFT)) & SDIOC_MM4_STATE_WPSWLVL_MASK) +#define SDIOC_MM4_STATE_LWRDATLVL_MASK (0xF00000U) +#define SDIOC_MM4_STATE_LWRDATLVL_SHIFT (20U) +/*! LWRDATLVL - LWRDATLVL + */ +#define SDIOC_MM4_STATE_LWRDATLVL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_LWRDATLVL_SHIFT)) & SDIOC_MM4_STATE_LWRDATLVL_MASK) +#define SDIOC_MM4_STATE_CMDLVL_MASK (0x1000000U) +#define SDIOC_MM4_STATE_CMDLVL_SHIFT (24U) +/*! CMDLVL - CMDLVL + */ +#define SDIOC_MM4_STATE_CMDLVL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_CMDLVL_SHIFT)) & SDIOC_MM4_STATE_CMDLVL_MASK) +#define SDIOC_MM4_STATE_UPRDATLVL_MASK (0x1E000000U) +#define SDIOC_MM4_STATE_UPRDATLVL_SHIFT (25U) +/*! UPRDATLVL - UPRDATLVL + */ +#define SDIOC_MM4_STATE_UPRDATLVL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_STATE_UPRDATLVL_SHIFT)) & SDIOC_MM4_STATE_UPRDATLVL_MASK) +/*! @} */ + +/*! @name MM4_CNTL1 - MMC4 Host Control Register 1 */ +/*! @{ */ +#define SDIOC_MM4_CNTL1_LEDCNTL_MASK (0x1U) +#define SDIOC_MM4_CNTL1_LEDCNTL_SHIFT (0U) +/*! LEDCNTL - LEDCNTL + */ +#define SDIOC_MM4_CNTL1_LEDCNTL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_LEDCNTL_SHIFT)) & SDIOC_MM4_CNTL1_LEDCNTL_MASK) +#define SDIOC_MM4_CNTL1__4BITMD_MASK (0x2U) +#define SDIOC_MM4_CNTL1__4BITMD_SHIFT (1U) +/*! _4BITMD - 4BITMD + */ +#define SDIOC_MM4_CNTL1__4BITMD(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1__4BITMD_SHIFT)) & SDIOC_MM4_CNTL1__4BITMD_MASK) +#define SDIOC_MM4_CNTL1_HISPEED_MASK (0x4U) +#define SDIOC_MM4_CNTL1_HISPEED_SHIFT (2U) +/*! HISPEED - HISPEED + */ +#define SDIOC_MM4_CNTL1_HISPEED(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_HISPEED_SHIFT)) & SDIOC_MM4_CNTL1_HISPEED_MASK) +#define SDIOC_MM4_CNTL1__8BITMD_MASK (0x20U) +#define SDIOC_MM4_CNTL1__8BITMD_SHIFT (5U) +/*! _8BITMD - 8BITMD + */ +#define SDIOC_MM4_CNTL1__8BITMD(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1__8BITMD_SHIFT)) & SDIOC_MM4_CNTL1__8BITMD_MASK) +#define SDIOC_MM4_CNTL1_BUSPWR_MASK (0x100U) +#define SDIOC_MM4_CNTL1_BUSPWR_SHIFT (8U) +/*! BUSPWR - BUSPWR + */ +#define SDIOC_MM4_CNTL1_BUSPWR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_BUSPWR_SHIFT)) & SDIOC_MM4_CNTL1_BUSPWR_MASK) +#define SDIOC_MM4_CNTL1_VLTGSEL_MASK (0xE00U) +#define SDIOC_MM4_CNTL1_VLTGSEL_SHIFT (9U) +/*! VLTGSEL - VLTGSEL + */ +#define SDIOC_MM4_CNTL1_VLTGSEL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_VLTGSEL_SHIFT)) & SDIOC_MM4_CNTL1_VLTGSEL_MASK) +#define SDIOC_MM4_CNTL1_BGREQSTP_MASK (0x10000U) +#define SDIOC_MM4_CNTL1_BGREQSTP_SHIFT (16U) +/*! BGREQSTP - BGREQSTP + */ +#define SDIOC_MM4_CNTL1_BGREQSTP(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_BGREQSTP_SHIFT)) & SDIOC_MM4_CNTL1_BGREQSTP_MASK) +#define SDIOC_MM4_CNTL1_CONTREQ_MASK (0x20000U) +#define SDIOC_MM4_CNTL1_CONTREQ_SHIFT (17U) +/*! CONTREQ - CONTREQ + */ +#define SDIOC_MM4_CNTL1_CONTREQ(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_CONTREQ_SHIFT)) & SDIOC_MM4_CNTL1_CONTREQ_MASK) +#define SDIOC_MM4_CNTL1_RDWTCNTL_MASK (0x40000U) +#define SDIOC_MM4_CNTL1_RDWTCNTL_SHIFT (18U) +/*! RDWTCNTL - RDWTCNTL + */ +#define SDIOC_MM4_CNTL1_RDWTCNTL(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_RDWTCNTL_SHIFT)) & SDIOC_MM4_CNTL1_RDWTCNTL_MASK) +#define SDIOC_MM4_CNTL1_BGIRQEN_MASK (0x80000U) +#define SDIOC_MM4_CNTL1_BGIRQEN_SHIFT (19U) +/*! BGIRQEN - BGIRQEN + */ +#define SDIOC_MM4_CNTL1_BGIRQEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL1_BGIRQEN_SHIFT)) & SDIOC_MM4_CNTL1_BGIRQEN_MASK) +/*! @} */ + +/*! @name MM4_CNTL2 - MMC4 Host Control Register 2 */ +/*! @{ */ +#define SDIOC_MM4_CNTL2_INTCLKEN_MASK (0x1U) +#define SDIOC_MM4_CNTL2_INTCLKEN_SHIFT (0U) +/*! INTCLKEN - INTCLKEN + */ +#define SDIOC_MM4_CNTL2_INTCLKEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL2_INTCLKEN_SHIFT)) & SDIOC_MM4_CNTL2_INTCLKEN_MASK) +#define SDIOC_MM4_CNTL2_MM4CLKEN_MASK (0x4U) +#define SDIOC_MM4_CNTL2_MM4CLKEN_SHIFT (2U) +/*! MM4CLKEN - MM4CLKEN + */ +#define SDIOC_MM4_CNTL2_MM4CLKEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL2_MM4CLKEN_SHIFT)) & SDIOC_MM4_CNTL2_MM4CLKEN_MASK) +#define SDIOC_MM4_CNTL2_SDFREQ_MASK (0xFF00U) +#define SDIOC_MM4_CNTL2_SDFREQ_SHIFT (8U) +/*! SDFREQ - SDFREQ + */ +#define SDIOC_MM4_CNTL2_SDFREQ(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL2_SDFREQ_SHIFT)) & SDIOC_MM4_CNTL2_SDFREQ_MASK) +#define SDIOC_MM4_CNTL2_DTOCNTR_MASK (0xF0000U) +#define SDIOC_MM4_CNTL2_DTOCNTR_SHIFT (16U) +/*! DTOCNTR - DTOCNTR + */ +#define SDIOC_MM4_CNTL2_DTOCNTR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL2_DTOCNTR_SHIFT)) & SDIOC_MM4_CNTL2_DTOCNTR_MASK) +#define SDIOC_MM4_CNTL2_MSWRST_MASK (0x1000000U) +#define SDIOC_MM4_CNTL2_MSWRST_SHIFT (24U) +/*! MSWRST - MSWRST + */ +#define SDIOC_MM4_CNTL2_MSWRST(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL2_MSWRST_SHIFT)) & SDIOC_MM4_CNTL2_MSWRST_MASK) +#define SDIOC_MM4_CNTL2_CMDSWRST_MASK (0x2000000U) +#define SDIOC_MM4_CNTL2_CMDSWRST_SHIFT (25U) +/*! CMDSWRST - CMDSWRST + */ +#define SDIOC_MM4_CNTL2_CMDSWRST(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL2_CMDSWRST_SHIFT)) & SDIOC_MM4_CNTL2_CMDSWRST_MASK) +#define SDIOC_MM4_CNTL2_DATSWRST_MASK (0x4000000U) +#define SDIOC_MM4_CNTL2_DATSWRST_SHIFT (26U) +/*! DATSWRST - DATSWRST + */ +#define SDIOC_MM4_CNTL2_DATSWRST(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CNTL2_DATSWRST_SHIFT)) & SDIOC_MM4_CNTL2_DATSWRST_MASK) +/*! @} */ + +/*! @name MM4_I_STAT - Align Detection Timeout Value Register */ +/*! @{ */ +#define SDIOC_MM4_I_STAT_CMDCOMP_MASK (0x1U) +#define SDIOC_MM4_I_STAT_CMDCOMP_SHIFT (0U) +/*! CMDCOMP - CMDCOMP + */ +#define SDIOC_MM4_I_STAT_CMDCOMP(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CMDCOMP_SHIFT)) & SDIOC_MM4_I_STAT_CMDCOMP_MASK) +#define SDIOC_MM4_I_STAT_XFRCOMP_MASK (0x2U) +#define SDIOC_MM4_I_STAT_XFRCOMP_SHIFT (1U) +/*! XFRCOMP - XFRCOMP + */ +#define SDIOC_MM4_I_STAT_XFRCOMP(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_XFRCOMP_SHIFT)) & SDIOC_MM4_I_STAT_XFRCOMP_MASK) +#define SDIOC_MM4_I_STAT_BGEVNT_MASK (0x4U) +#define SDIOC_MM4_I_STAT_BGEVNT_SHIFT (2U) +/*! BGEVNT - BGEVNT + */ +#define SDIOC_MM4_I_STAT_BGEVNT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_BGEVNT_SHIFT)) & SDIOC_MM4_I_STAT_BGEVNT_MASK) +#define SDIOC_MM4_I_STAT_DMAINT_MASK (0x8U) +#define SDIOC_MM4_I_STAT_DMAINT_SHIFT (3U) +/*! DMAINT - DMAINT + */ +#define SDIOC_MM4_I_STAT_DMAINT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_DMAINT_SHIFT)) & SDIOC_MM4_I_STAT_DMAINT_MASK) +#define SDIOC_MM4_I_STAT_BUFWRRDY_MASK (0x10U) +#define SDIOC_MM4_I_STAT_BUFWRRDY_SHIFT (4U) +/*! BUFWRRDY - BUFWRRDY + */ +#define SDIOC_MM4_I_STAT_BUFWRRDY(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_BUFWRRDY_SHIFT)) & SDIOC_MM4_I_STAT_BUFWRRDY_MASK) +#define SDIOC_MM4_I_STAT_BUFRDRDY_MASK (0x20U) +#define SDIOC_MM4_I_STAT_BUFRDRDY_SHIFT (5U) +/*! BUFRDRDY - BUFRDRDY + */ +#define SDIOC_MM4_I_STAT_BUFRDRDY(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_BUFRDRDY_SHIFT)) & SDIOC_MM4_I_STAT_BUFRDRDY_MASK) +#define SDIOC_MM4_I_STAT_CDINS_MASK (0x40U) +#define SDIOC_MM4_I_STAT_CDINS_SHIFT (6U) +/*! CDINS - CDINS + */ +#define SDIOC_MM4_I_STAT_CDINS(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CDINS_SHIFT)) & SDIOC_MM4_I_STAT_CDINS_MASK) +#define SDIOC_MM4_I_STAT_CDREM_MASK (0x80U) +#define SDIOC_MM4_I_STAT_CDREM_SHIFT (7U) +/*! CDREM - CDREM + */ +#define SDIOC_MM4_I_STAT_CDREM(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CDREM_SHIFT)) & SDIOC_MM4_I_STAT_CDREM_MASK) +#define SDIOC_MM4_I_STAT_CDINT_MASK (0x100U) +#define SDIOC_MM4_I_STAT_CDINT_SHIFT (8U) +/*! CDINT - CDINT + */ +#define SDIOC_MM4_I_STAT_CDINT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CDINT_SHIFT)) & SDIOC_MM4_I_STAT_CDINT_MASK) +#define SDIOC_MM4_I_STAT_ERRINT_MASK (0x8000U) +#define SDIOC_MM4_I_STAT_ERRINT_SHIFT (15U) +/*! ERRINT - ERRINT + */ +#define SDIOC_MM4_I_STAT_ERRINT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_ERRINT_SHIFT)) & SDIOC_MM4_I_STAT_ERRINT_MASK) +#define SDIOC_MM4_I_STAT_CTOERR_MASK (0x10000U) +#define SDIOC_MM4_I_STAT_CTOERR_SHIFT (16U) +/*! CTOERR - CTOERR + */ +#define SDIOC_MM4_I_STAT_CTOERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CTOERR_SHIFT)) & SDIOC_MM4_I_STAT_CTOERR_MASK) +#define SDIOC_MM4_I_STAT_CCRCERR_MASK (0x20000U) +#define SDIOC_MM4_I_STAT_CCRCERR_SHIFT (17U) +/*! CCRCERR - CCRCERR + */ +#define SDIOC_MM4_I_STAT_CCRCERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CCRCERR_SHIFT)) & SDIOC_MM4_I_STAT_CCRCERR_MASK) +#define SDIOC_MM4_I_STAT_CENDERR_MASK (0x40000U) +#define SDIOC_MM4_I_STAT_CENDERR_SHIFT (18U) +/*! CENDERR - CENDERR + */ +#define SDIOC_MM4_I_STAT_CENDERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CENDERR_SHIFT)) & SDIOC_MM4_I_STAT_CENDERR_MASK) +#define SDIOC_MM4_I_STAT_CIDXERR_MASK (0x80000U) +#define SDIOC_MM4_I_STAT_CIDXERR_SHIFT (19U) +/*! CIDXERR - CIDXERR + */ +#define SDIOC_MM4_I_STAT_CIDXERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_CIDXERR_SHIFT)) & SDIOC_MM4_I_STAT_CIDXERR_MASK) +#define SDIOC_MM4_I_STAT_DTOERR_MASK (0x100000U) +#define SDIOC_MM4_I_STAT_DTOERR_SHIFT (20U) +/*! DTOERR - DTOERR + */ +#define SDIOC_MM4_I_STAT_DTOERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_DTOERR_SHIFT)) & SDIOC_MM4_I_STAT_DTOERR_MASK) +#define SDIOC_MM4_I_STAT_DCRCERR_MASK (0x200000U) +#define SDIOC_MM4_I_STAT_DCRCERR_SHIFT (21U) +/*! DCRCERR - DCRCERR + */ +#define SDIOC_MM4_I_STAT_DCRCERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_DCRCERR_SHIFT)) & SDIOC_MM4_I_STAT_DCRCERR_MASK) +#define SDIOC_MM4_I_STAT_DENDERR_MASK (0x400000U) +#define SDIOC_MM4_I_STAT_DENDERR_SHIFT (22U) +/*! DENDERR - DENDERR + */ +#define SDIOC_MM4_I_STAT_DENDERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_DENDERR_SHIFT)) & SDIOC_MM4_I_STAT_DENDERR_MASK) +#define SDIOC_MM4_I_STAT_ILMTERR_MASK (0x800000U) +#define SDIOC_MM4_I_STAT_ILMTERR_SHIFT (23U) +/*! ILMTERR - ILMTERR + */ +#define SDIOC_MM4_I_STAT_ILMTERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_ILMTERR_SHIFT)) & SDIOC_MM4_I_STAT_ILMTERR_MASK) +#define SDIOC_MM4_I_STAT_AC12ERR_MASK (0x1000000U) +#define SDIOC_MM4_I_STAT_AC12ERR_SHIFT (24U) +/*! AC12ERR - AC12ERR + */ +#define SDIOC_MM4_I_STAT_AC12ERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_AC12ERR_SHIFT)) & SDIOC_MM4_I_STAT_AC12ERR_MASK) +#define SDIOC_MM4_I_STAT_AHBTERR_MASK (0x10000000U) +#define SDIOC_MM4_I_STAT_AHBTERR_SHIFT (28U) +/*! AHBTERR - AHBTERR + */ +#define SDIOC_MM4_I_STAT_AHBTERR(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_AHBTERR_SHIFT)) & SDIOC_MM4_I_STAT_AHBTERR_MASK) +/*! @} */ + +/*! @name MM4_I_STAT_EN - MMC4 Interrupt Status Enable Register */ +/*! @{ */ +#define SDIOC_MM4_I_STAT_EN_CMDCOMPSTEN_MASK (0x1U) +#define SDIOC_MM4_I_STAT_EN_CMDCOMPSTEN_SHIFT (0U) +/*! CMDCOMPSTEN - CMDCOMPSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CMDCOMPSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CMDCOMPSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CMDCOMPSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_XFRCOMPSTEN_MASK (0x2U) +#define SDIOC_MM4_I_STAT_EN_XFRCOMPSTEN_SHIFT (1U) +/*! XFRCOMPSTEN - XFRCOMPSTEN + */ +#define SDIOC_MM4_I_STAT_EN_XFRCOMPSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_XFRCOMPSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_XFRCOMPSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_BGEVNTSTEN_MASK (0x4U) +#define SDIOC_MM4_I_STAT_EN_BGEVNTSTEN_SHIFT (2U) +/*! BGEVNTSTEN - BGEVNTSTEN + */ +#define SDIOC_MM4_I_STAT_EN_BGEVNTSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_BGEVNTSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_BGEVNTSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_DMAINTSTEN_MASK (0x8U) +#define SDIOC_MM4_I_STAT_EN_DMAINTSTEN_SHIFT (3U) +/*! DMAINTSTEN - DMAINTSTEN + */ +#define SDIOC_MM4_I_STAT_EN_DMAINTSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_DMAINTSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_DMAINTSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_BUFWRRDYSTEN_MASK (0x10U) +#define SDIOC_MM4_I_STAT_EN_BUFWRRDYSTEN_SHIFT (4U) +/*! BUFWRRDYSTEN - BUFWRRDYSTEN + */ +#define SDIOC_MM4_I_STAT_EN_BUFWRRDYSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_BUFWRRDYSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_BUFWRRDYSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_BUFRDRDYSTEN_MASK (0x20U) +#define SDIOC_MM4_I_STAT_EN_BUFRDRDYSTEN_SHIFT (5U) +/*! BUFRDRDYSTEN - BUFRDRDYSTEN + */ +#define SDIOC_MM4_I_STAT_EN_BUFRDRDYSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_BUFRDRDYSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_BUFRDRDYSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_CDINSSTEN_MASK (0x40U) +#define SDIOC_MM4_I_STAT_EN_CDINSSTEN_SHIFT (6U) +/*! CDINSSTEN - CDINSSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CDINSSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CDINSSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CDINSSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_CDREMSTEN_MASK (0x80U) +#define SDIOC_MM4_I_STAT_EN_CDREMSTEN_SHIFT (7U) +/*! CDREMSTEN - CDREMSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CDREMSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CDREMSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CDREMSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_CDINTSTEN_MASK (0x100U) +#define SDIOC_MM4_I_STAT_EN_CDINTSTEN_SHIFT (8U) +/*! CDINTSTEN - CDINTSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CDINTSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CDINTSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CDINTSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_CTOSTEN_MASK (0x10000U) +#define SDIOC_MM4_I_STAT_EN_CTOSTEN_SHIFT (16U) +/*! CTOSTEN - CTOSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CTOSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CTOSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CTOSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_CCRCSTEN_MASK (0x20000U) +#define SDIOC_MM4_I_STAT_EN_CCRCSTEN_SHIFT (17U) +/*! CCRCSTEN - CCRCSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CCRCSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CCRCSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CCRCSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_CENDSTEN_MASK (0x40000U) +#define SDIOC_MM4_I_STAT_EN_CENDSTEN_SHIFT (18U) +/*! CENDSTEN - CENDSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CENDSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CENDSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CENDSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_CIDXSTEN_MASK (0x80000U) +#define SDIOC_MM4_I_STAT_EN_CIDXSTEN_SHIFT (19U) +/*! CIDXSTEN - CIDXSTEN + */ +#define SDIOC_MM4_I_STAT_EN_CIDXSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_CIDXSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_CIDXSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_DTOSTEN_MASK (0x100000U) +#define SDIOC_MM4_I_STAT_EN_DTOSTEN_SHIFT (20U) +/*! DTOSTEN - DTOSTEN + */ +#define SDIOC_MM4_I_STAT_EN_DTOSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_DTOSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_DTOSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_DCRCSTEN_MASK (0x200000U) +#define SDIOC_MM4_I_STAT_EN_DCRCSTEN_SHIFT (21U) +/*! DCRCSTEN - DCRCSTEN + */ +#define SDIOC_MM4_I_STAT_EN_DCRCSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_DCRCSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_DCRCSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_DENDSTEN_MASK (0x400000U) +#define SDIOC_MM4_I_STAT_EN_DENDSTEN_SHIFT (22U) +/*! DENDSTEN - DENDSTEN + */ +#define SDIOC_MM4_I_STAT_EN_DENDSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_DENDSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_DENDSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_ILMTSTEN_MASK (0x800000U) +#define SDIOC_MM4_I_STAT_EN_ILMTSTEN_SHIFT (23U) +/*! ILMTSTEN - ILMTSTEN + */ +#define SDIOC_MM4_I_STAT_EN_ILMTSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_ILMTSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_ILMTSTEN_MASK) +#define SDIOC_MM4_I_STAT_EN_AC12STEN_MASK (0x1000000U) +#define SDIOC_MM4_I_STAT_EN_AC12STEN_SHIFT (24U) +/*! AC12STEN - AC12STEN + */ +#define SDIOC_MM4_I_STAT_EN_AC12STEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_AC12STEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_AC12STEN_MASK) +#define SDIOC_MM4_I_STAT_EN_ATERRSTEN_MASK (0x10000000U) +#define SDIOC_MM4_I_STAT_EN_ATERRSTEN_SHIFT (28U) +/*! ATERRSTEN - ATERRSTEN + */ +#define SDIOC_MM4_I_STAT_EN_ATERRSTEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_STAT_EN_ATERRSTEN_SHIFT)) & SDIOC_MM4_I_STAT_EN_ATERRSTEN_MASK) +/*! @} */ + +/*! @name MM4_I_SIG_EN - MMC4 Interrupt Signal Enable Register */ +/*! @{ */ +#define SDIOC_MM4_I_SIG_EN_CMDCOMPSGEN_MASK (0x1U) +#define SDIOC_MM4_I_SIG_EN_CMDCOMPSGEN_SHIFT (0U) +/*! CMDCOMPSGEN - CMDCOMPSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CMDCOMPSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CMDCOMPSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CMDCOMPSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_XFRCOMPSGEN_MASK (0x2U) +#define SDIOC_MM4_I_SIG_EN_XFRCOMPSGEN_SHIFT (1U) +/*! XFRCOMPSGEN - XFRCOMPSGEN + */ +#define SDIOC_MM4_I_SIG_EN_XFRCOMPSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_XFRCOMPSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_XFRCOMPSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_BGEVNTSGEN_MASK (0x4U) +#define SDIOC_MM4_I_SIG_EN_BGEVNTSGEN_SHIFT (2U) +/*! BGEVNTSGEN - BGEVNTSGEN + */ +#define SDIOC_MM4_I_SIG_EN_BGEVNTSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_BGEVNTSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_BGEVNTSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_DMAINTSGEN_MASK (0x8U) +#define SDIOC_MM4_I_SIG_EN_DMAINTSGEN_SHIFT (3U) +/*! DMAINTSGEN - DMAINTSGEN + */ +#define SDIOC_MM4_I_SIG_EN_DMAINTSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_DMAINTSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_DMAINTSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_BUFWRRDYSGEN_MASK (0x10U) +#define SDIOC_MM4_I_SIG_EN_BUFWRRDYSGEN_SHIFT (4U) +/*! BUFWRRDYSGEN - BUFWRRDYSGEN + */ +#define SDIOC_MM4_I_SIG_EN_BUFWRRDYSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_BUFWRRDYSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_BUFWRRDYSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_BUFRDRDYSGEN_MASK (0x20U) +#define SDIOC_MM4_I_SIG_EN_BUFRDRDYSGEN_SHIFT (5U) +/*! BUFRDRDYSGEN - BUFRDRDYSGEN + */ +#define SDIOC_MM4_I_SIG_EN_BUFRDRDYSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_BUFRDRDYSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_BUFRDRDYSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_CDINSSGEN_MASK (0x40U) +#define SDIOC_MM4_I_SIG_EN_CDINSSGEN_SHIFT (6U) +/*! CDINSSGEN - CDINSSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CDINSSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CDINSSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CDINSSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_CDREMSGEN_MASK (0x80U) +#define SDIOC_MM4_I_SIG_EN_CDREMSGEN_SHIFT (7U) +/*! CDREMSGEN - CDREMSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CDREMSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CDREMSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CDREMSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_CDINTSGEN_MASK (0x100U) +#define SDIOC_MM4_I_SIG_EN_CDINTSGEN_SHIFT (8U) +/*! CDINTSGEN - CDINTSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CDINTSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CDINTSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CDINTSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_CTOSGEN_MASK (0x10000U) +#define SDIOC_MM4_I_SIG_EN_CTOSGEN_SHIFT (16U) +/*! CTOSGEN - CTOSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CTOSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CTOSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CTOSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_CCRCSGEN_MASK (0x20000U) +#define SDIOC_MM4_I_SIG_EN_CCRCSGEN_SHIFT (17U) +/*! CCRCSGEN - CCRCSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CCRCSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CCRCSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CCRCSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_CENDSGEN_MASK (0x40000U) +#define SDIOC_MM4_I_SIG_EN_CENDSGEN_SHIFT (18U) +/*! CENDSGEN - CENDSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CENDSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CENDSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CENDSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_CIDXSGEN_MASK (0x80000U) +#define SDIOC_MM4_I_SIG_EN_CIDXSGEN_SHIFT (19U) +/*! CIDXSGEN - CIDXSGEN + */ +#define SDIOC_MM4_I_SIG_EN_CIDXSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_CIDXSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_CIDXSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_DTOSGEN_MASK (0x100000U) +#define SDIOC_MM4_I_SIG_EN_DTOSGEN_SHIFT (20U) +/*! DTOSGEN - DTOSGEN + */ +#define SDIOC_MM4_I_SIG_EN_DTOSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_DTOSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_DTOSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_DCRCSGEN_MASK (0x200000U) +#define SDIOC_MM4_I_SIG_EN_DCRCSGEN_SHIFT (21U) +/*! DCRCSGEN - DCRCSGEN + */ +#define SDIOC_MM4_I_SIG_EN_DCRCSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_DCRCSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_DCRCSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_DENDSGEN_MASK (0x400000U) +#define SDIOC_MM4_I_SIG_EN_DENDSGEN_SHIFT (22U) +/*! DENDSGEN - DENDSGEN + */ +#define SDIOC_MM4_I_SIG_EN_DENDSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_DENDSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_DENDSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_ILMTSGEN_MASK (0x800000U) +#define SDIOC_MM4_I_SIG_EN_ILMTSGEN_SHIFT (23U) +/*! ILMTSGEN - ILMTSGEN + */ +#define SDIOC_MM4_I_SIG_EN_ILMTSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_ILMTSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_ILMTSGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_AC12SGEN_MASK (0x1000000U) +#define SDIOC_MM4_I_SIG_EN_AC12SGEN_SHIFT (24U) +/*! AC12SGEN - AC12SGEN + */ +#define SDIOC_MM4_I_SIG_EN_AC12SGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_AC12SGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_AC12SGEN_MASK) +#define SDIOC_MM4_I_SIG_EN_ATERRSGEN_MASK (0x10000000U) +#define SDIOC_MM4_I_SIG_EN_ATERRSGEN_SHIFT (28U) +/*! ATERRSGEN - ATERRSGEN + */ +#define SDIOC_MM4_I_SIG_EN_ATERRSGEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_I_SIG_EN_ATERRSGEN_SHIFT)) & SDIOC_MM4_I_SIG_EN_ATERRSGEN_MASK) +/*! @} */ + +/*! @name MM4_ACMD12_ER - MMC4 Auto CMD12 Error Status Register */ +/*! @{ */ +#define SDIOC_MM4_ACMD12_ER_AC12NEXE_MASK (0x1U) +#define SDIOC_MM4_ACMD12_ER_AC12NEXE_SHIFT (0U) +/*! AC12NEXE - AC12NEXE + */ +#define SDIOC_MM4_ACMD12_ER_AC12NEXE(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_ACMD12_ER_AC12NEXE_SHIFT)) & SDIOC_MM4_ACMD12_ER_AC12NEXE_MASK) +#define SDIOC_MM4_ACMD12_ER_AC12TOER_MASK (0x2U) +#define SDIOC_MM4_ACMD12_ER_AC12TOER_SHIFT (1U) +/*! AC12TOER - AC12TOER + */ +#define SDIOC_MM4_ACMD12_ER_AC12TOER(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_ACMD12_ER_AC12TOER_SHIFT)) & SDIOC_MM4_ACMD12_ER_AC12TOER_MASK) +#define SDIOC_MM4_ACMD12_ER_AC12CRCER_MASK (0x4U) +#define SDIOC_MM4_ACMD12_ER_AC12CRCER_SHIFT (2U) +/*! AC12CRCER - AC12CRCER + */ +#define SDIOC_MM4_ACMD12_ER_AC12CRCER(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_ACMD12_ER_AC12CRCER_SHIFT)) & SDIOC_MM4_ACMD12_ER_AC12CRCER_MASK) +#define SDIOC_MM4_ACMD12_ER_AC12ENDER_MASK (0x8U) +#define SDIOC_MM4_ACMD12_ER_AC12ENDER_SHIFT (3U) +/*! AC12ENDER - AC12ENDER + */ +#define SDIOC_MM4_ACMD12_ER_AC12ENDER(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_ACMD12_ER_AC12ENDER_SHIFT)) & SDIOC_MM4_ACMD12_ER_AC12ENDER_MASK) +#define SDIOC_MM4_ACMD12_ER_AC12IDXER_MASK (0x10U) +#define SDIOC_MM4_ACMD12_ER_AC12IDXER_SHIFT (4U) +/*! AC12IDXER - AC12IDXER + */ +#define SDIOC_MM4_ACMD12_ER_AC12IDXER(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_ACMD12_ER_AC12IDXER_SHIFT)) & SDIOC_MM4_ACMD12_ER_AC12IDXER_MASK) +#define SDIOC_MM4_ACMD12_ER_CMDNISUD_MASK (0x80U) +#define SDIOC_MM4_ACMD12_ER_CMDNISUD_SHIFT (7U) +/*! CMDNISUD - CMDNISUD + */ +#define SDIOC_MM4_ACMD12_ER_CMDNISUD(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_ACMD12_ER_CMDNISUD_SHIFT)) & SDIOC_MM4_ACMD12_ER_CMDNISUD_MASK) +/*! @} */ + +/*! @name MM4_CAP0 - MMC4 Capabilities Register 0 */ +/*! @{ */ +#define SDIOC_MM4_CAP0_TOCLKFREQ_MASK (0x3FU) +#define SDIOC_MM4_CAP0_TOCLKFREQ_SHIFT (0U) +/*! TOCLKFREQ - TOCLKFREQ + */ +#define SDIOC_MM4_CAP0_TOCLKFREQ(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_TOCLKFREQ_SHIFT)) & SDIOC_MM4_CAP0_TOCLKFREQ_MASK) +#define SDIOC_MM4_CAP0_TOCLKUNIT_MASK (0x80U) +#define SDIOC_MM4_CAP0_TOCLKUNIT_SHIFT (7U) +/*! TOCLKUNIT - TOCLKUNIT + */ +#define SDIOC_MM4_CAP0_TOCLKUNIT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_TOCLKUNIT_SHIFT)) & SDIOC_MM4_CAP0_TOCLKUNIT_MASK) +#define SDIOC_MM4_CAP0_BSCLKFREQ_MASK (0x3F00U) +#define SDIOC_MM4_CAP0_BSCLKFREQ_SHIFT (8U) +/*! BSCLKFREQ - BSCLKFREQ + */ +#define SDIOC_MM4_CAP0_BSCLKFREQ(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_BSCLKFREQ_SHIFT)) & SDIOC_MM4_CAP0_BSCLKFREQ_MASK) +#define SDIOC_MM4_CAP0_MAXBLEN_MASK (0x30000U) +#define SDIOC_MM4_CAP0_MAXBLEN_SHIFT (16U) +/*! MAXBLEN - MAXBLEN + */ +#define SDIOC_MM4_CAP0_MAXBLEN(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_MAXBLEN_SHIFT)) & SDIOC_MM4_CAP0_MAXBLEN_MASK) +#define SDIOC_MM4_CAP0_HISPDSPRT_MASK (0x200000U) +#define SDIOC_MM4_CAP0_HISPDSPRT_SHIFT (21U) +/*! HISPDSPRT - HISPDSPRT + */ +#define SDIOC_MM4_CAP0_HISPDSPRT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_HISPDSPRT_SHIFT)) & SDIOC_MM4_CAP0_HISPDSPRT_MASK) +#define SDIOC_MM4_CAP0_DMASPRT_MASK (0x400000U) +#define SDIOC_MM4_CAP0_DMASPRT_SHIFT (22U) +/*! DMASPRT - DMASPRT + */ +#define SDIOC_MM4_CAP0_DMASPRT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_DMASPRT_SHIFT)) & SDIOC_MM4_CAP0_DMASPRT_MASK) +#define SDIOC_MM4_CAP0_SUSP_RES_MASK (0x800000U) +#define SDIOC_MM4_CAP0_SUSP_RES_SHIFT (23U) +/*! SUSP_RES - SUSP/RES + */ +#define SDIOC_MM4_CAP0_SUSP_RES(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_SUSP_RES_SHIFT)) & SDIOC_MM4_CAP0_SUSP_RES_MASK) +#define SDIOC_MM4_CAP0__3_3VSPRT_MASK (0x1000000U) +#define SDIOC_MM4_CAP0__3_3VSPRT_SHIFT (24U) +/*! _3_3VSPRT - 3.3VSPRT + */ +#define SDIOC_MM4_CAP0__3_3VSPRT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0__3_3VSPRT_SHIFT)) & SDIOC_MM4_CAP0__3_3VSPRT_MASK) +#define SDIOC_MM4_CAP0__3_0VSPRT_MASK (0x2000000U) +#define SDIOC_MM4_CAP0__3_0VSPRT_SHIFT (25U) +/*! _3_0VSPRT - 3.0VSPRT + */ +#define SDIOC_MM4_CAP0__3_0VSPRT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0__3_0VSPRT_SHIFT)) & SDIOC_MM4_CAP0__3_0VSPRT_MASK) +#define SDIOC_MM4_CAP0__1_8VSPRT_MASK (0x4000000U) +#define SDIOC_MM4_CAP0__1_8VSPRT_SHIFT (26U) +/*! _1_8VSPRT - 1.8VSPRT + */ +#define SDIOC_MM4_CAP0__1_8VSPRT(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0__1_8VSPRT_SHIFT)) & SDIOC_MM4_CAP0__1_8VSPRT_MASK) +#define SDIOC_MM4_CAP0_IRQMODE_MASK (0x8000000U) +#define SDIOC_MM4_CAP0_IRQMODE_SHIFT (27U) +/*! IRQMODE - IRQMODE + */ +#define SDIOC_MM4_CAP0_IRQMODE(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CAP0_IRQMODE_SHIFT)) & SDIOC_MM4_CAP0_IRQMODE_MASK) +/*! @} */ + +/*! @name MM4_CUR_CAP0 - MMC4 Maximum Current Capabilities Register 0 */ +/*! @{ */ +#define SDIOC_MM4_CUR_CAP0__3_3VMAXI_MASK (0xFFU) +#define SDIOC_MM4_CUR_CAP0__3_3VMAXI_SHIFT (0U) +/*! _3_3VMAXI - 3.3VMAXI + */ +#define SDIOC_MM4_CUR_CAP0__3_3VMAXI(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CUR_CAP0__3_3VMAXI_SHIFT)) & SDIOC_MM4_CUR_CAP0__3_3VMAXI_MASK) +#define SDIOC_MM4_CUR_CAP0__3_0VMAXI_MASK (0xFF00U) +#define SDIOC_MM4_CUR_CAP0__3_0VMAXI_SHIFT (8U) +/*! _3_0VMAXI - 3.0VMAXI + */ +#define SDIOC_MM4_CUR_CAP0__3_0VMAXI(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CUR_CAP0__3_0VMAXI_SHIFT)) & SDIOC_MM4_CUR_CAP0__3_0VMAXI_MASK) +#define SDIOC_MM4_CUR_CAP0__1_8VMAXI_MASK (0xFF0000U) +#define SDIOC_MM4_CUR_CAP0__1_8VMAXI_SHIFT (16U) +/*! _1_8VMAXI - 1.8VMAXI + */ +#define SDIOC_MM4_CUR_CAP0__1_8VMAXI(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_CUR_CAP0__1_8VMAXI_SHIFT)) & SDIOC_MM4_CUR_CAP0__1_8VMAXI_MASK) +/*! @} */ + +/*! @name MM4_VER - MMC4 Controller Version Status */ +/*! @{ */ +#define SDIOC_MM4_VER_SPECVER_MASK (0xFF0000U) +#define SDIOC_MM4_VER_SPECVER_SHIFT (16U) +/*! SPECVER - SPECVER + */ +#define SDIOC_MM4_VER_SPECVER(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_VER_SPECVER_SHIFT)) & SDIOC_MM4_VER_SPECVER_MASK) +#define SDIOC_MM4_VER_VNDRVER_MASK (0xFF000000U) +#define SDIOC_MM4_VER_VNDRVER_SHIFT (24U) +/*! VNDRVER - VNDRVER + */ +#define SDIOC_MM4_VER_VNDRVER(x) (((uint32_t)(((uint32_t)(x)) << SDIOC_MM4_VER_VNDRVER_SHIFT)) & SDIOC_MM4_VER_VNDRVER_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group SDIOC_Register_Masks */ + + +/* SDIOC - Peripheral instance base addresses */ +/** Peripheral SDIOC base address */ +#define SDIOC_BASE (0x44002000u) +/** Peripheral SDIOC base pointer */ +#define SDIOC ((SDIOC_Type *)SDIOC_BASE) +/** Array initializer of SDIOC peripheral base addresses */ +#define SDIOC_BASE_ADDRS { SDIOC_BASE } +/** Array initializer of SDIOC peripheral base pointers */ +#define SDIOC_BASE_PTRS { SDIOC } +/** Interrupt vectors for the SDIOC peripheral type */ +#define SDIOC_IRQS { SDIO_IRQn } + +/*! + * @} + */ /* end of group SDIOC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- SSP Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SSP_Peripheral_Access_Layer SSP Peripheral Access Layer + * @{ + */ + +/** SSP - Register Layout Typedef */ +typedef struct { + __IO uint32_t SSP_SSCR0; /**< SSP Control Register 0, offset: 0x0 */ + __IO uint32_t SSP_SSCR1; /**< SSP Control Register 1, offset: 0x4 */ + __IO uint32_t SSP_SSSR; /**< SSP Status Register, offset: 0x8 */ + __IO uint32_t SSP_SSITR; /**< SSP Interrupt Test Register, offset: 0xC */ + __IO uint32_t SSP_SSDR; /**< SSP Data Register, offset: 0x10 */ + uint8_t RESERVED_0[20]; + __IO uint32_t SSP_SSTO; /**< SSP Time Out Register, offset: 0x28 */ + __IO uint32_t SSP_SSPSP; /**< SSP Programmable Serial Protocol Register, offset: 0x2C */ + __IO uint32_t SSP_SSTSA; /**< SSP TX Time Slot Active Register, offset: 0x30 */ + __IO uint32_t SSP_SSRSA; /**< SSP RX Time Slot Active Register, offset: 0x34 */ + __I uint32_t SSP_SSTSS; /**< SSP Time Slot Status Register, offset: 0x38 */ + __IO uint32_t SSP_SSACD; /**< SSP Audio Clock Divider Register, offset: 0x3C */ + __IO uint32_t SSP_SSACDD; /**< SSP Audio Clock Dither Divider Register, offset: 0x40 */ +} SSP_Type; + +/* ---------------------------------------------------------------------------- + -- SSP Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SSP_Register_Masks SSP Register Masks + * @{ + */ + +/*! @name SSP_SSCR0 - SSP Control Register 0 */ +/*! @{ */ +#define SSP_SSP_SSCR0_DSS_MASK (0xFU) +#define SSP_SSP_SSCR0_DSS_SHIFT (0U) +/*! DSS - Data Size Select + */ +#define SSP_SSP_SSCR0_DSS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_DSS_SHIFT)) & SSP_SSP_SSCR0_DSS_MASK) +#define SSP_SSP_SSCR0_FRF_MASK (0x30U) +#define SSP_SSP_SSCR0_FRF_SHIFT (4U) +/*! FRF - Frame Format + * 0b00..Motorola* Serial Peripheral Interface (SPI) + * 0b01..Texas Instruments* Synchronous Serial Protocol (SSP) + * 0b10..National Semiconductor Microwire* + * 0b11..Programmable Serial Protocol (PSP) + */ +#define SSP_SSP_SSCR0_FRF(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_FRF_SHIFT)) & SSP_SSP_SSCR0_FRF_MASK) +#define SSP_SSP_SSCR0_ECS_MASK (0x40U) +#define SSP_SSP_SSCR0_ECS_SHIFT (6U) +/*! ECS - External Clock Select + * 0b0..On-chip SSPx Clock is used in the serial clock rate formula (above) to produce the SSPx port's SSPSCLKx + * 0b1..SSPEXTCLKx (GPIO pin) is used in the serial clock rate formula to produce the SSPx port's SSPSCLKx + */ +#define SSP_SSP_SSCR0_ECS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_ECS_SHIFT)) & SSP_SSP_SSCR0_ECS_MASK) +#define SSP_SSP_SSCR0_SSE_MASK (0x80U) +#define SSP_SSP_SSCR0_SSE_SHIFT (7U) +/*! SSE - Synchronous Serial Port Enable + * 0b0..SSPx port is disabled + * 0b1..SSPx port is enabled + */ +#define SSP_SSP_SSCR0_SSE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_SSE_SHIFT)) & SSP_SSP_SSCR0_SSE_MASK) +#define SSP_SSP_SSCR0_SCR_MASK (0xFFF00U) +#define SSP_SSP_SSCR0_SCR_SHIFT (8U) +/*! SCR - Serial Clock Rate + */ +#define SSP_SSP_SSCR0_SCR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_SCR_SHIFT)) & SSP_SSP_SSCR0_SCR_MASK) +#define SSP_SSP_SSCR0_EDSS_MASK (0x100000U) +#define SSP_SSP_SSCR0_EDSS_SHIFT (20U) +/*! EDSS - Extended Data Size Select + * 0b0..A 0 is pre-appended to the DSS value to set the DSS range from 8 to 16 bits. + * 0b1..A 1 is pre-appended to the DSS value to set the DSS range from 18 to 32 bits. + */ +#define SSP_SSP_SSCR0_EDSS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_EDSS_SHIFT)) & SSP_SSP_SSCR0_EDSS_MASK) +#define SSP_SSP_SSCR0_NCS_MASK (0x200000U) +#define SSP_SSP_SSCR0_NCS_SHIFT (21U) +/*! NCS - Network Clock Select + * 0b0..Clock selection is determined by the field + * 0b1..Network clock is used to create the SSP's serial clock (SSPSCLKx) + */ +#define SSP_SSP_SSCR0_NCS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_NCS_SHIFT)) & SSP_SSP_SSCR0_NCS_MASK) +#define SSP_SSP_SSCR0_RIM_MASK (0x400000U) +#define SSP_SSP_SSCR0_RIM_SHIFT (22U) +/*! RIM - Receive FIFO Overrun Interrupt Mask + * 0b0..ROR events generate an SSP interrupt + * 0b1..ROR events do NOT generate an SSP interrupt + */ +#define SSP_SSP_SSCR0_RIM(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_RIM_SHIFT)) & SSP_SSP_SSCR0_RIM_MASK) +#define SSP_SSP_SSCR0_TIM_MASK (0x800000U) +#define SSP_SSP_SSCR0_TIM_SHIFT (23U) +/*! TIM - Transmit FIFO Underrun Interrupt Mask + * 0b0..TUR events generate an SSP interrupt + * 0b1..TUR events do NOT generate an SSP interrupt + */ +#define SSP_SSP_SSCR0_TIM(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_TIM_SHIFT)) & SSP_SSP_SSCR0_TIM_MASK) +#define SSP_SSP_SSCR0_FRDC_MASK (0x7000000U) +#define SSP_SSP_SSCR0_FRDC_SHIFT (24U) +/*! FRDC - Frame Rate Divider Control + */ +#define SSP_SSP_SSCR0_FRDC(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_FRDC_SHIFT)) & SSP_SSP_SSCR0_FRDC_MASK) +#define SSP_SSP_SSCR0_MCRT_MASK (0x8000000U) +#define SSP_SSP_SSCR0_MCRT_SHIFT (27U) +/*! MCRT - Master Clock Return + * 0b0..not seclect master return_clock + * 0b1..master clock delay + */ +#define SSP_SSP_SSCR0_MCRT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_MCRT_SHIFT)) & SSP_SSP_SSCR0_MCRT_MASK) +#define SSP_SSP_SSCR0_RHCD_MASK (0x10000000U) +#define SSP_SSP_SSCR0_RHCD_SHIFT (28U) +/*! RHCD - RX half cycle delay + * 0b0..not seclect RX half cycle delay + * 0b1..receive data delay half cycle + */ +#define SSP_SSP_SSCR0_RHCD(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_RHCD_SHIFT)) & SSP_SSP_SSCR0_RHCD_MASK) +#define SSP_SSP_SSCR0_FPCKE_MASK (0x20000000U) +#define SSP_SSP_SSCR0_FPCKE_SHIFT (29U) +/*! FPCKE - FIFO Packing Enable + * 0b0..FIFO packing mode disabled + * 0b1..FIFO packing mode enabled + */ +#define SSP_SSP_SSCR0_FPCKE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_FPCKE_SHIFT)) & SSP_SSP_SSCR0_FPCKE_MASK) +#define SSP_SSP_SSCR0_ACS_MASK (0x40000000U) +#define SSP_SSP_SSCR0_ACS_SHIFT (30U) +/*! ACS - Audio Clock Select + * 0b0..Clock selection is determined by the and fields + * 0b1..Audio clock (and audio clock divider) are used to create the SSP serial bit clock (SSPSCLKx) + */ +#define SSP_SSP_SSCR0_ACS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_ACS_SHIFT)) & SSP_SSP_SSCR0_ACS_MASK) +#define SSP_SSP_SSCR0_MOD_MASK (0x80000000U) +#define SSP_SSP_SSCR0_MOD_SHIFT (31U) +/*! MOD - Mode + * 0b0..Normal SSP mode + * 0b1..Network mode + */ +#define SSP_SSP_SSCR0_MOD(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR0_MOD_SHIFT)) & SSP_SSP_SSCR0_MOD_MASK) +/*! @} */ + +/*! @name SSP_SSCR1 - SSP Control Register 1 */ +/*! @{ */ +#define SSP_SSP_SSCR1_RIE_MASK (0x1U) +#define SSP_SSP_SSCR1_RIE_SHIFT (0U) +/*! RIE - Receive FIFO Interrupt Enable + * 0b0..RXFIFO threshold-level-reached interrupt is disabled. + * 0b1..RXFIFO threshold-level-reached interrupt is enabled. + */ +#define SSP_SSP_SSCR1_RIE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_RIE_SHIFT)) & SSP_SSP_SSCR1_RIE_MASK) +#define SSP_SSP_SSCR1_TIE_MASK (0x2U) +#define SSP_SSP_SSCR1_TIE_SHIFT (1U) +/*! TIE - Transmit FIFO Interrupt Enable + * 0b0..TXFIFO threshold-level-reached interrupt is disabled. + * 0b1..TXFIFO threshold-level-reached interrupt is enabled. + */ +#define SSP_SSP_SSCR1_TIE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_TIE_SHIFT)) & SSP_SSP_SSCR1_TIE_MASK) +#define SSP_SSP_SSCR1_LBM_MASK (0x4U) +#define SSP_SSP_SSCR1_LBM_SHIFT (2U) +/*! LBM - Loopback Mode + * 0b0..Normal serial port operation is enabled. + * 0b1..Output of TX serial shifter is internally connected to input of RX serial shifter. + */ +#define SSP_SSP_SSCR1_LBM(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_LBM_SHIFT)) & SSP_SSP_SSCR1_LBM_MASK) +#define SSP_SSP_SSCR1_SPO_MASK (0x8U) +#define SSP_SSP_SSCR1_SPO_SHIFT (3U) +/*! SPO - Motorola SPI SSPSCLK Polarity Setting + * 0b0..The inactive or idle state of SSPSCLKx is low. + * 0b1..The inactive or idle state of SSPSCLKx is high. + */ +#define SSP_SSP_SSCR1_SPO(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_SPO_SHIFT)) & SSP_SSP_SSCR1_SPO_MASK) +#define SSP_SSP_SSCR1_SPH_MASK (0x10U) +#define SSP_SSP_SSCR1_SPH_SHIFT (4U) +/*! SPH - Motorola SPI SSPSCLK phase setting + * 0b0..SSPSCLKx is inactive until one cycle after the start of a frame and active until 1/2 cycle before the end of a frame. + * 0b1..SSPSCLKx is inactive until 1/2 cycle after the start of a frame and active until one cycle + */ +#define SSP_SSP_SSCR1_SPH(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_SPH_SHIFT)) & SSP_SSP_SSCR1_SPH_MASK) +#define SSP_SSP_SSCR1_TFT_MASK (0x3C0U) +#define SSP_SSP_SSCR1_TFT_SHIFT (6U) +/*! TFT - TXFIFO Trigger Threshold + */ +#define SSP_SSP_SSCR1_TFT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_TFT_SHIFT)) & SSP_SSP_SSCR1_TFT_MASK) +#define SSP_SSP_SSCR1_RFT_MASK (0x3C00U) +#define SSP_SSP_SSCR1_RFT_SHIFT (10U) +/*! RFT - RXFIFO Trigger Threshold + */ +#define SSP_SSP_SSCR1_RFT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_RFT_SHIFT)) & SSP_SSP_SSCR1_RFT_MASK) +#define SSP_SSP_SSCR1_EFWR_MASK (0x4000U) +#define SSP_SSP_SSCR1_EFWR_SHIFT (14U) +/*! EFWR - Enable FIFO Write/read + * 0b0..FIFO write/read special function is disabled (normal SSPx operational mode). + * 0b1..FIFO write/read special function is enabled. + */ +#define SSP_SSP_SSCR1_EFWR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_EFWR_SHIFT)) & SSP_SSP_SSCR1_EFWR_MASK) +#define SSP_SSP_SSCR1_STRF_MASK (0x8000U) +#define SSP_SSP_SSCR1_STRF_SHIFT (15U) +/*! STRF - Select FIFO For Efwr + * 0b0..TXFIFO is selected for both writes and reads through the SSP Data Register. + * 0b1..RXFIFO is selected for both writes and reads through the SSP Data Register. + */ +#define SSP_SSP_SSCR1_STRF(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_STRF_SHIFT)) & SSP_SSP_SSCR1_STRF_MASK) +#define SSP_SSP_SSCR1_IFS_MASK (0x10000U) +#define SSP_SSP_SSCR1_IFS_SHIFT (16U) +/*! IFS - Invert Frame Signal + * 0b0..SSPSFRMx polarity is determined by the PSP polarity bits. + * 0b1..SSPSFRMx is inverted from normal-SSPSFRMx (as defined by the PSP polarity bits). (Works in all frame formats: SPI, SSP, and PSP) + */ +#define SSP_SSP_SSCR1_IFS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_IFS_SHIFT)) & SSP_SSP_SSCR1_IFS_MASK) +#define SSP_SSP_SSCR1_PDM_MASK (0x20000U) +#define SSP_SSP_SSCR1_PDM_SHIFT (17U) +/*! PDM - Pulse Desity Modulation Enable + * 0b0..PDM function is disabled. + * 0b1..PDM function is enabled ,ignore all the ssp module configration but sse bit . + */ +#define SSP_SSP_SSCR1_PDM(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_PDM_SHIFT)) & SSP_SSP_SSCR1_PDM_MASK) +#define SSP_SSP_SSCR1_PINTE_MASK (0x40000U) +#define SSP_SSP_SSCR1_PINTE_SHIFT (18U) +/*! PINTE - Peripheral Trailing Byte Interrupt Enable + * 0b0..Peripheral trailing byte interrupt is disabled. + * 0b1..Peripheral trailing byte interrupt is enabled. + */ +#define SSP_SSP_SSCR1_PINTE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_PINTE_SHIFT)) & SSP_SSP_SSCR1_PINTE_MASK) +#define SSP_SSP_SSCR1_TINTE_MASK (0x80000U) +#define SSP_SSP_SSCR1_TINTE_SHIFT (19U) +/*! TINTE - Receiver Time-out Interrupt Enable + * 0b0..Receiver time-out interrupt is disabled. + * 0b1..Receiver time-out interrupt is enabled. + */ +#define SSP_SSP_SSCR1_TINTE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_TINTE_SHIFT)) & SSP_SSP_SSCR1_TINTE_MASK) +#define SSP_SSP_SSCR1_RSRE_MASK (0x100000U) +#define SSP_SSP_SSCR1_RSRE_SHIFT (20U) +/*! RSRE - Receive Service Request Enable + * 0b0..DMA service request is disabled + * 0b1..DMA service request is enabled + */ +#define SSP_SSP_SSCR1_RSRE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_RSRE_SHIFT)) & SSP_SSP_SSCR1_RSRE_MASK) +#define SSP_SSP_SSCR1_TSRE_MASK (0x200000U) +#define SSP_SSP_SSCR1_TSRE_SHIFT (21U) +/*! TSRE - Transmit Service Request Enable + * 0b0..DMA service request is disabled + * 0b1..DMA service request is enabled + */ +#define SSP_SSP_SSCR1_TSRE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_TSRE_SHIFT)) & SSP_SSP_SSCR1_TSRE_MASK) +#define SSP_SSP_SSCR1_TRAIL_MASK (0x400000U) +#define SSP_SSP_SSCR1_TRAIL_SHIFT (22U) +/*! TRAIL - Trailing Byte + * 0b0..Trailing bytes are handled by the Aspen (88AP168) Processor + * 0b1..Trailing bytes are handled by DMA bursts + */ +#define SSP_SSP_SSCR1_TRAIL(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_TRAIL_SHIFT)) & SSP_SSP_SSCR1_TRAIL_MASK) +#define SSP_SSP_SSCR1_RWOT_MASK (0x800000U) +#define SSP_SSP_SSCR1_RWOT_SHIFT (23U) +/*! RWOT - Receive Without Transmit + * 0b0..Transmit/Receive mode + * 0b1..Receive without Transmit mode + */ +#define SSP_SSP_SSCR1_RWOT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_RWOT_SHIFT)) & SSP_SSP_SSCR1_RWOT_MASK) +#define SSP_SSP_SSCR1_SFRMDIR_MASK (0x1000000U) +#define SSP_SSP_SSCR1_SFRMDIR_SHIFT (24U) +/*! SFRMDIR - SSP Frame (SSPSFRMx) Direction + * 0b0..Master mode, SSPx port drives SSPSFRMx + * 0b1..Slave mode, SSPx port receives SSPSFRMx + */ +#define SSP_SSP_SSCR1_SFRMDIR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_SFRMDIR_SHIFT)) & SSP_SSP_SSCR1_SFRMDIR_MASK) +#define SSP_SSP_SSCR1_SCLKDIR_MASK (0x2000000U) +#define SSP_SSP_SSCR1_SCLKDIR_SHIFT (25U) +/*! SCLKDIR - SSP Serial Bit Rate Clock (SSPSCLKx) Direction + * 0b0..Master mode, SSPx port drives SSPSCLKx + * 0b1..Slave mode, SSPx port receives SSPSCLKx + */ +#define SSP_SSP_SSCR1_SCLKDIR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_SCLKDIR_SHIFT)) & SSP_SSP_SSCR1_SCLKDIR_MASK) +#define SSP_SSP_SSCR1_ECRB_MASK (0x4000000U) +#define SSP_SSP_SSCR1_ECRB_SHIFT (26U) +/*! ECRB - Enable Clock Request B + * 0b0..Clock request from other SSPx is disabled. + * 0b1..Clock request from other SSPx is enabled. + */ +#define SSP_SSP_SSCR1_ECRB(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_ECRB_SHIFT)) & SSP_SSP_SSCR1_ECRB_MASK) +#define SSP_SSP_SSCR1_ECRA_MASK (0x8000000U) +#define SSP_SSP_SSCR1_ECRA_SHIFT (27U) +/*! ECRA - Enable Clock Request A + * 0b0..Clock request from other SSPx is disabled. + * 0b1..Clock request from other SSPx is enabled. + */ +#define SSP_SSP_SSCR1_ECRA(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_ECRA_SHIFT)) & SSP_SSP_SSCR1_ECRA_MASK) +#define SSP_SSP_SSCR1_SCFR_MASK (0x10000000U) +#define SSP_SSP_SSCR1_SCFR_SHIFT (28U) +/*! SCFR - Slave Clock Free Running + * 0b0..Clock input to SSPSCLKx is continuously running + * 0b1..Clock input to SSPSCLKx is only active during data transfers. (ob1 Required for slave mode.) + */ +#define SSP_SSP_SSCR1_SCFR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_SCFR_SHIFT)) & SSP_SSP_SSCR1_SCFR_MASK) +#define SSP_SSP_SSCR1_EBCEI_MASK (0x20000000U) +#define SSP_SSP_SSCR1_EBCEI_SHIFT (29U) +/*! EBCEI - Enable Bit Count Error Interrupt + * 0b0..Interrupt due to a bit count error is disabled. + * 0b1..Interrupt due to a bit count error is enabled. + */ +#define SSP_SSP_SSCR1_EBCEI(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_EBCEI_SHIFT)) & SSP_SSP_SSCR1_EBCEI_MASK) +#define SSP_SSP_SSCR1_TTE_MASK (0x40000000U) +#define SSP_SSP_SSCR1_TTE_SHIFT (30U) +/*! TTE - TXD Three-State Enable + * 0b0..TXDx output signal is not three-stated. + * 0b1..TXD is three-stated when not transmitting data. + */ +#define SSP_SSP_SSCR1_TTE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_TTE_SHIFT)) & SSP_SSP_SSCR1_TTE_MASK) +#define SSP_SSP_SSCR1_TTELP_MASK (0x80000000U) +#define SSP_SSP_SSCR1_TTELP_SHIFT (31U) +/*! TTELP - TXD Three-state Enable On Last Phase + * 0b0..TXDx is three-stated 1/2 clock cycle after the beginning of the LSB. + * 0b1..TXDx output signal is three-stated on the clock edge that ends the LSB. + */ +#define SSP_SSP_SSCR1_TTELP(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSCR1_TTELP_SHIFT)) & SSP_SSP_SSCR1_TTELP_MASK) +/*! @} */ + +/*! @name SSP_SSSR - SSP Status Register */ +/*! @{ */ +#define SSP_SSP_SSSR_TNF_MASK (0x4U) +#define SSP_SSP_SSSR_TNF_SHIFT (2U) +/*! TNF - Transmit FIFO Not Full + * 0b0..TXFIFO is full. + * 0b1..TXFIFO is not full. + */ +#define SSP_SSP_SSSR_TNF(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_TNF_SHIFT)) & SSP_SSP_SSSR_TNF_MASK) +#define SSP_SSP_SSSR_RNE_MASK (0x8U) +#define SSP_SSP_SSSR_RNE_SHIFT (3U) +/*! RNE - Receive FIFO Not Empty + * 0b0..RXFIFO is empty. + * 0b1..RXFIFO is not empty. + */ +#define SSP_SSP_SSSR_RNE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_RNE_SHIFT)) & SSP_SSP_SSSR_RNE_MASK) +#define SSP_SSP_SSSR_BSY_MASK (0x10U) +#define SSP_SSP_SSSR_BSY_SHIFT (4U) +/*! BSY - SSP Busy + * 0b0..SSPx port is idle or disabled. + * 0b1..SSPx port is currently transmitting or receiving framed data. + */ +#define SSP_SSP_SSSR_BSY(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_BSY_SHIFT)) & SSP_SSP_SSSR_BSY_MASK) +#define SSP_SSP_SSSR_TFS_MASK (0x20U) +#define SSP_SSP_SSSR_TFS_SHIFT (5U) +/*! TFS - Transmit FIFO Service Request + * 0b0..TX FIFO level exceeds the TFT threshold (TFT + 1), or SSPx port disabled. + * 0b1..TXFIFO level is at or below TFT threshold (TFT + 1), causes an interrupt request. + */ +#define SSP_SSP_SSSR_TFS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_TFS_SHIFT)) & SSP_SSP_SSSR_TFS_MASK) +#define SSP_SSP_SSSR_RFS_MASK (0x40U) +#define SSP_SSP_SSSR_RFS_SHIFT (6U) +/*! RFS - Receive FIFO Service Request + * 0b0..RXFIFO level is at or below RFT threshold (RFT), or SSPx port is disabled + * 0b1..RXFIFO level exceeds RFT threshold (RFT), causes an interrupt request + */ +#define SSP_SSP_SSSR_RFS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_RFS_SHIFT)) & SSP_SSP_SSSR_RFS_MASK) +#define SSP_SSP_SSSR_ROR_MASK (0x80U) +#define SSP_SSP_SSSR_ROR_SHIFT (7U) +/*! ROR - Receive FIFO Overrun + * 0b0..RXFIFO has not experienced an overrun. + * 0b1..Attempted data write to full RXFIFO, causes an interrupt request. + */ +#define SSP_SSP_SSSR_ROR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_ROR_SHIFT)) & SSP_SSP_SSSR_ROR_MASK) +#define SSP_SSP_SSSR_TFL_MASK (0xF00U) +#define SSP_SSP_SSSR_TFL_SHIFT (8U) +/*! TFL - Transmit FIFO Level + */ +#define SSP_SSP_SSSR_TFL(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_TFL_SHIFT)) & SSP_SSP_SSSR_TFL_MASK) +#define SSP_SSP_SSSR_RFL_MASK (0xF000U) +#define SSP_SSP_SSSR_RFL_SHIFT (12U) +/*! RFL - Receive FIFO Level + */ +#define SSP_SSP_SSSR_RFL(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_RFL_SHIFT)) & SSP_SSP_SSSR_RFL_MASK) +#define SSP_SSP_SSSR_PINT_MASK (0x40000U) +#define SSP_SSP_SSSR_PINT_SHIFT (18U) +/*! PINT - Peripheral Trailing Byte Interrupt + * 0b0..No peripheral trailing byte interrupt is pending. + * 0b1..Peripheral trailing byte interrupt is pending. + */ +#define SSP_SSP_SSSR_PINT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_PINT_SHIFT)) & SSP_SSP_SSSR_PINT_MASK) +#define SSP_SSP_SSSR_TINT_MASK (0x80000U) +#define SSP_SSP_SSSR_TINT_SHIFT (19U) +/*! TINT - Receiver Time-out Interrupt + * 0b0..No receiver time-out is pending. + * 0b1..Receiver time-out pending, causes an interrupt request. + */ +#define SSP_SSP_SSSR_TINT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_TINT_SHIFT)) & SSP_SSP_SSSR_TINT_MASK) +#define SSP_SSP_SSSR_EOC_MASK (0x100000U) +#define SSP_SSP_SSSR_EOC_SHIFT (20U) +/*! EOC - End Of Chain + * 0b0..DMA has not signaled an end of chain condition. + * 0b1..DMA has signaled an end of chain condition. + */ +#define SSP_SSP_SSSR_EOC(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_EOC_SHIFT)) & SSP_SSP_SSSR_EOC_MASK) +#define SSP_SSP_SSSR_TUR_MASK (0x200000U) +#define SSP_SSP_SSSR_TUR_SHIFT (21U) +/*! TUR - Transmit FIFO Underrun + * 0b0..The TXFIFO has not experienced an underrun. + * 0b1..A read from the TXFIFO was attempted when the TXFIFO was empty, causes an interrupt if it is enabled + * ( in the SSP Control Register 0 is 0). + */ +#define SSP_SSP_SSSR_TUR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_TUR_SHIFT)) & SSP_SSP_SSSR_TUR_MASK) +#define SSP_SSP_SSSR_CSS_MASK (0x400000U) +#define SSP_SSP_SSSR_CSS_SHIFT (22U) +/*! CSS - Clock Synchronization Status + * 0b0..The SSPx port is ready for slave clock operations. + * 0b1..The SSPx port is currently busy synchronizing slave mode signals. + */ +#define SSP_SSP_SSSR_CSS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_CSS_SHIFT)) & SSP_SSP_SSSR_CSS_MASK) +#define SSP_SSP_SSSR_BCE_MASK (0x800000U) +#define SSP_SSP_SSSR_BCE_SHIFT (23U) +/*! BCE - Bit Count Error + * 0b0..The SSPx port has not experienced a bit count error. + * 0b1..The SSPSFRMx signal was asserted when the bit counter was not zero. + */ +#define SSP_SSP_SSSR_BCE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_BCE_SHIFT)) & SSP_SSP_SSSR_BCE_MASK) +#define SSP_SSP_SSSR_TX_OSS_MASK (0x40000000U) +#define SSP_SSP_SSSR_TX_OSS_SHIFT (30U) +/*! TX_OSS - TX FIFO Odd Sample Status + * 0b0..TxFIFO entry has an even number of samples + * 0b1..TxFIFO entry has an odd number of sample. + */ +#define SSP_SSP_SSSR_TX_OSS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_TX_OSS_SHIFT)) & SSP_SSP_SSSR_TX_OSS_MASK) +#define SSP_SSP_SSSR_OSS_MASK (0x80000000U) +#define SSP_SSP_SSSR_OSS_SHIFT (31U) +/*! OSS - Odd Sample Status + * 0b0..RxFIFO entry has 2 samples + * 0b1..RxFIFO entry has 1 sample. + */ +#define SSP_SSP_SSSR_OSS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSSR_OSS_SHIFT)) & SSP_SSP_SSSR_OSS_MASK) +/*! @} */ + +/*! @name SSP_SSITR - SSP Interrupt Test Register */ +/*! @{ */ +#define SSP_SSP_SSITR_TTFS_MASK (0x20U) +#define SSP_SSP_SSITR_TTFS_SHIFT (5U) +/*! TTFS - Test TXFIFO Service Request + * 0b0..No TXFIFO-service request + * 0b1..Generates a non-maskable TXFIFO-service interrupt request and DMA request + */ +#define SSP_SSP_SSITR_TTFS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSITR_TTFS_SHIFT)) & SSP_SSP_SSITR_TTFS_MASK) +#define SSP_SSP_SSITR_TRFS_MASK (0x40U) +#define SSP_SSP_SSITR_TRFS_SHIFT (6U) +/*! TRFS - Test RXFIFO Service Request + * 0b0..No RXFIFO-service request. + * 0b1..Generates a non-maskable RXFIFO-service interrupt request and DMA request + */ +#define SSP_SSP_SSITR_TRFS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSITR_TRFS_SHIFT)) & SSP_SSP_SSITR_TRFS_MASK) +#define SSP_SSP_SSITR_TROR_MASK (0x80U) +#define SSP_SSP_SSITR_TROR_SHIFT (7U) +/*! TROR - Test RXFIFO Overrun + * 0b0..No RXFIFO-overrun service request. + * 0b1..Generates a non-maskable RXFIFO-overrun interrupt request. No DMA request is generated + */ +#define SSP_SSP_SSITR_TROR(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSITR_TROR_SHIFT)) & SSP_SSP_SSITR_TROR_MASK) +/*! @} */ + +/*! @name SSP_SSDR - SSP Data Register */ +/*! @{ */ +#define SSP_SSP_SSDR_DATA_MASK (0xFFFFFFFFU) +#define SSP_SSP_SSDR_DATA_SHIFT (0U) +/*! DATA - DATA + */ +#define SSP_SSP_SSDR_DATA(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSDR_DATA_SHIFT)) & SSP_SSP_SSDR_DATA_MASK) +/*! @} */ + +/*! @name SSP_SSTO - SSP Time Out Register */ +/*! @{ */ +#define SSP_SSP_SSTO_TIMEOUT_MASK (0xFFFFFFU) +#define SSP_SSP_SSTO_TIMEOUT_SHIFT (0U) +/*! TIMEOUT - Timeout Value + */ +#define SSP_SSP_SSTO_TIMEOUT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSTO_TIMEOUT_SHIFT)) & SSP_SSP_SSTO_TIMEOUT_MASK) +/*! @} */ + +/*! @name SSP_SSPSP - SSP Programmable Serial Protocol Register */ +/*! @{ */ +#define SSP_SSP_SSPSP_SCMODE_MASK (0x3U) +#define SSP_SSP_SSPSP_SCMODE_SHIFT (0U) +/*! SCMODE - Serial Bit-rate Clock Mode + * 0b00..Data Driven (Falling), Data Sampled (Rising), Idle State (Low) + * 0b01..Data Driven (Rising), Data Sampled (Falling), Idle State (Low) + * 0b10..Data Driven (Rising), Data Sampled (Falling), Idle State (High) + * 0b11..Data Driven (Falling), Data Sampled (Rising), Idle State (High) + */ +#define SSP_SSP_SSPSP_SCMODE(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_SCMODE_SHIFT)) & SSP_SSP_SSPSP_SCMODE_MASK) +#define SSP_SSP_SSPSP_SFRMP_MASK (0x4U) +#define SSP_SSP_SSPSP_SFRMP_SHIFT (2U) +/*! SFRMP - Serial Frame Polarity + * 0b0..SSPSFRMx is active low (0b0). + * 0b1..SSPSFRMx is active high (0b1). + */ +#define SSP_SSP_SSPSP_SFRMP(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_SFRMP_SHIFT)) & SSP_SSP_SSPSP_SFRMP_MASK) +#define SSP_SSP_SSPSP_ETDS_MASK (0x8U) +#define SSP_SSP_SSPSP_ETDS_SHIFT (3U) +/*! ETDS - End Of Transfer Data State + */ +#define SSP_SSP_SSPSP_ETDS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_ETDS_SHIFT)) & SSP_SSP_SSPSP_ETDS_MASK) +#define SSP_SSP_SSPSP_STRTDLY_MASK (0x70U) +#define SSP_SSP_SSPSP_STRTDLY_SHIFT (4U) +/*! STRTDLY - Start Delay + */ +#define SSP_SSP_SSPSP_STRTDLY(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_STRTDLY_SHIFT)) & SSP_SSP_SSPSP_STRTDLY_MASK) +#define SSP_SSP_SSPSP_DMYSTRT_MASK (0x180U) +#define SSP_SSP_SSPSP_DMYSTRT_SHIFT (7U) +/*! DMYSTRT - Dummy Start + */ +#define SSP_SSP_SSPSP_DMYSTRT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_DMYSTRT_SHIFT)) & SSP_SSP_SSPSP_DMYSTRT_MASK) +#define SSP_SSP_SSPSP_SFRMDLY_MASK (0xFE00U) +#define SSP_SSP_SSPSP_SFRMDLY_SHIFT (9U) +/*! SFRMDLY - Serial Frame Delay + */ +#define SSP_SSP_SSPSP_SFRMDLY(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_SFRMDLY_SHIFT)) & SSP_SSP_SSPSP_SFRMDLY_MASK) +#define SSP_SSP_SSPSP_SFRMWDTH_MASK (0x3F0000U) +#define SSP_SSP_SSPSP_SFRMWDTH_SHIFT (16U) +/*! SFRMWDTH - Serial Frame Width + */ +#define SSP_SSP_SSPSP_SFRMWDTH(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_SFRMWDTH_SHIFT)) & SSP_SSP_SSPSP_SFRMWDTH_MASK) +#define SSP_SSP_SSPSP_DMYSTOP_MASK (0x1800000U) +#define SSP_SSP_SSPSP_DMYSTOP_SHIFT (23U) +/*! DMYSTOP - Dummy Stop + */ +#define SSP_SSP_SSPSP_DMYSTOP(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_DMYSTOP_SHIFT)) & SSP_SSP_SSPSP_DMYSTOP_MASK) +#define SSP_SSP_SSPSP_FSRT_MASK (0x2000000U) +#define SSP_SSP_SSPSP_FSRT_SHIFT (25U) +/*! FSRT - Frame Sync Relative Timing Bit + * 0b0..Next frame is asserted after the end of the DMTSTOP timing. + * 0b1..Next frame is asserted with the LSB of the previous frame. + */ +#define SSP_SSP_SSPSP_FSRT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_FSRT_SHIFT)) & SSP_SSP_SSPSP_FSRT_MASK) +#define SSP_SSP_SSPSP_EDMYSTRT_MASK (0xC000000U) +#define SSP_SSP_SSPSP_EDMYSTRT_SHIFT (26U) +/*! EDMYSTRT - Extended Dummy Start + */ +#define SSP_SSP_SSPSP_EDMYSTRT(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_EDMYSTRT_SHIFT)) & SSP_SSP_SSPSP_EDMYSTRT_MASK) +#define SSP_SSP_SSPSP_EDMYSTOP_MASK (0x70000000U) +#define SSP_SSP_SSPSP_EDMYSTOP_SHIFT (28U) +/*! EDMYSTOP - Extended Dummy Stop + */ +#define SSP_SSP_SSPSP_EDMYSTOP(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSPSP_EDMYSTOP_SHIFT)) & SSP_SSP_SSPSP_EDMYSTOP_MASK) +/*! @} */ + +/*! @name SSP_SSTSA - SSP TX Time Slot Active Register */ +/*! @{ */ +#define SSP_SSP_SSTSA_TTSA_MASK (0xFFU) +#define SSP_SSP_SSTSA_TTSA_SHIFT (0U) +/*! TTSA - TX Time Slot Active + * 0b00000000..SSPx port does NOT transmit data in this time slot. + * 0b00000001..SSPx port does transmit data in this time slot. + */ +#define SSP_SSP_SSTSA_TTSA(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSTSA_TTSA_SHIFT)) & SSP_SSP_SSTSA_TTSA_MASK) +/*! @} */ + +/*! @name SSP_SSRSA - SSP RX Time Slot Active Register */ +/*! @{ */ +#define SSP_SSP_SSRSA_RTSA_MASK (0xFFU) +#define SSP_SSP_SSRSA_RTSA_SHIFT (0U) +/*! RTSA - RX Time Slot Active + * 0b00000000..SSPx port does not receive data in this time slot. + * 0b00000001..SSPx port receives data in this time slot. + */ +#define SSP_SSP_SSRSA_RTSA(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSRSA_RTSA_SHIFT)) & SSP_SSP_SSRSA_RTSA_MASK) +/*! @} */ + +/*! @name SSP_SSTSS - SSP Time Slot Status Register */ +/*! @{ */ +#define SSP_SSP_SSTSS_TSS_MASK (0x7U) +#define SSP_SSP_SSTSS_TSS_SHIFT (0U) +/*! TSS - Time Slot Status + */ +#define SSP_SSP_SSTSS_TSS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSTSS_TSS_SHIFT)) & SSP_SSP_SSTSS_TSS_MASK) +#define SSP_SSP_SSTSS_NMBSY_MASK (0x80000000U) +#define SSP_SSP_SSTSS_NMBSY_SHIFT (31U) +/*! NMBSY - Network Mode Busy + * 0b0..SSPx port is in network mode and no frame is currently active. + * 0b1..SSPx port is in network mode and a frame is currently active. + */ +#define SSP_SSP_SSTSS_NMBSY(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSTSS_NMBSY_SHIFT)) & SSP_SSP_SSTSS_NMBSY_MASK) +/*! @} */ + +/*! @name SSP_SSACD - SSP Audio Clock Divider Register */ +/*! @{ */ +#define SSP_SSP_SSACD_ACDS_MASK (0x7U) +#define SSP_SSP_SSACD_ACDS_SHIFT (0U) +/*! ACDS - Audio Clock Divider Select + */ +#define SSP_SSP_SSACD_ACDS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSACD_ACDS_SHIFT)) & SSP_SSP_SSACD_ACDS_MASK) +#define SSP_SSP_SSACD_SCDB_MASK (0x8U) +#define SSP_SSP_SSACD_SCDB_SHIFT (3U) +/*! SCDB - SYSCLK Divider Bypass + * 0b0..SYSCLK is divided by 4 (if SCDX8=0) or 8 (if SCDX8=1) to generate internal audio clock. + * 0b1..SYSCLK is not divided. + */ +#define SSP_SSP_SSACD_SCDB(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSACD_SCDB_SHIFT)) & SSP_SSP_SSACD_SCDB_MASK) +#define SSP_SSP_SSACD_ACPS_MASK (0x70U) +#define SSP_SSP_SSACD_ACPS_SHIFT (4U) +/*! ACPS - Audio Clock PLL Select + */ +#define SSP_SSP_SSACD_ACPS(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSACD_ACPS_SHIFT)) & SSP_SSP_SSACD_ACPS_MASK) +#define SSP_SSP_SSACD_SCDX8_MASK (0x80U) +#define SSP_SSP_SSACD_SCDX8_SHIFT (7U) +/*! SCDX8 - SYSCLK Divided By 8 + * 0b0..SYSCLK is divided by 4 to generate internal audio clock. + * 0b1..SYSCLK is divided by 8 to generate internal audio clock. + */ +#define SSP_SSP_SSACD_SCDX8(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSACD_SCDX8_SHIFT)) & SSP_SSP_SSACD_SCDX8_MASK) +/*! @} */ + +/*! @name SSP_SSACDD - SSP Audio Clock Dither Divider Register */ +/*! @{ */ +#define SSP_SSP_SSACDD_DEN_MASK (0xFFFU) +#define SSP_SSP_SSACDD_DEN_SHIFT (0U) +/*! DEN - Denominator + */ +#define SSP_SSP_SSACDD_DEN(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSACDD_DEN_SHIFT)) & SSP_SSP_SSACDD_DEN_MASK) +#define SSP_SSP_SSACDD_NUM_MASK (0x7FFF0000U) +#define SSP_SSP_SSACDD_NUM_SHIFT (16U) +/*! NUM - Numerator + */ +#define SSP_SSP_SSACDD_NUM(x) (((uint32_t)(((uint32_t)(x)) << SSP_SSP_SSACDD_NUM_SHIFT)) & SSP_SSP_SSACDD_NUM_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group SSP_Register_Masks */ + + +/* SSP - Peripheral instance base addresses */ +/** Peripheral SSP0 base address */ +#define SSP0_BASE (0x46020000u) +/** Peripheral SSP0 base pointer */ +#define SSP0 ((SSP_Type *)SSP0_BASE) +/** Peripheral SSP1 base address */ +#define SSP1_BASE (0x460D0000u) +/** Peripheral SSP1 base pointer */ +#define SSP1 ((SSP_Type *)SSP1_BASE) +/** Peripheral SSP2 base address */ +#define SSP2_BASE (0x48000000u) +/** Peripheral SSP2 base pointer */ +#define SSP2 ((SSP_Type *)SSP2_BASE) +/** Array initializer of SSP peripheral base addresses */ +#define SSP_BASE_ADDRS { SSP0_BASE, SSP1_BASE, SSP2_BASE } +/** Array initializer of SSP peripheral base pointers */ +#define SSP_BASE_PTRS { SSP0, SSP1, SSP2 } +/** Interrupt vectors for the SSP peripheral type */ +#define SSP_IRQS { SSP0_IRQn, SSP1_IRQn, SSP2_IRQn } + +/*! + * @} + */ /* end of group SSP_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- SYS_CTL Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SYS_CTL_Peripheral_Access_Layer SYS_CTL Peripheral Access Layer + * @{ + */ + +/** SYS_CTL - Register Layout Typedef */ +typedef struct { + __I uint32_t REV_ID; /**< Chip Revision Register, offset: 0x0 */ + __IO uint32_t MEM; /**< Memory Space Configuration Register, offset: 0x4 */ + __IO uint32_t RAM0; /**< RAM0 Control Register, offset: 0x8 */ + __IO uint32_t RAM1; /**< RAM1 Control Register, offset: 0xC */ + __IO uint32_t RAM2; /**< RAM2 Control Register, offset: 0x10 */ + __IO uint32_t RAM3; /**< RAM3 Control Register, offset: 0x14 */ + uint8_t RESERVED_0[16]; + __IO uint32_t ROM; /**< ROM Control Register, offset: 0x28 */ + __IO uint32_t AON_MEM; /**< AON_MEM Control Register, offset: 0x2C */ + uint8_t RESERVED_1[4]; + __IO uint32_t GPT_IN; /**< GPT Pin-in Selection Register, offset: 0x34 */ + __IO uint32_t CAL; /**< Calibration channel selection register, offset: 0x38 */ + __IO uint32_t PERI_SW_RST; /**< Peripheral Software Reset register, offset: 0x3C */ + __IO uint32_t USB_CTRL; /**< USB Control Register, offset: 0x40 */ + uint8_t RESERVED_2[8]; + __IO uint32_t MMC_TC; /**< SDIO Timing Control Register, offset: 0x4C */ + __IO uint32_t EXT_FLASH_SEL; /**< External Flash select register, offset: 0x50 */ +} SYS_CTL_Type; + +/* ---------------------------------------------------------------------------- + -- SYS_CTL Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SYS_CTL_Register_Masks SYS_CTL Register Masks + * @{ + */ + +/*! @name REV_ID - Chip Revision Register */ +/*! @{ */ +#define SYS_CTL_REV_ID_REV_ID_MASK (0xFFFFFFFFU) +#define SYS_CTL_REV_ID_REV_ID_SHIFT (0U) +/*! REV_ID - Chip revision ID + */ +#define SYS_CTL_REV_ID_REV_ID(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_REV_ID_REV_ID_SHIFT)) & SYS_CTL_REV_ID_REV_ID_MASK) +/*! @} */ + +/*! @name MEM - Memory Space Configuration Register */ +/*! @{ */ +#define SYS_CTL_MEM_CFG_MASK (0x3U) +#define SYS_CTL_MEM_CFG_SHIFT (0U) +/*! CFG - Memory space configuration + */ +#define SYS_CTL_MEM_CFG(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_MEM_CFG_SHIFT)) & SYS_CTL_MEM_CFG_MASK) +/*! @} */ + +/*! @name RAM0 - RAM0 Control Register */ +/*! @{ */ +#define SYS_CTL_RAM0_RTC_MASK (0x3U) +#define SYS_CTL_RAM0_RTC_SHIFT (0U) +/*! RTC - RTC + */ +#define SYS_CTL_RAM0_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM0_RTC_SHIFT)) & SYS_CTL_RAM0_RTC_MASK) +#define SYS_CTL_RAM0_WTC_MASK (0xCU) +#define SYS_CTL_RAM0_WTC_SHIFT (2U) +/*! WTC - WTC + */ +#define SYS_CTL_RAM0_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM0_WTC_SHIFT)) & SYS_CTL_RAM0_WTC_MASK) +/*! @} */ + +/*! @name RAM1 - RAM1 Control Register */ +/*! @{ */ +#define SYS_CTL_RAM1_RTC_MASK (0x3U) +#define SYS_CTL_RAM1_RTC_SHIFT (0U) +/*! RTC - RTC + */ +#define SYS_CTL_RAM1_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM1_RTC_SHIFT)) & SYS_CTL_RAM1_RTC_MASK) +#define SYS_CTL_RAM1_WTC_MASK (0xCU) +#define SYS_CTL_RAM1_WTC_SHIFT (2U) +/*! WTC - WTC + */ +#define SYS_CTL_RAM1_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM1_WTC_SHIFT)) & SYS_CTL_RAM1_WTC_MASK) +/*! @} */ + +/*! @name RAM2 - RAM2 Control Register */ +/*! @{ */ +#define SYS_CTL_RAM2_RTC_MASK (0x3U) +#define SYS_CTL_RAM2_RTC_SHIFT (0U) +/*! RTC - RTC + */ +#define SYS_CTL_RAM2_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM2_RTC_SHIFT)) & SYS_CTL_RAM2_RTC_MASK) +#define SYS_CTL_RAM2_WTC_MASK (0xCU) +#define SYS_CTL_RAM2_WTC_SHIFT (2U) +/*! WTC - WTC + */ +#define SYS_CTL_RAM2_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM2_WTC_SHIFT)) & SYS_CTL_RAM2_WTC_MASK) +/*! @} */ + +/*! @name RAM3 - RAM3 Control Register */ +/*! @{ */ +#define SYS_CTL_RAM3_RTC_MASK (0x3U) +#define SYS_CTL_RAM3_RTC_SHIFT (0U) +/*! RTC - RTC + */ +#define SYS_CTL_RAM3_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM3_RTC_SHIFT)) & SYS_CTL_RAM3_RTC_MASK) +#define SYS_CTL_RAM3_WTC_MASK (0xCU) +#define SYS_CTL_RAM3_WTC_SHIFT (2U) +/*! WTC - WTC + */ +#define SYS_CTL_RAM3_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_RAM3_WTC_SHIFT)) & SYS_CTL_RAM3_WTC_MASK) +/*! @} */ + +/*! @name ROM - ROM Control Register */ +/*! @{ */ +#define SYS_CTL_ROM_RTC_MASK (0x7U) +#define SYS_CTL_ROM_RTC_SHIFT (0U) +/*! RTC - RTC Reference + */ +#define SYS_CTL_ROM_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_ROM_RTC_SHIFT)) & SYS_CTL_ROM_RTC_MASK) +#define SYS_CTL_ROM_RTC_REF_MASK (0x18U) +#define SYS_CTL_ROM_RTC_REF_SHIFT (3U) +/*! RTC_REF - RTC Reference + */ +#define SYS_CTL_ROM_RTC_REF(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_ROM_RTC_REF_SHIFT)) & SYS_CTL_ROM_RTC_REF_MASK) +/*! @} */ + +/*! @name AON_MEM - AON_MEM Control Register */ +/*! @{ */ +#define SYS_CTL_AON_MEM_RTC_MASK (0x3U) +#define SYS_CTL_AON_MEM_RTC_SHIFT (0U) +/*! RTC - RTC + */ +#define SYS_CTL_AON_MEM_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_AON_MEM_RTC_SHIFT)) & SYS_CTL_AON_MEM_RTC_MASK) +#define SYS_CTL_AON_MEM_WTC_MASK (0xCU) +#define SYS_CTL_AON_MEM_WTC_SHIFT (2U) +/*! WTC - WTC + */ +#define SYS_CTL_AON_MEM_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_AON_MEM_WTC_SHIFT)) & SYS_CTL_AON_MEM_WTC_MASK) +/*! @} */ + +/*! @name GPT_IN - GPT Pin-in Selection Register */ +/*! @{ */ +#define SYS_CTL_GPT_IN_SEL_MASK (0x1U) +#define SYS_CTL_GPT_IN_SEL_SHIFT (0U) +/*! sel - Select GPT Pin + */ +#define SYS_CTL_GPT_IN_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_GPT_IN_SEL_SHIFT)) & SYS_CTL_GPT_IN_SEL_MASK) +/*! @} */ + +/*! @name CAL - Calibration channel selection register */ +/*! @{ */ +#define SYS_CTL_CAL_RTC_DUTY_MASK (0x1U) +#define SYS_CTL_CAL_RTC_DUTY_SHIFT (0U) +/*! RTC_Duty - RTC Duty + */ +#define SYS_CTL_CAL_RTC_DUTY(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_CAL_RTC_DUTY_SHIFT)) & SYS_CTL_CAL_RTC_DUTY_MASK) +#define SYS_CTL_CAL_RTC_TRIG_MASK (0x2U) +#define SYS_CTL_CAL_RTC_TRIG_SHIFT (1U) +/*! RTC_Trig - RTC Trigger + */ +#define SYS_CTL_CAL_RTC_TRIG(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_CAL_RTC_TRIG_SHIFT)) & SYS_CTL_CAL_RTC_TRIG_MASK) +/*! @} */ + +/*! @name PERI_SW_RST - Peripheral Software Reset register */ +/*! @{ */ +#define SYS_CTL_PERI_SW_RST_WDT_RSTN_EN_MASK (0x1U) +#define SYS_CTL_PERI_SW_RST_WDT_RSTN_EN_SHIFT (0U) +/*! wdt_rstn_en - WDT Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_WDT_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_WDT_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_WDT_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_USB_RSTN_EN_MASK (0x2U) +#define SYS_CTL_PERI_SW_RST_USB_RSTN_EN_SHIFT (1U) +/*! usb_rstn_en - USB Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_USB_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_USB_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_USB_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_SDIO1_RSTN_EN_MASK (0x4U) +#define SYS_CTL_PERI_SW_RST_SDIO1_RSTN_EN_SHIFT (2U) +/*! sdio1_rstn_en - SDIO1 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_SDIO1_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_SDIO1_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_SDIO1_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_SDIO0_RSTN_EN_MASK (0x8U) +#define SYS_CTL_PERI_SW_RST_SDIO0_RSTN_EN_SHIFT (3U) +/*! sdio0_rstn_en - SDIO0 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_SDIO0_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_SDIO0_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_SDIO0_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_GPT3_RSTN_EN_MASK (0x10U) +#define SYS_CTL_PERI_SW_RST_GPT3_RSTN_EN_SHIFT (4U) +/*! gpt3_rstn_en - GPT3 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_GPT3_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_GPT3_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_GPT3_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_GPT2_RSTN_EN_MASK (0x20U) +#define SYS_CTL_PERI_SW_RST_GPT2_RSTN_EN_SHIFT (5U) +/*! gpt2_rstn_en - GPT2 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_GPT2_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_GPT2_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_GPT2_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_GPT1_RSTN_EN_MASK (0x40U) +#define SYS_CTL_PERI_SW_RST_GPT1_RSTN_EN_SHIFT (6U) +/*! gpt1_rstn_en - GPT1 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_GPT1_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_GPT1_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_GPT1_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_GPT0_RSTN_EN_MASK (0x80U) +#define SYS_CTL_PERI_SW_RST_GPT0_RSTN_EN_SHIFT (7U) +/*! gpt0_rstn_en - GPT0 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_GPT0_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_GPT0_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_GPT0_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_SSP2_RSTN_EN_MASK (0x100U) +#define SYS_CTL_PERI_SW_RST_SSP2_RSTN_EN_SHIFT (8U) +/*! ssp2_rstn_en - SSP2 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_SSP2_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_SSP2_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_SSP2_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_SSP1_RSTN_EN_MASK (0x200U) +#define SYS_CTL_PERI_SW_RST_SSP1_RSTN_EN_SHIFT (9U) +/*! ssp1_rstn_en - SSP01 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_SSP1_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_SSP1_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_SSP1_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_SSP0_RSTN_EN_MASK (0x400U) +#define SYS_CTL_PERI_SW_RST_SSP0_RSTN_EN_SHIFT (10U) +/*! ssp0_rstn_en - SSP0 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_SSP0_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_SSP0_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_SSP0_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_I2C2_RSTN_EN_MASK (0x800U) +#define SYS_CTL_PERI_SW_RST_I2C2_RSTN_EN_SHIFT (11U) +/*! i2c2_rstn_en - I2C2 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_I2C2_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_I2C2_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_I2C2_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_I2C1_RSTN_EN_MASK (0x1000U) +#define SYS_CTL_PERI_SW_RST_I2C1_RSTN_EN_SHIFT (12U) +/*! i2c1_rstn_en - I2C1 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_I2C1_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_I2C1_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_I2C1_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_I2C0_RSTN_EN_MASK (0x2000U) +#define SYS_CTL_PERI_SW_RST_I2C0_RSTN_EN_SHIFT (13U) +/*! i2c0_rstn_en - I2C0 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_I2C0_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_I2C0_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_I2C0_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_UART3_RSTN_EN_MASK (0x4000U) +#define SYS_CTL_PERI_SW_RST_UART3_RSTN_EN_SHIFT (14U) +/*! uart3_rstn_en - UART3 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_UART3_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_UART3_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_UART3_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_UART2_RSTN_EN_MASK (0x8000U) +#define SYS_CTL_PERI_SW_RST_UART2_RSTN_EN_SHIFT (15U) +/*! uart2_rstn_en - UART2 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_UART2_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_UART2_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_UART2_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_KEYPAD_RSTN_EN_MASK (0x10000U) +#define SYS_CTL_PERI_SW_RST_KEYPAD_RSTN_EN_SHIFT (16U) +/*! keypad_rstn_en - Keypad Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_KEYPAD_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_KEYPAD_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_KEYPAD_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_UART0_RSTN_EN_MASK (0x20000U) +#define SYS_CTL_PERI_SW_RST_UART0_RSTN_EN_SHIFT (17U) +/*! uart0_rstn_en - UART0 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_UART0_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_UART0_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_UART0_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_FLASH_QSPI_RSTN_EN_MASK (0x40000U) +#define SYS_CTL_PERI_SW_RST_FLASH_QSPI_RSTN_EN_SHIFT (18U) +/*! flash_qspi_rstn_en - Flash QSPI Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_FLASH_QSPI_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_FLASH_QSPI_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_FLASH_QSPI_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_QSPI1_RSTN_EN_MASK (0x80000U) +#define SYS_CTL_PERI_SW_RST_QSPI1_RSTN_EN_SHIFT (19U) +/*! qspi1_rstn_en - QSPI1 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_QSPI1_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_QSPI1_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_QSPI1_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_QSPI0_RSTN_EN_MASK (0x100000U) +#define SYS_CTL_PERI_SW_RST_QSPI0_RSTN_EN_SHIFT (20U) +/*! qspi0_rstn_en - QSPI0 Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_QSPI0_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_QSPI0_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_QSPI0_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_IR_RSTN_EN_MASK (0x200000U) +#define SYS_CTL_PERI_SW_RST_IR_RSTN_EN_SHIFT (21U) +/*! ir_rstn_en - IR Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_IR_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_IR_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_IR_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_PDM_RSTN_EN_MASK (0x400000U) +#define SYS_CTL_PERI_SW_RST_PDM_RSTN_EN_SHIFT (22U) +/*! pdm_rstn_en - PDM Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_PDM_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_PDM_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_PDM_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_USIM_RSTN_EN_MASK (0x800000U) +#define SYS_CTL_PERI_SW_RST_USIM_RSTN_EN_SHIFT (23U) +/*! usim_rstn_en - USIM Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_USIM_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_USIM_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_USIM_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_CB_RSTN_EN_MASK (0x1000000U) +#define SYS_CTL_PERI_SW_RST_CB_RSTN_EN_SHIFT (24U) +/*! cb_rstn_en - CB Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_CB_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_CB_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_CB_RSTN_EN_MASK) +#define SYS_CTL_PERI_SW_RST_GAU_RSTN_EN_MASK (0x4000000U) +#define SYS_CTL_PERI_SW_RST_GAU_RSTN_EN_SHIFT (26U) +/*! gau_rstn_en - GAU Reset_n Enable + */ +#define SYS_CTL_PERI_SW_RST_GAU_RSTN_EN(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_PERI_SW_RST_GAU_RSTN_EN_SHIFT)) & SYS_CTL_PERI_SW_RST_GAU_RSTN_EN_MASK) +/*! @} */ + +/*! @name USB_CTRL - USB Control Register */ +/*! @{ */ +#define SYS_CTL_USB_CTRL_USB_PU_PLL_MASK (0x1U) +#define SYS_CTL_USB_CTRL_USB_PU_PLL_SHIFT (0U) +/*! usb_PU_PLL - USB PU PLL + */ +#define SYS_CTL_USB_CTRL_USB_PU_PLL(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_USB_PU_PLL_SHIFT)) & SYS_CTL_USB_CTRL_USB_PU_PLL_MASK) +#define SYS_CTL_USB_CTRL_USB_PU_OTG_MASK (0x2U) +#define SYS_CTL_USB_CTRL_USB_PU_OTG_SHIFT (1U) +/*! usb_PU_OTG - USB PU OTG + */ +#define SYS_CTL_USB_CTRL_USB_PU_OTG(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_USB_PU_OTG_SHIFT)) & SYS_CTL_USB_CTRL_USB_PU_OTG_MASK) +#define SYS_CTL_USB_CTRL_USB_PU_MASK (0x4U) +#define SYS_CTL_USB_CTRL_USB_PU_SHIFT (2U) +/*! usb_PU - USB PU + */ +#define SYS_CTL_USB_CTRL_USB_PU(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_USB_PU_SHIFT)) & SYS_CTL_USB_CTRL_USB_PU_MASK) +#define SYS_CTL_USB_CTRL_REG_RX_PDFVSSM_MASK (0x8U) +#define SYS_CTL_USB_CTRL_REG_RX_PDFVSSM_SHIFT (3U) +/*! reg_rx_pdfvssm - reg_rx_pdfvssm + */ +#define SYS_CTL_USB_CTRL_REG_RX_PDFVSSM(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_RX_PDFVSSM_SHIFT)) & SYS_CTL_USB_CTRL_REG_RX_PDFVSSM_MASK) +#define SYS_CTL_USB_CTRL_REG_RX_PDLVMC_MASK (0x10U) +#define SYS_CTL_USB_CTRL_REG_RX_PDLVMC_SHIFT (4U) +/*! reg_rx_pdlvmc - reg_rx_pdlvmc + */ +#define SYS_CTL_USB_CTRL_REG_RX_PDLVMC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_RX_PDLVMC_SHIFT)) & SYS_CTL_USB_CTRL_REG_RX_PDLVMC_MASK) +#define SYS_CTL_USB_CTRL_REG_TX_PDFVSSM_MASK (0x20U) +#define SYS_CTL_USB_CTRL_REG_TX_PDFVSSM_SHIFT (5U) +/*! reg_tx_pdfvssm - reg_tx_pdfvssm + */ +#define SYS_CTL_USB_CTRL_REG_TX_PDFVSSM(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_TX_PDFVSSM_SHIFT)) & SYS_CTL_USB_CTRL_REG_TX_PDFVSSM_MASK) +#define SYS_CTL_USB_CTRL_REG_TX_PDLVMC_MASK (0x40U) +#define SYS_CTL_USB_CTRL_REG_TX_PDLVMC_SHIFT (6U) +/*! reg_tx_pdlvmc - reg_tx_pdlvmc + */ +#define SYS_CTL_USB_CTRL_REG_TX_PDLVMC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_TX_PDLVMC_SHIFT)) & SYS_CTL_USB_CTRL_REG_TX_PDLVMC_MASK) +#define SYS_CTL_USB_CTRL_REG_RX_BUF_RTC_MASK (0x180U) +#define SYS_CTL_USB_CTRL_REG_RX_BUF_RTC_SHIFT (7U) +/*! reg_rx_buf_rtc - reg_rx_buf_rtc + */ +#define SYS_CTL_USB_CTRL_REG_RX_BUF_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_RX_BUF_RTC_SHIFT)) & SYS_CTL_USB_CTRL_REG_RX_BUF_RTC_MASK) +#define SYS_CTL_USB_CTRL_REG_RX_BUF_WTC_MASK (0x600U) +#define SYS_CTL_USB_CTRL_REG_RX_BUF_WTC_SHIFT (9U) +/*! reg_rx_buf_wtc - reg_rx_buf_wtc + */ +#define SYS_CTL_USB_CTRL_REG_RX_BUF_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_RX_BUF_WTC_SHIFT)) & SYS_CTL_USB_CTRL_REG_RX_BUF_WTC_MASK) +#define SYS_CTL_USB_CTRL_REG_TX_BUF_RTC_MASK (0x1800U) +#define SYS_CTL_USB_CTRL_REG_TX_BUF_RTC_SHIFT (11U) +/*! reg_tx_buf_rtc - reg_tx_buf_rtc + */ +#define SYS_CTL_USB_CTRL_REG_TX_BUF_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_TX_BUF_RTC_SHIFT)) & SYS_CTL_USB_CTRL_REG_TX_BUF_RTC_MASK) +#define SYS_CTL_USB_CTRL_REG_TX_BUF_WTC_MASK (0x6000U) +#define SYS_CTL_USB_CTRL_REG_TX_BUF_WTC_SHIFT (13U) +/*! reg_tx_buf_wtc - reg_tx_buf_wtc + */ +#define SYS_CTL_USB_CTRL_REG_TX_BUF_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_REG_TX_BUF_WTC_SHIFT)) & SYS_CTL_USB_CTRL_REG_TX_BUF_WTC_MASK) +#define SYS_CTL_USB_CTRL_USB_RESUME_MASK (0x8000U) +#define SYS_CTL_USB_CTRL_USB_RESUME_SHIFT (15U) +/*! usb_resume - USB Resume + */ +#define SYS_CTL_USB_CTRL_USB_RESUME(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_USB_RESUME_SHIFT)) & SYS_CTL_USB_CTRL_USB_RESUME_MASK) +#define SYS_CTL_USB_CTRL_IDDQ_TEST_MASK (0x10000U) +#define SYS_CTL_USB_CTRL_IDDQ_TEST_SHIFT (16U) +/*! iddq_test - iddq Test + */ +#define SYS_CTL_USB_CTRL_IDDQ_TEST(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_IDDQ_TEST_SHIFT)) & SYS_CTL_USB_CTRL_IDDQ_TEST_MASK) +#define SYS_CTL_USB_CTRL_SOFT_PHY_RESET_MASK (0x20000U) +#define SYS_CTL_USB_CTRL_SOFT_PHY_RESET_SHIFT (17U) +/*! soft_phy_reset - Soft PHY Reset + */ +#define SYS_CTL_USB_CTRL_SOFT_PHY_RESET(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_SOFT_PHY_RESET_SHIFT)) & SYS_CTL_USB_CTRL_SOFT_PHY_RESET_MASK) +#define SYS_CTL_USB_CTRL_PHY_RESET_SEL_MASK (0x40000U) +#define SYS_CTL_USB_CTRL_PHY_RESET_SEL_SHIFT (18U) +/*! phy_reset_sel - PHY Reset Select + */ +#define SYS_CTL_USB_CTRL_PHY_RESET_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_PHY_RESET_SEL_SHIFT)) & SYS_CTL_USB_CTRL_PHY_RESET_SEL_MASK) +#define SYS_CTL_USB_CTRL_SOFT_UTMI_SESSEND_MASK (0x80000U) +#define SYS_CTL_USB_CTRL_SOFT_UTMI_SESSEND_SHIFT (19U) +/*! soft_utmi_sessend - Soft UTMI sessend + */ +#define SYS_CTL_USB_CTRL_SOFT_UTMI_SESSEND(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_SOFT_UTMI_SESSEND_SHIFT)) & SYS_CTL_USB_CTRL_SOFT_UTMI_SESSEND_MASK) +#define SYS_CTL_USB_CTRL_SOFT_UTMI_XVALID_MASK (0x100000U) +#define SYS_CTL_USB_CTRL_SOFT_UTMI_XVALID_SHIFT (20U) +/*! soft_utmi_xvalid - Soft UTMI xvalid + */ +#define SYS_CTL_USB_CTRL_SOFT_UTMI_XVALID(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_SOFT_UTMI_XVALID_SHIFT)) & SYS_CTL_USB_CTRL_SOFT_UTMI_XVALID_MASK) +#define SYS_CTL_USB_CTRL_SOFT_UTMI_IDDIG_MASK (0x200000U) +#define SYS_CTL_USB_CTRL_SOFT_UTMI_IDDIG_SHIFT (21U) +/*! soft_utmi_iddig - Soft UTMI iddig + */ +#define SYS_CTL_USB_CTRL_SOFT_UTMI_IDDIG(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_SOFT_UTMI_IDDIG_SHIFT)) & SYS_CTL_USB_CTRL_SOFT_UTMI_IDDIG_MASK) +#define SYS_CTL_USB_CTRL_MAC_CTRL_SEL_MASK (0x400000U) +#define SYS_CTL_USB_CTRL_MAC_CTRL_SEL_SHIFT (22U) +/*! mac_ctrl_sel - MAC Control Select + */ +#define SYS_CTL_USB_CTRL_MAC_CTRL_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_USB_CTRL_MAC_CTRL_SEL_SHIFT)) & SYS_CTL_USB_CTRL_MAC_CTRL_SEL_MASK) +/*! @} */ + +/*! @name MMC_TC - SDIO Timing Control Register */ +/*! @{ */ +#define SYS_CTL_MMC_TC_MMC_RTC_MASK (0x3U) +#define SYS_CTL_MMC_TC_MMC_RTC_SHIFT (0U) +/*! mmc_rtc - MMC RTC + */ +#define SYS_CTL_MMC_TC_MMC_RTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_MMC_TC_MMC_RTC_SHIFT)) & SYS_CTL_MMC_TC_MMC_RTC_MASK) +#define SYS_CTL_MMC_TC_MMC_WTC_MASK (0xCU) +#define SYS_CTL_MMC_TC_MMC_WTC_SHIFT (2U) +/*! mmc_wtc - MMC WTC + */ +#define SYS_CTL_MMC_TC_MMC_WTC(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_MMC_TC_MMC_WTC_SHIFT)) & SYS_CTL_MMC_TC_MMC_WTC_MASK) +/*! @} */ + +/*! @name EXT_FLASH_SEL - External Flash select register */ +/*! @{ */ +#define SYS_CTL_EXT_FLASH_SEL_EXTERNAL_FLASH_SEL_MASK (0x1U) +#define SYS_CTL_EXT_FLASH_SEL_EXTERNAL_FLASH_SEL_SHIFT (0U) +/*! external_flash_sel - Flash Controller Connect + * 0b0..in-package FLASH + * 0b1..external FLASH + */ +#define SYS_CTL_EXT_FLASH_SEL_EXTERNAL_FLASH_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYS_CTL_EXT_FLASH_SEL_EXTERNAL_FLASH_SEL_SHIFT)) & SYS_CTL_EXT_FLASH_SEL_EXTERNAL_FLASH_SEL_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group SYS_CTL_Register_Masks */ + + +/* SYS_CTL - Peripheral instance base addresses */ +/** Peripheral SYS_CTL base address */ +#define SYS_CTL_BASE (0x480B0000u) +/** Peripheral SYS_CTL base pointer */ +#define SYS_CTL ((SYS_CTL_Type *)SYS_CTL_BASE) +/** Array initializer of SYS_CTL peripheral base addresses */ +#define SYS_CTL_BASE_ADDRS { SYS_CTL_BASE } +/** Array initializer of SYS_CTL peripheral base pointers */ +#define SYS_CTL_BASE_PTRS { SYS_CTL } + +/*! + * @} + */ /* end of group SYS_CTL_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- UART Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup UART_Peripheral_Access_Layer UART Peripheral Access Layer + * @{ + */ + +/** UART - Register Layout Typedef */ +typedef struct { + union { /* offset: 0x0 */ + __IO uint32_t DLL; /**< Divisor Latch Low Byte Registers, offset: 0x0 */ + __I uint32_t RBR; /**< Receive Buffer Register, offset: 0x0 */ + __O uint32_t THR; /**< Transmit Holding Register, offset: 0x0 */ + }; + union { /* offset: 0x4 */ + __IO uint32_t DLH; /**< Divisor Latch High Byte Registers, offset: 0x4 */ + __IO uint32_t IER; /**< Interrupt Enable Register, offset: 0x4 */ + }; + union { /* offset: 0x8 */ + __O uint32_t FCR; /**< FIFO Control Register, offset: 0x8 */ + __I uint32_t IIR; /**< Interrupt Identification Register, offset: 0x8 */ + }; + __IO uint32_t LCR; /**< Line Control Register, offset: 0xC */ + __IO uint32_t MCR; /**< Modem Control Register, offset: 0x10 */ + __I uint32_t LSR; /**< Line Status Register, offset: 0x14 */ + __I uint32_t MSR; /**< Modem Status Register, offset: 0x18 */ + __IO uint32_t SCR; /**< Scratchpad Register, offset: 0x1C */ + __IO uint32_t ISR; /**< Infrared Selection Register, offset: 0x20 */ + __I uint32_t RFOR; /**< Receive FIFO Occupancy Register, offset: 0x24 */ + __IO uint32_t ABR; /**< Auto-Baud Control Register, offset: 0x28 */ + __I uint32_t ACR; /**< Auto-Baud Count Register, offset: 0x2C */ +} UART_Type; + +/* ---------------------------------------------------------------------------- + -- UART Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup UART_Register_Masks UART Register Masks + * @{ + */ + +/*! @name DLL - Divisor Latch Low Byte Registers */ +/*! @{ */ +#define UART_DLL_DLL_MASK (0xFFU) +#define UART_DLL_DLL_SHIFT (0U) +/*! DLL - DLL, Low-byte compare value to generate baud rate + */ +#define UART_DLL_DLL(x) (((uint32_t)(((uint32_t)(x)) << UART_DLL_DLL_SHIFT)) & UART_DLL_DLL_MASK) +/*! @} */ + +/*! @name RBR - Receive Buffer Register */ +/*! @{ */ +#define UART_RBR_BYTE_0_MASK (0xFFU) +#define UART_RBR_BYTE_0_SHIFT (0U) +/*! BYTE_0 - Byte 0 + */ +#define UART_RBR_BYTE_0(x) (((uint32_t)(((uint32_t)(x)) << UART_RBR_BYTE_0_SHIFT)) & UART_RBR_BYTE_0_MASK) +#define UART_RBR_BYTE_1_MASK (0xFF00U) +#define UART_RBR_BYTE_1_SHIFT (8U) +/*! BYTE_1 - Byte 1(valid only in 32-bit peripheral bus mode) + */ +#define UART_RBR_BYTE_1(x) (((uint32_t)(((uint32_t)(x)) << UART_RBR_BYTE_1_SHIFT)) & UART_RBR_BYTE_1_MASK) +#define UART_RBR_BYTE_2_MASK (0xFF0000U) +#define UART_RBR_BYTE_2_SHIFT (16U) +/*! BYTE_2 - Byte 2(valid only in 32-bit peripheral bus mode) + */ +#define UART_RBR_BYTE_2(x) (((uint32_t)(((uint32_t)(x)) << UART_RBR_BYTE_2_SHIFT)) & UART_RBR_BYTE_2_MASK) +#define UART_RBR_BYTE_3_MASK (0xFF000000U) +#define UART_RBR_BYTE_3_SHIFT (24U) +/*! BYTE_3 - Byte 3(valid only in 32-bit peripheral bus mode) + */ +#define UART_RBR_BYTE_3(x) (((uint32_t)(((uint32_t)(x)) << UART_RBR_BYTE_3_SHIFT)) & UART_RBR_BYTE_3_MASK) +/*! @} */ + +/*! @name THR - Transmit Holding Register */ +/*! @{ */ +#define UART_THR_BYTE_0_MASK (0xFFU) +#define UART_THR_BYTE_0_SHIFT (0U) +/*! BYTE_0 - Byte 0 + */ +#define UART_THR_BYTE_0(x) (((uint32_t)(((uint32_t)(x)) << UART_THR_BYTE_0_SHIFT)) & UART_THR_BYTE_0_MASK) +#define UART_THR_BYTE_1_MASK (0xFF00U) +#define UART_THR_BYTE_1_SHIFT (8U) +/*! BYTE_1 - Byte 1 (valid only in 32-bit peripheral bus mode) + */ +#define UART_THR_BYTE_1(x) (((uint32_t)(((uint32_t)(x)) << UART_THR_BYTE_1_SHIFT)) & UART_THR_BYTE_1_MASK) +#define UART_THR_BYTE_2_MASK (0xFF0000U) +#define UART_THR_BYTE_2_SHIFT (16U) +/*! BYTE_2 - Byte 2 (valid only in 32-bit peripheral bus mode) + */ +#define UART_THR_BYTE_2(x) (((uint32_t)(((uint32_t)(x)) << UART_THR_BYTE_2_SHIFT)) & UART_THR_BYTE_2_MASK) +#define UART_THR_BYTE_3_MASK (0xFF000000U) +#define UART_THR_BYTE_3_SHIFT (24U) +/*! BYTE_3 - Byte 3 (valid only in 32-bit peripheral bus mode) + */ +#define UART_THR_BYTE_3(x) (((uint32_t)(((uint32_t)(x)) << UART_THR_BYTE_3_SHIFT)) & UART_THR_BYTE_3_MASK) +/*! @} */ + +/*! @name DLH - Divisor Latch High Byte Registers */ +/*! @{ */ +#define UART_DLH_DLH_MASK (0xFFU) +#define UART_DLH_DLH_SHIFT (0U) +/*! DLH - DLH, High-byte compare value to generate baud rate + */ +#define UART_DLH_DLH(x) (((uint32_t)(((uint32_t)(x)) << UART_DLH_DLH_SHIFT)) & UART_DLH_DLH_MASK) +/*! @} */ + +/*! @name IER - Interrupt Enable Register */ +/*! @{ */ +#define UART_IER_RAVIE_MASK (0x1U) +#define UART_IER_RAVIE_SHIFT (0U) +/*! RAVIE - Receiver Data Available Interrupt Enable (Source IIR[IID]) + * 0b0..Receiver data availble(trigger threshold reached) interrupt disabled + * 0b1..Receiver data availble(trigger threshold reached) interrupt enabled + */ +#define UART_IER_RAVIE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_RAVIE_SHIFT)) & UART_IER_RAVIE_MASK) +#define UART_IER_TIE_MASK (0x2U) +#define UART_IER_TIE_SHIFT (1U) +/*! TIE - Transmit Data Request Interrupt Enable(Source IIR[IID]) + * 0b0..Transmit FIFO data request interrupt disabled + * 0b1..Transmit FIFO data request interrupt enabled + */ +#define UART_IER_TIE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_TIE_SHIFT)) & UART_IER_TIE_MASK) +#define UART_IER_RLSE_MASK (0x4U) +#define UART_IER_RLSE_SHIFT (2U) +/*! RLSE - Receiver Line Status Interrupt Enable (Source IIR[IID]) + * 0b0..Receiver line status interrupt disabled + * 0b1..Receiver line status interrupt enabled + */ +#define UART_IER_RLSE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_RLSE_SHIFT)) & UART_IER_RLSE_MASK) +#define UART_IER_MIE_MASK (0x8U) +#define UART_IER_MIE_SHIFT (3U) +/*! MIE - Modem Interrupt Enable (Source IIR[IID]) + * 0b0..Modem status interrupt disabled + * 0b1..Modem status interrupt enabled + */ +#define UART_IER_MIE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_MIE_SHIFT)) & UART_IER_MIE_MASK) +#define UART_IER_RTOIE_MASK (0x10U) +#define UART_IER_RTOIE_SHIFT (4U) +/*! RTOIE - Receiver Time-out Interrupt Enable (Source IIR[TOD]) + * 0b0..Receiver data time-out interrupt disabled + * 0b1..Receiver data time-out interrupt enabled + */ +#define UART_IER_RTOIE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_RTOIE_SHIFT)) & UART_IER_RTOIE_MASK) +#define UART_IER_NRZE_MASK (0x20U) +#define UART_IER_NRZE_SHIFT (5U) +/*! NRZE - NRZ Coding Enable + * 0b0..NRZ coding disabled + * 0b1..NRZ coding enabled + */ +#define UART_IER_NRZE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_NRZE_SHIFT)) & UART_IER_NRZE_MASK) +#define UART_IER_UUE_MASK (0x40U) +#define UART_IER_UUE_SHIFT (6U) +/*! UUE - UART Unit Enable + * 0b0..the unit is disabled + * 0b1..the unit is enabled + */ +#define UART_IER_UUE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_UUE_SHIFT)) & UART_IER_UUE_MASK) +#define UART_IER_DMAE_MASK (0x80U) +#define UART_IER_DMAE_SHIFT (7U) +/*! DMAE - DMA Requests Enable + * 0b0..DMA requests are disabled + * 0b1..DMA requests are enabled + */ +#define UART_IER_DMAE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_DMAE_SHIFT)) & UART_IER_DMAE_MASK) +#define UART_IER_HSE_MASK (0x100U) +#define UART_IER_HSE_SHIFT (8U) +/*! HSE - High Speed UART Enable (HSE) + */ +#define UART_IER_HSE(x) (((uint32_t)(((uint32_t)(x)) << UART_IER_HSE_SHIFT)) & UART_IER_HSE_MASK) +/*! @} */ + +/*! @name FCR - FIFO Control Register */ +/*! @{ */ +#define UART_FCR_TRFIFOE_MASK (0x1U) +#define UART_FCR_TRFIFOE_SHIFT (0U) +/*! TRFIFOE - Transmit and Receive FIFO Enable + * 0b0..FIFOs are disabled + * 0b1..FIFOs are enabled + */ +#define UART_FCR_TRFIFOE(x) (((uint32_t)(((uint32_t)(x)) << UART_FCR_TRFIFOE_SHIFT)) & UART_FCR_TRFIFOE_MASK) +#define UART_FCR_RESETRF_MASK (0x2U) +#define UART_FCR_RESETRF_SHIFT (1U) +/*! RESETRF - Reset Receive FIFO + * 0b0..Writing 0 has no effect + * 0b1..The receive FIFO is cleared + */ +#define UART_FCR_RESETRF(x) (((uint32_t)(((uint32_t)(x)) << UART_FCR_RESETRF_SHIFT)) & UART_FCR_RESETRF_MASK) +#define UART_FCR_RESETTF_MASK (0x4U) +#define UART_FCR_RESETTF_SHIFT (2U) +/*! RESETTF - Reset Transmit FIFO + * 0b0..Writing 0 has no effect + * 0b1..The transmit FIFO is cleared + */ +#define UART_FCR_RESETTF(x) (((uint32_t)(((uint32_t)(x)) << UART_FCR_RESETTF_SHIFT)) & UART_FCR_RESETTF_MASK) +#define UART_FCR_TIL_MASK (0x8U) +#define UART_FCR_TIL_SHIFT (3U) +/*! TIL - Transmitter Interrupt Level + * 0b0..Interrupt/DMA request when FIFO is half empty + * 0b1..Interrupt/DMA request when FIFO is empty + */ +#define UART_FCR_TIL(x) (((uint32_t)(((uint32_t)(x)) << UART_FCR_TIL_SHIFT)) & UART_FCR_TIL_MASK) +#define UART_FCR_BUS_MASK (0x20U) +#define UART_FCR_BUS_SHIFT (5U) +/*! BUS - 32-Bit Peripheral Bus + * 0b0..8-bit peripheral bus + * 0b1..32-bit peripheral bus, Transmit and Receive FIFO need to be enabled in this mode + */ +#define UART_FCR_BUS(x) (((uint32_t)(((uint32_t)(x)) << UART_FCR_BUS_SHIFT)) & UART_FCR_BUS_MASK) +#define UART_FCR_ITL_MASK (0xC0U) +#define UART_FCR_ITL_SHIFT (6U) +/*! ITL - Interrupt Trigger Level + * 0b00..1 byte or more in FIFO causes interrupt (Not valid in DMA mode) + * 0b01..8 bytes or more in FIFO cause interrupt and DMA request + * 0b10..16 bytes or more in FIFO causes interrupt and DMA request + * 0b11..32 bytes or more in FIFO causes interrupt and DMA request + */ +#define UART_FCR_ITL(x) (((uint32_t)(((uint32_t)(x)) << UART_FCR_ITL_SHIFT)) & UART_FCR_ITL_MASK) +/*! @} */ + +/*! @name IIR - Interrupt Identification Register */ +/*! @{ */ +#define UART_IIR_NIP_MASK (0x1U) +#define UART_IIR_NIP_SHIFT (0U) +/*! NIP - Interrupt is pending + * 0b0..Interrupt is pending (active low) + * 0b1..No interrupt is pending + */ +#define UART_IIR_NIP(x) (((uint32_t)(((uint32_t)(x)) << UART_IIR_NIP_SHIFT)) & UART_IIR_NIP_MASK) +#define UART_IIR_IID10_MASK (0x6U) +#define UART_IIR_IID10_SHIFT (1U) +/*! IID10 - Interrupt Source Encoded + * 0b00..Modern Status (CTS) + * 0b01..Transmit FIFO request data + * 0b10..Receive data available + * 0b11..Receive error (overrun) + */ +#define UART_IIR_IID10(x) (((uint32_t)(((uint32_t)(x)) << UART_IIR_IID10_SHIFT)) & UART_IIR_IID10_MASK) +#define UART_IIR_TOD_MASK (0x8U) +#define UART_IIR_TOD_SHIFT (3U) +/*! TOD - Timeout Detected + * 0b0..No timeout interrupt is pending + * 0b1..Timeout interrupt is pending (FIFO mode only) + */ +#define UART_IIR_TOD(x) (((uint32_t)(((uint32_t)(x)) << UART_IIR_TOD_SHIFT)) & UART_IIR_TOD_MASK) +#define UART_IIR_ABL_MASK (0x10U) +#define UART_IIR_ABL_SHIFT (4U) +/*! ABL - Auto-baud Lock + * 0b0..Auto-baud circuitry has not programmed Divisor Latch registers (DLR) + * 0b1..Divisor Latch registers (DLR) programmed by auto-baud circuitry + */ +#define UART_IIR_ABL(x) (((uint32_t)(((uint32_t)(x)) << UART_IIR_ABL_SHIFT)) & UART_IIR_ABL_MASK) +#define UART_IIR_EOC_MASK (0x20U) +#define UART_IIR_EOC_SHIFT (5U) +/*! EOC - DMA End of Descriptor Chain + * 0b0..DMA has not signaled the end of its programmed Descriptor Chain + * 0b1..DMA has signaled the end of its programmed Descriptor Chain + */ +#define UART_IIR_EOC(x) (((uint32_t)(((uint32_t)(x)) << UART_IIR_EOC_SHIFT)) & UART_IIR_EOC_MASK) +#define UART_IIR_FIFOES10_MASK (0xC0U) +#define UART_IIR_FIFOES10_SHIFT (6U) +/*! FIFOES10 - FIFO Mode Enable Status + * 0b00..Non-FIFO mode is selected + * 0b01..reserved + * 0b10..reserved + * 0b11..FIFO mode is selected + */ +#define UART_IIR_FIFOES10(x) (((uint32_t)(((uint32_t)(x)) << UART_IIR_FIFOES10_SHIFT)) & UART_IIR_FIFOES10_MASK) +/*! @} */ + +/*! @name LCR - Line Control Register */ +/*! @{ */ +#define UART_LCR_WLS10_MASK (0x3U) +#define UART_LCR_WLS10_SHIFT (0U) +/*! WLS10 - World Length Select + * 0b00..5-bit character + * 0b01..6-bit character + * 0b10..7-bit character + * 0b11..8-bit character + */ +#define UART_LCR_WLS10(x) (((uint32_t)(((uint32_t)(x)) << UART_LCR_WLS10_SHIFT)) & UART_LCR_WLS10_MASK) +#define UART_LCR_STB_MASK (0x4U) +#define UART_LCR_STB_SHIFT (2U) +/*! STB - Stop Bits + * 0b0..1 stop bit + * 0b1..2 stop bit + */ +#define UART_LCR_STB(x) (((uint32_t)(((uint32_t)(x)) << UART_LCR_STB_SHIFT)) & UART_LCR_STB_MASK) +#define UART_LCR_PEN_MASK (0x8U) +#define UART_LCR_PEN_SHIFT (3U) +/*! PEN - Parity Enable + * 0b0..No parity + * 0b1.. + */ +#define UART_LCR_PEN(x) (((uint32_t)(((uint32_t)(x)) << UART_LCR_PEN_SHIFT)) & UART_LCR_PEN_MASK) +#define UART_LCR_EPS_MASK (0x10U) +#define UART_LCR_EPS_SHIFT (4U) +/*! EPS - Even Parity Select + * 0b0..Sends or checks for odd parity + * 0b1..Sends or checks for even parity + */ +#define UART_LCR_EPS(x) (((uint32_t)(((uint32_t)(x)) << UART_LCR_EPS_SHIFT)) & UART_LCR_EPS_MASK) +#define UART_LCR_STKYP_MASK (0x20U) +#define UART_LCR_STKYP_SHIFT (5U) +/*! STKYP - Sticky Parity + * 0b0..no effect on parity bit + * 0b1..forces parity bit to be opposite of EPS bit value + */ +#define UART_LCR_STKYP(x) (((uint32_t)(((uint32_t)(x)) << UART_LCR_STKYP_SHIFT)) & UART_LCR_STKYP_MASK) +#define UART_LCR_SB_MASK (0x40U) +#define UART_LCR_SB_SHIFT (6U) +/*! SB - Set Break + * 0b0..no effect on TXD output + * 0b1..forces TXD output to 0 + */ +#define UART_LCR_SB(x) (((uint32_t)(((uint32_t)(x)) << UART_LCR_SB_SHIFT)) & UART_LCR_SB_MASK) +#define UART_LCR_DLAB_MASK (0x80U) +#define UART_LCR_DLAB_SHIFT (7U) +/*! DLAB - Divisor Latch Access + * 0b0..access Transmit Holding Register, Receive Buffer Register, and Interrupt Enable Register + * 0b1..access Divisor Latch Registers + */ +#define UART_LCR_DLAB(x) (((uint32_t)(((uint32_t)(x)) << UART_LCR_DLAB_SHIFT)) & UART_LCR_DLAB_MASK) +/*! @} */ + +/*! @name MCR - Modem Control Register */ +/*! @{ */ +#define UART_MCR_DTR_MASK (0x1U) +#define UART_MCR_DTR_SHIFT (0U) +/*! DTR - Data Terminal Ready + * 0b0..nDTR pin is 1 + * 0b1..nDTR pin is 0 + */ +#define UART_MCR_DTR(x) (((uint32_t)(((uint32_t)(x)) << UART_MCR_DTR_SHIFT)) & UART_MCR_DTR_MASK) +#define UART_MCR_RTS_MASK (0x2U) +#define UART_MCR_RTS_SHIFT (1U) +/*! RTS - Request to Send + * 0b0..non-auto-flow mode + * 0b1..auto-flow mode + */ +#define UART_MCR_RTS(x) (((uint32_t)(((uint32_t)(x)) << UART_MCR_RTS_SHIFT)) & UART_MCR_RTS_MASK) +#define UART_MCR_OUT1_MASK (0x4U) +#define UART_MCR_OUT1_SHIFT (2U) +/*! OUT1 - Test Bit + * 0b0..Force MSR[RI] forced to 0 + * 0b1..Force MSR[RI] forced to 1 + */ +#define UART_MCR_OUT1(x) (((uint32_t)(((uint32_t)(x)) << UART_MCR_OUT1_SHIFT)) & UART_MCR_OUT1_MASK) +#define UART_MCR_OUT2_MASK (0x8U) +#define UART_MCR_OUT2_SHIFT (3U) +/*! OUT2 - OUT2 Signal Control + * 0b0..UART interrupt is disabled when loop is clear; otherwise MSR[DCD] forced to 0 + * 0b1..UART interrupt is enabled when loop is clear; otherwise 1 = MSR[DCD] forced to 1 + */ +#define UART_MCR_OUT2(x) (((uint32_t)(((uint32_t)(x)) << UART_MCR_OUT2_SHIFT)) & UART_MCR_OUT2_MASK) +#define UART_MCR_LOOP_MASK (0x10U) +#define UART_MCR_LOOP_SHIFT (4U) +/*! LOOP - Loopback Mode + * 0b0..normal UART operation + * 0b1..loopback mode UART operation + */ +#define UART_MCR_LOOP(x) (((uint32_t)(((uint32_t)(x)) << UART_MCR_LOOP_SHIFT)) & UART_MCR_LOOP_MASK) +#define UART_MCR_AFE_MASK (0x20U) +#define UART_MCR_AFE_SHIFT (5U) +/*! AFE - Auto-flow Control Enable + * 0b0..auto-RTS and auto-CTS are disabled + * 0b1..auto-RTS and auto-CTS are enabled + */ +#define UART_MCR_AFE(x) (((uint32_t)(((uint32_t)(x)) << UART_MCR_AFE_SHIFT)) & UART_MCR_AFE_MASK) +/*! @} */ + +/*! @name LSR - Line Status Register */ +/*! @{ */ +#define UART_LSR_DR_MASK (0x1U) +#define UART_LSR_DR_SHIFT (0U) +/*! DR - Data Ready + * 0b0..No data has been received + * 0b1..Data is available in RBR or the FIFO + */ +#define UART_LSR_DR(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_DR_SHIFT)) & UART_LSR_DR_MASK) +#define UART_LSR_OE_MASK (0x2U) +#define UART_LSR_OE_SHIFT (1U) +/*! OE - Overrun Error + * 0b0..No data has been lost + * 0b1..Receive data has been lost + */ +#define UART_LSR_OE(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_OE_SHIFT)) & UART_LSR_OE_MASK) +#define UART_LSR_PE_MASK (0x4U) +#define UART_LSR_PE_SHIFT (2U) +/*! PE - Parity Error + * 0b0..No parity error + * 0b1..Parity error has been detected + */ +#define UART_LSR_PE(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_PE_SHIFT)) & UART_LSR_PE_MASK) +#define UART_LSR_FE_MASK (0x8U) +#define UART_LSR_FE_SHIFT (3U) +/*! FE - Framing Error + * 0b0..No Framing error + * 0b1..Invalid stop bit has been detected + */ +#define UART_LSR_FE(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_FE_SHIFT)) & UART_LSR_FE_MASK) +#define UART_LSR_BI_MASK (0x10U) +#define UART_LSR_BI_SHIFT (4U) +/*! BI - Break Interrupt + * 0b0..No break signal has been received + * 0b1..Break signal received + */ +#define UART_LSR_BI(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_BI_SHIFT)) & UART_LSR_BI_MASK) +#define UART_LSR_TDRQ_MASK (0x20U) +#define UART_LSR_TDRQ_SHIFT (5U) +/*! TDRQ - Transmit Data Request + * 0b0..There is data in the holding register or FIFO waiting to be shifted out + * 0b1..transmit FIFO has half or less then half data + */ +#define UART_LSR_TDRQ(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_TDRQ_SHIFT)) & UART_LSR_TDRQ_MASK) +#define UART_LSR_TEMT_MASK (0x40U) +#define UART_LSR_TEMT_SHIFT (6U) +/*! TEMT - Transmitter Empty + * 0b0..There is data in the transmit shift register, the Transmit Holding Register, or the FIFO + * 0b1..All the data in the transmitter has been shifted out + */ +#define UART_LSR_TEMT(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_TEMT_SHIFT)) & UART_LSR_TEMT_MASK) +#define UART_LSR_FIFOE_MASK (0x80U) +#define UART_LSR_FIFOE_SHIFT (7U) +/*! FIFOE - FIFO Error Status + * 0b0..No FIFO or no errors in receive FIFO + * 0b1..At least one character in receive FIFO has errors + */ +#define UART_LSR_FIFOE(x) (((uint32_t)(((uint32_t)(x)) << UART_LSR_FIFOE_SHIFT)) & UART_LSR_FIFOE_MASK) +/*! @} */ + +/*! @name MSR - Modem Status Register */ +/*! @{ */ +#define UART_MSR_DCTS_MASK (0x1U) +#define UART_MSR_DCTS_SHIFT (0U) +/*! DCTS - Delta Clear to Send + * 0b0..No change in nCTS pin since last read of MSR + * 0b1..nCTS pin has changed state + */ +#define UART_MSR_DCTS(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_DCTS_SHIFT)) & UART_MSR_DCTS_MASK) +#define UART_MSR_DDSR_MASK (0x2U) +#define UART_MSR_DDSR_SHIFT (1U) +/*! DDSR - Delta Data Set Ready + * 0b0..No change in nDSR pin since last read of MSR + * 0b1..nDSR pin has changed state + */ +#define UART_MSR_DDSR(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_DDSR_SHIFT)) & UART_MSR_DDSR_MASK) +#define UART_MSR_TERI_MASK (0x4U) +#define UART_MSR_TERI_SHIFT (2U) +/*! TERI - Trailing Edge Ring Indicator + * 0b0..nRI pin has not changed from 0 to 1 since last read of MSR + * 0b1..nRI has changed state + */ +#define UART_MSR_TERI(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_TERI_SHIFT)) & UART_MSR_TERI_MASK) +#define UART_MSR_DDCD_MASK (0x8U) +#define UART_MSR_DDCD_SHIFT (3U) +/*! DDCD - Delta Data Carrier Detect + * 0b0..No change in nDCD pin since last read of MSR + * 0b1..nDCD pin has changed state + */ +#define UART_MSR_DDCD(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_DDCD_SHIFT)) & UART_MSR_DDCD_MASK) +#define UART_MSR_CTS_MASK (0x10U) +#define UART_MSR_CTS_SHIFT (4U) +/*! CTS - Clear to Send + * 0b0..nCTS pin is 1 + * 0b1..nCTS pin is 0 + */ +#define UART_MSR_CTS(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_CTS_SHIFT)) & UART_MSR_CTS_MASK) +#define UART_MSR_DSR_MASK (0x20U) +#define UART_MSR_DSR_SHIFT (5U) +/*! DSR - Data Set Ready + * 0b0..nDSR pin is 1 + * 0b1..nDSR pin is 0 + */ +#define UART_MSR_DSR(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_DSR_SHIFT)) & UART_MSR_DSR_MASK) +#define UART_MSR_RI_MASK (0x40U) +#define UART_MSR_RI_SHIFT (6U) +/*! RI - Ring Indicator + * 0b0..nRI pin is 1 + * 0b1..nRI pin is 0 + */ +#define UART_MSR_RI(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_RI_SHIFT)) & UART_MSR_RI_MASK) +#define UART_MSR_DCD_MASK (0x80U) +#define UART_MSR_DCD_SHIFT (7U) +/*! DCD - Data Carrier Detect + * 0b0..nDCD pin is 1 + * 0b1..nDCD pin is 0 + */ +#define UART_MSR_DCD(x) (((uint32_t)(((uint32_t)(x)) << UART_MSR_DCD_SHIFT)) & UART_MSR_DCD_MASK) +/*! @} */ + +/*! @name SCR - Scratchpad Register */ +/*! @{ */ +#define UART_SCR_SCRATCHPAD_MASK (0xFFU) +#define UART_SCR_SCRATCHPAD_SHIFT (0U) +/*! SCRATCHPAD - No effect on UART functions + */ +#define UART_SCR_SCRATCHPAD(x) (((uint32_t)(((uint32_t)(x)) << UART_SCR_SCRATCHPAD_SHIFT)) & UART_SCR_SCRATCHPAD_MASK) +/*! @} */ + +/*! @name ISR - Infrared Selection Register */ +/*! @{ */ +#define UART_ISR_XMITIR_MASK (0x1U) +#define UART_ISR_XMITIR_SHIFT (0U) +/*! XMITIR - Transmitter SIR Enable + * 0b0..Transmitter is in UART mode + * 0b1..Transmitter is in infrared mode + */ +#define UART_ISR_XMITIR(x) (((uint32_t)(((uint32_t)(x)) << UART_ISR_XMITIR_SHIFT)) & UART_ISR_XMITIR_MASK) +#define UART_ISR_RCVEIR_MASK (0x2U) +#define UART_ISR_RCVEIR_SHIFT (1U) +/*! RCVEIR - Receiver SIR Enable + * 0b0..Receiver is in UART mode + * 0b1..Receiver is in infrared mode + */ +#define UART_ISR_RCVEIR(x) (((uint32_t)(((uint32_t)(x)) << UART_ISR_RCVEIR_SHIFT)) & UART_ISR_RCVEIR_MASK) +#define UART_ISR_XMODE_MASK (0x4U) +#define UART_ISR_XMODE_SHIFT (2U) +/*! XMODE - Transmit Pulse Width Select + * 0b0..Transmit pulse width is 3/16 of a bit time wide + * 0b1..Transmit pulse width is 1.6 ms + */ +#define UART_ISR_XMODE(x) (((uint32_t)(((uint32_t)(x)) << UART_ISR_XMODE_SHIFT)) & UART_ISR_XMODE_MASK) +#define UART_ISR_TXPL_MASK (0x8U) +#define UART_ISR_TXPL_SHIFT (3U) +/*! TXPL - Transmit Data Polarity + * 0b0..SIR encoder generates a positive pulse for a data bit of 0 + * 0b1..SIR encoder generates a negetive pulse for a data bit of 0 + */ +#define UART_ISR_TXPL(x) (((uint32_t)(((uint32_t)(x)) << UART_ISR_TXPL_SHIFT)) & UART_ISR_TXPL_MASK) +#define UART_ISR_RXPL_MASK (0x10U) +#define UART_ISR_RXPL_SHIFT (4U) +/*! RXPL - Receive Data Polarity + * 0b0..SIR decoder takes positive pulses as 0s + * 0b1..SIR decoder takes negative pulses as 0s + */ +#define UART_ISR_RXPL(x) (((uint32_t)(((uint32_t)(x)) << UART_ISR_RXPL_SHIFT)) & UART_ISR_RXPL_MASK) +/*! @} */ + +/*! @name RFOR - Receive FIFO Occupancy Register */ +/*! @{ */ +#define UART_RFOR_BYTE_COUNT_MASK (0x3FU) +#define UART_RFOR_BYTE_COUNT_SHIFT (0U) +/*! BYTE_COUNT - Number of bytes (0-63) remaining in receive FIFO + */ +#define UART_RFOR_BYTE_COUNT(x) (((uint32_t)(((uint32_t)(x)) << UART_RFOR_BYTE_COUNT_SHIFT)) & UART_RFOR_BYTE_COUNT_MASK) +/*! @} */ + +/*! @name ABR - Auto-Baud Control Register */ +/*! @{ */ +#define UART_ABR_ABE_MASK (0x1U) +#define UART_ABR_ABE_SHIFT (0U) +/*! ABE - Auto-baud enable + * 0b0..auto-baud disabled + * 0b1..auto-baud enabled + */ +#define UART_ABR_ABE(x) (((uint32_t)(((uint32_t)(x)) << UART_ABR_ABE_SHIFT)) & UART_ABR_ABE_MASK) +#define UART_ABR_ABLIE_MASK (0x2U) +#define UART_ABR_ABLIE_SHIFT (1U) +/*! ABLIE - Auto-baud-lock interrupt enable + * 0b0..auto-baud-lock interrupt is disabled + * 0b1..auto-baud-lock interrupt is enabled + */ +#define UART_ABR_ABLIE(x) (((uint32_t)(((uint32_t)(x)) << UART_ABR_ABLIE_SHIFT)) & UART_ABR_ABLIE_MASK) +#define UART_ABR_ABUP_MASK (0x4U) +#define UART_ABR_ABUP_SHIFT (2U) +/*! ABUP - Auto-baud programmer select + * 0b0..CPU programs Divisor Latch register + * 0b1..UART programs Divisor Latch register + */ +#define UART_ABR_ABUP(x) (((uint32_t)(((uint32_t)(x)) << UART_ABR_ABUP_SHIFT)) & UART_ABR_ABUP_MASK) +#define UART_ABR_ABT_MASK (0x8U) +#define UART_ABR_ABT_SHIFT (3U) +/*! ABT - Auto-Baud table + * 0b0..Formula used to calculate baud rates + * 0b1..Table used to calculate baud rates, which limits UART to choosing common baud rates + */ +#define UART_ABR_ABT(x) (((uint32_t)(((uint32_t)(x)) << UART_ABR_ABT_SHIFT)) & UART_ABR_ABT_MASK) +/*! @} */ + +/*! @name ACR - Auto-Baud Count Register */ +/*! @{ */ +#define UART_ACR_COUNT_VALUE_MASK (0xFFFFU) +#define UART_ACR_COUNT_VALUE_SHIFT (0U) +/*! COUNT_VALUE - Number of 14.857 MHz clock cycles within a Start-Bit pulse + */ +#define UART_ACR_COUNT_VALUE(x) (((uint32_t)(((uint32_t)(x)) << UART_ACR_COUNT_VALUE_SHIFT)) & UART_ACR_COUNT_VALUE_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group UART_Register_Masks */ + + +/* UART - Peripheral instance base addresses */ +/** Peripheral UART0 base address */ +#define UART0_BASE (0x46040000u) +/** Peripheral UART0 base pointer */ +#define UART0 ((UART_Type *)UART0_BASE) +/** Peripheral UART1 base address */ +#define UART1_BASE (0x460C0000u) +/** Peripheral UART1 base pointer */ +#define UART1 ((UART_Type *)UART1_BASE) +/** Peripheral UART2 base address */ +#define UART2_BASE (0x48020000u) +/** Peripheral UART2 base pointer */ +#define UART2 ((UART_Type *)UART2_BASE) +/** Array initializer of UART peripheral base addresses */ +#define UART_BASE_ADDRS { UART0_BASE, UART1_BASE, UART2_BASE } +/** Array initializer of UART peripheral base pointers */ +#define UART_BASE_PTRS { UART0, UART1, UART2 } +/** Interrupt vectors for the UART peripheral type */ +#define UART_IRQS { UART0_IRQn, UART1_IRQn, UART2_IRQn } + +/*! + * @} + */ /* end of group UART_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- USBC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup USBC_Peripheral_Access_Layer USBC Peripheral Access Layer + * @{ + */ + +/** USBC - Register Layout Typedef */ +typedef struct { + __I uint32_t ID; /**< , offset: 0x0 */ + __I uint32_t HWGENERAL; /**< , offset: 0x4 */ + __I uint32_t HWHOST; /**< , offset: 0x8 */ + __I uint32_t HWDEVICE; /**< , offset: 0xC */ + __I uint32_t HWTXBUF; /**< , offset: 0x10 */ + __I uint32_t HWRXBUF; /**< , offset: 0x14 */ + __IO uint32_t HWTXBUF0; /**< , offset: 0x18 */ + __IO uint32_t HWTXBUF1; /**< , offset: 0x1C */ + uint8_t RESERVED_0[96]; + __IO uint32_t GPTIMER0LD; /**< , offset: 0x80 */ + __IO uint32_t GPTIMER0CTRL; /**< , offset: 0x84 */ + __IO uint32_t GPTTIMER1LD; /**< , offset: 0x88 */ + __IO uint32_t GPTIMER1CTRL; /**< , offset: 0x8C */ + __IO uint32_t SBUSCFG; /**< , offset: 0x90 */ + uint8_t RESERVED_1[108]; + __I uint32_t CAPLENGTH; /**< , offset: 0x100 */ + __I uint32_t HCSPARAMS; /**< , offset: 0x104 */ + __I uint32_t HCCPARAMS; /**< , offset: 0x108 */ + uint8_t RESERVED_2[20]; + __I uint32_t DCIVERSION; /**< , offset: 0x120 */ + __I uint32_t DCCPARAMS; /**< , offset: 0x124 */ + __IO uint32_t DEVLPMCSR; /**< , offset: 0x128 */ + uint8_t RESERVED_3[20]; + __IO uint32_t USBCMD; /**< , offset: 0x140 */ + __IO uint32_t USBSTS; /**< , offset: 0x144 */ + __IO uint32_t USBINTR; /**< , offset: 0x148 */ + __IO uint32_t FRINDEX; /**< , offset: 0x14C */ + uint8_t RESERVED_4[4]; + __IO uint32_t PERIODICLISTBASE; /**< , offset: 0x154 */ + __IO uint32_t ASYNCLISTADDR; /**< , offset: 0x158 */ + __IO uint32_t TTCTRL; /**< , offset: 0x15C */ + __IO uint32_t BURSTSIZE; /**< , offset: 0x160 */ + __IO uint32_t TXFILLTUNING; /**< , offset: 0x164 */ + __IO uint32_t TXTTFILLTUNING; /**< , offset: 0x168 */ + __IO uint32_t IC_USB; /**< , offset: 0x16C */ + __IO uint32_t ULPI_VIEWPORT; /**< , offset: 0x170 */ + uint8_t RESERVED_5[4]; + __IO uint32_t ENDPTNAK; /**< , offset: 0x178 */ + __IO uint32_t ENDPTNAKEN; /**< , offset: 0x17C */ + uint8_t RESERVED_6[4]; + __IO uint32_t PORTSC1; /**< , offset: 0x184 */ + __IO uint32_t PORTSC2; /**< , offset: 0x188 */ + __IO uint32_t PORTSC3; /**< , offset: 0x18C */ + __IO uint32_t PORTSC4; /**< , offset: 0x190 */ + __IO uint32_t PORTSC5; /**< , offset: 0x194 */ + __IO uint32_t PORTSC6; /**< , offset: 0x198 */ + __IO uint32_t PORTSC7; /**< , offset: 0x19C */ + __IO uint32_t PORTSC8; /**< , offset: 0x1A0 */ + __IO uint32_t OTGSC; /**< , offset: 0x1A4 */ + __IO uint32_t USBMODE; /**< , offset: 0x1A8 */ + __I uint32_t ENDPTSETUPSTAT; /**< , offset: 0x1AC */ + __I uint32_t ENDPTPRIME; /**< , offset: 0x1B0 */ + __I uint32_t ENDPTFLUSH; /**< , offset: 0x1B4 */ + __I uint32_t ENDPTSTAT; /**< , offset: 0x1B8 */ + __I uint32_t ENDPTCOMPLETE; /**< , offset: 0x1BC */ + __IO uint32_t ENDPTCTRL0; /**< , offset: 0x1C0 */ + __IO uint32_t ENDPTCTRL1; /**< , offset: 0x1C4 */ + __IO uint32_t ENDPTCTRL2; /**< , offset: 0x1C8 */ + __IO uint32_t ENDPTCTRL3; /**< , offset: 0x1CC */ + __IO uint32_t ENDPTCTRL4; /**< , offset: 0x1D0 */ + __IO uint32_t ENDPTCTRL5; /**< , offset: 0x1D4 */ + __IO uint32_t ENDPTCTRL6; /**< , offset: 0x1D8 */ + __IO uint32_t ENDPTCTRL7; /**< , offset: 0x1DC */ + __IO uint32_t ENDPTCTRL8; /**< , offset: 0x1E0 */ + __IO uint32_t ENDPTCTRL9; /**< , offset: 0x1E4 */ + __IO uint32_t ENDPTCTRL10; /**< , offset: 0x1E8 */ + __IO uint32_t ENDPTCTRL11; /**< , offset: 0x1EC */ + __IO uint32_t ENDPTCTRL12; /**< , offset: 0x1F0 */ + __IO uint32_t ENDPTCTRL13; /**< , offset: 0x1F4 */ + __IO uint32_t ENDPTCTRL14; /**< , offset: 0x1F8 */ + __IO uint32_t ENDPTCTRL15; /**< , offset: 0x1FC */ + __I uint32_t PHY_ID; /**< , offset: 0x200 */ + __IO uint32_t PLL_CONTROL_0; /**< , offset: 0x204 */ + __IO uint32_t PLL_CONTROL_1; /**< , offset: 0x208 */ + __I uint32_t RESERVED_ADDR3; /**< , offset: 0x20C */ + __IO uint32_t TX_CHANNEL_CONTRL_0; /**< , offset: 0x210 */ + __IO uint32_t TX_CHANNEL_CONTRL_1; /**< , offset: 0x214 */ + __IO uint32_t TX_CHANNEL_CONTRL_2; /**< , offset: 0x218 */ + __I uint32_t RESERVED_ADDR7; /**< , offset: 0x21C */ + __IO uint32_t RX_CHANNEL_CONTRL_0; /**< , offset: 0x220 */ + __IO uint32_t RX_CHANNEL_CONTRL_1; /**< , offset: 0x224 */ + __IO uint32_t RX_CHANNEL_CONTRL_2; /**< , offset: 0x228 */ + uint8_t RESERVED_7[4]; + __IO uint32_t ANA_CONTRL_0; /**< , offset: 0x230 */ + __IO uint32_t ANA_CONTRL_1; /**< , offset: 0x234 */ + __IO uint32_t RESERVED_ADDR_C; /**< , offset: 0x238 */ + __IO uint32_t DIGITAL_CONTROL_0; /**< , offset: 0x23C */ + __IO uint32_t DIGITAL_CONTROL_1; /**< , offset: 0x240 */ + __IO uint32_t DIGITAL_CONTROL_2; /**< , offset: 0x244 */ + __I uint32_t RESERVED_ADDR_12H; /**< , offset: 0x248 */ + __IO uint32_t TEST_CONTRL_AND_STATUS_0; /**< , offset: 0x24C */ + __IO uint32_t TEST_CONTRL_AND_STATUS_1; /**< , offset: 0x250 */ + __I uint32_t RESERVED_ADDR_15H; /**< , offset: 0x254 */ + __IO uint32_t PHY_REG_CHGDTC_CONTRL; /**< , offset: 0x258 */ + __IO uint32_t PHY_REG_OTG_CONTROL; /**< , offset: 0x25C */ + __IO uint32_t USB2_PHY_MON0; /**< , offset: 0x260 */ + __IO uint32_t PHY_REG_CHGDTC_CONTRL_1; /**< , offset: 0x264 */ + __I uint32_t RESERVED_ADDR_1AH; /**< , offset: 0x268 */ + __I uint32_t RESERVED_ADDR_1BH; /**< , offset: 0x26C */ + __I uint32_t RESERVED_ADDR_1CH; /**< , offset: 0x270 */ + __I uint32_t RESERVED_ADDR_1DH; /**< , offset: 0x274 */ + __I uint32_t INTERNAL_CID; /**< , offset: 0x278 */ + __I uint32_t USB2_ICID_REG1; /**< , offset: 0x27C */ +} USBC_Type; + +/* ---------------------------------------------------------------------------- + -- USBC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup USBC_Register_Masks USBC Register Masks + * @{ + */ + +/*! @name ID - */ +/*! @{ */ +#define USBC_ID_ID_MASK (0x3FU) +#define USBC_ID_ID_SHIFT (0U) +#define USBC_ID_ID(x) (((uint32_t)(((uint32_t)(x)) << USBC_ID_ID_SHIFT)) & USBC_ID_ID_MASK) +#define USBC_ID_NID_MASK (0x3F00U) +#define USBC_ID_NID_SHIFT (8U) +#define USBC_ID_NID(x) (((uint32_t)(((uint32_t)(x)) << USBC_ID_NID_SHIFT)) & USBC_ID_NID_MASK) +#define USBC_ID_TAG_MASK (0x1F0000U) +#define USBC_ID_TAG_SHIFT (16U) +#define USBC_ID_TAG(x) (((uint32_t)(((uint32_t)(x)) << USBC_ID_TAG_SHIFT)) & USBC_ID_TAG_MASK) +#define USBC_ID_REVISION_MASK (0x1E00000U) +#define USBC_ID_REVISION_SHIFT (21U) +#define USBC_ID_REVISION(x) (((uint32_t)(((uint32_t)(x)) << USBC_ID_REVISION_SHIFT)) & USBC_ID_REVISION_MASK) +#define USBC_ID_VERSION_MASK (0x1E000000U) +#define USBC_ID_VERSION_SHIFT (25U) +#define USBC_ID_VERSION(x) (((uint32_t)(((uint32_t)(x)) << USBC_ID_VERSION_SHIFT)) & USBC_ID_VERSION_MASK) +#define USBC_ID_CIVERSION_MASK (0xE0000000U) +#define USBC_ID_CIVERSION_SHIFT (29U) +#define USBC_ID_CIVERSION(x) (((uint32_t)(((uint32_t)(x)) << USBC_ID_CIVERSION_SHIFT)) & USBC_ID_CIVERSION_MASK) +/*! @} */ + +/*! @name HWGENERAL - */ +/*! @{ */ +#define USBC_HWGENERAL_RT_MASK (0x1U) +#define USBC_HWGENERAL_RT_SHIFT (0U) +#define USBC_HWGENERAL_RT(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWGENERAL_RT_SHIFT)) & USBC_HWGENERAL_RT_MASK) +#define USBC_HWGENERAL_CLKC_MASK (0x6U) +#define USBC_HWGENERAL_CLKC_SHIFT (1U) +#define USBC_HWGENERAL_CLKC(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWGENERAL_CLKC_SHIFT)) & USBC_HWGENERAL_CLKC_MASK) +#define USBC_HWGENERAL_BWT_MASK (0x8U) +#define USBC_HWGENERAL_BWT_SHIFT (3U) +#define USBC_HWGENERAL_BWT(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWGENERAL_BWT_SHIFT)) & USBC_HWGENERAL_BWT_MASK) +#define USBC_HWGENERAL_PHYW_MASK (0x30U) +#define USBC_HWGENERAL_PHYW_SHIFT (4U) +#define USBC_HWGENERAL_PHYW(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWGENERAL_PHYW_SHIFT)) & USBC_HWGENERAL_PHYW_MASK) +#define USBC_HWGENERAL_PHYM_MASK (0x3C0U) +#define USBC_HWGENERAL_PHYM_SHIFT (6U) +#define USBC_HWGENERAL_PHYM(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWGENERAL_PHYM_SHIFT)) & USBC_HWGENERAL_PHYM_MASK) +#define USBC_HWGENERAL_SM_MASK (0xC00U) +#define USBC_HWGENERAL_SM_SHIFT (10U) +#define USBC_HWGENERAL_SM(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWGENERAL_SM_SHIFT)) & USBC_HWGENERAL_SM_MASK) +#define USBC_HWGENERAL_RESERVED_12_MASK (0xFFFFF000U) +#define USBC_HWGENERAL_RESERVED_12_SHIFT (12U) +#define USBC_HWGENERAL_RESERVED_12(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWGENERAL_RESERVED_12_SHIFT)) & USBC_HWGENERAL_RESERVED_12_MASK) +/*! @} */ + +/*! @name HWHOST - */ +/*! @{ */ +#define USBC_HWHOST_HC_MASK (0x1U) +#define USBC_HWHOST_HC_SHIFT (0U) +#define USBC_HWHOST_HC(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWHOST_HC_SHIFT)) & USBC_HWHOST_HC_MASK) +#define USBC_HWHOST_NPORT_MASK (0xEU) +#define USBC_HWHOST_NPORT_SHIFT (1U) +#define USBC_HWHOST_NPORT(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWHOST_NPORT_SHIFT)) & USBC_HWHOST_NPORT_MASK) +#define USBC_HWHOST_RESERVED_4_MASK (0xFFF0U) +#define USBC_HWHOST_RESERVED_4_SHIFT (4U) +#define USBC_HWHOST_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWHOST_RESERVED_4_SHIFT)) & USBC_HWHOST_RESERVED_4_MASK) +#define USBC_HWHOST_TTASY_MASK (0xFF0000U) +#define USBC_HWHOST_TTASY_SHIFT (16U) +#define USBC_HWHOST_TTASY(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWHOST_TTASY_SHIFT)) & USBC_HWHOST_TTASY_MASK) +#define USBC_HWHOST_TTPER_MASK (0xFF000000U) +#define USBC_HWHOST_TTPER_SHIFT (24U) +#define USBC_HWHOST_TTPER(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWHOST_TTPER_SHIFT)) & USBC_HWHOST_TTPER_MASK) +/*! @} */ + +/*! @name HWDEVICE - */ +/*! @{ */ +#define USBC_HWDEVICE_DC_MASK (0x1U) +#define USBC_HWDEVICE_DC_SHIFT (0U) +#define USBC_HWDEVICE_DC(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWDEVICE_DC_SHIFT)) & USBC_HWDEVICE_DC_MASK) +#define USBC_HWDEVICE_DEVEP_MASK (0x3EU) +#define USBC_HWDEVICE_DEVEP_SHIFT (1U) +#define USBC_HWDEVICE_DEVEP(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWDEVICE_DEVEP_SHIFT)) & USBC_HWDEVICE_DEVEP_MASK) +#define USBC_HWDEVICE_RESERVED_6_MASK (0xFFFFFFC0U) +#define USBC_HWDEVICE_RESERVED_6_SHIFT (6U) +#define USBC_HWDEVICE_RESERVED_6(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWDEVICE_RESERVED_6_SHIFT)) & USBC_HWDEVICE_RESERVED_6_MASK) +/*! @} */ + +/*! @name HWTXBUF - */ +/*! @{ */ +#define USBC_HWTXBUF_TXBURST_MASK (0xFFU) +#define USBC_HWTXBUF_TXBURST_SHIFT (0U) +#define USBC_HWTXBUF_TXBURST(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWTXBUF_TXBURST_SHIFT)) & USBC_HWTXBUF_TXBURST_MASK) +#define USBC_HWTXBUF_TXADD_MASK (0xFF00U) +#define USBC_HWTXBUF_TXADD_SHIFT (8U) +#define USBC_HWTXBUF_TXADD(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWTXBUF_TXADD_SHIFT)) & USBC_HWTXBUF_TXADD_MASK) +#define USBC_HWTXBUF_TXCHANADD_MASK (0xFF0000U) +#define USBC_HWTXBUF_TXCHANADD_SHIFT (16U) +#define USBC_HWTXBUF_TXCHANADD(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWTXBUF_TXCHANADD_SHIFT)) & USBC_HWTXBUF_TXCHANADD_MASK) +#define USBC_HWTXBUF_RESERVED_24_MASK (0x7F000000U) +#define USBC_HWTXBUF_RESERVED_24_SHIFT (24U) +#define USBC_HWTXBUF_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWTXBUF_RESERVED_24_SHIFT)) & USBC_HWTXBUF_RESERVED_24_MASK) +/*! @} */ + +/*! @name HWRXBUF - */ +/*! @{ */ +#define USBC_HWRXBUF_RXBURST_MASK (0xFFU) +#define USBC_HWRXBUF_RXBURST_SHIFT (0U) +#define USBC_HWRXBUF_RXBURST(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWRXBUF_RXBURST_SHIFT)) & USBC_HWRXBUF_RXBURST_MASK) +#define USBC_HWRXBUF_RXADD_MASK (0xFF00U) +#define USBC_HWRXBUF_RXADD_SHIFT (8U) +#define USBC_HWRXBUF_RXADD(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWRXBUF_RXADD_SHIFT)) & USBC_HWRXBUF_RXADD_MASK) +#define USBC_HWRXBUF_RESERVED_16_MASK (0xFFFF0000U) +#define USBC_HWRXBUF_RESERVED_16_SHIFT (16U) +#define USBC_HWRXBUF_RESERVED_16(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWRXBUF_RESERVED_16_SHIFT)) & USBC_HWRXBUF_RESERVED_16_MASK) +/*! @} */ + +/*! @name HWTXBUF0 - */ +/*! @{ */ +#define USBC_HWTXBUF0_TXBURST_MASK (0xFFFFFFFFU) +#define USBC_HWTXBUF0_TXBURST_SHIFT (0U) +#define USBC_HWTXBUF0_TXBURST(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWTXBUF0_TXBURST_SHIFT)) & USBC_HWTXBUF0_TXBURST_MASK) +/*! @} */ + +/*! @name HWTXBUF1 - */ +/*! @{ */ +#define USBC_HWTXBUF1_TXBURST_MASK (0xFFFFFFFFU) +#define USBC_HWTXBUF1_TXBURST_SHIFT (0U) +#define USBC_HWTXBUF1_TXBURST(x) (((uint32_t)(((uint32_t)(x)) << USBC_HWTXBUF1_TXBURST_SHIFT)) & USBC_HWTXBUF1_TXBURST_MASK) +/*! @} */ + +/*! @name GPTIMER0LD - */ +/*! @{ */ +#define USBC_GPTIMER0LD_GPTLD_MASK (0xFFFFFFU) +#define USBC_GPTIMER0LD_GPTLD_SHIFT (0U) +#define USBC_GPTIMER0LD_GPTLD(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER0LD_GPTLD_SHIFT)) & USBC_GPTIMER0LD_GPTLD_MASK) +#define USBC_GPTIMER0LD_RESERVED_24_MASK (0xFF000000U) +#define USBC_GPTIMER0LD_RESERVED_24_SHIFT (24U) +#define USBC_GPTIMER0LD_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER0LD_RESERVED_24_SHIFT)) & USBC_GPTIMER0LD_RESERVED_24_MASK) +/*! @} */ + +/*! @name GPTIMER0CTRL - */ +/*! @{ */ +#define USBC_GPTIMER0CTRL_GPTCNT_MASK (0xFFFFFFU) +#define USBC_GPTIMER0CTRL_GPTCNT_SHIFT (0U) +#define USBC_GPTIMER0CTRL_GPTCNT(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER0CTRL_GPTCNT_SHIFT)) & USBC_GPTIMER0CTRL_GPTCNT_MASK) +#define USBC_GPTIMER0CTRL_GPTMODE_MASK (0x1000000U) +#define USBC_GPTIMER0CTRL_GPTMODE_SHIFT (24U) +#define USBC_GPTIMER0CTRL_GPTMODE(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER0CTRL_GPTMODE_SHIFT)) & USBC_GPTIMER0CTRL_GPTMODE_MASK) +#define USBC_GPTIMER0CTRL_RESERVED_25_MASK (0x3E000000U) +#define USBC_GPTIMER0CTRL_RESERVED_25_SHIFT (25U) +#define USBC_GPTIMER0CTRL_RESERVED_25(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER0CTRL_RESERVED_25_SHIFT)) & USBC_GPTIMER0CTRL_RESERVED_25_MASK) +#define USBC_GPTIMER0CTRL_GPTRST_MASK (0x40000000U) +#define USBC_GPTIMER0CTRL_GPTRST_SHIFT (30U) +#define USBC_GPTIMER0CTRL_GPTRST(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER0CTRL_GPTRST_SHIFT)) & USBC_GPTIMER0CTRL_GPTRST_MASK) +#define USBC_GPTIMER0CTRL_GPTRUN_MASK (0x80000000U) +#define USBC_GPTIMER0CTRL_GPTRUN_SHIFT (31U) +#define USBC_GPTIMER0CTRL_GPTRUN(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER0CTRL_GPTRUN_SHIFT)) & USBC_GPTIMER0CTRL_GPTRUN_MASK) +/*! @} */ + +/*! @name GPTTIMER1LD - */ +/*! @{ */ +#define USBC_GPTTIMER1LD_GPTLD_MASK (0xFFFFFFU) +#define USBC_GPTTIMER1LD_GPTLD_SHIFT (0U) +#define USBC_GPTTIMER1LD_GPTLD(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTTIMER1LD_GPTLD_SHIFT)) & USBC_GPTTIMER1LD_GPTLD_MASK) +#define USBC_GPTTIMER1LD_RESERVED_24_MASK (0xFF000000U) +#define USBC_GPTTIMER1LD_RESERVED_24_SHIFT (24U) +#define USBC_GPTTIMER1LD_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTTIMER1LD_RESERVED_24_SHIFT)) & USBC_GPTTIMER1LD_RESERVED_24_MASK) +/*! @} */ + +/*! @name GPTIMER1CTRL - */ +/*! @{ */ +#define USBC_GPTIMER1CTRL_GPTCNT_MASK (0xFFFFFFU) +#define USBC_GPTIMER1CTRL_GPTCNT_SHIFT (0U) +#define USBC_GPTIMER1CTRL_GPTCNT(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER1CTRL_GPTCNT_SHIFT)) & USBC_GPTIMER1CTRL_GPTCNT_MASK) +#define USBC_GPTIMER1CTRL_GPTMODE_MASK (0x1000000U) +#define USBC_GPTIMER1CTRL_GPTMODE_SHIFT (24U) +#define USBC_GPTIMER1CTRL_GPTMODE(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER1CTRL_GPTMODE_SHIFT)) & USBC_GPTIMER1CTRL_GPTMODE_MASK) +#define USBC_GPTIMER1CTRL_RESERVED_25_MASK (0x3E000000U) +#define USBC_GPTIMER1CTRL_RESERVED_25_SHIFT (25U) +#define USBC_GPTIMER1CTRL_RESERVED_25(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER1CTRL_RESERVED_25_SHIFT)) & USBC_GPTIMER1CTRL_RESERVED_25_MASK) +#define USBC_GPTIMER1CTRL_GPTRST_MASK (0x40000000U) +#define USBC_GPTIMER1CTRL_GPTRST_SHIFT (30U) +#define USBC_GPTIMER1CTRL_GPTRST(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER1CTRL_GPTRST_SHIFT)) & USBC_GPTIMER1CTRL_GPTRST_MASK) +#define USBC_GPTIMER1CTRL_GPTRUN_MASK (0x80000000U) +#define USBC_GPTIMER1CTRL_GPTRUN_SHIFT (31U) +#define USBC_GPTIMER1CTRL_GPTRUN(x) (((uint32_t)(((uint32_t)(x)) << USBC_GPTIMER1CTRL_GPTRUN_SHIFT)) & USBC_GPTIMER1CTRL_GPTRUN_MASK) +/*! @} */ + +/*! @name SBUSCFG - */ +/*! @{ */ +#define USBC_SBUSCFG_AHBBRST_MASK (0x7U) +#define USBC_SBUSCFG_AHBBRST_SHIFT (0U) +#define USBC_SBUSCFG_AHBBRST(x) (((uint32_t)(((uint32_t)(x)) << USBC_SBUSCFG_AHBBRST_SHIFT)) & USBC_SBUSCFG_AHBBRST_MASK) +#define USBC_SBUSCFG_RESERVED_3_MASK (0xFFFFFFF8U) +#define USBC_SBUSCFG_RESERVED_3_SHIFT (3U) +#define USBC_SBUSCFG_RESERVED_3(x) (((uint32_t)(((uint32_t)(x)) << USBC_SBUSCFG_RESERVED_3_SHIFT)) & USBC_SBUSCFG_RESERVED_3_MASK) +/*! @} */ + +/*! @name CAPLENGTH - */ +/*! @{ */ +#define USBC_CAPLENGTH_CAPLENGTH_MASK (0xFFU) +#define USBC_CAPLENGTH_CAPLENGTH_SHIFT (0U) +#define USBC_CAPLENGTH_CAPLENGTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_CAPLENGTH_CAPLENGTH_SHIFT)) & USBC_CAPLENGTH_CAPLENGTH_MASK) +#define USBC_CAPLENGTH_HCIVERSION_MASK (0xFFFF0000U) +#define USBC_CAPLENGTH_HCIVERSION_SHIFT (16U) +#define USBC_CAPLENGTH_HCIVERSION(x) (((uint32_t)(((uint32_t)(x)) << USBC_CAPLENGTH_HCIVERSION_SHIFT)) & USBC_CAPLENGTH_HCIVERSION_MASK) +/*! @} */ + +/*! @name HCSPARAMS - */ +/*! @{ */ +#define USBC_HCSPARAMS_N_PORTS_MASK (0xFU) +#define USBC_HCSPARAMS_N_PORTS_SHIFT (0U) +#define USBC_HCSPARAMS_N_PORTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_N_PORTS_SHIFT)) & USBC_HCSPARAMS_N_PORTS_MASK) +#define USBC_HCSPARAMS_PPC_MASK (0x10U) +#define USBC_HCSPARAMS_PPC_SHIFT (4U) +#define USBC_HCSPARAMS_PPC(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_PPC_SHIFT)) & USBC_HCSPARAMS_PPC_MASK) +#define USBC_HCSPARAMS_RESERVED_5_MASK (0xE0U) +#define USBC_HCSPARAMS_RESERVED_5_SHIFT (5U) +#define USBC_HCSPARAMS_RESERVED_5(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_RESERVED_5_SHIFT)) & USBC_HCSPARAMS_RESERVED_5_MASK) +#define USBC_HCSPARAMS_N_PCC_MASK (0xF00U) +#define USBC_HCSPARAMS_N_PCC_SHIFT (8U) +#define USBC_HCSPARAMS_N_PCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_N_PCC_SHIFT)) & USBC_HCSPARAMS_N_PCC_MASK) +#define USBC_HCSPARAMS_N_CC_MASK (0xF000U) +#define USBC_HCSPARAMS_N_CC_SHIFT (12U) +#define USBC_HCSPARAMS_N_CC(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_N_CC_SHIFT)) & USBC_HCSPARAMS_N_CC_MASK) +#define USBC_HCSPARAMS_PI_MASK (0x10000U) +#define USBC_HCSPARAMS_PI_SHIFT (16U) +#define USBC_HCSPARAMS_PI(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_PI_SHIFT)) & USBC_HCSPARAMS_PI_MASK) +#define USBC_HCSPARAMS_RESERVED_17_MASK (0xE0000U) +#define USBC_HCSPARAMS_RESERVED_17_SHIFT (17U) +#define USBC_HCSPARAMS_RESERVED_17(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_RESERVED_17_SHIFT)) & USBC_HCSPARAMS_RESERVED_17_MASK) +#define USBC_HCSPARAMS_N_PTT_MASK (0xF00000U) +#define USBC_HCSPARAMS_N_PTT_SHIFT (20U) +#define USBC_HCSPARAMS_N_PTT(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_N_PTT_SHIFT)) & USBC_HCSPARAMS_N_PTT_MASK) +#define USBC_HCSPARAMS_N_TT_MASK (0xF000000U) +#define USBC_HCSPARAMS_N_TT_SHIFT (24U) +#define USBC_HCSPARAMS_N_TT(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_N_TT_SHIFT)) & USBC_HCSPARAMS_N_TT_MASK) +#define USBC_HCSPARAMS_RESERVED_28_MASK (0xF0000000U) +#define USBC_HCSPARAMS_RESERVED_28_SHIFT (28U) +#define USBC_HCSPARAMS_RESERVED_28(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCSPARAMS_RESERVED_28_SHIFT)) & USBC_HCSPARAMS_RESERVED_28_MASK) +/*! @} */ + +/*! @name HCCPARAMS - */ +/*! @{ */ +#define USBC_HCCPARAMS_ADC_MASK (0x1U) +#define USBC_HCCPARAMS_ADC_SHIFT (0U) +#define USBC_HCCPARAMS_ADC(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCCPARAMS_ADC_SHIFT)) & USBC_HCCPARAMS_ADC_MASK) +#define USBC_HCCPARAMS_PFL_MASK (0x2U) +#define USBC_HCCPARAMS_PFL_SHIFT (1U) +#define USBC_HCCPARAMS_PFL(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCCPARAMS_PFL_SHIFT)) & USBC_HCCPARAMS_PFL_MASK) +#define USBC_HCCPARAMS_ASP_MASK (0x4U) +#define USBC_HCCPARAMS_ASP_SHIFT (2U) +#define USBC_HCCPARAMS_ASP(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCCPARAMS_ASP_SHIFT)) & USBC_HCCPARAMS_ASP_MASK) +#define USBC_HCCPARAMS_RESERVED_3_MASK (0x8U) +#define USBC_HCCPARAMS_RESERVED_3_SHIFT (3U) +#define USBC_HCCPARAMS_RESERVED_3(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCCPARAMS_RESERVED_3_SHIFT)) & USBC_HCCPARAMS_RESERVED_3_MASK) +#define USBC_HCCPARAMS_IST_MASK (0xF0U) +#define USBC_HCCPARAMS_IST_SHIFT (4U) +#define USBC_HCCPARAMS_IST(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCCPARAMS_IST_SHIFT)) & USBC_HCCPARAMS_IST_MASK) +#define USBC_HCCPARAMS_EECP_MASK (0xFF00U) +#define USBC_HCCPARAMS_EECP_SHIFT (8U) +#define USBC_HCCPARAMS_EECP(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCCPARAMS_EECP_SHIFT)) & USBC_HCCPARAMS_EECP_MASK) +#define USBC_HCCPARAMS_RESERVED_16_MASK (0xFFFF0000U) +#define USBC_HCCPARAMS_RESERVED_16_SHIFT (16U) +#define USBC_HCCPARAMS_RESERVED_16(x) (((uint32_t)(((uint32_t)(x)) << USBC_HCCPARAMS_RESERVED_16_SHIFT)) & USBC_HCCPARAMS_RESERVED_16_MASK) +/*! @} */ + +/*! @name DCIVERSION - */ +/*! @{ */ +#define USBC_DCIVERSION_DCIVERSION_MASK (0xFFFFU) +#define USBC_DCIVERSION_DCIVERSION_SHIFT (0U) +#define USBC_DCIVERSION_DCIVERSION(x) (((uint32_t)(((uint32_t)(x)) << USBC_DCIVERSION_DCIVERSION_SHIFT)) & USBC_DCIVERSION_DCIVERSION_MASK) +/*! @} */ + +/*! @name DCCPARAMS - */ +/*! @{ */ +#define USBC_DCCPARAMS_DEN_MASK (0x1FU) +#define USBC_DCCPARAMS_DEN_SHIFT (0U) +#define USBC_DCCPARAMS_DEN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DCCPARAMS_DEN_SHIFT)) & USBC_DCCPARAMS_DEN_MASK) +#define USBC_DCCPARAMS_RESERVED_5_MASK (0x60U) +#define USBC_DCCPARAMS_RESERVED_5_SHIFT (5U) +#define USBC_DCCPARAMS_RESERVED_5(x) (((uint32_t)(((uint32_t)(x)) << USBC_DCCPARAMS_RESERVED_5_SHIFT)) & USBC_DCCPARAMS_RESERVED_5_MASK) +#define USBC_DCCPARAMS_DC_MASK (0x80U) +#define USBC_DCCPARAMS_DC_SHIFT (7U) +#define USBC_DCCPARAMS_DC(x) (((uint32_t)(((uint32_t)(x)) << USBC_DCCPARAMS_DC_SHIFT)) & USBC_DCCPARAMS_DC_MASK) +#define USBC_DCCPARAMS_HC_MASK (0x100U) +#define USBC_DCCPARAMS_HC_SHIFT (8U) +#define USBC_DCCPARAMS_HC(x) (((uint32_t)(((uint32_t)(x)) << USBC_DCCPARAMS_HC_SHIFT)) & USBC_DCCPARAMS_HC_MASK) +#define USBC_DCCPARAMS_RESERVED_9_MASK (0x7FFFFE00U) +#define USBC_DCCPARAMS_RESERVED_9_SHIFT (9U) +#define USBC_DCCPARAMS_RESERVED_9(x) (((uint32_t)(((uint32_t)(x)) << USBC_DCCPARAMS_RESERVED_9_SHIFT)) & USBC_DCCPARAMS_RESERVED_9_MASK) +#define USBC_DCCPARAMS_LPM_EN_MASK (0x80000000U) +#define USBC_DCCPARAMS_LPM_EN_SHIFT (31U) +#define USBC_DCCPARAMS_LPM_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DCCPARAMS_LPM_EN_SHIFT)) & USBC_DCCPARAMS_LPM_EN_MASK) +/*! @} */ + +/*! @name DEVLPMCSR - */ +/*! @{ */ +#define USBC_DEVLPMCSR_INT_L1RSM_MASK (0x1U) +#define USBC_DEVLPMCSR_INT_L1RSM_SHIFT (0U) +#define USBC_DEVLPMCSR_INT_L1RSM(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_INT_L1RSM_SHIFT)) & USBC_DEVLPMCSR_INT_L1RSM_MASK) +#define USBC_DEVLPMCSR_INT_LPMPKT_MASK (0x2U) +#define USBC_DEVLPMCSR_INT_LPMPKT_SHIFT (1U) +#define USBC_DEVLPMCSR_INT_LPMPKT(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_INT_LPMPKT_SHIFT)) & USBC_DEVLPMCSR_INT_LPMPKT_MASK) +#define USBC_DEVLPMCSR_INT_LPMACK_MASK (0x4U) +#define USBC_DEVLPMCSR_INT_LPMACK_SHIFT (2U) +#define USBC_DEVLPMCSR_INT_LPMACK(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_INT_LPMACK_SHIFT)) & USBC_DEVLPMCSR_INT_LPMACK_MASK) +#define USBC_DEVLPMCSR_INT_LPMERR_MASK (0x8U) +#define USBC_DEVLPMCSR_INT_LPMERR_SHIFT (3U) +#define USBC_DEVLPMCSR_INT_LPMERR(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_INT_LPMERR_SHIFT)) & USBC_DEVLPMCSR_INT_LPMERR_MASK) +#define USBC_DEVLPMCSR_IE_L1RSM_MASK (0x10U) +#define USBC_DEVLPMCSR_IE_L1RSM_SHIFT (4U) +#define USBC_DEVLPMCSR_IE_L1RSM(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_IE_L1RSM_SHIFT)) & USBC_DEVLPMCSR_IE_L1RSM_MASK) +#define USBC_DEVLPMCSR_IE_LPMPKT_MASK (0x20U) +#define USBC_DEVLPMCSR_IE_LPMPKT_SHIFT (5U) +#define USBC_DEVLPMCSR_IE_LPMPKT(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_IE_LPMPKT_SHIFT)) & USBC_DEVLPMCSR_IE_LPMPKT_MASK) +#define USBC_DEVLPMCSR_IE_LPMACK_MASK (0x40U) +#define USBC_DEVLPMCSR_IE_LPMACK_SHIFT (6U) +#define USBC_DEVLPMCSR_IE_LPMACK(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_IE_LPMACK_SHIFT)) & USBC_DEVLPMCSR_IE_LPMACK_MASK) +#define USBC_DEVLPMCSR_IE_LPMERR_MASK (0x80U) +#define USBC_DEVLPMCSR_IE_LPMERR_SHIFT (7U) +#define USBC_DEVLPMCSR_IE_LPMERR(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_IE_LPMERR_SHIFT)) & USBC_DEVLPMCSR_IE_LPMERR_MASK) +#define USBC_DEVLPMCSR_RWAKE_EN_MASK (0x100U) +#define USBC_DEVLPMCSR_RWAKE_EN_SHIFT (8U) +#define USBC_DEVLPMCSR_RWAKE_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_RWAKE_EN_SHIFT)) & USBC_DEVLPMCSR_RWAKE_EN_MASK) +#define USBC_DEVLPMCSR_L1STATE_MASK (0x200U) +#define USBC_DEVLPMCSR_L1STATE_SHIFT (9U) +#define USBC_DEVLPMCSR_L1STATE(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_L1STATE_SHIFT)) & USBC_DEVLPMCSR_L1STATE_MASK) +#define USBC_DEVLPMCSR_IE_L1STATE_MASK (0x400U) +#define USBC_DEVLPMCSR_IE_L1STATE_SHIFT (10U) +#define USBC_DEVLPMCSR_IE_L1STATE(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_IE_L1STATE_SHIFT)) & USBC_DEVLPMCSR_IE_L1STATE_MASK) +#define USBC_DEVLPMCSR_ACK_OK_MASK (0x800U) +#define USBC_DEVLPMCSR_ACK_OK_SHIFT (11U) +#define USBC_DEVLPMCSR_ACK_OK(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_ACK_OK_SHIFT)) & USBC_DEVLPMCSR_ACK_OK_MASK) +#define USBC_DEVLPMCSR_STALL_OK_MASK (0x1000U) +#define USBC_DEVLPMCSR_STALL_OK_SHIFT (12U) +#define USBC_DEVLPMCSR_STALL_OK(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_STALL_OK_SHIFT)) & USBC_DEVLPMCSR_STALL_OK_MASK) +#define USBC_DEVLPMCSR_MIN_SLP_EN_MASK (0x2000U) +#define USBC_DEVLPMCSR_MIN_SLP_EN_SHIFT (13U) +#define USBC_DEVLPMCSR_MIN_SLP_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_MIN_SLP_EN_SHIFT)) & USBC_DEVLPMCSR_MIN_SLP_EN_MASK) +#define USBC_DEVLPMCSR_ALWAYS_LOG_MASK (0x4000U) +#define USBC_DEVLPMCSR_ALWAYS_LOG_SHIFT (14U) +#define USBC_DEVLPMCSR_ALWAYS_LOG(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_ALWAYS_LOG_SHIFT)) & USBC_DEVLPMCSR_ALWAYS_LOG_MASK) +#define USBC_DEVLPMCSR_LPM_ON_MASK (0x8000U) +#define USBC_DEVLPMCSR_LPM_ON_SHIFT (15U) +#define USBC_DEVLPMCSR_LPM_ON(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_LPM_ON_SHIFT)) & USBC_DEVLPMCSR_LPM_ON_MASK) +#define USBC_DEVLPMCSR_HST_RSM_EN_MASK (0x10000U) +#define USBC_DEVLPMCSR_HST_RSM_EN_SHIFT (16U) +#define USBC_DEVLPMCSR_HST_RSM_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_HST_RSM_EN_SHIFT)) & USBC_DEVLPMCSR_HST_RSM_EN_MASK) +#define USBC_DEVLPMCSR_LPM_ANY_EP_MASK (0x20000U) +#define USBC_DEVLPMCSR_LPM_ANY_EP_SHIFT (17U) +#define USBC_DEVLPMCSR_LPM_ANY_EP(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_LPM_ANY_EP_SHIFT)) & USBC_DEVLPMCSR_LPM_ANY_EP_MASK) +#define USBC_DEVLPMCSR_RESERVED_18_MASK (0xC0000U) +#define USBC_DEVLPMCSR_RESERVED_18_SHIFT (18U) +#define USBC_DEVLPMCSR_RESERVED_18(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_RESERVED_18_SHIFT)) & USBC_DEVLPMCSR_RESERVED_18_MASK) +#define USBC_DEVLPMCSR_HIRD_MASK (0xF00000U) +#define USBC_DEVLPMCSR_HIRD_SHIFT (20U) +#define USBC_DEVLPMCSR_HIRD(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_HIRD_SHIFT)) & USBC_DEVLPMCSR_HIRD_MASK) +#define USBC_DEVLPMCSR_LINKSTATE_MASK (0xF000000U) +#define USBC_DEVLPMCSR_LINKSTATE_SHIFT (24U) +#define USBC_DEVLPMCSR_LINKSTATE(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_LINKSTATE_SHIFT)) & USBC_DEVLPMCSR_LINKSTATE_MASK) +#define USBC_DEVLPMCSR_BRMTWAKE_MASK (0x10000000U) +#define USBC_DEVLPMCSR_BRMTWAKE_SHIFT (28U) +#define USBC_DEVLPMCSR_BRMTWAKE(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_BRMTWAKE_SHIFT)) & USBC_DEVLPMCSR_BRMTWAKE_MASK) +#define USBC_DEVLPMCSR_LPM_PHCD_ONLY_MASK (0x20000000U) +#define USBC_DEVLPMCSR_LPM_PHCD_ONLY_SHIFT (29U) +#define USBC_DEVLPMCSR_LPM_PHCD_ONLY(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_LPM_PHCD_ONLY_SHIFT)) & USBC_DEVLPMCSR_LPM_PHCD_ONLY_MASK) +#define USBC_DEVLPMCSR_LPM_RSP_MASK (0xC0000000U) +#define USBC_DEVLPMCSR_LPM_RSP_SHIFT (30U) +#define USBC_DEVLPMCSR_LPM_RSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_DEVLPMCSR_LPM_RSP_SHIFT)) & USBC_DEVLPMCSR_LPM_RSP_MASK) +/*! @} */ + +/*! @name USBCMD - */ +/*! @{ */ +#define USBC_USBCMD_RS_MASK (0x1U) +#define USBC_USBCMD_RS_SHIFT (0U) +#define USBC_USBCMD_RS(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_RS_SHIFT)) & USBC_USBCMD_RS_MASK) +#define USBC_USBCMD_RST_MASK (0x2U) +#define USBC_USBCMD_RST_SHIFT (1U) +#define USBC_USBCMD_RST(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_RST_SHIFT)) & USBC_USBCMD_RST_MASK) +#define USBC_USBCMD_FS0_MASK (0x4U) +#define USBC_USBCMD_FS0_SHIFT (2U) +/*! FS0 - HOST only + */ +#define USBC_USBCMD_FS0(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_FS0_SHIFT)) & USBC_USBCMD_FS0_MASK) +#define USBC_USBCMD_FS1_MASK (0x8U) +#define USBC_USBCMD_FS1_SHIFT (3U) +/*! FS1 - HOST only + */ +#define USBC_USBCMD_FS1(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_FS1_SHIFT)) & USBC_USBCMD_FS1_MASK) +#define USBC_USBCMD_PSE_MASK (0x10U) +#define USBC_USBCMD_PSE_SHIFT (4U) +/*! PSE - HOST only + */ +#define USBC_USBCMD_PSE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_PSE_SHIFT)) & USBC_USBCMD_PSE_MASK) +#define USBC_USBCMD_ASE_MASK (0x20U) +#define USBC_USBCMD_ASE_SHIFT (5U) +/*! ASE - HOST only + */ +#define USBC_USBCMD_ASE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_ASE_SHIFT)) & USBC_USBCMD_ASE_MASK) +#define USBC_USBCMD_IAA_MASK (0x40U) +#define USBC_USBCMD_IAA_SHIFT (6U) +/*! IAA - HOST only + */ +#define USBC_USBCMD_IAA(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_IAA_SHIFT)) & USBC_USBCMD_IAA_MASK) +#define USBC_USBCMD_LR_MASK (0x80U) +#define USBC_USBCMD_LR_SHIFT (7U) +#define USBC_USBCMD_LR(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_LR_SHIFT)) & USBC_USBCMD_LR_MASK) +#define USBC_USBCMD_ASP0_MASK (0x100U) +#define USBC_USBCMD_ASP0_SHIFT (8U) +/*! ASP0 - HOST only + */ +#define USBC_USBCMD_ASP0(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_ASP0_SHIFT)) & USBC_USBCMD_ASP0_MASK) +#define USBC_USBCMD_ASP1_MASK (0x200U) +#define USBC_USBCMD_ASP1_SHIFT (9U) +/*! ASP1 - HOST only + */ +#define USBC_USBCMD_ASP1(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_ASP1_SHIFT)) & USBC_USBCMD_ASP1_MASK) +#define USBC_USBCMD_RESERVED_10_MASK (0x400U) +#define USBC_USBCMD_RESERVED_10_SHIFT (10U) +#define USBC_USBCMD_RESERVED_10(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_RESERVED_10_SHIFT)) & USBC_USBCMD_RESERVED_10_MASK) +#define USBC_USBCMD_ASPE_MASK (0x800U) +#define USBC_USBCMD_ASPE_SHIFT (11U) +/*! ASPE - HOST only + */ +#define USBC_USBCMD_ASPE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_ASPE_SHIFT)) & USBC_USBCMD_ASPE_MASK) +#define USBC_USBCMD_RESERVED_12_MASK (0x1000U) +#define USBC_USBCMD_RESERVED_12_SHIFT (12U) +#define USBC_USBCMD_RESERVED_12(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_RESERVED_12_SHIFT)) & USBC_USBCMD_RESERVED_12_MASK) +#define USBC_USBCMD_SUTW_MASK (0x2000U) +#define USBC_USBCMD_SUTW_SHIFT (13U) +#define USBC_USBCMD_SUTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_SUTW_SHIFT)) & USBC_USBCMD_SUTW_MASK) +#define USBC_USBCMD_ATDTW_MASK (0x4000U) +#define USBC_USBCMD_ATDTW_SHIFT (14U) +#define USBC_USBCMD_ATDTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_ATDTW_SHIFT)) & USBC_USBCMD_ATDTW_MASK) +#define USBC_USBCMD_FS2_MASK (0x8000U) +#define USBC_USBCMD_FS2_SHIFT (15U) +/*! FS2 - HOST only + */ +#define USBC_USBCMD_FS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_FS2_SHIFT)) & USBC_USBCMD_FS2_MASK) +#define USBC_USBCMD_ITC_MASK (0xFF0000U) +#define USBC_USBCMD_ITC_SHIFT (16U) +#define USBC_USBCMD_ITC(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_ITC_SHIFT)) & USBC_USBCMD_ITC_MASK) +#define USBC_USBCMD_RESERVED_24_MASK (0xFF000000U) +#define USBC_USBCMD_RESERVED_24_SHIFT (24U) +#define USBC_USBCMD_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBCMD_RESERVED_24_SHIFT)) & USBC_USBCMD_RESERVED_24_MASK) +/*! @} */ + +/*! @name USBSTS - */ +/*! @{ */ +#define USBC_USBSTS_UI_MASK (0x1U) +#define USBC_USBSTS_UI_SHIFT (0U) +/*! UI - rwc + */ +#define USBC_USBSTS_UI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_UI_SHIFT)) & USBC_USBSTS_UI_MASK) +#define USBC_USBSTS_UEI_MASK (0x2U) +#define USBC_USBSTS_UEI_SHIFT (1U) +/*! UEI - rwc + */ +#define USBC_USBSTS_UEI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_UEI_SHIFT)) & USBC_USBSTS_UEI_MASK) +#define USBC_USBSTS_PCI_MASK (0x4U) +#define USBC_USBSTS_PCI_SHIFT (2U) +/*! PCI - rwc + */ +#define USBC_USBSTS_PCI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_PCI_SHIFT)) & USBC_USBSTS_PCI_MASK) +#define USBC_USBSTS_FRI_MASK (0x8U) +#define USBC_USBSTS_FRI_SHIFT (3U) +/*! FRI - rwc + */ +#define USBC_USBSTS_FRI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_FRI_SHIFT)) & USBC_USBSTS_FRI_MASK) +#define USBC_USBSTS_SEI_MASK (0x10U) +#define USBC_USBSTS_SEI_SHIFT (4U) +/*! SEI - rwc + */ +#define USBC_USBSTS_SEI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_SEI_SHIFT)) & USBC_USBSTS_SEI_MASK) +#define USBC_USBSTS_AAI_MASK (0x20U) +#define USBC_USBSTS_AAI_SHIFT (5U) +/*! AAI - rwc + */ +#define USBC_USBSTS_AAI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_AAI_SHIFT)) & USBC_USBSTS_AAI_MASK) +#define USBC_USBSTS_URI_MASK (0x40U) +#define USBC_USBSTS_URI_SHIFT (6U) +/*! URI - rwc + */ +#define USBC_USBSTS_URI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_URI_SHIFT)) & USBC_USBSTS_URI_MASK) +#define USBC_USBSTS_SRI_MASK (0x80U) +#define USBC_USBSTS_SRI_SHIFT (7U) +/*! SRI - rwc + */ +#define USBC_USBSTS_SRI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_SRI_SHIFT)) & USBC_USBSTS_SRI_MASK) +#define USBC_USBSTS_SLI_MASK (0x100U) +#define USBC_USBSTS_SLI_SHIFT (8U) +/*! SLI - rwc + */ +#define USBC_USBSTS_SLI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_SLI_SHIFT)) & USBC_USBSTS_SLI_MASK) +#define USBC_USBSTS_RESERVED_9_MASK (0x200U) +#define USBC_USBSTS_RESERVED_9_SHIFT (9U) +#define USBC_USBSTS_RESERVED_9(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_RESERVED_9_SHIFT)) & USBC_USBSTS_RESERVED_9_MASK) +#define USBC_USBSTS_ULPII_MASK (0x400U) +#define USBC_USBSTS_ULPII_SHIFT (10U) +/*! ULPII - rwc + */ +#define USBC_USBSTS_ULPII(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_ULPII_SHIFT)) & USBC_USBSTS_ULPII_MASK) +#define USBC_USBSTS_RESERVED_11_MASK (0x800U) +#define USBC_USBSTS_RESERVED_11_SHIFT (11U) +#define USBC_USBSTS_RESERVED_11(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_RESERVED_11_SHIFT)) & USBC_USBSTS_RESERVED_11_MASK) +#define USBC_USBSTS_HCH_MASK (0x1000U) +#define USBC_USBSTS_HCH_SHIFT (12U) +/*! HCH - HOST only + */ +#define USBC_USBSTS_HCH(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_HCH_SHIFT)) & USBC_USBSTS_HCH_MASK) +#define USBC_USBSTS_RCL_MASK (0x2000U) +#define USBC_USBSTS_RCL_SHIFT (13U) +#define USBC_USBSTS_RCL(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_RCL_SHIFT)) & USBC_USBSTS_RCL_MASK) +#define USBC_USBSTS_PS_MASK (0x4000U) +#define USBC_USBSTS_PS_SHIFT (14U) +#define USBC_USBSTS_PS(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_PS_SHIFT)) & USBC_USBSTS_PS_MASK) +#define USBC_USBSTS_AS_MASK (0x8000U) +#define USBC_USBSTS_AS_SHIFT (15U) +#define USBC_USBSTS_AS(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_AS_SHIFT)) & USBC_USBSTS_AS_MASK) +#define USBC_USBSTS_NAKI_MASK (0x10000U) +#define USBC_USBSTS_NAKI_SHIFT (16U) +#define USBC_USBSTS_NAKI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_NAKI_SHIFT)) & USBC_USBSTS_NAKI_MASK) +#define USBC_USBSTS_RESERVED_17_MASK (0x20000U) +#define USBC_USBSTS_RESERVED_17_SHIFT (17U) +#define USBC_USBSTS_RESERVED_17(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_RESERVED_17_SHIFT)) & USBC_USBSTS_RESERVED_17_MASK) +#define USBC_USBSTS_UAI_MASK (0x40000U) +#define USBC_USBSTS_UAI_SHIFT (18U) +/*! UAI - rwc + */ +#define USBC_USBSTS_UAI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_UAI_SHIFT)) & USBC_USBSTS_UAI_MASK) +#define USBC_USBSTS_UPI_MASK (0x80000U) +#define USBC_USBSTS_UPI_SHIFT (19U) +/*! UPI - rwc + */ +#define USBC_USBSTS_UPI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_UPI_SHIFT)) & USBC_USBSTS_UPI_MASK) +#define USBC_USBSTS_RESERVED_20_MASK (0xF00000U) +#define USBC_USBSTS_RESERVED_20_SHIFT (20U) +#define USBC_USBSTS_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_RESERVED_20_SHIFT)) & USBC_USBSTS_RESERVED_20_MASK) +#define USBC_USBSTS_TI0_MASK (0x1000000U) +#define USBC_USBSTS_TI0_SHIFT (24U) +/*! TI0 - rwc + */ +#define USBC_USBSTS_TI0(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_TI0_SHIFT)) & USBC_USBSTS_TI0_MASK) +#define USBC_USBSTS_TI1_MASK (0x2000000U) +#define USBC_USBSTS_TI1_SHIFT (25U) +/*! TI1 - rwc + */ +#define USBC_USBSTS_TI1(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_TI1_SHIFT)) & USBC_USBSTS_TI1_MASK) +#define USBC_USBSTS_RESERVED_26_MASK (0xFC000000U) +#define USBC_USBSTS_RESERVED_26_SHIFT (26U) +#define USBC_USBSTS_RESERVED_26(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBSTS_RESERVED_26_SHIFT)) & USBC_USBSTS_RESERVED_26_MASK) +/*! @} */ + +/*! @name USBINTR - */ +/*! @{ */ +#define USBC_USBINTR_UE_MASK (0x1U) +#define USBC_USBINTR_UE_SHIFT (0U) +#define USBC_USBINTR_UE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_UE_SHIFT)) & USBC_USBINTR_UE_MASK) +#define USBC_USBINTR_UEE_MASK (0x2U) +#define USBC_USBINTR_UEE_SHIFT (1U) +/*! UEE - rwc + */ +#define USBC_USBINTR_UEE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_UEE_SHIFT)) & USBC_USBINTR_UEE_MASK) +#define USBC_USBINTR_PCE_MASK (0x4U) +#define USBC_USBINTR_PCE_SHIFT (2U) +#define USBC_USBINTR_PCE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_PCE_SHIFT)) & USBC_USBINTR_PCE_MASK) +#define USBC_USBINTR_FRE_MASK (0x8U) +#define USBC_USBINTR_FRE_SHIFT (3U) +/*! FRE - HOST only + */ +#define USBC_USBINTR_FRE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_FRE_SHIFT)) & USBC_USBINTR_FRE_MASK) +#define USBC_USBINTR_SEE_MASK (0x10U) +#define USBC_USBINTR_SEE_SHIFT (4U) +#define USBC_USBINTR_SEE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_SEE_SHIFT)) & USBC_USBINTR_SEE_MASK) +#define USBC_USBINTR_AAE_MASK (0x20U) +#define USBC_USBINTR_AAE_SHIFT (5U) +/*! AAE - HOST only + */ +#define USBC_USBINTR_AAE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_AAE_SHIFT)) & USBC_USBINTR_AAE_MASK) +#define USBC_USBINTR_URE_MASK (0x40U) +#define USBC_USBINTR_URE_SHIFT (6U) +#define USBC_USBINTR_URE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_URE_SHIFT)) & USBC_USBINTR_URE_MASK) +#define USBC_USBINTR_SRE_MASK (0x80U) +#define USBC_USBINTR_SRE_SHIFT (7U) +#define USBC_USBINTR_SRE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_SRE_SHIFT)) & USBC_USBINTR_SRE_MASK) +#define USBC_USBINTR_SLE_MASK (0x100U) +#define USBC_USBINTR_SLE_SHIFT (8U) +#define USBC_USBINTR_SLE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_SLE_SHIFT)) & USBC_USBINTR_SLE_MASK) +#define USBC_USBINTR_RESERVED_9_MASK (0x200U) +#define USBC_USBINTR_RESERVED_9_SHIFT (9U) +#define USBC_USBINTR_RESERVED_9(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_9_SHIFT)) & USBC_USBINTR_RESERVED_9_MASK) +#define USBC_USBINTR_ULPE_MASK (0x400U) +#define USBC_USBINTR_ULPE_SHIFT (10U) +/*! ULPE - ONLY used VUSB_HS_PHY_ULPI =1 + */ +#define USBC_USBINTR_ULPE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_ULPE_SHIFT)) & USBC_USBINTR_ULPE_MASK) +#define USBC_USBINTR_RESERVED_11_MASK (0x800U) +#define USBC_USBINTR_RESERVED_11_SHIFT (11U) +#define USBC_USBINTR_RESERVED_11(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_11_SHIFT)) & USBC_USBINTR_RESERVED_11_MASK) +#define USBC_USBINTR_RESERVED_12_MASK (0x1000U) +#define USBC_USBINTR_RESERVED_12_SHIFT (12U) +#define USBC_USBINTR_RESERVED_12(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_12_SHIFT)) & USBC_USBINTR_RESERVED_12_MASK) +#define USBC_USBINTR_RESERVED_13_MASK (0x2000U) +#define USBC_USBINTR_RESERVED_13_SHIFT (13U) +/*! Reserved_13 - Not define in DUT,RCL + */ +#define USBC_USBINTR_RESERVED_13(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_13_SHIFT)) & USBC_USBINTR_RESERVED_13_MASK) +#define USBC_USBINTR_RESERVED_14_MASK (0x4000U) +#define USBC_USBINTR_RESERVED_14_SHIFT (14U) +/*! Reserved_14 - Not define in DUT, PS + */ +#define USBC_USBINTR_RESERVED_14(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_14_SHIFT)) & USBC_USBINTR_RESERVED_14_MASK) +#define USBC_USBINTR_RESERVED_15_MASK (0x8000U) +#define USBC_USBINTR_RESERVED_15_SHIFT (15U) +/*! Reserved_15 - Not define in DUT, AS + */ +#define USBC_USBINTR_RESERVED_15(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_15_SHIFT)) & USBC_USBINTR_RESERVED_15_MASK) +#define USBC_USBINTR_NAKE_MASK (0x10000U) +#define USBC_USBINTR_NAKE_SHIFT (16U) +#define USBC_USBINTR_NAKE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_NAKE_SHIFT)) & USBC_USBINTR_NAKE_MASK) +#define USBC_USBINTR_RESERVED_17_MASK (0x20000U) +#define USBC_USBINTR_RESERVED_17_SHIFT (17U) +#define USBC_USBINTR_RESERVED_17(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_17_SHIFT)) & USBC_USBINTR_RESERVED_17_MASK) +#define USBC_USBINTR_UAE_MASK (0x40000U) +#define USBC_USBINTR_UAE_SHIFT (18U) +/*! UAE - Not use in Device mode + */ +#define USBC_USBINTR_UAE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_UAE_SHIFT)) & USBC_USBINTR_UAE_MASK) +#define USBC_USBINTR_UPE_MASK (0x80000U) +#define USBC_USBINTR_UPE_SHIFT (19U) +/*! UPE - Not use in Device mode + */ +#define USBC_USBINTR_UPE(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_UPE_SHIFT)) & USBC_USBINTR_UPE_MASK) +#define USBC_USBINTR_RESERVED_20_MASK (0xF00000U) +#define USBC_USBINTR_RESERVED_20_SHIFT (20U) +#define USBC_USBINTR_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_20_SHIFT)) & USBC_USBINTR_RESERVED_20_MASK) +#define USBC_USBINTR_TIE0_MASK (0x1000000U) +#define USBC_USBINTR_TIE0_SHIFT (24U) +#define USBC_USBINTR_TIE0(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_TIE0_SHIFT)) & USBC_USBINTR_TIE0_MASK) +#define USBC_USBINTR_TIE1_MASK (0x2000000U) +#define USBC_USBINTR_TIE1_SHIFT (25U) +#define USBC_USBINTR_TIE1(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_TIE1_SHIFT)) & USBC_USBINTR_TIE1_MASK) +#define USBC_USBINTR_RESERVED_26_MASK (0xFC000000U) +#define USBC_USBINTR_RESERVED_26_SHIFT (26U) +#define USBC_USBINTR_RESERVED_26(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBINTR_RESERVED_26_SHIFT)) & USBC_USBINTR_RESERVED_26_MASK) +/*! @} */ + +/*! @name FRINDEX - */ +/*! @{ */ +#define USBC_FRINDEX_FRINDEX_MASK (0x3FFFU) +#define USBC_FRINDEX_FRINDEX_SHIFT (0U) +/*! FRINDEX - device RO, Host RW + */ +#define USBC_FRINDEX_FRINDEX(x) (((uint32_t)(((uint32_t)(x)) << USBC_FRINDEX_FRINDEX_SHIFT)) & USBC_FRINDEX_FRINDEX_MASK) +#define USBC_FRINDEX_RESERVED_14_MASK (0xFFFFC000U) +#define USBC_FRINDEX_RESERVED_14_SHIFT (14U) +#define USBC_FRINDEX_RESERVED_14(x) (((uint32_t)(((uint32_t)(x)) << USBC_FRINDEX_RESERVED_14_SHIFT)) & USBC_FRINDEX_RESERVED_14_MASK) +/*! @} */ + +/*! @name PERIODICLISTBASE - */ +/*! @{ */ +#define USBC_PERIODICLISTBASE_RESERVED_0_MASK (0xFFFFFFU) +#define USBC_PERIODICLISTBASE_RESERVED_0_SHIFT (0U) +#define USBC_PERIODICLISTBASE_RESERVED_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_PERIODICLISTBASE_RESERVED_0_SHIFT)) & USBC_PERIODICLISTBASE_RESERVED_0_MASK) +#define USBC_PERIODICLISTBASE_USBADRA_MASK (0x1000000U) +#define USBC_PERIODICLISTBASE_USBADRA_SHIFT (24U) +#define USBC_PERIODICLISTBASE_USBADRA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PERIODICLISTBASE_USBADRA_SHIFT)) & USBC_PERIODICLISTBASE_USBADRA_MASK) +#define USBC_PERIODICLISTBASE_USBADR_MASK (0xFE000000U) +#define USBC_PERIODICLISTBASE_USBADR_SHIFT (25U) +#define USBC_PERIODICLISTBASE_USBADR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PERIODICLISTBASE_USBADR_SHIFT)) & USBC_PERIODICLISTBASE_USBADR_MASK) +/*! @} */ + +/*! @name ASYNCLISTADDR - */ +/*! @{ */ +#define USBC_ASYNCLISTADDR_RESERVED_0_MASK (0x7FFU) +#define USBC_ASYNCLISTADDR_RESERVED_0_SHIFT (0U) +#define USBC_ASYNCLISTADDR_RESERVED_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_ASYNCLISTADDR_RESERVED_0_SHIFT)) & USBC_ASYNCLISTADDR_RESERVED_0_MASK) +#define USBC_ASYNCLISTADDR_EPBASE_MASK (0xFFFFF800U) +#define USBC_ASYNCLISTADDR_EPBASE_SHIFT (11U) +#define USBC_ASYNCLISTADDR_EPBASE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ASYNCLISTADDR_EPBASE_SHIFT)) & USBC_ASYNCLISTADDR_EPBASE_MASK) +/*! @} */ + +/*! @name TTCTRL - */ +/*! @{ */ +#define USBC_TTCTRL_TTAS_MASK (0x1U) +#define USBC_TTCTRL_TTAS_SHIFT (0U) +#define USBC_TTCTRL_TTAS(x) (((uint32_t)(((uint32_t)(x)) << USBC_TTCTRL_TTAS_SHIFT)) & USBC_TTCTRL_TTAS_MASK) +#define USBC_TTCTRL_TTAC_MASK (0x2U) +#define USBC_TTCTRL_TTAC_SHIFT (1U) +#define USBC_TTCTRL_TTAC(x) (((uint32_t)(((uint32_t)(x)) << USBC_TTCTRL_TTAC_SHIFT)) & USBC_TTCTRL_TTAC_MASK) +#define USBC_TTCTRL_RESERVED_2_MASK (0xFFFFFCU) +#define USBC_TTCTRL_RESERVED_2_SHIFT (2U) +#define USBC_TTCTRL_RESERVED_2(x) (((uint32_t)(((uint32_t)(x)) << USBC_TTCTRL_RESERVED_2_SHIFT)) & USBC_TTCTRL_RESERVED_2_MASK) +#define USBC_TTCTRL_TTHA_MASK (0x7F000000U) +#define USBC_TTCTRL_TTHA_SHIFT (24U) +#define USBC_TTCTRL_TTHA(x) (((uint32_t)(((uint32_t)(x)) << USBC_TTCTRL_TTHA_SHIFT)) & USBC_TTCTRL_TTHA_MASK) +#define USBC_TTCTRL_RESERVED_31_MASK (0x80000000U) +#define USBC_TTCTRL_RESERVED_31_SHIFT (31U) +#define USBC_TTCTRL_RESERVED_31(x) (((uint32_t)(((uint32_t)(x)) << USBC_TTCTRL_RESERVED_31_SHIFT)) & USBC_TTCTRL_RESERVED_31_MASK) +/*! @} */ + +/*! @name BURSTSIZE - */ +/*! @{ */ +#define USBC_BURSTSIZE_RXPBURST_MASK (0xFFU) +#define USBC_BURSTSIZE_RXPBURST_SHIFT (0U) +#define USBC_BURSTSIZE_RXPBURST(x) (((uint32_t)(((uint32_t)(x)) << USBC_BURSTSIZE_RXPBURST_SHIFT)) & USBC_BURSTSIZE_RXPBURST_MASK) +#define USBC_BURSTSIZE_TXPBURST_MASK (0xFF00U) +#define USBC_BURSTSIZE_TXPBURST_SHIFT (8U) +#define USBC_BURSTSIZE_TXPBURST(x) (((uint32_t)(((uint32_t)(x)) << USBC_BURSTSIZE_TXPBURST_SHIFT)) & USBC_BURSTSIZE_TXPBURST_MASK) +#define USBC_BURSTSIZE_RESERVED_16_MASK (0xFFFF0000U) +#define USBC_BURSTSIZE_RESERVED_16_SHIFT (16U) +#define USBC_BURSTSIZE_RESERVED_16(x) (((uint32_t)(((uint32_t)(x)) << USBC_BURSTSIZE_RESERVED_16_SHIFT)) & USBC_BURSTSIZE_RESERVED_16_MASK) +/*! @} */ + +/*! @name TXFILLTUNING - */ +/*! @{ */ +#define USBC_TXFILLTUNING_TXSCHOH_MASK (0x7FU) +#define USBC_TXFILLTUNING_TXSCHOH_SHIFT (0U) +/*! TXSCHOH - Only use in HOST & MPH mode + */ +#define USBC_TXFILLTUNING_TXSCHOH(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXFILLTUNING_TXSCHOH_SHIFT)) & USBC_TXFILLTUNING_TXSCHOH_MASK) +#define USBC_TXFILLTUNING_RESERVED_7_MASK (0x80U) +#define USBC_TXFILLTUNING_RESERVED_7_SHIFT (7U) +#define USBC_TXFILLTUNING_RESERVED_7(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXFILLTUNING_RESERVED_7_SHIFT)) & USBC_TXFILLTUNING_RESERVED_7_MASK) +#define USBC_TXFILLTUNING_TXSCHHEALTH_MASK (0x1F00U) +#define USBC_TXFILLTUNING_TXSCHHEALTH_SHIFT (8U) +/*! TXSCHHEALTH - Only use in HOST & MPH mode, rwc + */ +#define USBC_TXFILLTUNING_TXSCHHEALTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXFILLTUNING_TXSCHHEALTH_SHIFT)) & USBC_TXFILLTUNING_TXSCHHEALTH_MASK) +#define USBC_TXFILLTUNING_RESERVED_13_MASK (0xE000U) +#define USBC_TXFILLTUNING_RESERVED_13_SHIFT (13U) +#define USBC_TXFILLTUNING_RESERVED_13(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXFILLTUNING_RESERVED_13_SHIFT)) & USBC_TXFILLTUNING_RESERVED_13_MASK) +#define USBC_TXFILLTUNING_TXFIFOTHRES_MASK (0x3F0000U) +#define USBC_TXFILLTUNING_TXFIFOTHRES_SHIFT (16U) +/*! TXFIFOTHRES - Only use in HOST & MPH mode + */ +#define USBC_TXFILLTUNING_TXFIFOTHRES(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXFILLTUNING_TXFIFOTHRES_SHIFT)) & USBC_TXFILLTUNING_TXFIFOTHRES_MASK) +#define USBC_TXFILLTUNING_RESERVED_22_MASK (0xFFC00000U) +#define USBC_TXFILLTUNING_RESERVED_22_SHIFT (22U) +#define USBC_TXFILLTUNING_RESERVED_22(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXFILLTUNING_RESERVED_22_SHIFT)) & USBC_TXFILLTUNING_RESERVED_22_MASK) +/*! @} */ + +/*! @name TXTTFILLTUNING - */ +/*! @{ */ +#define USBC_TXTTFILLTUNING_TXTTSCHOH_MASK (0x1FU) +#define USBC_TXTTFILLTUNING_TXTTSCHOH_SHIFT (0U) +/*! TXTTSCHOH - Only use in HOST & MPH mode + */ +#define USBC_TXTTFILLTUNING_TXTTSCHOH(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXTTFILLTUNING_TXTTSCHOH_SHIFT)) & USBC_TXTTFILLTUNING_TXTTSCHOH_MASK) +#define USBC_TXTTFILLTUNING_RESERVED_5_MASK (0xE0U) +#define USBC_TXTTFILLTUNING_RESERVED_5_SHIFT (5U) +#define USBC_TXTTFILLTUNING_RESERVED_5(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXTTFILLTUNING_RESERVED_5_SHIFT)) & USBC_TXTTFILLTUNING_RESERVED_5_MASK) +#define USBC_TXTTFILLTUNING_TXTTSCHHEALTJ_MASK (0x1F00U) +#define USBC_TXTTFILLTUNING_TXTTSCHHEALTJ_SHIFT (8U) +/*! TXTTSCHHEALTJ - Only use in HOST & MPH mode, rwc + */ +#define USBC_TXTTFILLTUNING_TXTTSCHHEALTJ(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXTTFILLTUNING_TXTTSCHHEALTJ_SHIFT)) & USBC_TXTTFILLTUNING_TXTTSCHHEALTJ_MASK) +#define USBC_TXTTFILLTUNING_RESERVED_13_MASK (0xFFFFE000U) +#define USBC_TXTTFILLTUNING_RESERVED_13_SHIFT (13U) +#define USBC_TXTTFILLTUNING_RESERVED_13(x) (((uint32_t)(((uint32_t)(x)) << USBC_TXTTFILLTUNING_RESERVED_13_SHIFT)) & USBC_TXTTFILLTUNING_RESERVED_13_MASK) +/*! @} */ + +/*! @name IC_USB - */ +/*! @{ */ +#define USBC_IC_USB_IC_VDD1_MASK (0x7U) +#define USBC_IC_USB_IC_VDD1_SHIFT (0U) +/*! IC_VDD1 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD1(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD1_SHIFT)) & USBC_IC_USB_IC_VDD1_MASK) +#define USBC_IC_USB_IC1_MASK (0x8U) +#define USBC_IC_USB_IC1_SHIFT (3U) +/*! IC1 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC1(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC1_SHIFT)) & USBC_IC_USB_IC1_MASK) +#define USBC_IC_USB_IC_VDD2_MASK (0x70U) +#define USBC_IC_USB_IC_VDD2_SHIFT (4U) +/*! IC_VDD2 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD2(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD2_SHIFT)) & USBC_IC_USB_IC_VDD2_MASK) +#define USBC_IC_USB_IC2_MASK (0x80U) +#define USBC_IC_USB_IC2_SHIFT (7U) +/*! IC2 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC2(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC2_SHIFT)) & USBC_IC_USB_IC2_MASK) +#define USBC_IC_USB_IC_VDD3_MASK (0x700U) +#define USBC_IC_USB_IC_VDD3_SHIFT (8U) +/*! IC_VDD3 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD3(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD3_SHIFT)) & USBC_IC_USB_IC_VDD3_MASK) +#define USBC_IC_USB_IC3_MASK (0x800U) +#define USBC_IC_USB_IC3_SHIFT (11U) +/*! IC3 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC3(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC3_SHIFT)) & USBC_IC_USB_IC3_MASK) +#define USBC_IC_USB_IC_VDD4_MASK (0x7000U) +#define USBC_IC_USB_IC_VDD4_SHIFT (12U) +/*! IC_VDD4 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD4(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD4_SHIFT)) & USBC_IC_USB_IC_VDD4_MASK) +#define USBC_IC_USB_IC4_MASK (0x8000U) +#define USBC_IC_USB_IC4_SHIFT (15U) +/*! IC4 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC4(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC4_SHIFT)) & USBC_IC_USB_IC4_MASK) +#define USBC_IC_USB_IC_VDD5_MASK (0x70000U) +#define USBC_IC_USB_IC_VDD5_SHIFT (16U) +/*! IC_VDD5 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD5(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD5_SHIFT)) & USBC_IC_USB_IC_VDD5_MASK) +#define USBC_IC_USB_IC5_MASK (0x80000U) +#define USBC_IC_USB_IC5_SHIFT (19U) +/*! IC5 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC5(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC5_SHIFT)) & USBC_IC_USB_IC5_MASK) +#define USBC_IC_USB_IC_VDD6_MASK (0x700000U) +#define USBC_IC_USB_IC_VDD6_SHIFT (20U) +/*! IC_VDD6 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD6(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD6_SHIFT)) & USBC_IC_USB_IC_VDD6_MASK) +#define USBC_IC_USB_IC6_MASK (0x800000U) +#define USBC_IC_USB_IC6_SHIFT (23U) +/*! IC6 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC6(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC6_SHIFT)) & USBC_IC_USB_IC6_MASK) +#define USBC_IC_USB_IC_VDD7_MASK (0x7000000U) +#define USBC_IC_USB_IC_VDD7_SHIFT (24U) +/*! IC_VDD7 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD7(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD7_SHIFT)) & USBC_IC_USB_IC_VDD7_MASK) +#define USBC_IC_USB_IC7_MASK (0x8000000U) +#define USBC_IC_USB_IC7_SHIFT (27U) +/*! IC7 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC7(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC7_SHIFT)) & USBC_IC_USB_IC7_MASK) +#define USBC_IC_USB_IC_VDD8_MASK (0x70000000U) +#define USBC_IC_USB_IC_VDD8_SHIFT (28U) +/*! IC_VDD8 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC_VDD8(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC_VDD8_SHIFT)) & USBC_IC_USB_IC_VDD8_MASK) +#define USBC_IC_USB_IC8_MASK (0x80000000U) +#define USBC_IC_USB_IC8_SHIFT (31U) +/*! IC8 - available in MPH & VUSB_HS_PHY_IC_USB =1 + */ +#define USBC_IC_USB_IC8(x) (((uint32_t)(((uint32_t)(x)) << USBC_IC_USB_IC8_SHIFT)) & USBC_IC_USB_IC8_MASK) +/*! @} */ + +/*! @name ULPI_VIEWPORT - */ +/*! @{ */ +#define USBC_ULPI_VIEWPORT_ULPIDATWR_MASK (0xFFU) +#define USBC_ULPI_VIEWPORT_ULPIDATWR_SHIFT (0U) +/*! ULPIDATWR - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPIDATWR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPIDATWR_SHIFT)) & USBC_ULPI_VIEWPORT_ULPIDATWR_MASK) +#define USBC_ULPI_VIEWPORT_ULPIDATRD_MASK (0xFF00U) +#define USBC_ULPI_VIEWPORT_ULPIDATRD_SHIFT (8U) +/*! ULPIDATRD - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPIDATRD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPIDATRD_SHIFT)) & USBC_ULPI_VIEWPORT_ULPIDATRD_MASK) +#define USBC_ULPI_VIEWPORT_ULPIADDR_MASK (0xFF0000U) +#define USBC_ULPI_VIEWPORT_ULPIADDR_SHIFT (16U) +/*! ULPIADDR - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPIADDR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPIADDR_SHIFT)) & USBC_ULPI_VIEWPORT_ULPIADDR_MASK) +#define USBC_ULPI_VIEWPORT_ULPIPORT_MASK (0x7000000U) +#define USBC_ULPI_VIEWPORT_ULPIPORT_SHIFT (24U) +/*! ULPIPORT - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPIPORT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPIPORT_SHIFT)) & USBC_ULPI_VIEWPORT_ULPIPORT_MASK) +#define USBC_ULPI_VIEWPORT_ULPISS_MASK (0x8000000U) +#define USBC_ULPI_VIEWPORT_ULPISS_SHIFT (27U) +/*! ULPISS - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPISS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPISS_SHIFT)) & USBC_ULPI_VIEWPORT_ULPISS_MASK) +#define USBC_ULPI_VIEWPORT_RESERVED_28_MASK (0x10000000U) +#define USBC_ULPI_VIEWPORT_RESERVED_28_SHIFT (28U) +/*! Reserved_28 - Not available + */ +#define USBC_ULPI_VIEWPORT_RESERVED_28(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_RESERVED_28_SHIFT)) & USBC_ULPI_VIEWPORT_RESERVED_28_MASK) +#define USBC_ULPI_VIEWPORT_ULPIRW_MASK (0x20000000U) +#define USBC_ULPI_VIEWPORT_ULPIRW_SHIFT (29U) +/*! ULPIRW - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPIRW(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPIRW_SHIFT)) & USBC_ULPI_VIEWPORT_ULPIRW_MASK) +#define USBC_ULPI_VIEWPORT_ULPIRUN_MASK (0x40000000U) +#define USBC_ULPI_VIEWPORT_ULPIRUN_SHIFT (30U) +/*! ULPIRUN - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPIRUN(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPIRUN_SHIFT)) & USBC_ULPI_VIEWPORT_ULPIRUN_MASK) +#define USBC_ULPI_VIEWPORT_ULPIWU_MASK (0x80000000U) +#define USBC_ULPI_VIEWPORT_ULPIWU_SHIFT (31U) +/*! ULPIWU - Not available + */ +#define USBC_ULPI_VIEWPORT_ULPIWU(x) (((uint32_t)(((uint32_t)(x)) << USBC_ULPI_VIEWPORT_ULPIWU_SHIFT)) & USBC_ULPI_VIEWPORT_ULPIWU_MASK) +/*! @} */ + +/*! @name ENDPTNAK - */ +/*! @{ */ +#define USBC_ENDPTNAK_EPRN_MASK (0xFFFFU) +#define USBC_ENDPTNAK_EPRN_SHIFT (0U) +/*! EPRN - rwc + */ +#define USBC_ENDPTNAK_EPRN(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTNAK_EPRN_SHIFT)) & USBC_ENDPTNAK_EPRN_MASK) +#define USBC_ENDPTNAK_EPTN_MASK (0xFFFF0000U) +#define USBC_ENDPTNAK_EPTN_SHIFT (16U) +/*! EPTN - rwc + */ +#define USBC_ENDPTNAK_EPTN(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTNAK_EPTN_SHIFT)) & USBC_ENDPTNAK_EPTN_MASK) +/*! @} */ + +/*! @name ENDPTNAKEN - */ +/*! @{ */ +#define USBC_ENDPTNAKEN_EPRNE_MASK (0xFFFFU) +#define USBC_ENDPTNAKEN_EPRNE_SHIFT (0U) +/*! EPRNE - Only 3 PHY max + */ +#define USBC_ENDPTNAKEN_EPRNE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTNAKEN_EPRNE_SHIFT)) & USBC_ENDPTNAKEN_EPRNE_MASK) +#define USBC_ENDPTNAKEN_EPTNE_MASK (0xFFFF0000U) +#define USBC_ENDPTNAKEN_EPTNE_SHIFT (16U) +/*! EPTNE - Only 3 PHY max + */ +#define USBC_ENDPTNAKEN_EPTNE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTNAKEN_EPTNE_SHIFT)) & USBC_ENDPTNAKEN_EPTNE_MASK) +/*! @} */ + +/*! @name PORTSC1 - */ +/*! @{ */ +#define USBC_PORTSC1_CCS_MASK (0x1U) +#define USBC_PORTSC1_CCS_SHIFT (0U) +#define USBC_PORTSC1_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_CCS_SHIFT)) & USBC_PORTSC1_CCS_MASK) +#define USBC_PORTSC1_CSC_MASK (0x2U) +#define USBC_PORTSC1_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC1_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_CSC_SHIFT)) & USBC_PORTSC1_CSC_MASK) +#define USBC_PORTSC1_PE_MASK (0x4U) +#define USBC_PORTSC1_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC1_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PE_SHIFT)) & USBC_PORTSC1_PE_MASK) +#define USBC_PORTSC1_PEC_MASK (0x8U) +#define USBC_PORTSC1_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC1_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PEC_SHIFT)) & USBC_PORTSC1_PEC_MASK) +#define USBC_PORTSC1_OCA_MASK (0x10U) +#define USBC_PORTSC1_OCA_SHIFT (4U) +#define USBC_PORTSC1_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_OCA_SHIFT)) & USBC_PORTSC1_OCA_MASK) +#define USBC_PORTSC1_OCC_MASK (0x20U) +#define USBC_PORTSC1_OCC_SHIFT (5U) +#define USBC_PORTSC1_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_OCC_SHIFT)) & USBC_PORTSC1_OCC_MASK) +#define USBC_PORTSC1_FPR_MASK (0x40U) +#define USBC_PORTSC1_FPR_SHIFT (6U) +#define USBC_PORTSC1_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_FPR_SHIFT)) & USBC_PORTSC1_FPR_MASK) +#define USBC_PORTSC1_SUSP_MASK (0x80U) +#define USBC_PORTSC1_SUSP_SHIFT (7U) +#define USBC_PORTSC1_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_SUSP_SHIFT)) & USBC_PORTSC1_SUSP_MASK) +#define USBC_PORTSC1_PR_MASK (0x100U) +#define USBC_PORTSC1_PR_SHIFT (8U) +#define USBC_PORTSC1_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PR_SHIFT)) & USBC_PORTSC1_PR_MASK) +#define USBC_PORTSC1_HSP_MASK (0x200U) +#define USBC_PORTSC1_HSP_SHIFT (9U) +#define USBC_PORTSC1_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_HSP_SHIFT)) & USBC_PORTSC1_HSP_MASK) +#define USBC_PORTSC1_LS_MASK (0xC00U) +#define USBC_PORTSC1_LS_SHIFT (10U) +#define USBC_PORTSC1_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_LS_SHIFT)) & USBC_PORTSC1_LS_MASK) +#define USBC_PORTSC1_PP_MASK (0x1000U) +#define USBC_PORTSC1_PP_SHIFT (12U) +#define USBC_PORTSC1_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PP_SHIFT)) & USBC_PORTSC1_PP_MASK) +#define USBC_PORTSC1_PO_MASK (0x2000U) +#define USBC_PORTSC1_PO_SHIFT (13U) +#define USBC_PORTSC1_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PO_SHIFT)) & USBC_PORTSC1_PO_MASK) +#define USBC_PORTSC1_PIC_MASK (0xC000U) +#define USBC_PORTSC1_PIC_SHIFT (14U) +#define USBC_PORTSC1_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PIC_SHIFT)) & USBC_PORTSC1_PIC_MASK) +#define USBC_PORTSC1_PTC_MASK (0xF0000U) +#define USBC_PORTSC1_PTC_SHIFT (16U) +#define USBC_PORTSC1_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PTC_SHIFT)) & USBC_PORTSC1_PTC_MASK) +#define USBC_PORTSC1_WKCN_MASK (0x100000U) +#define USBC_PORTSC1_WKCN_SHIFT (20U) +#define USBC_PORTSC1_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_WKCN_SHIFT)) & USBC_PORTSC1_WKCN_MASK) +#define USBC_PORTSC1_WKDS_MASK (0x200000U) +#define USBC_PORTSC1_WKDS_SHIFT (21U) +#define USBC_PORTSC1_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_WKDS_SHIFT)) & USBC_PORTSC1_WKDS_MASK) +#define USBC_PORTSC1_WKOC_MASK (0x400000U) +#define USBC_PORTSC1_WKOC_SHIFT (22U) +#define USBC_PORTSC1_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_WKOC_SHIFT)) & USBC_PORTSC1_WKOC_MASK) +#define USBC_PORTSC1_PHCD_MASK (0x800000U) +#define USBC_PORTSC1_PHCD_SHIFT (23U) +#define USBC_PORTSC1_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PHCD_SHIFT)) & USBC_PORTSC1_PHCD_MASK) +#define USBC_PORTSC1_PFSC_MASK (0x1000000U) +#define USBC_PORTSC1_PFSC_SHIFT (24U) +#define USBC_PORTSC1_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PFSC_SHIFT)) & USBC_PORTSC1_PFSC_MASK) +#define USBC_PORTSC1_PTS2_MASK (0x2000000U) +#define USBC_PORTSC1_PTS2_SHIFT (25U) +#define USBC_PORTSC1_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PTS2_SHIFT)) & USBC_PORTSC1_PTS2_MASK) +#define USBC_PORTSC1_PSPD_MASK (0xC000000U) +#define USBC_PORTSC1_PSPD_SHIFT (26U) +#define USBC_PORTSC1_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PSPD_SHIFT)) & USBC_PORTSC1_PSPD_MASK) +#define USBC_PORTSC1_PTW_MASK (0x10000000U) +#define USBC_PORTSC1_PTW_SHIFT (28U) +#define USBC_PORTSC1_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PTW_SHIFT)) & USBC_PORTSC1_PTW_MASK) +#define USBC_PORTSC1_STS_MASK (0x20000000U) +#define USBC_PORTSC1_STS_SHIFT (29U) +#define USBC_PORTSC1_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_STS_SHIFT)) & USBC_PORTSC1_STS_MASK) +#define USBC_PORTSC1_PTS_MASK (0xC0000000U) +#define USBC_PORTSC1_PTS_SHIFT (30U) +#define USBC_PORTSC1_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC1_PTS_SHIFT)) & USBC_PORTSC1_PTS_MASK) +/*! @} */ + +/*! @name PORTSC2 - */ +/*! @{ */ +#define USBC_PORTSC2_CCS_MASK (0x1U) +#define USBC_PORTSC2_CCS_SHIFT (0U) +#define USBC_PORTSC2_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_CCS_SHIFT)) & USBC_PORTSC2_CCS_MASK) +#define USBC_PORTSC2_CSC_MASK (0x2U) +#define USBC_PORTSC2_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC2_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_CSC_SHIFT)) & USBC_PORTSC2_CSC_MASK) +#define USBC_PORTSC2_PE_MASK (0x4U) +#define USBC_PORTSC2_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC2_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PE_SHIFT)) & USBC_PORTSC2_PE_MASK) +#define USBC_PORTSC2_PEC_MASK (0x8U) +#define USBC_PORTSC2_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC2_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PEC_SHIFT)) & USBC_PORTSC2_PEC_MASK) +#define USBC_PORTSC2_OCA_MASK (0x10U) +#define USBC_PORTSC2_OCA_SHIFT (4U) +#define USBC_PORTSC2_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_OCA_SHIFT)) & USBC_PORTSC2_OCA_MASK) +#define USBC_PORTSC2_OCC_MASK (0x20U) +#define USBC_PORTSC2_OCC_SHIFT (5U) +#define USBC_PORTSC2_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_OCC_SHIFT)) & USBC_PORTSC2_OCC_MASK) +#define USBC_PORTSC2_FPR_MASK (0x40U) +#define USBC_PORTSC2_FPR_SHIFT (6U) +#define USBC_PORTSC2_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_FPR_SHIFT)) & USBC_PORTSC2_FPR_MASK) +#define USBC_PORTSC2_SUSP_MASK (0x80U) +#define USBC_PORTSC2_SUSP_SHIFT (7U) +#define USBC_PORTSC2_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_SUSP_SHIFT)) & USBC_PORTSC2_SUSP_MASK) +#define USBC_PORTSC2_PR_MASK (0x100U) +#define USBC_PORTSC2_PR_SHIFT (8U) +#define USBC_PORTSC2_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PR_SHIFT)) & USBC_PORTSC2_PR_MASK) +#define USBC_PORTSC2_HSP_MASK (0x200U) +#define USBC_PORTSC2_HSP_SHIFT (9U) +#define USBC_PORTSC2_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_HSP_SHIFT)) & USBC_PORTSC2_HSP_MASK) +#define USBC_PORTSC2_LS_MASK (0xC00U) +#define USBC_PORTSC2_LS_SHIFT (10U) +#define USBC_PORTSC2_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_LS_SHIFT)) & USBC_PORTSC2_LS_MASK) +#define USBC_PORTSC2_PP_MASK (0x1000U) +#define USBC_PORTSC2_PP_SHIFT (12U) +#define USBC_PORTSC2_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PP_SHIFT)) & USBC_PORTSC2_PP_MASK) +#define USBC_PORTSC2_PO_MASK (0x2000U) +#define USBC_PORTSC2_PO_SHIFT (13U) +#define USBC_PORTSC2_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PO_SHIFT)) & USBC_PORTSC2_PO_MASK) +#define USBC_PORTSC2_PIC_MASK (0xC000U) +#define USBC_PORTSC2_PIC_SHIFT (14U) +#define USBC_PORTSC2_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PIC_SHIFT)) & USBC_PORTSC2_PIC_MASK) +#define USBC_PORTSC2_PTC_MASK (0xF0000U) +#define USBC_PORTSC2_PTC_SHIFT (16U) +#define USBC_PORTSC2_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PTC_SHIFT)) & USBC_PORTSC2_PTC_MASK) +#define USBC_PORTSC2_WKCN_MASK (0x100000U) +#define USBC_PORTSC2_WKCN_SHIFT (20U) +#define USBC_PORTSC2_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_WKCN_SHIFT)) & USBC_PORTSC2_WKCN_MASK) +#define USBC_PORTSC2_WKDS_MASK (0x200000U) +#define USBC_PORTSC2_WKDS_SHIFT (21U) +#define USBC_PORTSC2_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_WKDS_SHIFT)) & USBC_PORTSC2_WKDS_MASK) +#define USBC_PORTSC2_WKOC_MASK (0x400000U) +#define USBC_PORTSC2_WKOC_SHIFT (22U) +#define USBC_PORTSC2_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_WKOC_SHIFT)) & USBC_PORTSC2_WKOC_MASK) +#define USBC_PORTSC2_PHCD_MASK (0x800000U) +#define USBC_PORTSC2_PHCD_SHIFT (23U) +#define USBC_PORTSC2_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PHCD_SHIFT)) & USBC_PORTSC2_PHCD_MASK) +#define USBC_PORTSC2_PFSC_MASK (0x1000000U) +#define USBC_PORTSC2_PFSC_SHIFT (24U) +#define USBC_PORTSC2_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PFSC_SHIFT)) & USBC_PORTSC2_PFSC_MASK) +#define USBC_PORTSC2_PTS2_MASK (0x2000000U) +#define USBC_PORTSC2_PTS2_SHIFT (25U) +#define USBC_PORTSC2_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PTS2_SHIFT)) & USBC_PORTSC2_PTS2_MASK) +#define USBC_PORTSC2_PSPD_MASK (0xC000000U) +#define USBC_PORTSC2_PSPD_SHIFT (26U) +#define USBC_PORTSC2_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PSPD_SHIFT)) & USBC_PORTSC2_PSPD_MASK) +#define USBC_PORTSC2_PTW_MASK (0x10000000U) +#define USBC_PORTSC2_PTW_SHIFT (28U) +#define USBC_PORTSC2_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PTW_SHIFT)) & USBC_PORTSC2_PTW_MASK) +#define USBC_PORTSC2_STS_MASK (0x20000000U) +#define USBC_PORTSC2_STS_SHIFT (29U) +#define USBC_PORTSC2_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_STS_SHIFT)) & USBC_PORTSC2_STS_MASK) +#define USBC_PORTSC2_PTS_MASK (0xC0000000U) +#define USBC_PORTSC2_PTS_SHIFT (30U) +#define USBC_PORTSC2_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC2_PTS_SHIFT)) & USBC_PORTSC2_PTS_MASK) +/*! @} */ + +/*! @name PORTSC3 - */ +/*! @{ */ +#define USBC_PORTSC3_CCS_MASK (0x1U) +#define USBC_PORTSC3_CCS_SHIFT (0U) +#define USBC_PORTSC3_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_CCS_SHIFT)) & USBC_PORTSC3_CCS_MASK) +#define USBC_PORTSC3_CSC_MASK (0x2U) +#define USBC_PORTSC3_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC3_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_CSC_SHIFT)) & USBC_PORTSC3_CSC_MASK) +#define USBC_PORTSC3_PE_MASK (0x4U) +#define USBC_PORTSC3_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC3_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PE_SHIFT)) & USBC_PORTSC3_PE_MASK) +#define USBC_PORTSC3_PEC_MASK (0x8U) +#define USBC_PORTSC3_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC3_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PEC_SHIFT)) & USBC_PORTSC3_PEC_MASK) +#define USBC_PORTSC3_OCA_MASK (0x10U) +#define USBC_PORTSC3_OCA_SHIFT (4U) +#define USBC_PORTSC3_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_OCA_SHIFT)) & USBC_PORTSC3_OCA_MASK) +#define USBC_PORTSC3_OCC_MASK (0x20U) +#define USBC_PORTSC3_OCC_SHIFT (5U) +#define USBC_PORTSC3_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_OCC_SHIFT)) & USBC_PORTSC3_OCC_MASK) +#define USBC_PORTSC3_FPR_MASK (0x40U) +#define USBC_PORTSC3_FPR_SHIFT (6U) +#define USBC_PORTSC3_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_FPR_SHIFT)) & USBC_PORTSC3_FPR_MASK) +#define USBC_PORTSC3_SUSP_MASK (0x80U) +#define USBC_PORTSC3_SUSP_SHIFT (7U) +#define USBC_PORTSC3_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_SUSP_SHIFT)) & USBC_PORTSC3_SUSP_MASK) +#define USBC_PORTSC3_PR_MASK (0x100U) +#define USBC_PORTSC3_PR_SHIFT (8U) +#define USBC_PORTSC3_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PR_SHIFT)) & USBC_PORTSC3_PR_MASK) +#define USBC_PORTSC3_HSP_MASK (0x200U) +#define USBC_PORTSC3_HSP_SHIFT (9U) +#define USBC_PORTSC3_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_HSP_SHIFT)) & USBC_PORTSC3_HSP_MASK) +#define USBC_PORTSC3_LS_MASK (0xC00U) +#define USBC_PORTSC3_LS_SHIFT (10U) +#define USBC_PORTSC3_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_LS_SHIFT)) & USBC_PORTSC3_LS_MASK) +#define USBC_PORTSC3_PP_MASK (0x1000U) +#define USBC_PORTSC3_PP_SHIFT (12U) +#define USBC_PORTSC3_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PP_SHIFT)) & USBC_PORTSC3_PP_MASK) +#define USBC_PORTSC3_PO_MASK (0x2000U) +#define USBC_PORTSC3_PO_SHIFT (13U) +#define USBC_PORTSC3_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PO_SHIFT)) & USBC_PORTSC3_PO_MASK) +#define USBC_PORTSC3_PIC_MASK (0xC000U) +#define USBC_PORTSC3_PIC_SHIFT (14U) +#define USBC_PORTSC3_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PIC_SHIFT)) & USBC_PORTSC3_PIC_MASK) +#define USBC_PORTSC3_PTC_MASK (0xF0000U) +#define USBC_PORTSC3_PTC_SHIFT (16U) +#define USBC_PORTSC3_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PTC_SHIFT)) & USBC_PORTSC3_PTC_MASK) +#define USBC_PORTSC3_WKCN_MASK (0x100000U) +#define USBC_PORTSC3_WKCN_SHIFT (20U) +#define USBC_PORTSC3_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_WKCN_SHIFT)) & USBC_PORTSC3_WKCN_MASK) +#define USBC_PORTSC3_WKDS_MASK (0x200000U) +#define USBC_PORTSC3_WKDS_SHIFT (21U) +#define USBC_PORTSC3_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_WKDS_SHIFT)) & USBC_PORTSC3_WKDS_MASK) +#define USBC_PORTSC3_WKOC_MASK (0x400000U) +#define USBC_PORTSC3_WKOC_SHIFT (22U) +#define USBC_PORTSC3_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_WKOC_SHIFT)) & USBC_PORTSC3_WKOC_MASK) +#define USBC_PORTSC3_PHCD_MASK (0x800000U) +#define USBC_PORTSC3_PHCD_SHIFT (23U) +#define USBC_PORTSC3_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PHCD_SHIFT)) & USBC_PORTSC3_PHCD_MASK) +#define USBC_PORTSC3_PFSC_MASK (0x1000000U) +#define USBC_PORTSC3_PFSC_SHIFT (24U) +#define USBC_PORTSC3_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PFSC_SHIFT)) & USBC_PORTSC3_PFSC_MASK) +#define USBC_PORTSC3_PTS2_MASK (0x2000000U) +#define USBC_PORTSC3_PTS2_SHIFT (25U) +#define USBC_PORTSC3_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PTS2_SHIFT)) & USBC_PORTSC3_PTS2_MASK) +#define USBC_PORTSC3_PSPD_MASK (0xC000000U) +#define USBC_PORTSC3_PSPD_SHIFT (26U) +#define USBC_PORTSC3_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PSPD_SHIFT)) & USBC_PORTSC3_PSPD_MASK) +#define USBC_PORTSC3_PTW_MASK (0x10000000U) +#define USBC_PORTSC3_PTW_SHIFT (28U) +#define USBC_PORTSC3_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PTW_SHIFT)) & USBC_PORTSC3_PTW_MASK) +#define USBC_PORTSC3_STS_MASK (0x20000000U) +#define USBC_PORTSC3_STS_SHIFT (29U) +#define USBC_PORTSC3_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_STS_SHIFT)) & USBC_PORTSC3_STS_MASK) +#define USBC_PORTSC3_PTS_MASK (0xC0000000U) +#define USBC_PORTSC3_PTS_SHIFT (30U) +#define USBC_PORTSC3_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC3_PTS_SHIFT)) & USBC_PORTSC3_PTS_MASK) +/*! @} */ + +/*! @name PORTSC4 - */ +/*! @{ */ +#define USBC_PORTSC4_CCS_MASK (0x1U) +#define USBC_PORTSC4_CCS_SHIFT (0U) +#define USBC_PORTSC4_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_CCS_SHIFT)) & USBC_PORTSC4_CCS_MASK) +#define USBC_PORTSC4_CSC_MASK (0x2U) +#define USBC_PORTSC4_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC4_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_CSC_SHIFT)) & USBC_PORTSC4_CSC_MASK) +#define USBC_PORTSC4_PE_MASK (0x4U) +#define USBC_PORTSC4_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC4_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PE_SHIFT)) & USBC_PORTSC4_PE_MASK) +#define USBC_PORTSC4_PEC_MASK (0x8U) +#define USBC_PORTSC4_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC4_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PEC_SHIFT)) & USBC_PORTSC4_PEC_MASK) +#define USBC_PORTSC4_OCA_MASK (0x10U) +#define USBC_PORTSC4_OCA_SHIFT (4U) +#define USBC_PORTSC4_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_OCA_SHIFT)) & USBC_PORTSC4_OCA_MASK) +#define USBC_PORTSC4_OCC_MASK (0x20U) +#define USBC_PORTSC4_OCC_SHIFT (5U) +#define USBC_PORTSC4_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_OCC_SHIFT)) & USBC_PORTSC4_OCC_MASK) +#define USBC_PORTSC4_FPR_MASK (0x40U) +#define USBC_PORTSC4_FPR_SHIFT (6U) +#define USBC_PORTSC4_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_FPR_SHIFT)) & USBC_PORTSC4_FPR_MASK) +#define USBC_PORTSC4_SUSP_MASK (0x80U) +#define USBC_PORTSC4_SUSP_SHIFT (7U) +#define USBC_PORTSC4_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_SUSP_SHIFT)) & USBC_PORTSC4_SUSP_MASK) +#define USBC_PORTSC4_PR_MASK (0x100U) +#define USBC_PORTSC4_PR_SHIFT (8U) +#define USBC_PORTSC4_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PR_SHIFT)) & USBC_PORTSC4_PR_MASK) +#define USBC_PORTSC4_HSP_MASK (0x200U) +#define USBC_PORTSC4_HSP_SHIFT (9U) +#define USBC_PORTSC4_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_HSP_SHIFT)) & USBC_PORTSC4_HSP_MASK) +#define USBC_PORTSC4_LS_MASK (0xC00U) +#define USBC_PORTSC4_LS_SHIFT (10U) +#define USBC_PORTSC4_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_LS_SHIFT)) & USBC_PORTSC4_LS_MASK) +#define USBC_PORTSC4_PP_MASK (0x1000U) +#define USBC_PORTSC4_PP_SHIFT (12U) +#define USBC_PORTSC4_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PP_SHIFT)) & USBC_PORTSC4_PP_MASK) +#define USBC_PORTSC4_PO_MASK (0x2000U) +#define USBC_PORTSC4_PO_SHIFT (13U) +#define USBC_PORTSC4_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PO_SHIFT)) & USBC_PORTSC4_PO_MASK) +#define USBC_PORTSC4_PIC_MASK (0xC000U) +#define USBC_PORTSC4_PIC_SHIFT (14U) +#define USBC_PORTSC4_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PIC_SHIFT)) & USBC_PORTSC4_PIC_MASK) +#define USBC_PORTSC4_PTC_MASK (0xF0000U) +#define USBC_PORTSC4_PTC_SHIFT (16U) +#define USBC_PORTSC4_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PTC_SHIFT)) & USBC_PORTSC4_PTC_MASK) +#define USBC_PORTSC4_WKCN_MASK (0x100000U) +#define USBC_PORTSC4_WKCN_SHIFT (20U) +#define USBC_PORTSC4_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_WKCN_SHIFT)) & USBC_PORTSC4_WKCN_MASK) +#define USBC_PORTSC4_WKDS_MASK (0x200000U) +#define USBC_PORTSC4_WKDS_SHIFT (21U) +#define USBC_PORTSC4_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_WKDS_SHIFT)) & USBC_PORTSC4_WKDS_MASK) +#define USBC_PORTSC4_WKOC_MASK (0x400000U) +#define USBC_PORTSC4_WKOC_SHIFT (22U) +#define USBC_PORTSC4_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_WKOC_SHIFT)) & USBC_PORTSC4_WKOC_MASK) +#define USBC_PORTSC4_PHCD_MASK (0x800000U) +#define USBC_PORTSC4_PHCD_SHIFT (23U) +#define USBC_PORTSC4_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PHCD_SHIFT)) & USBC_PORTSC4_PHCD_MASK) +#define USBC_PORTSC4_PFSC_MASK (0x1000000U) +#define USBC_PORTSC4_PFSC_SHIFT (24U) +#define USBC_PORTSC4_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PFSC_SHIFT)) & USBC_PORTSC4_PFSC_MASK) +#define USBC_PORTSC4_PTS2_MASK (0x2000000U) +#define USBC_PORTSC4_PTS2_SHIFT (25U) +#define USBC_PORTSC4_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PTS2_SHIFT)) & USBC_PORTSC4_PTS2_MASK) +#define USBC_PORTSC4_PSPD_MASK (0xC000000U) +#define USBC_PORTSC4_PSPD_SHIFT (26U) +#define USBC_PORTSC4_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PSPD_SHIFT)) & USBC_PORTSC4_PSPD_MASK) +#define USBC_PORTSC4_PTW_MASK (0x10000000U) +#define USBC_PORTSC4_PTW_SHIFT (28U) +#define USBC_PORTSC4_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PTW_SHIFT)) & USBC_PORTSC4_PTW_MASK) +#define USBC_PORTSC4_STS_MASK (0x20000000U) +#define USBC_PORTSC4_STS_SHIFT (29U) +#define USBC_PORTSC4_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_STS_SHIFT)) & USBC_PORTSC4_STS_MASK) +#define USBC_PORTSC4_PTS_MASK (0xC0000000U) +#define USBC_PORTSC4_PTS_SHIFT (30U) +#define USBC_PORTSC4_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC4_PTS_SHIFT)) & USBC_PORTSC4_PTS_MASK) +/*! @} */ + +/*! @name PORTSC5 - */ +/*! @{ */ +#define USBC_PORTSC5_CCS_MASK (0x1U) +#define USBC_PORTSC5_CCS_SHIFT (0U) +#define USBC_PORTSC5_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_CCS_SHIFT)) & USBC_PORTSC5_CCS_MASK) +#define USBC_PORTSC5_CSC_MASK (0x2U) +#define USBC_PORTSC5_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC5_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_CSC_SHIFT)) & USBC_PORTSC5_CSC_MASK) +#define USBC_PORTSC5_PE_MASK (0x4U) +#define USBC_PORTSC5_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC5_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PE_SHIFT)) & USBC_PORTSC5_PE_MASK) +#define USBC_PORTSC5_PEC_MASK (0x8U) +#define USBC_PORTSC5_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC5_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PEC_SHIFT)) & USBC_PORTSC5_PEC_MASK) +#define USBC_PORTSC5_OCA_MASK (0x10U) +#define USBC_PORTSC5_OCA_SHIFT (4U) +#define USBC_PORTSC5_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_OCA_SHIFT)) & USBC_PORTSC5_OCA_MASK) +#define USBC_PORTSC5_OCC_MASK (0x20U) +#define USBC_PORTSC5_OCC_SHIFT (5U) +#define USBC_PORTSC5_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_OCC_SHIFT)) & USBC_PORTSC5_OCC_MASK) +#define USBC_PORTSC5_FPR_MASK (0x40U) +#define USBC_PORTSC5_FPR_SHIFT (6U) +#define USBC_PORTSC5_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_FPR_SHIFT)) & USBC_PORTSC5_FPR_MASK) +#define USBC_PORTSC5_SUSP_MASK (0x80U) +#define USBC_PORTSC5_SUSP_SHIFT (7U) +#define USBC_PORTSC5_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_SUSP_SHIFT)) & USBC_PORTSC5_SUSP_MASK) +#define USBC_PORTSC5_PR_MASK (0x100U) +#define USBC_PORTSC5_PR_SHIFT (8U) +#define USBC_PORTSC5_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PR_SHIFT)) & USBC_PORTSC5_PR_MASK) +#define USBC_PORTSC5_HSP_MASK (0x200U) +#define USBC_PORTSC5_HSP_SHIFT (9U) +#define USBC_PORTSC5_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_HSP_SHIFT)) & USBC_PORTSC5_HSP_MASK) +#define USBC_PORTSC5_LS_MASK (0xC00U) +#define USBC_PORTSC5_LS_SHIFT (10U) +#define USBC_PORTSC5_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_LS_SHIFT)) & USBC_PORTSC5_LS_MASK) +#define USBC_PORTSC5_PP_MASK (0x1000U) +#define USBC_PORTSC5_PP_SHIFT (12U) +#define USBC_PORTSC5_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PP_SHIFT)) & USBC_PORTSC5_PP_MASK) +#define USBC_PORTSC5_PO_MASK (0x2000U) +#define USBC_PORTSC5_PO_SHIFT (13U) +#define USBC_PORTSC5_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PO_SHIFT)) & USBC_PORTSC5_PO_MASK) +#define USBC_PORTSC5_PIC_MASK (0xC000U) +#define USBC_PORTSC5_PIC_SHIFT (14U) +#define USBC_PORTSC5_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PIC_SHIFT)) & USBC_PORTSC5_PIC_MASK) +#define USBC_PORTSC5_PTC_MASK (0xF0000U) +#define USBC_PORTSC5_PTC_SHIFT (16U) +#define USBC_PORTSC5_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PTC_SHIFT)) & USBC_PORTSC5_PTC_MASK) +#define USBC_PORTSC5_WKCN_MASK (0x100000U) +#define USBC_PORTSC5_WKCN_SHIFT (20U) +#define USBC_PORTSC5_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_WKCN_SHIFT)) & USBC_PORTSC5_WKCN_MASK) +#define USBC_PORTSC5_WKDS_MASK (0x200000U) +#define USBC_PORTSC5_WKDS_SHIFT (21U) +#define USBC_PORTSC5_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_WKDS_SHIFT)) & USBC_PORTSC5_WKDS_MASK) +#define USBC_PORTSC5_WKOC_MASK (0x400000U) +#define USBC_PORTSC5_WKOC_SHIFT (22U) +#define USBC_PORTSC5_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_WKOC_SHIFT)) & USBC_PORTSC5_WKOC_MASK) +#define USBC_PORTSC5_PHCD_MASK (0x800000U) +#define USBC_PORTSC5_PHCD_SHIFT (23U) +#define USBC_PORTSC5_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PHCD_SHIFT)) & USBC_PORTSC5_PHCD_MASK) +#define USBC_PORTSC5_PFSC_MASK (0x1000000U) +#define USBC_PORTSC5_PFSC_SHIFT (24U) +#define USBC_PORTSC5_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PFSC_SHIFT)) & USBC_PORTSC5_PFSC_MASK) +#define USBC_PORTSC5_PTS2_MASK (0x2000000U) +#define USBC_PORTSC5_PTS2_SHIFT (25U) +#define USBC_PORTSC5_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PTS2_SHIFT)) & USBC_PORTSC5_PTS2_MASK) +#define USBC_PORTSC5_PSPD_MASK (0xC000000U) +#define USBC_PORTSC5_PSPD_SHIFT (26U) +#define USBC_PORTSC5_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PSPD_SHIFT)) & USBC_PORTSC5_PSPD_MASK) +#define USBC_PORTSC5_PTW_MASK (0x10000000U) +#define USBC_PORTSC5_PTW_SHIFT (28U) +#define USBC_PORTSC5_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PTW_SHIFT)) & USBC_PORTSC5_PTW_MASK) +#define USBC_PORTSC5_STS_MASK (0x20000000U) +#define USBC_PORTSC5_STS_SHIFT (29U) +#define USBC_PORTSC5_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_STS_SHIFT)) & USBC_PORTSC5_STS_MASK) +#define USBC_PORTSC5_PTS_MASK (0xC0000000U) +#define USBC_PORTSC5_PTS_SHIFT (30U) +#define USBC_PORTSC5_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC5_PTS_SHIFT)) & USBC_PORTSC5_PTS_MASK) +/*! @} */ + +/*! @name PORTSC6 - */ +/*! @{ */ +#define USBC_PORTSC6_CCS_MASK (0x1U) +#define USBC_PORTSC6_CCS_SHIFT (0U) +#define USBC_PORTSC6_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_CCS_SHIFT)) & USBC_PORTSC6_CCS_MASK) +#define USBC_PORTSC6_CSC_MASK (0x2U) +#define USBC_PORTSC6_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC6_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_CSC_SHIFT)) & USBC_PORTSC6_CSC_MASK) +#define USBC_PORTSC6_PE_MASK (0x4U) +#define USBC_PORTSC6_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC6_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PE_SHIFT)) & USBC_PORTSC6_PE_MASK) +#define USBC_PORTSC6_PEC_MASK (0x8U) +#define USBC_PORTSC6_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC6_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PEC_SHIFT)) & USBC_PORTSC6_PEC_MASK) +#define USBC_PORTSC6_OCA_MASK (0x10U) +#define USBC_PORTSC6_OCA_SHIFT (4U) +#define USBC_PORTSC6_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_OCA_SHIFT)) & USBC_PORTSC6_OCA_MASK) +#define USBC_PORTSC6_OCC_MASK (0x20U) +#define USBC_PORTSC6_OCC_SHIFT (5U) +#define USBC_PORTSC6_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_OCC_SHIFT)) & USBC_PORTSC6_OCC_MASK) +#define USBC_PORTSC6_FPR_MASK (0x40U) +#define USBC_PORTSC6_FPR_SHIFT (6U) +#define USBC_PORTSC6_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_FPR_SHIFT)) & USBC_PORTSC6_FPR_MASK) +#define USBC_PORTSC6_SUSP_MASK (0x80U) +#define USBC_PORTSC6_SUSP_SHIFT (7U) +#define USBC_PORTSC6_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_SUSP_SHIFT)) & USBC_PORTSC6_SUSP_MASK) +#define USBC_PORTSC6_PR_MASK (0x100U) +#define USBC_PORTSC6_PR_SHIFT (8U) +#define USBC_PORTSC6_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PR_SHIFT)) & USBC_PORTSC6_PR_MASK) +#define USBC_PORTSC6_HSP_MASK (0x200U) +#define USBC_PORTSC6_HSP_SHIFT (9U) +#define USBC_PORTSC6_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_HSP_SHIFT)) & USBC_PORTSC6_HSP_MASK) +#define USBC_PORTSC6_LS_MASK (0xC00U) +#define USBC_PORTSC6_LS_SHIFT (10U) +#define USBC_PORTSC6_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_LS_SHIFT)) & USBC_PORTSC6_LS_MASK) +#define USBC_PORTSC6_PP_MASK (0x1000U) +#define USBC_PORTSC6_PP_SHIFT (12U) +#define USBC_PORTSC6_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PP_SHIFT)) & USBC_PORTSC6_PP_MASK) +#define USBC_PORTSC6_PO_MASK (0x2000U) +#define USBC_PORTSC6_PO_SHIFT (13U) +#define USBC_PORTSC6_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PO_SHIFT)) & USBC_PORTSC6_PO_MASK) +#define USBC_PORTSC6_PIC_MASK (0xC000U) +#define USBC_PORTSC6_PIC_SHIFT (14U) +#define USBC_PORTSC6_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PIC_SHIFT)) & USBC_PORTSC6_PIC_MASK) +#define USBC_PORTSC6_PTC_MASK (0xF0000U) +#define USBC_PORTSC6_PTC_SHIFT (16U) +#define USBC_PORTSC6_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PTC_SHIFT)) & USBC_PORTSC6_PTC_MASK) +#define USBC_PORTSC6_WKCN_MASK (0x100000U) +#define USBC_PORTSC6_WKCN_SHIFT (20U) +#define USBC_PORTSC6_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_WKCN_SHIFT)) & USBC_PORTSC6_WKCN_MASK) +#define USBC_PORTSC6_WKDS_MASK (0x200000U) +#define USBC_PORTSC6_WKDS_SHIFT (21U) +#define USBC_PORTSC6_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_WKDS_SHIFT)) & USBC_PORTSC6_WKDS_MASK) +#define USBC_PORTSC6_WKOC_MASK (0x400000U) +#define USBC_PORTSC6_WKOC_SHIFT (22U) +#define USBC_PORTSC6_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_WKOC_SHIFT)) & USBC_PORTSC6_WKOC_MASK) +#define USBC_PORTSC6_PHCD_MASK (0x800000U) +#define USBC_PORTSC6_PHCD_SHIFT (23U) +#define USBC_PORTSC6_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PHCD_SHIFT)) & USBC_PORTSC6_PHCD_MASK) +#define USBC_PORTSC6_PFSC_MASK (0x1000000U) +#define USBC_PORTSC6_PFSC_SHIFT (24U) +#define USBC_PORTSC6_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PFSC_SHIFT)) & USBC_PORTSC6_PFSC_MASK) +#define USBC_PORTSC6_PTS2_MASK (0x2000000U) +#define USBC_PORTSC6_PTS2_SHIFT (25U) +#define USBC_PORTSC6_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PTS2_SHIFT)) & USBC_PORTSC6_PTS2_MASK) +#define USBC_PORTSC6_PSPD_MASK (0xC000000U) +#define USBC_PORTSC6_PSPD_SHIFT (26U) +#define USBC_PORTSC6_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PSPD_SHIFT)) & USBC_PORTSC6_PSPD_MASK) +#define USBC_PORTSC6_PTW_MASK (0x10000000U) +#define USBC_PORTSC6_PTW_SHIFT (28U) +#define USBC_PORTSC6_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PTW_SHIFT)) & USBC_PORTSC6_PTW_MASK) +#define USBC_PORTSC6_STS_MASK (0x20000000U) +#define USBC_PORTSC6_STS_SHIFT (29U) +#define USBC_PORTSC6_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_STS_SHIFT)) & USBC_PORTSC6_STS_MASK) +#define USBC_PORTSC6_PTS_MASK (0xC0000000U) +#define USBC_PORTSC6_PTS_SHIFT (30U) +#define USBC_PORTSC6_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC6_PTS_SHIFT)) & USBC_PORTSC6_PTS_MASK) +/*! @} */ + +/*! @name PORTSC7 - */ +/*! @{ */ +#define USBC_PORTSC7_CCS_MASK (0x1U) +#define USBC_PORTSC7_CCS_SHIFT (0U) +#define USBC_PORTSC7_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_CCS_SHIFT)) & USBC_PORTSC7_CCS_MASK) +#define USBC_PORTSC7_CSC_MASK (0x2U) +#define USBC_PORTSC7_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC7_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_CSC_SHIFT)) & USBC_PORTSC7_CSC_MASK) +#define USBC_PORTSC7_PE_MASK (0x4U) +#define USBC_PORTSC7_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC7_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PE_SHIFT)) & USBC_PORTSC7_PE_MASK) +#define USBC_PORTSC7_PEC_MASK (0x8U) +#define USBC_PORTSC7_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC7_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PEC_SHIFT)) & USBC_PORTSC7_PEC_MASK) +#define USBC_PORTSC7_OCA_MASK (0x10U) +#define USBC_PORTSC7_OCA_SHIFT (4U) +#define USBC_PORTSC7_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_OCA_SHIFT)) & USBC_PORTSC7_OCA_MASK) +#define USBC_PORTSC7_OCC_MASK (0x20U) +#define USBC_PORTSC7_OCC_SHIFT (5U) +#define USBC_PORTSC7_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_OCC_SHIFT)) & USBC_PORTSC7_OCC_MASK) +#define USBC_PORTSC7_FPR_MASK (0x40U) +#define USBC_PORTSC7_FPR_SHIFT (6U) +#define USBC_PORTSC7_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_FPR_SHIFT)) & USBC_PORTSC7_FPR_MASK) +#define USBC_PORTSC7_SUSP_MASK (0x80U) +#define USBC_PORTSC7_SUSP_SHIFT (7U) +#define USBC_PORTSC7_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_SUSP_SHIFT)) & USBC_PORTSC7_SUSP_MASK) +#define USBC_PORTSC7_PR_MASK (0x100U) +#define USBC_PORTSC7_PR_SHIFT (8U) +#define USBC_PORTSC7_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PR_SHIFT)) & USBC_PORTSC7_PR_MASK) +#define USBC_PORTSC7_HSP_MASK (0x200U) +#define USBC_PORTSC7_HSP_SHIFT (9U) +#define USBC_PORTSC7_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_HSP_SHIFT)) & USBC_PORTSC7_HSP_MASK) +#define USBC_PORTSC7_LS_MASK (0xC00U) +#define USBC_PORTSC7_LS_SHIFT (10U) +#define USBC_PORTSC7_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_LS_SHIFT)) & USBC_PORTSC7_LS_MASK) +#define USBC_PORTSC7_PP_MASK (0x1000U) +#define USBC_PORTSC7_PP_SHIFT (12U) +#define USBC_PORTSC7_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PP_SHIFT)) & USBC_PORTSC7_PP_MASK) +#define USBC_PORTSC7_PO_MASK (0x2000U) +#define USBC_PORTSC7_PO_SHIFT (13U) +#define USBC_PORTSC7_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PO_SHIFT)) & USBC_PORTSC7_PO_MASK) +#define USBC_PORTSC7_PIC_MASK (0xC000U) +#define USBC_PORTSC7_PIC_SHIFT (14U) +#define USBC_PORTSC7_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PIC_SHIFT)) & USBC_PORTSC7_PIC_MASK) +#define USBC_PORTSC7_PTC_MASK (0xF0000U) +#define USBC_PORTSC7_PTC_SHIFT (16U) +#define USBC_PORTSC7_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PTC_SHIFT)) & USBC_PORTSC7_PTC_MASK) +#define USBC_PORTSC7_WKCN_MASK (0x100000U) +#define USBC_PORTSC7_WKCN_SHIFT (20U) +#define USBC_PORTSC7_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_WKCN_SHIFT)) & USBC_PORTSC7_WKCN_MASK) +#define USBC_PORTSC7_WKDS_MASK (0x200000U) +#define USBC_PORTSC7_WKDS_SHIFT (21U) +#define USBC_PORTSC7_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_WKDS_SHIFT)) & USBC_PORTSC7_WKDS_MASK) +#define USBC_PORTSC7_WKOC_MASK (0x400000U) +#define USBC_PORTSC7_WKOC_SHIFT (22U) +#define USBC_PORTSC7_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_WKOC_SHIFT)) & USBC_PORTSC7_WKOC_MASK) +#define USBC_PORTSC7_PHCD_MASK (0x800000U) +#define USBC_PORTSC7_PHCD_SHIFT (23U) +#define USBC_PORTSC7_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PHCD_SHIFT)) & USBC_PORTSC7_PHCD_MASK) +#define USBC_PORTSC7_PFSC_MASK (0x1000000U) +#define USBC_PORTSC7_PFSC_SHIFT (24U) +#define USBC_PORTSC7_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PFSC_SHIFT)) & USBC_PORTSC7_PFSC_MASK) +#define USBC_PORTSC7_PTS2_MASK (0x2000000U) +#define USBC_PORTSC7_PTS2_SHIFT (25U) +#define USBC_PORTSC7_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PTS2_SHIFT)) & USBC_PORTSC7_PTS2_MASK) +#define USBC_PORTSC7_PSPD_MASK (0xC000000U) +#define USBC_PORTSC7_PSPD_SHIFT (26U) +#define USBC_PORTSC7_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PSPD_SHIFT)) & USBC_PORTSC7_PSPD_MASK) +#define USBC_PORTSC7_PTW_MASK (0x10000000U) +#define USBC_PORTSC7_PTW_SHIFT (28U) +#define USBC_PORTSC7_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PTW_SHIFT)) & USBC_PORTSC7_PTW_MASK) +#define USBC_PORTSC7_STS_MASK (0x20000000U) +#define USBC_PORTSC7_STS_SHIFT (29U) +#define USBC_PORTSC7_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_STS_SHIFT)) & USBC_PORTSC7_STS_MASK) +#define USBC_PORTSC7_PTS_MASK (0xC0000000U) +#define USBC_PORTSC7_PTS_SHIFT (30U) +#define USBC_PORTSC7_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC7_PTS_SHIFT)) & USBC_PORTSC7_PTS_MASK) +/*! @} */ + +/*! @name PORTSC8 - */ +/*! @{ */ +#define USBC_PORTSC8_CCS_MASK (0x1U) +#define USBC_PORTSC8_CCS_SHIFT (0U) +#define USBC_PORTSC8_CCS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_CCS_SHIFT)) & USBC_PORTSC8_CCS_MASK) +#define USBC_PORTSC8_CSC_MASK (0x2U) +#define USBC_PORTSC8_CSC_SHIFT (1U) +/*! CSC - rwc + */ +#define USBC_PORTSC8_CSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_CSC_SHIFT)) & USBC_PORTSC8_CSC_MASK) +#define USBC_PORTSC8_PE_MASK (0x4U) +#define USBC_PORTSC8_PE_SHIFT (2U) +/*! PE - rwc + */ +#define USBC_PORTSC8_PE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PE_SHIFT)) & USBC_PORTSC8_PE_MASK) +#define USBC_PORTSC8_PEC_MASK (0x8U) +#define USBC_PORTSC8_PEC_SHIFT (3U) +/*! PEC - rwc + */ +#define USBC_PORTSC8_PEC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PEC_SHIFT)) & USBC_PORTSC8_PEC_MASK) +#define USBC_PORTSC8_OCA_MASK (0x10U) +#define USBC_PORTSC8_OCA_SHIFT (4U) +#define USBC_PORTSC8_OCA(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_OCA_SHIFT)) & USBC_PORTSC8_OCA_MASK) +#define USBC_PORTSC8_OCC_MASK (0x20U) +#define USBC_PORTSC8_OCC_SHIFT (5U) +#define USBC_PORTSC8_OCC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_OCC_SHIFT)) & USBC_PORTSC8_OCC_MASK) +#define USBC_PORTSC8_FPR_MASK (0x40U) +#define USBC_PORTSC8_FPR_SHIFT (6U) +#define USBC_PORTSC8_FPR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_FPR_SHIFT)) & USBC_PORTSC8_FPR_MASK) +#define USBC_PORTSC8_SUSP_MASK (0x80U) +#define USBC_PORTSC8_SUSP_SHIFT (7U) +#define USBC_PORTSC8_SUSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_SUSP_SHIFT)) & USBC_PORTSC8_SUSP_MASK) +#define USBC_PORTSC8_PR_MASK (0x100U) +#define USBC_PORTSC8_PR_SHIFT (8U) +#define USBC_PORTSC8_PR(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PR_SHIFT)) & USBC_PORTSC8_PR_MASK) +#define USBC_PORTSC8_HSP_MASK (0x200U) +#define USBC_PORTSC8_HSP_SHIFT (9U) +#define USBC_PORTSC8_HSP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_HSP_SHIFT)) & USBC_PORTSC8_HSP_MASK) +#define USBC_PORTSC8_LS_MASK (0xC00U) +#define USBC_PORTSC8_LS_SHIFT (10U) +#define USBC_PORTSC8_LS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_LS_SHIFT)) & USBC_PORTSC8_LS_MASK) +#define USBC_PORTSC8_PP_MASK (0x1000U) +#define USBC_PORTSC8_PP_SHIFT (12U) +#define USBC_PORTSC8_PP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PP_SHIFT)) & USBC_PORTSC8_PP_MASK) +#define USBC_PORTSC8_PO_MASK (0x2000U) +#define USBC_PORTSC8_PO_SHIFT (13U) +#define USBC_PORTSC8_PO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PO_SHIFT)) & USBC_PORTSC8_PO_MASK) +#define USBC_PORTSC8_PIC_MASK (0xC000U) +#define USBC_PORTSC8_PIC_SHIFT (14U) +#define USBC_PORTSC8_PIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PIC_SHIFT)) & USBC_PORTSC8_PIC_MASK) +#define USBC_PORTSC8_PTC_MASK (0xF0000U) +#define USBC_PORTSC8_PTC_SHIFT (16U) +#define USBC_PORTSC8_PTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PTC_SHIFT)) & USBC_PORTSC8_PTC_MASK) +#define USBC_PORTSC8_WKCN_MASK (0x100000U) +#define USBC_PORTSC8_WKCN_SHIFT (20U) +#define USBC_PORTSC8_WKCN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_WKCN_SHIFT)) & USBC_PORTSC8_WKCN_MASK) +#define USBC_PORTSC8_WKDS_MASK (0x200000U) +#define USBC_PORTSC8_WKDS_SHIFT (21U) +#define USBC_PORTSC8_WKDS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_WKDS_SHIFT)) & USBC_PORTSC8_WKDS_MASK) +#define USBC_PORTSC8_WKOC_MASK (0x400000U) +#define USBC_PORTSC8_WKOC_SHIFT (22U) +#define USBC_PORTSC8_WKOC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_WKOC_SHIFT)) & USBC_PORTSC8_WKOC_MASK) +#define USBC_PORTSC8_PHCD_MASK (0x800000U) +#define USBC_PORTSC8_PHCD_SHIFT (23U) +#define USBC_PORTSC8_PHCD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PHCD_SHIFT)) & USBC_PORTSC8_PHCD_MASK) +#define USBC_PORTSC8_PFSC_MASK (0x1000000U) +#define USBC_PORTSC8_PFSC_SHIFT (24U) +#define USBC_PORTSC8_PFSC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PFSC_SHIFT)) & USBC_PORTSC8_PFSC_MASK) +#define USBC_PORTSC8_PTS2_MASK (0x2000000U) +#define USBC_PORTSC8_PTS2_SHIFT (25U) +#define USBC_PORTSC8_PTS2(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PTS2_SHIFT)) & USBC_PORTSC8_PTS2_MASK) +#define USBC_PORTSC8_PSPD_MASK (0xC000000U) +#define USBC_PORTSC8_PSPD_SHIFT (26U) +#define USBC_PORTSC8_PSPD(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PSPD_SHIFT)) & USBC_PORTSC8_PSPD_MASK) +#define USBC_PORTSC8_PTW_MASK (0x10000000U) +#define USBC_PORTSC8_PTW_SHIFT (28U) +#define USBC_PORTSC8_PTW(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PTW_SHIFT)) & USBC_PORTSC8_PTW_MASK) +#define USBC_PORTSC8_STS_MASK (0x20000000U) +#define USBC_PORTSC8_STS_SHIFT (29U) +#define USBC_PORTSC8_STS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_STS_SHIFT)) & USBC_PORTSC8_STS_MASK) +#define USBC_PORTSC8_PTS_MASK (0xC0000000U) +#define USBC_PORTSC8_PTS_SHIFT (30U) +#define USBC_PORTSC8_PTS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PORTSC8_PTS_SHIFT)) & USBC_PORTSC8_PTS_MASK) +/*! @} */ + +/*! @name OTGSC - */ +/*! @{ */ +#define USBC_OTGSC_VD_MASK (0x1U) +#define USBC_OTGSC_VD_SHIFT (0U) +/*! VD - OTG not enable + */ +#define USBC_OTGSC_VD(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_VD_SHIFT)) & USBC_OTGSC_VD_MASK) +#define USBC_OTGSC_VC_MASK (0x2U) +#define USBC_OTGSC_VC_SHIFT (1U) +/*! VC - OTG not enable + */ +#define USBC_OTGSC_VC(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_VC_SHIFT)) & USBC_OTGSC_VC_MASK) +#define USBC_OTGSC_HAAR_MASK (0x4U) +#define USBC_OTGSC_HAAR_SHIFT (2U) +/*! HAAR - OTG not enable + */ +#define USBC_OTGSC_HAAR(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_HAAR_SHIFT)) & USBC_OTGSC_HAAR_MASK) +#define USBC_OTGSC_OT_MASK (0x8U) +#define USBC_OTGSC_OT_SHIFT (3U) +/*! OT - OTG not enable + */ +#define USBC_OTGSC_OT(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_OT_SHIFT)) & USBC_OTGSC_OT_MASK) +#define USBC_OTGSC_DP_MASK (0x10U) +#define USBC_OTGSC_DP_SHIFT (4U) +/*! DP - OTG not enable + */ +#define USBC_OTGSC_DP(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_DP_SHIFT)) & USBC_OTGSC_DP_MASK) +#define USBC_OTGSC_IDPU_MASK (0x20U) +#define USBC_OTGSC_IDPU_SHIFT (5U) +/*! IDPU - OTG not enable + */ +#define USBC_OTGSC_IDPU(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_IDPU_SHIFT)) & USBC_OTGSC_IDPU_MASK) +#define USBC_OTGSC_HADP_MASK (0x40U) +#define USBC_OTGSC_HADP_SHIFT (6U) +/*! HADP - OTG not enable + */ +#define USBC_OTGSC_HADP(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_HADP_SHIFT)) & USBC_OTGSC_HADP_MASK) +#define USBC_OTGSC_HABA_MASK (0x80U) +#define USBC_OTGSC_HABA_SHIFT (7U) +/*! HABA - OTG not enable + */ +#define USBC_OTGSC_HABA(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_HABA_SHIFT)) & USBC_OTGSC_HABA_MASK) +#define USBC_OTGSC_ID_MASK (0x100U) +#define USBC_OTGSC_ID_SHIFT (8U) +/*! ID - OTG not enable + */ +#define USBC_OTGSC_ID(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_ID_SHIFT)) & USBC_OTGSC_ID_MASK) +#define USBC_OTGSC_AVV_MASK (0x200U) +#define USBC_OTGSC_AVV_SHIFT (9U) +/*! AVV - OTG not enable + */ +#define USBC_OTGSC_AVV(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_AVV_SHIFT)) & USBC_OTGSC_AVV_MASK) +#define USBC_OTGSC_ASV_MASK (0x400U) +#define USBC_OTGSC_ASV_SHIFT (10U) +/*! ASV - OTG not enable + */ +#define USBC_OTGSC_ASV(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_ASV_SHIFT)) & USBC_OTGSC_ASV_MASK) +#define USBC_OTGSC_BSV_MASK (0x800U) +#define USBC_OTGSC_BSV_SHIFT (11U) +/*! BSV - OTG not enable + */ +#define USBC_OTGSC_BSV(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_BSV_SHIFT)) & USBC_OTGSC_BSV_MASK) +#define USBC_OTGSC_BSE_MASK (0x1000U) +#define USBC_OTGSC_BSE_SHIFT (12U) +/*! BSE - OTG not enable + */ +#define USBC_OTGSC_BSE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_BSE_SHIFT)) & USBC_OTGSC_BSE_MASK) +#define USBC_OTGSC_OTGSC_1MST_MASK (0x2000U) +#define USBC_OTGSC_OTGSC_1MST_SHIFT (13U) +/*! OTGSC_1msT - OTG not enable + */ +#define USBC_OTGSC_OTGSC_1MST(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_OTGSC_1MST_SHIFT)) & USBC_OTGSC_OTGSC_1MST_MASK) +#define USBC_OTGSC_DPS_MASK (0x4000U) +#define USBC_OTGSC_DPS_SHIFT (14U) +/*! DPS - OTG not enable + */ +#define USBC_OTGSC_DPS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_DPS_SHIFT)) & USBC_OTGSC_DPS_MASK) +#define USBC_OTGSC_RESERVED_15_MASK (0x8000U) +#define USBC_OTGSC_RESERVED_15_SHIFT (15U) +/*! Reserved_15 - OTG not enable + */ +#define USBC_OTGSC_RESERVED_15(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_RESERVED_15_SHIFT)) & USBC_OTGSC_RESERVED_15_MASK) +#define USBC_OTGSC_IDIS_MASK (0x10000U) +#define USBC_OTGSC_IDIS_SHIFT (16U) +/*! IDIS - rwc + */ +#define USBC_OTGSC_IDIS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_IDIS_SHIFT)) & USBC_OTGSC_IDIS_MASK) +#define USBC_OTGSC_AVVIS_MASK (0x20000U) +#define USBC_OTGSC_AVVIS_SHIFT (17U) +/*! AVVIS - rwc + */ +#define USBC_OTGSC_AVVIS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_AVVIS_SHIFT)) & USBC_OTGSC_AVVIS_MASK) +#define USBC_OTGSC_ASVIS_MASK (0x40000U) +#define USBC_OTGSC_ASVIS_SHIFT (18U) +/*! ASVIS - rwc + */ +#define USBC_OTGSC_ASVIS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_ASVIS_SHIFT)) & USBC_OTGSC_ASVIS_MASK) +#define USBC_OTGSC_BSVIS_MASK (0x80000U) +#define USBC_OTGSC_BSVIS_SHIFT (19U) +/*! BSVIS - rwc + */ +#define USBC_OTGSC_BSVIS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_BSVIS_SHIFT)) & USBC_OTGSC_BSVIS_MASK) +#define USBC_OTGSC_BSEIS_MASK (0x100000U) +#define USBC_OTGSC_BSEIS_SHIFT (20U) +/*! BSEIS - rwc + */ +#define USBC_OTGSC_BSEIS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_BSEIS_SHIFT)) & USBC_OTGSC_BSEIS_MASK) +#define USBC_OTGSC_OTGSC_1MSS_MASK (0x200000U) +#define USBC_OTGSC_OTGSC_1MSS_SHIFT (21U) +/*! OTGSC_1msS - rwc + */ +#define USBC_OTGSC_OTGSC_1MSS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_OTGSC_1MSS_SHIFT)) & USBC_OTGSC_OTGSC_1MSS_MASK) +#define USBC_OTGSC_DPIS_MASK (0x400000U) +#define USBC_OTGSC_DPIS_SHIFT (22U) +/*! DPIS - rwc + */ +#define USBC_OTGSC_DPIS(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_DPIS_SHIFT)) & USBC_OTGSC_DPIS_MASK) +#define USBC_OTGSC_RESERVED_23_MASK (0x800000U) +#define USBC_OTGSC_RESERVED_23_SHIFT (23U) +/*! Reserved_23 - OTG not enable + */ +#define USBC_OTGSC_RESERVED_23(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_RESERVED_23_SHIFT)) & USBC_OTGSC_RESERVED_23_MASK) +#define USBC_OTGSC_IDIE_MASK (0x1000000U) +#define USBC_OTGSC_IDIE_SHIFT (24U) +/*! IDIE - OTG not enable + */ +#define USBC_OTGSC_IDIE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_IDIE_SHIFT)) & USBC_OTGSC_IDIE_MASK) +#define USBC_OTGSC_AVVIE_MASK (0x2000000U) +#define USBC_OTGSC_AVVIE_SHIFT (25U) +/*! AVVIE - OTG not enable + */ +#define USBC_OTGSC_AVVIE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_AVVIE_SHIFT)) & USBC_OTGSC_AVVIE_MASK) +#define USBC_OTGSC_ASVIE_MASK (0x4000000U) +#define USBC_OTGSC_ASVIE_SHIFT (26U) +/*! ASVIE - OTG not enable + */ +#define USBC_OTGSC_ASVIE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_ASVIE_SHIFT)) & USBC_OTGSC_ASVIE_MASK) +#define USBC_OTGSC_BSVIE_MASK (0x8000000U) +#define USBC_OTGSC_BSVIE_SHIFT (27U) +/*! BSVIE - OTG not enable + */ +#define USBC_OTGSC_BSVIE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_BSVIE_SHIFT)) & USBC_OTGSC_BSVIE_MASK) +#define USBC_OTGSC_BSEIE_MASK (0x10000000U) +#define USBC_OTGSC_BSEIE_SHIFT (28U) +/*! BSEIE - OTG not enable + */ +#define USBC_OTGSC_BSEIE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_BSEIE_SHIFT)) & USBC_OTGSC_BSEIE_MASK) +#define USBC_OTGSC_OTGSC_1MSE_MASK (0x20000000U) +#define USBC_OTGSC_OTGSC_1MSE_SHIFT (29U) +/*! OTGSC_1msE - OTG not enable + */ +#define USBC_OTGSC_OTGSC_1MSE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_OTGSC_1MSE_SHIFT)) & USBC_OTGSC_OTGSC_1MSE_MASK) +#define USBC_OTGSC_DPIE_MASK (0x40000000U) +#define USBC_OTGSC_DPIE_SHIFT (30U) +/*! DPIE - OTG not enable + */ +#define USBC_OTGSC_DPIE(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_DPIE_SHIFT)) & USBC_OTGSC_DPIE_MASK) +#define USBC_OTGSC_RESERVED_31_MASK (0x80000000U) +#define USBC_OTGSC_RESERVED_31_SHIFT (31U) +/*! Reserved_31 - OTG not enable + */ +#define USBC_OTGSC_RESERVED_31(x) (((uint32_t)(((uint32_t)(x)) << USBC_OTGSC_RESERVED_31_SHIFT)) & USBC_OTGSC_RESERVED_31_MASK) +/*! @} */ + +/*! @name USBMODE - */ +/*! @{ */ +#define USBC_USBMODE_CM_MASK (0x3U) +#define USBC_USBMODE_CM_SHIFT (0U) +/*! CM - fix device mode + */ +#define USBC_USBMODE_CM(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_CM_SHIFT)) & USBC_USBMODE_CM_MASK) +#define USBC_USBMODE_ES_MASK (0x4U) +#define USBC_USBMODE_ES_SHIFT (2U) +#define USBC_USBMODE_ES(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_ES_SHIFT)) & USBC_USBMODE_ES_MASK) +#define USBC_USBMODE_SLOM_MASK (0x8U) +#define USBC_USBMODE_SLOM_SHIFT (3U) +#define USBC_USBMODE_SLOM(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_SLOM_SHIFT)) & USBC_USBMODE_SLOM_MASK) +#define USBC_USBMODE_SDIS_MASK (0x10U) +#define USBC_USBMODE_SDIS_SHIFT (4U) +#define USBC_USBMODE_SDIS(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_SDIS_SHIFT)) & USBC_USBMODE_SDIS_MASK) +#define USBC_USBMODE_VBPS_MASK (0x20U) +#define USBC_USBMODE_VBPS_SHIFT (5U) +/*! VBPS - Only used in Host + */ +#define USBC_USBMODE_VBPS(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_VBPS_SHIFT)) & USBC_USBMODE_VBPS_MASK) +#define USBC_USBMODE_RESERVED_6_MASK (0xFC0U) +#define USBC_USBMODE_RESERVED_6_SHIFT (6U) +#define USBC_USBMODE_RESERVED_6(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_RESERVED_6_SHIFT)) & USBC_USBMODE_RESERVED_6_MASK) +#define USBC_USBMODE_TXHSD_MASK (0x7000U) +#define USBC_USBMODE_TXHSD_SHIFT (12U) +#define USBC_USBMODE_TXHSD(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_TXHSD_SHIFT)) & USBC_USBMODE_TXHSD_MASK) +#define USBC_USBMODE_SRT_MASK (0x8000U) +#define USBC_USBMODE_SRT_SHIFT (15U) +#define USBC_USBMODE_SRT(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_SRT_SHIFT)) & USBC_USBMODE_SRT_MASK) +#define USBC_USBMODE_RESERVED_16_MASK (0xFFFF0000U) +#define USBC_USBMODE_RESERVED_16_SHIFT (16U) +#define USBC_USBMODE_RESERVED_16(x) (((uint32_t)(((uint32_t)(x)) << USBC_USBMODE_RESERVED_16_SHIFT)) & USBC_USBMODE_RESERVED_16_MASK) +/*! @} */ + +/*! @name ENDPTSETUPSTAT - */ +/*! @{ */ +#define USBC_ENDPTSETUPSTAT_ENDPTSETUPSTAT_MASK (0xFFFFU) +#define USBC_ENDPTSETUPSTAT_ENDPTSETUPSTAT_SHIFT (0U) +/*! ENDPTSETUPSTAT - rwc + */ +#define USBC_ENDPTSETUPSTAT_ENDPTSETUPSTAT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTSETUPSTAT_ENDPTSETUPSTAT_SHIFT)) & USBC_ENDPTSETUPSTAT_ENDPTSETUPSTAT_MASK) +#define USBC_ENDPTSETUPSTAT_RESERVED_16_MASK (0xFFFF0000U) +#define USBC_ENDPTSETUPSTAT_RESERVED_16_SHIFT (16U) +#define USBC_ENDPTSETUPSTAT_RESERVED_16(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTSETUPSTAT_RESERVED_16_SHIFT)) & USBC_ENDPTSETUPSTAT_RESERVED_16_MASK) +/*! @} */ + +/*! @name ENDPTPRIME - */ +/*! @{ */ +#define USBC_ENDPTPRIME_PERB_MASK (0xFFFFU) +#define USBC_ENDPTPRIME_PERB_SHIFT (0U) +/*! PERB - rws + */ +#define USBC_ENDPTPRIME_PERB(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTPRIME_PERB_SHIFT)) & USBC_ENDPTPRIME_PERB_MASK) +#define USBC_ENDPTPRIME_PETB_MASK (0xFFFF0000U) +#define USBC_ENDPTPRIME_PETB_SHIFT (16U) +/*! PETB - rws + */ +#define USBC_ENDPTPRIME_PETB(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTPRIME_PETB_SHIFT)) & USBC_ENDPTPRIME_PETB_MASK) +/*! @} */ + +/*! @name ENDPTFLUSH - */ +/*! @{ */ +#define USBC_ENDPTFLUSH_FERB_MASK (0xFFFFU) +#define USBC_ENDPTFLUSH_FERB_SHIFT (0U) +/*! FERB - rws + */ +#define USBC_ENDPTFLUSH_FERB(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTFLUSH_FERB_SHIFT)) & USBC_ENDPTFLUSH_FERB_MASK) +#define USBC_ENDPTFLUSH_FETB_MASK (0xFFFF0000U) +#define USBC_ENDPTFLUSH_FETB_SHIFT (16U) +/*! FETB - rws + */ +#define USBC_ENDPTFLUSH_FETB(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTFLUSH_FETB_SHIFT)) & USBC_ENDPTFLUSH_FETB_MASK) +/*! @} */ + +/*! @name ENDPTSTAT - */ +/*! @{ */ +#define USBC_ENDPTSTAT_ERBR_MASK (0xFFFFU) +#define USBC_ENDPTSTAT_ERBR_SHIFT (0U) +#define USBC_ENDPTSTAT_ERBR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTSTAT_ERBR_SHIFT)) & USBC_ENDPTSTAT_ERBR_MASK) +#define USBC_ENDPTSTAT_ETBR_MASK (0xFFFF0000U) +#define USBC_ENDPTSTAT_ETBR_SHIFT (16U) +#define USBC_ENDPTSTAT_ETBR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTSTAT_ETBR_SHIFT)) & USBC_ENDPTSTAT_ETBR_MASK) +/*! @} */ + +/*! @name ENDPTCOMPLETE - */ +/*! @{ */ +#define USBC_ENDPTCOMPLETE_ERCE_MASK (0xFFFFU) +#define USBC_ENDPTCOMPLETE_ERCE_SHIFT (0U) +/*! ERCE - rwc + */ +#define USBC_ENDPTCOMPLETE_ERCE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCOMPLETE_ERCE_SHIFT)) & USBC_ENDPTCOMPLETE_ERCE_MASK) +#define USBC_ENDPTCOMPLETE_ETCE_MASK (0xFFFF0000U) +#define USBC_ENDPTCOMPLETE_ETCE_SHIFT (16U) +/*! ETCE - rwc + */ +#define USBC_ENDPTCOMPLETE_ETCE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCOMPLETE_ETCE_SHIFT)) & USBC_ENDPTCOMPLETE_ETCE_MASK) +/*! @} */ + +/*! @name ENDPTCTRL0 - */ +/*! @{ */ +#define USBC_ENDPTCTRL0_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL0_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL0_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RXS_SHIFT)) & USBC_ENDPTCTRL0_RXS_MASK) +#define USBC_ENDPTCTRL0_RESERVED_1_MASK (0x2U) +#define USBC_ENDPTCTRL0_RESERVED_1_SHIFT (1U) +#define USBC_ENDPTCTRL0_RESERVED_1(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RESERVED_1_SHIFT)) & USBC_ENDPTCTRL0_RESERVED_1_MASK) +#define USBC_ENDPTCTRL0_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL0_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL0_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RXT_SHIFT)) & USBC_ENDPTCTRL0_RXT_MASK) +#define USBC_ENDPTCTRL0_RESERVED_4_MASK (0x70U) +#define USBC_ENDPTCTRL0_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL0_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL0_RESERVED_4_MASK) +#define USBC_ENDPTCTRL0_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL0_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL0_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RXE_SHIFT)) & USBC_ENDPTCTRL0_RXE_MASK) +#define USBC_ENDPTCTRL0_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL0_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL0_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL0_RESERVED_8_MASK) +#define USBC_ENDPTCTRL0_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL0_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL0_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_TXS_SHIFT)) & USBC_ENDPTCTRL0_TXS_MASK) +#define USBC_ENDPTCTRL0_RESERVED_17_MASK (0x20000U) +#define USBC_ENDPTCTRL0_RESERVED_17_SHIFT (17U) +#define USBC_ENDPTCTRL0_RESERVED_17(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RESERVED_17_SHIFT)) & USBC_ENDPTCTRL0_RESERVED_17_MASK) +#define USBC_ENDPTCTRL0_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL0_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL0_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_TXT_SHIFT)) & USBC_ENDPTCTRL0_TXT_MASK) +#define USBC_ENDPTCTRL0_RESERVED_20_MASK (0x700000U) +#define USBC_ENDPTCTRL0_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL0_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL0_RESERVED_20_MASK) +#define USBC_ENDPTCTRL0_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL0_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL0_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_TXE_SHIFT)) & USBC_ENDPTCTRL0_TXE_MASK) +#define USBC_ENDPTCTRL0_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL0_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL0_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL0_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL0_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL1 - */ +/*! @{ */ +#define USBC_ENDPTCTRL1_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL1_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL1_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RXS_SHIFT)) & USBC_ENDPTCTRL1_RXS_MASK) +#define USBC_ENDPTCTRL1_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL1_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL1_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RXD_SHIFT)) & USBC_ENDPTCTRL1_RXD_MASK) +#define USBC_ENDPTCTRL1_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL1_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL1_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RXT_SHIFT)) & USBC_ENDPTCTRL1_RXT_MASK) +#define USBC_ENDPTCTRL1_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL1_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL1_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL1_RESERVED_4_MASK) +#define USBC_ENDPTCTRL1_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL1_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL1_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RXI_SHIFT)) & USBC_ENDPTCTRL1_RXI_MASK) +#define USBC_ENDPTCTRL1_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL1_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL1_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RXR_SHIFT)) & USBC_ENDPTCTRL1_RXR_MASK) +#define USBC_ENDPTCTRL1_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL1_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL1_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RXE_SHIFT)) & USBC_ENDPTCTRL1_RXE_MASK) +#define USBC_ENDPTCTRL1_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL1_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL1_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL1_RESERVED_8_MASK) +#define USBC_ENDPTCTRL1_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL1_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL1_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_TXS_SHIFT)) & USBC_ENDPTCTRL1_TXS_MASK) +#define USBC_ENDPTCTRL1_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL1_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL1_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_TXD_SHIFT)) & USBC_ENDPTCTRL1_TXD_MASK) +#define USBC_ENDPTCTRL1_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL1_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL1_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_TXT_SHIFT)) & USBC_ENDPTCTRL1_TXT_MASK) +#define USBC_ENDPTCTRL1_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL1_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL1_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL1_RESERVED_20_MASK) +#define USBC_ENDPTCTRL1_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL1_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL1_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_TXI_SHIFT)) & USBC_ENDPTCTRL1_TXI_MASK) +#define USBC_ENDPTCTRL1_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL1_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL1_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_TXR_SHIFT)) & USBC_ENDPTCTRL1_TXR_MASK) +#define USBC_ENDPTCTRL1_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL1_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL1_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_TXE_SHIFT)) & USBC_ENDPTCTRL1_TXE_MASK) +#define USBC_ENDPTCTRL1_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL1_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL1_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL1_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL1_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL2 - */ +/*! @{ */ +#define USBC_ENDPTCTRL2_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL2_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL2_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RXS_SHIFT)) & USBC_ENDPTCTRL2_RXS_MASK) +#define USBC_ENDPTCTRL2_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL2_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL2_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RXD_SHIFT)) & USBC_ENDPTCTRL2_RXD_MASK) +#define USBC_ENDPTCTRL2_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL2_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL2_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RXT_SHIFT)) & USBC_ENDPTCTRL2_RXT_MASK) +#define USBC_ENDPTCTRL2_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL2_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL2_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL2_RESERVED_4_MASK) +#define USBC_ENDPTCTRL2_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL2_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL2_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RXI_SHIFT)) & USBC_ENDPTCTRL2_RXI_MASK) +#define USBC_ENDPTCTRL2_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL2_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL2_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RXR_SHIFT)) & USBC_ENDPTCTRL2_RXR_MASK) +#define USBC_ENDPTCTRL2_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL2_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL2_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RXE_SHIFT)) & USBC_ENDPTCTRL2_RXE_MASK) +#define USBC_ENDPTCTRL2_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL2_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL2_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL2_RESERVED_8_MASK) +#define USBC_ENDPTCTRL2_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL2_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL2_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_TXS_SHIFT)) & USBC_ENDPTCTRL2_TXS_MASK) +#define USBC_ENDPTCTRL2_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL2_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL2_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_TXD_SHIFT)) & USBC_ENDPTCTRL2_TXD_MASK) +#define USBC_ENDPTCTRL2_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL2_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL2_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_TXT_SHIFT)) & USBC_ENDPTCTRL2_TXT_MASK) +#define USBC_ENDPTCTRL2_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL2_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL2_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL2_RESERVED_20_MASK) +#define USBC_ENDPTCTRL2_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL2_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL2_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_TXI_SHIFT)) & USBC_ENDPTCTRL2_TXI_MASK) +#define USBC_ENDPTCTRL2_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL2_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL2_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_TXR_SHIFT)) & USBC_ENDPTCTRL2_TXR_MASK) +#define USBC_ENDPTCTRL2_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL2_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL2_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_TXE_SHIFT)) & USBC_ENDPTCTRL2_TXE_MASK) +#define USBC_ENDPTCTRL2_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL2_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL2_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL2_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL2_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL3 - */ +/*! @{ */ +#define USBC_ENDPTCTRL3_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL3_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL3_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RXS_SHIFT)) & USBC_ENDPTCTRL3_RXS_MASK) +#define USBC_ENDPTCTRL3_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL3_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL3_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RXD_SHIFT)) & USBC_ENDPTCTRL3_RXD_MASK) +#define USBC_ENDPTCTRL3_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL3_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL3_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RXT_SHIFT)) & USBC_ENDPTCTRL3_RXT_MASK) +#define USBC_ENDPTCTRL3_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL3_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL3_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL3_RESERVED_4_MASK) +#define USBC_ENDPTCTRL3_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL3_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL3_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RXI_SHIFT)) & USBC_ENDPTCTRL3_RXI_MASK) +#define USBC_ENDPTCTRL3_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL3_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL3_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RXR_SHIFT)) & USBC_ENDPTCTRL3_RXR_MASK) +#define USBC_ENDPTCTRL3_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL3_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL3_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RXE_SHIFT)) & USBC_ENDPTCTRL3_RXE_MASK) +#define USBC_ENDPTCTRL3_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL3_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL3_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL3_RESERVED_8_MASK) +#define USBC_ENDPTCTRL3_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL3_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL3_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_TXS_SHIFT)) & USBC_ENDPTCTRL3_TXS_MASK) +#define USBC_ENDPTCTRL3_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL3_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL3_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_TXD_SHIFT)) & USBC_ENDPTCTRL3_TXD_MASK) +#define USBC_ENDPTCTRL3_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL3_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL3_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_TXT_SHIFT)) & USBC_ENDPTCTRL3_TXT_MASK) +#define USBC_ENDPTCTRL3_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL3_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL3_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL3_RESERVED_20_MASK) +#define USBC_ENDPTCTRL3_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL3_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL3_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_TXI_SHIFT)) & USBC_ENDPTCTRL3_TXI_MASK) +#define USBC_ENDPTCTRL3_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL3_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL3_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_TXR_SHIFT)) & USBC_ENDPTCTRL3_TXR_MASK) +#define USBC_ENDPTCTRL3_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL3_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL3_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_TXE_SHIFT)) & USBC_ENDPTCTRL3_TXE_MASK) +#define USBC_ENDPTCTRL3_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL3_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL3_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL3_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL3_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL4 - */ +/*! @{ */ +#define USBC_ENDPTCTRL4_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL4_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL4_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RXS_SHIFT)) & USBC_ENDPTCTRL4_RXS_MASK) +#define USBC_ENDPTCTRL4_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL4_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL4_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RXD_SHIFT)) & USBC_ENDPTCTRL4_RXD_MASK) +#define USBC_ENDPTCTRL4_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL4_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL4_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RXT_SHIFT)) & USBC_ENDPTCTRL4_RXT_MASK) +#define USBC_ENDPTCTRL4_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL4_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL4_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL4_RESERVED_4_MASK) +#define USBC_ENDPTCTRL4_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL4_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL4_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RXI_SHIFT)) & USBC_ENDPTCTRL4_RXI_MASK) +#define USBC_ENDPTCTRL4_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL4_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL4_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RXR_SHIFT)) & USBC_ENDPTCTRL4_RXR_MASK) +#define USBC_ENDPTCTRL4_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL4_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL4_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RXE_SHIFT)) & USBC_ENDPTCTRL4_RXE_MASK) +#define USBC_ENDPTCTRL4_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL4_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL4_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL4_RESERVED_8_MASK) +#define USBC_ENDPTCTRL4_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL4_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL4_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_TXS_SHIFT)) & USBC_ENDPTCTRL4_TXS_MASK) +#define USBC_ENDPTCTRL4_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL4_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL4_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_TXD_SHIFT)) & USBC_ENDPTCTRL4_TXD_MASK) +#define USBC_ENDPTCTRL4_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL4_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL4_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_TXT_SHIFT)) & USBC_ENDPTCTRL4_TXT_MASK) +#define USBC_ENDPTCTRL4_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL4_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL4_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL4_RESERVED_20_MASK) +#define USBC_ENDPTCTRL4_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL4_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL4_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_TXI_SHIFT)) & USBC_ENDPTCTRL4_TXI_MASK) +#define USBC_ENDPTCTRL4_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL4_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL4_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_TXR_SHIFT)) & USBC_ENDPTCTRL4_TXR_MASK) +#define USBC_ENDPTCTRL4_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL4_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL4_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_TXE_SHIFT)) & USBC_ENDPTCTRL4_TXE_MASK) +#define USBC_ENDPTCTRL4_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL4_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL4_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL4_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL4_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL5 - */ +/*! @{ */ +#define USBC_ENDPTCTRL5_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL5_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL5_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RXS_SHIFT)) & USBC_ENDPTCTRL5_RXS_MASK) +#define USBC_ENDPTCTRL5_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL5_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL5_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RXD_SHIFT)) & USBC_ENDPTCTRL5_RXD_MASK) +#define USBC_ENDPTCTRL5_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL5_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL5_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RXT_SHIFT)) & USBC_ENDPTCTRL5_RXT_MASK) +#define USBC_ENDPTCTRL5_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL5_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL5_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL5_RESERVED_4_MASK) +#define USBC_ENDPTCTRL5_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL5_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL5_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RXI_SHIFT)) & USBC_ENDPTCTRL5_RXI_MASK) +#define USBC_ENDPTCTRL5_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL5_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL5_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RXR_SHIFT)) & USBC_ENDPTCTRL5_RXR_MASK) +#define USBC_ENDPTCTRL5_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL5_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL5_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RXE_SHIFT)) & USBC_ENDPTCTRL5_RXE_MASK) +#define USBC_ENDPTCTRL5_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL5_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL5_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL5_RESERVED_8_MASK) +#define USBC_ENDPTCTRL5_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL5_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL5_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_TXS_SHIFT)) & USBC_ENDPTCTRL5_TXS_MASK) +#define USBC_ENDPTCTRL5_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL5_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL5_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_TXD_SHIFT)) & USBC_ENDPTCTRL5_TXD_MASK) +#define USBC_ENDPTCTRL5_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL5_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL5_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_TXT_SHIFT)) & USBC_ENDPTCTRL5_TXT_MASK) +#define USBC_ENDPTCTRL5_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL5_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL5_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL5_RESERVED_20_MASK) +#define USBC_ENDPTCTRL5_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL5_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL5_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_TXI_SHIFT)) & USBC_ENDPTCTRL5_TXI_MASK) +#define USBC_ENDPTCTRL5_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL5_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL5_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_TXR_SHIFT)) & USBC_ENDPTCTRL5_TXR_MASK) +#define USBC_ENDPTCTRL5_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL5_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL5_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_TXE_SHIFT)) & USBC_ENDPTCTRL5_TXE_MASK) +#define USBC_ENDPTCTRL5_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL5_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL5_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL5_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL5_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL6 - */ +/*! @{ */ +#define USBC_ENDPTCTRL6_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL6_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL6_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RXS_SHIFT)) & USBC_ENDPTCTRL6_RXS_MASK) +#define USBC_ENDPTCTRL6_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL6_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL6_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RXD_SHIFT)) & USBC_ENDPTCTRL6_RXD_MASK) +#define USBC_ENDPTCTRL6_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL6_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL6_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RXT_SHIFT)) & USBC_ENDPTCTRL6_RXT_MASK) +#define USBC_ENDPTCTRL6_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL6_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL6_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL6_RESERVED_4_MASK) +#define USBC_ENDPTCTRL6_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL6_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL6_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RXI_SHIFT)) & USBC_ENDPTCTRL6_RXI_MASK) +#define USBC_ENDPTCTRL6_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL6_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL6_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RXR_SHIFT)) & USBC_ENDPTCTRL6_RXR_MASK) +#define USBC_ENDPTCTRL6_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL6_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL6_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RXE_SHIFT)) & USBC_ENDPTCTRL6_RXE_MASK) +#define USBC_ENDPTCTRL6_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL6_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL6_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL6_RESERVED_8_MASK) +#define USBC_ENDPTCTRL6_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL6_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL6_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_TXS_SHIFT)) & USBC_ENDPTCTRL6_TXS_MASK) +#define USBC_ENDPTCTRL6_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL6_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL6_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_TXD_SHIFT)) & USBC_ENDPTCTRL6_TXD_MASK) +#define USBC_ENDPTCTRL6_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL6_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL6_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_TXT_SHIFT)) & USBC_ENDPTCTRL6_TXT_MASK) +#define USBC_ENDPTCTRL6_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL6_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL6_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL6_RESERVED_20_MASK) +#define USBC_ENDPTCTRL6_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL6_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL6_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_TXI_SHIFT)) & USBC_ENDPTCTRL6_TXI_MASK) +#define USBC_ENDPTCTRL6_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL6_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL6_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_TXR_SHIFT)) & USBC_ENDPTCTRL6_TXR_MASK) +#define USBC_ENDPTCTRL6_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL6_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL6_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_TXE_SHIFT)) & USBC_ENDPTCTRL6_TXE_MASK) +#define USBC_ENDPTCTRL6_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL6_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL6_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL6_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL6_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL7 - */ +/*! @{ */ +#define USBC_ENDPTCTRL7_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL7_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL7_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RXS_SHIFT)) & USBC_ENDPTCTRL7_RXS_MASK) +#define USBC_ENDPTCTRL7_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL7_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL7_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RXD_SHIFT)) & USBC_ENDPTCTRL7_RXD_MASK) +#define USBC_ENDPTCTRL7_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL7_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL7_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RXT_SHIFT)) & USBC_ENDPTCTRL7_RXT_MASK) +#define USBC_ENDPTCTRL7_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL7_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL7_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL7_RESERVED_4_MASK) +#define USBC_ENDPTCTRL7_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL7_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL7_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RXI_SHIFT)) & USBC_ENDPTCTRL7_RXI_MASK) +#define USBC_ENDPTCTRL7_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL7_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL7_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RXR_SHIFT)) & USBC_ENDPTCTRL7_RXR_MASK) +#define USBC_ENDPTCTRL7_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL7_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL7_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RXE_SHIFT)) & USBC_ENDPTCTRL7_RXE_MASK) +#define USBC_ENDPTCTRL7_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL7_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL7_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL7_RESERVED_8_MASK) +#define USBC_ENDPTCTRL7_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL7_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL7_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_TXS_SHIFT)) & USBC_ENDPTCTRL7_TXS_MASK) +#define USBC_ENDPTCTRL7_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL7_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL7_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_TXD_SHIFT)) & USBC_ENDPTCTRL7_TXD_MASK) +#define USBC_ENDPTCTRL7_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL7_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL7_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_TXT_SHIFT)) & USBC_ENDPTCTRL7_TXT_MASK) +#define USBC_ENDPTCTRL7_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL7_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL7_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL7_RESERVED_20_MASK) +#define USBC_ENDPTCTRL7_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL7_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL7_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_TXI_SHIFT)) & USBC_ENDPTCTRL7_TXI_MASK) +#define USBC_ENDPTCTRL7_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL7_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL7_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_TXR_SHIFT)) & USBC_ENDPTCTRL7_TXR_MASK) +#define USBC_ENDPTCTRL7_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL7_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL7_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_TXE_SHIFT)) & USBC_ENDPTCTRL7_TXE_MASK) +#define USBC_ENDPTCTRL7_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL7_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL7_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL7_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL7_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL8 - */ +/*! @{ */ +#define USBC_ENDPTCTRL8_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL8_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL8_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RXS_SHIFT)) & USBC_ENDPTCTRL8_RXS_MASK) +#define USBC_ENDPTCTRL8_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL8_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL8_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RXD_SHIFT)) & USBC_ENDPTCTRL8_RXD_MASK) +#define USBC_ENDPTCTRL8_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL8_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL8_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RXT_SHIFT)) & USBC_ENDPTCTRL8_RXT_MASK) +#define USBC_ENDPTCTRL8_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL8_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL8_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL8_RESERVED_4_MASK) +#define USBC_ENDPTCTRL8_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL8_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL8_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RXI_SHIFT)) & USBC_ENDPTCTRL8_RXI_MASK) +#define USBC_ENDPTCTRL8_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL8_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL8_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RXR_SHIFT)) & USBC_ENDPTCTRL8_RXR_MASK) +#define USBC_ENDPTCTRL8_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL8_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL8_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RXE_SHIFT)) & USBC_ENDPTCTRL8_RXE_MASK) +#define USBC_ENDPTCTRL8_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL8_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL8_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL8_RESERVED_8_MASK) +#define USBC_ENDPTCTRL8_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL8_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL8_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_TXS_SHIFT)) & USBC_ENDPTCTRL8_TXS_MASK) +#define USBC_ENDPTCTRL8_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL8_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL8_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_TXD_SHIFT)) & USBC_ENDPTCTRL8_TXD_MASK) +#define USBC_ENDPTCTRL8_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL8_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL8_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_TXT_SHIFT)) & USBC_ENDPTCTRL8_TXT_MASK) +#define USBC_ENDPTCTRL8_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL8_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL8_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL8_RESERVED_20_MASK) +#define USBC_ENDPTCTRL8_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL8_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL8_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_TXI_SHIFT)) & USBC_ENDPTCTRL8_TXI_MASK) +#define USBC_ENDPTCTRL8_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL8_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL8_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_TXR_SHIFT)) & USBC_ENDPTCTRL8_TXR_MASK) +#define USBC_ENDPTCTRL8_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL8_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL8_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_TXE_SHIFT)) & USBC_ENDPTCTRL8_TXE_MASK) +#define USBC_ENDPTCTRL8_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL8_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL8_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL8_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL8_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL9 - */ +/*! @{ */ +#define USBC_ENDPTCTRL9_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL9_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL9_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RXS_SHIFT)) & USBC_ENDPTCTRL9_RXS_MASK) +#define USBC_ENDPTCTRL9_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL9_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL9_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RXD_SHIFT)) & USBC_ENDPTCTRL9_RXD_MASK) +#define USBC_ENDPTCTRL9_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL9_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL9_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RXT_SHIFT)) & USBC_ENDPTCTRL9_RXT_MASK) +#define USBC_ENDPTCTRL9_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL9_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL9_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL9_RESERVED_4_MASK) +#define USBC_ENDPTCTRL9_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL9_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL9_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RXI_SHIFT)) & USBC_ENDPTCTRL9_RXI_MASK) +#define USBC_ENDPTCTRL9_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL9_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL9_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RXR_SHIFT)) & USBC_ENDPTCTRL9_RXR_MASK) +#define USBC_ENDPTCTRL9_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL9_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL9_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RXE_SHIFT)) & USBC_ENDPTCTRL9_RXE_MASK) +#define USBC_ENDPTCTRL9_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL9_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL9_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL9_RESERVED_8_MASK) +#define USBC_ENDPTCTRL9_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL9_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL9_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_TXS_SHIFT)) & USBC_ENDPTCTRL9_TXS_MASK) +#define USBC_ENDPTCTRL9_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL9_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL9_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_TXD_SHIFT)) & USBC_ENDPTCTRL9_TXD_MASK) +#define USBC_ENDPTCTRL9_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL9_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL9_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_TXT_SHIFT)) & USBC_ENDPTCTRL9_TXT_MASK) +#define USBC_ENDPTCTRL9_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL9_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL9_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL9_RESERVED_20_MASK) +#define USBC_ENDPTCTRL9_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL9_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL9_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_TXI_SHIFT)) & USBC_ENDPTCTRL9_TXI_MASK) +#define USBC_ENDPTCTRL9_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL9_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL9_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_TXR_SHIFT)) & USBC_ENDPTCTRL9_TXR_MASK) +#define USBC_ENDPTCTRL9_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL9_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL9_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_TXE_SHIFT)) & USBC_ENDPTCTRL9_TXE_MASK) +#define USBC_ENDPTCTRL9_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL9_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL9_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL9_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL9_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL10 - */ +/*! @{ */ +#define USBC_ENDPTCTRL10_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL10_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL10_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RXS_SHIFT)) & USBC_ENDPTCTRL10_RXS_MASK) +#define USBC_ENDPTCTRL10_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL10_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL10_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RXD_SHIFT)) & USBC_ENDPTCTRL10_RXD_MASK) +#define USBC_ENDPTCTRL10_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL10_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL10_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RXT_SHIFT)) & USBC_ENDPTCTRL10_RXT_MASK) +#define USBC_ENDPTCTRL10_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL10_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL10_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL10_RESERVED_4_MASK) +#define USBC_ENDPTCTRL10_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL10_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL10_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RXI_SHIFT)) & USBC_ENDPTCTRL10_RXI_MASK) +#define USBC_ENDPTCTRL10_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL10_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL10_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RXR_SHIFT)) & USBC_ENDPTCTRL10_RXR_MASK) +#define USBC_ENDPTCTRL10_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL10_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL10_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RXE_SHIFT)) & USBC_ENDPTCTRL10_RXE_MASK) +#define USBC_ENDPTCTRL10_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL10_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL10_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL10_RESERVED_8_MASK) +#define USBC_ENDPTCTRL10_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL10_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL10_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_TXS_SHIFT)) & USBC_ENDPTCTRL10_TXS_MASK) +#define USBC_ENDPTCTRL10_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL10_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL10_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_TXD_SHIFT)) & USBC_ENDPTCTRL10_TXD_MASK) +#define USBC_ENDPTCTRL10_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL10_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL10_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_TXT_SHIFT)) & USBC_ENDPTCTRL10_TXT_MASK) +#define USBC_ENDPTCTRL10_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL10_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL10_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL10_RESERVED_20_MASK) +#define USBC_ENDPTCTRL10_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL10_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL10_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_TXI_SHIFT)) & USBC_ENDPTCTRL10_TXI_MASK) +#define USBC_ENDPTCTRL10_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL10_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL10_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_TXR_SHIFT)) & USBC_ENDPTCTRL10_TXR_MASK) +#define USBC_ENDPTCTRL10_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL10_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL10_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_TXE_SHIFT)) & USBC_ENDPTCTRL10_TXE_MASK) +#define USBC_ENDPTCTRL10_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL10_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL10_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL10_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL10_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL11 - */ +/*! @{ */ +#define USBC_ENDPTCTRL11_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL11_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL11_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RXS_SHIFT)) & USBC_ENDPTCTRL11_RXS_MASK) +#define USBC_ENDPTCTRL11_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL11_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL11_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RXD_SHIFT)) & USBC_ENDPTCTRL11_RXD_MASK) +#define USBC_ENDPTCTRL11_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL11_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL11_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RXT_SHIFT)) & USBC_ENDPTCTRL11_RXT_MASK) +#define USBC_ENDPTCTRL11_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL11_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL11_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL11_RESERVED_4_MASK) +#define USBC_ENDPTCTRL11_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL11_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL11_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RXI_SHIFT)) & USBC_ENDPTCTRL11_RXI_MASK) +#define USBC_ENDPTCTRL11_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL11_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL11_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RXR_SHIFT)) & USBC_ENDPTCTRL11_RXR_MASK) +#define USBC_ENDPTCTRL11_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL11_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL11_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RXE_SHIFT)) & USBC_ENDPTCTRL11_RXE_MASK) +#define USBC_ENDPTCTRL11_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL11_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL11_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL11_RESERVED_8_MASK) +#define USBC_ENDPTCTRL11_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL11_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL11_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_TXS_SHIFT)) & USBC_ENDPTCTRL11_TXS_MASK) +#define USBC_ENDPTCTRL11_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL11_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL11_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_TXD_SHIFT)) & USBC_ENDPTCTRL11_TXD_MASK) +#define USBC_ENDPTCTRL11_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL11_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL11_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_TXT_SHIFT)) & USBC_ENDPTCTRL11_TXT_MASK) +#define USBC_ENDPTCTRL11_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL11_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL11_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL11_RESERVED_20_MASK) +#define USBC_ENDPTCTRL11_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL11_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL11_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_TXI_SHIFT)) & USBC_ENDPTCTRL11_TXI_MASK) +#define USBC_ENDPTCTRL11_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL11_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL11_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_TXR_SHIFT)) & USBC_ENDPTCTRL11_TXR_MASK) +#define USBC_ENDPTCTRL11_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL11_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL11_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_TXE_SHIFT)) & USBC_ENDPTCTRL11_TXE_MASK) +#define USBC_ENDPTCTRL11_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL11_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL11_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL11_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL11_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL12 - */ +/*! @{ */ +#define USBC_ENDPTCTRL12_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL12_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL12_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RXS_SHIFT)) & USBC_ENDPTCTRL12_RXS_MASK) +#define USBC_ENDPTCTRL12_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL12_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL12_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RXD_SHIFT)) & USBC_ENDPTCTRL12_RXD_MASK) +#define USBC_ENDPTCTRL12_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL12_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL12_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RXT_SHIFT)) & USBC_ENDPTCTRL12_RXT_MASK) +#define USBC_ENDPTCTRL12_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL12_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL12_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL12_RESERVED_4_MASK) +#define USBC_ENDPTCTRL12_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL12_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL12_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RXI_SHIFT)) & USBC_ENDPTCTRL12_RXI_MASK) +#define USBC_ENDPTCTRL12_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL12_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL12_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RXR_SHIFT)) & USBC_ENDPTCTRL12_RXR_MASK) +#define USBC_ENDPTCTRL12_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL12_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL12_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RXE_SHIFT)) & USBC_ENDPTCTRL12_RXE_MASK) +#define USBC_ENDPTCTRL12_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL12_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL12_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL12_RESERVED_8_MASK) +#define USBC_ENDPTCTRL12_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL12_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL12_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_TXS_SHIFT)) & USBC_ENDPTCTRL12_TXS_MASK) +#define USBC_ENDPTCTRL12_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL12_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL12_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_TXD_SHIFT)) & USBC_ENDPTCTRL12_TXD_MASK) +#define USBC_ENDPTCTRL12_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL12_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL12_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_TXT_SHIFT)) & USBC_ENDPTCTRL12_TXT_MASK) +#define USBC_ENDPTCTRL12_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL12_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL12_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL12_RESERVED_20_MASK) +#define USBC_ENDPTCTRL12_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL12_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL12_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_TXI_SHIFT)) & USBC_ENDPTCTRL12_TXI_MASK) +#define USBC_ENDPTCTRL12_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL12_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL12_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_TXR_SHIFT)) & USBC_ENDPTCTRL12_TXR_MASK) +#define USBC_ENDPTCTRL12_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL12_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL12_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_TXE_SHIFT)) & USBC_ENDPTCTRL12_TXE_MASK) +#define USBC_ENDPTCTRL12_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL12_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL12_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL12_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL12_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL13 - */ +/*! @{ */ +#define USBC_ENDPTCTRL13_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL13_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL13_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RXS_SHIFT)) & USBC_ENDPTCTRL13_RXS_MASK) +#define USBC_ENDPTCTRL13_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL13_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL13_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RXD_SHIFT)) & USBC_ENDPTCTRL13_RXD_MASK) +#define USBC_ENDPTCTRL13_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL13_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL13_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RXT_SHIFT)) & USBC_ENDPTCTRL13_RXT_MASK) +#define USBC_ENDPTCTRL13_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL13_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL13_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL13_RESERVED_4_MASK) +#define USBC_ENDPTCTRL13_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL13_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL13_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RXI_SHIFT)) & USBC_ENDPTCTRL13_RXI_MASK) +#define USBC_ENDPTCTRL13_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL13_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL13_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RXR_SHIFT)) & USBC_ENDPTCTRL13_RXR_MASK) +#define USBC_ENDPTCTRL13_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL13_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL13_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RXE_SHIFT)) & USBC_ENDPTCTRL13_RXE_MASK) +#define USBC_ENDPTCTRL13_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL13_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL13_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL13_RESERVED_8_MASK) +#define USBC_ENDPTCTRL13_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL13_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL13_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_TXS_SHIFT)) & USBC_ENDPTCTRL13_TXS_MASK) +#define USBC_ENDPTCTRL13_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL13_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL13_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_TXD_SHIFT)) & USBC_ENDPTCTRL13_TXD_MASK) +#define USBC_ENDPTCTRL13_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL13_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL13_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_TXT_SHIFT)) & USBC_ENDPTCTRL13_TXT_MASK) +#define USBC_ENDPTCTRL13_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL13_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL13_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL13_RESERVED_20_MASK) +#define USBC_ENDPTCTRL13_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL13_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL13_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_TXI_SHIFT)) & USBC_ENDPTCTRL13_TXI_MASK) +#define USBC_ENDPTCTRL13_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL13_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL13_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_TXR_SHIFT)) & USBC_ENDPTCTRL13_TXR_MASK) +#define USBC_ENDPTCTRL13_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL13_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL13_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_TXE_SHIFT)) & USBC_ENDPTCTRL13_TXE_MASK) +#define USBC_ENDPTCTRL13_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL13_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL13_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL13_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL13_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL14 - */ +/*! @{ */ +#define USBC_ENDPTCTRL14_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL14_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL14_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RXS_SHIFT)) & USBC_ENDPTCTRL14_RXS_MASK) +#define USBC_ENDPTCTRL14_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL14_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL14_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RXD_SHIFT)) & USBC_ENDPTCTRL14_RXD_MASK) +#define USBC_ENDPTCTRL14_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL14_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL14_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RXT_SHIFT)) & USBC_ENDPTCTRL14_RXT_MASK) +#define USBC_ENDPTCTRL14_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL14_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL14_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL14_RESERVED_4_MASK) +#define USBC_ENDPTCTRL14_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL14_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL14_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RXI_SHIFT)) & USBC_ENDPTCTRL14_RXI_MASK) +#define USBC_ENDPTCTRL14_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL14_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL14_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RXR_SHIFT)) & USBC_ENDPTCTRL14_RXR_MASK) +#define USBC_ENDPTCTRL14_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL14_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL14_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RXE_SHIFT)) & USBC_ENDPTCTRL14_RXE_MASK) +#define USBC_ENDPTCTRL14_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL14_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL14_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL14_RESERVED_8_MASK) +#define USBC_ENDPTCTRL14_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL14_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL14_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_TXS_SHIFT)) & USBC_ENDPTCTRL14_TXS_MASK) +#define USBC_ENDPTCTRL14_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL14_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL14_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_TXD_SHIFT)) & USBC_ENDPTCTRL14_TXD_MASK) +#define USBC_ENDPTCTRL14_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL14_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL14_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_TXT_SHIFT)) & USBC_ENDPTCTRL14_TXT_MASK) +#define USBC_ENDPTCTRL14_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL14_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL14_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL14_RESERVED_20_MASK) +#define USBC_ENDPTCTRL14_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL14_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL14_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_TXI_SHIFT)) & USBC_ENDPTCTRL14_TXI_MASK) +#define USBC_ENDPTCTRL14_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL14_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL14_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_TXR_SHIFT)) & USBC_ENDPTCTRL14_TXR_MASK) +#define USBC_ENDPTCTRL14_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL14_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL14_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_TXE_SHIFT)) & USBC_ENDPTCTRL14_TXE_MASK) +#define USBC_ENDPTCTRL14_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL14_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL14_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL14_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL14_RESERVED_24_MASK) +/*! @} */ + +/*! @name ENDPTCTRL15 - */ +/*! @{ */ +#define USBC_ENDPTCTRL15_RXS_MASK (0x1U) +#define USBC_ENDPTCTRL15_RXS_SHIFT (0U) +#define USBC_ENDPTCTRL15_RXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RXS_SHIFT)) & USBC_ENDPTCTRL15_RXS_MASK) +#define USBC_ENDPTCTRL15_RXD_MASK (0x2U) +#define USBC_ENDPTCTRL15_RXD_SHIFT (1U) +#define USBC_ENDPTCTRL15_RXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RXD_SHIFT)) & USBC_ENDPTCTRL15_RXD_MASK) +#define USBC_ENDPTCTRL15_RXT_MASK (0xCU) +#define USBC_ENDPTCTRL15_RXT_SHIFT (2U) +#define USBC_ENDPTCTRL15_RXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RXT_SHIFT)) & USBC_ENDPTCTRL15_RXT_MASK) +#define USBC_ENDPTCTRL15_RESERVED_4_MASK (0x10U) +#define USBC_ENDPTCTRL15_RESERVED_4_SHIFT (4U) +#define USBC_ENDPTCTRL15_RESERVED_4(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RESERVED_4_SHIFT)) & USBC_ENDPTCTRL15_RESERVED_4_MASK) +#define USBC_ENDPTCTRL15_RXI_MASK (0x20U) +#define USBC_ENDPTCTRL15_RXI_SHIFT (5U) +#define USBC_ENDPTCTRL15_RXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RXI_SHIFT)) & USBC_ENDPTCTRL15_RXI_MASK) +#define USBC_ENDPTCTRL15_RXR_MASK (0x40U) +#define USBC_ENDPTCTRL15_RXR_SHIFT (6U) +/*! RXR - ws + */ +#define USBC_ENDPTCTRL15_RXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RXR_SHIFT)) & USBC_ENDPTCTRL15_RXR_MASK) +#define USBC_ENDPTCTRL15_RXE_MASK (0x80U) +#define USBC_ENDPTCTRL15_RXE_SHIFT (7U) +#define USBC_ENDPTCTRL15_RXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RXE_SHIFT)) & USBC_ENDPTCTRL15_RXE_MASK) +#define USBC_ENDPTCTRL15_RESERVED_8_MASK (0xFF00U) +#define USBC_ENDPTCTRL15_RESERVED_8_SHIFT (8U) +#define USBC_ENDPTCTRL15_RESERVED_8(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RESERVED_8_SHIFT)) & USBC_ENDPTCTRL15_RESERVED_8_MASK) +#define USBC_ENDPTCTRL15_TXS_MASK (0x10000U) +#define USBC_ENDPTCTRL15_TXS_SHIFT (16U) +#define USBC_ENDPTCTRL15_TXS(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_TXS_SHIFT)) & USBC_ENDPTCTRL15_TXS_MASK) +#define USBC_ENDPTCTRL15_TXD_MASK (0x20000U) +#define USBC_ENDPTCTRL15_TXD_SHIFT (17U) +#define USBC_ENDPTCTRL15_TXD(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_TXD_SHIFT)) & USBC_ENDPTCTRL15_TXD_MASK) +#define USBC_ENDPTCTRL15_TXT_MASK (0xC0000U) +#define USBC_ENDPTCTRL15_TXT_SHIFT (18U) +#define USBC_ENDPTCTRL15_TXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_TXT_SHIFT)) & USBC_ENDPTCTRL15_TXT_MASK) +#define USBC_ENDPTCTRL15_RESERVED_20_MASK (0x100000U) +#define USBC_ENDPTCTRL15_RESERVED_20_SHIFT (20U) +#define USBC_ENDPTCTRL15_RESERVED_20(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RESERVED_20_SHIFT)) & USBC_ENDPTCTRL15_RESERVED_20_MASK) +#define USBC_ENDPTCTRL15_TXI_MASK (0x200000U) +#define USBC_ENDPTCTRL15_TXI_SHIFT (21U) +#define USBC_ENDPTCTRL15_TXI(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_TXI_SHIFT)) & USBC_ENDPTCTRL15_TXI_MASK) +#define USBC_ENDPTCTRL15_TXR_MASK (0x400000U) +#define USBC_ENDPTCTRL15_TXR_SHIFT (22U) +/*! TXR - ws + */ +#define USBC_ENDPTCTRL15_TXR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_TXR_SHIFT)) & USBC_ENDPTCTRL15_TXR_MASK) +#define USBC_ENDPTCTRL15_TXE_MASK (0x800000U) +#define USBC_ENDPTCTRL15_TXE_SHIFT (23U) +#define USBC_ENDPTCTRL15_TXE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_TXE_SHIFT)) & USBC_ENDPTCTRL15_TXE_MASK) +#define USBC_ENDPTCTRL15_RESERVED_24_MASK (0xFF000000U) +#define USBC_ENDPTCTRL15_RESERVED_24_SHIFT (24U) +#define USBC_ENDPTCTRL15_RESERVED_24(x) (((uint32_t)(((uint32_t)(x)) << USBC_ENDPTCTRL15_RESERVED_24_SHIFT)) & USBC_ENDPTCTRL15_RESERVED_24_MASK) +/*! @} */ + +/*! @name PHY_ID - */ +/*! @{ */ +#define USBC_PHY_ID_CID0_MASK (0xFFU) +#define USBC_PHY_ID_CID0_SHIFT (0U) +#define USBC_PHY_ID_CID0(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_ID_CID0_SHIFT)) & USBC_PHY_ID_CID0_MASK) +#define USBC_PHY_ID_CID1_MASK (0xFF00U) +#define USBC_PHY_ID_CID1_SHIFT (8U) +#define USBC_PHY_ID_CID1(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_ID_CID1_SHIFT)) & USBC_PHY_ID_CID1_MASK) +/*! @} */ + +/*! @name PLL_CONTROL_0 - */ +/*! @{ */ +#define USBC_PLL_CONTROL_0_FBDIV_MASK (0x1FFU) +#define USBC_PLL_CONTROL_0_FBDIV_SHIFT (0U) +#define USBC_PLL_CONTROL_0_FBDIV(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_0_FBDIV_SHIFT)) & USBC_PLL_CONTROL_0_FBDIV_MASK) +#define USBC_PLL_CONTROL_0_REFDIV_MASK (0x3E00U) +#define USBC_PLL_CONTROL_0_REFDIV_SHIFT (9U) +#define USBC_PLL_CONTROL_0_REFDIV(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_0_REFDIV_SHIFT)) & USBC_PLL_CONTROL_0_REFDIV_MASK) +#define USBC_PLL_CONTROL_0_PLLVDD18_MASK (0xC000U) +#define USBC_PLL_CONTROL_0_PLLVDD18_SHIFT (14U) +#define USBC_PLL_CONTROL_0_PLLVDD18(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_0_PLLVDD18_SHIFT)) & USBC_PLL_CONTROL_0_PLLVDD18_MASK) +/*! @} */ + +/*! @name PLL_CONTROL_1 - */ +/*! @{ */ +#define USBC_PLL_CONTROL_1_PLLCAL12_MASK (0x3U) +#define USBC_PLL_CONTROL_1_PLLCAL12_SHIFT (0U) +#define USBC_PLL_CONTROL_1_PLLCAL12(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_PLLCAL12_SHIFT)) & USBC_PLL_CONTROL_1_PLLCAL12_MASK) +#define USBC_PLL_CONTROL_1_VCOCAL_START_MASK (0x4U) +#define USBC_PLL_CONTROL_1_VCOCAL_START_SHIFT (2U) +#define USBC_PLL_CONTROL_1_VCOCAL_START(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_VCOCAL_START_SHIFT)) & USBC_PLL_CONTROL_1_VCOCAL_START_MASK) +#define USBC_PLL_CONTROL_1_CLK_BLK_EN_MASK (0x8U) +#define USBC_PLL_CONTROL_1_CLK_BLK_EN_SHIFT (3U) +#define USBC_PLL_CONTROL_1_CLK_BLK_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_CLK_BLK_EN_SHIFT)) & USBC_PLL_CONTROL_1_CLK_BLK_EN_MASK) +#define USBC_PLL_CONTROL_1_KVCO_MASK (0x70U) +#define USBC_PLL_CONTROL_1_KVCO_SHIFT (4U) +#define USBC_PLL_CONTROL_1_KVCO(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_KVCO_SHIFT)) & USBC_PLL_CONTROL_1_KVCO_MASK) +#define USBC_PLL_CONTROL_1_KVCO_EXT_MASK (0x80U) +#define USBC_PLL_CONTROL_1_KVCO_EXT_SHIFT (7U) +#define USBC_PLL_CONTROL_1_KVCO_EXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_KVCO_EXT_SHIFT)) & USBC_PLL_CONTROL_1_KVCO_EXT_MASK) +#define USBC_PLL_CONTROL_1_ICP_MASK (0x700U) +#define USBC_PLL_CONTROL_1_ICP_SHIFT (8U) +#define USBC_PLL_CONTROL_1_ICP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_ICP_SHIFT)) & USBC_PLL_CONTROL_1_ICP_MASK) +#define USBC_PLL_CONTROL_1_DLL_RESET_BLK_MASK (0x800U) +#define USBC_PLL_CONTROL_1_DLL_RESET_BLK_SHIFT (11U) +#define USBC_PLL_CONTROL_1_DLL_RESET_BLK(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_DLL_RESET_BLK_SHIFT)) & USBC_PLL_CONTROL_1_DLL_RESET_BLK_MASK) +#define USBC_PLL_CONTROL_1_PLL_LOCK_BYPASS_MASK (0x1000U) +#define USBC_PLL_CONTROL_1_PLL_LOCK_BYPASS_SHIFT (12U) +#define USBC_PLL_CONTROL_1_PLL_LOCK_BYPASS(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_PLL_LOCK_BYPASS_SHIFT)) & USBC_PLL_CONTROL_1_PLL_LOCK_BYPASS_MASK) +#define USBC_PLL_CONTROL_1_PU_PLL_MASK (0x2000U) +#define USBC_PLL_CONTROL_1_PU_PLL_SHIFT (13U) +#define USBC_PLL_CONTROL_1_PU_PLL(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_PU_PLL_SHIFT)) & USBC_PLL_CONTROL_1_PU_PLL_MASK) +#define USBC_PLL_CONTROL_1_PLL_CONTRL_BY_PIN_MASK (0x4000U) +#define USBC_PLL_CONTROL_1_PLL_CONTRL_BY_PIN_SHIFT (14U) +#define USBC_PLL_CONTROL_1_PLL_CONTRL_BY_PIN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_PLL_CONTRL_BY_PIN_SHIFT)) & USBC_PLL_CONTROL_1_PLL_CONTRL_BY_PIN_MASK) +#define USBC_PLL_CONTROL_1_PLL_READY_MASK (0x8000U) +#define USBC_PLL_CONTROL_1_PLL_READY_SHIFT (15U) +#define USBC_PLL_CONTROL_1_PLL_READY(x) (((uint32_t)(((uint32_t)(x)) << USBC_PLL_CONTROL_1_PLL_READY_SHIFT)) & USBC_PLL_CONTROL_1_PLL_READY_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR3 - */ +/*! @{ */ +#define USBC_RESERVED_ADDR3_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR3_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR3_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR3_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR3_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name TX_CHANNEL_CONTRL_0 - */ +/*! @{ */ +#define USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_MASK (0xFU) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_SHIFT (0U) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_MASK) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_MASK (0xF0U) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_SHIFT (4U) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_MASK) +#define USBC_TX_CHANNEL_CONTRL_0_IMPCAL_VTH_MASK (0x700U) +#define USBC_TX_CHANNEL_CONTRL_0_IMPCAL_VTH_SHIFT (8U) +#define USBC_TX_CHANNEL_CONTRL_0_IMPCAL_VTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_IMPCAL_VTH_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_IMPCAL_VTH_MASK) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_EN_MASK (0x800U) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_EN_SHIFT (11U) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_EN_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_EXT_FS_RCAL_EN_MASK) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_EN_MASK (0x1000U) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_EN_SHIFT (12U) +#define USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_EN_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_EXT_HS_RCAL_EN_MASK) +#define USBC_TX_CHANNEL_CONTRL_0_RCAL_START_MASK (0x2000U) +#define USBC_TX_CHANNEL_CONTRL_0_RCAL_START_SHIFT (13U) +#define USBC_TX_CHANNEL_CONTRL_0_RCAL_START(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_RCAL_START_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_RCAL_START_MASK) +#define USBC_TX_CHANNEL_CONTRL_0_TXDATA_BLOCK_EN_MASK (0x4000U) +#define USBC_TX_CHANNEL_CONTRL_0_TXDATA_BLOCK_EN_SHIFT (14U) +#define USBC_TX_CHANNEL_CONTRL_0_TXDATA_BLOCK_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_TXDATA_BLOCK_EN_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_TXDATA_BLOCK_EN_MASK) +#define USBC_TX_CHANNEL_CONTRL_0_ND_MASK (0x8000U) +#define USBC_TX_CHANNEL_CONTRL_0_ND_SHIFT (15U) +#define USBC_TX_CHANNEL_CONTRL_0_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_0_ND_SHIFT)) & USBC_TX_CHANNEL_CONTRL_0_ND_MASK) +/*! @} */ + +/*! @name TX_CHANNEL_CONTRL_1 - */ +/*! @{ */ +#define USBC_TX_CHANNEL_CONTRL_1_CK60_PHSEL_MASK (0xFU) +#define USBC_TX_CHANNEL_CONTRL_1_CK60_PHSEL_SHIFT (0U) +#define USBC_TX_CHANNEL_CONTRL_1_CK60_PHSEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_1_CK60_PHSEL_SHIFT)) & USBC_TX_CHANNEL_CONTRL_1_CK60_PHSEL_MASK) +#define USBC_TX_CHANNEL_CONTRL_1_AMP_MASK (0x70U) +#define USBC_TX_CHANNEL_CONTRL_1_AMP_SHIFT (4U) +#define USBC_TX_CHANNEL_CONTRL_1_AMP(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_1_AMP_SHIFT)) & USBC_TX_CHANNEL_CONTRL_1_AMP_MASK) +#define USBC_TX_CHANNEL_CONTRL_1_LOWVDD_EN_MASK (0x80U) +#define USBC_TX_CHANNEL_CONTRL_1_LOWVDD_EN_SHIFT (7U) +#define USBC_TX_CHANNEL_CONTRL_1_LOWVDD_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_1_LOWVDD_EN_SHIFT)) & USBC_TX_CHANNEL_CONTRL_1_LOWVDD_EN_MASK) +#define USBC_TX_CHANNEL_CONTRL_1_TXVDD12_MASK (0x300U) +#define USBC_TX_CHANNEL_CONTRL_1_TXVDD12_SHIFT (8U) +#define USBC_TX_CHANNEL_CONTRL_1_TXVDD12(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_1_TXVDD12_SHIFT)) & USBC_TX_CHANNEL_CONTRL_1_TXVDD12_MASK) +#define USBC_TX_CHANNEL_CONTRL_1_TXVDD15_MASK (0xC00U) +#define USBC_TX_CHANNEL_CONTRL_1_TXVDD15_SHIFT (10U) +#define USBC_TX_CHANNEL_CONTRL_1_TXVDD15(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_1_TXVDD15_SHIFT)) & USBC_TX_CHANNEL_CONTRL_1_TXVDD15_MASK) +#define USBC_TX_CHANNEL_CONTRL_1_ND_MASK (0xF000U) +#define USBC_TX_CHANNEL_CONTRL_1_ND_SHIFT (12U) +#define USBC_TX_CHANNEL_CONTRL_1_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_1_ND_SHIFT)) & USBC_TX_CHANNEL_CONTRL_1_ND_MASK) +/*! @} */ + +/*! @name TX_CHANNEL_CONTRL_2 - */ +/*! @{ */ +#define USBC_TX_CHANNEL_CONTRL_2_HSDRV_EN_MASK (0xFU) +#define USBC_TX_CHANNEL_CONTRL_2_HSDRV_EN_SHIFT (0U) +#define USBC_TX_CHANNEL_CONTRL_2_HSDRV_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_2_HSDRV_EN_SHIFT)) & USBC_TX_CHANNEL_CONTRL_2_HSDRV_EN_MASK) +#define USBC_TX_CHANNEL_CONTRL_2_FSDRV_EN_MASK (0xF0U) +#define USBC_TX_CHANNEL_CONTRL_2_FSDRV_EN_SHIFT (4U) +#define USBC_TX_CHANNEL_CONTRL_2_FSDRV_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_2_FSDRV_EN_SHIFT)) & USBC_TX_CHANNEL_CONTRL_2_FSDRV_EN_MASK) +#define USBC_TX_CHANNEL_CONTRL_2_IMP_CAL_DLY_MASK (0x300U) +#define USBC_TX_CHANNEL_CONTRL_2_IMP_CAL_DLY_SHIFT (8U) +#define USBC_TX_CHANNEL_CONTRL_2_IMP_CAL_DLY(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_2_IMP_CAL_DLY_SHIFT)) & USBC_TX_CHANNEL_CONTRL_2_IMP_CAL_DLY_MASK) +#define USBC_TX_CHANNEL_CONTRL_2_DRV_SLEWRATE_MASK (0xC00U) +#define USBC_TX_CHANNEL_CONTRL_2_DRV_SLEWRATE_SHIFT (10U) +#define USBC_TX_CHANNEL_CONTRL_2_DRV_SLEWRATE(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_2_DRV_SLEWRATE_SHIFT)) & USBC_TX_CHANNEL_CONTRL_2_DRV_SLEWRATE_MASK) +#define USBC_TX_CHANNEL_CONTRL_2_ND_MASK (0xF000U) +#define USBC_TX_CHANNEL_CONTRL_2_ND_SHIFT (12U) +#define USBC_TX_CHANNEL_CONTRL_2_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_TX_CHANNEL_CONTRL_2_ND_SHIFT)) & USBC_TX_CHANNEL_CONTRL_2_ND_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR7 - */ +/*! @{ */ +#define USBC_RESERVED_ADDR7_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR7_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR7_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR7_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR7_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name RX_CHANNEL_CONTRL_0 - */ +/*! @{ */ +#define USBC_RX_CHANNEL_CONTRL_0_INTPI_MASK (0x3U) +#define USBC_RX_CHANNEL_CONTRL_0_INTPI_SHIFT (0U) +#define USBC_RX_CHANNEL_CONTRL_0_INTPI(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_INTPI_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_INTPI_MASK) +#define USBC_RX_CHANNEL_CONTRL_0_LPF_COEF_MASK (0xCU) +#define USBC_RX_CHANNEL_CONTRL_0_LPF_COEF_SHIFT (2U) +#define USBC_RX_CHANNEL_CONTRL_0_LPF_COEF(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_LPF_COEF_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_LPF_COEF_MASK) +#define USBC_RX_CHANNEL_CONTRL_0_SQ_THRESH_MASK (0xF0U) +#define USBC_RX_CHANNEL_CONTRL_0_SQ_THRESH_SHIFT (4U) +#define USBC_RX_CHANNEL_CONTRL_0_SQ_THRESH(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_SQ_THRESH_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_SQ_THRESH_MASK) +#define USBC_RX_CHANNEL_CONTRL_0_DISCON_THRESH_MASK (0x300U) +#define USBC_RX_CHANNEL_CONTRL_0_DISCON_THRESH_SHIFT (8U) +#define USBC_RX_CHANNEL_CONTRL_0_DISCON_THRESH(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_DISCON_THRESH_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_DISCON_THRESH_MASK) +#define USBC_RX_CHANNEL_CONTRL_0_SQ_LENGTH_MASK (0xC00U) +#define USBC_RX_CHANNEL_CONTRL_0_SQ_LENGTH_SHIFT (10U) +#define USBC_RX_CHANNEL_CONTRL_0_SQ_LENGTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_SQ_LENGTH_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_SQ_LENGTH_MASK) +#define USBC_RX_CHANNEL_CONTRL_0_ACQ_LENGTH_MASK (0x3000U) +#define USBC_RX_CHANNEL_CONTRL_0_ACQ_LENGTH_SHIFT (12U) +#define USBC_RX_CHANNEL_CONTRL_0_ACQ_LENGTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_ACQ_LENGTH_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_ACQ_LENGTH_MASK) +#define USBC_RX_CHANNEL_CONTRL_0_USQ_LENGTH_MASK (0x4000U) +#define USBC_RX_CHANNEL_CONTRL_0_USQ_LENGTH_SHIFT (14U) +#define USBC_RX_CHANNEL_CONTRL_0_USQ_LENGTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_USQ_LENGTH_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_USQ_LENGTH_MASK) +#define USBC_RX_CHANNEL_CONTRL_0_PHASE_FREEZE_DLY_MASK (0x8000U) +#define USBC_RX_CHANNEL_CONTRL_0_PHASE_FREEZE_DLY_SHIFT (15U) +#define USBC_RX_CHANNEL_CONTRL_0_PHASE_FREEZE_DLY(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_0_PHASE_FREEZE_DLY_SHIFT)) & USBC_RX_CHANNEL_CONTRL_0_PHASE_FREEZE_DLY_MASK) +/*! @} */ + +/*! @name RX_CHANNEL_CONTRL_1 - */ +/*! @{ */ +#define USBC_RX_CHANNEL_CONTRL_1_S2TO3_DLY_SEL_MASK (0x3U) +#define USBC_RX_CHANNEL_CONTRL_1_S2TO3_DLY_SEL_SHIFT (0U) +#define USBC_RX_CHANNEL_CONTRL_1_S2TO3_DLY_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_S2TO3_DLY_SEL_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_S2TO3_DLY_SEL_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_CDR_FASTLOCK_EN_MASK (0x4U) +#define USBC_RX_CHANNEL_CONTRL_1_CDR_FASTLOCK_EN_SHIFT (2U) +#define USBC_RX_CHANNEL_CONTRL_1_CDR_FASTLOCK_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_CDR_FASTLOCK_EN_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_CDR_FASTLOCK_EN_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_CDR_COEF_SEL_MASK (0x8U) +#define USBC_RX_CHANNEL_CONTRL_1_CDR_COEF_SEL_SHIFT (3U) +#define USBC_RX_CHANNEL_CONTRL_1_CDR_COEF_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_CDR_COEF_SEL_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_CDR_COEF_SEL_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_SEL_MASK (0x30U) +#define USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_SEL_SHIFT (4U) +#define USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_SEL_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_SEL_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_LENGTH_MASK (0xC0U) +#define USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_LENGTH_SHIFT (6U) +#define USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_LENGTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_LENGTH_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_LENGTH_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_CAP_SEL_MASK (0x700U) +#define USBC_RX_CHANNEL_CONTRL_1_CAP_SEL_SHIFT (8U) +#define USBC_RX_CHANNEL_CONTRL_1_CAP_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_CAP_SEL_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_CAP_SEL_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_EN_MASK (0x800U) +#define USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_EN_SHIFT (11U) +#define USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_EN_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_EDGE_DET_EN_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_EN_MASK (0x1000U) +#define USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_EN_SHIFT (12U) +#define USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_EN_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_RXDATA_BLOCK_EN_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_EARLY_VOS_ON_EN_MASK (0x2000U) +#define USBC_RX_CHANNEL_CONTRL_1_EARLY_VOS_ON_EN_SHIFT (13U) +#define USBC_RX_CHANNEL_CONTRL_1_EARLY_VOS_ON_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_EARLY_VOS_ON_EN_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_EARLY_VOS_ON_EN_MASK) +#define USBC_RX_CHANNEL_CONTRL_1_ND_MASK (0xC000U) +#define USBC_RX_CHANNEL_CONTRL_1_ND_SHIFT (14U) +#define USBC_RX_CHANNEL_CONTRL_1_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_1_ND_SHIFT)) & USBC_RX_CHANNEL_CONTRL_1_ND_MASK) +/*! @} */ + +/*! @name RX_CHANNEL_CONTRL_2 - */ +/*! @{ */ +#define USBC_RX_CHANNEL_CONTRL_2_RXVDD12_MASK (0x3U) +#define USBC_RX_CHANNEL_CONTRL_2_RXVDD12_SHIFT (0U) +#define USBC_RX_CHANNEL_CONTRL_2_RXVDD12(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_RXVDD12_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_RXVDD12_MASK) +#define USBC_RX_CHANNEL_CONTRL_2_RXVDD18_MASK (0xCU) +#define USBC_RX_CHANNEL_CONTRL_2_RXVDD18_SHIFT (2U) +#define USBC_RX_CHANNEL_CONTRL_2_RXVDD18(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_RXVDD18_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_RXVDD18_MASK) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_ALWAYS_ON_MASK (0x10U) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_ALWAYS_ON_SHIFT (4U) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_ALWAYS_ON(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_SQ_ALWAYS_ON_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_SQ_ALWAYS_ON_MASK) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_BUFFER_EN_MASK (0x20U) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_BUFFER_EN_SHIFT (5U) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_BUFFER_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_SQ_BUFFER_EN_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_SQ_BUFFER_EN_MASK) +#define USBC_RX_CHANNEL_CONTRL_2_SAMPLER_CTRL_MASK (0x40U) +#define USBC_RX_CHANNEL_CONTRL_2_SAMPLER_CTRL_SHIFT (6U) +#define USBC_RX_CHANNEL_CONTRL_2_SAMPLER_CTRL(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_SAMPLER_CTRL_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_SAMPLER_CTRL_MASK) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_CM_SEL_MASK (0x80U) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_CM_SEL_SHIFT (7U) +#define USBC_RX_CHANNEL_CONTRL_2_SQ_CM_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_SQ_CM_SEL_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_SQ_CM_SEL_MASK) +#define USBC_RX_CHANNEL_CONTRL_2_USQ_FILTER_MASK (0x100U) +#define USBC_RX_CHANNEL_CONTRL_2_USQ_FILTER_SHIFT (8U) +#define USBC_RX_CHANNEL_CONTRL_2_USQ_FILTER(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_USQ_FILTER_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_USQ_FILTER_MASK) +#define USBC_RX_CHANNEL_CONTRL_2_ND_MASK (0xFE00U) +#define USBC_RX_CHANNEL_CONTRL_2_ND_SHIFT (9U) +#define USBC_RX_CHANNEL_CONTRL_2_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_RX_CHANNEL_CONTRL_2_ND_SHIFT)) & USBC_RX_CHANNEL_CONTRL_2_ND_MASK) +/*! @} */ + +/*! @name ANA_CONTRL_0 - */ +/*! @{ */ +#define USBC_ANA_CONTRL_0_IPTAT_SEL_MASK (0x7U) +#define USBC_ANA_CONTRL_0_IPTAT_SEL_SHIFT (0U) +#define USBC_ANA_CONTRL_0_IPTAT_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_0_IPTAT_SEL_SHIFT)) & USBC_ANA_CONTRL_0_IPTAT_SEL_MASK) +#define USBC_ANA_CONTRL_0_VDD_USB2_DIG_TOP_SEL_MASK (0x8U) +#define USBC_ANA_CONTRL_0_VDD_USB2_DIG_TOP_SEL_SHIFT (3U) +#define USBC_ANA_CONTRL_0_VDD_USB2_DIG_TOP_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_0_VDD_USB2_DIG_TOP_SEL_SHIFT)) & USBC_ANA_CONTRL_0_VDD_USB2_DIG_TOP_SEL_MASK) +#define USBC_ANA_CONTRL_0_TOPVDD18_MASK (0x30U) +#define USBC_ANA_CONTRL_0_TOPVDD18_SHIFT (4U) +#define USBC_ANA_CONTRL_0_TOPVDD18(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_0_TOPVDD18_SHIFT)) & USBC_ANA_CONTRL_0_TOPVDD18_MASK) +#define USBC_ANA_CONTRL_0_DIG_SEL_MASK (0xC0U) +#define USBC_ANA_CONTRL_0_DIG_SEL_SHIFT (6U) +#define USBC_ANA_CONTRL_0_DIG_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_0_DIG_SEL_SHIFT)) & USBC_ANA_CONTRL_0_DIG_SEL_MASK) +#define USBC_ANA_CONTRL_0_BG_VSEL_MASK (0x300U) +#define USBC_ANA_CONTRL_0_BG_VSEL_SHIFT (8U) +#define USBC_ANA_CONTRL_0_BG_VSEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_0_BG_VSEL_SHIFT)) & USBC_ANA_CONTRL_0_BG_VSEL_MASK) +#define USBC_ANA_CONTRL_0_ND_MASK (0xFC00U) +#define USBC_ANA_CONTRL_0_ND_SHIFT (10U) +#define USBC_ANA_CONTRL_0_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_0_ND_SHIFT)) & USBC_ANA_CONTRL_0_ND_MASK) +/*! @} */ + +/*! @name ANA_CONTRL_1 - */ +/*! @{ */ +#define USBC_ANA_CONTRL_1_TESTMON_ANA_MASK (0x3FU) +#define USBC_ANA_CONTRL_1_TESTMON_ANA_SHIFT (0U) +#define USBC_ANA_CONTRL_1_TESTMON_ANA(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_TESTMON_ANA_SHIFT)) & USBC_ANA_CONTRL_1_TESTMON_ANA_MASK) +#define USBC_ANA_CONTRL_1_STRESS_TEST_MODE_MASK (0x40U) +#define USBC_ANA_CONTRL_1_STRESS_TEST_MODE_SHIFT (6U) +#define USBC_ANA_CONTRL_1_STRESS_TEST_MODE(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_STRESS_TEST_MODE_SHIFT)) & USBC_ANA_CONTRL_1_STRESS_TEST_MODE_MASK) +#define USBC_ANA_CONTRL_1_R_ROTATE_SEL_MASK (0x80U) +#define USBC_ANA_CONTRL_1_R_ROTATE_SEL_SHIFT (7U) +#define USBC_ANA_CONTRL_1_R_ROTATE_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_R_ROTATE_SEL_SHIFT)) & USBC_ANA_CONTRL_1_R_ROTATE_SEL_MASK) +#define USBC_ANA_CONTRL_1_V2I_MASK (0x700U) +#define USBC_ANA_CONTRL_1_V2I_SHIFT (8U) +#define USBC_ANA_CONTRL_1_V2I(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_V2I_SHIFT)) & USBC_ANA_CONTRL_1_V2I_MASK) +#define USBC_ANA_CONTRL_1_V2I_EXT_MASK (0x800U) +#define USBC_ANA_CONTRL_1_V2I_EXT_SHIFT (11U) +#define USBC_ANA_CONTRL_1_V2I_EXT(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_V2I_EXT_SHIFT)) & USBC_ANA_CONTRL_1_V2I_EXT_MASK) +#define USBC_ANA_CONTRL_1_SEL_LPFR_MASK (0x1000U) +#define USBC_ANA_CONTRL_1_SEL_LPFR_SHIFT (12U) +#define USBC_ANA_CONTRL_1_SEL_LPFR(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_SEL_LPFR_SHIFT)) & USBC_ANA_CONTRL_1_SEL_LPFR_MASK) +#define USBC_ANA_CONTRL_1_ANA_CONTRL_BY_PIN_MASK (0x2000U) +#define USBC_ANA_CONTRL_1_ANA_CONTRL_BY_PIN_SHIFT (13U) +#define USBC_ANA_CONTRL_1_ANA_CONTRL_BY_PIN(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_ANA_CONTRL_BY_PIN_SHIFT)) & USBC_ANA_CONTRL_1_ANA_CONTRL_BY_PIN_MASK) +#define USBC_ANA_CONTRL_1_PU_ANA_MASK (0x4000U) +#define USBC_ANA_CONTRL_1_PU_ANA_SHIFT (14U) +#define USBC_ANA_CONTRL_1_PU_ANA(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_PU_ANA_SHIFT)) & USBC_ANA_CONTRL_1_PU_ANA_MASK) +#define USBC_ANA_CONTRL_1_ND_MASK (0x8000U) +#define USBC_ANA_CONTRL_1_ND_SHIFT (15U) +#define USBC_ANA_CONTRL_1_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_ANA_CONTRL_1_ND_SHIFT)) & USBC_ANA_CONTRL_1_ND_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR_C - */ +/*! @{ */ +#define USBC_RESERVED_ADDR_C_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR_C_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR_C_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR_C_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR_C_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name DIGITAL_CONTROL_0 - */ +/*! @{ */ +#define USBC_DIGITAL_CONTROL_0_FIFO_FILL_NUM_MASK (0xFU) +#define USBC_DIGITAL_CONTROL_0_FIFO_FILL_NUM_SHIFT (0U) +#define USBC_DIGITAL_CONTROL_0_FIFO_FILL_NUM(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_FIFO_FILL_NUM_SHIFT)) & USBC_DIGITAL_CONTROL_0_FIFO_FILL_NUM_MASK) +#define USBC_DIGITAL_CONTROL_0_SYNC_NUM_MASK (0x30U) +#define USBC_DIGITAL_CONTROL_0_SYNC_NUM_SHIFT (4U) +#define USBC_DIGITAL_CONTROL_0_SYNC_NUM(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_SYNC_NUM_SHIFT)) & USBC_DIGITAL_CONTROL_0_SYNC_NUM_MASK) +#define USBC_DIGITAL_CONTROL_0_HS_DRIBBLE_EN_MASK (0x40U) +#define USBC_DIGITAL_CONTROL_0_HS_DRIBBLE_EN_SHIFT (6U) +#define USBC_DIGITAL_CONTROL_0_HS_DRIBBLE_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_HS_DRIBBLE_EN_SHIFT)) & USBC_DIGITAL_CONTROL_0_HS_DRIBBLE_EN_MASK) +#define USBC_DIGITAL_CONTROL_0_CLK_SUSPEND_EN_MASK (0x80U) +#define USBC_DIGITAL_CONTROL_0_CLK_SUSPEND_EN_SHIFT (7U) +#define USBC_DIGITAL_CONTROL_0_CLK_SUSPEND_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_CLK_SUSPEND_EN_SHIFT)) & USBC_DIGITAL_CONTROL_0_CLK_SUSPEND_EN_MASK) +#define USBC_DIGITAL_CONTROL_0_SYNCDET_WINDOW_EN_MASK (0x100U) +#define USBC_DIGITAL_CONTROL_0_SYNCDET_WINDOW_EN_SHIFT (8U) +#define USBC_DIGITAL_CONTROL_0_SYNCDET_WINDOW_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_SYNCDET_WINDOW_EN_SHIFT)) & USBC_DIGITAL_CONTROL_0_SYNCDET_WINDOW_EN_MASK) +#define USBC_DIGITAL_CONTROL_0_EARLY_TX_EN_MASK (0x200U) +#define USBC_DIGITAL_CONTROL_0_EARLY_TX_EN_SHIFT (9U) +#define USBC_DIGITAL_CONTROL_0_EARLY_TX_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_EARLY_TX_EN_SHIFT)) & USBC_DIGITAL_CONTROL_0_EARLY_TX_EN_MASK) +#define USBC_DIGITAL_CONTROL_0_FORCE_END_EN_MASK (0x400U) +#define USBC_DIGITAL_CONTROL_0_FORCE_END_EN_SHIFT (10U) +#define USBC_DIGITAL_CONTROL_0_FORCE_END_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_FORCE_END_EN_SHIFT)) & USBC_DIGITAL_CONTROL_0_FORCE_END_EN_MASK) +#define USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL0_MASK (0x800U) +#define USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL0_SHIFT (11U) +#define USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL0(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL0_SHIFT)) & USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL0_MASK) +#define USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL1_MASK (0x1000U) +#define USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL1_SHIFT (12U) +#define USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL1(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL1_SHIFT)) & USBC_DIGITAL_CONTROL_0_HOST_DISCON_SEL1_MASK) +#define USBC_DIGITAL_CONTROL_0_FS_EOP_MODE_MASK (0x2000U) +#define USBC_DIGITAL_CONTROL_0_FS_EOP_MODE_SHIFT (13U) +#define USBC_DIGITAL_CONTROL_0_FS_EOP_MODE(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_FS_EOP_MODE_SHIFT)) & USBC_DIGITAL_CONTROL_0_FS_EOP_MODE_MASK) +#define USBC_DIGITAL_CONTROL_0_FIFO_OV_MASK (0x4000U) +#define USBC_DIGITAL_CONTROL_0_FIFO_OV_SHIFT (14U) +#define USBC_DIGITAL_CONTROL_0_FIFO_OV(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_FIFO_OV_SHIFT)) & USBC_DIGITAL_CONTROL_0_FIFO_OV_MASK) +#define USBC_DIGITAL_CONTROL_0_FIFO_UF_MASK (0x8000U) +#define USBC_DIGITAL_CONTROL_0_FIFO_UF_SHIFT (15U) +#define USBC_DIGITAL_CONTROL_0_FIFO_UF(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_0_FIFO_UF_SHIFT)) & USBC_DIGITAL_CONTROL_0_FIFO_UF_MASK) +/*! @} */ + +/*! @name DIGITAL_CONTROL_1 - */ +/*! @{ */ +#define USBC_DIGITAL_CONTROL_1_MON_SEL_MASK (0x3FU) +#define USBC_DIGITAL_CONTROL_1_MON_SEL_SHIFT (0U) +#define USBC_DIGITAL_CONTROL_1_MON_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_MON_SEL_SHIFT)) & USBC_DIGITAL_CONTROL_1_MON_SEL_MASK) +#define USBC_DIGITAL_CONTROL_1_SQ_RST_RX_MASK (0x40U) +#define USBC_DIGITAL_CONTROL_1_SQ_RST_RX_SHIFT (6U) +#define USBC_DIGITAL_CONTROL_1_SQ_RST_RX(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_SQ_RST_RX_SHIFT)) & USBC_DIGITAL_CONTROL_1_SQ_RST_RX_MASK) +#define USBC_DIGITAL_CONTROL_1_SYNC_IGNORE_SQ_MASK (0x80U) +#define USBC_DIGITAL_CONTROL_1_SYNC_IGNORE_SQ_SHIFT (7U) +#define USBC_DIGITAL_CONTROL_1_SYNC_IGNORE_SQ(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_SYNC_IGNORE_SQ_SHIFT)) & USBC_DIGITAL_CONTROL_1_SYNC_IGNORE_SQ_MASK) +#define USBC_DIGITAL_CONTROL_1_DM_PULLDOWN_MASK (0x100U) +#define USBC_DIGITAL_CONTROL_1_DM_PULLDOWN_SHIFT (8U) +#define USBC_DIGITAL_CONTROL_1_DM_PULLDOWN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_DM_PULLDOWN_SHIFT)) & USBC_DIGITAL_CONTROL_1_DM_PULLDOWN_MASK) +#define USBC_DIGITAL_CONTROL_1_DP_PULLDOWN_MASK (0x200U) +#define USBC_DIGITAL_CONTROL_1_DP_PULLDOWN_SHIFT (9U) +#define USBC_DIGITAL_CONTROL_1_DP_PULLDOWN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_DP_PULLDOWN_SHIFT)) & USBC_DIGITAL_CONTROL_1_DP_PULLDOWN_MASK) +#define USBC_DIGITAL_CONTROL_1_ARC_DPDM_MODE_MASK (0x400U) +#define USBC_DIGITAL_CONTROL_1_ARC_DPDM_MODE_SHIFT (10U) +#define USBC_DIGITAL_CONTROL_1_ARC_DPDM_MODE(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_ARC_DPDM_MODE_SHIFT)) & USBC_DIGITAL_CONTROL_1_ARC_DPDM_MODE_MASK) +#define USBC_DIGITAL_CONTROL_1_EXT_TX_CLK_SEL_MASK (0x800U) +#define USBC_DIGITAL_CONTROL_1_EXT_TX_CLK_SEL_SHIFT (11U) +#define USBC_DIGITAL_CONTROL_1_EXT_TX_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_EXT_TX_CLK_SEL_SHIFT)) & USBC_DIGITAL_CONTROL_1_EXT_TX_CLK_SEL_MASK) +#define USBC_DIGITAL_CONTROL_1_CLK_OUT_SEL_MASK (0x1000U) +#define USBC_DIGITAL_CONTROL_1_CLK_OUT_SEL_SHIFT (12U) +#define USBC_DIGITAL_CONTROL_1_CLK_OUT_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_CLK_OUT_SEL_SHIFT)) & USBC_DIGITAL_CONTROL_1_CLK_OUT_SEL_MASK) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE_MASK (0x2000U) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE_SHIFT (13U) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE_SHIFT)) & USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE_MASK) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE1_MASK (0x4000U) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE1_SHIFT (14U) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE1(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE1_SHIFT)) & USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE1_MASK) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE2_MASK (0x8000U) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE2_SHIFT (15U) +#define USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE2(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE2_SHIFT)) & USBC_DIGITAL_CONTROL_1_FS_RX_ERROR_MODE2_MASK) +/*! @} */ + +/*! @name DIGITAL_CONTROL_2 - */ +/*! @{ */ +#define USBC_DIGITAL_CONTROL_2_FS_HDL_OPMD_MASK (0x1U) +#define USBC_DIGITAL_CONTROL_2_FS_HDL_OPMD_SHIFT (0U) +#define USBC_DIGITAL_CONTROL_2_FS_HDL_OPMD(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_FS_HDL_OPMD_SHIFT)) & USBC_DIGITAL_CONTROL_2_FS_HDL_OPMD_MASK) +#define USBC_DIGITAL_CONTROL_2_HS_HDL_SYNC_MASK (0x2U) +#define USBC_DIGITAL_CONTROL_2_HS_HDL_SYNC_SHIFT (1U) +#define USBC_DIGITAL_CONTROL_2_HS_HDL_SYNC(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_HS_HDL_SYNC_SHIFT)) & USBC_DIGITAL_CONTROL_2_HS_HDL_SYNC_MASK) +#define USBC_DIGITAL_CONTROL_2_ALIGN_FS_OUTEN_MASK (0x4U) +#define USBC_DIGITAL_CONTROL_2_ALIGN_FS_OUTEN_SHIFT (2U) +#define USBC_DIGITAL_CONTROL_2_ALIGN_FS_OUTEN(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_ALIGN_FS_OUTEN_SHIFT)) & USBC_DIGITAL_CONTROL_2_ALIGN_FS_OUTEN_MASK) +#define USBC_DIGITAL_CONTROL_2_DISABLE_EL16_MASK (0x8U) +#define USBC_DIGITAL_CONTROL_2_DISABLE_EL16_SHIFT (3U) +#define USBC_DIGITAL_CONTROL_2_DISABLE_EL16(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_DISABLE_EL16_SHIFT)) & USBC_DIGITAL_CONTROL_2_DISABLE_EL16_MASK) +#define USBC_DIGITAL_CONTROL_2_NOVBUS_DPDM00_MASK (0x10U) +#define USBC_DIGITAL_CONTROL_2_NOVBUS_DPDM00_SHIFT (4U) +#define USBC_DIGITAL_CONTROL_2_NOVBUS_DPDM00(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_NOVBUS_DPDM00_SHIFT)) & USBC_DIGITAL_CONTROL_2_NOVBUS_DPDM00_MASK) +#define USBC_DIGITAL_CONTROL_2_LONG_EOP_MASK (0x20U) +#define USBC_DIGITAL_CONTROL_2_LONG_EOP_SHIFT (5U) +#define USBC_DIGITAL_CONTROL_2_LONG_EOP(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_LONG_EOP_SHIFT)) & USBC_DIGITAL_CONTROL_2_LONG_EOP_MASK) +#define USBC_DIGITAL_CONTROL_2_ND_MASK (0xC0U) +#define USBC_DIGITAL_CONTROL_2_ND_SHIFT (6U) +#define USBC_DIGITAL_CONTROL_2_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_ND_SHIFT)) & USBC_DIGITAL_CONTROL_2_ND_MASK) +#define USBC_DIGITAL_CONTROL_2_PAD_STRENGTH_MASK (0x1F00U) +#define USBC_DIGITAL_CONTROL_2_PAD_STRENGTH_SHIFT (8U) +#define USBC_DIGITAL_CONTROL_2_PAD_STRENGTH(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_PAD_STRENGTH_SHIFT)) & USBC_DIGITAL_CONTROL_2_PAD_STRENGTH_MASK) +#define USBC_DIGITAL_CONTROL_2_ND_15_13_MASK (0xE000U) +#define USBC_DIGITAL_CONTROL_2_ND_15_13_SHIFT (13U) +#define USBC_DIGITAL_CONTROL_2_ND_15_13(x) (((uint32_t)(((uint32_t)(x)) << USBC_DIGITAL_CONTROL_2_ND_15_13_SHIFT)) & USBC_DIGITAL_CONTROL_2_ND_15_13_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR_12H - */ +/*! @{ */ +#define USBC_RESERVED_ADDR_12H_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR_12H_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR_12H_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR_12H_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR_12H_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name TEST_CONTRL_AND_STATUS_0 - */ +/*! @{ */ +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_TX_PATTERN_MASK (0xFFU) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_TX_PATTERN_SHIFT (0U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_TX_PATTERN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_0_TEST_TX_PATTERN_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_0_TEST_TX_PATTERN_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_MODE_2_0_MASK (0x700U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_MODE_2_0_SHIFT (8U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_MODE_2_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_0_TEST_MODE_2_0_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_0_TEST_MODE_2_0_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_BYPASS_MASK (0x800U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_BYPASS_SHIFT (11U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_BYPASS(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_0_TEST_BYPASS_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_0_TEST_BYPASS_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_LENGTH_1_0_MASK (0x3000U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_LENGTH_1_0_SHIFT (12U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_LENGTH_1_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_0_TEST_LENGTH_1_0_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_0_TEST_LENGTH_1_0_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_ANA_LPBK_MASK (0x4000U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_ANA_LPBK_SHIFT (14U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_ANA_LPBK(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_0_TEST_ANA_LPBK_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_0_TEST_ANA_LPBK_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_DIG_LPBK_MASK (0x8000U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_DIG_LPBK_SHIFT (15U) +#define USBC_TEST_CONTRL_AND_STATUS_0_TEST_DIG_LPBK(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_0_TEST_DIG_LPBK_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_0_TEST_DIG_LPBK_MASK) +/*! @} */ + +/*! @name TEST_CONTRL_AND_STATUS_1 - */ +/*! @{ */ +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_XCVR_SELECT_MASK (0x3U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_XCVR_SELECT_SHIFT (0U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_XCVR_SELECT(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_XCVR_SELECT_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_XCVR_SELECT_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_OP_MODE_MASK (0xCU) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_OP_MODE_SHIFT (2U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_OP_MODE(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_OP_MODE_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_OP_MODE_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_TERM_SELECT_MASK (0x10U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_TERM_SELECT_SHIFT (4U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_TERM_SELECT(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_TERM_SELECT_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_TERM_SELECT_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_TX_BITSTUFF_EN_MASK (0x20U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_TX_BITSTUFF_EN_SHIFT (5U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_TX_BITSTUFF_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_TX_BITSTUFF_EN_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_TX_BITSTUFF_EN_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_SUSPENDM_MASK (0x40U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_SUSPENDM_SHIFT (6U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_SUSPENDM(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_SUSPENDM_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_SUSPENDM_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_UTMI_SEL_MASK (0x80U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_UTMI_SEL_SHIFT (7U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_UTMI_SEL(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_UTMI_SEL_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_UTMI_SEL_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_SKIP_2_0_MASK (0x700U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_SKIP_2_0_SHIFT (8U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_SKIP_2_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_SKIP_2_0_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_SKIP_2_0_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_ND_MASK (0x800U) +#define USBC_TEST_CONTRL_AND_STATUS_1_ND_SHIFT (11U) +#define USBC_TEST_CONTRL_AND_STATUS_1_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_ND_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_ND_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_RESET_MASK (0x1000U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_RESET_SHIFT (12U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_RESET(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_RESET_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_RESET_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_EN_MASK (0x2000U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_EN_SHIFT (13U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_EN_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_EN_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_FLAG_MASK (0x4000U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_FLAG_SHIFT (14U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_FLAG(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_FLAG_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_FLAG_MASK) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_DONE_MASK (0x8000U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_DONE_SHIFT (15U) +#define USBC_TEST_CONTRL_AND_STATUS_1_TEST_DONE(x) (((uint32_t)(((uint32_t)(x)) << USBC_TEST_CONTRL_AND_STATUS_1_TEST_DONE_SHIFT)) & USBC_TEST_CONTRL_AND_STATUS_1_TEST_DONE_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR_15H - */ +/*! @{ */ +#define USBC_RESERVED_ADDR_15H_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR_15H_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR_15H_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR_15H_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR_15H_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name PHY_REG_CHGDTC_CONTRL - */ +/*! @{ */ +#define USBC_PHY_REG_CHGDTC_CONTRL_TESTMON_CHRGDTC_MASK (0x3U) +#define USBC_PHY_REG_CHGDTC_CONTRL_TESTMON_CHRGDTC_SHIFT (0U) +#define USBC_PHY_REG_CHGDTC_CONTRL_TESTMON_CHRGDTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_TESTMON_CHRGDTC_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_TESTMON_CHRGDTC_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_PU_CHRG_DTC_MASK (0x4U) +#define USBC_PHY_REG_CHGDTC_CONTRL_PU_CHRG_DTC_SHIFT (2U) +#define USBC_PHY_REG_CHGDTC_CONTRL_PU_CHRG_DTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_PU_CHRG_DTC_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_PU_CHRG_DTC_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_ENABLE_SWITCH_MASK (0x8U) +#define USBC_PHY_REG_CHGDTC_CONTRL_ENABLE_SWITCH_SHIFT (3U) +#define USBC_PHY_REG_CHGDTC_CONTRL_ENABLE_SWITCH(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_ENABLE_SWITCH_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_ENABLE_SWITCH_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_ND_MASK (0xFFF0U) +#define USBC_PHY_REG_CHGDTC_CONTRL_ND_SHIFT (4U) +#define USBC_PHY_REG_CHGDTC_CONTRL_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_ND_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_ND_MASK) +/*! @} */ + +/*! @name PHY_REG_OTG_CONTROL - */ +/*! @{ */ +#define USBC_PHY_REG_OTG_CONTROL_TESTMON_OTG_2_0_MASK (0x7U) +#define USBC_PHY_REG_OTG_CONTROL_TESTMON_OTG_2_0_SHIFT (0U) +#define USBC_PHY_REG_OTG_CONTROL_TESTMON_OTG_2_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_OTG_CONTROL_TESTMON_OTG_2_0_SHIFT)) & USBC_PHY_REG_OTG_CONTROL_TESTMON_OTG_2_0_MASK) +#define USBC_PHY_REG_OTG_CONTROL_PU_OTG_MASK (0x8U) +#define USBC_PHY_REG_OTG_CONTROL_PU_OTG_SHIFT (3U) +#define USBC_PHY_REG_OTG_CONTROL_PU_OTG(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_OTG_CONTROL_PU_OTG_SHIFT)) & USBC_PHY_REG_OTG_CONTROL_PU_OTG_MASK) +#define USBC_PHY_REG_OTG_CONTROL_OTG_CONTROL_BY_PIN_MASK (0x10U) +#define USBC_PHY_REG_OTG_CONTROL_OTG_CONTROL_BY_PIN_SHIFT (4U) +#define USBC_PHY_REG_OTG_CONTROL_OTG_CONTROL_BY_PIN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_OTG_CONTROL_OTG_CONTROL_BY_PIN_SHIFT)) & USBC_PHY_REG_OTG_CONTROL_OTG_CONTROL_BY_PIN_MASK) +#define USBC_PHY_REG_OTG_CONTROL_ND_MASK (0xFFE0U) +#define USBC_PHY_REG_OTG_CONTROL_ND_SHIFT (5U) +#define USBC_PHY_REG_OTG_CONTROL_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_OTG_CONTROL_ND_SHIFT)) & USBC_PHY_REG_OTG_CONTROL_ND_MASK) +/*! @} */ + +/*! @name USB2_PHY_MON0 - */ +/*! @{ */ +#define USBC_USB2_PHY_MON0_PHY_MON_MASK (0xFFFFU) +#define USBC_USB2_PHY_MON0_PHY_MON_SHIFT (0U) +#define USBC_USB2_PHY_MON0_PHY_MON(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_PHY_MON0_PHY_MON_SHIFT)) & USBC_USB2_PHY_MON0_PHY_MON_MASK) +/*! @} */ + +/*! @name PHY_REG_CHGDTC_CONTRL_1 - */ +/*! @{ */ +#define USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_0_MASK (0x3U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_0_SHIFT (0U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_0_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_0_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_EN_MASK (0x4U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_EN_SHIFT (2U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_EN_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_EN_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_DCP_EN_MASK (0x8U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_DCP_EN_SHIFT (3U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_DCP_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_DCP_EN_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_DCP_EN_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_PD_EN_MASK (0x10U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_PD_EN_SHIFT (4U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_PD_EN(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_PD_EN_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_PD_EN_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_DM_AUTO_SWITCH_MASK (0x20U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_DM_AUTO_SWITCH_SHIFT (5U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_DM_AUTO_SWITCH(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_DM_AUTO_SWITCH_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_CDP_DM_AUTO_SWITCH_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DM_MASK (0x40U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DM_SHIFT (6U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DM(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DM_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DM_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DP_MASK (0x80U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DP_SHIFT (7U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DP(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DP_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_ENABLE_SWITCH_DP_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_VDAT_CHARGE_MASK (0x300U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_VDAT_CHARGE_SHIFT (8U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_VDAT_CHARGE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_VDAT_CHARGE_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_VDAT_CHARGE_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_VSRC_CHARGE_MASK (0xC00U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_VSRC_CHARGE_SHIFT (10U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_VSRC_CHARGE(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_VSRC_CHARGE_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_VSRC_CHARGE_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_PLLVDD12_MASK (0x3000U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_PLLVDD12_SHIFT (12U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_PLLVDD12(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_PLLVDD12_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_PLLVDD12_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_14_MASK (0x4000U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_14_SHIFT (14U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_14(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_14_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_RESERVED_14_MASK) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_DP_DM_SWAP_CTRL_MASK (0x8000U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_DP_DM_SWAP_CTRL_SHIFT (15U) +#define USBC_PHY_REG_CHGDTC_CONTRL_1_DP_DM_SWAP_CTRL(x) (((uint32_t)(((uint32_t)(x)) << USBC_PHY_REG_CHGDTC_CONTRL_1_DP_DM_SWAP_CTRL_SHIFT)) & USBC_PHY_REG_CHGDTC_CONTRL_1_DP_DM_SWAP_CTRL_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR_1AH - */ +/*! @{ */ +#define USBC_RESERVED_ADDR_1AH_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR_1AH_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR_1AH_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR_1AH_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR_1AH_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR_1BH - */ +/*! @{ */ +#define USBC_RESERVED_ADDR_1BH_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR_1BH_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR_1BH_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR_1BH_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR_1BH_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR_1CH - */ +/*! @{ */ +#define USBC_RESERVED_ADDR_1CH_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR_1CH_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR_1CH_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR_1CH_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR_1CH_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name RESERVED_ADDR_1DH - */ +/*! @{ */ +#define USBC_RESERVED_ADDR_1DH_RESERVED_BIT_15_0_MASK (0xFFFFU) +#define USBC_RESERVED_ADDR_1DH_RESERVED_BIT_15_0_SHIFT (0U) +#define USBC_RESERVED_ADDR_1DH_RESERVED_BIT_15_0(x) (((uint32_t)(((uint32_t)(x)) << USBC_RESERVED_ADDR_1DH_RESERVED_BIT_15_0_SHIFT)) & USBC_RESERVED_ADDR_1DH_RESERVED_BIT_15_0_MASK) +/*! @} */ + +/*! @name INTERNAL_CID - */ +/*! @{ */ +#define USBC_INTERNAL_CID_ICID1_MASK (0xFFU) +#define USBC_INTERNAL_CID_ICID1_SHIFT (0U) +#define USBC_INTERNAL_CID_ICID1(x) (((uint32_t)(((uint32_t)(x)) << USBC_INTERNAL_CID_ICID1_SHIFT)) & USBC_INTERNAL_CID_ICID1_MASK) +#define USBC_INTERNAL_CID_ICID0_MASK (0xFF00U) +#define USBC_INTERNAL_CID_ICID0_SHIFT (8U) +#define USBC_INTERNAL_CID_ICID0(x) (((uint32_t)(((uint32_t)(x)) << USBC_INTERNAL_CID_ICID0_SHIFT)) & USBC_INTERNAL_CID_ICID0_MASK) +/*! @} */ + +/*! @name USB2_ICID_REG1 - */ +/*! @{ */ +#define USBC_USB2_ICID_REG1_PHY_MULTIPORT_MASK (0x1U) +#define USBC_USB2_ICID_REG1_PHY_MULTIPORT_SHIFT (0U) +#define USBC_USB2_ICID_REG1_PHY_MULTIPORT(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_PHY_MULTIPORT_SHIFT)) & USBC_USB2_ICID_REG1_PHY_MULTIPORT_MASK) +#define USBC_USB2_ICID_REG1_ND_MASK (0x6U) +#define USBC_USB2_ICID_REG1_ND_SHIFT (1U) +#define USBC_USB2_ICID_REG1_ND(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_ND_SHIFT)) & USBC_USB2_ICID_REG1_ND_MASK) +#define USBC_USB2_ICID_REG1_DIG_REGULATOR_MASK (0x8U) +#define USBC_USB2_ICID_REG1_DIG_REGULATOR_SHIFT (3U) +#define USBC_USB2_ICID_REG1_DIG_REGULATOR(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_DIG_REGULATOR_SHIFT)) & USBC_USB2_ICID_REG1_DIG_REGULATOR_MASK) +#define USBC_USB2_ICID_REG1_PHY_ULPI_MASK (0x10U) +#define USBC_USB2_ICID_REG1_PHY_ULPI_SHIFT (4U) +#define USBC_USB2_ICID_REG1_PHY_ULPI(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_PHY_ULPI_SHIFT)) & USBC_USB2_ICID_REG1_PHY_ULPI_MASK) +#define USBC_USB2_ICID_REG1_PHY_HSIC_MASK (0x20U) +#define USBC_USB2_ICID_REG1_PHY_HSIC_SHIFT (5U) +#define USBC_USB2_ICID_REG1_PHY_HSIC(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_PHY_HSIC_SHIFT)) & USBC_USB2_ICID_REG1_PHY_HSIC_MASK) +#define USBC_USB2_ICID_REG1_PHY_CHG_DTC_MASK (0x40U) +#define USBC_USB2_ICID_REG1_PHY_CHG_DTC_SHIFT (6U) +#define USBC_USB2_ICID_REG1_PHY_CHG_DTC(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_PHY_CHG_DTC_SHIFT)) & USBC_USB2_ICID_REG1_PHY_CHG_DTC_MASK) +#define USBC_USB2_ICID_REG1_PHY_OTG_MASK (0x80U) +#define USBC_USB2_ICID_REG1_PHY_OTG_SHIFT (7U) +#define USBC_USB2_ICID_REG1_PHY_OTG(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_PHY_OTG_SHIFT)) & USBC_USB2_ICID_REG1_PHY_OTG_MASK) +#define USBC_USB2_ICID_REG1_ICID2_MASK (0xFF00U) +#define USBC_USB2_ICID_REG1_ICID2_SHIFT (8U) +#define USBC_USB2_ICID_REG1_ICID2(x) (((uint32_t)(((uint32_t)(x)) << USBC_USB2_ICID_REG1_ICID2_SHIFT)) & USBC_USB2_ICID_REG1_ICID2_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group USBC_Register_Masks */ + + +/* USBC - Peripheral instance base addresses */ +/** Peripheral USBC base address */ +#define USBC_BASE (0x44001000u) +/** Peripheral USBC base pointer */ +#define USBC ((USBC_Type *)USBC_BASE) +/** Array initializer of USBC peripheral base addresses */ +#define USBC_BASE_ADDRS { USBC_BASE } +/** Array initializer of USBC peripheral base pointers */ +#define USBC_BASE_PTRS { USBC } +/** Interrupt vectors for the USBC peripheral type */ +#define USBC_IRQS { USB_IRQn } + +/*! + * @} + */ /* end of group USBC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- WDT Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup WDT_Peripheral_Access_Layer WDT Peripheral Access Layer + * @{ + */ + +/** WDT - Register Layout Typedef */ +typedef struct { + __IO uint32_t WDT_CR; /**< , offset: 0x0 */ + __IO uint32_t WDT_TORR; /**< , offset: 0x4 */ + __I uint32_t WDT_CCVR; /**< , offset: 0x8 */ + __O uint32_t WDT_CRR; /**< , offset: 0xC */ + __I uint32_t WDT_STAT; /**< , offset: 0x10 */ + __I uint32_t WDT_EOI; /**< , offset: 0x14 */ + uint8_t RESERVED_0[204]; + __I uint32_t WDT_COMP_PARAM_5; /**< , offset: 0xE4 */ + __I uint32_t WDT_COMP_PARAM_4; /**< , offset: 0xE8 */ + __I uint32_t WDT_COMP_PARAM_3; /**< , offset: 0xEC */ + __I uint32_t WDT_COMP_PARAM_2; /**< , offset: 0xF0 */ + __I uint32_t WDT_COMP_PARAM_1; /**< , offset: 0xF4 */ + __I uint32_t WDT_COMP_VERSION; /**< , offset: 0xF8 */ + __I uint32_t WDT_COMP_TYPE; /**< , offset: 0xFC */ +} WDT_Type; + +/* ---------------------------------------------------------------------------- + -- WDT Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup WDT_Register_Masks WDT Register Masks + * @{ + */ + +/*! @name WDT_CR - */ +/*! @{ */ +#define WDT_WDT_CR_WDT_EN_MASK (0x1U) +#define WDT_WDT_CR_WDT_EN_SHIFT (0U) +/*! WDT_EN + * 0b0..WDT disabled. + * 0b1..WDT enabled. + */ +#define WDT_WDT_CR_WDT_EN(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_CR_WDT_EN_SHIFT)) & WDT_WDT_CR_WDT_EN_MASK) +#define WDT_WDT_CR_RMOD_MASK (0x2U) +#define WDT_WDT_CR_RMOD_SHIFT (1U) +/*! RMOD + * 0b0..Generate a system reset. + * 0b1..First generate an interrupt and if it is not cleared by the time a second timeout occurs then generate a system reset. + */ +#define WDT_WDT_CR_RMOD(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_CR_RMOD_SHIFT)) & WDT_WDT_CR_RMOD_MASK) +#define WDT_WDT_CR_RPL_MASK (0x1CU) +#define WDT_WDT_CR_RPL_SHIFT (2U) +/*! RPL + * 0b000..2 pclk cycles + * 0b001..4 pclk cycles + * 0b010..8 pclk cycles + * 0b011..16 pclk cycles + * 0b100..32 pclk cycles + * 0b101..64 pclk cycles + * 0b110..128 pclk cycles + * 0b111..256 pclk cycles + */ +#define WDT_WDT_CR_RPL(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_CR_RPL_SHIFT)) & WDT_WDT_CR_RPL_MASK) +/*! @} */ + +/*! @name WDT_TORR - */ +/*! @{ */ +#define WDT_WDT_TORR_TOP_MASK (0xFU) +#define WDT_WDT_TORR_TOP_SHIFT (0U) +#define WDT_WDT_TORR_TOP(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_TORR_TOP_SHIFT)) & WDT_WDT_TORR_TOP_MASK) +#define WDT_WDT_TORR_TOP_INIT_MASK (0xF0U) +#define WDT_WDT_TORR_TOP_INIT_SHIFT (4U) +#define WDT_WDT_TORR_TOP_INIT(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_TORR_TOP_INIT_SHIFT)) & WDT_WDT_TORR_TOP_INIT_MASK) +#define WDT_WDT_TORR_RESERVED_MASK (0xFFFFFF00U) +#define WDT_WDT_TORR_RESERVED_SHIFT (8U) +#define WDT_WDT_TORR_RESERVED(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_TORR_RESERVED_SHIFT)) & WDT_WDT_TORR_RESERVED_MASK) +/*! @} */ + +/*! @name WDT_CCVR - */ +/*! @{ */ +#define WDT_WDT_CCVR_WDT_CCVR_MASK (0xFFFFFFFFU) +#define WDT_WDT_CCVR_WDT_CCVR_SHIFT (0U) +#define WDT_WDT_CCVR_WDT_CCVR(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_CCVR_WDT_CCVR_SHIFT)) & WDT_WDT_CCVR_WDT_CCVR_MASK) +/*! @} */ + +/*! @name WDT_CRR - */ +/*! @{ */ +#define WDT_WDT_CRR_WDT_CRR_MASK (0xFFU) +#define WDT_WDT_CRR_WDT_CRR_SHIFT (0U) +#define WDT_WDT_CRR_WDT_CRR(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_CRR_WDT_CRR_SHIFT)) & WDT_WDT_CRR_WDT_CRR_MASK) +/*! @} */ + +/*! @name WDT_STAT - */ +/*! @{ */ +#define WDT_WDT_STAT_WDT_STAT_MASK (0x1U) +#define WDT_WDT_STAT_WDT_STAT_SHIFT (0U) +/*! wdt_stat + * 0b0..Interrupt is inactive. + * 0b1..Interrupt is active regardless of polarity. + */ +#define WDT_WDT_STAT_WDT_STAT(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_STAT_WDT_STAT_SHIFT)) & WDT_WDT_STAT_WDT_STAT_MASK) +/*! @} */ + +/*! @name WDT_EOI - */ +/*! @{ */ +#define WDT_WDT_EOI_WDT_EOI_MASK (0x1U) +#define WDT_WDT_EOI_WDT_EOI_SHIFT (0U) +#define WDT_WDT_EOI_WDT_EOI(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_EOI_WDT_EOI_SHIFT)) & WDT_WDT_EOI_WDT_EOI_MASK) +/*! @} */ + +/*! @name WDT_COMP_PARAM_5 - */ +/*! @{ */ +#define WDT_WDT_COMP_PARAM_5_DATA_MASK (0xFFFFFFFFU) +#define WDT_WDT_COMP_PARAM_5_DATA_SHIFT (0U) +#define WDT_WDT_COMP_PARAM_5_DATA(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_5_DATA_SHIFT)) & WDT_WDT_COMP_PARAM_5_DATA_MASK) +/*! @} */ + +/*! @name WDT_COMP_PARAM_4 - */ +/*! @{ */ +#define WDT_WDT_COMP_PARAM_4_DATA_MASK (0xFFFFFFFFU) +#define WDT_WDT_COMP_PARAM_4_DATA_SHIFT (0U) +#define WDT_WDT_COMP_PARAM_4_DATA(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_4_DATA_SHIFT)) & WDT_WDT_COMP_PARAM_4_DATA_MASK) +/*! @} */ + +/*! @name WDT_COMP_PARAM_3 - */ +/*! @{ */ +#define WDT_WDT_COMP_PARAM_3_DATA_MASK (0xFFFFFFFFU) +#define WDT_WDT_COMP_PARAM_3_DATA_SHIFT (0U) +#define WDT_WDT_COMP_PARAM_3_DATA(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_3_DATA_SHIFT)) & WDT_WDT_COMP_PARAM_3_DATA_MASK) +/*! @} */ + +/*! @name WDT_COMP_PARAM_2 - */ +/*! @{ */ +#define WDT_WDT_COMP_PARAM_2_DATA_MASK (0xFFFFFFFFU) +#define WDT_WDT_COMP_PARAM_2_DATA_SHIFT (0U) +#define WDT_WDT_COMP_PARAM_2_DATA(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_2_DATA_SHIFT)) & WDT_WDT_COMP_PARAM_2_DATA_MASK) +/*! @} */ + +/*! @name WDT_COMP_PARAM_1 - */ +/*! @{ */ +#define WDT_WDT_COMP_PARAM_1_WDT_ALWAYS_EN_MASK (0x1U) +#define WDT_WDT_COMP_PARAM_1_WDT_ALWAYS_EN_SHIFT (0U) +#define WDT_WDT_COMP_PARAM_1_WDT_ALWAYS_EN(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_ALWAYS_EN_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_ALWAYS_EN_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_RMOD_MASK (0x2U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_RMOD_SHIFT (1U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_RMOD(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_DFLT_RMOD_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_DFLT_RMOD_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_DUAL_TOP_MASK (0x4U) +#define WDT_WDT_COMP_PARAM_1_WDT_DUAL_TOP_SHIFT (2U) +#define WDT_WDT_COMP_PARAM_1_WDT_DUAL_TOP(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_DUAL_TOP_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_DUAL_TOP_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_RMOD_MASK (0x8U) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_RMOD_SHIFT (3U) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_RMOD(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_HC_RMOD_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_HC_RMOD_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_RPL_MASK (0x10U) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_RPL_SHIFT (4U) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_RPL(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_HC_RPL_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_HC_RPL_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_TOP_MASK (0x20U) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_TOP_SHIFT (5U) +#define WDT_WDT_COMP_PARAM_1_WDT_HC_TOP(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_HC_TOP_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_HC_TOP_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_USE_FIX_TOP_MASK (0x40U) +#define WDT_WDT_COMP_PARAM_1_WDT_USE_FIX_TOP_SHIFT (6U) +#define WDT_WDT_COMP_PARAM_1_WDT_USE_FIX_TOP(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_USE_FIX_TOP_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_USE_FIX_TOP_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_PAUSE_MASK (0x80U) +#define WDT_WDT_COMP_PARAM_1_WDT_PAUSE_SHIFT (7U) +#define WDT_WDT_COMP_PARAM_1_WDT_PAUSE(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_PAUSE_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_PAUSE_MASK) +#define WDT_WDT_COMP_PARAM_1_APB_DATA_WIDTH_MASK (0x300U) +#define WDT_WDT_COMP_PARAM_1_APB_DATA_WIDTH_SHIFT (8U) +#define WDT_WDT_COMP_PARAM_1_APB_DATA_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_APB_DATA_WIDTH_SHIFT)) & WDT_WDT_COMP_PARAM_1_APB_DATA_WIDTH_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_RPL_MASK (0x1C00U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_RPL_SHIFT (10U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_RPL(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_DFLT_RPL_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_DFLT_RPL_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_MASK (0xF0000U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_SHIFT (16U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_INIT_MASK (0xF00000U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_INIT_SHIFT (20U) +#define WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_INIT(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_INIT_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_DFLT_TOP_INIT_MASK) +#define WDT_WDT_COMP_PARAM_1_WDT_CNT_WIDTH_MASK (0x1F000000U) +#define WDT_WDT_COMP_PARAM_1_WDT_CNT_WIDTH_SHIFT (24U) +#define WDT_WDT_COMP_PARAM_1_WDT_CNT_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_PARAM_1_WDT_CNT_WIDTH_SHIFT)) & WDT_WDT_COMP_PARAM_1_WDT_CNT_WIDTH_MASK) +/*! @} */ + +/*! @name WDT_COMP_VERSION - */ +/*! @{ */ +#define WDT_WDT_COMP_VERSION_WDT_COMP_VERSION_MASK (0xFFFFFFFFU) +#define WDT_WDT_COMP_VERSION_WDT_COMP_VERSION_SHIFT (0U) +#define WDT_WDT_COMP_VERSION_WDT_COMP_VERSION(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_VERSION_WDT_COMP_VERSION_SHIFT)) & WDT_WDT_COMP_VERSION_WDT_COMP_VERSION_MASK) +/*! @} */ + +/*! @name WDT_COMP_TYPE - */ +/*! @{ */ +#define WDT_WDT_COMP_TYPE_WDT_COMP_TYPE_MASK (0xFFFFFFFFU) +#define WDT_WDT_COMP_TYPE_WDT_COMP_TYPE_SHIFT (0U) +#define WDT_WDT_COMP_TYPE_WDT_COMP_TYPE(x) (((uint32_t)(((uint32_t)(x)) << WDT_WDT_COMP_TYPE_WDT_COMP_TYPE_SHIFT)) & WDT_WDT_COMP_TYPE_WDT_COMP_TYPE_MASK) +/*! @} */ + + +/*! + * @} + */ /* end of group WDT_Register_Masks */ + + +/* WDT - Peripheral instance base addresses */ +/** Peripheral WDT base address */ +#define WDT_BASE (0x48040000u) +/** Peripheral WDT base pointer */ +#define WDT ((WDT_Type *)WDT_BASE) +/** Array initializer of WDT peripheral base addresses */ +#define WDT_BASE_ADDRS { WDT_BASE } +/** Array initializer of WDT peripheral base pointers */ +#define WDT_BASE_PTRS { WDT } +/** Interrupt vectors for the WDT peripheral type */ +#define WDT_IRQS { WDT_IRQn } + +/*! + * @} + */ /* end of group WDT_Peripheral_Access_Layer */ + + +/* +** End of section using anonymous unions +*/ + +#if defined(__ARMCC_VERSION) + #if (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop + #else + #pragma pop + #endif +#elif defined(__GNUC__) + /* leave anonymous unions enabled */ +#elif defined(__IAR_SYSTEMS_ICC__) + #pragma language=default +#else + #error Not supported compiler type +#endif + +/*! + * @} + */ /* end of group Peripheral_access_layer */ + + +/* ---------------------------------------------------------------------------- + -- Macros for use with bit field definitions (xxx_SHIFT, xxx_MASK). + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Bit_Field_Generic_Macros Macros for use with bit field definitions (xxx_SHIFT, xxx_MASK). + * @{ + */ + +#if defined(__ARMCC_VERSION) + #if (__ARMCC_VERSION >= 6010050) + #pragma clang system_header + #endif +#elif defined(__IAR_SYSTEMS_ICC__) + #pragma system_include +#endif + +/** + * @brief Mask and left-shift a bit field value for use in a register bit range. + * @param field Name of the register bit field. + * @param value Value of the bit field. + * @return Masked and shifted value. + */ +#define NXP_VAL2FLD(field, value) (((value) << (field ## _SHIFT)) & (field ## _MASK)) +/** + * @brief Mask and right-shift a register value to extract a bit field value. + * @param field Name of the register bit field. + * @param value Value of the register. + * @return Masked and shifted bit field value. + */ +#define NXP_FLD2VAL(field, value) (((value) & (field ## _MASK)) >> (field ## _SHIFT)) + +/*! + * @} + */ /* end of group Bit_Field_Generic_Macros */ + + +/* ---------------------------------------------------------------------------- + -- SDK Compatibility + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SDK_Compatibility_Symbols SDK Compatibility + * @{ + */ + +/* No SDK compatibility issues. */ + +/*! + * @} + */ /* end of group SDK_Compatibility_Symbols */ + + +#endif /* _88MW320_H_ */ + diff --git a/devices/88MW320/88MW320_features.h b/devices/88MW320/88MW320_features.h new file mode 100644 index 000000000..ef3bdddf2 --- /dev/null +++ b/devices/88MW320/88MW320_features.h @@ -0,0 +1,90 @@ +/* +** ################################################################### +** Version: rev. 1.0, 2020-09-07 +** Build: b201223 +** +** Abstract: +** Chip specific module features. +** +** Copyright 2016 Freescale Semiconductor, Inc. +** Copyright 2016-2020 NXP +** All rights reserved. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** http: www.nxp.com +** mail: support@nxp.com +** +** Revisions: +** - rev. 1.0 (2020-09-07) +** Initial version. +** +** ################################################################### +*/ + +#ifndef _88MW320_FEATURES_H_ +#define _88MW320_FEATURES_H_ + +/* SOC module features */ + +/* @brief ACOMP availability on the SoC. */ +#define FSL_FEATURE_SOC_ACOMP_COUNT (1) +/* @brief MW_ADC availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_ADC_COUNT (1) +/* @brief MW_AES availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_AES_COUNT (1) +/* @brief MW_BG availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_BG_COUNT (1) +/* @brief MW_CRC availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_CRC_COUNT (1) +/* @brief MW_DAC availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_DAC_COUNT (1) +/* @brief MW_DMAC availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_DMAC_COUNT (1) +/* @brief MW_FLASHC availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_FLASHC_COUNT (1) +/* @brief MW_GPIO availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_GPIO_COUNT (1) +/* @brief MW_GPT availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_GPT_COUNT (4) +/* @brief MW_I2C availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_I2C_COUNT (2) +/* @brief MW_PMU availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_PMU_COUNT (1) +/* @brief MW_QSPI availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_QSPI_COUNT (1) +/* @brief MW_PINMUX availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_PINMUX_COUNT (1) +/* @brief MW_RC32 availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_RC32_COUNT (1) +/* @brief MW_RTC availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_RTC_COUNT (1) +/* @brief MW_SSP availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_SSP_COUNT (3) +/* @brief MW_SYS_CTL availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_SYS_CTL_COUNT (1) +/* @brief MW_UART availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_UART_COUNT (3) +/* @brief MW_USBC availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_USBC_COUNT (1) +/* @brief MW_WDT availability on the SoC. */ +#define FSL_FEATURE_SOC_MW_WDT_COUNT (1) +/* @brief SDIOC availability on the SoC. */ +#define FSL_FEATURE_SOC_SDIOC_COUNT (1) + +/* MW_ACOMP module features */ + +/* No feature definitions */ + +/* MW_DMAC module features */ + +/* @brief Number of DMA channels in the SoC. */ +#define FSL_FEATURE_MW_DMAC_MODULE_CHANNEL (32) + +/* MW_GPIO module features */ + +/* @brief Number of GPIO in the SoC. */ +#define FSL_FEATURE_MW_GPIO_IO_NUMBER (50) + +#endif /* _88MW320_FEATURES_H_ */ + diff --git a/devices/88MW320/all_lib_device_88MW320.cmake b/devices/88MW320/all_lib_device_88MW320.cmake new file mode 100644 index 000000000..9ff543843 --- /dev/null +++ b/devices/88MW320/all_lib_device_88MW320.cmake @@ -0,0 +1,100 @@ +list(APPEND CMAKE_MODULE_PATH + ${CMAKE_CURRENT_LIST_DIR}/. + ${CMAKE_CURRENT_LIST_DIR}/../../CMSIS/Include + ${CMAKE_CURRENT_LIST_DIR}/../../components/boot2_utils + ${CMAKE_CURRENT_LIST_DIR}/../../components/flash/mflash + ${CMAKE_CURRENT_LIST_DIR}/../../components/flash/mflash/mw320 + ${CMAKE_CURRENT_LIST_DIR}/../../components/lists + ${CMAKE_CURRENT_LIST_DIR}/../../components/osa + ${CMAKE_CURRENT_LIST_DIR}/../../components/serial_manager + ${CMAKE_CURRENT_LIST_DIR}/../../components/uart + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/common + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/acomp + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/adc + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/aes + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/crc + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/dac + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/dmac + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/flashc + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/gpio + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/gpt + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/i2c + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/qspi + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/rtc + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/sdioc + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/ssp + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/uart + ${CMAKE_CURRENT_LIST_DIR}/../../drivers/mw320/wdt + ${CMAKE_CURRENT_LIST_DIR}/../../../middleware/lwip + ${CMAKE_CURRENT_LIST_DIR}/../../../middleware/mbedtls + ${CMAKE_CURRENT_LIST_DIR}/../../../middleware/sdmmc + ${CMAKE_CURRENT_LIST_DIR}/../../../middleware/wifi + ${CMAKE_CURRENT_LIST_DIR}/../../../rtos/freertos/freertos_kernel + ${CMAKE_CURRENT_LIST_DIR}/../../utilities/assert + ${CMAKE_CURRENT_LIST_DIR}/../../utilities/debug_console + ${CMAKE_CURRENT_LIST_DIR}/../../utilities/misc_utilities + ${CMAKE_CURRENT_LIST_DIR}/drivers +) + + +# Copy the cmake components into projects +# include(driver_power) +# include(utilities_misc_utilities) +# include(middleware_sdmmc_sdio) +# include(CMSIS_Include_dsp) +# include(middleware_sdmmc_osa_bm) +# include(driver_mw_rtc) +# include(middleware_lwip_apps_lwiperf) +# include(middleware_mbedtls_port_mw) +# include(component_lists) +# include(middleware_sdmmc_common) +# include(device_system) +# include(middleware_lwip_apps_httpsrv) +# include(driver_mw_pinmux) +# include(driver_mw_uart) +# include(device_startup) +# include(driver_clock) +# include(driver_mw_adc) +# include(middleware_freertos-kernel_88MW320) +# include(driver_mw_dac) +# include(middleware_sdmmc_host_sdioc_freertos) +# include(driver_mw_crc) +# include(driver_mw_i2c) +# include(middleware_sdmmc_host_sdioc) +# include(middleware_wifi) +# include(driver_mw_flashc) +# include(driver_mw_dmac) +# include(middleware_sdmmc_host_sdioc_interrupt) +# include(driver_mw_sdioc) +# include(driver_mw_gpt) +# include(driver_mw_qspi) +# include(driver_mw_ssp) +# include(middleware_freertos-kernel_extension) +# include(driver_mw_acomp) +# include(driver_mw_i2c_dmac) +# include(utility_debug_console) +# include(device_CMSIS) +# include(driver_mw_uart_dmac) +# include(component_mw_uart_adapter) +# include(component_mflash_file) +# include(middleware_lwip) +# include(component_osa_bm) +# include(driver_mw_ssp_dmac) +# include(CMSIS_Include_core_cm4) +# include(middleware_wifi_cli) +# include(CMSIS_Include_common) +# include(driver_common) +# include(component_mflash_common) +# include(utility_assert) +# include(component_mflash_mw320) +# include(driver_mw_wdt) +# include(middleware_sdmmc_osa_freertos) +# include(component_osa_free_rtos) +# include(driver_mw_gpio) +# include(middleware_mbedtls) +# include(component_boot2_psm) +# include(component_serial_manager) +# include(component_serial_manager_uart) +# include(driver_mw_aes) +# include(middleware_freertos-kernel_heap_4) +# include(component_boot2_partition) diff --git a/devices/88MW320/device_CMSIS.cmake b/devices/88MW320/device_CMSIS.cmake new file mode 100644 index 000000000..e3a2a9c1c --- /dev/null +++ b/devices/88MW320/device_CMSIS.cmake @@ -0,0 +1,13 @@ +#Description: device_CMSIS; user_visible: False +include_guard(GLOBAL) +message("device_CMSIS component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(CMSIS_Include_core_cm4) diff --git a/devices/88MW320/device_startup.cmake b/devices/88MW320/device_startup.cmake new file mode 100644 index 000000000..b214031ba --- /dev/null +++ b/devices/88MW320/device_startup.cmake @@ -0,0 +1,13 @@ +#Description: device_startup; user_visible: False +include_guard(GLOBAL) +message("device_startup component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/gcc/startup_88MW320.S +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC +) + + +include(device_system) diff --git a/devices/88MW320/device_system.cmake b/devices/88MW320/device_system.cmake new file mode 100644 index 000000000..609ed2b3d --- /dev/null +++ b/devices/88MW320/device_system.cmake @@ -0,0 +1,14 @@ +#Description: device_system; user_visible: False +include_guard(GLOBAL) +message("device_system component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/system_88MW320.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(device_CMSIS) diff --git a/devices/88MW320/drivers/driver_clock.cmake b/devices/88MW320/drivers/driver_clock.cmake new file mode 100644 index 000000000..348471f89 --- /dev/null +++ b/devices/88MW320/drivers/driver_clock.cmake @@ -0,0 +1,14 @@ +#Description: Clock Driver; user_visible: True +include_guard(GLOBAL) +message("driver_clock component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_clock.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/devices/88MW320/drivers/driver_mw_pinmux.cmake b/devices/88MW320/drivers/driver_mw_pinmux.cmake new file mode 100644 index 000000000..8a5b92de1 --- /dev/null +++ b/devices/88MW320/drivers/driver_mw_pinmux.cmake @@ -0,0 +1,14 @@ +#Description: MW_PINMUX Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_pinmux component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_pinmux.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/devices/88MW320/drivers/driver_power.cmake b/devices/88MW320/drivers/driver_power.cmake new file mode 100644 index 000000000..b8bcf4632 --- /dev/null +++ b/devices/88MW320/drivers/driver_power.cmake @@ -0,0 +1,14 @@ +#Description: POWER Driver; user_visible: True +include_guard(GLOBAL) +message("driver_power component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_power.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/devices/88MW320/drivers/driver_reset.cmake b/devices/88MW320/drivers/driver_reset.cmake new file mode 100644 index 000000000..49eb2cb9f --- /dev/null +++ b/devices/88MW320/drivers/driver_reset.cmake @@ -0,0 +1,12 @@ +#Description: Reset Driver; user_visible: False +include_guard(GLOBAL) +message("driver_reset component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + diff --git a/devices/88MW320/drivers/fsl_clock.c b/devices/88MW320/drivers/fsl_clock.c new file mode 100644 index 000000000..2d95dadb6 --- /dev/null +++ b/devices/88MW320/drivers/fsl_clock.c @@ -0,0 +1,1102 @@ +/* + * Copyright 2020, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_clock.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.clock" +#endif + +#define FRACT_BASE_NUM (4194304U) + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/* External crystal MAINXTAL clock frequency. */ +volatile uint32_t g_mainXtalFreq; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ +/*! + * @brief Enable the clock for specific IP. + * + * @param name Which clock to enable, see \ref clock_ip_name_t. + */ +void CLOCK_EnableClock(clock_ip_name_t name) +{ + uint32_t pos = CLK_OP_POS(name); + uint32_t mask = CLK_OP_MASK(name); + uint32_t value = CLK_OP_VALUE(name); + + CLK_OP_REG(name) = (CLK_OP_REG(name) & ~(mask << pos)) | (value << pos); +} + +/*! + * @brief Disable the clock for specific IP. + * + * @param name Which clock to disable, see \ref clock_ip_name_t. + */ +void CLOCK_DisableClock(clock_ip_name_t name) +{ + uint32_t pos = CLK_OP_POS(name); + uint32_t mask = CLK_OP_MASK(name); + uint32_t value = (~CLK_OP_VALUE(name)) & mask; + + CLK_OP_REG(name) = (CLK_OP_REG(name) & ~(mask << pos)) | (value << pos); +} + +/** + * @brief Configure the clock selection muxes. + * @param connection : Clock to be configured. + */ +void CLOCK_AttachClk(clock_attach_id_t connection) +{ + uint32_t pos = CLK_OP_POS(connection); + uint32_t mask = CLK_OP_MASK(connection); + uint32_t value = CLK_OP_VALUE(connection); + + CLK_OP_REG(connection) = (CLK_OP_REG(connection) & ~(mask << pos)) | (value << pos); +} + +/** + * @brief Setup clock dividers. + * @param name : Clock divider name + * @param divider : Value to be divided. + */ +void CLOCK_SetClkDiv(clock_div_name_t name, uint32_t divider) +{ + uint32_t pos = CLK_OP_POS(name); + uint32_t mask = CLK_OP_MASK(name); + uint32_t value = CLK_OP_VALUE(name); + + if (value == 0U) + { + assert(divider <= mask); + CLK_OP_REG(name) = (CLK_OP_REG(name) & ~(mask << pos)) | (divider << pos); + } + else + { + /* Special case */ + switch (name) + { + case kCLOCK_DivUartFast: + case kCLOCK_DivUartSlow: + assert(divider <= 0xFFFFFFU); + CLK_OP_REG(name) = divider; + break; + case kCLOCK_DivWdt: + assert(divider <= 0x3FU); + CLK_OP_REG(name) &= ~(PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_MASK | PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_MASK | + PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_MASK); + CLK_OP_REG(name) |= ((divider >> 3U) << PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_SHIFT) | + (((divider >> 2U) & 1U) << PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_SHIFT) | + ((divider & 3U) << PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_SHIFT); + break; + case kCLOCK_DivGpt3: + assert(divider <= 0x3FU); + CLK_OP_REG(name) &= + ~(PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_MASK | PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_MASK); + CLK_OP_REG(name) |= ((divider >> 3U) << PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_SHIFT) | + ((divider & 7U) << PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_SHIFT); + break; + default: + assert(false); + break; + } + } +} + +/*! + * @brief Setup UART clock dividers. + * + * @param name : Clock divider name + * @param nom : Nominator for fraction divider. + * @param denom : Denominator for fraction divider. + */ +void CLOCK_SetUartClkDiv(clock_div_name_t name, uint32_t nom, uint32_t denom) +{ + assert(nom < (1UL << 13U)); + assert(nom < (1UL << 11U)); + + CLOCK_SetClkDiv(name, (nom << PMU_UART_FAST_CLK_DIV_NOMINATOR_SHIFT) | denom); +} + +/*! + * @brief Get the system clock frequency. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetSysClkFreq(void) +{ + uint32_t src; + uint32_t freq; + + src = PMU->CLK_SRC & PMU_CLK_SRC_SYS_CLK_SEL_MASK; + + switch (src) + { + case (uint32_t)kCLOCK_SysClkSrcSFll: + freq = CLOCK_GetSFllFreq(); + break; + case (uint32_t)kCLOCK_SysClkSrcRC32M_1: + case (uint32_t)kCLOCK_SysClkSrcRC32M_3: + freq = CLOCK_GetRC32MFreq(); + break; + case (uint32_t)kCLOCK_SysClkSrcMainXtal: + freq = CLOCK_GetMainXtalFreq(); + break; + default: + assert(false); + freq = 0U; + break; + } + + return freq; +} + +/*! + * @brief Set the system clock source. + * + * This function sets the system clock source. + * + * @param src System clock source to set. + */ +void CLOCK_SetSysClkSource(clock_sys_clk_src_t src) +{ + uint32_t currSrc; + bool rc32mRdy; + + currSrc = PMU->CLK_SRC & PMU_CLK_SRC_SYS_CLK_SEL_MASK; + rc32mRdy = (PMU->CLK_RDY & PMU_CLK_RDY_RC32M_RDY_MASK) != 0U; + + switch (src) + { + case kCLOCK_SysClkSrcSFll: + if ((currSrc == (uint32_t)kCLOCK_SysClkSrcMainXtal) && rc32mRdy) + { + PMU->CLK_SRC = + (PMU->CLK_SRC & ~PMU_CLK_SRC_SYS_CLK_SEL_MASK) | PMU_CLK_SRC_SYS_CLK_SEL(kCLOCK_SysClkSrcRC32M_3); + currSrc = (uint32_t)kCLOCK_SysClkSrcRC32M_3; + } + if (currSrc == (uint32_t)kCLOCK_SysClkSrcRC32M_3) + { + PMU->CLK_SRC = + (PMU->CLK_SRC & ~PMU_CLK_SRC_SYS_CLK_SEL_MASK) | PMU_CLK_SRC_SYS_CLK_SEL(kCLOCK_SysClkSrcRC32M_1); + } + PMU->CLK_SRC = + (PMU->CLK_SRC & ~PMU_CLK_SRC_SYS_CLK_SEL_MASK) | PMU_CLK_SRC_SYS_CLK_SEL(kCLOCK_SysClkSrcSFll); + break; + case kCLOCK_SysClkSrcRC32M_1: + case kCLOCK_SysClkSrcRC32M_3: + if ((currSrc == (uint32_t)kCLOCK_SysClkSrcSFll) || (currSrc == (uint32_t)kCLOCK_SysClkSrcMainXtal)) + { + PMU->CLK_SRC = (PMU->CLK_SRC & ~PMU_CLK_SRC_SYS_CLK_SEL_MASK) | PMU_CLK_SRC_SYS_CLK_SEL(currSrc + 1U); + } + break; + case kCLOCK_SysClkSrcMainXtal: + if ((currSrc == (uint32_t)kCLOCK_SysClkSrcSFll) && rc32mRdy) + { + PMU->CLK_SRC = + (PMU->CLK_SRC & ~PMU_CLK_SRC_SYS_CLK_SEL_MASK) | PMU_CLK_SRC_SYS_CLK_SEL(kCLOCK_SysClkSrcRC32M_1); + currSrc = (uint32_t)kCLOCK_SysClkSrcRC32M_1; + } + if (currSrc == (uint32_t)kCLOCK_SysClkSrcRC32M_1) + { + PMU->CLK_SRC = + (PMU->CLK_SRC & ~PMU_CLK_SRC_SYS_CLK_SEL_MASK) | PMU_CLK_SRC_SYS_CLK_SEL(kCLOCK_SysClkSrcRC32M_3); + } + PMU->CLK_SRC = + (PMU->CLK_SRC & ~PMU_CLK_SRC_SYS_CLK_SEL_MASK) | PMU_CLK_SRC_SYS_CLK_SEL(kCLOCK_SysClkSrcMainXtal); + break; + default: + assert(false); + break; + } +} + +/*! + * @brief Enable the 32K XTAL. + * + * @param mode Internal or external OSC selection. + */ +void CLOCK_EnableXtal32K(clock_osc32k_mode_t mode) +{ + PMU->XTAL32K_CTRL = + (PMU->XTAL32K_CTRL & ~PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN_MASK) | PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN(mode); + PMU->XTAL32K_CTRL |= PMU_XTAL32K_CTRL_X32K_EN_MASK; + while ((PMU->CLK_RDY & PMU_CLK_RDY_X32K_RDY_MASK) == 0U) + { + } +} + +/*! + * @brief Disable the 32K XTAL output. + */ +void CLOCK_DisableXtal32K(void) +{ + PMU->XTAL32K_CTRL &= ~PMU_XTAL32K_CTRL_X32K_EN_MASK; +} + +/*! + * @brief Enable the RC32M OSC. + * + * @param halfDiv half-divided reference clock. True for 16MHz and false for original 32MHz output. + */ +void CLOCK_EnableRC32M(bool halfDiv) +{ + RC32->CLK = (RC32->CLK & ~RC32_CLK_REF_SEL_MASK) | RC32_CLK_REF_SEL(halfDiv ? 0U : 1U); + RC32->CTRL &= ~RC32_CTRL_PD_MASK; + RC32->CTRL |= RC32_CTRL_EN_MASK; + while ((PMU->CLK_RDY & PMU_CLK_RDY_RC32M_RDY_MASK) == 0U) + { + } +} + +/*! + * @brief Disable the RC32M OSC. + */ +void CLOCK_DisableRC32M(void) +{ + RC32->CTRL &= ~RC32_CTRL_EN_MASK; + RC32->CTRL |= RC32_CTRL_PD_MASK; +} + +/*! + * @brief RC32M clock calibration function + * + * @param autoCal Calibration option, true for auto and false for manual + * @param manCalCode Select manual way, need input the calibration code + * @return return the calibration result + * -1, calibration failure + * else, internal calibration code + * + * @note Clock CLK_AUPLL_CAU must be ready before RC32M calibration + */ +int32_t CLOCK_CalibrateRC32M(bool autoCal, uint32_t manCalCode) +{ + volatile uint32_t localCnt; + + /* Soft reset RC32M */ + RC32->RST |= RC32_RST_SOFT_RST_MASK; + + for (localCnt = 0U; localCnt < 10U; localCnt++) + { + __NOP(); + } + + RC32->RST &= ~RC32_RST_SOFT_RST_MASK; + + /* Power up RC32M */ + RC32->CTRL &= ~RC32_CTRL_PD_MASK; + RC32->CTRL |= RC32_CTRL_EN_MASK; + + localCnt = 0U; + while (true) + { + /* Check RC32M_RDY status */ + if ((PMU->CLK_RDY & PMU_CLK_RDY_RC32M_RDY_MASK) != 0U) + { + break; + } + else if (localCnt > 5000000U) + { + return -1; + } + + localCnt++; + } + + if (autoCal) + { + /* Auto */ + RC32->CTRL &= ~RC32_CTRL_EXT_CODE_EN_MASK; + PMU->RC32M_CTRL |= PMU_RC32M_CTRL_CAL_ALLOW_MASK; + RC32->CTRL |= RC32_CTRL_CAL_EN_MASK; + } + else + { + /* Manual */ + RC32->CTRL = (RC32->CTRL & ~RC32_CTRL_CODE_FR_EXT_MASK) | RC32_CTRL_CODE_FR_EXT(manCalCode); + RC32->CTRL |= RC32_CTRL_EXT_CODE_EN_MASK; + } + + localCnt = 0; + while (true) + { + /* Check CAL_DONE status */ + if (((RC32->STATUS & RC32_STATUS_CAL_DONE_MASK) != 0U) || ((RC32->CTRL & RC32_CTRL_EXT_CODE_EN_MASK) != 0U)) + { + break; + } + else if (localCnt > 5000000U) + { + return -1; + } + + localCnt++; + } + + RC32->CTRL &= ~RC32_CTRL_CAL_EN_MASK; + PMU->RC32M_CTRL &= ~PMU_RC32M_CTRL_CAL_ALLOW_MASK; + + return (int32_t)(uint32_t)((RC32->STATUS & RC32_STATUS_CODE_FR_CAL_MASK) >> RC32_STATUS_CODE_FR_CAL_SHIFT); +} + +/*! + * @brief Enable the RC32K OSC. + */ +void CLOCK_EnableRC32K(void) +{ + PMU->RC32K_CTRL0 &= ~PMU_RC32K_CTRL0_RC32K_PD_MASK; + while ((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_RDY_MASK) == 0U) + { + } +} + +/*! + * @brief Disable the RC32K OSC. + */ +void CLOCK_DisableRC32K(void) +{ + PMU->RC32K_CTRL0 |= PMU_RC32K_CTRL0_RC32K_PD_MASK; +} + +/*! + * @brief RC32K clock calibration function + * + * @param autoCal Calibration option, true for auto and false for manual + * @param manCalCode Select manual way, need input the calibration code + * @return return the calibration result + * -1, calibration failure + * else, internal calibration code + * + * @note Clock CLK_XTAL32K must be ready before RC32K calibration + */ +int32_t CLOCK_CalibrateRC32K(bool autoCal, uint32_t manCalCode) +{ + volatile uint32_t localCnt; + + /* Power up RC32K */ + PMU->RC32K_CTRL0 &= ~PMU_RC32K_CTRL0_RC32K_PD_MASK; + + localCnt = 0; + while (true) + { + /* Check RC32K_RDY and X32K_RDY status */ + if (((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_RDY_MASK) != 0U) && + ((PMU->CLK_RDY & PMU_CLK_RDY_X32K_RDY_MASK) != 0U)) + { + break; + } + else if (localCnt > 5000000U) + { + return -1; + } + + localCnt++; + } + + if (autoCal) + { + PMU->RC32K_CTRL1 &= ~PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_MASK; + PMU->RC32K_CTRL1 |= PMU_RC32K_CTRL1_RC32K_ALLOW_CAL_MASK; + } + else + { + PMU->RC32K_CTRL0 = (PMU->RC32K_CTRL0 & ~PMU_RC32K_CTRL0_RC32K_CODE_FR_EXT_MASK) | + PMU_RC32K_CTRL0_RC32K_CODE_FR_EXT(manCalCode); + PMU->RC32K_CTRL1 |= PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_MASK; + } + + /* Start Calibration */ + PMU->RC32K_CTRL0 |= PMU_RC32K_CTRL0_RC32K_CAL_EN_MASK; + + /* Add a short delay to prevent auto cal fail */ + localCnt = 0; + while (true) + { + if (((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_CAL_DONE_MASK) == 0U) || + ((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_MASK) != 0U)) + { + break; + } + else if (localCnt > 50000U) + { + break; + } + localCnt++; + } + + localCnt = 0U; + while (true) + { + /* Check CAL_DONE status */ + if (((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_CAL_DONE_MASK) != 0U) || + ((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_EXT_CODE_EN_MASK) != 0U)) + { + break; + } + else if (localCnt > 5000000U) + { + return -1; + } + localCnt++; + } + + localCnt = 0; + while (localCnt <= 0x1000U) + { + localCnt++; + } + + PMU->RC32K_CTRL0 &= ~PMU_RC32K_CTRL0_RC32K_CAL_EN_MASK; + PMU->RC32K_CTRL1 &= ~PMU_RC32K_CTRL1_RC32K_ALLOW_CAL_MASK; + + return (int32_t)(uint32_t)((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_CODE_FR_CAL_MASK) >> + PMU_RC32K_CTRL1_RC32K_CODE_FR_CAL_SHIFT); +} + +/*! + * @brief Enable the REFCLK for SYS/AUD/USB reference. + * + * @param refclks Or'ed value to select SYS/AUD/USB REFCLK to disable. See \ref clock_refclk_t. + */ +void CLOCK_EnableRefClk(uint32_t refclks) +{ + assert((refclks & ~((uint32_t)kCLOCK_RefClk_ALL)) == 0U); + + /* Ensure WLAN is powered on */ + PMU->WLAN_CTRL |= PMU_WLAN_CTRL_PD_MASK; + /* Enable reference clock request */ + PMU->WLAN_CTRL |= refclks; + /* Wait reference clock ready */ + while ((PMU->WLAN_CTRL & (refclks << 3U)) != (refclks << 3U)) + { + } +} + +/*! + * @brief Disable the REFCLK for SYS/AUD/USB reference. + * + * @param refclks Or'ed value to select SYS/AUD/USB REFCLK to disable. See \ref clock_refclk_t. + */ +void CLOCK_DisableRefClk(uint32_t refclks) +{ + assert((refclks & ~((uint32_t)kCLOCK_RefClk_ALL)) == 0U); + + /* Disable reference clock request */ + PMU->WLAN_CTRL &= ~refclks; +} + +/*! @brief Initialize the SFLL. + * @param config : Configuration to set to SFLL. + */ +void CLOCK_InitSFll(const clock_sfll_config_t *config) +{ + assert(config); + + /* Accepted sfll reference divider is 2~511 */ + assert((config->refDiv >= 2U) && (config->refDiv <= 511U)); + + /* Accepted sfll feedback divider is 1~511 */ + assert((config->fbDiv >= 1U) && (config->fbDiv <= 511U)); + + /* Accepted sfll kvco is 0~3 */ + assert(config->kvco <= 3U); + + /* Accepted sfll postdiv is 0~3 */ + assert(config->postDiv <= 3U); + + PMU->SFLL_CTRL0 = (PMU->SFLL_CTRL0 & ~(PMU_SFLL_CTRL0_SFLL_FBDIV_MASK | PMU_SFLL_CTRL0_SFLL_KVCO_MASK | + PMU_SFLL_CTRL0_SFLL_REFCLK_SEL_MASK)) | + PMU_SFLL_CTRL0_SFLL_FBDIV(config->fbDiv) | PMU_SFLL_CTRL0_SFLL_KVCO(config->kvco) | + PMU_SFLL_CTRL0_SFLL_REFCLK_SEL(config->sfllSrc); + PMU->SFLL_CTRL1 = (PMU->SFLL_CTRL1 & ~(PMU_SFLL_CTRL1_SFLL_REFDIV_MASK | PMU_SFLL_CTRL1_SFLL_DIV_SEL_MASK)) | + PMU_SFLL_CTRL1_SFLL_REFDIV(config->refDiv) | PMU_SFLL_CTRL1_SFLL_DIV_SEL(config->postDiv); + + /* Power up */ + PMU->SFLL_CTRL0 |= PMU_SFLL_CTRL0_SFLL_PU_MASK; + + /* Wait PLL ready */ + while ((PMU->CLK_RDY & PMU_CLK_RDY_PLL_CLK_RDY_MASK) == 0U) + { + } +} + +/*! @brief Deinit the SFLL. + */ +void CLOCK_DeinitSFll(void) +{ + /* Power down */ + PMU->SFLL_CTRL0 &= ~PMU_SFLL_CTRL0_SFLL_PU_MASK; +} + +/*! @brief Initialize the AUPLL. + * @param config : Configuration to set to AUPLL. + */ +void CLOCK_InitAuPll(const clock_aupll_config_t *config) +{ + assert(config); + /* check the parameters */ + + /* Accepted aupll reference divider is 3~10 */ + assert((config->refDiv >= 3U) && (config->refDiv <= 10U)); + + /* Accepted aupll feedback divider is 27, 29, 31 ~ 36, 38, 39, 42, 46 */ + assert(((config->fbDiv >= 27U) && (config->fbDiv <= 39U) && (config->fbDiv != 28U) && (config->fbDiv != 30U) && + (config->fbDiv != 37U)) || + (config->fbDiv == 42U) || (config->fbDiv == 46U)); + + /* Accepted aupll icp is 0~3 */ + assert(config->icp <= 3U); + + /* Accepted AUPLL_POSTDIV_PATTERN is 0~2 */ + assert(config->postDivPattern <= 2U); + + /* Accepted AUPLL_POSTDIV_MODULO is 0 ~ 2, 4, 7 */ + assert(((config->postDivModulo <= 4U) && (config->postDivModulo != 3U)) || (config->postDivModulo == 7U)); + + PMU->AUPLL_CTRL1 = (PMU->AUPLL_CTRL1 & ~(PMU_AUPLL_CTRL1_DIV_MCLK_MASK | PMU_AUPLL_CTRL1_DIV_FBCCLK_MASK | + PMU_AUPLL_CTRL1_ICP_MASK | PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_MASK | + PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_MASK | PMU_AUPLL_CTRL1_ENA_DITHER_MASK | + PMU_AUPLL_CTRL1_EN_VCOX2_MASK | PMU_AUPLL_CTRL1_REFCLK_SEL_MASK)) | + PMU_AUPLL_CTRL1_DIV_MCLK(config->refDiv) | PMU_AUPLL_CTRL1_DIV_FBCCLK(config->fbDiv) | + PMU_AUPLL_CTRL1_ICP(config->icp) | PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN(config->postDivPattern) | + PMU_AUPLL_CTRL1_DIV_OCLK_MODULO(config->postDivModulo) | + PMU_AUPLL_CTRL1_ENA_DITHER(config->enaDither) | PMU_AUPLL_CTRL1_EN_VCOX2(config->enaVcoClkX2) | + PMU_AUPLL_CTRL1_REFCLK_SEL(config->aupllSrc); + + PMU->AUPLL_CTRL0 = (PMU->AUPLL_CTRL0 & ~PMU_AUPLL_CTRL0_FRACT_MASK) | PMU_AUPLL_CTRL0_FRACT(config->fract); + + /* Power up */ + PMU->AUPLL_CTRL0 |= PMU_AUPLL_CTRL0_PU_MASK; +} + +/*! @brief Deinit the AUPLL. + */ +void CLOCK_DeinitAuPll(void) +{ + /* Power down */ + PMU->AUPLL_CTRL0 &= ~PMU_AUPLL_CTRL0_PU_MASK; +} + +/*! @brief Update the AUPLL post divider + */ +void CLOCK_UpdateAupllPostDiv(uint8_t postDivPattern, uint8_t postDivModulo) +{ + /* Accepted AUPLL_POSTDIV_PATTERN is 0~2 */ + assert(postDivPattern <= 2U); + + /* Accepted AUPLL_POSTDIV_MODULO is 0 ~ 2, 4, 7 */ + assert(((postDivModulo <= 4U) && (postDivModulo != 3U)) || (postDivModulo == 7U)); + + PMU->AUPLL_CTRL1 = + (PMU->AUPLL_CTRL1 & ~(PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_MASK | PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_MASK)) | + PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN(postDivPattern) | PMU_AUPLL_CTRL1_DIV_OCLK_MODULO(postDivModulo); +} + +/*! @brief Return Frequency of MAIN XTAL Clock + * @return Frequency of MAIN XTAL Clock. + */ +uint32_t CLOCK_GetMainXtalFreq(void) +{ + uint32_t freq; + + if ((PMU->WLAN_CTRL & PMU_WLAN_CTRL_REFCLK_SYS_RDY_MASK) == 0U) + { + freq = 0U; + } + else + { + freq = g_mainXtalFreq; + } + + return freq; +} + +/*! @brief Return Frequency of REFCLK_AUD Clock + * @return Frequency of REFCLK_AUD Clock. + */ +uint32_t CLOCK_GetRefClkAudFreq(void) +{ + uint32_t freq; + + if ((PMU->WLAN_CTRL & PMU_WLAN_CTRL_REFCLK_AUD_RDY_MASK) == 0U) + { + freq = 0U; + } + else + { + freq = g_mainXtalFreq; + } + + return freq; +} + +/*! @brief Return Frequency of RC32M Clock + * @return Frequency of RC32M Clock. + */ +uint32_t CLOCK_GetRC32MFreq(void) +{ + uint32_t freq; + + if ((PMU->CLK_RDY & PMU_CLK_RDY_RC32M_RDY_MASK) == 0U) + { + freq = 0U; + } + else + { + freq = ((RC32->CLK & RC32_CLK_REF_SEL_MASK) == 0U) ? (CLK_RC32M_CLK / 2U) : CLK_RC32M_CLK; + } + + return freq; +} + +/*! @brief Return Frequency of XTAL32K Clock + * @return Frequency of XTAL32K Clock. + */ +uint32_t CLOCK_GetXtal32KFreq(void) +{ + uint32_t freq; + + if ((PMU->CLK_RDY & PMU_CLK_RDY_X32K_RDY_MASK) == 0U) + { + freq = 0U; + } + else + { + freq = ((PMU->XTAL32K_CTRL & PMU_XTAL32K_CTRL_X32K_EXT_OSC_EN_MASK) == 0U) ? CLOCK_GetRC32KFreq() : + CLK_XTAL32K_CLK; + } + + return freq; +} + +/*! @brief Return Frequency of RC32K Clock + * @return Frequency of RC32K Clock. + */ +uint32_t CLOCK_GetRC32KFreq(void) +{ + uint32_t freq; + + if ((PMU->RC32K_CTRL1 & PMU_RC32K_CTRL1_RC32K_RDY_MASK) == 0U) + { + freq = 0U; + } + else + { + freq = CLK_RC32K_CLK; + } + + return freq; +} + +/*! @brief Return Frequency of SFLL Clock + * @return Frequency of SFLL Clock. + */ +uint32_t CLOCK_GetSFllFreq(void) +{ + uint32_t pllSrcFreq; + uint64_t freq; + + if ((PMU->CLK_RDY & PMU_CLK_RDY_PLL_CLK_RDY_MASK) == 0U) + { + freq = 0U; + } + else + { + pllSrcFreq = ((PMU->SFLL_CTRL0 & PMU_SFLL_CTRL0_SFLL_REFCLK_SEL_MASK) == 0U) ? CLOCK_GetRC32MFreq() : + CLOCK_GetMainXtalFreq(); + + freq = (uint64_t)pllSrcFreq * + ((PMU->SFLL_CTRL0 & PMU_SFLL_CTRL0_SFLL_FBDIV_MASK) >> PMU_SFLL_CTRL0_SFLL_FBDIV_SHIFT) * 2U; + freq >>= ((PMU->SFLL_CTRL1 & PMU_SFLL_CTRL1_SFLL_DIV_SEL_MASK) >> PMU_SFLL_CTRL1_SFLL_DIV_SEL_SHIFT); + freq /= ((PMU->SFLL_CTRL1 & PMU_SFLL_CTRL1_SFLL_REFDIV_MASK) >> PMU_SFLL_CTRL1_SFLL_REFDIV_SHIFT); + } + + return (uint32_t)freq; +} + +static uint32_t CLOCK_GetAuPllPostDiv(void) +{ + uint32_t mod = (PMU->AUPLL_CTRL1 & PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_MASK) >> PMU_AUPLL_CTRL1_DIV_OCLK_MODULO_SHIFT; + uint32_t pat = (PMU->AUPLL_CTRL1 & PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_MASK) >> PMU_AUPLL_CTRL1_DIV_OCLK_PATTERN_SHIFT; + uint32_t code = (mod << 4U) | pat; + uint32_t div; + + switch (code) + { + case 0x30U: + div = 1U; + break; + case 0x50U: + div = 2U; + break; + case 0x00U: + div = 4U; + break; + case 0x11U: + div = 6U; + break; + case 0x10U: + div = 8U; + break; + case 0x12U: + div = 9U; + break; + case 0x21U: + div = 12U; + break; + case 0x20U: + div = 16U; + break; + case 0x22U: + div = 18U; + break; + case 0x41U: + div = 24U; + break; + case 0x42U: + div = 36U; + break; + case 0x61U: + div = 48U; + break; + case 0x62U: + div = 72U; + break; + default: + assert(false); /* Wrong post divider value */ + div = 1U; + break; + } + + return div; +} + +/*! @brief Return Frequency of AUPLL Clock + * @return Frequency of AUPLL Clock. + */ +uint32_t CLOCK_GetAuPllFreq(void) +{ + uint32_t pllSrcFreq; + uint64_t freq; + + if ((PMU->CLK_RDY & PMU_CLK_RDY_PLL_AUDIO_RDY_MASK) == 0U) + { + freq = 0U; + } + else + { + pllSrcFreq = ((PMU->AUPLL_CTRL1 & PMU_AUPLL_CTRL1_REFCLK_SEL_MASK) == 0U) ? CLOCK_GetRC32MFreq() : + CLOCK_GetRefClkAudFreq(); + + freq = pllSrcFreq / ((PMU->AUPLL_CTRL1 & PMU_AUPLL_CTRL1_DIV_MCLK_MASK) >> PMU_AUPLL_CTRL1_DIV_MCLK_SHIFT); + freq *= + ((PMU->AUPLL_CTRL1 & PMU_AUPLL_CTRL1_DIV_FBCCLK_MASK) >> PMU_AUPLL_CTRL1_DIV_FBCCLK_SHIFT) * FRACT_BASE_NUM; + freq /= (FRACT_BASE_NUM - ((PMU->AUPLL_CTRL0 & PMU_AUPLL_CTRL0_FRACT_MASK) >> PMU_AUPLL_CTRL0_FRACT_SHIFT)); + freq /= CLOCK_GetAuPllPostDiv(); + } + + return (uint32_t)freq; +} + +/*! @brief Return Frequency of M4/AHB Clock + * @return Frequency of M4/AHB Clock. + */ +uint32_t CLOCK_GetCoreBusFreq(void) +{ + uint32_t freq = CLOCK_GetSysClkFreq(); + uint32_t div = (PMU->MCU_CORE_CLK_DIV & PMU_MCU_CORE_CLK_DIV_FCLK_DIV_MASK) >> PMU_MCU_CORE_CLK_DIV_FCLK_DIV_SHIFT; + + div = div == 0U ? 1U : div; + + return freq / div; +} + +/*! @brief Return Frequency of APB Clock + * + * @param instance APB instance 0-1. + * @return Frequency of APB Clock. + */ +uint32_t CLOCK_GetApbFreq(uint32_t instance) +{ + uint32_t freq = CLOCK_GetSysClkFreq(); + uint32_t div; + + assert(instance <= 1U); + + div = (PMU->AON_CLK_CTRL & PMU_AON_CLK_CTRL_APB0_CLK_DIV_MASK << (2U * instance)) >> + (PMU_AON_CLK_CTRL_APB0_CLK_DIV_SHIFT + 2U * instance); + + return freq >> div; +} + +/*! @brief Return Frequency of UART Clock + * + * @param instance UART instance 0-2. + * @return Frequency of UART Clock. + */ +uint32_t CLOCK_GetUartClkFreq(uint32_t instance) +{ + uint32_t freq = CLOCK_GetSysClkFreq(); + uint32_t sel; + uint32_t nom, denom; + + assert(instance <= 2U); + + sel = PMU->UART_CLK_SEL & (PMU_UART_CLK_SEL_UART0_CLK_SEL_MASK << instance); + + if (sel == 0U) /* Slow */ + { + nom = (PMU->UART_SLOW_CLK_DIV & PMU_UART_SLOW_CLK_DIV_NOMINATOR_MASK) >> PMU_UART_SLOW_CLK_DIV_NOMINATOR_SHIFT; + denom = (PMU->UART_SLOW_CLK_DIV & PMU_UART_SLOW_CLK_DIV_DENOMINATOR_MASK) >> + PMU_UART_SLOW_CLK_DIV_DENOMINATOR_SHIFT; + } + else /* Fast */ + { + nom = (PMU->UART_FAST_CLK_DIV & PMU_UART_FAST_CLK_DIV_NOMINATOR_MASK) >> PMU_UART_FAST_CLK_DIV_NOMINATOR_SHIFT; + denom = (PMU->UART_FAST_CLK_DIV & PMU_UART_FAST_CLK_DIV_DENOMINATOR_MASK) >> + PMU_UART_FAST_CLK_DIV_DENOMINATOR_SHIFT; + } + + assert(nom != 0U); + + return (uint32_t)((uint64_t)freq * denom / nom); +} + +/*! @brief Return Frequency of GPT Clock + * + * @param instance GPT instance 0-3. + * @return Frequency of GPT Clock. + */ +uint32_t CLOCK_GetGptClkFreq(uint32_t instance) +{ + uint32_t freq; + uint32_t reg; + uint32_t sel; + uint32_t div; + + assert(instance <= 3U); + + switch (instance) + { + case 0: + reg = PMU->GPT0_CTRL; + div = (reg & PMU_GPT0_CTRL_GPT0_CLK_DIV_MASK) >> PMU_GPT0_CTRL_GPT0_CLK_DIV_SHIFT; + break; + case 1: + reg = PMU->GPT1_CTRL; + div = (reg & PMU_GPT0_CTRL_GPT0_CLK_DIV_MASK) >> PMU_GPT0_CTRL_GPT0_CLK_DIV_SHIFT; + break; + case 2: + reg = PMU->GPT2_CTRL; + div = (reg & PMU_GPT0_CTRL_GPT0_CLK_DIV_MASK) >> PMU_GPT0_CTRL_GPT0_CLK_DIV_SHIFT; + break; + default: + reg = PMU->GPT3_CTRL; + div = (((PMU->PERI2_CLK_DIV & PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_MASK) >> + PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_5_3_SHIFT) + << 3U) | + ((PMU->PERI2_CLK_DIV & PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_MASK) >> + PMU_PERI2_CLK_DIV_GPT3_CLK_DIV_2_0_SHIFT); + break; + } + + sel = (reg & (PMU_GPT0_CTRL_GPT0_CLK_SEL0_MASK | PMU_GPT0_CTRL_GPT0_CLK_SEL1_MASK)) >> + PMU_GPT0_CTRL_GPT0_CLK_SEL1_SHIFT; + div = div == 0U ? 1U : div; + + switch (sel) + { + case 0x0: + freq = CLOCK_GetSysClkFreq() / div; + break; + case 0x2: + freq = CLOCK_GetRC32KFreq(); + break; + case 0x3: + freq = CLOCK_GetXtal32KFreq(); + break; + case 0x8: + freq = CLOCK_GetRC32MFreq() / div; + break; + case 0xC: + freq = CLOCK_GetMainXtalFreq() / div; + break; + default: + assert(false); + freq = 0U; + break; + } + + return freq; +} + +/*! @brief Return Frequency of GPT Sample Clock + * + * @return Frequency of GPT Sample Clock. + */ +uint32_t CLOCK_GetGptSampleClkFreq(void) +{ + uint32_t freq = CLOCK_GetSysClkFreq(); + uint32_t div = + (PMU->PERI2_CLK_DIV & PMU_PERI2_CLK_DIV_GPT_SAMPLE_CLK_DIV_MASK) >> PMU_PERI2_CLK_DIV_GPT_SAMPLE_CLK_DIV_SHIFT; + + div = div == 0U ? 1U : div; + + return freq / div; +} + +/*! @brief Return Frequency of SSP Clock + * + * @param instance SSP instance 0-2. + * @return Frequency of SSP Clock. + */ +uint32_t CLOCK_GetSspClkFreq(uint32_t instance) +{ + uint32_t freq; + uint32_t sel; + uint32_t div; + + assert(instance <= 2U); + + sel = PMU->PERI_CLK_SRC & (PMU_PERI_CLK_SRC_SSP0_AUDIO_SEL_MASK << instance); + if (sel == 0U) + { + freq = CLOCK_GetSysClkFreq(); + } + else + { + freq = CLOCK_GetAuPllFreq(); + } + + div = (PMU->PERI0_CLK_DIV & (PMU_PERI0_CLK_DIV_SSP0_CLK_DIV_MASK << (5U * instance))) >> (5U * instance); + div = div == 0U ? 1U : div; + + return freq / div; +} + +/*! @brief Return Frequency of GAU Clock + * @return Frequency of GAU Clock. + */ +uint32_t CLOCK_GetGauClkFreq(void) +{ + uint32_t freq; + uint32_t div; + + freq = CLOCK_GetAuPllFreq(); + + div = (PMU->PERI3_CTRL & PMU_PERI3_CTRL_GAU_DIV_MASK) >> PMU_PERI3_CTRL_GAU_DIV_SHIFT; + div = div == 0U ? 1U : div; + + return freq / div; +} + +/*! @brief Return Frequency of RTC Clock + * @return Frequency of RTC Clock. + */ +uint32_t CLOCK_GetRtcClkFreq(void) +{ + uint32_t freq; + + if ((PMU->AON_CLK_CTRL & PMU_AON_CLK_CTRL_RTC_INT_SEL_MASK) == 0U) + { + freq = CLOCK_GetRC32KFreq(); + } + else + { + freq = CLOCK_GetXtal32KFreq(); + } + + return freq; +} + +/*! @brief Return Frequency of I2C Clock + * @return Frequency of I2C Clock. + */ +uint32_t CLOCK_GetI2cClkFreq(void) +{ + uint32_t freq = CLOCK_GetSysClkFreq(); + uint32_t div = (PMU->PERI2_CLK_DIV & PMU_PERI2_CLK_DIV_I2C_CLK_DIV_MASK) >> PMU_PERI2_CLK_DIV_I2C_CLK_DIV_SHIFT; + + div = div == 0U ? 1U : div; + + return freq / div; +} + +/*! @brief Return Frequency of QSPI Clock + * @return Frequency of QSPI Clock. + */ +uint32_t CLOCK_GetQspiClkFreq(void) +{ + uint32_t freq = CLOCK_GetSysClkFreq(); + uint32_t div = (PMU->PERI1_CLK_DIV & (7UL << 8U)) >> 8U; + + div = div == 0U ? 1U : div; + + return freq / div; +} + +/*! @brief Return Frequency of FlashC Clock + * @return Frequency of FlashC Clock. + */ +uint32_t CLOCK_GetFlashCClkFreq(void) +{ + uint32_t freq = CLOCK_GetSysClkFreq(); + uint32_t div = (PMU->PERI1_CLK_DIV & PMU_PERI1_CLK_DIV_FLASH_CLK_DIV_MASK) >> PMU_PERI1_CLK_DIV_FLASH_CLK_DIV_SHIFT; + + div = div == 0U ? 1U : div; + + return freq / div; +} + +/*! @brief Return Frequency of WDT Clock + * @return Frequency of WDT Clock. + */ +uint32_t CLOCK_GetWdtClkFreq(void) +{ + uint32_t freq = CLOCK_GetApbFreq(1U); + uint32_t div22 = + (PMU->PERI2_CLK_DIV & PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_MASK) >> PMU_PERI2_CLK_DIV_WDT_CLK_DIV_2_2_SHIFT; + uint32_t div10 = + (PMU->PERI2_CLK_DIV & PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_MASK) >> PMU_PERI2_CLK_DIV_WDT_CLK_DIV_1_0_SHIFT; + uint32_t div53 = + (PMU->PERI2_CLK_DIV & PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_MASK) >> PMU_PERI2_CLK_DIV_WDT_CLK_DIV_5_3_SHIFT; + uint32_t div; + + div = (div53 << 3U) | (div22 << 2U) | div10; + + return freq >> div; +} + +/*! @brief Return Frequency of SDIO Clock + * @return Frequency of SDIO Clock. + */ +uint32_t CLOCK_GetSdioClkFreq(void) +{ + uint32_t freq; + uint32_t div; + + freq = CLOCK_GetSysClkFreq(); + + div = (PMU->PERI0_CLK_DIV & (0xFUL << 16U)) >> 16U; + div = div == 0U ? 1U : div; + + return freq / div; +} diff --git a/devices/88MW320/drivers/fsl_clock.h b/devices/88MW320/drivers/fsl_clock.h new file mode 100644 index 000000000..2b36a8b3b --- /dev/null +++ b/devices/88MW320/drivers/fsl_clock.h @@ -0,0 +1,651 @@ +/* + * Copyright 2020, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_CLOCK_H_ +#define _FSL_CLOCK_H_ + +#include "fsl_common.h" + +/*! @addtogroup clock */ +/*! @{ */ + +/*! @file */ + +/******************************************************************************* + * Configurations + ******************************************************************************/ + +/*! @brief Configure whether driver controls clock + * + * When set to 0, peripheral drivers will enable clock in initialize function + * and disable clock in de-initialize function. When set to 1, peripheral + * driver will not control the clock, application could control the clock out of + * the driver. + * + * @note All drivers share this feature switcher. If it is set to 1, application + * should handle clock enable and disable for all drivers. + */ +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)) +#define FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL 0 +#endif + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief CLOCK driver version 2.0.1. */ +#define FSL_CLOCK_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! @brief External crystal MAINXTAL clock frequency. + * + * The MAINXTAL clock frequency in Hz. When the clock is set up, use the + * function CLOCK_SetMainXtalFreq to set the value in the clock driver. For example, + * if MAINXTAL is 38.4 MHz: + * @code + * CLOCK_SetMainXtalFreq(384000000); + * @endcode + */ +extern volatile uint32_t g_mainXtalFreq; + +/* Definition for delay API in clock driver, users can redefine it to the real application. */ +#ifndef SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY +#define SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY (200000000UL) +#endif + +/*! @brief Clock ip name array for GPIO. */ +#define GPIO_CLOCKS \ + { \ + kCLOCK_Gpio \ + } + +/*! @brief Clock ip name array for I2C. */ +#define I2C_CLOCKS \ + { \ + kCLOCK_I2c0, kCLOCK_I2c1 \ + } + +/*! @brief Clock ip name array for QSPI. */ +#define QSPI_CLOCKS \ + { \ + kCLOCK_Qspi \ + } + +/*! @brief Clock ip name array for UART. */ +#define UART_CLOCKS \ + { \ + kCLOCK_Uart0, kCLOCK_Uart1, kCLOCK_Uart2 \ + } + +/*! @brief Clock ip name array for SSP. */ +#define SSP_CLOCKS \ + { \ + kCLOCK_Ssp0, kCLOCK_Ssp1, kCLOCK_Ssp2 \ + } + +/*! @brief Clock ip name array for GPT. */ +#define GPT_CLOCKS \ + { \ + kCLOCK_Gpt0, kCLOCK_Gpt1, kCLOCK_Gpt2, kCLOCK_Gpt3 \ + } + +/*! @brief Clock ip name array for WDT. */ +#define WDT_CLOCKS \ + { \ + kCLOCK_Wdt \ + } + +/*! @brief Clock ip name array for RTC. */ +#define RTC_CLOCKS \ + { \ + kCLOCK_Rtc \ + } + +/*! @brief Clock ip name array for ACOMP. */ +#define ACOMP_CLOCKS \ + { \ + kCLOCK_AcompMclk \ + } + +/*! @brief Clock ip name array for ADC. */ +#define ADC_CLOCKS \ + { \ + kCLOCK_AdcMclk \ + } + +/*! @brief Clock ip name array for DAC. */ +#define DAC_CLOCKS \ + { \ + kCLOCK_DacMclk \ + } + +/*! @brief Clock ip name array for DMAC. */ +#define DMAC_CLOCKS \ + { \ + kCLOCK_Dma \ + } + +/*! @brief Clock operation code. + * [31:16] Register offset from PMU base. + * [15:11] Register bit position. + * [10: 8] Register bits width to operate. + * [ 7: 0] Value to set to the bits. + */ +#define CLK_OP_CODE_DEFINE(regOff, bitPos, bitWid, val) \ + (((regOff) << 16U) | ((bitPos) << 11U) | ((bitWid) << 8U) | (val)) +#define CLK_OP_REG(code) (*((volatile uint32_t *)(PMU_BASE + (((uint32_t)(code)) >> 16U)))) +#define CLK_OP_POS(code) ((((uint32_t)(code)) >> 11U) & 0x1FU) +#define CLK_OP_MASK(code) ((1UL << ((((uint32_t)(code)) >> 8U) & 0x7U)) - 1U) +#define CLK_OP_VALUE(code) (((uint32_t)(code)) & 0xFFU) + +/*! + * @brief Peripheral clock name difinition used for + * clock gate. + */ +typedef enum _clock_ip_name +{ + kCLOCK_IpInvalid = 0U, + + kCLOCK_Qspi = CLK_OP_CODE_DEFINE(0x7CU, 1U, 1U, 0U), + kCLOCK_Gpio = CLK_OP_CODE_DEFINE(0x7CU, 4U, 1U, 0U), + kCLOCK_Uart0 = CLK_OP_CODE_DEFINE(0x7CU, 5U, 1U, 0U), + kCLOCK_Uart1 = CLK_OP_CODE_DEFINE(0x7CU, 6U, 1U, 0U), + kCLOCK_Uart2 = CLK_OP_CODE_DEFINE(0x7CU, 15U, 1U, 0U), + kCLOCK_I2c0 = CLK_OP_CODE_DEFINE(0x7CU, 7U, 1U, 0U), + kCLOCK_I2c1 = CLK_OP_CODE_DEFINE(0x7CU, 19U, 1U, 0U), + kCLOCK_I2c2 = CLK_OP_CODE_DEFINE(0x7CU, 20U, 1U, 0U), + kCLOCK_Ssp0 = CLK_OP_CODE_DEFINE(0x7CU, 8U, 1U, 0U), + kCLOCK_Ssp1 = CLK_OP_CODE_DEFINE(0x7CU, 9U, 1U, 0U), + kCLOCK_Ssp2 = CLK_OP_CODE_DEFINE(0x7CU, 17U, 1U, 0U), + kCLOCK_Gpt0 = CLK_OP_CODE_DEFINE(0x7CU, 10U, 1U, 0U), + kCLOCK_Gpt1 = CLK_OP_CODE_DEFINE(0x7CU, 11U, 1U, 0U), + kCLOCK_Gpt2 = CLK_OP_CODE_DEFINE(0x7CU, 21U, 1U, 0U), + kCLOCK_Gpt3 = CLK_OP_CODE_DEFINE(0x7CU, 22U, 1U, 0U), + kCLOCK_Wdt = CLK_OP_CODE_DEFINE(0x7CU, 23U, 1U, 0U), + kCLOCK_Sdio = CLK_OP_CODE_DEFINE(0x7CU, 25U, 1U, 0U), + kCLOCK_SdioAhb = CLK_OP_CODE_DEFINE(0x7CU, 31U, 1U, 0U), + kCLOCK_Usbc = CLK_OP_CODE_DEFINE(0x7CU, 27U, 1U, 0U), + kCLOCK_UsbcAhb = CLK_OP_CODE_DEFINE(0x7CU, 30U, 1U, 0U), + kCLOCK_Adc = CLK_OP_CODE_DEFINE(0x7CU, 26U, 1U, 0U), + + kCLOCK_Gau = CLK_OP_CODE_DEFINE(0x9CU, 2U, 1U, 0U), + + kCLOCK_AcompMclk = CLK_OP_CODE_DEFINE(0xB4U, 0U, 1U, 1U), + kCLOCK_DacMclk = CLK_OP_CODE_DEFINE(0xB4U, 1U, 1U, 1U), + kCLOCK_AdcMclk = CLK_OP_CODE_DEFINE(0xB4U, 3U, 1U, 1U), + kCLOCK_BgMclk = CLK_OP_CODE_DEFINE(0xB4U, 4U, 1U, 1U), + + kCLOCK_Rtc = CLK_OP_CODE_DEFINE(0xF8U, 4U, 1U, 0U), + kCLOCK_Dma = CLK_OP_CODE_DEFINE(0xF8U, 6U, 1U, 0U), + + kCLOCK_Rc32m = CLK_OP_CODE_DEFINE(0xFCU, 18U, 1U, 0U), +} clock_ip_name_t; + +/*! + * @brief Peripheral clock source selection definition. + */ +typedef enum _clock_attach_id +{ + kSYS_CLK_to_SLOW_UART0 = CLK_OP_CODE_DEFINE(0x88U, 0U, 1U, 0x0U), + kSYS_CLK_to_FAST_UART0 = CLK_OP_CODE_DEFINE(0x88U, 0U, 1U, 0x1U), + + kSYS_CLK_to_SLOW_UART1 = CLK_OP_CODE_DEFINE(0x88U, 1U, 1U, 0x0U), + kSYS_CLK_to_FAST_UART1 = CLK_OP_CODE_DEFINE(0x88U, 1U, 1U, 0x1U), + + kSYS_CLK_to_SLOW_UART2 = CLK_OP_CODE_DEFINE(0x88U, 2U, 1U, 0x0U), + kSYS_CLK_to_FAST_UART2 = CLK_OP_CODE_DEFINE(0x88U, 2U, 1U, 0x1U), + + kSYS_CLK_to_GPT0 = CLK_OP_CODE_DEFINE(0xE4U, 7U, 4U, 0x0U), + kRC32K_to_GPT0 = CLK_OP_CODE_DEFINE(0xE4U, 7U, 4U, 0x2U), + kXTAL32K_to_GPT0 = CLK_OP_CODE_DEFINE(0xE4U, 7U, 4U, 0x3U), + kRC32M_to_GPT0 = CLK_OP_CODE_DEFINE(0xE4U, 7U, 4U, 0x8U), + kMAINXTAL_to_GPT0 = CLK_OP_CODE_DEFINE(0xE4U, 7U, 4U, 0xCU), + + kSYS_CLK_to_GPT1 = CLK_OP_CODE_DEFINE(0xE8U, 7U, 4U, 0x0U), + kRC32K_to_GPT1 = CLK_OP_CODE_DEFINE(0xE8U, 7U, 4U, 0x2U), + kXTAL32K_to_GPT1 = CLK_OP_CODE_DEFINE(0xE8U, 7U, 4U, 0x3U), + kRC32M_to_GPT1 = CLK_OP_CODE_DEFINE(0xE8U, 7U, 4U, 0x8U), + kMAINXTAL_to_GPT1 = CLK_OP_CODE_DEFINE(0xE8U, 7U, 4U, 0xCU), + + kSYS_CLK_to_GPT2 = CLK_OP_CODE_DEFINE(0xECU, 7U, 4U, 0x0U), + kRC32K_to_GPT2 = CLK_OP_CODE_DEFINE(0xECU, 7U, 4U, 0x2U), + kXTAL32K_to_GPT2 = CLK_OP_CODE_DEFINE(0xECU, 7U, 4U, 0x3U), + kRC32M_to_GPT2 = CLK_OP_CODE_DEFINE(0xECU, 7U, 4U, 0x8U), + kMAINXTAL_to_GPT2 = CLK_OP_CODE_DEFINE(0xECU, 7U, 4U, 0xCU), + + kSYS_CLK_to_GPT3 = CLK_OP_CODE_DEFINE(0xF0U, 7U, 4U, 0x0U), + kRC32K_to_GPT3 = CLK_OP_CODE_DEFINE(0xF0U, 7U, 4U, 0x2U), + kXTAL32K_to_GPT3 = CLK_OP_CODE_DEFINE(0xF0U, 7U, 4U, 0x3U), + kRC32M_to_GPT3 = CLK_OP_CODE_DEFINE(0xF0U, 7U, 4U, 0x8U), + kMAINXTAL_to_GPT3 = CLK_OP_CODE_DEFINE(0xF0U, 7U, 4U, 0xCU), + + kSYS_CLK_to_SSP0 = CLK_OP_CODE_DEFINE(0xDCU, 0U, 1U, 0x0U), + kAUPLL_to_SSP0 = CLK_OP_CODE_DEFINE(0xDCU, 0U, 1U, 0x1U), + + kSYS_CLK_to_SSP1 = CLK_OP_CODE_DEFINE(0xDCU, 1U, 1U, 0x0U), + kAUPLL_to_SSP1 = CLK_OP_CODE_DEFINE(0xDCU, 1U, 1U, 0x1U), + + kSYS_CLK_to_SSP2 = CLK_OP_CODE_DEFINE(0xDCU, 2U, 1U, 0x0U), + kAUPLL_to_SSP2 = CLK_OP_CODE_DEFINE(0xDCU, 2U, 1U, 0x1U), + + kSYS_CLK_to_GAU = CLK_OP_CODE_DEFINE(0x9CU, 0U, 2U, 0x0U), + kRC32M_to_GAU = CLK_OP_CODE_DEFINE(0x9CU, 0U, 2U, 0x1U), + kMAINXTAL_to_GAU = CLK_OP_CODE_DEFINE(0x9CU, 0U, 2U, 0x2U), + kAUPLL_to_GAU = CLK_OP_CODE_DEFINE(0x9CU, 0U, 2U, 0x3U), + + kRC32K_to_RTC = CLK_OP_CODE_DEFINE(0xF8U, 5U, 1U, 0x0U), + kXTAL32K_to_RTC = CLK_OP_CODE_DEFINE(0xF8U, 5U, 1U, 0x1U), +} clock_attach_id_t; + +/*! + * @brief Clock divider definition. + */ +typedef enum _clock_div_name +{ + kCLOCK_DivUartFast = CLK_OP_CODE_DEFINE(0x80U, 0U, 0U, 1U), + kCLOCK_DivUartSlow = CLK_OP_CODE_DEFINE(0x84U, 0U, 0U, 1U), + kCLOCK_DivCore = CLK_OP_CODE_DEFINE(0x8CU, 0U, 6U, 0U), + + kCLOCK_DivSsp0 = CLK_OP_CODE_DEFINE(0x90U, 0U, 5U, 0U), + kCLOCK_DivSsp1 = CLK_OP_CODE_DEFINE(0x90U, 5U, 5U, 0U), + kCLOCK_DivSsp2 = CLK_OP_CODE_DEFINE(0x90U, 10U, 5U, 0U), + kCLOCK_DivSdio = CLK_OP_CODE_DEFINE(0x90U, 16U, 4U, 0U), + + kCLOCK_DivFlashC = CLK_OP_CODE_DEFINE(0x94U, 4U, 3U, 0U), + kCLOCK_DivQspi = CLK_OP_CODE_DEFINE(0x94U, 8U, 3U, 0U), + + kCLOCK_DivI2c = CLK_OP_CODE_DEFINE(0x98U, 20U, 2U, 0U), + kCLOCK_DivGptSamp = CLK_OP_CODE_DEFINE(0x98U, 0U, 3U, 0U), + kCLOCK_DivWdt = CLK_OP_CODE_DEFINE(0x98U, 24U, 2U, 1U), + + kCLOCK_DivGpt0 = CLK_OP_CODE_DEFINE(0xE4U, 0U, 6U, 0U), + kCLOCK_DivGpt1 = CLK_OP_CODE_DEFINE(0xE8U, 0U, 6U, 0U), + kCLOCK_DivGpt2 = CLK_OP_CODE_DEFINE(0xECU, 0U, 6U, 0U), + kCLOCK_DivGpt3 = CLK_OP_CODE_DEFINE(0x98U, 8U, 3U, 1U), + + kCLOCK_DivApb0 = CLK_OP_CODE_DEFINE(0xF8U, 7U, 2U, 0U), + kCLOCK_DivApb1 = CLK_OP_CODE_DEFINE(0xF8U, 9U, 2U, 0U), + kCLOCK_DivPmu = CLK_OP_CODE_DEFINE(0xF8U, 0U, 4U, 0U), + + kCLOCK_DivGau = CLK_OP_CODE_DEFINE(0xFCU, 8U, 5U, 0U), + kCLOCK_DivRc32mRef = CLK_OP_CODE_DEFINE(0xFCU, 13U, 5U, 0U), +} clock_div_name_t; + +/*! + * @brief CLOCK system clock source. + */ +typedef enum _clock_sys_clk_src +{ + kCLOCK_SysClkSrcSFll = 0U, /*!< SFLL. */ + kCLOCK_SysClkSrcRC32M_1 = 1U, /*!< RC 32MHz clock. */ + kCLOCK_SysClkSrcMainXtal = 2U, /*!< XTAL 38.4MHz clock. */ + kCLOCK_SysClkSrcRC32M_3 = 3U, /*!< RC 32MHz clock. */ +} clock_sys_clk_src_t; + +/*! + * @brief System reference clock option + */ +typedef enum _clock_refclk +{ + kCLOCK_RefClk_SYS = (1U << PMU_WLAN_CTRL_REFCLK_SYS_REQ_SHIFT), /*!< REFCLK_SYS */ + kCLOCK_RefClk_AUD = (1U << PMU_WLAN_CTRL_REFCLK_AUD_REQ_SHIFT), /*!< REFCLK_AUD */ + kCLOCK_RefClk_USB = (1U << PMU_WLAN_CTRL_REFCLK_USB_REQ_SHIFT), /*!< REFCLK_USB */ + kCLOCK_RefClk_ALL = (kCLOCK_RefClk_SYS | kCLOCK_RefClk_AUD | kCLOCK_RefClk_USB), +} clock_refclk_t; + +/*! + * @brief XTAL32K mode option + */ +typedef enum _clock_osc32k_mode +{ + kCLOCK_Osc32k_Internal = 0, /*!< Internal oscillator mode */ + kCLOCK_Osc32k_External = 1, /*!< External oscillator mode */ +} clock_osc32k_mode_t; + +/*! @brief SFLL Reference Input Clock Source */ +typedef enum _clock_sfll_src +{ + kCLOCK_SFllSrcRC32M = 0U, /*!< RC32M clock */ + kCLOCK_SFllSrcMainXtal = 1U, /*!< Main XTAL clock */ +} clock_sfll_src_t; + +/*! @brief SFLL configuration. */ +typedef struct _clock_sfll_config +{ + clock_sfll_src_t sfllSrc; /*!< Reference Input Clock Source */ + uint16_t refDiv; /*!< Divider for reference clock, 9-bit */ + /*!< 0.2 MHz <= Fref (frequency of Reference clock / refDiv) <= 0.4 MHz */ + uint16_t fbDiv; /*!< Divider for feedback clock, 9-bit */ + uint8_t kvco; /*!< VCO setting, 2-bit */ + /*!< Select KVCO per VCO target frequency */ + uint8_t postDiv; /*!< Post divider, 2-bit */ + /*!< 2'b01, Fout = Fvco/2 */ + /*!< 2'b10, Fout = Fvco/4 */ + /*!< 2'b11, Fout = Fvco/8 */ +} clock_sfll_config_t; + +/*! @brief AUPLL Reference Input Clock Source */ +typedef enum _clock_aupll_src +{ + kCLOCK_AuPllSrcRC32M = 0U, /*!< RC32M clock */ + kCLOCK_AuPllSrcRefClk = 1U, /*!< REFCLK_AUD clock */ +} clock_aupll_src_t; + +/*! @brief AUPLL configuration. */ +typedef struct _clock_aupll_config +{ + clock_aupll_src_t aupllSrc; /*!< Reference Input Clock Source */ + uint8_t refDiv; /*!< Divider for reference clock, 4-bit, range: 3 ~ 10 */ + uint8_t fbDiv; /*!< Divider for feedback clock, 6-bit, range: 27, 29, 31 ~ 36, 38, 39, 42, 46 */ + uint8_t icp; /*!< charge pump current control, 2-bit, reserved now */ + /*!< 2'b00, 2.5 uA */ + /*!< 2'b01, 5 uA */ + /*!< 2'b10, 7.5 uA */ + /*!< 2'b11, 10 uA */ + uint8_t postDivPattern; /*!< Pattern divider for ouput clock, 2-bit, range: 0 ~ 2 */ + /*!< 2'b00, pattern = 4.0 */ + /*!< 2'b01, pattern = 3.0 */ + /*!< 2'b10, pattern = 4.5 */ + uint8_t postDivModulo; /*!< Modulo divider for ouput clock, 3-bit, range: 0 ~ 2, 4, 7 */ + /*!< 3'b000, modulo = 1 */ + /*!< 3'b001, modulo = 2 */ + /*!< 3'b010, modulo = 4 */ + /*!< 3'b100, modulo = 8 */ + /*!< 3'b111, modulo = 16 */ + bool enaDither; /* ENA_DITHER status */ + /*!< 1'b0, Integration only */ + /*!< 1'b1, Integration + MASH */ + bool enaVcoClkX2; /* Enable or disable VCOCLK_X2 */ + /*!< 1'b0, Disable VCOCLK_X2 */ + /*!< 1'b1, Enable VCOCLK_X2 */ + uint32_t fract; /*!< Fractional PLL feedback divider 20-bits, range: 0 ~ 0x10000 */ +} clock_aupll_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @brief Enable the clock for specific IP. + * + * @param name Which clock to enable, see \ref clock_ip_name_t. + */ +void CLOCK_EnableClock(clock_ip_name_t name); + +/*! + * @brief Disable the clock for specific IP. + * + * @param name Which clock to disable, see \ref clock_ip_name_t. + */ +void CLOCK_DisableClock(clock_ip_name_t name); + +/** + * @brief Configure the clock selection muxes. + * @param connection : Clock to be configured. + */ +void CLOCK_AttachClk(clock_attach_id_t connection); + +/** + * @brief Setup clock dividers. + * @param name : Clock divider name + * @param divider : Value to be divided. + */ +void CLOCK_SetClkDiv(clock_div_name_t name, uint32_t divider); + +/*! + * @brief Setup UART clock dividers. + * + * @param name : Clock divider name + * @param nom : Nominator for fraction divider. + * @param denom : Denominator for fraction divider. + */ +void CLOCK_SetUartClkDiv(clock_div_name_t name, uint32_t nom, uint32_t denom); + +/*! + * @brief Get the system clock frequency. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetSysClkFreq(void); + +/*! + * @brief Set the system clock source. + * + * This function sets the system clock source. + * + * @param src System clock source to set. + */ +void CLOCK_SetSysClkSource(clock_sys_clk_src_t src); + +/*! + * @brief Enable the 32K XTAL. + * + * @param mode Internal or external OSC selection. + */ +void CLOCK_EnableXtal32K(clock_osc32k_mode_t mode); + +/*! + * @brief Disable the 32K XTAL output. + */ +void CLOCK_DisableXtal32K(void); + +/*! + * @brief Enable the RC32M OSC. + * + * @param halfDiv half-divided reference clock. True for 16MHz and false for original 32MHz output. + */ +void CLOCK_EnableRC32M(bool halfDiv); + +/*! + * @brief Disable the RC32M OSC. + */ +void CLOCK_DisableRC32M(void); + +/*! + * @brief RC32M clock calibration function + * + * @param autoCal Calibration option, true for auto and false for manual + * @param manCalCode Select manual way, need input the calibration code + * @return return the calibration result + * -1, calibration failure + * else, internal calibration code + * + * @note Clock CLK_AUPLL_CAU must be ready before RC32M calibration + */ +int32_t CLOCK_CalibrateRC32M(bool autoCal, uint32_t manCalCode); + +/*! + * @brief Enable the RC32K OSC. + */ +void CLOCK_EnableRC32K(void); + +/*! + * @brief Disable the RC32K OSC. + */ +void CLOCK_DisableRC32K(void); + +/*! + * @brief RC32K clock calibration function + * + * @param autoCal Calibration option, true for auto and false for manual + * @param manCalCode Select manual way, need input the calibration code + * @return return the calibration result + * -1, calibration failure + * else, internal calibration code + * + * @note Clock XTAL32K must be ready before RC32K calibration + */ +int32_t CLOCK_CalibrateRC32K(bool autoCal, uint32_t manCalCode); + +/*! + * @brief Enable the REFCLK for SYS/AUD/USB reference. + * + * @param refclks Or'ed value to select SYS/AUD/USB REFCLK to disable. See \ref clock_refclk_t. + */ +void CLOCK_EnableRefClk(uint32_t refclks); + +/*! + * @brief Disable the REFCLK for SYS/AUD/USB reference. + * + * @param refclks Or'ed value to select SYS/AUD/USB REFCLK to disable. See \ref clock_refclk_t. + */ +void CLOCK_DisableRefClk(uint32_t refclks); + +/*! @brief Initialize the SFLL. + * @param config : Configuration to set to SFLL. + */ +void CLOCK_InitSFll(const clock_sfll_config_t *config); + +/*! @brief Deinit the SFLL. + */ +void CLOCK_DeinitSFll(void); + +/*! @brief Initialize the AUPLL. + * @param config : Configuration to set to AUPLL. + */ +void CLOCK_InitAuPll(const clock_aupll_config_t *config); + +/*! @brief Deinit the AUPLL. + */ +void CLOCK_DeinitAuPll(void); + +/*! @brief Update the AUPLL post divider + */ +void CLOCK_UpdateAupllPostDiv(uint8_t postDivPattern, uint8_t postDivModulo); + +/*! + * @brief Set the MAIN XTAL frequency based on board setting. + * + * @param freq : The XTAL input clock frequency in Hz. + */ +__STATIC_INLINE void CLOCK_SetMainXtalFreq(uint32_t freq) +{ + g_mainXtalFreq = freq; +} + +/*! @brief Return Frequency of MAIN XTAL Clock + * @return Frequency of MAIN XTAL Clock. + */ +uint32_t CLOCK_GetMainXtalFreq(void); + +/*! @brief Return Frequency of REFCLK_AUD Clock + * @return Frequency of REFCLK_AUD Clock. + */ +uint32_t CLOCK_GetRefClkAudFreq(void); + +/*! @brief Return Frequency of RC32M Clock + * @return Frequency of RC32M Clock. + */ +uint32_t CLOCK_GetRC32MFreq(void); + +/*! @brief Return Frequency of XTAL32K Clock + * @return Frequency of XTAL32K Clock. + */ +uint32_t CLOCK_GetXtal32KFreq(void); + +/*! @brief Return Frequency of RC32K Clock + * @return Frequency of RC32K Clock. + */ +uint32_t CLOCK_GetRC32KFreq(void); + +/*! @brief Return Frequency of SFLL Clock + * @return Frequency of SFLL Clock. + */ +uint32_t CLOCK_GetSFllFreq(void); + +/*! @brief Return Frequency of AUPLL Clock + * @return Frequency of AUPLL Clock. + */ +uint32_t CLOCK_GetAuPllFreq(void); + +/*! @brief Return Frequency of M4/AHB Clock + * @return Frequency of M4/AHB Clock. + */ +uint32_t CLOCK_GetCoreBusFreq(void); + +/*! @brief Return Frequency of APB Clock + * + * @param instance APB instance 0-1. + * @return Frequency of APB Clock. + */ +uint32_t CLOCK_GetApbFreq(uint32_t instance); + +/*! @brief Return Frequency of UART Clock + * + * @param instance UART instance 0-2. + * @return Frequency of UART Clock. + */ +uint32_t CLOCK_GetUartClkFreq(uint32_t instance); + +/*! @brief Return Frequency of GPT Clock + * + * @param instance GPT instance 0-3. + * @return Frequency of GPT Clock. + */ +uint32_t CLOCK_GetGptClkFreq(uint32_t instance); + +/*! @brief Return Frequency of GPT Sample Clock + * + * @return Frequency of GPT Sample Clock. + */ +uint32_t CLOCK_GetGptSampleClkFreq(void); + +/*! @brief Return Frequency of SSP Clock + * + * @param instance SSP instance 0-2. + * @return Frequency of SSP Clock. + */ +uint32_t CLOCK_GetSspClkFreq(uint32_t instance); + +/*! @brief Return Frequency of GAU Clock + * @return Frequency of GAU Clock. + */ +uint32_t CLOCK_GetGauClkFreq(void); + +/*! @brief Return Frequency of RTC Clock + * @return Frequency of RTC Clock. + */ +uint32_t CLOCK_GetRtcClkFreq(void); + +/*! @brief Return Frequency of I2C Clock + * @return Frequency of I2C Clock. + */ +uint32_t CLOCK_GetI2cClkFreq(void); + +/*! @brief Return Frequency of QSPI Clock + * @return Frequency of QSPI Clock. + */ +uint32_t CLOCK_GetQspiClkFreq(void); + +/*! @brief Return Frequency of FlashC Clock + * @return Frequency of FlashC Clock. + */ +uint32_t CLOCK_GetFlashCClkFreq(void); + +/*! @brief Return Frequency of WDT Clock + * @return Frequency of WDT Clock. + */ +uint32_t CLOCK_GetWdtClkFreq(void); + +/*! @brief Return Frequency of SDIO Clock + * @return Frequency of SDIO Clock. + */ +uint32_t CLOCK_GetSdioClkFreq(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @} */ + +#endif /* _FSL_CLOCK_H_ */ diff --git a/devices/88MW320/drivers/fsl_pinmux.c b/devices/88MW320/drivers/fsl_pinmux.c new file mode 100644 index 000000000..8b517fa84 --- /dev/null +++ b/devices/88MW320/drivers/fsl_pinmux.c @@ -0,0 +1,60 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_pinmux.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.pinmux" +#endif + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ +/** + * @brief Sets I/O Pad Control pin mux + * @param pin : GPIO pin to mux + * @param modefunc : OR'ed values of type PINMUX_* + */ +void PINMUX_PinMuxSet(uint32_t pin, uint32_t modefunc) +{ + volatile uint32_t *reg = &PIN_MUX->_GPIO0 + pin; + + assert(pin < 50U); + + /* For GPIO6~10, GPIO22~26 and GPIO28~33, function 1 is GPIO function, for other GPIOs, function 0 is GPIO function + */ + if (((pin >= 6U) && (pin <= 10U)) || ((pin >= 22U) && (pin <= 26U)) || ((pin >= 28U) && (pin <= 33U))) + { + if ((modefunc & PINMUX_FUNC_MASK) != PINMUX_FUNC1) + { + /* Need to set default pull up for non-GPIO before function switch. */ + *reg &= ~PINMUX__GPIO0_PIO_PULL_SEL_MASK; + } + } + else + { + if ((modefunc & PINMUX_FUNC_MASK) != PINMUX_FUNC0) + { + /* Need to set default pull up for non-GPIO before function switch. */ + *reg &= ~PINMUX__GPIO0_PIO_PULL_SEL_MASK; + } + } + + *reg = modefunc; +} diff --git a/devices/88MW320/drivers/fsl_pinmux.h b/devices/88MW320/drivers/fsl_pinmux.h new file mode 100644 index 000000000..3c64abfb3 --- /dev/null +++ b/devices/88MW320/drivers/fsl_pinmux.h @@ -0,0 +1,409 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_PINMUX_H_ +#define _FSL_PINMUX_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup pinmux + * @{ + */ + +/*! @file */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief PINMUX driver version 2.0.0. */ +#define FSL_PINMUX_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/** + * @brief PINMUX function and mode selection definitions + * @note See the User Manual for specific modes and functions supported by the various pins. + */ +#define PINMUX_FUNC0 0x0U /*!< Selects pin function 0 */ +#define PINMUX_FUNC1 0x1U /*!< Selects pin function 1 */ +#define PINMUX_FUNC2 0x2U /*!< Selects pin function 2 */ +#define PINMUX_FUNC3 0x3U /*!< Selects pin function 3 */ +#define PINMUX_FUNC4 0x4U /*!< Selects pin function 4 */ +#define PINMUX_FUNC5 0x5U /*!< Selects pin function 5 */ +#define PINMUX_FUNC6 0x6U /*!< Selects pin function 6 */ +#define PINMUX_FUNC7 0x7U /*!< Selects pin function 7 */ +#define PINMUX_FUNC_MASK 0x7U /*!< Pinmux function mask in modefunc */ + +#define PINMUX_MODE_DEFAULT (0x1U << 3) /*!< Pulled up by default 50 kΩ */ +#define PINMUX_MODE_PULLUP ((0x1U << 3) | (0x1U << 14) | (0x1U << 15)) /*!< Selects pull-up */ +#define PINMUX_MODE_PULLDOWN ((0x1U << 3) | (0x1U << 13) | (0x1U << 15)) /*!< Selects pull-down */ +#define PINMUX_MODE_NOPULL ((0x1U << 3) | (0x1U << 15)) /*!< Selects no pull */ +#define PINMUX_MODE_TRISTATE (0x1U << 15) /*!< Selects tristate */ + +/* GPIO0 pinmux function define */ +#define PINMUX_GPIO0_GPIO0 PINMUX_FUNC0 +#define PINMUX_GPIO0_GPT0_CH0 PINMUX_FUNC1 +#define PINMUX_GPIO0_UART0_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO0_SSP0_CLK PINMUX_FUNC3 + +/* GPIO1 pinmux function define */ +#define PINMUX_GPIO1_GPIO1 PINMUX_FUNC0 +#define PINMUX_GPIO1_GPT0_CH1 PINMUX_FUNC1 +#define PINMUX_GPIO1_UART0_RTSn PINMUX_FUNC2 +#define PINMUX_GPIO1_SSP0_FRM PINMUX_FUNC3 + +/* GPIO2 pinmux function define */ +#define PINMUX_GPIO2_GPIO2 PINMUX_FUNC0 +#define PINMUX_GPIO2_GPT0_CH2 PINMUX_FUNC1 +#define PINMUX_GPIO2_UART0_TXD PINMUX_FUNC2 +#define PINMUX_GPIO2_SSP0_TXD PINMUX_FUNC3 + +/* GPIO3 pinmux function define */ +#define PINMUX_GPIO3_GPIO3 PINMUX_FUNC0 +#define PINMUX_GPIO3_GPT0_CH3 PINMUX_FUNC1 +#define PINMUX_GPIO3_UART0_RXD PINMUX_FUNC2 +#define PINMUX_GPIO3_SSP0_RXD PINMUX_FUNC3 + +/* GPIO4 pinmux function define */ +#define PINMUX_GPIO4_GPIO4 PINMUX_FUNC0 +#define PINMUX_GPIO4_GPT0_CH4 PINMUX_FUNC1 +#define PINMUX_GPIO4_I2C0_SDA PINMUX_FUNC2 +#define PINMUX_GPIO4_AUDIO_CLK PINMUX_FUNC3 + +/* GPIO5 pinmux function define */ +#define PINMUX_GPIO5_GPIO5 PINMUX_FUNC0 +#define PINMUX_GPIO5_GPT0_CH5 PINMUX_FUNC1 +#define PINMUX_GPIO5_I2C0_SCL PINMUX_FUNC2 + +/* GPIO6 pinmux function define */ +#define PINMUX_GPIO6_TDO PINMUX_FUNC0 +#define PINMUX_GPIO6_GPIO6 PINMUX_FUNC1 +#define PINMUX_GPIO6_I2C1_SDA PINMUX_FUNC2 +#define PINMUX_GPIO6_DIG_POR PINMUX_FUNC3 +#define PINMUX_GPIO6_RC32M PINMUX_FUNC4 +#define PINMUX_GPIO6_AUPLL_DIGTP0 PINMUX_FUNC5 + +/* GPIO7 pinmux function define */ +#define PINMUX_GPIO7_TCK PINMUX_FUNC0 +#define PINMUX_GPIO7_GPIO7 PINMUX_FUNC1 +#define PINMUX_GPIO7_UART2_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO7_SSP2_CLK PINMUX_FUNC3 +#define PINMUX_GPIO7_I2C0_SDA PINMUX_FUNC4 +#define PINMUX_GPIO7_AUPLL_DIGTP1 PINMUX_FUNC5 + +/* GPIO8 pinmux function define */ +#define PINMUX_GPIO8_TMS PINMUX_FUNC0 +#define PINMUX_GPIO8_GPIO8 PINMUX_FUNC1 +#define PINMUX_GPIO8_UART2_RTSn PINMUX_FUNC2 +#define PINMUX_GPIO8_SSP2_FRM PINMUX_FUNC3 +#define PINMUX_GPIO8_I2C0_SCL PINMUX_FUNC4 +#define PINMUX_GPIO8_AUPLL_DIGTP2 PINMUX_FUNC5 + +/* GPIO9 pinmux function define */ +#define PINMUX_GPIO9_TDI PINMUX_FUNC0 +#define PINMUX_GPIO9_GPIO9 PINMUX_FUNC1 +#define PINMUX_GPIO9_UART2_TXD PINMUX_FUNC2 +#define PINMUX_GPIO9_SSP2_TXD PINMUX_FUNC3 +#define PINMUX_GPIO9_I2C1_SDA PINMUX_FUNC4 +#define PINMUX_GPIO9_AUPLL_DIGTP3 PINMUX_FUNC5 + +/* GPIO10 pinmux function define */ +#define PINMUX_GPIO10_TRST_N PINMUX_FUNC0 +#define PINMUX_GPIO10_GPIO10 PINMUX_FUNC1 +#define PINMUX_GPIO10_UART2_RXD PINMUX_FUNC2 +#define PINMUX_GPIO10_SSP2_RXD PINMUX_FUNC3 +#define PINMUX_GPIO10_I2C1_SCL PINMUX_FUNC4 +#define PINMUX_GPIO10_PHY_MON0 PINMUX_FUNC5 + +/* GPIO11 pinmux function define */ +#define PINMUX_GPIO11_GPIO11 PINMUX_FUNC0 +#define PINMUX_GPIO11_GPT2_CH0 PINMUX_FUNC1 +#define PINMUX_GPIO11_UART1_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO11_SSP1_CLK PINMUX_FUNC3 + +/* GPIO12 pinmux function define */ +#define PINMUX_GPIO12_GPIO12 PINMUX_FUNC0 +#define PINMUX_GPIO12_GPT2_CH1 PINMUX_FUNC1 +#define PINMUX_GPIO12_UART1_RTSn PINMUX_FUNC2 +#define PINMUX_GPIO12_SSP1_FRM PINMUX_FUNC3 + +/* GPIO13 pinmux function define */ +#define PINMUX_GPIO13_GPIO13 PINMUX_FUNC0 +#define PINMUX_GPIO13_GPT2_CH2 PINMUX_FUNC1 +#define PINMUX_GPIO13_UART1_TXD PINMUX_FUNC2 +#define PINMUX_GPIO13_SSP1_TXD PINMUX_FUNC3 + +/* GPIO14 pinmux function define */ +#define PINMUX_GPIO14_GPIO14 PINMUX_FUNC0 +#define PINMUX_GPIO14_GPT2_CH3 PINMUX_FUNC1 +#define PINMUX_GPIO14_UART1_RXD PINMUX_FUNC2 +#define PINMUX_GPIO14_SSP1_RXD PINMUX_FUNC3 + +/* GPIO15 pinmux function define */ +#define PINMUX_GPIO15_GPIO15 PINMUX_FUNC0 +#define PINMUX_GPIO15_GPT2_CH4 PINMUX_FUNC1 + +/* GPIO16 pinmux function define */ +#define PINMUX_GPIO16_GPIO16 PINMUX_FUNC0 +#define PINMUX_GPIO16_STRAP1 PINMUX_FUNC1 +#define PINMUX_GPIO16_AUDIO_CLK PINMUX_FUNC3 +#define PINMUX_GPIO16_PHY_MON7 PINMUX_FUNC5 + +/* GPIO17 pinmux function define */ +#define PINMUX_GPIO17_GPIO17 PINMUX_FUNC0 +#define PINMUX_GPIO17_GPT3_CH0 PINMUX_FUNC1 +#define PINMUX_GPIO17_I2C1_SCL PINMUX_FUNC2 + +/* GPIO18 pinmux function define */ +#define PINMUX_GPIO18_GPIO18 PINMUX_FUNC0 +#define PINMUX_GPIO18_GPT3_CH1 PINMUX_FUNC1 +#define PINMUX_GPIO18_I2C1_SDA PINMUX_FUNC2 +#define PINMUX_GPIO18_SSP1_CLK PINMUX_FUNC3 + +/* GPIO19 pinmux function define */ +#define PINMUX_GPIO19_GPIO19 PINMUX_FUNC0 +#define PINMUX_GPIO19_GPT3_CH2 PINMUX_FUNC1 +#define PINMUX_GPIO19_I2C1_SCL PINMUX_FUNC2 +#define PINMUX_GPIO19_SSP1_FRM PINMUX_FUNC3 + +/* GPIO20 pinmux function define */ +#define PINMUX_GPIO20_GPIO20 PINMUX_FUNC0 +#define PINMUX_GPIO20_GPT3_CH3 PINMUX_FUNC1 +#define PINMUX_GPIO20_I2C0_SDA PINMUX_FUNC2 +#define PINMUX_GPIO20_SSP1_TXD PINMUX_FUNC3 + +/* GPIO21 pinmux function define */ +#define PINMUX_GPIO21_GPIO21 PINMUX_FUNC0 +#define PINMUX_GPIO21_GPT3_CH4 PINMUX_FUNC1 +#define PINMUX_GPIO21_I2C0_SCL PINMUX_FUNC2 +#define PINMUX_GPIO21_SSP1_RXD PINMUX_FUNC3 + +/* GPIO22 pinmux function define */ +#define PINMUX_GPIO22_WAKE_UP0 PINMUX_FUNC0 +#define PINMUX_GPIO22_GPIO22 PINMUX_FUNC1 + +/* GPIO23 pinmux function define */ +#define PINMUX_GPIO23_WAKE_UP1 PINMUX_FUNC0 +#define PINMUX_GPIO23_GPIO23 PINMUX_FUNC1 +#define PINMUX_GPIO23_UART0_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO23_SFLL_200M PINMUX_FUNC4 +#define PINMUX_GPIO23_COMP_IN_P PINMUX_FUNC5 + +/* GPIO24 pinmux function define */ +#define PINMUX_GPIO24_OSC32K PINMUX_FUNC0 +#define PINMUX_GPIO24_GPIO24 PINMUX_FUNC1 +#define PINMUX_GPIO24_UART0_RXD PINMUX_FUNC2 +#define PINMUX_GPIO24_GPT1_CH5 PINMUX_FUNC3 +#define PINMUX_GPIO24_COMP_IN_N PINMUX_FUNC5 + +/* GPIO25 pinmux function define */ +#define PINMUX_GPIO25_XTAL32K_IN PINMUX_FUNC0 +#define PINMUX_GPIO25_GPIO25 PINMUX_FUNC1 +#define PINMUX_GPIO25_I2C1_SDA PINMUX_FUNC2 + +/* GPIO26 pinmux function define */ +#define PINMUX_GPIO26_XTAL32K_OUT PINMUX_FUNC0 +#define PINMUX_GPIO26_GPIO26 PINMUX_FUNC1 +#define PINMUX_GPIO26_I2C1_SCL PINMUX_FUNC2 + +/* GPIO27 pinmux function define */ +#define PINMUX_GPIO27_GPIO27 PINMUX_FUNC0 +#define PINMUX_GPIO27_STRAP0 PINMUX_FUNC1 +#define PINMUX_GPIO27_UART0_TXD PINMUX_FUNC2 +#define PINMUX_GPIO27_DRVVBUS PINMUX_FUNC3 +#define PINMUX_GPIO27_RC32K PINMUX_FUNC4 + +/* GPIO28 pinmux function define */ +#define PINMUX_GPIO28_QSPI_SSn PINMUX_FUNC0 +#define PINMUX_GPIO28_GPIO28 PINMUX_FUNC1 +#define PINMUX_GPIO28_I2C0_SDA PINMUX_FUNC2 +#define PINMUX_GPIO28_PHY_MON1 PINMUX_FUNC4 +#define PINMUX_GPIO28_GPT1_CH0 PINMUX_FUNC5 + +/* GPIO29 pinmux function define */ +#define PINMUX_GPIO29_QSPI_CLK PINMUX_FUNC0 +#define PINMUX_GPIO29_GPIO29 PINMUX_FUNC1 +#define PINMUX_GPIO29_I2C0_SCL PINMUX_FUNC2 +#define PINMUX_GPIO29_PHY_MON2 PINMUX_FUNC4 +#define PINMUX_GPIO29_GPT1_CH1 PINMUX_FUNC5 + +/* GPIO30 pinmux function define */ +#define PINMUX_GPIO30_QSPI_D0 PINMUX_FUNC0 +#define PINMUX_GPIO30_GPIO30 PINMUX_FUNC1 +#define PINMUX_GPIO30_UART0_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO30_SSP0_CLK PINMUX_FUNC3 +#define PINMUX_GPIO30_PHY_MON3 PINMUX_FUNC4 +#define PINMUX_GPIO30_GPT1_CH2 PINMUX_FUNC5 + +/* GPIO31 pinmux function define */ +#define PINMUX_GPIO31_QSPI_D1 PINMUX_FUNC0 +#define PINMUX_GPIO31_GPIO31 PINMUX_FUNC1 +#define PINMUX_GPIO31_UART0_RTSn PINMUX_FUNC2 +#define PINMUX_GPIO31_SSP0_FRM PINMUX_FUNC3 +#define PINMUX_GPIO31_PHY_MON4 PINMUX_FUNC4 +#define PINMUX_GPIO31_GPT1_CH3 PINMUX_FUNC5 + +/* GPIO32 pinmux function define */ +#define PINMUX_GPIO32_QSPI_D2 PINMUX_FUNC0 +#define PINMUX_GPIO32_GPIO32 PINMUX_FUNC1 +#define PINMUX_GPIO32_UART0_TXD PINMUX_FUNC2 +#define PINMUX_GPIO32_SSP0_TXD PINMUX_FUNC3 +#define PINMUX_GPIO32_PHY_MON5 PINMUX_FUNC4 +#define PINMUX_GPIO32_GPT1_CH4 PINMUX_FUNC5 + +/* GPIO33 pinmux function define */ +#define PINMUX_GPIO33_QSPI_D3 PINMUX_FUNC0 +#define PINMUX_GPIO33_GPIO33 PINMUX_FUNC1 +#define PINMUX_GPIO33_UART0_RXD PINMUX_FUNC2 +#define PINMUX_GPIO33_SSP0_RXD PINMUX_FUNC3 +#define PINMUX_GPIO33_PHY_MON6 PINMUX_FUNC4 +#define PINMUX_GPIO33_GPT1_CH5 PINMUX_FUNC5 + +/* GPIO34 pinmux function define */ +#define PINMUX_GPIO34_GPIO34 PINMUX_FUNC0 +#define PINMUX_GPIO34_GPT3_CH5 PINMUX_FUNC1 + +/* GPIO35 pinmux function define */ +#define PINMUX_GPIO35_GPIO35 PINMUX_FUNC0 +#define PINMUX_GPIO35_GPT0_CLKIN PINMUX_FUNC1 +#define PINMUX_GPIO35_UART1_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO35_SSP1_CLK PINMUX_FUNC3 + +/* GPIO36 pinmux function define */ +#define PINMUX_GPIO36_GPIO36 PINMUX_FUNC0 +#define PINMUX_GPIO36_GPT1_CLKIN PINMUX_FUNC1 +#define PINMUX_GPIO36_UART1_RTSn PINMUX_FUNC2 +#define PINMUX_GPIO36_SSP1_FRM PINMUX_FUNC3 + +/* GPIO37 pinmux function define */ +#define PINMUX_GPIO37_GPIO37 PINMUX_FUNC0 +#define PINMUX_GPIO37_GPT2_CH5 PINMUX_FUNC1 +#define PINMUX_GPIO37_UART0_RTSn PINMUX_FUNC2 + +/* GPIO38 pinmux function define */ +#define PINMUX_GPIO38_GPIO38 PINMUX_FUNC0 +#define PINMUX_GPIO38_GPT2_CLKIN PINMUX_FUNC1 +#define PINMUX_GPIO38_UART1_TXD PINMUX_FUNC2 +#define PINMUX_GPIO38_SSP1_TXD PINMUX_FUNC3 + +/* GPIO39 pinmux function define */ +#define PINMUX_GPIO39_GPIO39 PINMUX_FUNC0 +#define PINMUX_GPIO39_GPT3_CLKIN PINMUX_FUNC1 +#define PINMUX_GPIO39_UART1_RXD PINMUX_FUNC2 +#define PINMUX_GPIO39_SSP1_RXD PINMUX_FUNC3 +#define PINMUX_GPIO39_RC32M_CLKIN PINMUX_FUNC5 + +/* GPIO40 pinmux function define */ +#define PINMUX_GPIO40_GPIO40 PINMUX_FUNC0 +#define PINMUX_GPIO40_GAU_TRIGGER0 PINMUX_FUNC1 +#define PINMUX_GPIO40_ACOMP0_GPIO_OUT PINMUX_FUNC2 +#define PINMUX_GPIO40_ACOMP1_GPIO_OUT PINMUX_FUNC3 + +/* GPIO41 pinmux function define */ +#define PINMUX_GPIO41_GPIO41 PINMUX_FUNC0 +#define PINMUX_GPIO41_GAU_TRIGGER1 PINMUX_FUNC1 +#define PINMUX_GPIO41_ACOMP0_EDGE_PULSE PINMUX_FUNC2 +#define PINMUX_GPIO41_ACOMP1_EDGE_PULSE PINMUX_FUNC3 +#define PINMUX_GPIO41_TRACE_CLKOUT PINMUX_FUNC5 + +/* GPIO42 pinmux function define */ +#define PINMUX_GPIO42_GPIO42 PINMUX_FUNC0 +#define PINMUX_GPIO42_ADC0_IN0 PINMUX_FUNC1 +#define PINMUX_GPIO42_ACOMP_IN0 PINMUX_FUNC1 +#define PINMUX_GPIO42_TS_INP PINMUX_FUNC1 +#define PINMUX_GPIO42_VOICE_P PINMUX_FUNC1 +#define PINMUX_GPIO42_UART1_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO42_SSP1_CLK PINMUX_FUNC3 +#define PINMUX_GPIO42_TRACE_DATA0 PINMUX_FUNC4 +#define PINMUX_GPIO42_PHY_MON8 PINMUX_FUNC5 + +/* GPIO43 pinmux function define */ +#define PINMUX_GPIO43_GPIO43 PINMUX_FUNC0 +#define PINMUX_GPIO43_ADC0_IN1 PINMUX_FUNC1 +#define PINMUX_GPIO43_ACOMP_IN1 PINMUX_FUNC1 +#define PINMUX_GPIO43_TS_INN PINMUX_FUNC1 +#define PINMUX_GPIO43_DACB PINMUX_FUNC1 +#define PINMUX_GPIO43_VOICE_N PINMUX_FUNC1 +#define PINMUX_GPIO43_UART1_RTSn PINMUX_FUNC2 +#define PINMUX_GPIO43_SSP1_FRM PINMUX_FUNC3 +#define PINMUX_GPIO43_TRACE_DATA1 PINMUX_FUNC4 +#define PINMUX_GPIO43_PHY_MON9 PINMUX_FUNC5 + +/* GPIO44 pinmux function define */ +#define PINMUX_GPIO44_GPIO44 PINMUX_FUNC0 +#define PINMUX_GPIO44_ADC0_IN2 PINMUX_FUNC1 +#define PINMUX_GPIO44_ACOMP_IN2 PINMUX_FUNC1 +#define PINMUX_GPIO44_DACA PINMUX_FUNC1 +#define PINMUX_GPIO44_DEBUG_P PINMUX_FUNC1 +#define PINMUX_GPIO44_UART1_TXD PINMUX_FUNC2 +#define PINMUX_GPIO44_SSP1_TXD PINMUX_FUNC3 +#define PINMUX_GPIO43_TRACE_DATA2 PINMUX_FUNC4 +#define PINMUX_GPIO44_PHY_MON10 PINMUX_FUNC5 + +/* GPIO45 pinmux function define */ +#define PINMUX_GPIO45_GPIO45 PINMUX_FUNC0 +#define PINMUX_GPIO45_ADC0_IN3 PINMUX_FUNC1 +#define PINMUX_GPIO45_ACOMP_IN3 PINMUX_FUNC1 +#define PINMUX_GPIO45_EXT_VREF PINMUX_FUNC1 +#define PINMUX_GPIO45_UART1_RXD PINMUX_FUNC2 +#define PINMUX_GPIO45_SSP1_RXD PINMUX_FUNC3 +#define PINMUX_GPIO43_TRACE_DATA3 PINMUX_FUNC4 +#define PINMUX_GPIO45_PHY_MON11 PINMUX_FUNC5 + +/* GPIO46 pinmux function define */ +#define PINMUX_GPIO46_GPIO46 PINMUX_FUNC0 +#define PINMUX_GPIO46_ADC0_IN4 PINMUX_FUNC1 +#define PINMUX_GPIO46_ACOMP_IN4 PINMUX_FUNC1 +#define PINMUX_GPIO46_UART2_CTSn PINMUX_FUNC2 +#define PINMUX_GPIO46_SSP2_CLK PINMUX_FUNC3 +#define PINMUX_GPIO46_PHY_MON12 PINMUX_FUNC5 + +/* GPIO47 pinmux function define */ +#define PINMUX_GPIO47_GPIO47 PINMUX_FUNC0 +#define PINMUX_GPIO47_ADC0_IN5 PINMUX_FUNC1 +#define PINMUX_GPIO47_ACOMP_IN5 PINMUX_FUNC1 +#define PINMUX_GPIO47_UART2_RTSn PINMUX_FUNC2 +#define PINMUX_GPIO47_SSP2_FRM PINMUX_FUNC3 +#define PINMUX_GPIO47_PHY_MON13 PINMUX_FUNC5 + +/* GPIO48 pinmux function define */ +#define PINMUX_GPIO48_GPIO48 PINMUX_FUNC0 +#define PINMUX_GPIO48_ADC0_IN6 PINMUX_FUNC1 +#define PINMUX_GPIO48_ACOMP_IN6 PINMUX_FUNC1 +#define PINMUX_GPIO48_UART2_TXD PINMUX_FUNC2 +#define PINMUX_GPIO48_SSP2_TXD PINMUX_FUNC3 +#define PINMUX_GPIO48_PHY_MON14 PINMUX_FUNC5 + +/* GPIO49 pinmux function define */ +#define PINMUX_GPIO49_GPIO49 PINMUX_FUNC0 +#define PINMUX_GPIO49_ADC0_IN7 PINMUX_FUNC1 +#define PINMUX_GPIO49_ACOMP_IN7 PINMUX_FUNC1 +#define PINMUX_GPIO49_UART2_RXD PINMUX_FUNC2 +#define PINMUX_GPIO49_SSP2_RXD PINMUX_FUNC3 +#define PINMUX_GPIO49_PHY_MON15 PINMUX_FUNC5 + +#if defined(__cplusplus) +extern "C" { +#endif + +/** + * @brief Sets I/O Pad Control pin mux + * @param pin : GPIO pin to mux + * @param modefunc : OR'ed values of mode and function, type PINMUX_* + */ +void PINMUX_PinMuxSet(uint32_t pin, uint32_t modefunc); + +#if defined(__cplusplus) +} +#endif /*_cplusplus */ + +/*! @}*/ + +#endif /* _FSL_PINMUX_H_ */ diff --git a/devices/88MW320/drivers/fsl_power.c b/devices/88MW320/drivers/fsl_power.c new file mode 100644 index 000000000..d0e75ebe6 --- /dev/null +++ b/devices/88MW320/drivers/fsl_power.c @@ -0,0 +1,953 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_power.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.power" +#endif + +typedef struct _power_nvic_context +{ + uint32_t PriorityGroup; + uint32_t ISER[2]; + uint8_t IP[64]; + uint8_t SHP[12]; + uint32_t ICSR; + uint32_t VTOR; + uint32_t AIRCR; + uint32_t SCR; + uint32_t CCR; + uint32_t SHCSR; + uint32_t MMFAR; + uint32_t BFAR; + uint32_t CPACR; +} power_nvic_context_t; + +typedef struct _power_systick_context +{ + uint32_t CTRL; + uint32_t LOAD; +} power_systick_context_t; + +typedef struct _power_clock_context +{ + uint32_t CLK_SRC; + uint32_t WLAN_CTRL; + uint32_t SFLL_CTRL0; + uint32_t SFLL_CTRL1; + uint32_t AUPLL_CTRL0; + uint32_t AUPLL_CTRL1; + uint32_t UART_CLK_SEL; + uint32_t GPT0_CTRL; + uint32_t GPT1_CTRL; + uint32_t GPT2_CTRL; + uint32_t GPT3_CTRL; + uint32_t PERI_CLK_SRC; + uint32_t CAU_CLK_SEL; + uint32_t UART_FAST_CLK_DIV; + uint32_t UART_SLOW_CLK_DIV; + uint32_t MCU_CORE_CLK_DIV; + uint32_t PERI0_CLK_DIV; + uint32_t PERI1_CLK_DIV; + uint32_t PERI2_CLK_DIV; + uint32_t PERI3_CTRL; +} power_clock_context_t; + +typedef struct _power_flash_context +{ + /* FLASHC */ + uint32_t FCCR; + uint32_t FCTR; + uint32_t FCACR; + uint32_t FAOFFR; + /* QSPI */ + uint32_t CONF; + uint32_t TIMING; +} power_flash_context_t; + +/******************************************************************************* + * Variables + ******************************************************************************/ +static power_nvic_context_t s_nvicContext; +static power_systick_context_t s_systickContext; +static power_clock_context_t s_clockContext; +static power_flash_context_t s_flashContext; +static uint32_t s_ioPadPwrCfg; +#if defined(__ICCARM__) +uint32_t *pm3_entryaddr; +#elif defined(__GNUC__) +__attribute__((used)) uint32_t *pm3_entryaddr; +#else +#error unsupported compiler +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ +static void POWER_SaveNvicState(void) +{ + uint32_t i; + uint32_t irqRegs; + uint32_t irqNum; + + irqRegs = (SCnSCB->ICTR & SCnSCB_ICTR_INTLINESNUM_Msk) + 1; + irqNum = irqRegs * 32; + + assert(irqRegs <= ARRAY_SIZE(s_nvicContext.ISER)); + assert(irqNum <= ARRAY_SIZE(s_nvicContext.IP)); + + s_nvicContext.PriorityGroup = NVIC_GetPriorityGrouping(); + + for (i = 0; i < irqRegs; i++) + { + s_nvicContext.ISER[i] = NVIC->ISER[i]; + } + + for (i = 0; i < irqNum; i++) + { + s_nvicContext.IP[i] = NVIC->IP[i]; + } + + /* Save SCB configuration */ + s_nvicContext.ICSR = SCB->ICSR; + s_nvicContext.VTOR = SCB->VTOR; + s_nvicContext.AIRCR = SCB->AIRCR; + s_nvicContext.SCR = SCB->SCR; + s_nvicContext.CCR = SCB->CCR; + + s_nvicContext.SHCSR = SCB->SHCSR; + s_nvicContext.MMFAR = SCB->MMFAR; + s_nvicContext.BFAR = SCB->BFAR; + s_nvicContext.CPACR = SCB->CPACR; + + s_nvicContext.SHP[0] = SCB->SHP[0]; /* MemManage */ + s_nvicContext.SHP[1] = SCB->SHP[1]; /* BusFault */ + s_nvicContext.SHP[2] = SCB->SHP[2]; /* UsageFault */ + s_nvicContext.SHP[7] = SCB->SHP[7]; /* SVCall */ + s_nvicContext.SHP[8] = SCB->SHP[8]; /* DebugMonitor */ + s_nvicContext.SHP[10] = SCB->SHP[10]; /* PendSV */ + s_nvicContext.SHP[11] = SCB->SHP[11]; /* SysTick */ +} + +static void POWER_RestoreNvicState(void) +{ + uint32_t i; + uint32_t irqRegs; + uint32_t irqNum; + + irqRegs = (SCnSCB->ICTR & SCnSCB_ICTR_INTLINESNUM_Msk) + 1; + irqNum = irqRegs * 32; + + NVIC_SetPriorityGrouping(s_nvicContext.PriorityGroup); + + for (i = 0; i < irqRegs; i++) + { + NVIC->ISER[i] = s_nvicContext.ISER[i]; + } + + for (i = 0; i < irqNum; i++) + { + NVIC->IP[i] = s_nvicContext.IP[i]; + } + + /* Restore SCB configuration */ + SCB->ICSR = s_nvicContext.ICSR; + SCB->VTOR = s_nvicContext.VTOR; + SCB->AIRCR = s_nvicContext.AIRCR; + SCB->SCR = s_nvicContext.SCR; + SCB->CCR = s_nvicContext.CCR; + + SCB->SHCSR = s_nvicContext.SHCSR; + SCB->MMFAR = s_nvicContext.MMFAR; + SCB->BFAR = s_nvicContext.BFAR; + SCB->CPACR = s_nvicContext.CPACR; + + SCB->SHP[0] = s_nvicContext.SHP[0]; /* MemManage */ + SCB->SHP[1] = s_nvicContext.SHP[1]; /* BusFault */ + SCB->SHP[2] = s_nvicContext.SHP[2]; /* UsageFault */ + SCB->SHP[7] = s_nvicContext.SHP[7]; /* SVCall */ + SCB->SHP[8] = s_nvicContext.SHP[8]; /* DebugMonitor */ + SCB->SHP[10] = s_nvicContext.SHP[10]; /* PendSV */ + SCB->SHP[11] = s_nvicContext.SHP[11]; /* SysTick */ +} + +/** + * @brief Power on IO domain pad regulator. + * @param domain : IO domain to power on. + */ +void POWER_PowerOnVddioPad(power_vddio_t domain) +{ + if (domain == kPOWER_VddIoAon) + { + PMU->IO_PAD_PWR_CFG |= PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB_MASK; + } + else + { + assert(domain <= kPOWER_VddIo3); + /* Both pad regulator and IO domain powered on */ + PMU->IO_PAD_PWR_CFG |= ((1UL << (PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_SHIFT + (uint32_t)domain)) | + (1UL << (PMU_IO_PAD_PWR_CFG_GPIO0_PDB_SHIFT + (uint32_t)domain))); + } +} + +/** + * @brief Power off IO domain pad regulator. + * @param domain : IO domain to power off. + */ +void POWER_PowerOffVddioPad(power_vddio_t domain) +{ + if (domain == kPOWER_VddIoAon) + { + PMU->IO_PAD_PWR_CFG &= ~PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB_MASK; + } + else + { + assert(domain <= kPOWER_VddIo3); + PMU->IO_PAD_PWR_CFG &= ~(1UL << (PMU_IO_PAD_PWR_CFG_GPIO0_PDB_SHIFT + (uint32_t)domain)); + } +} + +/** + * @brief Set IO domain pad voltage. + * @param domain : IO domain. + * @param volt : Voltage level to be set. + */ +void POWER_SetVddioPadVolt(power_vddio_t domain, power_vddio_volt_t volt) +{ + uint32_t regVal = (uint32_t)volt; + + if (domain == kPOWER_VddIoAon) + { + regVal = ((regVal >> 3U) | (regVal & 0x1U)) << PMU_IO_PAD_PWR_CFG_GPIO_AON_V25_SHIFT; + PMU->IO_PAD_PWR_CFG = + (PMU->IO_PAD_PWR_CFG & ~(PMU_IO_PAD_PWR_CFG_GPIO_AON_V18_MASK | PMU_IO_PAD_PWR_CFG_GPIO_AON_V25_MASK)) | + regVal; + } + else + { + assert(domain <= kPOWER_VddIo3); + + regVal <<= (PMU_IO_PAD_PWR_CFG_GPIO0_V25_SHIFT + (uint32_t)domain); + PMU->IO_PAD_PWR_CFG = + (PMU->IO_PAD_PWR_CFG & + ~(((uint32_t)PMU_IO_PAD_PWR_CFG_GPIO0_V18_MASK | (uint32_t)PMU_IO_PAD_PWR_CFG_GPIO0_V25_MASK) + << (uint32_t)domain)) | + regVal; + } +} + +/** + * @brief Attach GPIO interrupt to NVIC vector table. + * Since 2 GPIO pins shares 1 IRQ number. Attaching one GPIO IRQ implicits + * detaching the sibling GPIO IRQ. + * @param pin : GPIO index. + */ +void POWER_AttachGpioIrq(uint32_t pin) +{ + uint32_t bit; + uint32_t value; + + assert(pin < 50U); + + bit = pin / 2U; + value = (pin & 1U) ^ 1U; + + PMU->EXT_SEL_REG0 = (PMU->EXT_SEL_REG0 & ~(1UL << bit)) | (value << bit); +} + +/** + * @brief Enable AON Domain Comparator. + * @param config : AON Comparator config data. + */ +void POWER_EnableAonComp(const power_aon_comp_config_t *config) +{ + assert(config); + + PMU->PMIP_CMP_CTRL = + (PMU->PMIP_CMP_CTRL & ~(PMU_PMIP_CMP_CTRL_COMP_REF_SEL_MASK | PMU_PMIP_CMP_CTRL_COMP_DIFF_EN_MASK | + PMU_PMIP_CMP_CTRL_COMP_HYST_MASK)) | + PMU_PMIP_CMP_CTRL_COMP_REF_SEL(config->ref) | PMU_PMIP_CMP_CTRL_COMP_DIFF_EN(config->mode) | + PMU_PMIP_CMP_CTRL_COMP_HYST(config->hyst); + PMU->PMIP_CMP_CTRL |= PMU_PMIP_CMP_CTRL_COMP_EN_MASK; + + while ((PMU->PMIP_CMP_CTRL & PMU_PMIP_CMP_CTRL_COMP_RDY_MASK) == 0U) + { + } +} + +/** + * @brief Disable AON Domain Comparator. + */ +void POWER_DisableAonComp(void) +{ + PMU->PMIP_CMP_CTRL &= ~PMU_PMIP_CMP_CTRL_COMP_EN_MASK; +} + +/** + * @brief Get AON Domain Comparator result. + * @return AON Comparator output value + */ +uint32_t POWER_GetAonCompValue(void) +{ + return (PMU->PMIP_CMP_CTRL & PMU_PMIP_CMP_CTRL_COMP_OUT_MASK) >> PMU_PMIP_CMP_CTRL_COMP_OUT_SHIFT; +} + +/** + * @brief Set sleep mode on idle. + * @param mode : 0 ~ 4 stands for PM0 ~ PM4. + */ +void POWER_SetSleepMode(uint32_t mode) +{ + assert(mode <= 4U); + + if (mode == 0U) + { + mode = 1U; /* PM0/PM1 is same */ + } + /* set PMU basic mode */ + PMU->PWR_MODE = PMU_PWR_MODE_PWR_MODE(mode - 1); + + /* select deepsleep or not */ + if (mode == 1U) + { + SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; + } + else + { + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + } +} + +/* Remove flash from continuous read mode and disable flash controller */ +static void FLASHC_Disable(void) +{ + uint32_t cacheMode; + + if ((FLASHC->FCCR & FLASHC_FCCR_FLASHC_PAD_EN_MASK) != 0U) + { + cacheMode = FLASHC->FCCR & FLASHC_FCCR_CACHE_EN_MASK; + FLASHC->FCCR &= ~FLASHC_FCCR_CACHE_EN_MASK; + + /* Check if continuous read mode is enabled */ + if ((FLASHC->FCCR & FLASHC_FCCR_CMD_TYPE_MASK) == FLASHC_FCCR_CMD_TYPE(7U)) + { + FLASHC->FCSR = FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK; + FLASHC->FCCR = (FLASHC->FCCR & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(13U); + while ((FLASHC->FCSR & FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) == 0) + { + } + } + FLASHC->FCCR |= cacheMode; + PMU->LOW_PWR_CTRL &= ~PMU_LOW_PWR_CTRL_CACHE_LINE_FLUSH_MASK; + FLASHC->FCCR &= ~FLASHC_FCCR_FLASHC_PAD_EN_MASK; + } +} + +static void FLASHC_Enable(void) +{ + FLASHC->FCCR &= ~FLASHC_FCCR_CACHE_LINE_FLUSH_MASK; + PMU->LOW_PWR_CTRL |= PMU_LOW_PWR_CTRL_CACHE_LINE_FLUSH_MASK; +} + +static void FLASH_PowerDown(bool powerDown) +{ + /* Clear QSPI1 FIFO */ + QSPI->CONF |= QSPI_CONF_FIFO_FLUSH_MASK; + while ((QSPI->CONF & QSPI_CONF_FIFO_FLUSH_MASK) != 0U) + { + } + + /* Set Header count register: instruction counter, address counter, read mode counter and dummy counter */ + QSPI->HDRCNT = 0x1U; + /* Set data in counter */ + QSPI->DINCNT = 0U; + + if (powerDown) + { + /* Set instruction */ + QSPI->INSTR = 0xB9U; + } + else + { + /* Set instruction */ + QSPI->INSTR = 0xABU; + } + + /* Set QSPI1 write */ + QSPI->CNTL |= QSPI_CNTL_SS_EN_MASK; + QSPI->CONF |= QSPI_CONF_RW_EN_MASK; + QSPI->CONF |= QSPI_CONF_XFER_START_MASK; + + /* Stop QSPI1 transfer */ + while ((QSPI->CNTL & (QSPI_CNTL_XFER_RDY_MASK | QSPI_CNTL_WFIFO_EMPTY_MASK)) != + (QSPI_CNTL_XFER_RDY_MASK | QSPI_CNTL_WFIFO_EMPTY_MASK)) + { + } + QSPI->CONF |= QSPI_CONF_XFER_STOP_MASK; + while ((QSPI->CONF & QSPI_CONF_XFER_START_MASK) == QSPI_CONF_XFER_START_MASK) + { + } + QSPI->CNTL &= ~QSPI_CNTL_SS_EN_MASK; +} + +static void POWER_SwitchOffIo(uint32_t mode, uint32_t excludeIo) +{ + s_ioPadPwrCfg = PMU->IO_PAD_PWR_CFG; + + /* Turn OFF different power domains. */ + /* This is done to make wakeup from PM2 + * uisng Ext Pin 0 and Ext Pin 1. + * Please note that PM3 wakeup does + * not work after this change. + */ + PMU->IO_PAD_PWR_CFG &= ~PMU_IO_PAD_PWR_CFG_GPIO_AON_PDB_MASK; + if (mode == 2U) + { + PMU->IO_PAD_PWR_CFG &= ~((~excludeIo & 0xFU) << PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_SHIFT); + } + else + { + PMU->IO_PAD_PWR_CFG &= ~(0xFUL << PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_SHIFT); + } +} + +static void POWER_RestoreIo(void) +{ + PMU->IO_PAD_PWR_CFG = s_ioPadPwrCfg; +} + +static void POWER_SaveDeviceState(uint32_t mode) +{ + s_clockContext.WLAN_CTRL = PMU->WLAN_CTRL; + s_clockContext.SFLL_CTRL0 = PMU->SFLL_CTRL0; + s_clockContext.SFLL_CTRL1 = PMU->SFLL_CTRL1; + s_clockContext.AUPLL_CTRL0 = PMU->AUPLL_CTRL0; + s_clockContext.AUPLL_CTRL1 = PMU->AUPLL_CTRL1; + s_clockContext.CLK_SRC = PMU->CLK_SRC; + + if (mode == 3U) + { + /* Save Flash controller configuration + * This needs to be restored on exit from PM3 + */ + s_flashContext.FCCR = FLASHC->FCCR; + s_flashContext.FCTR = FLASHC->FCTR; + s_flashContext.FCACR = FLASHC->FCACR; + s_flashContext.FAOFFR = FLASHC->FAOFFR; + /* Save QSPI configuration */ + s_flashContext.CONF = QSPI->CONF; + s_flashContext.TIMING = QSPI->TIMING; + /* Save clock source and div setting for peripherals */ + s_clockContext.UART_CLK_SEL = PMU->UART_CLK_SEL; + s_clockContext.GPT0_CTRL = PMU->GPT0_CTRL; + s_clockContext.GPT1_CTRL = PMU->GPT1_CTRL; + s_clockContext.GPT2_CTRL = PMU->GPT2_CTRL; + s_clockContext.GPT3_CTRL = PMU->GPT3_CTRL; + s_clockContext.PERI_CLK_SRC = PMU->PERI_CLK_SRC; + s_clockContext.CAU_CLK_SEL = PMU->CAU_CLK_SEL; + s_clockContext.UART_FAST_CLK_DIV = PMU->UART_FAST_CLK_DIV; + s_clockContext.UART_SLOW_CLK_DIV = PMU->UART_SLOW_CLK_DIV; + s_clockContext.MCU_CORE_CLK_DIV = PMU->MCU_CORE_CLK_DIV; + s_clockContext.PERI0_CLK_DIV = PMU->PERI0_CLK_DIV; + s_clockContext.PERI1_CLK_DIV = PMU->PERI1_CLK_DIV; + s_clockContext.PERI2_CLK_DIV = PMU->PERI2_CLK_DIV; + s_clockContext.PERI3_CTRL = PMU->PERI3_CTRL; + } +} + +static void POWER_RestoreDeviceState(uint32_t mode) +{ + uint32_t refClk; + + if (mode == 3U) + { + /* Restore clock source and div setting for peripherals */ + PMU->UART_CLK_SEL = s_clockContext.UART_CLK_SEL; + PMU->GPT0_CTRL = s_clockContext.GPT0_CTRL; + PMU->GPT1_CTRL = s_clockContext.GPT1_CTRL; + PMU->GPT2_CTRL = s_clockContext.GPT2_CTRL; + PMU->GPT3_CTRL = s_clockContext.GPT3_CTRL; + PMU->PERI_CLK_SRC = s_clockContext.PERI_CLK_SRC; + PMU->CAU_CLK_SEL = s_clockContext.CAU_CLK_SEL; + PMU->UART_FAST_CLK_DIV = s_clockContext.UART_FAST_CLK_DIV; + PMU->UART_SLOW_CLK_DIV = s_clockContext.UART_SLOW_CLK_DIV; + PMU->MCU_CORE_CLK_DIV = s_clockContext.MCU_CORE_CLK_DIV; + PMU->PERI0_CLK_DIV = s_clockContext.PERI0_CLK_DIV; + PMU->PERI1_CLK_DIV = s_clockContext.PERI1_CLK_DIV; + PMU->PERI2_CLK_DIV = s_clockContext.PERI2_CLK_DIV; + PMU->PERI3_CTRL = s_clockContext.PERI3_CTRL; + /* Restore Flash controller configuration. */ + FLASHC->FCTR = s_flashContext.FCTR; + FLASHC->FCACR = s_flashContext.FCACR; + FLASHC->FAOFFR = s_flashContext.FAOFFR; + FLASHC->FCCR = s_flashContext.FCCR; + /* Restore QSPI configuration */ + QSPI->CONF = s_flashContext.CONF; + QSPI->TIMING = s_flashContext.TIMING; + } + + refClk = s_clockContext.WLAN_CTRL & (7UL << PMU_WLAN_CTRL_REFCLK_SYS_REQ_SHIFT); + PMU->WLAN_CTRL = s_clockContext.WLAN_CTRL; + /* Wait reference clock ready */ + while ((PMU->WLAN_CTRL & (refClk << 3U)) != (refClk << 3U)) + { + } + + PMU->SFLL_CTRL1 = s_clockContext.SFLL_CTRL1; + PMU->SFLL_CTRL0 = s_clockContext.SFLL_CTRL0; + if ((s_clockContext.SFLL_CTRL0 & PMU_SFLL_CTRL0_SFLL_PU_MASK) != 0U) + { + /* Wait PLL ready */ + while ((PMU->CLK_RDY & PMU_CLK_RDY_PLL_CLK_RDY_MASK) == 0U) + { + } + } + + PMU->AUPLL_CTRL1 = s_clockContext.AUPLL_CTRL1; + PMU->AUPLL_CTRL0 = s_clockContext.AUPLL_CTRL0; + if ((s_clockContext.AUPLL_CTRL0 & PMU_AUPLL_CTRL0_PU_MASK) != 0U) + { + /* Wait PLL ready */ + while ((PMU->CLK_RDY & PMU_CLK_RDY_PLL_AUDIO_RDY_MASK) == 0U) + { + } + } + if ((s_clockContext.CLK_SRC & PMU_CLK_SRC_SYS_CLK_SEL_MASK) == (uint32_t)kCLOCK_SysClkSrcMainXtal) + { + PMU->CLK_SRC = PMU_CLK_SRC_SYS_CLK_SEL(kCLOCK_SysClkSrcRC32M_3); + } + PMU->CLK_SRC = s_clockContext.CLK_SRC; +} + +/* Prepare to go to low power + * Change clock source to RC32M + * Switch off PLLs, XTAL + * Set Deep sleep bit in SRC register + * Initiate state change + */ +static void POWER_PrePowerMode(uint32_t mode, uint32_t excludeIo) +{ + assert((mode >= 1U) && (mode <= 4U)); + /* Turn off Systick to avoid interrupt + * when entering low power state + */ + s_systickContext.CTRL = SysTick->CTRL; + s_systickContext.LOAD = SysTick->LOAD; + SysTick->CTRL = 0; + SysTick->LOAD = 0; + + if (mode >= 2U) + { + POWER_SaveDeviceState(mode); + + if (mode == 3U) + { + /* On exit from PM3 bootrom jumps to address + * in pm3_entryaddr in NVRAM. + */ + pm3_entryaddr = (uint32_t *)0x480C0000; + POWER_SaveNvicState(); + FLASHC_Disable(); + } + + /* Switch clock source to RC 32Mhz */ + PMU->CLK_SRC |= 1U; + + /* Disable xtal */ + PMU->WLAN_CTRL &= ~(PMU_WLAN_CTRL_REFCLK_SYS_REQ_MASK | PMU_WLAN_CTRL_REFCLK_AUD_REQ_MASK | + PMU_WLAN_CTRL_REFCLK_USB_REQ_MASK); + + /* Power down analog unit */ + if (mode == 2U) + { + PMU->ANA_GRP_CTRL0 &= ~PMU_ANA_GRP_CTRL0_PU_MASK; + } + + /* Disable Audio PLL */ + PMU->AUPLL_CTRL0 &= ~PMU_AUPLL_CTRL0_PU_MASK; + + /* Disable System PLL */ + PMU->SFLL_CTRL0 &= ~PMU_SFLL_CTRL0_SFLL_PU_MASK; + + FLASH_PowerDown(true); + + POWER_SwitchOffIo(mode, excludeIo); + } + + POWER_SetSleepMode(mode); +} + +static void POWER_PostPowerMode(uint32_t mode) +{ + assert((mode >= 1U) && (mode <= 4U)); + + POWER_SetSleepMode(1U); + + if (mode >= 2U) + { + if (mode == 2U) + { + PMU->ANA_GRP_CTRL0 |= PMU_ANA_GRP_CTRL0_PU_MASK; + } + + POWER_RestoreIo(); + + FLASH_PowerDown(false); + + POWER_RestoreDeviceState(mode); + + if (mode == 3U) + { + POWER_RestoreNvicState(); + FLASHC_Enable(); + } + } + + SysTick->CTRL = s_systickContext.CTRL; + SysTick->LOAD = s_systickContext.LOAD; +} + +#if defined(__GNUC__) +void asm_mcu_pm3() +{ + /* Address: 0x480C0008 is the address in NVRAM which holds address + * where control returns after exit from PM3*/ + /* All general purpose registers and special registers + * are saved by pushing them on current thread's stack + * (psp is being used as sp) and finally SP is saved in NVRAM location*/ + + __asm volatile( + "push {r1}\n" + "mrs r1 , msp\n" + "push {r1}\n" + "mrs r1 , basepri\n" + "push {r1}\n" + "mrs r1 , primask\n" + "push {r1}\n" + "mrs r1 , faultmask\n" + "push {r1}\n" + "mrs r1 , control\n" + "push {r1}\n" + "push {r0-r12}\n" + "push {lr}\n" + "ldr r0 , =0x480C0040\n" + "str sp , [r0]\n" + "ldr r0 , =pm3_entryaddr\n" + "mov r1 , pc\n" + "add r1 , r1 , #20\n" + "ldr r2 , [r0]\n" + "str r1 , [r2]\n"); + /* + * Execute WFI to generate a state change + * and system is in an unresponsive state + * press wakeup key to get it out of standby + * If time_to_standby is set to valid value + * RTC is programmed and RTC generates + * a wakeup signal. + */ + __asm volatile("wfi"); + + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + + /* When system exits PM3 all registers need to be + * restored as they are lost. + * After exit from PM3, control register is 0 + * This indicates that msp is being used as sp + * psp is populated with saved_sp_addr value. + * When control register is popped, system starts using + * psp as sp and thread stack is now accessible. + */ + + /* + * When MCU enters PM3 all Core registers + * r0-r12 + * lr + * control + * primask + * faultmask + * basepri + * psp + * msp + * are lost (ZERO) as MCU power is tuned off + * On wakeup from PM3, this piece of code restores + * these registers which were saved before entry. + * The location of saving this register was on stack + * This stack was addressed as "sp" -> "psp". + * On exit "control" register becomes zero. + * Bit 1 of control register determines which register + * of "msp" or "psp" is mapped to "sp". + * If "control" register bit 1 is ZERO then use "msp" + * mapped to "sp" and restore the registers by popping them. + * If "control" register bit 1 is not ZERO then use "psp" + * mapped to "sp" and restore the registers by popping them. + * + */ + __asm volatile( + "mrs r0 , control\n" + "and r0 , #0x2\n" + "cmp r0 , #0x2\n" + "beq.w psp_lbl\n" + "ldr r0 , =0x480C0040\n" + "ldr sp , [r0]\n" + "pop {lr}\n" + "ldr r1 , [r0]\n" + "msr psp , r1\n" + "pop { r0-r12}\n" + "mov r1 , sp\n" + "add r1 , r1, #4\n" + "msr psp , r1\n" + "pop {r1}\n" + "msr control , r1\n" + "pop {r1}\n" + "msr faultmask , r1\n" + "pop {r1}\n" + "msr primask , r1\n" + "pop {r1}\n" + "msr basepri , r1\n" + "pop {r1}\n" + "msr msp , r1\n" + "pop {r1}\n" + "b.w exit_lbl\n" + "psp_lbl:\n" + "pop {lr}\n" + "pop {r0-r12}\n" + "pop {r1}\n" + "pop {r1}\n" + "msr faultmask , r1\n" + "pop {r1}\n" + "msr primask , r1\n" + "pop {r1}\n" + "msr basepri , r1\n" + "pop {r1}\n" + "msr msp , r1\n" + "pop {r1}\n" + "exit_lbl:\n"); + /* In the assembly code above adding 4 in r1 is done to + * populate "psp" before "control" register is popped. + * This is needed as "control" register has bit 1 set to 1 + * and it indicates that "sp" will be mapped to "psp" after + * the instruction that pops "control" register. + */ +} +#elif defined(__ICCARM__) +void asm_mcu_pm3() +{ + __asm volatile("push {r0-r12}"); + /* Address: 0x480C0008 is the address in NVRAM which holds address + * where control returns after exit from PM3*/ + /* All general purpose registers and special registers + * are saved by pushing them on current thread's stack + * (psp is being used as sp) and finally SP is saved in NVRAM location*/ + + /* Important Note: + * IAR tool chain does not allow following syntax + * + * LDR Rx, =variable_name + * or + * LDR Ry, =0x10000000 + * + * To overcome this issue a workaround is done to + * Load 0x480C0040 in a register using + * following instructions + * + * MOV, LSL and ADD + * + * 0x480C0040 will hold Stack Pointer + * before entering PM3 + */ + + __asm volatile("mov r5, %0\n" : : "r"(&pm3_entryaddr)); + + __asm volatile( + "push {r1}\n" + "mrs r1 , msp\n" + "push {r1}\n" + "mrs r1 , basepri\n" + "push {r1}\n" + "mrs r1 , primask\n" + "push {r1}\n" + "mrs r1 , faultmask\n" + "push {r1}\n" + "mrs r1 , control\n" + "push {r1}\n" + "push {r0-r12}\n" + "push {lr}\n" + "mov r0 , #0x480C\n" + "lsl r0 , r0 , #16\n" + "add r0 , r0 , #0x0040\n" + "str sp , [r0]\n" + "mov r0 , r5\n" + "mov r1 , pc\n" + "add r1 , r1 , #20\n" + "ldr r2 , [r0]\n" + "str r1 , [r2]\n"); + /* + * Execute WFI to generate a state change + * and system is in an unresponsive state + * press wakeup key to get it out of standby + * If time_to_standby is set to valid value + * RTC is programmed and RTC generates + * a wakeup signal. + */ + __asm volatile("wfi"); + + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + __asm volatile("nop"); + + /* When system exits PM3 all registers need to be + * restored as they are lost. + * After exit from PM3, control register is 0 + * This indicates that msp is being used as sp + * psp is populated with saved_sp_addr value. + * When control register is popped, system starts using + * psp as sp and thread stack is now accessible. + */ + + /* + * When MCU enters PM3 all Core registers + * r0-r12 + * lr + * control + * primask + * faultmask + * basepri + * psp + * msp + * are lost (ZERO) as MCU power is tuned off + * On wakeup from PM3, this piece of code restores + * these registers which were saved before entry. + * The location of saving this register was on stack + * This stack was addressed as "sp" -> "psp". + * On exit "control" register becomes zero. + * Bit 1 of control register determines which register + * of "msp" or "psp" is mapped to "sp". + * If "control" register bit 1 is ZERO then use "msp" + * mapped to "sp" and restore the registers by popping them. + * If "control" register bit 1 is not ZERO then use "psp" + * mapped to "sp" and restore the registers by popping them. + * + */ + __asm volatile( + "mrs r0 , control\n" + "and r0 , r0 , #0x2\n" + "cmp r0 , #0x2\n" + "beq.w psp_lbl\n" + "mov r0 , #0x480C\n" + "lsl r0 , r0 , #16\n" + "add r0 , r0 , #0x0040\n" + "ldr sp , [r0]\n" + "pop {lr}\n" + "ldr r1 , [r0]\n" + "msr psp , r1\n" + "pop { r0-r12}\n" + "mov r1 , sp\n" + "add r1 , r1, #4\n" + "msr psp , r1\n" + "pop {r1}\n" + "msr control , r1\n" + "pop {r1}\n" + "msr faultmask , r1\n" + "pop {r1}\n" + "msr primask , r1\n" + "pop {r1}\n" + "msr basepri , r1\n" + "pop {r1}\n" + "msr msp , r1\n" + "pop {r1}\n" + "b.w exit_lbl\n" + "psp_lbl:\n" + "pop {lr}\n" + "pop {r0-r12}\n" + "pop {r1}\n" + "pop {r1}\n" + "msr faultmask , r1\n" + "pop {r1}\n" + "msr primask , r1\n" + "pop {r1}\n" + "msr basepri , r1\n" + "pop {r1}\n" + "msr msp , r1\n" + "pop {r1}\n" + "exit_lbl:\n"); + __asm volatile("pop {r0-r12}"); + /* In the assembly code above adding 4 in r1 is done to + * populate "psp" before "control" register is popped. + * This is needed as "control" register has bit 1 set to 1 + * and it indicates that "sp" will be mapped to "psp" after + * the instruction that pops "control" register. + */ +} +#else +#error compiler not supported +#endif + +static void ps_wait(int cycle) +{ + __asm volatile( + "loop:\n" + "nop\n" + "SUB r0 , r0 , #1\n" + "CMP r0 , #0\n" + "BNE.W loop\n"); +} + +void POWER_EnterPowerMode(uint32_t mode, uint32_t excludeIo) +{ + assert(mode <= 4U); + + if (mode >= 1U) + { + POWER_PrePowerMode(mode, excludeIo); + if (mode >= 2U) + { + ps_wait(10); + } + if (mode == 3U) + { + asm_mcu_pm3(); + } + else + { + __WFI(); + } + POWER_PostPowerMode(mode); + } +} + +void POWER_TrimBandgapRefVoltage(power_bandgap_ref_voltage_t refVoltage) +{ + uint32_t tmp32; + + tmp32 = BG->CTRL; + tmp32 &= ~BG_CTRL_RES_TRIM_MASK; + tmp32 |= BG_CTRL_RES_TRIM(refVoltage); + BG->CTRL = tmp32; +} diff --git a/devices/88MW320/drivers/fsl_power.h b/devices/88MW320/drivers/fsl_power.h new file mode 100644 index 000000000..c7d46117e --- /dev/null +++ b/devices/88MW320/drivers/fsl_power.h @@ -0,0 +1,407 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_POWER_H_ +#define _FSL_POWER_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup power + * @{ + */ + +/*! @file */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief POWER driver version 2.1.0. */ +#define FSL_POWER_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) +/*@}*/ + +/*! + * @brief Pin edge for wakeup. + */ +typedef enum _power_wakeup_edge +{ + kPOWER_WakeupEdgeLow = 0U, /*!< Wakeup on pin low level. */ + kPOWER_WakeupEdgeHigh = 1U, /*!< Wakeup on pin high level. */ +} power_wakeup_edge_t; + +/*! + * @brief Wakeup pin. + */ +typedef enum _power_wakeup_pin +{ + kPOWER_WakeupPin0 = 0U, /*!< Wakeup0 pin - GPIO22. */ + kPOWER_WakeupPin1 = 1U, /*!< Wakeup1 pin - GPIO23. */ +} power_wakeup_pin_t; + +/*! + * @brief Reset cause. + */ +typedef enum _power_reset_cause +{ + kPOWER_ResetCauseVbatBrownout = 1U << 0U, /*!< VBAT power brown-out detected. */ + kPOWER_ResetCauseAv12Brownout = 1U << 1U, /*!< AV12 power brown-out detected. */ + kPOWER_ResetCauseAv18Brownout = 1U << 2U, /*!< AV18 power brown-out detected. */ + kPOWER_ResetCauseSysResetReq = 1U << 3U, /*!< CM4 system soft reset request. */ + kPOWER_ResetCauseLockup = 1U << 4U, /*!< CM4 locked up. */ + kPOWER_ResetCauseWdt = 1U << 5U, /*!< watchdog timer. */ + kPOWER_ResetCauseAll = 0x3FU, /*!< All reset causes. Used in POWER_ClearResetCause(). */ +} power_reset_cause_t; + +/*! + * @brief Wakeup source. + */ +typedef enum _power_wakeup_src +{ + kPOWER_WakeupSrcPin0 = 1U << 0U, /*!< Wakeup0 pin. */ + kPOWER_WakeupSrcPin1 = 1U << 1U, /*!< Wakeup1 pin. */ + kPOWER_WakeupSrcWlan = 1U << 2U, /*!< WLAN interrupt. */ + kPOWER_WakeupSrcRtc = 1U << 3U, /*!< RTC interrupt. */ + kPOWER_WakeupSrcComp = 1U << 4U, /*!< PMIP Comp interrupt. */ + kPOWER_WakeupSrcAll = 0x1FU, /*!< All wakeup sources. Used in POWER_ClearWakeupSource(). */ +} power_wakeup_src_t; + +/*! + * @brief Wakeup interrupt mask. + */ +typedef enum _power_wakeup_mask +{ + kPOWER_WakeupMaskPin0 = 1U << 3U, /*!< Wakeup0 pin. */ + kPOWER_WakeupMaskPin1 = 1U << 4U, /*!< Wakeup1 pin. */ + kPOWER_WakeupMaskRtc = 1U << 5U, /*!< RTC interrupt. */ + kPOWER_WakeupMaskComp = 1U << 6U, /*!< PMIP Comp interrupt. */ + kPOWER_WakeupMaskWlan = 1U << 7U, /*!< WLAN interrupt. */ + kPOWER_WakeupMaskAll = 0xF8U, /*!< All wakeup interrupt mask. */ +} power_wakeup_mask_t; + +/*! + * @brief IO domain. + */ +typedef enum _power_vddio +{ + kPOWER_VddIo0 = 0U, /*!< VDDIO0 pad group. */ + kPOWER_VddIo1 = 1U, /*!< VDDIO1 pad group. */ + kPOWER_VddIo2 = 2U, /*!< VDDIO2 pad group. */ + kPOWER_VddIo3 = 3U, /*!< VDDIO3 pad group. */ + kPOWER_VddIoAon = 19U, /*!< Always on pad group. */ +} power_vddio_t; + +/*! + * @brief IO domain voltage level. + */ +typedef enum _power_vddio_volt +{ + kPOWER_VddioVolt3V3 = 0x00U, /*!< VDDIO 3.3V */ + kPOWER_VddioVolt2V5 = 0x01U, /*!< VDDIO 2.5V */ + kPOWER_VddioVolt1V8 = 0x10U, /*!< VDDIO 1.8V */ +} power_vddio_volt_t; + +/** + * @brief AON Comparator Hysteresis list + */ +typedef enum _power_aon_comp_hyst +{ + kPOWER_AonCompHyst_0 = 0x0, /*!< Ulpcomp hysteresis level 0 */ + kPOWER_AonCompHyst_1 = 0x1, /*!< Ulpcomp hysteresis level 1 */ + kPOWER_AonCompHyst_2 = 0x2, /*!< Ulpcomp hysteresis level 2 */ + kPOWER_AonCompHyst_3 = 0x3, /*!< Ulpcomp hysteresis level 3 */ +} power_aon_comp_hyst_t; + +/*! + * @brief AON Comparator mode. + */ +typedef enum _power_aon_comp_mode +{ + kPOWER_AonCompMode_SingleEnded = 0U, + kPOWER_AonCompMode_Differential = 1U, +} power_aon_comp_mode_t; + +/*! + * @brief AON Comparator Reference for Single-Ended mode. + */ +typedef enum _power_aon_comp_ref +{ + kPOWER_AonCompRef_0V2 = 0U, /*!< 0.2V */ + kPOWER_AonCompRef_0V4 = 1U, /*!< 0.4 */ + kPOWER_AonCompRef_0V6 = 2U, /*!< 0.6V */ + kPOWER_AonCompRef_0V8 = 3U, /*!< 0.8V */ + kPOWER_AonCompRef_1V0 = 4U, /*!< 1.0V */ + kPOWER_AonCompRef_1V2 = 5U, /*!< 1.2V */ + kPOWER_AonCompRef_1V4 = 6U, /*!< 1.4V */ + kPOWER_AonCompRef_1V6 = 7U, /*!< 1.6V */ +} power_aon_comp_ref_t; + +/*! + * @brief Internal bandgap reference voltage trim value. + */ +typedef enum _power_bandgap_ref_voltage +{ + kPOWER_BGRefVoltage1P159V = 0U, /*!< Trim reference voltage to 1.159V. */ + kPOWER_BGRefVoltage1P163V, /*!< Trim reference voltage to 1.163V. */ + kPOWER_BGRefVoltage1P168V, /*!< Trim reference voltage to 1.168V. */ + kPOWER_BGRefVoltage1P172V, /*!< Trim reference voltage to 1.172V. */ + kPOWER_BGRefVoltage1P177V, /*!< Trim reference voltage to 1.177V. */ + kPOWER_BGRefVoltage1P181V, /*!< Trim reference voltage to 1.181V. */ + kPOWER_BGRefVoltage1P186V, /*!< Trim reference voltage to 1.186V. */ + kPOWER_BGRefVoltage1P190V, /*!< Trim reference voltage to 1.190V. */ + kPOWER_BGRefVoltage1P194V, /*!< Trim reference voltage to 1.194V. */ + kPOWER_BGRefVoltage1P199V, /*!< Trim reference voltage to 1.199V. */ + kPOWER_BGRefVoltage1P204V, /*!< Trim reference voltage to 1.204V. */ + kPOWER_BGRefVoltage1P208, /*!< Trim reference voltage to 1.208V. */ + kPOWER_BGRefVoltage1P213V, /*!< Trim reference voltage to 1.213V. */ + kPOWER_BGRefVoltage1P217V, /*!< Trim reference voltage to 1.217V. */ + kPOWER_BGRefVoltage1P222V, /*!< Trim reference voltage to 1.222V. */ + kPOWER_BGRefVoltage1P226V, /*!< Trim reference voltage to 1.226V. */ +} power_bandgap_ref_voltage_t; + +/*! + * @brief AON Comparator config structure. + */ +typedef struct _power_aon_comp_config +{ + power_aon_comp_hyst_t hyst; + power_aon_comp_mode_t mode; + power_aon_comp_ref_t ref; +} power_aon_comp_config_t; + +#if defined(__cplusplus) +extern "C" { +#endif + +/** + * @brief Configure pin edge for wakeup + * @param pin : Wakeup pin + * @param edge : Pin level for wakeup + */ +__STATIC_INLINE void POWER_ConfigWakeupPin(power_wakeup_pin_t pin, power_wakeup_edge_t edge) +{ + PMU->WAKEUP_EDGE_DETECT = (PMU->WAKEUP_EDGE_DETECT & ~(1U << (uint8_t)pin)) | ((uint8_t)edge << (uint8_t)pin); +} + +/** + * @brief Get last reset cause + * @return Or'ed cause of \ref power_reset_cause_t + */ +__STATIC_INLINE uint32_t POWER_GetResetCause(void) +{ + return PMU->LAST_RST_CAUSE & (uint32_t)kPOWER_ResetCauseAll; +} + +/** + * @brief Clear last reset cause + * @param cause : A bitmask of of \ref power_reset_cause_t + */ +__STATIC_INLINE void POWER_ClearResetCause(uint32_t cause) +{ + assert((cause & ~(uint32_t)kPOWER_ResetCauseAll) == 0U); + + PMU->LAST_RST_CLR = cause; +} + +/** + * @brief Get last wakeup source + * @return Bitmask of \ref power_wakeup_src_t + */ +__STATIC_INLINE uint32_t POWER_GetWakeupSource(void) +{ + return PMU->WAKEUP_STATUS & (uint32_t)kPOWER_WakeupSrcAll; +} + +/** + * @brief Clear wakeup source + * @param src : A bitmask of \ref power_wakeup_src_t + */ +__STATIC_INLINE void POWER_ClearWakeupSource(uint32_t src) +{ + assert((src & ~(uint32_t)kPOWER_WakeupSrcAll) == 0U); + + PMU->WAKE_SRC_CLR = src; +} + +/** + * @brief Enable the Wakeup interrupts. + * @param interruptMask : A bitmask of interrupts to enable. See \ref power_wakeup_mask_t. + */ +__STATIC_INLINE void POWER_EnableWakeup(uint32_t interruptMask) +{ + assert((interruptMask & ~(uint32_t)kPOWER_WakeupMaskAll) == 0U); + + PMU->WAKEUP_MASK |= interruptMask; +} + +/** + * @brief Disable the Wakeup interrupts. + * @param interruptMask : A bitmask of interrupts to disable. See \ref power_wakeup_mask_t. + */ +__STATIC_INLINE void POWER_DisableWakeup(uint32_t interruptMask) +{ + assert((interruptMask & ~(uint32_t)kPOWER_WakeupMaskAll) == 0U); + + PMU->WAKEUP_MASK &= ~interruptMask; +} + +/** + * @brief Set sleep mode on idle. + * @param mode : 0 ~ 4 stands for PM0 ~ PM4. + */ +void POWER_SetSleepMode(uint32_t mode); + +/** + * @brief Switch system into certain power mode. + * @param mode : 0 ~ 4 stands for PM0 ~ PM4. + * @param excludeIo: IO domains bitmask to keep unchanged during PM2. + */ +void POWER_EnterPowerMode(uint32_t mode, uint32_t excludeIo); + +/** + * @brief Power on IO domain. + * @param domain : IO domain to power on. + */ +__STATIC_INLINE void POWER_PowerOnVddio(power_vddio_t domain) +{ + assert(domain <= kPOWER_VddIo3); + + PMU->IO_PAD_PWR_CFG |= (1UL << (PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_SHIFT + (uint32_t)domain)); +} + +/** + * @brief Power off IO domain. + * @param domain : IO domain to power off. + */ +__STATIC_INLINE void POWER_PowerOffVddio(power_vddio_t domain) +{ + assert(domain <= kPOWER_VddIo3); + + /* Both pad regulator and IO domain powered off */ + PMU->IO_PAD_PWR_CFG &= ~((1UL << (PMU_IO_PAD_PWR_CFG_GPIO0_LOW_VDDB_SHIFT + (uint32_t)domain)) | + (1UL << (PMU_IO_PAD_PWR_CFG_GPIO0_PDB_SHIFT + (uint32_t)domain))); +} + +/** + * @brief Power on IO domain pad regulator. + * @param domain : IO domain to power on. + */ +void POWER_PowerOnVddioPad(power_vddio_t domain); + +/** + * @brief Power off IO domain pad regulator. + * @param domain : IO domain to power off. + */ +void POWER_PowerOffVddioPad(power_vddio_t domain); + +/** + * @brief Set IO domain pad voltage. + * @param domain : IO domain. + * @param volt : Voltage level to be set. + */ +void POWER_SetVddioPadVolt(power_vddio_t domain, power_vddio_volt_t volt); + +/** + * @brief Power on WLAN. + */ +__STATIC_INLINE void POWER_PowerOnWlan(void) +{ + PMU->WLAN_CTRL |= PMU_WLAN_CTRL_PD_MASK; +} + +/** + * @brief Power off WLAN. + */ +__STATIC_INLINE void POWER_PowerOffWlan(void) +{ + PMU->WLAN_CTRL &= ~PMU_WLAN_CTRL_PD_MASK; +} + +/** + * @brief Enable MCI wakeup WLAN + */ +__STATIC_INLINE void PMU_EnableWlanWakeup(void) +{ + PMU->WLAN_CTRL1 |= PMU_WLAN_CTRL1_MCI_WL_WAKEUP_MASK; +} + +/** + * @brief Disable MCI wakeup WLAN + */ +__STATIC_INLINE void PMU_DisableWlanWakeup(void) +{ + PMU->WLAN_CTRL1 &= ~PMU_WLAN_CTRL1_MCI_WL_WAKEUP_MASK; +} + +/** + * @brief Attach GPIO interrupt to NVIC vector table. + * Since 2 GPIO pins shares 1 IRQ number. Attaching one GPIO IRQ implicits + * detaching the sibling GPIO IRQ. + * @param pin : GPIO index. + */ +void POWER_AttachGpioIrq(uint32_t pin); + +/** + * @brief Enable AON Domain Comparator. + * @param config : AON Comparator config data. + */ +void POWER_EnableAonComp(const power_aon_comp_config_t *config); + +/** + * @brief Disable AON Domain Comparator. + */ +void POWER_DisableAonComp(void); + +/** + * @brief Get AON Domain Comparator result. + * @return AON Comparator output value + */ +uint32_t POWER_GetAonCompValue(void); + +/** + * @brief Power up internal bandgap. + */ +__STATIC_INLINE void POWER_PowerUpBandgap(void) +{ + BG->CTRL &= ~BG_CTRL_PD_MASK; +} + +/** + * @brief Power down internal bandgap. + */ +__STATIC_INLINE void POWER_PowerDownBandgap(void) +{ + BG->CTRL |= BG_CTRL_PD_MASK; +} + +/** + * @brief Trim internal bandgap reference voltage. + * + * @param refVoltage The reference voltage value to trim, please refer to @ref power_bandgap_ref_voltage_t for details. + */ +void POWER_TrimBandgapRefVoltage(power_bandgap_ref_voltage_t refVoltage); + +/** + * @brief Check internal bandgap ready status + * + * @retval true Internal bandgap is ready. + * @retval false Internal bandgap is not ready. + */ +__STATIC_INLINE bool POWER_CheckBandgapReady(void) +{ + return ((BG->STATUS & BG_STATUS_RDY_MASK) == BG_STATUS_RDY_MASK); +} + +#if defined(__cplusplus) +} +#endif /*_cplusplus */ + +/*! @}*/ + +#endif /* _FSL_POWER_H_ */ diff --git a/devices/88MW320/fsl_device_registers.h b/devices/88MW320/fsl_device_registers.h new file mode 100644 index 000000000..2243de411 --- /dev/null +++ b/devices/88MW320/fsl_device_registers.h @@ -0,0 +1,35 @@ +/* + * Copyright 2014-2016 Freescale Semiconductor, Inc. + * Copyright 2016-2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef __FSL_DEVICE_REGISTERS_H__ +#define __FSL_DEVICE_REGISTERS_H__ + +/* + * Include the cpu specific register header files. + * + * The CPU macro should be declared in the project or makefile. + */ +#if (defined(CPU_88MW320_A0_NAPC)) + +#define MW320_SERIES + +/* CMSIS-style register definitions */ +#include "88MW320.h" +/* CPU specific feature definitions */ +#include "88MW320_features.h" + +#else +#error "No valid CPU defined!" +#endif + +#endif /* __FSL_DEVICE_REGISTERS_H__ */ + +/******************************************************************************* + * EOF + ******************************************************************************/ diff --git a/devices/88MW320/gcc/88MW320_xx_xxxx_flash.ld b/devices/88MW320/gcc/88MW320_xx_xxxx_flash.ld new file mode 100644 index 000000000..f760a92e7 --- /dev/null +++ b/devices/88MW320/gcc/88MW320_xx_xxxx_flash.ld @@ -0,0 +1,272 @@ +/* +** ################################################################### +** Processor: 88MW320_A0_NAPC +** Compiler: GNU C Compiler +** Reference manual: 88MW320-88MW322, Rev.3, July 2020 +** Version: rev. 1.0, 2020-09-07 +** Build: b210107 +** +** Abstract: +** Linker file for the GNU C Compiler +** +** Copyright 2016 Freescale Semiconductor, Inc. +** Copyright 2016-2021 NXP +** All rights reserved. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** http: www.nxp.com +** mail: support@nxp.com +** +** ################################################################### +*/ + + + +/* Entry Point */ +ENTRY(Reset_Handler) + +HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x0400; +STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0400; +M_VECTOR_RAM_SIZE = DEFINED(__ram_vector_table__) ? 0x00000180 : 0; +_nvram_start = 0x480C0000; + +/* The SRAM region [0x15EFC0-0x15EFFF] is reserved for entropy store. */ +/* The SRAM region [0x15F000-0x15FFFF] is reserved for keystore. */ + +/* Specify the memory areas */ +MEMORY +{ + m_interrupts (RX) : ORIGIN = 0x1F000100, LENGTH = 0x00000180 + m_text (RX) : ORIGIN = 0x1F000280, LENGTH = 0x0008FD80 + m_data0 (RW) : ORIGIN = 0x00100000, LENGTH = 0x0005EFC0 + m_data1 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00020000 + m_nvram (RW) : ORIGIN = 0x480C0044, LENGTH = 0x00000FBC +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into internal flash */ + .interrupts : + { + . = ALIGN(4); + __VECTOR_TABLE = .; + __Vectors = .; + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } > m_interrupts + + /* The program code and other data goes into internal flash */ + .text : + { + . = ALIGN(4); + *(EXCLUDE_FILE( + /* Exclude flash and frequently executed functions from XIP */ + */fsl_clock.c.obj + */clock_config.c.obj + */fsl_qspi.c.obj + */fsl_flashc.c.obj + */fsl_power.c.obj + */mflash_drv.c.obj + ) .text) /* .text sections (code) */ + *(EXCLUDE_FILE( + /* Exclude flash and frequently executed functions from XIP */ + */fsl_clock.c.obj + */clock_config.c.obj + */fsl_qspi.c.obj + */fsl_flashc.c.obj + */fsl_power.c.obj + */mflash_drv.c.obj + ) .text*) /* .text* sections (code) */ + *(EXCLUDE_FILE( + /* Exclude flash and frequently executed functions from XIP */ + */fsl_clock.c.obj + */clock_config.c.obj + */fsl_qspi.c.obj + */fsl_flashc.c.obj + */fsl_power.c.obj + */mflash_drv.c.obj + ) .rodata) /* .rodata sections (constants, strings, etc.) */ + *(EXCLUDE_FILE( + /* Exclude flash and frequently executed functions from XIP */ + */fsl_clock.c.obj + */clock_config.c.obj + */fsl_qspi.c.obj + */fsl_flashc.c.obj + */fsl_power.c.obj + */mflash_drv.c.obj + ) .rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + KEEP (*(.init)) + KEEP (*(.fini)) + . = ALIGN(4); + } > m_text + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > m_text + + .ARM : + { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } > m_text + + .ctors : + { + __CTOR_LIST__ = .; + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __CTOR_END__ = .; + } > m_text + + .dtors : + { + __DTOR_LIST__ = .; + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + __DTOR_END__ = .; + } > m_text + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } > m_text + + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } > m_text + + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } > m_text + + __etext = .; /* define a global symbol at end of code */ + __DATA_ROM = .; /* Symbol is used by startup for data initialization */ + + .interrupts_ram : + { + . = ALIGN(4); + __VECTOR_RAM__ = .; + __interrupts_ram_start__ = .; /* Create a global symbol at data start */ + *(.m_interrupts_ram) /* This is a user defined section */ + . += M_VECTOR_RAM_SIZE; + . = ALIGN(4); + __interrupts_ram_end__ = .; /* Define a global symbol at data end */ + } > m_data0 + + __VECTOR_RAM = DEFINED(__ram_vector_table__) ? __VECTOR_RAM__ : ORIGIN(m_interrupts); + __RAM_VECTOR_TABLE_SIZE_BYTES = DEFINED(__ram_vector_table__) ? (__interrupts_ram_end__ - __interrupts_ram_start__) : 0x0; + + .data : AT(__DATA_ROM) + { + . = ALIGN(4); + __DATA_RAM = .; + __data_start__ = .; /* create a global symbol at data start */ + *(CodeQuickAccess) /* CodeQuickAccess sections */ + *(DataQuickAccess) /* DataQuickAccess sections */ + /* Explicit placement of flash and frequently executed functions in RAM */ + */fsl_clock.c.obj(.text .text* .rodata .rodata*) + */clock_config.c.obj(.text .text* .rodata .rodata*) + */fsl_qspi.c.obj(.text .text* .rodata .rodata*) + */fsl_flashc.c.obj(.text .text* .rodata .rodata*) + */fsl_power.c.obj(.text .text* .rodata .rodata*) + */mflash_drv.c.obj(.text .text* .rodata .rodata*) + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + KEEP(*(.jcr*)) + . = ALIGN(4); + __data_end__ = .; /* define a global symbol at data end */ + } > m_data0 + + __DATA_END = __DATA_ROM + (__data_end__ - __data_start__); + + text_end = ORIGIN(m_text) + LENGTH(m_text); + ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data") + + /* Uninitialized data section */ + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + . = ALIGN(4); + __START_BSS = .; + __bss_start__ = .; + *(.bss) + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + __END_BSS = .; + } > m_data0 + + .heap : + { + . = ALIGN(8); + __end__ = .; + PROVIDE(end = .); + __HeapBase = .; + . += HEAP_SIZE; + __HeapLimit = .; + __heap_limit = .; /* Add for _sbrk */ + } > m_data1 + + .stack : + { + . = ALIGN(8); + . += STACK_SIZE; + } > m_data1 + + .nvram : + { + . = ALIGN(4); + __nvram_start__ = .; /* create a global symbol at nvram start */ + *(.nvram*) /* .nvram* sections */ + *(.nvram_uninit*) /* .nvram_uninit* sections */ + . = ALIGN(4); + __nvram_end__ = .; /* define a global symbol at nvram end */ + } > m_nvram + + /* Initializes stack on the end of block */ + __StackTop = ORIGIN(m_data1) + LENGTH(m_data1); + __StackLimit = __StackTop - STACK_SIZE; + PROVIDE(__stack = __StackTop); + + .ARM.attributes 0 : { *(.ARM.attributes) } + + ASSERT(__StackLimit >= __HeapLimit, "region m_data1 overflowed with stack and heap") +} + diff --git a/devices/88MW320/gcc/88MW320_xx_xxxx_ram.ld b/devices/88MW320/gcc/88MW320_xx_xxxx_ram.ld new file mode 100644 index 000000000..b5be5dcfa --- /dev/null +++ b/devices/88MW320/gcc/88MW320_xx_xxxx_ram.ld @@ -0,0 +1,217 @@ +/* +** ################################################################### +** Processor: 88MW320_A0_NAPC +** Compiler: GNU C Compiler +** Reference manual: 88MW320-88MW322, Rev.3, July 2020 +** Version: rev. 1.0, 2020-09-07 +** Build: b201229 +** +** Abstract: +** Linker file for the GNU C Compiler +** +** Copyright 2016 Freescale Semiconductor, Inc. +** Copyright 2016-2020 NXP +** All rights reserved. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** http: www.nxp.com +** mail: support@nxp.com +** +** ################################################################### +*/ + + + +/* Entry Point */ +ENTRY(Reset_Handler) + +HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x0400; +STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0400; +_nvram_start = 0x480C0000; + +/* The SRAM region [0x15EFC0-0x15EFFF] is reserved for entropy store. */ +/* The SRAM region [0x15F000-0x15FFFF] is reserved for keystore. */ + +/* Specify the memory areas */ +MEMORY +{ + m_interrupts (RX) : ORIGIN = 0x00100000, LENGTH = 0x00000180 + m_text (RX) : ORIGIN = 0x00100180, LENGTH = 0x0005EE40 + m_data (RW) : ORIGIN = 0x20000000, LENGTH = 0x00020000 + m_nvram (RW) : ORIGIN = 0x480C0044, LENGTH = 0x00000FBC +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into internal flash */ + .interrupts : + { + . = ALIGN(4); + __VECTOR_TABLE = .; + __Vectors = .; + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } > m_interrupts + + /* The program code and other data goes into internal flash */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + KEEP (*(.init)) + KEEP (*(.fini)) + . = ALIGN(4); + } > m_text + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > m_text + + .ARM : + { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } > m_text + + .ctors : + { + __CTOR_LIST__ = .; + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __CTOR_END__ = .; + } > m_text + + .dtors : + { + __DTOR_LIST__ = .; + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + __DTOR_END__ = .; + } > m_text + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } > m_text + + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } > m_text + + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } > m_text + + __etext = .; /* define a global symbol at end of code */ + __DATA_ROM = .; /* Symbol is used by startup for data initialization */ + + __VECTOR_RAM = ORIGIN(m_interrupts); + __RAM_VECTOR_TABLE_SIZE_BYTES = 0x0; + + .data : AT(__DATA_ROM) + { + . = ALIGN(4); + __DATA_RAM = .; + __data_start__ = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + KEEP(*(.jcr*)) + . = ALIGN(4); + __data_end__ = .; /* define a global symbol at data end */ + } > m_data + + __DATA_END = __DATA_ROM + (__data_end__ - __data_start__); + text_end = ORIGIN(m_text) + LENGTH(m_text); + ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data") + + /* Uninitialized data section */ + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + . = ALIGN(4); + __START_BSS = .; + __bss_start__ = .; + *(.bss) + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + __END_BSS = .; + } > m_data + + .heap : + { + . = ALIGN(8); + __end__ = .; + PROVIDE(end = .); + __HeapBase = .; + . += HEAP_SIZE; + __HeapLimit = .; + __heap_limit = .; /* Add for _sbrk */ + } > m_data + + .stack : + { + . = ALIGN(8); + . += STACK_SIZE; + } > m_data + + .nvram : + { + . = ALIGN(4); + __nvram_start__ = .; /* create a global symbol at nvram start */ + *(.nvram*) /* .nvram* sections */ + *(.nvram_uninit*) /* .nvram_uninit* sections */ + . = ALIGN(4); + __nvram_end__ = .; /* define a global symbol at nvram end */ + } > m_nvram + + /* Initializes stack on the end of block */ + __StackTop = ORIGIN(m_data) + LENGTH(m_data); + __StackLimit = __StackTop - STACK_SIZE; + PROVIDE(__stack = __StackTop); + + .ARM.attributes 0 : { *(.ARM.attributes) } + + ASSERT(__StackLimit >= __HeapLimit, "region m_data overflowed with stack and heap") +} + diff --git a/devices/88MW320/gcc/startup_88MW320.S b/devices/88MW320/gcc/startup_88MW320.S new file mode 100644 index 000000000..a2beb880f --- /dev/null +++ b/devices/88MW320/gcc/startup_88MW320.S @@ -0,0 +1,429 @@ +/* ------------------------------------------------------------------------- */ +/* @file: startup_88MW320.s */ +/* @purpose: CMSIS Cortex-M4 Core Device Startup File */ +/* 88MW320 */ +/* @version: 1.0 */ +/* @date: 2020-9-7 */ +/* @build: b210108 */ +/* ------------------------------------------------------------------------- */ +/* */ +/* Copyright 1997-2016 Freescale Semiconductor, Inc. */ +/* Copyright 2016-2021 NXP */ +/* All rights reserved. */ +/* */ +/* SPDX-License-Identifier: BSD-3-Clause */ +/*****************************************************************************/ +/* Version: GCC for ARM Embedded Processors */ +/*****************************************************************************/ + .syntax unified + .arch armv7-m + + .section .isr_vector, "a" + .align 2 + .globl __isr_vector +__isr_vector: + .long __StackTop /* Top of Stack */ + .long Reset_Handler /* Reset Handler */ + .long NMI_Handler /* NMI Handler*/ + .long HardFault_Handler /* Hard Fault Handler*/ + .long MemManage_Handler /* MPU Fault Handler*/ + .long BusFault_Handler /* Bus Fault Handler*/ + .long UsageFault_Handler /* Usage Fault Handler*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long SVC_Handler /* SVCall Handler*/ + .long DebugMon_Handler /* Debug Monitor Handler*/ + .long 0 /* Reserved*/ + .long PendSV_Handler /* PendSV Handler*/ + .long SysTick_Handler /* SysTick Handler*/ + + /* External Interrupts*/ + .long EXTPIN0_IRQHandler /* Ext. Pin 0*/ + .long EXTPIN1_IRQHandler /* Ext. Pin 1*/ + .long RTC_IRQHandler /* RTC INT*/ + .long CRC_IRQHandler /* CRC INT*/ + .long AES_IRQHandler /* AES INT*/ + .long I2C0_IRQHandler /* I2C0 INT*/ + .long I2C1_IRQHandler /* I2C1 INT*/ + .long Reserved23_IRQHandler /* Reserved interrupt*/ + .long DMAC_IRQHandler /* DMAC INT*/ + .long GPIO_IRQHandler /* GPIO INT*/ + .long SSP0_IRQHandler /* SSP0 INT*/ + .long SSP1_IRQHandler /* SSP1 INT*/ + .long SSP2_IRQHandler /* SSP2 INT*/ + .long QSPI_IRQHandler /* QSPI INT*/ + .long GPT0_IRQHandler /* GPT0 INT*/ + .long GPT1_IRQHandler /* GPT1 INT*/ + .long GPT2_IRQHandler /* GPT2 INT*/ + .long GPT3_IRQHandler /* GPT3 INT*/ + .long UART0_IRQHandler /* UART0 INT*/ + .long UART1_IRQHandler /* UART1 INT*/ + .long UART2_IRQHandler /* UART2 INT*/ + .long Reserved37_IRQHandler /* Reserved interrupt*/ + .long WDT_IRQHandler /* WDT INT*/ + .long Reserved39_IRQHandler /* Reserved interrupt*/ + .long ADC0_IRQHandler /* ADC0 INT*/ + .long DAC_IRQHandler /* DAC INT*/ + .long ACOMP_WAKEUP_IRQHandler /* ACOMP Wake-up INT*/ + .long ACOMP_IRQHandler /* ACOMP INT*/ + .long SDIO_IRQHandler /* SDIO INT*/ + .long USB_IRQHandler /* USB INT*/ + .long Reserved46_IRQHandler /* Reserved interrupt*/ + .long PLL_IRQHandler /* PLL INT*/ + .long Reserved48_IRQHandler /* Reserved interrupt*/ + .long RC32M_IRQHandler /* RC32M INT FUNC*/ + .long GPIO_0_1_IRQHandler /* External Pin 0 selected by PMU.EXT_SEL_REG*/ + .long GPIO_2_3_IRQHandler /* External Pin 1 selected by PMU.EXT_SEL_REG*/ + .long GPIO_4_5_IRQHandler /* External Pin 2 selected by PMU.EXT_SEL_REG*/ + .long GPIO_6_7_IRQHandler /* External Pin 3 selected by PMU.EXT_SEL_REG*/ + .long GPIO_8_9_IRQHandler /* External Pin 4 selected by PMU.EXT_SEL_REG*/ + .long GPIO_10_11_IRQHandler /* External Pin 5 selected by PMU.EXT_SEL_REG*/ + .long GPIO_12_13_IRQHandler /* External Pin 6 selected by PMU.EXT_SEL_REG*/ + .long GPIO_14_15_IRQHandler /* External Pin 7 selected by PMU.EXT_SEL_REG*/ + .long GPIO_16_17_IRQHandler /* External Pin 8 selected by PMU.EXT_SEL_REG*/ + .long GPIO_18_19_IRQHandler /* External Pin 9 selected by PMU.EXT_SEL_REG*/ + .long GPIO_20_21_IRQHandler /* External Pin 10 selected by PMU.EXT_SEL_REG*/ + .long GPIO_22_23_IRQHandler /* External Pin 11 selected by PMU.EXT_SEL_REG*/ + .long GPIO_24_25_IRQHandler /* External Pin 12 selected by PMU.EXT_SEL_REG*/ + .long GPIO_26_27_IRQHandler /* External Pin 13 selected by PMU.EXT_SEL_REG*/ + .long GPIO_28_29_IRQHandler /* External Pin 14 selected by PMU.EXT_SEL_REG*/ + .long GPIO_30_31_IRQHandler /* External Pin 15 selected by PMU.EXT_SEL_REG*/ + .long GPIO_32_33_IRQHandler /* External Pin 16 selected by PMU.EXT_SEL_REG*/ + .long GPIO_34_35_IRQHandler /* External Pin 17 selected by PMU.EXT_SEL_REG*/ + .long GPIO_36_37_IRQHandler /* External Pin 18 selected by PMU.EXT_SEL_REG*/ + .long GPIO_38_39_IRQHandler /* External Pin 19 selected by PMU.EXT_SEL_REG*/ + .long GPIO_40_41_IRQHandler /* External Pin 20 selected by PMU.EXT_SEL_REG*/ + .long GPIO_42_43_IRQHandler /* External Pin 21 selected by PMU.EXT_SEL_REG*/ + .long GPIO_44_45_IRQHandler /* External Pin 22 selected by PMU.EXT_SEL_REG*/ + .long GPIO_46_47_IRQHandler /* External Pin 23 selected by PMU.EXT_SEL_REG*/ + .long GPIO_48_49_IRQHandler /* External Pin 24 selected by PMU.EXT_SEL_REG*/ + .long Reserved75_IRQHandler /* Reserved interrupt*/ + .long PMU_IRQHandler /* ULP COMP*/ + .long BRNOUT_IRQHandler /* Brnout INT*/ + .long WIFIWKUP_IRQHandler /* WiFi Wakeup INT*/ + + .size __isr_vector, . - __isr_vector + + .text + .thumb + +/* Reset Handler */ + + .thumb_func + .align 2 + .globl Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + cpsid i /* Mask interrupts */ + .equ VTOR, 0xE000ED08 + ldr r0, =VTOR + ldr r1, =__isr_vector + str r1, [r0] + ldr r2, [r1] + msr msp, r2 +#ifndef __NO_SYSTEM_INIT + ldr r0,=SystemInit + blx r0 +#endif +/* Loop to copy data from read only memory to RAM. The ranges + * of copy from/to are specified by following symbols evaluated in + * linker script. + * __etext: End of code section, i.e., begin of data sections to copy from. + * __data_start__/__data_end__: RAM address range that data should be + * copied to. Both must be aligned to 4 bytes boundary. */ + + ldr r1, =__etext + ldr r2, =__data_start__ + ldr r3, =__data_end__ + +#ifdef __PERFORMANCE_IMPLEMENTATION +/* Here are two copies of loop implementations. First one favors performance + * and the second one favors code size. Default uses the second one. + * Define macro "__PERFORMANCE_IMPLEMENTATION" in project to use the first one */ + subs r3, r2 + ble .LC1 +.LC0: + subs r3, #4 + ldr r0, [r1, r3] + str r0, [r2, r3] + bgt .LC0 +.LC1: +#else /* code size implemenation */ +.LC0: + cmp r2, r3 + ittt lt + ldrlt r0, [r1], #4 + strlt r0, [r2], #4 + blt .LC0 +#endif + +#ifdef __STARTUP_CLEAR_BSS +/* This part of work usually is done in C library startup code. Otherwise, + * define this macro to enable it in this startup. + * + * Loop to zero out BSS section, which uses following symbols + * in linker script: + * __bss_start__: start of BSS section. Must align to 4 + * __bss_end__: end of BSS section. Must align to 4 + */ + ldr r1, =__bss_start__ + ldr r2, =__bss_end__ + + movs r0, 0 +.LC2: + cmp r1, r2 + itt lt + strlt r0, [r1], #4 + blt .LC2 +#endif /* __STARTUP_CLEAR_BSS */ + + cpsie i /* Unmask interrupts */ +#ifndef __START +#define __START _start +#endif +#ifndef __ATOLLIC__ + ldr r0,=__START + blx r0 +#else + ldr r0,=__libc_init_array + blx r0 + ldr r0,=main + bx r0 +#endif + .pool + .size Reset_Handler, . - Reset_Handler + + .align 1 + .thumb_func + .weak DefaultISR + .type DefaultISR, %function +DefaultISR: + b DefaultISR + .size DefaultISR, . - DefaultISR + + .align 1 + .thumb_func + .weak NMI_Handler + .type NMI_Handler, %function +NMI_Handler: + ldr r0,=NMI_Handler + bx r0 + .size NMI_Handler, . - NMI_Handler + + .align 1 + .thumb_func + .weak HardFault_Handler + .type HardFault_Handler, %function +HardFault_Handler: + ldr r0,=HardFault_Handler + bx r0 + .size HardFault_Handler, . - HardFault_Handler + + .align 1 + .thumb_func + .weak SVC_Handler + .type SVC_Handler, %function +SVC_Handler: + ldr r0,=SVC_Handler + bx r0 + .size SVC_Handler, . - SVC_Handler + + .align 1 + .thumb_func + .weak PendSV_Handler + .type PendSV_Handler, %function +PendSV_Handler: + ldr r0,=PendSV_Handler + bx r0 + .size PendSV_Handler, . - PendSV_Handler + + .align 1 + .thumb_func + .weak SysTick_Handler + .type SysTick_Handler, %function +SysTick_Handler: + ldr r0,=SysTick_Handler + bx r0 + .size SysTick_Handler, . - SysTick_Handler + + .align 1 + .thumb_func + .weak I2C0_IRQHandler + .type I2C0_IRQHandler, %function +I2C0_IRQHandler: + ldr r0,=I2C0_DriverIRQHandler + bx r0 + .size I2C0_IRQHandler, . - I2C0_IRQHandler + + .align 1 + .thumb_func + .weak I2C1_IRQHandler + .type I2C1_IRQHandler, %function +I2C1_IRQHandler: + ldr r0,=I2C1_DriverIRQHandler + bx r0 + .size I2C1_IRQHandler, . - I2C1_IRQHandler + + .align 1 + .thumb_func + .weak DMAC_IRQHandler + .type DMAC_IRQHandler, %function +DMAC_IRQHandler: + ldr r0,=DMAC_DriverIRQHandler + bx r0 + .size DMAC_IRQHandler, . - DMAC_IRQHandler + + .align 1 + .thumb_func + .weak SSP0_IRQHandler + .type SSP0_IRQHandler, %function +SSP0_IRQHandler: + ldr r0,=SSP0_DriverIRQHandler + bx r0 + .size SSP0_IRQHandler, . - SSP0_IRQHandler + + .align 1 + .thumb_func + .weak SSP1_IRQHandler + .type SSP1_IRQHandler, %function +SSP1_IRQHandler: + ldr r0,=SSP1_DriverIRQHandler + bx r0 + .size SSP1_IRQHandler, . - SSP1_IRQHandler + + .align 1 + .thumb_func + .weak SSP2_IRQHandler + .type SSP2_IRQHandler, %function +SSP2_IRQHandler: + ldr r0,=SSP2_DriverIRQHandler + bx r0 + .size SSP2_IRQHandler, . - SSP2_IRQHandler + + .align 1 + .thumb_func + .weak QSPI_IRQHandler + .type QSPI_IRQHandler, %function +QSPI_IRQHandler: + ldr r0,=QSPI_DriverIRQHandler + bx r0 + .size QSPI_IRQHandler, . - QSPI_IRQHandler + + .align 1 + .thumb_func + .weak UART0_IRQHandler + .type UART0_IRQHandler, %function +UART0_IRQHandler: + ldr r0,=UART0_DriverIRQHandler + bx r0 + .size UART0_IRQHandler, . - UART0_IRQHandler + + .align 1 + .thumb_func + .weak UART1_IRQHandler + .type UART1_IRQHandler, %function +UART1_IRQHandler: + ldr r0,=UART1_DriverIRQHandler + bx r0 + .size UART1_IRQHandler, . - UART1_IRQHandler + + .align 1 + .thumb_func + .weak UART2_IRQHandler + .type UART2_IRQHandler, %function +UART2_IRQHandler: + ldr r0,=UART2_DriverIRQHandler + bx r0 + .size UART2_IRQHandler, . - UART2_IRQHandler + + .align 1 + .thumb_func + .weak SDIO_IRQHandler + .type SDIO_IRQHandler, %function +SDIO_IRQHandler: + ldr r0,=SDIO_DriverIRQHandler + bx r0 + .size SDIO_IRQHandler, . - SDIO_IRQHandler + + +/* Macro to define default handlers. Default handler + * will be weak symbol and just dead loops. They can be + * overwritten by other handlers */ + .macro def_irq_handler handler_name + .weak \handler_name + .set \handler_name, DefaultISR + .endm + +/* Exception Handlers */ + def_irq_handler MemManage_Handler + def_irq_handler BusFault_Handler + def_irq_handler UsageFault_Handler + def_irq_handler DebugMon_Handler + def_irq_handler EXTPIN0_IRQHandler + def_irq_handler EXTPIN1_IRQHandler + def_irq_handler RTC_IRQHandler + def_irq_handler CRC_IRQHandler + def_irq_handler AES_IRQHandler + def_irq_handler I2C0_DriverIRQHandler + def_irq_handler I2C1_DriverIRQHandler + def_irq_handler Reserved23_IRQHandler + def_irq_handler DMAC_DriverIRQHandler + def_irq_handler GPIO_IRQHandler + def_irq_handler SSP0_DriverIRQHandler + def_irq_handler SSP1_DriverIRQHandler + def_irq_handler SSP2_DriverIRQHandler + def_irq_handler QSPI_DriverIRQHandler + def_irq_handler GPT0_IRQHandler + def_irq_handler GPT1_IRQHandler + def_irq_handler GPT2_IRQHandler + def_irq_handler GPT3_IRQHandler + def_irq_handler UART0_DriverIRQHandler + def_irq_handler UART1_DriverIRQHandler + def_irq_handler UART2_DriverIRQHandler + def_irq_handler Reserved37_IRQHandler + def_irq_handler WDT_IRQHandler + def_irq_handler Reserved39_IRQHandler + def_irq_handler ADC0_IRQHandler + def_irq_handler DAC_IRQHandler + def_irq_handler ACOMP_WAKEUP_IRQHandler + def_irq_handler ACOMP_IRQHandler + def_irq_handler SDIO_DriverIRQHandler + def_irq_handler USB_IRQHandler + def_irq_handler Reserved46_IRQHandler + def_irq_handler PLL_IRQHandler + def_irq_handler Reserved48_IRQHandler + def_irq_handler RC32M_IRQHandler + def_irq_handler GPIO_0_1_IRQHandler + def_irq_handler GPIO_2_3_IRQHandler + def_irq_handler GPIO_4_5_IRQHandler + def_irq_handler GPIO_6_7_IRQHandler + def_irq_handler GPIO_8_9_IRQHandler + def_irq_handler GPIO_10_11_IRQHandler + def_irq_handler GPIO_12_13_IRQHandler + def_irq_handler GPIO_14_15_IRQHandler + def_irq_handler GPIO_16_17_IRQHandler + def_irq_handler GPIO_18_19_IRQHandler + def_irq_handler GPIO_20_21_IRQHandler + def_irq_handler GPIO_22_23_IRQHandler + def_irq_handler GPIO_24_25_IRQHandler + def_irq_handler GPIO_26_27_IRQHandler + def_irq_handler GPIO_28_29_IRQHandler + def_irq_handler GPIO_30_31_IRQHandler + def_irq_handler GPIO_32_33_IRQHandler + def_irq_handler GPIO_34_35_IRQHandler + def_irq_handler GPIO_36_37_IRQHandler + def_irq_handler GPIO_38_39_IRQHandler + def_irq_handler GPIO_40_41_IRQHandler + def_irq_handler GPIO_42_43_IRQHandler + def_irq_handler GPIO_44_45_IRQHandler + def_irq_handler GPIO_46_47_IRQHandler + def_irq_handler GPIO_48_49_IRQHandler + def_irq_handler Reserved75_IRQHandler + def_irq_handler PMU_IRQHandler + def_irq_handler BRNOUT_IRQHandler + def_irq_handler WIFIWKUP_IRQHandler + + .end diff --git a/devices/88MW320/mcuxpresso/startup_88mw320.c b/devices/88MW320/mcuxpresso/startup_88mw320.c new file mode 100644 index 000000000..89406a0f4 --- /dev/null +++ b/devices/88MW320/mcuxpresso/startup_88mw320.c @@ -0,0 +1,720 @@ +//***************************************************************************** +// 88MW320 startup code for use with MCUXpresso IDE +// +// Version : 231220 +//***************************************************************************** +// +// Copyright 2016-2020 NXP +// All rights reserved. +// +// SPDX-License-Identifier: BSD-3-Clause +//***************************************************************************** + +#if defined (DEBUG) +#pragma GCC push_options +#pragma GCC optimize ("Og") +#endif // (DEBUG) + +#if defined (__cplusplus) +#ifdef __REDLIB__ +#error Redlib does not support C++ +#else +//***************************************************************************** +// +// The entry point for the C++ library startup +// +//***************************************************************************** +extern "C" { + extern void __libc_init_array(void); +} +#endif +#endif + +#define WEAK __attribute__ ((weak)) +#define WEAK_AV __attribute__ ((weak, section(".after_vectors"))) +#define ALIAS(f) __attribute__ ((weak, alias (#f))) + +//***************************************************************************** +#if defined (__cplusplus) +extern "C" { +#endif + +//***************************************************************************** +// Variable to store CRP value in. Will be placed automatically +// by the linker when "Enable Code Read Protect" selected. +// See crp.h header for more information +//***************************************************************************** +#include +__CRP const unsigned int CRP_WORD = CRP_NO_CRP ; + +//***************************************************************************** +// Declaration of external SystemInit function +//***************************************************************************** +#if defined (__USE_CMSIS) +extern void SystemInit(void); +#endif // (__USE_CMSIS) + +//***************************************************************************** +// Forward declaration of the core exception handlers. +// When the application defines a handler (with the same name), this will +// automatically take precedence over these weak definitions. +// If your application is a C++ one, then any interrupt handlers defined +// in C++ files within in your main application will need to have C linkage +// rather than C++ linkage. To do this, make sure that you are using extern "C" +// { .... } around the interrupt handler within your main application code. +//***************************************************************************** + void ResetISR(void); +WEAK void IntDefaultHandler(void); + +//***************************************************************************** +// Forward declaration of the application IRQ handlers. When the application +// defines a handler (with the same name), this will automatically take +// precedence over weak definitions below +//***************************************************************************** +WEAK void Reserved16_IRQHandler(void); +WEAK void Reserved17_IRQHandler(void); +WEAK void RTC_IRQHandler(void); +WEAK void CRC_IRQHandler(void); +WEAK void AES_IRQHandler(void); +WEAK void I2C0_IRQHandler(void); +WEAK void I2C1_IRQHandler(void); +WEAK void Reserved23_IRQHandler(void); +WEAK void DMAC_IRQHandler(void); +WEAK void GPIO_IRQHandler(void); +WEAK void SSP0_IRQHandler(void); +WEAK void SSP1_IRQHandler(void); +WEAK void SSP2_IRQHandler(void); +WEAK void QSPI_IRQHandler(void); +WEAK void GPT0_IRQHandler(void); +WEAK void GPT1_IRQHandler(void); +WEAK void GPT2_IRQHandler(void); +WEAK void GPT3_IRQHandler(void); +WEAK void UART0_IRQHandler(void); +WEAK void UART1_IRQHandler(void); +WEAK void UART2_IRQHandler(void); +WEAK void Reserved37_IRQHandler(void); +WEAK void WDT_IRQHandler(void); +WEAK void Reserved39_IRQHandler(void); +WEAK void ADC0_IRQHandler(void); +WEAK void DAC_IRQHandler(void); +WEAK void ACOMP_WAKEUP_IRQHandler(void); +WEAK void ACOMP_IRQHandler(void); +WEAK void SDIO_IRQHandler(void); +WEAK void USB_IRQHandler(void); +WEAK void Reserved46_IRQHandler(void); +WEAK void Reserved47_IRQHandler(void); +WEAK void Reserved48_IRQHandler(void); +WEAK void RC32M_IRQHandler(void); +WEAK void Reserved50_IRQHandler(void); +WEAK void Reserved51_IRQHandler(void); +WEAK void Reserved52_IRQHandler(void); +WEAK void Reserved53_IRQHandler(void); +WEAK void Reserved54_IRQHandler(void); +WEAK void Reserved55_IRQHandler(void); +WEAK void Reserved56_IRQHandler(void); +WEAK void Reserved57_IRQHandler(void); +WEAK void Reserved58_IRQHandler(void); +WEAK void Reserved59_IRQHandler(void); +WEAK void Reserved60_IRQHandler(void); +WEAK void Reserved61_IRQHandler(void); +WEAK void Reserved62_IRQHandler(void); +WEAK void Reserved63_IRQHandler(void); +WEAK void Reserved64_IRQHandler(void); +WEAK void Reserved65_IRQHandler(void); +WEAK void Reserved66_IRQHandler(void); +WEAK void Reserved67_IRQHandler(void); +WEAK void Reserved68_IRQHandler(void); +WEAK void Reserved69_IRQHandler(void); +WEAK void Reserved70_IRQHandler(void); +WEAK void Reserved71_IRQHandler(void); +WEAK void Reserved72_IRQHandler(void); +WEAK void Reserved73_IRQHandler(void); +WEAK void Reserved74_IRQHandler(void); +WEAK void Reserved75_IRQHandler(void); +WEAK void PMU_IRQHandler(void); + +//***************************************************************************** +// Forward declaration of the driver IRQ handlers. These are aliased +// to the IntDefaultHandler, which is a 'forever' loop. When the driver +// defines a handler (with the same name), this will automatically take +// precedence over these weak definitions +//***************************************************************************** +void Reserved16_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved17_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void RTC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void CRC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void AES_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void I2C0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void I2C1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved23_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void DMAC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPIO_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SSP0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SSP1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SSP2_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void QSPI_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT2_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT3_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void UART0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void UART1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void UART2_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved37_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void WDT_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved39_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void DAC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void ACOMP_WAKEUP_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void ACOMP_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SDIO_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void USB_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved46_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved47_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved48_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void RC32M_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved50_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved51_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved52_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved53_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved54_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved55_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved56_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved57_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved58_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved59_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved60_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved61_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved62_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved63_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved64_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved65_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved66_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved67_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved68_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved69_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved70_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved71_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved72_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved73_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved74_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved75_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void PMU_DriverIRQHandler(void) ALIAS(IntDefaultHandler); + +//***************************************************************************** +// The entry point for the application. +// __main() is the entry point for Redlib based applications +// main() is the entry point for Newlib based applications +//***************************************************************************** +#if defined (__REDLIB__) +extern void __main(void); +#endif +extern int main(void); + +//***************************************************************************** +// External declaration for the pointer to the stack top from the Linker Script +//***************************************************************************** +extern void _vStackTop(void); +//***************************************************************************** +#if defined (__cplusplus) +} // extern "C" +#endif +//***************************************************************************** +// The vector table. +// This relies on the linker script to place at correct location in memory. +//***************************************************************************** + + + +extern void (* const g_pfnVectors[])(void); +extern void * __Vectors __attribute__ ((alias ("g_pfnVectors"))); + +__attribute__ ((used, section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = { + // Core Level - CM4 + &_vStackTop, // The initial stack pointer + ResetISR, // The reset handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + + // Chip Level - 88MW320 + Reserved16_IRQHandler, // 16: Reserved interrupt + Reserved17_IRQHandler, // 17: Reserved interrupt + RTC_IRQHandler, // 18: RTC INT + CRC_IRQHandler, // 19: CRC INT + AES_IRQHandler, // 20: AES INT + I2C0_IRQHandler, // 21: I2C0 INT + I2C1_IRQHandler, // 22: I2C1 INT + Reserved23_IRQHandler, // 23: Reserved interrupt + DMAC_IRQHandler, // 24: DMAC INT + GPIO_IRQHandler, // 25: GPIO INT + SSP0_IRQHandler, // 26: SSP0 INT + SSP1_IRQHandler, // 27: SSP1 INT + SSP2_IRQHandler, // 28: SSP2 INT + QSPI_IRQHandler, // 29: QSPI INT + GPT0_IRQHandler, // 30: GPT0 INT + GPT1_IRQHandler, // 31: GPT1 INT + GPT2_IRQHandler, // 32: GPT2 INT + GPT3_IRQHandler, // 33: GPT3 INT + UART0_IRQHandler, // 34: UART0 INT + UART1_IRQHandler, // 35: UART1 INT + UART2_IRQHandler, // 36: UART2 INT + Reserved37_IRQHandler, // 37: Reserved interrupt + WDT_IRQHandler, // 38: WDT INT + Reserved39_IRQHandler, // 39: Reserved interrupt + ADC0_IRQHandler, // 40: ADC0 INT + DAC_IRQHandler, // 41: DAC INT + ACOMP_WAKEUP_IRQHandler, // 42: ACOMP Wake-up INT + ACOMP_IRQHandler, // 43: ACOMP INT + SDIO_IRQHandler, // 44: SDIO INT + USB_IRQHandler, // 45: USB INT + Reserved46_IRQHandler, // 46: Reserved interrupt + Reserved47_IRQHandler, // 47: Reserved interrupt + Reserved48_IRQHandler, // 48: Reserved interrupt + RC32M_IRQHandler, // 49: RC32M INT FUNC + Reserved50_IRQHandler, // 50: Reserved interrupt + Reserved51_IRQHandler, // 51: Reserved interrupt + Reserved52_IRQHandler, // 52: Reserved interrupt + Reserved53_IRQHandler, // 53: Reserved interrupt + Reserved54_IRQHandler, // 54: Reserved interrupt + Reserved55_IRQHandler, // 55: Reserved interrupt + Reserved56_IRQHandler, // 56: Reserved interrupt + Reserved57_IRQHandler, // 57: Reserved interrupt + Reserved58_IRQHandler, // 58: Reserved interrupt + Reserved59_IRQHandler, // 59: Reserved interrupt + Reserved60_IRQHandler, // 60: Reserved interrupt + Reserved61_IRQHandler, // 61: Reserved interrupt + Reserved62_IRQHandler, // 62: Reserved interrupt + Reserved63_IRQHandler, // 63: Reserved interrupt + Reserved64_IRQHandler, // 64: Reserved interrupt + Reserved65_IRQHandler, // 65: Reserved interrupt + Reserved66_IRQHandler, // 66: Reserved interrupt + Reserved67_IRQHandler, // 67: Reserved interrupt + Reserved68_IRQHandler, // 68: Reserved interrupt + Reserved69_IRQHandler, // 69: Reserved interrupt + Reserved70_IRQHandler, // 70: Reserved interrupt + Reserved71_IRQHandler, // 71: Reserved interrupt + Reserved72_IRQHandler, // 72: Reserved interrupt + Reserved73_IRQHandler, // 73: Reserved interrupt + Reserved74_IRQHandler, // 74: Reserved interrupt + Reserved75_IRQHandler, // 75: Reserved interrupt + PMU_IRQHandler, // 76: ULP COMP + + +}; /* End of g_pfnVectors */ + +//***************************************************************************** +// Functions to carry out the initialization of RW and BSS data sections. These +// are written as separate functions rather than being inlined within the +// ResetISR() function in order to cope with MCUs with multiple banks of +// memory. +//***************************************************************************** +__attribute__ ((section(".after_vectors.init_data"))) +void data_init(unsigned int romstart, unsigned int start, unsigned int len) { + unsigned int *pulDest = (unsigned int*) start; + unsigned int *pulSrc = (unsigned int*) romstart; + unsigned int loop; + for (loop = 0; loop < len; loop = loop + 4) + *pulDest++ = *pulSrc++; +} + +__attribute__ ((section(".after_vectors.init_bss"))) +void bss_init(unsigned int start, unsigned int len) { + unsigned int *pulDest = (unsigned int*) start; + unsigned int loop; + for (loop = 0; loop < len; loop = loop + 4) + *pulDest++ = 0; +} + +//***************************************************************************** +// The following symbols are constructs generated by the linker, indicating +// the location of various points in the "Global Section Table". This table is +// created by the linker via the Code Red managed linker script mechanism. It +// contains the load address, execution address and length of each RW data +// section and the execution and length of each BSS (zero initialized) section. +//***************************************************************************** +extern unsigned int __data_section_table; +extern unsigned int __data_section_table_end; +extern unsigned int __bss_section_table; +extern unsigned int __bss_section_table_end; + +//***************************************************************************** +// Reset entry point for your code. +// Sets up a simple runtime environment and initializes the C/C++ +// library. +//***************************************************************************** +__attribute__ ((section(".after_vectors.reset"))) +void ResetISR(void) { + + // Disable interrupts + __asm volatile ("cpsid i"); + + +#if defined (__USE_CMSIS) +// If __USE_CMSIS defined, then call CMSIS SystemInit code + SystemInit(); + +#endif // (__USE_CMSIS) + + // + // Copy the data sections from flash to SRAM. + // + unsigned int LoadAddr, ExeAddr, SectionLen; + unsigned int *SectionTableAddr; + + // Load base address of Global Section Table + SectionTableAddr = &__data_section_table; + + // Copy the data sections from flash to SRAM. + while (SectionTableAddr < &__data_section_table_end) { + LoadAddr = *SectionTableAddr++; + ExeAddr = *SectionTableAddr++; + SectionLen = *SectionTableAddr++; + data_init(LoadAddr, ExeAddr, SectionLen); + } + + // At this point, SectionTableAddr = &__bss_section_table; + // Zero fill the bss segment + while (SectionTableAddr < &__bss_section_table_end) { + ExeAddr = *SectionTableAddr++; + SectionLen = *SectionTableAddr++; + bss_init(ExeAddr, SectionLen); + } + +#if !defined (__USE_CMSIS) +// Assume that if __USE_CMSIS defined, then CMSIS SystemInit code +// will enable the FPU +#if defined (__VFP_FP__) && !defined (__SOFTFP__) + // + // Code to enable the Cortex-M4 FPU only included + // if appropriate build options have been selected. + // Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C) + // + // Read CPACR (located at address 0xE000ED88) + // Set bits 20-23 to enable CP10 and CP11 coprocessors + // Write back the modified value to the CPACR + asm volatile ("LDR.W R0, =0xE000ED88\n\t" + "LDR R1, [R0]\n\t" + "ORR R1, R1, #(0xF << 20)\n\t" + "STR R1, [R0]"); +#endif // (__VFP_FP__) && !(__SOFTFP__) +#endif // (__USE_CMSIS) + + +#if !defined (__USE_CMSIS) +// Assume that if __USE_CMSIS defined, then CMSIS SystemInit code +// will setup the VTOR register + + // Check to see if we are running the code from a non-zero + // address (eg RAM, external flash), in which case we need + // to modify the VTOR register to tell the CPU that the + // vector table is located at a non-0x0 address. + unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08; + if ((unsigned int *)g_pfnVectors!=(unsigned int *) 0x00000000) { + *pSCB_VTOR = (unsigned int)g_pfnVectors; + } +#endif // (__USE_CMSIS) +#if defined (__cplusplus) + // + // Call C++ library initialisation + // + __libc_init_array(); +#endif + + // Reenable interrupts + __asm volatile ("cpsie i"); + +#if defined (__REDLIB__) + // Call the Redlib library, which in turn calls main() + __main(); +#else + main(); +#endif + + // + // main() shouldn't return, but if it does, we'll just enter an infinite loop + // + while (1) { + ; + } +} + +//***************************************************************************** +// Default core exception handlers. Override the ones here by defining your own +// handler routines in your application code. +//***************************************************************************** +//***************************************************************************** +// Processor ends up here if an unexpected interrupt occurs or a specific +// handler is not present in the application code. +//***************************************************************************** +WEAK_AV void IntDefaultHandler(void) +{ while(1) {} +} + +//***************************************************************************** +// Default application exception handlers. Override the ones here by defining +// your own handler routines in your application code. These routines call +// driver exception handlers or IntDefaultHandler() if no driver exception +// handler is included. +//***************************************************************************** +WEAK void Reserved16_IRQHandler(void) +{ Reserved16_DriverIRQHandler(); +} + +WEAK void Reserved17_IRQHandler(void) +{ Reserved17_DriverIRQHandler(); +} + +WEAK void RTC_IRQHandler(void) +{ RTC_DriverIRQHandler(); +} + +WEAK void CRC_IRQHandler(void) +{ CRC_DriverIRQHandler(); +} + +WEAK void AES_IRQHandler(void) +{ AES_DriverIRQHandler(); +} + +WEAK void I2C0_IRQHandler(void) +{ I2C0_DriverIRQHandler(); +} + +WEAK void I2C1_IRQHandler(void) +{ I2C1_DriverIRQHandler(); +} + +WEAK void Reserved23_IRQHandler(void) +{ Reserved23_DriverIRQHandler(); +} + +WEAK void DMAC_IRQHandler(void) +{ DMAC_DriverIRQHandler(); +} + +WEAK void GPIO_IRQHandler(void) +{ GPIO_DriverIRQHandler(); +} + +WEAK void SSP0_IRQHandler(void) +{ SSP0_DriverIRQHandler(); +} + +WEAK void SSP1_IRQHandler(void) +{ SSP1_DriverIRQHandler(); +} + +WEAK void SSP2_IRQHandler(void) +{ SSP2_DriverIRQHandler(); +} + +WEAK void QSPI_IRQHandler(void) +{ QSPI_DriverIRQHandler(); +} + +WEAK void GPT0_IRQHandler(void) +{ GPT0_DriverIRQHandler(); +} + +WEAK void GPT1_IRQHandler(void) +{ GPT1_DriverIRQHandler(); +} + +WEAK void GPT2_IRQHandler(void) +{ GPT2_DriverIRQHandler(); +} + +WEAK void GPT3_IRQHandler(void) +{ GPT3_DriverIRQHandler(); +} + +WEAK void UART0_IRQHandler(void) +{ UART0_DriverIRQHandler(); +} + +WEAK void UART1_IRQHandler(void) +{ UART1_DriverIRQHandler(); +} + +WEAK void UART2_IRQHandler(void) +{ UART2_DriverIRQHandler(); +} + +WEAK void Reserved37_IRQHandler(void) +{ Reserved37_DriverIRQHandler(); +} + +WEAK void WDT_IRQHandler(void) +{ WDT_DriverIRQHandler(); +} + +WEAK void Reserved39_IRQHandler(void) +{ Reserved39_DriverIRQHandler(); +} + +WEAK void ADC0_IRQHandler(void) +{ ADC0_DriverIRQHandler(); +} + +WEAK void DAC_IRQHandler(void) +{ DAC_DriverIRQHandler(); +} + +WEAK void ACOMP_WAKEUP_IRQHandler(void) +{ ACOMP_WAKEUP_DriverIRQHandler(); +} + +WEAK void ACOMP_IRQHandler(void) +{ ACOMP_DriverIRQHandler(); +} + +WEAK void SDIO_IRQHandler(void) +{ SDIO_DriverIRQHandler(); +} + +WEAK void USB_IRQHandler(void) +{ USB_DriverIRQHandler(); +} + +WEAK void Reserved46_IRQHandler(void) +{ Reserved46_DriverIRQHandler(); +} + +WEAK void Reserved47_IRQHandler(void) +{ Reserved47_DriverIRQHandler(); +} + +WEAK void Reserved48_IRQHandler(void) +{ Reserved48_DriverIRQHandler(); +} + +WEAK void RC32M_IRQHandler(void) +{ RC32M_DriverIRQHandler(); +} + +WEAK void Reserved50_IRQHandler(void) +{ Reserved50_DriverIRQHandler(); +} + +WEAK void Reserved51_IRQHandler(void) +{ Reserved51_DriverIRQHandler(); +} + +WEAK void Reserved52_IRQHandler(void) +{ Reserved52_DriverIRQHandler(); +} + +WEAK void Reserved53_IRQHandler(void) +{ Reserved53_DriverIRQHandler(); +} + +WEAK void Reserved54_IRQHandler(void) +{ Reserved54_DriverIRQHandler(); +} + +WEAK void Reserved55_IRQHandler(void) +{ Reserved55_DriverIRQHandler(); +} + +WEAK void Reserved56_IRQHandler(void) +{ Reserved56_DriverIRQHandler(); +} + +WEAK void Reserved57_IRQHandler(void) +{ Reserved57_DriverIRQHandler(); +} + +WEAK void Reserved58_IRQHandler(void) +{ Reserved58_DriverIRQHandler(); +} + +WEAK void Reserved59_IRQHandler(void) +{ Reserved59_DriverIRQHandler(); +} + +WEAK void Reserved60_IRQHandler(void) +{ Reserved60_DriverIRQHandler(); +} + +WEAK void Reserved61_IRQHandler(void) +{ Reserved61_DriverIRQHandler(); +} + +WEAK void Reserved62_IRQHandler(void) +{ Reserved62_DriverIRQHandler(); +} + +WEAK void Reserved63_IRQHandler(void) +{ Reserved63_DriverIRQHandler(); +} + +WEAK void Reserved64_IRQHandler(void) +{ Reserved64_DriverIRQHandler(); +} + +WEAK void Reserved65_IRQHandler(void) +{ Reserved65_DriverIRQHandler(); +} + +WEAK void Reserved66_IRQHandler(void) +{ Reserved66_DriverIRQHandler(); +} + +WEAK void Reserved67_IRQHandler(void) +{ Reserved67_DriverIRQHandler(); +} + +WEAK void Reserved68_IRQHandler(void) +{ Reserved68_DriverIRQHandler(); +} + +WEAK void Reserved69_IRQHandler(void) +{ Reserved69_DriverIRQHandler(); +} + +WEAK void Reserved70_IRQHandler(void) +{ Reserved70_DriverIRQHandler(); +} + +WEAK void Reserved71_IRQHandler(void) +{ Reserved71_DriverIRQHandler(); +} + +WEAK void Reserved72_IRQHandler(void) +{ Reserved72_DriverIRQHandler(); +} + +WEAK void Reserved73_IRQHandler(void) +{ Reserved73_DriverIRQHandler(); +} + +WEAK void Reserved74_IRQHandler(void) +{ Reserved74_DriverIRQHandler(); +} + +WEAK void Reserved75_IRQHandler(void) +{ Reserved75_DriverIRQHandler(); +} + +WEAK void PMU_IRQHandler(void) +{ PMU_DriverIRQHandler(); +} + +//***************************************************************************** + +#if defined (DEBUG) +#pragma GCC pop_options +#endif // (DEBUG) diff --git a/devices/88MW320/mcuxpresso/startup_88mw320.cpp b/devices/88MW320/mcuxpresso/startup_88mw320.cpp new file mode 100644 index 000000000..89406a0f4 --- /dev/null +++ b/devices/88MW320/mcuxpresso/startup_88mw320.cpp @@ -0,0 +1,720 @@ +//***************************************************************************** +// 88MW320 startup code for use with MCUXpresso IDE +// +// Version : 231220 +//***************************************************************************** +// +// Copyright 2016-2020 NXP +// All rights reserved. +// +// SPDX-License-Identifier: BSD-3-Clause +//***************************************************************************** + +#if defined (DEBUG) +#pragma GCC push_options +#pragma GCC optimize ("Og") +#endif // (DEBUG) + +#if defined (__cplusplus) +#ifdef __REDLIB__ +#error Redlib does not support C++ +#else +//***************************************************************************** +// +// The entry point for the C++ library startup +// +//***************************************************************************** +extern "C" { + extern void __libc_init_array(void); +} +#endif +#endif + +#define WEAK __attribute__ ((weak)) +#define WEAK_AV __attribute__ ((weak, section(".after_vectors"))) +#define ALIAS(f) __attribute__ ((weak, alias (#f))) + +//***************************************************************************** +#if defined (__cplusplus) +extern "C" { +#endif + +//***************************************************************************** +// Variable to store CRP value in. Will be placed automatically +// by the linker when "Enable Code Read Protect" selected. +// See crp.h header for more information +//***************************************************************************** +#include +__CRP const unsigned int CRP_WORD = CRP_NO_CRP ; + +//***************************************************************************** +// Declaration of external SystemInit function +//***************************************************************************** +#if defined (__USE_CMSIS) +extern void SystemInit(void); +#endif // (__USE_CMSIS) + +//***************************************************************************** +// Forward declaration of the core exception handlers. +// When the application defines a handler (with the same name), this will +// automatically take precedence over these weak definitions. +// If your application is a C++ one, then any interrupt handlers defined +// in C++ files within in your main application will need to have C linkage +// rather than C++ linkage. To do this, make sure that you are using extern "C" +// { .... } around the interrupt handler within your main application code. +//***************************************************************************** + void ResetISR(void); +WEAK void IntDefaultHandler(void); + +//***************************************************************************** +// Forward declaration of the application IRQ handlers. When the application +// defines a handler (with the same name), this will automatically take +// precedence over weak definitions below +//***************************************************************************** +WEAK void Reserved16_IRQHandler(void); +WEAK void Reserved17_IRQHandler(void); +WEAK void RTC_IRQHandler(void); +WEAK void CRC_IRQHandler(void); +WEAK void AES_IRQHandler(void); +WEAK void I2C0_IRQHandler(void); +WEAK void I2C1_IRQHandler(void); +WEAK void Reserved23_IRQHandler(void); +WEAK void DMAC_IRQHandler(void); +WEAK void GPIO_IRQHandler(void); +WEAK void SSP0_IRQHandler(void); +WEAK void SSP1_IRQHandler(void); +WEAK void SSP2_IRQHandler(void); +WEAK void QSPI_IRQHandler(void); +WEAK void GPT0_IRQHandler(void); +WEAK void GPT1_IRQHandler(void); +WEAK void GPT2_IRQHandler(void); +WEAK void GPT3_IRQHandler(void); +WEAK void UART0_IRQHandler(void); +WEAK void UART1_IRQHandler(void); +WEAK void UART2_IRQHandler(void); +WEAK void Reserved37_IRQHandler(void); +WEAK void WDT_IRQHandler(void); +WEAK void Reserved39_IRQHandler(void); +WEAK void ADC0_IRQHandler(void); +WEAK void DAC_IRQHandler(void); +WEAK void ACOMP_WAKEUP_IRQHandler(void); +WEAK void ACOMP_IRQHandler(void); +WEAK void SDIO_IRQHandler(void); +WEAK void USB_IRQHandler(void); +WEAK void Reserved46_IRQHandler(void); +WEAK void Reserved47_IRQHandler(void); +WEAK void Reserved48_IRQHandler(void); +WEAK void RC32M_IRQHandler(void); +WEAK void Reserved50_IRQHandler(void); +WEAK void Reserved51_IRQHandler(void); +WEAK void Reserved52_IRQHandler(void); +WEAK void Reserved53_IRQHandler(void); +WEAK void Reserved54_IRQHandler(void); +WEAK void Reserved55_IRQHandler(void); +WEAK void Reserved56_IRQHandler(void); +WEAK void Reserved57_IRQHandler(void); +WEAK void Reserved58_IRQHandler(void); +WEAK void Reserved59_IRQHandler(void); +WEAK void Reserved60_IRQHandler(void); +WEAK void Reserved61_IRQHandler(void); +WEAK void Reserved62_IRQHandler(void); +WEAK void Reserved63_IRQHandler(void); +WEAK void Reserved64_IRQHandler(void); +WEAK void Reserved65_IRQHandler(void); +WEAK void Reserved66_IRQHandler(void); +WEAK void Reserved67_IRQHandler(void); +WEAK void Reserved68_IRQHandler(void); +WEAK void Reserved69_IRQHandler(void); +WEAK void Reserved70_IRQHandler(void); +WEAK void Reserved71_IRQHandler(void); +WEAK void Reserved72_IRQHandler(void); +WEAK void Reserved73_IRQHandler(void); +WEAK void Reserved74_IRQHandler(void); +WEAK void Reserved75_IRQHandler(void); +WEAK void PMU_IRQHandler(void); + +//***************************************************************************** +// Forward declaration of the driver IRQ handlers. These are aliased +// to the IntDefaultHandler, which is a 'forever' loop. When the driver +// defines a handler (with the same name), this will automatically take +// precedence over these weak definitions +//***************************************************************************** +void Reserved16_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved17_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void RTC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void CRC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void AES_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void I2C0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void I2C1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved23_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void DMAC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPIO_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SSP0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SSP1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SSP2_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void QSPI_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT2_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void GPT3_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void UART0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void UART1_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void UART2_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved37_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void WDT_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved39_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void ADC0_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void DAC_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void ACOMP_WAKEUP_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void ACOMP_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void SDIO_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void USB_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved46_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved47_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved48_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void RC32M_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved50_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved51_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved52_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved53_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved54_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved55_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved56_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved57_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved58_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved59_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved60_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved61_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved62_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved63_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved64_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved65_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved66_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved67_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved68_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved69_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved70_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved71_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved72_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved73_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved74_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void Reserved75_DriverIRQHandler(void) ALIAS(IntDefaultHandler); +void PMU_DriverIRQHandler(void) ALIAS(IntDefaultHandler); + +//***************************************************************************** +// The entry point for the application. +// __main() is the entry point for Redlib based applications +// main() is the entry point for Newlib based applications +//***************************************************************************** +#if defined (__REDLIB__) +extern void __main(void); +#endif +extern int main(void); + +//***************************************************************************** +// External declaration for the pointer to the stack top from the Linker Script +//***************************************************************************** +extern void _vStackTop(void); +//***************************************************************************** +#if defined (__cplusplus) +} // extern "C" +#endif +//***************************************************************************** +// The vector table. +// This relies on the linker script to place at correct location in memory. +//***************************************************************************** + + + +extern void (* const g_pfnVectors[])(void); +extern void * __Vectors __attribute__ ((alias ("g_pfnVectors"))); + +__attribute__ ((used, section(".isr_vector"))) +void (* const g_pfnVectors[])(void) = { + // Core Level - CM4 + &_vStackTop, // The initial stack pointer + ResetISR, // The reset handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + + // Chip Level - 88MW320 + Reserved16_IRQHandler, // 16: Reserved interrupt + Reserved17_IRQHandler, // 17: Reserved interrupt + RTC_IRQHandler, // 18: RTC INT + CRC_IRQHandler, // 19: CRC INT + AES_IRQHandler, // 20: AES INT + I2C0_IRQHandler, // 21: I2C0 INT + I2C1_IRQHandler, // 22: I2C1 INT + Reserved23_IRQHandler, // 23: Reserved interrupt + DMAC_IRQHandler, // 24: DMAC INT + GPIO_IRQHandler, // 25: GPIO INT + SSP0_IRQHandler, // 26: SSP0 INT + SSP1_IRQHandler, // 27: SSP1 INT + SSP2_IRQHandler, // 28: SSP2 INT + QSPI_IRQHandler, // 29: QSPI INT + GPT0_IRQHandler, // 30: GPT0 INT + GPT1_IRQHandler, // 31: GPT1 INT + GPT2_IRQHandler, // 32: GPT2 INT + GPT3_IRQHandler, // 33: GPT3 INT + UART0_IRQHandler, // 34: UART0 INT + UART1_IRQHandler, // 35: UART1 INT + UART2_IRQHandler, // 36: UART2 INT + Reserved37_IRQHandler, // 37: Reserved interrupt + WDT_IRQHandler, // 38: WDT INT + Reserved39_IRQHandler, // 39: Reserved interrupt + ADC0_IRQHandler, // 40: ADC0 INT + DAC_IRQHandler, // 41: DAC INT + ACOMP_WAKEUP_IRQHandler, // 42: ACOMP Wake-up INT + ACOMP_IRQHandler, // 43: ACOMP INT + SDIO_IRQHandler, // 44: SDIO INT + USB_IRQHandler, // 45: USB INT + Reserved46_IRQHandler, // 46: Reserved interrupt + Reserved47_IRQHandler, // 47: Reserved interrupt + Reserved48_IRQHandler, // 48: Reserved interrupt + RC32M_IRQHandler, // 49: RC32M INT FUNC + Reserved50_IRQHandler, // 50: Reserved interrupt + Reserved51_IRQHandler, // 51: Reserved interrupt + Reserved52_IRQHandler, // 52: Reserved interrupt + Reserved53_IRQHandler, // 53: Reserved interrupt + Reserved54_IRQHandler, // 54: Reserved interrupt + Reserved55_IRQHandler, // 55: Reserved interrupt + Reserved56_IRQHandler, // 56: Reserved interrupt + Reserved57_IRQHandler, // 57: Reserved interrupt + Reserved58_IRQHandler, // 58: Reserved interrupt + Reserved59_IRQHandler, // 59: Reserved interrupt + Reserved60_IRQHandler, // 60: Reserved interrupt + Reserved61_IRQHandler, // 61: Reserved interrupt + Reserved62_IRQHandler, // 62: Reserved interrupt + Reserved63_IRQHandler, // 63: Reserved interrupt + Reserved64_IRQHandler, // 64: Reserved interrupt + Reserved65_IRQHandler, // 65: Reserved interrupt + Reserved66_IRQHandler, // 66: Reserved interrupt + Reserved67_IRQHandler, // 67: Reserved interrupt + Reserved68_IRQHandler, // 68: Reserved interrupt + Reserved69_IRQHandler, // 69: Reserved interrupt + Reserved70_IRQHandler, // 70: Reserved interrupt + Reserved71_IRQHandler, // 71: Reserved interrupt + Reserved72_IRQHandler, // 72: Reserved interrupt + Reserved73_IRQHandler, // 73: Reserved interrupt + Reserved74_IRQHandler, // 74: Reserved interrupt + Reserved75_IRQHandler, // 75: Reserved interrupt + PMU_IRQHandler, // 76: ULP COMP + + +}; /* End of g_pfnVectors */ + +//***************************************************************************** +// Functions to carry out the initialization of RW and BSS data sections. These +// are written as separate functions rather than being inlined within the +// ResetISR() function in order to cope with MCUs with multiple banks of +// memory. +//***************************************************************************** +__attribute__ ((section(".after_vectors.init_data"))) +void data_init(unsigned int romstart, unsigned int start, unsigned int len) { + unsigned int *pulDest = (unsigned int*) start; + unsigned int *pulSrc = (unsigned int*) romstart; + unsigned int loop; + for (loop = 0; loop < len; loop = loop + 4) + *pulDest++ = *pulSrc++; +} + +__attribute__ ((section(".after_vectors.init_bss"))) +void bss_init(unsigned int start, unsigned int len) { + unsigned int *pulDest = (unsigned int*) start; + unsigned int loop; + for (loop = 0; loop < len; loop = loop + 4) + *pulDest++ = 0; +} + +//***************************************************************************** +// The following symbols are constructs generated by the linker, indicating +// the location of various points in the "Global Section Table". This table is +// created by the linker via the Code Red managed linker script mechanism. It +// contains the load address, execution address and length of each RW data +// section and the execution and length of each BSS (zero initialized) section. +//***************************************************************************** +extern unsigned int __data_section_table; +extern unsigned int __data_section_table_end; +extern unsigned int __bss_section_table; +extern unsigned int __bss_section_table_end; + +//***************************************************************************** +// Reset entry point for your code. +// Sets up a simple runtime environment and initializes the C/C++ +// library. +//***************************************************************************** +__attribute__ ((section(".after_vectors.reset"))) +void ResetISR(void) { + + // Disable interrupts + __asm volatile ("cpsid i"); + + +#if defined (__USE_CMSIS) +// If __USE_CMSIS defined, then call CMSIS SystemInit code + SystemInit(); + +#endif // (__USE_CMSIS) + + // + // Copy the data sections from flash to SRAM. + // + unsigned int LoadAddr, ExeAddr, SectionLen; + unsigned int *SectionTableAddr; + + // Load base address of Global Section Table + SectionTableAddr = &__data_section_table; + + // Copy the data sections from flash to SRAM. + while (SectionTableAddr < &__data_section_table_end) { + LoadAddr = *SectionTableAddr++; + ExeAddr = *SectionTableAddr++; + SectionLen = *SectionTableAddr++; + data_init(LoadAddr, ExeAddr, SectionLen); + } + + // At this point, SectionTableAddr = &__bss_section_table; + // Zero fill the bss segment + while (SectionTableAddr < &__bss_section_table_end) { + ExeAddr = *SectionTableAddr++; + SectionLen = *SectionTableAddr++; + bss_init(ExeAddr, SectionLen); + } + +#if !defined (__USE_CMSIS) +// Assume that if __USE_CMSIS defined, then CMSIS SystemInit code +// will enable the FPU +#if defined (__VFP_FP__) && !defined (__SOFTFP__) + // + // Code to enable the Cortex-M4 FPU only included + // if appropriate build options have been selected. + // Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C) + // + // Read CPACR (located at address 0xE000ED88) + // Set bits 20-23 to enable CP10 and CP11 coprocessors + // Write back the modified value to the CPACR + asm volatile ("LDR.W R0, =0xE000ED88\n\t" + "LDR R1, [R0]\n\t" + "ORR R1, R1, #(0xF << 20)\n\t" + "STR R1, [R0]"); +#endif // (__VFP_FP__) && !(__SOFTFP__) +#endif // (__USE_CMSIS) + + +#if !defined (__USE_CMSIS) +// Assume that if __USE_CMSIS defined, then CMSIS SystemInit code +// will setup the VTOR register + + // Check to see if we are running the code from a non-zero + // address (eg RAM, external flash), in which case we need + // to modify the VTOR register to tell the CPU that the + // vector table is located at a non-0x0 address. + unsigned int * pSCB_VTOR = (unsigned int *) 0xE000ED08; + if ((unsigned int *)g_pfnVectors!=(unsigned int *) 0x00000000) { + *pSCB_VTOR = (unsigned int)g_pfnVectors; + } +#endif // (__USE_CMSIS) +#if defined (__cplusplus) + // + // Call C++ library initialisation + // + __libc_init_array(); +#endif + + // Reenable interrupts + __asm volatile ("cpsie i"); + +#if defined (__REDLIB__) + // Call the Redlib library, which in turn calls main() + __main(); +#else + main(); +#endif + + // + // main() shouldn't return, but if it does, we'll just enter an infinite loop + // + while (1) { + ; + } +} + +//***************************************************************************** +// Default core exception handlers. Override the ones here by defining your own +// handler routines in your application code. +//***************************************************************************** +//***************************************************************************** +// Processor ends up here if an unexpected interrupt occurs or a specific +// handler is not present in the application code. +//***************************************************************************** +WEAK_AV void IntDefaultHandler(void) +{ while(1) {} +} + +//***************************************************************************** +// Default application exception handlers. Override the ones here by defining +// your own handler routines in your application code. These routines call +// driver exception handlers or IntDefaultHandler() if no driver exception +// handler is included. +//***************************************************************************** +WEAK void Reserved16_IRQHandler(void) +{ Reserved16_DriverIRQHandler(); +} + +WEAK void Reserved17_IRQHandler(void) +{ Reserved17_DriverIRQHandler(); +} + +WEAK void RTC_IRQHandler(void) +{ RTC_DriverIRQHandler(); +} + +WEAK void CRC_IRQHandler(void) +{ CRC_DriverIRQHandler(); +} + +WEAK void AES_IRQHandler(void) +{ AES_DriverIRQHandler(); +} + +WEAK void I2C0_IRQHandler(void) +{ I2C0_DriverIRQHandler(); +} + +WEAK void I2C1_IRQHandler(void) +{ I2C1_DriverIRQHandler(); +} + +WEAK void Reserved23_IRQHandler(void) +{ Reserved23_DriverIRQHandler(); +} + +WEAK void DMAC_IRQHandler(void) +{ DMAC_DriverIRQHandler(); +} + +WEAK void GPIO_IRQHandler(void) +{ GPIO_DriverIRQHandler(); +} + +WEAK void SSP0_IRQHandler(void) +{ SSP0_DriverIRQHandler(); +} + +WEAK void SSP1_IRQHandler(void) +{ SSP1_DriverIRQHandler(); +} + +WEAK void SSP2_IRQHandler(void) +{ SSP2_DriverIRQHandler(); +} + +WEAK void QSPI_IRQHandler(void) +{ QSPI_DriverIRQHandler(); +} + +WEAK void GPT0_IRQHandler(void) +{ GPT0_DriverIRQHandler(); +} + +WEAK void GPT1_IRQHandler(void) +{ GPT1_DriverIRQHandler(); +} + +WEAK void GPT2_IRQHandler(void) +{ GPT2_DriverIRQHandler(); +} + +WEAK void GPT3_IRQHandler(void) +{ GPT3_DriverIRQHandler(); +} + +WEAK void UART0_IRQHandler(void) +{ UART0_DriverIRQHandler(); +} + +WEAK void UART1_IRQHandler(void) +{ UART1_DriverIRQHandler(); +} + +WEAK void UART2_IRQHandler(void) +{ UART2_DriverIRQHandler(); +} + +WEAK void Reserved37_IRQHandler(void) +{ Reserved37_DriverIRQHandler(); +} + +WEAK void WDT_IRQHandler(void) +{ WDT_DriverIRQHandler(); +} + +WEAK void Reserved39_IRQHandler(void) +{ Reserved39_DriverIRQHandler(); +} + +WEAK void ADC0_IRQHandler(void) +{ ADC0_DriverIRQHandler(); +} + +WEAK void DAC_IRQHandler(void) +{ DAC_DriverIRQHandler(); +} + +WEAK void ACOMP_WAKEUP_IRQHandler(void) +{ ACOMP_WAKEUP_DriverIRQHandler(); +} + +WEAK void ACOMP_IRQHandler(void) +{ ACOMP_DriverIRQHandler(); +} + +WEAK void SDIO_IRQHandler(void) +{ SDIO_DriverIRQHandler(); +} + +WEAK void USB_IRQHandler(void) +{ USB_DriverIRQHandler(); +} + +WEAK void Reserved46_IRQHandler(void) +{ Reserved46_DriverIRQHandler(); +} + +WEAK void Reserved47_IRQHandler(void) +{ Reserved47_DriverIRQHandler(); +} + +WEAK void Reserved48_IRQHandler(void) +{ Reserved48_DriverIRQHandler(); +} + +WEAK void RC32M_IRQHandler(void) +{ RC32M_DriverIRQHandler(); +} + +WEAK void Reserved50_IRQHandler(void) +{ Reserved50_DriverIRQHandler(); +} + +WEAK void Reserved51_IRQHandler(void) +{ Reserved51_DriverIRQHandler(); +} + +WEAK void Reserved52_IRQHandler(void) +{ Reserved52_DriverIRQHandler(); +} + +WEAK void Reserved53_IRQHandler(void) +{ Reserved53_DriverIRQHandler(); +} + +WEAK void Reserved54_IRQHandler(void) +{ Reserved54_DriverIRQHandler(); +} + +WEAK void Reserved55_IRQHandler(void) +{ Reserved55_DriverIRQHandler(); +} + +WEAK void Reserved56_IRQHandler(void) +{ Reserved56_DriverIRQHandler(); +} + +WEAK void Reserved57_IRQHandler(void) +{ Reserved57_DriverIRQHandler(); +} + +WEAK void Reserved58_IRQHandler(void) +{ Reserved58_DriverIRQHandler(); +} + +WEAK void Reserved59_IRQHandler(void) +{ Reserved59_DriverIRQHandler(); +} + +WEAK void Reserved60_IRQHandler(void) +{ Reserved60_DriverIRQHandler(); +} + +WEAK void Reserved61_IRQHandler(void) +{ Reserved61_DriverIRQHandler(); +} + +WEAK void Reserved62_IRQHandler(void) +{ Reserved62_DriverIRQHandler(); +} + +WEAK void Reserved63_IRQHandler(void) +{ Reserved63_DriverIRQHandler(); +} + +WEAK void Reserved64_IRQHandler(void) +{ Reserved64_DriverIRQHandler(); +} + +WEAK void Reserved65_IRQHandler(void) +{ Reserved65_DriverIRQHandler(); +} + +WEAK void Reserved66_IRQHandler(void) +{ Reserved66_DriverIRQHandler(); +} + +WEAK void Reserved67_IRQHandler(void) +{ Reserved67_DriverIRQHandler(); +} + +WEAK void Reserved68_IRQHandler(void) +{ Reserved68_DriverIRQHandler(); +} + +WEAK void Reserved69_IRQHandler(void) +{ Reserved69_DriverIRQHandler(); +} + +WEAK void Reserved70_IRQHandler(void) +{ Reserved70_DriverIRQHandler(); +} + +WEAK void Reserved71_IRQHandler(void) +{ Reserved71_DriverIRQHandler(); +} + +WEAK void Reserved72_IRQHandler(void) +{ Reserved72_DriverIRQHandler(); +} + +WEAK void Reserved73_IRQHandler(void) +{ Reserved73_DriverIRQHandler(); +} + +WEAK void Reserved74_IRQHandler(void) +{ Reserved74_DriverIRQHandler(); +} + +WEAK void Reserved75_IRQHandler(void) +{ Reserved75_DriverIRQHandler(); +} + +WEAK void PMU_IRQHandler(void) +{ PMU_DriverIRQHandler(); +} + +//***************************************************************************** + +#if defined (DEBUG) +#pragma GCC pop_options +#endif // (DEBUG) diff --git a/devices/88MW320/project_template/board.c b/devices/88MW320/project_template/board.c new file mode 100644 index 000000000..30bda70e0 --- /dev/null +++ b/devices/88MW320/project_template/board.c @@ -0,0 +1,24 @@ +/* + * Copyright 201, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file board.c + * @brief Board initialization file. + */ + +/* This is an empty template for board specific configuration.*/ + +#include +#include "board.h" + +/** + * @brief Set up and initialize all required blocks and functions related to the board hardware. + */ +void BOARD_InitDebugConsole(void) +{ + /* The user initialization should be placed here */ +} diff --git a/devices/88MW320/project_template/board.h b/devices/88MW320/project_template/board.h new file mode 100644 index 000000000..b3b5ef0f5 --- /dev/null +++ b/devices/88MW320/project_template/board.h @@ -0,0 +1,36 @@ +/* + * Copyright 2017, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file board.h + * @brief Board initialization header file. + */ + +/* This is an empty template for board specific configuration.*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +/** + * @brief The board name + */ +#define BOARD_NAME "board" + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/** + * @brief Initialize board specific settings. + */ +void BOARD_InitDebugConsole(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif /* _BOARD_H_ */ diff --git a/devices/88MW320/project_template/clock_config.c b/devices/88MW320/project_template/clock_config.c new file mode 100644 index 000000000..8e5b03871 --- /dev/null +++ b/devices/88MW320/project_template/clock_config.c @@ -0,0 +1,32 @@ +/* + * Copyright 2017, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* +!!GlobalInfo +product: Clocks v4.0 +* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ + +/** + * @file clock_config.c + * @brief Board clocks initialization file. + */ + +/* This is a empty template for board specific configuration.*/ + +#include "fsl_common.h" +#include "clock_config.h" + +/** + * @brief Set up and initialize all required blocks and functions related to the board hardware. + */ +void BOARD_InitBootClocks(void) +{ + /* The user initialization should be placed here */ + + /* Read core clock setting. */ + SystemCoreClockUpdate(); +} diff --git a/devices/88MW320/project_template/clock_config.h b/devices/88MW320/project_template/clock_config.h new file mode 100644 index 000000000..b706c0dd1 --- /dev/null +++ b/devices/88MW320/project_template/clock_config.h @@ -0,0 +1,31 @@ +/* + * Copyright 2017, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file clock_config.h + * @brief Board clocks header file. + */ + +/* This is an empty template for board specific configuration.*/ + +#ifndef _CLOCK_CONFIG_H_ +#define _CLOCK_CONFIG_H_ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/** + * @brief Initialize board clocks. + */ +void BOARD_InitBootClocks(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif /* _CLOCK_CONFIG_H_ */ diff --git a/devices/88MW320/project_template/peripherals.c b/devices/88MW320/project_template/peripherals.c new file mode 100644 index 000000000..118cdef04 --- /dev/null +++ b/devices/88MW320/project_template/peripherals.c @@ -0,0 +1,28 @@ +/* + * Copyright 2017, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* +!!GlobalInfo +product: Peripherals v1.0 +* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/ + +/** + * @file peripherals.c + * @brief Peripherals initialization file. + */ + +/* This is an empty template for board specific configuration.*/ + +#include "peripherals.h" + +/** + * @brief Set up and initialize all required blocks and functions related to the peripherals hardware. + */ +void BOARD_InitBootPeripherals(void) +{ + /* The user initialization should be placed here */ +} diff --git a/devices/88MW320/project_template/peripherals.h b/devices/88MW320/project_template/peripherals.h new file mode 100644 index 000000000..9180d4d63 --- /dev/null +++ b/devices/88MW320/project_template/peripherals.h @@ -0,0 +1,31 @@ +/* + * Copyright 2017, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file peripherals.h + * @brief Peripherals initialization header file. + */ + +/* This is an empty template for board specific configuration.*/ + +#ifndef _PERIPHERALS_H_ +#define _PERIPHERALS_H_ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/** + * @brief Initialize peripherals specific settings. + */ +void BOARD_InitBootPeripherals(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif /* _PERIPHERALS_H_ */ diff --git a/devices/88MW320/project_template/pin_mux.c b/devices/88MW320/project_template/pin_mux.c new file mode 100644 index 000000000..010927e2f --- /dev/null +++ b/devices/88MW320/project_template/pin_mux.c @@ -0,0 +1,27 @@ +/* + * Copyright 2017, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* TEXT BELOW IS USED AS SETTING FOR TOOLS ************************************* +!!GlobalInfo +product: Pins v4.0 +* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********/ + +/** + * @file pin_mux.c + * @brief Board pins file. + */ + +/* This is an empty template for board specific configuration.*/ + +#include "pin_mux.h" + +/** + * @brief Set up and initialize all required blocks and functions related to the board hardware. + */ +void BOARD_InitBootPins(void) { + /* The user initialization should be placed here */ +} diff --git a/devices/88MW320/project_template/pin_mux.h b/devices/88MW320/project_template/pin_mux.h new file mode 100644 index 000000000..13f807dbb --- /dev/null +++ b/devices/88MW320/project_template/pin_mux.h @@ -0,0 +1,33 @@ +/* + * Copyright 2017, NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file pin_mux.h + * @brief Board pins header file. + */ + +/* This is an empty template for board specific configuration.*/ + +#ifndef _PIN_MUX_H_ +#define _PIN_MUX_H_ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/** + * @brief Initialize board pins. + */ +void BOARD_InitBootPins(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif /* _PIN_MUX_H_ */ + + diff --git a/devices/88MW320/system_88MW320.c b/devices/88MW320/system_88MW320.c new file mode 100644 index 000000000..3bab4b114 --- /dev/null +++ b/devices/88MW320/system_88MW320.c @@ -0,0 +1,88 @@ +/* +** ################################################################### +** Processor: 88MW320_A0_NAPC +** Compilers: GNU C Compiler +** IAR ANSI C/C++ Compiler for ARM +** Keil ARM C/C++ Compiler +** MCUXpresso Compiler +** +** Reference manual: 88MW320-88MW322, Rev.3, July 2020 +** Version: rev. 1.0, 2020-09-07 +** Build: b201223 +** +** Abstract: +** Provides a system configuration function and a global variable that +** contains the system frequency. It configures the device and initializes +** the oscillator (PLL) that is part of the microcontroller device. +** +** Copyright 2016 Freescale Semiconductor, Inc. +** Copyright 2016-2020 NXP +** All rights reserved. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** http: www.nxp.com +** mail: support@nxp.com +** +** Revisions: +** - rev. 1.0 (2020-09-07) +** Initial version. +** +** ################################################################### +*/ + +/*! + * @file 88MW320 + * @version 1.0 + * @date 231220 + * @brief Device specific configuration file for 88MW320 (implementation file) + * + * Provides a system configuration function and a global variable that contains + * the system frequency. It configures the device and initializes the oscillator + * (PLL) that is part of the microcontroller device. + */ + +#include +#include "fsl_device_registers.h" + +/* ---------------------------------------------------------------------------- + -- Core clock + ---------------------------------------------------------------------------- */ + +uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK; + +/* ---------------------------------------------------------------------------- + -- SystemInit() + ---------------------------------------------------------------------------- */ + +__attribute__ ((weak)) void SystemInit (void) +{ +#if ((__FPU_PRESENT == 1) && (__FPU_USED == 1)) + SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2)); /* set CP10, CP11 Full Access */ +#endif /* ((__FPU_PRESENT == 1) && (__FPU_USED == 1)) */ + + /* Power off WLAN for clean boot up. */ + if ((PMU->WLAN_CTRL & PMU_WLAN_CTRL_PD_MASK) != 0U) + { + PMU->WLAN_CTRL &= ~PMU_WLAN_CTRL_PD_MASK; + } + + SystemInitHook(); +} + +/* ---------------------------------------------------------------------------- + -- SystemCoreClockUpdate() + ---------------------------------------------------------------------------- */ + +void SystemCoreClockUpdate (void) +{ +} + +/* ---------------------------------------------------------------------------- + -- SystemInitHook() + ---------------------------------------------------------------------------- */ + +__attribute__ ((weak)) void SystemInitHook (void) +{ + /* Void implementation of the weak function. */ +} diff --git a/devices/88MW320/system_88MW320.h b/devices/88MW320/system_88MW320.h new file mode 100644 index 000000000..118683e82 --- /dev/null +++ b/devices/88MW320/system_88MW320.h @@ -0,0 +1,106 @@ +/* +** ################################################################### +** Processor: 88MW320_A0_NAPC +** Compilers: GNU C Compiler +** IAR ANSI C/C++ Compiler for ARM +** Keil ARM C/C++ Compiler +** MCUXpresso Compiler +** +** Reference manual: 88MW320-88MW322, Rev.3, July 2020 +** Version: rev. 1.0, 2020-09-07 +** Build: b201223 +** +** Abstract: +** Provides a system configuration function and a global variable that +** contains the system frequency. It configures the device and initializes +** the oscillator (PLL) that is part of the microcontroller device. +** +** Copyright 2016 Freescale Semiconductor, Inc. +** Copyright 2016-2020 NXP +** All rights reserved. +** +** SPDX-License-Identifier: BSD-3-Clause +** +** http: www.nxp.com +** mail: support@nxp.com +** +** Revisions: +** - rev. 1.0 (2020-09-07) +** Initial version. +** +** ################################################################### +*/ + +/*! + * @file 88MW320 + * @version 1.0 + * @date 231220 + * @brief Device specific configuration file for 88MW320 (header file) + * + * Provides a system configuration function and a global variable that contains + * the system frequency. It configures the device and initializes the oscillator + * (PLL) that is part of the microcontroller device. + */ +#ifndef _SYSTEM_88MW320_H_ +#define _SYSTEM_88MW320_H_ /**< Symbol preventing repeated inclusion */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define DEFAULT_SYSTEM_CLOCK 200000000u /* Default System clock value */ +#ifndef CLK_MAINXTAL_CLK +#define CLK_MAINXTAL_CLK 38400000u /* External crystal 38.4M clock */ +#endif +#define CLK_RC32M_CLK 32000000u /* On-chip RC OSC 32 MHz clock */ +#define CLK_XTAL32K_CLK 32768u /* External crystal 32 kHz clock */ +#define CLK_RC32K_CLK 32768u /* On-chip RC OSC 32 KHz clock */ + +/** + * @brief System clock frequency (core clock) + * + * The system clock frequency supplied to the SysTick timer and the processor + * core clock. This variable can be used by the user application to setup the + * SysTick timer or configure other parameters. It may also be used by debugger to + * query the frequency of the debug timer or configure the trace clock speed + * SystemCoreClock is initialized with a correct predefined value. + */ +extern uint32_t SystemCoreClock; + +/** + * @brief Setup the microcontroller system. + * + * Typically this function configures the oscillator (PLL) that is part of the + * microcontroller device. For systems with variable clock speed it also updates + * the variable SystemCoreClock. SystemInit is called from startup_device file. + */ +void SystemInit(void); + +/** + * @brief Updates the SystemCoreClock variable. + * + * It must be called whenever the core clock is changed during program + * execution. SystemCoreClockUpdate() evaluates the clock register settings and calculates + * the current core clock. + */ +void SystemCoreClockUpdate(void); + +/** + * @brief SystemInit function hook. + * + * This weak function allows to call specific initialization code during the + * SystemInit() execution.This can be used when an application specific code needs + * to be called as close to the reset entry as possible (for example the Multicore + * Manager MCMGR_EarlyInit() function call). + * NOTE: No global r/w variables can be used in this hook function because the + * initialization of these variables happens after this function. + */ +void SystemInitHook(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYSTEM_88MW320_DSP_H_ */ diff --git a/devices/88MW320/utilities/fsl_notifier.c b/devices/88MW320/utilities/fsl_notifier.c new file mode 100644 index 000000000..7b7c02dc3 --- /dev/null +++ b/devices/88MW320/utilities/fsl_notifier.c @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * Copyright 2016-2017 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_notifier.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*! + * brief Creates a Notifier handle. + * + * param notifierHandle A pointer to the notifier handle. + * param configs A pointer to an array with references to all configurations which is handled by the Notifier. + * param configsNumber Number of configurations. Size of the configuration array. + * param callbacks A pointer to an array of callback configurations. + * If there are no callbacks to register during Notifier initialization, use NULL value. + * param callbacksNumber Number of registered callbacks. Size of the callbacks array. + * param userFunction User function. + * param userData User data passed to user function. + * return An error Code or kStatus_Success. + */ +status_t NOTIFIER_CreateHandle(notifier_handle_t *notifierHandle, + notifier_user_config_t **configs, + uint8_t configsNumber, + notifier_callback_config_t *callbacks, + uint8_t callbacksNumber, + notifier_user_function_t userFunction, + void *userData) +{ + /* Check input parameter - at least one configuration is required and userFunction must exist */ + if ((configs == NULL) || (configsNumber == 0U) || (userFunction == NULL)) + { + return kStatus_Fail; + } + /* Initialize handle structure */ + (void)memset(notifierHandle, 0, sizeof(notifier_handle_t)); + /* Store references to user-defined configurations */ + notifierHandle->configsTable = configs; + notifierHandle->configsNumber = configsNumber; + /* Store references to user-defined callback configurations */ + if (callbacks != NULL) + { + notifierHandle->callbacksTable = callbacks; + notifierHandle->callbacksNumber = callbacksNumber; + /* If all callbacks return success, then the errorCallbackIndex is callbacksNumber */ + notifierHandle->errorCallbackIndex = callbacksNumber; + } + notifierHandle->userFunction = userFunction; + notifierHandle->userData = userData; + + return kStatus_Success; +} + +/*! + * brief Switches the configuration according to a pre-defined structure. + * + * This function sets the system to the target configuration. Before transition, + * the Notifier sends notifications to all callbacks registered to the callback table. + * Callbacks are invoked in the following order: All registered callbacks are notified + * ordered by index in the callbacks array. The same order is used for before and after switch notifications. + * The notifications before the configuration switch can be used to obtain confirmation about + * the change from registered callbacks. If any registered callback denies the + * configuration change, further execution of this function depends on the notifier policy: the + * configuration change is either forced (kNOTIFIER_PolicyForcible) or exited (kNOTIFIER_PolicyAgreement). + * When configuration change is forced, the result of the before switch notifications are ignored. If an + * agreement is required, if any callback returns an error code, further notifications + * before switch notifications are cancelled and all already notified callbacks are re-invoked. + * The index of the callback which returned error code during pre-switch notifications is stored + * (any error codes during callbacks re-invocation are ignored) and NOTIFIER_GetErrorCallback() can be used to get it. + * Regardless of the policies, if any callback returns an error code, an error code indicating in which phase + * the error occurred is returned when NOTIFIER_SwitchConfig() exits. + * param notifierHandle pointer to notifier handle + * param configIndex Index of the target configuration. + * param policy Transaction policy, kNOTIFIER_PolicyAgreement or kNOTIFIER_PolicyForcible. + * + * return An error code or kStatus_Success. + * + */ +status_t NOTIFIER_SwitchConfig(notifier_handle_t *notifierHandle, uint8_t configIndex, notifier_policy_t policy) +{ + uint8_t currentStaticCallback = 0U; /* Index to array of statically registered call-backs */ + status_t returnCode = kStatus_Success; /* Function return */ + + notifier_notification_block_t notifyBlock; /* Callback notification block */ + notifier_callback_config_t *callbackConfig; /* Pointer to callback configuration */ + + /* Set errorcallbackindex as callbacksNumber, which means no callback error now */ + notifierHandle->errorCallbackIndex = notifierHandle->callbacksNumber; + + /* Requested configuration availability check */ + if (configIndex >= notifierHandle->configsNumber) + { + return kStatus_OutOfRange; + } + + /* Initialization of local variables from the Notifier handle structure */ + + notifyBlock.policy = policy; + notifyBlock.targetConfig = notifierHandle->configsTable[configIndex]; + notifyBlock.notifyType = kNOTIFIER_NotifyBefore; + + /* From all statically registered call-backs... */ + for (currentStaticCallback = 0U; currentStaticCallback < notifierHandle->callbacksNumber; currentStaticCallback++) + { + callbackConfig = &(notifierHandle->callbacksTable[currentStaticCallback]); + /* ...notify only those which asked to be called before the configuration switch */ + if (((uint32_t)callbackConfig->callbackType & (uint32_t)kNOTIFIER_CallbackBefore) != 0U) + { + /* In case that call-back returned error code mark it, store the call-back handle and eventually cancel + * the configuration switch */ + if (callbackConfig->callback(¬ifyBlock, callbackConfig->callbackData) != kStatus_Success) + { + returnCode = (status_t)kStatus_NOTIFIER_ErrorNotificationBefore; + notifierHandle->errorCallbackIndex = currentStaticCallback; + /* If not forcing configuration switch, call all already notified call-backs to revert their state + * as the switch is canceled */ + if (policy != kNOTIFIER_PolicyForcible) + { + break; + } + } + } + } + + /* Set configuration */ + + /* In case that any call-back returned error code and policy doesn't force the configuration set, go to after + * switch call-backs */ + if ((policy == kNOTIFIER_PolicyForcible) || (returnCode == kStatus_Success)) + { + returnCode = notifierHandle->userFunction(notifierHandle->configsTable[configIndex], notifierHandle->userData); + if (returnCode != kStatus_Success) + { + return returnCode; + } + /* Update current configuration index */ + notifierHandle->currentConfigIndex = configIndex; + notifyBlock.notifyType = kNOTIFIER_NotifyAfter; + /* From all statically registered call-backs... */ + for (currentStaticCallback = 0U; currentStaticCallback < notifierHandle->callbacksNumber; + currentStaticCallback++) + { + callbackConfig = &(notifierHandle->callbacksTable[currentStaticCallback]); + /* ...notify only those which asked to be called after the configuration switch */ + if (((uint32_t)callbackConfig->callbackType & (uint32_t)kNOTIFIER_CallbackAfter) != 0U) + { + /* In case that call-back returned error code mark it and store the call-back handle */ + if (callbackConfig->callback(¬ifyBlock, callbackConfig->callbackData) != kStatus_Success) + { + returnCode = (status_t)kStatus_NOTIFIER_ErrorNotificationAfter; + notifierHandle->errorCallbackIndex = currentStaticCallback; + if (policy != kNOTIFIER_PolicyForcible) + { + break; + } + } + } + } + } + else + { + /* End of unsuccessful switch */ + notifyBlock.notifyType = kNOTIFIER_NotifyRecover; + while (currentStaticCallback-- > 0U) + { + callbackConfig = &(notifierHandle->callbacksTable[currentStaticCallback]); + if (((uint32_t)callbackConfig->callbackType & (uint32_t)kNOTIFIER_CallbackBefore) != 0U) + { + (void)callbackConfig->callback(¬ifyBlock, callbackConfig->callbackData); + } + } + } + + return returnCode; +} + +/*! + * brief This function returns the last failed notification callback. + * + * This function returns an index of the last callback that failed during the configuration switch while + * the last NOTIFIER_SwitchConfig() was called. If the last NOTIFIER_SwitchConfig() call ended successfully + * value equal to callbacks number is returned. The returned value represents an index in the array of + * static call-backs. + * + * param notifierHandle Pointer to the notifier handle + * return Callback Index of the last failed callback or value equal to callbacks count. + */ +uint8_t NOTIFIER_GetErrorCallbackIndex(notifier_handle_t *notifierHandle) +{ + return notifierHandle->errorCallbackIndex; +} diff --git a/devices/88MW320/utilities/fsl_notifier.h b/devices/88MW320/utilities/fsl_notifier.h new file mode 100644 index 000000000..d93578c13 --- /dev/null +++ b/devices/88MW320/utilities/fsl_notifier.h @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * Copyright 2016-2017 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_NOTIFIER_H_ +#define _FSL_NOTIFIER_H_ + +#include "fsl_common.h" +/*! + * @addtogroup notifier + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! + * @brief Notifier error codes. + * + * Used as return value of Notifier functions. + */ +enum _notifier_status +{ + kStatus_NOTIFIER_ErrorNotificationBefore = + MAKE_STATUS(kStatusGroup_NOTIFIER, 0), /*!< An error occurs during send "BEFORE" notification. */ + kStatus_NOTIFIER_ErrorNotificationAfter = + MAKE_STATUS(kStatusGroup_NOTIFIER, 1), /*!< An error occurs during send "AFTER" notification. */ +}; + +/*! + * @brief Notifier policies. + * + * Defines whether the user function execution is forced or not. + * For kNOTIFIER_PolicyForcible, the user function is executed regardless of the callback results, + * while kNOTIFIER_PolicyAgreement policy is used to exit NOTIFIER_SwitchConfig() + * when any of the callbacks returns error code. + * See also NOTIFIER_SwitchConfig() description. + */ +typedef enum _notifier_policy +{ + kNOTIFIER_PolicyAgreement, /*!< NOTIFIER_SwitchConfig() method is exited when any of the callbacks returns error + code. */ + kNOTIFIER_PolicyForcible, /*!< The user function is executed regardless of the results. */ +} notifier_policy_t; + +/*! @brief Notification type. Used to notify registered callbacks */ +typedef enum _notifier_notification_type +{ + kNOTIFIER_NotifyRecover = 0x00U, /*!< Notify IP to recover to previous work state. */ + kNOTIFIER_NotifyBefore = 0x01U, /*!< Notify IP that configuration setting is going to change. */ + kNOTIFIER_NotifyAfter = 0x02U, /*!< Notify IP that configuration setting has been changed. */ +} notifier_notification_type_t; + +/*! + * @brief The callback type, which indicates kinds of notification the callback handles. + * + * Used in the callback configuration structure (notifier_callback_config_t) + * to specify when the registered callback is called during configuration switch initiated by the + * NOTIFIER_SwitchConfig(). + * Callback can be invoked in following situations. + * - Before the configuration switch (Callback return value can affect NOTIFIER_SwitchConfig() + * execution. See the NOTIFIER_SwitchConfig() and notifier_policy_t documentation). + * - After an unsuccessful attempt to switch configuration + * - After a successful configuration switch + */ +typedef enum _notifier_callback_type +{ + kNOTIFIER_CallbackBefore = 0x01U, /*!< Callback handles BEFORE notification. */ + kNOTIFIER_CallbackAfter = 0x02U, /*!< Callback handles AFTER notification. */ + kNOTIFIER_CallbackBeforeAfter = 0x03U, /*!< Callback handles BEFORE and AFTER notification. */ +} notifier_callback_type_t; + +/*! @brief Notifier user configuration type. + * + * Reference of the user defined configuration is stored in an array; the notifier switches between these configurations + * based on this array. + */ +typedef void notifier_user_config_t; + +/*! @brief Notifier user function prototype + * Use this function to execute specific operations in configuration switch. + * Before and after this function execution, different notification is sent to registered callbacks. + * If this function returns any error code, NOTIFIER_SwitchConfig() exits. + * + * @param targetConfig target Configuration. + * @param userData Refers to other specific data passed to user function. + * @return An error code or kStatus_Success. + */ +typedef status_t (*notifier_user_function_t)(notifier_user_config_t *targetConfig, void *userData); + +/*! @brief notification block passed to the registered callback function. */ +typedef struct _notifier_notification_block +{ + notifier_user_config_t *targetConfig; /*!< Pointer to target configuration. */ + notifier_policy_t policy; /*!< Configure transition policy. */ + notifier_notification_type_t notifyType; /*!< Configure notification type. */ +} notifier_notification_block_t; + +/*! + * @brief Callback prototype. + * + * Declaration of a callback. It is common for registered callbacks. + * Reference to function of this type is part of the notifier_callback_config_t callback configuration structure. + * Depending on callback type, function of this prototype is called (see NOTIFIER_SwitchConfig()) + * before configuration switch, after it or in both use cases to notify about + * the switch progress (see notifier_callback_type_t). When called, the type of the notification + * is passed as a parameter along with the reference to the target configuration structure (see + * notifier_notification_block_t) and any data passed during the callback registration. When notified before the + * configuration switch, depending on the configuration switch policy (see notifier_policy_t), the callback may deny the + * execution of the user function by returning an error code different than kStatus_Success (see + * NOTIFIER_SwitchConfig()). + * + * @param notify Notification block. + * @param data Callback data. Refers to the data passed during callback registration. Intended to + * pass any driver or application data such as internal state information. + * @return An error code or kStatus_Success. + */ +typedef status_t (*notifier_callback_t)(notifier_notification_block_t *notify, void *data); + +/*! + * @brief Callback configuration structure. + * + * This structure holds the configuration of callbacks. + * Callbacks of this type are expected to be statically allocated. + * This structure contains the following application-defined data. + * callback - pointer to the callback function + * callbackType - specifies when the callback is called + * callbackData - pointer to the data passed to the callback. + */ +typedef struct _notifier_callback_config +{ + notifier_callback_t callback; /*!< Pointer to the callback function. */ + notifier_callback_type_t callbackType; /*!< Callback type. */ + void *callbackData; /*!< Pointer to the data passed to the callback. */ +} notifier_callback_config_t; + +/*! + * @brief Notifier handle structure. + * + * Notifier handle structure. Contains data necessary for the Notifier proper function. + * Stores references to registered configurations, callbacks, information about their numbers, + * user function, user data, and other internal data. + * NOTIFIER_CreateHandle() must be called to initialize this handle. + */ +typedef struct _notifier_handle +{ + notifier_user_config_t **configsTable; /*!< Pointer to configure table. */ + uint8_t configsNumber; /*!< Number of configurations. */ + notifier_callback_config_t *callbacksTable; /*!< Pointer to callback table. */ + uint8_t callbacksNumber; /*!< Maximum number of callback configurations. */ + uint8_t errorCallbackIndex; /*!< Index of callback returns error. */ + uint8_t currentConfigIndex; /*!< Index of current configuration. */ + notifier_user_function_t userFunction; /*!< User function. */ + void *userData; /*!< User data passed to user function. */ +} notifier_handle_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @brief Creates a Notifier handle. + * + * @param notifierHandle A pointer to the notifier handle. + * @param configs A pointer to an array with references to all configurations which is handled by the Notifier. + * @param configsNumber Number of configurations. Size of the configuration array. + * @param callbacks A pointer to an array of callback configurations. + * If there are no callbacks to register during Notifier initialization, use NULL value. + * @param callbacksNumber Number of registered callbacks. Size of the callbacks array. + * @param userFunction User function. + * @param userData User data passed to user function. + * @return An error Code or kStatus_Success. + */ +status_t NOTIFIER_CreateHandle(notifier_handle_t *notifierHandle, + notifier_user_config_t **configs, + uint8_t configsNumber, + notifier_callback_config_t *callbacks, + uint8_t callbacksNumber, + notifier_user_function_t userFunction, + void *userData); + +/*! + * @brief Switches the configuration according to a pre-defined structure. + * + * This function sets the system to the target configuration. Before transition, + * the Notifier sends notifications to all callbacks registered to the callback table. + * Callbacks are invoked in the following order: All registered callbacks are notified + * ordered by index in the callbacks array. The same order is used for before and after switch notifications. + * The notifications before the configuration switch can be used to obtain confirmation about + * the change from registered callbacks. If any registered callback denies the + * configuration change, further execution of this function depends on the notifier policy: the + * configuration change is either forced (kNOTIFIER_PolicyForcible) or exited (kNOTIFIER_PolicyAgreement). + * When configuration change is forced, the result of the before switch notifications are ignored. If an + * agreement is required, if any callback returns an error code, further notifications + * before switch notifications are cancelled and all already notified callbacks are re-invoked. + * The index of the callback which returned error code during pre-switch notifications is stored + * (any error codes during callbacks re-invocation are ignored) and NOTIFIER_GetErrorCallback() can be used to get it. + * Regardless of the policies, if any callback returns an error code, an error code indicating in which phase + * the error occurred is returned when NOTIFIER_SwitchConfig() exits. + * @param notifierHandle pointer to notifier handle + * @param configIndex Index of the target configuration. + * @param policy Transaction policy, kNOTIFIER_PolicyAgreement or kNOTIFIER_PolicyForcible. + * + * @return An error code or kStatus_Success. + * + */ +status_t NOTIFIER_SwitchConfig(notifier_handle_t *notifierHandle, uint8_t configIndex, notifier_policy_t policy); + +/*! + * @brief This function returns the last failed notification callback. + * + * This function returns an index of the last callback that failed during the configuration switch while + * the last NOTIFIER_SwitchConfig() was called. If the last NOTIFIER_SwitchConfig() call ended successfully + * value equal to callbacks number is returned. The returned value represents an index in the array of + * static call-backs. + * + * @param notifierHandle Pointer to the notifier handle + * @return Callback Index of the last failed callback or value equal to callbacks count. + */ +uint8_t NOTIFIER_GetErrorCallbackIndex(notifier_handle_t *notifierHandle); + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @}*/ + +#endif /* _FSL_NOTIFIER_H_ */ diff --git a/devices/88MW320/utilities/fsl_shell.c b/devices/88MW320/utilities/fsl_shell.c new file mode 100644 index 000000000..167bdc0b3 --- /dev/null +++ b/devices/88MW320/utilities/fsl_shell.c @@ -0,0 +1,1081 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * Copyright 2016-2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + * POSIX getopt for Windows + * Code given out at the 1985 UNIFORUM conference in Dallas. + * + * From std-unix@ut-sally.UUCP (Moderator, John Quarterman) Sun Nov 3 14:34:15 1985 + * Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; site gatech.CSNET + * Posting-Version: version B 2.10.2 9/18/84; site ut-sally.UUCP + * Path: gatech!akgua!mhuxv!mhuxt!mhuxr!ulysses!allegra!mit-eddie!genrad!panda!talcott!harvard!seismo!ut-sally!std-unix + * From: std-unix@ut-sally.UUCP (Moderator, John Quarterman) + * Newsgroups: mod.std.unix + * Subject: public domain AT&T getopt source + * Message-ID: <3352@ut-sally.UUCP> + * Date: 3 Nov 85 19:34:15 GMT + * Date-Received: 4 Nov 85 12:25:09 GMT + * Organization: IEEE/P1003 Portable Operating System Environment Committee + * Lines: 91 + * Approved: jsq@ut-sally.UUC + * Here's something you've all been waiting for: the AT&T public domain + * source for getopt(3). It is the code which was given out at the 1985 + * UNIFORUM conference in Dallas. I obtained it by electronic mail + * directly from AT&T. The people there assure me that it is indeed + * in the public domain + * There is no manual page. That is because the one they gave out at + * UNIFORUM was slightly different from the current System V Release 2 + * manual page. The difference apparently involved a note about the + * famous rules 5 and 6, recommending using white space between an option + * and its first argument, and not grouping options that have arguments. + * Getopt itself is currently lenient about both of these things White + * space is allowed, but not mandatory, and the last option in a group can + * have an argument. That particular version of the man page evidently + * has no official existence, and my source at AT&T did not send a copy. + * The current SVR2 man page reflects the actual behavor of this getopt. + * However, I am not about to post a copy of anything licensed by AT&T. + */ + +#include +#include +#include +#include + +#include "fsl_common.h" +#include "fsl_str.h" + +#include "fsl_component_generic_list.h" +#include "fsl_component_serial_manager.h" + +#include "fsl_shell.h" + +/* + * The OSA_USED macro can only be defined when the OSA component is used. + * If the source code of the OSA component does not exist, the OSA_USED cannot be defined. + * OR, If OSA component is not added into project event the OSA source code exists, the OSA_USED + * also cannot be defined. + * The source code path of the OSA component is /components/osa. + * + */ +#if defined(OSA_USED) + +#if (defined(SHELL_USE_COMMON_TASK) && (SHELL_USE_COMMON_TASK > 0U)) +#include "fsl_component_common_task.h" +#else +#include "fsl_os_abstraction.h" +#endif + +#endif + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#define KEY_ESC (0x1BU) +#define KET_DEL (0x7FU) + +#define SHELL_EVENT_DATA_ARRIVED (1U << 0) +#define SHELL_EVENT_DATA_SENT (1U << 1) + +#define SHELL_SPRINTF_BUFFER_SIZE (64U) + +/*! @brief A type for the handle special key. */ +typedef enum _fun_key_status +{ + kSHELL_Normal = 0U, /*!< Normal key */ + kSHELL_Special = 1U, /*!< Special key */ + kSHELL_Function = 2U, /*!< Function key */ +} fun_key_status_t; + +/*! @brief Data structure for Shell environment. */ +typedef struct _shell_context_handle +{ + list_label_t commandContextListHead; /*!< Command shellContextHandle list queue head */ + serial_handle_t serialHandle; /*!< Serial manager handle */ + uint8_t + serialWriteHandleBuffer[SERIAL_MANAGER_WRITE_HANDLE_SIZE]; /*!< The buffer for serial manager write handle */ + serial_write_handle_t serialWriteHandle; /*!< The serial manager write handle */ + uint8_t serialReadHandleBuffer[SERIAL_MANAGER_READ_HANDLE_SIZE]; /*!< The buffer for serial manager read handle */ + serial_read_handle_t serialReadHandle; /*!< The serial manager read handle */ + char *prompt; /*!< Prompt string */ +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + +#if defined(OSA_USED) + +#if (defined(SHELL_USE_COMMON_TASK) && (SHELL_USE_COMMON_TASK > 0U)) + common_task_message_t commontaskMsg; /*!< Message for common task */ +#else + uint8_t event[OSA_EVENT_HANDLE_SIZE]; /*!< Event instance */ + uint8_t taskId[OSA_TASK_HANDLE_SIZE]; /*!< Task handle */ +#endif + +#endif + +#endif + char line[SHELL_BUFFER_SIZE]; /*!< Consult buffer */ + char hist_buf[SHELL_HISTORY_COUNT][SHELL_BUFFER_SIZE]; /*!< History buffer*/ + char printBuffer[SHELL_SPRINTF_BUFFER_SIZE]; /*!< Buffer for print */ + uint32_t printLength; /*!< All length has been printed */ + uint16_t hist_current; /*!< Current history command in hist buff*/ + uint16_t hist_count; /*!< Total history command in hist buff*/ + enum _fun_key_status stat; /*!< Special key status */ + uint8_t cmd_num; /*!< Number of user commands */ + uint8_t l_pos; /*!< Total line position */ + uint8_t c_pos; /*!< Current line position */ + volatile uint8_t notificationPost; /*!< The serial manager notification is post */ + uint8_t exit; /*!< Exit Flag*/ + uint8_t printBusy; /*!< Print is busy */ +} shell_context_handle_t; + +#if 0 +#define SHELL_STRUCT_OFFSET(type, field) ((size_t) & (((type *)0)->field)) +#define SHEEL_COMMAND_POINTER(node) \ + ((shell_command_t *)(((uint32_t)(node)) - SHELL_STRUCT_OFFSET(shell_command_t, link))) +#else +#define SHEEL_COMMAND_POINTER(node) \ + ((shell_command_t *)(((uint32_t)(node)) - (sizeof(shell_command_t) - sizeof(list_element_t)))) +#endif +/******************************************************************************* + * Prototypes + ******************************************************************************/ +static shell_status_t SHELL_HelpCommand(shell_handle_t shellHandle, int32_t argc, char **argv); /*!< help command */ + +static shell_status_t SHELL_ExitCommand(shell_handle_t shellHandle, int32_t argc, char **argv); /*!< exit command */ + +static int32_t SHELL_ParseLine(const char *cmd, uint32_t len, char *argv[]); /*!< parse line command */ + +static int32_t SHELL_StringCompare(const char *str1, const char *str2, int32_t count); /*!< compare string command */ + +static void SHELL_ProcessCommand(shell_context_handle_t *shellContextHandle, const char *cmd); /*!< process a command */ + +static void SHELL_GetHistoryCommand(shell_context_handle_t *shellContextHandle, + uint8_t hist_pos); /*!< get commands history */ + +static void SHELL_AutoComplete(shell_context_handle_t *shellContextHandle); /*!< auto complete command */ + +static shell_status_t SHELL_GetChar(shell_context_handle_t *shellContextHandle, + uint8_t *ch); /*!< get a char from communication interface */ + +static void SHELL_WriteWithCopy(shell_handle_t shellHandle, const char *buffer, uint32_t length); + +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) +static void SHELL_Task(void *param); /*!< Shell task*/ +#endif + +/******************************************************************************* + * Variables + ******************************************************************************/ + +static SHELL_COMMAND_DEFINE(help, "\r\n\"help\": List all the registered commands\r\n", SHELL_HelpCommand, 0); +static SHELL_COMMAND_DEFINE(exit, "\r\n\"exit\": Exit program\r\n", SHELL_ExitCommand, 0); + +static char s_paramBuffer[SHELL_BUFFER_SIZE]; + +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) +#if defined(OSA_USED) +#if (defined(SHELL_USE_COMMON_TASK) && (SHELL_USE_COMMON_TASK > 0U)) +#else +/* + * \brief Defines the serial manager task's stack + */ +static OSA_TASK_DEFINE(SHELL_Task, SHELL_TASK_PRIORITY, 1, SHELL_TASK_STACK_SIZE, false); +#endif +#endif /* OSA_USED */ +#endif /* SHELL_NON_BLOCKING_MODE */ +/******************************************************************************* + * Code + ******************************************************************************/ + +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) +static void SHELL_SerialManagerRxCallback(void *callbackParam, + serial_manager_callback_message_t *message, + serial_manager_status_t status) +{ + shell_context_handle_t *shellHandle; + + assert(callbackParam); + assert(message); + + shellHandle = (shell_context_handle_t *)callbackParam; + + if (0U == shellHandle->notificationPost) + { + shellHandle->notificationPost = 1U; +#if defined(OSA_USED) + +#if (defined(SHELL_USE_COMMON_TASK) && (SHELL_USE_COMMON_TASK > 0U)) + shellHandle->commontaskMsg.callback = SHELL_Task; + shellHandle->commontaskMsg.callbackParam = shellHandle; + (void)COMMON_TASK_post_message(&shellHandle->commontaskMsg); +#else + (void)OSA_EventSet((osa_event_handle_t)shellHandle->event, SHELL_EVENT_DATA_ARRIVED); +#endif + +#else + SHELL_Task(shellHandle); +#endif + } +} +#endif + +static void SHELL_WriteBuffer(char *buffer, int32_t *indicator, char val, int len) +{ + shell_context_handle_t *shellContextHandle; + int i = 0; + shellContextHandle = (shell_context_handle_t *)(void *)buffer; + + for (i = 0; i < len; i++) + { + if ((*indicator + 1) >= (int32_t)SHELL_SPRINTF_BUFFER_SIZE) + { +#if (!defined(SDK_DEBUGCONSOLE_UART) && (defined(SDK_DEBUGCONSOLE) && (SDK_DEBUGCONSOLE != 1))) + if (NULL == shellContextHandle->serialHandle) + { + for (uint32_t index = 0; index < ((uint32_t)*indicator); index++) + { + (void)putchar(shellContextHandle->printBuffer[index]); + } + } + else +#endif + { + (void)SerialManager_WriteBlocking(shellContextHandle->serialWriteHandle, + (uint8_t *)shellContextHandle->printBuffer, (uint32_t)*indicator); + } + + shellContextHandle->printLength += (uint32_t)*indicator; + *indicator = 0; + } + + shellContextHandle->printBuffer[*indicator] = val; + (*indicator)++; + } +} + +static int SHELL_Sprintf(void *buffer, const char *formatString, va_list ap) +{ + shell_context_handle_t *shellContextHandle; + uint32_t length; + shellContextHandle = (shell_context_handle_t *)buffer; + + length = (uint32_t)StrFormatPrintf(formatString, ap, (char *)buffer, SHELL_WriteBuffer); + shellContextHandle->printLength += length; + return (int32_t)length; +} + +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) +static void SHELL_Task(void *param) +#else +void SHELL_Task(shell_handle_t shellHandle) +#endif +{ +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + shell_context_handle_t *shellContextHandle = (shell_context_handle_t *)param; +#else + shell_context_handle_t *shellContextHandle = (shell_context_handle_t *)shellHandle; +#endif + uint8_t ch; + + if (NULL != shellContextHandle) + { +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + +#if defined(OSA_USED) + +#if (defined(SHELL_USE_COMMON_TASK) && (SHELL_USE_COMMON_TASK > 0U)) +#else + osa_event_flags_t ev = 0; + + do + { + if (KOSA_StatusSuccess == OSA_EventWait((osa_event_handle_t)shellContextHandle->event, osaEventFlagsAll_c, + 0U, osaWaitForever_c, &ev)) + { + if (0U != (ev & SHELL_EVENT_DATA_ARRIVED)) +#endif + +#endif + +#endif + { + shellContextHandle->notificationPost = 0; + do + { + if ((bool)shellContextHandle->exit) + { + if (shellContextHandle->serialReadHandle != NULL) + { + (void)SerialManager_CloseReadHandle(shellContextHandle->serialReadHandle); + shellContextHandle->serialReadHandle = NULL; + } + if (shellContextHandle->serialWriteHandle != NULL) + { + (void)SerialManager_CloseWriteHandle(shellContextHandle->serialWriteHandle); + shellContextHandle->serialWriteHandle = NULL; + } + break; + } + if (kStatus_SHELL_Success != (shell_status_t)SHELL_GetChar(shellContextHandle, &ch)) + { + /* If error occurred when getting a char, exit the task and waiting the new data arriving. */ + break; + } + + /* Special key */ + if (ch == KEY_ESC) + { + shellContextHandle->stat = kSHELL_Special; + continue; + } + else if (shellContextHandle->stat == kSHELL_Special) + { + /* Function key */ + if ((char)ch == '[') + { + shellContextHandle->stat = kSHELL_Function; + continue; + } + shellContextHandle->stat = kSHELL_Normal; + } + else if (shellContextHandle->stat == kSHELL_Function) + { + shellContextHandle->stat = kSHELL_Normal; + + switch ((char)ch) + { + /* History operation here */ + case 'A': /* Up key */ + SHELL_GetHistoryCommand(shellContextHandle, (uint8_t)shellContextHandle->hist_current); + if (shellContextHandle->hist_current < (shellContextHandle->hist_count - 1U)) + { + shellContextHandle->hist_current++; + } + break; + case 'B': /* Down key */ + SHELL_GetHistoryCommand(shellContextHandle, (uint8_t)shellContextHandle->hist_current); + if (shellContextHandle->hist_current > 0U) + { + shellContextHandle->hist_current--; + } + break; + case 'D': /* Left key */ + if ((bool)shellContextHandle->c_pos) + { + SHELL_WriteWithCopy(shellContextHandle, "\b", 1); + shellContextHandle->c_pos--; + } + break; + case 'C': /* Right key */ + if (shellContextHandle->c_pos < shellContextHandle->l_pos) + { + (void)SHELL_Write(shellContextHandle, + &shellContextHandle->line[shellContextHandle->c_pos], 1); + shellContextHandle->c_pos++; + } + break; + default: + /* MISRA C-2012 Rule 16.4 */ + break; + } + continue; + } + /* Handle tab key */ + else if ((char)ch == '\t') + { +#if SHELL_AUTO_COMPLETE + /* Move the cursor to the beginning of line */ + uint32_t i; + for (i = 0; i < (uint32_t)shellContextHandle->c_pos; i++) + { + SHELL_WriteWithCopy(shellContextHandle, "\b", 1); + } + /* Do auto complete */ + SHELL_AutoComplete(shellContextHandle); + /* Move position to end */ + shellContextHandle->l_pos = (uint8_t)strlen(shellContextHandle->line); + shellContextHandle->c_pos = shellContextHandle->l_pos; +#endif + continue; + } + /* Handle backspace key */ + else if ((ch == KET_DEL) || ((char)ch == '\b')) + { + /* There must be at last one char */ + if (shellContextHandle->c_pos == 0U) + { + continue; + } + + shellContextHandle->l_pos--; + shellContextHandle->c_pos--; + + if (shellContextHandle->l_pos > shellContextHandle->c_pos) + { + (void)memmove(&shellContextHandle->line[shellContextHandle->c_pos], + &shellContextHandle->line[shellContextHandle->c_pos + 1U], + (uint32_t)shellContextHandle->l_pos - (uint32_t)shellContextHandle->c_pos); + shellContextHandle->line[shellContextHandle->l_pos] = '\0'; + SHELL_WriteWithCopy(shellContextHandle, "\b", 1); + (void)SHELL_Write(shellContextHandle, &shellContextHandle->line[shellContextHandle->c_pos], + strlen(&shellContextHandle->line[shellContextHandle->c_pos])); + SHELL_WriteWithCopy(shellContextHandle, " \b", 3); + + /* Reset position */ + uint32_t i; + for (i = (uint32_t)shellContextHandle->c_pos; i <= (uint32_t)shellContextHandle->l_pos; i++) + { + SHELL_WriteWithCopy(shellContextHandle, "\b", 1); + } + } + else /* Normal backspace operation */ + { + SHELL_WriteWithCopy(shellContextHandle, "\b \b", 3); + shellContextHandle->line[shellContextHandle->l_pos] = '\0'; + } + continue; + } + else + { + /* MISRA C-2012 Rule 15.7 */ + } + + /* Input too long */ + if (shellContextHandle->l_pos >= (SHELL_BUFFER_SIZE - 1U)) + { + shellContextHandle->l_pos = 0U; + } + + /* Handle end of line, break */ + if (((char)ch == '\r') || ((char)ch == '\n')) + { + static char endoflinechar = '\0'; + + if (((uint8_t)endoflinechar != 0U) && ((uint8_t)endoflinechar != ch)) + { + continue; + } + else + { + endoflinechar = (char)ch; + /* If command line is not NULL, will start process it. */ + if (0U != strlen(shellContextHandle->line)) + { + SHELL_ProcessCommand(shellContextHandle, shellContextHandle->line); + } + /* Reset all params */ + shellContextHandle->c_pos = shellContextHandle->l_pos = 0; + shellContextHandle->hist_current = 0; + SHELL_PrintPrompt(shellContextHandle); + (void)memset(shellContextHandle->line, 0, sizeof(shellContextHandle->line)); + continue; + } + } + + /* Normal character */ + if (shellContextHandle->c_pos < shellContextHandle->l_pos) + { + (void)memmove(&shellContextHandle->line[shellContextHandle->c_pos + 1U], + &shellContextHandle->line[shellContextHandle->c_pos], + (uint32_t)shellContextHandle->l_pos - (uint32_t)shellContextHandle->c_pos); + shellContextHandle->line[shellContextHandle->c_pos] = (char)ch; + (void)SHELL_Write(shellContextHandle, &shellContextHandle->line[shellContextHandle->c_pos], + strlen(&shellContextHandle->line[shellContextHandle->c_pos])); + /* Move the cursor to new position */ + uint32_t i; + for (i = (uint32_t)shellContextHandle->c_pos; i < (uint32_t)shellContextHandle->l_pos; i++) + { + SHELL_WriteWithCopy(shellContextHandle, "\b", 1); + } + } + else + { + shellContextHandle->line[shellContextHandle->l_pos] = (char)ch; + (void)SHELL_Write(shellContextHandle, &shellContextHandle->line[shellContextHandle->l_pos], 1); + } + + ch = 0; + shellContextHandle->l_pos++; + shellContextHandle->c_pos++; + } while (0U == shellContextHandle->exit); + } +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + +#if defined(OSA_USED) + +#if (defined(SHELL_USE_COMMON_TASK) && (SHELL_USE_COMMON_TASK > 0U)) +#else + } + } while (1U == gUseRtos_c); /* USE_RTOS = 0 for BareMetal and 1 for OS */ +#endif + +#endif + +#endif + } +} + +static shell_status_t SHELL_HelpCommand(shell_handle_t shellHandle, int32_t argc, char **argv) +{ + shell_context_handle_t *shellContextHandle = (shell_context_handle_t *)shellHandle; + shell_command_t *shellCommandContextHandle; + list_element_handle_t p = LIST_GetHead(&shellContextHandle->commandContextListHead); + + while (p != NULL) + { + shellCommandContextHandle = SHEEL_COMMAND_POINTER(p); + if ((shellCommandContextHandle->pcHelpString != NULL) && (bool)strlen(shellCommandContextHandle->pcHelpString)) + { + (void)SHELL_Write(shellContextHandle, shellCommandContextHandle->pcHelpString, + strlen(shellCommandContextHandle->pcHelpString)); + } + + p = LIST_GetNext(p); + } + return kStatus_SHELL_Success; +} + +static shell_status_t SHELL_ExitCommand(shell_handle_t shellHandle, int32_t argc, char **argv) +{ + shell_context_handle_t *shellContextHandle = (shell_context_handle_t *)shellHandle; + /* Skip warning */ + SHELL_WriteWithCopy(shellContextHandle, "\r\nSHELL exited\r\n", strlen("\r\nSHELL exited\r\n")); + shellContextHandle->exit = (uint8_t) true; + return kStatus_SHELL_Success; +} + +static void SHELL_ProcessCommand(shell_context_handle_t *shellContextHandle, const char *cmd) +{ + shell_command_t *tmpCommand = NULL; + const char *tmpCommandString; + int32_t argc; + char *argv[SHELL_BUFFER_SIZE] = {0}; + list_element_handle_t p; + uint8_t flag = 1; + uint8_t tmpCommandLen; + uint8_t tmpLen; + uint8_t i = 0; + + tmpLen = (uint8_t)strlen(cmd); + argc = SHELL_ParseLine(cmd, tmpLen, argv); + + if ((argc > 0)) + { + p = LIST_GetHead(&shellContextHandle->commandContextListHead); + while (p != NULL) + { + tmpCommand = SHEEL_COMMAND_POINTER(p); + tmpCommandString = tmpCommand->pcCommand; + tmpCommandLen = (uint8_t)strlen(tmpCommandString); + /* Compare with space or end of string */ + if ((cmd[tmpCommandLen] == ' ') || (cmd[tmpCommandLen] == (char)0x00)) + { + if (SHELL_StringCompare(tmpCommandString, argv[0], (int32_t)tmpCommandLen) == 0) + { + /* support commands with optional number of parameters */ + if (tmpCommand->cExpectedNumberOfParameters == (uint8_t)SHELL_IGNORE_PARAMETER_COUNT) + { + flag = 0; + } + else if ((tmpCommand->cExpectedNumberOfParameters == 0U) && (argc == 1)) + { + flag = 0; + } + else if (tmpCommand->cExpectedNumberOfParameters > 0U) + { + if ((argc - 1) == (int32_t)tmpCommand->cExpectedNumberOfParameters) + { + flag = 0; + } + } + else + { + flag = 1; + } + break; + } + } + p = LIST_GetNext(p); + } + if (NULL == p) + { + tmpCommand = NULL; + } + } + + if ((tmpCommand != NULL) && (flag == 1U)) + { + SHELL_WriteWithCopy( + shellContextHandle, + "\r\nIncorrect command parameter(s). Enter \"help\" to view a list of available commands.\r\n\r\n", + strlen( + "\r\nIncorrect command parameter(s). Enter \"help\" to view a list of available commands.\r\n\r\n")); + } + else if (tmpCommand != NULL) + { + tmpLen = (uint8_t)strlen(cmd); + /* Compare with last command. Push back to history buffer if different */ + if (tmpLen != (uint8_t)SHELL_StringCompare(cmd, shellContextHandle->hist_buf[0], (int32_t)strlen(cmd))) + { + for (i = SHELL_HISTORY_COUNT - 1U; i > 0U; i--) + { + (void)memset(shellContextHandle->hist_buf[i], (int)'\0', SHELL_BUFFER_SIZE); + tmpLen = (uint8_t)strlen(shellContextHandle->hist_buf[i - 1U]); + (void)memcpy(shellContextHandle->hist_buf[i], shellContextHandle->hist_buf[i - 1U], tmpLen); + } + (void)memset(shellContextHandle->hist_buf[0], (int)'\0', SHELL_BUFFER_SIZE); + tmpLen = (uint8_t)strlen(cmd); + (void)memcpy(shellContextHandle->hist_buf[0], cmd, tmpLen); + if (shellContextHandle->hist_count < SHELL_HISTORY_COUNT) + { + shellContextHandle->hist_count++; + } + } + (void)tmpCommand->pFuncCallBack(shellContextHandle, argc, argv); + } + else + { + SHELL_WriteWithCopy( + shellContextHandle, + "\r\nCommand not recognized. Enter 'help' to view a list of available commands.\r\n\r\n", + strlen("\r\nCommand not recognized. Enter 'help' to view a list of available commands.\r\n\r\n")); + } +} + +static void SHELL_GetHistoryCommand(shell_context_handle_t *shellContextHandle, uint8_t hist_pos) +{ + uint32_t i; + uint32_t tmp; + + if (shellContextHandle->hist_buf[0][0] == '\0') + { + shellContextHandle->hist_current = 0; + return; + } + +#if 0 /*hist_pos is passed from hist_current. And hist_current is only changed in case 'A'/'B',as hist_count is 3 \ + most, it can't be more than 3 */ + if (hist_pos >= SHELL_HISTORY_COUNT) + { + hist_pos = SHELL_HISTORY_COUNT - 1U; + } +#endif + + tmp = strlen(shellContextHandle->line); + /* Clear current if have */ + if (tmp > 0U) + { + (void)memset(shellContextHandle->line, (int)'\0', tmp); + for (i = 0U; i < tmp; i++) + { + SHELL_WriteWithCopy(shellContextHandle, "\b \b", 3); + } + } + + shellContextHandle->l_pos = (uint8_t)strlen(shellContextHandle->hist_buf[hist_pos]); + shellContextHandle->c_pos = shellContextHandle->l_pos; + (void)memcpy(shellContextHandle->line, shellContextHandle->hist_buf[hist_pos], shellContextHandle->l_pos); + (void)SHELL_Write(shellContextHandle, shellContextHandle->hist_buf[hist_pos], + strlen(shellContextHandle->hist_buf[hist_pos])); +} + +static void SHELL_AutoComplete(shell_context_handle_t *shellContextHandle) +{ + int32_t minLen; + list_element_handle_t p; + shell_command_t *tmpCommand = NULL; + const char *namePtr; + const char *cmdName; + + minLen = (int32_t)SHELL_BUFFER_SIZE; + namePtr = NULL; + + /* Empty tab, list all commands */ + if (shellContextHandle->line[0] == '\0') + { + (void)SHELL_HelpCommand(shellContextHandle, 0, NULL); + return; + } + + SHELL_WriteWithCopy(shellContextHandle, "\r\n", 2); + + /* Do auto complete */ + p = LIST_GetHead(&shellContextHandle->commandContextListHead); + while (p != NULL) + { + tmpCommand = SHEEL_COMMAND_POINTER(p); + cmdName = tmpCommand->pcCommand; + if (SHELL_StringCompare(shellContextHandle->line, cmdName, (int32_t)strlen(shellContextHandle->line)) == 0) + { + /* Show possible matches */ + (void)SHELL_Printf(shellContextHandle, "%s ", cmdName); + if (minLen > ((int32_t)strlen(cmdName))) + { + namePtr = cmdName; + minLen = (int32_t)strlen(namePtr); + } + } + p = LIST_GetNext(p); + } + /* Auto complete string */ + if (namePtr != NULL) + { + (void)memcpy(shellContextHandle->line, namePtr, (uint32_t)minLen); + } + SHELL_PrintPrompt(shellContextHandle); + (void)SHELL_Write(shellContextHandle, shellContextHandle->line, strlen(shellContextHandle->line)); + return; +} + +static int32_t SHELL_StringCompare(const char *str1, const char *str2, int32_t count) +{ + while ((bool)(count--)) + { + if (*str1++ != *str2++) + { + return (int32_t)(*(str1 - 1) - *(str2 - 1)); + } + } + return 0; +} + +static int32_t SHELL_ParseLine(const char *cmd, uint32_t len, char *argv[]) +{ + uint32_t argc; + char *p; + uint32_t position; + + /* Init params */ + (void)memset(s_paramBuffer, (int)'\0', len + 1U); + (void)memcpy(s_paramBuffer, cmd, len); + + p = s_paramBuffer; + position = 0; + argc = 0; + + while (position < len) + { + /* Skip all blanks */ + while ((position < len) && ((char)(*p) == ' ')) + { + *p = '\0'; + p++; + position++; + } + + if (position >= len) + { + break; + } + + /* Process begin of a string */ + if (*p == '"') + { + p++; + position++; + argv[argc] = p; + argc++; + /* Skip this string */ + while ((*p != '"') && (position < len)) + { + p++; + position++; + } + /* Skip '"' */ + *p = '\0'; + p++; + position++; + } + else /* Normal char */ + { + argv[argc] = p; + argc++; + while (((char)*p != ' ') && (position < len)) + { + p++; + position++; + } + } + } + return (int32_t)argc; +} + +static shell_status_t SHELL_GetChar(shell_context_handle_t *shellContextHandle, uint8_t *ch) +{ + shell_status_t status; + +#if (!defined(SDK_DEBUGCONSOLE_UART) && (defined(SDK_DEBUGCONSOLE) && (SDK_DEBUGCONSOLE != 1))) + if (NULL == shellContextHandle->serialHandle) + { + int ret; + ret = getchar(); + if (ret > 0) + { + *ch = (uint8_t)ret; + status = kStatus_SHELL_Success; + } + else + { + status = kStatus_SHELL_Error; + } + } + else +#endif + { +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + uint32_t length = 0; + + (void)SerialManager_TryRead(shellContextHandle->serialReadHandle, ch, 1, &length); + + if (length > 0U) + { + status = kStatus_SHELL_Success; + } + else + { + status = kStatus_SHELL_Error; + } +#else + status = (shell_status_t)SerialManager_ReadBlocking(shellContextHandle->serialReadHandle, ch, 1); +#endif + } + + return status; +} + +shell_status_t SHELL_Init(shell_handle_t shellHandle, serial_handle_t serialHandle, char *prompt) +{ + shell_context_handle_t *shellContextHandle; + serial_manager_status_t status = kStatus_SerialManager_Error; + (void)status; + + assert(shellHandle); +#if !(!defined(SDK_DEBUGCONSOLE_UART) && (defined(SDK_DEBUGCONSOLE) && (SDK_DEBUGCONSOLE != 1))) + assert(serialHandle); +#endif + assert(prompt); + assert(SHELL_HANDLE_SIZE >= sizeof(shell_context_handle_t)); + + shellContextHandle = (shell_context_handle_t *)shellHandle; + + /* memory set for shellHandle */ + (void)memset(shellHandle, 0, SHELL_HANDLE_SIZE); + +#if (!defined(SDK_DEBUGCONSOLE_UART) && (defined(SDK_DEBUGCONSOLE) && (SDK_DEBUGCONSOLE != 1))) + if (NULL == serialHandle) + { + } + else +#endif + { +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + +#if defined(OSA_USED) + +#if (defined(SHELL_USE_COMMON_TASK) && (SHELL_USE_COMMON_TASK > 0U)) + (void)COMMON_TASK_init(); +#else + if (KOSA_StatusSuccess != OSA_EventCreate((osa_event_handle_t)shellContextHandle->event, 1U)) + { + return kStatus_SHELL_Error; + } + + if (KOSA_StatusSuccess != + OSA_TaskCreate((osa_task_handle_t)shellContextHandle->taskId, OSA_TASK(SHELL_Task), shellContextHandle)) + { + return kStatus_SHELL_Error; + } +#endif + +#endif + +#endif + } + + shellContextHandle->prompt = prompt; + shellContextHandle->serialHandle = serialHandle; + +#if (!defined(SDK_DEBUGCONSOLE_UART) && (defined(SDK_DEBUGCONSOLE) && (SDK_DEBUGCONSOLE != 1))) + if (NULL == serialHandle) + { + } + else +#endif + { + shellContextHandle->serialWriteHandle = (serial_write_handle_t)&shellContextHandle->serialWriteHandleBuffer[0]; + status = SerialManager_OpenWriteHandle(shellContextHandle->serialHandle, shellContextHandle->serialWriteHandle); + assert(kStatus_SerialManager_Success == status); + + shellContextHandle->serialReadHandle = (serial_read_handle_t)&shellContextHandle->serialReadHandleBuffer[0]; + status = SerialManager_OpenReadHandle(shellContextHandle->serialHandle, shellContextHandle->serialReadHandle); + assert(kStatus_SerialManager_Success == status); + +#if (defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + status = SerialManager_InstallRxCallback(shellContextHandle->serialReadHandle, SHELL_SerialManagerRxCallback, + shellContextHandle); + assert(kStatus_SerialManager_Success == status); +#endif + (void)status; + } + + (void)SHELL_RegisterCommand(shellContextHandle, SHELL_COMMAND(help)); + (void)SHELL_RegisterCommand(shellContextHandle, SHELL_COMMAND(exit)); + + SHELL_WriteWithCopy(shellContextHandle, "\r\nSHELL build: ", strlen("\r\nSHELL build: ")); + SHELL_WriteWithCopy(shellContextHandle, __DATE__, strlen(__DATE__)); + SHELL_WriteWithCopy(shellContextHandle, "\r\nCopyright 2020 NXP\r\n", strlen("\r\nCopyright 2020 NXP\r\n")); + SHELL_PrintPrompt(shellContextHandle); + + return kStatus_SHELL_Success; +} + +shell_status_t SHELL_RegisterCommand(shell_handle_t shellHandle, shell_command_t *shellCommand) +{ + shell_context_handle_t *shellContextHandle = (shell_context_handle_t *)shellHandle; + assert(shellHandle); + assert(shellCommand); + + /* memory set for shellHandle */ + (void)memset(&shellCommand->link, 0, sizeof(shellCommand->link)); + + (void)LIST_AddTail(&shellContextHandle->commandContextListHead, &shellCommand->link); + + return kStatus_SHELL_Success; +} + +shell_status_t SHELL_UnregisterCommand(shell_command_t *shellCommand) +{ + assert(shellCommand); + + (void)LIST_RemoveElement(&shellCommand->link); + + /* memory set for shellHandle */ + (void)memset(&shellCommand->link, 0, sizeof(shellCommand->link)); + + return kStatus_SHELL_Success; +} + +shell_status_t SHELL_Write(shell_handle_t shellHandle, char *buffer, uint32_t length) +{ + shell_context_handle_t *shellContextHandle; + uint32_t primask; + shell_status_t status; + + assert(shellHandle); + assert(buffer); + + if (!(bool)length) + { + return kStatus_SHELL_Success; + } + + shellContextHandle = (shell_context_handle_t *)shellHandle; + + primask = DisableGlobalIRQ(); + if ((bool)shellContextHandle->printBusy) + { + EnableGlobalIRQ(primask); + return kStatus_SHELL_Error; + } + shellContextHandle->printBusy = 1U; + EnableGlobalIRQ(primask); +#if (!defined(SDK_DEBUGCONSOLE_UART) && (defined(SDK_DEBUGCONSOLE) && (SDK_DEBUGCONSOLE != 1))) + if (NULL == shellContextHandle->serialHandle) + { + status = kStatus_SHELL_Success; + for (uint32_t index = 0; index < length; index++) + { + (void)putchar(buffer[index]); + } + } + else +#endif + { + status = (shell_status_t)SerialManager_WriteBlocking(shellContextHandle->serialWriteHandle, (uint8_t *)buffer, + length); + } + + shellContextHandle->printBusy = 0U; + + return status; +} + +/* For MISRA to fix const */ +static void SHELL_WriteWithCopy(shell_handle_t shellHandle, const char *buffer, uint32_t length) +{ + char s_shellWriteCopyBuffer[128]; + + assert(length <= 128UL); + + (void)memcpy(s_shellWriteCopyBuffer, buffer, length); + (void)SHELL_Write(shellHandle, s_shellWriteCopyBuffer, length); +} + +int SHELL_Printf(shell_handle_t shellHandle, const char *formatString, ...) +{ + shell_context_handle_t *shellContextHandle; + uint32_t length; + uint32_t primask; + va_list ap; + + assert(shellHandle); + assert(formatString); + + shellContextHandle = (shell_context_handle_t *)shellHandle; + + primask = DisableGlobalIRQ(); + if ((bool)shellContextHandle->printBusy) + { + EnableGlobalIRQ(primask); + return -1; + } + shellContextHandle->printBusy = 1U; + EnableGlobalIRQ(primask); + + va_start(ap, formatString); + + shellContextHandle->printLength = 0U; + length = (uint32_t)SHELL_Sprintf(shellHandle, formatString, ap); +#if (!defined(SDK_DEBUGCONSOLE_UART) && (defined(SDK_DEBUGCONSOLE) && (SDK_DEBUGCONSOLE != 1))) + if (NULL == shellContextHandle->serialHandle) + { + for (uint32_t index = 0; index < length; index++) + { + (void)putchar(shellContextHandle->printBuffer[index]); + } + } + else +#endif + { + (void)SerialManager_WriteBlocking(shellContextHandle->serialWriteHandle, + (uint8_t *)shellContextHandle->printBuffer, length); + } + va_end(ap); + + shellContextHandle->printBusy = 0U; + return (int32_t)shellContextHandle->printLength; +} + +void SHELL_ChangePrompt(shell_handle_t shellHandle, char *prompt) +{ + shell_context_handle_t *shellContextHandle; + assert(shellHandle); + assert(prompt); + + shellContextHandle = (shell_context_handle_t *)shellHandle; + + shellContextHandle->prompt = prompt; + SHELL_PrintPrompt(shellContextHandle); +} + +void SHELL_PrintPrompt(shell_handle_t shellHandle) +{ + shell_context_handle_t *shellContextHandle; + assert(shellHandle); + + shellContextHandle = (shell_context_handle_t *)shellHandle; + + SHELL_WriteWithCopy(shellContextHandle, "\r\n", 2U); /* MISRA C-2012 Rule 7.4 */ + (void)SHELL_Write(shellContextHandle, shellContextHandle->prompt, strlen(shellContextHandle->prompt)); +} diff --git a/devices/88MW320/utilities/fsl_shell.h b/devices/88MW320/utilities/fsl_shell.h new file mode 100644 index 000000000..28eace717 --- /dev/null +++ b/devices/88MW320/utilities/fsl_shell.h @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * Copyright 2016-2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef __FSL_SHELL_H__ +#define __FSL_SHELL_H__ + +/*! + * @addtogroup SHELL + * @{ + */ + +#include "fsl_common.h" +#include "fsl_component_serial_manager.h" +#include "fsl_component_generic_list.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief Whether use non-blocking mode. */ +#ifndef SHELL_NON_BLOCKING_MODE +#define SHELL_NON_BLOCKING_MODE SERIAL_MANAGER_NON_BLOCKING_MODE +#endif + +/*! @brief Macro to set on/off auto-complete feature. */ +#define SHELL_AUTO_COMPLETE (1U) + +/*! @brief Macro to set console buffer size. */ +#ifndef SHELL_BUFFER_SIZE +#define SHELL_BUFFER_SIZE (64U) +#endif + +/*! @brief Macro to set maximum arguments in command. */ +#define SHELL_MAX_ARGS (8U) + +/*! @brief Macro to set maximum count of history commands. */ +#ifndef SHELL_HISTORY_COUNT +#define SHELL_HISTORY_COUNT (3U) +#endif + +/*! @brief Macro to bypass arguments check */ +#define SHELL_IGNORE_PARAMETER_COUNT (0xFF) + +/*! @brief The handle size of the shell module. It is the sum of the SHELL_HISTORY_COUNT * SHELL_BUFFER_SIZE + + * SHELL_BUFFER_SIZE + SERIAL_MANAGER_READ_HANDLE_SIZE + SERIAL_MANAGER_WRITE_HANDLE_SIZE*/ +#define SHELL_HANDLE_SIZE \ + (160U + SHELL_HISTORY_COUNT * SHELL_BUFFER_SIZE + SHELL_BUFFER_SIZE + SERIAL_MANAGER_READ_HANDLE_SIZE + \ + SERIAL_MANAGER_WRITE_HANDLE_SIZE) + +/*! @brief Macro to determine whether use common task. */ +#ifndef SHELL_USE_COMMON_TASK +#define SHELL_USE_COMMON_TASK (0U) +#endif + +/*! @brief Macro to set shell task priority. */ +#ifndef SHELL_TASK_PRIORITY +#define SHELL_TASK_PRIORITY (2U) +#endif + +/*! @brief Macro to set shell task stack size. */ +#ifndef SHELL_TASK_STACK_SIZE +#define SHELL_TASK_STACK_SIZE (1000U) +#endif + +/*! @brief Shell status */ +typedef enum _shell_status +{ + kStatus_SHELL_Success = kStatus_Success, /*!< Success */ + kStatus_SHELL_Error = MAKE_STATUS(kStatusGroup_SHELL, 1), /*!< Failed */ + kStatus_SHELL_OpenWriteHandleFailed = MAKE_STATUS(kStatusGroup_SHELL, 2), /*!< Open write handle failed */ + kStatus_SHELL_OpenReadHandleFailed = MAKE_STATUS(kStatusGroup_SHELL, 3), /*!< Open read handle failed */ +} shell_status_t; + +/*! @brief The handle of the shell module */ +typedef void *shell_handle_t; + +/*! @brief User command function prototype. */ +typedef shell_status_t (*cmd_function_t)(shell_handle_t shellHandle, int32_t argc, char **argv); + +/*! @brief User command data configuration structure. */ +typedef struct _shell_command +{ + const char *pcCommand; /*!< The command that is executed. For example "help". It must be all lower case. */ + char *pcHelpString; /*!< String that describes how to use the command. It should start with the command itself, + and end with "\r\n". For example "help: Returns a list of all the commands\r\n". */ + const cmd_function_t + pFuncCallBack; /*!< A pointer to the callback function that returns the output generated by the command. */ + uint8_t cExpectedNumberOfParameters; /*!< Commands expect a fixed number of parameters, which may be zero. */ + list_element_t link; /*!< link of the element */ +} shell_command_t; + +/*! + * @brief Defines the shell handle + * + * This macro is used to define a 4 byte aligned shell handle. + * Then use "(shell_handle_t)name" to get the shell handle. + * + * The macro should be global and could be optional. You could also define shell handle by yourself. + * + * This is an example, + * @code + * SHELL_HANDLE_DEFINE(shellHandle); + * @endcode + * + * @param name The name string of the shell handle. + */ +#define SHELL_HANDLE_DEFINE(name) uint32_t name[((SHELL_HANDLE_SIZE + sizeof(uint32_t) - 1U) / sizeof(uint32_t))] + +#if defined(__ICCARM__) +/* disable misra 19.13 */ +_Pragma("diag_suppress=Pm120") +#endif +/*! + * @brief Defines the shell command structure + * + * This macro is used to define the shell command structure #shell_command_t. + * And then uses the macro SHELL_COMMAND to get the command structure pointer. + * The macro should not be used in any function. + * + * This is a example, + * @code + * SHELL_COMMAND_DEFINE(exit, "\r\n\"exit\": Exit program\r\n", SHELL_ExitCommand, 0); + * SHELL_RegisterCommand(s_shellHandle, SHELL_COMMAND(exit)); + * @endcode + * + * @param command The command string of the command. The double quotes do not need. Such as exit for "exit", + * help for "Help", read for "read". + * @param descriptor The description of the command is used for showing the command usage when "help" is typing. + * @param callback The callback of the command is used to handle the command line when the input command is matched. + * @param paramCount The max parameter count of the current command. + */ +#define SHELL_COMMAND_DEFINE(command, descriptor, callback, paramCount) \ + \ + shell_command_t g_shellCommand##command = { \ + (#command), (descriptor), (callback), (paramCount), {0}, \ + } + +/*! + * @brief Gets the shell command pointer + * + * This macro is used to get the shell command pointer. The macro should not be used before the macro + * SHELL_COMMAND_DEFINE is used. + * + * @param command The command string of the command. The double quotes do not need. Such as exit for "exit", + * help for "Help", read for "read". + */ +#define SHELL_COMMAND(command) &g_shellCommand##command + +#if defined(__ICCARM__) + _Pragma("diag_default=Pm120") +#endif + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) + extern "C" +{ +#endif /* _cplusplus */ + + /*! + * @name Shell functional operation + * @{ + */ + + /*! + * @brief Initializes the shell module + * + * This function must be called before calling all other Shell functions. + * Call operation the Shell commands with user-defined settings. + * The example below shows how to set up the Shell and + * how to call the SHELL_Init function by passing in these parameters. + * This is an example. + * @code + * static SHELL_HANDLE_DEFINE(s_shellHandle); + * SHELL_Init((shell_handle_t)s_shellHandle, (serial_handle_t)s_serialHandle, "Test@SHELL>"); + * @endcode + * @param shellHandle Pointer to point to a memory space of size #SHELL_HANDLE_SIZE allocated by the caller. + * The handle should be 4 byte aligned, because unaligned access doesn't be supported on some devices. + * You can define the handle in the following two ways: + * #SHELL_HANDLE_DEFINE(shellHandle); + * or + * uint32_t shellHandle[((SHELL_HANDLE_SIZE + sizeof(uint32_t) - 1U) / sizeof(uint32_t))]; + * @param serialHandle The serial manager module handle pointer. + * @param prompt The string prompt pointer of Shell. Only the global variable can be passed. + * @retval kStatus_SHELL_Success The shell initialization succeed. + * @retval kStatus_SHELL_Error An error occurred when the shell is initialized. + * @retval kStatus_SHELL_OpenWriteHandleFailed Open the write handle failed. + * @retval kStatus_SHELL_OpenReadHandleFailed Open the read handle failed. + */ + shell_status_t SHELL_Init(shell_handle_t shellHandle, serial_handle_t serialHandle, char *prompt); + + /*! + * @brief Registers the shell command + * + * This function is used to register the shell command by using the command configuration shell_command_config_t. + * This is a example, + * @code + * SHELL_COMMAND_DEFINE(exit, "\r\n\"exit\": Exit program\r\n", SHELL_ExitCommand, 0); + * SHELL_RegisterCommand(s_shellHandle, SHELL_COMMAND(exit)); + * @endcode + * @param shellHandle The shell module handle pointer. + * @param shellCommand The command element. + * @retval kStatus_SHELL_Success Successfully register the command. + * @retval kStatus_SHELL_Error An error occurred. + */ + shell_status_t SHELL_RegisterCommand(shell_handle_t shellHandle, shell_command_t * shellCommand); + + /*! + * @brief Unregisters the shell command + * + * This function is used to unregister the shell command. + * + * @param shellCommand The command element. + * @retval kStatus_SHELL_Success Successfully unregister the command. + */ + shell_status_t SHELL_UnregisterCommand(shell_command_t * shellCommand); + + /*! + * @brief Sends data to the shell output stream. + * + * This function is used to send data to the shell output stream. + * + * @param shellHandle The shell module handle pointer. + * @param buffer Start address of the data to write. + * @param length Length of the data to write. + * @retval kStatus_SHELL_Success Successfully send data. + * @retval kStatus_SHELL_Error An error occurred. + */ + shell_status_t SHELL_Write(shell_handle_t shellHandle, char *buffer, uint32_t length); + + /*! + * @brief Writes formatted output to the shell output stream. + * + * Call this function to write a formatted output to the shell output stream. + * + * @param shellHandle The shell module handle pointer. + * + * @param formatString Format string. + * @return Returns the number of characters printed or a negative value if an error occurs. + */ + int SHELL_Printf(shell_handle_t shellHandle, const char *formatString, ...); + + /*! + * @brief Change shell prompt. + * + * Call this function to change shell prompt. + * + * @param shellHandle The shell module handle pointer. + * + * @param prompt The string which will be used for command prompt + * @return NULL. + */ + void SHELL_ChangePrompt(shell_handle_t shellHandle, char *prompt); + + /*! + * @brief Print shell prompt. + * + * Call this function to print shell prompt. + * + * @param shellHandle The shell module handle pointer. + * + * @return NULL. + */ + void SHELL_PrintPrompt(shell_handle_t shellHandle); + +/*! + * @brief The task function for Shell. + * The task function for Shell; The function should be polled by upper layer. + * This function does not return until Shell command exit was called. + * + * @param shellHandle The shell module handle pointer. + */ +#if !(defined(SHELL_NON_BLOCKING_MODE) && (SHELL_NON_BLOCKING_MODE > 0U)) + void SHELL_Task(shell_handle_t shellHandle); +#endif + + /* @} */ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* __FSL_SHELL_H__ */ diff --git a/devices/K32L3A60/device_CMSIS.cmake b/devices/K32L3A60/device_CMSIS.cmake index 758c02b4d..5b75e7524 100644 --- a/devices/K32L3A60/device_CMSIS.cmake +++ b/devices/K32L3A60/device_CMSIS.cmake @@ -5,7 +5,7 @@ if(NOT DEVICE_CMSIS_INCLUDED) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ) - target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + target_include_directories(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/. ) diff --git a/devices/LPC54114/device_CMSIS.cmake b/devices/LPC54114/device_CMSIS.cmake index f3832a66c..377274b5f 100644 --- a/devices/LPC54114/device_CMSIS.cmake +++ b/devices/LPC54114/device_CMSIS.cmake @@ -5,7 +5,7 @@ if(NOT DEVICE_CMSIS_INCLUDED) target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ) - target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + target_include_directories(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/. ) diff --git a/drivers/common/fsl_common.c b/drivers/common/fsl_common.c index ec52acbfa..748a6c97f 100644 --- a/drivers/common/fsl_common.c +++ b/drivers/common/fsl_common.c @@ -24,16 +24,17 @@ typedef struct _mem_align_control_block #if defined(ENABLE_RAM_VECTOR_TABLE) uint32_t InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler) { -#ifdef __VECTOR_TABLE -#undef __VECTOR_TABLE -#endif - /* Addresses for VECTOR_TABLE and VECTOR_RAM come from the linker file */ #if defined(__CC_ARM) || defined(__ARMCC_VERSION) extern uint32_t Image$$VECTOR_ROM$$Base[]; extern uint32_t Image$$VECTOR_RAM$$Base[]; extern uint32_t Image$$RW_m_data$$Base[]; +/* Undef __VECTOR_TABLE to avoid duplicate definition in cmsis_clang.h*/ +#ifdef __VECTOR_TABLE +#undef __VECTOR_TABLE +#endif + #define __VECTOR_TABLE Image$$VECTOR_ROM$$Base #define __VECTOR_RAM Image$$VECTOR_RAM$$Base #define __RAM_VECTOR_TABLE_SIZE (((uint32_t)Image$$RW_m_data$$Base - (uint32_t)Image$$VECTOR_RAM$$Base)) @@ -63,9 +64,9 @@ uint32_t InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler) SCB->VTOR = (uint32_t)__VECTOR_RAM; } - ret = __VECTOR_RAM[(int32_t)irq + 16]; + ret = __VECTOR_RAM[irq + 16]; /* make sure the __VECTOR_RAM is noncachable */ - __VECTOR_RAM[(int32_t)irq + 16] = irqHandler; + __VECTOR_RAM[irq + 16] = irqHandler; EnableGlobalIRQ(irqMaskValue); SDK_ISR_EXIT_BARRIER; @@ -76,17 +77,6 @@ uint32_t InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler) #endif /* __GIC_PRIO_BITS. */ #if (defined(FSL_FEATURE_SOC_SYSCON_COUNT) && (FSL_FEATURE_SOC_SYSCON_COUNT > 0)) - -/* - * When FSL_FEATURE_POWERLIB_EXTEND is defined to non-zero value, - * powerlib should be used instead of these functions. - */ -#if !(defined(FSL_FEATURE_POWERLIB_EXTEND) && (FSL_FEATURE_POWERLIB_EXTEND != 0)) - -/* - * When the SYSCON STARTER registers are discontinuous, these functions are - * implemented in fsl_power.c. - */ #if !(defined(FSL_FEATURE_SYSCON_STARTER_DISCONTINUOUS) && FSL_FEATURE_SYSCON_STARTER_DISCONTINUOUS) void EnableDeepSleepIRQ(IRQn_Type interrupt) @@ -101,15 +91,15 @@ void EnableDeepSleepIRQ(IRQn_Type interrupt) intNumber -= 32u; } - SYSCON->STARTERSET[index] = 1UL << intNumber; - (void)EnableIRQ(interrupt); /* also enable interrupt at NVIC */ + SYSCON->STARTERSET[index] = 1u << intNumber; + EnableIRQ(interrupt); /* also enable interrupt at NVIC */ } void DisableDeepSleepIRQ(IRQn_Type interrupt) { uint32_t intNumber = (uint32_t)interrupt; - (void)DisableIRQ(interrupt); /* also disable interrupt at NVIC */ + DisableIRQ(interrupt); /* also disable interrupt at NVIC */ uint32_t index = 0; while (intNumber >= 32u) @@ -118,31 +108,15 @@ void DisableDeepSleepIRQ(IRQn_Type interrupt) intNumber -= 32u; } - SYSCON->STARTERCLR[index] = 1UL << intNumber; + SYSCON->STARTERCLR[index] = 1u << intNumber; } #endif /* FSL_FEATURE_SYSCON_STARTER_DISCONTINUOUS */ -#endif /* FSL_FEATURE_POWERLIB_EXTEND */ #endif /* FSL_FEATURE_SOC_SYSCON_COUNT */ void *SDK_Malloc(size_t size, size_t alignbytes) { mem_align_cb_t *p_cb = NULL; - uint32_t alignedsize; - - /* Check overflow. */ - alignedsize = SDK_SIZEALIGN(size, alignbytes); - if (alignedsize < size) - { - return NULL; - } - - if (alignedsize > SIZE_MAX - alignbytes - sizeof(mem_align_cb_t)) - { - return NULL; - } - - alignedsize += alignbytes + sizeof(mem_align_cb_t); - + uint32_t alignedsize = SDK_SIZEALIGN(size, alignbytes) + alignbytes + sizeof(mem_align_cb_t); union { void *pointer_value; @@ -191,7 +165,7 @@ void SDK_Free(void *ptr) * @param count Counts of loop needed for dalay. */ #if defined(SDK_DELAY_USE_DWT) && defined(DWT) -static void enableCpuCycleCounter(void) +void enableCpuCycleCounter(void) { /* Make sure the DWT trace fucntion is enabled. */ if (CoreDebug_DEMCR_TRCENA_Msk != (CoreDebug_DEMCR_TRCENA_Msk & CoreDebug->DEMCR)) @@ -209,18 +183,18 @@ static void enableCpuCycleCounter(void) } } -static uint32_t getCpuCycleCount(void) +uint32_t getCpuCycleCount(void) { return DWT->CYCCNT; } #elif defined __XCC__ extern uint32_t xthal_get_ccount(void); -static void enableCpuCycleCounter(void) +void enableCpuCycleCounter(void) { /* do nothing */ } -static uint32_t getCpuCycleCount(void) +uint32_t getCpuCycleCount(void) { return xthal_get_ccount(); } @@ -262,17 +236,17 @@ static void DelayLoop(uint32_t count) /*! * @brief Delay at least for some time. * Please note that, if not uses DWT, this API will use while loop for delay, different run-time environments have - * effect on the delay time. If precise delay is needed, please enable DWT delay. The two parmeters delayTime_us and - * coreClock_Hz have limitation. For example, in the platform with 1GHz coreClock_Hz, the delayTime_us only supports + * effect on the delay time. If precise delay is needed, please enable DWT delay. The two parmeters delay_us and + * coreClock_Hz have limitation. For example, in the platform with 1GHz coreClock_Hz, the delay_us only supports * up to 4294967 in current code. If long time delay is needed, please implement a new delay function. * - * @param delayTime_us Delay time in unit of microsecond. + * @param delay_us Delay time in unit of microsecond. * @param coreClock_Hz Core clock frequency with Hz. */ -void SDK_DelayAtLeastUs(uint32_t delayTime_us, uint32_t coreClock_Hz) +void SDK_DelayAtLeastUs(uint32_t delay_us, uint32_t coreClock_Hz) { - assert(0U != delayTime_us); - uint64_t count = USEC_TO_COUNT(delayTime_us, coreClock_Hz); + assert(0U != delay_us); + uint64_t count = USEC_TO_COUNT(delay_us, coreClock_Hz); assert(count <= UINT32_MAX); #if defined(SDK_DELAY_USE_DWT) && defined(DWT) || (defined __XCC__) /* Use DWT for better accuracy */ diff --git a/drivers/common/fsl_common.h b/drivers/common/fsl_common.h index c7da1b526..349f10c0b 100644 --- a/drivers/common/fsl_common.h +++ b/drivers/common/fsl_common.h @@ -15,7 +15,7 @@ #include #include -#if defined(__ICCARM__) || (defined(__CC_ARM) || defined(__ARMCC_VERSION)) || defined(__GNUC__) +#if defined(__ICCARM__) || (defined(__CC_ARM) || defined(__ARMCC_VERSION)) #include #endif @@ -48,7 +48,7 @@ /*! @name Driver version */ /*@{*/ /*! @brief common driver version. */ -#define FSL_COMMON_DRIVER_VERSION (MAKE_VERSION(2, 2, 9)) +#define FSL_COMMON_DRIVER_VERSION (MAKE_VERSION(2, 2, 8)) /*@}*/ /* Debug console type definition. */ @@ -172,6 +172,9 @@ enum _status_groups kStatusGroup_MECC = 152, /*!< Group number for MECC status codes. */ kStatusGroup_ENET_QOS = 153, /*!< Group number for ENET_QOS status codes. */ kStatusGroup_LOG = 154, /*!< Group number for LOG status codes. */ + kStatusGroup_SDIOC = 155, /*!< Group number for SDIOC status codes. */ + + kStatusGroup_SSP = 156, /*!< Group number for SSP status codes. */ }; /*! \public @@ -754,7 +757,7 @@ void DefaultISR(void); } #if defined(FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) && (FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS > 0) - else if ((int32_t)interrupt >= (int32_t)FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) + else if (interrupt >= FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) { status = kStatus_Fail; } @@ -798,7 +801,7 @@ void DefaultISR(void); } #if defined(FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) && (FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS > 0) - else if ((int32_t)interrupt >= (int32_t)FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) + else if (interrupt >= FSL_FEATURE_NUMBER_OF_LEVEL1_INT_VECTORS) { status = kStatus_Fail; } @@ -879,12 +882,6 @@ void DefaultISR(void); #endif /* ENABLE_RAM_VECTOR_TABLE. */ #if (defined(FSL_FEATURE_SOC_SYSCON_COUNT) && (FSL_FEATURE_SOC_SYSCON_COUNT > 0)) - - /* - * When FSL_FEATURE_POWERLIB_EXTEND is defined to non-zero value, - * powerlib should be used instead of these functions. - */ -#if !(defined(FSL_FEATURE_POWERLIB_EXTEND) && (FSL_FEATURE_POWERLIB_EXTEND != 0)) /*! * @brief Enable specific interrupt for wake-up from deep-sleep mode. * @@ -914,7 +911,6 @@ void DefaultISR(void); * @param interrupt The IRQ number. */ void DisableDeepSleepIRQ(IRQn_Type interrupt); -#endif /* FSL_FEATURE_POWERLIB_EXTEND */ #endif /* FSL_FEATURE_SOC_SYSCON_COUNT */ /*! @@ -940,10 +936,10 @@ void DefaultISR(void); * Please note that, this API uses while loop for delay, different run-time environments make the time not precise, * if precise delay count was needed, please implement a new delay function with hardware timer. * - * @param delayTime_us Delay time in unit of microsecond. + * @param delay_us Delay time in unit of microsecond. * @param coreClock_Hz Core clock frequency with Hz. */ - void SDK_DelayAtLeastUs(uint32_t delayTime_us, uint32_t coreClock_Hz); + void SDK_DelayAtLeastUs(uint32_t delay_us, uint32_t coreClock_Hz); #if defined(__cplusplus) } diff --git a/drivers/dspi/driver_dspi_freertos.cmake b/drivers/dspi/driver_dspi_freertos.cmake index cee51beb9..749429d37 100644 --- a/drivers/dspi/driver_dspi_freertos.cmake +++ b/drivers/dspi/driver_dspi_freertos.cmake @@ -11,6 +11,9 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component +if(${MCUX_DEVICE} STREQUAL "MK22F51212") + include(middleware_freertos-kernel_MK22F51212) +endif() if(${MCUX_DEVICE} STREQUAL "MK28FA15") include(middleware_freertos-kernel_MK28FA15) endif() @@ -23,8 +26,5 @@ endif() if(${MCUX_DEVICE} STREQUAL "MKV31F51212") include(middleware_freertos-kernel_MKV31F51212) endif() -if(${MCUX_DEVICE} STREQUAL "MK22F51212") - include(middleware_freertos-kernel_MK22F51212) -endif() include(driver_dspi) diff --git a/drivers/ecspi/driver_ecspi_freertos.cmake b/drivers/ecspi/driver_ecspi_freertos.cmake index a08b0d031..934cdf60c 100644 --- a/drivers/ecspi/driver_ecspi_freertos.cmake +++ b/drivers/ecspi/driver_ecspi_freertos.cmake @@ -11,14 +11,14 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") - include(middleware_freertos-kernel_MIMX8MQ6) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8MM6") include(middleware_freertos-kernel_MIMX8MM6) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8MN6") include(middleware_freertos-kernel_MIMX8MN6) endif() +if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") + include(middleware_freertos-kernel_MIMX8MQ6) +endif() include(driver_ecspi) diff --git a/drivers/enet/driver_enet.cmake b/drivers/enet/driver_enet.cmake index 0a96ede40..29d0b794a 100644 --- a/drivers/enet/driver_enet.cmake +++ b/drivers/enet/driver_enet.cmake @@ -11,18 +11,6 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(driver_common) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(driver_common) -endif() -if(${MCUX_DEVICE} STREQUAL "MK64F12") - include(driver_common) -endif() -if(${MCUX_DEVICE} STREQUAL "MK66F18") - include(driver_common) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(driver_memory) endif() @@ -35,10 +23,22 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(driver_common) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") + include(driver_common) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(driver_common) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(driver_common) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(driver_common) +endif() +if(${MCUX_DEVICE} STREQUAL "MK64F12") + include(driver_common) +endif() +if(${MCUX_DEVICE} STREQUAL "MK66F18") include(driver_common) endif() diff --git a/drivers/flexcan/driver_flexcan_edma.cmake b/drivers/flexcan/driver_flexcan_edma.cmake index 0b09944d5..5b3f4e6a5 100644 --- a/drivers/flexcan/driver_flexcan_edma.cmake +++ b/drivers/flexcan/driver_flexcan_edma.cmake @@ -11,23 +11,23 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(driver_edma) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(driver_dma3) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") include(driver_dma3) endif() -if(${MCUX_DEVICE} STREQUAL "MKV11Z7") - include(driver_edma) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") include(driver_dma3) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(driver_edma) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(driver_edma) +endif() +if(${MCUX_DEVICE} STREQUAL "MKV11Z7") + include(driver_edma) +endif() include(driver_flexcan) diff --git a/drivers/flexcomm/driver_flexcomm_i2c_freertos.cmake b/drivers/flexcomm/driver_flexcomm_i2c_freertos.cmake index 8b905551a..52943a05a 100644 --- a/drivers/flexcomm/driver_flexcomm_i2c_freertos.cmake +++ b/drivers/flexcomm/driver_flexcomm_i2c_freertos.cmake @@ -11,30 +11,30 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component +if(${MCUX_DEVICE} STREQUAL "LPC51U68") + include(middleware_freertos-kernel_LPC51U68) +endif() if(${MCUX_DEVICE} STREQUAL "LPC54114_cm4") include(middleware_freertos-kernel_LPC54114_cm4) endif() if(${MCUX_DEVICE} STREQUAL "LPC54628") include(middleware_freertos-kernel_LPC54628) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S16") - include(middleware_freertos-kernel_LPC55S16) -endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018") include(middleware_freertos-kernel_LPC54S018) endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018M") include(middleware_freertos-kernel_LPC54S018M) endif() -if(${MCUX_DEVICE} STREQUAL "LPC51U68") - include(middleware_freertos-kernel_LPC51U68) -endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") - include(middleware_freertos-kernel_LPC55S69_cm33_core0) +if(${MCUX_DEVICE} STREQUAL "LPC55S16") + include(middleware_freertos-kernel_LPC55S16) endif() if(${MCUX_DEVICE} STREQUAL "LPC55S28") include(middleware_freertos-kernel_LPC55S28) endif() +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") + include(middleware_freertos-kernel_LPC55S69_cm33_core0) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") include(middleware_freertos-kernel_MIMXRT685S_cm33) endif() diff --git a/drivers/flexcomm/driver_flexcomm_spi_freertos.cmake b/drivers/flexcomm/driver_flexcomm_spi_freertos.cmake index 0f0e09ece..befc254d0 100644 --- a/drivers/flexcomm/driver_flexcomm_spi_freertos.cmake +++ b/drivers/flexcomm/driver_flexcomm_spi_freertos.cmake @@ -11,30 +11,30 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component +if(${MCUX_DEVICE} STREQUAL "LPC51U68") + include(middleware_freertos-kernel_LPC51U68) +endif() if(${MCUX_DEVICE} STREQUAL "LPC54114_cm4") include(middleware_freertos-kernel_LPC54114_cm4) endif() if(${MCUX_DEVICE} STREQUAL "LPC54628") include(middleware_freertos-kernel_LPC54628) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S16") - include(middleware_freertos-kernel_LPC55S16) -endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018") include(middleware_freertos-kernel_LPC54S018) endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018M") include(middleware_freertos-kernel_LPC54S018M) endif() -if(${MCUX_DEVICE} STREQUAL "LPC51U68") - include(middleware_freertos-kernel_LPC51U68) -endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") - include(middleware_freertos-kernel_LPC55S69_cm33_core0) +if(${MCUX_DEVICE} STREQUAL "LPC55S16") + include(middleware_freertos-kernel_LPC55S16) endif() if(${MCUX_DEVICE} STREQUAL "LPC55S28") include(middleware_freertos-kernel_LPC55S28) endif() +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") + include(middleware_freertos-kernel_LPC55S69_cm33_core0) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") include(middleware_freertos-kernel_MIMXRT685S_cm33) endif() diff --git a/drivers/flexcomm/driver_flexcomm_usart_freertos.cmake b/drivers/flexcomm/driver_flexcomm_usart_freertos.cmake index 31c04f36b..e28546fa5 100644 --- a/drivers/flexcomm/driver_flexcomm_usart_freertos.cmake +++ b/drivers/flexcomm/driver_flexcomm_usart_freertos.cmake @@ -11,30 +11,30 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component +if(${MCUX_DEVICE} STREQUAL "LPC51U68") + include(middleware_freertos-kernel_LPC51U68) +endif() if(${MCUX_DEVICE} STREQUAL "LPC54114_cm4") include(middleware_freertos-kernel_LPC54114_cm4) endif() if(${MCUX_DEVICE} STREQUAL "LPC54628") include(middleware_freertos-kernel_LPC54628) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S16") - include(middleware_freertos-kernel_LPC55S16) -endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018") include(middleware_freertos-kernel_LPC54S018) endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018M") include(middleware_freertos-kernel_LPC54S018M) endif() -if(${MCUX_DEVICE} STREQUAL "LPC51U68") - include(middleware_freertos-kernel_LPC51U68) -endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") - include(middleware_freertos-kernel_LPC55S69_cm33_core0) +if(${MCUX_DEVICE} STREQUAL "LPC55S16") + include(middleware_freertos-kernel_LPC55S16) endif() if(${MCUX_DEVICE} STREQUAL "LPC55S28") include(middleware_freertos-kernel_LPC55S28) endif() +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") + include(middleware_freertos-kernel_LPC55S69_cm33_core0) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") include(middleware_freertos-kernel_MIMXRT685S_cm33) endif() diff --git a/drivers/i2c/driver_i2c_freertos.cmake b/drivers/i2c/driver_i2c_freertos.cmake index 623441d6b..0a857c215 100644 --- a/drivers/i2c/driver_i2c_freertos.cmake +++ b/drivers/i2c/driver_i2c_freertos.cmake @@ -11,32 +11,32 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MK28FA15") - include(middleware_freertos-kernel_MK28FA15) -endif() if(${MCUX_DEVICE} STREQUAL "K32L2B31A") include(middleware_freertos-kernel_K32L2B31A) endif() +if(${MCUX_DEVICE} STREQUAL "MK22F51212") + include(middleware_freertos-kernel_MK22F51212) +endif() +if(${MCUX_DEVICE} STREQUAL "MK28FA15") + include(middleware_freertos-kernel_MK28FA15) +endif() if(${MCUX_DEVICE} STREQUAL "MK64F12") include(middleware_freertos-kernel_MK64F12) endif() if(${MCUX_DEVICE} STREQUAL "MK66F18") include(middleware_freertos-kernel_MK66F18) endif() +if(${MCUX_DEVICE} STREQUAL "MKL27Z644") + include(middleware_freertos-kernel_MKL27Z644) +endif() +if(${MCUX_DEVICE} STREQUAL "MKM35Z7") + include(middleware_freertos-kernel_MKM35Z7) +endif() if(${MCUX_DEVICE} STREQUAL "MKV11Z7") include(middleware_freertos-kernel_MKV11Z7) endif() if(${MCUX_DEVICE} STREQUAL "MKV31F51212") include(middleware_freertos-kernel_MKV31F51212) endif() -if(${MCUX_DEVICE} STREQUAL "MK22F51212") - include(middleware_freertos-kernel_MK22F51212) -endif() -if(${MCUX_DEVICE} STREQUAL "MKM35Z7") - include(middleware_freertos-kernel_MKM35Z7) -endif() -if(${MCUX_DEVICE} STREQUAL "MKL27Z644") - include(middleware_freertos-kernel_MKL27Z644) -endif() include(driver_i2c) diff --git a/drivers/ii2c/driver_ii2c_freertos.cmake b/drivers/ii2c/driver_ii2c_freertos.cmake index 386507406..ff6f83eab 100644 --- a/drivers/ii2c/driver_ii2c_freertos.cmake +++ b/drivers/ii2c/driver_ii2c_freertos.cmake @@ -11,14 +11,14 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") - include(middleware_freertos-kernel_MIMX8MQ6) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8MM6") include(middleware_freertos-kernel_MIMX8MM6) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8MN6") include(middleware_freertos-kernel_MIMX8MN6) endif() +if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") + include(middleware_freertos-kernel_MIMX8MQ6) +endif() include(driver_ii2c) diff --git a/drivers/iuart/driver_iuart_freertos.cmake b/drivers/iuart/driver_iuart_freertos.cmake index efb8042b6..3cda0051a 100644 --- a/drivers/iuart/driver_iuart_freertos.cmake +++ b/drivers/iuart/driver_iuart_freertos.cmake @@ -11,14 +11,14 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") - include(middleware_freertos-kernel_MIMX8MQ6) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8MM6") include(middleware_freertos-kernel_MIMX8MM6) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8MN6") include(middleware_freertos-kernel_MIMX8MN6) endif() +if(${MCUX_DEVICE} STREQUAL "MIMX8MQ6") + include(middleware_freertos-kernel_MIMX8MQ6) +endif() include(driver_iuart) diff --git a/drivers/lpi2c/driver_lpi2c_edma.cmake b/drivers/lpi2c/driver_lpi2c_edma.cmake index 44929abd8..8551062aa 100644 --- a/drivers/lpi2c/driver_lpi2c_edma.cmake +++ b/drivers/lpi2c/driver_lpi2c_edma.cmake @@ -11,13 +11,16 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") + include(driver_edma) +endif() +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") include(driver_edma) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") @@ -29,31 +32,28 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") include(driver_dma3) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") - include(driver_edma) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") include(driver_edma) endif() diff --git a/drivers/lpi2c/driver_lpi2c_freertos.cmake b/drivers/lpi2c/driver_lpi2c_freertos.cmake index 3eb797f53..6c63381dd 100644 --- a/drivers/lpi2c/driver_lpi2c_freertos.cmake +++ b/drivers/lpi2c/driver_lpi2c_freertos.cmake @@ -11,17 +11,14 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(middleware_freertos-kernel_MIMXRT1052) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(middleware_freertos-kernel_MIMXRT1064) +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") + include(middleware_freertos-kernel_K32L2A41A) endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") - include(middleware_freertos-kernel_MKE15Z7) +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") + include(middleware_freertos-kernel_K32L3A60_cm4) endif() -if(${MCUX_DEVICE} STREQUAL "MKE16Z4") - include(middleware_freertos-kernel_MKE16Z4) +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") + include(middleware_freertos-kernel_MCIMX7U5) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(middleware_freertos-kernel_MIMX8QM6_cm4_core0) @@ -35,20 +32,23 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(middleware_freertos-kernel_MIMXRT1021) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") + include(middleware_freertos-kernel_MIMXRT1024) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(middleware_freertos-kernel_MIMXRT1052) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(middleware_freertos-kernel_MIMXRT1062) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") - include(middleware_freertos-kernel_K32L3A60_cm4) -endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") - include(middleware_freertos-kernel_MCIMX7U5) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(middleware_freertos-kernel_MIMXRT1064) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") - include(middleware_freertos-kernel_MIMXRT1024) +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") + include(middleware_freertos-kernel_MKE15Z7) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") - include(middleware_freertos-kernel_K32L2A41A) +if(${MCUX_DEVICE} STREQUAL "MKE16Z4") + include(middleware_freertos-kernel_MKE16Z4) endif() include(driver_lpi2c) diff --git a/drivers/lpspi/driver_lpspi_edma.cmake b/drivers/lpspi/driver_lpspi_edma.cmake index 201c41b64..d0e5e0fc1 100644 --- a/drivers/lpspi/driver_lpspi_edma.cmake +++ b/drivers/lpspi/driver_lpspi_edma.cmake @@ -11,13 +11,16 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") + include(driver_edma) +endif() +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") include(driver_edma) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") @@ -26,31 +29,28 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") include(driver_dma3) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") - include(driver_edma) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") include(driver_edma) endif() diff --git a/drivers/lpspi/driver_lpspi_freertos.cmake b/drivers/lpspi/driver_lpspi_freertos.cmake index cdb7ac5b4..e4aad1928 100644 --- a/drivers/lpspi/driver_lpspi_freertos.cmake +++ b/drivers/lpspi/driver_lpspi_freertos.cmake @@ -11,17 +11,17 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(middleware_freertos-kernel_MIMXRT1052) +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") + include(middleware_freertos-kernel_K32L2A41A) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(middleware_freertos-kernel_MIMXRT1064) +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") + include(middleware_freertos-kernel_K32L3A60_cm0plus) endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") - include(middleware_freertos-kernel_MKE15Z7) +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") + include(middleware_freertos-kernel_K32L3A60_cm4) endif() -if(${MCUX_DEVICE} STREQUAL "MKE16Z4") - include(middleware_freertos-kernel_MKE16Z4) +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") + include(middleware_freertos-kernel_MCIMX7U5) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(middleware_freertos-kernel_MIMX8QM6_cm4_core0) @@ -29,29 +29,29 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") include(middleware_freertos-kernel_MIMX8QM6_cm4_core1) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") + include(middleware_freertos-kernel_MIMXRT1015) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(middleware_freertos-kernel_MIMXRT1021) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") - include(middleware_freertos-kernel_MIMXRT1062) -endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") - include(middleware_freertos-kernel_K32L3A60_cm0plus) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") + include(middleware_freertos-kernel_MIMXRT1024) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") - include(middleware_freertos-kernel_K32L3A60_cm4) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(middleware_freertos-kernel_MIMXRT1052) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") - include(middleware_freertos-kernel_MCIMX7U5) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") + include(middleware_freertos-kernel_MIMXRT1062) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") - include(middleware_freertos-kernel_MIMXRT1024) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(middleware_freertos-kernel_MIMXRT1064) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") - include(middleware_freertos-kernel_K32L2A41A) +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") + include(middleware_freertos-kernel_MKE15Z7) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") - include(middleware_freertos-kernel_MIMXRT1015) +if(${MCUX_DEVICE} STREQUAL "MKE16Z4") + include(middleware_freertos-kernel_MKE16Z4) endif() include(driver_lpspi) diff --git a/drivers/lpuart/driver_lpuart_edma.cmake b/drivers/lpuart/driver_lpuart_edma.cmake index a36c62401..e53b34212 100644 --- a/drivers/lpuart/driver_lpuart_edma.cmake +++ b/drivers/lpuart/driver_lpuart_edma.cmake @@ -11,19 +11,13 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(driver_edma) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(driver_edma) -endif() -if(${MCUX_DEVICE} STREQUAL "MK28FA15") +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MK66F18") +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") include(driver_edma) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") @@ -32,37 +26,43 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") include(driver_dma3) endif() -if(${MCUX_DEVICE} STREQUAL "MKV31F51212") - include(driver_edma) +if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") + include(driver_dma3) endif() -if(${MCUX_DEVICE} STREQUAL "MK22F51212") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") - include(driver_dma3) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") + include(driver_edma) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(driver_edma) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") + include(driver_edma) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(driver_edma) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") +if(${MCUX_DEVICE} STREQUAL "MK22F51212") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") +if(${MCUX_DEVICE} STREQUAL "MK28FA15") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") +if(${MCUX_DEVICE} STREQUAL "MK66F18") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") +if(${MCUX_DEVICE} STREQUAL "MKV31F51212") include(driver_edma) endif() diff --git a/drivers/lpuart/driver_lpuart_freertos.cmake b/drivers/lpuart/driver_lpuart_freertos.cmake index 2c3df5fff..f83137d8c 100644 --- a/drivers/lpuart/driver_lpuart_freertos.cmake +++ b/drivers/lpuart/driver_lpuart_freertos.cmake @@ -11,26 +11,20 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(middleware_freertos-kernel_MIMXRT1052) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(middleware_freertos-kernel_MIMXRT1064) -endif() -if(${MCUX_DEVICE} STREQUAL "MK28FA15") - include(middleware_freertos-kernel_MK28FA15) -endif() -if(${MCUX_DEVICE} STREQUAL "MKE15Z7") - include(middleware_freertos-kernel_MKE15Z7) +if(${MCUX_DEVICE} STREQUAL "K32L2A41A") + include(middleware_freertos-kernel_K32L2A41A) endif() if(${MCUX_DEVICE} STREQUAL "K32L2B31A") include(middleware_freertos-kernel_K32L2B31A) endif() -if(${MCUX_DEVICE} STREQUAL "MK66F18") - include(middleware_freertos-kernel_MK66F18) +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") + include(middleware_freertos-kernel_K32L3A60_cm0plus) endif() -if(${MCUX_DEVICE} STREQUAL "MKE16Z4") - include(middleware_freertos-kernel_MKE16Z4) +if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") + include(middleware_freertos-kernel_K32L3A60_cm4) +endif() +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") + include(middleware_freertos-kernel_MCIMX7U5) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") include(middleware_freertos-kernel_MIMX8QM6_cm4_core0) @@ -38,47 +32,53 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core1") include(middleware_freertos-kernel_MIMX8QM6_cm4_core1) endif() -if(${MCUX_DEVICE} STREQUAL "MKV31F51212") - include(middleware_freertos-kernel_MKV31F51212) -endif() -if(${MCUX_DEVICE} STREQUAL "MK22F51212") - include(middleware_freertos-kernel_MK22F51212) -endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") include(middleware_freertos-kernel_MIMX8QX6) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") + include(middleware_freertos-kernel_MIMXRT1011) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") + include(middleware_freertos-kernel_MIMXRT1015) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(middleware_freertos-kernel_MIMXRT1021) endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") + include(middleware_freertos-kernel_MIMXRT1024) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") + include(middleware_freertos-kernel_MIMXRT1052) +endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") include(middleware_freertos-kernel_MIMXRT1062) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm0plus") - include(middleware_freertos-kernel_K32L3A60_cm0plus) +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(middleware_freertos-kernel_MIMXRT1064) endif() -if(${MCUX_DEVICE} STREQUAL "K32L3A60_cm4") - include(middleware_freertos-kernel_K32L3A60_cm4) +if(${MCUX_DEVICE} STREQUAL "MK22F51212") + include(middleware_freertos-kernel_MK22F51212) endif() -if(${MCUX_DEVICE} STREQUAL "MKM35Z7") - include(middleware_freertos-kernel_MKM35Z7) +if(${MCUX_DEVICE} STREQUAL "MK28FA15") + include(middleware_freertos-kernel_MK28FA15) endif() -if(${MCUX_DEVICE} STREQUAL "MKL27Z644") - include(middleware_freertos-kernel_MKL27Z644) +if(${MCUX_DEVICE} STREQUAL "MK66F18") + include(middleware_freertos-kernel_MK66F18) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") - include(middleware_freertos-kernel_MCIMX7U5) +if(${MCUX_DEVICE} STREQUAL "MKE15Z7") + include(middleware_freertos-kernel_MKE15Z7) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") - include(middleware_freertos-kernel_MIMXRT1024) +if(${MCUX_DEVICE} STREQUAL "MKE16Z4") + include(middleware_freertos-kernel_MKE16Z4) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") - include(middleware_freertos-kernel_MIMXRT1011) +if(${MCUX_DEVICE} STREQUAL "MKL27Z644") + include(middleware_freertos-kernel_MKL27Z644) endif() -if(${MCUX_DEVICE} STREQUAL "K32L2A41A") - include(middleware_freertos-kernel_K32L2A41A) +if(${MCUX_DEVICE} STREQUAL "MKM35Z7") + include(middleware_freertos-kernel_MKM35Z7) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") - include(middleware_freertos-kernel_MIMXRT1015) +if(${MCUX_DEVICE} STREQUAL "MKV31F51212") + include(middleware_freertos-kernel_MKV31F51212) endif() include(driver_lpuart) diff --git a/drivers/mw320/acomp/driver_mw_acomp.cmake b/drivers/mw320/acomp/driver_mw_acomp.cmake new file mode 100644 index 000000000..61ddd0129 --- /dev/null +++ b/drivers/mw320/acomp/driver_mw_acomp.cmake @@ -0,0 +1,14 @@ +#Description: MW_ACOMP Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_acomp component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_acomp.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/acomp/fsl_acomp.c b/drivers/mw320/acomp/fsl_acomp.c new file mode 100644 index 000000000..915e48718 --- /dev/null +++ b/drivers/mw320/acomp/fsl_acomp.c @@ -0,0 +1,228 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_acomp.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.wm_acomp" +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +#define ACOMP_INTERRUPT_TYPE_MASK (ACOMP_CTRL0_INT_ACT_HI_MASK | ACOMP_CTRL0_EDGE_LEVL_SEL_MASK) +#define ACOMP_INTERRUPT_TYPE_SHIFT (30U) +#define ACOMP_INTERRUPT_TYPE(x) \ + (((uint32_t)(((uint32_t)(x)) << ACOMP_INTERRUPT_TYPE_SHIFT)) & ACOMP_INTERRUPT_TYPE_MASK) + +#define ACOMP_EDGE_DETECT_TRIG_SRC_MASK (ACOMP_CTRL0_RIE_MASK | ACOMP_CTRL0_FIE_MASK) +#define ACOMP_EDGE_DETECT_TRIG_SRC_SHIFT (28U) +#define ACOMP_EDGE_DETECT_TRIG_SRC(x) \ + (((uint32_t)(((uint32_t)(x)) << ACOMP_EDGE_DETECT_TRIG_SRC_SHIFT)) & ACOMP_EDGE_DETECT_TRIG_SRC_MASK) + +#define ACOMP_GET_BIT_FIELD_VAL(val, mask, shift) (((val) & (mask)) >> (shift)) + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +static uint32_t ACOMP_GetInstance(ACOMP_Type *base); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Variables + ******************************************************************************/ +static ACOMP_Type *const s_acompBases[] = ACOMP_BASE_PTRS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! @brief Pointers to acomp clocks for each instance. */ +static const clock_ip_name_t s_acompClocks[] = ACOMP_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Code + ******************************************************************************/ + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! + * @brief Get the ACOMP peripheral instance + * + * @param base ACOMP peripheral base address. + * @return The instance of input ACOMP peripheral base address. + */ +static uint32_t ACOMP_GetInstance(ACOMP_Type *base) +{ + uint32_t instance; + uint32_t acompArrayCount = (sizeof(s_acompBases) / sizeof(s_acompBases[0])); + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < acompArrayCount; instance++) + { + if (s_acompBases[instance] == base) + { + break; + } + } + + assert(instance < acompArrayCount); + + return instance; +} +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/*! + * brief Initializes the module, including warm up time, response mode, inactive value and so on. + * + * param base ACOMP peripheral base address. + * param config The pointer to the structure acomp_config_t. + */ +void ACOMP_Init(ACOMP_Type *base, const acomp_config_t *config) +{ + assert(config != NULL); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the ACOMP clock*/ + (void)CLOCK_EnableClock(s_acompClocks[ACOMP_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + + uint32_t tmp32; + + tmp32 = ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)config->id); + tmp32 &= ~(ACOMP_CTRL0_GPIOINV_MASK | ACOMP_CTRL0_WARMTIME_MASK | ACOMP_CTRL0_BIAS_PROG_MASK | + ACOMP_CTRL0_INACT_VAL_MASK | ACOMP_CTRL0_RIE_MASK | ACOMP_CTRL0_FIE_MASK | ACOMP_CTRL0_INT_ACT_HI_MASK | + ACOMP_CTRL0_EDGE_LEVL_SEL_MASK); + + tmp32 |= ACOMP_CTRL0_WARMTIME(config->warmupTime) | ACOMP_CTRL0_BIAS_PROG(config->responseMode) | + ACOMP_INTERRUPT_TYPE(config->intTrigType) | ACOMP_CTRL0_INACT_VAL(config->inactiveValue) | + ACOMP_EDGE_DETECT_TRIG_SRC(config->edgeDetectTrigSrc); + tmp32 |= ACOMP_CTRL0_GPIOINV((((uint8_t)(config->outPinMode)) & 0x2U) >> 1U); + + /* Reset the acomp module. */ + ACOMP_DoSoftwareReset(base, config->id); + + ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)config->id) = tmp32; + + tmp32 = ACOMP_GET_REG_VAL(&(base->ROUTE0), (uint8_t)config->id); + tmp32 &= ~(ACOMP_ROUTE0_OUTSEL_MASK | ACOMP_ROUTE0_PE_MASK); + tmp32 |= ACOMP_ROUTE0_OUTSEL((uint8_t)(config->outPinMode) & 0x1U) | + ACOMP_ROUTE0_PE((!((uint8_t)(config->outPinMode) >> 2U)) & 0x1U); + ACOMP_GET_REG_VAL(&(base->ROUTE0), (uint8_t)config->id) = tmp32; + + ACOMP_SetInputConfig(base, config->id, config->posInput, config->negInput); + + ACOMP_Enable(base, config->id, config->enable); +} + +/*! + * brief Gets the default configuration of ACOMP module. + * + * code + * config->id = kACOMP_Acomp0; + * config->enable = false; + * config->warmupTime = kACOMP_WarmUpTime1us; + * config->responseMode = kACOMP_SlowResponseMode; + * config->inactiveValue = kACOMP_ResultLogicLow; + * config->intTrigType = kACOMP_HighLevelTrig; + * config->edgeDetectTrigSrc = kACOMP_EdgePulseDis; + * config->outPinMode = kACOMP_PinOutDisable; + * config->posInput = NULL; + * config->negInput = NULL; + * endcode + * param config The pointer to the structure acomp_config_t. + */ +void ACOMP_GetDefaultConfig(acomp_config_t *config) +{ + assert(config != NULL); + + (void)memset(config, 0U, sizeof(acomp_config_t)); + + config->id = kACOMP_Acomp0; + config->enable = false; + config->warmupTime = kACOMP_WarmUpTime1us; + config->responseMode = kACOMP_SlowResponseMode; + config->inactiveValue = kACOMP_ResultLogicLow; + config->intTrigType = kACOMP_HighLevelTrig; + config->edgeDetectTrigSrc = kACOMP_EdgePulseDis; + config->outPinMode = kACOMP_PinOutDisable; + config->posInput = NULL; + config->negInput = NULL; +} + +/*! + * @brief De-initializes the module. + * + * @param base ACOMP peripheral base address. + */ +void ACOMP_Deinit(ACOMP_Type *base) +{ +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the ACOMP clock*/ + (void)CLOCK_DisableClock(s_acompClocks[ACOMP_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + + ACOMP_Enable(base, kACOMP_Acomp0, false); + ACOMP_Enable(base, kACOMP_Acomp1, false); +} + +/*! + * brief Configures selected comparator's inputs, inclduing input channel and hysteresis level. + * + * param base ACOMP peripheral base address. + * param id The selected acomp comparator's id, please refer to acomp_comparator_id_t. + * param posInput The configuration of selected comparator's positive input, + * please refer to acomp_positive_input_config_t. + * param negInput The configuration of selected comparator's negative input, + * please refer to acomp_negative_input_config_t. + */ +void ACOMP_SetInputConfig(ACOMP_Type *base, + acomp_comparator_id_t id, + const acomp_positive_input_config_t *posInput, + const acomp_negative_input_config_t *negInput) +{ + assert(posInput != NULL); + assert(negInput != NULL); + + uint32_t tmp32 = 0UL; + + tmp32 = ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)id); + tmp32 &= ~(ACOMP_CTRL0_HYST_SELN_MASK | ACOMP_CTRL0_HYST_SELP_MASK | ACOMP_CTRL0_NEG_SEL_MASK | + ACOMP_CTRL0_POS_SEL_MASK | ACOMP_CTRL0_LEVEL_SEL_MASK); + tmp32 |= ACOMP_CTRL0_HYST_SELN(negInput->hysterLevel) | ACOMP_CTRL0_HYST_SELP(posInput->hysterLevel) | + ACOMP_CTRL0_NEG_SEL(negInput->channel) | ACOMP_CTRL0_POS_SEL(posInput->channel); + if (negInput->channel >= kACOMP_NegChVIO_0P25) + { + tmp32 |= ACOMP_CTRL0_LEVEL_SEL((negInput->channel & 0x3U) << 4U); + } + ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)id) = tmp32; +} + +/*! + * brief Gets status flags, such as ACOMP0 active status flags, ACOMP1 active status flags, and so on. + * + * param base ACOMP peripheral base address. + * return The OR'ed value ACOMP status flags, please refer to _acomp_status_flags for details. + */ +uint32_t ACOMP_GetStatusFlags(ACOMP_Type *base) +{ + uint32_t tmp32 = 0UL; + + tmp32 |= ACOMP_GET_BIT_FIELD_VAL(base->STATUS0, ACOMP_STATUS0_ACT_MASK, ACOMP_STATUS0_ACT_SHIFT) << 0UL; + tmp32 |= ACOMP_GET_BIT_FIELD_VAL(base->ISR0, ACOMP_ISR0_OUT_INT_MASK | ACOMP_ISR0_OUTA_INT_MASK, + ACOMP_ISR0_OUT_INT_SHIFT) + << 1UL; + tmp32 |= ACOMP_GET_BIT_FIELD_VAL(base->IRSR0, ACOMP_IRSR0_OUT_INT_RAW_MASK | ACOMP_IRSR0_OUTA_INT_RAW_MASK, + ACOMP_IRSR0_OUT_INT_RAW_SHIFT) + << 3UL; + + tmp32 |= ACOMP_GET_BIT_FIELD_VAL(base->STATUS1, ACOMP_STATUS1_ACT_MASK, ACOMP_STATUS1_ACT_SHIFT) << 5UL; + tmp32 |= ACOMP_GET_BIT_FIELD_VAL(base->ISR1, ACOMP_ISR1_OUT_INT_MASK | ACOMP_ISR1_OUTA_INT_MASK, + ACOMP_ISR1_OUT_INT_SHIFT) + << 6UL; + tmp32 |= ACOMP_GET_BIT_FIELD_VAL(base->IRSR1, ACOMP_IRSR1_OUT_INT_RAW_MASK | ACOMP_IRSR1_OUTA_INT_RAW_MASK, + ACOMP_IRSR1_OUT_INT_RAW_SHIFT) + << 8UL; + + return tmp32; +} diff --git a/drivers/mw320/acomp/fsl_acomp.h b/drivers/mw320/acomp/fsl_acomp.h new file mode 100644 index 000000000..bdc7d6979 --- /dev/null +++ b/drivers/mw320/acomp/fsl_acomp.h @@ -0,0 +1,471 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_ACOMP_H_ +#define _FSL_ACOMP_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup acomp + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief ACOMP driver version */ +#define FSL_ACOMP_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */ + +/*! + * @brief The macro to get the address based on start address and acomp id. + */ +#define ACOMP_REG_ADDR(startAddr, id) ((uint32_t *)((volatile uint32_t *)(startAddr) + (uint32_t)(id))) +/*! + * @brief The macro to get register value based on start address and acomp id. + */ +#define ACOMP_GET_REG_VAL(startAddr, id) (*ACOMP_REG_ADDR((startAddr), (id))) +/*! + * @brief Sets register's bit field. + */ +#define ACOMP_SET_REG_BIT(startAddr, id, val) (ACOMP_GET_REG_VAL((startAddr), (id)) |= (val)) +/*! + * @brief Clears register's bit field. + */ +#define ACOMP_CLEAR_REG_BIT(startAddr, id, val) (ACOMP_GET_REG_VAL((startAddr), (id)) &= ~(val)) + +/*! + * @brief The enumeration of interrupts, including ACOMP0 synchrnized output interrupt, + * ACOMP0 asynchrnized output interrupt, ACOMP1 synchrnized output interrupt, and + * ACOMP1 asynchrnized output interrupt. + */ +enum _acomp_interrupt_enable +{ + kACOMP_Out0InterruptEnable = ACOMP_IMR0_OUT_INT_MASK_MASK, /*!< ACOMP0 synchrnized output interrupt enable. */ + kACOMP_OutA0InterruptEnable = ACOMP_IMR0_OUTA_INT_MASK_MASK, /*!< ACOMP0 asynchrnized output interrupt enable. */ + kACOMP_Out1InterruptEnable = ACOMP_IMR1_OUT_INT_MASK_MASK << 2U, /*!< ACOMP1 synchrnized output interrupt enable. */ + kACOMP_OutA1InterruptEnable = ACOMP_IMR1_OUTA_INT_MASK_MASK << 2U, /*!< ACOMP1 asynchrnized + output interrupt enable. */ +}; + +/*! + * @brief The enumeration of status flags, including ACOMP0 active staus flag, ACOMP1 active status flag, and so on. + */ +enum _acomp_status_flags +{ + kACOMP_Acomp0ActiveFlag = 1UL << 0UL, /*!< ACOMP0 active status flag, if this flag is set it means + the ACOMP0 is active. */ + kACOMP_Acomp0OutInterruptFlag = 1UL << 1UL, /*!< ACOMP0 Synchronized output interrupt flags, this flag is set + when ACOMP0 synchronized output changes from 0 to 1 and the + corresponding interrupt is enabled. */ + kACOMP_Acomp0OutAInterruptFlag = 1UL << 2UL, /*!< ACOMP0 Asynchronized output interrupt flags, this flag is set + when ACOMP0 asynchronized output changes from 0 to 1 and the + corresponding interrupt is enabled. */ + kACOMP_Acomp0RawOutInterruptFlag = 1UL << 3UL, /*!< ACOMP0 raw synchroized output interrrupt flags. */ + kACOMP_Acomp0RawOutAInterruptFlag = 1UL << 4UL, /*!< ACOMP0 raw asynchroized output interrupt flags. */ + + kACOMP_Acomp1ActiveFlag = 1UL << 5UL, /*!< ACOMP1 active status flag, if this flag is set it means + the ACOMP0 is active. */ + kACOMP_Acomp1OutInterruptFlag = 1UL << 6UL, /*!< ACOMP1 Synchronized output interrupt flags, this flag is set + when ACOMP1 synchronized output changes from 0 to 1 and the + corresponding interrupt is enabled. */ + kACOMP_Acomp1OutAInterruptFlag = 1UL << 7UL, /*!< ACOMP1 Asynchronized output interrupt flags, this flag is set + when ACOMP1 asynchronized output changes from 0 to 1 and the + corresponding interrupt is enabled. */ + kACOMP_Acomp1RawOutInterruptFlag = 1UL << 8UL, /*!< ACOMP1 raw synchroized output interrrupt flags. */ + kACOMP_Acomp1RawOutAInterruptFlag = 1UL << 9U, /*!< ACOMP1 raw asynchroized output interrupt flags. */ +}; + +/*! + * @brief ACOMP result logical status Type definition + */ +typedef enum _acomp_result_logic_status +{ + kACOMP_ResultLogicLow = 0U, /*!< The comparsion result is high logic. */ + kACOMP_ResultLogicHigh = 1U, /*!< The comparsion result is low logic. */ +} acomp_result_logic_status_t; + +/*! + * @brief ACOMP comparator id. + */ +typedef enum _acomp_comparator_id +{ + kACOMP_Acomp0, /*!< Index for ACOMP0 */ + kACOMP_Acomp1 /*!< Index for ACOMP1 */ +} acomp_comparator_id_t; + +/*! + * @brief The enumeration of wave up time. + */ +typedef enum _acomp_warm_up_time +{ + kACOMP_WarmUpTime1us = 0U, /*!< Set wave-up time as 1us. */ + kACOMP_WarmUpTime2us, /*!< Set wave-up time as 2us. */ + kACOMP_WarmUpTime4us, /*!< Set wave-up time as 4us. */ + kACOMP_WarmUpTime8us, /*!< Set wave-up time as 8us. */ +} acomp_warm_up_time_t; + +/*! + * @brief The enumeration of response mode. The response mode will affect the delay from input to output. + */ +typedef enum _acomp_response_mode +{ + kACOMP_SlowResponseMode = 0U, /*!< Slow response mode also called power mode 1. */ + kACOMP_MediumResponseMode, /*!< Medium response mode also called power mode 2. */ + kACOMP_FastResponseMode, /*!< Fast response mode also called power mode 3. */ +} acomp_response_mode_t; + +/*! + * @brief ACOMP interrupt trigger type definition + */ +typedef enum _acomp_interrupt_trigger_type +{ + kACOMP_LowLevelTrig = 0U, /*!< Low level trigger interrupt. */ + kACOMP_HighLevelTrig = 1U, /*!< High level trigger interrupt. */ + kACOMP_FallingEdgeTrig = 2U, /*!< Falling edge trigger interrupt. */ + kACOMP_RisingEdgeTrig = 3U, /*!< Rising edge trigger interrupt. */ +} acomp_interrupt_trigger_type_t; + +/*! + * @brief ACOMP edge pule trigger source type definition + */ +typedef enum _acomp_edge_pulse_trig_source +{ + kACOMP_EdgePulseDis = 0U, /*!< edge pulse function is disable */ + kACOMP_EdgePulseRising, /*!< Rising edge can trigger edge pulse */ + kACOMP_EdgePulseFalling, /*!< Falling edge can trigger edge pulse */ + kACOMP_EdgePulseBothEdge, /*!< Both edge can trigger edge pulse */ +} acomp_edge_pulse_trig_source_t; + +/*! + * @brief ACOMP synchronous/asynchronous output type to pin + */ +typedef enum _acomp_pin_out_type +{ + kACOMP_PinOutSyn = 0U, /*!< Enable ACOMP synchronous pin output */ + kACOMP_PinOutAsyn = 1U, /*!< Enable ACOMP asynchronous pin output */ + kACOMP_PinOutSynInverted = 2U, /*!< Enable ACOMP inverted synchronous pin output */ + kACOMP_PinOutAsynInverted = 3U, /*!< Enable ACOMP inverted asynchronous pin output */ + kACOMP_PinOutDisable = 4U, /*!< Diable ACOMP pin output */ +} acomp_pin_out_type_t; + +/*! + * @brief ACOMP positive channel enumeration + */ +typedef enum _acomp_positive_channel +{ + kACOMP_PosChGPIO42, /*!< Gpio42 selection */ + kACOMP_PosChGPIO43, /*!< Gpio43 selection */ + kACOMP_PosChGPIO44, /*!< Gpio44 selection */ + kACOMP_PosChGPIO45, /*!< Gpio45 selection */ + kACOMP_PosChGPIO46, /*!< Gpio46 selection */ + kACOMP_PosChGPIO47, /*!< Gpio47 selection */ + kACOMP_PosChGPIO48, /*!< Gpio48 selection */ + kACOMP_PosChGPIO49, /*!< Gpio49 selection */ + kACOMP_PosChDACA, /*!< DACA selection */ + kACOMP_PosChDACB, /*!< DACB selection */ +} acomp_positive_channel_t; + +/*! + * @brief ACOMP negative channel enumeration. + */ +typedef enum _acomp_negative_channel +{ + kACOMP_NegChGPIO42, /*!< Gpio42 selection */ + kACOMP_NegChGPIO43, /*!< Gpio43 selection */ + kACOMP_NegChGPIO44, /*!< Gpio44 selection */ + kACOMP_NegChGPIO45, /*!< Gpio45 selection */ + kACOMP_NegChGPIO46, /*!< Gpio46 selection */ + kACOMP_NegChGPIO47, /*!< Gpio47 selection */ + kACOMP_NegChGPIO48, /*!< Gpio48 selection */ + kACOMP_NegChGPIO49, /*!< Gpio49 selection */ + kACOMP_NegChDACA, /*!< DACA selection */ + kACOMP_NegChDACB, /*!< DACB selection */ + kACOMP_NegChVREF1P2, /*!< Vref1p2 selection */ + kACOMP_NegChAVSS, /*!< AVSS selection */ + kACOMP_NegChVIO_0P25, /*!< VIO Scaling factor 0.25 */ + kACOMP_NegChVIO_0P50, /*!< VIO Scaling factor 0.50 */ + kACOMP_NegChVIO_0P75, /*!< VIO Scaling factor 0.75 */ + kACOMP_NegChVIO_1P00 /*!< VIO Scaling factor 1.00 */ +} acomp_negative_channel_t; + +/*! + * @brief ACOMP hysteresis level enumeration + */ +typedef enum _acomp_input_hysteresis +{ + kACOMP_Hyster0MV, /*!< Hysteresis level = 0mv */ + kACOMP_Hyster10MV, /*!< Hysteresis level = 10mv */ + kACOMP_Hyster20MV, /*!< Hysteresis level = 20mv */ + kACOMP_Hyster30MV, /*!< Hysteresis level = 30mv */ + kACOMP_Hyster40MV, /*!< Hysteresis level = 40mv */ + kACOMP_Hyster50MV, /*!< Hysteresis level = 50mv */ + kACOMP_Hyster60MV, /*!< Hysteresis level = 60mv */ + kACOMP_Hyster70MV, /*!< Hysteresis level = 70mv */ +} acomp_input_hysteresis_t; + +/*! + * @brief The configuration of positive input, including channel selection and hysteresis level. + */ +typedef struct _acomp_positive_input_config +{ + acomp_positive_channel_t channel : 4U; /*!< Positive input channel selection, + please refer to @ref acomp_positive_channel_t. */ + acomp_input_hysteresis_t hysterLevel : 4U; /*!< Positive hysteresis voltage level selection, + please refer to @ref acomp_input_hysteresis_t. */ +} acomp_positive_input_config_t; + +/*! + * @brief The configuration of negative input, including channel selection and hysteresis level. + */ +typedef struct _acomp_negative_input_config +{ + acomp_negative_channel_t channel : 4U; /*!< Negative input channel selection, + please refer to @ref acomp_negative_channel_t. */ + acomp_input_hysteresis_t hysterLevel : 4U; /*!< Negative hystersis voltage level selection, + please refer to @ref acomp_input_hysteresis_t. */ +} acomp_negative_input_config_t; + +/*! + * @brief The configure structure of acomp, including warm up time, response mode and so on. + */ +typedef struct _acomp_config +{ + acomp_comparator_id_t id : 1U; /*!< The id of comparator, please refer to @ref acomp_comparator_id_t. */ + bool enable : 1U; /*!< Enable/Disable the selected ACOMP. + - \b true Enable the selected ACOMP. + - \b false Disable the selected ACOMP. */ + acomp_warm_up_time_t warmupTime : 2U; /*!< Configure warm-up time, please refer to @ref acomp_warm_up_time_t. */ + acomp_response_mode_t responseMode : 2U; /*!< Configure responde mode(power mode), + please refer to @ref acomp_response_mode_t for details. */ + acomp_interrupt_trigger_type_t intTrigType : 2U; /*!< Select interrupt trigger type, + please refer to @ref acomp_interrupt_trigger_type_t. */ + acomp_result_logic_status_t inactiveValue : 1U; /*!< Configure output value for inactive state. */ + acomp_edge_pulse_trig_source_t edgeDetectTrigSrc : 2U; /*!< Config edge detect trigger source, + please refer to @ref acomp_edge_pulse_trig_source_t. */ + acomp_pin_out_type_t outPinMode : 3U; /*!< Config the output pin mode, + please refer to @ref acomp_pin_out_type_t for details. */ + const acomp_positive_input_config_t *posInput; /*!< The pointer to the configuration structure of positive input, + please refer to @ref acomp_positive_input_config_t. */ + const acomp_negative_input_config_t *negInput; /*!< The pointer to the configuration structure of negative input, + please refer to @ref acomp_positive_input_config_t. */ +} acomp_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name ACOMP Control Interfaces + * @{ + */ + +/*! + * @brief Initializes the module, including warm up time, response mode, inactive value and so on. + * + * @param base ACOMP peripheral base address. + * @param config The pointer to the structure @ref acomp_config_t. + */ +void ACOMP_Init(ACOMP_Type *base, const acomp_config_t *config); + +/*! + * @brief Gets the default configuration of ACOMP module. + * + * @code + * config->id = kACOMP_Acomp0; + * config->enable = false; + * config->warmupTime = kACOMP_WarmUpTime1us; + * config->responseMode = kACOMP_SlowResponseMode; + * config->inactiveValue = kACOMP_ResultLogicLow; + * config->intTrigType = kACOMP_HighLevelTrig; + * config->edgeDetectTrigSrc = kACOMP_EdgePulseDis; + * config->outPinMode = kACOMP_PinOutDisable; + * config->posInput = NULL; + * config->negInput = NULL; + * @endcode + * @param config The pointer to the structure @ref acomp_config_t. + */ +void ACOMP_GetDefaultConfig(acomp_config_t *config); + +/*! + * @brief De-initializes the module. + * + * @param base ACOMP peripheral base address. + */ +void ACOMP_Deinit(ACOMP_Type *base); + +/*! + * @brief Configures selected comparator's inputs, inclduing input channel and hysteresis level. + * + * @param base ACOMP peripheral base address. + * @param id The selected acomp comparator's id, please refer to @ref acomp_comparator_id_t. + * @param posInput The configuration of selected comparator's positive input, + * please refer to @ref acomp_positive_input_config_t. + * @param negInput The configuration of selected comparator's negative input, + * please refer to @ref acomp_negative_input_config_t. + */ +void ACOMP_SetInputConfig(ACOMP_Type *base, + acomp_comparator_id_t id, + const acomp_positive_input_config_t *posInput, + const acomp_negative_input_config_t *negInput); + +/*! + * @brief Does software reset to the selected ACOMP module. + * + * @param base ACOMP peripheral base address. + * @param id The selected acomp comparator's id, please refer to @ref acomp_comparator_id_t. + */ +static inline void ACOMP_DoSoftwareReset(ACOMP_Type *base, acomp_comparator_id_t id) +{ + ACOMP_SET_REG_BIT(&(base->RST0), id, ACOMP_RST0_SOFT_RST_MASK); + /* Delay */ + for (uint8_t i = 0U; i < 10U; i++) + { + __NOP(); + } + ACOMP_CLEAR_REG_BIT(&(base->RST0), id, ACOMP_RST0_SOFT_RST_MASK); +} + +/*! + * @brief Enables/Disables ACOMP module. + * + * @param base ACOMP peripheral base address. + * @param id The selected acomp comparator's id, please refer to @ref acomp_comparator_id_t. + * @param enable Used to enable/disable module. + * - \b true Enable comparator instance. + * - \b false Disable comparator instance. + */ +static inline void ACOMP_Enable(ACOMP_Type *base, acomp_comparator_id_t id, bool enable) +{ + if (enable) + { + ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)id) |= ACOMP_CTRL1_MUXEN_MASK; + ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)id) |= ACOMP_CTRL1_EN_MASK; + } + else + { + ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)id) &= ~ACOMP_CTRL1_MUXEN_MASK; + ACOMP_GET_REG_VAL(&(base->CTRL0), (uint8_t)id) &= ~ACOMP_CTRL1_EN_MASK; + } +} + +/*! + * @brief Resets clock divider. + * + * @param base ACOMP peripheral base address. + */ +static inline void ACOMP_ResetClockDivider(ACOMP_Type *base) +{ + base->CLK |= ACOMP_CLK_SOFT_CLK_RST_MASK; + for (uint8_t i = 0U; i < 10U; i++) + { + __NOP(); + } + base->CLK &= ~ACOMP_CLK_SOFT_CLK_RST_MASK; +} + +/*! @} */ + +/*! + * @name ACOMP Result Interface + * @{ + */ + +/*! + * @brief Gets the selected acomp conversion result. + * + * @param base ACOMP peripheral base address. + * @param id The selected acomp comparator's id, please refer to @ref acomp_comparator_id_t. + * @return The result of the selected acomp instance. + */ +static inline acomp_result_logic_status_t ACOMP_GetResult(ACOMP_Type *base, acomp_comparator_id_t id) +{ + return (acomp_result_logic_status_t)((ACOMP_GET_REG_VAL(&(base->STATUS0), id) & ACOMP_STATUS0_OUT_MASK) >> + ACOMP_STATUS0_OUT_SHIFT); +} + +/*! @} */ + +/*! + * @brief ACOMP Interrupt Control Interfaces + * @{ + */ + +/*! + * @brief Enables interrupts, including acomp0 asynchronized interrupt, acomp0 synchronized interrupt, acomp1 + * asynchronized interrupt, and acomp1 synchronized interrupt. + * + * @param base ACOMP peripheral base address. + * @param interruptMask The OR'ed value of the interrupts to be enabled, please refer to @ref _acomp_interrupt_enable. + */ +static inline void ACOMP_EnableInterrupts(ACOMP_Type *base, uint32_t interruptMask) +{ + base->IMR0 &= ~(interruptMask & 0x3UL); + base->IMR1 &= ~((interruptMask >> 2UL) & 0x3UL); +} + +/*! + * @brief Disables interrupts, including acomp0 asynchronized interrupt, acomp0 synchronized interrupt, acomp1 + * asynchronized interrupt, and acomp1 synchronized interrupt. + * + * @param base ACOMP peripheral base address. + * @param interruptMask The OR'ed value of the interrupts to be disabled, please refer to @ref _acomp_interrupt_enable. + */ +static inline void ACOMP_DisableInterrupt(ACOMP_Type *base, uint32_t interruptMask) +{ + base->IMR0 |= (interruptMask & 0x3UL); + base->IMR1 |= ((interruptMask >> 2UL) & 0x3UL); +} + +/*! @} */ + +/*! + * @brief ACOMP Status Flag Interfaces + * @{ + */ + +/*! + * @brief Gets status flags, such as ACOMP0 active status flags, ACOMP1 active status flags, and so on. + * + * @param base ACOMP peripheral base address. + * @return The OR'ed value ACOMP status flags, please refer to @ref _acomp_status_flags for details. + */ +uint32_t ACOMP_GetStatusFlags(ACOMP_Type *base); + +/*! + * @brief Clears status flags that can be cleared by software. + * + * @note Only @ref kACOMP_Acomp0OutInterruptFlag, @ref kACOMP_Acomp0OutAInterruptFlag, @ref + * kACOMP_Acomp1OutInterruptFlag, and @ref kACOMP_Acomp1OutAInterruptFlag can be cleared by software. + * + * @param base ACOMP peripheral base address. + * @param statusFlagMask The OR'ed value of the status flags that can be cleared. + */ +static inline void ACOMP_ClearStatusFlags(ACOMP_Type *base, uint32_t statusFlagMask) +{ + assert((statusFlagMask & (kACOMP_Acomp0ActiveFlag | kACOMP_Acomp1ActiveFlag | kACOMP_Acomp0RawOutInterruptFlag | + kACOMP_Acomp1RawOutInterruptFlag | kACOMP_Acomp0RawOutAInterruptFlag | + kACOMP_Acomp1RawOutAInterruptFlag)) == 0UL); + + base->ICR0 = (statusFlagMask & (kACOMP_Acomp0OutInterruptFlag | kACOMP_Acomp0OutAInterruptFlag)) >> 1UL; + base->ICR1 = (statusFlagMask & (kACOMP_Acomp1OutInterruptFlag | kACOMP_Acomp1OutAInterruptFlag)) >> 6UL; +} + +/* @} */ + +#if defined(__cplusplus) +} +#endif + +/*! @} */ + +#endif /* _FSL_ACOMP_H_ */ diff --git a/drivers/mw320/adc/driver_mw_adc.cmake b/drivers/mw320/adc/driver_mw_adc.cmake new file mode 100644 index 000000000..0a385b24f --- /dev/null +++ b/drivers/mw320/adc/driver_mw_adc.cmake @@ -0,0 +1,14 @@ +#Description: MW_ADC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_adc component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_adc.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/adc/fsl_adc.c b/drivers/mw320/adc/fsl_adc.c new file mode 100644 index 000000000..2387f886a --- /dev/null +++ b/drivers/mw320/adc/fsl_adc.c @@ -0,0 +1,289 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_adc.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.wm_adc" +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +static uint32_t ADC_GetInstance(ADC_Type *base); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Variables + ******************************************************************************/ +static ADC_Type *const s_adcBases[] = ADC_BASE_PTRS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! @brief Pointers to adc clocks for each instance. */ +static const clock_ip_name_t s_adcClocks[] = ADC_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Code + ******************************************************************************/ + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! + * @brief Get the ADC peripheral instance + * + * @param base ADC peripheral base address. + * @return The instance of input ADC peripheral base address. + */ +static uint32_t ADC_GetInstance(ADC_Type *base) +{ + uint32_t instance; + uint32_t adcArrayCount = (sizeof(s_adcBases) / sizeof(s_adcBases[0])); + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < adcArrayCount; instance++) + { + if (s_adcBases[instance] == base) + { + break; + } + } + + assert(instance < adcArrayCount); + + return instance; +} +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/*! + * brief Initialize ADC module, including clock divider, power mode, and so on. + * + * param base ADC peripheral base address. + * param config The pointer to the structure adc_config_t. + */ +void ADC_Init(ADC_Type *base, const adc_config_t *config) +{ + assert(config != NULL); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the ADC clock*/ + (void)CLOCK_EnableClock(s_adcClocks[ADC_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + uint32_t tmp32; + + ADC_DoSoftwareReset(base); + + base->ADC_REG_GENERAL = (base->ADC_REG_GENERAL & ~(ADC_ADC_REG_GENERAL_CLK_DIV_RATIO_MASK)) | + ADC_ADC_REG_GENERAL_CLK_DIV_RATIO(config->clockDivider); + + tmp32 = base->ADC_REG_CONFIG; + tmp32 &= + ~(ADC_ADC_REG_CONFIG_TRIGGER_SEL_MASK | ADC_ADC_REG_CONFIG_TRIGGER_EN_MASK | + ADC_ADC_REG_CONFIG_CONT_CONV_EN_MASK | ADC_ADC_REG_CONFIG_AVG_SEL_MASK | ADC_ADC_REG_CONFIG_SCAN_LENGTH_MASK); + tmp32 |= ADC_ADC_REG_CONFIG_CONT_CONV_EN(config->conversionMode) | + ADC_ADC_REG_CONFIG_AVG_SEL(config->averageLength) | ADC_ADC_REG_CONFIG_SCAN_LENGTH(config->scanLength); + if (config->triggerSource != kADC_TriggerSourceSoftware) + { + tmp32 |= ADC_ADC_REG_CONFIG_TRIGGER_EN_MASK | ADC_ADC_REG_CONFIG_TRIGGER_SEL(config->triggerSource); + } + base->ADC_REG_CONFIG = tmp32; + + tmp32 = base->ADC_REG_INTERVAL; + if (config->warmupTime == kADC_WarmUpStateBypass) + { + tmp32 |= ADC_ADC_REG_INTERVAL_BYPASS_WARMUP_MASK; + } + else + { + tmp32 = + (tmp32 & ~(ADC_ADC_REG_INTERVAL_WARMUP_TIME_MASK)) | ADC_ADC_REG_INTERVAL_WARMUP_TIME(config->warmupTime); + } + base->ADC_REG_INTERVAL = tmp32; + + tmp32 = base->ADC_REG_ANA; + tmp32 &= ~(ADC_ADC_REG_ANA_VREF_SEL_MASK | ADC_ADC_REG_ANA_SINGLEDIFF_MASK | ADC_ADC_REG_ANA_INBUF_GAIN_MASK | + ADC_ADC_REG_ANA_INBUF_EN_MASK | ADC_ADC_REG_ANA_BIAS_SEL_MASK | ADC_ADC_REG_ANA_RES_SEL_MASK); + tmp32 |= ADC_ADC_REG_ANA_VREF_SEL(config->vrefSource) | ADC_ADC_REG_ANA_SINGLEDIFF(config->inputMode) | + ADC_ADC_REG_ANA_INBUF_GAIN(config->inputGain) | ADC_ADC_REG_ANA_INBUF_EN(config->enableInputGainBuffer) | + ADC_ADC_REG_ANA_BIAS_SEL(config->powerMode) | ADC_ADC_REG_ANA_RES_SEL(config->resolution); + base->ADC_REG_ANA = tmp32; + + base->ADC_REG_RESULT_BUF = (base->ADC_REG_RESULT_BUF & ~(ADC_ADC_REG_RESULT_BUF_WIDTH_SEL_MASK)) | + ADC_ADC_REG_RESULT_BUF_WIDTH_SEL(config->resultWidth); + + tmp32 = base->ADC_REG_DMAR; + tmp32 &= ~(ADC_ADC_REG_DMAR_DMA_EN_MASK | ADC_ADC_REG_DMAR_FIFO_THL_MASK); + tmp32 |= ADC_ADC_REG_DMAR_FIFO_THL(config->fifoThreshold) | ADC_ADC_REG_DMAR_DMA_EN(config->enableDMA); + base->ADC_REG_DMAR = tmp32; + + if (config->enableADC) + { + base->ADC_REG_GENERAL |= ADC_ADC_REG_GENERAL_GLOBAL_EN_MASK; + } +} + +/*! + * brief Get default configuration. + * + * code + * config->clockDivider = kADC_ClockDivider1; + * config->powerMode = kADC_PowerModeFullBiasingCurrent; + * config->resolution = kADC_Resolution12Bit; + * config->warmupTime = kADC_WarmUpTime16us; + * config->vrefSource = kADC_Vref1P2V; + * config->inputMode = kADC_InputSingleEnded; + * config->conversionMode = kADC_ConversionContinuous; + * config->scanLength = kADC_ScanLength_1; + * config->averageLength = kADC_AverageNone; + * config->triggerSource = kADC_TriggerSourceSoftware; + * config->inputGain = kADC_InputGain1; + * config->enableInputGainBuffer = false; + * config->resultWidth = kADC_ResultWidth16; + * config->fifoThreshold = kADC_FifoThresholdData1; + * config->enableDMA = false; + * config->enableADC = false; + * endcode + * param config Pointer to the structure adc_config_t. + */ +void ADC_GetDefaultConfig(adc_config_t *config) +{ + assert(config != NULL); + + (void)memset(config, 0U, sizeof(adc_config_t)); + + config->clockDivider = kADC_ClockDivider1; + config->powerMode = kADC_PowerModeFullBiasingCurrent; + config->resolution = kADC_Resolution12Bit; + config->warmupTime = kADC_WarmUpTime16us; + + config->vrefSource = kADC_Vref1P2V; + config->inputMode = kADC_InputSingleEnded; + config->conversionMode = kADC_ConversionContinuous; + config->scanLength = kADC_ScanLength_1; + config->averageLength = kADC_AverageNone; + config->triggerSource = kADC_TriggerSourceSoftware; + config->inputGain = kADC_InputGain1; + config->enableInputGainBuffer = false; + + config->resultWidth = kADC_ResultWidth16; + config->fifoThreshold = kADC_FifoThresholdData1; + config->enableDMA = false; + config->enableADC = false; +} + +/*! + * brief De-initialize the ADC module. + * + * param base ADC peripheral base address. + */ +void ADC_Deinit(ADC_Type *base) +{ + ADC_DoSoftwareReset(base); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the ADC clock*/ + (void)CLOCK_DisableClock(s_adcClocks[ADC_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ +} + +/*! + * brief Set scan channel mux source. + * + * param base ADC peripheral base address. + * param scanChannel The selected channel, please refer to adc_scan_channel_t for details. + * param channelSource The mux source to be set to the selected channel, + * please refer to adc_channel_source_t for details. + */ +void ADC_SetScanChannel(ADC_Type *base, adc_scan_channel_t scanChannel, adc_channel_source_t channelSource) +{ + if (scanChannel < kADC_ScanChannel8) + { + base->ADC_REG_SCN1 = (base->ADC_REG_SCN1 & ~(0xFUL << (uint32_t)scanChannel)) | + ((uint32_t)channelSource << (uint32_t)scanChannel); + } + else + { + base->ADC_REG_SCN2 = (base->ADC_REG_SCN2 & ~(0xFUL << ((uint32_t)scanChannel - 8UL))) | + ((uint32_t)channelSource << ((uint32_t)scanChannel - 8UL)); + } +} + +/*! + * brief Do automatic calibration measurement. + * + * note After auto calibrate successful, user can invoke ADC_GetAutoCalibrationData() to get self offset calibration + * value and self gain calibration value. + * + * param base ADC peripheral base address. + * param calVref The inpul reference channel for gain calibration, + * please refer to adc_calibration_ref_t for details. + * retval kStatus_Success Auto calibrate successfully. + * retval kStatus_Fail Auto calibrate failure. + */ +status_t ADC_DoAutoCalibration(ADC_Type *base, adc_calibration_ref_t calVref) +{ + uint32_t tmp32; + + tmp32 = base->ADC_REG_CONFIG; + tmp32 &= ~(ADC_ADC_REG_CONFIG_CAL_VREF_SEL_MASK); + tmp32 |= ADC_ADC_REG_CONFIG_CAL_VREF_SEL(calVref); + base->ADC_REG_CONFIG = tmp32; + + base->ADC_REG_CMD &= ~ADC_ADC_REG_CMD_CONV_START_MASK; + base->ADC_REG_GENERAL |= ADC_ADC_REG_GENERAL_ADC_CAL_EN_MASK; + base->ADC_REG_CMD |= ADC_ADC_REG_CMD_CONV_START_MASK; + + /* Wait for self calibration done */ + for (volatile uint32_t i = 0UL; i < 1000000UL; i++) + { + if ((base->ADC_REG_GENERAL & ADC_ADC_REG_GENERAL_ADC_CAL_EN_MASK) == 0UL) + { + base->ADC_REG_CONFIG &= ~ADC_ADC_REG_CONFIG_CAL_DATA_SEL_MASK; + base->ADC_REG_CMD &= ~ADC_ADC_REG_CMD_CONV_START_MASK; + return kStatus_Success; + } + } + + return kStatus_Fail; +} + +/*! + * brief Configure audio voice level. + * + * param base ADC peripheral base address. + * param enableDetect Used to enable/disable voice level detection. + * - \b true Enable voice level detection. + * - \b false Disable voice level detection. + * param voiceLevel Selected voice level, please refer to adc_audio_voice_level_t. + */ +void ADC_ConfigAudioVoiceLevel(ADC_Type *base, bool enableDetect, adc_audio_voice_level_t voiceLevel) +{ + uint32_t tmp32; + + tmp32 = base->ADC_REG_VOICE_DET; + tmp32 &= ~(ADC_ADC_REG_VOICE_DET_DET_EN_MASK | ADC_ADC_REG_VOICE_DET_LEVEL_SEL_MASK); + tmp32 |= ADC_ADC_REG_VOICE_DET_DET_EN(enableDetect) | ADC_ADC_REG_VOICE_DET_LEVEL_SEL(voiceLevel); + base->ADC_REG_VOICE_DET = tmp32; +} + +/*! + * brief Get status flags, including interrupt flags, raw flags, and so on. + * + * param base ADC peripheral base address. + * return The OR'ed value of ADC status flags, please refer to _adc_status_flags for details. + */ +uint32_t ADC_GetStatusFlags(ADC_Type *base) +{ + uint32_t tmp32; + + tmp32 = base->ADC_REG_ISR; + tmp32 |= (base->ADC_REG_IRSR) << 7UL; + tmp32 |= (base->ADC_REG_STATUS) << 14UL; + + return tmp32; +} diff --git a/drivers/mw320/adc/fsl_adc.h b/drivers/mw320/adc/fsl_adc.h new file mode 100644 index 000000000..72768168d --- /dev/null +++ b/drivers/mw320/adc/fsl_adc.h @@ -0,0 +1,798 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_ADC_H_ +#define _FSL_ADC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup adc + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief ADC driver version */ +#define FSL_ADC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */ + +/*! + * @brief The enumeration of interrupts, this enumeration can be used to enable/disable interrupts. + */ +enum _adc_interrupt_enable +{ + kADC_DataReadyInterruptEnable = ADC_ADC_REG_IMR_RDY_MASK_MASK, /*!< Conversion data ready interrupt. */ + kADC_GainSaturationInterruptEnable = ADC_ADC_REG_IMR_GAINSAT_MASK_MASK, /*!< Gain correction saturation interrupt */ + kADC_OffsetSaturationInterruptEnable = ADC_ADC_REG_IMR_OFFSAT_MASK_MASK, /*!< Offset correction + saturation interupt enable. */ + kADC_NegativeSaturationInterruptEnable = ADC_ADC_REG_IMR_DATASAT_NEG_MASK_MASK, /*!< ADC data negative side + saturation interrupt enable. */ + kADC_PositiveSaturationInterruptEnable = ADC_ADC_REG_IMR_DATASAT_POS_MASK_MASK, /*!< ADC data positive side + saturation interrupt enable. */ + kADC_FifoOverrunInterruptEnable = ADC_ADC_REG_IMR_FIFO_OVERRUN_MASK_MASK, /*!< FIFO overrun interrupt enable. */ + kADC_FifoUnderrunInterruptEnable = ADC_ADC_REG_IMR_FIFO_UNDERRUN_MASK_MASK, /*!< FIFO underrun interrupt enable. */ +}; + +/*! + * @brief The enumeration of adc status flags, including interrupt flags, raw flags, and so on. + * + * @note The raw flags will be captured regardless the interrupt mask. Both interrupt flags and raw + * flags can be cleared. + */ +enum _adc_status_flags +{ + /* Interrupt flags. */ + kADC_DataReadyInterruptFlag = 1UL << 0UL, /*!< Conversion Data Ready interrupt flag. */ + kADC_GainSaturationInterruptFlag = 1UL << 1UL, /*!< Gain correction saturation interrupt flag. */ + kADC_OffsetSaturationInterruptFlag = 1UL << 2UL, /*!< Offset correction saturation interupt flag. */ + kADC_NegativeSaturationInterruptFlag = 1UL << 3UL, /*!< ADC data negative side saturation interrupt flag. */ + kADC_PositiveSaturationInterruptFlag = 1UL << 4UL, /*!< ADC data positive side saturation interrupt flag. */ + kADC_FifoOverrunInterruptFlag = 1UL << 5UL, /*!< FIFO overrun interrupt flag. */ + kADC_FifoUnderrunInterruptFlag = 1UL << 6UL, /*!< FIFO underrun interrupt flag. */ + + /* Raw flags. */ + kADC_DataReadyRawFlag = 1UL << 7UL, /*!< Conversion data ready raw flag, this flag will be captured + regardless the interrupt mask. */ + kADC_GainSaturationRawFlag = 1UL << 8UL, /*!< Gain correction saturation raw flag, this flag will be + captured regardless the interrupt mask. */ + kADC_OffsetSaturationRawFlag = 1UL << 9UL, /*!< Offset correction saturation raw flag, this flag will be + captured regardless the interrupt mask. */ + kADC_NegativeSaturationRawFlag = 1UL << 10UL, /*!< ADC data negative side saturation raw flag, this flag will + be captured regardless the interrupt mask. */ + kADC_PositiveSaturationRawFlag = 1UL << 11UL, /*!< ADC data positive side saturation raw flag, this flag will + be captured regardless the interrupt mask. */ + kADC_FifoOverrunRawFlag = 1UL << 12UL, /*!< FIFO overrun raw flag, this flag will be captured + regardless the interrupt mask. */ + kADC_FifoUnderrunRawFlag = 1UL << 13UL, /*!< FIFO underrun interrupt mask, this flag will be captured + regardless the interrupt mask. */ + + kADC_ActiveStatusFlag = 1UL << 14UL, /*!< ADC conversion active status flag. */ + kADC_FIFONotEmptyStatusFlag = 1UL << 15UL, /*!< FIFO not empty status flag. */ + kADC_FifoFullStatusFlag = 1UL << 16UL, /*!< FIFO full status flag. */ +}; + +/*! + * @brief ADC clock divider ratio type + */ +typedef enum _adc_clock_divider +{ + kADC_ClockDivider1 = 0U, /*!< Clock divider ratio is 1 */ + kADC_ClockDivider2 = 1U, /*!< Clock divider ratio is 2 */ + kADC_ClockDivider3 = 2U, /*!< Clock divider ratio is 3 */ + kADC_ClockDivider4 = 3U, /*!< Clock divider ratio is 4 */ + kADC_ClockDivider5 = 4U, /*!< Clock divider ratio is 5 */ + kADC_ClockDivider6 = 5U, /*!< Clock divider ratio is 6 */ + kADC_ClockDivider7 = 6U, /*!< Clock divider ratio is 7 */ + kADC_ClockDivider8 = 7U, /*!< Clock divider ratio is 8 */ + kADC_ClockDivider9 = 8U, /*!< Clock divider ratio is 9 */ + kADC_ClockDivider10 = 9U, /*!< Clock divider ratio is 10 */ + kADC_ClockDivider11 = 10U, /*!< Clock divider ratio is 11 */ + kADC_ClockDivider12 = 11U, /*!< Clock divider ratio is 12 */ + kADC_ClockDivider13 = 12U, /*!< Clock divider ratio is 13 */ + kADC_ClockDivider14 = 13U, /*!< Clock divider ratio is 14 */ + kADC_ClockDivider15 = 14U, /*!< Clock divider ratio is 15 */ + kADC_ClockDivider16 = 15U, /*!< Clock divider ratio is 16 */ + kADC_ClockDivider17 = 16U, /*!< Clock divider ratio is 17 */ + kADC_ClockDivider18 = 17U, /*!< Clock divider ratio is 18 */ + kADC_ClockDivider19 = 18U, /*!< Clock divider ratio is 19 */ + kADC_ClockDivider20 = 19U, /*!< Clock divider ratio is 20 */ + kADC_ClockDivider21 = 20U, /*!< Clock divider ratio is 21 */ + kADC_ClockDivider22 = 21U, /*!< Clock divider ratio is 22 */ + kADC_ClockDivider23 = 22U, /*!< Clock divider ratio is 23 */ + kADC_ClockDivider24 = 23U, /*!< Clock divider ratio is 24 */ + kADC_ClockDivider25 = 24U, /*!< Clock divider ratio is 25 */ + kADC_ClockDivider26 = 25U, /*!< Clock divider ratio is 26 */ + kADC_ClockDivider27 = 26U, /*!< Clock divider ratio is 27 */ + kADC_ClockDivider28 = 27U, /*!< Clock divider ratio is 28 */ + kADC_ClockDivider29 = 28U, /*!< Clock divider ratio is 29 */ + kADC_ClockDivider30 = 29U, /*!< Clock divider ratio is 30 */ + kADC_ClockDivider31 = 30U, /*!< Clock divider ratio is 31 */ + kADC_ClockDivider32 = 31U, /*!< Clock divider ratio is 32 */ +} adc_clock_divider_t; + +/*! + * @brief ADC analog portion low-power mode selection. + */ +typedef enum _adc_analog_portion_power_mode +{ + kADC_PowerModeFullBiasingCurrent = 0U, /*!< Full biasing current. */ + kADC_PowerModeHalfBiasingCurrent, /*!< Half biasing current. */ +} adc_analog_portion_power_mode_t; + +/*! + * @brief ADC resolution type + */ +typedef enum _adc_resolution +{ + kADC_Resolution12Bit = 0U, /*!< 12-bit resolution */ + kADC_Resolution14Bit = 1U, /*!< 14-bit resolution */ + kADC_Resolution16Bit = 2U, /*!< 16-bit resolution */ + kADC_Resolution16BitAudio = 3U, /*!< 16-bit resolution for audio application */ +} adc_resolution_t; + +/*! + * @brief The enumeration of adc warm up time, the ADC warm-up state can also bypassed. + */ +typedef enum _adc_warm_up_time +{ + kADC_WarmUpTime1us = 0U, /*!< ADC warm-up time is 1 us. */ + kADC_WarmUpTime2us, /*!< ADC warm-up time is 2 us. */ + kADC_WarmUpTime3us, /*!< ADC warm-up time is 3 us. */ + kADC_WarmUpTime4us, /*!< ADC warm-up time is 4 us. */ + kADC_WarmUpTime5us, /*!< ADC warm-up time is 5 us. */ + kADC_WarmUpTime6us, /*!< ADC warm-up time is 6 us. */ + kADC_WarmUpTime7us, /*!< ADC warm-up time is 7 us. */ + kADC_WarmUpTime8us, /*!< ADC warm-up time is 8 us. */ + kADC_WarmUpTime9us, /*!< ADC warm-up time is 9 us. */ + kADC_WarmUpTime10us, /*!< ADC warm-up time is 10 us. */ + kADC_WarmUpTime11us, /*!< ADC warm-up time is 11 us. */ + kADC_WarmUpTime12us, /*!< ADC warm-up time is 12 us. */ + kADC_WarmUpTime13us, /*!< ADC warm-up time is 13 us. */ + kADC_WarmUpTime14us, /*!< ADC warm-up time is 14 us. */ + kADC_WarmUpTime15us, /*!< ADC warm-up time is 15 us. */ + kADC_WarmUpTime16us, /*!< ADC warm-up time is 16 us. */ + kADC_WarmUpTime17us, /*!< ADC warm-up time is 17 us. */ + kADC_WarmUpTime18us, /*!< ADC warm-up time is 18 us. */ + kADC_WarmUpTime19us, /*!< ADC warm-up time is 19 us. */ + kADC_WarmUpTime20us, /*!< ADC warm-up time is 20 us. */ + kADC_WarmUpTime21us, /*!< ADC warm-up time is 21 us. */ + kADC_WarmUpTime22us, /*!< ADC warm-up time is 22 us. */ + kADC_WarmUpTime23us, /*!< ADC warm-up time is 23 us. */ + kADC_WarmUpTime24us, /*!< ADC warm-up time is 24 us. */ + kADC_WarmUpTime25us, /*!< ADC warm-up time is 25 us. */ + kADC_WarmUpTime26us, /*!< ADC warm-up time is 26 us. */ + kADC_WarmUpTime27us, /*!< ADC warm-up time is 27 us. */ + kADC_WarmUpTime28us, /*!< ADC warm-up time is 28 us. */ + kADC_WarmUpTime29us, /*!< ADC warm-up time is 29 us. */ + kADC_WarmUpTime30us, /*!< ADC warm-up time is 30 us. */ + kADC_WarmUpTime31us, /*!< ADC warm-up time is 31 us. */ + kADC_WarmUpTime32us, /*!< ADC warm-up time is 32 us. */ + kADC_WarmUpStateBypass = 0x20U, /*!< ADC warm-up state bypassed. */ +} adc_warm_up_time_t; + +/*! + * @brief ADC voltage reference source type + */ +typedef enum _adc_vref_source +{ + kADC_Vref1P8V = 0U, /*!< Internal 1.8V reference */ + kADC_Vref1P2V = 1U, /*!< Internal 1.2V reference */ + kADC_VrefExternal = 2U, /*!< External single-ended reference though ADC_CH3 */ + kADC_VrefInternal1P2V = 3U, /*!< Internal 1.2V reference with cap filter though ADC_CH3 */ +} adc_vref_source_t; + +/*! + * @brief ADC input mode type + */ +typedef enum _adc_input_mode +{ + kADC_InputSingleEnded = 0U, /*!< Single-ended mode */ + kADC_InputDifferential = 1U, /*!< Differential mode */ +} adc_input_mode_t; + +/*! + * @brief ADC conversion mode type + */ +typedef enum _adc_conversion_mode +{ + kADC_ConversionOneShot = 0U, /*!< One shot mode */ + kADC_ConversionContinuous = 1U, /*!< Continuous mode */ +} adc_conversion_mode_t; + +/*! + * @brief ADC scan length type + */ +typedef enum _adc_scan_length +{ + kADC_ScanLength_1 = 0U, /*!< Scan length is 1 */ + kADC_ScanLength_2 = 1U, /*!< Scan length is 2 */ + kADC_ScanLength_3 = 2U, /*!< Scan length is 3 */ + kADC_ScanLength_4 = 3U, /*!< Scan length is 4 */ + kADC_ScanLength_5 = 4U, /*!< Scan length is 5 */ + kADC_ScanLength_6 = 5U, /*!< Scan length is 6 */ + kADC_ScanLength_7 = 6U, /*!< Scan length is 7 */ + kADC_ScanLength_8 = 7U, /*!< Scan length is 8 */ + kADC_ScanLength_9 = 8U, /*!< Scan length is 9 */ + kADC_ScanLength_10 = 9U, /*!< Scan length is 10 */ + kADC_ScanLength_11 = 10U, /*!< Scan length is 11 */ + kADC_ScanLength_12 = 11U, /*!< Scan length is 12 */ + kADC_ScanLength_13 = 12U, /*!< Scan length is 13 */ + kADC_ScanLength_14 = 13U, /*!< Scan length is 14 */ + kADC_ScanLength_15 = 14U, /*!< Scan length is 15 */ + kADC_ScanLength_16 = 15U, /*!< Scan length is 16 */ +} adc_scan_length_t; + +/*! + * @brief ADC average length type + */ +typedef enum _adc_average_length +{ + kADC_AverageNone = 0U, /*!< Average length: no average */ + kADC_Average2 = 1U, /*!< Average length: 2 */ + kADC_Average4 = 2U, /*!< Average length: 4 */ + kADC_Average8 = 3U, /*!< Average length: 8 */ + kADC_Average16 = 4U, /*!< Average length: 16 */ +} adc_average_length_t; + +/*! + * @brief ADC trigger source, including software trigger and multiple hardware trigger sources. + */ +typedef enum _adc_trigger_source +{ + kADC_TriggerSourceGpt = 0U, /*!< Hardware trigger, trigger source 0: GPT0 for ADC0 */ + kADC_TriggerSourceAcomp = 1U, /*!< Hardware trigger, trigger source 1: ACOMP0 for ADC0 */ + kADC_TriggerSourceGpio40 = 2U, /*!< Hardware trigger, trigger source 2: GPIO40 */ + kADC_TriggerSourceGpio41 = 3U, /*!< Hardware trigger, trigger source 3: GPIO41 */ + kADC_TriggerSourceSoftware = 4U, /*!< Software trigger. */ +} adc_trigger_source_t; + +/*! + * @brief ADC input buffer gain type + */ +typedef enum _adc_input_gain +{ + kADC_InputGain0P5 = 0U, /*!< Input buffer gain is 0.5 */ + kADC_InputGain1 = 1U, /*!< Input buffer gain is 1 */ + kADC_InputGain2 = 2U, /*!< Input buffer gain is 2 */ +} adc_input_gain_t; + +/*! + * @brief ADC result width type + */ +typedef enum _adc_result_width +{ + kADC_ResultWidth16 = 0U, /*!< 16-bit final result buffer width */ + kADC_ResultWidth32 = 1U, /*!< 32-bit final result buffer width */ +} adc_result_width_t; + +/*! + * @brief The threshold of FIFO. + */ +typedef enum _adc_fifo_threshold +{ + kADC_FifoThresholdData1 = 0U, /*!< FIFO Threshold is 1 data. */ + kADC_FifoThresholdData4, /*!< FIFO Threshold is 4 data. */ + kADC_FifoThresholdData8, /*!< FIFO Threshold is 8 data. */ + kADC_FifoThresholdData16, /*!< FIFO Threshold is 16 data. */ +} adc_fifo_threshold_t; + +/*! + * @brief ADC calibration voltage reference type + */ +typedef enum _adc_calibration_ref +{ + kADC_CalibrationVrefInternal = 0, /*!< Internal vref as input for calibration */ + kADC_CalibrationVrefExternal = 1, /*!< External vref as input for calibration */ +} adc_calibration_ref_t; + +/*! + * @brief ADC scan channel type + */ +typedef enum _adc_scan_channel +{ + kADC_ScanChannel0 = 0U, /*!< Scan channel 0 */ + kADC_ScanChannel1 = 1U, /*!< Scan channel 1 */ + kADC_ScanChannel2 = 2U, /*!< Scan channel 2 */ + kADC_ScanChannel3 = 3U, /*!< Scan channel 3 */ + kADC_ScanChannel4 = 4U, /*!< Scan channel 4 */ + kADC_ScanChannel5 = 5U, /*!< Scan channel 5 */ + kADC_ScanChannel6 = 6U, /*!< Scan channel 6 */ + kADC_ScanChannel7 = 7U, /*!< Scan channel 7 */ + kADC_ScanChannel8 = 8U, /*!< Scan channel 8 */ + kADC_ScanChannel9 = 9U, /*!< Scan channel 9 */ + kADC_ScanChannel10 = 10U, /*!< Scan channel 10 */ + kADC_ScanChannel11 = 11U, /*!< Scan channel 11 */ + kADC_ScanChannel12 = 12U, /*!< Scan channel 12 */ + kADC_ScanChannel13 = 13U, /*!< Scan channel 13 */ + kADC_ScanChannel14 = 14U, /*!< Scan channel 14 */ + kADC_ScanChannel15 = 15U, /*!< Scan channel 15 */ +} adc_scan_channel_t; + +/*! + * @brief ADC channel source type + */ +typedef enum _adc_channel_source +{ + kADC_CH0 = 0U, /*!< Single-ended mode, channel[0] and vssa */ + kADC_CH1 = 1U, /*!< Single-ended mode, channel[1] and vssa */ + kADC_CH2 = 2U, /*!< Single-ended mode, channel[2] and vssa */ + kADC_CH3 = 3U, /*!< Single-ended mode, channel[3] and vssa */ + kADC_CH4 = 4U, /*!< Single-ended mode, channel[4] and vssa */ + kADC_CH5 = 5U, /*!< Single-ended mode, channel[5] and vssa */ + kADC_CH6 = 6U, /*!< Single-ended mode, channel[6] and vssa */ + kADC_CH7 = 7U, /*!< Single-ended mode, channel[7] and vssa */ + kADC_VBATS = 8U, /*!< Single-ended mode, vbat_s and vssa */ + kADC_VREF = 9U, /*!< Single-ended mode, vref_12 and vssa */ + kADC_DACA = 10U, /*!< Single-ended mode, daca and vssa */ + kADC_DACB = 11U, /*!< Single-ended mode, dacb and vssa */ + kADC_VSSA = 12U, /*!< Single-ended mode, vssa and vssa */ + kADC_TEMPP = 15U, /*!< Single-ended mode, temp_p and vssa */ + + kADC_CH0_CH1 = 0U, /*!< Differential mode, channel[0] and channel[1] */ + kADC_CH2_CH3 = 1U, /*!< Differential mode, channel[2] and channel[3] */ + kADC_CH4_CH5 = 2U, /*!< Differential mode, channel[4] and channel[5] */ + kADC_CH6_CH7 = 3U, /*!< Differential mode, channel[6] and channel[7] */ + kADC_DACA_DACB = 4U, /*!< Differential mode, daca and dacb */ + kADC_VOICEP_VOICEN = 5U, /*!< Differential mode, voice_p and voice_n */ + kADC_TEMPP_TEMPN = 15U, /*!< Differential mode, temp_p and temp_n */ +} adc_channel_source_t; + +/*! + * @brief Temperature sensor mode, including internal diode mode and external diode mode. + */ +typedef enum _adc_temperature_sensor_mode +{ + kADC_TSensorInternal = 0U, /*!< Internal diode mode. */ + kADC_TSensorExternal, /*!< External diode mode. */ +} adc_temperature_sensor_mode_t; + +/*! + * @brief ADC audio pga gain type + */ +typedef enum _adc_audio_pga_voltage_gain +{ + kADC_AudioGain4 = 0U, /*!< Audio pga gain is 4 */ + kADC_AudioGain8 = 1U, /*!< Audio pga gain is 8 */ + kADC_AudioGain16 = 2U, /*!< Audio pga gain is 16 */ + kADC_AudioGain32 = 3U, /*!< Audio pga gain is 32 */ +} adc_audio_pga_voltage_gain_t; + +/*! + * @brief ADC audio voice level selection. + */ +typedef enum _adc_audio_voice_level +{ + kADC_VoiceLevel0 = 0U, /*!< Input voice level >+255LSB or <-256LSB */ + kADC_VoiceLevel1 = 1U, /*!< Input voice level >+511LSB or <-512LSB */ + kADC_VoiceLevel2 = 2U, /*!< Input voice level >+1023LSB or <-1024LSB */ + kADC_VoiceLevel3 = 3U, /*!< Input voice level >+2047LSB or <-2048LSB */ +} adc_audio_voice_level_t; + +/*! + * @brief The structure of adc options, including clock divider, power mode, and so on. + */ +typedef struct _adc_config +{ + /* ADC module basic options */ + adc_clock_divider_t clockDivider : 5U; /*!< Analog 64M clock division ratio, + please refer to @ref adc_clock_divider_t. */ + adc_analog_portion_power_mode_t powerMode : 1U; + adc_resolution_t resolution : 2U; /*!< Configure ADC resolution, please refer to + @ref adc_resolution_t. */ + adc_warm_up_time_t warmupTime : 6U; /*!< Configure warm-up time. */ + + /* ADC conversion related options. */ + adc_vref_source_t vrefSource : 2U; /*!< Configure voltage reference source, + please refer to @ref adc_vref_source_t. */ + adc_input_mode_t inputMode : 1U; /*!< Configure input mode, such as #kADC_InputSingleEnded + or #kADC_InputDifferential. */ + adc_conversion_mode_t conversionMode : 1U; /*!< Configure convrsion mode, such as + #kADC_ConversionOneShot or #kADC_ConversionContinuous. */ + adc_scan_length_t scanLength : 4U; /*!< Configure the length of scan, please refer to + @ref adc_scan_length_t. */ + adc_average_length_t averageLength : 3U; /*!< Configure hardware average number, please refer to + @ref adc_average_length_t */ + adc_trigger_source_t triggerSource : 3U; /*!< Configure trigger source, the trigger source can be + divided into hardware trigger and software trigger, + please refer to @ref adc_trigger_source_t for details. */ + adc_input_gain_t inputGain : 2U; /*!< Configure ADC input buffer gain, please refer to + @ref adc_input_gain_t. */ + bool enableInputGainBuffer : 1U; /*!< Enable/Disable input gain buffer. + - \b true Enable input gain buffer. + - \b false Disable input gain buffer. */ + + /* ADC conversion result related options. */ + adc_result_width_t resultWidth : 1U; /*!< Select result FIFO data packed format, please + refer to @ref adc_result_width_t. */ + adc_fifo_threshold_t fifoThreshold : 2U; /*!< Configure FIFO threshold, please refer to + @ref adc_fifo_threshold_t. */ + bool enableDMA : 1U; /*!< Enable/Disable DMA reqeust. + - \b true Enable DMA request. + - \b false Disable DMA request. */ + bool enableADC : 1U; /*!< Enable/Disable ADC module. + - \b true Enable ADC module. + - \b false Disable ADC module. */ +} adc_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name ADC Basic Control Interfaces + * @{ + */ + +/*! + * @brief Initialize ADC module, including clock divider, power mode, and so on. + * + * @param base ADC peripheral base address. + * @param config The pointer to the structure @ref adc_config_t. + */ +void ADC_Init(ADC_Type *base, const adc_config_t *config); + +/*! + * @brief Get default configuration. + * + * @code + * config->clockDivider = kADC_ClockDivider1; + * config->powerMode = kADC_PowerModeFullBiasingCurrent; + * config->resolution = kADC_Resolution12Bit; + * config->warmupTime = kADC_WarmUpTime16us; + * config->vrefSource = kADC_Vref1P2V; + * config->inputMode = kADC_InputSingleEnded; + * config->conversionMode = kADC_ConversionContinuous; + * config->scanLength = kADC_ScanLength_1; + * config->averageLength = kADC_AverageNone; + * config->triggerSource = kADC_TriggerSourceSoftware; + * config->inputGain = kADC_InputGain1; + * config->enableInputGainBuffer = false; + * config->resultWidth = kADC_ResultWidth16; + * config->fifoThreshold = kADC_FifoThresholdData1; + * config->enableDMA = false; + * config->enableADC = false; + * @endcode + * + * @param config The Pointer to the structure @ref adc_config_t. + */ +void ADC_GetDefaultConfig(adc_config_t *config); + +/*! + * @brief De-initialize the ADC module. + * + * @param base ADC peripheral base address. + */ +void ADC_Deinit(ADC_Type *base); + +/*! + * @brief Reset the whole ADC block. + * + * @param base ADC peripheral base address. + */ +static inline void ADC_DoSoftwareReset(ADC_Type *base) +{ + base->ADC_REG_CMD |= ADC_ADC_REG_CMD_SOFT_RST_MASK; + + for (uint8_t i = 0U; i < 10U; i++) + { + __NOP(); + } + base->ADC_REG_CMD &= ~ADC_ADC_REG_CMD_SOFT_RST_MASK; +} + +/*! + * @brief Select ADC analog portion power mode. + * + * @param base ADC peripheral base address. + * @param powerMode The power mode to be set, please refer to @ref adc_analog_portion_power_mode_t. + */ +static inline void ADC_SelectAnalogPortionPowerMode(ADC_Type *base, adc_analog_portion_power_mode_t powerMode) +{ + base->ADC_REG_ANA = (base->ADC_REG_ANA & (~ADC_ADC_REG_ANA_BIAS_SEL_MASK)) | ADC_ADC_REG_ANA_BIAS_SEL(powerMode); +} + +/*! @} */ + +/*! + * @name ADC Calibration Control Interfaces + * @{ + */ + +/*! + * @brief Do automatic calibration measurement. + * + * @note After auto calibrate successful, user can invoke ADC_GetAutoCalibrationData() to get self offset calibration + * value and self gain calibration value. + * + * @param base ADC peripheral base address. + * @param calVref The inpul reference channel for gain calibration, + * please refer to @ref adc_calibration_ref_t for details. + * @retval #kStatus_Success Auto calibrate successfully. + * @retval #kStatus_Fail Auto calibrate failure. + */ +status_t ADC_DoAutoCalibration(ADC_Type *base, adc_calibration_ref_t calVref); + +/*! + * @brief Get the ADC automatic calibration data. + * + * @param base ADC peripheral base address. + * @param offsetCal Self offset calibration data pointer, evaluate NULL if not requried. + * @param gainCal Self gain calibration data pointer, evaluate NULL if not requried. + */ +static inline void ADC_GetAutoCalibrationData(ADC_Type *base, uint16_t *offsetCal, uint16_t *gainCal) +{ + if (offsetCal != NULL) + { + *offsetCal = (uint16_t)(base->ADC_REG_OFFSET_CAL & ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_MASK); + } + + if (gainCal != NULL) + { + *gainCal = (uint16_t)(base->ADC_REG_GAIN_CAL & ADC_ADC_REG_GAIN_CAL_GAIN_CAL_MASK); + } +} + +/*! + * @brief Reset the automatic calibration data. + * + * @param base ADC peripheral base address. + */ +static inline void ADC_ResetAutoCalibrationData(ADC_Type *base) +{ + base->ADC_REG_CONFIG |= ADC_ADC_REG_CONFIG_CAL_DATA_RST_MASK; + for (volatile uint8_t i = 0U; i < 10U; i++) + { + __NOP(); + } + base->ADC_REG_CONFIG &= ~ADC_ADC_REG_CONFIG_CAL_DATA_RST_MASK; +} + +/*! + * @brief Do user defined calibration. + * + * @param base ADC peripheral base address. + * @param offsetCal User defined offset calibration data. + * @param gainCal User defined gain calibration date. + */ +static inline void ADC_DoUserCalibration(ADC_Type *base, uint16_t offsetCal, uint16_t gainCal) +{ + /* Load user defined offset and gain calibration data */ + base->ADC_REG_OFFSET_CAL = (base->ADC_REG_OFFSET_CAL & ~(ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_USR_MASK)) | + ADC_ADC_REG_OFFSET_CAL_OFFSET_CAL_USR(offsetCal); + base->ADC_REG_GAIN_CAL = (base->ADC_REG_GAIN_CAL & ~(ADC_ADC_REG_GAIN_CAL_GAIN_CAL_USR_MASK)) | + ADC_ADC_REG_GAIN_CAL_GAIN_CAL_USR(gainCal); + + /* Use user defined calibration data */ + base->ADC_REG_CONFIG |= ADC_ADC_REG_CONFIG_CAL_DATA_SEL_MASK; +} + +/*! @} */ + +/*! + * @name ADC Temperature Sensor Control Interfaces + * @{ + */ + +/*! + * @brief Enable/disable temperature sensor. + * + * @note This function is useful only when the channel source is temperature sensor. + * + * @param base ADC peripheral base address. + * @param enable Used to enable/disable temperature sensor. + * - \b true Enable temperature sensor. + * - \b false Disable temperature sensor. + */ +static inline void ADC_EnableTemperatureSensor(ADC_Type *base, bool enable) +{ + if (enable) + { + base->ADC_REG_ANA |= ADC_ADC_REG_ANA_TS_EN_MASK; + } + else + { + base->ADC_REG_ANA &= ~ADC_ADC_REG_ANA_TS_EN_MASK; + } +} + +/*! + * @brief Set temperature sensor mode, available selections are internal diode mode and external diode mode. + * + * @param base ADC peripheral base address. + * @param tSensorMode The temperature sensor mode to be set, please refer to @ref adc_temperature_sensor_mode_t. + */ +static inline void ADC_SetTemperatureSensorMode(ADC_Type *base, adc_temperature_sensor_mode_t tSensorMode) +{ + base->ADC_REG_ANA = + (base->ADC_REG_ANA & ~(ADC_ADC_REG_ANA_TSEXT_SEL_MASK)) | ADC_ADC_REG_ANA_TSEXT_SEL(tSensorMode); +} + +/*! @} */ + +/*! + * @name ADC Audio Control Interfaces + * @{ + */ + +/*! + * @brief Enable/disable audio PGA and decimation rate select. + * + * @param base ADC peripheral base address. + * @param enable Used to enable/disable audio PGA and decimation rate select. + * - \b true Enable audio PGA and decimation rate select. + * - \b false Disable audio PGA and decimation rate select. + */ +static inline void ADC_EnableAudio(ADC_Type *base, bool enable) +{ + if (enable) + { + base->ADC_REG_AUDIO |= ADC_ADC_REG_AUDIO_EN_MASK; + } + else + { + base->ADC_REG_AUDIO &= ~ADC_ADC_REG_AUDIO_EN_MASK; + } +} + +/*! + * @brief Set audio PGA voltage gain. + * + * @param base ADC peripheral base address. + * @param voltageGain The selected audio PGA voltage gain, please refer to @ref adc_audio_pga_voltage_gain_t. + */ +static inline void ADC_SetAudioPGAVoltageGain(ADC_Type *base, adc_audio_pga_voltage_gain_t voltageGain) +{ + base->ADC_REG_AUDIO = + (base->ADC_REG_AUDIO & (~ADC_ADC_REG_AUDIO_PGA_GAIN_MASK)) | ADC_ADC_REG_AUDIO_PGA_GAIN(voltageGain); +} + +/*! + * @brief Configure audio voice level. + * + * @param base ADC peripheral base address. + * @param enableDetect Used to enable/disable voice level detection. + * - \b true Enable voice level detection. + * - \b false Disable voice level detection. + * @param voiceLevel Selected voice level, please refer to @ref adc_audio_voice_level_t. + */ +void ADC_ConfigAudioVoiceLevel(ADC_Type *base, bool enableDetect, adc_audio_voice_level_t voiceLevel); + +/*! @} */ + +/*! + * @name ADC Conversion Related Interfaces + * @{ + */ + +/*! + * @brief Set scan channel mux source. + * + * @param base ADC peripheral base address. + * @param scanChannel The selected channel, please refer to @ref adc_scan_channel_t for details. + * @param channelSource The mux source to be set to the selected channel, + * please refer to @ref adc_channel_source_t for details. + */ +void ADC_SetScanChannel(ADC_Type *base, adc_scan_channel_t scanChannel, adc_channel_source_t channelSource); + +/*! + * @brief If trigger mode is selected as software trigger, invoking this function to start conversion. + * + * @note This API will also clear the FIFO. + * + * @param base ADC peripheral base address. + */ +static inline void ADC_DoSoftwareTrigger(ADC_Type *base) +{ + base->ADC_REG_CMD |= ADC_ADC_REG_CMD_CONV_START_MASK; +} + +/*! + * @brief Invoke this function to stop conversion. + * + * @param base ADC peripheral base address. + */ +static inline void ADC_StopConversion(ADC_Type *base) +{ + base->ADC_REG_CMD &= ~ADC_ADC_REG_CMD_CONV_START_MASK; +} + +/*! + * @brief Get the 32-bit width packed ADC conversion result. + * + * @param base ADC peripheral base address. + * @return 32-bit width packed ADC conversion result. + */ +static inline uint32_t ADC_GetConversionResult(ADC_Type *base) +{ + return (uint32_t)(base->ADC_REG_RESULT); +} + +/*! + * @brief Get the ADC FIFO data count. + * + * @param base ADC peripheral base address. + * @return ADC FIFO data count. + */ +static inline uint8_t ADC_GetFifoDataCount(ADC_Type *base) +{ + return (uint8_t)((base->ADC_REG_STATUS & ADC_ADC_REG_STATUS_FIFO_DATA_COUNT_MASK) >> + ADC_ADC_REG_STATUS_FIFO_DATA_COUNT_SHIFT); +} + +/*! @} */ + +/*! + * @name ADC Interrupt Control Interfaces + * @{ + */ + +/*! + * @brief Enable interrupts, such as conversion data ready interrupt, gain correction saturation interrupt, FIFO + * under run interrupt, and so on. + * + * @param base ADC peripheral base address. + * @param interruptMask The interrupts to be enabled, should be the OR'ed value of @ref _adc_interrupt_enable. + */ +static inline void ADC_EnableInterrupts(ADC_Type *base, uint32_t interruptMask) +{ + base->ADC_REG_IMR &= ~(interruptMask); +} + +/*! + * @brief Disable interrupts, such as conversion data ready interrupt, gain correction saturation interrupt, FIFO + * under run interrupt, and so on. + * + * @param base ADC peripheral base address. + * @param interruptMask The interrupts to be disabled, should be the OR'ed value of @ref _adc_interrupt_enable. + */ +static inline void ADC_DisableInterrupts(ADC_Type *base, uint32_t interruptMask) +{ + base->ADC_REG_IMR |= interruptMask; +} + +/*! @} */ + +/*! + * @name ADC Status Control Interfaces + * @{ + */ + +/*! + * @brief Get status flags, including interrupt flags, raw flags, and so on. + * + * @param base ADC peripheral base address. + * @return The OR'ed value of ADC status flags, please refer to @ref _adc_status_flags for details. + */ +uint32_t ADC_GetStatusFlags(ADC_Type *base); + +/*! + * @brief Clear status flags. + * + * @note Only interrupt flags and raw flags can be cleared. + * + * @param base ADC peripheral base address. + * @param statusFlagsMask The OR'ed value of status flags to be cleared, + * please refer to @ref _adc_status_flags for details. + */ +static inline void ADC_ClearStatusFlags(ADC_Type *base, uint32_t statusFlagsMask) +{ + base->ADC_REG_ICR = (statusFlagsMask & 0x7FUL) | ((statusFlagsMask >> 7UL) & 0x7FUL); +} + +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/*! @} */ + +#endif /* _FSL_ADC_H_ */ diff --git a/drivers/mw320/aes/driver_mw_aes.cmake b/drivers/mw320/aes/driver_mw_aes.cmake new file mode 100644 index 000000000..3fc6d27bc --- /dev/null +++ b/drivers/mw320/aes/driver_mw_aes.cmake @@ -0,0 +1,14 @@ +#Description: MW_AES Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_aes component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_aes.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/aes/fsl_aes.c b/drivers/mw320/aes/fsl_aes.c new file mode 100644 index 000000000..fa7e41c8d --- /dev/null +++ b/drivers/mw320/aes/fsl_aes.c @@ -0,0 +1,1491 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_aes.h" +#include "string.h" + +/******************************************************************************* + * Definitions + *******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.mw_aes" +#endif + +#define AES_CTRL1_RESET_VALUE (AES_CTRL1_OUT_MSG_MASK | AES_CTRL1_OUT_MIC_MASK) +#define AES_CTRL2_RESET_VALUE (0U) +#define AES_ASTR_LEN_RESET_VALUE (0U) +#define AES_MSTR_LEN_RESET_VALUE (0U) +#define AES_IV0_RESET_VALUE (0U) +#define AES_IV1_RESET_VALUE (0U) +#define AES_IV2_RESET_VALUE (0U) +#define AES_IV3_RESET_VALUE (0U) +#define AES_KEY0_RESET_VALUE (0U) +#define AES_KEY1_RESET_VALUE (0U) +#define AES_KEY2_RESET_VALUE (0U) +#define AES_KEY3_RESET_VALUE (0U) +#define AES_KEY4_RESET_VALUE (0U) +#define AES_KEY5_RESET_VALUE (0U) +#define AES_KEY6_RESET_VALUE (0U) +#define AES_KEY7_RESET_VALUE (0U) +#define AES_IMR_RESET_VALUE (AES_IMR_MASK_0_MASK | AES_IMR_MASK_1_MASK | AES_IMR_MASK_2_MASK) + +/*! + * @brief Structure to handle CCM output data array. + * + * In CCM calculation, the input data is written as 4-byte to AES registers, + * and the data should be got from different arrays. The problem is the arrays + * might be 4-byte unaligned. For easy operation, the arrays are collected into + * a structure, to operate use a common function. + */ +typedef struct +{ + const uint8_t *data; + size_t len; +} aes_input_data_array_t; + +/*! + * @brief Structure to handle CCM output data array. + * + * In CCM calculation, the output data is read as 4-byte from AES registers, + * and the data should be saved to different arrays. The problem is the arrays + * might be 4-byte unaligned. For easy operation, the arrays are collected into + * a structure, to operate use a common function. + */ +typedef struct +{ + uint8_t *data; + size_t len; +} aes_output_data_array_t; + +/*! + * @brief Union for bytes and word convertion. + */ +typedef union +{ + uint32_t word; + uint8_t bytes[4]; +} aes_word_byte_t; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief AES common operation. + * + * Only used for kAES_ModeEncryptECB, kAES_ModeDecryptECB, kAES_ModeEncryptCBC, + * kAES_ModeDecryptCBC, kAES_ModeCTR + * + * @param base AES peripheral base address. + * @param mode AES mode used in this operation. + * @param input Input data. + * @param output Output data. + * @param len Length of input and output data in bytes. + * @param inputVector Input vector. + * @param outputVector Output vector. + */ +static void AES_Operation(AES_Type *base, + aes_mode_t mode, + const uint8_t *input, + uint8_t *output, + size_t len, + const uint8_t *inputVector, + uint8_t *outputVector); + +/*! + * @brief Read word from a group of arrays. + * + * This function reads word from a group of arrays. The arrays might not be + * 4-byte aligned. + * + * @param arrays Pointer to the array group. + * @param totalArrays Number of the arrays in the group. + * @param curArrayIndex Reading from which array currently. This could be set to 0 + * before the first read, and should not be modified in later read. + * @return The word read from arrays. If there is no more data from the array, returns 0. + */ +static uint32_t AES_ReadWordFromArray(aes_input_data_array_t arrays[], uint8_t totalArrays, uint8_t *curArrayIndex); + +/*! + * @brief Write word to a group of arrays. + * + * This function writes word to a group of arrays. The arrays might not be + * 4-byte aligned. + * + * @param arrays Pointer to the array group. + * @param totalArrays Number of the arrays in the group. + * @param curArrayIndex Writing to which array currently. This could be set to 0 + * before the first read, and should not be modified in later write. + * @param word The word to write. If no space in the arrays anymore, the word will be dropped. + */ +static void AES_WriteWordToArray(aes_output_data_array_t arrays[], + uint8_t totalArrays, + uint8_t *curArrayIndex, + uint32_t word); + +/*! + * @brief Prepare the CCM operation. + * + * @param base AES peripheral base address. + * @param mode AES mode used in this operation. + * @param dataSize Length of plaintext or ciphertext in bytes. + * @param iv Input vector. + * @param ivSize Length of input vector in bytes. + * @param aadSize Length of input additional authentication data in bytes. + * @param tagSize Length of tag data in bytes. + * @retval kStatus_Success Prepare successfully. + * @retval kStatus_InvalidArgument Invalid parameters. + */ +static status_t AES_PrepareTagCcm( + AES_Type *base, aes_mode_t mode, size_t dataSize, const uint8_t *iv, size_t ivSize, size_t aadSize, size_t tagSize); + +/******************************************************************************* + * Variables + ******************************************************************************/ +static aes_lock_func_t s_aesLockFunc = NULL; +static aes_unlock_func_t s_aesUnlockFunc = NULL; + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t AES_ReadWordFromArray(aes_input_data_array_t arrays[], uint8_t totalArrays, uint8_t *curArrayIndex) +{ + uint8_t byteCopyIndex; + aes_input_data_array_t *pArray; + aes_word_byte_t ret; + + pArray = &arrays[*curArrayIndex]; + + if (pArray->len >= sizeof(uint32_t)) + { + ret.word = *(uint32_t *)(pArray->data); + pArray->len -= sizeof(uint32_t); + pArray->data += sizeof(uint32_t); + } + else + { + ret.word = 0; + byteCopyIndex = 0; + + while (*curArrayIndex < totalArrays) + { + while ((byteCopyIndex < sizeof(uint32_t)) && (pArray->len > 0U)) + { + ret.bytes[byteCopyIndex] = *(pArray->data); + pArray->len--; + pArray->data++; + byteCopyIndex++; + } + + if (byteCopyIndex == sizeof(uint32_t)) + { + break; + } + else + { + (*curArrayIndex)++; + pArray++; + continue; + } + } + } + + return ret.word; +} + +static void AES_WriteWordToArray(aes_output_data_array_t arrays[], + uint8_t totalArrays, + uint8_t *curArrayIndex, + uint32_t word) +{ + uint8_t byteCopyIndex; + aes_output_data_array_t *pArray; + aes_word_byte_t data; + + pArray = &arrays[*curArrayIndex]; + + if (pArray->len >= sizeof(uint32_t)) + { + /* If pArray->data is NULL, drop the data. */ + if (NULL != pArray->data) + { + *(uint32_t *)(pArray->data) = word; + pArray->data += sizeof(uint32_t); + } + + pArray->len -= sizeof(uint32_t); + } + else + { + data.word = word; + byteCopyIndex = 0; + + while (*curArrayIndex < totalArrays) + { + while ((byteCopyIndex < sizeof(uint32_t)) && (pArray->len > 0U)) + { + if (NULL != pArray->data) + { + *pArray->data = data.bytes[byteCopyIndex]; + pArray->data++; + } + + pArray->len--; + byteCopyIndex++; + } + + if (byteCopyIndex == sizeof(uint32_t)) + { + break; + } + else + { + (*curArrayIndex)++; + pArray++; + continue; + } + } + } +} + +static void AES_Operation(AES_Type *base, + aes_mode_t mode, + const uint8_t *input, + uint8_t *output, + size_t len, + const uint8_t *inputVector, + uint8_t *outputVector) +{ + size_t inputSize = len; + size_t outputSize = len; + + AES_Reset(base); + + AES_SetMode(base, mode); + + AES_SetMsgLen(base, (uint32_t)len); + + if (inputVector != NULL) + { + AES_SetInputVector(base, inputVector); + } + + AES_EnableOutMsg(base, true); + + AES_Start(base); + + while (outputSize > 0) + { + if (inputSize > 0) + { + /* Input FIFO not full, feed data. */ + if (0U == (AES_GetStatus(base) & kAES_InputFIFOFullFlag)) + { + AES_WriteData(base, *(const uint32_t *)input); + input += sizeof(uint32_t); + inputSize -= sizeof(uint32_t); + } + } + + /* Output FIFO not empty, read data. */ + if (0U == (AES_GetStatus(base) & kAES_OutputFIFOEmptyFlag)) + { + *(uint32_t *)output = AES_ReadData(base); + output += sizeof(uint32_t); + outputSize -= sizeof(uint32_t); + } + } + + if (outputVector != NULL) + { + AES_GetOutputVector(base, outputVector); + } + + AES_Stop(base); +} + +static status_t AES_PrepareTagCcm( + AES_Type *base, aes_mode_t mode, size_t dataSize, const uint8_t *iv, size_t ivSize, size_t aadSize, size_t tagSize) +{ + uint8_t localIV[AES_VECTOR_SIZE] = {0}; + aes_miclen_t micLen; + + /* Verify parameter. */ + if ((ivSize < 7) || (ivSize > 13)) + { + return kStatus_InvalidArgument; + } + + if ((tagSize != 16U) && (tagSize != 8U) && (tagSize != 4U) && (tagSize != 0U)) + { + return kStatus_InvalidArgument; + } + + AES_Reset(base); + + /* Input vector configuration. */ + memcpy(localIV, iv, ivSize); + + localIV[13] = 15U - ivSize; + + AES_SetInputVector(base, localIV); + + /* AAD configuration. */ + AES_SetAadLen(base, aadSize); + + /* TAG configuration. */ + micLen = (tagSize == 16U) ? + kAES_MicBytes16 : + ((tagSize == 8U) ? kAES_MicBytes8 : ((tagSize == 4U) ? kAES_MicBytes4 : kAES_MicBytes0)); + + AES_SetMode(base, mode); + + AES_SetMICLength(base, micLen); + + if (kAES_ModeDecryptCCM == mode) + { + AES_AppendMIC(base, false); + } + else + { + AES_AppendMIC(base, (kAES_MicBytes0 != micLen)); + } + + AES_SetMsgLen(base, dataSize); + + AES_EnableOutMsg(base, true); + + return kStatus_Success; +} + +/*! + * brief Initializes AES module. + * + * Initialize the module, reset the module and set the registers to default status. + * + * param base AES peripheral base address. + */ +void AES_Init(AES_Type *base) +{ + AES_Reset(base); + + base->CTRL1 = AES_CTRL1_RESET_VALUE; + base->CTRL2 = AES_CTRL2_RESET_VALUE; + base->ASTR_LEN = AES_ASTR_LEN_RESET_VALUE; + base->MSTR_LEN = AES_MSTR_LEN_RESET_VALUE; + base->IV0 = AES_IV0_RESET_VALUE; + base->IV1 = AES_IV1_RESET_VALUE; + base->IV2 = AES_IV2_RESET_VALUE; + base->IV3 = AES_IV3_RESET_VALUE; + base->KEY0 = AES_KEY0_RESET_VALUE; + base->KEY1 = AES_KEY1_RESET_VALUE; + base->KEY2 = AES_KEY2_RESET_VALUE; + base->KEY3 = AES_KEY3_RESET_VALUE; + base->KEY4 = AES_KEY4_RESET_VALUE; + base->KEY5 = AES_KEY5_RESET_VALUE; + base->KEY6 = AES_KEY6_RESET_VALUE; + base->KEY7 = AES_KEY7_RESET_VALUE; + base->IMR = AES_IMR_RESET_VALUE; + + /* Clear interrupt status. */ + base->ICR = base->IRSR; +} + +/*! + * brief Deinitializes AES module. + * + * Deinitialize the module and reset the module. + * + * param base AES peripheral base address. + */ +void AES_Deinit(AES_Type *base) +{ + AES_Reset(base); +} + +/*! + * brief Reset AES module. + * + * Reset the module. + * + * param base AES peripheral base address. + */ +void AES_Reset(AES_Type *base) +{ + uint32_t cnt = 0x20; + + base->CTRL2 |= AES_CTRL2_AES_RESET_MASK; + + while (0U != cnt--) + { + __NOP(); + } + + base->CTRL2 &= ~AES_CTRL2_AES_RESET_MASK; +} + +/*! + * brief Set the AES input vector. + + * param base AES peripheral base address. + * param inputVector Input vector. + */ +void AES_SetInputVector(AES_Type *base, const uint8_t inputVector[AES_VECTOR_SIZE]) +{ + base->IV0 = ((uint32_t *)inputVector)[0]; + base->IV1 = ((uint32_t *)inputVector)[1]; + base->IV2 = ((uint32_t *)inputVector)[2]; + base->IV3 = ((uint32_t *)inputVector)[3]; +} + +/*! + * brief Get the AES output vector. + * + * param base AES peripheral base address. + * param outputVector Array to save the output vector. + */ +void AES_GetOutputVector(AES_Type *base, uint8_t outputVector[AES_VECTOR_SIZE]) +{ + ((uint32_t *)outputVector)[0] = base->OV0; + ((uint32_t *)outputVector)[1] = base->OV1; + ((uint32_t *)outputVector)[2] = base->OV2; + ((uint32_t *)outputVector)[3] = base->OV3; +} + +/*! + * brief Read AES CCM MIC output value. + * + * param base AES peripheral base address. + * param micData The memory to save the MIC data. + * param len Length of micData in word, the valid range is 1~4. + * retval kStatus_InvalidArgument The required length is wrong. + * retval kStatus_Success Get MIC successfully. + */ +status_t AES_ReadMIC(AES_Type *base, uint32_t *micData, uint8_t len) +{ + uint32_t cnt; + + /* check for len */ + if ((len == 0U) || (len > 4U)) + { + return kStatus_InvalidArgument; + } + + /* captured the mic data */ + for (cnt = 0u; cnt < len; cnt++) + { + micData[cnt] = (&base->OV0)[cnt]; + } + + return kStatus_Success; +} + +/*! + * brief Clear AES input or output FIFO. + * + * param base AES peripheral base address. + * param fifo The FIFO to clear. + */ +void AES_ClearFIFO(AES_Type *base, aes_fifo_t fifo) +{ + uint32_t tmpCnt = 0x20; + + base->CTRL1 |= (uint32_t)fifo; + + while (0U != tmpCnt--) + { + __NOP(); + } + + base->CTRL1 &= ~(uint32_t)fifo; +} + +/*! + * brief Sets AES key. + * + * Sets AES key. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * return Status from Set Key operation + */ +status_t AES_SetKey(AES_Type *base, const uint8_t *key, size_t keySize) +{ + status_t status = kStatus_Success; + aes_keysize_t aesKeySize; + uint32_t i; + + switch (keySize) + { + case 16: + aesKeySize = kAES_KeyBytes16; + break; + + case 24: + aesKeySize = kAES_KeyBytes24; + break; + + case 32: + aesKeySize = kAES_KeyBytes32; + break; + + default: + status = kStatus_InvalidArgument; + } + + if (kStatus_Success == status) + { + /* Set aesKeySize. */ + base->CTRL1 = (base->CTRL1 & ~AES_CTRL1_KEY_SIZE_MASK) | AES_CTRL1_KEY_SIZE(aesKeySize); + + for (i = 0; i < keySize / 4; i++) + { + (&base->KEY0)[7 - i] = ((const uint32_t *)key)[i]; + } + for (; i < 8; i++) + { + (&base->KEY0)[7 - i] = 0U; + } + } + + return status; +} + +/*! + * brief Encrypts AES using the ECB block mode. + * + * Encrypts AES using the ECB block mode. + * + * param base AES peripheral base address + * param plaintext Input plain text to encrypt + * param[out] ciphertext Output cipher text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * return Status from encrypt operation + */ +status_t AES_EncryptEcb(AES_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, size_t size) +{ + status_t status; + + /* ECB mode, size must be 16-byte multiple */ + if ((size % 16U) != 0U) + { + status = kStatus_InvalidArgument; + } + else + { + AES_Operation(base, kAES_ModeEncryptECB, plaintext, ciphertext, size, NULL, NULL); + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Decrypts AES using the ECB block mode. + * + * Decrypts AES using the ECB block mode. + * + * param base AES peripheral base address + * param ciphertext Input ciphertext to decrypt + * param[out] plaintext Output plain text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * return Status from decrypt operation + */ +status_t AES_DecryptEcb(AES_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, size_t size) +{ + status_t status; + + /* ECB mode, size must be 16-byte multiple */ + if ((size % 16U) != 0U) + { + status = kStatus_InvalidArgument; + } + else + { + AES_Operation(base, kAES_ModeDecryptECB, ciphertext, plaintext, size, NULL, NULL); + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Encrypts AES using CBC block mode. + * + * param base AES peripheral base address + * param plaintext Input plain text to encrypt + * param[out] ciphertext Output cipher text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * param iv Input initial vector to combine with the first input block. + * param[out] ov Output vector used for chained operation, could be NULL. + * return Status from encrypt operation + */ +status_t AES_EncryptCbc(AES_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]) +{ + status_t status; + + /* ECB mode, size must be 16-byte multiple */ + if ((size % 16U) != 0U) + { + status = kStatus_InvalidArgument; + } + else + { + AES_Operation(base, kAES_ModeEncryptCBC, plaintext, ciphertext, size, iv, ov); + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Decrypts AES using CBC block mode. + * + * param base AES peripheral base address + * param ciphertext Input cipher text to decrypt + * param[out] plaintext Output plain text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * param iv Input initial vector to combine with the first input block. + * param[out] ov Output vector used for chained operation, could be NULL. + * return Status from decrypt operation + */ +status_t AES_DecryptCbc(AES_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]) +{ + status_t status; + + /* ECB mode, size must be 16-byte multiple */ + if ((size % 16U) != 0U) + { + status = kStatus_InvalidArgument; + } + else + { + AES_Operation(base, kAES_ModeDecryptCBC, ciphertext, plaintext, size, iv, ov); + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Encrypts or decrypts AES using CTR block mode. + * + * Encrypts or decrypts AES using CTR block mode. + * AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption. + * The only difference between encryption and decryption is that, for encryption, the input argument + * is plain text and the output argument is cipher text. For decryption, the input argument is cipher text + * and the output argument is plain text. + * + * For chained calls, the internal status are saved in the parameters: nonce, streamBlock, + * and offset. In this case, initialize nonce to the desired value, and initialize offset to 0 + * before the first call, in the following calls, the nonce, streamBlock, and offset should be + * preserved. + * + * note The streamBlock contains sensitive data, discard it after used. + * + * param base AES peripheral base address + * param input Input data for CTR block mode + * param[out] output Output data for CTR block mode + * param size Size of input and output data in bytes + * param[in,out] nonce and counter(updates on return) + * param[out] streamBlock Saved block for chained CTR calls. NULL can be passed if chained calls are + * not used. + * param[out] offset Offset in streamBlock. NULL can be passed if chained calls + * are not used. + * return Status from crypt operation + */ +status_t AES_CryptCtr(AES_Type *base, + const uint8_t *input, + uint8_t *output, + size_t size, + uint8_t nonce[AES_BLOCK_SIZE], + uint8_t streamBlock[AES_BLOCK_SIZE], + size_t *offset) +{ + size_t n2, n3; + size_t localOffset; + uint8_t lastBlockIn[AES_BLOCK_SIZE]; + uint8_t lastBlockOut[AES_BLOCK_SIZE]; + + /* + * The AES output is divided into three parts, the length of each parts are: + * n1, n2, n3. + * + * n1: If previous calculation is not AES block size aligned, there are valid data in + * streamBlock. Input data should first XOR'ed with the data in streamBlock. + * n2: After n1, the AES block size aligned data in left data is n2. They are fed into + * AES directly. + * n3: After n2, the left AES block size unaligned part is n3. They are pad to AES + * block size and fed into AES. + */ + + if ((NULL == streamBlock) || (NULL == offset)) + { + localOffset = 0U; + } + else + { + localOffset = *offset; + } + + /* Handle the n1 part. */ + while (0U != size) + { + if (localOffset == 0U) + { + break; + } + + *output = *input ^ streamBlock[localOffset]; + output++; + input++; + size--; + localOffset++; + + localOffset &= (AES_BLOCK_SIZE - 1U); + } + + if (offset != NULL) + { + *offset = localOffset; + } + + n2 = size & ~(AES_BLOCK_SIZE - 1U); + n3 = size - n2; + + /* Handle the n2 part. */ + if (n2 > 0) + { + AES_Operation(base, kAES_ModeCTR, input, output, n2, nonce, nonce); + + input += n2; + output += n2; + } + + /* Handle the n3 part. */ + if (n3 > 0) + { + memset(lastBlockIn, 0, sizeof(lastBlockIn)); + memcpy(lastBlockIn, input, n3); + + AES_Operation(base, kAES_ModeCTR, lastBlockIn, lastBlockOut, AES_BLOCK_SIZE, nonce, nonce); + + memcpy(output, lastBlockOut, n3); + + if (NULL != streamBlock) + { + memcpy(&streamBlock[n3], &lastBlockOut[n3], AES_BLOCK_SIZE - n3); + } + + if (NULL != offset) + { + *offset = n3; + } + } + + return kStatus_Success; +} + +/*! + * brief Encrypts AES and tags using CCM block mode. + * + * Encrypts AES and optionally tags using CCM block mode. + * + * param base AES peripheral base address + * param plaintext Input plain text to encrypt + * param[out] ciphertext Output cipher text. + * param size Size of input and output data in bytes + * param iv Input initial vector + * param ivSize Size of the iv + * param aad Input additional authentication data + * param aadSize Input size in bytes of aad. + * param[out] tag Output hash tag. Set to NULL to skip tag processing. + * param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * return Status from encrypt operation + */ +status_t AES_EncryptTagCcm(AES_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + uint8_t *tag, + size_t tagSize) +{ + status_t status; + int32_t inputSize, outputSize; + uint8_t curOutputArrayIndex; + uint8_t curInputArrayIndex; + uint32_t inputWord; + uint32_t outputWord; + + /* Input: AAD + Plain. */ + aes_input_data_array_t inputDataArrays[2]; + /* Output: AAD + Cipher + MIC. */ + aes_output_data_array_t outputDataArrays[3]; + + if (NULL == tag) + { + tagSize = 0U; + } + + status = AES_PrepareTagCcm(base, kAES_ModeEncryptCCM, size, iv, ivSize, aadSize, tagSize); + + if (kStatus_Success != status) + { + return status; + } + + /* Input: AAD + plain. */ + inputDataArrays[0].data = aad; + inputDataArrays[0].len = aadSize; + inputDataArrays[1].data = plaintext; + inputDataArrays[1].len = size; + inputSize = aadSize + size; + + /* Output: AAD + Chiper + MIC. */ + outputDataArrays[0].data = NULL; + outputDataArrays[0].len = aadSize; + outputDataArrays[1].data = ciphertext; + outputDataArrays[1].len = size; + outputDataArrays[2].data = tag; + outputDataArrays[2].len = tagSize; + outputSize = aadSize + size + tagSize; + + AES_Start(base); + + curOutputArrayIndex = 0; + curInputArrayIndex = 0; + + inputWord = AES_ReadWordFromArray(inputDataArrays, ARRAY_SIZE(inputDataArrays), &curInputArrayIndex); + + while (outputSize > 0) + { + if (inputSize > 0) + { + /* Input FIFO not full, feed data. */ + if (0U == (AES_GetStatus(base) & kAES_InputFIFOFullFlag)) + { + AES_WriteData(base, inputWord); + inputWord = AES_ReadWordFromArray(inputDataArrays, ARRAY_SIZE(inputDataArrays), &curInputArrayIndex); + inputSize -= sizeof(uint32_t); + } + } + + /* Output FIFO not empty, read data. */ + if (0U == (AES_GetStatus(base) & kAES_OutputFIFOEmptyFlag)) + { + outputWord = AES_ReadData(base); + AES_WriteWordToArray(outputDataArrays, ARRAY_SIZE(outputDataArrays), &curOutputArrayIndex, outputWord); + outputSize -= sizeof(uint32_t); + } + } + + AES_Stop(base); + + return kStatus_Success; +} + +/*! + * brief Decrypts AES and authenticates using CCM block mode. + * + * Decrypts AES and optionally authenticates using CCM block mode. + * + * param base AES peripheral base address + * param ciphertext Input cipher text to decrypt + * param[out] plaintext Output plain text. + * param size Size of input and output data in bytes + * param iv Input initial vector + * param ivSize Size of the iv + * param aad Input additional authentication data + * param aadSize Input size in bytes of aad + * param tag Input hash tag to compare. Set to NULL to skip tag processing. + * param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * return Status from decrypt operation + */ +status_t AES_DecryptTagCcm(AES_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + const uint8_t *tag, + size_t tagSize) +{ + status_t status; + int32_t inputSize, outputSize; + uint8_t curOutputArrayIndex; + uint8_t curInputArrayIndex; + uint32_t inputWord; + uint32_t outputWord; + + /* Input: AAD + Cipher + MIC. */ + aes_input_data_array_t inputDataArrays[3]; + /* Output: AAD + Plain. */ + aes_output_data_array_t outputDataArrays[2]; + + if (NULL == tag) + { + tagSize = 0U; + } + + status = AES_PrepareTagCcm(base, kAES_ModeDecryptCCM, size, iv, ivSize, aadSize, tagSize); + + if (kStatus_Success != status) + { + return status; + } + + /* Input: AAD + Chiper + MIC. */ + inputDataArrays[0].data = aad; + inputDataArrays[0].len = aadSize; + inputDataArrays[1].data = ciphertext; + inputDataArrays[1].len = size; + inputDataArrays[2].data = tag; + inputDataArrays[2].len = tagSize; + inputSize = aadSize + size + tagSize; + + /* Output: AAD + Plain. */ + outputDataArrays[0].data = NULL; + outputDataArrays[0].len = aadSize; + outputDataArrays[1].data = plaintext; + outputDataArrays[1].len = (plaintext == NULL) ? 0 : size; + outputSize = aadSize + size; + + AES_Start(base); + + curOutputArrayIndex = 0; + curInputArrayIndex = 0; + + inputWord = AES_ReadWordFromArray(inputDataArrays, ARRAY_SIZE(inputDataArrays), &curInputArrayIndex); + + while (outputSize > 0) + { + if (0U != (AES_GetStatus(base) & kAES_Error2Flag)) + { + status = kStatus_Fail; + break; + } + + if (inputSize > 0) + { + /* Input FIFO not full, feed data. */ + if (0U == (AES_GetStatus(base) & kAES_InputFIFOFullFlag)) + { + AES_WriteData(base, inputWord); + inputWord = AES_ReadWordFromArray(inputDataArrays, ARRAY_SIZE(inputDataArrays), &curInputArrayIndex); + inputSize -= sizeof(uint32_t); + } + } + + /* Output FIFO not empty, read data. */ + if (0U == (AES_GetStatus(base) & kAES_OutputFIFOEmptyFlag)) + { + outputWord = AES_ReadData(base); + AES_WriteWordToArray(outputDataArrays, ARRAY_SIZE(outputDataArrays), &curOutputArrayIndex, outputWord); + outputSize -= sizeof(uint32_t); + } + } + + AES_Stop(base); + + return status; +} + +/*! + * brief Calculate the input stream MMO HASH value. + * + * param base AES peripheral base address + * param input Input stream. + * param size Length of the stream in bytes. + * param[out] hash Hash value of the input stream. + * return Status from HASH operation + */ +status_t AES_CalculateMMOHash(AES_Type *base, const uint8_t *input, size_t size, uint8_t hash[16]) +{ + assert(NULL != input); + aes_word_byte_t dataToWrite; + + AES_Reset(base); + + AES_SetMode(base, kAES_ModeMMO); + + AES_SetKey(base, hash, 16); + + AES_SetMsgLen(base, size); + + AES_EnableOutMsg(base, false); + + AES_AppendMIC(base, true); + + AES_SetInputVector(base, hash); + + AES_Start(base); + + /* Handle the 4-byte aligned part. */ + while (size >= sizeof(uint32_t)) + { + dataToWrite.word = *(const uint32_t *)input; + input += sizeof(uint32_t); + size -= sizeof(uint32_t); + + /* Wait for input FIFO not full. */ + while (0U != (AES_GetStatus(base) & kAES_InputFIFOFullFlag)) + { + } + + AES_WriteData(base, dataToWrite.word); + } + + /* Handle the 4-byte unaligned part. */ + if (size > 0U) + { + dataToWrite.word = 0U; + + for (uint8_t i = 0; i < size; i++) + { + dataToWrite.bytes[i] = *input; + input++; + } + + /* Wait for input FIFO not full. */ + while (0U != (AES_GetStatus(base) & kAES_InputFIFOFullFlag)) + { + } + + AES_WriteData(base, dataToWrite.word); + } + + /* Wait for proess complete. */ + while (0U == (AES_GetStatus(base) & kAES_DoneFlag)) + { + } + + AES_Stop(base); + + AES_GetOutputVector(base, hash); + + return kStatus_Success; +} + +/*! + * brief Set the lock functions. + * + * param lockFunc Lock function. + * param unlockFunc Unlock function. + */ +void AES_SetLockFunc(aes_lock_func_t lockFunc, aes_unlock_func_t unlockFunc) +{ + s_aesLockFunc = lockFunc; + s_aesUnlockFunc = unlockFunc; +} + +/* + * brief Encrypts AES using the ECB block mode. + * + * Encrypts AES using the ECB block mode. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. + * param plaintext Input plain text to encrypt + * param[out] ciphertext Output cipher text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * return Status from encrypt operation + */ +status_t AES_EncryptEcbWithLock( + AES_Type *base, const uint8_t *key, size_t keySize, const uint8_t *plaintext, uint8_t *ciphertext, size_t size) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_SetKey(base, key, keySize); + + if (kStatus_Success == status) + { + status = AES_EncryptEcb(base, plaintext, ciphertext, size); + } + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} + +/*! + * brief Decrypts AES using the ECB block mode. + * + * Decrypts AES using the ECB block mode. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. + * param ciphertext Input ciphertext to decrypt + * param[out] plaintext Output plain text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * return Status from decrypt operation + */ +status_t AES_DecryptEcbWithLock( + AES_Type *base, const uint8_t *key, size_t keySize, const uint8_t *ciphertext, uint8_t *plaintext, size_t size) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_SetKey(base, key, keySize); + + if (kStatus_Success == status) + { + status = AES_DecryptEcb(base, ciphertext, plaintext, size); + } + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} + +/* + * brief Encrypts AES using CBC block mode. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. + * param plaintext Input plain text to encrypt + * param[out] ciphertext Output cipher text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * param iv Input initial vector to combine with the first input block. + * param[out] ov Output vector used for chained operation, could be NULL. + * return Status from encrypt operation + */ +status_t AES_EncryptCbcWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_SetKey(base, key, keySize); + + if (kStatus_Success == status) + { + status = AES_EncryptCbc(base, plaintext, ciphertext, size, iv, ov); + } + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} + +/* + * brief Decrypts AES using CBC block mode. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. + * param ciphertext Input cipher text to decrypt + * param[out] plaintext Output plain text + * param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * param iv Input initial vector to combine with the first input block. + * param ov[out] Output vector used for chained operation, could be NULL. + * return Status from decrypt operation + */ +status_t AES_DecryptCbcWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_SetKey(base, key, keySize); + + if (kStatus_Success == status) + { + status = AES_DecryptCbc(base, ciphertext, plaintext, size, iv, ov); + } + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} + +/*! + * brief Encrypts or decrypts AES using CTR block mode. + * + * Encrypts or decrypts AES using CTR block mode. + * AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption. + * The only difference between encryption and decryption is that, for encryption, the input argument + * is plain text and the output argument is cipher text. For decryption, the input argument is cipher text + * and the output argument is plain text. + * + * For chained calls, the internal status are saved in the parameters: nonce, streamBlock, + * and offset. In this case, initialize nonce to the desired value, and initialize offset to 0 + * before the first call, in the following calls, the nonce, streamBlock, and offset should be + * preserved. + * + * @note The streamBlock contains sensitive data, discard it after used. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. + * param input Input data for CTR block mode + * param[out] output Output data for CTR block mode + * param size Size of input and output data in bytes + * param[in,out] nonce and counter(updates on return) + * param[out] streamBlock Saved block for chained CTR calls. NULL can be passed if chained calls are + * not used. + * param[out] offset Offset in streamBlock. NULL can be passed if chained calls + * are not used. + * return Status from crypt operation + */ +status_t AES_CryptCtrWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *input, + uint8_t *output, + size_t size, + uint8_t nonce[AES_BLOCK_SIZE], + uint8_t streamBlock[AES_BLOCK_SIZE], + size_t *offset) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_SetKey(base, key, keySize); + + if (kStatus_Success == status) + { + status = AES_CryptCtr(base, input, output, size, nonce, streamBlock, offset); + } + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} + +/*! + * brief Encrypts AES and tags using CCM block mode. + * + * Encrypts AES and optionally tags using CCM block mode. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. + * param plaintext Input plain text to encrypt + * param[out] ciphertext Output cipher text. + * param size Size of input and output data in bytes + * param iv Input initial vector + * param ivSize Size of the iv + * param aad Input additional authentication data + * param aadSize Input size in bytes of aad. + * param[out] tag Output hash tag. Set to NULL to skip tag processing. + * param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * return Status from encrypt operation + */ +status_t AES_EncryptTagCcmWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + uint8_t *tag, + size_t tagSize) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_SetKey(base, key, keySize); + + if (kStatus_Success == status) + { + status = AES_EncryptTagCcm(base, plaintext, ciphertext, size, iv, ivSize, aad, aadSize, tag, tagSize); + } + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} + +/*! + * brief Decrypts AES and authenticates using CCM block mode. + * + * Decrypts AES and optionally authenticates using CCM block mode. + * + * param base AES peripheral base address + * param key Input key to use for encryption or decryption + * param keySize Size of the input key, in bytes. + * param ciphertext Input cipher text to decrypt + * param[out] plaintext Output plain text. + * param size Size of input and output data in bytes + * param iv Input initial vector + * param ivSize Size of the iv + * param aad Input additional authentication data + * param aadSize Input size in bytes of aad + * param tag Input hash tag to compare. Set to NULL to skip tag processing. + * param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * return Status from decrypt operation + */ +status_t AES_DecryptTagCcmWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + const uint8_t *tag, + size_t tagSize) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_SetKey(base, key, keySize); + + if (kStatus_Success == status) + { + status = AES_DecryptTagCcm(base, ciphertext, plaintext, size, iv, ivSize, aad, aadSize, tag, tagSize); + } + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} + +/*! + * brief Calculate the input stream MMO HASH value. + * + * param base AES peripheral base address + * param input Input stream. + * param size Length of the stream in bytes. + * param[out] hash Hash value of the input stream. + * return Status from HASH operation + */ +status_t AES_CalculateMMOHashWithLock(AES_Type *base, const uint8_t *input, size_t size, uint8_t hash[16]) +{ + status_t status = kStatus_Success; + + if (s_aesLockFunc) + { + status = s_aesLockFunc(); + } + + if (kStatus_Success == status) + { + status = AES_CalculateMMOHash(base, input, size, hash); + + if (s_aesUnlockFunc) + { + s_aesUnlockFunc(); + } + } + + return status; +} diff --git a/drivers/mw320/aes/fsl_aes.h b/drivers/mw320/aes/fsl_aes.h new file mode 100644 index 000000000..99d7d3c9b --- /dev/null +++ b/drivers/mw320/aes/fsl_aes.h @@ -0,0 +1,838 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_AES_H_ +#define _FSL_AES_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup aes + * @{ + */ + +/******************************************************************************* + * Definitions + *******************************************************************************/ + +/*! @brief Defines AES driver version. */ +#define FSL_AES_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) + +/*! AES block size in bytes */ +#define AES_BLOCK_SIZE 16U + +/*! AES Vector size in bytes */ +#define AES_VECTOR_SIZE 16U + +/*! + * @brief AES work mode definition. + */ +typedef enum +{ + kAES_ModeEncryptECB = AES_CTRL1_DECRYPT(0) | AES_CTRL1_MODE(0), /*!< ECB encrypt */ + kAES_ModeDecryptECB = AES_CTRL1_DECRYPT(1) | AES_CTRL1_MODE(0), /*!< ECB decrypt */ + kAES_ModeEncryptCBC = AES_CTRL1_DECRYPT(0) | AES_CTRL1_MODE(1), /*!< CBC encrypt */ + kAES_ModeDecryptCBC = AES_CTRL1_DECRYPT(1) | AES_CTRL1_MODE(1), /*!< CBC decrypt */ + kAES_ModeCTR = AES_CTRL1_DECRYPT(0) | AES_CTRL1_MODE(2), /*!< CTR */ + kAES_ModeEncryptCCM = AES_CTRL1_DECRYPT(0) | AES_CTRL1_MODE(5), /*!< CCM encrypt */ + kAES_ModeDecryptCCM = AES_CTRL1_DECRYPT(1) | AES_CTRL1_MODE(5), /*!< CCM decrypt */ + kAES_ModeMMO = AES_CTRL1_DECRYPT(0) | AES_CTRL1_MODE(6), /*!< AES mode: MMO */ + kAES_ModeBYPASS = AES_CTRL1_DECRYPT(0) | AES_CTRL1_MODE(7), /*!< AES mode: Bypass */ +} aes_mode_t; + +/*! + * @brief AES FIFO. + */ +typedef enum +{ + kAES_InputFIFO = AES_CTRL1_IF_CLR_MASK, /*!< Input FIFO. */ + kAES_OutputFIFO = AES_CTRL1_OF_CLR_MASK, /*!< Output FIFO. */ + kAES_AllFIFO = AES_CTRL1_OF_CLR_MASK | AES_CTRL1_IF_CLR_MASK, /*!< Input and output FIFO. */ +} aes_fifo_t; + +/*! + * @brief AES key size type definition + */ +typedef enum +{ + kAES_KeyBytes16 = 0, /*!< AES key size select: 16 bytes */ + kAES_KeyBytes32 = 1, /*!< AES key size select: 32 bytes */ + kAES_KeyBytes24 = 2, /*!< AES key size select: 24 bytes */ +} aes_keysize_t; + +/*! + * @brief AES MIC size type definition + */ +typedef enum +{ + kAES_MicBytes0 = 0, /*!< AES MIC length: 0 bytes */ + kAES_MicBytes4 = 1, /*!< AES MIC length: 4 bytes */ + kAES_MicBytes8 = 2, /*!< AES MIC length: 8 bytes */ + kAES_MicBytes16 = 3, /*!< AES MIC length: 16 bytes */ +} aes_miclen_t; + +/*! + * @brief AES interrupt type definition + * @anchor aes_interrupts + */ +typedef enum +{ + kAES_InterruptOutputFIFOEmpty, /*!< AES output FIFO empty int flag */ + kAES_InterruptInputFIFOFull, /*!< AES input FIFO full int flag */ + kAES_InterruptDone, /*!< AES done int flag */ +} aes_interrupt_t; + +/*! + * @brief AES status type definition + * @anchor aes_status_flags + */ +enum +{ + kAES_OutputFIFOEmptyFlag = AES_STATUS_OF_EMPTY_MASK, /*!< AES output FIFO empty flag */ + kAES_InputFIFOFullFlag = AES_STATUS_IF_FULL_MASK, /*!< AES input FIFO full flag */ + kAES_OutputFIFOReadyFlag = AES_STATUS_OF_RDY_MASK, /*!< AES output FIFO can be read flag */ + kAES_DoneFlag = AES_STATUS_DONE_MASK, /*!< AES done flag */ + kAES_Error0Flag = AES_STATUS_STATUS(1U), /*!< Input stream size is less than 16 bytes in CBC&CTR mode */ + kAES_Error1Flag = AES_STATUS_STATUS(2U), /*!< Data is more than 2^13-1 bytes in MMO mode + Data is not multiple of 16 bytes in ECB mode*/ + kAES_Error2Flag = AES_STATUS_STATUS(4U), /*!< MIC mismatch during decryption in CCM* mode */ +}; + +/*! @brief AES lock function. */ +typedef status_t (*aes_lock_func_t)(void); + +/*! @brief AES lock function. */ +typedef void (*aes_unlock_func_t)(void); + +/******************************************************************************* + * API + *******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @name Initialization Interfaces + * @{ + */ + +/*! + * @brief Initializes AES module. + * + * Initialize the module, reset the module and set the registers to default status. + * + * @param base AES peripheral base address. + */ +void AES_Init(AES_Type *base); + +/*! + * @brief Deinitializes AES module. + * + * Deinitialize the module and reset the module. + * + * @param base AES peripheral base address. + */ +void AES_Deinit(AES_Type *base); + +/*! + * @brief Reset AES module. + * + * Reset the module. This function only resets the AES module internal status, + * but does not reset the register configurations. + * + * @param base AES peripheral base address. + */ +void AES_Reset(AES_Type *base); + +/* @} */ + +/*! + * @name Module configuration + * @{ + */ + +/*! + * @brief Set AES module work mode. + * + * @param base AES peripheral base address. + * @param mode AES work mode. + */ +static inline void AES_SetMode(AES_Type *base, aes_mode_t mode) +{ + base->CTRL1 = (base->CTRL1 & ~(AES_CTRL1_MODE_MASK | AES_CTRL1_DECRYPT_MASK)) | (uint32_t)mode; +} + +/*! + * @brief Set the AES input vector. + * + * @param base AES peripheral base address. + * @param inputVector Input vector. + */ +void AES_SetInputVector(AES_Type *base, const uint8_t inputVector[AES_VECTOR_SIZE]); + +/*! + * @brief Get the AES output vector. + * + * @param base AES peripheral base address. + * @param outputVector Array to save the output vector. + */ +void AES_GetOutputVector(AES_Type *base, uint8_t outputVector[AES_VECTOR_SIZE]); + +/*! + * @brief Set the input data length. + * + * @param base AES peripheral base address. + * @param msgLen Length of the input data in byte. + */ +static inline void AES_SetMsgLen(AES_Type *base, uint32_t msgLen) +{ + base->MSTR_LEN = msgLen; +} + +/*! + * @brief Set the additional authentication data length in CCM mode. + * + * @param base AES peripheral base address. + * @param len Length in byte. + */ +static inline void AES_SetAadLen(AES_Type *base, uint32_t len) +{ + base->ASTR_LEN = len; +} + +/*! + * @brief Set the CTR mode counter modular. + * + * @param base AES peripheral base address. + * @param modular The modular set to AES register. Valid range is 0~128. + * When pass in 0~15, the CTR counter modular is 2^128, when pass in other + * values, the CTR counter modular is 2^input value. + */ +static inline void AES_SetCTRCountModular(AES_Type *base, uint8_t modular) +{ + base->CTRL1 = (base->CTRL1 & ~AES_CTRL1_CTR_MOD_MASK) | AES_CTRL1_CTR_MOD(modular); +} + +/*! + * @brief Enable or disable the output stream to output FIFO. + * + * @param base AES peripheral base address. + * @param enable Use \b true to forward output stream to output FIFO, use \b false + * to block output stream from output FIFO. + */ +static inline void AES_EnableOutMsg(AES_Type *base, bool enable) +{ + if (enable) + { + base->CTRL1 |= AES_CTRL1_OUT_MSG_MASK; + } + else + { + base->CTRL1 &= ~AES_CTRL1_OUT_MSG_MASK; + } +} + +/*! + * @brief Enable or disable DMA. + * + * @param base AES peripheral base address. + * @param enable Use \b true to enable DMA, use \b false to disable DMA. + */ +static inline void AES_EnableDma(AES_Type *base, bool enable) +{ + if (enable) + { + base->CTRL1 |= AES_CTRL1_DMA_EN_MASK; + } + else + { + base->CTRL1 &= ~AES_CTRL1_DMA_EN_MASK; + } +} + +/*! + * @brief Append MIC/HASH output or not. + * + * When enabled in CCM mode decryption, the MIC is append at the end of output stream. + * When enabled in MMO mode, the HASH is append at the end of output stream. + * + * @param base AES peripheral base address. + * @param append Use \b true to append, otherwise use \b false. + */ +static inline void AES_AppendMIC(AES_Type *base, bool append) +{ + if (append) + { + base->CTRL1 |= AES_CTRL1_OUT_MIC_MASK; + } + else + { + base->CTRL1 &= ~AES_CTRL1_OUT_MIC_MASK; + } +} + +/*! + * @brief Set the MIC length in CCM mode. + * + * @param base AES peripheral base address. + * @param len MIC length. + */ +static inline void AES_SetMICLength(AES_Type *base, aes_miclen_t len) +{ + base->CTRL1 = (base->CTRL1 & ~AES_CTRL1_MIC_LEN_MASK) | AES_CTRL1_MIC_LEN(len); +} + +/*! + * @brief Read AES CCM MIC output value. + * + * @param base AES peripheral base address. + * @param micData The memory to save the MIC data. + * @param len Length of \p micData in word, the valid range is 1~4. + * @retval kStatus_InvalidArgument The required length is wrong. + * @retval kStatus_Success Get MIC successfully. + */ +status_t AES_ReadMIC(AES_Type *base, uint32_t *micData, uint8_t len); + +/*! + * @brief Clear AES input or output FIFO. + * + * @param base AES peripheral base address. + * @param fifo The FIFO to clear. + */ +void AES_ClearFIFO(AES_Type *base, aes_fifo_t fifo); + +/*! + * @brief Start the AES calculation. + * + * Start the calculation based on configurations. + * + * @param base AES peripheral base address. + */ +static inline void AES_Start(AES_Type *base) +{ + base->CTRL1 |= AES_CTRL1_START_MASK; +} + +/*! + * @brief Stop the AES calculation. + * + * Stop the calculation. + * + * @param base AES peripheral base address. + */ +static inline void AES_Stop(AES_Type *base) +{ + base->CTRL1 &= ~AES_CTRL1_START_MASK; +} + +/*! + * @brief Write data to AES input FIFO. + * + * @param base AES peripheral base address. + * @param data Data written to AES FIFO. + */ +static inline void AES_WriteData(AES_Type *base, uint32_t data) +{ + base->STR_IN = data; +} + +/*! + * @brief Read data from AES output FIFO. + * + * @param base AES peripheral base address. + */ +static inline uint32_t AES_ReadData(AES_Type *base) +{ + return base->STR_OUT; +} + +/* @} */ + +/*! + * @name Interrupt and status + * @{ + */ + +/*! + * @brief Get the AES status. + * + * @param base AES peripheral base address. + * @return AES status, logical OR'ed value of @ref aes_status_flags. + */ +static inline uint32_t AES_GetStatus(AES_Type *base) +{ + return base->STATUS; +} + +/*! + * @brief Enable AES interrupts. + * + * @param base AES peripheral base address. + * @param interrupts The interrupts to enable, logical OR'ed value of @ref aes_interrupts. + */ +static inline void AES_EnableInterrupts(AES_Type *base, uint32_t interrupts) +{ + base->IMR &= ~interrupts; +} + +/*! + * @brief Disable AES interrupts. + * + * @param base AES peripheral base address. + * @param interrupts The interrupts to disable, logical OR'ed value of @ref aes_interrupts. + */ +static inline void AES_DisableInterrupts(AES_Type *base, uint32_t interrupts) +{ + base->IMR |= interrupts; +} + +/*! + * @brief Get AES interrupt status. + * + * @param base AES peripheral base address. + * @return The interrupt pending status, logical OR'ed value of @ref aes_interrupts. + */ +static inline uint32_t AES_GetInterruptStatus(AES_Type *base) +{ + return base->ISR; +} + +/*! + * @brief Clear AES interrupt status. + * + * @param base AES peripheral base address. + * @param interrupts The interrupt pending status to clear, logical OR'ed value of @ref aes_interrupts. + */ +static inline void AES_ClearInterruptStatus(AES_Type *base, uint32_t interrupts) +{ + base->ICR = interrupts; +} + +/*! + * @brief Get AES raw interrupt status. + * + * This function is similar with @ref AES_GetInterruptStatus, the difference is + * the raw interrupt status is not affected by interrupt enable status. + * + * @param base AES peripheral base address. + * @return The raw interrupt pending status, logical OR'ed value of @ref aes_interrupts. + */ +static inline uint32_t AES_GetRawInterruptStatus(AES_Type *base) +{ + return base->IRSR; +} + +/* @} */ + +/*! + * @name High level interface + * @{ + */ + +/*! + * @brief Sets AES key. + * + * Sets AES key. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @return Status from Set Key operation + */ +status_t AES_SetKey(AES_Type *base, const uint8_t *key, size_t keySize); + +/*! + * @brief Encrypts AES using the ECB block mode. + * + * Encrypts AES using the ECB block mode. + * + * @param base AES peripheral base address + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @return Status from encrypt operation + */ +status_t AES_EncryptEcb(AES_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, size_t size); + +/*! + * @brief Decrypts AES using the ECB block mode. + * + * Decrypts AES using the ECB block mode. + * + * @param base AES peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @return Status from decrypt operation + */ +status_t AES_DecryptEcb(AES_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, size_t size); + +/*! + * @brief Encrypts AES using CBC block mode. + * + * @param base AES peripheral base address + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param[out] ov Output vector used for chained operation, could be NULL. + * @return Status from encrypt operation + */ +status_t AES_EncryptCbc(AES_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]); + +/*! + * @brief Decrypts AES using CBC block mode. + * + * @param base AES peripheral base address + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param[out] ov Output vector used for chained operation, could be NULL. + * @return Status from decrypt operation + */ +status_t AES_DecryptCbc(AES_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]); + +/*! + * @brief Encrypts or decrypts AES using CTR block mode. + * + * Encrypts or decrypts AES using CTR block mode. + * AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption. + * The only difference between encryption and decryption is that, for encryption, the input argument + * is plain text and the output argument is cipher text. For decryption, the input argument is cipher text + * and the output argument is plain text. + * + * For chained calls, the internal status are saved in the parameters: @p nonce, @p streamBlock, + * and @p offset. In this case, initialize @p nonce to the desired value, and initialize @p offset to 0 + * before the first call, in the following calls, the @p nonce, @p streamBlock, and @p offset should be + * preserved. + * + * @note The @p streamBlock contains sensitive data, discard it after used. + * + * @param base AES peripheral base address + * @param input Input data for CTR block mode + * @param[out] output Output data for CTR block mode + * @param size Size of input and output data in bytes + * @param[in,out] nonce and counter(updates on return) + * @param[out] streamBlock Saved block for chained CTR calls. NULL can be passed if chained calls are + * not used. + * @param[out] offset Offset in @p streamBlock. NULL can be passed if chained calls + * are not used. + * @return Status from crypt operation + */ +status_t AES_CryptCtr(AES_Type *base, + const uint8_t *input, + uint8_t *output, + size_t size, + uint8_t nonce[AES_BLOCK_SIZE], + uint8_t streamBlock[AES_BLOCK_SIZE], + size_t *offset); + +/*! + * @brief Encrypts AES and tags using CCM block mode. + * + * Encrypts AES and optionally tags using CCM block mode. + * + * @param base AES peripheral base address + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text. + * @param size Size of input and output data in bytes + * @param iv Input initial vector + * @param ivSize Size of the @p iv + * @param aad Input additional authentication data + * @param aadSize Input size in bytes of @p aad. + * @param[out] tag Output hash tag. Set to NULL to skip tag processing. + * @param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * @return Status from encrypt operation + */ +status_t AES_EncryptTagCcm(AES_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + uint8_t *tag, + size_t tagSize); + +/*! + * @brief Decrypts AES and authenticates using CCM block mode. + * + * Decrypts AES and optionally authenticates using CCM block mode. + * + * @param base AES peripheral base address + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text. + * @param size Size of input and output data in bytes + * @param iv Input initial vector + * @param ivSize Size of the @p iv + * @param aad Input additional authentication data + * @param aadSize Input size in bytes of @p aad + * @param tag Input hash tag to compare. Set to NULL to skip tag processing. + * @param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * @retval kStatus_Success Calculation successed. + * @retval kStatus_InvalidArgument Invalid argument. + * @retval kStatus_Fail Tag does not match. + */ +status_t AES_DecryptTagCcm(AES_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + const uint8_t *tag, + size_t tagSize); + +/*! + * @brief Calculate the input stream MMO HASH value. + * + * @param base AES peripheral base address + * @param input Input stream. + * @param size Length of the stream in bytes. + * @param[out] hash Hash value of the input stream. + * @return Status from HASH operation + */ +status_t AES_CalculateMMOHash(AES_Type *base, const uint8_t *input, size_t size, uint8_t hash[16]); + +/* @} */ + +/*! + * @name Function with lock + * + * AES module might be used by multiple sofware components, to make sure the + * on-going proess is not broken by the call from another components, lock is + * used to protect the operation. + * + * To use the lock, set the lock function with @ref AES_SetLockFunc, then when + * calling the APIs with suffix WithLock, the lock function will be called by + * AES driver. + * + * @{ + */ + +/*! + * @brief Set the lock functions. + * + * @param lockFunc Lock function. + * @param unlockFunc Unlock function. + */ +void AES_SetLockFunc(aes_lock_func_t lockFunc, aes_unlock_func_t unlockFunc); + +/*! + * @brief Encrypts AES using the ECB block mode. + * + * Encrypts AES using the ECB block mode. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @return Status from encrypt operation + */ +status_t AES_EncryptEcbWithLock( + AES_Type *base, const uint8_t *key, size_t keySize, const uint8_t *plaintext, uint8_t *ciphertext, size_t size); + +/*! + * @brief Decrypts AES using the ECB block mode. + * + * Decrypts AES using the ECB block mode. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @return Status from decrypt operation + */ +status_t AES_DecryptEcbWithLock( + AES_Type *base, const uint8_t *key, size_t keySize, const uint8_t *ciphertext, uint8_t *plaintext, size_t size); + +/*! + * @brief Encrypts AES using CBC block mode. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param[out] ov Output vector used for chained operation, could be NULL. + * @return Status from encrypt operation + */ +status_t AES_EncryptCbcWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]); + +/*! + * @brief Decrypts AES using CBC block mode. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param[out] ov Output vector used for chained operation, could be NULL. + * @return Status from decrypt operation + */ +status_t AES_DecryptCbcWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t iv[AES_VECTOR_SIZE], + uint8_t ov[AES_VECTOR_SIZE]); + +/*! + * @brief Encrypts or decrypts AES using CTR block mode. + * + * Encrypts or decrypts AES using CTR block mode. + * AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption. + * The only difference between encryption and decryption is that, for encryption, the input argument + * is plain text and the output argument is cipher text. For decryption, the input argument is cipher text + * and the output argument is plain text. + * + * For chained calls, the internal status are saved in the parameters: @p nonce, @p streamBlock, + * and @p offset. In this case, initialize @p nonce to the desired value, and initialize @p offset to 0 + * before the first call, in the following calls, the @p nonce, @p streamBlock, and @p offset should be + * preserved. + * + * @note The @p streamBlock contains sensitive data, discard it after used. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. + * @param input Input data for CTR block mode + * @param[out] output Output data for CTR block mode + * @param size Size of input and output data in bytes + * @param[in,out] nonce and counter(updates on return) + * @param[out] streamBlock Saved block for chained CTR calls. NULL can be passed if chained calls are + * not used. + * @param[out] offset Offset in @p streamBlock. NULL can be passed if chained calls + * are not used. + * @return Status from crypt operation + */ +status_t AES_CryptCtrWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *input, + uint8_t *output, + size_t size, + uint8_t nonce[AES_BLOCK_SIZE], + uint8_t streamBlock[AES_BLOCK_SIZE], + size_t *offset); + +/*! + * @brief Encrypts AES and tags using CCM block mode. + * + * Encrypts AES and optionally tags using CCM block mode. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text. + * @param size Size of input and output data in bytes + * @param iv Input initial vector + * @param ivSize Size of the @p iv + * @param aad Input additional authentication data + * @param aadSize Input size in bytes of @p aad. + * @param[out] tag Output hash tag. Set to NULL to skip tag processing. + * @param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * @return Status from encrypt operation + */ +status_t AES_EncryptTagCcmWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *plaintext, + uint8_t *ciphertext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + uint8_t *tag, + size_t tagSize); + +/*! + * @brief Decrypts AES and authenticates using CCM block mode. + * + * Decrypts AES and optionally authenticates using CCM block mode. + * + * @param base AES peripheral base address + * @param key Input key to use for encryption or decryption + * @param keySize Size of the input key, in bytes. + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text. + * @param size Size of input and output data in bytes + * @param iv Input initial vector + * @param ivSize Size of the @p iv + * @param aad Input additional authentication data + * @param aadSize Input size in bytes of @p aad + * @param tag Input hash tag to compare. Set to NULL to skip tag processing. + * @param tagSize Input size of the tag to generate, in bytes. Must be 0,4,8, or 16. + * @retval kStatus_Success Calculation successed. + * @retval kStatus_InvalidArgument Invalid argument. + * @retval kStatus_Fail Tag does not match. + */ +status_t AES_DecryptTagCcmWithLock(AES_Type *base, + const uint8_t *key, + size_t keySize, + const uint8_t *ciphertext, + uint8_t *plaintext, + size_t size, + const uint8_t *iv, + size_t ivSize, + const uint8_t *aad, + size_t aadSize, + const uint8_t *tag, + size_t tagSize); + +/*! + * @brief Calculate the input stream MMO HASH value. + * + * @param base AES peripheral base address + * @param input Input stream. + * @param size Length of the stream in bytes. + * @param[out] hash Hash value of the input stream. + * @return Status from HASH operation + */ +status_t AES_CalculateMMOHashWithLock(AES_Type *base, const uint8_t *input, size_t size, uint8_t hash[16]); + +/* @} */ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @}*/ /* end of group aes */ + +#endif /* _FSL_AES_H_ */ diff --git a/drivers/mw320/crc/driver_mw_crc.cmake b/drivers/mw320/crc/driver_mw_crc.cmake new file mode 100644 index 000000000..171b01502 --- /dev/null +++ b/drivers/mw320/crc/driver_mw_crc.cmake @@ -0,0 +1,14 @@ +#Description: MW_CRC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_crc component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_crc.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/crc/fsl_crc.c b/drivers/mw320/crc/fsl_crc.c new file mode 100644 index 000000000..a2c927883 --- /dev/null +++ b/drivers/mw320/crc/fsl_crc.c @@ -0,0 +1,111 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#include "fsl_crc.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.mw_crc" + +#endif +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*! + * brief Initializes CRC module. + * + * Call this function to initialize the CRC module. + * + * param base CRC peripheral base address + */ +void CRC_Init(CRC_Type *base) +{ + base->CTRL = 0U; + base->ICR = CRC_ICR_CLEAR_MASK; +} + +/*! + * brief Disable the interrupt and clear all the interrupts + * param base RTC peripheral base address + */ +void CRC_Deinit(CRC_Type *base) +{ + base->CTRL = 0x0; + base->ICR = CRC_ICR_CLEAR_MASK; +} + +/*! + * brief Calculate the CRC value for input data block. + * + * param base CRC peripheral base address. + * param dataStr input data stream. + * param dataLen data length in byte. + * return CRC calculation result. + */ +uint32_t CRC_Calculate(CRC_Type *base, const uint8_t *dataStr, uint32_t dataLen) +{ + uint32_t cnt; + + uint32_t divisor, tail; + + CRC_Enable(base, true); + + /* set data length */ + base->STREAM_LEN_M1 = dataLen - 1; + + /* Padding first and copy data in */ + divisor = dataLen / 4; + tail = dataLen % 4; + + switch (tail) + { + case 1: + base->STREAM_IN = (((uint32_t)dataStr[0]) << 24); + break; + + case 2: + base->STREAM_IN = ((((uint32_t)dataStr[0]) << 16) | (((uint32_t)dataStr[1]) << 24)); + break; + + case 3: + base->STREAM_IN = + ((((uint32_t)dataStr[0]) << 8) | (((uint32_t)dataStr[1]) << 16) | (((uint32_t)dataStr[2]) << 24)); + break; + + default: + break; + } + + /* compose last data from byte to word and copy data in */ + for (cnt = 0; cnt < divisor; cnt++) + { + base->STREAM_IN = + (((uint32_t)dataStr[4 * cnt + tail]) | (((uint32_t)dataStr[4 * cnt + tail + 1]) << 8) | + (((uint32_t)dataStr[4 * cnt + tail + 2]) << 16) | (((uint32_t)dataStr[4 * cnt + tail + 3]) << 24)); + } + /* wait for the result */ + while (base->IRSR == 0) + ; + + /* clear interrupt flag */ + CRC_ClearInterruptStatus(base); + + /* return the result */ + return base->RESULT; +} diff --git a/drivers/mw320/crc/fsl_crc.h b/drivers/mw320/crc/fsl_crc.h new file mode 100644 index 000000000..07e7efb1d --- /dev/null +++ b/drivers/mw320/crc/fsl_crc.h @@ -0,0 +1,227 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_CRC_H_ +#define _FSL_CRC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup crc + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_CRC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! @brief CRC mode type definition */ +typedef enum _crc_mode +{ + kCRC_16BitsCcitt = 0U, /*!< CRC mode: CRC-16-CCITT */ + kCRC_16BitsIbm = 1U, /*!< CRC mode: CRC-16-IBM */ + kCRC_16BitsT10Dif = 2U, /*!< CRC mode: CRC-16-T10-DIF */ + kCRC_32BitsIeee = 3U, /*!< CRC mode: CRC-32-IEEE */ + kCRC_16BitsDnp = 4U, /*!< CRC mode: CRC-16-DNP */ +} crc_mode_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization Interfaces + * @{ + */ + +/*! + * @brief Initializes CRC module. + * + * Call this function to initialize the CRC module. + * + * @param base CRC peripheral base address + */ +void CRC_Init(CRC_Type *base); + +/*! + * @brief Disable the interrupt and clear all the interrupts + * + * @param base CRC peripheral base address + */ +void CRC_Deinit(CRC_Type *base); + +/* @} */ + +/*! + * @name CRC Operation Interfaces + * @{ + */ + +/*! + * @brief Set CRC mode. + * + * @param base CRC peripheral base address. + * @param crcMode The CRC work mode to set. + */ +static inline void CRC_SetMode(CRC_Type *base, crc_mode_t crcMode) +{ + /* set CRC mode */ + base->CTRL = CRC_CTRL_MODE(crcMode); +} + +/*! + * @brief Enable the CRC module. + * + * This function enable/disables the CRC. + * + * @param base CRC peripheral base address. + * @param enable Use true to enable, false to disable. + */ +static inline void CRC_Enable(CRC_Type *base, bool enable) +{ + if (enable) + { + base->CTRL |= CRC_CTRL_ENABLE_MASK; + } + else + { + base->CTRL &= ~CRC_CTRL_ENABLE_MASK; + } +} + +/*! + * @brief Feed data in CRC stream. + * + * @param base CRC peripheral address. + * @param data input data. + */ +static inline void CRC_FeedData(CRC_Type *base, uint32_t data) +{ + /* feed data in CRC stream */ + base->STREAM_IN = data; +} + +/*! + * @brief Set CRC stream length. + * + * @param base CRC peripheral address. + * @param strLen stream length in byte. + */ +static inline void CRC_SetStreamLen(CRC_Type *base, uint32_t strLen) +{ + /* set CRC stream length */ + base->STREAM_LEN_M1 = strLen - 1; +} + +/*! + * @brief Get CRC result. + * + * @param base CRC peripheral base address. + * + * @return CRC calculation result. + */ +static inline uint32_t CRC_GetResult(CRC_Type *base) +{ + /* return CRC result value */ + return base->RESULT; +} + +/*! + * @brief Calculate the CRC value for input data block. + * + * @param base CRC peripheral base address. + * @param dataStr input data stream. + * @param dataLen data length in byte. + * + * @return CRC calculation result. + */ +uint32_t CRC_Calculate(CRC_Type *base, const uint8_t *dataStr, uint32_t dataLen); + +/* @} */ + +/*! + * @name Interrupt Control Interfaces + * @{ + */ + +/*! + * @brief Enable the CRC Interrupt. + * + * @param base CRC peripheral base address. + */ +static inline void CRC_EnableInterrupt(CRC_Type *base) +{ + base->IMR |= CRC_IMR_MASK_MASK; +} + +/*! + * @brief Disable the CRC Interrupt. + * + * @param base CRC peripheral base address. + */ +static inline void CRC_DisableInterrupt(CRC_Type *base) +{ + base->IMR &= ~CRC_IMR_MASK_MASK; +} + +/*! + * brief Clears interrupt flags. + * + * @param base CRC peripheral base address. + */ +static inline void CRC_ClearInterruptStatus(CRC_Type *base) +{ + base->ICR = CRC_ICR_CLEAR_MASK; +} + +/*! + * @brief Get base interrupt status. + * + * @param base CRC peripheral base address. + * + * @return true if interrupt flag is asserted, else false. + * + */ +static inline bool CRC_GetInterruptStatus(CRC_Type *base) +{ + return ((base->ISR & CRC_ISR_STATUS_MASK) != 0U); +} + +/*! + * @brief Get CRC raw interrupt status. + * + * This function is similar with @ref CRC_GetInterruptStatus, the only + * difference is, the raw interrupt status is not affected by interrupt + * enable status. + * + * @param base CRC peripheral base address. + * + * @return true if CRC status is asserted, else false. + */ +static inline bool CRC_GetRawInterruptStatus(CRC_Type *base) +{ + return ((base->IRSR & CRC_IRSR_STATUS_RAW_0_MASK) != 0U); +} + +/*! @} */ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @} */ + +#endif /* _FSL_CRC_H_ */ diff --git a/drivers/mw320/dac/driver_mw_dac.cmake b/drivers/mw320/dac/driver_mw_dac.cmake new file mode 100644 index 000000000..b0b13b0b9 --- /dev/null +++ b/drivers/mw320/dac/driver_mw_dac.cmake @@ -0,0 +1,14 @@ +#Description: MW_DAC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_dac component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_dac.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/dac/fsl_dac.c b/drivers/mw320/dac/fsl_dac.c new file mode 100644 index 000000000..2bdba3ccd --- /dev/null +++ b/drivers/mw320/dac/fsl_dac.c @@ -0,0 +1,211 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_dac.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.dac" +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +static uint32_t DAC_GetInstance(DAC_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +static DAC_Type *const s_dacBases[] = DAC_BASE_PTRS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! @brief Pointers to DAC clocks for each instance. */ +static const clock_ip_name_t s_dacClocks[] = DAC_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Code + ******************************************************************************/ +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! + * @brief Get the DAC peripheral instance + * + * @param base DAC peripheral base address. + * @return The instance of input DAC peripheral base address. + */ +static uint32_t DAC_GetInstance(DAC_Type *base) +{ + uint32_t instance; + uint32_t dacArrayCount = (sizeof(s_dacBases) / sizeof(s_dacBases[0])); + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < dacArrayCount; instance++) + { + if (s_dacBases[instance] == base) + { + break; + } + } + + assert(instance < dacArrayCount); + + return instance; +} +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/*! + * brief Initializes DAC module, including set reference voltage source, set conversion range, and set output voltage + * range. + * + * param base DAC peripheral base address. + * param config Pointer to the structure which in type of dac_config_t. + */ +void DAC_Init(DAC_Type *base, const dac_config_t *config) +{ + assert(config != NULL); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the DAC clock*/ + (void)CLOCK_EnableClock(s_dacClocks[DAC_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + + base->CLK |= DAC_CLK_SOFT_CLK_RST_MASK; + for (uint8_t i = 0U; i < 10U; i++) + { + __NOP(); + } + base->CLK &= ~DAC_CLK_SOFT_CLK_RST_MASK; + + base->CLK = (base->CLK & ~DAC_CLK_CLK_CTRL_MASK) | DAC_CLK_CLK_CTRL(config->conversionRate); + + base->CTRL = (base->CTRL & (~DAC_CTRL_REF_SEL_MASK)) | DAC_CTRL_REF_SEL(config->refSource); + + base->ACTRL = (base->ACTRL & (~DAC_ACTRL_A_RANGE_MASK)) | DAC_ACTRL_A_RANGE(config->rangeSelect); +} + +/*! + * brief Gets the default configurations of DAC module. + * + * code + * config->conversionRate = kDAC_ConversionRate62P5KHZ; + * config->refSource = kDAC_ReferenceInternalVoltageSource; + * config->rangeSelect = kDAC_RangeLarge; + * endcode + * + * param config Pointer to the structure which in the type of dac_config_t. + */ +void DAC_GetDefaultConfig(dac_config_t *config) +{ + assert(config != NULL); + + (void)memset(config, 0, sizeof(dac_config_t)); + + config->conversionRate = kDAC_ConversionRate62P5KHZ; + config->refSource = kDAC_ReferenceInternalVoltageSource; + config->rangeSelect = kDAC_RangeLarge; +} + +/*! + * brief De-initializes the DAC module, including reset clock divider, reset each channel, and so on. + * + * param base DAC peripheral base address. + */ +void DAC_Deinit(DAC_Type *base) +{ + /* Reset each channel. */ + DAC_ResetChannel(base, kDAC_ChannelA | kDAC_ChannelB); + + /* Reset Clock divider. */ + base->CLK |= DAC_CLK_SOFT_CLK_RST_MASK; + for (uint8_t i = 0U; i < 10U; i++) + { + __NOP(); + } + base->CLK &= ~DAC_CLK_SOFT_CLK_RST_MASK; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Gate the DAC clock*/ + (void)CLOCK_DisableClock(s_dacClocks[DAC_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ +} + +/*! + * brief Configures the DAC channels, including enable channel conversion, set wave type, set timing mode, and so on. + * + * param base DAC peripheral base address. + * param channelMask The mask of channel, can be the OR'ed value of dac_channel_id_t. + * param channelConfig The pointer of structure which in the type of dac_channel_config_t. + */ +void DAC_SetChannelConfig(DAC_Type *base, uint32_t channelMask, const dac_channel_config_t *channelConfig) +{ + assert(channelConfig != NULL); + + uint32_t tmp32 = 0UL; + + /* Resets DAC channel. */ + DAC_ResetChannel(base, channelMask); + + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + assert(IS_DAC_CHANNEL_A_WAVE(channelConfig->waveType)); + + tmp32 = base->ACTRL; + tmp32 &= + ~(DAC_ACTRL_A_EN_MASK | DAC_ACTRL_A_IO_EN_MASK | DAC_ACTRL_A_TRIG_EN_MASK | DAC_ACTRL_A_TRIG_SEL_MASK | + DAC_ACTRL_A_TRIG_TYP_MASK | DAC_ACTRL_A_DEN_MASK | DAC_ACTRL_A_TIME_MODE_MASK | DAC_ACTRL_A_WAVE_MASK); + + tmp32 |= DAC_ACTRL_A_EN(channelConfig->enableConversion) | DAC_ACTRL_A_IO_EN(channelConfig->outMode) | + DAC_ACTRL_A_TRIG_EN(channelConfig->enableTrigger) | + DAC_ACTRL_A_TRIG_SEL(channelConfig->triggerSource) | DAC_ACTRL_A_TRIG_TYP(channelConfig->triggerType) | + DAC_ACTRL_A_DEN(channelConfig->enableDMA) | DAC_ACTRL_A_TIME_MODE(channelConfig->timingMode) | + DAC_ACTRL_A_WAVE(channelConfig->waveType); + + base->ACTRL = tmp32; + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + assert(IS_DAC_CHANNEL_B_WAVE(channelConfig->waveType)); + + tmp32 = base->BCTRL; + tmp32 &= + ~(DAC_BCTRL_B_EN_MASK | DAC_BCTRL_B_IO_EN_MASK | DAC_BCTRL_B_TRIG_EN_MASK | DAC_BCTRL_B_TRIG_SEL_MASK | + DAC_BCTRL_B_TRIG_TYP_MASK | DAC_BCTRL_B_DEN_MASK | DAC_BCTRL_B_TIME_MODE_MASK | DAC_BCTRL_B_WAVE_MASK); + tmp32 |= DAC_BCTRL_B_EN(channelConfig->enableConversion) | DAC_BCTRL_B_IO_EN(channelConfig->outMode) | + DAC_BCTRL_B_TRIG_EN(channelConfig->enableTrigger) | + DAC_BCTRL_B_TRIG_SEL(channelConfig->triggerSource) | DAC_BCTRL_B_TRIG_TYP(channelConfig->triggerType) | + DAC_BCTRL_B_DEN(channelConfig->enableDMA) | DAC_BCTRL_B_TIME_MODE(channelConfig->timingMode) | + DAC_BCTRL_B_WAVE(channelConfig->waveType); + + base->BCTRL = tmp32; + } +} + +/*! + * brief Configures the options of triangle waveform. + * + * note This API should be invoked to set the options of triangle waveform when channel A's output wave type is + * selected as kDAC_WaveTriangle. + * + * param base DAC peripheral base address. + * param triangleConfig The pointer of structure which in the type of dac_triangle_config_t. + */ +void DAC_SetTriangleConfig(DAC_Type *base, const dac_triangle_config_t *triangleConfig) +{ + assert(triangleConfig != NULL); + + uint32_t tmp32; + + tmp32 = base->ACTRL; + tmp32 &= ~(DAC_ACTRL_A_TRIA_STEP_SEL_MASK | DAC_ACTRL_A_TRIA_MAMP_SEL_MASK | DAC_ACTRL_A_TRIA_HALF_MASK); + tmp32 |= DAC_ACTRL_A_TRIA_STEP_SEL(triangleConfig->triangleStepSize) | + DAC_ACTRL_A_TRIA_MAMP_SEL(triangleConfig->triangleMamp) | + DAC_ACTRL_A_TRIA_HALF(triangleConfig->triangleWaveform); + base->ACTRL = tmp32; + + base->ADATA = DAC_ADATA_A_DATA(triangleConfig->triangleBase); +} diff --git a/drivers/mw320/dac/fsl_dac.h b/drivers/mw320/dac/fsl_dac.h new file mode 100644 index 000000000..40a63714d --- /dev/null +++ b/drivers/mw320/dac/fsl_dac.h @@ -0,0 +1,679 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_DAC_H_ +#define _FSL_DAC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup dac + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief DAC driver version */ +#define FSL_DAC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */ + +/*! + * @brief DAC channel A wave mode check + */ +#define IS_DAC_CHANNEL_A_WAVE(CH_WAVE) ((CH_WAVE) <= kDAC_WaveNoiseDifferential) + +/*! + * @brief DAC channel B wave mode check + */ +#define IS_DAC_CHANNEL_B_WAVE(CH_WAVE) (((CH_WAVE) == kDAC_WaveNormal) || ((CH_WAVE) == kDAC_WaveNoiseDifferential)) + +/*! + * @brief The enumeration of interrupts that DAC support. + */ +enum _dac_interrupt_enable +{ + kDAC_ChannelAReadyInterruptEnable = DAC_IMR_A_RDY_INT_MSK_MASK, /*!< Enable channel A data ready interrupt. */ + kDAC_ChannelBReadyInterruptEnable = DAC_IMR_B_RDY_INT_MSK_MASK, /*!< Enable channel B data ready interrupt. */ + kDAC_ChannelATimeoutInterruptEnable = DAC_IMR_A_TO_INT_MSK_MASK, /*!< Enable channel A time out interrupt. */ + kDAC_ChannelBTimeoutInterruptEnable = DAC_IMR_B_TO_INT_MSK_MASK, /*!< Enable channel B time out interrupt. */ + kDAC_TriangleOverflowInterruptEnable = DAC_IMR_TRIA_OVFL_INT_MSK_MASK, /*!< Enable triangle overflow interrupt. */ +}; + +/*! + * @brief The enumeration of DAC status flags, including interrupt status flags, raw status flags, and conversion status + * flags. + * + * @note The interrupt status flags can only be asserted upon both enabling and happening of related interrupts. + * Comparatively, the raw status flags will be asserted as long as related events happen regardless of whether + * related interrupts are enabled or not. + * + * @note Only interrupt status flags can be cleared mannually. + */ +enum _dac_status_flags +{ + kDAC_ChannelADataReadyInterruptFlag = DAC_ISR_A_RDY_INT_MASK, /*!< Channel A data ready. */ + kDAC_ChannelBDataReadyInterruptFlag = DAC_ISR_B_RDY_INT_MASK, /*!< Channel B data ready. */ + kDAC_ChannelATimeoutInterruptFlag = DAC_ISR_A_TO_INT_MASK, /*!< Channel A time out. */ + kDAC_ChannelBTimeoutInterruptFlag = DAC_ISR_B_TO_INT_MASK, /*!< Channel B time out. */ + kDAC_TriangleOverflowInterruptFlag = DAC_ISR_TRIA_OVFL_INT_MASK, /*!< Triangle overflow. */ + kDAC_RawChannelADataReadyFlag = DAC_IRSR_A_RDY_INT_RAW_MASK << 5UL, /*!< Channel A data ready raw. */ + kDAC_RawChannelBDataReadyFlag = DAC_IRSR_B_RDY_INT_RAW_MASK << 5UL, /*!< Channel B data ready raw. */ + kDAC_RawChannelATimeoutFlag = DAC_IRSR_A_TO_INT_RAW_MASK << 5UL, /*!< Channel A timeout raw. */ + kDAC_RawChannelBTimeoutFlag = DAC_IRSR_B_TO_INT_RAW_MASK << 5UL, /*!< Channel B timeout raw. */ + kDAC_RawTriangleOverflowFlag = DAC_IRSR_TRIA_OVFL_INT_RAW_MASK << 5UL, /*!< Triangle overflow raw. */ + kDAC_ChannelAConversionCompleteFlag = DAC_STATUS_A_DV_MASK << 10UL, /*!< Channel A conversion complete. */ + kDAC_ChannelBConversionCompleteFlag = DAC_STATUS_B_DV_MASK << 10UL, /*!< Channel B conversion complete. */ +}; + +/*! + * @brief The enumeration of dac channels, including channel A and channel B. + */ +typedef enum _dac_channel_id +{ + kDAC_ChannelA = 1U << 0U, + kDAC_ChannelB = 1U << 1U, +} dac_channel_id_t; + +/*! + * @brief The enumeration of dac converion rate, including 62.5 KHz, 125 KHz, 250 KHz, and 500 KHz. + */ +typedef enum _dac_conversion_rate +{ + kDAC_ConversionRate62P5KHZ = 0U, /*!< DAC Conversion Rate selects as 62.5 KHz. */ + kDAC_ConversionRate125KHZ, /*!< DAC Conversion Rate selects as 125 KHz. */ + kDAC_ConversionRate250KHZ, /*!< DAC Conversion Rate selects as 250 KHz. */ + kDAC_ConversionRate500KHZ, /*!< DAC Conversion Rate selects as 500 KHz. */ +} dac_conversion_rate_t; + +/*! + * @brief The enumeration of dac reference voltage source. + */ +typedef enum _dac_reference_voltage_source +{ + kDAC_ReferenceInternalVoltageSource = 0U, /*!< Select internal voltage reference. */ + kDAC_ReferenceExternalVoltageSource, /*!< Select external voltage reference. */ +} dac_reference_voltage_source_t; + +/*! + * @brief The enumeration of dac output voltage range. + */ +typedef enum _dac_output_voltage_range +{ + kDAC_RangeSmall = 0U, /*!< DAC output small range. */ + kDAC_RangeMiddle = 1U, /*!< DAC output middle range. */ + kDAC_RangeLarge = 3U, /*!< DAC output large range. */ +} dac_output_voltage_range_t; + +/*! + * @brief The enumeration of dac channel's output mode. + */ +typedef enum _dac_channel_output +{ + kDAC_ChannelOutputInternal = 0U, /*!< Enable internal output but disable output to pad */ + kDAC_ChannelOutputPAD, /*!< Enable output to pad but disable internal output */ +} dac_channel_output_t; + +/*! + * @brief The enumeration of dac channel's trigger type, including rising edge trigger, falling edge trigger, and both + * edge triggers. + */ +typedef enum _dac_channel_trigger_type +{ + kDAC_RisingEdgeTrigger = 1U, /*!< Rising edge trigger. */ + kDAC_FallingEdgeTrigger = 2U, /*!< Failing edge trigger. */ + kDAC_BothEdgeTrigger = 3U /*!< Rising and Failing edge trigger. */ +} dac_channel_trigger_type_t; + +/*! + * @brief The enumeration of dac channel trigger source. + */ +typedef enum _dac_channel_trigger_source +{ + kDAC_GPT2Trigger = 0U, /*!< GPT2 trigger source */ + kDAC_GPT3Trigger = 1U, /*!< GPT3 trigger source */ + kDAC_GPIO45Trigger = 2U, /*!< GPIO45 trigger source */ + kDAC_GPIO44Trigger = 3U /*!< GPIO44 trigger source */ +} dac_channel_trigger_source_t; + +/*! + * @brief The enumeration of dac channel timing mode. + */ +typedef enum _dac_channel_timing_mode +{ + kDAC_NonTimingCorrelated = 0U, /*!< DAC non-timing-correlated mode. */ + kDAC_TimingCorrelated, /*!< DAC timing-correlated mode. */ +} dac_channel_timing_mode_t; + +/*! + * @brief The enumerator of channel output wave type, please note that not all wave types are effective to + * A and B channel. + */ +typedef enum _dac_channel_wave_type +{ + kDAC_WaveNormal = 0U, /*!< No predefined waveform, effective to A or B channel */ + kDAC_WaveTriangle = 1U, /*!< Triangle wave, effective only to A channel */ + kDAC_WaveSine = 2U, /*!< Sine wave, effective only to A channel */ + kDAC_WaveNoiseDifferential = 3U, /*!< Noise wave, effective only to A channel; + Differential mode, one's complemental code from A data, + effective only to B channel */ +} dac_channel_wave_type_t; + +/*! + * @brief DAC triangle maximum amplitude type + */ +typedef enum _dac_triangle_mamp +{ + kDAC_TriangleAmplitude63 = 0U, /*!< DAC triangle amplitude 63 lsb */ + kDAC_TriangleAmplitude127, /*!< DAC triangle amplitude 127 lsb */ + kDAC_TriangleAmplitude191, /*!< DAC triangle amplitude 191 lsb */ + kDAC_TriangleAmplitude255, /*!< DAC triangle amplitude 255 lsb */ + kDAC_TriangleAmplitude319, /*!< DAC triangle amplitude 319 lsb */ + kDAC_TriangleAmplitude383, /*!< DAC triangle amplitude 383 lsb */ + kDAC_TriangleAmplitude447, /*!< DAC triangle amplitude 447 lsb */ + kDAC_TriangleAmplitude511, /*!< DAC triangle amplitude 511 lsb */ + kDAC_TriangleAmplitude575, /*!< DAC triangle amplitude 575 lsb */ + kDAC_TriangleAmplitude639, /*!< DAC triangle amplitude 639 lsb */ + kDAC_TriangleAmplitude703, /*!< DAC triangle amplitude 703 lsb */ + kDAC_TriangleAmplitude767, /*!< DAC triangle amplitude 767 lsb */ + kDAC_TriangleAmplitude831, /*!< DAC triangle amplitude 831 lsb */ + kDAC_TriangleAmplitude895, /*!< DAC triangle amplitude 895 lsb */ + kDAC_TriangleAmplitude959, /*!< DAC triangle amplitude 959 lsb */ + kDAC_TriangleAmplitude1023 /*!< DAC triangle amplitude 1023 lsb */ +} dac_triangle_mamp_t; + +/*! + * @brief DAC triangle step size type + */ +typedef enum _dac_triangle_step_size +{ + kDAC_TriangleStepSize1 = 0U, /*!< DAC triangle step size 1 lsb */ + kDAC_TriangleStepSize3, /*!< DAC triangle step size 3 lsb */ + kDAC_TriangleStepSize15, /*!< DAC triangle step size 15 lsb */ + kDAC_TriangleStepSize511 /*!< DAC triangle step size 511 lsb */ +} dac_triangle_step_size_t; + +/*! + * @brief DAC triangle waveform type + */ +typedef enum _dac_triangle_waveform_type +{ + kDAC_TriangleFull = 0U, /*!< DAC full triangle waveform */ + kDAC_TriangleHalf, /*!< DAC half triangle waveform */ +} dac_triangle_waveform_type_t; + +/*! + * @brief The structure of dac module basic configuration, including conversion rate, output range, and reference + * voltage source. + */ +typedef struct _dac_config +{ + dac_conversion_rate_t conversionRate; /*!< Configure DAC conversion rate, + please refer to @ref dac_conversion_rate_t. */ + dac_reference_voltage_source_t refSource; /*!< Configure DAC vref source, + please refer to @ref dac_reference_voltage_source_t. */ + dac_output_voltage_range_t rangeSelect; /*!< Configure DAC channel output range, + please refer to @ref dac_output_voltage_range_t. */ +} dac_config_t; + +/*! + * @brief The structure of dac channel configuration, such as trigger type, wave type, timing mode, and so on. + * + */ +typedef struct _dac_channel_config +{ + bool enableConversion; /*!< Enable/Disable selected channel's conversion. + - \b true Enable selected channel's conversion. + - \b false Disable selected channel's conversion. */ + dac_channel_output_t outMode; /*!< Configure channel output mode, please refer to @ref dac_channel_output_t */ + + bool enableDMA; /*!< Enable/Disable channel DAM data transfer. + - \b true DMA data transfer enabled. + - \b false DMA data transfer disabled. */ + bool enableTrigger; /*!< Enable/Disable external event trigger. */ + dac_channel_trigger_type_t triggerType; /*!< Configure the channel trigger type, + please refer to @ref dac_channel_trigger_type_t. */ + dac_channel_trigger_source_t triggerSource; /*!< Configure DAC channel trigger source, + please refer to @ref dac_channel_trigger_source_t. */ + + dac_channel_timing_mode_t timingMode; /*!< Configure channel timing mode, + please refer to @ref dac_channel_timing_mode_t. */ + + dac_channel_wave_type_t waveType; /*!< Configure wave type for the selected channel, + please refer to @ref dac_channel_wave_type_t. */ +} dac_channel_config_t; + +/*! + * @brief The structure of triangle waveform, including maximum value, minimum value, step size, and so on. + */ +typedef struct _dac_triangle_config +{ + dac_triangle_mamp_t triangleMamp; /*!< Configure triangle maximum value. */ + dac_triangle_step_size_t triangleStepSize; /*!< Configure triangle step size. */ + dac_triangle_waveform_type_t triangleWaveform; /*!< Configure triangle waveform type. */ + uint32_t triangleBase; /*!< Configure triangle minimum value. */ +} dac_triangle_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Module Initialization Interfaces + * @{ + */ + +/*! + * @brief Initializes DAC module, including set reference voltage source, set conversion range, and set output voltage + * range. + * + * @param base DAC peripheral base address. + * @param config Pointer to the structure which in type of @ref dac_config_t. + */ +void DAC_Init(DAC_Type *base, const dac_config_t *config); + +/*! + * @brief Gets the default configurations of DAC module. + * + * @code + * config->conversionRate = kDAC_ConversionRate62P5KHZ; + * config->refSource = kDAC_ReferenceInternalVoltageSource; + * config->rangeSelect = kDAC_RangeLarge; + * @endcode + * + * @param config Pointer to the structure which in the type of @ref dac_config_t. + */ +void DAC_GetDefaultConfig(dac_config_t *config); + +/*! + * @brief De-initializes the DAC module, including reset clock divider, reset each channel, and so on. + * + * @param base DAC peripheral base address. + */ +void DAC_Deinit(DAC_Type *base); + +/* @} */ + +/*! + * @name Channels Control Interfaces + * @{ + */ + +/*! + * @brief Configures the DAC channels, including enable channel conversion, set wave type, set timing mode, and so on. + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t. + * @param channelConfig The pointer of structure which in the type of @ref dac_channel_config_t. + */ +void DAC_SetChannelConfig(DAC_Type *base, uint32_t channelMask, const dac_channel_config_t *channelConfig); + +/*! + * @brief Does software reset for the selected DAC channels. + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel to be reset, should be the OR'ed value of @ref dac_channel_id_t. + */ +static inline void DAC_ResetChannel(DAC_Type *base, uint32_t channelMask) +{ + base->RST = channelMask; + for (uint8_t i = 0U; i < 10U; i++) + { + __NOP(); + } + base->RST = 0UL; +} + +/*! + * @brief Enables/Disables selected channel conversion. + * + * @note To enable/disable the conversions of both channels, invoking this API with the parameter \b channelMask + * set as \b kDAC_ChannelA|kDAC_ChannelB . + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel to be reset, can be the OR'ed value of @ref dac_channel_id_t. + * @param enable Enable/Disable channel conversion. + * - \b true Enable selected channels' conversion. + * - \b false Disable selected channels' conversion. + */ +static inline void DAC_EnableChannelConversion(DAC_Type *base, uint32_t channelMask, bool enable) +{ + if (enable) + { + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL |= DAC_ACTRL_A_EN_MASK; + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL |= DAC_BCTRL_B_EN_MASK; + } + } + else + { + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL &= ~DAC_ACTRL_A_EN_MASK; + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL &= ~DAC_BCTRL_B_EN_MASK; + } + } +} + +/*! + * @brief Sets channels out mode, including kDAC_ChannelOutputInternal and kDAC_ChannelOutputPad. + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t. + * @param outMode The out mode of selected channels, please refer to @ref dac_channel_output_t for details. + */ +static inline void DAC_SetChannelOutMode(DAC_Type *base, uint32_t channelMask, dac_channel_output_t outMode) +{ + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL = (base->ACTRL & ~(DAC_ACTRL_A_IO_EN_MASK)) | DAC_ACTRL_A_IO_EN(outMode); + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL = (base->BCTRL & ~(DAC_BCTRL_B_IO_EN_MASK)) | DAC_BCTRL_B_IO_EN(outMode); + } +} + +/*! + * @brief Enables/Disables channels trigger mode. + * + * @note To enable/disable the trigger mode of both two channels, invoking this API with the parameter \b channelMask + * set as \b kDAC_ChannelA|kDAC_ChannelB . + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t. + * @param enable Enable/Disable channel trigger mode. + * - \b true Channels' conversion triggered by external event enabled. + * - \b false Channels' conversion trigged by external event disabled. + */ +static inline void DAC_EnableChannelTriggerMode(DAC_Type *base, uint32_t channelMask, bool enable) +{ + if (enable) + { + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL |= DAC_ACTRL_A_TRIG_EN_MASK; + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL |= DAC_BCTRL_B_TRIG_EN_MASK; + } + } + else + { + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL &= ~DAC_ACTRL_A_TRIG_EN_MASK; + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL &= ~DAC_BCTRL_B_TRIG_EN_MASK; + } + } +} + +/*! + * @brief Sets channels trigger source. + * + * @note To set the same trigger source to both two channels, invoking this API with the parameter \b channelMask + * set as \b kDAC_ChannelA|kDAC_ChannelB . + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t. + * @param trigSource The selected trigger source, please refer to @ref dac_channel_trigger_source_t for details. + */ +static inline void DAC_SetChannelTrigSource(DAC_Type *base, + uint32_t channelMask, + dac_channel_trigger_source_t trigSource) +{ + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL = (base->ACTRL & ~(DAC_ACTRL_A_TRIG_SEL_MASK)) | DAC_ACTRL_A_TRIG_SEL(trigSource); + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL = (base->BCTRL & ~(DAC_BCTRL_B_TRIG_SEL_MASK)) | DAC_BCTRL_B_TRIG_SEL(trigSource); + } +} + +/*! + * @brief Sets channels trigger type, such as rising edge trigger, falling edge trigger, or both edge trigger. + * + * @note To set the same trigger type to both two channels, invoking this API with the parameter \b channelMask + * set as \b kDAC_ChannelA|kDAC_ChannelB . + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t; + * @param trigType The selected trigger type, please refer to @ref dac_channel_trigger_type_t; + */ +static inline void DAC_SetChannelTrigType(DAC_Type *base, uint32_t channelMask, dac_channel_trigger_type_t trigType) +{ + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL = (base->ACTRL & ~(DAC_ACTRL_A_TRIG_TYP_MASK)) | DAC_ACTRL_A_TRIG_TYP(trigType); + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL = (base->BCTRL & ~(DAC_BCTRL_B_TRIG_TYP_MASK)) | DAC_BCTRL_B_TRIG_TYP(trigType); + } +} + +/*! + * @brief Sets channels timing mode, including not-timing related or timing related. + * + * @note To the same timing mode to both two channels, invoking this API with the parameter \b channelMask + * set as \b kDAC_ChannelA|kDAC_ChannelB . + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t. + * @param timingMode The selected timing mode, please refer to @ref dac_channel_timing_mode_t for details. + */ +static inline void DAC_SetChannelTimingMode(DAC_Type *base, uint32_t channelMask, dac_channel_timing_mode_t timingMode) +{ + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL = (base->ACTRL & ~(DAC_ACTRL_A_TIME_MODE_MASK)) | DAC_ACTRL_A_TIME_MODE(timingMode); + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL = (base->BCTRL & ~(DAC_BCTRL_B_TIME_MODE_MASK)) | DAC_BCTRL_B_TIME_MODE(timingMode); + } +} + +/*! + * @brief Enables/Disables channels DMA. + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t. + * @param enable Enable/Disable channel DMA data transfer. + * - \b true DMA data transfer enabled. + * - \b false DMA data transfer disabled. + */ +static inline void DAC_EnableChannelDMA(DAC_Type *base, uint32_t channelMask, bool enable) +{ + if (enable) + { + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL |= DAC_ACTRL_A_DEN_MASK; + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL |= DAC_BCTRL_B_DEN_MASK; + } + } + else + { + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ACTRL &= ~DAC_ACTRL_A_DEN_MASK; + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BCTRL &= ~DAC_BCTRL_B_DEN_MASK; + } + } +} + +/*! + * @brief Sets channels wave type, such as sine, noise, or triangle. + * + * @note To set the same wave type to both channel, invoking this API with the parameter \b channelMask + * set as \b kDAC_ChannelA|kDAC_ChannelB . + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, should be the OR'ed value of @ref dac_channel_id_t. + * @param waveType The wave type to set, please refer to @ref dac_channel_wave_type_t. + */ +static inline void DAC_SetChannelWaveType(DAC_Type *base, uint32_t channelMask, dac_channel_wave_type_t waveType) +{ + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + assert(IS_DAC_CHANNEL_A_WAVE(waveType)); + base->ACTRL = (base->ACTRL & ~(DAC_ACTRL_A_WAVE_MASK)) | DAC_ACTRL_A_WAVE(waveType); + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + assert(IS_DAC_CHANNEL_B_WAVE(waveType)); + base->BCTRL = (base->BCTRL & ~(DAC_BCTRL_B_WAVE_MASK)) | DAC_BCTRL_B_WAVE(waveType); + } +} + +/*! + * @brief Sets DAC channels data. + * + * @note To set the same data to both channel, invoking this API with the parameter \b channelMask + * set as \b kDAC_ChannelA|kDAC_ChannelB . + * + * @param base DAC peripheral base address. + * @param channelMask The mask of channel, can be the OR'ed value of @ref dac_channel_id_t. + * @param data + */ +static inline void DAC_SetChannelData(DAC_Type *base, uint32_t channelMask, uint16_t data) +{ + if ((channelMask & kDAC_ChannelA) == kDAC_ChannelA) + { + base->ADATA = DAC_ADATA_A_DATA(data); + } + + if ((channelMask & kDAC_ChannelB) == kDAC_ChannelB) + { + base->BDATA = DAC_BDATA_B_DATA(data); + } +} + +/*! @} */ + +/*! + * @name Triangle Waveform Configuration Interface + * @{ + */ + +/*! + * @brief Configures the options of triangle waveform. + * + * @note This API should be invoked to set the options of triangle waveform when channel A's output wave type is + * selected as @ref kDAC_WaveTriangle. + * + * @param base DAC peripheral base address. + * @param triangleConfig The pointer of structure which in the type of @ref dac_triangle_config_t. + */ +void DAC_SetTriangleConfig(DAC_Type *base, const dac_triangle_config_t *triangleConfig); + +/*! @} */ + +/*! + * @name Interrupts Control Interfaces. + * @{ + */ + +/*! + * @brief Enables interrupts, such as channel A data ready interupt, channel A timeout interrupt, and so on. + * + * @param base DAC peripheral base address. + * @param interruptMask The or'ed value of the interrupts to be enabled, please refer to @ref _dac_interrupt_enable. + */ +static inline void DAC_EnableInterrupts(DAC_Type *base, uint32_t interruptMask) +{ + base->IMR &= ~interruptMask; +} + +/*! + * @brief Disables interrupts, such as channel B data ready interrupt, channel B timeout interrupt, and so on. + * + * @param base DAC peripheral base address. + * @param interruptMask The or'ed value of the interrupts to be disabled, please refer to @ref _dac_interrupt_enable. + */ +static inline void DAC_DisableInterrupts(DAC_Type *base, uint32_t interruptMask) +{ + base->IMR |= interruptMask; +} + +/*! @} */ + +/*! + * @name Status Flags Control Interfaces + * @{ + */ + +/*! + * @brief Gets the status flags, including interrupt status flags, raw status flags, and conversion status flags. + * + * @param base DAC peripheral base address. + * @return The mask of status flags, please refer to @ref _dac_status_flags. + */ + +static inline uint32_t DAC_GetStatusFlags(DAC_Type *base) +{ + return ((base->ISR) | ((base->IRSR) << 5UL) | ((base->STATUS) << 10UL)); +} + +/*! + * @brief Clears the interrups status flags, such as channel A data ready interrupt flag, channel B data ready interrupt + * flag, and so on. + * + * @param base DAC peripheral base address. + * @param statusFlagsMask The mask of the status flags to be cleared, please refer to @ref _dac_status_flags. + */ +static inline void DAC_ClearStatusFlags(DAC_Type *base, uint32_t statusFlagsMask) +{ + assert(statusFlagsMask <= 0x1FUL); + + base->ICR = statusFlagsMask; +} + +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/*! @} */ + +#endif /* _FSL_DAC_H_ */ diff --git a/drivers/mw320/dmac/driver_mw_dmac.cmake b/drivers/mw320/dmac/driver_mw_dmac.cmake new file mode 100644 index 000000000..078fe2a2a --- /dev/null +++ b/drivers/mw320/dmac/driver_mw_dmac.cmake @@ -0,0 +1,14 @@ +#Description: MW_DMAC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_dmac component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_dmac.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/dmac/fsl_dmac.c b/drivers/mw320/dmac/fsl_dmac.c new file mode 100644 index 000000000..4866b5259 --- /dev/null +++ b/drivers/mw320/dmac/fsl_dmac.c @@ -0,0 +1,601 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_dmac.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.mw_dmac" +#endif + +/*! brief _dmac_transfer_status DMAC transfer status*/ +enum _dmac_transfer_status +{ + kDMAC_TransferStatusIdle, /*!< Channel is idle. */ + kDMAC_TransferStatusBusy, /*!< Channel is busy and can't handle the transfer request. */ +}; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! brief Array to map DMAC instance number to base pointer. */ +static DMAC_Type *const s_dmacBases[] = DMAC_BASE_PTRS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! brief Array to map DMAC instance number to clock name. */ +static const clock_ip_name_t s_dmacClockName[] = DMAC_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/*! brief Array to map DMAC instance number to IRQ number. */ +static const IRQn_Type s_dmacIRQNumber[] = DMAC_IRQS; + +/*! brief Pointers to transfer handle for each DMAC channel. */ +static dmac_handle_t *s_DMACHandle[FSL_FEATURE_MW_DMAC_MODULE_CHANNEL * FSL_FEATURE_SOC_MW_DMAC_COUNT]; + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*! + * brief Get the DMAC instance from peripheral base address. + * + * param base DMAC peripheral base address. + * return DMAC instance. + */ +static uint32_t DMAC_GetInstance(DMAC_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < ARRAY_SIZE(s_dmacBases); instance++) + { + if (s_dmacBases[instance] == base) + { + break; + } + } + + assert(instance < ARRAY_SIZE(s_dmacBases)); + + return instance; +} + +/*! + * brief Get default dmac configuration. + * + * note This function will reset all of the configuration structure members to zero firstly, + * then apply default configurations to the structure. + * + * param config pointer to user's DMAC configure structure, see dmac_config_t for detail. + */ +void DMAC_GetDefaultConfig(dmac_config_t *config) +{ + assert(config != NULL); + + (void)memset(config, 0, sizeof(dmac_config_t)); + + /*The value should be less than 1023, default value 12.*/ + config->m2pAckDelayCycle = 12U; + for (uint32_t i = 0U; i < (uint32_t)FSL_FEATURE_MW_DMAC_MODULE_CHANNEL; i++) + { + /*The default value is kDMAC_PeriphNum_None.*/ + config->peripheralNumber[i] = kDMAC_PeriphNum_None; + } +} + +/*! + * brief DMAC initialization + * + * param base DMAC peripheral base address. + * param Config pointer to user's DMAC configure structure, see dmac_transfer_config_t for detail. + */ +void DMAC_Init(DMAC_Type *base, dmac_config_t *config) +{ + assert(config != NULL); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate DMAC peripheral clock */ + CLOCK_EnableClock(s_dmacClockName[DMAC_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + + /* clear all the enabled request, status to make sure DMAC status is in normal condition */ + base->STATUS_TFRINT = 0xFFFFFFFFU; + base->STATUS_BLOCKINT = 0xFFFFFFFFU; + base->STATUS_BUSERRINT = 0xFFFFFFFFU; + base->STATUS_ADDRERRINT = 0xFFFFFFFFU; + + /* Configure DMAC peripheral according to the configuration structure. */ + DMAC_SetAckDelayCycle(base, config->m2pAckDelayCycle); + + /* channel transfer configuration */ + for (uint32_t i = 0U; i < (uint32_t)FSL_FEATURE_MW_DMAC_MODULE_CHANNEL; i++) + { + if (config->channelTransferConfig[i] != NULL) + { + DMAC_SetChannelTransferConfig(base, (dmac_channel_t)i, config->channelTransferConfig[i]); + } + if (config->peripheralNumber[i] != kDMAC_PeriphNum_None) + { + DMAC_SetPeripheralNumber(base, (dmac_channel_t)i, config->peripheralNumber[i]); + } + } +} + +/*! + * brief DMAC De-initialization + * + * param base DMAC peripheral base address. + */ +void DMAC_Deinit(DMAC_Type *base) +{ +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate DMAC peripheral clock */ + CLOCK_DisableClock(s_dmacClockName[DMAC_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ +} + +/*! + * brief Get channel default transfer configuration. + * + * param transfer pointer to user's DMAC channel configure structure, see dmac_channel_transfer_config_t for detail. + * param srcAddr source address, must be byte address. + * param destAddr destination address, must be byte address. + * param transferWidth the number of bits are transferred in each read/write. + * param burstLength burst transaction length. + * param transferTotalBytes transfer totalbytes 0~8191bytes maximum transfer length (8k-1) bytes. + * param transferType DMAC channel transfer type. + */ +void DMAC_GetChannelDefaultTransferConfig(dmac_channel_transfer_config_t *transfer, + void *srcAddr, + void *destAddr, + dmac_channel_transfer_width_t transferWidth, + dmac_channel_burst_length_t burstLength, + uint32_t transferTotalBytes, + dmac_channel_transfer_type_t transferType) +{ + assert(transfer != NULL); + assert(((transferTotalBytes % (uint32_t)transferWidth) == 0U)); + assert(((uint32_t)(uint32_t *)srcAddr & ((uint32_t)transferWidth - 1U)) == 0U); + assert(((uint32_t)(uint32_t *)destAddr & ((uint32_t)transferWidth - 1U)) == 0U); + + (void)memset(transfer, 0, sizeof(dmac_channel_transfer_config_t)); + + transfer->srcAddr = srcAddr; + transfer->destAddr = destAddr; + transfer->transferWidth = transferWidth; + transfer->burstLength = burstLength; + transfer->transferTotalBytes = transferTotalBytes; + transfer->transferType = transferType; + + /* default advance channel transfer configurations */ + if (transferType == kDMAC_ChannelTransferMemoryToMemory) + { + transfer->srcAddrIncrementType = kDMAC_ChannelAddressIncrement; + transfer->destAddrIncrementType = kDMAC_ChannelAddressIncrement; + } + else if (transferType == kDMAC_ChannelTransferPeripheralToMemory) + { + transfer->srcAddrIncrementType = kDMAC_ChannelAddressFix; + transfer->destAddrIncrementType = kDMAC_ChannelAddressIncrement; + } + else + { + transfer->srcAddrIncrementType = kDMAC_ChannelAddressIncrement; + transfer->destAddrIncrementType = kDMAC_ChannelAddressFix; + } +} + +/*! + * brief DMAC set channel transfer configurations + * + * param base DMAC peripheral base address. + * param channel DMAC channel number. + * param transfer pointer to user's DMAC channel configure structure, see dmac_channel_transfer_config_t for detail. + */ +void DMAC_SetChannelTransferConfig(DMAC_Type *base, dmac_channel_t channel, dmac_channel_transfer_config_t *transfer) +{ + assert(transfer != NULL); + assert(((transfer->transferTotalBytes % (uint32_t)transfer->transferWidth) == 0U)); + assert(((uint32_t)(uint32_t *)transfer->srcAddr & ((uint32_t)transfer->transferWidth - 1U)) == 0U); + assert(((uint32_t)(uint32_t *)transfer->destAddr & ((uint32_t)transfer->transferWidth - 1U)) == 0U); + + uint32_t ctrlA = base->CHANNEL[channel].CTRLA; + + base->CHANNEL[channel].SADR = (uint32_t)(uint32_t *)transfer->srcAddr; + + base->CHANNEL[channel].TADR = (uint32_t)(uint32_t *)transfer->destAddr; + + ctrlA &= ~DMAC_CTRLA_WIDTH_MASK; + ctrlA |= DMAC_CTRLA_WIDTH((transfer->transferWidth == kDMAC_ChannelTransferWidth32Bits) ? + ((uint32_t)transfer->transferWidth - 1U) : + (uint32_t)transfer->transferWidth); + + ctrlA &= ~DMAC_CTRLA_TRAN_SIZE_MASK; + ctrlA |= DMAC_CTRLA_TRAN_SIZE(transfer->burstLength); + + ctrlA &= ~DMAC_CTRLA_LEN_MASK; + ctrlA |= DMAC_CTRLA_LEN(transfer->transferTotalBytes); + + ctrlA &= ~DMAC_CTRLA_TRAN_TYPE_MASK; + ctrlA |= DMAC_CTRLA_TRAN_TYPE(transfer->transferType); + + ctrlA &= ~DMAC_CTRLA_INCSRCADDR_MASK; + ctrlA |= DMAC_CTRLA_INCSRCADDR(transfer->srcAddrIncrementType); + + ctrlA &= ~DMAC_CTRLA_INCTRGADDR_MASK; + ctrlA |= DMAC_CTRLA_INCTRGADDR(transfer->destAddrIncrementType); + + base->CHANNEL[channel].CTRLA = ctrlA; + + DMAC_EnableChannelInterrupts(base, channel, transfer->interruptMask); +} + +/*! + * brief DMAC ack delay cycle for single transfer in M2P transfer type.Only called when the transfer type is M2P. + * + * param base DMAC peripheral base address. + * param m2pAckDelayCycle for single write transaction to peripheral. The value should be less than 1023, default + * value 12. + */ +void DMAC_SetAckDelayCycle(DMAC_Type *base, uint32_t m2pAckDelayCycle) +{ + /* Config DMAC ACK Delay Cycle for single transfer */ + base->ACK_DELAY = DMAC_ACK_DELAY_ACK_DELAY_NUM(m2pAckDelayCycle); +} + +/*! + * brief DMAC set peripheral number. + * + * param base DMAC peripheral base address. + * param channel DMAC channel number. + * param peripheralNumber Indicates the valid peripheral request number, default value kDMAC_PeriphNum_None, + * see @ref dmac_peripheral_number_t for detail. + */ +void DMAC_SetPeripheralNumber(DMAC_Type *base, dmac_channel_t channel, dmac_peripheral_number_t peripheralNumber) +{ + base->CHANNEL[channel].CTRLB = + (base->CHANNEL[channel].CTRLB & (~DMAC_CTRLB_PERNUM_MASK)) | DMAC_CTRLB_PERNUM(peripheralNumber); +} + +/*! + * brief enables the dmac channel interrupts + * + * param base DMAC peripheral base address. + * param channel DMAC channel number. + * param interruptsMask the mask is a logical OR of enumerator members see _dmac_channel_interrupt_flag. + */ +void DMAC_EnableChannelInterrupts(DMAC_Type *base, dmac_channel_t channel, uint32_t interruptsMask) +{ + if (0U != (interruptsMask & (uint32_t)kDMAC_ChannelInterruptFlagBusError)) + { + base->MASK_BUSERRINT |= (1UL << channel); + } + else + { + base->MASK_BUSERRINT &= ~(1UL << channel); + } + + if (0U != (interruptsMask & (uint32_t)kDMAC_ChannelInterruptFlagAdressError)) + { + base->MASK_ADDRERRINT |= (1UL << channel); + } + else + { + base->MASK_ADDRERRINT &= ~(1UL << channel); + } + + if (0U != (interruptsMask & (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete)) + { + base->MASK_TFRINT |= (1UL << channel); + } + else + { + base->MASK_TFRINT &= ~(1UL << channel); + } + + if (0U != (interruptsMask & (uint32_t)kDMAC_ChannelInterruptBlockTransferComplete)) + { + base->MASK_BLOCKINT |= (1UL << channel); + } + else + { + base->MASK_BLOCKINT &= ~(1UL << channel); + } +} + +/*! + * brief disables the dmac channel interrupts + * + * param base DMAC peripheral base address. + * param channel DMAC channel number. + * param interruptsMask the mask is a logical OR of enumerator members see _dmac_channel_interrupt_flag. + */ +void DMAC_DisableChannelInterrupts(DMAC_Type *base, dmac_channel_t channel, uint32_t interruptsMask) +{ + if (interruptsMask == (uint32_t)kDMAC_ChannelInterruptFlagBusError) + { + base->MASK_BUSERRINT |= (1UL << channel); + } + + if (interruptsMask == (uint32_t)kDMAC_ChannelInterruptFlagAdressError) + { + base->MASK_ADDRERRINT |= (1UL << channel); + } + + if (interruptsMask == (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete) + { + base->MASK_TFRINT |= (1UL << channel); + } + + if (interruptsMask == (uint32_t)kDMAC_ChannelInterruptBlockTransferComplete) + { + base->MASK_BLOCKINT |= (1UL << channel); + } +} + +/*! + * brief Gets the DMAC channel status. + * + * param base DMAC peripheral base address. + * param channel DMAC channel number. + * retval The mask of channel status. Users need to use the + * _dmac_channel_interrupt_flag type to decode the return variables. + */ +uint32_t DMAC_GetChannelInterruptStatus(DMAC_Type *base, dmac_channel_t channel) +{ + uint32_t retval = 0U; + + /* Get ChannelTransferComplete bit flag */ + if (((base->STATUS_TFRINT >> channel) & 0x1U) != 0U) + { + retval |= (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete; + } + + /* Get ChannelBlockTransferComplete bit flag */ + if (((base->STATUS_BLOCKINT >> channel) & 0x1U) != 0U) + { + retval |= (uint32_t)kDMAC_ChannelInterruptBlockTransferComplete; + } + + /* Get ChannelBusError bit flag */ + if (((base->STATUS_BUSERRINT >> channel) & 0x1U) != 0U) + { + retval |= (uint32_t)kDMAC_ChannelInterruptFlagBusError; + } + + /* Get ChannelAddressError bit flag */ + if (((base->STATUS_ADDRERRINT >> channel) & 0x1U) != 0U) + { + retval |= (uint32_t)kDMAC_ChannelInterruptFlagAdressError; + } + + return retval; +} + +/*! + * brief Clears the DMAC channel status + * + * param base DMAC peripheral base address. + * param channel DMAC channel number. + * param status The mask of channel status to be cleared. Users need to use + * the defined _dmac_channel_interrupt_flag type. + */ +void DMAC_ClearChannelInterruptStatus(DMAC_Type *base, dmac_channel_t channel, uint32_t status) +{ + /* Clear ChannelTransferComplete bit flag */ + if (0U != (status & (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete)) + { + base->STATUS_TFRINT = (1UL << channel); + } + /* Clear ChannelBlockTransferComplete bit flag */ + if (0U != (status & (uint32_t)kDMAC_ChannelInterruptBlockTransferComplete)) + { + base->STATUS_BLOCKINT = (1UL << channel); + } + /* Clear ChannelBusError bit flag */ + if (0U != (status & (uint32_t)kDMAC_ChannelInterruptFlagBusError)) + { + base->STATUS_BUSERRINT = (1UL << channel); + } + /* Clear ChannelAddressError bit flag */ + if (0U != (status & (uint32_t)kDMAC_ChannelInterruptFlagAdressError)) + { + base->STATUS_ADDRERRINT = (1UL << channel); + } +} + +/*! + * brief Creates the DMAC channel handle. + * + * This function is called if using the transactional API for DMAC. This function + * initializes the internal state of the DMAC handle. + * + * param base DMAC peripheral base address. + * param handle DMAC handle pointer. The DMAC handle stores Callback function and + * parameters. + * param channel DMAC channel number. + * + */ +void DMAC_TransferCreateHandle(DMAC_Type *base, dmac_handle_t *handle, dmac_channel_t channel) +{ + assert(handle != NULL); + + uint32_t dmacInstance = 0U; + + /* Zero the handle */ + (void)memset(handle, 0, sizeof(dmac_handle_t)); + + handle->base = base; + handle->channel = channel; + + /* Get the DMAC instance number */ + handle->state = (uint32_t)kDMAC_TransferStatusIdle; + dmacInstance = DMAC_GetInstance(base); + s_DMACHandle[channel] = handle; + + /* Enable interrupt */ + (void)EnableIRQ(s_dmacIRQNumber[dmacInstance]); +} + +/*! + * brief Sets the DMAC Callback function. + * + * This callback is called in the DMAC IRQ handler. Use the callback to do something + * after the current transfer complete. + * + * param handle DMAC handle pointer. + * param callback DMAC callback function pointer. + * param userData Parameter for callback function. If it is not needed, just set to NULL. + */ +void DMAC_TransferSetCallback(dmac_handle_t *handle, dmac_transfer_callback_t callback, void *userData) +{ + assert(handle != NULL); + + handle->callback = callback; + handle->userData = userData; +} + +/*! + * @brief Submits the DMAC transfer configurations. + * + * @param handle DMAC handle pointer + * @param transfer pointer to user's DMAC channel configure structure, see _dmac_channel_interrupt_flag for detail + * + * @retval #kStatus_Success It means submit transfer request succeed + * @retval #kStatus_Fail It means submit transfer request failed + */ +status_t DMAC_TransferSubmit(dmac_handle_t *handle, dmac_channel_transfer_config_t *transfer) +{ + assert(handle != NULL); + assert(transfer != NULL); + + if (handle->state == (uint32_t)kDMAC_TransferStatusBusy) + { + return kStatus_Fail; + } + DMAC_SetChannelTransferConfig(handle->base, handle->channel, transfer); + handle->state = kDMAC_TransferStatusBusy; + + return kStatus_Success; +} + +/*! + * brief DMAC starts transfer. + * + * This function enables the channel request. Users can call this function after submitting the transfer request + * or before submitting the transfer request. + * + * param handle DMAC handle pointer. + */ +void DMAC_TransferStart(dmac_handle_t *handle) +{ + assert(handle != NULL); + + DMAC_StartChannel(handle->base, handle->channel); +} + +/*! + * brief DMAC stops transfer. + * + * This function disables the channel request to pause the transfer. Users can call DMAC_StartTransfer() + * again to resume the transfer. + * + * param handle DMAC handle pointer. + */ +void DMAC_TransferStop(dmac_handle_t *handle) +{ + assert(handle != NULL); + + DMAC_StopChannel(handle->base, handle->channel); + handle->state = (uint32_t)kDMAC_TransferStatusIdle; +} + +/*! + * brief DMAC IRQ handler for the transfer completion. + * + * param base DMAC peripheral base address. + */ +void DMAC_TransferHandleIRQ(DMAC_Type *base) +{ + dmac_handle_t *handle; + uint32_t startChannel = 0U; + uint32_t intStatusTfr, intStatusBlock, intStatusBusErr, intStatusAddrErr; + + /* Get current unmasked interrupt status */ + intStatusTfr = base->STATUS_TFRINT; + intStatusBlock = base->STATUS_BLOCKINT; + intStatusBusErr = base->STATUS_BUSERRINT; + intStatusAddrErr = base->STATUS_ADDRERRINT; + + /* Clear the unmasked generated interrupts */ + base->STATUS_TFRINT |= intStatusTfr; + base->STATUS_BLOCKINT |= intStatusBlock; + base->STATUS_BUSERRINT |= intStatusBusErr; + base->STATUS_ADDRERRINT |= intStatusAddrErr; + + /* Find channels that have completed transfer */ + for (uint32_t i = 0U; i < (uint32_t)FSL_FEATURE_MW_DMAC_MODULE_CHANNEL; i++) + { + handle = s_DMACHandle[i + startChannel]; + /* Handle is not present */ + if (NULL == handle) + { + continue; + } + + if (((intStatusTfr & (0x01UL << i)) != 0U) && ((base->MASK_TFRINT & (0x01UL << i)) != 0U)) + { + if (NULL != handle->callback) + { + handle->state = (uint32_t)kDMAC_TransferStatusIdle; + (handle->callback)(handle, handle->userData, kDMAC_ChannelInterruptFlagTransferComplete); + } + } + + if (((intStatusBlock & (0x01UL << i)) != 0U) && ((base->MASK_BLOCKINT & (0x01UL << i)) != 0U)) + { + if (NULL != handle->callback) + { + (handle->callback)(handle, handle->userData, kDMAC_ChannelInterruptBlockTransferComplete); + } + } + + if ((intStatusBusErr & (0x01UL << i)) != 0U) + { + if (NULL != handle->callback) + { + (handle->callback)(handle, handle->userData, kDMAC_ChannelInterruptFlagBusError); + } + } + + if ((intStatusAddrErr & (0x01UL << i)) != 0U) + { + if (NULL != handle->callback) + { + (handle->callback)(handle, handle->userData, kDMAC_ChannelInterruptFlagAdressError); + } + } + } +} +#if defined DMAC +void DMAC_DriverIRQHandler(void); +void DMAC_DriverIRQHandler(void) +{ + DMAC_TransferHandleIRQ(DMAC); + + SDK_ISR_EXIT_BARRIER; +} +#endif diff --git a/drivers/mw320/dmac/fsl_dmac.h b/drivers/mw320/dmac/fsl_dmac.h new file mode 100644 index 000000000..3a14334e9 --- /dev/null +++ b/drivers/mw320/dmac/fsl_dmac.h @@ -0,0 +1,428 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_DMAC_H_ +#define _FSL_DMAC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup dmac + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief DMAC transfer type */ +typedef enum _dmac_channel_transfer_type +{ + kDMAC_ChannelTransferMemoryToMemory = 0x0U, /*!< Transfer type from memory to memory assume that the both source and + destination address are incremental */ + kDMAC_ChannelTransferPeripheralToMemory, /*!< Transfer type peripher to memory assume that the source address is + fixed */ + kDMAC_ChannelTransferMemoryToPeripheral, /*!< Transfer type from memory to peripheral assume that the destination + address is fixed */ +} dmac_channel_transfer_type_t; + +/*! @brief DMAC interrupt source + * @anchor _dmac_channel_interrupt_flag + */ +enum _dmac_channel_interrupt_flag +{ + kDMAC_ChannelInterruptFlagTransferComplete = 1U, /*!< Dmac transfer complete interrupt */ + kDMAC_ChannelInterruptBlockTransferComplete = 2U, /*!< Block transfer complete interrupt */ + kDMAC_ChannelInterruptFlagBusError = 4U, /*!< Bus Error interrupt */ + kDMAC_ChannelInterruptFlagAdressError = 8U, /*!< Address Error interrupt */ +}; + +/*!@brief dmac channel index */ +typedef enum _dmac_channel +{ + kDMAC_Channel0 = 0U, /*!< channel 0 define, priority level 0, the highest priority */ + kDMAC_Channel1 = 1U, /*!< channel 1 define, priority level 0, the highest priority */ + kDMAC_Channel2 = 2U, /*!< channel 2 define, priority level 0, the highest priority */ + kDMAC_Channel3 = 3U, /*!< channel 3 define, priority level 0, the highest priority */ + kDMAC_Channel4 = 4U, /*!< channel 4 define, priority level 1 */ + kDMAC_Channel5 = 5U, /*!< channel 5 define, priority level 1 */ + kDMAC_Channel6 = 6U, /*!< channel 6 define, priority level 1 */ + kDMAC_Channel7 = 7U, /*!< channel 7 define, priority level 1 */ + kDMAC_Channel8 = 8U, /*!< channel 8 define, priority level 2 */ + kDMAC_Channel9 = 9U, /*!< channel 9 define, priority level 2 */ + kDMAC_Channel10 = 10U, /*!< channel 10 define, priority level 2 */ + kDMAC_Channel11 = 11U, /*!< channel 11 define, priority level 2 */ + kDMAC_Channel12 = 12U, /*!< channel 12 define, priority level 3, the lowest priority */ + kDMAC_Channel13 = 13U, /*!< channel 13 define, priority level 3, the lowest priority */ + kDMAC_Channel14 = 14U, /*!< channel 14 define, priority level 3, the lowest priority */ + kDMAC_Channel15 = 15U, /*!< channel 15 define, priority level 3, the lowest priority */ + kDMAC_Channel16 = 16U, /*!< channel 16 define, priority level 0, the highest priority */ + kDMAC_Channel17 = 17U, /*!< channel 17 define, priority level 0, the highest priority */ + kDMAC_Channel18 = 18U, /*!< channel 18 define, priority level 0, the highest priority */ + kDMAC_Channel19 = 19U, /*!< channel 19 define, priority level 0, the highest priority */ + kDMAC_Channel20 = 20U, /*!< channel 20 define, priority level 1 */ + kDMAC_Channel21 = 21U, /*!< channel 21 define, priority level 1 */ + kDMAC_Channel22 = 22U, /*!< channel 22 define, priority level 1 */ + kDMAC_Channel23 = 23U, /*!< channel 23 define, priority level 1 */ + kDMAC_Channel24 = 24U, /*!< channel 24 define, priority level 2 */ + kDMAC_Channel25 = 25U, /*!< channel 25 define, priority level 2 */ + kDMAC_Channel26 = 26U, /*!< channel 26 define, priority level 2 */ + kDMAC_Channel27 = 27U, /*!< channel 27 define, priority level 2 */ + kDMAC_Channel28 = 28U, /*!< channel 28 define, priority level 3, the lowest priority */ + kDMAC_Channel29 = 29U, /*!< channel 29 define, priority level 3, the lowest priority */ + kDMAC_Channel30 = 30U, /*!< channel 30 define, priority level 3, the lowest priority */ + kDMAC_Channel31 = 31U, /*!< channel 31 define, priority level 3, the lowest priority */ +} dmac_channel_t; + +/*! @brief DMAC transfer address increment definition */ +typedef enum _dmac_channel_address_increment_type +{ + kDMAC_ChannelAddressFix = 0U, /*!< Address Fix */ + kDMAC_ChannelAddressIncrement, /*!< Address increment */ +} dmac_channel_address_increment_type_t; + +/*! @brief DMAC transfer width configuration */ +typedef enum _dmac_channel_transfer_width +{ + kDMAC_ChannelTransferWidth8Bits = 1U, /*!< Source/Destination data transfer width is 1 byte every time */ + kDMAC_ChannelTransferWidth16Bits = 2U, /*!< Source/Destination data transfer width is 2 bytes every time */ + kDMAC_ChannelTransferWidth32Bits = 4U, /*!< Source/Destination data transfer width is 4 bytes every time */ +} dmac_channel_transfer_width_t; + +/*! @brief DMAC transfer burst length definition */ +typedef enum _dmac_channel_burst_length +{ + kDMAC_ChannelBurstLength1DataWidth = 0U, /*!< Maximum burst transaction length 1 data width */ + kDMAC_ChannelBurstLength4DataWidth, /*!< Maximum burst transaction length 4 data width */ + kDMAC_ChannelBurstLength8DataWidth, /*!< Maximum burst transaction length 8 data width */ + kDMAC_ChannelBurstLength16DataWidth, /*!< Maximum burst transaction length 16 data width */ +} dmac_channel_burst_length_t; + +/*! @brief dmac channel transfer configuration + * + * The transfer configuration structure support full feature configuration of the transfer control descriptor. + * + */ +typedef struct _dmac_channel_transfer_config +{ + void *srcAddr; /*!< source address */ + void *destAddr; /*!< destination address */ + + dmac_channel_address_increment_type_t srcAddrIncrementType; /*!< Source address increment + kDMAC_ChannelAddressFix: No change + kDMAC_ChannelAddressIncrement: Increment */ + dmac_channel_address_increment_type_t destAddrIncrementType; /*!< Destination address increment + kDMAC_ChannelAddressFix: No change + kDMAC_ChannelAddressIncrement: Increment */ + + dmac_channel_transfer_type_t transferType; /*!< Transfer type and flow control + kDMAC_ChannelTransferMemoryToMemory: Memory to Memory + kDMAC_ChannelTransferPeripheralToMemory: Memory to peripheral + kDMAC_ChannelTransferMemoryToPeripheral: Peripheral to memory */ + + dmac_channel_burst_length_t burstLength; /*!< Burst transaction length + kDMAC_ChannelBurstLength1DataWidth: 1 Data Width + kDMAC_ChannelBurstLength4DataWidth: 4 Data Width + kDMAC_ChannelBurstLength8DataWidth: 8 Data Width + kDMAC_ChannelBurstLength16DataWidth: 16 Data Width */ + + dmac_channel_transfer_width_t transferWidth; /*!< Transfer width + kDMAC_ChannelTransferWidth8Bits: 8 bits + kDMAC_ChannelTransferWidth16Bits: 16 bits + kDMAC_ChannelTransferWidth32Bits: 32 bits*/ + + uint32_t transferTotalBytes; /*!< Transfer totalbytes + 0~8191bytes + maximum transfer length (8k-1) bytes*/ + + uint32_t interruptMask; /*!< Interrupt Mask */ +} dmac_channel_transfer_config_t; + +/*! @brief dmac configuration structure */ +typedef struct _dmac_config +{ + uint32_t m2pAckDelayCycle; /*!< m2pAckDelayCycle for single write transaction to peripheral. The value should be + less than 1023, default value 12. */ + + dmac_channel_transfer_config_t + *channelTransferConfig[FSL_FEATURE_MW_DMAC_MODULE_CHANNEL]; /*!< channel transfer configuration pointer */ + + dmac_peripheral_number_t peripheralNumber[FSL_FEATURE_MW_DMAC_MODULE_CHANNEL]; /*!< Peripheral Number + Indicates the valid peripheral request number.The default value kDMAC_PeriphNum_None. */ +} dmac_config_t; + +/*! @brief handler for DMAC */ +typedef struct _dmac_handle dmac_handle_t; + +/*! @brief Define Callback function for DMAC + * + * @param handle DMAC handle pointer, users shall not touch the values inside. + * @param userData The callback user parameter pointer. Users can use this parameter to involve things users need to + * change in DMAC Callback function. + * @param status The mask of channel status . Users need to use the _dmac_channel_interrupt_status type. + * If the current loaded transfer done. In normal mode it means if all transfer done. In + * scatter gather mode, this parameter shows is the current transfer block in DMAC register is done. + */ +typedef void (*dmac_transfer_callback_t)(dmac_handle_t *handle, void *userData, uint32_t status); + +/*! @brief DMAC transfer handle structure */ +struct _dmac_handle +{ + volatile uint32_t state; /*!< channel transfer state */ + dmac_transfer_callback_t callback; /*!< callback function */ + void *userData; /*!< Callback function parameter. */ + DMAC_Type *base; /*!< DMAC peripheral base address. */ + dmac_channel_t channel; /*!< DMAC channel number. */ +}; + +/******************************************************************************* + * APIs + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @name DMAC Initialization and De-initialization interfaces + * @{ + */ + +/*! + * @brief Get default dmac configuration. + * + * @note This function will reset all of the configuration structure members to zero firstly, + * then apply default configurations to the structure. + * + * @param config pointer to user's DMAC configure structure, see @ref dmac_config_t for detail. + */ +void DMAC_GetDefaultConfig(dmac_config_t *config); + +/*! + * @brief DMAC initialization + * + * @param base DMAC peripheral base address. + * @param config pointer to user's DMAC config structure, see @ref dmac_config_t for detail. + */ +void DMAC_Init(DMAC_Type *base, dmac_config_t *config); + +/*! + * @brief DMAC De-initialization + * + * @param base DMAC peripheral base address. + */ +void DMAC_Deinit(DMAC_Type *base); + +/*! @} */ + +/*! + * @name DMAC channel functional interfaces + * @{ + */ + +/*! + * @brief Get channel default transfer configuration. + * + * @param transfer pointer to user's DMAC channel configure structure, see @ref dmac_channel_transfer_config_t for + * detail. + * @param srcAddr source address, must be byte address. + * @param destAddr destination address, must be byte address. + * @param transferWidth the number of bits are transferred in each read/write. + * @param burstLength burst transaction length. + * @param transferTotalBytes transfer totalbytes 0~8191bytes maximum transfer length (8k-1) bytes. + * @param transferType DMAC channel transfer type. + */ +void DMAC_GetChannelDefaultTransferConfig(dmac_channel_transfer_config_t *transfer, + void *srcAddr, + void *destAddr, + dmac_channel_transfer_width_t transferWidth, + dmac_channel_burst_length_t burstLength, + uint32_t transferTotalBytes, + dmac_channel_transfer_type_t transferType); + +/*! + * @brief DMAC set channel transfer configurations + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + * @param transfer pointer to user's DMAC channel configure structure,see @ref dmac_channel_transfer_config_t for + * detail. + */ +void DMAC_SetChannelTransferConfig(DMAC_Type *base, dmac_channel_t channel, dmac_channel_transfer_config_t *transfer); + +/*! + * @brief start the dmac channel + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + */ +static inline void DMAC_StartChannel(DMAC_Type *base, dmac_channel_t channel) +{ + base->CHANNEL[channel].CHL_EN |= DMAC_CHL_EN_CHL_EN(1U); +} + +/*! + * @brief stop the dmac channel + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + */ +static inline void DMAC_StopChannel(DMAC_Type *base, dmac_channel_t channel) +{ + base->CHANNEL[channel].CHL_STOP |= DMAC_CHL_STOP_CHL_STOP(1U); +} + +/*! + * @brief DMAC ack delay cycle for single transfer in M2P transfer type.Only called when the transfer type is M2P. + * + * @param base DMAC peripheral base address. + * @param m2pAckDelayCycle for single write transaction to peripheral. The value should be less than 1023, default + * value 12. + */ +void DMAC_SetAckDelayCycle(DMAC_Type *base, uint32_t m2pAckDelayCycle); + +/*! + * @brief DMAC set peripheral number. + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + * @param peripheralNumber Indicates the valid peripheral request number, default value kDMAC_PeriphNum_None, + * see dmac_peripheral_number_t for detail. + */ +void DMAC_SetPeripheralNumber(DMAC_Type *base, dmac_channel_t channel, dmac_peripheral_number_t peripheralNumber); + +/*! @} */ + +/*! + * @name DMAC channel interrupt Interfaces + * @{ + */ +/*! + * @brief enables the dmac channel interrupts + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + * @param interruptsMask the mask is a logical OR of enumerator members see @ref _dmac_channel_interrupt_flag. + */ +void DMAC_EnableChannelInterrupts(DMAC_Type *base, dmac_channel_t channel, uint32_t interruptsMask); + +/*! + * @brief disables the dmac channel interrupts + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + * @param interruptsMask the mask is a logical OR of enumerator members see @ref _dmac_channel_interrupt_flag. + */ +void DMAC_DisableChannelInterrupts(DMAC_Type *base, dmac_channel_t channel, uint32_t interruptsMask); + +/*! @} */ + +/*! + * @name DMAC channel Status Interfaces + * @{ + */ + +/*! + * @brief Gets the DMAC channel status. + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + * @retval The mask of channel status. Users need to use the @ref + * _dmac_channel_interrupt_flag type to decode the return variables. + */ +uint32_t DMAC_GetChannelInterruptStatus(DMAC_Type *base, dmac_channel_t channel); + +/*! + * @brief Clears the DMAC channel status. + * + * @param base DMAC peripheral base address. + * @param channel DMAC channel number. + * @param status The mask of channel status to be cleared. Users need to use + * the defined @ref _dmac_channel_interrupt_flag type. + */ +void DMAC_ClearChannelInterruptStatus(DMAC_Type *base, dmac_channel_t channel, uint32_t status); + +/*! @} */ + +/*! + * @name DMAC Transactional Interfaces + * @{ + */ + +/*! + * @brief Creates the DMAC channel handle. + * + * This function is called if using the transactional API for DMAC. This function + * initializes the internal state of the DMAC handle. + * + * @param base DMAC peripheral base address. + * @param handle DMAC handle pointer. The DMAC handle stores Callback function and + * parameters. + * @param channel DMAC channel number. + * + */ +void DMAC_TransferCreateHandle(DMAC_Type *base, dmac_handle_t *handle, dmac_channel_t channel); + +/*! + * @brief Sets the DMAC Callback function. + * + * This callback is called in the DMAC IRQ handler. Use the callback to do something + * after the current transfer complete. + * + * @param handle DMAC handle pointer. + * @param callback DMAC callback function pointer. + * @param userData Parameter for callback function. If it is not needed, just set to NULL. + */ +void DMAC_TransferSetCallback(dmac_handle_t *handle, dmac_transfer_callback_t callback, void *userData); + +/*! + * @brief Submits the DMAC transfer configurations. + * + * @param handle DMAC handle pointer + * @param transfer pointer to user's DMAC channel configure structure,see @ref dmac_channel_transfer_config_t for + * detail. + * + * @retval #kStatus_Success It means submit transfer request succeed + * @retval #kStatus_Fail It means submit transfer request failed + */ +status_t DMAC_TransferSubmit(dmac_handle_t *handle, dmac_channel_transfer_config_t *transfer); + +/*! + * @brief DMAC starts transfer. + * + * This function enables the channel request. Users can call this function after submitting the transfer request + * or before submitting the transfer request. + * + * @param handle DMAC handle pointer. + */ +void DMAC_TransferStart(dmac_handle_t *handle); + +/*! + * @brief DMAC stops transfer. + * + * This function disables the channel request to pause the transfer. Users can call DMAC_StartTransfer() + * again to resume the transfer. + * + * @param handle DMAC handle pointer. + */ +void DMAC_TransferStop(dmac_handle_t *handle); + +/*! + * @brief DMAC IRQ handler for the transfer completion. + * + * @param base DMAC peripheral base address. + */ +void DMAC_TransferHandleIRQ(DMAC_Type *base); + +/*! @} */ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @} */ + +#endif /*_FSL_DMAC_H_*/ diff --git a/drivers/mw320/flashc/driver_mw_flashc.cmake b/drivers/mw320/flashc/driver_mw_flashc.cmake new file mode 100644 index 000000000..8248e69b1 --- /dev/null +++ b/drivers/mw320/flashc/driver_mw_flashc.cmake @@ -0,0 +1,14 @@ +#Description: MW_FLASHC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_flashc component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_flashc.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/flashc/fsl_flashc.c b/drivers/mw320/flashc/fsl_flashc.c new file mode 100644 index 000000000..ce2902db8 --- /dev/null +++ b/drivers/mw320/flashc/fsl_flashc.c @@ -0,0 +1,561 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_flashc.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.flashc" +#endif + +/******************************************************************************* + * Definitations + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* Base pointer array */ +static FLASHC_Type *const s_flashcBases[] = FLASHC_BASE_PTRS; + +/******************************************************************************* + * Code + ******************************************************************************/ +/*! + * brief Get the instance number for FLASHC. + * + * param base FLASHC base pointer. + */ +uint32_t FLASHC_GetInstance(FLASHC_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < ARRAY_SIZE(s_flashcBases); instance++) + { + if (s_flashcBases[instance] == base) + { + break; + } + } + + assert(instance < ARRAY_SIZE(s_flashcBases)); + + return instance; +} + +/*! + * brief Initializes FLASHC, it override the HW configuration (FCCR.CMD_TYPE) if it is enabled. + * + * param base FLASHC base pointer. + * param config FLASHC configure. + */ +void FLASHC_Init(FLASHC_Type *base, flashc_config_t *config) +{ + uint32_t temp = 0x00U; + + /* Set instruction count*/ + temp |= FLASHC_FCCR2_INSTR_CNT(config->instrCnt); + /* Set address count*/ + temp |= FLASHC_FCCR2_ADDR_CNT(config->addrCnt); + /* Set read mode count */ + temp |= FLASHC_FCCR2_RM_CNT(config->readModeCnt); + /* Set dummy count */ + temp |= FLASHC_FCCR2_DUMMY_CNT(config->dummyCnt); + /* Set data length mode */ + temp |= FLASHC_FCCR2_BYTE_LEN(config->byteLen); + /* Set address pin number */ + temp |= FLASHC_FCCR2_ADDR_PIN(config->addrPinMode); + /* Set data pin number */ + temp |= FLASHC_FCCR2_DATA_PIN(config->dataPinMode); + base->FCCR2 = temp; + + /* Set read mode */ + base->FRMR = FLASHC_FRMR_RDMODE(config->readMode); + + /* Set instruction */ + base->FINSTR = FLASHC_FINSTR_INSTR(config->instrucion); + + /* Set timing configuration. */ + FLASHC_SetTimingConfig(base, &config->timingConfig); +} + +/*! + * @brief De-initializes FLASHC. + * + * @param base FLASHC base pointer. + */ +void FLASHC_Deinit(FLASHC_Type *base) +{ +} + +/*! + * brief Gets default settings for FLASHC. + * + * param config FLASHC configuration structure. + */ +void FLASHC_GetDefaultConfig(flashc_config_t *config) +{ + /* Initializes the configure structure to zero. */ + (void)memset(config, 0x00U, sizeof(*config)); + + config->timingConfig.clockPhase = kFLASHC_ClockPhaseRising; + config->timingConfig.clockPolarity = kFLASHC_ClockPolarityLow; + config->timingConfig.preScaler = kFLASHC_ClockDiv1; + config->timingConfig.captEdge = kFLASHC_CaptureEdgeFirst; + config->timingConfig.clkOutDly = 0x00U; + config->timingConfig.clkInDly = 0x00U; + config->timingConfig.dinDly = 0x00U; + + config->dataPinMode = kFLASHC_DataPinSingle; + config->addrPinMode = kFLASHC_AddrPinSingle; + config->byteLen = kFLASHC_TransferLength1Byte; + config->dummyCnt = kFLASHC_DummyCnt0Byte; + config->readModeCnt = kFLASHC_ReadModeCnt0Byte; + config->readMode = 0x00U; + config->addrCnt = kFLASHC_AddressCnt0Byte; + config->instrCnt = kFLASHC_InstructionCnt0Byte; + config->instrucion = 0x00U; +} + +/*! + * brief Configure the timing of the FLASHC. + * + * param base FLASHC base pointer. + * param config FLASHC timing configure. + */ +void FLASHC_SetTimingConfig(FLASHC_Type *base, flashc_timing_config_t *config) +{ + uint32_t temp = 0x00U; + + temp = FLASHC->FCCR; + /* Set FLASHC clock phase and polarity. */ + temp = ((temp & ~FLASHC_FCCR_CLK_PHA_MASK) | FLASHC_FCCR_CLK_PHA(config->clockPhase)) | + ((temp & ~FLASHC_FCCR_CLK_POL_MASK) | FLASHC_FCCR_CLK_POL(config->clockPolarity)); + + /* Set FLASHC clock prescaler */ + temp = ((temp & ~FLASHC_FCCR_CLK_PRESCALE_MASK) | FLASHC_FCCR_CLK_PRESCALE(config->preScaler)); + + FLASHC->FCCR = temp; + + temp = FLASHC->FCTR; + + /* Set FLASHC capture clock edge */ + temp = ((temp & ~FLASHC_FCTR_CLK_CAPT_EDGE_MASK) | FLASHC_FCTR_CLK_CAPT_EDGE(config->captEdge)); + + /* set clock out delay */ + temp = ((temp & ~FLASHC_FCTR_CLK_OUT_DLY_MASK) | FLASHC_FCTR_CLK_OUT_DLY(config->clkOutDly)); + + /* set clock in delay */ + temp = ((temp & ~FLASHC_FCTR_CLK_IN_DLY_MASK) | FLASHC_FCTR_CLK_IN_DLY(config->clkInDly)); + + /* set data in delay */ + temp = ((temp & ~FLASHC_FCTR_DIN_DLY_MASK) | FLASHC_FCTR_DIN_DLY(config->dinDly)); + + FLASHC->FCTR = temp; +} + +/*! + * brief Flush the Cache. + * + * param base FLASHC base pointer. + * return return status. + */ +status_t FLASHC_FlushCache(FLASHC_Type *base) +{ + status_t status = kStatus_Fail; + volatile uint32_t cnt = 0U; + + /* Cache Line Flush. */ + FLASHC->FCCR |= FLASHC_FCCR_CACHE_LINE_FLUSH_MASK; + + while (cnt < 0x200000U) + { + if ((FLASHC->FCCR & FLASHC_FCCR_CACHE_LINE_FLUSH_MASK) == 0U) + { + status = kStatus_Success; + break; + } + + cnt++; + } + + return status; +} + +/*! + * brief Enable Flash Cache Hit Counters. + * + * param base FLASHC base pointer. + * param enable true/false. + */ +void FLASHC_EnableCacheHitCounter(FLASHC_Type *base, bool enable) +{ + if (enable == true) + { + FLASHC->FCACR |= FLASHC_FCACR_HIT_CNT_EN_MASK; + } + else + { + FLASHC->FCACR &= ~FLASHC_FCACR_HIT_CNT_EN_MASK; + } +} + +/*! + * brief Enable Flash Cache Miss Counters. + * + * param base FLASHC base pointer. + * param enable true/false. + */ +void FLASHC_EnableCacheMissCounter(FLASHC_Type *base, bool enable) +{ + if (enable == true) + { + FLASHC->FCACR |= FLASHC_FCACR_MISS_CNT_EN_MASK; + } + else + { + FLASHC->FCACR &= ~FLASHC_FCACR_MISS_CNT_EN_MASK; + } +} + +/*! + * brief Enable Flash Cache Miss Counters. + * + * param base FLASHC base pointer. + * param hitCnt cache hit counter. + * param missCnt cache miss counter. + */ +void FLASHC_GetCacheCounter(FLASHC_Type *base, uint32_t *hitCnt, uint32_t *missCnt) +{ + assert(hitCnt != NULL); + assert(missCnt != NULL); + + /* Get cache hit counter. */ + *hitCnt = FLASHC->FCHCR; + /* Get cache miss counter. */ + *missCnt = FLASHC->FCMCR; +} + +/*! + * brief Reset Flash Controller Cache Counters. + * + * param base FLASHC base pointer. + */ +void FLASHC_ResetCacheCounter(FLASHC_Type *base) +{ + /* Clear cache hit counter. */ + FLASHC->FCHCR = 0x00U; + /* Clear cache miss counter. */ + FLASHC->FCMCR = 0x00U; +} + +/*! + * brief Use offset address for flash memory access and set the offset address. + * + * param base FLASHC base pointer. + * param address offset address. + */ +void FLASHC_EnableOffsetAddr(FLASHC_Type *base, uint32_t address) +{ + base->FCACR |= FLASHC_FCACR_OFFSET_EN_MASK; + + base->FAOFFR = address; +} + +/*! + * brief Exit dual continuous read mode. + * + * param base FLASHC base pointer. + * return return status. + */ +status_t FLASHC_ExitDualContReadMode(FLASHC_Type *base) +{ + volatile uint32_t cnt = 0x00U; + uint32_t temp = 0x00U; + uint32_t cacheMode; + + /*Backup cache mode. */ + cacheMode = (base->FCCR & FLASHC_FCCR_CACHE_EN_MASK) >> FLASHC_FCCR_CACHE_EN_SHIFT; + /* Disable cache mode. */ + base->FCCR &= ~FLASHC_FCCR_CACHE_EN_MASK; + + /* clear the continuous read mode exit status bit. */ + base->FCSR = FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK; + + temp = base->FCCR; + /* Set hardware command for exit from dual read mode. */ + base->FCCR = (temp & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(kFLASHC_HardwareCmdExitFromDual); + + while (cnt < 0x200000U) + { + if ((base->FCSR & FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) == FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) + { + /* clear the continuous read mode exit status bit. */ + base->FCSR = FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK; + base->FCCR |= FLASHC_FCCR_CACHE_EN(cacheMode); + return kStatus_Success; + } + + cnt++; + } + + /* Restore cache mode. */ + base->FCCR |= FLASHC_FCCR_CACHE_EN(cacheMode); + + return kStatus_Fail; +} + +/*! + * brief Exit quad continuous read mode. + * + * param base FLASHC base pointer. + * return return status. + */ +status_t FLASHC_ExitQuadContReadMode(FLASHC_Type *base) +{ + volatile uint32_t cnt = 0x00U; + uint32_t temp = 0x00U; + uint32_t cacheMode; + + /*Backup cache mode. */ + cacheMode = (base->FCCR & FLASHC_FCCR_CACHE_EN_MASK) >> FLASHC_FCCR_CACHE_EN_SHIFT; + /* Disable cache mode. */ + base->FCCR &= ~FLASHC_FCCR_CACHE_EN_MASK; + + /* clear the continuous read mode exit status bit. */ + base->FCSR = FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK; + + temp = base->FCCR; + /* Set hardware command for exit from quad read mode. */ + base->FCCR = (temp & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(kFLASHC_HardwareCmdExitFromQuad); + + while (cnt < 0x200000U) + { + if ((base->FCSR & FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) == FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) + { + /* clear the continuous read mode exit status bit. */ + base->FCSR = FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK; + base->FCCR |= FLASHC_FCCR_CACHE_EN(cacheMode); + return kStatus_Success; + } + + cnt++; + } + + /* Restore cache mode. */ + base->FCCR |= FLASHC_FCCR_CACHE_EN(cacheMode); + + return kStatus_Fail; +} + +/*! + * brief Enable QSPI pad. + * + * param base FLASHC base pointer. + * return return status. + */ +status_t FLASHC_EnableQSPIPad(FLASHC_Type *base) +{ + status_t status = kStatus_Fail; + uint32_t currentMode = 0x00U; + uint32_t exitMethod = 0x00U; + + status = FLASHC_FlushCache(base); + if (status != kStatus_Success) + { + return kStatus_Fail; + } + + currentMode = (base->FCCR & FLASHC_FCCR_CMD_TYPE_MASK) >> FLASHC_FCCR_CMD_TYPE_SHIFT; + + switch (currentMode) + { + case kFLASHC_HardwareCmdFastReadDualOutput: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdFastReadDualIO: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdFastReadDualIOContinuous: + exitMethod = kFLASHC_HardwareCmdExitFromDual; + break; + case kFLASHC_HardwareCmdFastReadQuadOutput: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdFastReadQuadIO: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdFastReadQuadIOContinuous: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdWordReadQuadIO: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdWordReadQuadIOContinuous: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdOctalWordReadQuadIO: + SUPPRESS_FALL_THROUGH_WARNING(); + case kFLASHC_HardwareCmdOctalWordReadQuadIOContinuous: + exitMethod = kFLASHC_HardwareCmdExitFromQuad; + break; + default: + assert(NULL); + break; + } + + if (exitMethod == (uint8_t)kFLASHC_HardwareCmdExitFromQuad) + { + status = FLASHC_ExitQuadContReadMode(base); + } + else if (exitMethod == (uint8_t)kFLASHC_HardwareCmdExitFromDual) + { + status = FLASHC_ExitDualContReadMode(base); + } + else + { + ; /* Intentional empty for MISRA C-2012 rule 15.7. */ + } + + if (status == kStatus_Success) + { + /* Select PAD to QSPI/ */ + base->FCCR &= ~FLASHC_FCCR_FLASHC_PAD_EN_MASK; + } + + return status; +} + +/*! + * brief Enable FLASHC pad. + * + * param base FLASHC base pointer. + * param mode FLASHC read mode. + * param jedecID JEDEC ID. + */ +void FLASHC_EnableFLASHCPad(FLASHC_Type *base, flashc_hw_cmd_t mode, uint32_t jedecID) +{ + uint32_t temp = 0x00U; + + temp = base->FCCR; + /* Select PAD to FLASHC */ + temp |= FLASHC_FCCR_FLASHC_PAD_EN_MASK; + + /* Check continuous read mode requirement is supported or not. */ + if (kFLASHC_HardwareCmdFastReadDualIOContinuous == mode) + { + switch (jedecID) + { + case 0xef4014: + case 0xef4015: + case 0xef4016: + case 0xef4017: + case 0xef4018: + case 0xc84016: + case 0xc86016: + case 0xc84018: + /* + * For continuous quad read mode, flash chip read mode bits + * [M7-0] needs to have 0x20h value (bit 4/5 set). This is + * limitation of flash controller in 88MW300. In addition to + * exit from continuous read mode, command 0xFFh is required. + * Please check flash part datasheet before updating this. + */ + break; + default: + mode = kFLASHC_HardwareCmdFastReadDualIO; + break; + } + } + + /* Check continuous read mode requirement is supported or not. */ + if (kFLASHC_HardwareCmdFastReadQuadIOContinuous == mode) + { + switch (jedecID) + { + case 0xef4014: + case 0xef4015: + case 0xef4016: + case 0xef4017: + case 0xef4018: + case 0xc84016: + case 0xc86016: + case 0xc84018: + /* + * For continuous quad read mode, flash chip read mode bits + * [M7-0] needs to have 0x20h value (bit 4/5 set). This is + * limitation of flash controller in 88MW300. In addition to + * exit from continuous read mode, command 0xFFh is required. + * Please check flash part datasheet before updating this. + */ + break; + default: + mode = kFLASHC_HardwareCmdFastReadQuadIO; + break; + } + } + + /* Set hardware command for FLASHC read mode. */ + base->FCCR = (temp & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(mode); +} + +/*! + * brief Set quad mode read command. + * + * param base FLASHC base pointer. + * param jedecID JEDEC ID. + */ +void FLASH_SetQuadModeReadCmd(FLASHC_Type *base, uint32_t jedecID) +{ + uint32_t temp = 0x00U; + + temp = base->FCCR; + + switch (jedecID) + { + case 0xef4014: + case 0xef4015: + case 0xef4016: + case 0xef4017: + case 0xef4018: + case 0xc84016: + case 0xc86016: + case 0xc84018: + /* + * For continuous quad read mode, flash chip read mode bits + * [M7-0] needs to have 0x20h value (bit 4/5 set). This is + * limitation of flash controller in 88MW300. In addition to + * exit from continuous read mode, command 0xFFh is required. + * Please check flash part datasheet before updating this. + */ + base->FCCR = + (temp & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(kFLASHC_HardwareCmdFastReadQuadIOContinuous); + break; + case 0xc84015: + case 0xc22014: + case 0xc22016: + case 0xc22017: + case 0xc22018: + case 0xc22810: + case 0xc22811: + case 0xc22812: + case 0xc22813: + case 0xc22814: + case 0xc22815: + case 0xc22816: + case 0xc22817: + case 0xc22310: + case 0xc22311: + case 0xc22312: + case 0xc22313: + case 0xc22314: + case 0xc22315: + base->FCCR = (temp & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(kFLASHC_HardwareCmdFastReadQuadIO); + break; + default: + assert(NULL); + break; + } +} diff --git a/drivers/mw320/flashc/fsl_flashc.h b/drivers/mw320/flashc/fsl_flashc.h new file mode 100644 index 000000000..f83150975 --- /dev/null +++ b/drivers/mw320/flashc/fsl_flashc.h @@ -0,0 +1,407 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_FLASHC_H_ +#define _FSL_FLASHC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup flashc_driver + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/*! @brief FLASHC configuration way selection */ +typedef enum +{ + kFLASHC_HardwareConfig, /*!< Use hardware configuration */ + kFLASHC_SoftwareConfig, /*!< Use software configuration */ +} flashc_config_selection_t; + +/*! @brief FLASHC hardware configuration */ +typedef enum +{ + kFLASHC_HardwareCmdNormalRead, /*!< read data(0x03) */ + kFLASHC_HardwareCmdFastRead, /*!< fast read data(0x0B) */ + kFLASHC_HardwareCmdFastReadDualOutput, /*!< fast read dual output (0x3B) */ + kFLASHC_HardwareCmdFastReadQuadOutput, /*!< fast read quad output (0x6B) */ + kFLASHC_HardwareCmdFastReadDualIO, /*!< fast read dual I/O (0xBB) */ + kFLASHC_HardwareCmdFastReadDualIOContinuous, /*!< fast read dual I/O with continuous read (0xBB) */ + kFLASHC_HardwareCmdFastReadQuadIO, /*!< fast read quad I/O (0xEB) */ + kFLASHC_HardwareCmdFastReadQuadIOContinuous, /*!< fast read quad I/O with continuous read (0xEB) */ + kFLASHC_HardwareCmdWordReadQuadIO, /*!< word read quad I/O (0xE7) */ + kFLASHC_HardwareCmdWordReadQuadIOContinuous, /*!< word read quad I/O with continuous read(0xE7) */ + kFLASHC_HardwareCmdOctalWordReadQuadIO, /*!< Octal word read quad I/O (0xE3) */ + kFLASHC_HardwareCmdOctalWordReadQuadIOContinuous, /*!< Octal word read quad I/O with continuous read(0xE3) */ + kFLASHC_HardwareCmdExitFromDual, /*!< exit from continuous read mode (dual) */ + kFLASHC_HardwareCmdExitFromQuad, /*!< exit from continuous read mode (quad) */ +} flashc_hw_cmd_t; + +/*! @brief FLASHC data pin */ +typedef enum _flashc_data_pin +{ + kFLASHC_DataPinSingle, /*!< Use 1 serial interface pin. */ + kFLASHC_DataPinDual, /*!< Use 2 serial interface pins. */ + kFLASHC_DataPinQuad, /*!< Use 4 serial interface pins. */ +} flashc_data_pin_t; + +/*! @brief FLASHC address pin */ +typedef enum _flashc_addr_pin +{ + kFLASHC_AddrPinSingle, /*!< Use 1 serial interface pin */ + kFLASHC_AddrPinAsData, /*!< Use the number of pins as indicated in DATA_PIN */ +} flashc_addr_pin_t; + +/*! @brief FLASHC clock phase */ +typedef enum _flashc_clock_phase +{ + kFLASHC_ClockPhaseRising, /*!< Data is latched on the rising edge of the serial clock. */ + kFLASHC_ClockPhaseFalling, /*!< Data is latched on the falling edge of the serial clock. */ +} flashc_clock_phase_t; + +/*! @brief FLASHC clock polarity */ +typedef enum _flashc_clock_polarity +{ + kFLASHC_ClockPolarityLow, /*!< Inactive state of serial clock is low. */ + kFLASHC_ClockPolarityHigh, /*!< Inactive state of serial clock is high. */ +} flashc_clock_polarity_t; + +/*! @brief FLASHC capture clock edge */ +typedef enum _flashc_capture_edge +{ + kFLASHC_CaptureEdgeFirst, /*!< Input data is captured on the first edge of the serial clock */ + kFLASHC_CaptureEdgeSecond, /*!< Input data is captured on the second edge of the serial clock */ +} flashc_capture_edge_t; + +/*! @brief FLASHC transfer length */ +typedef enum _flashc_transfer_length +{ + kFLASHC_TransferLength1Byte, /*!< 1 byte in each serial interface I/O transfer */ + kFLASHC_TransferLength4Bytes, /*!< 4 bytes in each serial interface I/O transfer */ +} flashc_transfer_length_t; + +/*! @brief FLASHC clock prescaler */ +typedef enum _flashc_clock_prescaler +{ + kFLASHC_ClockDiv1 = 0x1, /*!< Serial interface clock prescaler is SPI clock / 1 */ + kFLASHC_ClockDiv2 = 0x2, /*!< Serial interface clock prescaler is SPI clock / 2 */ + kFLASHC_ClockDiv3 = 0x3, /*!< Serial interface clock prescaler is SPI clock / 3 */ + kFLASHC_ClockDiv4 = 0x4, /*!< Serial interface clock prescaler is SPI clock / 4 */ + kFLASHC_ClockDiv5 = 0x5, /*!< Serial interface clock prescaler is SPI clock / 5 */ + kFLASHC_ClockDiv6 = 0x6, /*!< Serial interface clock prescaler is SPI clock / 6 */ + kFLASHC_ClockDiv7 = 0x7, /*!< Serial interface clock prescaler is SPI clock / 7 */ + kFLASHC_ClockDiv8 = 0x8, /*!< Serial interface clock prescaler is SPI clock / 8 */ + kFLASHC_ClockDiv9 = 0x9, /*!< Serial interface clock prescaler is SPI clock / 9 */ + kFLASHC_ClockDiv10 = 0xA, /*!< Serial interface clock prescaler is SPI clock / 10 */ + kFLASHC_ClockDiv11 = 0xB, /*!< Serial interface clock prescaler is SPI clock / 11 */ + kFLASHC_ClockDiv12 = 0xC, /*!< Serial interface clock prescaler is SPI clock / 12 */ + kFLASHC_ClockDiv13 = 0xD, /*!< Serial interface clock prescaler is SPI clock / 13 */ + kFLASHC_ClockDiv14 = 0xE, /*!< Serial interface clock prescaler is SPI clock / 14 */ + kFLASHC_ClockDiv15 = 0xF, /*!< Serial interface clock prescaler is SPI clock / 15 */ + kFLASHC_ClockDiv16 = 0x18, /*!< Serial interface clock prescaler is SPI clock / 16 */ + kFLASHC_ClockDiv18 = 0x19, /*!< Serial interface clock prescaler is SPI clock / 18 */ + kFLASHC_ClockDiv20 = 0x1A, /*!< Serial interface clock prescaler is SPI clock / 20 */ + kFLASHC_ClockDiv22 = 0x1B, /*!< Serial interface clock prescaler is SPI clock / 22 */ + kFLASHC_ClockDiv24 = 0x1C, /*!< Serial interface clock prescaler is SPI clock / 24 */ + kFLASHC_ClockDiv26 = 0x1D, /*!< Serial interface clock prescaler is SPI clock / 26 */ + kFLASHC_ClockDiv28 = 0x1E, /*!< Serial interface clock prescaler is SPI clock / 28 */ + kFLASHC_ClockDiv30 = 0x1F, /*!< Serial interface clock prescaler is SPI clock / 30 */ +} flashc_clock_prescaler_t; + +/*! @brief FLASHC Instruction Count */ +typedef enum _flashc_instruction_count +{ + kFLASHC_InstructionCnt0Byte, /*!< Instrution count: 0 byte */ + kFLASHC_InstructionCnt1Byte, /*!< Instrution count: 1 byte */ + kFLASHC_InstructionCnt2Byte, /*!< Instrution count: 2 bytes */ +} flashc_instruction_count_t; + +/*! @brief FLASHC Address Count */ +typedef enum _flashc_address_count +{ + kFLASHC_AddressCnt0Byte, /*!< Address count: 0 byte */ + kFLASHC_AddressCnt1Byte, /*!< Address count: 1 byte */ + kFLASHC_AddressCnt2Byte, /*!< Address count: 2 bytes */ + kFLASHC_AddressCnt3Byte, /*!< Address count: 3 bytes */ + kFLASHC_AddressCnt4Byte, /*!< Address count: 4 bytes */ +} flashc_address_count_t; + +/*! @brief FLASHC Read Mode Count */ +typedef enum _flashc_read_mode_count +{ + kFLASHC_ReadModeCnt0Byte, /*!< Read mode count: 0 byte */ + kFLASHC_ReadModeCnt1Byte, /*!< Read mode count: 1 byte */ + kFLASHC_ReadModeCnt2Byte, /*!< Read mode count: 2 bytes */ +} flashc_read_mode_count_t; + +/*! @brief FLASHC Dummy Count */ +typedef enum _flashc_dummy_count +{ + kFLASHC_DummyCnt0Byte, /*!< Dummy count: 0 byte */ + kFLASHC_DummyCnt1Byte, /*!< Dummy count: 1 byte */ + kFLASHC_DummyCnt2Byte, /*!< Dummy count: 2 bytes */ +} flashc_dummy_count_t; + +/*! @brief FLASHC timing configure structure*/ +typedef struct _flashc_timing_config +{ + flashc_clock_phase_t clockPhase; /*!< Serial Interface Clock Phase. */ + flashc_clock_polarity_t clockPolarity; /*!< Serial Interface Clock Polarity. */ + flashc_clock_prescaler_t preScaler; /*!< Configure FLASHC prescaler for serial interface */ + flashc_capture_edge_t captEdge; /*!< Configure FLASHC capture clock edge */ + uint8_t clkOutDly; /*!< Delay on the outgoing clock to flash */ + uint8_t clkInDly; /*!< Delay on the clock that capture read data from flash */ + uint8_t dinDly; /*!< Delay on the incoming data from flash */ +} flashc_timing_config_t; + +/*! @brief FLASHC configure structure*/ +typedef struct _flashc_config +{ + flashc_timing_config_t timingConfig; /*!< Timing configuration */ + flashc_data_pin_t dataPinMode; /*!< Configure FLASHC data pin */ + flashc_addr_pin_t addrPinMode; /*!< Configure FLASHC addr pin */ + flashc_transfer_length_t byteLen; /*!< Configure FLASHC length each serial transfer */ + flashc_dummy_count_t dummyCnt; /*!< Dummy count */ + flashc_read_mode_count_t readModeCnt; /*!< read mode count */ + uint16_t readMode; /*!< read mode */ + flashc_address_count_t addrCnt; /*!< address count */ + flashc_instruction_count_t instrCnt; /*!< instruction count */ + uint16_t instrucion; /*!< instruction */ +} flashc_config_t; + +/****************************************************************************** + * API + *****************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Get the instance number for FLASHC. + * + * @param base FLASHC base pointer. + */ +uint32_t FLASHC_GetInstance(FLASHC_Type *base); + +/*! + * @brief Initializes FLASHC, it override the HW configuration (FCCR.CMD_TYPE) if it is enabled. + * + * @param base FLASHC base pointer. + * @param config FLASHC configure. + */ +void FLASHC_Init(FLASHC_Type *base, flashc_config_t *config); + +/*! + * @brief De-initializes FLASHC. + * + * @param base FLASHC base pointer. + */ +void FLASHC_Deinit(FLASHC_Type *base); + +/*! + * @brief Gets default settings for FLASHC. + * + * @param config FLASHC configuration structure. + */ +void FLASHC_GetDefaultConfig(flashc_config_t *config); + +/*! + * @brief Configure the timing of the FLASHC. + * + * @param base FLASHC base pointer. + * @param config FLASHC timing configure. + */ +void FLASHC_SetTimingConfig(FLASHC_Type *base, flashc_timing_config_t *config); + +/*! + * @brief Flush the Cache. + * + * @param base FLASHC base pointer. + * @return return status. + */ +status_t FLASHC_FlushCache(FLASHC_Type *base); + +/*! + * @brief Enable Flash Cache Hit Counters. + * + * @param base FLASHC base pointer. + * @param enable true/false. + */ +void FLASHC_EnableCacheHitCounter(FLASHC_Type *base, bool enable); + +/*! + * @brief Enable Flash Cache Miss Counters. + * + * @param base FLASHC base pointer. + * @param enable true/false. + */ +void FLASHC_EnableCacheMissCounter(FLASHC_Type *base, bool enable); + +/*! + * @brief Enable Flash Cache Miss Counters. + * + * @param base FLASHC base pointer. + * @param hitCnt cache hit counter. + * @param missCnt cache miss counter. + */ +void FLASHC_GetCacheCounter(FLASHC_Type *base, uint32_t *hitCnt, uint32_t *missCnt); + +/*! + * @brief Reset Flash Controller Cache Counters. + * + * @param base FLASHC base pointer. + */ +void FLASHC_ResetCacheCounter(FLASHC_Type *base); + +/*! + * @brief Enable the cache mode. + */ +static inline void FLASHC_EnableCacheMode(FLASHC_Type *base) +{ + FLASHC->FCCR |= FLASHC_FCCR_CACHE_EN_MASK; +} + +/*! + * @brief Disable the cache mode. + */ +static inline void FLASHC_DisableCacheMode(FLASHC_Type *base) +{ + FLASHC->FCCR &= ~FLASHC_FCCR_CACHE_EN_MASK; +} + +/*! + * @brief Enable the sram mode. + */ +static inline void FLASHC_EnableSramMode(FLASHC_Type *base) +{ + FLASHC->FCCR |= FLASHC_FCCR_SRAM_MODE_EN_MASK; +} + +/*! + * @brief Disable the sram mode. + */ +static inline void FLASHC_DisableSramMode(FLASHC_Type *base) +{ + FLASHC->FCCR &= ~FLASHC_FCCR_SRAM_MODE_EN_MASK; +} + +/*! + * @brief Hardware command configuration for FLASHC. + * + * @param base FLASHC base pointer. + * @param command FLASHC hardware command for read. + */ +static inline void FLASHC_SetHardwareCommand(FLASHC_Type *base, flashc_hw_cmd_t command) +{ + uint32_t temp = 0x00U; + + temp = base->FCCR; + + base->FCCR = (temp & ~FLASHC_FCCR_CMD_TYPE_MASK) | FLASHC_FCCR_CMD_TYPE(command); +} + +/*! + * @brief Set selection hardware or software configuration for FLASHC. + * + * @param base FLASHC base pointer. + * @param cfgSel FLASHC Configuration Override. + */ +static inline void FLASHC_SetConfigSelection(FLASHC_Type *base, flashc_config_selection_t cfgSel) +{ + uint32_t temp = 0x00U; + + temp = base->FCCR2; + + base->FCCR2 = (temp & ~FLASHC_FCCR2_USE_CFG_OVRD_MASK) | FLASHC_FCCR2_USE_CFG_OVRD(cfgSel); +} + +/*! + * @brief do not use offset address for flash memory access. + * + * @param base FLASHC base pointer. + */ +static inline void FLASHC_DisableOffsetAddr(FLASHC_Type *base) +{ + base->FCACR &= ~FLASHC_FCACR_OFFSET_EN_MASK; +} + +/*! + * @brief Use offset address for flash memory access and set the offset address. + * + * @param base FLASHC base pointer. + * @param address offset address. + */ +void FLASHC_EnableOffsetAddr(FLASHC_Type *base, uint32_t address); + +/*! + * @brief Get exit continuous read mode status. + * + * @param base FLASHC base pointer. + */ +static inline bool FLASHC_GetExitContReadStatus(FLASHC_Type *base) +{ + return ((base->FCSR & FLASHC_FCSR_CONT_RD_MD_EXIT_DONE_MASK) ? true : false); +} + +/*! + * @brief Exit dual continuous read mode. + * + * @param base FLASHC base pointer. + * @return return status. + */ +status_t FLASHC_ExitDualContReadMode(FLASHC_Type *base); + +/*! + * @brief Exit quad continuous read mode. + * + * @param base FLASHC base pointer. + * @return return status. + */ +status_t FLASHC_ExitQuadContReadMode(FLASHC_Type *base); + +/*! + * @brief Switch into QSPI from FLASHC. + * + * @param base FLASHC base pointer. + * @return return status. + */ +status_t FLASHC_EnableQSPIPad(FLASHC_Type *base); + +/*! + * @brief Switch back FLASHC from QSPI. + * + * @param base FLASHC base pointer. + * @param mode FLASHC read mode. + * @param jedecID JEDEC ID. + */ +void FLASHC_EnableFLASHCPad(FLASHC_Type *base, flashc_hw_cmd_t mode, uint32_t jedecID); + +/*! + * @brief Set quad mode read command. + * + * @param base FLASHC base pointer. + * @param jedecID JEDEC ID. + */ +void FLASH_SetQuadModeReadCmd(FLASHC_Type *base, uint32_t jedecID); + +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/* @}*/ + +#endif /* _FSL_QSPI_H_*/ diff --git a/drivers/mw320/gpio/driver_mw_gpio.cmake b/drivers/mw320/gpio/driver_mw_gpio.cmake new file mode 100644 index 000000000..c41387b28 --- /dev/null +++ b/drivers/mw320/gpio/driver_mw_gpio.cmake @@ -0,0 +1,14 @@ +#Description: MW_GPIO Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_gpio component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_gpio.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/gpio/fsl_gpio.c b/drivers/mw320/gpio/fsl_gpio.c new file mode 100644 index 000000000..2b949c202 --- /dev/null +++ b/drivers/mw320/gpio/fsl_gpio.c @@ -0,0 +1,143 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_gpio.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.gpio" +#endif + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * brief Initializes a GPIO pin used by the board. + * + * To initialize the GPIO, define a pin configuration, as either input or output, in the user file. + * Then, call the GPIO_PinInit() function. + * + * This is an example to define an input pin or an output pin configuration. + * code + * Define a digital input pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalInput, + * 0, + * } + * Define a digital output pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalOutput, + * 0, + * } + * endcode + * + * param base GPIO peripheral base pointer + * param pin GPIO port pin number + * param config GPIO pin configuration pointer + */ +void GPIO_PinInit(GPIO_Type *base, uint32_t pin, const gpio_pin_config_t *config) +{ + assert(NULL != config); + assert(pin < (uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER); + + if (config->pinDirection == kGPIO_DigitalInput) + { + base->GCDR_REG[GPIO_PORT(pin)] = 1UL << GPIO_PORT_PIN(pin); + } + else + { + GPIO_PinWrite(base, pin, config->outputLogic); + base->GSDR_REG[GPIO_PORT(pin)] = 1UL << GPIO_PORT_PIN(pin); + } +} + +/*! + * @brief Sets the output level of single GPIO pin to the logic 1 or 0. + * + * @param base GPIO peripheral base pointer + * @param pin GPIO pin number + * @param output GPIO pin output logic level. + * - 0: corresponding pin output low-logic level. + * - 1: corresponding pin output high-logic level. + */ +void GPIO_PinWrite(GPIO_Type *base, uint32_t pin, uint8_t output) +{ + assert(pin < (uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER); + + if (output != 0U) + { + base->GPSR_REG[GPIO_PORT(pin)] = 1UL << GPIO_PORT_PIN(pin); + } + else + { + base->GPCR_REG[GPIO_PORT(pin)] = 1UL << GPIO_PORT_PIN(pin); + } +} + +/*! + * @brief Reverses the current output logic of the multiple GPIO pins. + * + * @param base GPIO peripheral base pointer + * @param port GPIO port number. Each port contains 32 GPIOs. + * @param mask GPIO pin bit mask. Bit position stands for the pin number in the port. + */ +void GPIO_PortToggle(GPIO_Type *base, uint32_t port, uint32_t mask) +{ + uint32_t level; + + assert(port <= GPIO_PORT((uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER - 1U)); + + level = base->GPLR_REG[port]; + + GPIO_PortClear(base, port, level & mask); + GPIO_PortSet(base, port, (~level) & mask); +} + +/*! + * @brief Configures the gpio pin interrupt. + * + * @param base GPIO peripheral base pointer. + * @param pin GPIO pin number. + * @param config GPIO pin interrupt configuration. + */ +void GPIO_PinSetInterruptConfig(GPIO_Type *base, uint32_t pin, gpio_interrupt_config_t config) +{ + uint32_t regVal; + + assert(pin < (uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER); + + regVal = 1UL << GPIO_PORT_PIN(pin); + + switch (config) + { + case kGPIO_InterruptStatusFlagDisabled: + base->GCRER_REG[GPIO_PORT(pin)] = regVal; + base->GCFER_REG[GPIO_PORT(pin)] = regVal; + break; + case kGPIO_InterruptRisingEdge: + base->GSRER_REG[GPIO_PORT(pin)] = regVal; + base->GCFER_REG[GPIO_PORT(pin)] = regVal; + break; + case kGPIO_InterruptFallingEdge: + base->GCRER_REG[GPIO_PORT(pin)] = regVal; + base->GSFER_REG[GPIO_PORT(pin)] = regVal; + break; + case kGPIO_InterruptEitherEdge: + base->GSRER_REG[GPIO_PORT(pin)] = regVal; + base->GSFER_REG[GPIO_PORT(pin)] = regVal; + break; + default: + assert(false); + break; + } +} diff --git a/drivers/mw320/gpio/fsl_gpio.h b/drivers/mw320/gpio/fsl_gpio.h new file mode 100644 index 000000000..d6210dda2 --- /dev/null +++ b/drivers/mw320/gpio/fsl_gpio.h @@ -0,0 +1,266 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_GPIO_H_ +#define _FSL_GPIO_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup gpio + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief GPIO driver version 2.0.0. */ +#define FSL_GPIO_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! @brief Get GPIO port from pin number */ +#define GPIO_PORT(pin) (((uint32_t)(pin)) >> 5U) +/*! @brief Get GPIO pin inside the port from pin number */ +#define GPIO_PORT_PIN(pin) (((uint32_t)(pin)) & 0x1FU) + +/*! @brief GPIO direction definition */ +typedef enum _gpio_pin_direction +{ + kGPIO_DigitalInput = 0U, /*!< Set current pin as digital input*/ + kGPIO_DigitalOutput = 1U, /*!< Set current pin as digital output*/ +} gpio_pin_direction_t; + +/*! + * @brief The GPIO pin configuration structure. + * + * Each pin can only be configured as either an output pin or an input pin at a time. + * If configured as an input pin, leave the outputConfig unused. + */ +typedef struct _gpio_pin_config +{ + gpio_pin_direction_t pinDirection; /*!< GPIO direction, input or output */ + /* Output configurations; ignore if configured as an input pin */ + uint8_t outputLogic; /*!< Set a default output logic, which has no use in input */ +} gpio_pin_config_t; + +/*! @brief Configures the interrupt generation condition. */ +typedef enum _gpio_interrupt_config +{ + kGPIO_InterruptStatusFlagDisabled = 0x00U, /*!< Interrupt status flag is disabled. */ + kGPIO_InterruptRisingEdge = 0x01U, /*!< Interrupt on rising edge. */ + kGPIO_InterruptFallingEdge = 0x02U, /*!< Interrupt on falling edge. */ + kGPIO_InterruptEitherEdge = 0x03U, /*!< Interrupt on either edge. */ +} gpio_interrupt_config_t; + +/*! @} */ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @addtogroup gpio_driver + * @{ + */ + +/*! @name GPIO Configuration */ +/*@{*/ + +/*! + * @brief Initializes a GPIO pin used by the board. + * + * To initialize the GPIO, define a pin configuration, as either input or output, in the user file. + * Then, call the GPIO_PinInit() function. + * + * This is an example to define an input pin or an output pin configuration. + * @code + * Define a digital input pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalInput, + * 0, + * } + * Define a digital output pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalOutput, + * 0, + * } + * @endcode + * + * @param base GPIO peripheral base pointer + * @param pin GPIO pin number + * @param config GPIO pin configuration pointer + */ +void GPIO_PinInit(GPIO_Type *base, uint32_t pin, const gpio_pin_config_t *config); + +/*@}*/ + +/*! @name GPIO Output Operations */ +/*@{*/ + +/*! + * @brief Sets the output level of single GPIO pin to the logic 1 or 0. + * + * @param base GPIO peripheral base pointer + * @param pin GPIO pin number + * @param output GPIO pin output logic level. + * - 0: corresponding pin output low-logic level. + * - 1: corresponding pin output high-logic level. + */ +void GPIO_PinWrite(GPIO_Type *base, uint32_t pin, uint8_t output); + +/*! + * @brief Sets the output level of the multiple GPIO pins to the logic 1. + * + * @param base GPIO peripheral base pointer (GPIOA, GPIOB, GPIOC, and so on.) + * @param port GPIO port number. Each port contains 32 GPIOs. + * @param mask GPIO pin bit mask. Bit position stands for the pin number in the port. + */ +__STATIC_INLINE void GPIO_PortSet(GPIO_Type *base, uint32_t port, uint32_t mask) +{ + assert(port <= GPIO_PORT((uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER - 1U)); + + base->GPSR_REG[port] = mask; +} + +/*! + * @brief Sets the output level of the multiple GPIO pins to the logic 0. + * + * @param base GPIO peripheral base pointer + * @param port GPIO port number. Each port contains 32 GPIOs. + * @param mask GPIO pin bit mask. Bit position stands for the pin number in the port. + */ +__STATIC_INLINE void GPIO_PortClear(GPIO_Type *base, uint32_t port, uint32_t mask) +{ + assert(port <= GPIO_PORT((uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER - 1U)); + + base->GPCR_REG[port] = mask; +} + +/*! + * @brief Reverses the current output logic of the multiple GPIO pins. + * + * @param base GPIO peripheral base pointer + * @param port GPIO port number. Each port contains 32 GPIOs. + * @param mask GPIO pin bit mask. Bit position stands for the pin number in the port. + */ +void GPIO_PortToggle(GPIO_Type *base, uint32_t port, uint32_t mask); + +/*@}*/ + +/*! @name GPIO Input Operations */ +/*@{*/ + +/*! + * @brief Reads the current input value of the GPIO port. + * + * @param base GPIO peripheral base pointer + * @param pin GPIO pin number + * @retval GPIO port input value + * - 0: corresponding pin input low-logic level. + * - 1: corresponding pin input high-logic level. + */ +__STATIC_INLINE uint32_t GPIO_PinRead(GPIO_Type *base, uint32_t pin) +{ + assert(pin < (uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER); + + return (base->GPLR_REG[GPIO_PORT(pin)] >> GPIO_PORT_PIN(pin)) & 0x01U; +} + +/*@}*/ + +/*! @name GPIO Interrupt */ +/*@{*/ + +/*! + * @brief Configures the gpio pin interrupt. + * + * @param base GPIO peripheral base pointer. + * @param pin GPIO pin number. + * @param config GPIO pin interrupt configuration. + */ +void GPIO_PinSetInterruptConfig(GPIO_Type *base, uint32_t pin, gpio_interrupt_config_t config); + +/*! + * @brief Enables the specific pin interrupt. + * + * @param base GPIO base pointer. + * @param port GPIO port number. Each port contains 32 GPIOs. + * @param mask GPIO pin bit mask. Bit position stands for the pin number in the port. + */ +__STATIC_INLINE void GPIO_PortEnableInterrupts(GPIO_Type *base, uint32_t port, uint32_t mask) +{ + assert(port <= GPIO_PORT((uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER - 1U)); + + base->APMASK_REG[port] |= mask; +} + +/*! + * @brief Disables the specific pin interrupt. + * + * @param base GPIO base pointer. + * @param port GPIO port number. Each port contains 32 GPIOs. + * @param mask GPIO pin bit mask. Bit position stands for the pin number in the port. + */ +__STATIC_INLINE void GPIO_PortDisableInterrupts(GPIO_Type *base, uint32_t port, uint32_t mask) +{ + assert(port <= GPIO_PORT((uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER - 1U)); + + base->APMASK_REG[port] &= ~mask; +} + +/*! + * @brief Reads the GPIO port interrupt status flag. + * + * The flag remains set until a logic one is written to that flag. + * + * @param base GPIO peripheral base pointer + * @param port GPIO port number. Each port contains 32 GPIOs. + * @retval The current GPIO port interrupt status flag, for example, 0x00010001 means the + * pin 0 and 16 have the interrupt. + */ +__STATIC_INLINE uint32_t GPIO_PortGetInterruptFlags(GPIO_Type *base, uint32_t port) +{ + assert(port <= GPIO_PORT((uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER - 1U)); + + return base->GEDR_REG[port]; +} + +/*! + * @brief Clears multiple GPIO pin interrupt status flags. + * + * @param base GPIO peripheral base pointer + * @param port GPIO port number. Each port contains 32 GPIOs. + * @param mask GPIO pin bit mask. Bit position stands for the pin number in the port. + */ +__STATIC_INLINE void GPIO_PortClearInterruptFlags(GPIO_Type *base, uint32_t port, uint32_t mask) +{ + assert(port <= GPIO_PORT((uint32_t)FSL_FEATURE_MW_GPIO_IO_NUMBER - 1U)); + + base->GEDR_REG[port] = mask; +} + +/*@}*/ +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/*! + * @} + */ + +#endif /* _FSL_GPIO_H_*/ diff --git a/drivers/mw320/gpt/driver_mw_gpt.cmake b/drivers/mw320/gpt/driver_mw_gpt.cmake new file mode 100644 index 000000000..ceeea948f --- /dev/null +++ b/drivers/mw320/gpt/driver_mw_gpt.cmake @@ -0,0 +1,14 @@ +#Description: MW_GPT Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_gpt component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_gpt.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/gpt/fsl_gpt.c b/drivers/mw320/gpt/fsl_gpt.c new file mode 100644 index 000000000..815ac485f --- /dev/null +++ b/drivers/mw320/gpt/fsl_gpt.c @@ -0,0 +1,569 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_gpt.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.gpt" +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Gets the instance from the base address + * + * @param base GPT peripheral base address + * + * @return The GPT instance + */ +static uint32_t GPT_GetInstance(GPT_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief Pointers to GPT bases for each instance. */ +static GPT_Type *const s_gptBases[] = GPT_BASE_PTRS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! @brief Pointers to GPT clocks for each instance. */ +static const clock_ip_name_t s_gptClocks[] = GPT_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t GPT_GetInstance(GPT_Type *base) +{ + uint32_t instance; + uint32_t gptArrayCount = (sizeof(s_gptBases) / sizeof(s_gptBases[0])); + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < gptArrayCount; instance++) + { + if (s_gptBases[instance] == base) + { + break; + } + } + + assert(instance < gptArrayCount); + + return instance; +} + +/*! + * @brief Ungates the GPT clock and configures the peripheral for basic operation. + * + * @note This API should be called at the beginning of the application which is using the GPT driver. + * If the GPT instance has only TPM features, please use the TPM driver. + * + * @param base GPT peripheral base address + * @param config Pointer to the user configuration structure. + * + * @return kStatus_Success indicates success; Else indicates failure. + */ +status_t GPT_Init(GPT_Type *base, const gpt_config_t *config) +{ + uint32_t i; + + assert(config); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the GPT clock*/ + (void)CLOCK_EnableClock(s_gptClocks[GPT_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + + /* Ensure GPT is stopped. */ + GPT_StopTimer(base); + + /* Set all channels to no function mode. */ + for (i = 0U; i < 6U; i++) + { + base->CH[i].CH_CNTL_REG = 0U; + } + + /* Clear all status */ + GPT_ClearStatusFlags(base, (uint32_t)kGPT_AllFlags); + + /* Configure counter clock. */ + base->CLK_CNTL_REG = GPT_CLK_CNTL_REG_CLK_SRC(config->src) | GPT_CLK_CNTL_REG_CLK_DIV(config->div) | + GPT_CLK_CNTL_REG_CLK_PRE(config->prescale); + /* Configure counter update mode and debug behaivor. */ + base->CNT_CNTL_REG = + (config->stopCntInDebug ? GPT_CNT_CNTL_REG_CNT_DBG_ACT(0U) : GPT_CNT_CNTL_REG_CNT_DBG_ACT(1U)) | + GPT_CNT_CNTL_REG_CNT_UPDT_MOD(config->cntUpdateMode); + /* Configure input capture clock and filter. */ + base->IC_CNTL_REG = GPT_IC_CNTL_REG_CHX_IC_DIV(config->icDiv) | GPT_IC_CNTL_REG_CHX_IC_WIDTH(config->icFilter); + /* Set up counter overflow threshold. */ + GPT_SetTimerPeriod(base, config->cntUppVal); + /* Reset the counter to make the timer period valid immediately. */ + GPT_ResetTimer(base); + + return kStatus_Success; +} + +/*! + * brief Gates the GPT clock. + * + * param base GPT peripheral base address + */ +void GPT_Deinit(GPT_Type *base) +{ + /* Ensure GPT is stopped. */ + GPT_StopTimer(base); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Gate the GPT clock */ + (void)CLOCK_DisableClock(s_gptClocks[GPT_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ +} + +/*! + * @brief Fills in the GPT configuration structure with the default settings. + * + * The default values are: + * @code + * config->src = kGPT_SystemClock; + * config->div = kGPT_ClkDiv_Divide_1; + * config->prescale = 0U; + * config->cntUpdateMode = kGPT_CntUpdateMode_Normal; + * config->stopCntInDebug = true; + * config->cntUppVal = 0xFFFFFFFFU; + * config->icDiv = kGPT_SampClkDiv_Divide_1; + * config->icFilter = kGPT_InputCapFilter_None; + * @endcode + * @param config Pointer to the user configuration structure. + */ +void GPT_GetDefaultConfig(gpt_config_t *config) +{ + assert(config != NULL); + + /* Initializes the configure structure to zero. */ + (void)memset(config, 0, sizeof(*config)); + + /* Set clock source to system clock (not from pad). */ + config->src = kGPT_SystemClock; + /* Set clock source divider to 1 for counter. */ + config->div = kGPT_ClkDiv_Divide_1; + /* Set clock prescalar divider to 1 for counter. */ + config->prescale = 0U; + /* Set counter update mode to normal. */ + config->cntUpdateMode = kGPT_CntUpdateMode_Normal; + /* Stop counter in debug mode. */ + config->stopCntInDebug = true; + /* Set counter overflow threshold to maximum. */ + config->cntUppVal = 0xFFFFFFFFU; + /* Set input capture sample clock divider to 1. */ + config->icDiv = kGPT_SampClkDiv_Divide_1; + /* Set input capture filter cycles to 1 (no filter). */ + config->icFilter = kGPT_InputCapFilter_None; +} + +/*! + * @brief Enables capturing an input signal on the channel using the function parameters. + * + * When the edge specified in the captureMode argument occurs on the channel, the GPT counter is + * captured into the CMR0 register. The user has to read the CMR0 register separately to get this + * value. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + * @param captureMode Specifies which edge to capture + */ +void GPT_SetupInputCapture(GPT_Type *base, gpt_chnl_t chnlNumber, gpt_input_capture_edge_t captureMode) +{ + base->CH[chnlNumber].CH_CNTL_REG = GPT_CH_CNTL_REG_IC_EDGE(captureMode) | GPT_CH_CNTL_REG_CHX_IO(1U); +} + +/*! + * @brief Trigger input capturing by software. Edge and filter is ignored. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + */ +void GPT_TriggerInputCapture(GPT_Type *base, gpt_chnl_t chnlNumber) +{ + base->USER_REQ_REG = ((uint32_t)GPT_USER_REQ_REG_CH0_USER_ITRIG_MASK) << ((uint8_t)chnlNumber); +} + +/*! + * @brief Get captured value. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + */ +uint32_t GPT_GetCapturedValue(GPT_Type *base, gpt_chnl_t chnlNumber) +{ + return base->CH[chnlNumber].CH_CMR0_REG; +} + +/*! + * @brief Configures one-shot pulse on the channel. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + * @param pol Channel output polarity reset value. + * @param delayTicks Delay width before triggering the pulse, the uint of this value is timer ticks. + * @param dutyTicks Pulse width, the uint of this value is timer ticks. + */ +void GPT_SetupOneshotPulse( + GPT_Type *base, gpt_chnl_t chnlNumber, gpt_chnl_pol_t pol, uint32_t delayTicks, uint32_t dutyTicks) +{ + /* counter must be started */ + assert((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) != 0U); + + base->CH[chnlNumber].CH_CNTL_REG = GPT_CH_CNTL_REG_POL(pol) | GPT_CH_CNTL_REG_CHX_IO(4U); + base->CH[chnlNumber].CH_CMR0_REG = dutyTicks; + base->CH[chnlNumber].CH_CMR1_REG = delayTicks; + + /* Update CMRs */ + base->USER_REQ_REG = GPT_USER_REQ_REG_CH0_CMR_UPDT_MASK << ((uint8_t)chnlNumber); + /* Shouldn't cause channel error. */ + assert((base->STS_REG & (((uint32_t)GPT_STS_REG_CH0_ERR_STS_MASK) << ((uint8_t)chnlNumber))) == 0U); + + /* Now trigger the channel reset for one shot pulse */ + base->USER_REQ_REG = ((uint32_t)GPT_USER_REQ_REG_CH0_RST_MASK) << ((uint8_t)chnlNumber); +} + +/*! + * @brief Configures one-shot edge on the channel. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + * @param pol Channel output polarity reset value. + * @param delayTicks Delay width before changing the edge, the uint of this value is timer ticks. + */ +void GPT_SetupOneshotEdge(GPT_Type *base, gpt_chnl_t chnlNumber, gpt_chnl_pol_t pol, uint32_t delayTicks) +{ + /* counter must be started */ + assert((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) != 0U); + + base->CH[chnlNumber].CH_CNTL_REG = GPT_CH_CNTL_REG_POL(pol) | GPT_CH_CNTL_REG_CHX_IO(5U); + base->CH[chnlNumber].CH_CMR1_REG = delayTicks; + + /* Update CMRs */ + base->USER_REQ_REG = GPT_USER_REQ_REG_CH0_CMR_UPDT_MASK << ((uint8_t)chnlNumber); + /* Shouldn't cause channel error. */ + assert((base->STS_REG & (((uint32_t)GPT_STS_REG_CH0_ERR_STS_MASK) << ((uint8_t)chnlNumber))) == 0U); + + /* Now trigger the channel reset for one shot pulse */ + base->USER_REQ_REG = ((uint32_t)GPT_USER_REQ_REG_CH0_RST_MASK) << ((uint8_t)chnlNumber); +} + +/*! + * @brief Configures the PWM signal parameters. + * + * Call this function to configure the PWM signal period, mode, duty cycle, and edge. Use this + * function to configure all GPT channels that are used to output a PWM signal. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * @param pol PWM output polarity reset value. + * @param dutyPercent PWM pulse width, value should be between 0 to 100 + * @param mode PWM operation mode, options available in enumeration ::gpt_pwm_mode_t + * @param pwmFreq_Hz PWM signal frequency in Hz + * @param srcClock_Hz GPT counter clock in Hz + * + * @return kStatus_Success if the PWM setup was successful + * kStatus_Fail on failure + */ +status_t GPT_SetupPwm(GPT_Type *base, + gpt_chnl_t chnlNumber, + gpt_chnl_pol_t pol, + uint32_t dutyPercent, + gpt_pwm_mode_t mode, + uint32_t pwmFreq_Hz, + uint32_t srcClock_Hz) +{ + uint32_t reg, periodTicks; + uint32_t gptClock; + + assert(0U != srcClock_Hz); + assert(0U != pwmFreq_Hz); + assert(dutyPercent <= 100U); + + reg = base->CLK_CNTL_REG; + gptClock = srcClock_Hz / (1UL << ((reg & GPT_CLK_CNTL_REG_CLK_DIV_MASK) >> GPT_CLK_CNTL_REG_CLK_DIV_SHIFT)) / + (((reg & GPT_CLK_CNTL_REG_CLK_PRE_MASK) >> GPT_CLK_CNTL_REG_CLK_PRE_SHIFT) + 1U); + periodTicks = (gptClock + pwmFreq_Hz - 1U) / pwmFreq_Hz; + + return GPT_SetupPwmMode(base, chnlNumber, pol, periodTicks, periodTicks * dutyPercent / 100U, mode); +} + +/*! + * @brief Configures the PWM mode parameters. + * + * Call this function to configure the PWM signal mode, duty cycle in ticks, and edge. Use this + * function to configure all GPT channels that are used to output a PWM signal. + * Please note that: This API is similar with GPT_SetupPwm() API, but will not set the timer period, + * and this API will set channel match value in timer ticks, not period percent. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * @param pol PWM output polarity reset value. + * @param periodTicks PWM period width, the uint of this value is timer ticks. + * @param dutyTicks PWM pulse width, the uint of this value is timer ticks. + * @param mode PWM operation mode, options available in enumeration ::gpt_pwm_mode_t + * + * @return kStatus_Success if the PWM setup was successful + * kStatus_Fail on failure + */ +status_t GPT_SetupPwmMode(GPT_Type *base, + gpt_chnl_t chnlNumber, + gpt_chnl_pol_t pol, + uint32_t periodTicks, + uint32_t dutyTicks, + gpt_pwm_mode_t mode) +{ + /* counter must be started */ + assert((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) != 0U); + assert(periodTicks > 0U); + assert(periodTicks >= dutyTicks); + + if (mode == kGPT_CenterAlignedPwm) + { + base->CH[chnlNumber].CH_CNTL_REG = GPT_CH_CNTL_REG_POL(pol) | GPT_CH_CNTL_REG_CHX_IO(7U); + base->CH[chnlNumber].CH_CMR0_REG = (dutyTicks + 1U) / 2U; + base->CH[chnlNumber].CH_CMR1_REG = (periodTicks - dutyTicks + 1U) / 2U; + } + else /* Edge aligned */ + { + base->CH[chnlNumber].CH_CNTL_REG = GPT_CH_CNTL_REG_POL(pol) | GPT_CH_CNTL_REG_CHX_IO(6U); + base->CH[chnlNumber].CH_CMR0_REG = dutyTicks; + base->CH[chnlNumber].CH_CMR1_REG = periodTicks - dutyTicks; + } + + /* Update CMRs */ + base->USER_REQ_REG = GPT_USER_REQ_REG_CH0_CMR_UPDT_MASK << ((uint8_t)chnlNumber); + /* Shouldn't cause channel error. */ + assert((base->STS_REG & (((uint32_t)GPT_STS_REG_CH0_ERR_STS_MASK) << ((uint8_t)chnlNumber))) == 0U); + + /* Now trigger the channel reset for one shot pulse */ + base->USER_REQ_REG = ((uint32_t)GPT_USER_REQ_REG_CH0_RST_MASK) << ((uint8_t)chnlNumber); + + return kStatus_Success; +} + +/*! + * @brief Updates the duty cycle of an active PWM signal. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * @param dutyPercent New PWM pulse width; The value should be between 0 to 100 + * 0=inactive signal(0% duty cycle)... + * 100=active signal (100% duty cycle) + * + * @return kStatus_Success if the PWM update was successful + * kStatus_Fail on failure + */ +status_t GPT_UpdatePwmDutycycle(GPT_Type *base, gpt_chnl_t chnlNumber, uint8_t dutyPercent) +{ + uint32_t periodTicks, dutyTicks; + status_t status = kStatus_Success; + + /* counter must be started */ + assert((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) != 0U); + assert(dutyPercent <= 100U); + + periodTicks = base->CH[chnlNumber].CH_CMR0_REG + base->CH[chnlNumber].CH_CMR1_REG; + dutyTicks = periodTicks * dutyPercent / 100U; + + base->CH[chnlNumber].CH_CMR0_REG = dutyTicks; + base->CH[chnlNumber].CH_CMR1_REG = periodTicks - dutyTicks; + + /* Update CMRs */ + base->USER_REQ_REG = GPT_USER_REQ_REG_CH0_CMR_UPDT_MASK << ((uint8_t)chnlNumber); + + if ((base->STS_REG & (((uint32_t)GPT_STS_REG_CH0_ERR_STS_MASK) << ((uint8_t)chnlNumber))) != 0U) + { + /* Clear error and return */ + base->STS_REG = (((uint32_t)GPT_STS_REG_CH0_ERR_STS_MASK) << ((uint8_t)chnlNumber)); + status = kStatus_Fail; + } + + return status; +} + +/*! + * @brief Pause the PWM signal. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * + * @return kStatus_Success if the PWM update was successful + * kStatus_Fail on failure + */ +status_t GPT_PausePwm(GPT_Type *base, gpt_chnl_t chnlNumber) +{ + status_t status = kStatus_Success; + + /* counter must be started */ + assert((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) != 0U); + + base->CH[chnlNumber].CH_CMR0_REG = 0U; + base->CH[chnlNumber].CH_CMR1_REG = 0U; + + /* Update CMRs */ + base->USER_REQ_REG = GPT_USER_REQ_REG_CH0_CMR_UPDT_MASK << ((uint8_t)chnlNumber); + + if ((base->STS_REG & (((uint32_t)GPT_STS_REG_CH0_ERR_STS_MASK) << ((uint8_t)chnlNumber))) != 0U) + { + /* Clear error and return */ + base->STS_REG = (((uint32_t)GPT_STS_REG_CH0_ERR_STS_MASK) << ((uint8_t)chnlNumber)); + status = kStatus_Fail; + } + + return status; +} + +/*! + * brief Enables the selected GPT interrupts. + * + * param base GPT peripheral base address + * param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::gpt_interrupt_enable_t + */ +void GPT_EnableInterrupts(GPT_Type *base, uint32_t mask) +{ + base->INT_MSK_REG &= ~(mask & (uint32_t)kGPT_AllInterruptsEnable); +} + +/*! + * brief Disables the selected GPT interrupts. + * + * param base GPT peripheral base address + * param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::gpt_interrupt_enable_t + */ +void GPT_DisableInterrupts(GPT_Type *base, uint32_t mask) +{ + base->INT_MSK_REG |= (mask & (uint32_t)kGPT_AllInterruptsEnable); +} + +/*! + * brief Gets the enabled GPT interrupts. + * + * param base GPT peripheral base address + * + * return The enabled interrupts. This is the logical OR of members of the + * enumeration ::gpt_interrupt_enable_t + */ +uint32_t GPT_GetEnabledInterrupts(GPT_Type *base) +{ + return (~base->INT_MSK_REG) & (uint32_t)kGPT_AllInterruptsEnable; +} + +/*! + * brief Gets the GPT status flags. + * + * param base GPT peripheral base address + * + * return The status flags. This is the logical OR of members of the + * enumeration ::gpt_status_flags_t + */ +uint32_t GPT_GetStatusFlags(GPT_Type *base) +{ + return base->STS_REG & (uint32_t)kGPT_AllFlags; +} + +/*! + * brief Clears the GPT status flags. + * + * param base GPT peripheral base address + * param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::gpt_status_flags_t + */ +void GPT_ClearStatusFlags(GPT_Type *base, uint32_t mask) +{ + base->STS_REG = mask & (uint32_t)kGPT_AllFlags; +} + +/*! + * @brief Sets the timer period in units of ticks for the GPT instance. + * + * Timers counts from 0 until it equals the count value set here. The count value is written to + * the CNT_UPP_VAL register. + * + * @note + * Call the utility macros provided in the fsl_common.h to convert usec or msec to ticks. + * + * @param base GPT peripheral base address + * @param ticks A timer period in units of ticks, which should be equal or greater than 1. + */ +void GPT_SetTimerPeriod(GPT_Type *base, uint32_t ticks) +{ + assert(ticks > 0U); + + base->CNT_UPP_VAL_REG = ticks; +} + +/*! + * @brief Reads the current timer counting value. + * + * This function returns the real-time timer counting value in a range from 0 to a + * timer period. + * + * @note Call the utility macros provided in the fsl_common.h to convert ticks to usec or msec. + * + * @param base GPT peripheral base address + * + * @return The current counter value in ticks + */ +uint32_t GPT_GetCurrentTimerCount(GPT_Type *base) +{ + /* To get counter, autoUpdateCntVal must be configured to auto-update. */ + assert((base->CNT_CNTL_REG & GPT_CNT_CNTL_REG_CNT_UPDT_MOD_MASK) != GPT_CNT_CNTL_REG_CNT_UPDT_MOD(3U)); + return base->CNT_VAL_REG; +} + +/*! + * @brief Starts the GPT counter. + * + * @param base GPT peripheral base address + */ +void GPT_StartTimer(GPT_Type *base) +{ + if ((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) == 0U) + { + base->CNT_EN_REG = GPT_CNT_EN_REG_CNT_START_MASK; + while ((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) == 0U) + { + } + } +} + +/*! + * @brief Stops the GPT counter. + * + * @param base GPT peripheral base address + */ +void GPT_StopTimer(GPT_Type *base) +{ + if ((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) != 0U) + { + base->CNT_EN_REG = GPT_CNT_EN_REG_CNT_STOP_MASK; + while ((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RUN_MASK) != 0U) + { + } + } +} + +/*! + * @brief Performs a GPT counter reset. + * + * @param base GPT peripheral base address + */ +void GPT_ResetTimer(GPT_Type *base) +{ + /* Reset counter */ + base->CNT_EN_REG = GPT_CNT_EN_REG_CNT_RESET_MASK; + while ((base->CNT_EN_REG & GPT_CNT_EN_REG_CNT_RST_DONE_MASK) == 0U) + { + } +} diff --git a/drivers/mw320/gpt/fsl_gpt.h b/drivers/mw320/gpt/fsl_gpt.h new file mode 100644 index 000000000..2798b83a9 --- /dev/null +++ b/drivers/mw320/gpt/fsl_gpt.h @@ -0,0 +1,520 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_GPT_H_ +#define _FSL_GPT_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup gpt + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief GPT driver version 2.0.0. */ +#define FSL_GPT_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! + * @brief List of GPT channels + * @note Actual number of available channels is SoC dependent + */ +typedef enum _gpt_chnl +{ + kGPT_Chnl_0 = 0U, /*!< GPT channel number 0*/ + kGPT_Chnl_1, /*!< GPT channel number 1 */ + kGPT_Chnl_2, /*!< GPT channel number 2 */ + kGPT_Chnl_3, /*!< GPT channel number 3 */ + kGPT_Chnl_4, /*!< GPT channel number 4 */ + kGPT_Chnl_5, /*!< GPT channel number 5 */ +} gpt_chnl_t; + +/*! @brief GPT channel polarity */ +typedef enum _gpt_chnl_pol +{ + kGPT_ChnlPol_Low = 0U, /*!< Output state reset to 0 */ + kGPT_ChnlPol_High, /*!< Output state reset to 1 */ +} gpt_chnl_pol_t; + +/*! @brief GPT PWM operation modes */ +typedef enum _gpt_pwm_mode +{ + kGPT_EdgeAlignedPwm = 0U, /*!< Edge-aligned PWM */ + kGPT_CenterAlignedPwm, /*!< Center-aligned PWM */ +} gpt_pwm_mode_t; + +/*! @brief GPT input capture edge */ +typedef enum _gpt_input_capture_edge +{ + kGPT_RisingEdge = 0U, /*!< Capture on rising edge only */ + kGPT_FallingEdge, /*!< Capture on falling edge only */ +} gpt_input_capture_edge_t; + +/*! @brief GPT input capture edge */ +typedef enum _gpt_input_capture_filter +{ + kGPT_InputCapFilter_None = 0U, /*!< No filter */ + kGPT_InputCapFilter_2Cycles, /*!< Filter 2 consecutive cycles */ + kGPT_InputCapFilter_3Cycles, /*!< Filter 3 consecutive cycles */ + kGPT_InputCapFilter_4Cycles, /*!< Filter 4 consecutive cycles */ + kGPT_InputCapFilter_5Cycles, /*!< Filter 5 consecutive cycles */ + kGPT_InputCapFilter_6Cycles, /*!< Filter 6 consecutive cycles */ + kGPT_InputCapFilter_7Cycles, /*!< Filter 7 consecutive cycles */ +} gpt_input_capture_filter_t; + +/*! @brief GPT clock source selection*/ +typedef enum _gpt_clock_source +{ + kGPT_SystemClock = 0U, /*!< System clock from PMU selected */ + kGPT_ExternalClock /*!< External clock from pad */ +} gpt_clock_source_t; + +/*! @brief GPT clock divider factor selection for the clock source. */ +typedef enum _gpt_clock_div +{ + kGPT_ClkDiv_Divide_1 = 0U, /*!< Divide by 1 */ + kGPT_ClkDiv_Divide_2, /*!< Divide by 2 */ + kGPT_ClkDiv_Divide_4, /*!< Divide by 4 */ + kGPT_ClkDiv_Divide_8, /*!< Divide by 8 */ + kGPT_ClkDiv_Divide_16, /*!< Divide by 16 */ + kGPT_ClkDiv_Divide_32, /*!< Divide by 32 */ + kGPT_ClkDiv_Divide_64, /*!< Divide by 64 */ + kGPT_ClkDiv_Divide_128, /*!< Divide by 128 */ + kGPT_ClkDiv_Divide_256, /*!< Divide by 256 */ + kGPT_ClkDiv_Divide_512, /*!< Divide by 512 */ + kGPT_ClkDiv_Divide_1024, /*!< Divide by 1024 */ + kGPT_ClkDiv_Divide_2048, /*!< Divide by 2048 */ + kGPT_ClkDiv_Divide_4096, /*!< Divide by 4096 */ + kGPT_ClkDiv_Divide_8192, /*!< Divide by 8192 */ + kGPT_ClkDiv_Divide_16384, /*!< Divide by 16384 */ + kGPT_ClkDiv_Divide_32768, /*!< Divide by 32768 */ +} gpt_clock_div_t; + +/*! + * @brief List of GPT interrupts + */ +typedef enum _gpt_interrupt_enable +{ + kGPT_Chnl0InterruptEnable = (1U << 0), /*!< Channel 0 interrupt */ + kGPT_Chnl1InterruptEnable = (1U << 1), /*!< Channel 1 interrupt */ + kGPT_Chnl2InterruptEnable = (1U << 2), /*!< Channel 2 interrupt */ + kGPT_Chnl3InterruptEnable = (1U << 3), /*!< Channel 3 interrupt */ + kGPT_Chnl4InterruptEnable = (1U << 4), /*!< Channel 4 interrupt */ + kGPT_Chnl5InterruptEnable = (1U << 5), /*!< Channel 5 interrupt */ + + kGPT_Chnl0ErrInterruptEnable = (1U << 8), /*!< Channel 0 error interrupt */ + kGPT_Chnl1ErrInterruptEnable = (1U << 9), /*!< Channel 1 error interrupt */ + kGPT_Chnl2ErrInterruptEnable = (1U << 10), /*!< Channel 2 error interrupt */ + kGPT_Chnl3ErrInterruptEnable = (1U << 11), /*!< Channel 3 error interrupt */ + kGPT_Chnl4ErrInterruptEnable = (1U << 12), /*!< Channel 4 error interrupt */ + kGPT_Chnl5ErrInterruptEnable = (1U << 13), /*!< Channel 5 error interrupt */ + + kGPT_TimeOverflowInterruptEnable = (1U << 16), /*!< Time overflow interrupt */ + + kGPT_Dma0OverflowInterruptEnable = (1U << 24), /*!< DMA0 overflow interrupt */ + kGPT_Dma1OverflowInterruptEnable = (1U << 25), /*!< DMA1 overflow interrupt */ + + kGPT_AllInterruptsEnable = 0x3013F3FUL, /*!< All interrupts */ +} gpt_interrupt_enable_t; + +/*! + * @brief List of GPT flags + */ +typedef enum _gpt_status_flags +{ + kGPT_Chnl0Flag = (1U << 0), /*!< Channel 0 flag */ + kGPT_Chnl1Flag = (1U << 1), /*!< Channel 1 flag */ + kGPT_Chnl2Flag = (1U << 2), /*!< Channel 2 flag */ + kGPT_Chnl3Flag = (1U << 3), /*!< Channel 3 flag */ + kGPT_Chnl4Flag = (1U << 4), /*!< Channel 4 flag */ + kGPT_Chnl5Flag = (1U << 5), /*!< Channel 5 flag */ + + kGPT_Chnl0ErrFlag = (1U << 8), /*!< Channel 0 error flag */ + kGPT_Chnl1ErrFlag = (1U << 9), /*!< Channel 1 error flag */ + kGPT_Chnl2ErrFlag = (1U << 10), /*!< Channel 2 error flag */ + kGPT_Chnl3ErrFlag = (1U << 11), /*!< Channel 3 error flag */ + kGPT_Chnl4ErrFlag = (1U << 12), /*!< Channel 4 error flag */ + kGPT_Chnl5ErrFlag = (1U << 13), /*!< Channel 5 error flag */ + + kGPT_TimeOverflowFlag = (1U << 16), /*!< Time overflow flag */ + + kGPT_Dma0OverflowFlag = (1U << 24), /*!< DMA0 overflow flag */ + kGPT_Dma1OverflowFlag = (1U << 25), /*!< DMA1 overflow flag */ + + kGPT_AllFlags = 0x3013F3FUL, /*!< All flags */ +} gpt_status_flags_t; + +/*! @brief GPT counter update mode */ +typedef enum _gpt_cnt_update_mode +{ + kGPT_CntUpdateMode_Normal = 0U, /*!< Used in any ratio between counter clock and APB clock. Every 3-4 counter ticks + are updated to CNT_VAL */ + kGPT_CntUpdateMode_Fast = 1U, /*!< Used when counter clock is at least 5 times slower than APB clock. Every counter + tick is updated to CNT_VAL */ + kGPT_CntUpdateMode_Off = 3U, /*!< Do not update to CNT_VAL */ +} gpt_cnt_update_mode_t; + +/*! @brief GPT sample clock divider factor selection. */ +typedef enum _gpt_input_capture_div +{ + kGPT_SampClkDiv_Divide_1 = 0U, /*!< Divide by 1 */ + kGPT_SampClkDiv_Divide_2, /*!< Divide by 2 */ + kGPT_SampClkDiv_Divide_4, /*!< Divide by 4 */ + kGPT_SampClkDiv_Divide_8, /*!< Divide by 8 */ + kGPT_SampClkDiv_Divide_16, /*!< Divide by 16 */ + kGPT_SampClkDiv_Divide_32, /*!< Divide by 32 */ + kGPT_SampClkDiv_Divide_64, /*!< Divide by 64 */ + kGPT_SampClkDiv_Divide_128, /*!< Divide by 128 */ +} gpt_input_capture_div_t; + +/*! + * @brief GPT configuration structure + * + * This structure holds the configuration settings for the GPT peripheral. To initialize this + * structure to reasonable defaults, call the GPT_GetDefaultConfig() function and pass a + * pointer to the configuration structure instance. + * + * The configuration structure can be made constant so as to reside in flash. + */ +typedef struct _gpt_config +{ + gpt_clock_source_t src; /*!< GPT clock source selection. */ + gpt_clock_div_t div; /*!< GPT clock divider value for counter. */ + uint8_t prescale; /*!< GPT clock prescale value for counter, divided by (prescale + 1) */ + gpt_cnt_update_mode_t cntUpdateMode; /*!< Counter value update mode. */ + bool stopCntInDebug; /*!< true: In debug mode, stop the counters. + false: In debug mode, counters are not affected. */ + uint32_t cntUppVal; /*!< If counter reaches this value, the counter will overflow to 0. */ + gpt_input_capture_div_t icDiv; /*!< Input capture sample clock divider. */ + gpt_input_capture_filter_t icFilter; /*!< Input capture filter cycles in sampling ticks. */ +} gpt_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungates the GPT clock and configures the peripheral for basic operation. + * + * @note This API should be called at the beginning of the application which is using the GPT driver. + * If the GPT instance has only TPM features, please use the TPM driver. + * + * @param base GPT peripheral base address + * @param config Pointer to the user configuration structure. + * + * @return kStatus_Success indicates success; Else indicates failure. + */ +status_t GPT_Init(GPT_Type *base, const gpt_config_t *config); + +/*! + * @brief Gates the GPT clock. + * + * @param base GPT peripheral base address + */ +void GPT_Deinit(GPT_Type *base); + +/*! + * @brief Fills in the GPT configuration structure with the default settings. + * + * The default values are: + * @code + * config->src = kGPT_SystemClock; + * config->div = kGPT_ClkDiv_Divide_1; + * config->prescale = 0U; + * config->cntUpdateMode = kGPT_CntUpdateMode_Normal; + * config->stopCntInDebug = true; + * config->cntUppVal = 0xFFFFFFFFU; + * config->icDiv = kGPT_SampClkDiv_Divide_1; + * config->icFilter = kGPT_InputCapFilter_None; + * @endcode + * @param config Pointer to the user configuration structure. + */ +void GPT_GetDefaultConfig(gpt_config_t *config); + +/*! @}*/ + +/*! + * @name Channel mode operations + * @{ + */ + +/*! + * @brief Enables capturing an input signal on the channel using the function parameters. + * + * When the edge specified in the captureMode argument occurs on the channel, the GPT counter is + * captured into the CMR0 register. The user has to read the CMR0 register separately to get this + * value. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + * @param captureMode Specifies which edge to capture + */ +void GPT_SetupInputCapture(GPT_Type *base, gpt_chnl_t chnlNumber, gpt_input_capture_edge_t captureMode); + +/*! + * @brief Trigger input capturing by software. Edge and filter is ignored. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + */ +void GPT_TriggerInputCapture(GPT_Type *base, gpt_chnl_t chnlNumber); + +/*! + * @brief Get captured value. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + * @return The captured counter value. + */ +uint32_t GPT_GetCapturedValue(GPT_Type *base, gpt_chnl_t chnlNumber); + +/*! + * @brief Configures one-shot pulse on the channel. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + * @param pol Channel output polarity reset value. + * @param delayTicks Delay width before triggering the pulse, the uint of this value is timer ticks. + * @param dutyTicks Pulse width, the uint of this value is timer ticks. + */ +void GPT_SetupOneshotPulse( + GPT_Type *base, gpt_chnl_t chnlNumber, gpt_chnl_pol_t pol, uint32_t delayTicks, uint32_t dutyTicks); + +/*! + * @brief Configures one-shot edge on the channel. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number + * @param pol Channel output polarity reset value. + * @param delayTicks Delay width before changing the edge, the uint of this value is timer ticks. + */ +void GPT_SetupOneshotEdge(GPT_Type *base, gpt_chnl_t chnlNumber, gpt_chnl_pol_t pol, uint32_t delayTicks); + +/*! + * @brief Configures the PWM signal parameters. + * + * Call this function to configure the PWM signal period, mode, duty cycle, and edge. Use this + * function to configure all GPT channels that are used to output a PWM signal. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * @param pol PWM output polarity reset value. + * @param dutyPercent PWM pulse width, value should be between 0 to 100 + * @param mode PWM operation mode, options available in enumeration ::gpt_pwm_mode_t + * @param pwmFreq_Hz PWM signal frequency in Hz + * @param srcClock_Hz GPT counter clock in Hz + * + * @return kStatus_Success if the PWM setup was successful + * kStatus_Error on failure + */ +status_t GPT_SetupPwm(GPT_Type *base, + gpt_chnl_t chnlNumber, + gpt_chnl_pol_t pol, + uint32_t dutyPercent, + gpt_pwm_mode_t mode, + uint32_t pwmFreq_Hz, + uint32_t srcClock_Hz); + +/*! + * @brief Configures the PWM mode parameters. + * + * Call this function to configure the PWM signal mode, duty cycle in ticks, and edge. Use this + * function to configure all GPT channels that are used to output a PWM signal. + * Please note that: This API is similar with GPT_SetupPwm() API, but will not set the timer period, + * and this API will set channel match value in timer ticks, not period percent. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * @param pol PWM output polarity reset value. + * @param periodTicks PWM period width, the uint of this value is timer ticks. + * @param dutyTicks PWM pulse width, the uint of this value is timer ticks. + * @param mode PWM operation mode, options available in enumeration ::gpt_pwm_mode_t + * + * @return kStatus_Success if the PWM setup was successful + * kStatus_Error on failure + */ +status_t GPT_SetupPwmMode(GPT_Type *base, + gpt_chnl_t chnlNumber, + gpt_chnl_pol_t pol, + uint32_t periodTicks, + uint32_t dutyTicks, + gpt_pwm_mode_t mode); + +/*! + * @brief Updates the duty cycle of an active PWM signal. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * @param dutyPercent New PWM pulse width; The value should be between 0 to 100 + * 0=inactive signal(0% duty cycle)... + * 100=active signal (100% duty cycle) + * + * @return kStatus_Success if the PWM update was successful + * kStatus_Error on failure + */ +status_t GPT_UpdatePwmDutycycle(GPT_Type *base, gpt_chnl_t chnlNumber, uint8_t dutyPercent); + +/*! + * @brief Pause the PWM signal. + * + * @param base GPT peripheral base address + * @param chnlNumber The channel number. + * + * @return kStatus_Success if the PWM update was successful + * kStatus_Error on failure + */ +status_t GPT_PausePwm(GPT_Type *base, gpt_chnl_t chnlNumber); + +/*! @}*/ + +/*! + * @name Interrupt Interface + * @{ + */ + +/*! + * @brief Enables the selected GPT interrupts. + * + * @param base GPT peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::gpt_interrupt_enable_t + */ +void GPT_EnableInterrupts(GPT_Type *base, uint32_t mask); + +/*! + * @brief Disables the selected GPT interrupts. + * + * @param base GPT peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::gpt_interrupt_enable_t + */ +void GPT_DisableInterrupts(GPT_Type *base, uint32_t mask); + +/*! + * @brief Gets the enabled GPT interrupts. + * + * @param base GPT peripheral base address + * + * @return The enabled interrupts. This is the logical OR of members of the + * enumeration ::gpt_interrupt_enable_t + */ +uint32_t GPT_GetEnabledInterrupts(GPT_Type *base); + +/*! @}*/ + +/*! + * @name Status Interface + * @{ + */ + +/*! + * @brief Gets the GPT status flags. + * + * @param base GPT peripheral base address + * + * @return The status flags. This is the logical OR of members of the + * enumeration ::gpt_status_flags_t + */ +uint32_t GPT_GetStatusFlags(GPT_Type *base); + +/*! + * @brief Clears the GPT status flags. + * + * @param base GPT peripheral base address + * @param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::gpt_status_flags_t + */ +void GPT_ClearStatusFlags(GPT_Type *base, uint32_t mask); + +/*! @}*/ + +/*! + * @name Read and write the timer period + * @{ + */ + +/*! + * @brief Sets the timer period in units of ticks for the GPT instance. + * + * Timers counts from 0 until it equals the count value set here. The count value is written to + * the CNT_UPP_VAL register. + * The period update take effects during the next counter-reach-upper event. To guarantee an + * immediate update, use GPT_ResetTimer() after setting the period. + * + * @note + * Call the utility macros provided in the fsl_common.h to convert usec or msec to ticks. + * + * @param base GPT peripheral base address + * @param ticks A timer period in units of ticks, which should be equal or greater than 1. + */ +void GPT_SetTimerPeriod(GPT_Type *base, uint32_t ticks); + +/*! + * @brief Reads the current timer counting value. + * + * This function returns the real-time timer counting value in a range from 0 to a + * timer period. + * + * @note Call the utility macros provided in the fsl_common.h to convert ticks to usec or msec. + * + * @param base GPT peripheral base address + * + * @return The current counter value in ticks + */ +uint32_t GPT_GetCurrentTimerCount(GPT_Type *base); + +/*! @}*/ + +/*! + * @name Timer Start and Stop + * @{ + */ + +/*! + * @brief Starts the GPT counter. + * + * @param base GPT peripheral base address + */ +void GPT_StartTimer(GPT_Type *base); + +/*! + * @brief Stops the GPT counter. + * + * @param base GPT peripheral base address + */ +void GPT_StopTimer(GPT_Type *base); + +/*! + * @brief Performs a GPT counter reset. + * + * @param base GPT peripheral base address + */ +void GPT_ResetTimer(GPT_Type *base); + +/*! @}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_GPT_H_*/ diff --git a/drivers/mw320/i2c/driver_mw_i2c.cmake b/drivers/mw320/i2c/driver_mw_i2c.cmake new file mode 100644 index 000000000..a740f0275 --- /dev/null +++ b/drivers/mw320/i2c/driver_mw_i2c.cmake @@ -0,0 +1,14 @@ +#Description: MW_I2C Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_i2c component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_i2c.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/i2c/driver_mw_i2c_dmac.cmake b/drivers/mw320/i2c/driver_mw_i2c_dmac.cmake new file mode 100644 index 000000000..a2284474a --- /dev/null +++ b/drivers/mw320/i2c/driver_mw_i2c_dmac.cmake @@ -0,0 +1,15 @@ +#Description: MW_I2C DMAC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_i2c_dmac component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_i2c_dmac.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_mw_dmac) +include(driver_mw_i2c) diff --git a/drivers/mw320/i2c/fsl_i2c.c b/drivers/mw320/i2c/fsl_i2c.c new file mode 100644 index 000000000..19a2ae906 --- /dev/null +++ b/drivers/mw320/i2c/fsl_i2c.c @@ -0,0 +1,1709 @@ +/* + * Copyright 2020,2021 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#include "fsl_i2c.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.i2c" +#endif + +/*! brief i2c master transfer state, used in I2C driver internal master transfer state machine. */ +enum _i2c_master_transfer_states +{ + kMasterIdleState = 0x0U, /*!< I2C bus idle. */ + kMasterSendCommandState = 0x1U, /*!< Send command byte phase. */ + kMasterSendDataState = 0x2U, /*!< Send data transfer phase. */ + kMasterReceiveDataState = 0x3U, /*!< Receive data transfer phase. */ + kMasterWaitForCompletionState = 0x4U, /*!< Wait for stop signal detected to complete the transfer phase. */ +}; + +/******************************************************************************* + * Driver Internal Functions Declaration + ******************************************************************************/ +/*! + * @brief Wait until there is room in tx FIFO and checks bus errors in master mode. + * + * @note: The API only checks the error status that occured on bus, error caused by user misuse such as + * kI2C_RxUnderflowInterruptFlag, kI2C_TxOverflowInterruptFlag or kI2C_MasterOperateWhenDisabledFlag will not be checked + * + * @param base The I2C peripheral base address. + * @retval #kStatus_I2C_RxHardwareOverrun Master rx FIFO overflow + * @retval #kStatus_I2C_GeneralCall_Nak Master nacked after issueing general call + * @retval #kStatus_I2C_ArbitrationLost Master lost arbitration when addressing + * @retval #kStatus_I2C_Nak Master nacked during data transmitting + * @retval #kStatus_I2C_Addr_Nak Master nacked during slave probing + */ +static status_t I2C_MasterWaitForTxReady(I2C_Type *base); + +/*! + * @brief Wait until there is room in tx FIFO and checks bus errors in slave mode. + * + * @note: The API only checks the error status that occured on bus, error caused by user misuse such as + * kI2C_RxUnderflowInterruptFlag, kI2C_TxOverflowInterruptFlag, kI2C_SlaveReadWhenRequestedDataFlag or + * kI2C_SlaveDisabledWhileBusy will not be checked + * + * @param base The I2C peripheral base address. + * @retval #kStatus_Success + * @retval #kStatus_I2C_RxHardwareOverrun Slave rx FIFO overflow + * @retval #kStatus_I2C_TxFifoFlushed Slave is addressed and is requested data but there are still old data remaining in + * tx FIFO + * @retval #kStatus_I2C_ArbitrationLost Data on SDA is not the same as slave transmitted + * @retval #kStatus_I2C_Nak Slave nacked by master + */ +static status_t I2C_SlaveWaitForTxReady(I2C_Type *base); + +/*! + * @brief Prepares the master transfer software state machine. + * @param base I2C base pointer + * @param handle pointer to i2c_master_transfer_handle_t structure which stores the transfer state. + */ +static void I2C_MasterInitTransferStateMachine(I2C_Type *base, i2c_master_handle_t *handle); + +/*! + * @brief Runs master transfer softerware state machine to perform transfer. + * + * Master software state machine controls transfer state, perfroms master data transfer according to user's transfer + * configuration. For example, if user sets the transfer configuration @ref i2c_master_transfer_t to perform master read + * with command, this function will execute state in such order: kMasterSendCommandState(Send subaddress), + * kMasterReceiveDataState(Recieve data). + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_transfer_handle_t structure which stores the transfer state + * @param isDone input param to get whether transfer is done, true is done + * @retval kStatus_Success No error found. + * @retval #kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval #kStatus_I2C_Nak Received Nak error. + * @retval #kStatus_I2C_Addr_Nak Received Nak during addressing error. + * @retval #kStatus_I2C_GeneralCall_Nak Master Nacked after issueing general call + * @retval #kStatus_I2C_Timeout Transfer error, timeout happens when waiting for status flags to change. + */ +static status_t I2C_MasterRunTransferStateMachine(I2C_Type *base, i2c_master_handle_t *handle, bool *isDone); + +/*! + * @brief Master interrupt handler. + * + * @param base I2C base pointer. + * @param i2cHandle pointer to i2c_master_handle_t structure. + */ +static void I2C_MasterTransferHandleIRQ(I2C_Type *base, void *i2cHandle); + +/*! + * @brief Slave interrupt handler. + * + * @param base I2C base pointer. + * @param i2cHandle pointer to i2c_slave_handle_t structure which stores the transfer state + */ +static void I2C_SlaveTransferHandleIRQ(I2C_Type *base, void *i2cHandle); + +/*! + * @brief Shared IRQ handler that can call both master and slave ISRs. + * + * The master and slave ISRs are called through function pointers in order to decouple + * this code from the ISR functions. Without this, the linker would always pull in both + * ISRs and every function they call, even if only the functional API was used. + * + * @param base I2C base pointer. + * @param instance The I2C peripheral instance number. + */ +static void I2C_CommonIRQHandler(I2C_Type *base, uint32_t instance); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! brief Pointers to i2c bases for each instance. */ +static I2C_Type *const s_I2cBases[] = I2C_BASE_PTRS; + +/*! brief Pointers to i2c IRQ number for each instance. */ +const IRQn_Type s_I2cIrqs[] = I2C_IRQS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/*! brief Pointers to i2c clocks for each instance. */ +static const clock_ip_name_t i2cClocks[] = I2C_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/*! brief Pointers to i2c handles for each instance. */ +void *s_i2cHandles[ARRAY_SIZE(s_I2cBases)]; + +/*! brief Pointer to master IRQ handler for each instance. */ +i2c_isr_t s_i2cMasterIsr; + +/*! brief Pointer to slave IRQ handler for each instance. */ +static i2c_isr_t s_i2cSlaveIsr; + +/******************************************************************************* + * Codes + ******************************************************************************/ +static status_t I2C_MasterWaitForTxReady(I2C_Type *base) +{ + status_t result = kStatus_Success; + uint32_t status; + +#if I2C_RETRY_TIMES + uint32_t waitTimes = I2C_RETRY_TIMES; +#endif + do + { + /* Check for error flags. */ + status = I2C_MasterGetStatusFlags(base); + result = I2C_MasterCheckAndClearError(base, status); + if (kStatus_Success != result) + { + break; + } +#if I2C_RETRY_TIMES + /* Wait until tx FIFO is not full */ + } while (((base->IC_STATUS & I2C_IC_STATUS_TFNF) == 0U) && (0U != --waitTimes)); + + if (0U == waitTimes) + { + result = kStatus_I2C_Timeout; + } +#else + /* Wait until tx FIFO is not full */ + } while ((base->IC_STATUS & I2C_IC_STATUS_TFNF_MASK) == 0U); +#endif + + return result; +} + +static status_t I2C_SlaveWaitForTxReady(I2C_Type *base) +{ + status_t result = kStatus_Success; + uint32_t status; + +#if I2C_RETRY_TIMES + uint32_t waitTimes = I2C_RETRY_TIMES; +#endif + do + { + /* Check for error flags. */ + status = I2C_SlaveGetStatusFlags(base); + result = I2C_SlaveCheckAndClearError(base, status); + if (kStatus_Success != result) + { + break; + } + /* Wait until master is requesting data */ +#if I2C_RETRY_TIMES + } while (((base->IC_RAW_INTR_STAT & I2C_IC_RAW_INTR_STAT_RD_REQ_MASK) == 0U) && (0U != --waitTimes)); + + if (0U == waitTimes) + { + result = kStatus_I2C_Timeout; + } +#else + } while ((base->IC_RAW_INTR_STAT & I2C_IC_RAW_INTR_STAT_RD_REQ_MASK) == 0U); +#endif + /* Clear read request flag */ + (void)base->IC_CLR_RD_REQ; + + return result; +} + +/*! + * brief Gets instance number for I2C module. + * + * param base I2C base pointer. + * retval The number of the instance. + */ +uint32_t I2C_GetInstance(I2C_Type *base) +{ + uint32_t instance; + for (instance = 0U; instance < ARRAY_SIZE(s_I2cBases); ++instance) + { + if (s_I2cBases[instance] == base) + { + break; + } + } + + assert(instance < ARRAY_SIZE(s_I2cBases)); + return instance; +} + +/*! + * brief Clears the I2C master status flags. + * + * param base I2C base pointer + * param statusFlags The status flag mask, can be a single flag or several flags in #_i2c_status_flags ORed + * together. + */ +void I2C_MasterClearStatusFlags(I2C_Type *base, uint32_t statusFlags) +{ + /* These 13 flags from kI2C_Master7bitAddressNackFlag to kI2C_MasterArbitrationLostFlag are cleared when + kI2C_TxAbortInterruptFlag is cleared, so add the kI2C_TxAbortInterruptFlag if not included in the mask. */ + if ((statusFlags & 0x3FFE0000UL) != 0U) + { + statusFlags |= (uint32_t)kI2C_TxAbortInterruptFlag; + } + if ((statusFlags & (uint32_t)kI2C_MasterAllClearFlags) != 0U) + { + /* Ignore other auto cleared flags. */ + statusFlags &= (uint32_t)kI2C_MasterAllClearFlags; + /* The software clearable bits are cleared individually by reading their corresponding whole register */ + /* Store the first register base's address */ + uint32_t const volatile *readReg = &base->IC_CLR_RX_UNDER; + uint8_t regNum; + /* Bit 0,1,2,3,4,6,8 except 2 and 4 are clearable */ + for (uint8_t i = 0U; i <= 10U; ++i) + { + /* If bit i is set, then read the corresponding whole register to clear it */ + if ((statusFlags & (0x1U << i)) != 0U) + { + regNum = i; + if (i == 3U) + { + regNum -= 1U; + } + else if (i > 5U) + { + regNum -= 2U; + } + /* Read the register */ + *(readReg + regNum); + } + } + } +} + +/*! + * brief Clears the I2C slave status flags. + * + * param base I2C base pointer + * param statusFlags The status flag mask, can be a single flag or several flags in #_i2c_slave_status_flags ORed + * together + */ +void I2C_SlaveClearStatusFlags(I2C_Type *base, uint32_t statusFlags) +{ + /* These 3 flags are cleared when kI2C_TxAbortInterruptFlag is cleared, so add the kI2C_TxAbortInterruptFlag if not + * included in the mask. */ + if ((statusFlags & (uint32_t)(kI2C_SlaveFlushTxFifoFlag | kI2C_SlaveArbitrationLostFlag | + kI2C_SlaveReadWhenRequestedDataFlag)) != 0U) + { + statusFlags |= (uint32_t)kI2C_TxAbortInterruptFlag; + } + if ((statusFlags & (uint32_t)kI2C_SlaveAllClearFlags) != 0U) + { + /* Ignore other auto cleared flags. */ + statusFlags &= (uint32_t)kI2C_SlaveAllClearFlags; + /* The software clearable bits are cleared individually by reading their corresponding whole register */ + /* Store the first register base's address */ + uint32_t const volatile *readReg = &base->IC_CLR_RX_UNDER; + uint8_t regNum; + /* Bit 0-11 except 2 and 4 are clearable */ + for (uint8_t i = 0U; i <= 11U; ++i) + { + /* If bit i is set, then read the corresponding whole register to clear it */ + if ((statusFlags & (0x1U << i)) != 0U) + { + regNum = i; + if (i == 3U) + { + regNum -= 1U; + } + else if (i >= 5U) + { + regNum -= 2U; + } + /* Read the register */ + *(readReg + regNum); + } + } + } +} + +/*! + * brief Sets the I2C master configuration structure to default values. + * + * The purpose of this API is to initialize the configuration structure to default value for @ref I2C_MasterInit to use. + * Use the unchanged structure in @ref I2C_MasterInit or modify the structure before calling @ref I2C_MasterInit. + * This is an example: + * code + * i2c_master_config_t config; + * I2C_MasterGetDefaultConfig(&config); + * I2C_MasterInit(I2C0, &config, 12000000U); + * endcode + * + * param masterConfig Pointer to the master configuration structure + */ +void I2C_MasterGetDefaultConfig(i2c_master_config_t *masterConfig) +{ + /* Initializes the configure structure to zero. */ + (void)memset(masterConfig, 0, sizeof(*masterConfig)); + + masterConfig->speed = kI2C_MasterSpeedStandard; + masterConfig->addressingMode = kI2C_AddressMatch7bit; + masterConfig->highSpeedMasterCodeAddress = 0x1U; + masterConfig->rxFifoWaterMark = 0U; + masterConfig->txFifoWaterMark = 8U; + masterConfig->dataHoldTime = 0x1U; + masterConfig->dataSetupTime = 0x64U; + masterConfig->glitchFilter = 0x6U; + masterConfig->glitchFilterHighSpeed = 0x2U; + masterConfig->enable = false; +} + +/*! + * brief Initializes the I2C peripheral to operate as master. + * + * This API initialize the I2C module for master operation. + * + * note If FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL is enbaled by user, the init function will not ungate I2C clock source + * before initialization, to avoid hardfault, user has to manually enable ungate the clock source before calling the API + * + * The configuration structure can be filled manully or be set with default values by calling + * ref I2C_MasterGetDefaultConfig. This is an example. + * code + * I2C_MasterGetDefaultConfig(&config); + * I2C_MasterInit(I2C0, &config, 12000000U); + * endcode + * + * param base I2C base pointer + * param masterConfig Pointer to the master configuration structure + * param sourceClock_Hz Frequency in Hertz of the I2C functional clock source + */ +void I2C_MasterInit(I2C_Type *base, const i2c_master_config_t *masterConfig, uint32_t sourceClock_Hz) +{ + assert((base != NULL) && (masterConfig != NULL) && (sourceClock_Hz != 0U)); + assert(masterConfig->txFifoWaterMark < I2C_GetTxFifoDepth(base)); + assert(masterConfig->rxFifoWaterMark < I2C_GetRxFifoDepth(base)); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the clock. */ + CLOCK_EnableClock(i2cClocks[I2C_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + I2C_MasterSetSpeedMode(base, masterConfig->speed, sourceClock_Hz); + I2C_MasterSetAddressingMode(base, masterConfig->addressingMode); + I2C_MasterSetHighSpeedAddress(base, masterConfig->highSpeedMasterCodeAddress); + I2C_SetRxWaterMark(base, masterConfig->rxFifoWaterMark); + I2C_SetTxWaterMark(base, masterConfig->txFifoWaterMark); + I2C_SetSdaHoldTime(base, masterConfig->dataHoldTime); + I2C_SetSdaSetupTime(base, masterConfig->dataSetupTime); + I2C_SetGlitchFilter(base, masterConfig->glitchFilter); + I2C_SetGlitchFilterHighSpeed(base, masterConfig->glitchFilterHighSpeed); + I2C_EnableMaster(base, true); + I2C_Enable(base, masterConfig->enable); +} + +/*! + * brief De-initializes the I2C peripheral. Call this API to disable the I2C module. + * + * param base I2C base pointer + */ +void I2C_MasterDeinit(I2C_Type *base) +{ + /* Wait until master is not active */ + while ((base->IC_STATUS & I2C_IC_STATUS_MST_ACTIVITY_MASK) != 0U) + { + } + /* Disable I2C module. */ + I2C_Enable(base, false); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Disable I2C clock. */ + CLOCK_DisableClock(i2cClocks[I2C_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ +} + +/*! + * brief Sets the I2C slave configuration structure to default values. + * + * The purpose of this API is to initialize the configuration structure for @ref I2C_SlaveInit to use. Use the unchanged + * initialized structure in @ref I2C_SlaveInit or modify the structure before calling @ref I2C_SlaveInit. + * This is an example. + * code + * i2c_slave_config_t config; + * config.slaveAdress = 0x7FU; + * I2C_SlaveGetDefaultConfig(&config); + * endcode + * + * param slaveConfig Pointer to the slave configuration structure + */ +void I2C_SlaveGetDefaultConfig(i2c_slave_config_t *slaveConfig) +{ + assert(slaveConfig != NULL); + + slaveConfig->addressingMode = kI2C_AddressMatch7bit; + slaveConfig->rxFifoWaterMark = 0U; + slaveConfig->txFifoWaterMark = 255U; + slaveConfig->dataHoldTime = 0x1U; + slaveConfig->dataSetupTime = 0x64U; + slaveConfig->ackGeneralCall = true; + slaveConfig->glitchFilter = 0x6U; + slaveConfig->glitchFilterHighSpeed = 0x2U; + slaveConfig->enable = false; +} + +/*! + * brief Initializes the I2C peripheral to operate as slave. + * + * This API initialize the I2C module for slave operation. User can also configure whether to enable the module in the + * function. + * + * note If FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL is enbaled by user, the init function will not ungate I2C clock source + * before initialization, to avoid hardfault, user has to manually ungate the clock source before calling the API + * + * The configuration structure can be filled manully or be set with default values by calling + * ref I2C_SlaveGetDefaultConfig. This is an example. + * code + * i2c_slave_config_t sConfig; + * I2C_SlaveGetDefaultConfig(&sConfig); + * sConfig.address = 0x2AU; + * I2C_SlaveInit(I2C0, &sConfig); + * endcode + * + * param base I2C base pointer + * param slaveConfig Pointer to the slave configuration structure + */ +void I2C_SlaveInit(I2C_Type *base, const i2c_slave_config_t *slaveConfig) +{ + assert((base != NULL) && (slaveConfig != NULL)); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Ungate the clock. */ + CLOCK_EnableClock(i2cClocks[I2C_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + + I2C_SlaveSetAddressingMode(base, slaveConfig->addressingMode, slaveConfig->slaveAddress); + I2C_SetRxWaterMark(base, slaveConfig->rxFifoWaterMark); + I2C_SetTxWaterMark(base, slaveConfig->txFifoWaterMark); + I2C_SetSdaHoldTime(base, slaveConfig->dataHoldTime); + I2C_SetSdaSetupTime(base, slaveConfig->dataSetupTime); + I2C_EnableAckGeneralCall(base, slaveConfig->ackGeneralCall); + I2C_SetGlitchFilter(base, slaveConfig->glitchFilter); + I2C_SetGlitchFilterHighSpeed(base, slaveConfig->glitchFilterHighSpeed); + I2C_EnableMaster(base, false); + I2C_Enable(base, slaveConfig->enable); +} + +/*! + * brief De-initializes the I2C peripheral. Call this API to disable the I2C module. + * + * param base I2C base pointer + */ +void I2C_SlaveDeinit(I2C_Type *base) +{ + /* Wait until slave is not active */ + while ((base->IC_STATUS & I2C_IC_STATUS_SLV_ACTIVITY_MASK) != 0U) + { + } + /* Disable I2C module. */ + I2C_Enable(base, false); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Disable I2C clock. */ + CLOCK_DisableClock(i2cClocks[I2C_GetInstance(base)]); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ +} + +/*! + * brief Sets the I2C transaction speed mode. + * + * After the I2C module is initialized as master, user can call this function to change the transfer baud rate. There + * are 3 speed modes to choos from, kI2C_MasterSpeedStandard for 100kbps, kI2C_MasterSpeedFast for 400kbps and + * kI2C_MasterSpeedHigh for 3.4Mbps. + * + * param base I2C base pointer. + * param speed Master transfer speed mode to be configured + * param sourceClock_Hz I2C peripheral clock frequency in Hz + */ +void I2C_MasterSetSpeedMode(I2C_Type *base, i2c_master_speed_mode_t speed, uint32_t sourceClock_Hz) +{ + assert((base != NULL) && ((uint8_t)speed != 0U) && (sourceClock_Hz != 0U)); + + /* Set speed mode */ + base->IC_CON = (base->IC_CON & ~I2C_IC_CON_SPEED_MASK) | I2C_IC_CON_SPEED((uint8_t)speed); + + uint16_t highCount; + uint16_t lowCount; + /* Configure clock count register */ + if (speed == kI2C_MasterSpeedStandard) + { + highCount = (5U * sourceClock_Hz / 100000U + 5U) / 10U; + lowCount = (5U * sourceClock_Hz / 100000U + 5U) / 10U; + base->IC_SS_SCL_HCNT = (uint32_t)highCount; + base->IC_SS_SCL_LCNT = (uint32_t)lowCount; + } + else if (speed == kI2C_MasterSpeedFast) + { + highCount = (sourceClock_Hz / 100000U + 5U) / 10U; + lowCount = (15U * sourceClock_Hz / 1000000U + 5U) / 10U; + base->IC_FS_SCL_HCNT = (uint32_t)highCount; + base->IC_FS_SCL_LCNT = (uint32_t)lowCount; + } + else + { + highCount = (4U * sourceClock_Hz / 1000000U + 5U) / 10U; + lowCount = (6U * sourceClock_Hz / 1000000U + 5U) / 10U; + base->IC_HS_SCL_HCNT = (uint32_t)highCount; + base->IC_HS_SCL_LCNT = (uint32_t)lowCount; + } +} + +/*! + * brief Convert provided status flags to status code, and clear any errors if present. + * + * note: The API only checks the error status that occured on bus, error caused by user misuse such as + * kI2C_RxUnderflowInterruptFlag, kI2C_TxOverflowInterruptFlag or kI2C_MasterOperateWhenDisabledFlag will not be checked + * + * param base The I2C peripheral base address. + * param status Status flags to check. + * retval #kStatus_Success + * retval #kStatus_I2C_RxHardwareOverrun Master rx FIFO overflow + * retval #kStatus_I2C_GeneralCall_Nak Master nacked after issueing general call + * retval #kStatus_I2C_ArbitrationLost Master lost arbitration when addressing + * retval #kStatus_I2C_Nak Master nacked during data transmitting + * retval #kStatus_I2C_Addr_Nak Master nacked during slave probing + */ +status_t I2C_MasterCheckAndClearError(I2C_Type *base, uint32_t status) +{ + status_t result = kStatus_Success; + status &= (uint32_t)kI2C_MasterErrorFlags; + if (0U != status) + { + /* Select the correct error code. Ordered by severity, with bus issues first. */ + if (0U != (status & (uint32_t)kI2C_RxOverflowInterruptFlag)) + { + /* Empty rx FIFO */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + result = kStatus_I2C_RxHardwareOverrun; + } + if (0U != (status & (uint32_t)kI2C_MasterGeneralCallNackFlag)) + { + result = kStatus_I2C_GeneralCall_Nak; + } + else if (0U != (status & (uint32_t)kI2C_MasterArbitrationLostFlag)) + { + result = kStatus_I2C_ArbitrationLost; + } + else if (0U != (status & (uint32_t)kI2C_MasterDataNackFlag)) + { + result = kStatus_I2C_Nak; + } + else if (0U != (status & (uint32_t)(kI2C_Master7bitAddressNackFlag | kI2C_Master10bitAddressNack1Flag | + kI2C_Master10bitAddressNack2Flag))) + { + result = kStatus_I2C_Addr_Nak; + } + else + { + /* Avoid MISRA 15.7 violation */ + } + + /* Clear the flags. */ + I2C_MasterClearStatusFlags(base, status); + } + else + { + /* Avoid MISRA 15.7 violation */ + } + + return result; +} + +/*! + * brief Sends a piece of data to I2C bus in master mode in blocking way. + * + * Call this function when using I2C as master to send certain bytes of data to bus. This function uses the blocking + * way, which means it does not return until all the data is sent to bus. + * + * note The I2C module generates START/STOP/RESTART automatically. When tx FIFO state changes from empty to not empty, + * start signal is generated; when tx FIFO is empty again, stop signal is generated; when read command follows a write + * command, restart signal is generated in between. So stop signal will be generated after this API returns, and before + * calling this API if tx FIFO is empty, start signal will be generated first automatically, if tx FIFO is not empty and + * the last command in tx FIFO is write, restart signal will be generated first automatically. + * + * param base I2C base pointer. + * param data The pointer to the data to be transmitted. + * param txSize The length in bytes of the data to be transmitted. + * retval kStatus_Success Successfully complete the data transmission. + * retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * retval kStatus_I2C_Nak Transfer error, receive NAK during transfer. + * retval kStatus_I2C_Addr_Nak Transfer error, receive NAK during addressing, only applies when tx FIFO is empty before + * calling this API. + * retval #kStatus_I2C_Timeout Transfer error, timeout happens when waiting for status flags to change. + */ +status_t I2C_MasterWriteBlocking(I2C_Type *base, const uint8_t *data, size_t txSize) +{ + assert(NULL != data); + + status_t result = kStatus_Success; + uint32_t statusFlags; + uint8_t *buf = (uint8_t *)data; + + /* Send data buffer */ + while (0U != (txSize--)) + { + /* Wait until there is room in the fifo. This also checks for errors. */ + result = I2C_MasterWaitForTxReady(base); + if (kStatus_Success != result) + { + break; + } + + I2C_WriteByte(base, *buf++); + } + + if (result == kStatus_Success) + { + statusFlags = I2C_MasterGetStatusFlags(base); + while ((statusFlags & (uint32_t)kI2C_TxFifoEmptyFlag) != 0U) + { + result = I2C_MasterCheckAndClearError(base, statusFlags); + if (result != kStatus_Success) + { + break; + } + else + { + statusFlags = I2C_MasterGetStatusFlags(base); + } + } + } + return result; +} + +/*! + * brief Receives a piece of data from I2C bus in master mode in blocking way. + * + * Call this function when using I2C as master to receive certain bytes of data from bus. This function uses the + * blocking way, which means it does not return until all the data is received or is nacked by slave. + * + * note When doing read operation, software needs to push dummy data to tx FIFO with read command to generate clock, + * plus I2C module generates START/STOP/RESTART automatically, meaning when tx FIFO state changes from empty to not + * empty, start signal is generated, when tx FIFO is empty again, stop signal is generated, when read command follows + * a write command, restart signal is generated in between. So stop signal will be generated after this API returns, + * and before calling this API if tx FIFO is empty, start signal will be generated first automatically, if tx FIFO is + * not empty and the last command in tx FIFO is write, restart signal will be generated first automatically. + * + * param base I2C base pointer. + * param data The pointer to the data to store the received data. + * param rxSize The length in bytes of the data to be received. + * retval kStatus_Success Successfully complete the data transmission. + * retval kStatus_I2C_Timeout Send stop signal failed, timeout. + */ +status_t I2C_MasterReadBlocking(I2C_Type *base, uint8_t *data, size_t rxSize) +{ + status_t result = kStatus_Success; + uint8_t txCountEach = 0U; + uint8_t rxCountEach = 0U; + uint32_t txSize = rxSize; + + /* Empty rx FIFO first */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + + while (txSize != 0U) + { + /* Calculate how many data can be pushed to tx FIFO */ + txCountEach = MIN((I2C_GetTxFifoDepth(base) - I2C_GetTxFifoDataCount(base)), txSize); + txSize -= txCountEach; + /* Push dummy to tx FIFO */ + while (txCountEach-- != 0U) + { + I2C_MasterWriteDummy(base); + } + /* Calculate how many data can be read from rx FIFO */ + rxCountEach = MIN(I2C_GetRxFifoDataCount(base), rxSize); + rxSize -= rxCountEach; + while (rxCountEach-- != 0U) + { + *data++ = I2C_ReadByte(base); + } + } + + while (rxSize-- != 0U) + { +#if I2C_RETRY_TIMES + uint32_t waitTimes = I2C_RETRY_TIMES; + while (((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) == 0U) && (waitTimes-- != 0U)) +#else + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) == 0U) +#endif + { + } + *data++ = I2C_ReadByte(base); + } + + return result; +} + +/*! + * brief Convert provided status flags to status code, and clear any errors if present. + * + * note: The API only checks the error status that occured on bus, error caused by user misuse such as + * kI2C_RxUnderflowInterruptFlag, kI2C_TxOverflowInterruptFlag, kI2C_SlaveReadWhenRequestedDataFlag or + * kI2C_SlaveDisabledWhileBusy will not be checked + * + * param base The I2C peripheral base address. + * param status Status flags to check. + * retval #kStatus_Success + * retval #kStatus_I2C_RxHardwareOverrun Slave rx FIFO overflow + * retval #kStatus_I2C_TxFifoFlushed Slave is addressed and is requested data but there are still old data remaining in + * tx FIFO retval #kStatus_I2C_ArbitrationLost Data on SDA is not the same as slave transmitted retval #kStatus_I2C_Nak + * Slave nacked by master + */ +status_t I2C_SlaveCheckAndClearError(I2C_Type *base, uint32_t status) +{ + status_t result = kStatus_Success; + status &= (uint32_t)kI2C_SlaveErrorFlags; + if (0U != status) + { + /* Select the correct error code. Ordered by severity, with bus issues first. */ + if (0U != (status & (uint32_t)kI2C_RxOverflowInterruptFlag)) + { + /* Empty rx FIFO */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + result = kStatus_I2C_RxHardwareOverrun; + } + if (0U != (status & (uint32_t)kI2C_SlaveFlushTxFifoFlag)) + { + result = kStatus_I2C_TxFifoFlushed; + } + else if (0U != (status & (uint32_t)kI2C_SlaveArbitrationLostFlag)) + { + result = kStatus_I2C_ArbitrationLost; + } + else if (0U != (status & (uint32_t)kI2C_SlaveNackInterruptFlag)) + { + result = kStatus_I2C_Nak; + } + else + { + /* Avoid MISRA 15.7 violation */ + } + + /* Clear the flags. */ + I2C_SlaveClearStatusFlags(base, status); + } + else + { + /* Avoid MISRA 15.7 violation */ + } + + return result; +} + +/*! + * brief Sends a piece of data to I2C bus in slave mode in blocking way. + * + * Call this funtion to let I2C slave poll register status until it is addressed, then slave sends txSize of data to bus + * until all the data has been sent to bus or untill it is nacked. + * + * param base I2C base pointer. + * param data The pointer to the data to be transferred. + * param txSize The length in bytes of the data to be transferred. + * retval #kStatus_Success + * retval #kStatus_I2C_TxFifoFlushed Slave is addressed and is requested data but there are still old data remaining in + * tx FIFO retval #kStatus_I2C_ArbitrationLost Data on SDA is not the same as slave transmitted retval #kStatus_I2C_Nak + * Slave nacked by master + */ +status_t I2C_SlaveWriteBlocking(I2C_Type *base, const uint8_t *data, size_t txSize) +{ + assert(NULL != data); + + status_t result = kStatus_Success; + uint8_t *buf = (uint8_t *)data; + + I2C_SlaveNackNextByte(base, false); + /* Send data buffer */ + while (0U != (txSize--)) + { + /* Wait until there is room in the fifo. This also checks for errors. */ + result = I2C_SlaveWaitForTxReady(base); + if (kStatus_Success != result) + { + break; + } + + I2C_WriteByte(base, *buf++); + } + /* For slave data is transmitted one by one after master read request is received, so after the last data is pushed + * to FIFO, there is no need to check whether it is nacked by master */ + return result; +} + +/*! + * brief Receives a piece of data from I2C bus in slave mode in blocking way. + * + * Call this funtion to let I2C slave poll register status until it is addressed, then slave receives rxSize of data + * until all the data has been received. + * + * param base I2C base pointer. + * param data The pointer to the data to store the received data. + * param rxSize The length in bytes of the data to be received. + * retval kStatus_Success Successfully complete data receive. + * retval kStatus_I2C_Timeout Wait status flag timeout. + */ +status_t I2C_SlaveReadBlocking(I2C_Type *base, uint8_t *data, size_t rxSize) +{ + status_t result = kStatus_Success; + uint8_t rxCountEach = 0U; + + /* Empty rx FIFO first */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + +#if I2C_RETRY_TIMES + uint32_t waitTimes = I2C_RETRY_TIMES; + while ((rxSize != 0U) && (waitTimes-- != 0U)) +#else + while (rxSize != 0U) +#endif + { + /* Calculate how many data can be read from rx FIFO */ + rxCountEach = MIN(I2C_GetRxFifoDataCount(base), rxSize); + rxSize -= rxCountEach; + while (rxCountEach-- != 0U) + { + *data++ = I2C_ReadByte(base); + } + } + + return result; +} + +/*! + * brief Performs a master polling transfer on the I2C bus. + * + * note The API does not return until the transfer succeeds or fails due to arbitration lost or receiving a NAK. + * + * param base I2C base pointer. + * param transferConfig Pointer to the transfer configuration structure. + * retval kStatus_Success Successfully complete the data transmission. + * retval #kStatus_I2C_Busy Previous transmission still not finished. + * retval #kStatus_I2C_Timeout Transfer error, timeout happens when waiting for status flags to change. + * retval #kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * retval #kStatus_I2C_Nak Transfer error, receive NAK during transfer. + * retval #kStatus_I2C_Addr_Nak Transfer error, receive NAK during slave probing. + * retval #kStatus_I2C_GeneralCall_Nak Transfer error, receive NAK after issueing general call. + */ +status_t I2C_MasterTransferBlocking(I2C_Type *base, i2c_master_transfer_t *transferConfig) +{ + assert(NULL != transferConfig); + assert(I2C_IsMaster(base)); + + if ((I2C_MasterGetStatusFlags(base) & (uint32_t)kI2C_BusBusyInterruptFlag) != 0U) + { + return kStatus_I2C_Busy; + } + + status_t result = kStatus_Success; + uint8_t commandBuffer[4U]; + + /* Enable module */ + I2C_Enable(base, true); + + if (transferConfig->slaveAddress == 0U) + { + I2C_MasterEnableGeneralCall(base, true); + } + else + { + I2C_MasterEnableGeneralCall(base, false); + I2C_MasterSetTargetAddress(base, transferConfig->slaveAddress); + } + + /* Empty rx FIFO first */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + + /* Send subaddress first, start will be issued automatically when tx FIFO is not empty */ + if (transferConfig->subaddressSize != 0U) + { + uint8_t cmdCount; + for (cmdCount = 1U; cmdCount <= transferConfig->subaddressSize; cmdCount++) + { + commandBuffer[cmdCount - 1U] = + (uint8_t)((transferConfig->subaddress >> (8U * (transferConfig->subaddressSize - cmdCount))) & 0xffU); + } + result = I2C_MasterWriteBlocking(base, &commandBuffer[0U], transferConfig->subaddressSize); + } + + /* Return if error. */ + if (kStatus_Success != result) + { + if (result == kStatus_I2C_Nak) + { + result = kStatus_I2C_Addr_Nak; + } + return result; + } + + if (transferConfig->direction == kI2C_Write) + { + result = I2C_MasterWriteBlocking(base, transferConfig->data, transferConfig->dataSize); + } + else + { + result = I2C_MasterReadBlocking(base, transferConfig->data, transferConfig->dataSize); + } + + /* Wait until stop signal is issued automatically. */ + while ((base->IC_RAW_INTR_STAT & I2C_IC_RAW_INTR_STAT_STOP_DET_MASK) == 0U) + { + } + + /* Clear all status */ + I2C_MasterClearStatusFlags(base, (uint32_t)kI2C_MasterAllClearFlags); + + return result; +} + +/*! + * brief Initializes the I2C master transfer in interrupt way. + * + * This function is responsible for initializig master transfer handle, installing user callback, registering master + * IRQ handling function and opening global interrupt. + * + * param base I2C base pointer + * param handle pointer to i2c_master_transfer_handle_t structure to store the transfer state + * param callback pointer to user callback function + * param userData User configurable pointer to any data, function, structure etc that user wish to use in the callback + */ +void I2C_MasterTransferCreateHandle(I2C_Type *base, + i2c_master_handle_t *handle, + i2c_master_transfer_callback_t callback, + void *userData) +{ + assert(NULL != handle); + /* Clear out the handle. */ + (void)memset(handle, 0, sizeof(*handle)); + + uint32_t instance; + /* Look up instance number */ + instance = I2C_GetInstance(base); + + /* Save callback and userData. */ + handle->completionCallback = callback; + handle->userData = userData; + + /* Save the handle into static handle array */ + s_i2cHandles[instance] = handle; + /* Save IRQ handler into static ISR function pointer. */ + s_i2cMasterIsr = I2C_MasterTransferHandleIRQ; + + /* Disable internal IRQs and enable global IRQ. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + (void)EnableIRQ(s_I2cIrqs[instance]); +} + +/*! + * brief Initiates a master transfer on the I2C bus in interrupt way. + * + * note Transfer in interrupt way is non-blocking which means this API returns immediately after transfer initiates. + * User can call @ref I2C_MasterTransferGetCount to get the count of data that master has transmitted/received and check + * transfer status. If the return status is kStatus_NoTransferInProgress, the transfer is finished. Also if user + * installs a user callback when calling @ref I2C_MasterTransferCreateHandle before, the callback will be invoked when + * transfer finishes. + * + * param base I2C base pointer + * param handle pointer to i2c_master_transfer_handle_t structure which stores the transfer state. + * param transfer Pointer to the transfer configuration structure. + * retval kStatus_Success Successfully start the data transmission. + * retval #kStatus_I2C_Busy Previous transmission still not finished. + */ +status_t I2C_MasterTransferNonBlocking(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *transfer) +{ + assert((NULL != handle) && (NULL != transfer)); + + /* Return busy if another transaction is in progress. */ + if ((handle->state != (uint8_t)kMasterIdleState) || + ((I2C_MasterGetStatusFlags(base) & (uint32_t)kI2C_BusBusyInterruptFlag) != 0U)) + { + return kStatus_I2C_Busy; + } + + /* Disable I2C IRQ sources while we configure stuff. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + + /* Save transfer into handle. */ + handle->transfer = *transfer; + + /* Generate commands to send. */ + I2C_MasterInitTransferStateMachine(base, handle); + /* Clear all flags. */ + I2C_MasterClearStatusFlags(base, (uint32_t)kI2C_MasterAllClearFlags); + /* Enable I2C internal IRQ sources */ + I2C_EnableInterrupts(base, (uint16_t)(kI2C_TxRequestInterruptEnable | kI2C_TxAbortInterruptEnable)); + + return kStatus_Success; +} + +/*! + * brief Gets the master transfer count and status during a interrupt transfer. + * + * param base I2C base pointer. + * param handle pointer to i2c_master_handle_t structure which stores the transfer state. + * param count Pointer to number of bytes transferred so far by the non-blocking transaction. + * retval kStatus_InvalidArgument count is Invalid. + * retval kStatus_NoTransferInProgress Curent no transfer is in progress. + * retval kStatus_Success Successfully obtained the count. + */ +status_t I2C_MasterTransferGetCount(I2C_Type *base, i2c_master_handle_t *handle, size_t *count) +{ + assert(NULL != handle); + status_t result = kStatus_Success; + if (NULL == count) + { + result = kStatus_InvalidArgument; + } + /* Catch when there is not an active transfer. */ + else if (handle->state == (uint8_t)kMasterIdleState) + { + *count = 0U; + result = kStatus_NoTransferInProgress; + } + else + { + /* Cache some fields with IRQs disabled. This ensures all field values */ + /* are synchronized with each other during an ongoing transfer. */ + uint16_t irqs = I2C_GetEnabledInterrupts(base); + I2C_DisableInterrupts(base, irqs); + + /* Get transfer count based on current transfer state. */ + switch (handle->state) + { + case (uint8_t)kMasterIdleState: + case (uint8_t)kMasterSendCommandState: + *count = 0; + break; + + case (uint8_t)kMasterSendDataState: + *count = handle->transfer.dataSize - handle->transmitSize - I2C_GetTxFifoDataCount(base); + break; + + case (uint8_t)kMasterReceiveDataState: + *count = handle->transfer.dataSize - handle->receiveSize; + break; + + case (uint8_t)kMasterWaitForCompletionState: + if (handle->transfer.direction == kI2C_Write) + { + *count = handle->transfer.dataSize - I2C_GetTxFifoDataCount(base); + } + else + { + *count = handle->transfer.dataSize; + } + break; + + default: + assert(false); + break; + } + I2C_EnableInterrupts(base, irqs); + } + return result; +} + +/*! + * brief Aborts an in-process transfer in interrupt way. + * + * note This API can be called at any time after a transfer of interrupt way initiates and before it finishes to abort + * the transfer early. + * + * param base I2C base pointer. + * param handle pointer to i2c_master_handle_t structure which stores the transfer state + */ +void I2C_MasterTransferAbort(I2C_Type *base, i2c_master_handle_t *handle) +{ + if (handle->state != (uint8_t)kMasterIdleState) + { + /* Disable internal IRQ enables. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + + /* Disable the module to reset FIFO. */ + I2C_Enable(base, false); + + /* Reset handle. */ + handle->state = (uint8_t)kMasterIdleState; + } +} + +static void I2C_MasterInitTransferStateMachine(I2C_Type *base, i2c_master_handle_t *handle) +{ + /* Enable module */ + I2C_Enable(base, true); + + if (handle->transfer.slaveAddress == 0U) + { + I2C_MasterEnableGeneralCall(base, true); + } + else + { + I2C_MasterEnableGeneralCall(base, false); + I2C_MasterSetTargetAddress(base, handle->transfer.slaveAddress); + } + + /* Empty rx FIFO first */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + + handle->transmitSize = handle->transfer.dataSize; + handle->receiveSize = handle->transfer.dataSize; + + if (handle->transfer.subaddressSize != 0U) + { + handle->state = kMasterSendCommandState; + } + else if (handle->transfer.direction == kI2C_Write) + { + handle->state = kMasterSendDataState; + } + else + { + handle->state = kMasterReceiveDataState; + } +} + +static void I2C_MasterTransferHandleIRQ(I2C_Type *base, void *i2cHandle) +{ + assert(i2cHandle != NULL); + i2c_master_handle_t *handle = (i2c_master_handle_t *)i2cHandle; + bool isDone = false; + status_t result; + + if (handle->state != (uint8_t)kMasterIdleState) + { + result = I2C_MasterRunTransferStateMachine(base, handle, &isDone); + + if ((result != kStatus_Success) || isDone) + { + /* Disable internal IRQ enables. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + /* Clear all status */ + I2C_MasterClearStatusFlags(base, (uint32_t)kI2C_MasterAllClearFlags); + /* Set handle to idle state. */ + handle->state = (uint8_t)kMasterIdleState; + /* Handle error */ + if (result != kStatus_Success) + { + /* Disable and re-enable the module to reset FIFO. */ + I2C_Enable(base, false); + I2C_Enable(base, true); + } + + /* Invoke callback. */ + if (NULL != handle->completionCallback) + { + handle->completionCallback(base, handle, result, handle->userData); + } + } + } +} + +static status_t I2C_MasterRunTransferStateMachine(I2C_Type *base, i2c_master_handle_t *handle, bool *isDone) +{ + status_t result = kStatus_Success; + uint32_t status; + uint8_t txFifoCount = I2C_GetTxFifoDataCount(base); + uint8_t txCount; + uint8_t rxCount = MIN(I2C_GetRxFifoDataCount(base), handle->receiveSize); + i2c_master_transfer_t *xfer = &handle->transfer; + + /* Set default isDone return value. */ + *isDone = false; + + /* Check for errors. */ + status = I2C_MasterGetStatusFlags(base); + /* For the last byte, nack flag is expected. Do not check and clear kI2C_MasterDataNackFlag for the last byte */ + if ((handle->transmitSize == 0U) && (txFifoCount == 0U)) + { + status &= ~(uint32_t)kI2C_MasterDataNackFlag; + } + result = I2C_MasterCheckAndClearError(base, status); + if (kStatus_Success != result) + { + return result; + } + + /* Execute the state. */ + switch (handle->state) + { + case (uint8_t)kMasterSendCommandState: + txCount = MIN((I2C_GetTxFifoDepth(base) - txFifoCount), xfer->subaddressSize); + while (txCount-- != 0U) + { + xfer->subaddressSize--; + I2C_WriteByte(base, (uint8_t)((xfer->subaddress >> (8U * xfer->subaddressSize)) & 0xffU)); + } + if (xfer->subaddressSize == 0U) + { + if (0U != xfer->dataSize) + { + if (xfer->direction == kI2C_Read) + { + handle->state = (uint8_t)kMasterReceiveDataState; + /* Enable rx interrupt */ + I2C_EnableInterrupts(base, + (uint16_t)(kI2C_RxOverflowInterruptFlag | kI2C_RxDataReadyInterruptFlag)); + } + else + { + handle->state = (uint8_t)kMasterSendDataState; + } + } + else + { + /* No transfer, so move to stop state. */ + handle->state = (uint8_t)kMasterWaitForCompletionState; + } + } + break; + + case (uint8_t)kMasterSendDataState: + txCount = MIN((I2C_GetTxFifoDepth(base) - txFifoCount), handle->transmitSize); + while (txCount-- != 0U) + { + handle->transmitSize--; + I2C_WriteByte(base, *xfer->data++); + } + if (0U == handle->transmitSize) + { + handle->state = (uint8_t)kMasterWaitForCompletionState; + } + break; + + case (uint8_t)kMasterReceiveDataState: + txCount = MIN((I2C_GetTxFifoDepth(base) - txFifoCount), handle->transmitSize); + while (rxCount-- != 0U) + { + handle->receiveSize--; + *(xfer->data)++ = I2C_ReadByte(base); + } + if (handle->receiveSize == 0U) + { + handle->state = (uint8_t)kMasterWaitForCompletionState; + } + while (txCount-- != 0U) + { + handle->transmitSize--; + I2C_MasterWriteDummy(base); + } + break; + + case (uint8_t)kMasterWaitForCompletionState: + /* We stay in this state until the stop is detected. */ + if (0U != (status & (uint32_t)kI2C_StopDetectInterruptFlag)) + { + *isDone = true; + } + break; + + default: + assert(false); + break; + } + return result; +} + +/*! + * brief Initializes the I2C slave transfer in interrupt way. + * + * This function is responsible for initializig slave transfer handle, installing user callback, registering master + * IRQ handling function and opening global interrupt. + * + * param base I2C base pointer + * param handle pointer to i2c_slave_handle_t structure to store the transfer state + * param callback pointer to user callback function + * param userData User configurable pointer to any data, function, structure etc that user wish to use in the callback + */ +void I2C_SlaveTransferCreateHandle(I2C_Type *base, + i2c_slave_handle_t *handle, + i2c_slave_transfer_callback_t callback, + void *userData) +{ + assert(NULL != handle); + /* Clear out the handle. */ + (void)memset(handle, 0, sizeof(*handle)); + + uint32_t instance; + /* Look up instance number */ + instance = I2C_GetInstance(base); + + /* Save callback and userData. */ + handle->callback = callback; + handle->userData = userData; + + /* Save the handle into static handle array */ + s_i2cHandles[instance] = handle; + /* Save IRQ handler into static ISR function pointer. */ + s_i2cSlaveIsr = I2C_SlaveTransferHandleIRQ; + + /* Disable internal IRQs and enable global IRQ. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + (void)EnableIRQ(s_I2cIrqs[instance]); +} + +/*! + * brief Sets I2C slave ready to process bus events. + * + * Call this API to let I2C start monitoring bus events driven by I2C master on bus. When user specified event occurs, + * callback will be invoked passes event information to the callback. + * + * note When #kI2C_SlaveOutofTransmitDataEvent and #kI2C_SlaveReceiveEvent occured, slave callback will + * always be revoked regardless which events user choose to enable. This means user need not configure them in the + * eventMask. If user wants to enable all the events, use #kI2C_SlaveAllEvents for convenience. + * + * param base The I2C peripheral base address. + * param handle Pointer to #i2c_slave_transfer_handle_t structure which stores the transfer state. + * param eventMask Bit mask formed by OR operation of event(s) in #i2c_slave_transfer_event_t enumerators. When these + * events occur the callback will be invoked. + * retval kStatus_I2C_Busy I2C slave has already been started on this handle. + */ +status_t I2C_SlaveTransferNonBlocking(I2C_Type *base, i2c_slave_handle_t *handle, uint8_t eventMask) +{ + assert(NULL != handle); + + status_t result = kStatus_Success; + /* Return busy if slave is already in transaction, or the bus is occupied with other transfer. */ + if ((handle->isBusy) || ((I2C_SlaveGetStatusFlags(base) & (uint32_t)kI2C_BusBusyInterruptFlag) != 0U)) + { + return kStatus_I2C_Busy; + } + + /* Enable module */ + I2C_Enable(base, true); + /* Empty rx FIFO first */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + + /* Disable I2C IRQ sources while we configure stuff. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + /* Clear transfer in handle. */ + (void)memset(&handle->transfer, 0, sizeof(handle->transfer)); + /* Record that we're busy. */ + handle->isBusy = true; + /* Set up event mask. tx and rx are always enabled. */ + handle->eventMask = eventMask | (uint8_t)kI2C_SlaveTransmitEvent | (uint8_t)kI2C_SlaveReceiveEvent; + /* Disable slave nack the next byte */ + I2C_SlaveNackNextByte(base, false); + /* Clear all flags. */ + I2C_SlaveClearStatusFlags(base, (uint16_t)kI2C_SlaveAllClearFlags); + /* Enable I2C internal IRQ sources used in slave transfer. Global IRQ was enabled in I2C_SlaveTransferCreateHandle + */ + I2C_EnableInterrupts(base, (uint16_t)kI2C_SlaveInterruptEnable); + + return result; +} + +/*! + * brief Gets how many bytes slave have transferred in curent data buffer. + * + * param base I2C base pointer. + * param handle pointer to i2c_slave_transfer_handle_t structure. + * param count Number of bytes slave have transferred after the last start/repeated start. + * retval kStatus_InvalidArgument count is Invalid. + * retval kStatus_NoTransferInProgress Curent no transfer is in progress. + * retval kStatus_Success Successfully obtained the count. + */ +status_t I2C_SlaveTransferGetCount(I2C_Type *base, i2c_slave_handle_t *handle, size_t *count) +{ + assert(NULL != handle); + + if (NULL == count) + { + return kStatus_InvalidArgument; + } + + /* Catch when there is not an active transfer. */ + if (false == handle->isBusy) + { + *count = 0U; + return kStatus_NoTransferInProgress; + } + + /* For an active transfer, just return the count from the handle. */ + *count = handle->transferredCount; + + return kStatus_Success; +} + +/*! + * brief Aborts the slave transfer. + * + * note This API can be called at any time to stop slave for handling further bus events. + * + * param base I2C base pointer. + * param handle pointer to i2c_slave_transfer_handle_t structure which stores the transfer state. + */ +void I2C_SlaveTransferAbort(I2C_Type *base, i2c_slave_handle_t *handle) +{ + assert(NULL != handle); + + if (handle->isBusy) + { + /* Disable I2C IRQ sources. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + /* Set slave to nack data automatically */ + I2C_SlaveNackNextByte(base, true); + + /* Reset transfer info. */ + (void)memset(&handle->transfer, 0, sizeof(handle->transfer)); + + /* We're no longer busy. */ + handle->isBusy = false; + } +} + +static void I2C_SlaveTransferHandleIRQ(I2C_Type *base, void *i2cHandle) +{ + assert(NULL != i2cHandle); + + i2c_slave_handle_t *handle = (i2c_slave_handle_t *)i2cHandle; + uint32_t statusFlags = I2C_SlaveGetStatusFlags(base); + i2c_slave_transfer_t *xfer = &(handle->transfer); + size_t tmpDataSize; + uint8_t rxFullSlots; + + /* Check stop flag. */ + if (0U != (statusFlags & (uint32_t)kI2C_StopDetectInterruptFlag)) + { + /* Read IC_CLR_STOP_DET register to clear the stop detect interrupt flag */ + (void)base->IC_CLR_STOP_DET; + + /* Call slave callback if this is the STOP of the transfer. */ + if (true == handle->isBusy) + { + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_Success; + handle->isBusy = false; + + if ((0U != (handle->eventMask & (uint8_t)xfer->event)) && (NULL != handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + } + + /* Check start flag. */ + if (0U != (statusFlags & (uint32_t)kI2C_StartDetectInterruptFlag)) + { + /* Read IC_CLR_START_DET register to clear the start detect interrupt flag */ + (void)base->IC_CLR_START_DET; + /* Disable slave nack the next byte */ + I2C_SlaveNackNextByte(base, false); + + handle->isBusy = true; + xfer->event = kI2C_SlaveStartDetectEvent; + + if ((0U != (handle->eventMask & (uint8_t)xfer->event)) && (NULL != handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + + /* Check general call ACK flag. */ + if (0U != (statusFlags & (uint32_t)kI2C_SlaveGeneralCallAckInterruptFlag)) + { + /* Read IC_CLR_GEN_CALL register to clear the general call ack interrupt flag */ + (void)base->IC_CLR_GEN_CALL; + /* Disable slave nack the next byte */ + I2C_SlaveNackNextByte(base, false); + + handle->isBusy = true; + xfer->event = kI2C_SlaveGenaralcallEvent; + + if ((0U != (handle->eventMask & (uint8_t)xfer->event)) && (NULL != handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + + /* Check rx overflow flag. */ + if (0U != (statusFlags & (uint32_t)kI2C_RxOverflowInterruptFlag)) + { + /* Read IC_CLR_RX_OVER register to clear the rx FIFO overflow interrupt flag */ + (void)base->IC_CLR_RX_OVER; + /* Set slave to nack the next byte to terminate the transfer */ + I2C_SlaveNackNextByte(base, true); + + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_I2C_RxHardwareOverrun; + handle->isBusy = false; + + if ((0U != (handle->eventMask & (uint8_t)xfer->event)) && (NULL != handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + + /* Check NAK */ + if (0U != (statusFlags & (uint32_t)kI2C_SlaveNackInterruptFlag)) + { + /* Read IC_CLR_RX_DONE register to clear the slave nack interrupt flag */ + (void)base->IC_CLR_RX_DONE; + + if (handle->transfer.dataSize != 0U) + { + xfer->completionStatus = kStatus_I2C_Nak; + } + else + { + xfer->completionStatus = kStatus_Success; + } + xfer->event = kI2C_SlaveCompletionEvent; + handle->isBusy = false; + if ((0U != (handle->eventMask & (uint8_t)xfer->event)) && (NULL != handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + + /* Check arbitration, though slave does not really own the bus, there is still such incident as the data on SDA line + is not the same as slave sends, in such case we call slave loses arbitration */ + if (0U != (statusFlags & (uint32_t)kI2C_SlaveArbitrationLostFlag)) + { + /* Read IC_CLR_TX_ABRT register to clear the tx abort interrupt flag */ + (void)base->IC_CLR_TX_ABRT; + + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_I2C_ArbitrationLost; + handle->isBusy = false; + if ((0U != (handle->eventMask & (uint8_t)xfer->event)) && (NULL != handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + + /* Receive data */ + if (0U != (statusFlags & (uint32_t)kI2C_RxDataReadyInterruptFlag)) + { + tmpDataSize = xfer->dataSize; + /* If we're out of data, invoke callback to get more. */ + if ((NULL == xfer->data) || (0U == tmpDataSize)) + { + xfer->event = kI2C_SlaveReceiveEvent; + if (NULL != handle->callback) + { + handle->callback(base, xfer, handle->userData); + } + /* Clear the transferred count now that we have a new buffer. */ + handle->transferredCount = 0U; + } + + rxFullSlots = I2C_GetRxFifoDataCount(base); + while ((rxFullSlots != 0U) && (0U != xfer->dataSize)) + { + /* Receive data. */ + *handle->transfer.data++ = I2C_ReadByte(base); + handle->transferredCount++; + xfer->dataSize--; + rxFullSlots--; + if (0U == xfer->dataSize) + { + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_Success; + handle->isBusy = false; + + /* Proceed receive complete event. */ + if (((handle->eventMask & (uint8_t)xfer->event) != 0U) && (handle->callback != NULL)) + { + handle->callback(base, xfer, handle->userData); + } + } + } + } + + /* Master request data */ + if (0U != (statusFlags & (uint32_t)kI2C_SlaveReadRequestInterruptFlag)) + { + /* Read IC_CLR_RD_REQ register to clear the read request interrupt flag */ + (void)base->IC_CLR_RD_REQ; + + tmpDataSize = xfer->dataSize; + /* If we're out of data, invoke callback to get more. */ + if ((NULL == xfer->data) || (0U == tmpDataSize)) + { + xfer->event = kI2C_SlaveTransmitEvent; + if (NULL != handle->callback) + { + handle->callback(base, xfer, handle->userData); + } + /* Clear the transferred count now that we have a new buffer. */ + handle->transferredCount = 0U; + } + + if (0U != (handle->transfer.dataSize)) + { + /* Send data. */ + I2C_WriteByte(base, *handle->transfer.data++); + handle->transfer.dataSize--; + handle->transferredCount++; + } + else + { + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_Success; + handle->isBusy = false; + + /* Proceed txdone event. */ + if (((handle->eventMask & (uint8_t)xfer->event) != 0U) && (handle->callback != NULL)) + { + handle->callback(base, xfer, handle->userData); + } + } + } +} + +static void I2C_CommonIRQHandler(I2C_Type *base, uint32_t instance) +{ + /* Check for master function. */ + if (I2C_IsMaster(base)) + { + /* Master mode. */ + s_i2cMasterIsr(base, s_i2cHandles[instance]); + } + + /* Check for slave function. */ + if (I2C_IsSlave(base)) + { + /* Slave mode. */ + s_i2cSlaveIsr(base, s_i2cHandles[instance]); + } + SDK_ISR_EXIT_BARRIER; +} + +#if defined(I2C0) +void I2C0_DriverIRQHandler(void); +/* Implementation of I2C0 handler named in startup code. */ +void I2C0_DriverIRQHandler(void) +{ + I2C_CommonIRQHandler(I2C0, 0U); +} +#endif + +#if defined(I2C1) +void I2C1_DriverIRQHandler(void); +/* Implementation of I2C1 handler named in startup code. */ +void I2C1_DriverIRQHandler(void) +{ + I2C_CommonIRQHandler(I2C1, 1U); +} +#endif diff --git a/drivers/mw320/i2c/fsl_i2c.h b/drivers/mw320/i2c/fsl_i2c.h new file mode 100644 index 000000000..3beecd8cd --- /dev/null +++ b/drivers/mw320/i2c/fsl_i2c.h @@ -0,0 +1,1396 @@ +/* + * Copyright 2020,2021 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_I2C_H_ +#define _FSL_I2C_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup i2c_driver + * @ingroup i2c + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_I2C_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! @brief Retry times when checking status flags. */ +#ifndef I2C_RETRY_TIMES +#define I2C_RETRY_TIMES 0U /* Default defines to zero, driver keeps checking status flag untill it changes. */ +#endif + +/*! + * @brief I2C API status codes, used by bus operation APIs and transactional APIs as return value to indicate the bus's + * current status as the API's execution result, or used in the callback to indicate transfer results. + */ +enum +{ + kStatus_I2C_Busy = MAKE_STATUS(kStatusGroup_I2C, 0), /*!< I2C bus is busy. */ + kStatus_I2C_Idle = MAKE_STATUS(kStatusGroup_I2C, 1), /*!< I2C Bus is idle. */ + kStatus_I2C_Nak = MAKE_STATUS(kStatusGroup_I2C, 2), /*!< I2C detected NACK on bus. When in SMBus mode, this means + the receiver nacks transmitter before PEC byte. */ + kStatus_I2C_ArbitrationLost = MAKE_STATUS(kStatusGroup_I2C, 3), /*!< I2C lost arbitration during addressing. */ + kStatus_I2C_Timeout = + MAKE_STATUS(kStatusGroup_I2C, 4), /*!< Timeout happens when waiting for status flags to change. */ + kStatus_I2C_Addr_Nak = MAKE_STATUS(kStatusGroup_I2C, 5), /*!< NACK was detected during the address probe. */ + kStatus_I2C_GeneralCall_Nak = + MAKE_STATUS(kStatusGroup_I2C, 6), /*!< NACK was detected after issuing general call. */ + kStatus_I2C_RxHardwareOverrun = MAKE_STATUS(kStatusGroup_I2C, 7), /*!< I2C rx receiver overrun. */ + kStatus_I2C_TxFifoFlushed = MAKE_STATUS(kStatusGroup_I2C, 8), /*!< I2C tx FIFO is flushed by hardware. */ +}; + +/*! + * @brief I2C common hardware status flags + * + * These enumerations can be ORed together to form bit masks. The masks can be used together with masks in + * #_i2c_master_status_flags as parameter by @ref I2C_MasterClearStatusFlags or as return value by + * @ref I2C_MasterGetStatusFlags. Or together with masks in #_i2c_slave_status_flags as parameter by + * @ref I2C_SlaveClearStatusFlags or as return value by @ref I2C_SlaveGetStatusFlags + */ +enum _i2c_status_flags +{ + kI2C_RxUnderflowInterruptFlag = + I2C_IC_RAW_INTR_STAT_RX_UNDER_MASK, /*!< Sets when software tries to read from empty rx FIFO. bit 0 */ + kI2C_RxOverflowInterruptFlag = + I2C_IC_RAW_INTR_STAT_RX_OVER_MASK, /*!< Sets when new data received and the rx FIFO is already full. bit 1 */ + kI2C_RxDataReadyInterruptFlag = + I2C_IC_RAW_INTR_STAT_RX_FULL_MASK, /*!< Sets when data in rx FIFO reaches or is above rx watermark. bit 2 */ + kI2C_TxOverflowInterruptFlag = I2C_IC_RAW_INTR_STAT_TX_OVER_MASK, /*!< Sets when software tries to push data to tx + FIFO and it's already full. bit 3 */ + kI2C_TxRequestInterruptFlag = + I2C_IC_RAW_INTR_STAT_TX_EMPTY_MASK, /*!< Sets when data in tx FIFO is at or below tx FIFO watermark. bit 4 */ + kI2C_TxAbortInterruptFlag = I2C_IC_RAW_INTR_STAT_TX_ABRT_MASK, /*!< Sets when any of the below status from + kI2C_Master7bitAddressNackFlag to kI2C_MasterArbitrationLostFlag is set, results in the tx FIFO being flushed. + Clear this flag will also clear these status flags automatically. bit 6 */ + kI2C_BusBusyInterruptFlag = + I2C_IC_RAW_INTR_STAT_ACTIVITY_MASK, /*!< Sets when there is I2C activity on bus. bit 8 */ + kI2C_StopDetectInterruptFlag = + I2C_IC_RAW_INTR_STAT_STOP_DET_MASK, /*!< Sets when stop condition is detected. bit 9 */ + kI2C_StartDetectInterruptFlag = + I2C_IC_RAW_INTR_STAT_START_DET_MASK, /*!< Sets when start condition is detected. bit 10 */ + kI2C_ActiveFlag = I2C_IC_STATUS_ACTIVITY_MASK + << 25U, /*!< Sets when I2C module is in active transfer state. bit 25 */ + kI2C_TxFifoNotFullFlag = I2C_IC_STATUS_TFNF_MASK << 25U, /*!< Sets when I2C tx FIFO is not full. bit 26 */ + kI2C_TxFifoEmptyFlag = I2C_IC_STATUS_TFE_MASK << 25U, /*!< Sets when I2C txFIFO is completely empty. bit 27 */ + kI2C_RxFifoNotEmptyFlag = I2C_IC_STATUS_RFNE_MASK << 25U, /*!< Sets when I2C rx FIFO is not empty. bit 28 */ + kI2C_RxFifoFullFlag = I2C_IC_STATUS_RFF_MASK << 25U, /*!< Sets when I2C rx FIFO is completely full. bit 29 */ +}; + +/*! + * @brief I2C master hardware status flags + * + * These enumerations can be ORed together to form bit masks. The masks can be used as parameter by + * @ref I2C_MasterClearStatusFlags or as return value by @ref I2C_MasterGetStatusFlags. + */ +enum _i2c_master_status_flags +{ + /* These flags are cleared when kI2C_TxAbortInterruptFlag is cleared */ + kI2C_Master7bitAddressNackFlag = I2C_IC_TX_ABRT_SOURCE_ABRT_7B_ADDR_NOACK_MASK + << 12U, /*!< Sets when I2C master is nacked in 7-bit addressing. bit 12 */ + kI2C_Master10bitAddressNack1Flag = + I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR1_NOACK_MASK + << 12U, /*!< Sets when I2C master is nacked of first byte of address in 10-bit addressing. bit 13 */ + kI2C_Master10bitAddressNack2Flag = + I2C_IC_TX_ABRT_SOURCE_ABRT_10ADDR2_NOACK_MASK + << 12U, /*!< Sets when I2C master is nacked of second byte of address in 10-bit addressing. bit 14 */ + kI2C_MasterDataNackFlag = I2C_IC_TX_ABRT_SOURCE_ABRT_TXDATA_NOACK_MASK + << 12U, /*!< Sets when I2C master is nacked in data sending. bit 15 */ + kI2C_MasterGeneralCallNackFlag = I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_NOACK_MASK + << 12U, /*!< Sets when I2C master is nacked after issueing general call. bit 16 */ + kI2C_MasterGeneralCallReadFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_GCALL_READ_MASK + << 12U, /*!< Sets when I2C master uses read command after issueing general call. bit 17 */ + kI2C_MasterHighSpeedCodeAckFlag = I2C_IC_TX_ABRT_SOURCE_ABRT_HS_ACKDET_MASK + << 12U, /*!< Sets when I2C master is in high speed mode and the high speed master + code was acknowledged. bit 18 */ + kI2C_MasterStartByteAckFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_ACKDET_MASK + << 12U, /*!< Sets when I2C master has sent a START byte and the START byte was acknowledged. bit 19 */ + kI2C_MasterHighSpeedRestartDisabledFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_HS_NORSTRT_MASK + << 12U, /*!< Sets when I2C master tries to transfer data in high speed mode with restart disabled. bit 20 */ + kI2C_MasterStartWithRestartDisabledFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_SBYTE_NORSTRT_MASK + << 12U, /*!< Sets when master tries to send a start with restart disabled. bit 21 */ + kI2C_Master10bitAddressReadRestartDisabledFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_10B_RD_NORSTRT_MASK + << 12U, /*!< Sets when I2C master issues read command in 10-bit addessing with restart disabled. bit 22 */ + kI2C_MasterOperateWhenDisabledFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_MASTER_DIS_MASK + << 12U, /*!< Sets when software wants to initiate a master operation with master mode disabled. bit 23 */ + kI2C_MasterArbitrationLostFlag = + I2C_IC_TX_ABRT_SOURCE_ARB_LOST_MASK + << 12U, /*!< Sets when master loses arbitration or kI2C_SlaveArbitrationLostFlag is set. bit 24 */ + + kI2C_MasterActiveFlag = I2C_IC_STATUS_MST_ACTIVITY_MASK + << 25U, /*!< Sets when I2C master operation is active. bit 30 */ + + /*! These flags are cleared automatically according to module status, or when other status bit is cleared. + eg. once tx FIFO is not empty kI2C_TxFifoEmptyFlag is cleared automatically. + eg. status bits from kI2C_Master7bitAddressNackFlag to kI2C_MasterArbitrationLostFlag are cleared when + kI2C_TxAbortInterruptFlag is cleared. */ + kI2C_MasterAutoClearFlags = + kI2C_RxDataReadyInterruptFlag | kI2C_TxRequestInterruptFlag | kI2C_ActiveFlag | kI2C_TxFifoNotFullFlag | + kI2C_TxFifoEmptyFlag | kI2C_RxFifoNotEmptyFlag | kI2C_RxFifoFullFlag | kI2C_MasterActiveFlag | + kI2C_Master7bitAddressNackFlag | kI2C_Master10bitAddressNack1Flag | kI2C_Master10bitAddressNack2Flag | + kI2C_MasterDataNackFlag | kI2C_MasterGeneralCallNackFlag | kI2C_MasterGeneralCallReadFlag | + kI2C_MasterHighSpeedCodeAckFlag | kI2C_MasterStartByteAckFlag | kI2C_MasterHighSpeedRestartDisabledFlag | + kI2C_MasterStartWithRestartDisabledFlag | kI2C_Master10bitAddressReadRestartDisabledFlag | + kI2C_MasterOperateWhenDisabledFlag | kI2C_MasterArbitrationLostFlag, + + /*! All flags which are clearable. */ + kI2C_MasterAllClearFlags = kI2C_RxUnderflowInterruptFlag | kI2C_RxOverflowInterruptFlag | + kI2C_TxOverflowInterruptFlag | kI2C_TxAbortInterruptFlag | kI2C_BusBusyInterruptFlag | + kI2C_StopDetectInterruptFlag | kI2C_StartDetectInterruptFlag, + + /* All error flags */ + kI2C_MasterErrorFlags = kI2C_RxUnderflowInterruptFlag | kI2C_RxOverflowInterruptFlag | + kI2C_TxOverflowInterruptFlag | kI2C_TxAbortInterruptFlag | kI2C_Master7bitAddressNackFlag | + kI2C_Master10bitAddressNack1Flag | kI2C_Master10bitAddressNack2Flag | + kI2C_MasterDataNackFlag | kI2C_MasterGeneralCallNackFlag | kI2C_MasterGeneralCallReadFlag | + kI2C_MasterHighSpeedRestartDisabledFlag | kI2C_MasterStartWithRestartDisabledFlag | + kI2C_Master10bitAddressReadRestartDisabledFlag | kI2C_MasterOperateWhenDisabledFlag | + kI2C_MasterArbitrationLostFlag, +}; + +/*! + * @brief I2C slave hardware status flags + * + * These enumerations can be ORed together to form bit masks. The masks can be used as parameter by + * @ref I2C_SlaveClearStatusFlags, or as return value by @ref I2C_SlaveGetStatusFlags. + */ +enum _i2c_slave_status_flags +{ + kI2C_SlaveReadRequestInterruptFlag = + I2C_IC_RAW_INTR_STAT_RD_REQ_MASK, /*!< Sets when I2C as slave and master tries to read data from it. bit 5 */ + kI2C_SlaveNackInterruptFlag = + I2C_IC_RAW_INTR_STAT_RX_DONE_MASK, /*!< Sets when I2C as slave transmiter and was nacked by master, indicating + tx complete. bit 7 */ + kI2C_SlaveGeneralCallAckInterruptFlag = + I2C_IC_RAW_INTR_STAT_GEN_CALL_MASK, /*!< Sets when general call address is received and acknowledged. bit 11 */ + + kI2C_SlaveFlushTxFifoFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_SLVFLUSH_TXFIFO_MASK, /*!< Sets when I2C slave receives a read command but there are + still old data remaining in tx FIFO. Cleared when + kI2C_TxAbortInterruptFlag is cleared. bit 13 */ + kI2C_SlaveArbitrationLostFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_SLV_ARBLOST_MASK, /*!< Sets when data on bus is not the same as slave sends. Cleared + when kI2C_TxAbortInterruptFlag is cleared. bit 14 */ + kI2C_SlaveReadWhenRequestedDataFlag = + I2C_IC_TX_ABRT_SOURCE_ABRT_SLVRD_INTX_MASK, /*!< Sets when I2C slave is request data from master but use read + command. Cleared when kI2C_TxAbortInterruptFlag is cleared. bit + 15 */ + kI2C_SlaveDisabledWhileBusy = I2C_IC_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY_MASK << 16U, /*!< Sets when I2C slave is + busy while disabled. If slave is addressed when disabled, slave will nack the master even address matched, if slave + is receiveing slave will nack the transfer immediately. Cleared when module is re-eanbled. bit 16 */ + kI2C_SlaveRxDataLost = I2C_IC_ENABLE_STATUS_SLV_RX_DATA_LOST_MASK + << 16U, /*!< Sets when I2C slave is actively +receiving data when disabled, and at least one byte have been received. Cleared when module is re-eanbled. bit 17 */ + + kI2C_SlaveActiveFlag = I2C_IC_STATUS_SLV_ACTIVITY_MASK + << 25U, /*!< Sets when I2C slave operation is active. bit 31 */ + + /*! These flags are cleared automatically according to module status, or when other status bit is cleared. + eg. once tx FIFO is not empty kI2C_TxFifoEmptyFlag is cleared automatically. + eg. kI2C_SlaveFlushTxFifoFlag, kI2C_SlaveArbitrationLostFlag and kI2C_SlaveReadWhenRequestedDataFlag are cleared + when kI2C_TxAbortInterruptFlag is cleared. */ + kI2C_SlaveAutoClearFlags = kI2C_RxDataReadyInterruptFlag | kI2C_TxRequestInterruptFlag | kI2C_SlaveFlushTxFifoFlag | + kI2C_SlaveArbitrationLostFlag | kI2C_SlaveReadWhenRequestedDataFlag | kI2C_ActiveFlag | + kI2C_TxFifoNotFullFlag | kI2C_TxFifoEmptyFlag | kI2C_RxFifoNotEmptyFlag | + kI2C_RxFifoFullFlag | kI2C_SlaveActiveFlag | kI2C_SlaveDisabledWhileBusy | + kI2C_SlaveRxDataLost, + + /*! All flags which are clearable. */ + kI2C_SlaveAllClearFlags = kI2C_RxUnderflowInterruptFlag | kI2C_RxOverflowInterruptFlag | + kI2C_TxOverflowInterruptFlag | kI2C_SlaveReadRequestInterruptFlag | + kI2C_TxAbortInterruptFlag | kI2C_SlaveNackInterruptFlag | kI2C_BusBusyInterruptFlag | + kI2C_StopDetectInterruptFlag | kI2C_StartDetectInterruptFlag | + kI2C_SlaveGeneralCallAckInterruptFlag, + + /* All error flags */ + kI2C_SlaveErrorFlags = kI2C_RxUnderflowInterruptFlag | kI2C_RxOverflowInterruptFlag | kI2C_TxOverflowInterruptFlag | + kI2C_TxAbortInterruptFlag | kI2C_SlaveNackInterruptFlag | kI2C_SlaveFlushTxFifoFlag | + kI2C_SlaveArbitrationLostFlag | kI2C_SlaveReadWhenRequestedDataFlag | + kI2C_SlaveDisabledWhileBusy | kI2C_SlaveRxDataLost, +}; + +/*! + * @brief I2C interrupt enable/disable source. + * + * These enumerations can be ORed together to form bit masks. The masks can be used as parameter by + * @ref I2C_EnableInterrupts, @ref I2C_DisableInterrupts, or as return value by @ref I2C_GetEnabledInterrupts. + */ +enum _i2c_interrupt_enable +{ + /* Common */ + kI2C_RxUnderflowInterruptEnable = I2C_IC_INTR_MASK_M_RX_UNDER_MASK, /*!< Rx FIFO underflow interrupt. bit 0 */ + kI2C_RxOverflowInterruptEnable = I2C_IC_INTR_MASK_M_RX_OVER_MASK, /*!< Rx FIFO overflow interrupt. bit 1 */ + kI2C_RxDataReadyInterruptEnable = I2C_IC_INTR_MASK_M_RX_FULL_MASK, /*!< Rx data ready interrupt. bit 2 */ + kI2C_TxOverflowInterruptEnable = I2C_IC_INTR_MASK_M_TX_OVER_MASK, /*!< Tx FIFO overflow interrupt. bit 3 */ + kI2C_TxRequestInterruptEnable = I2C_IC_INTR_MASK_M_TX_EMPTY_MASK, /*!< Tx data request interrupt. bit 4 */ + kI2C_SlaveReadRequestInterruptEnable = + I2C_IC_INTR_MASK_M_RD_REQ_MASK, /*!< I2C slave requested data by master interrupt. bit 5 */ + kI2C_TxAbortInterruptEnable = I2C_IC_INTR_MASK_M_TX_ABRT_MASK, /*!< Tx abort interrupt. bit 6 */ + kI2C_SlaveNackInterruptEnable = I2C_IC_INTR_MASK_M_RX_DONE_MASK, /*!< I2C slave nack interrupt. bit 7 */ + kI2C_BusBusyInterruptEnable = I2C_IC_INTR_MASK_M_ACTIVITY_MASK, /*!< I2C bus busy interrupt. bit 8 */ + kI2C_StopDetectInterruptEnable = + I2C_IC_INTR_MASK_M_STOP_DET_MASK, /*!< I2C stop condition detect interrupt. bit 9 */ + kI2C_StartDetectInterruptEnable = + I2C_IC_INTR_MASK_M_START_DET_MASK, /*!< I2C start condition detect interrupt. bit 10 */ + kI2C_SlaveGeneralCallAckInterruptEnable = + I2C_IC_INTR_MASK_M_GEN_CALL_MASK, /*!< I2C ganaral call detect and acknowledge interrupt. bit 11 */ + + kI2C_SlaveInterruptEnable = kI2C_RxOverflowInterruptEnable | kI2C_RxDataReadyInterruptEnable | + kI2C_SlaveReadRequestInterruptEnable | kI2C_TxAbortInterruptEnable | + kI2C_SlaveNackInterruptEnable | kI2C_StopDetectInterruptEnable | + kI2C_StartDetectInterruptEnable | kI2C_SlaveGeneralCallAckInterruptEnable, + + kI2C_AllInterruptEnable = + kI2C_RxUnderflowInterruptEnable | kI2C_RxOverflowInterruptEnable | kI2C_RxDataReadyInterruptEnable | + kI2C_TxOverflowInterruptEnable | kI2C_TxRequestInterruptEnable | kI2C_TxAbortInterruptEnable | + kI2C_BusBusyInterruptEnable | kI2C_StopDetectInterruptEnable | kI2C_StartDetectInterruptEnable | + kI2C_SlaveReadRequestInterruptEnable | kI2C_SlaveNackInterruptEnable | kI2C_SlaveGeneralCallAckInterruptEnable, +}; + +/*! @brief Master speed mode. */ +typedef enum _i2c_master_speed_mode +{ + kI2C_MasterSpeedStandard = 0x1U, /*!< Standard mode, 100kbps. */ + kI2C_MasterSpeedFast = 0X2U, /*!< Fast mode, 400kbps. */ + kI2C_MasterSpeedHigh = 0X3U, /*!< High speed mode, 3.4Mbps. */ +} i2c_master_speed_mode_t; + +/*! @brief Addressing mode, normal 7-bit address or 10-bit address. */ +typedef enum _i2c_address_mode +{ + kI2C_AddressMatch7bit = 0x0U, /*!< 7-bit addressing mode. */ + kI2C_AddressMatch10bit = 0X1U, /*!< 10-bit addressing mode. */ +} i2c_address_mode_t; + +/*! @brief I2C DMA configuration for Transmit and Receive.*/ +enum _i2c_dma_enable_flags +{ + kQSPI_DmaRx = 0x1U, /*!< Receive DMA Enable Flag. */ + kQSPI_DmaTx = 0x2U, /*!< Transmit DMA Enable Flag. */ +}; + +/*! + * @brief I2C master configuration structure. + * + * This structure includes all the master operation needed features, user can configure these features one by one + * manually, or call @ref I2C_MasterGetDefaultConfig to set the structure to default value. Then, call + * @ref I2C_MasterInit to initialize I2C module. After initialization, the I2C module can only operate as master. To + * deinitialize I2C, call @ref I2C_MasterDeinit. + */ +typedef struct _i2c_master_config +{ + bool enable; /*!< Enable the I2C peripheral as master during initialization. I2C_IC_CON[IC_SLAVE_DISABLE], + I2C_IC_CON[master_mode], I2C_IC_ENABLE[ENABLE] */ + i2c_master_speed_mode_t speed; /*!< The speed I2C master operates. I2C_IC_CON[SPEED] */ + i2c_address_mode_t addressingMode; /*!< Addressing mode. I2C_IC_TAR[IC_10BITADDR_MASTER] */ + uint8_t highSpeedMasterCodeAddress; /*!< Master code address in high speed mode, only 0-7 is avaliable. + I2C_IC_HS_MADDR[IC_HS_MAR] */ + uint8_t rxFifoWaterMark; /*!< Rx FIFO watermark that controls the rx interrupt trigger level. I2C_IC_RX_TL[RX_TL] */ + uint8_t txFifoWaterMark; /*!< Tx FIFO watermark that controls the tx interrupt trigger level. I2C_IC_TX_TL[TX_TL] */ + uint16_t dataHoldTime; /*!< The number of clock source cycles of the data hold time tHD:DAT. + I2C_IC_SDA_HOLD[IC_SDA_HOLD] */ + uint16_t dataSetupTime; /*!< The number of clock source cycles of the data setup time tSU:DAT. + I2C_IC_SDA_SETUP[SDA_SETUP] */ + uint8_t glitchFilter; /*!< The number of clock source cycles of the longest glitch to be filtered in standard and + fast mode. I2C_IC_FS_SPKLEN[IC_FS_SPKLEN] */ + uint8_t glitchFilterHighSpeed; /*!< The number of clock source cycles of the longest glitch to be filtered in high + speed mode. I2C_IC_HS_SPKLEN[IC_HS_SPKLEN] */ +} i2c_master_config_t; + +/*! + * @brief I2C slave configuration structure. + * + * This structure includes all the slave operation needed features, user can configure these features one by one + * manually, or call @ref I2C_SlaveGetDefaultConfig to set the structure to default value. Then, call + * @ref I2C_SlaveInit to initialize I2C module. After initialization, the I2C module can only operate as slave. To + * deinitialize I2C, call @ref I2C_SlaveDeinit. + */ +typedef struct _i2c_slave_config +{ + bool enable; /*!< Enable the I2C peripheral as slave during initialization. I2C_IC_CON[IC_SLAVE_DISABLE], + I2C_IC_CON[master_mode], I2C_IC_ENABLE[ENABLE] */ + i2c_address_mode_t addressingMode; /*!< Addressing mode. I2C_IC_CON[IC_10BITADDR_SLAVE] */ + uint16_t slaveAddress; /*!< Slave address. I2C_IC_SAR[IC_SAR] */ + uint8_t rxFifoWaterMark; /*!< Rx FIFO watermark that controls the rx interrupt trigger level. I2C_IC_RX_TL[RX_TL] */ + uint8_t txFifoWaterMark; /*!< Tx FIFO watermark that controls the tx interrupt trigger level. I2C_IC_TX_TL[TX_TL] */ + uint16_t dataHoldTime; /*!< The number of clock source cycles of the data hold time tHD:DAT. + I2C_IC_SDA_HOLD[IC_SDA_HOLD] */ + uint16_t dataSetupTime; /*!< The number of clock source cycles of the data setup time tSU:DAT. + I2C_IC_SDA_SETUP[SDA_SETUP] */ + bool ackGeneralCall; /*!< True to let slave response general call with Ack. I2C_IC_ACK_GENERAL_CALL[ACK_GEN_CALL] */ + uint8_t glitchFilter; /*!< The number of clock source cycles of the longest glitch to be filtered in standard and + fast mode. I2C_IC_FS_SPKLEN[IC_FS_SPKLEN] */ + uint8_t glitchFilterHighSpeed; /*!< The number of clock source cycles of the longest glitch to be filtered in high + speed mode. I2C_IC_HS_SPKLEN[IC_HS_SPKLEN] */ +} i2c_slave_config_t; + +/*! @brief Master transfer direction. */ +typedef enum _i2c_direction +{ + kI2C_Write = 0U, /*!< Master transmit. */ + kI2C_Read = 1U /*!< Master receive. */ +} i2c_direction_t; + +/*! + * @brief I2C master transfer configuration structure. + * + * This structure definition includes all the user configurable features, that are used to control single I2C transfer + * of master mode, in polling way or in interrupt way. + */ +typedef struct _i2c_master_transfer +{ + uint16_t slaveAddress; /*!< 7-bit slave address, set to 0 to issue general call. */ + i2c_direction_t direction; /*!< Transfer direction, #kI2C_Write or #kI2C_Read. */ + uint32_t subaddress; /*!< Pointer to command code. */ + size_t subaddressSize; /*!< Size of the command code, max value 4. */ + uint8_t *volatile data; /*!< Pointer to the send/receive data buffer. */ + volatile size_t dataSize; /*!< Transfer size. */ +} i2c_master_transfer_t; + +/*! @brief Forward declaration of the I2C master transfer handle structure. */ +typedef struct _i2c_master_handle i2c_master_handle_t; + +/*! + * @brief I2C master transfer callback function definition + * + * Defines the interface of user callback function used in master interrupt transfer. The callback function shall be + * defined and declared in application level by user. Before starting master transfer by calling + * @ref I2C_MasterTransferNonBlocking, call @ref I2C_MasterTransferCreateHandle to install the user callback. When + * master transfer ends successfully or failed due to any event like arbitration lost or nacked by slave, user callback + * will be invoked by driver. And then user can decide what to do next in the callback according to its third parameter + * completionStatus that indicates how the transfer ends. + * + * @param base The I2C peripheral base address. + * @param handle I2C transfer handle, which contains the information of base pointer, completionStatus and user data. + * @param completionStatus Either kStatus_Success or an error code describing how the transfer completed. + * @param userData Pointer to user configurable structure. + */ +typedef void (*i2c_master_transfer_callback_t)(I2C_Type *base, + i2c_master_handle_t *handle, + status_t completionStatus, + void *userData); +/*! + * @brief I2C master transfer handle + * + * @note If user wants to use the transactional API to transfer data in interrupt way in master mode, one I2C instance + * should and can only be allocated one master handle. + * @note The handle is maintained by I2C driver internally, which means the transfer state is retained and user shall + * not modify its state #state in application level. If user only wish to use transactional APIs without understanding + * its machanism, it is not necessary to understand these members. + */ +struct _i2c_master_handle +{ + uint8_t state; /*!< A transfer state maintained during transfer. */ + i2c_master_transfer_t transfer; /*!< I2C master transfer structure. */ + size_t transmitSize; /*!< Total bytes to be transferred. */ + size_t receiveSize; /*!< Total bytes to be received. */ + i2c_master_transfer_callback_t completionCallback; /*!< Callback function invoked when the transfer is finished. */ + void *userData; /*!< User configurable pointer to any data, function, structure etc that user wish to use in the + callback */ +}; + +/*! + * @brief Set of slave transfer events. + * + * This enumeration lists all the protocol level events that may happen during slave transfer. They can be used for two + * related purposes: + * 1. User can select certain events and combined them by OR operation to form a mask, and use the mask to configure + * slave transfer configuration stucture i2c_slave_transfer_t::u8EventMask. If any of these selected events happens, + * driver will alert user by invoking callback. + * 2. When slave callback is invoked, user has to know which specific event occured. Callback uses slave transfer + * configuration structure i2c_slave_transfer_t as 2nd parameter, its member i2c_slave_transfer_t::eEvent shows which + * event just happened. + */ +typedef enum _i2c_slave_transfer_event +{ + kI2C_SlaveStartDetectEvent = 0x01U, /*!< A start/repeated start was detected. */ + kI2C_SlaveGenaralcallEvent = 0x02U, /*!< Received the general call address after a start or repeated start. */ + kI2C_SlaveTransmitEvent = 0x04U, /*!< Slave runs out of data to transmit, request a new data buffer. */ + kI2C_SlaveReceiveEvent = 0x08U, /*!< Slave runs out of space to store received data, request a new data buffer. */ + kI2C_SlaveCompletionEvent = + 0x10U, /*!< Slave detects a stop signal, or slave is nacked by master during master-receive, + or slave has finished transmit/receive previously configured amount of data. */ + /*! A bit mask of all available events. */ + kI2C_SlaveAllEvents = kI2C_SlaveStartDetectEvent | kI2C_SlaveGenaralcallEvent | kI2C_SlaveTransmitEvent | + kI2C_SlaveReceiveEvent | kI2C_SlaveCompletionEvent, +} i2c_slave_transfer_event_t; + +/*! + * @brief I2C slave transfer configuration structure. + * + * Covers slave transfer data buffer pointer, data size and the events user want driver to alert. + * @note Unlike master who controls the transfer flow, slave has to monitor any bus event and change its configuration + * accordingly. So this slave transfer configuration structure is also used as second parameter of callback, for user + * to change the transfer configuration in the callback. The read-only member eEvent shows which event occured that + * causes the callback being invoked. + */ +typedef struct _i2c_slave_transfer +{ + uint8_t *volatile data; /*!< Pointer to the buffer of data to send, or to store received data. */ + volatile uint16_t dataSize; /*!< Transfer size. */ + i2c_slave_transfer_event_t event; /*!< The event that caused the callback being invoked. Read-only. */ + status_t completionStatus; /*!< Success or error code describing how the transfer completed. Only applies for + #kI2C_SlaveCompletionEvent. */ +} i2c_slave_transfer_t; +/*! + * @brief I2C slave transfer callback function definition + * + * Defines the interface of slave user callback function. The callback function shall be defined and declared in + * application level by user. Before calling @ref I2C_SlaveTransferNonBlocking to let I2C slave ready to process bus + * events, call @ref I2C_SlaveTransferCreateHandle first to install the user callback to slave handle. When I2C slave + * meets user selected events, callback will be invoked and user can decide the following steps in the callback. + * All the events that can trigger callback are listed in #i2c_slave_transfer_event_t. + * + * @param base Base address for the I2C instance on which the event occurred. + * @param transfer Pointer to transfer descriptor containing values passed to and/or from the callback. + * @param userData Pointer to user configurable structure. + */ +typedef void (*i2c_slave_transfer_callback_t)(I2C_Type *base, i2c_slave_transfer_t *transfer, void *userData); + +/*! + * @brief I2C slave transfer handle + * + * @note If user wants to use the transactional API to transfer data in slave mode, one I2C instance should and can only + * be allocated one handle. + * @note The handle is maintained by I2C driver internally, which means the transfer state is retained and user shall + * not modify its state #isBusy in application level. If user only wish to use transactional APIs without understanding + * its machanism, it is not necessary to understand these members. + */ +typedef struct _i2c_slave_handle +{ + i2c_slave_transfer_t transfer; /*!< I2C slave transfer structure. */ + size_t transferredCount; /*!< The number of bytes actually transferred for curent data buffer. */ + bool isBusy; /*!< Whether transfer is busy. */ + uint8_t eventMask; /*!< Mask of the events. When these enents occur during transfer driver will alert user using + callback. */ + i2c_slave_transfer_callback_t callback; /*!< Callback function invoked at the transfer event. */ + status_t completionStatus; /*!< I2C slave transfer complete status, indicating how the transfer ends, such as + #kStatus_I2C_Nak indicates the slave was nacked by master before all the data was sent. This parameter is only + useful when eEvent is #kI2C_SlaveCompletionEvent. */ + void *userData; /*!< User configurable pointer to any data, function, structure etc that user wish to use in the + callback. */ +} i2c_slave_handle_t; +/* --------------------------------------------- Slave Transfer Sub-group ------------------------------------------- */ + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! brief Typedef for interrupt handler. */ +typedef void (*i2c_isr_t)(I2C_Type *base, void *i2cHandle); + +/*! @brief Pointers to i2c IRQ number for each instance. */ +extern const IRQn_Type s_I2cIrqs[]; + +/*! @brief Pointers to i2c handles for each instance. */ +extern void *s_i2cHandles[]; + +/*! @brief Pointer to master IRQ handler for each instance. */ +extern i2c_isr_t s_i2cMasterIsr; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus. */ + +/*! + * @name Hardware Status Flags Sub-group + * @{ + */ +/*! + * @brief Gets the I2C master hardware status flags. + * + * @param base I2C base pointer + * @return the mask of status flags, can be a single flag or several flags in #_i2c_master_status_flags ORed together + */ +static inline uint32_t I2C_MasterGetStatusFlags(I2C_Type *base) +{ + return ((base->IC_RAW_INTR_STAT & 0x75FUL) | ((base->IC_TX_ABRT_SOURCE & 0x1FFFUL) << 12U) | + ((base->IC_STATUS & 0x3FUL) << 25U)); +} + +/*! + * @brief Clears the I2C master status flags. + * + * @param base I2C base pointer + * @param statusFlags The status flag mask, can be a single flag or several flags in #_i2c_status_flags ORed + * together. + */ +void I2C_MasterClearStatusFlags(I2C_Type *base, uint32_t statusFlags); + +/*! + * @brief Gets the I2C slave hardware status flags. + * + * @param base I2C base pointer + * @return the mask of status flags, can be a single flag or several flags in #_i2c_status_flags ORed together + */ +static inline uint32_t I2C_SlaveGetStatusFlags(I2C_Type *base) +{ + return ((base->IC_RAW_INTR_STAT & 0xFFFUL) | (base->IC_TX_ABRT_SOURCE & 0xE000UL) | + ((base->IC_ENABLE_STATUS & 0x6UL) << 16U) | ((base->IC_STATUS & 0x5FUL) << 25U)); +} + +/*! + * @brief Clears the I2C slave status flags. + * + * @param base I2C base pointer + * @param statusFlags The status flag mask, can be a single flag or several flags in #_i2c_slave_status_flags ORed + * together + */ +void I2C_SlaveClearStatusFlags(I2C_Type *base, uint32_t statusFlags); +/* @} */ + +/*! + * @name Interrupt Sub-group + * @{ + */ +/*! + * @brief Enables I2C interrupt source. + * + * @param base I2C base pointer + * @param interrupts The interrupt source mask, can be a single source or several sources in #_i2c_interrupt_enable + * ORed together + */ +static inline void I2C_EnableInterrupts(I2C_Type *base, uint16_t interrupts) +{ + base->IC_INTR_MASK |= (uint32_t)interrupts; +} + +/*! + * @brief Disables I2C interrupt source. + * + * @param base I2C base pointer + * @param interrupts The interrupt source mask, can be a single source or several sources in #_i2c_interrupt_enable + * ORed together + */ +static inline void I2C_DisableInterrupts(I2C_Type *base, uint16_t interrupts) +{ + base->IC_INTR_MASK &= ~(uint32_t)interrupts; +} +/*! + * @brief Get all the enabled interrupt sources. + * + * @param base I2C base pointer + * @return The interrupt source mask, can be a single source or several sources in #_i2c_interrupt_enable ORed + * together + */ +static inline uint16_t I2C_GetEnabledInterrupts(I2C_Type *base) +{ + return (uint16_t)(base->IC_INTR_MASK & 0xFFFUL); +} +/* @} */ + +/*! + * @name Module Init/Deinit Sub-group + * @{ + */ +/*! + * @brief Sets the I2C master configuration structure to default values. + * + * The purpose of this API is to initialize the configuration structure to default value for @ref I2C_MasterInit to use. + * Use the unchanged structure in @ref I2C_MasterInit or modify the structure before calling @ref I2C_MasterInit. + * This is an example: + * @code + * i2c_master_config_t config; + * I2C_MasterGetDefaultConfig(&config); + * I2C_MasterInit(I2C0, &config, 12000000U); + * @endcode + * + * @param masterConfig Pointer to the master configuration structure + */ +void I2C_MasterGetDefaultConfig(i2c_master_config_t *masterConfig); + +/*! + * @brief Initializes the I2C peripheral to operate as master. + * + * This API initialize the I2C module for master operation. + * + * @note If FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL is enbaled by user, the init function will not ungate I2C clock source + * before initialization, to avoid hardfault, user has to manually enable ungate the clock source before calling the API + * + * The configuration structure can be filled manully or be set with default values by calling + * @ref I2C_MasterGetDefaultConfig. This is an example. + * @code + * I2C_MasterGetDefaultConfig(&config); + * I2C_MasterInit(I2C0, &config, 12000000U); + * @endcode + * + * @param base I2C base pointer + * @param masterConfig Pointer to the master configuration structure + * @param sourceClock_Hz Frequency in Hertz of the I2C functional clock source + */ +void I2C_MasterInit(I2C_Type *base, const i2c_master_config_t *masterConfig, uint32_t sourceClock_Hz); + +/*! + * @brief De-initializes the I2C peripheral. Call this API to disable the I2C module. + * + * @param base I2C base pointer + */ +void I2C_MasterDeinit(I2C_Type *base); + +/*! + * @brief Sets the I2C slave configuration structure to default values. + * + * The purpose of this API is to initialize the configuration structure for @ref I2C_SlaveInit to use. Use the unchanged + * initialized structure in @ref I2C_SlaveInit or modify the structure before calling @ref I2C_SlaveInit. + * This is an example. + * @code + * i2c_slave_config_t config; + * config.slaveAdress = 0x7FU; + * I2C_SlaveGetDefaultConfig(&config); + * @endcode + * + * @param slaveConfig Pointer to the slave configuration structure + */ +void I2C_SlaveGetDefaultConfig(i2c_slave_config_t *slaveConfig); + +/*! + * @brief Initializes the I2C peripheral to operate as slave. + * + * This API initialize the I2C module for slave operation. User can also configure whether to enable the module in the + * function. + * + * @note If FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL is enbaled by user, the init function will not ungate I2C clock source + * before initialization, to avoid hardfault, user has to manually ungate the clock source before calling the API + * + * The configuration structure can be filled manully or be set with default values by calling + * @ref I2C_SlaveGetDefaultConfig. This is an example. + * @code + * i2c_slave_config_t sConfig; + * I2C_SlaveGetDefaultConfig(&sConfig); + * sConfig.address = 0x2AU; + * I2C_SlaveInit(I2C0, &sConfig); + * @endcode + * + * @param base I2C base pointer + * @param slaveConfig Pointer to the slave configuration structure + */ +void I2C_SlaveInit(I2C_Type *base, const i2c_slave_config_t *slaveConfig); + +/*! + * @brief De-initializes the I2C peripheral. Call this API to disable the I2C module. + * + * @param base I2C base pointer + */ +void I2C_SlaveDeinit(I2C_Type *base); +/* @} */ + +/*! + * @name Common Peripheral Configuration Sub-group + * @{ + */ +/*! + * @brief Sets I2C rx FIFO watermark. + * + * @param base I2C base pointer + * @param rxWaterMark rx watermark level + */ +static inline void I2C_SetRxWaterMark(I2C_Type *base, uint8_t rxWaterMark) +{ + base->IC_RX_TL = (uint32_t)rxWaterMark; +} + +/*! + * @brief Sets I2C tx FIFO watermark. + * + * @param base I2C base pointer + * @param txWaterMark tx watermark level + */ +static inline void I2C_SetTxWaterMark(I2C_Type *base, uint8_t txWaterMark) +{ + base->IC_TX_TL = (uint32_t)txWaterMark; +} + +/*! + * @brief Enables or disables the I2C module. + * + * @param base I2C base pointer + * @param enable Pass true to enable and false to disable the module + */ +static inline void I2C_Enable(I2C_Type *base, bool enable) +{ + if (enable) + { + base->IC_ENABLE |= (uint32_t)I2C_IC_ENABLE_ENABLE_MASK; + } + else + { + base->IC_ENABLE &= ~(uint32_t)I2C_IC_ENABLE_ENABLE_MASK; + } +} + +/*! + * @brief Enables the I2C module as master or slave. + * + * @param base I2C base pointer + * @param enable Pass true to enable as master and false to enable as slave + */ +static inline void I2C_EnableMaster(I2C_Type *base, bool enable) +{ + if (enable) + { + base->IC_CON |= ((uint32_t)I2C_IC_CON_MASTER_MODE_MASK | (uint32_t)I2C_IC_CON_IC_SLAVE_DISABLE_MASK); + } + else + { + base->IC_CON &= ~((uint32_t)I2C_IC_CON_MASTER_MODE_MASK | (uint32_t)I2C_IC_CON_IC_SLAVE_DISABLE_MASK); + } +} + +/*! + * @brief Gets the data count in tx FIFO. + * + * @param base I2C base pointer + * @return The data count in tx FIFO + */ +static inline uint8_t I2C_GetTxFifoDataCount(I2C_Type *base) +{ + return (uint8_t)base->IC_TXFLR; +} + +/*! + * @brief Gets the data count in rx FIFO. + * + * @param base I2C base pointer + * @return The data count in rx FIFO + */ +static inline uint8_t I2C_GetRxFifoDataCount(I2C_Type *base) +{ + return (uint8_t)base->IC_RXFLR; +} + +/*! + * @brief Gets tx FIFO depth. + * + * @param base I2C base pointer + * @return The tx FIFO depth + */ +static inline uint8_t I2C_GetTxFifoDepth(I2C_Type *base) +{ + return (uint8_t)((base->IC_COMP_PARAM_1 & I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_MASK) >> + I2C_IC_COMP_PARAM_1_TX_BUFFER_DEPTH_SHIFT); +} + +/*! + * @brief Gets rx FIFO depth. + * + * @param base I2C base pointer + * @return The rx FIFO depth + */ +static inline uint8_t I2C_GetRxFifoDepth(I2C_Type *base) +{ + return (uint8_t)((base->IC_COMP_PARAM_1 & I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_MASK) >> + I2C_IC_COMP_PARAM_1_RX_BUFFER_DEPTH_SHIFT); +} + +/*! + * @brief Sets I2C SDA hold time. + * + * @param base I2C base pointer + * @param sdaHoldTime Number of clock source cycles of SDA hold time + */ +static inline void I2C_SetSdaHoldTime(I2C_Type *base, uint16_t sdaHoldTime) +{ + base->IC_SDA_HOLD = (uint32_t)sdaHoldTime; +} + +/*! + * @brief Sets I2C SDA setup time. + * + * @param base I2C base pointer + * @param sdaSetupTime Number of clock source cycles of SDA setup time + */ +static inline void I2C_SetSdaSetupTime(I2C_Type *base, uint16_t sdaSetupTime) +{ + base->IC_SDA_SETUP = (uint32_t)sdaSetupTime; +} + +/*! + * @brief Enables I2C module to response ack to general call. + * + * @param base I2C base pointer + * @param enable Pass true to enable and false to disable + */ +static inline void I2C_EnableAckGeneralCall(I2C_Type *base, bool enable) +{ + base->IC_ACK_GENERAL_CALL = (uint32_t)enable; +} + +/*! + * @brief Returns whether the I2C module is enabled. + * + * @param base I2C base pointer + * @return True for enabled, false for disabled. + */ +static inline bool I2C_IsEnabled(I2C_Type *base) +{ + return (0U != (base->IC_ENABLE_STATUS & (uint32_t)I2C_IC_ENABLE_STATUS_IC_EN_MASK)); +} + +/*! + * @brief Sets I2C glitch filter width of normal and fast mode. + * + * @param base I2C base pointer + * @param glitchFilter Number of clock source cycles of max glitch time + */ +static inline void I2C_SetGlitchFilter(I2C_Type *base, uint8_t glitchFilter) +{ + base->IC_FS_SPKLEN = (uint32_t)glitchFilter; +} + +/*! + * @brief Sets I2C glitch filter width of high speed mode. + * + * @param base I2C base pointer + * @param glitchFilter Number of clock source cycles of max glitch time + */ +static inline void I2C_SetGlitchFilterHighSpeed(I2C_Type *base, uint8_t glitchFilter) +{ + base->IC_HS_SPKLEN = (uint32_t)glitchFilter; +} +/* @} */ + +/*! + * @name Master Peripheral Configuration Sub-group + * @{ + */ +/*! + * @brief Sets I2C master high speed mode address. + * + * @param base I2C base pointer + * @param address High speed address, only low 3 bits are avaliable + */ +static inline void I2C_MasterSetHighSpeedAddress(I2C_Type *base, uint8_t address) +{ + base->IC_HS_MADDR = (uint32_t)(address & 0x7UL); +} + +/*! + * @brief Returns whether the I2C module is in master mode. + * + * @note Although I2C can not be master and slave at the same time, when I2C is not in master mode does not mean it's in + * slave mode, the master and slave function may both be disabled. + * + * @param base I2C base pointer + * @return True for master mode enabled, false for disabled. + */ +static inline bool I2C_IsMaster(I2C_Type *base) +{ + return ((base->IC_CON & (uint32_t)(I2C_IC_CON_MASTER_MODE_MASK | I2C_IC_CON_IC_SLAVE_DISABLE_MASK)) == + (uint32_t)(I2C_IC_CON_MASTER_MODE_MASK | I2C_IC_CON_IC_SLAVE_DISABLE_MASK)); +} + +/*! + * @brief Sets I2C master addressing mode. + * + * @param base I2C base pointer + * @param addressingMode The I2C addressing mode master operates + */ +static inline void I2C_MasterSetAddressingMode(I2C_Type *base, i2c_address_mode_t addressingMode) +{ + if (addressingMode == kI2C_AddressMatch7bit) + { + base->IC_TAR &= ~(uint32_t)I2C_IC_TAR_IC_10BITADDR_MASTER_MASK; + } + else + { + base->IC_TAR |= (uint32_t)I2C_IC_TAR_IC_10BITADDR_MASTER_MASK; + } +} + +/*! + * @brief Sets target address for I2C master transaction. + * + * @param base I2C base pointer + * @param address The I2C addressing mode master operates + */ +static inline void I2C_MasterSetTargetAddress(I2C_Type *base, uint16_t address) +{ + base->IC_TAR = (base->IC_TAR & ~(uint32_t)I2C_IC_TAR_IC_TAR_MASK) | I2C_IC_TAR_IC_TAR(address); +} + +/*! + * @brief Choose whether to perform general call command. + * + * @param base I2C base pointer + * @param enable True to issue general call, false to issue common start byte according to target address + */ +static inline void I2C_MasterEnableGeneralCall(I2C_Type *base, bool enable) +{ + if (enable) + { + base->IC_TAR = (base->IC_TAR & ~(uint32_t)(I2C_IC_TAR_GC_OR_START_MASK)) | I2C_IC_TAR_SPECIAL_MASK; + } + else + { + base->IC_TAR &= ~(uint32_t)(I2C_IC_TAR_SPECIAL_MASK | I2C_IC_TAR_GC_OR_START_MASK); + } +} + +/*! + * @brief Sets the I2C transaction speed mode. + * + * After the I2C module is initialized as master, user can call this function to change the transfer baud rate. There + * are 3 speed modes to choos from, kI2C_MasterSpeedStandard for 100kbps, kI2C_MasterSpeedFast for 400kbps and + * kI2C_MasterSpeedHigh for 3.4Mbps. + * + * @param base I2C base pointer. + * @param speed Master transfer speed mode to be configured + * @param sourceClock_Hz I2C peripheral clock frequency in Hz + */ +void I2C_MasterSetSpeedMode(I2C_Type *base, i2c_master_speed_mode_t speed, uint32_t sourceClock_Hz); +/* @} */ + +/*! + * @name Slave Peripheral Configuration Sub-group + * @{ + */ +/*! + * @brief Returns whether the I2C module is in slave mode. + * + * @note Although I2C can not be master and slave at the same time, when I2C is not in slave mode does not mean it's in + * master mode, the master and slave function may both be disabled. + * + * @param base I2C base pointer + * @return True for slave mode enabled, false for disabled. + */ +static inline bool I2C_IsSlave(I2C_Type *base) +{ + return ((base->IC_CON & (uint32_t)(I2C_IC_CON_MASTER_MODE_MASK | I2C_IC_CON_IC_SLAVE_DISABLE_MASK)) == 0U); +} + +/*! + * @brief Sets I2C slave addressing mode and address. + * + * @param base I2C base pointer + * @param addressingMode The I2C addressing mode slave resonses to + * @param address The I2C address, for 7-bit only low 7 bits are valid and for 10-bit only low 10 bits are valid + */ +static inline void I2C_SlaveSetAddressingMode(I2C_Type *base, i2c_address_mode_t addressingMode, uint16_t address) +{ + if (addressingMode == kI2C_AddressMatch7bit) + { + base->IC_CON &= ~(uint32_t)I2C_IC_CON_IC_10BITADDR_SLAVE_MASK; + } + else + { + base->IC_CON |= (uint32_t)I2C_IC_CON_IC_10BITADDR_SLAVE_MASK; + } + base->IC_SAR = (uint32_t)address; +} +/* @} */ + +/*! + * @name Common Bus Operation Sub-Group + * @{ + */ +/*! + * @brief Reads one byte from data register directly. + * + * @param base I2C base pointer + * @return The data read from data register. + */ +static inline uint8_t I2C_ReadByte(I2C_Type *base) +{ + return (uint8_t)(base->IC_DATA_CMD & 0xFFUL); +} + +/*! + * @brief Writes one byte to the data register directly. + * + * @note If using I2C as master to perform read operation, user needs to write dummy to data register to generate clock, + * do not use this API to write dummy since this API will issue write command simultaneously, use @ref + * I2C_MasterWriteDummy. + * + * @param base I2C base pointer + * @param data The byte to write. + */ +static inline void I2C_WriteByte(I2C_Type *base, uint8_t data) +{ + base->IC_DATA_CMD = (((uint32_t)data) & 0xFFUL); +} +/* @} */ + +/*! + * @name DMA Configuration Sub-Group + * @{ + */ +/*! + * @brief Disables the I2C DMA requests. + * + * @param base I2C base pointer + * @param mask Enable mask formed by enums in #_i2c_dma_enable_flags + */ +static inline void I2C_EnableDMA(I2C_Type *base, uint8_t mask) +{ + base->IC_DMA_CR |= (uint32_t)mask; +} + +/*! + * @brief Enables the I2C DMA requests. + * + * @param base I2C base pointer + * @param mask Disable mask formed by enums in #_i2c_dma_enable_flags + */ +static inline void I2C_DisableDMA(I2C_Type *base, uint8_t mask) +{ + base->IC_DMA_CR &= ~(uint32_t)mask; +} + +/*! + * @brief Sets I2C tx DMA trigger level. + * + * @param base I2C base pointer + * @param txLevel tx DMA trigger level + */ +static inline void I2C_SetDmaTxWaterMark(I2C_Type *base, uint8_t txLevel) +{ + base->IC_DMA_TDLR = (uint32_t)txLevel; +} + +/*! + * @brief Sets I2C rx DMA trigger level. + * + * @param base I2C base pointer + * @param rxLevel rx DMA trigger level + */ +static inline void I2C_SetDmaRxWaterMark(I2C_Type *base, uint8_t rxLevel) +{ + base->IC_DMA_RDLR = (uint32_t)rxLevel; +} + +/*! + * @brief Gets I2C read/write register address. + * + * @param base I2C base pointer + * @return The I2C Data Register address. + */ +static inline uint32_t I2C_GetDataRegAddr(I2C_Type *base) +{ + return (uint32_t)((void *)(&(base->IC_DATA_CMD))); +} +/* @} */ + +/*! + * @name Master Bus Operation Sub-Group + * @{ + */ +/*! + * @brief Writes dummy data data register and issue read command to generate clock. + * + * @note If using I2C as master to perform read operation, user needs to write dummy to data register to generate clock, + * use this API not @ref I2C_WriteByte to write dummy, since I2C_WriteByte issue write command simultaneously. + * + * @param base I2C base pointer + */ +static inline void I2C_MasterWriteDummy(I2C_Type *base) +{ + base->IC_DATA_CMD = 0x100UL; +} + +/*! + * @brief Convert provided status flags to status code, and clear any errors if present. + * + * @note: The API only checks the error status that occured on bus, error caused by user misuse such as + * kI2C_RxUnderflowInterruptFlag, kI2C_TxOverflowInterruptFlag or kI2C_MasterOperateWhenDisabledFlag will not be checked + * + * @param base The I2C peripheral base address. + * @param status Status flags to check. + * @retval #kStatus_Success + * @retval #kStatus_I2C_RxHardwareOverrun Master rx FIFO overflow + * @retval #kStatus_I2C_GeneralCall_Nak Master nacked after issueing general call + * @retval #kStatus_I2C_ArbitrationLost Master lost arbitration when addressing + * @retval #kStatus_I2C_Nak Master nacked during data transmitting + * @retval #kStatus_I2C_Addr_Nak Master nacked during slave probing + */ +status_t I2C_MasterCheckAndClearError(I2C_Type *base, uint32_t status); + +/*! + * @brief Sends a piece of data to I2C bus in master mode in blocking way. + * + * Call this function when using I2C as master to send certain bytes of data to bus. This function uses the blocking + * way, which means it does not return until all the data is sent to bus. + * + * @note The I2C module generates START/STOP/RESTART automatically. When tx FIFO state changes from empty to not empty, + * start signal is generated; when tx FIFO is empty again, stop signal is generated; when read command follows a write + * command, restart signal is generated in between. So stop signal will be generated after this API returns, and before + * calling this API if tx FIFO is empty, start signal will be generated first automatically, if tx FIFO is not empty and + * the last command in tx FIFO is write, restart signal will be generated first automatically. + * + * @param base I2C base pointer. + * @param data The pointer to the data to be transmitted. + * @param txSize The length in bytes of the data to be transmitted. + * @retval kStatus_Success Successfully complete the data transmission. + * @retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval kStatus_I2C_Nak Transfer error, receive NAK during transfer. + * @retval kStatus_I2C_Addr_Nak Transfer error, receive NAK during addressing, only applies when tx FIFO is empty before + * calling this API. + * @retval #kStatus_I2C_Timeout Transfer error, timeout happens when waiting for status flags to change. + */ +status_t I2C_MasterWriteBlocking(I2C_Type *base, const uint8_t *data, size_t txSize); + +/*! + * @brief Receives a piece of data from I2C bus in master mode in blocking way. + * + * Call this function when using I2C as master to receive certain bytes of data from bus. This function uses the + * blocking way, which means it does not return until all the data is received or is nacked by slave. + * + * @note When doing read operation, software needs to push dummy data to tx FIFO with read command to generate clock, + * plus I2C module generates START/STOP/RESTART automatically, meaning when tx FIFO state changes from empty to not + * empty, start signal is generated, when tx FIFO is empty again, stop signal is generated, when read command follows + * a write command, restart signal is generated in between. So stop signal will be generated after this API returns, + * and before calling this API if tx FIFO is empty, start signal will be generated first automatically, if tx FIFO is + * not empty and the last command in tx FIFO is write, restart signal will be generated first automatically. + * + * @param base I2C base pointer. + * @param data The pointer to the data to store the received data. + * @param rxSize The length in bytes of the data to be received. + * @retval kStatus_Success Successfully complete the data transmission. + * @retval kStatus_I2C_Timeout Send stop signal failed, timeout. + */ +status_t I2C_MasterReadBlocking(I2C_Type *base, uint8_t *data, size_t rxSize); +/* @} */ + +/*! + * @name Slave Bus Operation Sub-Group + * @{ + */ +/*! + * @brief Enables slave to send nack after receiving next byte of data + * + * @param base I2C base pointer + * @param enable Pass true to enable nack and false to disable + */ +static inline void I2C_SlaveNackNextByte(I2C_Type *base, bool enable) +{ + if (enable) + { + base->IC_SLV_DATA_NACK_ONLY |= I2C_IC_SLV_DATA_NACK_ONLY_NACK_MASK; + } + else + { + base->IC_SLV_DATA_NACK_ONLY &= ~I2C_IC_SLV_DATA_NACK_ONLY_NACK_MASK; + } +} + +/*! + * @brief Convert provided status flags to status code, and clear any errors if present. + * + * @note: The API only checks the error status that occured on bus, error caused by user misuse such as + * kI2C_RxUnderflowInterruptFlag, kI2C_TxOverflowInterruptFlag, kI2C_SlaveReadWhenRequestedDataFlag or + * kI2C_SlaveDisabledWhileBusy will not be checked + * + * @param base The I2C peripheral base address. + * @param status Status flags to check. + * @retval #kStatus_Success + * @retval #kStatus_I2C_RxHardwareOverrun Slave rx FIFO overflow + * @retval #kStatus_I2C_TxFifoFlushed Slave is addressed and is requested data but there are still old data remaining in + * tx FIFO + * @retval #kStatus_I2C_ArbitrationLost Data on SDA is not the same as slave transmitted + * @retval #kStatus_I2C_Nak Slave nacked by master + */ +status_t I2C_SlaveCheckAndClearError(I2C_Type *base, uint32_t status); + +/*! + * @brief Sends a piece of data to I2C bus in slave mode in blocking way. + * + * Call this funtion to let I2C slave poll register status until it is addressed, then slave sends txSize of data to bus + * until all the data has been sent to bus or untill it is nacked. + * + * @param base I2C base pointer. + * @param data The pointer to the data to be transferred. + * @param txSize The length in bytes of the data to be transferred. + * @retval #kStatus_Success + * @retval #kStatus_I2C_TxFifoFlushed Slave is addressed and is requested data but there are still old data remaining in + * tx FIFO + * @retval #kStatus_I2C_ArbitrationLost Data on SDA is not the same as slave transmitted + * @retval #kStatus_I2C_Nak Slave nacked by master + */ +status_t I2C_SlaveWriteBlocking(I2C_Type *base, const uint8_t *data, size_t txSize); + +/*! + * @brief Receives a piece of data from I2C bus in slave mode in blocking way. + * + * Call this funtion to let I2C slave poll register status until it is addressed, then slave receives rxSize of data + * until all the data has been received. + * + * @param base I2C base pointer. + * @param data The pointer to the data to store the received data. + * @param rxSize The length in bytes of the data to be received. + * @retval kStatus_Success Successfully complete data receive. + * @retval kStatus_I2C_Timeout Wait status flag timeout. + */ +status_t I2C_SlaveReadBlocking(I2C_Type *base, uint8_t *data, size_t rxSize); +/* @} */ + +/*! + * @name Master Transfer Sub-group + * @{ + */ +/*! + * @brief Performs a master polling transfer on the I2C bus. + * + * @note The API does not return until the transfer succeeds or fails due to arbitration lost or receiving a NAK. + * + * @param base I2C base pointer. + * @param transferConfig Pointer to the transfer configuration structure. + * @retval kStatus_Success Successfully complete the data transmission. + * @retval #kStatus_I2C_Busy Previous transmission still not finished. + * @retval #kStatus_I2C_Timeout Transfer error, timeout happens when waiting for status flags to change. + * @retval #kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval #kStatus_I2C_Nak Transfer error, receive NAK during transfer. + * @retval #kStatus_I2C_Addr_Nak Transfer error, receive NAK during slave probing. + * @retval #kStatus_I2C_GeneralCall_Nak Transfer error, receive NAK after issueing general call. + */ +status_t I2C_MasterTransferBlocking(I2C_Type *base, i2c_master_transfer_t *transferConfig); + +/*! + * @brief Initializes the I2C master transfer in interrupt way. + * + * This function is responsible for initializig master transfer handle, installing user callback, registering master + * IRQ handling function and opening global interrupt. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_transfer_handle_t structure to store the transfer state. + * @param callback pointer to user callback function. + * @param userData User configurable pointer to any data, function, structure etc that user wish to use in the callback + */ +void I2C_MasterTransferCreateHandle(I2C_Type *base, + i2c_master_handle_t *handle, + i2c_master_transfer_callback_t callback, + void *userData); + +/*! + * @brief Initiates a master transfer on the I2C bus in interrupt way. + * + * @note Transfer in interrupt way is non-blocking which means this API returns immediately after transfer initiates. + * User can call @ref I2C_MasterTransferGetCount to get the count of data that master has transmitted/received and check + * transfer status. If the return status is kStatus_NoTransferInProgress, the transfer is finished. Also if user + * installs a user callback when calling @ref I2C_MasterTransferCreateHandle before, the callback will be invoked when + * transfer finishes. + * + * @param base I2C base pointer + * @param handle pointer to i2c_master_transfer_handle_t structure which stores the transfer state. + * @param transfer Pointer to the transfer configuration structure. + * @retval kStatus_Success Successfully start the data transmission. + * @retval #kStatus_I2C_Busy Previous transmission still not finished. + */ +status_t I2C_MasterTransferNonBlocking(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *transfer); + +/*! + * @brief Gets the master transfer count and status during a interrupt transfer. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_transfer_handle_t structure which stores the transfer state. + * @param count Pointer to number of bytes transferred so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_NoTransferInProgress Curent no transfer is in progress. + * @retval kStatus_Success Successfully obtained the count. + */ +status_t I2C_MasterTransferGetCount(I2C_Type *base, i2c_master_handle_t *handle, size_t *count); + +/*! + * @brief Aborts an in-process transfer in interrupt way. + * + * @note This API can be called at any time after a transfer of interrupt way initiates and before it finishes to abort + * the transfer early. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_handle_t structure which stores the transfer state + */ +void I2C_MasterTransferAbort(I2C_Type *base, i2c_master_handle_t *handle); +/* @} */ + +/*! + * @name Slave Transfer Sub-group + * @{ + */ +/*! + * @brief Initializes the I2C slave transfer in interrupt way. + * + * This function is responsible for initializig slave transfer handle, installing user callback, registering master + * IRQ handling function and opening global interrupt. + * + * @param base I2C base pointer + * @param handle pointer to i2c_slave_handle_t structure to store the transfer state + * @param callback pointer to user callback function + * @param userData User configurable pointer to any data, function, structure etc that user wish to use in the callback + */ +void I2C_SlaveTransferCreateHandle(I2C_Type *base, + i2c_slave_handle_t *handle, + i2c_slave_transfer_callback_t callback, + void *userData); + +/*! + * @brief Sets I2C slave ready to process bus events. + * + * Call this API to let I2C start monitoring bus events driven by I2C master on bus. When user specified event occurs, + * callback will be invoked passes event information to the callback. + * + * @note When #kI2C_SlaveTransmitEvent and #kI2C_SlaveReceiveEvent occured, slave callback will + * always be revoked regardless which events user choose to enable. This means user need not configure them in the + * eventMask. If user wants to enable all the events, use #kI2C_SlaveAllEvents for convenience. + * + * @param base The I2C peripheral base address. + * @param handle Pointer to #i2c_slave_handle_t structure which stores the transfer state. + * @param eventMask Bit mask formed by OR operation of event(s) in #i2c_slave_transfer_event_t enumerators. When these + * events occur the callback will be invoked. + * @retval kStatus_I2C_Busy I2C slave has already been started on this handle. + */ +status_t I2C_SlaveTransferNonBlocking(I2C_Type *base, i2c_slave_handle_t *handle, uint8_t eventMask); + +/*! + * @brief Gets how many bytes slave have transferred in curent data buffer. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_slave_handle_t structure. + * @param count Number of bytes slave have transferred after the last start/repeated start. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_NoTransferInProgress Curent no transfer is in progress. + * @retval kStatus_Success Successfully obtained the count. + */ +status_t I2C_SlaveTransferGetCount(I2C_Type *base, i2c_slave_handle_t *handle, size_t *count); + +/*! + * @brief Aborts the slave transfer. + * + * @note This API can be called at any time to stop slave for handling further bus events. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_slave_handle_t structure which stores the transfer state. + */ +void I2C_SlaveTransferAbort(I2C_Type *base, i2c_slave_handle_t *handle); +/* @} */ + +/*! + * @brief Gets instance number for I2C module. + * + * @param base I2C base pointer. + * @retval The number of the instance. + */ +uint32_t I2C_GetInstance(I2C_Type *base); + +#if defined(__cplusplus) +} +#endif /*_cplusplus. */ +/*@}*/ + +#endif /* _FSL_I2C_H_*/ diff --git a/drivers/mw320/i2c/fsl_i2c_dmac.c b/drivers/mw320/i2c/fsl_i2c_dmac.c new file mode 100644 index 000000000..959fe64f8 --- /dev/null +++ b/drivers/mw320/i2c/fsl_i2c_dmac.c @@ -0,0 +1,273 @@ +/* + * Copyright 2020,2021 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_i2c_dmac.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.i2c_dmac" +#endif + +/*! brief i2c master dmac transfer state, used in I2C dmac driver internal transfer state. */ +enum _i2c_master_dmac_transfer_states +{ + kMasterIdleState = 0x0U, /*!< I2C bus idle. */ + kMasterBusy = 0x1U, /*!< i2C bus busy. */ +}; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief DMAC callback for I2C master DMAC transfer. + * + * @param handle DMAC handle + * @param userData user param passed to the callback function + * @param status Transfer completion status + */ +static void I2C_MasterTransferCallbackDMA(dmac_handle_t *handle, void *userData, uint32_t status); + +/*! + * @brief Master interrupt handler. + * + * @param base I2C base pointer. + * @param i2cHandle pointer to i2c_master_handle_t structure. + */ +static void I2C_MasterDmacTransferHandleIRQ(I2C_Type *base, void *i2cHandle); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! brief The dummy data used to send to generate clock when performing read operatipn. */ +static uint32_t g_TxDummy = 0x100UL; + +/******************************************************************************* + * Codes + ******************************************************************************/ +static void I2C_MasterTransferCallbackDMA(dmac_handle_t *handle, void *userData, uint32_t status) +{ + i2c_master_dmac_handle_t *i2cDmacHandle = (i2c_master_dmac_handle_t *)userData; + I2C_DisableDMA(i2cDmacHandle->base, (uint8_t)kQSPI_DmaTx | (uint8_t)kQSPI_DmaRx); + I2C_DisableInterrupts(i2cDmacHandle->base, (uint16_t)kI2C_AllInterruptEnable); + + /* Wait for transfer to finish then clear all alearable status flags. */ + while ((I2C_MasterGetStatusFlags(i2cDmacHandle->base) & kI2C_StopDetectInterruptFlag) == 0U) + { + } + + I2C_MasterClearStatusFlags(i2cDmacHandle->base, (uint32_t)kI2C_MasterAllClearFlags); + + if (i2cDmacHandle->completionCallback != NULL) + { + i2cDmacHandle->completionCallback(i2cDmacHandle->base, i2cDmacHandle, kStatus_Success, i2cDmacHandle->userData); + } +} + +/*! + * brief Initializes the I2C master transfer in DMAC way. + * + * param base I2C peripheral base address + * param handle Pointer to i2c_master_dmac_handle_t structure to store the transfer state. + * param callback Pointer to the user callback function + * param userData User configurable pointer to any data, function, structure etc that user wish to use in the callback + * param dmacTxHandle DMAC handle pointer for tx + * param dmacRxHandle DMAC handle pointer for rx + */ +void I2C_MasterTransferCreateHandleDMAC(I2C_Type *base, + i2c_master_dmac_handle_t *handle, + i2c_master_dmac_transfer_callback_t callback, + void *userData, + dmac_handle_t *dmacTxHandle, + dmac_handle_t *dmacRxHandle) +{ + assert(handle != NULL); + assert(dmacTxHandle != NULL); + assert(dmacRxHandle != NULL); + + uint32_t instance = I2C_GetInstance(base); + + /* Zero handle. */ + (void)memset(handle, 0, sizeof(*handle)); + + /* Set the user callback and userData. */ + handle->completionCallback = callback; + handle->userData = userData; + + /* Set the DMAC handle and I2C base. */ + handle->dmacTxHandle = dmacTxHandle; + handle->dmacRxHandle = dmacRxHandle; + handle->base = base; + + /* Why using IRQ handler in DMAC transfer is that once master is nacked by slave or loses arbitration the transfer + should abort, however DMAC still keeps writing/reading which will push new data to tx FIFO and initiate new + transfer automatically, so we need to open interrupt to monitor event that can causes transfer abort. */ + + /* Save the handle into static handle array */ + s_i2cHandles[instance] = handle; + /* Save IRQ handler into static ISR function pointer. */ + s_i2cMasterIsr = I2C_MasterDmacTransferHandleIRQ; + /* Disable internal IRQs and enable global IRQ. */ + I2C_DisableInterrupts(base, (uint16_t)kI2C_AllInterruptEnable); + (void)EnableIRQ(s_I2cIrqs[instance]); +} + +/*! + * brief Initiates a master transfer on the I2C bus in DMAC way. + * + * note Transfer in DMAC way is non-blocking which means this API returns immediately after transfer initiates. + * If user installs a user callback when calling @ref I2C_MasterTransferCreateHandleDMAC before, the callback will be + * invoked when transfer finishes. + * + * param base I2C base pointer + * param handle pointer to i2c_master_transfer_handle_t structure which stores the transfer state. + * param xfer Pointer to the transfer configuration structure. + * retval kStatus_Success Successfully start the data transmission. + * retval #kStatus_I2C_Busy Previous transmission still not finished. + */ +status_t I2C_MasterTransferDMAC(I2C_Type *base, i2c_master_dmac_handle_t *handle, i2c_master_transfer_t *xfer) +{ + assert(handle != NULL); + assert(xfer != NULL); + + /* Return busy if another transaction is in progress. */ + if ((handle->state != (uint8_t)kMasterIdleState) || + ((I2C_MasterGetStatusFlags(base) & (uint32_t)kI2C_BusBusyInterruptFlag) != 0U)) + { + return kStatus_I2C_Busy; + } + + dmac_channel_transfer_config_t dmacConfig; + + /* Enable module */ + I2C_Enable(base, true); + + /* Set target slave address */ + if (xfer->slaveAddress == 0U) + { + I2C_MasterEnableGeneralCall(base, true); + } + else + { + I2C_MasterEnableGeneralCall(base, false); + I2C_MasterSetTargetAddress(base, xfer->slaveAddress); + } + + /* Empty rx FIFO first */ + while ((base->IC_STATUS & I2C_IC_STATUS_RFNE_MASK) != 0U) + { + (void)I2C_ReadByte(base); + } + + /* Clear all flags. */ + I2C_MasterClearStatusFlags(base, (uint32_t)kI2C_MasterAllClearFlags); + /* Enable I2C internal IRQ sources */ + I2C_EnableInterrupts(base, (uint16_t)kI2C_TxAbortInterruptEnable); + + if (xfer->direction == kI2C_Write) + { + DMAC_GetChannelDefaultTransferConfig(&dmacConfig, (void *)xfer->data, (uint32_t *)I2C_GetDataRegAddr(base), + kDMAC_ChannelTransferWidth8Bits, kDMAC_ChannelBurstLength1DataWidth, + xfer->dataSize, kDMAC_ChannelTransferMemoryToPeripheral); + dmacConfig.interruptMask = kDMAC_ChannelInterruptFlagTransferComplete; + DMAC_TransferSetCallback(handle->dmacTxHandle, I2C_MasterTransferCallbackDMA, handle); + DMAC_TransferSubmit(handle->dmacTxHandle, &dmacConfig); + } + else + { + DMAC_GetChannelDefaultTransferConfig(&dmacConfig, (uint32_t *)I2C_GetDataRegAddr(base), (void *)xfer->data, + kDMAC_ChannelTransferWidth8Bits, kDMAC_ChannelBurstLength1DataWidth, + xfer->dataSize, kDMAC_ChannelTransferPeripheralToMemory); + dmacConfig.interruptMask = kDMAC_ChannelInterruptFlagTransferComplete; + DMAC_TransferSetCallback(handle->dmacRxHandle, I2C_MasterTransferCallbackDMA, handle); + DMAC_TransferSubmit(handle->dmacRxHandle, &dmacConfig); + + DMAC_GetChannelDefaultTransferConfig(&dmacConfig, &g_TxDummy, (uint32_t *)I2C_GetDataRegAddr(base), + kDMAC_ChannelTransferWidth32Bits, kDMAC_ChannelBurstLength1DataWidth, + xfer->dataSize * sizeof(g_TxDummy), + kDMAC_ChannelTransferMemoryToPeripheral); + dmacConfig.srcAddrIncrementType = kDMAC_ChannelAddressFix; + DMAC_TransferSubmit(handle->dmacTxHandle, &dmacConfig); + } + + while (xfer->subaddressSize != 0U) + { + xfer->subaddressSize--; + I2C_WriteByte(base, (uint8_t)((xfer->subaddress >> (8U * xfer->subaddressSize)) & 0xffU)); + } + + if (xfer->direction == kI2C_Write) + { + DMAC_TransferStart(handle->dmacTxHandle); + I2C_EnableDMA(base, (uint8_t)kQSPI_DmaTx); + } + else + { + DMAC_TransferStart(handle->dmacRxHandle); + DMAC_TransferStart(handle->dmacTxHandle); + I2C_EnableDMA(base, (uint8_t)kQSPI_DmaTx | (uint8_t)kQSPI_DmaRx); + } + + return kStatus_Success; +} + +/*! + * brief Aborts a master DMAC non-blocking transfer early. + * + * param base I2C peripheral base address + * param handle A pointer to the i2c_master_dmac_handle_t structure. + */ +void I2C_MasterTransferAbortDMAC(I2C_Type *base, i2c_master_dmac_handle_t *handle) +{ + DMAC_TransferStop(handle->dmacTxHandle); + DMAC_TransferStop(handle->dmacRxHandle); + + /* Disable dmac transfer. */ + I2C_DisableDMA(base, (uint8_t)kQSPI_DmaTx | (uint8_t)kQSPI_DmaRx); + /* Reset the state to idle. */ + handle->state = (uint8_t)kMasterIdleState; +} + +static void I2C_MasterDmacTransferHandleIRQ(I2C_Type *base, void *i2cHandle) +{ + assert(i2cHandle != NULL); + status_t result = kStatus_Success; + i2c_master_dmac_handle_t *handle = (i2c_master_dmac_handle_t *)i2cHandle; + uint32_t status = I2C_MasterGetStatusFlags(base); + + I2C_MasterTransferAbortDMAC(base, handle); + + if ((status & (uint32_t)kI2C_Master7bitAddressNackFlag) != 0U) + { + result = kStatus_I2C_Addr_Nak; + } + + if ((status & (uint32_t)kI2C_MasterDataNackFlag) != 0U) + { + result = kStatus_I2C_Nak; + } + + if ((status & (uint32_t)kI2C_MasterGeneralCallNackFlag) != 0U) + { + result = kStatus_I2C_GeneralCall_Nak; + } + + if ((status & (uint32_t)kI2C_MasterArbitrationLostFlag) != 0U) + { + result = kStatus_I2C_ArbitrationLost; + } + + if (handle->completionCallback != NULL) + { + handle->completionCallback(base, handle, result, handle->userData); + } +} diff --git a/drivers/mw320/i2c/fsl_i2c_dmac.h b/drivers/mw320/i2c/fsl_i2c_dmac.h new file mode 100644 index 000000000..cd79b649f --- /dev/null +++ b/drivers/mw320/i2c/fsl_i2c_dmac.h @@ -0,0 +1,121 @@ +/* + * Copyright 2020,2021 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_I2C_DMAC_H_ +#define _FSL_I2C_DMAC_H_ + +#include "fsl_i2c.h" +#include "fsl_dmac.h" + +/*! + * @addtogroup i2c_dmac_driver + * @ingroup i2c + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief I2C DMAC driver version. */ +#define FSL_I2C_DMAC_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! @brief Retry times for waiting flag. */ +#ifndef I2C_RETRY_TIMES +#define I2C_RETRY_TIMES 0U /* Define to zero means keep waiting until the flag is assert/deassert. */ +#endif + +/*! @brief I2C master DMAC handle typedef. */ +typedef struct _i2c_master_dmac_handle i2c_master_dmac_handle_t; + +/*! @brief I2C master DMAC transfer callback typedef. */ +typedef void (*i2c_master_dmac_transfer_callback_t)(I2C_Type *base, + i2c_master_dmac_handle_t *handle, + status_t status, + void *userData); + +/*! @brief Typedef for master dmac handler. */ +typedef void (*i2c_dmac_master_irq_handler_t)(I2C_Type *base, i2c_master_dmac_handle_t *handle); + +/*! @brief I2C master DMAC transfer structure. */ +struct _i2c_master_dmac_handle +{ + I2C_Type *base; /*!< I2C instance base pointer. */ + i2c_master_transfer_t transfer; /*!< I2C master transfer struct. */ + size_t transferSize; /*!< Total bytes to be transferred. */ + uint8_t state; /*!< I2C master transfer status. */ + dmac_handle_t *dmacTxHandle; /*!< The DMAC handler used for tx. */ + dmac_handle_t *dmacRxHandle; /*!< The DMAC handler used for rx. */ + i2c_master_dmac_transfer_callback_t + completionCallback; /*!< A callback function called after the DMAC transfer finished. */ + void *userData; /*!< A callback parameter passed to the callback function. */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus. */ + +/*! + * @name I2C Master DMAC Transfer Sub-group + * @{ + */ + +/*! + * @brief Initializes the I2C master transfer in DMAC way. + * + * @param base I2C peripheral base address + * @param handle Pointer to i2c_master_dmac_handle_t structure to store the transfer state. + * @param callback Pointer to the user callback function + * @param userData User configurable pointer to any data, function, structure etc that user wish to use in the callback + * @param dmacTxHandle DMAC handle pointer for tx + * @param dmacRxHandle DMAC handle pointer for rx + */ +void I2C_MasterTransferCreateHandleDMAC(I2C_Type *base, + i2c_master_dmac_handle_t *handle, + i2c_master_dmac_transfer_callback_t callback, + void *userData, + dmac_handle_t *dmacTxHandle, + dmac_handle_t *dmacRxHandle); + +/*! + * @brief Initiates a master transfer on the I2C bus in DMAC way. + * + * @note Transfer in DMAC way is non-blocking which means this API returns immediately after transfer initiates. + * If user installs a user callback when calling @ref I2C_MasterTransferCreateHandleDMAC before, the callback will be + * invoked when transfer finishes. + * + * @param base I2C base pointer + * @param handle pointer to i2c_master_transfer_handle_t structure which stores the transfer state. + * @param xfer Pointer to the transfer configuration structure. + * @retval kStatus_Success Successfully start the data transmission. + * @retval #kStatus_I2C_Busy Previous transmission still not finished. + */ +status_t I2C_MasterTransferDMAC(I2C_Type *base, i2c_master_dmac_handle_t *handle, i2c_master_transfer_t *xfer); + +/*! + * @brief Aborts an in-process transfer in DMAC way. + * + * @note This API can be called at any time after a transfer of DMAC way initiates and before it finishes to abort + * the transfer early. + * + * @param base I2C base pointer. + * @param handle Pointer to i2c_master_handle_t structure which stores the transfer state + */ +void I2C_MasterTransferAbortDMAC(I2C_Type *base, i2c_master_dmac_handle_t *handle); + +/* @} */ +#if defined(__cplusplus) +} +#endif /*_cplusplus. */ +/*@}*/ +#endif /*_FSL_I2C_DMAC_H_*/ diff --git a/drivers/mw320/qspi/driver_mw_qspi.cmake b/drivers/mw320/qspi/driver_mw_qspi.cmake new file mode 100644 index 000000000..434c1a498 --- /dev/null +++ b/drivers/mw320/qspi/driver_mw_qspi.cmake @@ -0,0 +1,14 @@ +#Description: MW_QSPI Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_qspi component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_qspi.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/qspi/fsl_qspi.c b/drivers/mw320/qspi/fsl_qspi.c new file mode 100644 index 000000000..32d7563af --- /dev/null +++ b/drivers/mw320/qspi/fsl_qspi.c @@ -0,0 +1,426 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_qspi.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.qspi" +#endif + +/******************************************************************************* + * Definitations + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +static void QSPI_MemSet(void *src, uint8_t value, size_t length); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* Base pointer array */ +static QSPI_Type *const s_qspiBases[] = QSPI_BASE_PTRS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/* Array of QSPI clock name. */ +static const clock_ip_name_t s_qspiClock[] = QSPI_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Code + ******************************************************************************/ +static void QSPI_MemSet(void *src, uint8_t value, size_t length) +{ + assert(src != NULL); + uint8_t *p = src; + + for (volatile uint32_t i = 0U; i < length; i++) + { + *p = value; + p++; + } +} + +/*! + * brief Get the instance number for QSPI. + * + * param base QSPI base pointer. + */ +uint32_t QSPI_GetInstance(QSPI_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < ARRAY_SIZE(s_qspiBases); instance++) + { + if (s_qspiBases[instance] == base) + { + break; + } + } + + assert(instance < ARRAY_SIZE(s_qspiBases)); + + return instance; +} + +/*! + * brief Initializes QSPI. + * + * param config QSPI configuration structure. + */ +void QSPI_Init(QSPI_Type *base, qspi_config_t *config) +{ + uint32_t val = 0; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Enable qspi clock */ + CLOCK_EnableClock(s_qspiClock[QSPI_GetInstance(base)]); +#endif + + /* Set QSPI clock prescaler */ + val |= QSPI_CONF_CLK_PRESCALE(config->preScale); + /* Set data length mode */ + val |= QSPI_CONF_BYTE_LEN(config->byteLen); + /* Set QSPI clock phase */ + val |= QSPI_CONF_CLK_PHA(config->clockPhase); + /* Set QSPI clock polarity */ + val |= QSPI_CONF_CLK_POL(config->clockPolarity); + /* Set data pin number */ + val |= QSPI_CONF_DATA_PIN(config->dataPinMode); + /* Set address pin number */ + val |= QSPI_CONF_ADDR_PIN(config->addrPinMode); + + base->CONF = val; + + val = base->TIMING; + /* Set QSPI capture clock edge */ + val |= QSPI_TIMING_CLK_CAPT_EDGE(config->captureEdge); + base->TIMING = val; + + /* Set header count. */ + QSPI_SetHeaderCount(base, &config->headerCnt); + + /* Unmask all interrupts */ + QSPI_MaskInterrupts(base, 0x00U); +} + +/*! + * brief Gets default settings for QSPI. + * + * param config QSPI configuration structure. + */ +void QSPI_GetDefaultConfig(qspi_config_t *config) +{ + /* Initializes the configure structure to zero. */ + QSPI_MemSet(config, 0x00U, sizeof(*config)); + + config->preScale = kQSPI_ClockDiv1; + config->byteLen = kQSPI_TransferLength1Byte; + config->clockPhase = kQSPI_ClockPhaseRising; + config->clockPolarity = kQSPI_ClockPolarityLow; + config->dataPinMode = kQSPI_DataPinSingle; + config->addrPinMode = kQSPI_AddrPinSingle; + config->captureEdge = kQSPI_CaptureEdgeFirst; + + /* Configure header count. */ + config->headerCnt.instructionCnt = kQSPI_InstructionCnt0Byte; + config->headerCnt.addressCnt = kQSPI_AddressCnt0Byte; + config->headerCnt.readModeCnt = kQSPI_ReadModeCnt0Byte; + config->headerCnt.dummyCnt = kQSPI_DummyCnt0Byte; +} + +/*! + * brief Deinitializes the QSPI module. + * + * param base Pointer to QSPI Type. + */ +void QSPI_Deinit(QSPI_Type *base) +{ +} + +/*! + * brief Do software reset QSPI. + * + * param base Pointer to QSPI Type. + */ +void QSPI_SoftwareReset(QSPI_Type *base) +{ + base->CONF2 |= QSPI_CONF2_SRST_MASK; + + /* Delay */ + for (uint32_t i = 0x00U; i < 10U; i++) + { + __asm("nop"); + } + + base->CONF2 &= ~QSPI_CONF2_SRST_MASK; +} + +/*! + * brief Flush Write and Read FIFOs. + * + * @param base Pointer to QSPI Type. + * @return return status. + */ +status_t QSPI_FlushFIFO(QSPI_Type *base) +{ + status_t status = kStatus_InvalidArgument; + volatile uint32_t localCnt = 0U; + + /* Flush write and read FIFO. */ + base->CONF |= QSPI_CONF_FIFO_FLUSH_MASK; + + /* Wait until Write and Read FIFOs are flushed. */ + while (localCnt++ < 0xFFFFFFFU) + { + if ((base->CONF & QSPI_CONF_FIFO_FLUSH_MASK) == 0x00U) + { + status = kStatus_Success; + break; + } + } + + return status; +} + +/*! + * brief Set QSPI serial interface header count. + * + * @param base Pointer to QSPI Type. + * @param config Pointer to header count configuration structure. + */ +void QSPI_SetHeaderCount(QSPI_Type *base, qspi_header_count_config_t *config) +{ + assert(config != NULL); + + uint32_t tempVal = 0x00U; + + tempVal = QSPI_HDRCNT_INSTR_CNT(config->instructionCnt) | QSPI_HDRCNT_ADDR_CNT(config->addressCnt) | + QSPI_HDRCNT_RM_CNT(config->readModeCnt) | QSPI_HDRCNT_DUMMY_CNT(config->dummyCnt); + + base->HDRCNT = tempVal; +} + +/*! + * @brief Activate or de-activate serial select output. + * + * @param base Pointer to QSPI Type. + * @param enable enable or disable. + */ +void QSPI_SetSSEnable(QSPI_Type *base, bool enable) +{ + if (enable == true) + { + base->CNTL |= QSPI_CNTL_SS_EN_MASK; + } + else + { + base->CNTL &= ~QSPI_CNTL_SS_EN_MASK; + } + + while (0x00U == (QSPI_GetStatusFlags(base) & (uint32_t)kQSPI_TransferReady)) + { + } +} + +/*! + * @brief Start the specified QSPI transfer. + * + * @param base Pointer to QSPI Type. + * @param direction QSPI tansfer direction. + */ +void QSPI_StartTransfer(QSPI_Type *base, qspi_transfer_direction_t direction) +{ + uint32_t tempVal = 0x00U; + + /* Assert QSPI SS */ + base->CNTL |= QSPI_CNTL_SS_EN_MASK; + /* Wait until QSPI ready */ + while ((base->CNTL & QSPI_CNTL_XFER_RDY_MASK) == 0x00U) + { + } + + tempVal = base->CONF; + /* Set read/write mode */ + base->CONF = (tempVal & ~QSPI_CONF_RW_EN_MASK) | QSPI_CONF_RW_EN(direction); + + /* Start QSPI */ + base->CONF |= QSPI_CONF_XFER_START_MASK; +} + +/*! + * @brief Stop QSPI transfer. + * + * @param base Pointer to QSPI Type. + */ +void QSPI_StopTransfer(QSPI_Type *base) +{ + /* Wait until QSPI ready */ + while ((base->CNTL & QSPI_CNTL_XFER_RDY_MASK) == 0x00U) + { + } + + /* Wait until wfifo empty */ + while ((base->CNTL & QSPI_CNTL_WFIFO_EMPTY_MASK) == 0x00U) + { + } + + /* Stop QSPI */ + base->CONF |= QSPI_CONF_XFER_STOP_MASK; + + /* Wait until QSPI release start signal */ + while ((base->CONF & QSPI_CONF_XFER_START_MASK) == QSPI_CONF_XFER_START_MASK) + { + } + + /* De-assert QSPI SS */ + base->CNTL &= ~QSPI_CNTL_SS_EN_MASK; + /* Wait until QSPI ready */ + while ((base->CNTL & QSPI_CNTL_XFER_RDY_MASK) == 0x00U) + { + } +} + +/*! + * @brief Write a byte to QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @param data data to be written. + */ +void QSPI_WriteByte(QSPI_Type *base, uint8_t data) +{ + /* Wait unitl WFIFO is not full*/ + while ((base->CNTL & QSPI_CNTL_WFIFO_FULL_MASK) == QSPI_CNTL_WFIFO_FULL_MASK) + { + } + + base->DOUT = (data & 0xFFU); +} + +/*! + * @brief Read a byte from QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @return byte from QSPI serial interface. + */ +uint8_t QSPI_ReadByte(QSPI_Type *base) +{ + uint8_t data; + + /* Wait if RFIFO is empty*/ + while ((base->CNTL & QSPI_CNTL_RFIFO_EMPTY_MASK) == QSPI_CNTL_RFIFO_EMPTY_MASK) + { + } + + data = (base->DIN & 0xFFU); + + return data; +} + +/*! + * @brief Write a word to QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @param word data to be written. + */ +void QSPI_WriteWord(QSPI_Type *base, uint32_t data) +{ + /* Wait unitl WFIFO is not full*/ + while ((base->CNTL & QSPI_CNTL_RFIFO_FULL_MASK) == QSPI_CNTL_RFIFO_FULL_MASK) + { + } + + base->DOUT = data; +} + +/*! + * @brief Read a word from QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @return word from QSPI serial interface. + */ +uint32_t QSPI_ReadWord(QSPI_Type *base) +{ + /* Wait if RFIFO is empty*/ + while ((base->CNTL & QSPI_CNTL_RFIFO_EMPTY_MASK) == QSPI_CNTL_RFIFO_EMPTY_MASK) + { + } + + return base->DIN; +} + +/*! + * @brief Set DMA tansfer related configuration. + * + * @param base Pointer to QSPI Type. + * @param direction DMA transfer direction, read or write. + * @param length DMA burst length, 1/4/8 bytes. + */ +void QSPI_SetDmaTransferConfig(QSPI_Type *base, qspi_dma_transfer_direction_t direction, qspi_dma_burst_len_t length) +{ + if (direction == kQSPI_DmaRead) + { + base->CONF2 |= QSPI_CONF2_DMA_RD_EN_MASK; + base->CONF2 |= QSPI_CONF2_DMA_RD_BURST(length); + } + else + { + base->CONF2 |= QSPI_CONF2_DMA_WR_EN_MASK; + base->CONF2 |= QSPI_CONF2_DMA_WR_BURST(length); + } +} + +/*! + * brief Sends a buffer of data bytes using a blocking method. + * note This function blocks via polling until all bytes have been sent. + * param base QSPI base pointer + * param buffer The data bytes to send + * param size The number of data bytes to send + */ +void QSPI_WriteBlocking(QSPI_Type *base, uint32_t *buffer, size_t size) +{ + assert(size >= 4U); + + uint32_t i = 0; + + for (i = 0; i < size / 4U; i++) + { + /* Wait unitl WFIFO is not full*/ + while (0U != (QSPI_GetStatusFlags(base) & (uint32_t)kQSPI_WriteFifoFull)) + { + } + + base->DOUT = *buffer++; + } +} + +/*! + * brief Receives a buffer of data bytes using a blocking method. + * + * param base QSPI base pointer + * param buffer The data bytes to send + * param size The number of data bytes to receive + */ +void QSPI_ReadBlocking(QSPI_Type *base, uint32_t *buffer, size_t size) +{ + assert(size >= 4U); + + uint32_t i = 0; + + for (i = 0; i < size / 4U; i++) + { + /* Wait if RFIFO is empty*/ + while (0U != (QSPI_GetStatusFlags(base) & (uint32_t)kQSPI_ReadFifoEmpty)) + { + } + + buffer[i] = base->DIN; + } +} diff --git a/drivers/mw320/qspi/fsl_qspi.h b/drivers/mw320/qspi/fsl_qspi.h new file mode 100644 index 000000000..a923ac2be --- /dev/null +++ b/drivers/mw320/qspi/fsl_qspi.h @@ -0,0 +1,613 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_QSPI_H_ +#define _FSL_QSPI_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup qspi_driver + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief QSPI driver version 2.0.0. */ +#define FSL_QSPI_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! @brief QSPI transfer mode */ +typedef enum _qspi_transfer_mode +{ + kQSPI_TransferModeSingle, /*!< Use 1 serial interface pin. */ + kQSPI_TransferModeDual, /*!< Use 2 serial interface pins. */ + kQSPI_TransferModeQuad, /*!< Use 4 serial interface pins. */ +} qspi_transfer_mode_t; + +/*! @brief QSPI data pin */ +typedef enum _qspi_data_pin +{ + kQSPI_DataPinSingle, /*!< Use 1 serial interface pin. */ + kQSPI_DataPinDual, /*!< Use 2 serial interface pins. */ + kQSPI_DataPinQuad, /*!< Use 4 serial interface pins. */ +} qspi_data_pin_t; + +/*! @brief QSPI address pin */ +typedef enum _qspi_addr_pin +{ + kQSPI_AddrPinSingle, /*!< Use 1 serial interface pin */ + kQSPI_AddrPinAsData, /*!< Use the number of pins as indicated in DATA_PIN */ +} qspi_addr_pin_t; + +/*! @brief QSPI clock phase */ +typedef enum _qspi_clock_phase +{ + kQSPI_ClockPhaseRising, /*!< Data is latched on the rising edge of the serial clock. */ + kQSPI_ClockPhaseFalling, /*!< Data is latched on the falling edge of the serial clock. */ +} qspi_clock_phase_t; + +/*! @brief QSPI clock polarity */ +typedef enum _qspi_clock_polarity +{ + kQSPI_ClockPolarityLow, /*!< Inactive state of serial clock is low. */ + kQSPI_ClockPolarityHigh, /*!< Inactive state of serial clock is high. */ +} qspi_clock_polarity_t; + +/*! @brief QSPI capture clock edge */ +typedef enum _qspi_capture_edge +{ + kQSPI_CaptureEdgeFirst, /*!< Input data is captured on the first edge of the serial clock */ + kQSPI_CaptureEdgeSecond, /*!< Input data is captured on the second edge of the serial clock */ +} qspi_capture_edge_t; + +/*! @brief QSPI transfer length */ +typedef enum _qspi_transfer_length +{ + kQSPI_TransferLength1Byte, /*!< 1 byte in each serial interface I/O transfer */ + kQSPI_TransferLength4Bytes, /*!< 4 bytes in each serial interface I/O transfer */ +} qspi_transfer_length_t; + +/*! @brief QSPI clock prescaler */ +typedef enum _qspi_clock_prescaler +{ + kQSPI_ClockDiv1 = 0x1, /*!< Serial interface clock prescaler is SPI clock / 1 */ + kQSPI_ClockDiv2 = 0x2, /*!< Serial interface clock prescaler is SPI clock / 2 */ + kQSPI_ClockDiv3 = 0x3, /*!< Serial interface clock prescaler is SPI clock / 3 */ + kQSPI_ClockDiv4 = 0x4, /*!< Serial interface clock prescaler is SPI clock / 4 */ + kQSPI_ClockDiv5 = 0x5, /*!< Serial interface clock prescaler is SPI clock / 5 */ + kQSPI_ClockDiv6 = 0x6, /*!< Serial interface clock prescaler is SPI clock / 6 */ + kQSPI_ClockDiv7 = 0x7, /*!< Serial interface clock prescaler is SPI clock / 7 */ + kQSPI_ClockDiv8 = 0x8, /*!< Serial interface clock prescaler is SPI clock / 8 */ + kQSPI_ClockDiv9 = 0x9, /*!< Serial interface clock prescaler is SPI clock / 9 */ + kQSPI_ClockDiv10 = 0xA, /*!< Serial interface clock prescaler is SPI clock / 10 */ + kQSPI_ClockDiv11 = 0xB, /*!< Serial interface clock prescaler is SPI clock / 11 */ + kQSPI_ClockDiv12 = 0xC, /*!< Serial interface clock prescaler is SPI clock / 12 */ + kQSPI_ClockDiv13 = 0xD, /*!< Serial interface clock prescaler is SPI clock / 13 */ + kQSPI_ClockDiv14 = 0xE, /*!< Serial interface clock prescaler is SPI clock / 14 */ + kQSPI_ClockDiv15 = 0xF, /*!< Serial interface clock prescaler is SPI clock / 15 */ + kQSPI_ClockDiv16 = 0x18, /*!< Serial interface clock prescaler is SPI clock / 16 */ + kQSPI_ClockDiv18 = 0x19, /*!< Serial interface clock prescaler is SPI clock / 18 */ + kQSPI_ClockDiv20 = 0x1A, /*!< Serial interface clock prescaler is SPI clock / 20 */ + kQSPI_ClockDiv22 = 0x1B, /*!< Serial interface clock prescaler is SPI clock / 22 */ + kQSPI_ClockDiv24 = 0x1C, /*!< Serial interface clock prescaler is SPI clock / 24 */ + kQSPI_ClockDiv26 = 0x1D, /*!< Serial interface clock prescaler is SPI clock / 26 */ + kQSPI_ClockDiv28 = 0x1E, /*!< Serial interface clock prescaler is SPI clock / 28 */ + kQSPI_ClockDiv30 = 0x1F, /*!< Serial interface clock prescaler is SPI clock / 30 */ +} qspi_clock_prescaler_t; + +/*! @brief QSPI read or write type */ +typedef enum _qspi_transfer_direction +{ + kQSPI_Read, /*!< Read data from the serial interface */ + kQSPI_Write, /*!< Write data to the serial interface */ +} qspi_transfer_direction_t; + +/*! @brief QSPI status bit, @anchor _qspi_status_flags*/ +enum +{ + kQSPI_TransferReady = QSPI_CNTL_XFER_RDY_MASK, /*!< Serial interface transfer ready */ + kQSPI_ReadFifoEmpty = QSPI_CNTL_RFIFO_EMPTY_MASK, /*!< QSPI read FIFO empty flag */ + kQSPI_ReadFifoFull = QSPI_CNTL_RFIFO_FULL_MASK, /*!< QSPI read FIFO full flag */ + kQSPI_WriteFifoEmpty = QSPI_CNTL_WFIFO_EMPTY_MASK, /*!< QSPI write FIFO empty flag */ + kQSPI_WriteFifoFull = QSPI_CNTL_WFIFO_FULL_MASK, /*!< QSPI write FIFO full flag */ + kQSPI_ReadFifoUnderflow = QSPI_CNTL_RFIFO_UNDRFLW_MASK, /*!< QSPI read FIFO underflow flag */ + kQSPI_ReadFifoOverflow = QSPI_CNTL_RFIFO_OVRFLW_MASK, /*!< QSPI read FIFO overflow flag */ + kQSPI_WriteFifoUnderflow = QSPI_CNTL_WFIFO_UNDRFLW_MASK, /*!< QSPI write FIFO underflow flag */ + kQSPI_WriteFifoOverflow = QSPI_CNTL_WFIFO_OVERFLW_MASK, /*!< QSPI write FIFO overflow flag */ +}; + +/*! @brief QSPI interrupt status bit, @anchor _qspi_interrupt_status_flags*/ +enum +{ + kQSPI_InterruptTransferDone = QSPI_ISR_XFER_DONE_IS_MASK, /*!< QSPI interrupt transfer done flag */ + kQSPI_InterruptTransferReady = QSPI_ISR_XFER_RDY_IS_MASK, /*!< QSPI interrupt transfer ready flag */ + kQSPI_InterruptReadFifoDmaBurst = QSPI_ISR_XFER_RDY_IS_MASK, /*!< QSPI interrupt read FIFO DMA burst flag */ + kQSPI_InterruptWriteFifoDmaBurst = + QSPI_ISR_WFIFO_DMA_BURST_IS_MASK, /*!< QSPI interrupt write FIFO DMA burst flag */ + kQSPI_InterruptReadFifoEmpty = QSPI_ISR_RFIFO_EMPTY_IS_MASK, /*!< QSPI interrupt read FIFO empty flag */ + kQSPI_InterruptReadFifoFull = QSPI_ISR_RFIFO_FULL_IS_MASK, /*!< QSPI interrupt read FIFO full flag */ + kQSPI_InterruptWriteFifoEmpty = QSPI_ISR_WFIFO_EMPTY_IS_MASK, /*!< QSPI interrupt write FIFO empty flag */ + kQSPI_InterruptWriteFifoFull = QSPI_ISR_WFIFO_FULL_IS_MASK, /*!< QSPI interrupt write FIFO full flag */ + kQSPI_InterruptReadFifoUnderflow = QSPI_ISR_RFIFO_UNDRFLW_IS_MASK, /*!< QSPI interrupt read FIFO underflow flag */ + kQSPI_InterruptReadFifoOverflow = QSPI_ISR_RFIFO_OVRFLW_IS_MASK, /*!< QSPI interrupt read FIFO overflow flag */ + kQSPI_InterruptWriteFifoUnderflow = QSPI_ISR_WFIFO_UNDRFLW_IS_MASK, /*!< QSPI interrupt write FIFO underflow flag */ + kQSPI_InterruptWriteFifoOverflow = QSPI_ISR_WFIFO_OVRFLW_IS_MASK, /*!< QSPI interrupt write FIFO overflow flag */ +}; + +/*! @brief QSPI interrupt mask status bit, @anchor _qspi_interrupt_mask_status_flags*/ +enum +{ + kQSPI_InterruptTransferDoneMask = QSPI_IMR_XFER_DONE_IM_MASK, /*!< QSPI interrupt transfer done mask flag */ + kQSPI_InterruptTransferReadyMask = QSPI_IMR_XFER_RDY_IM_MASK, /*!< QSPI interrupt transfer ready mask flag*/ + kQSPI_InterruptReadFifoDmaBurstMask = + QSPI_IMR_XFER_RDY_IM_MASK, /*!< QSPI interrupt read FIFO DMA burst mask flag */ + kQSPI_InterruptWriteFifoDmaBurstMask = + QSPI_IMR_WFIFO_DMA_BURST_IM_MASK, /*!< QSPI interrupt write FIFO DMA burst mask flag */ + kQSPI_InterruptReadFifoEmptyMask = QSPI_IMR_RFIFO_EMPTY_IM_MASK, /*!< QSPI interrupt read FIFO empty mask flag */ + kQSPI_InterruptReadFifoFullMask = QSPI_IMR_RFIFO_FULL_IM_MASK, /*!< QSPI interrupt read FIFO full mask flag */ + kQSPI_InterruptWriteFifoEmptyMask = QSPI_IMR_WFIFO_EMPTY_IM_MASK, /*!< QSPI interrupt write FIFO empty mask flag */ + kQSPI_InterruptWriteFifoFullMask = QSPI_IMR_WFIFO_FULL_IM_MASK, /*!< QSPI interrupt write FIFO full mask flag */ + kQSPI_InterruptReadFifoUnderflowMask = + QSPI_IMR_RFIFO_UNDRFLW_IM_MASK, /*!< QSPI interrupt read FIFO underflow mask flag */ + kQSPI_InterruptReadFifoOverflowMask = + QSPI_IMR_RFIFO_OVRFLW_IM_MASK, /*!< QSPI interrupt read FIFO overflow mask flag */ + kQSPI_InterruptWriteFifoUnderflowMask = + QSPI_IMR_WFIFO_UNDRFLW_IM_MASK, /*!< QSPI interrupt write FIFO underflow mask flag */ + kQSPI_InterruptWriteFifoOverflowMask = + QSPI_IMR_WFIFO_OVRFLW_IM_MASK, /*!< QSPI interrupt write FIFO overflow mask flag */ +}; + +/*! @brief QSPI dma read/write type */ +typedef enum _qspi_dma_transfer_direction +{ + kQSPI_DmaRead, /*!< QSPI DMA read */ + kQSPI_DmaWrite, /*!< QSPI DMA write */ +} qspi_dma_transfer_direction_t; + +/*! @brief QSPI dma read/write burst type */ +typedef enum _qspi_dma_burst_len +{ + kQSPI_BurstLen1, /*!< One data(each of width BYTE_LEN) is available in the Read/Write FIFO before a receive/transmit + burst request is made to the DMA */ + kQSPI_BurstLen4, /*!< Four data(each of width BYTE_LEN) is available in the Read/Write FIFO before a + receive/transmit burst request is made to the DMA */ + kQSPI_BurstLen8, /*!< Eight data(each of width BYTE_LEN) is available in the Read/Write FIFO before a + receive/transmit burst request is made to the DMA */ + kQSPI_BurstLen0, /*!< Disable DMA read/write */ +} qspi_dma_burst_len_t; + +/*! @brief QSPI Instruction Count */ +typedef enum _qspi_instruction_count +{ + kQSPI_InstructionCnt0Byte, /*!< Instrution count: 0 byte */ + kQSPI_InstructionCnt1Byte, /*!< Instrution count: 1 byte */ + kQSPI_InstructionCnt2Byte, /*!< Instrution count: 2 bytes */ +} qspi_instruction_count_t; + +/*! @brief QSPI Address Count */ +typedef enum _qspi_address_count +{ + kQSPI_AddressCnt0Byte, /*!< Address count: 0 byte */ + kQSPI_AddressCnt1Byte, /*!< Address count: 1 byte */ + kQSPI_AddressCnt2Byte, /*!< Address count: 2 bytes */ + kQSPI_AddressCnt3Byte, /*!< Address count: 3 bytes */ + kQSPI_AddressCnt4Byte, /*!< Address count: 4 bytes */ +} qspi_address_count_t; + +/*! @brief QSPI Read Mode Count */ +typedef enum _qspi_read_mode_count +{ + kQSPI_ReadModeCnt0Byte, /*!< Read mode count: 0 byte */ + kQSPI_ReadModeCnt1Byte, /*!< Read mode count: 1 byte */ + kQSPI_ReadModeCnt2Byte, /*!< Read mode count: 2 bytes */ +} qspi_read_mode_count_t; + +/*! @brief QSPI Dummy Count */ +typedef enum _qspi_dummy_count +{ + kQSPI_DummyCnt0Byte, /*!< Dummy count: 0 byte */ + kQSPI_DummyCnt1Byte, /*!< Dummy count: 1 byte */ + kQSPI_DummyCnt2Byte, /*!< Dummy count: 2 bytes */ + kQSPI_DummyCnt3Byte, /*!< Dummy count: 3 bytes */ +} qspi_dummy_count_t; + +/*! @brief QSPI header count configuration structure*/ +typedef struct _qspi_header_count_config +{ + qspi_instruction_count_t instructionCnt; /*!< Instruction Count, number of bytes in INSTR register to shift out. */ + qspi_address_count_t addressCnt; /*!< Address Count, number of bytes in ADDR register to shift out. */ + qspi_read_mode_count_t readModeCnt; /*!< Read Mode Count, number of bytes in RMODE register to shift out. */ + qspi_dummy_count_t dummyCnt; /*!< Dummy Count, number of bytes as dummy to shift out. */ +} qspi_header_count_config_t; + +/*! @brief QSPI configuration structure*/ +typedef struct _qspi_config +{ + qspi_clock_prescaler_t preScale; /*!< Serial Interface Clock Prescaler. */ + qspi_transfer_length_t byteLen; /*!< Byte Length, the number of bytes in each serial interface I/O transfer. */ + qspi_clock_phase_t clockPhase; /*!< Serial Interface Clock Phase. */ + qspi_clock_polarity_t clockPolarity; /*!< Serial Interface Clock Polarity. */ + qspi_data_pin_t dataPinMode; /*!< Data Transfer Pin. */ + qspi_addr_pin_t addrPinMode; /*!< Address Transfer Pin. */ + qspi_capture_edge_t captureEdge; /*!< Serial Interface Capture Clock Edge. */ + + qspi_header_count_config_t headerCnt; /*!< Serial Interface header count. */ +} qspi_config_t; + +/****************************************************************************** + * API + *****************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Get the instance number for QSPI. + * + * @param base QSPI base pointer. + */ +uint32_t QSPI_GetInstance(QSPI_Type *base); + +/*! + * @brief Initializes the QSPI module and internal state. + * + * This function enables the clock for QSPI and also configures the QSPI with the + * input configure parameters. Users should call this function before any QSPI operations. + * + * @param base Pointer to QuadSPI Type. + * @param config QSPI configure structure. + */ +void QSPI_Init(QSPI_Type *base, qspi_config_t *config); + +/*! + * @brief Gets default settings for QSPI. + * + * @param config QSPI configuration structure. + */ +void QSPI_GetDefaultConfig(qspi_config_t *config); + +/*! + * @brief Deinitializes the QSPI module. + * + * @param base Pointer to QuadSPI Type. + */ +void QSPI_Deinit(QSPI_Type *base); + +/*! + * @brief Do software reset QSPI. + * + * @param base Pointer to QSPI Type. + */ +void QSPI_SoftwareReset(QSPI_Type *base); + +/*! @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the state value of QSPI. + * + * @param base Pointer to QSPI Type. + * @return status flag, use status flag to AND @ref _qspi_interrupt_mask_status_flags could get the related status. + */ +static inline uint32_t QSPI_GetInterruptMaskStatusFlags(QSPI_Type *base) +{ + return base->IMR; +} + +/*! + * @brief Mask/Unmask specified interrupts. + * + * @param base Pointer to QSPI Type. + * @param mask interrupt mask. + */ +static inline void QSPI_MaskInterrupts(QSPI_Type *base, uint32_t mask) +{ + base->IMR = mask; +} + +/*! + * @brief Get QSPI status flag. + * + * @param base Pointer to QSPI Type. + * @return status flag, use status flag to AND @ref _qspi_status_flags could get the related status. + */ +static inline uint32_t QSPI_GetStatusFlags(QSPI_Type *base) +{ + return base->CNTL; +} + +/*! + * @brief Get interrupt status. + * + * @param base Pointer to QSPI Type. + * @return status flag, use status flag to AND @ref _qspi_interrupt_status_flags could get the related status. + */ +static inline uint32_t QSPI_GetInterruptStatus(QSPI_Type *base) +{ + return base->ISR; +} + +/*! + * @brief Clear transfer done interrupt. + * + * @param base Pointer to QSPI Type. + */ +static inline void QSPI_ClearTransferDoneStatus(QSPI_Type *base) +{ + base->ISC = QSPI_ISC_XFER_DONE_IC_MASK; +} + +/*! @} */ + +/*! + * @name QSPI functional interface + * @{ + */ + +/*! + * @brief Flush Write and Read FIFOs. + * + * @param base Pointer to QSPI Type. + * @return return status. + */ +status_t QSPI_FlushFIFO(QSPI_Type *base); + +/*! + * @brief Set QSPI serial interface transfer mode. + * + * @param base Pointer to QSPI Type. + * @param dataPin QSPI tansfer data pin. + */ +static inline void QSPI_SetDatePin(QSPI_Type *base, qspi_data_pin_t dataPin) +{ + uint32_t tempVal = 0x00U; + + tempVal = base->CONF; + base->CONF = (tempVal & ~QSPI_CONF_DATA_PIN_MASK) | QSPI_CONF_DATA_PIN(dataPin); +} + +/*! + * @brief Set QSPI serial interface transfer mode. + * + * @param base Pointer to QSPI Type. + * @param addrPin QSPI tansfer address pin. + */ +static inline void QSPI_SetAddressPin(QSPI_Type *base, qspi_addr_pin_t addrPin) +{ + uint32_t tempVal = 0x00U; + + tempVal = base->CONF; + base->CONF = (tempVal & ~QSPI_CONF_ADDR_PIN_MASK) | QSPI_CONF_ADDR_PIN(addrPin); +} + +/*! + * @brief Set QSPI serial interface header count . + * + * @param base Pointer to QSPI Type. + * @param config Pointer to header count configuration structure. + */ +void QSPI_SetHeaderCount(QSPI_Type *base, qspi_header_count_config_t *config); + +/*! + * @brief Set number of bytes in INSTR register to shift out to the serial interface. + * + * @param base Pointer to QSPI Type. + * @param count number of bytes in INSTR register to shift out. + */ +static inline void QSPI_SetInstructionCnt(QSPI_Type *base, qspi_instruction_count_t count) +{ + uint32_t temp = 0x00U; + + temp = base->HDRCNT; + base->HDRCNT = (temp & ~QSPI_HDRCNT_INSTR_CNT_MASK) | QSPI_HDRCNT_INSTR_CNT(count); +} + +/*! + * @brief Set number of bytes in ADDR register to shift out to the serial interface. + * + * @param base Pointer to QSPI Type. + * @param count number of bytes in ADDR register to shift out. + */ +static inline void QSPI_SetAddressCnt(QSPI_Type *base, qspi_address_count_t count) +{ + uint32_t temp = 0x00U; + + temp = base->HDRCNT; + base->HDRCNT = (temp & ~QSPI_HDRCNT_ADDR_CNT_MASK) | QSPI_HDRCNT_ADDR_CNT(count); +} + +/*! + * @brief Set number of bytes in RM register to shift out to the serial interface. + * + * @param base Pointer to QSPI Type. + * @param count number of bytes in RM register to shift out. + */ +static inline void QSPI_SetReadModeCnt(QSPI_Type *base, qspi_read_mode_count_t count) +{ + uint32_t temp = 0x00U; + + temp = base->HDRCNT; + base->HDRCNT = (temp & ~QSPI_HDRCNT_RM_CNT_MASK) | QSPI_HDRCNT_RM_CNT(count); +} + +/*! + * @brief Set number of bytes as dummy to shift out to the serial interface. + * + * @param base Pointer to QSPI Type. + * @param count number of bytes as dummy to shift out. + */ +static inline void QSPI_SetDummyCnt(QSPI_Type *base, qspi_dummy_count_t count) +{ + uint32_t temp = 0x00U; + + temp = base->HDRCNT; + base->HDRCNT = (temp & ~QSPI_HDRCNT_DUMMY_CNT_MASK) | QSPI_HDRCNT_DUMMY_CNT(count); +} + +/*! + * @brief Set QSPI serial interface instruction. + * + * @param base Pointer to QSPI Type. + * @param instruction QSPI serial interface instruction. + */ +static inline void QSPI_SetInstruction(QSPI_Type *base, uint32_t instruction) +{ + base->INSTR = QSPI_INSTR_INSTR(instruction); +} + +/*! + * @brief Set QSPI serial interface address. + * + * @param base Pointer to QSPI Type. + * @param address QSPI serial interface address. + */ +static inline void QSPI_SetAddress(QSPI_Type *base, uint32_t address) +{ + base->ADDR = address; +} + +/*! + * @brief Set QSPI serial interface read mode. + * + * @param base Pointer to QSPI Type. + * @param mode QSPI serial interface read mode. + */ +static inline void QSPI_SetReadMode(QSPI_Type *base, uint32_t mode) +{ + base->RDMODE = QSPI_RDMODE_RMODE(mode); +} + +/*! + * @brief Set number of bytes of data to shift in from the serial interface. + * + * @param base Pointer to QSPI Type. + * @param count number of bytes of data to shift in. + */ +static inline void QSPI_SetDataInCnt(QSPI_Type *base, uint32_t count) +{ + base->DINCNT = QSPI_DINCNT_DATA_IN_CNT(count); +} + +/*! + * @brief Update the number of bytes in each serial interface I/O transfer. + * + * @param base Pointer to QSPI Type. + * @param length the number of bytes in each serial interface I/O transfer. + */ +static inline void QSPI_UpdateTansferLength(QSPI_Type *base, qspi_transfer_length_t length) +{ + uint32_t temp = 0x00U; + + temp = base->CONF; + base->CONF = (temp & ~QSPI_CONF_BYTE_LEN_MASK) | QSPI_CONF_BYTE_LEN(length); +} + +/*! + * @brief Activate or de-activate serial select output. + * + * @param base Pointer to QSPI Type. + * @param enable enable or disable. + */ +void QSPI_SetSSEnable(QSPI_Type *base, bool enable); + +/*! + * @brief Start the specified QSPI transfer. + * + * @param base Pointer to QSPI Type. + * @param direction QSPI tansfer direction. + */ +void QSPI_StartTransfer(QSPI_Type *base, qspi_transfer_direction_t direction); + +/*! + * @brief Stop QSPI transfer. + * + * @param base Pointer to QSPI Type. + */ +void QSPI_StopTransfer(QSPI_Type *base); + +/*! + * @brief Write a byte to QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @param data data to be written. + */ +void QSPI_WriteByte(QSPI_Type *base, uint8_t data); + +/*! + * @brief Read a byte from QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @return byte from QSPI serial interface. + */ +uint8_t QSPI_ReadByte(QSPI_Type *base); + +/*! + * @brief Write a word to QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @param word data to be written. + */ +void QSPI_WriteWord(QSPI_Type *base, uint32_t word); + +/*! + * @brief Read a word from QSPI serial interface. + * + * @param base Pointer to QSPI Type. + * @return word from QSPI serial interface. + */ +uint32_t QSPI_ReadWord(QSPI_Type *base); + +/*! + * @brief Set DMA tansfer related configuration. + * + * @param base Pointer to QSPI Type. + * @param direction DMA transfer direction, read or write. + * @param length DMA burst length, 1/4/8 bytes. + */ +void QSPI_SetDmaTransferConfig(QSPI_Type *base, qspi_dma_transfer_direction_t direction, qspi_dma_burst_len_t length); + +/*! + * @brief Sends a buffer of data bytes using a blocking method. + * @note This function blocks via polling until all bytes have been sent. + * @param base QSPI base pointer + * @param buffer The data bytes to send + * @param size The number of data bytes to send + */ +void QSPI_WriteBlocking(QSPI_Type *base, uint32_t *buffer, size_t size); + +/*! + * @brief Receives a buffer of data bytes using a blocking method. + * + * @param base QSPI base pointer + * @param buffer The data bytes to send + * @param size The number of data bytes to receive + */ +void QSPI_ReadBlocking(QSPI_Type *base, uint32_t *buffer, size_t size); + +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/* @}*/ + +#endif /* _FSL_QSPI_H_*/ diff --git a/drivers/mw320/rtc/driver_mw_rtc.cmake b/drivers/mw320/rtc/driver_mw_rtc.cmake new file mode 100644 index 000000000..e02a77b9e --- /dev/null +++ b/drivers/mw320/rtc/driver_mw_rtc.cmake @@ -0,0 +1,14 @@ +#Description: MW_RTC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_rtc component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_rtc.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/rtc/fsl_rtc.c b/drivers/mw320/rtc/fsl_rtc.c new file mode 100644 index 000000000..cc799f2e0 --- /dev/null +++ b/drivers/mw320/rtc/fsl_rtc.c @@ -0,0 +1,288 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_rtc.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.rtc" +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ +/*! + * @brief Ungates the RTC clock and configures the peripheral for basic operation. + * + * This function configures the RTC only if the counter is not running. + * + * @note This API should be called at the beginning of the application using the RTC driver. + * + * @param base RTC peripheral base address + * @param config Pointer to the user's RTC configuration structure. + */ +void RTC_Init(RTC_Type *base, const rtc_config_t *config) +{ + bool running; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + CLOCK_EnableClock(kCLOCK_Rtc); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + + running = ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RUN_MASK) != 0U); + if (running && (!config->ignoreInRunning)) + { + RTC_StopTimer(base); + } + + /* Reconfigure the RTC if it's not running. */ + if ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RUN_MASK) == 0U) + { + /* Ensure RTC reset is deasserted */ + while ((base->CNT_EN_REG & RTC_CNT_EN_REG_STS_RESETN_MASK) == 0U) + { + } + base->CNT_CNTL_REG = + (config->stopCntInDebug ? RTC_CNT_CNTL_REG_CNT_DBG_ACT(0U) : RTC_CNT_CNTL_REG_CNT_DBG_ACT(1U)) | + (config->autoUpdateCntVal ? RTC_CNT_CNTL_REG_CNT_UPDT_MOD(2U) : RTC_CNT_CNTL_REG_CNT_UPDT_MOD(0U)); + base->CLK_CNTL_REG = RTC_CLK_CNTL_REG_CLK_DIV(config->clkDiv); + base->CNT_UPP_VAL_REG = config->cntUppVal; + /* Reset counter */ + RTC_ResetTimer(base); + } +} + +/*! + * @brief Stops the timer and gate the RTC clock. + * + * @param base RTC peripheral base address + */ +void RTC_Deinit(RTC_Type *base) +{ + RTC_StopTimer(base); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + CLOCK_DisableClock(kCLOCK_Rtc); +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ +} + +/*! + * @brief Fills in the RTC config struct with the default settings. + * + * The default values are as follows. + * @code + * config->ignoreInRunning = false; + * config->autoUpdateCntVal = true; + * config->stopCntInDebug = true; + * config->clkDiv = kRTC_ClockDiv32; + * config->cntUppVal = 0xFFFFFFFFU; + * @endcode + * @param config Pointer to the user's RTC configuration structure. + */ +void RTC_GetDefaultConfig(rtc_config_t *config) +{ + assert(NULL != config); + + /* Initializes the configure structure to zero. */ + (void)memset(config, 0, sizeof(*config)); + + /* Force update of the configuration even if the counter is running. */ + config->ignoreInRunning = false; + /* Enable CNT_VAL_REG update for counter read. */ + config->autoUpdateCntVal = true; + /* Stop the counter in debug mode. */ + config->stopCntInDebug = true; + /* Use 1.024KHz clock for counter. */ + config->clkDiv = kRTC_ClockDiv32; + /* Use 32bit full range for counter. */ + config->cntUppVal = 0xFFFFFFFFU; +} + +/*! + * @brief Gets current RTC counter value. + * + * @param base RTC peripheral base address + * + * @return counter value in RTC. + */ +uint32_t RTC_GetCounter(RTC_Type *base) +{ + /* To get counter, autoUpdateCntVal must be configured to true. */ + assert((base->CNT_CNTL_REG & RTC_CNT_CNTL_REG_CNT_UPDT_MOD_MASK) == RTC_CNT_CNTL_REG_CNT_UPDT_MOD(2U)); + return base->CNT_VAL_REG; +} + +/*! + * @brief Sets the RTC alarm time. + * + * The function checks whether the specified alarm time is greater than the present + * time. If not, the function does not set the alarm and returns an error. + * + * @param base RTC peripheral base address + * @param alarmCnt Counter value to trigger the alarm. + * + * @return kStatus_Success: success in setting the RTC alarm + * kStatus_Fail: Error because the alarm time has already passed + */ +status_t RTC_SetAlarm(RTC_Type *base, uint32_t alarmCnt) +{ + status_t status; + + /* If we can get the counter value, validate the alarm value. */ + if (((base->CNT_CNTL_REG & RTC_CNT_CNTL_REG_CNT_UPDT_MOD_MASK) == RTC_CNT_CNTL_REG_CNT_UPDT_MOD(2U)) && + alarmCnt <= base->CNT_VAL_REG) + { + status = kStatus_Fail; + } + else + { + base->CNT_ALARM_VAL_REG = alarmCnt; + status = kStatus_Success; + } + + return status; +} + +/*! + * @brief Returns the RTC alarm counter value. + * + * @param base RTC peripheral base address + * + * @return Alarm counter value in RTC. + */ +uint32_t RTC_GetAlarm(RTC_Type *base) +{ + return base->CNT_ALARM_VAL_REG; +} + +/*! + * brief Enables the selected RTC interrupts. + * + * param base RTC peripheral base address + * param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +void RTC_EnableInterrupts(RTC_Type *base, uint32_t mask) +{ + base->INT_MSK_REG &= ~(mask & ((uint32_t)kRTC_AllInterruptsEnable)); +} + +/*! + * brief Disables the selected RTC interrupts. + * + * param base RTC peripheral base address + * param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +void RTC_DisableInterrupts(RTC_Type *base, uint32_t mask) +{ + base->INT_MSK_REG |= (mask & ((uint32_t)kRTC_AllInterruptsEnable)); +} + +/*! + * brief Gets the enabled RTC interrupts. + * + * param base RTC peripheral base address + * + * return The enabled interrupts. This is the logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +uint32_t RTC_GetEnabledInterrupts(RTC_Type *base) +{ + return (~base->INT_MSK_REG) & ((uint32_t)kRTC_AllInterruptsEnable); +} + +/*! + * brief Gets the RTC status flags. + * + * param base RTC peripheral base address + * + * return The status flags. This is the logical OR of members of the + * enumeration ::rtc_status_flags_t + */ +uint32_t RTC_GetStatusFlags(RTC_Type *base) +{ + uint32_t tmp32 = (base->CNT_EN_REG >> RTC_CNT_EN_REG_CNT_RUN_SHIFT) & ((uint32_t)kRTC_AllNonClearableFlags); + + tmp32 |= (base->INT_RAW_REG & ((uint32_t)kRTC_AllClearableFlags)); + + return tmp32; +} + +/*! + * brief Clears the RTC status flags. + * + * param base RTC peripheral base address + * param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::rtc_status_flags_t + */ +void RTC_ClearStatusFlags(RTC_Type *base, uint32_t mask) +{ + base->INT_RAW_REG = mask & ((uint32_t)kRTC_AllClearableFlags); +} + +/*! + * @brief Starts the RTC time counter. + * + * @param base RTC peripheral base address + */ +void RTC_StartTimer(RTC_Type *base) +{ + if ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RUN_MASK) == 0U) + { + base->CNT_EN_REG = RTC_CNT_EN_REG_CNT_START_MASK; + while ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RUN_MASK) == 0U) + { + } + } +} + +/*! + * @brief Stops the RTC time counter. + * + * @param base RTC peripheral base address + */ +void RTC_StopTimer(RTC_Type *base) +{ + if ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RUN_MASK) != 0U) + { + base->CNT_EN_REG = RTC_CNT_EN_REG_CNT_STOP_MASK; + while ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RUN_MASK) != 0U) + { + } + } +} + +/*! + * @brief Performs a counter reset on the RTC module. + * + * @param base RTC peripheral base address + */ +void RTC_ResetTimer(RTC_Type *base) +{ + uint32_t i; + + /* If user calls RTC_ResetTimer() continously in short time, write reset bit cannot work well. + * Need a loop to redo the reset operation until it takes effect. */ + do + { + /* Reset counter */ + base->CNT_EN_REG = RTC_CNT_EN_REG_CNT_RESET_MASK; + + for (i = 0U; (i < 10000U) && ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RST_DONE_MASK) == 0U); i++) + { + } + } while ((base->CNT_EN_REG & RTC_CNT_EN_REG_CNT_RST_DONE_MASK) == 0U); +} diff --git a/drivers/mw320/rtc/fsl_rtc.h b/drivers/mw320/rtc/fsl_rtc.h new file mode 100644 index 000000000..5f4bcd0f7 --- /dev/null +++ b/drivers/mw320/rtc/fsl_rtc.h @@ -0,0 +1,271 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_RTC_H_ +#define _FSL_RTC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup rtc + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_RTC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */ +/*@}*/ + +/*! @brief List of RTC interrupts */ +typedef enum _rtc_interrupt_enable +{ + kRTC_AlarmInterruptEnable = (1U << 15U), /*!< Alarm interrupt. */ + kRTC_TimeOverflowInterruptEnable = (1U << 16U), /*!< Time overflow interrupt. */ + kRTC_AllInterruptsEnable = (3U << 15U), /*!< All interrupts to enable. */ +} rtc_interrupt_enable_t; + +/*! @brief List of RTC flags */ +typedef enum _rtc_status_flags +{ + kRTC_CntRunFlag = (1U << 0U), /*!< Counter reset done flag */ + kRTC_CntRstDoneFlag = (1U << 1U), /*!< Counter reset done flag */ + kRTC_ResetFlag = (1U << 2U), /*!< Module reset flag */ + kRTC_AlarmFlag = (1U << 15U), /*!< Alarm flag */ + kRTC_TimeOverflowFlag = (1U << 16U), /*!< Time overflow flag */ + kRTC_AllNonClearableFlags = (7U << 0U), /*!< All non-clearable flags */ + kRTC_AllClearableFlags = (3U << 15U), /*!< All clearable flags */ +} rtc_status_flags_t; + +/*! @brief List of clock divider */ +typedef enum _rtc_clock_div +{ + kRTC_ClockDiv1 = 0U, /*!< Clock divider 1 */ + kRTC_ClockDiv2 = 1U, /*!< Clock divider 2 */ + kRTC_ClockDiv4 = 2U, /*!< Clock divider 4 */ + kRTC_ClockDiv8 = 3U, /*!< Clock divider 8 */ + kRTC_ClockDiv16 = 4U, /*!< Clock divider 16 */ + kRTC_ClockDiv32 = 5U, /*!< Clock divider 32 */ + kRTC_ClockDiv64 = 6U, /*!< Clock divider 64 */ + kRTC_ClockDiv128 = 7U, /*!< Clock divider 128 */ + kRTC_ClockDiv256 = 8U, /*!< Clock divider 256 */ + kRTC_ClockDiv512 = 9U, /*!< Clock divider 512 */ + kRTC_ClockDiv1024 = 10U, /*!< Clock divider 1024 */ + kRTC_ClockDiv2048 = 11U, /*!< Clock divider 2048 */ + kRTC_ClockDiv4096 = 12U, /*!< Clock divider 4096 */ + kRTC_ClockDiv8192 = 13U, /*!< Clock divider 8192 */ + kRTC_ClockDiv16384 = 14U, /*!< Clock divider 16384 */ + kRTC_ClockDiv32768 = 15U, /*!< Clock divider 32768 */ +} rtc_clock_div_t; + +/*! + * @brief RTC config structure + * + * This structure holds the configuration settings for the RTC peripheral. To initialize this + * structure to reasonable defaults, call the RTC_GetDefaultConfig() function and pass a + * pointer to your config structure instance. + * + * The config struct can be made const so it resides in flash + */ +typedef struct _rtc_config +{ + bool ignoreInRunning; /*!< true: If the counter is already running, the configuration will be ignored. + false: Counter will always be reset and the the configurations will always be set. */ + bool autoUpdateCntVal; /*!< true: CNT_VAL is updated on every counter clock tick. + false: CNT_VAL is not updated. */ + bool stopCntInDebug; /*!< true: In debug mode, stop the counters. + false: In debug mode, counters are not affected. */ + rtc_clock_div_t clkDiv; /*!< Counter clock divider. */ + uint32_t cntUppVal; /*!< If counter reaches this value, the counter will overflow to 0. */ +} rtc_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungates the RTC clock and configures the peripheral for basic operation. + * + * This function configures the RTC only if the counter is not running. + * + * @note This API should be called at the beginning of the application using the RTC driver. + * + * @param base RTC peripheral base address + * @param config Pointer to the user's RTC configuration structure. + */ +void RTC_Init(RTC_Type *base, const rtc_config_t *config); + +/*! + * @brief Stops the timer and gate the RTC clock. + * + * @param base RTC peripheral base address + */ +void RTC_Deinit(RTC_Type *base); + +/*! + * @brief Fills in the RTC config struct with the default settings. + * + * The default values are as follows. + * @code + * config->ignoreInRunning = true; + * config->autoUpdateCntVal = true; + * config->stopCntInDebug = true; + * config->clkDiv = kRTC_ClockDiv32; + * config->cntUppVal = 0xFFFFFFFFU; + * @endcode + * @param config Pointer to the user's RTC configuration structure. + */ +void RTC_GetDefaultConfig(rtc_config_t *config); + +/*! @}*/ + +/*! + * @name Current Time & Alarm + * @{ + */ + +/*! + * @brief Gets current RTC counter value. + * + * @param base RTC peripheral base address + * + * @return counter value in RTC. + */ +uint32_t RTC_GetCounter(RTC_Type *base); + +/*! + * @brief Sets the RTC alarm time. + * + * The function checks whether the specified alarm time is greater than the present + * time. If not, the function does not set the alarm and returns an error. + * + * @param base RTC peripheral base address + * @param alarmCnt Counter value to trigger the alarm. + * + * @return kStatus_Success: success in setting the RTC alarm + * kStatus_Fail: Error because the alarm time has already passed + */ +status_t RTC_SetAlarm(RTC_Type *base, uint32_t alarmCnt); + +/*! + * @brief Returns the RTC alarm counter value. + * + * @param base RTC peripheral base address + * + * @return Alarm counter value in RTC. + */ +uint32_t RTC_GetAlarm(RTC_Type *base); + +/*! @}*/ + +/*! + * @name Interrupt Interface + * @{ + */ + +/*! + * @brief Enables the selected RTC interrupts. + * + * @param base RTC peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +void RTC_EnableInterrupts(RTC_Type *base, uint32_t mask); + +/*! + * @brief Disables the selected RTC interrupts. + * + * @param base RTC peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +void RTC_DisableInterrupts(RTC_Type *base, uint32_t mask); + +/*! + * @brief Gets the enabled RTC interrupts. + * + * @param base RTC peripheral base address + * + * @return The enabled interrupts. This is the logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +uint32_t RTC_GetEnabledInterrupts(RTC_Type *base); + +/*! @}*/ + +/*! + * @name Status Interface + * @{ + */ + +/*! + * @brief Gets the RTC status flags. + * + * @param base RTC peripheral base address + * + * @return The status flags. This is the logical OR of members of the + * enumeration ::rtc_status_flags_t + */ +uint32_t RTC_GetStatusFlags(RTC_Type *base); + +/*! + * @brief Clears the RTC status flags. + * + * @param base RTC peripheral base address + * @param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::rtc_status_flags_t + */ +void RTC_ClearStatusFlags(RTC_Type *base, uint32_t mask); + +/*! @}*/ + +/*! + * @name Timer Start and Stop + * @{ + */ + +/*! + * @brief Starts the RTC time counter. + * + * @param base RTC peripheral base address + */ +void RTC_StartTimer(RTC_Type *base); + +/*! + * @brief Stops the RTC time counter. + * + * @param base RTC peripheral base address + */ +void RTC_StopTimer(RTC_Type *base); + +/*! + * @brief Performs a counter reset on the RTC module. + * + * @param base RTC peripheral base address + */ +void RTC_ResetTimer(RTC_Type *base); + +/*! @}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_RTC_H_ */ diff --git a/drivers/mw320/sdioc/driver_mw_sdioc.cmake b/drivers/mw320/sdioc/driver_mw_sdioc.cmake new file mode 100644 index 000000000..a13739bf3 --- /dev/null +++ b/drivers/mw320/sdioc/driver_mw_sdioc.cmake @@ -0,0 +1,14 @@ +#Description: MW_SDIOC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_sdioc component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_sdioc.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/sdioc/fsl_sdioc.c b/drivers/mw320/sdioc/fsl_sdioc.c new file mode 100644 index 000000000..5304bbc25 --- /dev/null +++ b/drivers/mw320/sdioc/fsl_sdioc.c @@ -0,0 +1,419 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_sdioc.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/* Typedef for interrupt handler. */ +typedef void (*sdioc_isr_t)(sdioc_handle_t *handle); +/*! @brief check flag avalibility */ +#define IS_SDIOC_FLAG_SET(reg, flag) (((reg) & ((uint32_t)flag)) != 0UL) +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief SDIOC base pointer array */ +static SDIOC_Type *const s_sdiocBase[] = SDIOC_BASE_PTRS; + +/*! @brief SDIOC internal handle pointer array */ +static sdioc_handle_t *s_sdiocHandle[ARRAY_SIZE(s_sdiocBase)] = {NULL}; + +/*! @brief SDIOC IRQ name array */ +static const IRQn_Type s_sdiocIRQ[] = SDIOC_IRQS; + +/* SDIOC ISR for transactional APIs. */ +static sdioc_isr_t s_sdiocIsr; +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t SDIOC_GetInstance(SDIOC_Type *base) +{ + uint8_t instance = 0; + + while ((instance < ARRAY_SIZE(s_sdiocBase)) && (s_sdiocBase[instance] != base)) + { + instance++; + } + + assert(instance < ARRAY_SIZE(s_sdiocBase)); + + return instance; +} + +/*! + * brief Transfer parameters command/data/dma configurations. + * + * param base SDIOC base address. + * param command Transfer command pointer, application should not pass NULL pointer to this parameter. + * param data Transfer data pointer, application can pass NULL when send command only. + * param dmaConfig Internal dma configurations, application can pass NULL when dma is not used. + * + * retval #kStatus_InvalidArgument Argument is invalid. + * retval #kStatus_Success Operate successfully. + */ + +status_t SDIOC_SetTransferConfig(SDIOC_Type *base, + sdioc_command_t *command, + sdioc_data_t *data, + sdioc_dma_config_t *dmaConfig) +{ + uint32_t xferReg = 0U; + uint32_t blockCountReg = 0U; + status_t error = kStatus_Success; + + if (command == NULL) + { + error = kStatus_InvalidArgument; + } + else + { + /* command index/type/response type configuration */ + xferReg |= command->commandResponseType | SDIOC_MM4_CMD_XFRMD_CMD_TYPE(command->commandType) | + SDIOC_MM4_CMD_XFRMD_CMD_IDX(command->commandIndex); + + /* data configuration */ + if (data != NULL) + { + blockCountReg = base->MM4_BLK_CNTL & ~(SDIOC_MM4_BLK_CNTL_XFR_BLKSZ_MASK | + SDIOC_MM4_BLK_CNTL_DMA_BUFSZ_MASK | SDIOC_MM4_BLK_CNTL_BLK_CNT_MASK); + xferReg |= SDIOC_MM4_CMD_XFRMD_DXFRDIR(data->dataTxAddr != NULL ? 0U : 1U); + + xferReg |= SDIOC_MM4_CMD_XFRMD_DPSEL_MASK; + + if (data->dataEnableAutoCommand12) + { + xferReg |= SDIOC_MM4_CMD_XFRMD_AUTOCMD12_MASK; + } + + if (dmaConfig != NULL) + { + xferReg |= SDIOC_MM4_CMD_XFRMD_DMA_EN_MASK; + blockCountReg |= SDIOC_MM4_BLK_CNTL_DMA_BUFSZ(dmaConfig->dmaBufferBoundary); + } + + if (data->dataBlockCount > 1U) + { + xferReg |= SDIOC_MM4_CMD_XFRMD_MS_BLKSEL_MASK | SDIOC_MM4_CMD_XFRMD_BLKCNTEN_MASK; + } + + blockCountReg |= + SDIOC_MM4_BLK_CNTL_BLK_CNT(data->dataBlockCount) | SDIOC_MM4_BLK_CNTL_XFR_BLKSZ(data->dataBlockSize); + + base->MM4_SYSADDR = data->dataTxAddr != NULL ? (uint32_t)data->dataTxAddr : (uint32_t)data->dataRxAddr; + } + + base->MM4_BLK_CNTL = blockCountReg; + base->MM4_ARG = command->commandArgument; + base->MM4_CMD_XFRMD = xferReg; + } + + return error; +} + +/*! + * brief SDIOC module initialization function. + * + * Configures the SDIOC according to the user configuration. + * + * Example: + code + sdioc_config_t config; + config.busVoltage = kSDIOC_BusVoltage_3V3; + config.dataTimeout = kSDIOC_DataTimeoutValue14; + SDIOC_Init(SDIOC, &config); + endcode + * + * param base SDIOC peripheral base address. + * param config SDIOC configuration information. + * retval #kStatus_Success Operate successfully. + */ +void SDIOC_Init(SDIOC_Type *base, const sdioc_config_t *config) +{ + assert(config != NULL); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Enable SDIOC clock. */ + CLOCK_EnableClock(kCLOCK_Sdio); + CLOCK_EnableClock(kCLOCK_SdioAhb); +#endif + /* reset command and data line */ + SDIOC_ResetCommandLine(base); + SDIOC_ResetDataLine(base); + + /* enable internal/card clock */ + SDIOC_EnableCardClock(base, true); + SDIOC_EnableInternalClock(base, true); + + /* set sdio bus voltage */ + SDIOC_SetBusVoltage(base, config->busVoltage); + /* set data timeout value */ + SDIOC_SetDataTimeout(base, config->dataTimeout); +} + +/*! + * brief Deinitializes the SDIOC. + * + * param base SDIOC peripheral base address. + */ +void SDIOC_Deinit(SDIOC_Type *base) +{ +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Disable clock. */ + CLOCK_DisableClock(kCLOCK_Sdio); + CLOCK_DisableClock(kCLOCK_SdioAhb); +#endif +} + +static status_t SDIOC_ReceiveCommandResponse(SDIOC_Type *base, sdioc_command_t *command) +{ + assert(command != NULL); + + uint32_t response0 = SDIOC_ReadCommandResponse(base, kSDIOC_ResponseIndex0); + uint32_t response1 = SDIOC_ReadCommandResponse(base, kSDIOC_ResponseIndex1); + uint32_t response2 = SDIOC_ReadCommandResponse(base, kSDIOC_ResponseIndex2); + + if (command->commandResponseType != kSDIOC_CommandNoResponse) + { + command->commandResponse[0U] = response0; + if (command->commandResponseType == kSDIOC_CommandResponseLen136BitsCheckCrc) + { + /* R3-R2-R1-R0(lowest 8 bit is invalid bit) has the same format as R2 format in SD specification document + after removed internal CRC7 and end bit. */ + command->commandResponse[0U] <<= 8U; + command->commandResponse[1U] = (response1 << 8U) | ((response0 & 0xFF000000U) >> 24U); + command->commandResponse[2U] = (response2 << 8U) | ((response1 & 0xFF000000U) >> 24U); + command->commandResponse[3U] = + (SDIOC_ReadCommandResponse(base, kSDIOC_ResponseIndex3) << 8U) | ((response2 & 0xFF000000U) >> 24U); + } + } + + /* check response error flag */ + if ((command->commandResponseErrorFlags != 0U) && + ((command->commandResponseType == kSDIOC_CommandResponseLen48Bits) || + (command->commandResponseType == kSDIOC_CommandResponseLen48BitsCheckCrcIndex) || + (command->commandResponseType == kSDIOC_CommandResponseLen48BitsWithCheckBusyCrcIndex))) + { + if ((command->commandResponseErrorFlags & command->commandResponse[0U]) != 0U) + { + return kStatus_SDIOC_TransferCommandResponseError; + } + } + + return kStatus_Success; +} + +/*! + * brief Creates the SDIOC handle. + * + * param base SDIOC peripheral base address. + * param handle SDIOC handle pointer. + * param callback Structure pointer to contain all callback functions. + * param userData Callback function parameter. + */ +void SDIOC_TransferCreateHandle(SDIOC_Type *base, sdioc_handle_t *handle, sdioc_callback_t *callback, void *userData) +{ + assert(handle != NULL); + assert(callback != NULL); + + /* Zero the handle. */ + (void)memset(handle, 0, sizeof(*handle)); + + handle->base = base; + + /* Set the callback. */ + handle->callback.transferCallback = callback->transferCallback; + handle->callback.cardIntCallback = callback->cardIntCallback; + handle->callback.cardDetectCallback = callback->cardDetectCallback; + handle->userData = userData; + + /* Save the handle in global variables to support the double weak mechanism. */ + s_sdiocHandle[SDIOC_GetInstance(base)] = handle; + + /* save IRQ handler */ + s_sdiocIsr = SDIOC_TransferHandleIRQ; + + (void)EnableIRQ(s_sdiocIRQ[SDIOC_GetInstance(base)]); +} + +/*! + * brief Transfers the command/data using an interrupt and an asynchronous method. + * + * This function sends a command and data and returns immediately. It doesn't wait for the transfer to complete or + * to encounter an error. The application must not call this API in multiple threads at the same time. Because of that + * this API doesn't support the re-entry mechanism. + * + * This function transfer data through SDIOC internal DMA. + * + * note Call API @ref SDIOC_TransferCreateHandle when calling this API. + * + * param handle SDIOC handle. + * param command Transfer command. + * param data Transfer data. + * param dmaConfig Internal dma configurations. + * retval #kStatus_InvalidArgument Argument is invalid. + * retval #kStatus_SDIOC_BusyTransferring Busy transferring. + * retval #kStatus_Success Operate successfully. + */ +status_t SDIOC_TransferDMANonBlocking(sdioc_handle_t *handle, + sdioc_command_t *command, + sdioc_data_t *data, + sdioc_dma_config_t *dmaConfig) +{ + status_t error = kStatus_Success; + + if ((handle == NULL) || (command == NULL) || (dmaConfig == NULL)) + { + error = kStatus_InvalidArgument; + } + else + { + if ((SDIOC_GetPresentStatus(handle->base) & (uint32_t)kSDIOC_PresentStatusCommandInhibit) != 0U) + { + return kStatus_SDIOC_BusyTransferring; + } + + handle->command = command; + + if (data == NULL) + { + SDIOC_ClearInterruptStatus(handle->base, kSDIOC_InterruptCommandFlag); + SDIOC_EnableInterruptStatus(handle->base, kSDIOC_InterruptCommandFlag, true); + SDIOC_EnableInterruptSignal(handle->base, kSDIOC_InterruptCommandFlag, true); + } + else + { + if ((SDIOC_GetPresentStatus(handle->base) & (uint32_t)kSDIOC_PresentStatusDataInhibit) != 0U) + { + return kStatus_SDIOC_BusyTransferring; + } + + SDIOC_ClearInterruptStatus(handle->base, kSDIOC_InterruptCommandAndDataFlag); + SDIOC_EnableInterruptStatus(handle->base, kSDIOC_InterruptCommandAndDataFlag, true); + SDIOC_EnableInterruptSignal(handle->base, kSDIOC_InterruptCommandAndDataFlag, true); + + handle->data = data; + } + } + + /* transfer configurations */ + if (error == kStatus_Success) + { + error = SDIOC_SetTransferConfig(handle->base, command, data, dmaConfig); + } + + return error; +} + +static void SDIOC_TransferHandleCardDetect(sdioc_handle_t *handle, uint32_t interruptFlags) +{ + if (handle->callback.cardDetectCallback != NULL) + { + handle->callback.cardDetectCallback( + handle, (interruptFlags & (uint32_t)kSDIOC_InterruptCardInsertedFlag) != 0U ? true : false, + handle->userData); + } +} + +static void SDIOC_TransferHandleCommand(sdioc_handle_t *handle, uint32_t interruptFlags) +{ + status_t transferStatus = kStatus_SDIOC_TransferCommandSuccess; + + if (handle->command != NULL) + { + if ((interruptFlags & kSDIOC_InterruptCommandErrorFlag) != 0U) + { + transferStatus = kStatus_SDIOC_TransferCommandFail; + } + else + { + if (kStatus_Success != SDIOC_ReceiveCommandResponse(handle->base, handle->command)) + { + transferStatus = kStatus_SDIOC_TransferCommandResponseError; + } + } + if (handle->callback.transferCallback != NULL) + { + handle->callback.transferCallback(handle, transferStatus, handle->userData); + } + + handle->command = NULL; + } + /* disable command interrupt signal */ + SDIOC_EnableInterruptSignal(handle->base, kSDIOC_InterruptCommandFlag, false); +} + +static void SDIOC_TransferHandleData(sdioc_handle_t *handle, uint32_t interruptFlags) +{ + if (handle->data != NULL) + { + if (handle->callback.transferCallback != NULL) + { + handle->callback.transferCallback(handle, + (interruptFlags & (uint32_t)kSDIOC_InterruptDataErrorFlag) != 0U ? + kStatus_SDIOC_TransferDataFail : + kStatus_SDIOC_TransferDataSuccess, + handle->userData); + } + + handle->data = NULL; + } + + /* disable data interrupt signal */ + SDIOC_EnableInterruptSignal(handle->base, kSDIOC_InterruptDataFlag, false); +} + +static void SDIOC_TransferHandleCardInterrupt(sdioc_handle_t *handle) +{ + if (handle->callback.cardIntCallback != NULL) + { + handle->callback.cardIntCallback(handle, handle->userData); + } +} + +/*! + * brief IRQ handler for the SDIOC. + * + * This function deals with the IRQs on the given host controller. + * + * param handle SDIOC handle. + */ +void SDIOC_TransferHandleIRQ(sdioc_handle_t *handle) +{ + assert(handle != NULL); + + uint32_t interruptFlags = SDIOC_GetEnabledInterruptStatus(handle->base); + SDIOC_ClearInterruptStatus(handle->base, interruptFlags); + + if (IS_SDIOC_FLAG_SET(interruptFlags, kSDIOC_InterruptCardDetectFlag)) + { + SDIOC_TransferHandleCardDetect(handle, interruptFlags); + } + if (IS_SDIOC_FLAG_SET(interruptFlags, kSDIOC_InterruptCommandFlag)) + { + SDIOC_TransferHandleCommand(handle, interruptFlags); + } + if (IS_SDIOC_FLAG_SET(interruptFlags, kSDIOC_InterruptDataFlag)) + { + SDIOC_TransferHandleData(handle, interruptFlags); + } + if (IS_SDIOC_FLAG_SET(interruptFlags, kSDIOC_InterruptCardInterruptFlag)) + { + SDIOC_TransferHandleCardInterrupt(handle); + } +} + +#ifdef SDIOC +void SDIO_DriverIRQHandler(void) +{ + s_sdiocIsr(s_sdiocHandle[0U]); + SDK_ISR_EXIT_BARRIER; +} +#endif diff --git a/drivers/mw320/sdioc/fsl_sdioc.h b/drivers/mw320/sdioc/fsl_sdioc.h new file mode 100644 index 000000000..8d9ae8d1f --- /dev/null +++ b/drivers/mw320/sdioc/fsl_sdioc.h @@ -0,0 +1,767 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_SDIOC_H_ +#define _FSL_SDIOC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup sdioc + * @{ + */ + +/****************************************************************************** + * Definitions. + *****************************************************************************/ +/*! @name Driver version */ +/*@{*/ +/*! @brief Driver version 2.0.1. */ +#define FSL_SDIOC_DRIVER_VERSION (MAKE_VERSION(2U, 0U, 1U)) + +/*! @brief SDIOC transfer status. */ +enum +{ + kStatus_SDIOC_BusyTransferring = MAKE_STATUS(kStatusGroup_SDIOC, 0U), /*!< Transfer is on-going. */ + kStatus_SDIOC_TransferCommandSuccess = MAKE_STATUS(kStatusGroup_SDIOC, 1U), /*!< Transfer command success. */ + kStatus_SDIOC_TransferCommandFail = MAKE_STATUS(kStatusGroup_SDIOC, 2U), /*!< Transfer command fail. */ + kStatus_SDIOC_TransferCommandResponseError = + MAKE_STATUS(kStatusGroup_SDIOC, 3U), /*!< Transfer command response error . */ + kStatus_SDIOC_TransferDataFail = MAKE_STATUS(kStatusGroup_SDIOC, 4U), /*!< Transfer data fail. */ + kStatus_SDIOC_TransferDataSuccess = MAKE_STATUS(kStatusGroup_SDIOC, 5U), /*!< Transfer data success. */ +}; + +/*! @brief SDIOC bus voltage level type definition */ +typedef enum _sdioc_bus_voltage +{ + kSDIOC_BusVoltage_3V3 = 0x07, /*!< SDIO bus voltage select 3.3V */ + kSDIOC_BusVoltage_3V0 = 0x06, /*!< SDIO bus voltage select 3.0V */ + kSDIOC_BusVoltage_1V8 = 0x05, /*!< SDIO bus voltage select 1.8V */ + + /* 0 -4 are reserved */ + +} sdioc_bus_voltage_t; + +/*! @brief SDIOC speed mode type definition */ +typedef enum _sdioc_bus_speed +{ + kSDIOC_BusSpeedNormal = 0x00, /*!< SDIO normal speed mode */ + kSDIOC_BusSpeedHigh, /*!< SDIO high speed mode */ +} sdioc_bus_speed_t; + +/*! @brief SDIOC data width type definition */ +typedef enum _sdioc_bus_width +{ + kSDIOC_BusWidth1Bit = 0x00, /*!< SDIO data width 1 bit mode */ + kSDIOC_BusWidth4Bit, /*!< SDIO data width 4 bits mode */ +} sdioc_bus_width_t; + +/*! @brief SDIOC command type definition + * @anchor _sdioc_command_type + */ +enum +{ + kSDIOC_CommandTypeNormal = 0x00, /*!< Normal command */ + kSDIOC_CommandTypeSuspend, /*!< Suspend command */ + kSDIOC_CommandTypeResume, /*!< Resume command */ + kSDIOC_CommandTypeAbort, /*!< Abort command */ +}; + +/*! @brief SDIOC response type definition + * @anchor _sdioc_command_response_type + */ +enum +{ + kSDIOC_CommandNoResponse = SDIOC_MM4_CMD_XFRMD_RES_TYPE(0x00), /*!< No response */ + kSDIOC_CommandResponseLen136BitsCheckCrc = + SDIOC_MM4_CMD_XFRMD_RES_TYPE(1U) | SDIOC_MM4_CMD_XFRMD_CRCCHKEN_MASK, /*!< Response length 136 bits */ + kSDIOC_CommandResponseLen48Bits = SDIOC_MM4_CMD_XFRMD_RES_TYPE(2U), /*!< Response length 48 bits*/ + kSDIOC_CommandResponseLen48BitsCheckCrcIndex = SDIOC_MM4_CMD_XFRMD_RES_TYPE(2U) | + SDIOC_MM4_CMD_XFRMD_CRCCHKEN_MASK | + SDIOC_MM4_CMD_XFRMD_IDXCHKEN_MASK, /*!< Response length 48 bits*/ + kSDIOC_CommandResponseLen48BitsWithCheckBusyCrcIndex = + SDIOC_MM4_CMD_XFRMD_RES_TYPE(3U) | SDIOC_MM4_CMD_XFRMD_CRCCHKEN_MASK | + SDIOC_MM4_CMD_XFRMD_IDXCHKEN_MASK, /*!< Response length 48 bits, check busy after response */ +}; + +/*! @brief SDIOC response number definition */ +typedef enum _sdioc_response_index +{ + kSDIOC_ResponseIndex0 = 0x00, /*!< Command response 0 */ + kSDIOC_ResponseIndex1, /*!< Command response 1 */ + kSDIOC_ResponseIndex2, /*!< Command response 2 */ + kSDIOC_ResponseIndex3, /*!< Command response 3 */ +} sdioc_response_index_t; + +/*! @brief SDIOC dma buffer boundary */ +typedef enum _sdioc_dma_buffer_boundary +{ + kSDIOC_DMABufferBoundary4K = 0U, /*!< DMA buffer boundary 4K*/ + kSDIOC_DMABufferBoundary8K = 1U, /*!< DMA buffer boundary 8K */ + kSDIOC_DMABufferBoundary16K = 2U, /*!< DMA buffer boundary 16K */ + kSDIOC_DMABufferBoundary32K = 3U, /*!< DMA buffer boundary 32K */ + kSDIOC_DMABufferBoundary64K = 4U, /*!< DMA buffer boundary 64K */ + kSDIOC_DMABufferBoundary128K = 5U, /*!< DMA buffer boundary 128K */ + kSDIOC_DMABufferBoundary256K = 6U, /*!< DMA buffer boundary 256K */ + kSDIOC_DMABufferBoundary512K = 7U, /*!< DMA buffer boundary 512K */ +} sdioc_dma_buffer_boundary_t; + +/*! @brief sdioc data timeout value definition */ +typedef enum _sdioc_data_timeout_value +{ + kSDIOC_DataTimeoutValue0 = 0U, /*!< timeout out value is (timeout clock)*2^13 */ + kSDIOC_DataTimeoutValue1 = 1U, /*!< timeout out value is (timeout clock)*2^14 */ + kSDIOC_DataTimeoutValue2 = 2U, /*!< timeout out value is (timeout clock)*2^15 */ + kSDIOC_DataTimeoutValue3 = 3U, /*!< timeout out value is (timeout clock)*2^16 */ + kSDIOC_DataTimeoutValue4 = 4U, /*!< timeout out value is (timeout clock)*2^17 */ + kSDIOC_DataTimeoutValue5 = 5U, /*!< timeout out value is (timeout clock)*2^18 */ + kSDIOC_DataTimeoutValue6 = 6U, /*!< timeout out value is (timeout clock)*2^19 */ + kSDIOC_DataTimeoutValue7 = 7U, /*!< timeout out value is (timeout clock)*2^20 */ + kSDIOC_DataTimeoutValue8 = 8U, /*!< timeout out value is (timeout clock)*2^21 */ + kSDIOC_DataTimeoutValue9 = 9U, /*!< timeout out value is (timeout clock)*2^22 */ + kSDIOC_DataTimeoutValue10 = 10U, /*!< timeout out value is (timeout clock)*2^23 */ + kSDIOC_DataTimeoutValue11 = 11U, /*!< timeout out value is (timeout clock)*2^24 */ + kSDIOC_DataTimeoutValue12 = 12U, /*!< timeout out value is (timeout clock)*2^25 */ + kSDIOC_DataTimeoutValue13 = 13U, /*!< timeout out value is (timeout clock)*2^26 */ + kSDIOC_DataTimeoutValue14 = 14U, /*!< timeout out value is (timeout clock)*2^27 */ +} sdioc_data_timeout_value_t; + +/*! @brief SDIOC interrupt flag definition + * @anchor _sdioc_interrupt_flag + */ +enum +{ + kSDIOC_InterruptCommandCompleteFlag = SDIOC_MM4_I_STAT_CMDCOMP_MASK, /*!< Command complete interrupt flag */ + kSDIOC_InterruptXferCompleteFlag = SDIOC_MM4_I_STAT_XFRCOMP_MASK, /*!< Transfer complete interrupt flag */ + kSDIOC_InterruptBlockGapEventFlag = SDIOC_MM4_I_STAT_BGEVNT_MASK, /*!< Block gap event flag */ + kSDIOC_InterruptDMAInterruptFlag = SDIOC_MM4_I_STAT_DMAINT_MASK, /*!< DMA interrupt flag */ + kSDIOC_InterruptBufferWriteReadyFlag = SDIOC_MM4_I_STAT_BUFWRRDY_MASK, /*!< Buffer write ready interrupt flag*/ + kSDIOC_InterruptBufferReadReadyFlag = SDIOC_MM4_I_STAT_BUFRDRDY_MASK, /*!< Buffer read ready interrupt flag */ + kSDIOC_InterruptCardInsertedFlag = SDIOC_MM4_I_STAT_CDINS_MASK, /*!< Card insertion interrupt flag */ + kSDIOC_InterruptCardRemovedFlag = SDIOC_MM4_I_STAT_CDREM_MASK, /*!< Card remove interrupt flag */ + kSDIOC_InterruptCardInterruptFlag = + SDIOC_MM4_I_STAT_CDINT_MASK, /*!< Card interrupt flag, interrupt detected by DAT[1] */ + kSDIOC_InterruptERRInterrupt = SDIOC_MM4_I_STAT_ERRINT_MASK, /*!< Error interrupt flag */ + kSDIOC_InterruptCommandTimeoutFlag = SDIOC_MM4_I_STAT_CTOERR_MASK, /*!< Command timeout error interrupt flag */ + kSDIOC_InterruptCommandCrcErrorFlag = SDIOC_MM4_I_STAT_CCRCERR_MASK, /*!< Command crc error interrupt flag */ + kSDIOC_InterruptCommandEntBitErrorFlag = SDIOC_MM4_I_STAT_CENDERR_MASK, /*!< Command end bit error interrupt flag */ + kSDIOC_InterruptCommandIndexErrorFlag = SDIOC_MM4_I_STAT_CIDXERR_MASK, /*!< Command index error interrupt flag */ + kSDIOC_InterruptDataTimeoutErrorFlag = SDIOC_MM4_I_STAT_DTOERR_MASK, /*!< Data timeout error interrupt flag */ + kSDIOC_InterruptDataCrcErrorFlag = SDIOC_MM4_I_STAT_DCRCERR_MASK, /*!< Data crc error interrupt flag */ + kSDIOC_InterruptDataEndBitErrorFlag = SDIOC_MM4_I_STAT_DENDERR_MASK, /*!< Data end bit error interrupt flag */ + kSDIOC_InterruptCurrentLimitErrorFlag = SDIOC_MM4_I_STAT_ILMTERR_MASK, /*!< Current limit error interrupt flag */ + kSDIOC_InterruptAutoCommand12ErrorFlag = SDIOC_MM4_I_STAT_AC12ERR_MASK, /*!< Current limit error interrupt flag */ + kSDIOC_InterruptAhbTargetErrorFlag = SDIOC_MM4_I_STAT_AHBTERR_MASK, /*!< AHB Target error interrupt flag */ + + kSDIOC_InterruptCardDetectFlag = + kSDIOC_InterruptCardInsertedFlag | kSDIOC_InterruptCardRemovedFlag, /*!< card insert flag summary */ + kSDIOC_InterruptCommandErrorFlag = kSDIOC_InterruptCommandTimeoutFlag | kSDIOC_InterruptCommandCrcErrorFlag | + kSDIOC_InterruptCommandEntBitErrorFlag | + kSDIOC_InterruptCommandIndexErrorFlag, /*!< command error flag summary */ + kSDIOC_InterruptCommandFlag = + kSDIOC_InterruptCommandCompleteFlag | kSDIOC_InterruptCommandErrorFlag, /*!< command flag summary */ + + kSDIOC_InterruptDataErrorFlag = kSDIOC_InterruptDataTimeoutErrorFlag | kSDIOC_InterruptDataCrcErrorFlag | + kSDIOC_InterruptDataEndBitErrorFlag | kSDIOC_InterruptAutoCommand12ErrorFlag | + kSDIOC_InterruptDMAInterruptFlag | + kSDIOC_InterruptAhbTargetErrorFlag, /*!< data error flag */ + + kSDIOC_InterruptDataFlag = + kSDIOC_InterruptXferCompleteFlag | kSDIOC_InterruptDataErrorFlag, /*!< data flag summary */ + + kSDIOC_InterruptCommandAndDataFlag = + kSDIOC_InterruptCommandFlag | kSDIOC_InterruptDataFlag, /*!< command and data flag summary */ +}; + +/*! @brief SDIOC present status definition */ +enum +{ + kSDIOC_PresentStatusCommandInhibit = SDIOC_MM4_STATE_CCMDINHBT_MASK, /*!< Command inhibit(CMD) status */ + kSDIOC_PresentStatusDataInhibit = SDIOC_MM4_STATE_DCMDINHBT_MASK, /*!< Command inhibit(DAT) status */ + kSDIOC_PresentStatusDataLineActive = SDIOC_MM4_STATE_DATACTV_MASK, /*!< DAT line active */ + kSDIOC_PresentStatusWriteTransferActive = SDIOC_MM4_STATE_WRACTV_MASK, /*!< Write transfer active */ + kSDIOC_PresentStatusReadTransferActive = SDIOC_MM4_STATE_RDACTV_MASK, /*!< Read transfer active */ + kSDIOC_PresentStatusBufferWriteReady = SDIOC_MM4_STATE_BUFWREN_MASK, /*!< Buffer write enable */ + kSDIOC_PresentStatusBufferReadReady = SDIOC_MM4_STATE_BUFRDEN_MASK, /*!< Buffer read enable */ + kSDIOC_PresentStatusCardInserted = SDIOC_MM4_STATE_CDINSTD_MASK, /*!< Card inserted */ + kSDIOC_PresentStatusData0Level = 1U << SDIOC_MM4_STATE_LWRDATLVL_SHIFT, /*!< Data[0] line signal level */ + kSDIOC_PresentStatusData1Level = 1U << (SDIOC_MM4_STATE_LWRDATLVL_SHIFT + 1U), /*!< Data[1] line signal level */ + kSDIOC_PresentStatusData2Level = 1U << (SDIOC_MM4_STATE_LWRDATLVL_SHIFT + 2U), /*!< Data[2] line signal level */ + kSDIOC_PresentStatusData3Level = 1U << (SDIOC_MM4_STATE_LWRDATLVL_SHIFT + 3U), /*!< Data[3] line signal level */ + kSDIOC_PresentStatusCommandLevel = SDIOC_MM4_STATE_CMDLVL_MASK, /*!< CMD line signal level */ + kSDIOC_PresentStatusData4Level = 1U << SDIOC_MM4_STATE_UPRDATLVL_SHIFT, /*!< DAT[4] line signal level */ + kSDIOC_PresentStatusData5Level = 1U << (SDIOC_MM4_STATE_UPRDATLVL_SHIFT + 1U), /*!< DAT[5] line signal level */ + kSDIOC_PresentStatusData6Level = 1U << (SDIOC_MM4_STATE_UPRDATLVL_SHIFT + 2U), /*!< DAT[6] line signal level */ + kSDIOC_PresentStatusData7Level = 1U << (SDIOC_MM4_STATE_UPRDATLVL_SHIFT + 3U), /*!< DAT[7] line signal level */ +}; + +/*! @brief SDIOC Configuration Structure definition */ +typedef struct _sdioc_config +{ + sdioc_bus_voltage_t busVoltage; /*!< bus voltage */ + sdioc_data_timeout_value_t dataTimeout; /*!< data timeout value */ +} sdioc_config_t; + +/*! @brief SDIOC command configuration structure definition */ +typedef struct _sdioc_command +{ + uint32_t commandIndex; /*!< Command index*/ + uint32_t commandArgument; /*!< command argument which specified as bit 39-8 of command-format */ + uint8_t commandType; /*!< Command type, @ref _sdioc_command_type */ + uint32_t commandResponseType; /*!< Command response type, @ref _sdioc_command_response_type */ + uint32_t commandResponseErrorFlags; /*!< Command response error flags */ + uint32_t commandResponse[4]; /*!< Command response */ +} sdioc_command_t; + +/*! @brief SDIOC data configuration structure definition*/ +typedef struct _sdioc_data +{ + bool dataEnableAutoCommand12; /*!< enable auto command 12 after data transfer complete */ + uint32_t dataBlockCount; /*!< Block count for current transfer. + - 0x0000: stop count + - 0x0001: 1 block + - 0x0002: 2 blocks + .................. + .................. + - 0xFFFF: 65535 blocks */ + + uint32_t dataBlockSize; /*!< Transfer block size. + - 0x000: no data transfer + - 0x001: 1 byte + - 0x002: 2 bytes + - 0x003: 3 bytes + - 0x004: 4 bytes + .................. + - 0x1FF: 511 bytes + - 0x200: 512 bytes + .................. + - 0x800: 2048 bytes + - 0x801 - 0xFFF: reserved */ + uint8_t *dataTxAddr; /*!< tx data buffer address */ + uint8_t *dataRxAddr; /*!< rx data buffer address */ + +} sdioc_data_t; + +/*! @brief SDIOC dma configuration structure definition */ +typedef struct _sdioc_dma_config +{ + sdioc_dma_buffer_boundary_t dmaBufferBoundary; /*!< dma buffer boundary */ +} sdioc_dma_config_t; + +/*! @brief SDIOC handle typedef. */ +typedef struct _sdioc_handle sdioc_handle_t; + +/*! @brief SDIOC callback pointer*/ +typedef void (*sdioc_transfer_callback_t)(sdioc_handle_t *handle, status_t transferStatus, void *userData); +typedef void (*sdioc_card_int_callback_t)(sdioc_handle_t *handle, void *userData); +typedef void (*sdioc_card_detect_callback_t)(sdioc_handle_t *handle, bool isCardInserted, void *userData); + +/*!< @brief SDIOC callback structure definition */ +typedef struct _sdioc_callback +{ + sdioc_transfer_callback_t transferCallback; /*!< transfer callback pointer */ + sdioc_card_int_callback_t cardIntCallback; /*!< card interrupt callback pointer */ + sdioc_card_detect_callback_t cardDetectCallback; /*!< card detect callback pointer */ +} sdioc_callback_t; + +/*! + * @brief SDIOC handle. + * + * Defines the structure to save the SDIOC state information and callback function. + * + */ +struct _sdioc_handle +{ + SDIOC_Type *base; /*!< host controller base address */ + sdioc_data_t *data; /*!< transfer data pointer */ + sdioc_command_t *command; /*!< transfer command pointer */ + sdioc_callback_t callback; /*!< Callback function. */ + void *userData; /*!< Parameter for transfer complete callback. */ +}; +/************************************************************************************************* + * API + ************************************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name SDIOC Initialization and deinitialization + * @{ + */ +/*! + * @brief SDIOC module initialization function. + * + * Configures the SDIOC according to the user configuration. + * + * Example: + @code + sdioc_config_t config; + config.busVoltage = kSDIOC_BusVoltage_3V3; + config.dataTimeout = kSDIOC_DataTimeoutValue14; + SDIOC_Init(SDIOC, &config); + @endcode + * + * @param base SDIOC peripheral base address. + * @param config SDIOC configuration information. + * @retval #kStatus_Success Operate successfully. + */ +void SDIOC_Init(SDIOC_Type *base, const sdioc_config_t *config); + +/*! + * @brief Deinitializes the SDIOC. + * + * @param base SDIOC peripheral base address. + */ +void SDIOC_Deinit(SDIOC_Type *base); +/* @} */ + +/*! + * @name SDIOC bus functional interface + * @{ + */ +/*! + * @brief SDIOC set bus voltage. + * + * @param base SDIOC peripheral base address. + * @param busVoltage SDIO bus voltage. + */ +static inline void SDIOC_SetBusVoltage(SDIOC_Type *base, sdioc_bus_voltage_t busVoltage) +{ + base->MM4_CNTL1 = (base->MM4_CNTL1 & ~SDIOC_MM4_CNTL1_VLTGSEL_MASK) | SDIOC_MM4_CNTL1_VLTGSEL(busVoltage); +} + +/*! + * @brief SDIOC set data bus width. + * + * @param base SDIOC peripheral base address. + * @param busWidth SDIO bus width. + */ +static inline void SDIOC_SetDataBusWidth(SDIOC_Type *base, sdioc_bus_width_t busWidth) +{ + base->MM4_CNTL1 = (base->MM4_CNTL1 & ~SDIOC_MM4_CNTL1__4BITMD_MASK) | SDIOC_MM4_CNTL1__4BITMD(busWidth); +} + +/*! + * @brief SDIOC set bus speed. + * + * @param base SDIOC peripheral base address. + * @param busSpeed SDIO bus speed. + */ +static inline void SDIOC_SetBusSpeed(SDIOC_Type *base, sdioc_bus_speed_t busSpeed) +{ + base->MM4_CNTL1 = (base->MM4_CNTL1 & ~SDIOC_MM4_CNTL1_HISPEED_MASK) | SDIOC_MM4_CNTL1_HISPEED(busSpeed); +} + +/*! + * @brief SDIOC enable/disable bus power. + * + * @param base SDIOC peripheral base address. + * @param enable true is enable power, false is disable power. + */ +static inline void SDIOC_EnableBusPower(SDIOC_Type *base, bool enable) +{ + if (enable) + { + base->MM4_CNTL1 |= SDIOC_MM4_CNTL1_BUSPWR_MASK; + } + else + { + base->MM4_CNTL1 &= ~SDIOC_MM4_CNTL1_BUSPWR_MASK; + } +} + +/*! + * @brief SDIOC enable/disable internal clock. + * + * @param base SDIOC peripheral base address. + * @param enable true is enable internal clock, false is disable internal clock. + */ +static inline void SDIOC_EnableInternalClock(SDIOC_Type *base, bool enable) +{ + if (enable) + { + base->MM4_CNTL2 |= SDIOC_MM4_CNTL2_INTCLKEN_MASK; + } + else + { + base->MM4_CNTL2 &= ~SDIOC_MM4_CNTL2_INTCLKEN_MASK; + } +} + +/*! + * @brief SDIOC enable/disable card clock. + * + * @param base SDIOC peripheral base address. + * @param enable true is enable card clock, false is disable card clock. + */ +static inline void SDIOC_EnableCardClock(SDIOC_Type *base, bool enable) +{ + if (enable) + { + base->MM4_CNTL2 |= SDIOC_MM4_CNTL2_MM4CLKEN_MASK; + } + else + { + base->MM4_CNTL2 &= ~SDIOC_MM4_CNTL2_MM4CLKEN_MASK; + } +} + +/*! + * @brief SDIOC software reset entire host controller except for the card detection circuit register. + * + * @param base SDIOC peripheral base address. + */ +static inline void SDIOC_ResetAll(SDIOC_Type *base) +{ + base->MM4_CNTL2 |= SDIOC_MM4_CNTL2_MSWRST_MASK; +} + +/*! + * @brief SDIOC software reset command line. + * + * @param base SDIOC peripheral base address. + */ +static inline void SDIOC_ResetCommandLine(SDIOC_Type *base) +{ + base->MM4_CNTL2 |= SDIOC_MM4_CNTL2_CMDSWRST_MASK; +} + +/*! + * @brief SDIOC software reset data line. + * + * @param base SDIOC peripheral base address. + */ +static inline void SDIOC_ResetDataLine(SDIOC_Type *base) +{ + base->MM4_CNTL2 |= SDIOC_MM4_CNTL2_DATSWRST_MASK; +} + +/*! + * @brief SDIOC set data timeout value. + * + * @param base SDIOC peripheral base address. + * @param timeout timeout value. + */ +static inline void SDIOC_SetDataTimeout(SDIOC_Type *base, sdioc_data_timeout_value_t timeout) +{ + base->MM4_CNTL2 = (base->MM4_CNTL2 & (~SDIOC_MM4_CNTL2_DTOCNTR_MASK)) | SDIOC_MM4_CNTL2_DTOCNTR(timeout); +} + +/* @} */ + +/*! + * @name SDIOC block gap functional interface + * @{ + */ +/*! + * @brief SDIOC enable stop at block gap request. + * + * @param base SDIOC peripheral base address. + * @param enable true is enable stop executing read and write transaction at next block gap, false is disable. + */ +static inline void SDIOC_EnableStopAtBlockGap(SDIOC_Type *base, bool enable) +{ + if (enable) + { + base->MM4_CNTL1 |= SDIOC_MM4_CNTL1_BGREQSTP_MASK; + } + else + { + base->MM4_CNTL1 &= ~SDIOC_MM4_CNTL1_BGREQSTP_MASK; + } +} + +/*! + * @brief SDIOC enable continue request. + * + * @param base SDIOC peripheral base address. + * @param enable true is restart a transaction which was stopped using stop at block gap request, false not affect. + */ +static inline void SDIOC_EnableContinueRequest(SDIOC_Type *base, bool enable) +{ + if (enable) + { + base->MM4_CNTL1 |= SDIOC_MM4_CNTL1_CONTREQ_MASK; + } + else + { + base->MM4_CNTL1 &= ~SDIOC_MM4_CNTL1_CONTREQ_MASK; + } +} + +/*! + * @brief SDIOC enable/disable read wait control. + * + * @param base SDIOC peripheral base address. + * @param enable true is enable read wait function, false is disable. + */ +static inline void SDIOC_EnableReadWaitControl(SDIOC_Type *base, bool enable) +{ + if (enable) + { + base->MM4_CNTL1 |= SDIOC_MM4_CNTL1_RDWTCNTL_MASK; + } + else + { + base->MM4_CNTL1 &= ~SDIOC_MM4_CNTL1_RDWTCNTL_MASK; + } +} + +/*! + * @brief SDIOC enable/disable stop at block gap interrupt. + * + * @param base SDIOC peripheral base address. + * @param enable true is enable interrupt at block gap, false is disable. + */ +static inline void SDIOC_EnableStopAtBlockGapInterrupt(SDIOC_Type *base, bool enable) +{ + if (enable) + { + base->MM4_CNTL1 |= SDIOC_MM4_CNTL1_BGIRQEN_MASK; + } + else + { + base->MM4_CNTL1 &= ~SDIOC_MM4_CNTL1_BGIRQEN_MASK; + } +} + +/*! + * @brief SDIOC read command response. + * + * @param base SDIOC peripheral base address. + * @param responseIndex response index. + * @retval response read from sdioc. + */ +static inline uint32_t SDIOC_ReadCommandResponse(SDIOC_Type *base, sdioc_response_index_t responseIndex) +{ + return ((uint32_t *)&(base->MM4_RESP0))[responseIndex]; +} + +/*! + * @brief SDIOC read data port. + * + * @param base SDIOC peripheral base address. + * @retval data read from SDIOC fifo. + */ +static inline uint32_t SDIOC_ReadData(SDIOC_Type *base) +{ + return base->MM4_DP; +} + +/*! + * @brief SDIOC write data port. + * + * @param base SDIOC peripheral base address. + * @param data data to be written to SDIOC fifo. + */ +static inline void SDIOC_WriteData(SDIOC_Type *base, uint32_t data) +{ + base->MM4_DP = data; +} + +/* @} */ + +/*! + * @name SDIOC dma functional interface + * @{ + */ + +/*! + * @brief SDIOC set dma buffer boundary. + * + * The large contiguous memory space may not be available in the virtual memory + * system. To perform long DMA transfer, DMA System Address register shall be + * updated at every system memory boundary during DMA transfer. + * These bits specify the size of contiguous buffer in the system memory. The + * SDMA transfer shall wait at the every boundary specified by these fields and the + * Host Controller generates the DMA Interrupt to request the Host Driver to + * update the SDMA System Address register. + * + * @param base SDIOC peripheral base address. + * @param bufferBoundary dma buffer boundary. + */ +static inline void SDIOC_SetDmaBufferBoundary(SDIOC_Type *base, sdioc_dma_buffer_boundary_t bufferBoundary) +{ + base->MM4_BLK_CNTL = + (base->MM4_BLK_CNTL & ~SDIOC_MM4_BLK_CNTL_DMA_BUFSZ_MASK) | SDIOC_MM4_BLK_CNTL_DMA_BUFSZ(bufferBoundary); +} + +/*! + * @brief SDIOC set dma buffer address. + * + * @param base SDIOC peripheral base address. + * @param bufferAddress dma buffer address. + */ +static inline void SDIOC_SetDmaBufferAddress(SDIOC_Type *base, void *bufferAddress) +{ + base->MM4_SYSADDR = (uint32_t)bufferAddress; +} + +/* @} */ + +/*! + * @name SDIOC interrupt and status interface + * @{ + */ + +/*! + * @brief SDIOC enable/disable interrupt status. + * + * @param base SDIOC peripheral base address. + * @param interruptFlags status flag to enable/disable, @ref _sdioc_interrupt_flag. + * @param enable true is enable the corresponding interrupt status, false is disable. + */ +static inline void SDIOC_EnableInterruptStatus(SDIOC_Type *base, uint32_t interruptFlags, bool enable) +{ + if (enable) + { + base->MM4_I_STAT_EN |= interruptFlags; + } + else + { + base->MM4_I_STAT_EN &= ~interruptFlags; + } +} + +/*! + * @brief SDIOC enable/disable interrupt signal. + * + * @param base SDIOC peripheral base address. + * @param interruptFlags status flag to enable/disable, @ref _sdioc_interrupt_flag. + * @param enable true is enable the corresponding interrupt status, false is disable. + */ +static inline void SDIOC_EnableInterruptSignal(SDIOC_Type *base, uint32_t interruptFlags, bool enable) +{ + if (enable) + { + base->MM4_I_SIG_EN |= interruptFlags; + } + else + { + base->MM4_I_SIG_EN &= ~interruptFlags; + } +} + +/*! + * @brief SDIOC get interrupt status. + * + * @param base SDIOC peripheral base address. + * @retval interrupt status flag. + */ +static inline uint32_t SDIOC_GetInterruptStatus(SDIOC_Type *base) +{ + return base->MM4_I_STAT; +} + +/*! + * @brief Gets the enabled interrupt status. + * + * @param base USDHC peripheral base address. + * @retval Current interrupt status flags mask @ref _sdioc_interrupt_flag. + */ +static inline uint32_t SDIOC_GetEnabledInterruptStatus(SDIOC_Type *base) +{ + uint32_t intStatus = base->MM4_I_STAT; + + return intStatus & base->MM4_I_SIG_EN; +} + +/*! + * @brief SDIOC clear interrupt status. + * + * @param base SDIOC peripheral base address. + * @param interruptFlags interrupt status flag to clear, @ref _sdioc_interrupt_flag.. + */ +static inline void SDIOC_ClearInterruptStatus(SDIOC_Type *base, uint32_t interruptFlags) +{ + base->MM4_I_STAT = interruptFlags; +} + +/*! + * @brief SDIOC get host controller present status. + * + * @param base SDIOC peripheral base address. + * @retval present status flag. + */ +static inline uint32_t SDIOC_GetPresentStatus(SDIOC_Type *base) +{ + return base->MM4_STATE; +} + +/*! + * @brief Transfer parameters command/data/dma configurations. + * + * @param base SDIOC base address. + * @param command Transfer command pointer, application should not pass NULL pointer to this parameter. + * @param data Transfer data pointer, application can pass NULL when send command only. + * @param dmaConfig Internal dma configurations, application can pass NULL when dma is not used. + * + * @retval #kStatus_InvalidArgument Argument is invalid. + * @retval #kStatus_Success Operate successfully. + */ +status_t SDIOC_SetTransferConfig(SDIOC_Type *base, + sdioc_command_t *command, + sdioc_data_t *data, + sdioc_dma_config_t *dmaConfig); +/* @} */ + +/*! + * @name SDIOC transactional interface + * @{ + */ +/*! + * @brief Creates the SDIOC handle. + * + * @param base SDIOC peripheral base address. + * @param handle SDIOC handle pointer. + * @param callback Structure pointer to contain all callback functions. + * @param userData Callback function parameter. + */ +void SDIOC_TransferCreateHandle(SDIOC_Type *base, sdioc_handle_t *handle, sdioc_callback_t *callback, void *userData); + +/*! + * @brief Transfers the command/data using an interrupt and an asynchronous method. + * + * This function sends a command and data and returns immediately. It doesn't wait for the transfer to complete or + * to encounter an error. The application must not call this API in multiple threads at the same time. Because of that + * this API doesn't support the re-entry mechanism. + * + * This function transfer data through SDIOC internal DMA. + * + * @note Call API @ref SDIOC_TransferCreateHandle when calling this API. + * + * @param handle SDIOC handle. + * @param command Transfer command pointer should not be NULL. + * @param data Transfer data pointer can be NULL if send command only. + * @param dmaConfig Internal dma configurations, NULL pointer is not allowed. + * + * @retval #kStatus_InvalidArgument Argument is invalid. + * @retval #kStatus_SDIOC_BusyTransferring Busy transferring. + * @retval #kStatus_Success Operate successfully. + */ +status_t SDIOC_TransferDMANonBlocking(sdioc_handle_t *handle, + sdioc_command_t *command, + sdioc_data_t *data, + sdioc_dma_config_t *dmaConfig); + +/*! + * @brief IRQ handler for the SDIOC. + * + * This function deals with the IRQs on the given host controller. + * + * @param handle SDIOC handle. + */ +void SDIOC_TransferHandleIRQ(sdioc_handle_t *handle); + +/* @} */ +#if defined(__cplusplus) +} +#endif +/*! @} */ + +#endif /* _FSL_SDIOC_H_ */ diff --git a/drivers/mw320/ssp/driver_mw_ssp.cmake b/drivers/mw320/ssp/driver_mw_ssp.cmake new file mode 100644 index 000000000..b9ab8043b --- /dev/null +++ b/drivers/mw320/ssp/driver_mw_ssp.cmake @@ -0,0 +1,14 @@ +#Description: MW_SSP Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_ssp component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_ssp.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/ssp/driver_mw_ssp_dmac.cmake b/drivers/mw320/ssp/driver_mw_ssp_dmac.cmake new file mode 100644 index 000000000..bd419f818 --- /dev/null +++ b/drivers/mw320/ssp/driver_mw_ssp_dmac.cmake @@ -0,0 +1,15 @@ +#Description: MW_SSP_DMA Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_ssp_dmac component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_ssp_dmac.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_mw_dmac) +include(driver_mw_ssp) diff --git a/drivers/mw320/ssp/fsl_ssp.c b/drivers/mw320/ssp/fsl_ssp.c new file mode 100644 index 000000000..ba5a18779 --- /dev/null +++ b/drivers/mw320/ssp/fsl_ssp.c @@ -0,0 +1,891 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_ssp.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/* Typedef for interrupt handler. */ +typedef void (*ssp_isr_t)(ssp_handle_t *handle); +/*! @brief check flag avalibility */ +#define IS_SSP_FLAG_SET(reg, flag) (((reg) & ((uint32_t)flag)) != 0UL) +/*! @brief SSAP fifo depth */ +#define SSP_FIFO_COUNT(bitWidth) ((bitWidth) == 16U ? 32U : 16U) +/*! @brief SSP transfer state */ +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief SSP base pointer array */ +static SSP_Type *const s_sspBase[] = SSP_BASE_PTRS; + +/*! @brief SSP internal handle pointer array */ +static ssp_handle_t *s_sspHandle[ARRAY_SIZE(s_sspBase)][2]; + +/*! @brief SSP IRQ name array */ +static const IRQn_Type s_sspIRQ[] = SSP_IRQS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/* Clock name array */ +static const clock_ip_name_t s_sspClock[] = SSP_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/* SSP send ISR for transactional APIs. */ +static ssp_isr_t s_sspSendIsr; +static ssp_isr_t s_sspReceiveIsr; +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief SSP write data fifo. + * + * + * @param base SSP peripheral base address. + * @param buffer write buffer pointer. + * @param bitWidth data bitwidth. + * @param size data size to write. + */ +static void SSP_WriteNonBlocking(SSP_Type *base, uint8_t *buffer, uint32_t bitWidth, uint32_t size); + +/*! + * @brief SSP read data fifo. + * + * + * @param base SSP peripheral base address. + * @param buffer read buffer pointer. + * @param bitWidth data bitwidth. + * @param size data size to read. + */ +static void SSP_ReadNonBlocking(SSP_Type *base, uint8_t *buffer, uint32_t bitWidth, uint32_t size); +/******************************************************************************* + * Code + ******************************************************************************/ +uint32_t SSP_GetInstance(SSP_Type *base) +{ + uint8_t instance = 0; + + while ((instance < ARRAY_SIZE(s_sspBase)) && (s_sspBase[instance] != base)) + { + instance++; + } + + assert(instance < ARRAY_SIZE(s_sspBase)); + + return instance; +} + +static void SSP_WriteNonBlocking(SSP_Type *base, uint8_t *buffer, uint32_t bitWidth, uint32_t size) +{ + uint32_t i = 0, j = 0U; + uint32_t bytesPerWord = bitWidth; + uint32_t data = 0; + uint32_t temp = 0; + + for (i = 0; i < size / bytesPerWord; i++) + { + for (j = 0; j < bytesPerWord; j++) + { + temp = (uint32_t)(*buffer); + data |= (temp << (8U * j)); + buffer++; + } + SSP_WriteData(base, data); + data = 0; + } +} + +static void SSP_ReadNonBlocking(SSP_Type *base, uint8_t *buffer, uint32_t bitWidth, uint32_t size) +{ + uint32_t i = 0, j = 0; + uint32_t bytesPerWord = bitWidth; + uint32_t data = 0; + + for (i = 0; i < size / bytesPerWord; i++) + { + data = SSP_ReadData(base); + for (j = 0; j < bytesPerWord; j++) + { + *buffer = (uint8_t)(data >> (8U * j)) & 0xFFU; + buffer++; + } + } +} + +/*! + * brief SSP get default configuration. + * + * code + * config->enableRXHalfCycleDelay = false; + * config->enableMasterClockReturn = false; + * config->enableFifoPackingMode = false; + * config->enableSlaveClockFreeRuning = false; + * config->txFifoWaterMark = SSP_FIFO_COUNT(32) / 2U; + * config->rxFifoWaterMark = SSP_FIFO_COUNT(32) / 2U; + * config->mode = kSSP_TransmitReceiveMode; + * config->format = kSSP_TransceiverFormatPSP; + * endcode + * + * param config the pointer of ssp configuration structure. + */ +void SSP_GetDefaultConfig(ssp_config_t *config) +{ + assert(config != NULL); + + (void)memset(config, 0, sizeof(ssp_config_t)); + + config->enableRXHalfCycleDelay = false; + config->enableMasterClockReturn = false; + config->enableFifoPackingMode = false; + config->enableSlaveClockFreeRuning = false; + config->txFifoWaterMark = SSP_FIFO_COUNT(32) / 2U; + config->rxFifoWaterMark = SSP_FIFO_COUNT(32) / 2U; + config->mode = kSSP_TransmitReceiveMode; + config->format = kSSP_TransceiverFormatPSP; +} + +/*! + * brief SSP module initialization function. + * + * Configures the SSP according to the user configuration. + * + * param base SSP peripheral base address. + * param config SSP configuration information. + */ +void SSP_Init(SSP_Type *base, const ssp_config_t *config) +{ + assert(config != NULL); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Enable SSP clock. */ + CLOCK_EnableClock(s_sspClock[SSP_GetInstance(base)]); +#endif + + /* clear bit error/tx underrun/rx overrun status */ + base->SSP_SSSR |= SSP_SSP_SSSR_TUR_MASK | SSP_SSP_SSITR_TROR_MASK | SSP_SSP_SSSR_BCE_MASK; + /* SSP configuration */ + base->SSP_SSCR0 = SSP_SSP_SSCR0_FRF(config->format) | SSP_SSP_SSCR0_MCRT(config->enableMasterClockReturn) | + SSP_SSP_SSCR0_RHCD(config->enableRXHalfCycleDelay) | + SSP_SSP_SSCR0_FPCKE(config->enableFifoPackingMode); + + base->SSP_SSCR1 = SSP_SSP_SSCR1_RFT(config->rxFifoWaterMark - 1UL) | + SSP_SSP_SSCR1_TFT(config->txFifoWaterMark - 1UL) | SSP_SSP_SSCR1_RWOT(config->mode) | + SSP_SSP_SSCR1_SCFR(config->enableSlaveClockFreeRuning); + + if (config->transceiverConfig != NULL) + { + if (config->format == kSSP_TransceiverFormatSPI) + { + SSP_SetSPIModeConfig(base, (ssp_spi_mode_config_t *)config->transceiverConfig); + } + else + { + SSP_SetPSPModeConfig(base, (ssp_psp_mode_config_t *)config->transceiverConfig); + } + } +} + +/*! + * brief Deinitializes the SSP. + * + * param base SSP peripheral base address. + */ +void SSP_Deinit(SSP_Type *base) +{ +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Disable clock. */ + CLOCK_DisableClock(s_sspClock[SSP_GetInstance(base)]); +#endif +} + +/*! + * brief SSP get default SPI mode configuration. + * + * The default SSP SPI mode configurations: + * code + * config->spiClockPolarity = kSSP_ClockPolarityLow; + * config->spiClockPhase = kSSP_SpiClkPhase0; + * config->spiClockDirection = kSSP_ClockDirectionMaster; + * config->dataWidth = kSSP_DataSize8Bit; + * config->txdIdleState = kSSP_TxdIdleStateIsNot3Stated; + * config->txdLastPhaseState = kSSP_TxdLastPhase3StatedHalfOfLSBClockCycle; + * endcode + * + * param config the pointer of ssp configuration structure. + */ +void SSP_GetDefaultSPIModeConfig(ssp_spi_mode_config_t *config) +{ + assert(config != NULL); + + config->spiClockPolarity = kSSP_ClockPolarityLow; + config->spiClockPhase = kSSP_SpiClkPhase0; + config->spiClockDirection = kSSP_ClockDirectionMaster; + config->dataWidth = kSSP_DataSize8Bit; + config->txdIdleState = kSSP_TxdIdleStateIsNot3Stated; + config->txdLastPhaseState = kSSP_TxdLastPhase3StatedHalfOfLSBClockCycle; +} + +/*! + * brief SSP set SPI mode configuration. + * + * param base SSP peripheral base address. + * param config the pointer of ssp spi mode configuration structure. + */ +void SSP_SetSPIModeConfig(SSP_Type *base, const ssp_spi_mode_config_t *config) +{ + assert(config != NULL); + + uint32_t sscr = base->SSP_SSCR1; + + sscr &= ~(SSP_SSP_SSCR1_SCLKDIR_MASK | SSP_SSP_SSCR1_SFRMDIR_MASK | SSP_SSP_SSCR1_SPH_MASK | + SSP_SSP_SSCR1_SPO_MASK | SSP_SSP_SSCR1_TTELP_MASK | SSP_SSP_SSCR1_TTE_MASK); + + sscr |= SSP_SSP_SSCR1_SCLKDIR(config->spiClockDirection) | SSP_SSP_SSCR1_SFRMDIR(config->spiClockDirection) | + SSP_SSP_SSCR1_SPH(config->spiClockPhase) | SSP_SSP_SSCR1_SPO(config->spiClockPolarity) | + SSP_SSP_SSCR1_TTELP(config->txdLastPhaseState) | SSP_SSP_SSCR1_TTE(config->txdIdleState); + + base->SSP_SSCR1 = sscr; + + sscr = base->SSP_SSCR0; + sscr &= ~(SSP_SSP_SSCR0_DSS_MASK | SSP_SSP_SSCR0_EDSS_MASK); + sscr |= (uint32_t)config->dataWidth; + base->SSP_SSCR0 = sscr; +} + +/*! + * brief SSP get default PSP mode configuration. + * + * The default SSP PSP mode configurations are 16bit, 2 slots, i2s protocol. + * code + * config->bitClockDirection = kSSP_ClockDirectionMaster; + * config->bitClockMode = kSPP_BitClockIdleLowDrivenFallingSampleRising; + * config->frameClockDirection = kSSP_ClockDirectionMaster; + * config->frameClockPolarity = kSSP_ClockPolarityLow; + * config->frameRelativeTiming = kSSP_FrameSyncAssertWithTheLsbOfThePreviousFrame; + * config->txdIdleState = kSSP_TxdIdleStateIsNot3Stated; + * config->txdLastPhaseState = kSSP_TxdLastPhase3StatedOnLSBEndClockEdge; + * config->txdEndTransferState = kSSP_TxdEndTransferState0; + * config->dataWidth = kSSP_DataSize16Bit; + * config->frameLength = 16U; + * config->enableNetWorkMode = true; + * config->frameSlotsNumber = 2U; + * config->txActiveSlotMask = 3U; + * config->rxActiveSlotMask = 3U; + * config->dummyStartDelay = 0U; + * config->dummyStopDelay = 0U; + * config->startDelay = 0U; + * config->frameDelay = 0U; + * endcode + * + * param config the pointer of PSP configuration structure. + */ +void SSP_GetDefaultPSPModeConfig(ssp_psp_mode_config_t *config) +{ + assert(config != NULL); + + config->bitClockDirection = kSSP_ClockDirectionMaster; + config->bitClockMode = kSPP_BitClockIdleLowDrivenFallingSampleRising; + + config->frameClockDirection = kSSP_ClockDirectionMaster; + config->frameClockPolarity = kSSP_ClockPolarityLow; + config->frameRelativeTiming = kSSP_FrameSyncAssertWithTheLsbOfThePreviousFrame; + + config->txdIdleState = kSSP_TxdIdleStateIsNot3Stated; + config->txdLastPhaseState = kSSP_TxdLastPhase3StatedOnLSBEndClockEdge; + config->txdEndTransferState = kSSP_TxdEndTransferState0; + + config->dataWidth = kSSP_DataSize16Bit; + config->frameLength = 16U; + + config->enableNetWorkMode = true; + config->frameSlotsNumber = 2U; + config->txActiveSlotMask = 3U; + config->rxActiveSlotMask = 3U; + /* below configuration should be ignored when network mode enabled */ + config->dummyStartDelay = 0U; + config->dummyStopDelay = 0U; + config->startDelay = 0U; + config->frameDelay = 0U; +} + +/*! + * brief SSP set PSP mode configuration. + * + * param base SSP peripheral base address. + * param config the pointer of ssp psp mode configuration structure. + */ +void SSP_SetPSPModeConfig(SSP_Type *base, const ssp_psp_mode_config_t *config) +{ + assert(config != NULL); + assert(config->frameSlotsNumber != 0U); + + uint32_t sscr = base->SSP_SSCR1, sspsp = base->SSP_SSPSP; + + sscr &= + ~(SSP_SSP_SSCR1_SCLKDIR_MASK | SSP_SSP_SSCR1_SFRMDIR_MASK | SSP_SSP_SSCR1_TTELP_MASK | SSP_SSP_SSCR1_TTE_MASK); + + sscr |= SSP_SSP_SSCR1_SCLKDIR(config->bitClockDirection) | SSP_SSP_SSCR1_SFRMDIR(config->frameClockDirection) | + SSP_SSP_SSCR1_TTELP(config->txdLastPhaseState) | SSP_SSP_SSCR1_TTE(config->txdIdleState); + + base->SSP_SSCR1 = sscr; + + sscr = base->SSP_SSCR0; + sscr &= ~(SSP_SSP_SSCR0_DSS_MASK | SSP_SSP_SSCR0_EDSS_MASK | SSP_SSP_SSCR0_FRDC_MASK | SSP_SSP_SSCR0_MOD_MASK); + sscr |= (uint32_t)config->dataWidth | SSP_SSP_SSCR0_FRDC(config->frameSlotsNumber - 1UL) | + SSP_SSP_SSCR0_MOD(config->enableNetWorkMode); + base->SSP_SSCR0 = sscr; + + sspsp = SSP_SSP_SSPSP_FSRT(config->frameRelativeTiming) | SSP_SSP_SSPSP_SFRMWDTH(config->frameLength) | + SSP_SSP_SSPSP_ETDS(config->txdEndTransferState) | SSP_SSP_SSPSP_SFRMP(config->frameClockPolarity) | + SSP_SSP_SSPSP_SCMODE(config->bitClockMode); + + if (config->enableNetWorkMode == false) + { + sspsp |= SSP_SSP_SSPSP_EDMYSTOP(config->dummyStopDelay) | SSP_SSP_SSPSP_EDMYSTRT(config->dummyStartDelay) | + SSP_SSP_SSPSP_DMYSTOP(config->dummyStopDelay) | SSP_SSP_SSPSP_DMYSTRT(config->dummyStartDelay) | + SSP_SSP_SSPSP_SFRMDLY(config->frameDelay) | SSP_SSP_SSPSP_STRTDLY(config->startDelay); + } + else + { + base->SSP_SSTSA = config->txActiveSlotMask; + base->SSP_SSRSA = config->rxActiveSlotMask; + } + + base->SSP_SSPSP = sspsp; +} + +/*! brief SSP enable interrupt. + * + * param base SSP peripheral base address + * param interruptMask the Interrupt to be enabled, can a value or OR value of @ref _ssp_interrupt_mask. + */ +void SSP_EnableInterrupt(SSP_Type *base, uint32_t interruptMask) +{ + if ((interruptMask & (uint32_t)kSSP_InterruptTransmitFifoUnderrun) != 0U) + { + base->SSP_SSCR0 &= ~SSP_SSP_SSCR0_TIM_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptReceiveFifoOverrun) != 0U) + { + base->SSP_SSCR0 &= ~SSP_SSP_SSCR0_RIM_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptBitCountError) != 0U) + { + base->SSP_SSCR1 |= SSP_SSP_SSCR1_EBCEI_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptTransmitFifoReady) != 0U) + { + base->SSP_SSCR1 |= SSP_SSP_SSCR1_TIE_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptReceiveFifoReady) != 0U) + { + base->SSP_SSCR1 |= SSP_SSP_SSCR1_RIE_MASK; + } +} + +/*! brief SSP disable interrupt. + * + * param base SSP peripheral base address + * param interruptMask the Interrupt to be disabled, can a value or OR value of @ref _ssp_interrupt_mask. + */ +void SSP_DisableInterrupt(SSP_Type *base, uint32_t interruptMask) +{ + if ((interruptMask & (uint32_t)kSSP_InterruptTransmitFifoUnderrun) != 0U) + { + base->SSP_SSCR0 |= SSP_SSP_SSCR0_TIM_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptReceiveFifoOverrun) != 0U) + { + base->SSP_SSCR0 |= SSP_SSP_SSCR0_RIM_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptBitCountError) != 0U) + { + base->SSP_SSCR1 &= ~SSP_SSP_SSCR1_EBCEI_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptTransmitFifoReady) != 0U) + { + base->SSP_SSCR1 &= ~SSP_SSP_SSCR1_TIE_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptReceiveFifoReady) != 0U) + { + base->SSP_SSCR1 &= ~SSP_SSP_SSCR1_RIE_MASK; + } +} + +/*! brief SSP clear interrupt status. + * + * Note: Transmit fifo ready flag and receive fifo flag do not support clear by software. + * + * param base SSP peripheral base address + * param interruptMask the Interrupt to be cleared, can a value or OR'ed value of @ref _ssp_interrupt_mask. + */ +void SSP_ClearInterruptStatus(SSP_Type *base, uint32_t interruptMask) +{ + if ((interruptMask & (uint32_t)kSSP_InterruptTransmitFifoUnderrun) != 0U) + { + base->SSP_SSSR = SSP_SSP_SSSR_TUR_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptReceiveFifoOverrun) != 0U) + { + base->SSP_SSSR = SSP_SSP_SSSR_ROR_MASK; + } + + if ((interruptMask & (uint32_t)kSSP_InterruptBitCountError) != 0U) + { + base->SSP_SSSR = SSP_SSP_SSSR_BCE_MASK; + } +} + +/*! brief SSP get interrupt status. + * + * param base SSP peripheral base address + * param interruptMask the Interrupt to be cleared, can a value or OR'ed value of @ref _ssp_interrupt_mask. + */ +uint32_t SSP_GetInterruptStatus(SSP_Type *base) +{ + uint32_t retval = 0U; + + if ((base->SSP_SSSR & SSP_SSP_SSSR_TUR_MASK) != 0U) + { + retval |= (uint32_t)kSSP_InterruptTransmitFifoUnderrun; + } + + if ((base->SSP_SSSR & SSP_SSP_SSSR_ROR_MASK) != 0U) + { + retval |= (uint32_t)kSSP_InterruptReceiveFifoOverrun; + } + + if ((base->SSP_SSSR & SSP_SSP_SSSR_BCE_MASK) != 0U) + { + retval |= (uint32_t)kSSP_InterruptBitCountError; + } + + if ((base->SSP_SSSR & SSP_SSP_SSSR_TFS_MASK) != 0U) + { + retval |= (uint32_t)kSSP_InterruptTransmitFifoReady; + } + + if ((base->SSP_SSSR & SSP_SSP_SSSR_RFS_MASK) != 0U) + { + retval |= (uint32_t)kSSP_InterruptReceiveFifoReady; + } + + return retval; +} + +/*! + * brief Creates the SSP send handle. + * + * param base SSP peripheral base address. + * param handle SSP handle pointer. + * param callback Structure pointer to contain all callback functions. + * param userData Callback function parameter. + */ +void SSP_TransferSendCreateHandle(SSP_Type *base, + ssp_handle_t *handle, + ssp_transfer_callback_t callback, + void *userData) +{ + assert(handle != NULL); + assert(callback != NULL); + + uint32_t regBitWidth = base->SSP_SSCR0 & (SSP_SSP_SSCR0_DSS_MASK | SSP_SSP_SSCR0_EDSS_MASK); + /* Zero the handle. */ + (void)memset(handle, 0, sizeof(*handle)); + + handle->base = base; + + /* Set the callback. */ + handle->callback = callback; + handle->userData = userData; + handle->sspFifoWatermark = ((base->SSP_SSCR1 & SSP_SSP_SSCR1_TFT_MASK) >> SSP_SSP_SSCR1_TFT_SHIFT) + 1U; + handle->bitWidth = + regBitWidth == (uint32_t)kSSP_DataSize8Bit ? 1U : regBitWidth == (uint32_t)kSSP_DataSize16Bit ? 2U : 4U; + + /* Save the handle in global variables to support the double weak mechanism. */ + s_sspHandle[SSP_GetInstance(base)][0] = handle; + + /* save IRQ handler */ + s_sspSendIsr = SSP_TransferSendHandleIRQ; + + (void)EnableIRQ(s_sspIRQ[SSP_GetInstance(base)]); +} + +/*! + * brief Creates the SSP receive handle. + * + * param base SSP peripheral base address. + * param handle SSP handle pointer. + * param callback Structure pointer to contain all callback functions. + * param userData Callback function parameter. + */ +void SSP_TransferReceiveCreateHandle(SSP_Type *base, + ssp_handle_t *handle, + ssp_transfer_callback_t callback, + void *userData) +{ + assert(handle != NULL); + assert(callback != NULL); + + uint32_t regBitWidth = base->SSP_SSCR0 & (SSP_SSP_SSCR0_DSS_MASK | SSP_SSP_SSCR0_EDSS_MASK); + /* Zero the handle. */ + (void)memset(handle, 0, sizeof(*handle)); + + handle->base = base; + + /* Set the callback. */ + handle->callback = callback; + handle->userData = userData; + handle->sspFifoWatermark = ((base->SSP_SSCR1 & SSP_SSP_SSCR1_RFT_MASK) >> SSP_SSP_SSCR1_RFT_SHIFT) + 1U; + handle->bitWidth = + regBitWidth == (uint32_t)kSSP_DataSize8Bit ? 1U : regBitWidth == (uint32_t)kSSP_DataSize16Bit ? 2U : 4U; + + /* Save the handle in global variables to support the double weak mechanism. */ + s_sspHandle[SSP_GetInstance(base)][1] = handle; + + /* save IRQ handler */ + s_sspReceiveIsr = SSP_TransferReceiveHandleIRQ; + + (void)EnableIRQ(s_sspIRQ[SSP_GetInstance(base)]); +} + +/*! + * brief Send the data using an interrupt and an asynchronous method. + * + * This function sends data and returns immediately. It doesn't wait for the transfer to complete or + * to encounter an error. The application can submit multiple transfer requests without waiting previous + * transfer request complete, since the SSP driver maintained a software transfer queue, the sizeof the queue + * is configurable by macro SSP_XFER_QUEUE_SIZE which indicates how many request can be submitted at the same time. + * + * note Call API @ref SSP_TransferCreateHandle when calling this API. + * + * param handle SSP handle. + * param transfer transfer pointer. + * retval #kStatus_InvalidArgument Argument is invalid. + * retval #kSSP_TransferStatusBusy Busy transferring. + * retval #kStatus_Success Operate successfully. + */ +status_t SSP_TransferSendNonBlocking(ssp_handle_t *handle, ssp_transfer_t *transfer) +{ + status_t error = kStatus_Success; + + if ((handle == NULL) || (transfer == NULL)) + { + error = kStatus_InvalidArgument; + } + /* Check if the queue is full */ + else + { + if (handle->sspQueue[handle->sspQueueUser].dataBuffer != NULL) + { + error = kSSP_TransferStatusBusy; + } + else + { + /* Add into queue */ + handle->sspQueue[handle->sspQueueUser].dataBuffer = transfer->dataBuffer; + handle->sspQueue[handle->sspQueueUser].dataSize = transfer->dataSize; + handle->sspQueueUser = (handle->sspQueueUser + 1U) % SSP_XFER_QUEUE_SIZE; + + /* Enable interrupt */ + SSP_EnableInterrupt(handle->base, (uint32_t)kSSP_InterruptTransmitFifoUnderrun | + (uint32_t)kSSP_InterruptTransmitFifoReady | + (uint32_t)kSSP_InterruptBitCountError); + /* Enable ssp port */ + SSP_Enable(handle->base, true); + } + } + + return error; +} + +/*! + * brief Receive the data using an interrupt and an asynchronous method. + * + * This function sends data and returns immediately. It doesn't wait for the transfer to complete or + * to encounter an error. The application can submit multiple transfer requests without waiting previous + * transfer request complete, since the SSP driver maintained a software transfer queue, the sizeof the queue + * is configurable by macro SSP_XFER_QUEUE_SIZE which indicates how many request can be submitted at the same time. + * + * note Call API @ref SSP_TransferCreateHandle when calling this API. + * + * param handle SSP handle. + * param transfer transfer pointer. + * retval #kStatus_InvalidArgument Argument is invalid. + * retval #kSSP_TransferStatusBusy Busy transferring. + * retval #kStatus_Success Operate successfully. + */ +status_t SSP_TransferReceiveNonBlocking(ssp_handle_t *handle, ssp_transfer_t *transfer) +{ + status_t error = kStatus_Success; + + if ((handle == NULL) || (transfer == NULL)) + { + error = kStatus_InvalidArgument; + } + else + { + /* Check if the queue is full */ + if (handle->sspQueue[handle->sspQueueUser].dataBuffer != NULL) + { + error = kSSP_TransferStatusBusy; + } + else + { + /* Add into queue */ + handle->sspQueue[handle->sspQueueUser].dataBuffer = transfer->dataBuffer; + handle->sspQueue[handle->sspQueueUser].dataSize = transfer->dataSize; + handle->sspQueueUser = (handle->sspQueueUser + 1U) % SSP_XFER_QUEUE_SIZE; + + /* Enable interrupt */ + SSP_EnableInterrupt(handle->base, (uint32_t)kSSP_InterruptBitCountError | + (uint32_t)kSSP_InterruptReceiveFifoOverrun | + (uint32_t)kSSP_InterruptReceiveFifoReady); + /* Enable ssp port */ + SSP_Enable(handle->base, true); + } + } + + return error; +} + +/*! + * brief Aborts the current send. + * + * note This API can be called any time when an interrupt non-blocking transfer initiates + * to abort the transfer early. + * + * param handle Pointer to the ssp_handle_t structure which stores the transfer state. + */ +void SSP_TransferAbortSend(ssp_handle_t *handle) +{ + assert(handle != NULL); + + SSP_DisableInterrupt(handle->base, (uint32_t)kSSP_InterruptTransmitFifoUnderrun | + (uint32_t)kSSP_InterruptBitCountError | + (uint32_t)kSSP_InterruptTransmitFifoReady); + + /* Clear the queue */ + (void)memset(handle->sspQueue, 0, sizeof(ssp_transfer_t) * SSP_XFER_QUEUE_SIZE); + handle->sspQueueDriver = 0; + handle->sspQueueUser = 0; +} + +/*! + * brief Aborts the current IRQ receive. + * + * note This API can be called when an interrupt non-blocking transfer initiates + * to abort the transfer early. + * + * param handle Pointer to the ssp_handle_t structure which stores the transfer state. + */ +void SSP_TransferAbortReceive(ssp_handle_t *handle) +{ + assert(handle != NULL); + + SSP_DisableInterrupt(handle->base, (uint32_t)kSSP_InterruptReceiveFifoOverrun | + (uint32_t)kSSP_InterruptBitCountError | + (uint32_t)kSSP_InterruptReceiveFifoReady); + + /* Clear the queue */ + (void)memset(handle->sspQueue, 0, sizeof(ssp_transfer_t) * SSP_XFER_QUEUE_SIZE); + handle->sspQueueDriver = 0; + handle->sspQueueUser = 0; +} + +/*! + * brief IRQ handler for the SSP transmitter. + * + * This function deals with the IRQs on the given host controller. + * + * param handle SSP handle. + */ +void SSP_TransferSendHandleIRQ(ssp_handle_t *handle) +{ + assert(handle != NULL); + + SSP_Type *base = handle->base; + uint32_t status = base->SSP_SSSR; + + /* clear the interrupt status */ + base->SSP_SSSR |= status; + + /* Handle Error */ + if (IS_SSP_FLAG_SET(status, SSP_SSP_SSSR_BCE_MASK)) + { + /* Call the callback */ + if (handle->callback != NULL) + { + (handle->callback)(handle, kSSP_TransferStatusBitCountError, handle->userData); + } + } + + if (IS_SSP_FLAG_SET(status, SSP_SSP_SSSR_TUR_MASK)) + { + /* Call the callback */ + if (handle->callback != NULL) + { + (handle->callback)(handle, kSSP_TransferStatusTxFifoError, handle->userData); + } + } + + if (IS_SSP_FLAG_SET(status, SSP_SSP_SSSR_TFS_MASK) && IS_SSP_FLAG_SET(base->SSP_SSCR1, SSP_SSP_SSCR1_TIE_MASK)) + { + size_t sendSize = + MIN((handle->sspQueue[handle->sspQueueDriver].dataSize), handle->sspFifoWatermark * handle->bitWidth); + uint8_t *sendBuffer = handle->sspQueue[handle->sspQueueDriver].dataBuffer; + + SSP_WriteNonBlocking(base, sendBuffer, handle->bitWidth, sendSize); + + /* Update internal counter */ + handle->sspQueue[handle->sspQueueDriver].dataSize -= sendSize; + handle->sspQueue[handle->sspQueueDriver].dataBuffer = (uint8_t *)((uint32_t)sendBuffer + sendSize); + + /* If finished a block, call the callback function */ + if (handle->sspQueue[handle->sspQueueDriver].dataSize == 0U) + { + (void)memset(&handle->sspQueue[handle->sspQueueDriver], 0, sizeof(ssp_transfer_t)); + handle->sspQueueDriver = (handle->sspQueueDriver + 1U) % SSP_XFER_QUEUE_SIZE; + if (handle->callback != NULL) + { + (handle->callback)(handle, kSSP_TransferStatusTxIdle, handle->userData); + } + } + + /* If all data finished, just stop the transfer */ + if (handle->sspQueue[handle->sspQueueDriver].dataBuffer == NULL) + { + SSP_TransferAbortSend(handle); + } + } +} + +/*! + * brief IRQ handler for the SSP receiver. + * + * This function deals with the IRQs on the given host controller. + * + * param handle SSP handle. + */ +void SSP_TransferReceiveHandleIRQ(ssp_handle_t *handle) +{ + assert(handle != NULL); + + SSP_Type *base = handle->base; + uint32_t status = base->SSP_SSSR; + + /* clear the interrupt status */ + base->SSP_SSSR |= status; + + /* Handle Error */ + if (IS_SSP_FLAG_SET(status, SSP_SSP_SSSR_BCE_MASK)) + { + /* Call the callback */ + if (handle->callback != NULL) + { + (handle->callback)(handle, kSSP_TransferStatusBitCountError, handle->userData); + } + } + + if (IS_SSP_FLAG_SET(status, SSP_SSP_SSSR_ROR_MASK)) + { + /* Call the callback */ + if (handle->callback != NULL) + { + (handle->callback)(handle, kSSP_TransferStatusRxFifoError, handle->userData); + } + } + + if (IS_SSP_FLAG_SET(status, SSP_SSP_SSSR_RFS_MASK) && IS_SSP_FLAG_SET(base->SSP_SSCR1, SSP_SSP_SSCR1_RIE_MASK)) + { + size_t receiveSize = + MIN((handle->sspQueue[handle->sspQueueDriver].dataSize), handle->sspFifoWatermark * handle->bitWidth); + uint8_t *receiveBuffer = handle->sspQueue[handle->sspQueueDriver].dataBuffer; + + SSP_ReadNonBlocking(base, receiveBuffer, handle->bitWidth, receiveSize); + + /* Update internal counter */ + handle->sspQueue[handle->sspQueueDriver].dataSize -= receiveSize; + handle->sspQueue[handle->sspQueueDriver].dataBuffer = (uint8_t *)((uint32_t)receiveBuffer + receiveSize); + + /* If finished a block, call the callback function */ + if (handle->sspQueue[handle->sspQueueDriver].dataSize == 0U) + { + (void)memset(&handle->sspQueue[handle->sspQueueDriver], 0, sizeof(ssp_transfer_t)); + handle->sspQueueDriver = (handle->sspQueueDriver + 1U) % SSP_XFER_QUEUE_SIZE; + if (handle->callback != NULL) + { + (handle->callback)(handle, kSSP_TransferStatusRxIdle, handle->userData); + } + } + + /* If all data finished, just stop the transfer */ + if (handle->sspQueue[handle->sspQueueDriver].dataBuffer == NULL) + { + SSP_TransferAbortReceive(handle); + } + } +} + +#ifdef SSP0 +void SSP0_DriverIRQHandler(void); +void SSP0_DriverIRQHandler(void) +{ + if (IS_SSP_FLAG_SET(SSP0->SSP_SSSR, SSP_SSP_SSSR_TUR_MASK | SSP_SSP_SSSR_TFS_MASK)) + { + s_sspSendIsr(s_sspHandle[0U][0U]); + } + + if (IS_SSP_FLAG_SET(SSP0->SSP_SSSR, SSP_SSP_SSSR_ROR_MASK | SSP_SSP_SSSR_RFS_MASK)) + { + s_sspReceiveIsr(s_sspHandle[0U][1U]); + } + SDK_ISR_EXIT_BARRIER; +} +#endif + +#ifdef SSP1 +void SSP1_DriverIRQHandler(void); +void SSP1_DriverIRQHandler(void) +{ + if (IS_SSP_FLAG_SET(SSP1->SSP_SSSR, SSP_SSP_SSSR_TUR_MASK | SSP_SSP_SSSR_TFS_MASK)) + { + s_sspSendIsr(s_sspHandle[1U][0U]); + } + + if (IS_SSP_FLAG_SET(SSP1->SSP_SSSR, SSP_SSP_SSSR_ROR_MASK | SSP_SSP_SSSR_RFS_MASK)) + { + s_sspReceiveIsr(s_sspHandle[1U][1U]); + } + SDK_ISR_EXIT_BARRIER; +} +#endif + +#ifdef SSP2 +void SSP2_DriverIRQHandler(void); +void SSP2_DriverIRQHandler(void) +{ + if (IS_SSP_FLAG_SET(SSP2->SSP_SSSR, SSP_SSP_SSSR_TUR_MASK | SSP_SSP_SSSR_TFS_MASK)) + { + s_sspSendIsr(s_sspHandle[2U][0U]); + } + + if (IS_SSP_FLAG_SET(SSP2->SSP_SSSR, SSP_SSP_SSSR_ROR_MASK | SSP_SSP_SSSR_RFS_MASK)) + { + s_sspReceiveIsr(s_sspHandle[2U][1U]); + } + SDK_ISR_EXIT_BARRIER; +} +#endif diff --git a/drivers/mw320/ssp/fsl_ssp.h b/drivers/mw320/ssp/fsl_ssp.h new file mode 100644 index 000000000..adfc01670 --- /dev/null +++ b/drivers/mw320/ssp/fsl_ssp.h @@ -0,0 +1,638 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_SSP_H_ +#define _FSL_SSP_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup ssp_driver + * @{ + */ + +/****************************************************************************** + * Definitions. + *****************************************************************************/ +/*! @name Driver version */ +/*@{*/ +/*! @brief Driver version 2.0.0. */ +#define FSL_SSP_DRIVER_VERSION (MAKE_VERSION(2U, 0U, 0U)) +#ifndef SSP_XFER_QUEUE_SIZE +/*! @brief SSP xfer queue size definition */ +#define SSP_XFER_QUEUE_SIZE 4U +#endif + +/*! @brief transfer status */ +enum +{ + kSSP_TransferStatusTxIdle = MAKE_STATUS(kStatusGroup_SSP, 0), /*!< ssp status idle */ + kSSP_TransferStatusRxIdle = MAKE_STATUS(kStatusGroup_SSP, 1), /*!< ssp status idle */ + kSSP_TransferStatusBusy = MAKE_STATUS(kStatusGroup_SSP, 2), /*!< ssp status busy */ + kSSP_TransferStatusBitCountError = MAKE_STATUS(kStatusGroup_SSP, 3), /*!< ssp status bit count error */ + kSSP_TransferStatusTxFifoError = MAKE_STATUS(kStatusGroup_SSP, 4), /*!< ssp status tx fifo error */ + kSSP_TransferStatusRxFifoError = MAKE_STATUS(kStatusGroup_SSP, 5), /*!< ssp status rx fifo error */ +}; + +/*! @brief ssp mode */ +typedef enum _ssp_transcevier_mode +{ + kSSP_TransmitReceiveMode, /*!< ssp tansmit and receive mode */ + kSSP_ReceiveMode, /*!< ssp receive without transmit mode */ +} ssp_transcevier_mode_t; + +/*! @brief ssp interrupt mask + * @anchor _ssp_interrupt_mask + */ +enum +{ + kSSP_InterruptTransmitFifoUnderrun = 1U, /*!< transmit fifo underrun */ + kSSP_InterruptReceiveFifoOverrun = 2U, /*!< receive fifo underrun */ + kSSP_InterruptBitCountError = 4U, /*!< bit count error */ + kSSP_InterruptTransmitFifoReady = 8U, /*!< transmit fifo ready for write */ + kSSP_InterruptReceiveFifoReady = 16U, /*!< receive fifo ready for read */ +}; + +/*! @brief ssp frame format */ +typedef enum _ssp_transceiver_format +{ + kSSP_TransceiverFormatSPI = 0U, /*!< frame format serial Peripheral Interface */ + kSSP_TransceiverFormatPSP = 3U, /*!< frame format programmable serial protocol */ +} ssp_transceiver_format_t; + +/*! @brief ssp clock direction */ +typedef enum _ssp_clock_direction +{ + kSSP_ClockDirectionMaster = 0U, /*!< SSP clock direction master */ + kSSP_ClockDirectionSlave, /*!< SSP clock direction slave */ +} ssp_clock_direction_t; + +/*! @brief ssp data size */ +typedef enum _ssp_data_width +{ + kSSP_DataSize8Bit = 0x7U, /*!< SSP data size 8 bit */ + kSSP_DataSize16Bit = 0xFU, /*!< SSP data size 16 bit */ + kSSP_DataSize18Bit = 1U | (1U << 20U), /*!< SSP data size 18 bit */ + kSSP_DataSize32Bit = 0xFU | (1U << 20U), /*!< SSP data size 32 bit */ +} ssp_data_width_t; + +/*! @brief ssp txd last phase state */ +typedef enum _ssp_txd_last_phase_state +{ + kSSP_TxdLastPhase3StatedHalfOfLSBClockCycle = + 0U, /*!< txdx is 3-stated 1/2 clock cycle after the beginning of the LSB */ + kSSP_TxdLastPhase3StatedOnLSBEndClockEdge = 1U, /*!< txdx is 3-stated on the clock edge that ends the LSB */ +} ssp_txd_last_phase_state_t; + +/*! @brief ssp txd last phase state */ +typedef enum _ssp_txd_idle_state +{ + kSSP_TxdIdleStateIsNot3Stated = 0U, /*!< txdx is not 3-stated when not transmitting data */ + kSSP_TxdIdleState3Stated = 1U, /*!< txdx is 3-stated when not transmitting data */ +} ssp_txd_idle_state_t; + +/*! @brief ssp txd end transfer state */ +typedef enum _ssp_txd_end_transfer_state +{ + kSSP_TxdEndTransferState0 = 0U, /*!< txd end transfer state 0 */ + kSSP_TxdEndTransferState1 = 1U, /*!< txd end transfer state 1 */ +} ssp_txd_end_transfer_state_t; + +/*! @brief ssp clk polarity */ +typedef enum _ssp_clock_polarity +{ + kSSP_ClockPolarityLow = 0U, /*!< clock polarity low */ + kSSP_ClockPolarityHigh = 1U, /*!< clock polarity high */ +} ssp_clock_polarity_t; + +/*! @brief ssp bit clock mode */ +typedef enum _ssp_bit_clock_mode +{ + kSPP_BitClockIdleLowDrivenFallingSampleRising = + 0U, /*!< data driven on falling edge, sample on rising edge, ide state low */ + kSPP_BitClockIdleLowDrivenRisingSampleFalling = + 1U, /*!< data driven on rising edge, sample on falling edge, ide state low */ + kSPP_BitClockIdleHighDrivenRasingSampleFalling = + 2U, /*!< data driven on rising edge, sample on falling edge, ide state high */ + kSPP_BitClockIdleHighDrivenFallingSampleRising = + 3U, /*!< data driven on falling edge, sample on rising edge, ide state high */ +} ssp_bit_clock_mode_t; + +/*! @brief ssp frame sync relative timing bit */ +typedef enum _ssp_frame_sync_relative_timing +{ + kSSP_FrameSyncAssertAfterEndOfDMTStop = 0U, /*!< next frame assert after the end of the DMTSTOP timing */ + kSSP_FrameSyncAssertWithTheLsbOfThePreviousFrame = 1U, /*!< next frame assert with the LSB of previous frame */ +} ssp_frame_sync_relative_timing_t; + +/*! @brief ssp spi clk phase */ +typedef enum _ssp_spi_clock_phase +{ + kSSP_SpiClkPhase0 = 0U, /*!< motorola clk inactive until one cycle after the + start of frame and active until 1/2 cycle before the end of a frame */ + + kSSP_SpiClkPhase1 = 1U, /*!< motorola clk inactive until 1/2 cycle after the + start of frame and active until 1 cycle before the end of a frame */ +} ssp_spi_clock_phase_t; + +/*! @brief ssp motorola spi mode configuration */ +typedef struct _ssp_spi_mode_config +{ + ssp_clock_polarity_t spiClockPolarity; /*!< SPI clock polarity */ + ssp_spi_clock_phase_t spiClockPhase; /*!< SPI clock pahse */ + ssp_clock_direction_t + spiClockDirection; /*!< SPI clock direction for serial bit clock direction and frame clock direction */ + + ssp_data_width_t dataWidth; /*!< data width 8/16/18/32 bits */ + + ssp_txd_idle_state_t txdIdleState; /*!< txd state when idle */ + ssp_txd_last_phase_state_t txdLastPhaseState; /*!< txd last phase state */ +} ssp_spi_mode_config_t; + +/*! @brief ssp psp mode configuration */ +typedef struct _ssp_mode_psp_config +{ + ssp_clock_direction_t bitClockDirection; /*!< bit clock generate internally or input externally */ + ssp_bit_clock_mode_t bitClockMode; /*!< bit clock mode */ + + ssp_clock_direction_t frameClockDirection; /*!< frame clock generate internally or input externally */ + ssp_clock_polarity_t frameClockPolarity; /*!< frame clock polarity */ + ssp_frame_sync_relative_timing_t frameRelativeTiming; /*!< frame sync relative timing */ + + ssp_txd_idle_state_t txdIdleState; /*!< txd state when idle */ + ssp_txd_last_phase_state_t txdLastPhaseState; /*!< txd last phase state */ + ssp_txd_end_transfer_state_t txdEndTransferState; /*!< txd end transfer state */ + + ssp_data_width_t dataWidth; /*!< data width 8/16/18/32 bits */ + uint8_t frameLength; /*!< frame length, valid range 1-0x3F SSPSCLKx cycles */ + + uint8_t dummyStartDelay; /*!< The MSB of the dummy start delay */ + uint8_t dummyStopDelay; /*!< The MSB of the dummy stop delay */ + uint8_t startDelay; /*!< number of 0-7 non-active clocks that defines the duration of idle time */ + uint8_t frameDelay; /*!< Programmed value specifies the number (0 -127) of active one-half + clocks (SSPSCLKx) asserted from the most-significant bit of TXDx + (output) or RXD (input) being driven to SSPSFRMx. */ + + bool enableNetWorkMode; /*!< network should be enabled when emulating I2S protocol*/ + uint8_t frameSlotsNumber; /*!< the tims slots number per frame, 1-8 can be specified */ + uint8_t + txActiveSlotMask; /*!< the each bit in the txActiveSlotMask represent a time slot + 0 is the SSP does not transmit data in this time slot, 1 is the SSP does transmit data in this + time slot, so txActiveSlotMask = 3 means slot 0 and 1 is enabled, other slots are disabled */ + uint8_t + rxActiveSlotMask; /*!< the each bit in the txActiveSlotMask represent a time slot + 0 is the SSP does not transmit data in this time slot, 1 is the SSP does transmit data in this + time slot, so txActiveSlotMask = 3 means slot 0 and 1 is enabled, other slots are disabled */ +} ssp_psp_mode_config_t; + +/*! @brief ssp configuration */ +typedef struct _ssp_config +{ + bool enableRXHalfCycleDelay; /*!< true is enable rx half cycle delay, false is disable */ + bool enableMasterClockReturn; /*!< true is enable master clock delay, false is disable */ + bool enableSlaveClockFreeRuning; /*!< true is clock input to SSPSCLKx is only active during data transfer + * false is clock input to SSPSCLKx is continuously runing*/ + + bool enableFifoPackingMode; /*!< fifo packing mode */ + uint8_t txFifoWaterMark; /*!< tx fifo watermark value */ + uint8_t rxFifoWaterMark; /*!< rx fifo watermark value */ + + ssp_transcevier_mode_t mode; /*!< transceiver work mode */ + ssp_transceiver_format_t format; /*!< transceiver work format */ + void *transceiverConfig; /*!< transceiver configuration pointer, should be a pointer of + - ssp_psp_mode_config_t, can be used to simulate i2s + - ssp_spi_mode_config_t, can be used to simulate spi */ +} ssp_config_t; + +/*! @brief ssp transfer content */ +typedef struct _ssp_transfer +{ + void *dataBuffer; /*!< the pointer of data buffer */ + uint32_t dataSize; /*!< the size of data to be transferred */ +} ssp_transfer_t; + +/*! @brief SSP handle typedef. */ +typedef struct _ssp_handle ssp_handle_t; + +/*! @brief SSP callback pointer*/ +typedef void (*ssp_transfer_callback_t)(ssp_handle_t *handle, status_t transferStatus, void *userData); + +/*! + * @brief SSP handle. + * + * Defines the structure to save the SSP state information and callback function. + * A ssp_handle variable can be used to represent either SSP TX or SSP RX. + * + */ +struct _ssp_handle +{ + SSP_Type *base; /*!< ssp base address */ + + uint32_t bitWidth; /*!< bit width */ + uint32_t sspFifoWatermark; /*!< ssp fifo WaterMark */ + + ssp_transfer_t sspQueue[SSP_XFER_QUEUE_SIZE]; /*!< ssp queue storing queued transfer */ + volatile uint8_t sspQueueUser; /*!< Index for user to queue transfer */ + volatile uint8_t sspQueueDriver; /*!< Index for driver to get the transfer data and size */ + + ssp_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< Parameter for transfer complete callback. */ +}; + +/************************************************************************************************* + * API + ************************************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name SSP Initialization and deinitialization + * @{ + */ + +/*! + * @brief SSP get default configuration. + * + * @code + * config->enableRXHalfCycleDelay = false; + * config->enableMasterClockReturn = false; + * config->enableFifoPackingMode = false; + * config->enableSlaveClockFreeRuning = false; + * config->txFifoWaterMark = SSP_FIFO_COUNT(32) / 2U; + * config->rxFifoWaterMark = SSP_FIFO_COUNT(32) / 2U; + * config->mode = kSSP_TransmitReceiveMode; + * config->format = kSSP_TransceiverFormatPSP; + * @endcode + * + * @param config the pointer of ssp configuration structure. + */ +void SSP_GetDefaultConfig(ssp_config_t *config); + +/*! + * @brief SSP module initialization function. + * + * Configures the SSP according to the user configuration. + * + * @param base SSP peripheral base address. + * @param config SSP configuration information. + */ +void SSP_Init(SSP_Type *base, const ssp_config_t *config); + +/*! + * @brief Deinitializes the SSP. + * + * @param base SSP peripheral base address. + */ +void SSP_Deinit(SSP_Type *base); + +/*! + * @brief Get SSP instance index. + * + * Used for SSP DMA driver only. + * + * @param base SSP peripheral base address. + */ +uint32_t SSP_GetInstance(SSP_Type *base); + +/* @} */ + +/*! + * @name SSP bus functional interface + * @{ + */ + +/*! + * @brief SSP get default SPI mode configuration. + * + * The default SSP SPI mode configurations: + * @code + * config->spiClockPolarity = kSSP_ClockPolarityLow; + * config->spiClockPhase = kSSP_SpiClkPhase0; + * config->spiClockDirection = kSSP_ClockDirectionMaster; + * config->dataWidth = kSSP_DataSize8Bit; + * config->txdIdleState = kSSP_TxdIdleStateIsNot3Stated; + * config->txdLastPhaseState = kSSP_TxdLastPhase3StatedHalfOfLSBClockCycle; + * @endcode + * + * @param config the pointer of ssp configuration structure. + */ +void SSP_GetDefaultSPIModeConfig(ssp_spi_mode_config_t *config); + +/*! + * @brief SSP set SPI mode configuration. + * + * @param base SSP peripheral base address. + * @param config the pointer of ssp spi mode configuration structure. + */ +void SSP_SetSPIModeConfig(SSP_Type *base, const ssp_spi_mode_config_t *config); + +/*! + * @brief SSP get default PSP mode configuration. + * + * The default SSP PSP mode configurations are 16bit, 2 slots, i2s protocol. + * @code + * config->bitClockDirection = kSSP_ClockDirectionMaster; + * config->bitClockMode = kSPP_BitClockIdleLowDrivenFallingSampleRising; + * config->frameClockDirection = kSSP_ClockDirectionMaster; + * config->frameClockPolarity = kSSP_ClockPolarityLow; + * config->frameRelativeTiming = kSSP_FrameSyncAssertWithTheLsbOfThePreviousFrame; + * config->txdIdleState = kSSP_TxdIdleStateIsNot3Stated; + * config->txdLastPhaseState = kSSP_TxdLastPhase3StatedOnLSBEndClockEdge; + * config->txdEndTransferState = kSSP_TxdEndTransferState0; + * config->dataWidth = kSSP_DataSize16Bit; + * config->frameLength = 16U; + * config->enableNetWorkMode = true; + * config->frameSlotsNumber = 2U; + * config->txActiveSlotMask = 3U; + * config->rxActiveSlotMask = 3U; + * config->dummyStartDelay = 0U; + * config->dummyStopDelay = 0U; + * config->startDelay = 0U; + * config->frameDelay = 0U; + * @endcode + * + * @param config the pointer of PSP configuration structure. + */ +void SSP_GetDefaultPSPModeConfig(ssp_psp_mode_config_t *config); + +/*! + * @brief SSP set PSP mode configuration. + * + * @param base SSP peripheral base address. + * @param config the pointer of ssp psp mode configuration structure. + */ +void SSP_SetPSPModeConfig(SSP_Type *base, const ssp_psp_mode_config_t *config); +/*! + * @brief SSP enable/disable loop back mode. + * + * The tx serial shifter is internally connected to input of RX serial shifter, the loopback mode used for test purpose + * only. + * + * @param base SSP peripheral base address. + * @param enable true is enable the loop back mode, false is disable the loop back mode. + */ +static inline void SSP_EnableLoopBackMode(SSP_Type *base, bool enable) +{ + if (enable) + { + base->SSP_SSCR1 |= SSP_SSP_SSCR1_LBM_MASK; + } + else + { + base->SSP_SSCR1 &= ~SSP_SSP_SSCR1_LBM_MASK; + } +} + +/*! + * @brief SSP write data fifo. + * + * When a data sample size of less than 32-bits is selected, or 16 bits for packed mode, software + * should right-justify the data that is written to the SSP Data Register for automatic insertion into the + * TXFIFO. The transmit logic left-justifies the data and ignores any unused bits, cannot perform a write in + * packed mode of less than 32 bits wide. + * + * @param base SSP peripheral base address. + * @param data data to write. + */ +static inline void SSP_WriteData(SSP_Type *base, uint32_t data) +{ + base->SSP_SSDR = data; +} + +/*! + * @brief SSP read data fifo. + * + * Received data of less than 32 bits is right-justified automatically in the RXFIFO + * + * @param base SSP peripheral base address. + * @return data value read from fifo. + */ +static inline uint32_t SSP_ReadData(SSP_Type *base) +{ + return base->SSP_SSDR; +} + +/*! + * @brief SSP enable/disable. + * + * @param base SSP peripheral base address. + * @param enable true is enable, false is disable. + */ +static inline void SSP_Enable(SSP_Type *base, bool enable) +{ + if (enable) + { + base->SSP_SSCR0 |= SSP_SSP_SSCR0_SSE_MASK; + } + else + { + base->SSP_SSCR0 &= ~SSP_SSP_SSCR0_SSE_MASK; + } +} + +/* @} */ + +/*! + * @name SSP interrupt functional interface + * @{ + */ +/*! @brief SSP enable interrupt. + * + * @param base SSP peripheral base address + * @param interruptMask the Interrupt to be enabled, can a value or OR value of @ref _ssp_interrupt_mask. + */ +void SSP_EnableInterrupt(SSP_Type *base, uint32_t interruptMask); + +/*! @brief SSP disable interrupt. + * + * @param base SSP peripheral base address + * @param interruptMask the Interrupt to be disable, can a value or OR value of @ref _ssp_interrupt_mask. + */ +void SSP_DisableInterrupt(SSP_Type *base, uint32_t interruptMask); + +/*! @brief SSP clear interrupt status. + * + * Note: Transmit fifo ready flag and receive fifo flag do not support clear by software. + * + * @param base SSP peripheral base address + * @param interruptMask the Interrupt to be cleared, can a value or OR'ed value of @ref _ssp_interrupt_mask. + */ +void SSP_ClearInterruptStatus(SSP_Type *base, uint32_t interruptMask); + +/*! brief SSP get interrupt status. + * + * @param base SSP peripheral base address + * @return interrupt status flag, a value or OR'ed value of @ref _ssp_interrupt_mask. + */ +uint32_t SSP_GetInterruptStatus(SSP_Type *base); + +/* @} */ + +/*! + * @name SSP dma functional interface + * @{ + */ +/*! + * @brief SSP enable/disable tx DMA requst. + * + * @param base SSP peripheral base address. + * @param enable true is enable TX dma request, false is disable + */ +static inline void SSP_EnableSendDMARequest(SSP_Type *base, bool enable) +{ + if (enable) + { + base->SSP_SSCR1 |= SSP_SSP_SSCR1_TSRE_MASK; + } + else + { + base->SSP_SSCR1 &= ~SSP_SSP_SSCR1_TSRE_MASK; + } +} + +/*! + * @brief SSP enable/disable rx DMA requst. + * + * @param base SSP peripheral base address. + * @param enable true is enable RX dma request, false is disable + */ +static inline void SSP_EnableReceiveDMARequest(SSP_Type *base, bool enable) +{ + if (enable) + { + base->SSP_SSCR1 |= SSP_SSP_SSCR1_RSRE_MASK; + } + else + { + base->SSP_SSCR1 &= ~SSP_SSP_SSCR1_RSRE_MASK; + } +} + +/*! + * @brief SSP get data fifo address. + * + * @param base SSP peripheral base address. + * @return the ssp data fifo register address. + */ +static inline uint32_t SSP_GetFifoAddress(SSP_Type *base) +{ + return (uint32_t)&base->SSP_SSDR; +} +/* @} */ + +/*! + * @name SSP transactional interface + * @{ + */ +/*! + * @brief Creates the SSP send handle. + * + * @param base SSP peripheral base address. + * @param handle SSP handle pointer. + * @param callback Structure pointer to contain all callback functions. + * @param userData Callback function parameter. + */ +void SSP_TransferSendCreateHandle(SSP_Type *base, + ssp_handle_t *handle, + ssp_transfer_callback_t callback, + void *userData); + +/*! + * @brief Creates the SSP receive handle. + * + * @param base SSP peripheral base address. + * @param handle SSP handle pointer. + * @param callback Structure pointer to contain all callback functions. + * @param userData Callback function parameter. + */ +void SSP_TransferReceiveCreateHandle(SSP_Type *base, + ssp_handle_t *handle, + ssp_transfer_callback_t callback, + void *userData); + +/*! + * @brief Send the data using an interrupt and an asynchronous method. + * + * This function sends data and returns immediately. It doesn't wait for the transfer to complete or + * to encounter an error. The application can submit multiple transfer requests without waiting previous + * transfer request complete, since the SSP driver maintained a software transfer queue, the sizeof the queue + * is configurable by macro SSP_XFER_QUEUE_SIZE which indicates how many request can be submitted at the same time. + * + * @note Call API @ref SSP_TransferSendCreateHandle when calling this API. + * + * @param handle SSP handle. + * @param transfer transfer pointer. + * @retval #kStatus_InvalidArgument Argument is invalid. + * @retval #kSSP_TransferStatusBusy Busy transferring. + * @retval #kStatus_Success Operate successfully. + */ +status_t SSP_TransferSendNonBlocking(ssp_handle_t *handle, ssp_transfer_t *transfer); + +/*! + * @brief Receive the data using an interrupt and an asynchronous method. + * + * This function sends data and returns immediately. It doesn't wait for the transfer to complete or + * to encounter an error. The application can submit multiple transfer requests without waiting previous + * transfer request complete, since the SSP driver maintained a software transfer queue, the sizeof the queue + * is configurable by macro SSP_XFER_QUEUE_SIZE which indicates how many request can be submitted at the same time. + * + * @note Call API @ref SSP_TransferReceiveCreateHandle when calling this API. + * + * @param handle SSP handle. + * @param transfer transfer pointer. + * @retval #kStatus_InvalidArgument Argument is invalid. + * @retval #kSSP_TransferStatusBusy Busy transferring. + * @retval #kStatus_Success Operate successfully. + */ +status_t SSP_TransferReceiveNonBlocking(ssp_handle_t *handle, ssp_transfer_t *transfer); + +/*! + * @brief Aborts the current send. + * + * @note This API can be called any time when an interrupt non-blocking transfer initiates + * to abort the transfer early. + * + * @param handle Pointer to the ssp_handle_t structure which stores the transfer state. + */ +void SSP_TransferAbortSend(ssp_handle_t *handle); + +/*! + * @brief Aborts the current IRQ receive. + * + * @note This API can be called when an interrupt non-blocking transfer initiates + * to abort the transfer early. + * + * @param handle Pointer to the ssp_handle_t structure which stores the transfer state. + */ +void SSP_TransferAbortReceive(ssp_handle_t *handle); + +/*! + * @brief IRQ handler for the SSP transmitter. + * + * This function deals with the IRQs on the given host controller. + * + * @param handle SSP handle. + */ +void SSP_TransferSendHandleIRQ(ssp_handle_t *handle); + +/*! + * @brief IRQ handler for the SSP receiver. + * + * This function deals with the IRQs on the given host controller. + * + * @param handle SSP handle. + */ +void SSP_TransferReceiveHandleIRQ(ssp_handle_t *handle); + +/* @} */ +#if defined(__cplusplus) +} +#endif +/*! @} */ + +#endif /* _FSL_SSP_H_ */ diff --git a/drivers/mw320/ssp/fsl_ssp_dmac.c b/drivers/mw320/ssp/fsl_ssp_dmac.c new file mode 100644 index 000000000..8f2610c82 --- /dev/null +++ b/drivers/mw320/ssp/fsl_ssp_dmac.c @@ -0,0 +1,311 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_ssp_dmac.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.ssp_dmac" +#endif + +/*! @brief Mapping of dmac burst length */ +#define DMAC_BURST_LENGTH_MAPPING(fifoWatermark) \ + ((fifoWatermark) < 4U ? kDMAC_ChannelBurstLength1DataWidth : \ + (fifoWatermark) < 8U ? kDMAC_ChannelBurstLength4DataWidth : \ + (fifoWatermark) < 16U ? kDMAC_ChannelBurstLength8DataWidth : \ + kDMAC_ChannelBurstLength16DataWidth) + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief SSP EDMAC callback for send. + * + * @param handle pointer to ssp_dmac_handle_t structure which stores the transfer state. + * @param userData Parameter for user callback. + * @param transferStatus dmac transfer status + */ +static void SSP_TxDMACallback(dmac_handle_t *handle, void *userData, uint32_t transferStatus); + +/*! + * @brief SSP EDMAC callback for receive. + * + * @param handle pointer to ssp_dmac_handle_t structure which stores the transfer state. + * @param userData Parameter for user callback. + * @param transferStatus dmac transfer status + */ +static void SSP_RxDMACallback(dmac_handle_t *handle, void *userData, uint32_t transferStatus); + +/******************************************************************************* + * Code + ******************************************************************************/ +static void SSP_TxDMACallback(dmac_handle_t *handle, void *userData, uint32_t transferStatus) +{ + ssp_dmac_handle_t *sspHandle = (ssp_dmac_handle_t *)userData; + + if (transferStatus == (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete) + { + /* Call callback function */ + if (sspHandle->callback != NULL) + { + (sspHandle->callback)(sspHandle, kSSP_TransferStatusTxIdle, sspHandle->userData); + } + + SSP_TransferAbortSendDMAC(sspHandle); + } +} + +static void SSP_RxDMACallback(dmac_handle_t *handle, void *userData, uint32_t transferStatus) +{ + ssp_dmac_handle_t *sspHandle = (ssp_dmac_handle_t *)userData; + + if (transferStatus == (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete) + { + /* Call callback function */ + if (sspHandle->callback != NULL) + { + (sspHandle->callback)(sspHandle, kSSP_TransferStatusRxIdle, sspHandle->userData); + } + + SSP_TransferAbortReceiveDMAC(sspHandle); + } +} + +/*! + * brief Initializes the SSP send DMAC handle. + * + * This function initializes the SSP send DMAC handle, must be called after the SSP mode configuration done. + * + * param base SSP base pointer. + * param handle SSP DMAC handle pointer. + * param base SSP peripheral base address. + * param callback Pointer to user callback function. + * param userData User parameter passed to the callback function. + * param dmacHandle DMAC handle pointer, this handle shall be static allocated by users. + */ +void SSP_TransferSendCreateHandleDMAC( + SSP_Type *base, ssp_dmac_handle_t *handle, ssp_dmac_callback_t callback, void *userData, dmac_handle_t *dmacHandle) +{ + assert((handle != NULL) && (dmacHandle != NULL)); + + uint32_t fifoWatermark = ((base->SSP_SSCR1 & SSP_SSP_SSCR1_TFT_MASK) >> SSP_SSP_SSCR1_TFT_SHIFT) + 1U; + uint32_t regBitWidth = base->SSP_SSCR0 & (SSP_SSP_SSCR0_DSS_MASK | SSP_SSP_SSCR0_EDSS_MASK); + + /* Zero the handle */ + (void)memset(handle, 0, sizeof(*handle)); + + /* Set ssp base to handle */ + handle->dmacHandle = dmacHandle; + handle->callback = callback; + handle->userData = userData; + handle->base = base; + handle->burstLength = DMAC_BURST_LENGTH_MAPPING(fifoWatermark); + handle->bitWidth = + regBitWidth == (uint32_t)kSSP_DataSize8Bit ? 1U : regBitWidth == (uint32_t)kSSP_DataSize16Bit ? 2U : 4U; + + /* Set SSP state to idle */ + handle->state = (uint32_t)kSSP_TransferStatusTxIdle; + + /* Install callback for Tx dmac channel */ + DMAC_TransferSetCallback(dmacHandle, SSP_TxDMACallback, handle); +} + +/*! + * brief Initializes the SSP receive DMAC handle. + * + * This function initializes the SSP receive DMAC handle, must be called after the SSP mode configuration done. + * + * param base SSP base pointer. + * param handle SSP DMAC handle pointer. + * param base SSP peripheral base address. + * param callback Pointer to user callback function. + * param userData User parameter passed to the callback function. + * param dmacHandle DMAC handle pointer, this handle shall be static allocated by users. + */ +void SSP_TransferReceiveCreateHandleDMAC( + SSP_Type *base, ssp_dmac_handle_t *handle, ssp_dmac_callback_t callback, void *userData, dmac_handle_t *dmacHandle) +{ + assert((handle != NULL) && (dmacHandle != NULL)); + + uint32_t fifoWatermark = ((base->SSP_SSCR1 & SSP_SSP_SSCR1_RFT_MASK) >> SSP_SSP_SSCR1_RFT_SHIFT) + 1U; + uint32_t regBitWidth = base->SSP_SSCR0 & (SSP_SSP_SSCR0_DSS_MASK | SSP_SSP_SSCR0_EDSS_MASK); + + /* Zero the handle */ + (void)memset(handle, 0, sizeof(*handle)); + + /* Set ssp base to handle */ + handle->dmacHandle = dmacHandle; + handle->callback = callback; + handle->userData = userData; + handle->base = base; + handle->burstLength = DMAC_BURST_LENGTH_MAPPING(fifoWatermark); + handle->bitWidth = + regBitWidth == (uint32_t)kSSP_DataSize8Bit ? 1U : regBitWidth == (uint32_t)kSSP_DataSize16Bit ? 2U : 4U; + + /* Set SSP state to idle */ + handle->state = (uint32_t)kSSP_TransferStatusTxIdle; + + /* Install callback for Tx dmac channel */ + DMAC_TransferSetCallback(dmacHandle, SSP_RxDMACallback, handle); +} + +/*! + * brief Performs a non-blocking SSP transfer using DMAC. + * + * note This interface returns immediately after the transfer initiates. + * + * param base SSP base pointer. + * param handle SSP DMAC handle pointer. + * param xfer Pointer to DMAC transfer structure. + * retval kStatus_Success Successfully start the data receive. + * retval kStatus_SSP_TxBusy Previous receive still not finished. + * retval kStatus_InvalidArgument The input parameter is invalid. + */ +status_t SSP_TransferSendDMAC(ssp_dmac_handle_t *handle, ssp_transfer_t *xfer) +{ + status_t error = kStatus_Success; + dmac_channel_transfer_config_t transferConfig; + + /* Check if input parameter invalid */ + if ((handle == NULL) || (xfer->dataBuffer == NULL) || (xfer->dataSize == 0U)) + { + error = kStatus_InvalidArgument; + } + else + { + if (handle->state == (uint32_t)kSSP_TransferStatusBusy) + { + error = kSSP_TransferStatusBusy; + } + else + { + DMAC_GetChannelDefaultTransferConfig(&transferConfig, xfer->dataBuffer, + (uint32_t *)SSP_GetFifoAddress(handle->base), + (dmac_channel_transfer_width_t)handle->bitWidth, handle->burstLength, + xfer->dataSize, kDMAC_ChannelTransferMemoryToPeripheral); + transferConfig.interruptMask = (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete; + if (DMAC_TransferSubmit(handle->dmacHandle, &transferConfig) != kStatus_Success) + { + error = kSSP_TransferStatusBusy; + } + else + { + /* Change the state of handle */ + handle->state = (uint32_t)kSSP_TransferStatusBusy; + + /* Start DMAC transfer */ + DMAC_TransferStart(handle->dmacHandle); + + /* Enable DMAC request and start SSP */ + SSP_EnableSendDMARequest(handle->base, true); + /* Enable ssp port */ + SSP_Enable(handle->base, true); + } + } + } + + return error; +} + +/*! + * brief Performs a non-blocking SSP transfer using DMAC. + * + * note This interface returns immediately after transfer initiates. + * + * param base SSP base pointer + * param handle SSP DMAC handle pointer. + * param xfer Pointer to DMAC transfer structure. + * retval kStatus_Success Successfully start the data receive. + * retval kStatus_SSP_RxBusy Previous receive still not finished. + * retval kStatus_InvalidArgument The input parameter is invalid. + */ +status_t SSP_TransferReceiveDMAC(ssp_dmac_handle_t *handle, ssp_transfer_t *xfer) +{ + status_t error = kStatus_Success; + dmac_channel_transfer_config_t transferConfig; + + /* Check if input parameter invalid */ + if ((handle == NULL) || (xfer->dataBuffer == NULL) || (xfer->dataSize == 0U)) + { + error = kStatus_InvalidArgument; + } + else + { + if (handle->state == (uint32_t)kSSP_TransferStatusBusy) + { + error = kSSP_TransferStatusBusy; + } + else + { + DMAC_GetChannelDefaultTransferConfig(&transferConfig, (uint32_t *)SSP_GetFifoAddress(handle->base), + xfer->dataBuffer, (dmac_channel_transfer_width_t)handle->bitWidth, + handle->burstLength, xfer->dataSize, + kDMAC_ChannelTransferPeripheralToMemory); + transferConfig.interruptMask = (uint32_t)kDMAC_ChannelInterruptFlagTransferComplete; + if (DMAC_TransferSubmit(handle->dmacHandle, &transferConfig) != kStatus_Success) + { + error = kSSP_TransferStatusBusy; + } + else + { + /* Change the state of handle */ + handle->state = (uint32_t)kSSP_TransferStatusBusy; + /* Start DMAC transfer */ + DMAC_TransferStart(handle->dmacHandle); + /* Enable DMAC request and start SSP */ + SSP_EnableReceiveDMARequest(handle->base, true); + /* Enable ssp port */ + SSP_Enable(handle->base, true); + } + } + } + + return error; +} + +/*! + * brief Aborts a SSP transfer using DMAC. + * + * param base SSP base pointer. + * param handle SSP DMAC handle pointer. + */ +void SSP_TransferAbortSendDMAC(ssp_dmac_handle_t *handle) +{ + assert(handle != NULL); + + /* Disable dmac */ + DMAC_TransferStop(handle->dmacHandle); + + /* Disable DMAC enable bit */ + SSP_EnableSendDMARequest(handle->base, false); + + /* Set the handle state */ + handle->state = (uint32_t)kSSP_TransferStatusTxIdle; +} + +/*! + * brief Aborts a SSP transfer using DMAC. + * + * param base SSP base pointer. + * param handle SSP DMAC handle pointer. + */ +void SSP_TransferAbortReceiveDMAC(ssp_dmac_handle_t *handle) +{ + assert(handle != NULL); + + /* Disable dmac */ + DMAC_TransferStop(handle->dmacHandle); + + /* Disable DMAC enable bit */ + SSP_EnableReceiveDMARequest(handle->base, false); + + /* Set the handle state */ + handle->state = (uint32_t)kSSP_TransferStatusRxIdle; +} diff --git a/drivers/mw320/ssp/fsl_ssp_dmac.h b/drivers/mw320/ssp/fsl_ssp_dmac.h new file mode 100644 index 000000000..5bb4c7e87 --- /dev/null +++ b/drivers/mw320/ssp/fsl_ssp_dmac.h @@ -0,0 +1,139 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_SSP_DMAC_H_ +#define _FSL_SSP_DMAC_H_ + +#include "fsl_dmac.h" +#include "fsl_ssp.h" + +/*! + * @addtogroup ssp_dma_driver + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_SSP_DMAC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */ +/*@}*/ + +typedef struct _ssp_dmac_handle ssp_dmac_handle_t; + +/*! @brief Define SSP DMAC callback */ +typedef void (*ssp_dmac_callback_t)(ssp_dmac_handle_t *handle, status_t transferStatus, void *userData); + +/*! @brief SSP DMAC transfer handle, users should not touch the content of the handle. + * A ssp_dmac_handle object can used to represent SSP TX or RX. + */ +struct _ssp_dmac_handle +{ + SSP_Type *base; /*!< SSP base address */ + dmac_handle_t *dmacHandle; /*!< DMAC handler for SSP send */ + + uint32_t bitWidth; /*!< bit width */ + dmac_channel_burst_length_t burstLength; /*!< dmac channel burst length */ + + uint32_t state; /*!< SSP DMAC transfer internal state */ + ssp_dmac_callback_t callback; /*!< Callback for users while transfer finish or error occurred */ + void *userData; /*!< User callback parameter */ +}; + +/******************************************************************************* + * APIs + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif +/*! + * @name DMAC Transactional + * @{ + */ + +/*! + * @brief Initializes the SSP master DMAC handle. + * + * This function initializes the SSP master DMAC handle, which can be used for other SSP master transactional APIs. + * Usually, for a specified SSP instance, call this API once to get the initialized handle. + * + * @param base SSP base pointer. + * @param handle SSP DMAC handle pointer. + * @param base SSP peripheral base address. + * @param callback Pointer to user callback function. + * @param userData User parameter passed to the callback function. + * @param dmacHandle DMAC handle pointer, this handle shall be static allocated by users. + */ +void SSP_TransferSendCreateHandleDMAC( + SSP_Type *base, ssp_dmac_handle_t *handle, ssp_dmac_callback_t callback, void *userData, dmac_handle_t *dmacHandle); + +/*! + * @brief Initializes the SSP receive DMAC handle. + * + * This function initializes the SSP receive DMAC handle, which can be used for other SSP master transactional APIs. + * Usually, for a specified SSP instance, call this API once to get the initialized handle. + * + * @param base SSP base pointer. + * @param handle SSP DMAC handle pointer. + * @param base SSP peripheral base address. + * @param callback Pointer to user callback function. + * @param userData User parameter passed to the callback function. + * @param dmacHandle DMAC handle pointer, this handle shall be static allocated by users. + */ +void SSP_TransferReceiveCreateHandleDMAC( + SSP_Type *base, ssp_dmac_handle_t *handle, ssp_dmac_callback_t callback, void *userData, dmac_handle_t *dmacHandle); + +/*! + * @brief Performs a non-blocking SSP transfer using DMAC. + * + * @note This interface returns immediately after the transfer initiates. + * + * @param handle SSP DMAC handle pointer. + * @param xfer Pointer to DMAC transfer structure. + * @retval kStatus_Success Successfully start the data receive. + * @retval kStatus_SSP_TxBusy Previous receive still not finished. + * @retval kStatus_InvalidArgument The input parameter is invalid. + */ +status_t SSP_TransferSendDMAC(ssp_dmac_handle_t *handle, ssp_transfer_t *xfer); + +/*! + * @brief Performs a non-blocking SSP transfer using DMAC. + * + * @note This interface returns immediately after transfer initiates. + * + * @param handle SSP DMAC handle pointer. + * @param xfer Pointer to DMAC transfer structure. + * @retval kStatus_Success Successfully start the data receive. + * @retval kStatus_SSP_RxBusy Previous receive still not finished. + * @retval kStatus_InvalidArgument The input parameter is invalid. + */ +status_t SSP_TransferReceiveDMAC(ssp_dmac_handle_t *handle, ssp_transfer_t *xfer); + +/*! + * @brief Aborts a SSP transfer using DMAC. + * + * @param handle SSP DMAC handle pointer. + */ +void SSP_TransferAbortSendDMAC(ssp_dmac_handle_t *handle); + +/*! + * @brief Aborts a SSP transfer using DMAC. + * + * @param handle SSP DMAC handle pointer. + */ +void SSP_TransferAbortReceiveDMAC(ssp_dmac_handle_t *handle); +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/*! + * @} + */ +#endif diff --git a/drivers/mw320/uart/driver_mw_uart.cmake b/drivers/mw320/uart/driver_mw_uart.cmake new file mode 100644 index 000000000..f5f2fc63c --- /dev/null +++ b/drivers/mw320/uart/driver_mw_uart.cmake @@ -0,0 +1,14 @@ +#Description: MW_UART Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_uart component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_uart.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/uart/driver_mw_uart_dmac.cmake b/drivers/mw320/uart/driver_mw_uart_dmac.cmake new file mode 100644 index 000000000..b20786fb6 --- /dev/null +++ b/drivers/mw320/uart/driver_mw_uart_dmac.cmake @@ -0,0 +1,15 @@ +#Description: MW_UART DMAC Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_uart_dmac component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_uart_dmac.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_mw_uart) +include(driver_mw_dmac) diff --git a/drivers/mw320/uart/fsl_uart.c b/drivers/mw320/uart/fsl_uart.c new file mode 100644 index 000000000..4e5ee919a --- /dev/null +++ b/drivers/mw320/uart/fsl_uart.c @@ -0,0 +1,1306 @@ +/* + * Copyright 2020,2021 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_uart.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.mw_uart" +#endif + +/* UART transfer state. */ +enum +{ + kUART_TxIdle, /*!< TX idle. */ + kUART_TxBusy, /*!< TX busy. */ + kUART_RxIdle, /*!< RX idle. */ + kUART_RxBusy, /*!< RX busy. */ + kUART_RxFramingError, /* Rx framing error */ + kUART_RxParityError /* Rx parity error */ +}; + +/* Typedef for interrupt handler. */ +typedef void (*uart_isr_t)(UART_Type *base, uart_handle_t *handle); + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Check whether the RX ring buffer is full. + * + * @userData handle UART handle pointer. + * @retval true RX ring buffer is full. + * @retval false RX ring buffer is not full. + */ +static bool UART_TransferIsRxRingBufferFull(UART_Type *base, uart_handle_t *handle); + +/*! + * @brief Write to TX register using non-blocking method. + * + * This function writes data to the TX register directly, upper layer must make + * sure the TX register is empty or TX FIFO has empty room before calling this function. + * + * @note This function does not check whether all the data has been sent out to bus, + * so before disable TX, check kUART_TransmissionCompleteFlag to ensure the TX is + * finished. + * + * @param base UART peripheral base address. + * @param data Start address of the data to write. + * @param length Size of the buffer to be sent. + */ +static void UART_WriteNonBlocking(UART_Type *base, const uint8_t *data, size_t length); + +/*! + * @brief Read RX register using non-blocking method. + * + * This function reads data from the TX register directly, upper layer must make + * sure the RX register is full or TX FIFO has data before calling this function. + * + * @param base UART peripheral base address. + * @param data Start address of the buffer to store the received data. + * @param length Size of the buffer. + */ +static void UART_ReadNonBlocking(UART_Type *base, uint8_t *data, size_t length); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* Array of UART peripheral base address. */ +static UART_Type *const s_uartBases[] = UART_BASE_PTRS; +/* Array of UART handle. */ +static uart_handle_t *s_uartHandle[ARRAY_SIZE(s_uartBases)]; +/* Array of UART IRQ number. */ +static const IRQn_Type s_uartIRQ[] = UART_IRQS; + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/* Array of UART clock name. */ +static const clock_ip_name_t s_uartClock[] = UART_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/* UART ISR for transactional APIs. */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) +static uart_isr_t s_uartIsr = (uart_isr_t)DefaultISR; +#else +static uart_isr_t s_uartIsr; +#endif + +/******************************************************************************* + * Code + ******************************************************************************/ +static bool UART_TransferIsRxRingBufferFull(UART_Type *base, uart_handle_t *handle) +{ + assert(NULL != handle); + + bool full; + + if (UART_TransferGetRxRingBufferLength(base, handle) == (handle->rxRingBufferSize - 1U)) + { + full = true; + } + else + { + full = false; + } + return full; +} + +static void UART_WriteNonBlocking(UART_Type *base, const uint8_t *data, size_t length) +{ + assert(NULL != data); + + size_t i; + + /* The Non Blocking write data API assume user have ensured there is enough space in + peripheral to write. */ + for (i = 0U; i < length; i++) + { + base->THR = data[i]; + } +} + +static void UART_ReadNonBlocking(UART_Type *base, uint8_t *data, size_t length) +{ + assert(NULL != data); + + size_t i; + uint8_t dataMask = 0xFFU >> (base->LCR ^ 0x3U); + + /* The Non Blocking read data API assume user have ensured there is enough space in + peripheral to write. */ + for (i = 0; i < length; i++) + { + data[i] = (uint8_t)(base->RBR & dataMask); + } +} + +/*! + * brief Get the UART instance from peripheral base address. + * + * param base UART peripheral base address. + * return UART instance. + */ +uint32_t UART_GetInstance(UART_Type *base) +{ + uint32_t instance; + /* Find the instance index from base address mappings. */ + for (instance = 0U; instance < ARRAY_SIZE(s_uartBases); instance++) + { + if (s_uartBases[instance] == base) + { + break; + } + } + assert(instance < ARRAY_SIZE(s_uartBases)); + return instance; +} + +/*! + * brief Initializes an UART instance with the user configuration structure and the peripheral clock frequency. + * + * This function configures the UART module with user-defined settings. Call the UART_GetDefaultConfig function + * to get the configuration structure configured with default settings. + * The example below shows how to use this API to configure the UART. + * code + * uart_config_t uartConfig; + * UART_GetDefaultConfig(&uartConfig); + * UART_Init(UART1, &uartConfig, 20000000U); + * endcode + * + * param base UART peripheral base address. + * param config Pointer to a user-defined configuration structure. + * param srcClock_Hz UART clock source frequency in Hz. + * retval kStatus_UART_BaudrateNotSupport Baudrate is not support in current clock source. + * retval kStatus_Success UART initialize succeed + */ +status_t UART_Init(UART_Type *base, const uart_config_t *config, uint32_t srcClock_Hz) +{ + assert(NULL != config); + assert(0U != config->baudRate_Bps); + + /* Reset UART registers */ + base->DLL = 0x2U; + base->DLH = 0x0U; + base->IER = 0U; + base->FCR = 0U; + base->LCR = 0U; + base->MCR = 0U; + base->SCR = 0U; + base->ISR = 0U; + base->ABR = 0U; + + if (UART_SetBaudRate(base, config->baudRate_Bps, srcClock_Hz) == kStatus_UART_BaudrateNotSupport) + { + return kStatus_UART_BaudrateNotSupport; + } + else + { +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Enable uart clock */ + CLOCK_EnableClock(s_uartClock[UART_GetInstance(base)]); +#endif + } + UART_SetParity(base, config->parityMode); + UART_EnableStickyParity(base, config->enableStickyParity); + UART_SetDataBits(base, config->dataBitCount); + UART_SetStopBits(base, config->stopBitCount); + UART_SetFifoConfig(base, (uart_fifo_config_t *)&config->fifoConfig); + UART_SetAutoBaudConfig(base, (uart_autobaud_config_t *)&config->autoBaudConfig); + UART_SetInfraredConfig(base, (uart_infrared_config_t *)&config->infraredConfig); + UART_EnableHighSpeed(base, config->enableHighSpeed); + UART_EnableLoop(base, config->enableLoop); + UART_EnablCts(base, config->enableTxCTS); + UART_EnableRts(base, config->enableRxRTS); + UART_Enable(base, config->enable); + + return kStatus_Success; +} + +/*! + * brief Deinitializes a UART instance. + * + * This function waits for transmit to complete, disables TX and RX, and disables the UART clock. + * + * param base UART peripheral base address. + */ +void UART_Deinit(UART_Type *base) +{ + /* Wait all data shift out */ + while ((UART_GetStatusFlags(base) & (uint16_t)kUART_TxEmptyInterruptFlag) == 0U) + { + } + /* Disable module. */ + UART_Enable(base, false); +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Enable uart clock */ + CLOCK_DisableClock(s_uartClock[UART_GetInstance(base)]); +#endif +} + +/*! + * brief Gets the default configuration structure. + * + * This function initializes the UART configuration structure to a default value. + * The example below shows how to use this API to configure the UART. + * code + * uart_config_t uartConfig; + * UART_GetDefaultConfig(&uartConfig); + * UART_Init(UART1, &uartConfig, 20000000U); + * endcode + * + * param config Pointer to a configuration structure. + */ +void UART_GetDefaultConfig(uart_config_t *config) +{ + assert(NULL != config); + /* Initializes the configure structure to zero. */ + (void)memset(config, 0, sizeof(*config)); + + config->baudRate_Bps = 115200U; + config->parityMode = kUART_ParityDisabled; + config->enableStickyParity = false; + config->dataBitCount = kUART_Databits8; + config->stopBitCount = kUART_Stopbits1; + config->fifoConfig.txFifoWatermark = kUART_TxfifoEmpty; + config->fifoConfig.rxFifoWatermark = kUART_RxfifoByte1; + config->fifoConfig.resetTxFifo = false; + config->fifoConfig.resetRxFifo = false; + config->fifoConfig.fifoEnable = true; + config->autoBaudConfig.autoBaudEnable = false; + config->autoBaudConfig.baudProgramType = kUART_BaudrateProgramAuto; + config->autoBaudConfig.baudCalType = kUART_BaudrateCalFormula; + config->infraredConfig.txIrEnable = false; + config->infraredConfig.rxIrEnable = false; + config->infraredConfig.txIrPolarity = kUART_IrPositivePulse; + config->infraredConfig.rxIrPolarity = kUART_IrPositivePulse; + config->infraredConfig.irPulseWidth = kUART_IrPulsewidth3div16; + config->enableHighSpeed = true; + config->enableLoop = false; + config->enableTxCTS = false; + config->enableRxRTS = false; + config->enable = false; +} + +/*! + * brief Gets UART hardware status flags. + * + * param base UART peripheral base address. + * return UART status flags, can be a single flag or several flags in #_uart_status_flags combined by OR. + */ +uint16_t UART_GetStatusFlags(UART_Type *base) +{ + uint16_t status = (uint16_t)base->LSR; + status |= (uint16_t)(base->IIR & 0x18UL) << 8U; + return status; +} + +/*! + * brief Enables UART interrupts according to the provided mask. + * + * This function enables the UART interrupts according to the provided mask. The mask is a logical OR of enumeration + * members in #_uart_interrupt_enable. + * + * param base UART peripheral base address. + * param u16Interrupts The interrupt source mask, can be a single source or several sources in #_uart_interrupt_enable + * combined by OR. + */ +void UART_EnableInterrupts(UART_Type *base, uint8_t interrupts) +{ + base->MCR |= UART_MCR_OUT2_MASK; + if ((interrupts & (uint8_t)kUART_AutoBaudCompleteInterruptEnable) != 0U) + { + base->ABR |= UART_ABR_ABLIE_MASK; + } + base->IER |= (interrupts & 0x1FU); +} + +/*! + * brief Disables UART interrupts according to the provided mask. + * + * This function disables the UART interrupts according to the provided mask. The mask is a logical OR of enumeration + * members in #_uart_interrupt_enable. + * + * param base UART peripheral base address. + * param interrupts The interrupt source mask, can be a single source or several sources in #_uart_interrupt_enable + * combined by OR. + */ +void UART_DisableInterrupts(UART_Type *base, uint8_t interrupts) +{ + if ((interrupts & (uint8_t)kUART_AutoBaudCompleteInterruptEnable) != 0U) + { + base->ABR &= ~UART_ABR_ABLIE_MASK; + } + base->IER &= ~(interrupts & 0x1FU); +} + +/*! + * brief Gets the enabled UART interrupts. + * + * This function gets the enabled UART interrupts. The enabled interrupts are returned as the logical OR value of the + * enumerators #_uart_interrupt_enable. + * + * param base UART peripheral base address. + * return The interrupt source mask, can be a single source or several sources in #_uart_interrupt_enable combined + * by OR. + */ +uint8_t UART_GetEnabledInterrupts(UART_Type *base) +{ + uint8_t interrupts = (uint8_t)base->IER & 0x1FU; + if ((base->ABR & UART_ABR_ABLIE_MASK) != 0U) + { + interrupts |= (uint8_t)kUART_AutoBaudCompleteInterruptEnable; + } + return interrupts; +} + +/*! + * brief Sets the UART instance baudrate. + * + * This API configures the UART module baudrate. This API can be used to update + * the UART module baudrate after the UART module is initialized by the UART_Init. + * code + * UART_SetBaudRate(UART1, 115200U, 20000000U); + * endcode + * + * param base UART peripheral base address. + * param baudRate_Bps UART baudrate to be set. + * param srcClock_Hz UART clock source frequency in HZ. + * retval kStatus_UART_BaudrateNotSupport Baudrate is not supported in the current clock source. + * retval kStatus_Success Set baudrate succeeded. + */ +status_t UART_SetBaudRate(UART_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz) +{ + assert((baudRate_Bps != 0U) && (srcClock_Hz != 0U)); + + uint16_t div = (uint16_t)(srcClock_Hz * 10U / baudRate_Bps / 16U + 5U) / 10U; + uint32_t actualBaud = srcClock_Hz / (uint32_t)div / 16U; + uint32_t diff = actualBaud > baudRate_Bps ? actualBaud - baudRate_Bps : baudRate_Bps - actualBaud; + if (diff > (baudRate_Bps / 100U * 3U)) + { + return kStatus_UART_BaudrateNotSupport; + } + else + { + /* Configure the Baud Rate */ + base->LCR |= UART_LCR_DLAB_MASK; + base->DLH = (div >> 8U) & 0xFFU; + base->DLL = div & 0xFFU; + base->LCR &= ~UART_LCR_DLAB_MASK; + return kStatus_Success; + } +} + +/*! + * brief Sets the UART auto baud configuration. + * + * This API configures the UART auto baud function, including enable/disable, calculation type, program type. + * + * param base UART peripheral base address. + * param autoBaudConfig pointer to UART auto baud configuration. + */ +void UART_SetAutoBaudConfig(UART_Type *base, uart_autobaud_config_t *autoBaudConfig) +{ + assert(autoBaudConfig != NULL); + + base->ABR = (base->ABR & ~(UART_ABR_ABT_MASK | UART_ABR_ABUP_MASK | UART_ABR_ABE_MASK)) | + UART_ABR_ABT(autoBaudConfig->baudCalType) | UART_ABR_ABUP(autoBaudConfig->baudProgramType) | + UART_ABR_ABE(autoBaudConfig->autoBaudEnable); +} + +/*! + * brief Set DL register according to Auto Baud Detect Count value. + * + * param base UART peripheral base address. + */ +void UART_SetAutoBaud(UART_Type *base) +{ + uint16_t autoBaudCount = UART_GetAutoBaudCount(base); + /* Configure the Baud Rate */ + base->LCR |= UART_LCR_DLAB_MASK; + base->DLH = (autoBaudCount >> 12U) & 0xFF; + base->DLL = (autoBaudCount >> 4U) & 0xFF; + base->LCR &= ~UART_LCR_DLAB_MASK; +} + +/*! + * brief Sets the UART auto baud configuration. + * + * This API configures the UART auto baud function, including enable/disable, calculation type, program type. + * + * param base UART peripheral base address. + * param infraredConfig pointer to UART infrared configuration. + */ +void UART_SetInfraredConfig(UART_Type *base, uart_infrared_config_t *infraredConfig) +{ + assert(infraredConfig != NULL); + + base->ISR = UART_ISR_RXPL(infraredConfig->rxIrPolarity) | UART_ISR_TXPL(infraredConfig->txIrPolarity) | + UART_ISR_XMODE(infraredConfig->irPulseWidth) | UART_ISR_RCVEIR(infraredConfig->rxIrEnable) | + UART_ISR_XMITIR(infraredConfig->txIrEnable); +} + +/*! + * brief Read 9 bit data from the UART peripheral. + * + * Before calling this API, make sure parity is enabled, and rx register full or data available in rx FIFO. + * + * param base UART peripheral base address. + * return The received data + */ +uint16_t UART_Read9bits(UART_Type *base) +{ + uint16_t data; + uint8_t i; + uint8_t parity = 0U; + + /* Receive data */ + data = (uint16_t)UART_ReadByte(base); + + for (i = 0U; i < 8U; i++) + { + parity ^= ((data >> i) & 0x1U); + } + + /* Check the parity error status bit */ + parity ^= (base->LSR & UART_LSR_PE_MASK) >> UART_LSR_PE_SHIFT; + /* Check current parity setting */ + if ((base->LCR & UART_LCR_EPS_MASK) != 0U) + { + parity ^= 0x1U; + } + /* get bit9 according parity error status */ + data |= parity << 8U; + + return (data & 0x1FF); +} + +/*! + * brief Writes TX register using a blocking method. + * + * This function polls the TX register, waits TX register to be empty or TX FIFO + * have room then writes data to the TX buffer. + * + * param base UART peripheral base address. + * param data Start address of the data to write. + * param length Size of the data to write. + */ +status_t UART_WriteBlocking(UART_Type *base, const uint8_t *data, uint32_t length) +{ + assert(NULL != data); + + const uint8_t *dataAddress = data; + +#if UART_RETRY_TIMES + uint32_t waitTimes; +#endif + + while (0U != length) + { +#if UART_RETRY_TIMES + waitTimes = UART_RETRY_TIMES; + while ((0U == (base->LSR & UART_LSR_TDRQ_MASK)) && (0U != --waitTimes)) +#else + while (0U == (base->LSR & UART_LSR_TDRQ_MASK)) +#endif + { + } +#if UART_RETRY_TIMES + if (0U == waitTimes) + { + return kStatus_UART_Timeout; + } +#endif + base->THR = *(dataAddress); + dataAddress++; + length--; + } + /* Ensure all the data in the transmit buffer are sent out to bus. */ +#if UART_RETRY_TIMES + waitTimes = UART_RETRY_TIMES; + while ((0U == (base->LSR & UART_LSR_TEMT_MASK)) && (0U != --waitTimes)) +#else + while (0U == (base->LSR & UART_LSR_TEMT_MASK)) +#endif + { + } +#if UART_RETRY_TIMES + if (0U == waitTimes) + { + return kStatus_UART_Timeout; + } +#endif + return kStatus_Success; +} + +/*! + * brief Reads RX data register using a blocking method. + * + * This function polls the RX register, waits RX register to be full or RX FIFO + * have data, then reads data from the RX register. + * + * param base UART peripheral base address. + * param data Start address of the buffer to store the received data. + * param length Size of the buffer. + * retval kStatus_Fail Receiver error occurred while receiving data. + * retval kStatus_UART_RxHardwareOverrun Receiver overrun occurred while receiving data + * retval kStatus_UART_NoiseError Noise error occurred while receiving data + * retval kStatus_UART_FramingErrorFraming error occurred while receiving data + * retval kStatus_UART_ParityError Parity error occurred while receiving data + * retval kStatus_Success Successfully received all data. + */ +status_t UART_ReadBlocking(UART_Type *base, uint8_t *data, uint32_t length) +{ + assert(NULL != data); + + status_t status = kStatus_Success; + uint16_t statusFlag; + uint8_t dataMask = 0xFFU >> (base->LCR ^ 0x3U); + +#if UART_RETRY_TIMES + uint32_t waitTimes; +#endif + + while (0U != (length--)) + { + statusFlag = UART_GetStatusFlags(base); +#if UART_RETRY_TIMES + waitTimes = UART_RETRY_TIMES; + while (((statusFlag & (uint16_t)kUART_RxDataReadyInterruptFlag) == 0U) && (0U != --waitTimes)) + { + if (0U == waitTimes) + { + status = kStatus_UART_Timeout; + break; + } +#else + while ((statusFlag & (uint16_t)kUART_RxDataReadyInterruptFlag) == 0U) + { +#endif + if (0U != (statusFlag & (uint16_t)kUART_RxOverrunInterruptFlag)) + { + status = kStatus_UART_RxHardwareOverrun; + /* Other error flags(FE, NF, and PF) are prevented from setting once OR is set, no need to check other + * error flags*/ + break; + } + + if (0U != (statusFlag & (uint16_t)kUART_ParityErrorInterruptFlag)) + { + status = kStatus_UART_ParityError; + } + + if (0U != (statusFlag & (uint16_t)kUART_FramingErrorInterruptFLag)) + { + status = kStatus_UART_FramingError; + } + + if (0U != (statusFlag & (uint16_t)kUART_FifoErrorInterruptFlag)) + { + status = kStatus_UART_FifoError; + } + if (kStatus_Success != status) + { + break; + } + statusFlag = UART_GetStatusFlags(base); + } + + if (kStatus_Success == status) + { + *(data++) = (uint8_t)(base->RBR & dataMask); + } + else + { + break; + } + } + return status; +} + +/*! + * brief Initializes the UART handle. + * + * This function initializes the UART handle, which can be used for other UART + * transactional APIs. Usually, for a specified UART instance, + * call this API once to get the initialized handle. + * + * The UART driver supports the "background" receiving, which means that user can set up + * an RX ring buffer optionally. Data received is stored into the ring buffer even when the + * user doesn't call the UART_TransferReceiveNonBlocking() API. If there is already data received + * in the ring buffer, the user can get the received data from the ring buffer directly. + * The ring buffer is disabled if passing NULL as @p ringBuffer. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * param callback Callback function. + * param userData User data. + */ +void UART_TransferCreateHandle(UART_Type *base, + uart_handle_t *handle, + uart_transfer_callback_t callback, + void *userData) +{ + assert(NULL != handle); + + uint32_t instance; + + /* Zero the handle. */ + (void)memset(handle, 0, sizeof(uart_handle_t)); + + /* Set data mask */ + handle->dataMask = 0xFFU >> (base->LCR ^ 0x3U); + + /* Set the TX/RX state. */ + handle->rxState = (uint8_t)kUART_RxIdle; + handle->txState = (uint8_t)kUART_TxIdle; + + /* Set the callback and user data. */ + handle->callback = callback; + handle->userData = userData; + + /* Get instance from peripheral base address. */ + instance = UART_GetInstance(base); + + /* Save the handle in global variables to support the double weak mechanism. */ + s_uartHandle[instance] = handle; + s_uartIsr = UART_TransferHandleIRQ; + + /* Enable interrupt in NVIC. */ + (void)EnableIRQ(s_uartIRQ[instance]); +} + +/*! + * brief Sets up the RX ring buffer. + * + * This function sets up the RX ring buffer to a specific UART handle. + * + * When the RX ring buffer is used, data received is stored into the ring buffer even when + * the user doesn't call the UART_TransferReceiveNonBlocking() API. If there is already data received + * in the ring buffer, the user can get the received data from the ring buffer directly. + * + * note When using RX ring buffer, one byte is reserved for internal use. In other + * words, if @p ringBufferSize is 32, then only 31 bytes are used for saving data. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * param ringBuffer Start address of ring buffer for background receiving. Pass NULL to disable the ring buffer. + * param ringBufferSize size of the ring buffer. + */ +void UART_TransferStartRingBuffer(UART_Type *base, uart_handle_t *handle, uint8_t *ringBuffer, size_t ringBufferSize) +{ + assert(NULL != handle); + assert(NULL != ringBuffer); + + /* Setup the ring buffer address */ + handle->rxRingBuffer = ringBuffer; + handle->rxRingBufferSize = ringBufferSize; + handle->rxRingBufferHead = 0U; + handle->rxRingBufferTail = 0U; + + /* Enable the interrupt to accept the data when user need the ring buffer. */ + UART_EnableInterrupts(base, (uint16_t)kUART_RxDataReadyInterruptEnable | (uint16_t)kUART_RxStatusInterruptEnable); +} + +/*! + * brief Aborts the background transfer and uninstalls the ring buffer. + * + * This function aborts the background transfer and uninstalls the ring buffer. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + */ +void UART_TransferStopRingBuffer(UART_Type *base, uart_handle_t *handle) +{ + assert(NULL != handle); + + if (handle->rxState == (uint8_t)kUART_RxIdle) + { + UART_DisableInterrupts(base, + (uint16_t)kUART_RxDataReadyInterruptEnable | (uint16_t)kUART_RxStatusInterruptEnable); + } + + handle->rxRingBuffer = NULL; + handle->rxRingBufferSize = 0U; + handle->rxRingBufferHead = 0U; + handle->rxRingBufferTail = 0U; +} + +/*! + * brief Get the length of received data in RX ring buffer. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * return Length of received data in RX ring buffer. + */ +size_t UART_TransferGetRxRingBufferLength(UART_Type *base, uart_handle_t *handle) +{ + assert(NULL != handle); + + size_t size; + size_t tmpRxRingBufferSize = handle->rxRingBufferSize; + uint16_t tmpRxRingBufferTail = handle->rxRingBufferTail; + uint16_t tmpRxRingBufferHead = handle->rxRingBufferHead; + + if (tmpRxRingBufferTail > tmpRxRingBufferHead) + { + size = ((size_t)tmpRxRingBufferHead + tmpRxRingBufferSize - (size_t)tmpRxRingBufferTail); + } + else + { + size = ((size_t)tmpRxRingBufferHead - (size_t)tmpRxRingBufferTail); + } + + return size; +} + +/*! + * brief Transmits a buffer of data using the interrupt method. + * + * This function send data using an interrupt method. This is a non-blocking function, which + * returns directly without waiting for all data written to the transmitter register. When + * all data is written to the TX register in the ISR, the UART driver calls the callback + * function and passes the @ref kStatus_UART_TxIdle as status parameter. + * + * note The kStatus_UART_TxIdle is passed to the upper layer when all data are written + * to the TX register. However, there is no check to ensure that all the data sent out. Before disabling the TX, + * check the kUART_TransmissionCompleteFlag to ensure that the transmit is finished. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * param xfer UART transfer structure, see #uart_transfer_t. + * @retval kStatus_Success Successfully start the data transmission. + * @retval kStatus_UART_TxBusy Previous transmission still not finished, data not all written to the TX register. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferSendNonBlocking(UART_Type *base, uart_handle_t *handle, uart_transfer_t *xfer) +{ + assert(NULL != handle); + assert(NULL != xfer); + assert(NULL != xfer->data); + assert(0U != xfer->dataSize); + + status_t status; + + /* Return error if current TX busy. */ + if ((uint8_t)kUART_TxBusy == handle->txState) + { + status = kStatus_UART_TxBusy; + } + else + { + handle->txData = xfer->data; + handle->txDataSize = xfer->dataSize; + handle->txDataSizeAll = xfer->dataSize; + handle->txState = (uint8_t)kUART_TxBusy; + + /* Enable transmitter interrupt. */ + UART_EnableInterrupts(base, (uint16_t)kUART_TxDataRequestInterruptEnable); + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Gets the number of bytes that have been sent out to bus. + * + * This function gets the number of bytes that have been sent out to bus by an interrupt method. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * param count Send bytes count. + * @retval kStatus_NoTransferInProgress No send in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t UART_TransferGetSendCount(UART_Type *base, uart_handle_t *handle, uint32_t *count) +{ + assert(NULL != handle); + assert(NULL != count); + + status_t status = kStatus_Success; + size_t tmptxDataSize = handle->txDataSize; + + if ((uint8_t)kUART_TxIdle == handle->txState) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = handle->txDataSizeAll - tmptxDataSize; + } + return status; +} + +/*! + * brief Aborts the interrupt-driven data transmit. + * + * This function aborts the interrupt driven data sending. The user can get the remainBtyes to find out + * how many bytes are not sent out. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + */ +void UART_TransferAbortSend(UART_Type *base, uart_handle_t *handle) +{ + assert(NULL != handle); + + UART_DisableInterrupts(base, (uint16_t)kUART_TxDataRequestInterruptEnable); + + handle->txDataSize = 0; + handle->txState = (uint8_t)kUART_TxIdle; +} + +/*! + * brief Receives a buffer of data using the interrupt method. + * + * This function receives data using an interrupt method. This is a non-blocking function + * which returns without waiting to ensure that all data are received. + * If the RX ring buffer is used and not empty, the data in the ring buffer is copied and + * the parameter @p receivedBytes shows how many bytes are copied from the ring buffer. + * After copying, if the data in the ring buffer is not enough for read, the receive + * request is saved by the UART driver. When the new data arrives, the receive request + * is serviced first. When all data is received, the UART driver notifies the upper layer + * through a callback function and passes a status parameter kStatus_UART_RxIdle. + * For example, the upper layer needs 10 bytes but there are only 5 bytes in ring buffer. + * The 5 bytes are copied to xfer->data, which returns with the + * parameter @p receivedBytes set to 5. For the remaining 5 bytes, the newly arrived data is + * saved from xfer->data[5]. When 5 bytes are received, the UART driver notifies the upper layer. + * If the RX ring buffer is not enabled, this function enables the RX and RX interrupt + * to receive data to xfer->data. When all data is received, the upper layer is notified. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * param xfer UART transfer structure, see uart_transfer_t. + * param receivedBytes Bytes received from the ring buffer directly. + * @retval kStatus_Success Successfully queue the transfer into the transmit queue. + * @retval kStatus_UART_RxBusy Previous receive request is not finished. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferReceiveNonBlocking(UART_Type *base, + uart_handle_t *handle, + uart_transfer_t *xfer, + size_t *receivedBytes) +{ + assert(NULL != handle); + assert(NULL != xfer); + assert(NULL != xfer->data); + assert(0U != xfer->dataSize); + + uint32_t i; + status_t status; + /* How many bytes to copy from ring buffer to user memory. */ + size_t bytesToCopy = 0U; + /* How many bytes to receive. */ + size_t bytesToReceive; + /* How many bytes currently have received. */ + size_t bytesCurrentReceived; + + /* How to get data: + 1. If RX ring buffer is not enabled, then save xfer->data and xfer->dataSize + to uart handle, enable interrupt to store received data to xfer->data. When + all data received, trigger callback. + 2. If RX ring buffer is enabled and not empty, get data from ring buffer first. + If there are enough data in ring buffer, copy them to xfer->data and return. + If there are not enough data in ring buffer, copy all of them to xfer->data, + save the xfer->data remained empty space to uart handle, receive data + to this empty space and trigger callback when finished. */ + + if ((uint8_t)kUART_RxBusy == handle->rxState) + { + status = kStatus_UART_RxBusy; + } + else + { + bytesToReceive = xfer->dataSize; + bytesCurrentReceived = 0; + + /* If RX ring buffer is used. */ + if (NULL != handle->rxRingBuffer) + { + /* Disable UART RX IRQ, protect ring buffer. */ + UART_DisableInterrupts(base, (uint16_t)kUART_RxDataReadyInterruptEnable); + + /* How many bytes in RX ring buffer currently. */ + bytesToCopy = UART_TransferGetRxRingBufferLength(base, handle); + + if (0U != bytesToCopy) + { + bytesToCopy = MIN(bytesToReceive, bytesToCopy); + + bytesToReceive -= bytesToCopy; + + /* Copy data from ring buffer to user memory. */ + for (i = 0U; i < bytesToCopy; i++) + { + xfer->data[bytesCurrentReceived] = handle->rxRingBuffer[handle->rxRingBufferTail]; + bytesCurrentReceived++; + + /* Wrap to 0. Not use modulo (%) because it might be large and slow. */ + if (((uint32_t)handle->rxRingBufferTail + 1U) == handle->rxRingBufferSize) + { + handle->rxRingBufferTail = 0U; + } + else + { + handle->rxRingBufferTail++; + } + } + } + + /* If ring buffer does not have enough data, still need to read more data. */ + if (0U != bytesToReceive) + { + /* No data in ring buffer, save the request to UART handle. */ + handle->rxData = &xfer->data[bytesCurrentReceived]; + handle->rxDataSize = bytesToReceive; + handle->rxDataSizeAll = bytesToReceive; + handle->rxState = (uint8_t)kUART_RxBusy; + } + /* Enable UART RX IRQ if previously enabled. */ + UART_EnableInterrupts(base, (uint16_t)kUART_RxDataReadyInterruptEnable); + + /* Call user callback since all data are received. */ + if (0U == bytesToReceive) + { + if (NULL != handle->callback) + { + handle->callback(base, handle, kStatus_UART_RxIdle, handle->userData); + } + } + } + /* Ring buffer not used. */ + else + { + handle->rxData = xfer->data; + handle->rxDataSize = bytesToReceive; + handle->rxDataSizeAll = bytesToReceive; + handle->rxState = (uint8_t)kUART_RxBusy; + + /* Enable RX interrupt. */ + UART_EnableInterrupts(base, + (uint16_t)kUART_RxDataReadyInterruptEnable | (uint16_t)kUART_RxStatusInterruptEnable); + } + + /* Return the how many bytes have read. */ + if (NULL != receivedBytes) + { + *receivedBytes = bytesCurrentReceived; + } + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Gets the number of bytes that have been received. + * + * This function gets the number of bytes that have been received. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * param count Receive bytes count. + * @retval kStatus_NoTransferInProgress No receive in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t UART_TransferGetReceiveCount(UART_Type *base, uart_handle_t *handle, uint32_t *count) +{ + assert(NULL != handle); + assert(NULL != count); + + status_t status = kStatus_Success; + size_t tmprxDataSize = handle->rxDataSize; + + if ((uint8_t)kUART_RxIdle == handle->rxState) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = handle->rxDataSizeAll - tmprxDataSize; + } + + return status; +} + +/*! + * brief Aborts the interrupt-driven data receiving. + * + * This function aborts the interrupt-driven data receiving. The user can get the remainBytes to find out + * how many bytes not received yet. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + */ +void UART_TransferAbortReceive(UART_Type *base, uart_handle_t *handle) +{ + assert(NULL != handle); + + /* Only abort the receive to handle->rxData, the RX ring buffer is still working. */ + if (NULL == handle->rxRingBuffer) + { + /* Disable RX interrupt. */ + UART_DisableInterrupts(base, + (uint16_t)kUART_RxDataReadyInterruptEnable | (uint16_t)kUART_RxStatusInterruptEnable); + } + + handle->rxDataSize = 0U; + handle->rxState = (uint8_t)kUART_RxIdle; +} + +/*! + * brief UART IRQ handle function. + * + * This function handles the UART transmit and receive IRQ request. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + */ +void UART_TransferHandleIRQ(UART_Type *base, uart_handle_t *handle) +{ + assert(NULL != handle); + + uint8_t count; + uint8_t tempCount; + uint16_t status = UART_GetStatusFlags(base); + uint8_t enabledInterrupts = UART_GetEnabledInterrupts(base); + uint16_t tpmRxRingBufferHead; + uint32_t tpmData; + + /* If RX framing error */ + if (((uint16_t)kUART_FramingErrorInterruptFLag & status) != 0U) + { + handle->rxState = (uint8_t)kUART_RxFramingError; + handle->rxDataSize = 0U; + /* Trigger callback. */ + if (handle->callback != NULL) + { + handle->callback(base, handle, kStatus_UART_FramingError, handle->userData); + } + } + + /* If RX parity error */ + if (((uint16_t)kUART_ParityErrorInterruptFlag & status) != 0U) + { + handle->rxState = (uint8_t)kUART_RxParityError; + handle->rxDataSize = 0U; + /* Trigger callback. */ + if (handle->callback != NULL) + { + handle->callback(base, handle, kStatus_UART_ParityError, handle->userData); + } + } + + /* If RX overrun. */ + if (((uint16_t)kUART_RxOverrunInterruptFlag & status) != 0U) + { + /* Trigger callback. */ + if (handle->callback != NULL) + { + handle->callback(base, handle, kStatus_UART_RxHardwareOverrun, handle->userData); + } + } + + /* If RX FIFO error. */ + if (((uint16_t)kUART_FifoErrorInterruptFlag & status) != 0U) + { + /* Trigger callback. */ + if (handle->callback != NULL) + { + handle->callback(base, handle, kStatus_UART_RxHardwareOverrun, handle->userData); + } + } + + /* Receive data register full */ + if ((0U != ((uint16_t)kUART_RxDataReadyInterruptFlag & status)) && + (0U != ((uint8_t)kUART_RxDataReadyInterruptEnable & enabledInterrupts))) + { + /* Get the size that can be stored into buffer for this interrupt. */ + if (UART_IsFifoEnabled(base)) + { + count = UART_GetRxFifoLevel(base); + } + else + { + count = 1; + } + + /* If handle->rxDataSize is not 0, save data to handle->rxData first. */ + while ((0U != handle->rxDataSize) && (0U != count)) + { + tempCount = (uint8_t)MIN(handle->rxDataSize, count); + + /* Using non block API to read the data from the registers. */ + UART_ReadNonBlocking(base, handle->rxData, tempCount); + handle->rxData = &handle->rxData[tempCount]; + handle->rxDataSize -= tempCount; + count -= tempCount; + + /* If all the data required for upper layer is ready, trigger callback. */ + if (0U == handle->rxDataSize) + { + handle->rxState = (uint8_t)kUART_RxIdle; + + if (NULL != handle->callback) + { + handle->callback(base, handle, kStatus_UART_RxIdle, handle->userData); + } + } + } + + /* If use RX ring buffer, receive data to ring buffer. */ + if (NULL != handle->rxRingBuffer) + { + while (0U != count--) + { + /* If RX ring buffer is full, trigger callback to notify ring buffer overrun. */ + if (UART_TransferIsRxRingBufferFull(base, handle)) + { + if (NULL != handle->callback) + { + handle->callback(base, handle, kStatus_UART_RxRingBufferOverrun, handle->userData); + } + } + + /* If ring buffer is still full after callback function, the oldest data is over write. */ + if (UART_TransferIsRxRingBufferFull(base, handle)) + { + /* Increase handle->rxRingBufferTail to make room for new data. */ + if (((uint32_t)handle->rxRingBufferTail + 1U) == handle->rxRingBufferSize) + { + handle->rxRingBufferTail = 0U; + } + else + { + handle->rxRingBufferTail++; + } + } + + /* Read data. */ + tpmRxRingBufferHead = handle->rxRingBufferHead; + tpmData = UART_ReadByte(base); + handle->rxRingBuffer[tpmRxRingBufferHead] = (uint8_t)(tpmData & handle->dataMask); + + /* Increase handle->rxRingBufferHead. */ + if (((uint32_t)handle->rxRingBufferHead + 1U) == handle->rxRingBufferSize) + { + handle->rxRingBufferHead = 0U; + } + else + { + handle->rxRingBufferHead++; + } + } + } + /* If no receive requst pending, stop RX interrupt. */ + else if (0U == handle->rxDataSize) + { + UART_DisableInterrupts( + base, (uint16_t)kUART_RxDataReadyInterruptEnable | (uint16_t)kUART_RxStatusInterruptEnable); + } + else + { + /* Avoid MISRA 15.7 */ + } + } + + /* Send data register request and the interrupt is enabled. */ + if ((0U != ((uint16_t)kUART_TxDataRequestInterruptFlag & status)) && + (0U != ((uint8_t)kUART_TxDataRequestInterruptEnable & enabledInterrupts))) + { + /* Get the bytes that available at this moment. */ + if (UART_IsFifoEnabled(base)) + { + /* Since we do not have access to the tx data count on FIFO, and FCR is write only so + we do not have the access to the tx FIFO water mark setting either, so safely assume + half of the FIFO is available */ + count = 32U; + } + else + { + count = 1U; + } + + while ((0U != handle->txDataSize) && (0U != count)) + { + tempCount = (uint8_t)MIN(handle->txDataSize, count); + + /* Using non block API to write the data to the registers. */ + UART_WriteNonBlocking(base, handle->txData, tempCount); + handle->txData = &handle->txData[tempCount]; + handle->txDataSize -= tempCount; + count -= tempCount; + } + } + + /* Send data register empty and the interrupt is enabled. */ + if ((0U != ((uint16_t)kUART_TxEmptyInterruptFlag & status)) && + (0U != ((uint8_t)kUART_TxDataRequestInterruptEnable & enabledInterrupts))) + { + /* If all the data are written to data register, notify user with the callback, then TX finished. */ + if (0U == handle->txDataSize) + { + /* Set txState to idle only when all data has been sent out to bus. */ + handle->txState = (uint8_t)kUART_TxIdle; + /* Disable transmission complete interrupt. */ + UART_DisableInterrupts(base, (uint8_t)kUART_TxDataRequestInterruptEnable); + + /* Trigger callback. */ + if (NULL != handle->callback) + { + handle->callback(base, handle, kStatus_UART_TxIdle, handle->userData); + } + } + } +} + +/*! + * brief UART Error IRQ handle function. + * + * This function handles the UART error IRQ request. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + */ +void UART_TransferHandleErrorIRQ(UART_Type *base, uart_handle_t *handle) +{ + /* To be implemented by User. */ +} + +#if defined(UART0) +void UART0_DriverIRQHandler(void); +void UART0_DriverIRQHandler(void) +{ + s_uartIsr(UART0, s_uartHandle[0]); + SDK_ISR_EXIT_BARRIER; +} +#endif + +#if defined(UART1) +void UART1_DriverIRQHandler(void); +void UART1_DriverIRQHandler(void) +{ + s_uartIsr(UART1, s_uartHandle[1]); + SDK_ISR_EXIT_BARRIER; +} +#endif + +#if defined(UART2) +void UART2_DriverIRQHandler(void); +void UART2_DriverIRQHandler(void) +{ + s_uartIsr(UART2, s_uartHandle[2]); + SDK_ISR_EXIT_BARRIER; +} +#endif diff --git a/drivers/mw320/uart/fsl_uart.h b/drivers/mw320/uart/fsl_uart.h new file mode 100644 index 000000000..067989583 --- /dev/null +++ b/drivers/mw320/uart/fsl_uart.h @@ -0,0 +1,1055 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_UART_H_ +#define _FSL_UART_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup uart_driver + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief UART driver version. */ +#define FSL_UART_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/* ============================================= General Control Macro ============================================== */ +/*! @brief Retry times for waiting flag. */ +#ifndef UART_RETRY_TIMES +#define UART_RETRY_TIMES 0U /* Defining to zero means to keep waiting for the flag until it is asserts/deasserts. */ +#endif + +/*! @brief Error codes for the UART driver. */ +enum +{ + kStatus_UART_TxBusy = MAKE_STATUS(kStatusGroup_UART, 0), /*!< TX busy */ + kStatus_UART_RxBusy = MAKE_STATUS(kStatusGroup_UART, 1), /*!< RX busy */ + kStatus_UART_TxIdle = MAKE_STATUS(kStatusGroup_UART, 2), /*!< UART transmitter is idle. */ + kStatus_UART_RxIdle = MAKE_STATUS(kStatusGroup_UART, 3), /*!< UART receiver is idle. */ + kStatus_UART_FlagCannotClearManually = MAKE_STATUS(kStatusGroup_UART, 4), /*!< Some flag can't manually clear */ + kStatus_UART_Error = MAKE_STATUS(kStatusGroup_UART, 5), /*!< Error happens on UART. */ + kStatus_UART_RxRingBufferOverrun = MAKE_STATUS(kStatusGroup_UART, 6), /*!< UART RX software ring buffer overrun. */ + kStatus_UART_RxHardwareOverrun = MAKE_STATUS(kStatusGroup_UART, 7), /*!< UART RX receiver overrun. */ + kStatus_UART_FifoError = MAKE_STATUS(kStatusGroup_UART, 8), /*!< UART noise error. */ + kStatus_UART_FramingError = MAKE_STATUS(kStatusGroup_UART, 9), /*!< UART framing error. */ + kStatus_UART_ParityError = MAKE_STATUS(kStatusGroup_UART, 10), /*!< UART parity error. */ + kStatus_UART_BaudrateNotSupport = + MAKE_STATUS(kStatusGroup_UART, 11), /*!< Baudrate is not support in current clock source */ + kStatus_UART_IdleLineDetected = MAKE_STATUS(kStatusGroup_UART, 12), /*!< IDLE flag. */ + kStatus_UART_Timeout = MAKE_STATUS(kStatusGroup_UART, 13), /*!< UART times out. */ + kStatus_UART_RxFifoError = MAKE_STATUS(kStatusGroup_UART, 14), /*!< UART Rx FIFO error. */ +}; + +/* ================================== Functional Group Structure/Enumeration List =================================== */ +/* ----------------------------------------------- Interrupt Sub-group ---------------------------------------------- */ +/*! + * @brief UART interrupt configuration structure, default settings all disabled. + * + * This structure contains the settings for all of the UART interrupt configurations. + */ +enum _uart_interrupt_enable +{ + kUART_RxDataReadyInterruptEnable = + (UART_IER_RAVIE_MASK), /*!< Receiver data ready interrupt, caused by rx register full when FIFO disabled or rx + data count above water mark when FIFO enabled. bit 0 */ + kUART_TxDataRequestInterruptEnable = + (UART_IER_TIE_MASK), /*!< Transmitter data request interrupt, caused by tx register empty when FIFO disabled or + tx data count below water mark when FIFO enabled. bit 1 */ + kUART_RxStatusInterruptEnable = + (UART_IER_RLSE_MASK), /*!< Receiver line status interrupt, caused by such status as rx over run, framing/parity + error and break detect. bit 2 */ + kUART_ModemStatusChangeInterruptEnable = + (UART_IER_MIE_MASK), /*!< Modem status change interrupt, caused by RTS/CTS pin status change. bit 3 */ + kUART_RxTimeoutInterruptEnable = (UART_IER_RTOIE_MASK), /*!< Receiver timeout interrupt. bit 4 */ + kUART_AutoBaudCompleteInterruptEnable = + (UART_ABR_ABLIE_MASK << 4), /*!< Auto baud completes programing baud rate divisor interrupt. bit 5 */ +}; + +/* ---------------------------------------- Hardware Status Flags Sub-group ----------------------------------------- */ +/*! + * @brief UART status flags. + * + * This provides constants for the UART status flags for use in the UART functions. + */ +enum _uart_status_flags +{ + kUART_RxDataReadyInterruptFlag = + (UART_LSR_DR_MASK), /*!< Receiver data ready flag, self cleared by reading data out. bit 0 */ + kUART_RxOverrunInterruptFlag = (UART_LSR_OE_MASK), /*!< Receiver overrun flag, can cause rx status interrupt, slef + cleared when reading the LSR(line status register). bit 1 */ + kUART_ParityErrorInterruptFlag = (UART_LSR_PE_MASK), /*!< Parity error flag, can cause rx status interrupt, self + cleared when reading the LSR(line status register). bit 2 */ + kUART_FramingErrorInterruptFLag = + (UART_LSR_FE_MASK), /*!< Framing error flag, can cause rx status interrupt, self cleared when reading the + LSR(line status register). bit 3 */ + kUART_BreakDetectInterruptFlag = (UART_LSR_BI_MASK), /*!< Break detect flag, can cause rx status interrupt, self + cleared when reading the LSR(line status register). bit 4 */ + kUART_TxDataRequestInterruptFlag = + (UART_LSR_TDRQ_MASK), /*!< Transmitter data request flag, self cleared by pushing data to tx FIFO until data + count exceed water mark. bit 5 */ + kUART_TxEmptyInterruptFlag = + (UART_LSR_TEMT_MASK), /*!< Transmitter empty flag, self cleared by pushing data to tx FIFO. bit 6 */ + kUART_FifoErrorInterruptFlag = + (UART_LSR_FIFOE_MASK), /*!< FIFO error flag, self cleared by empting the rx FIFO. bit 7 */ + kUART_RxTimeoutInterruptFlag = (UART_IIR_TOD_MASK << 8), /*!< Receiver timeout interrupt flag. bit 11 */ + kUART_AutoBaudCompleteInterruptFlag = + (UART_IIR_ABL_MASK << 8), /*!< Auto baud completes programing baud rate divisor flag. bit 12 */ +}; + +/* --------------------------------------- Peripheral Configuration Sub-group --------------------------------------- */ +/*! @brief UART parity mode. */ +typedef enum _uart_parity_mode +{ + kUART_ParityDisabled = 0x0U, /*!< Parity disabled, bit setting: LCR[PEN] = 0 */ + kUART_ParityOdd = 0x1U, /*!< Parity enabled, type odd, bit setting: LCR[EPS]|[PEN] = 01 */ + kUART_ParityEven = 0x2U, /*!< Parity enabled, type even, bit setting: LCR[EPS]|[PEN] = 11 */ +} uart_parity_mode_t; + +/*! @brief UART data bits count. */ +typedef enum _uart_data_bits +{ + kUART_Databits5 = 0x0U, /*!< UART data bits length: 5 bits */ + kUART_Databits6, /*!< UART data bits length: 6 bits */ + kUART_Databits7, /*!< UART data bits length: 7 bits */ + kUART_Databits8, /*!< UART data bits length: 8 bits */ +} uart_data_bits_t; + +/*! @brief UART stop bit count. */ +typedef enum _uart_stop_bit_count +{ + kUART_Stopbits1, /*!< UART stop bits length: 1 bits */ + kUART_Stopbits2, /*!< UART stop bits length: 2 bits */ +} uart_stop_bit_count_t; + +/*! + * @brief UART TX FIFO watermark level definition + */ +typedef enum _uart_txfifo_watermark +{ + kUART_TxfifoHalfEmpty = 0U, /*!< UART Transmit Interrupt Level: half empty */ + kUART_TxfifoEmpty, /*!< UART Transmit Interrupt Level: full empty */ +} uart_txfifo_watermark_t; + +/*! + * @brief UART RX FIFO watermark level definition + */ +typedef enum _uart_rxfifo_watermark +{ + kUART_RxfifoByte1 = 0U, /*!< 1 byte or more in rx fifo causes interrupt(Not valid in dma mode) */ + kUART_RxfifoBytes8, /*!< 8 byte or more in rx fifo causes interrupt */ + kUART_RxfifoBytes16, /*!< 16 byte or more in rx fifo causes interrupt */ + kUART_RxfifoBytes32, /*!< 32 byte or more in rx fifo causes interrupt */ +} uart_rxfifo_watermark_t; + +/*! + * @brief UART FIFO Configuration Structure definition + */ +typedef struct _uart_fifo_config +{ + uart_txfifo_watermark_t txFifoWatermark; /*!< TX FIFO watermark. FCR[TIL] */ + uart_rxfifo_watermark_t rxFifoWatermark; /*!< RX FIFO watermark. FCR[ITL] */ + bool resetTxFifo; /*!< Tx FIFO reset. FCR[RESETTF] */ + bool resetRxFifo; /*!< Rx FIFO reset. FCR[RESETRF] */ + bool fifoEnable; /*!< FIFO enable. FCR[TRFIFOE] */ +} uart_fifo_config_t; + +/*! + * @brief UART Auto Baud Calculation type definition + */ +typedef enum _uart_autobaud_program +{ + kUART_BaudrateProgramManual = 0, /*!< User calculates and programs UART divisor latch register using the value UART + stored in Auto-Baud Count Register. */ + kUART_BaudrateProgramAuto, /*!< UART programs UART Divisor Latch Register automatically. */ +} uart_autobaud_program_t; + +/*! + * @brief UART Auto Baud Calculation type definition + * + * When choosing kUART_BaudrateProgramAuto for baud rate program method, this is used to configure the baudrate + * calculation method of UART. + */ +typedef enum _uart_autobaud_calculation +{ + kUART_BaudrateCalFormula = 0, /*!< Formula is used to calculate baud rate, any baud rate can be programmed by the + UART but could fail below 28.8 Kbps. */ + kUART_BaudrateCalTable, /*!< Table is used to calculate baud rate, allows any baud rate above 28.8 Kbps. Below 28.8 + Kbps the only baud rates that can be programmed by the UART are 19200, 14400, 9600, 4800, + 1200, and 300. */ +} uart_autobaud_calculation_t; + +/*! + * @brief UART Auto baud detect and set Configuration Structure definition + */ +typedef struct _uart_autobaud_config +{ + bool autoBaudEnable; /*!< Enable or Disable Auto Baud Function. ABR[ABE] */ + uart_autobaud_program_t baudProgramType; /*!< Uart Auto Baud Program type. ABR[ABUP] */ + uart_autobaud_calculation_t baudCalType; /*!< Uart Auto Baud calculation type. ABR[ABT] */ +} uart_autobaud_config_t; + +/*! + * @brief UART Infrared mode ncoder/Decoder Polarity type definition + */ +typedef enum _uart_infrared_polarity +{ + kUART_IrPositivePulse = 0, /*!< UART IR Encoder/Decoder takes positive pulse as zero */ + kUART_IrNegativePulse, /*!< UART IR Encoder/Decoder takes negative pulse as zero */ +} uart_infrared_polarity_t; + +/*! + * @brief UART Infrared Transmit Pulse Width type definition + */ +typedef enum _uart_infrared_pulsewidth +{ + kUART_IrPulsewidth3div16 = 0, /*!< UART IR Transmit pulse width is 3/16 of a bit time width */ + kUART_IrPulsewidth1p6us, /*!< UART IR Transmit pulse width is 1.6us width */ +} uart_infrared_pulsewidth_t; + +/*! + * @brief UART Infrared Configuration Structure type definition + */ +typedef struct _uart_infrared_config +{ + bool txIrEnable; /*!< Enable or Disable Uart Transmit IR Function. ISR[XMITIR] */ + bool rxIrEnable; /*!< Enable or Disable Uart Receive IR Function. ISR[RCVEIR] */ + uart_infrared_polarity_t txIrPolarity; /*!< Transmit IR Polarity type. ISR[TXPL] */ + uart_infrared_polarity_t rxIrPolarity; /*!< Receive IR Polarity type. ISR[RXPL] */ + uart_infrared_pulsewidth_t irPulseWidth; /*!< IR Pulse Width type. ISR[XMODE] */ +} uart_infrared_config_t; + +/* ----------------------------------- Module Initialize/De-initialize Sub-group ------------------------------------ */ +/*! @brief UART configuration structure. */ +typedef struct _uart_config +{ + uint32_t baudRate_Bps; /*!< UART baud rate. DLL, DLH */ + uart_parity_mode_t parityMode; /*!< Parity mode, disabled (default), even, odd. LCR[EPS][PEN] */ + bool enableStickyParity; /*!< Sticky parity, when enabled the parity bit remains unchanged and is opposite to PEN + bit. LCR[STKYP] */ + uart_data_bits_t dataBitCount; /*!< Data bits count, eight (default), seven. LCR[WLS10] */ + uart_stop_bit_count_t stopBitCount; /*!< Number of stop bits, 1 stop bit (default) or 2 stop bits. LCR[STB] */ + uart_fifo_config_t fifoConfig; /*!< FIFO configuration. */ + uart_autobaud_config_t autoBaudConfig; /*!< Auto baud detect and set configuration. */ + uart_infrared_config_t infraredConfig; /*!< Infrared function configuration. */ + bool enableHighSpeed; /*!< High speed enable. IER[HSE] = 1 */ + bool enableLoop; /*!< Loop mode MCR[LOOP] */ + bool enableTxCTS; /*!< TX CTS enable. MCR[AFE] = 1 */ + bool enableRxRTS; /*!< RX RTS enable. To enable RTS, CTS must be enabled. MCR[AFE][RTS] = 11 */ + bool enable; /*!< Enable UART. IER[UUE] */ +} uart_config_t; + +/* ================================= Transactional Group Structure/Enumeration List ================================ */ +/* Forward declaration of the handle typedef. */ +typedef struct _uart_handle_t uart_handle_t; + +/*! + * @brief UART interrupt transfer callback function definition + * + * Defines the interface of user callback function used in UART interrupt transfer using transactional APIs. The + * callback function shall be defined and declared in application level by user. Before starting UART transmiting or + * receiving by calling @ref UART_TransferSendNonBlocking or @ref UART_TransferReceiveNonBlocking, call + * @ref UART_TransferCreateHandle to install the user callback. When the transmiting or receiving ends or any bus error + * like hardware overrun occurs, user callback will be invoked by driver. + * + * @param base UART peripheral base address. + * @param handle Transfer handle. + * @param status Transfer status + * @param userData Pointer to user specified data or structure etc. + */ +typedef void (*uart_transfer_callback_t)(UART_Type *base, uart_handle_t *handle, status_t status, void *userData); + +/*! + * @brief UART transfer handle + * + * @note If user wants to use the transactional API to transfer data in interrupt way, one UART instance should and can + * only be allocated one handle. + * @note The handle is maintained by UART driver internally, which means the transfer state is retained and user shall + * not modify its state #txState or #rxState in application level. If user only wish to use transactional APIs + * without understanding its machanism, it is not necessary to understand these members. + */ +struct _uart_handle_t +{ + uint8_t dataMask; + uint8_t *volatile txData; /*!< Address of remaining data to send. */ + volatile size_t txDataSize; /*!< Size of the remaining data to send. */ + size_t txDataSizeAll; /*!< Size of the data to send out. */ + uint8_t *volatile rxData; /*!< Address of remaining data to receive. */ + volatile size_t rxDataSize; /*!< Size of the remaining data to receive. */ + size_t rxDataSizeAll; /*!< Size of the data to receive. */ + + uint8_t *rxRingBuffer; /*!< Start address of the receiver ring buffer. */ + size_t rxRingBufferSize; /*!< Size of the ring buffer. */ + volatile uint16_t rxRingBufferHead; /*!< Index for the driver to store received data into ring buffer. */ + volatile uint16_t rxRingBufferTail; /*!< Index for the user to get data from the ring buffer. */ + + uart_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< uart callback function parameter.*/ + + volatile uint8_t txState; /*!< TX transfer state. */ + volatile uint8_t rxState; /*!< RX transfer state. */ +}; + +/*! @brief UART transfer structure. */ +typedef struct _uart_transfer +{ + uint8_t *data; /*!< The buffer pointer of data to be transferred.*/ + uint32_t dataSize; /*!< The byte count to be transferred. */ +} uart_transfer_t; +/* ============================== End of Transactional Group Structure/Enumeration List ============================ */ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* _cplusplus */ + +/*! + * @brief Get the UART instance from peripheral base address. + * + * @param base UART peripheral base address. + * @return UART instance. + */ +uint32_t UART_GetInstance(UART_Type *base); + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Initializes an UART instance with the user configuration structure and the peripheral clock frequency. + * + * This function configures the UART module with user-defined settings. Call the UART_GetDefaultConfig function + * to get the configuration structure configured with default settings. + * The example below shows how to use this API to configure the UART. + * @code + * uart_config_t uartConfig; + * UART_GetDefaultConfig(&uartConfig); + * UART_Init(UART1, &uartConfig, 20000000U); + * @endcode + * + * @param base UART peripheral base address. + * @param config Pointer to a user-defined configuration structure. + * @param srcClock_Hz UART clock source frequency in Hz. + * @retval kStatus_UART_BaudrateNotSupport Baudrate is not support in current clock source. + * @retval kStatus_Success UART initialize succeed + */ +status_t UART_Init(UART_Type *base, const uart_config_t *config, uint32_t srcClock_Hz); + +/*! + * @brief Deinitializes a UART instance. + * + * This function waits for transmit to complete, disables TX and RX, and disables the UART clock. + * + * @param base UART peripheral base address. + */ +void UART_Deinit(UART_Type *base); + +/*! + * @brief Gets the default configuration structure. + * + * This function initializes the UART configuration structure to a default value. + * The example below shows how to use this API to configure the UART. + * @code + * uart_config_t uartConfig; + * UART_GetDefaultConfig(&uartConfig); + * UART_Init(UART1, &uartConfig, 20000000U); + * @endcode + * + * @param config Pointer to a configuration structure. + */ +void UART_GetDefaultConfig(uart_config_t *config); +/* @} */ + +/*! + * @name Hardware Status Flags + * @{ + */ +/*! + * @brief Gets UART hardware status flags. + * + * @param base UART peripheral base address. + * @return UART status flags, can be a single flag or several flags in #_uart_status_flags combined by OR. + */ +uint16_t UART_GetStatusFlags(UART_Type *base); +/* @} */ + +/*! + * @name Interrupt + * @{ + */ +/*! + * @brief Enables UART interrupts according to the provided mask. + * + * This function enables the UART interrupts according to the provided mask. The mask is a logical OR of enumeration + * members in #_uart_interrupt_enable. + * + * @param base UART peripheral base address. + * @param interrupts The interrupt source mask, can be a single source or several sources in #_uart_interrupt_enable + * combined by OR. + */ +void UART_EnableInterrupts(UART_Type *base, uint8_t interrupts); + +/*! + * @brief Disables UART interrupts according to the provided mask. + * + * This function disables the UART interrupts according to the provided mask. The mask is a logical OR of enumeration + * members in #_uart_interrupt_enable. + * + * @param base UART peripheral base address. + * @param interrupts The interrupt source mask, can be a single source or several sources in #_uart_interrupt_enable + * combined by OR. + */ +void UART_DisableInterrupts(UART_Type *base, uint8_t interrupts); + +/*! + * @brief Gets the enabled UART interrupts. + * + * This function gets the enabled UART interrupts. The enabled interrupts are returned as the logical OR value of the + * enumerators #_uart_interrupt_enable. + * + * @param base UART peripheral base address. + * @return The interrupt source mask, can be a single source or several sources in #_uart_interrupt_enable combined + * by OR. + */ +uint8_t UART_GetEnabledInterrupts(UART_Type *base); +/* @} */ + +/*! + * @name General Peripheral Configuration + * @{ + */ +/*! + * @brief Enables or disables the UART module. + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_Enable(UART_Type *base, bool enable) +{ + if (enable) + { + base->IER |= UART_IER_UUE_MASK; + } + else + { + base->IER &= ~UART_IER_UUE_MASK; + } +} + +/*! + * @brief Enables or disables the UART high speed mode. + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_EnableHighSpeed(UART_Type *base, bool enable) +{ + if (enable) + { + base->IER |= UART_IER_HSE_MASK; + } + else + { + base->IER &= ~UART_IER_HSE_MASK; + } +} + +/*! + * @brief Enables or disables the UART dma request. + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_EnableDMA(UART_Type *base, bool enable) +{ + if (enable) + { + base->IER |= UART_IER_DMAE_MASK; + } + else + { + base->IER &= ~UART_IER_DMAE_MASK; + } +} + +/*! + * @brief Set the UART FIFO configuration + * + * @note The FIFO configuration register FCR is write only, so we have no way of getting current FIFO configuration. + * In this case any modification of FCR must contain the full FIFO configuration, including tx/rx watermark, whether to + * reset tx/rx FIFO, and tx/rx FIFO enable. + * + * @param base UART peripheral base address + * @param fifoConfig Pointer to FIFO configuration structure + */ +static inline void UART_SetFifoConfig(UART_Type *base, uart_fifo_config_t *fifoConfig) +{ + base->FCR = UART_FCR_ITL(fifoConfig->rxFifoWatermark) | UART_FCR_TIL(fifoConfig->txFifoWatermark) | + UART_FCR_RESETRF(fifoConfig->resetRxFifo) | UART_FCR_RESETTF(fifoConfig->resetTxFifo) | + UART_FCR_TRFIFOE(fifoConfig->fifoEnable); +} + +/*! + * @brief Checks the UART FIFO enable status. + * + * @param base UART peripheral base address. + * @return true is FIFO is enabled. + */ +static inline bool UART_IsFifoEnabled(UART_Type *base) +{ + return ((base->IIR & UART_IIR_FIFOES10_MASK) != 0U); +} + +/*! + * @brief Enables or disables the UART CTS input. + * + * @note The RTS output can not be enabled without enabling the CTS input, which means disabling CTS will + * disables RTS as well. + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_EnablCts(UART_Type *base, bool enable) +{ + if (enable) + { + base->MCR |= UART_MCR_AFE_MASK; + } + else + { + base->MCR &= ~UART_MCR_AFE_MASK; + } +} + +/*! + * @brief Enables or disables the UART RTS output. + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_EnableRts(UART_Type *base, bool enable) +{ + if (enable) + { + base->MCR |= UART_MCR_RTS_MASK; + } + else + { + base->MCR &= ~UART_MCR_RTS_MASK; + } +} + +/*! + * @brief Checks the CTS pin status. + * + * @param base UART peripheral base address. + * @return true is CTS pin is asserted meaning free to send data. + */ +static inline bool UART_IsCtsAsserted(UART_Type *base) +{ + return ((base->MSR & UART_MSR_CTS_MASK) == 0U); +} + +/*! + * @brief Enables or disables the UART loop mode. + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_EnableLoop(UART_Type *base, bool enable) +{ + if (enable) + { + base->MCR |= UART_MCR_LOOP_MASK; + } + else + { + base->MCR &= ~UART_MCR_LOOP_MASK; + } +} + +/*! + * @brief Set the UART parity type + * + * @param base UART peripheral base address. + * @param parity parity type + */ +static inline void UART_SetParity(UART_Type *base, uart_parity_mode_t parity) +{ + if (parity == kUART_ParityDisabled) + { + base->LCR &= ~UART_LCR_PEN_MASK; + } + else + { + base->LCR |= UART_LCR_PEN_MASK; + if (parity == kUART_ParityOdd) + { + base->LCR &= ~UART_LCR_EPS_MASK; + } + else + { + base->LCR |= UART_LCR_EPS_MASK; + } + } +} + +/*! + * @brief Enables or disables sticky parity + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_EnableStickyParity(UART_Type *base, bool enable) +{ + if (enable) + { + base->LCR |= UART_LCR_STKYP_MASK; + } + else + { + base->LCR &= ~UART_LCR_STKYP_MASK; + } +} + +/*! + * @brief Set the UART data bits + * + * @param base UART peripheral base address. + * @param dataBits bits to set + */ +static inline void UART_SetDataBits(UART_Type *base, uart_data_bits_t dataBits) +{ + base->LCR |= (base->LCR & (~UART_LCR_WLS10_MASK)) | UART_LCR_WLS10((uint8_t)dataBits); +} + +/*! + * @brief Set the UART stop bits + * + * @param base UART peripheral base address. + * @param stopBits stop bits to set + */ +static inline void UART_SetStopBits(UART_Type *base, uart_stop_bit_count_t stopBits) +{ + base->LCR |= (base->LCR & (~UART_LCR_STB_MASK)) | UART_LCR_STB((uint8_t)stopBits); +} + +/*! + * @brief Get current UART receive FIFO level. + * + * @param base Select the UART port, should be kUART1_Id, kUART2_Id. + * @return The number of data entries in the receive FIFO + */ +static inline uint8_t UART_GetRxFifoLevel(UART_Type *base) +{ + return (uint8_t)base->RFOR; +} + +/*! + * @brief Sets the UART instance baudrate. + * + * This API configures the UART module baudrate. This API can be used to update + * the UART module baudrate after the UART module is initialized by the UART_Init. + * @code + * UART_SetBaudRate(UART1, 115200U, 20000000U); + * @endcode + * + * @param base UART peripheral base address. + * @param baudRate_Bps UART baudrate to be set. + * @param srcClock_Hz UART clock source frequency in HZ. + * @retval kStatus_UART_BaudrateNotSupport Baudrate is not supported in the current clock source. + * @retval kStatus_Success Set baudrate succeeded. + */ +status_t UART_SetBaudRate(UART_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz); + +/*! + * @brief Sets the UART auto baud configuration. + * + * This API configures the UART auto baud function, including enable/disable, calculation type, program type. + * + * @param base UART peripheral base address. + * @param autoBaudConfig pointer to UART auto baud configuration. + */ +void UART_SetAutoBaudConfig(UART_Type *base, uart_autobaud_config_t *autoBaudConfig); + +/*! + * @brief Get UART auto baud count number. + * + * @param base UART peripheral base address + * @return none + */ +static inline uint16_t UART_GetAutoBaudCount(UART_Type *base) +{ + return (uint16_t)base->ACR; +} + +/*! + * @brief Set DL register according to Auto Baud Detect Count value. + * + * @param base UART peripheral base address. + */ +void UART_SetAutoBaud(UART_Type *base); + +/*! + * @brief Sets the UART auto baud configuration. + * + * This API configures the UART auto baud function, including enable/disable, calculation type, program type. + * + * @param base UART peripheral base address. + * @param infraredConfig pointer to UART infrared configuration. + */ +void UART_SetInfraredConfig(UART_Type *base, uart_infrared_config_t *infraredConfig); +/* @} */ + +/*! + * @name Bus Operation + * @{ + */ +/*! + * @brief Gets the UART receive data register byte address. + * + * This function returns the UART receive data register address, which is mainly used by DMA/eDMA. + * + * @param base UART peripheral base address. + * @return UART data register byte addresses which are used both by the transmitter and the receiver. + */ +static inline uint32_t UART_GetRxDataRegisterAddress(UART_Type *base) +{ + return (uint32_t)((uint8_t *)&(base->RBR)); +} + +/*! + * @brief Gets the UART transmit data register byte address. + * + * This function returns the UART transmit data register address, which is mainly used by DMA/eDMA. + * + * @param base UART peripheral base address. + * @return UART data register byte addresses which are used both by the transmitter and the receiver. + */ +static inline uint32_t UART_GetTxDataRegisterAddress(UART_Type *base) +{ + return (uint32_t)((uint8_t *)&(base->THR)); +} + +/*! + * @brief Writes to the TX register. + * + * This function writes data to the TX register directly. The upper layer must ensure + * that the TX register is empty or TX FIFO has room before calling this function. + * + * @param base UART peripheral base address. + * @param data The byte to write. + */ +static inline void UART_WriteByte(UART_Type *base, uint8_t data) +{ + base->THR = data; +} + +/*! + * @brief Reads the RX register directly. + * + * This function reads data from the RX register directly. The upper layer must + * ensure that the RX register is full or that the TX FIFO has data before calling this function. + * + * @param base UART peripheral base address. + * @return The byte read from UART data register. + */ +static inline uint8_t UART_ReadByte(UART_Type *base) +{ + return (uint8_t)(base->RBR); +} + +/*! + * @brief Send 9 bit data to the UART peripheral. + * + * Before calling this API, make sure parity and sticky parity are enabled, and tx register empty or room in tx FIFO. + * + * @param base UART peripheral base address. + * @param data The data to be sent + */ +static inline void UART_Write9bits(UART_Type *base, uint16_t data) +{ + if (((data >> 8U) & 0x1U) != 0U) + { + base->LCR &= ~UART_LCR_EPS_MASK; + } + else + { + base->LCR |= UART_LCR_EPS_MASK; + } + + /* Send data */ + UART_WriteByte(base, (uint8_t)data); +} + +/*! + * @brief Read 9 bit data from the UART peripheral. + * + * Before calling this API, make sure parity is enabled, and rx register full or data available in rx FIFO. + * + * @param base UART peripheral base address. + * @return The received data + */ +uint16_t UART_Read9bits(UART_Type *base); + +/*! + * @brief Writes TX register using a blocking method. + * + * This function polls the TX register, waits TX register to be empty or TX FIFO + * have room then writes data to the TX buffer. + * + * @param base UART peripheral base address. + * @param data Start address of the data to write. + * @param length Size of the data to write. + */ +status_t UART_WriteBlocking(UART_Type *base, const uint8_t *data, uint32_t length); + +/*! + * @brief Reads RX data register using a blocking method. + * + * This function polls the RX register, waits RX register to be full or RX FIFO + * have data, then reads data from the RX register. + * + * @param base UART peripheral base address. + * @param data Start address of the buffer to store the received data. + * @param length Size of the buffer. + * @retval kStatus_Fail Receiver error occurred while receiving data. + * @retval kStatus_UART_RxHardwareOverrun Receiver overrun occurred while receiving data + * @retval kStatus_UART_NoiseError Noise error occurred while receiving data + * @retval kStatus_UART_FramingErrorFraming error occurred while receiving data + * @retval kStatus_UART_ParityError Parity error occurred while receiving data + * @retval kStatus_Success Successfully received all data. + */ +status_t UART_ReadBlocking(UART_Type *base, uint8_t *data, uint32_t length); + +/*! + * @brief Enables or disables break condition. + * + * When break condition is enabled tx pin is pulled low by UART, when disabled the pin is high. + * + * @param base UART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void UART_EnableBreakCondition(UART_Type *base, bool enable) +{ + if (enable) + { + base->LCR |= UART_LCR_SB_MASK; + } + else + { + base->LCR &= ~UART_LCR_SB_MASK; + } +} +/* @} */ + +/*! + * @name Transactional + * @{ + */ +/*! + * @brief Initializes the UART handle. + * + * This function initializes the UART handle, which can be used for other UART + * transactional APIs. Usually, for a specified UART instance, + * call this API once to get the initialized handle. + * + * The UART driver supports the "background" receiving, which means that user can set up + * an RX ring buffer optionally. Data received is stored into the ring buffer even when the + * user doesn't call the UART_TransferReceiveNonBlocking() API. If there is already data received + * in the ring buffer, the user can get the received data from the ring buffer directly. + * The ring buffer is disabled if passing NULL as @p ringBuffer. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @param callback Callback function. + * @param userData User data. + */ +void UART_TransferCreateHandle(UART_Type *base, + uart_handle_t *handle, + uart_transfer_callback_t callback, + void *userData); + +/*! + * @brief Sets up the RX ring buffer. + * + * This function sets up the RX ring buffer to a specific UART handle. + * + * When the RX ring buffer is used, data received is stored into the ring buffer even when + * the user doesn't call the UART_TransferReceiveNonBlocking() API. If there is already data received + * in the ring buffer, the user can get the received data from the ring buffer directly. + * + * @note When using RX ring buffer, one byte is reserved for internal use. In other + * words, if @p ringBufferSize is 32, then only 31 bytes are used for saving data. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @param ringBuffer Start address of ring buffer for background receiving. Pass NULL to disable the ring buffer. + * @param ringBufferSize size of the ring buffer. + */ +void UART_TransferStartRingBuffer(UART_Type *base, uart_handle_t *handle, uint8_t *ringBuffer, size_t ringBufferSize); + +/*! + * @brief Aborts the background transfer and uninstalls the ring buffer. + * + * This function aborts the background transfer and uninstalls the ring buffer. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + */ +void UART_TransferStopRingBuffer(UART_Type *base, uart_handle_t *handle); + +/*! + * @brief Get the length of received data in RX ring buffer. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @return Length of received data in RX ring buffer. + */ +size_t UART_TransferGetRxRingBufferLength(UART_Type *base, uart_handle_t *handle); + +/*! + * @brief Transmits a buffer of data using the interrupt method. + * + * This function send data using an interrupt method. This is a non-blocking function, which + * returns directly without waiting for all data written to the transmitter register. When + * all data is written to the TX register in the ISR, the UART driver calls the callback + * function and passes the @ref kStatus_UART_TxIdle as status parameter. + * + * @note The kStatus_UART_TxIdle is passed to the upper layer when all data are written + * to the TX register. However, there is no check to ensure that all the data sent out. Before disabling the TX, + * check the kUART_TransmissionCompleteFlag to ensure that the transmit is finished. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @param xfer UART transfer structure, see #uart_transfer_t. + * @retval kStatus_Success Successfully start the data transmission. + * @retval kStatus_UART_TxBusy Previous transmission still not finished, data not all written to the TX register. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferSendNonBlocking(UART_Type *base, uart_handle_t *handle, uart_transfer_t *xfer); + +/*! + * @brief Gets the number of bytes that have been sent out to bus. + * + * This function gets the number of bytes that have been sent out to bus by an interrupt method. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @param count Send bytes count. + * @retval kStatus_NoTransferInProgress No send in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t UART_TransferGetSendCount(UART_Type *base, uart_handle_t *handle, uint32_t *count); + +/*! + * @brief Aborts the interrupt-driven data transmit. + * + * This function aborts the interrupt driven data sending. The user can get the remainBtyes to find out + * how many bytes are not sent out. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + */ +void UART_TransferAbortSend(UART_Type *base, uart_handle_t *handle); + +/*! + * @brief Receives a buffer of data using the interrupt method. + * + * This function receives data using an interrupt method. This is a non-blocking function + * which returns without waiting to ensure that all data are received. + * If the RX ring buffer is used and not empty, the data in the ring buffer is copied and + * the parameter @p receivedBytes shows how many bytes are copied from the ring buffer. + * After copying, if the data in the ring buffer is not enough for read, the receive + * request is saved by the UART driver. When the new data arrives, the receive request + * is serviced first. When all data is received, the UART driver notifies the upper layer + * through a callback function and passes a status parameter kStatus_UART_RxIdle. + * For example, the upper layer needs 10 bytes but there are only 5 bytes in ring buffer. + * The 5 bytes are copied to xfer->data, which returns with the + * parameter @p receivedBytes set to 5. For the remaining 5 bytes, the newly arrived data is + * saved from xfer->data[5]. When 5 bytes are received, the UART driver notifies the upper layer. + * If the RX ring buffer is not enabled, this function enables the RX and RX interrupt + * to receive data to xfer->data. When all data is received, the upper layer is notified. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @param xfer UART transfer structure, see uart_transfer_t. + * @param receivedBytes Bytes received from the ring buffer directly. + * @retval kStatus_Success Successfully queue the transfer into the transmit queue. + * @retval kStatus_UART_RxBusy Previous receive request is not finished. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferReceiveNonBlocking(UART_Type *base, + uart_handle_t *handle, + uart_transfer_t *xfer, + size_t *receivedBytes); + +/*! + * @brief Gets the number of bytes that have been received. + * + * This function gets the number of bytes that have been received. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @param count Receive bytes count. + * @retval kStatus_NoTransferInProgress No receive in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t UART_TransferGetReceiveCount(UART_Type *base, uart_handle_t *handle, uint32_t *count); + +/*! + * @brief Aborts the interrupt-driven data receiving. + * + * This function aborts the interrupt-driven data receiving. The user can get the remainBytes to find out + * how many bytes not received yet. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + */ +void UART_TransferAbortReceive(UART_Type *base, uart_handle_t *handle); + +/*! + * @brief UART IRQ handle function. + * + * This function handles the UART transmit and receive IRQ request. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + */ +void UART_TransferHandleIRQ(UART_Type *base, uart_handle_t *handle); + +/*! + * @brief UART Error IRQ handle function. + * + * This function handles the UART error IRQ request. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + */ +void UART_TransferHandleErrorIRQ(UART_Type *base, uart_handle_t *handle); +/* @} */ + +#if defined(__cplusplus) +} +#endif + +/*! @} End of group uart_driver*/ + +#endif /* _FSL_UART_H_ */ diff --git a/drivers/mw320/uart/fsl_uart_dmac.c b/drivers/mw320/uart/fsl_uart_dmac.c new file mode 100644 index 000000000..70be3d2b3 --- /dev/null +++ b/drivers/mw320/uart/fsl_uart_dmac.c @@ -0,0 +1,281 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_uart_dmac.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.uart_dmac" +#endif + +/* UART DMAC transfer state. */ +enum +{ + kUART_TxIdle, /* TX idle. */ + kUART_TxBusy, /* TX busy. */ + kUART_RxIdle, /* RX idle. */ + kUART_RxBusy /* RX busy. */ +}; + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief UART DMAC send finished callback function. + * + * This function is called when UART DMAC send finished. It disables the UART + * TX DMAC request and sends @ref kStatus_UART_TxIdle to UART callback. + * + * @param handle The DMAC handle. + * @param param Callback function parameter. + * @param status The mask of channel status. + */ +static void UART_TransferSendDMACCallback(dmac_handle_t *handle, void *param, uint32_t status); + +/*! + * @brief UART DMAC receive finished callback function. + * + * This function is called when UART DMAC receive finished. It disables the UART + * RX DMAC request and sends @ref kStatus_UART_RxIdle to UART callback. + * + * @param handle The DMAC handle. + * @param param Callback function parameter. + * @param status The mask of channel status. + */ +static void UART_TransferReceiveDMACCallback(dmac_handle_t *handle, void *param, uint32_t status); + +/******************************************************************************* + * Code + ******************************************************************************/ +static void UART_TransferSendDMACCallback(dmac_handle_t *handle, void *param, uint32_t status) +{ + assert((handle != NULL) && (param != NULL)); + + uart_dmac_handle_t *uartHandle = (uart_dmac_handle_t *)param; + + /* Disable interrupt. */ + DMAC_DisableChannelInterrupts(handle->base, handle->channel, kDMAC_ChannelInterruptFlagTransferComplete); + + uartHandle->txState = (uint8_t)kUART_TxIdle; + + /* Ensure all the data in the transmit buffer are sent out to bus. */ + while (0U == (uartHandle->base->LSR & UART_LSR_TEMT_MASK)) + { + } + + if (uartHandle->callback != NULL) + { + uartHandle->callback(uartHandle->base, uartHandle, kStatus_UART_TxIdle, uartHandle->userData); + } +} + +static void UART_TransferReceiveDMACCallback(dmac_handle_t *handle, void *param, uint32_t status) +{ + assert((handle != NULL) && (param != NULL)); + + uart_dmac_handle_t *uartHandle = (uart_dmac_handle_t *)param; + + /* Disable interrupt. */ + DMAC_DisableChannelInterrupts(handle->base, handle->channel, kDMAC_ChannelInterruptFlagTransferComplete); + + uartHandle->rxState = (uint8_t)kUART_RxIdle; + + if (uartHandle->callback != NULL) + { + uartHandle->callback(uartHandle->base, uartHandle, kStatus_UART_RxIdle, uartHandle->userData); + } +} + +/*! + * brief Initializes the UART handle which is used in transactional functions and sets the callback. + * + * param base UART peripheral base address. + * param handle Pointer to the uart_dmac_handle_t structure. + * param callback UART callback, NULL means no callback. + * param userData User callback function data. + * param rxDmaHandle User requested DMAC handle for the RX DMAC transfer. + * param txDmaHandle User requested DMAC handle for the TX DMAC transfer. + */ +void UART_TransferCreateHandleDMAC(UART_Type *base, + uart_dmac_handle_t *handle, + uart_dmac_transfer_callback_t callback, + void *userData, + dmac_handle_t *txDmaHandle, + dmac_handle_t *rxDmaHandle) +{ + assert((handle != NULL) && (txDmaHandle != NULL) && (rxDmaHandle != NULL)); + + (void)memset(handle, 0, sizeof(*handle)); + + handle->rxState = (uint8_t)kUART_RxIdle; + handle->txState = (uint8_t)kUART_TxIdle; + + handle->callback = callback; + handle->userData = userData; + + handle->rxDmaHandle = rxDmaHandle; + handle->txDmaHandle = txDmaHandle; + + /* Configure TX DMAC callback. */ + if (txDmaHandle != NULL) + { + DMAC_TransferSetCallback(handle->txDmaHandle, UART_TransferSendDMACCallback, handle); + } + + /* Configure RX DMAC callback. */ + if (rxDmaHandle != NULL) + { + DMAC_TransferSetCallback(handle->rxDmaHandle, UART_TransferReceiveDMACCallback, handle); + } +} + +/*! + * brief Sends data using DMAC. + * + * This function sends data using DMAC. This is non-blocking function, which returns + * right away. When all data is sent, the send callback function is called. + * + * param base UART peripheral base address. + * param handle UART handle pointer. + * param xfer UART DMAC transfer structure. See #uart_transfer_t. + * retval kStatus_Success if succeeded; otherwise failed. + * retval kStatus_UART_TxBusy Previous transfer ongoing. + * retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferSendDMAC(UART_Type *base, uart_dmac_handle_t *handle, uart_transfer_t *xfer) +{ + assert((handle != NULL) && (handle->txDmaHandle != NULL)); + assert((xfer != NULL) && (xfer->data != NULL) && (xfer->dataSize != 0U)); + + status_t status; + + /* If previous TX not finished. */ + if ((uint8_t)kUART_TxBusy == handle->txState) + { + status = kStatus_UART_TxBusy; + } + else + { + dmac_channel_transfer_config_t dmacConfig; + + handle->txState = (uint8_t)kUART_TxBusy; + + /* Prepare transfer. */ + DMAC_GetChannelDefaultTransferConfig(&dmacConfig, (void *)xfer->data, + (uint32_t *)UART_GetTxDataRegisterAddress(base), + kDMAC_ChannelTransferWidth8Bits, kDMAC_ChannelBurstLength1DataWidth, + xfer->dataSize, kDMAC_ChannelTransferMemoryToPeripheral); + dmacConfig.interruptMask = kDMAC_ChannelInterruptFlagTransferComplete; + DMAC_TransferSubmit(handle->txDmaHandle, &dmacConfig); + DMAC_TransferStart(handle->txDmaHandle); + UART_Enable(base, true); + UART_EnableDMA(base, true); + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Receives data using DMAC. + * + * This function receives data using DMAC. This is non-blocking function, which returns + * right away. When all data is received, the receive callback function is called. + * + * param base UART peripheral base address. + * param handle Pointer to the uart_dmac_handle_t structure. + * param xfer UART DMAC transfer structure. See #uart_transfer_t. + * retval kStatus_Success if succeeded; otherwise failed. + * retval kStatus_UART_RxBusy Previous transfer on going. + * retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferReceiveDMAC(UART_Type *base, uart_dmac_handle_t *handle, uart_transfer_t *xfer) +{ + assert((handle != NULL) && (handle->rxDmaHandle != NULL)); + assert((xfer != NULL) && (xfer->data != NULL) && (xfer->dataSize != 0U)); + + status_t status; + + /* If previous RX not finished. */ + if ((uint8_t)kUART_RxBusy == handle->rxState) + { + status = kStatus_UART_RxBusy; + } + else + { + dmac_channel_transfer_config_t dmacConfig; + + handle->rxState = (uint8_t)kUART_RxBusy; + + /* Prepare transfer. */ + DMAC_GetChannelDefaultTransferConfig(&dmacConfig, (uint32_t *)UART_GetRxDataRegisterAddress(base), + (void *)xfer->data, kDMAC_ChannelTransferWidth8Bits, + kDMAC_ChannelBurstLength1DataWidth, xfer->dataSize, + kDMAC_ChannelTransferPeripheralToMemory); + dmacConfig.interruptMask = kDMAC_ChannelInterruptFlagTransferComplete; + DMAC_TransferSubmit(handle->rxDmaHandle, &dmacConfig); + DMAC_TransferStart(handle->rxDmaHandle); + UART_Enable(base, true); + UART_EnableDMA(base, true); + + status = kStatus_Success; + } + + return status; +} + +/*! + * brief Aborts the send data using DMAC. + * + * This function aborts the sent data using DMAC. + * + * note This function only aborts the tx DMAC transfer not disable the DMA function, since disable DMA function will + * disable tx and rx together. If user wants to abort both tx/rx DMAC transfer, use UART_EnableDMA(base, false). + * + * param base UART peripheral base address. + * param handle Pointer to uart_dmac_handle_t structure. + */ +void UART_TransferAbortSendDMAC(UART_Type *base, uart_dmac_handle_t *handle) +{ + assert((handle != NULL) && (handle->txDmaHandle != NULL)); + + /* Stop transfer. */ + DMAC_TransferStop(handle->txDmaHandle); + + handle->txState = (uint8_t)kUART_TxIdle; +} + +/*! + * brief Aborts the received data using DMAC. + * + * This function abort receive data which using DMAC. + * + * note This function only aborts the rx DMAC transfer not disable the DMA function, since disable DMA function will + * disable tx and rx together. If user wants to abort both tx/rx DMAC transfer, use UART_EnableDMA(base, false). + * + * param base UART peripheral base address. + * param handle Pointer to uart_dmac_handle_t structure. + */ +void UART_TransferAbortReceiveDMAC(UART_Type *base, uart_dmac_handle_t *handle) +{ + assert((handle != NULL) && (handle->rxDmaHandle != NULL)); + + /* Stop transfer. */ + DMAC_TransferStop(handle->rxDmaHandle); + + handle->rxState = (uint8_t)kUART_RxIdle; +} diff --git a/drivers/mw320/uart/fsl_uart_dmac.h b/drivers/mw320/uart/fsl_uart_dmac.h new file mode 100644 index 000000000..5b9aa715d --- /dev/null +++ b/drivers/mw320/uart/fsl_uart_dmac.h @@ -0,0 +1,148 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#ifndef _FSL_UART_DMAC_H_ +#define _FSL_UART_DMAC_H_ + +#include "fsl_uart.h" +#include "fsl_dmac.h" + +/*! + * @addtogroup uart_dmac_driver + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief UART DMAC driver version. */ +#define FSL_UART_DMAC_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/* Forward declaration of the handle typedef. */ +typedef struct _uart_dmac_handle uart_dmac_handle_t; + +/*! @brief UART transfer callback function. */ +typedef void (*uart_dmac_transfer_callback_t)(UART_Type *base, + uart_dmac_handle_t *handle, + status_t status, + void *userData); + +/*! + * @brief UART DMAC handle + */ +struct _uart_dmac_handle +{ + UART_Type *base; /*!< UART peripheral base address. */ + + uart_dmac_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< UART callback function parameter.*/ + + dmac_handle_t *txDmaHandle; /*!< The DMAC TX channel used. */ + dmac_handle_t *rxDmaHandle; /*!< The DMAC RX channel used. */ + + volatile uint8_t txState; /*!< TX transfer state. */ + volatile uint8_t rxState; /*!< RX transfer state */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name DMAC transactional APIs + * @{ + */ + +/*! + * @brief Initializes the UART handle which is used in transactional functions and sets the callback. + * + * @param base UART peripheral base address. + * @param handle Pointer to the uart_dmac_handle_t structure. + * @param callback UART callback, NULL means no callback. + * @param userData User callback function data. + * @param rxDmaHandle User requested DMAC handle for the RX DMAC transfer. + * @param txDmaHandle User requested DMAC handle for the TX DMAC transfer. + */ +void UART_TransferCreateHandleDMAC(UART_Type *base, + uart_dmac_handle_t *handle, + uart_dmac_transfer_callback_t callback, + void *userData, + dmac_handle_t *txDmaHandle, + dmac_handle_t *rxDmaHandle); + +/*! + * @brief Sends data using DMAC. + * + * This function sends data using DMAC. This is non-blocking function, which returns + * right away. When all data is sent, the send callback function is called. + * + * @param base UART peripheral base address. + * @param handle UART handle pointer. + * @param xfer UART DMAC transfer structure. See #uart_transfer_t. + * @retval kStatus_Success if succeeded; otherwise failed. + * @retval kStatus_UART_TxBusy Previous transfer ongoing. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferSendDMAC(UART_Type *base, uart_dmac_handle_t *handle, uart_transfer_t *xfer); + +/*! + * @brief Receives data using DMAC. + * + * This function receives data using DMAC. This is non-blocking function, which returns + * right away. When all data is received, the receive callback function is called. + * + * @param base UART peripheral base address. + * @param handle Pointer to the uart_dmac_handle_t structure. + * @param xfer UART DMAC transfer structure. See #uart_transfer_t. + * @retval kStatus_Success if succeeded; otherwise failed. + * @retval kStatus_UART_RxBusy Previous transfer on going. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t UART_TransferReceiveDMAC(UART_Type *base, uart_dmac_handle_t *handle, uart_transfer_t *xfer); + +/*! + * @brief Aborts the send data using DMAC. + * + * This function aborts the sent data using DMAC. + * + * @note This function only aborts the tx DMAC transfer not disable the DMA function, since disable DMA function will + * disable tx and rx together. If user wants to abort both tx/rx DMAC transfer, use UART_EnableDMA(base, false). + * + * @param base UART peripheral base address. + * @param handle Pointer to uart_dmac_handle_t structure. + */ +void UART_TransferAbortSendDMAC(UART_Type *base, uart_dmac_handle_t *handle); + +/*! + * @brief Aborts the received data using DMAC. + * + * This function abort receive data which using DMAC. + * + * @note This function only aborts the rx DMAC transfer not disable the DMA function, since disable DMA function will + * disable tx and rx together. If user wants to abort both tx/rx DMAC transfer, use UART_EnableDMA(base, false). + * + * @param base UART peripheral base address. + * @param handle Pointer to uart_dmac_handle_t structure. + */ +void UART_TransferAbortReceiveDMAC(UART_Type *base, uart_dmac_handle_t *handle); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_UART_DMAC_H_ */ diff --git a/drivers/mw320/wdt/driver_mw_wdt.cmake b/drivers/mw320/wdt/driver_mw_wdt.cmake new file mode 100644 index 000000000..165216dd2 --- /dev/null +++ b/drivers/mw320/wdt/driver_mw_wdt.cmake @@ -0,0 +1,14 @@ +#Description: MW_WDT Driver; user_visible: True +include_guard(GLOBAL) +message("driver_mw_wdt component is included.") + +target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/fsl_wdt.c +) + +target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/. +) + + +include(driver_common) diff --git a/drivers/mw320/wdt/fsl_wdt.c b/drivers/mw320/wdt/fsl_wdt.c new file mode 100644 index 000000000..4428a5c8f --- /dev/null +++ b/drivers/mw320/wdt/fsl_wdt.c @@ -0,0 +1,100 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fsl_wdt.h" + +/* Component ID definition, used by tools. */ +#ifndef FSL_COMPONENT_ID +#define FSL_COMPONENT_ID "platform.drivers.mw_wdt" +#endif + +/******************************************************************************* + * Variables + ******************************************************************************/ +static WDT_Type *const s_wdtBases[] = WDT_BASE_PTRS; +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) +/* Array of WDT clock name. */ +static const clock_ip_name_t s_wdtClock[] = WDT_CLOCKS; +#endif /* FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t WDT_GetInstance(WDT_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < ARRAY_SIZE(s_wdtBases); instance++) + { + if (s_wdtBases[instance] == base) + { + break; + } + } + + assert(instance < ARRAY_SIZE(s_wdtBases)); + + return instance; +} + +/*! + * brief Prepares an available pre-defined setting for module's configuration. + * This function initializes the WDT configuration structure to default values. + * config->timeoutValue = kWDT_TimeoutVal2ToThePowerOf16; + * config->timeoutMode =kWDT_TimeoutModeReset; + * config->resetWidth = kWDT_ResetWidthLen2; + * config->enableWDT = false; + * @param config Pointer to the WDT configuration structure, @ref wdt_config_t. + */ +void WDT_GetDefaultConfig(wdt_config_t *config) +{ + config->timeoutValue = kWDT_TimeoutVal2ToThePowerOf16; + config->timeoutMode = kWDT_ModeTimeoutReset; + config->resetWidth = kWDT_ResetPulseLen8; + config->enableWDT = false; +} + +/*! + * brief Initializes the WDT module with input configuration + * Call this function to do initialization configuration for WDT module. + * The configurations are: + * - WDT counter timeout value + * - Timeout response mode select + * - Reset assert pulse width configuration + * - WDT enable/disable + * param base WDT peripheral base address. + * param config The pointer to WDT configuration structure, @ref wdt_config_t. + */ +void WDT_Init(WDT_Type *base, const wdt_config_t *config) +{ + assert(config != NULL); + +#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) + /* Set configuration */ + CLOCK_EnableClock(s_wdtClock[WDT_GetInstance(base)]); +#endif + + uint32_t u32ConfigVal = base->WDT_TORR; + u32ConfigVal &= ~(WDT_WDT_TORR_TOP_INIT_MASK | WDT_WDT_TORR_TOP_MASK); + u32ConfigVal |= + WDT_WDT_TORR_TOP_INIT((uint32_t)config->timeoutValue) | WDT_WDT_TORR_TOP((uint32_t)config->timeoutValue); + + base->WDT_TORR = u32ConfigVal; + + u32ConfigVal = base->WDT_CR; + u32ConfigVal &= ~(WDT_WDT_CR_RMOD_MASK | WDT_WDT_CR_RPL_MASK | WDT_WDT_CR_WDT_EN_MASK); + u32ConfigVal |= (WDT_WDT_CR_RMOD((uint32_t)config->timeoutMode) | WDT_WDT_CR_RPL((uint32_t)config->resetWidth) | + WDT_WDT_CR_WDT_EN(config->enableWDT)); + + base->WDT_CR = u32ConfigVal; +} + +void WDT_Refresh(WDT_Type *base) +{ + base->WDT_CRR = WDT_REFRESH_PATTERN; +} diff --git a/drivers/mw320/wdt/fsl_wdt.h b/drivers/mw320/wdt/fsl_wdt.h new file mode 100644 index 000000000..1b555513a --- /dev/null +++ b/drivers/mw320/wdt/fsl_wdt.h @@ -0,0 +1,249 @@ +/* + * Copyright 2020 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _FSL_WDT_H +#define _FSL_WDT_H + +#include "fsl_common.h" + +/*! + * @addtogroup wdt + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief WDT driver version 2.0.0. */ +#define FSL_WDT_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! @name WDT refresh pattern. */ +/*@{*/ +#define WDT_REFRESH_PATTERN (0x76U) /*!< Refresh pattern to restart WDT */ +/*@}*/ + +/*! @brief enumeration for wdt timeout response mode select. */ +typedef enum _wdt_timeout_response_mode +{ + kWDT_ModeTimeoutReset = 0, /*!< WDT will generate system reset for timeout */ + kWDT_ModeTimeoutInterrupt = 1, /*!< WDT will generate interrupt for timeout */ +} wdt_timeout_response_mode_t; + +/*! @brief enumeration for wdt reset assert width select. */ +typedef enum _wdt_reset_width +{ + kWDT_ResetPulseLen2 = 0, /*!< WDT reset pulse length: 2 pclk cycles */ + kWDT_ResetPulseLen4 = 1, /*!< WDT reset pulse length: 4 pclk cycles */ + kWDT_ResetPulseLen8 = 2, /*!< WDT reset pulse length: 8 pclk cycles */ + kWDT_ResetPulseLen16 = 3, /*!< WDT reset pulse length: 16 pclk cycles */ + kWDT_ResetPulseLen32 = 4, /*!< WDT reset pulse length: 32 pclk cycles */ + kWDT_ResetPulseLen64 = 5, /*!< WDT reset pulse length: 64 pclk cycles */ + kWDT_ResetPulseLen128 = 6, /*!< WDT reset pulse length: 128 pclk cycles */ + kWDT_ResetPulseLen256 = 7, /*!< WDT reset pulse length: 256 pclk cycles */ +} wdt_reset_width_t; + +/*! @brief enumeration for wdt timeout value config. */ +typedef enum _wdt_timeout_value +{ + kWDT_TimeoutVal2ToThePowerOf16 = 0, /*!< WDT timeout value : 2^16 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf17 = 1, /*!< WDT timeout value : 2^17 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf18 = 2, /*!< WDT timeout value : 2^18 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf19 = 3, /*!< WDT timeout value : 2^19 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf20 = 4, /*!< WDT timeout value : 2^20 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf21 = 5, /*!< WDT timeout value : 2^21 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf22 = 6, /*!< WDT timeout value : 2^22 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf23 = 7, /*!< WDT timeout value : 2^23 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf24 = 8, /*!< WDT timeout value : 2^24 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf25 = 9, /*!< WDT timeout value : 2^25 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf26 = 10, /*!< WDT timeout value : 2^26 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf27 = 11, /*!< WDT timeout value : 2^27 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf28 = 12, /*!< WDT timeout value : 2^28 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf29 = 13, /*!< WDT timeout value : 2^29 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf30 = 14, /*!< WDT timeout value : 2^30 pclk cycles */ + kWDT_TimeoutVal2ToThePowerOf31 = 15, /*!< WDT timeout value : 2^31 pclk cycles */ +} wdt_timeout_value_t; + +/*! @brief structure for WDT module initialization configuration. */ +typedef struct _wdt_config +{ + wdt_timeout_value_t timeoutValue; + wdt_timeout_response_mode_t timeoutMode : 1; + wdt_reset_width_t resetWidth : 4; + bool enableWDT : 1; +} wdt_config_t; + +/******************************************************************************* + * API + *******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +/*! + * @name Initialization Interfaces + * @{ + */ + +/*! + * @brief Initializes the WDT module with input configuration + * Call this function to do initialization configuration for WDT module. + * The configurations are: + * - WDT counter timeout value + * - Timeout response mode select + * - Reset assert pulse width configuration + * - WDT enable/disable + * @param base WDT peripheral base address. + * @param config The pointer to WDT configuration structure, @ref wdt_config_t. + */ +void WDT_Init(WDT_Type *base, const wdt_config_t *config); + +/*! + * @brief Prepares an available pre-defined setting for module's configuration. + * This function initializes the WDT configuration structure to default values. + * config->timeoutValue = kWDT_TimeoutVal2ToThePowerOf16; + * config->timeoutMode =kWDT_TimeoutModeReset; + * config->resetWidth = kWDT_ResetWidthLen2; + * config->enableWDT = false; + * @param config Pointer to the WDT configuration structure, @ref wdt_config_t. + */ +void WDT_GetDefaultConfig(wdt_config_t *config); +/* @} */ + +/*! + * @name WDT Operation Interfaces + * @{ + */ + +/*! + * @brief Enable/Disable the WDT module. + * + * This function enable/disables the WDT. + * To disable the WDT Watchdog, call WDT_Enable(base, false). + * + * @param base WDT peripheral base address. + * @param enable Enable the feature or not. + */ +static inline void WDT_Enable(WDT_Type *base, bool enable) +{ + if (enable) + { + base->WDT_CR |= WDT_WDT_CR_WDT_EN_MASK; + } + else + { + base->WDT_CR &= ~WDT_WDT_CR_WDT_EN_MASK; + } +} + +/*! + * @brief Sets the WDT timeout value. + * + */ +static inline void WDT_SetTimeoutValue(WDT_Type *base, wdt_timeout_value_t timeoutValue) +{ + base->WDT_TORR = (base->WDT_TORR & ~WDT_WDT_TORR_TOP_MASK) | WDT_WDT_TORR_TOP((uint32_t)timeoutValue); +} + +/*! + * @brief Gets the WDT timeout value. + * + */ +static inline uint32_t WDT_GetCounterValue(WDT_Type *base) +{ + return base->WDT_CCVR; +} + +/*! + * @brief Refreshes the WDT timer + * + * This function feeds/services the WDT. + * + * @param base WDT peripheral base address. + */ +void WDT_Refresh(WDT_Type *base); + +/* @} */ + +/*! + * @name Interrupt Control Interfaces + * @{ + */ +/*! + * @brief Enables the WDT interrupt, if config->timeoutMode = kWDT_TimeoutModeInterrupt + * for calling WDT_Init, the WDT interrupt is by default enabled, this function does not + * take effect. + * + * This function set WDT timeout response mode to generate interrupt. + * + * @param base WDT peripheral base address + */ +static inline void WDT_EnableInterrupt(WDT_Type *base) +{ + base->WDT_CR |= WDT_WDT_CR_RMOD_MASK; +} + +/*! + * @brief Enables the WDT interrupt, if config->timeoutMode = kWDT_TimeoutModeReset + * for calling WDT_Init, the WDT interrupt is by default disabled, this function does not + * take effect. + * + * This function set WDT timeout response mode to generate reset. + * + * @param base WDT peripheral base address + */ +static inline void WDT_DisableInterrupt(WDT_Type *base) +{ + base->WDT_CR &= ~WDT_WDT_CR_RMOD_MASK; +} +/* @} */ + +/*! + * @name Status get/clear interface. + * @{ + */ + +/*! + * @brief Gets WDT interrupt status. + * + * @param base WDT peripheral base address + * + * @return true if interrupt flag is asserted, else false + * + */ + +static inline bool WDT_GetInterruptStatus(WDT_Type *base) +{ + return ((base->WDT_STAT & WDT_WDT_STAT_WDT_STAT_MASK) != 0U) ? true : false; +} + +/*! + * @brief Clear WDT interrupt status + * + * @param base WDT peripheral base address + */ +static inline void WDT_ClearInterruptStatus(WDT_Type *base) +{ + volatile uint32_t tmpData; + /* Clear interrupt flag for read */ + tmpData = base->WDT_EOI; + tmpData = tmpData; +} + +/*! @} */ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @}*/ + +#endif /* _FSL_WDT_H_ */ diff --git a/drivers/sai/driver_sai_edma.cmake b/drivers/sai/driver_sai_edma.cmake index 1529f92df..852813583 100644 --- a/drivers/sai/driver_sai_edma.cmake +++ b/drivers/sai/driver_sai_edma.cmake @@ -11,13 +11,7 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component -if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") - include(driver_edma) -endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") - include(driver_edma) -endif() -if(${MCUX_DEVICE} STREQUAL "MK66F18") +if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") include(driver_edma) endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QM6_cm4_core0") @@ -29,22 +23,28 @@ endif() if(${MCUX_DEVICE} STREQUAL "MIMX8QX6") include(driver_dma3) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MCIMX7U5") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1021") include(driver_edma) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT1024") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1011") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1052") include(driver_edma) endif() -if(${MCUX_DEVICE} STREQUAL "MIMXRT1015") +if(${MCUX_DEVICE} STREQUAL "MIMXRT1062") + include(driver_edma) +endif() +if(${MCUX_DEVICE} STREQUAL "MIMXRT1064") + include(driver_edma) +endif() +if(${MCUX_DEVICE} STREQUAL "MK66F18") include(driver_edma) endif() diff --git a/drivers/spi/driver_spi_freertos.cmake b/drivers/spi/driver_spi_freertos.cmake index 899b91e76..5004b56fe 100644 --- a/drivers/spi/driver_spi_freertos.cmake +++ b/drivers/spi/driver_spi_freertos.cmake @@ -14,11 +14,11 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC if(${MCUX_DEVICE} STREQUAL "K32L2B31A") include(middleware_freertos-kernel_K32L2B31A) endif() -if(${MCUX_DEVICE} STREQUAL "MKM35Z7") - include(middleware_freertos-kernel_MKM35Z7) -endif() if(${MCUX_DEVICE} STREQUAL "MKL27Z644") include(middleware_freertos-kernel_MKL27Z644) endif() +if(${MCUX_DEVICE} STREQUAL "MKM35Z7") + include(middleware_freertos-kernel_MKM35Z7) +endif() include(driver_spi) diff --git a/drivers/uart/driver_uart_freertos.cmake b/drivers/uart/driver_uart_freertos.cmake index 19bacbae9..a40d9a64d 100644 --- a/drivers/uart/driver_uart_freertos.cmake +++ b/drivers/uart/driver_uart_freertos.cmake @@ -14,26 +14,26 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC if(${MCUX_DEVICE} STREQUAL "K32L2B31A") include(middleware_freertos-kernel_K32L2B31A) endif() +if(${MCUX_DEVICE} STREQUAL "MK22F51212") + include(middleware_freertos-kernel_MK22F51212) +endif() if(${MCUX_DEVICE} STREQUAL "MK64F12") include(middleware_freertos-kernel_MK64F12) endif() if(${MCUX_DEVICE} STREQUAL "MK66F18") include(middleware_freertos-kernel_MK66F18) endif() +if(${MCUX_DEVICE} STREQUAL "MKL27Z644") + include(middleware_freertos-kernel_MKL27Z644) +endif() +if(${MCUX_DEVICE} STREQUAL "MKM35Z7") + include(middleware_freertos-kernel_MKM35Z7) +endif() if(${MCUX_DEVICE} STREQUAL "MKV11Z7") include(middleware_freertos-kernel_MKV11Z7) endif() if(${MCUX_DEVICE} STREQUAL "MKV31F51212") include(middleware_freertos-kernel_MKV31F51212) endif() -if(${MCUX_DEVICE} STREQUAL "MK22F51212") - include(middleware_freertos-kernel_MK22F51212) -endif() -if(${MCUX_DEVICE} STREQUAL "MKM35Z7") - include(middleware_freertos-kernel_MKM35Z7) -endif() -if(${MCUX_DEVICE} STREQUAL "MKL27Z644") - include(middleware_freertos-kernel_MKL27Z644) -endif() include(driver_uart) diff --git a/drivers/utick/driver_utick.cmake b/drivers/utick/driver_utick.cmake index 3a013885c..220074ac2 100644 --- a/drivers/utick/driver_utick.cmake +++ b/drivers/utick/driver_utick.cmake @@ -11,6 +11,9 @@ target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ) #OR Logic component +if(${MCUX_DEVICE} STREQUAL "LPC51U68") + include(driver_common) +endif() if(${MCUX_DEVICE} STREQUAL "LPC54114_cm0plus") include(driver_common) endif() @@ -20,22 +23,19 @@ endif() if(${MCUX_DEVICE} STREQUAL "LPC54628") include(driver_common) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S16") - include(driver_common) -endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018") include(driver_common) endif() if(${MCUX_DEVICE} STREQUAL "LPC54S018M") include(driver_common) endif() -if(${MCUX_DEVICE} STREQUAL "LPC51U68") +if(${MCUX_DEVICE} STREQUAL "LPC55S16") include(driver_common) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") +if(${MCUX_DEVICE} STREQUAL "LPC55S28") include(driver_common) endif() -if(${MCUX_DEVICE} STREQUAL "LPC55S28") +if(${MCUX_DEVICE} STREQUAL "LPC55S69_cm33_core0") include(driver_common) endif() if(${MCUX_DEVICE} STREQUAL "MIMXRT685S_cm33") diff --git a/tools/boot2/boot2.bin b/tools/boot2/boot2.bin new file mode 100644 index 000000000..61ea1a932 Binary files /dev/null and b/tools/boot2/boot2.bin differ diff --git a/tools/boot2/layout.bin b/tools/boot2/layout.bin new file mode 100644 index 000000000..4f98599af Binary files /dev/null and b/tools/boot2/layout.bin differ diff --git a/tools/boot2/layout.txt b/tools/boot2/layout.txt new file mode 100644 index 000000000..ee52b0f1a --- /dev/null +++ b/tools/boot2/layout.txt @@ -0,0 +1,9 @@ +# Component Address Size device Name[8] +FC_COMP_BOOT2 0x0 0x6000 0 boot2 +FC_COMP_FW 0x10000 0x90000 0 mcufw +FC_COMP_FW 0xa0000 0x90000 0 mcufw +FC_COMP_FTFS 0x130000 0x10000 0 ftfs +FC_COMP_FTFS 0x140000 0x10000 0 ftfs +FC_COMP_WLAN_FW 0x150000 0x50000 0 wififw +FC_COMP_WLAN_FW 0x1a0000 0x50000 0 wififw +FC_COMP_PSM 0x1f0000 0x4000 0 psm diff --git a/tools/mw_img_conv/bin/mw_img_conv.exe b/tools/mw_img_conv/bin/mw_img_conv.exe new file mode 100644 index 000000000..630bf2e00 Binary files /dev/null and b/tools/mw_img_conv/bin/mw_img_conv.exe differ diff --git a/tools/mw_img_conv/mw320/mkimg.sh b/tools/mw_img_conv/mw320/mkimg.sh new file mode 100644 index 000000000..6fe8f48cb --- /dev/null +++ b/tools/mw_img_conv/mw320/mkimg.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +if [[ "$OSTYPE" == "linux-gnu" ]]; then + ARCH=`uname -m` + if [[ "$ARCH" == "i686" ]]; then + IMG_CONV=../bin/mw_img_conv + else + IMG_CONV=../bin/mw_img_conv64 + fi +else + IMG_CONV=../bin/mw_img_conv.exe +fi + +if [ "$#" -ne 1 ] ; then + echo "Usage: $0 " + exit 1 +fi + +path=`dirname $1` +name=`basename $1 .bin` +addr=`head -c8 $1 | od -An -t x1 -j7` + +if [[ "$addr" == *"1f"* ]]; then + echo "$IMG_CONV mcufw $1 $path/$name.fw.bin 0x1F000100" + $IMG_CONV mcufw $1 $path/$name.fw.bin 0x1F000100 +else + echo "$IMG_CONV mcufw $1 $path/$name.fw.bin 0x00100000" + $IMG_CONV mcufw $1 $path/$name.fw.bin 0x00100000 +fi diff --git a/tools/mw_img_conv/src/mw_img_conv.c b/tools/mw_img_conv/src/mw_img_conv.c new file mode 100644 index 000000000..2181d9a52 --- /dev/null +++ b/tools/mw_img_conv/src/mw_img_conv.c @@ -0,0 +1,431 @@ +/* + * Copyright 2008-2020 NXP + * + * NXP CONFIDENTIAL + * The source code contained or described herein and all documents related to + * the source code ("Materials") are owned by NXP, its + * suppliers and/or its licensors. Title to the Materials remains with NXP, + * its suppliers and/or its licensors. The Materials contain + * trade secrets and proprietary and confidential information of NXP, its + * suppliers and/or its licensors. The Materials are protected by worldwide copyright + * and trade secret laws and treaty provisions. No part of the Materials may be + * used, copied, reproduced, modified, published, uploaded, posted, + * transmitted, distributed, or disclosed in any way without NXP's prior + * express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by NXP in writing. + * + */ + +#include +#include +#include +#include +#include + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#define MAX_NAME 8 +#define MAX_FL_COMP 16 +#define CRC_TABLE_SIZE 256 +#define MAX_BUFFER_SIZE 512 +#define MAX_FILE_PATH 256 +#define MAX_COMP_SIZE 32 +#define MAX_SECT_SIZE 1024 + +#define STRINGIFY_1(x) #x +#define S(x) STRINGIFY_1(x) + +#define WLAN_FW_MAGIC (('W' << 0)|('L' << 8)|('F' << 16)|('W' << 24)) +#define FW_MAGIC_STR (('M' << 0)|('R' << 8)|('V' << 16)|('L' << 24)) +#define FW_MAGIC_SIG ((0x7BUL << 0) | (0xF1UL << 8) | (0x9CUL << 16) | (0x2EUL << 24)) +#define FW_BLK_LOADABLE_SEGMENT (2) /* loads data to follow */ +#define MCU_FW_OFFSET (0x100U) /* MCU firmware application offset from image header */ + +/** Partition Table */ +struct partition_table { +#define PARTITION_TABLE_MAGIC (('W' << 0)|('M' << 8)|('P' << 16)|('T' << 24)) + /** The magic identifying the start of the partition table */ + uint32_t magic; +#define PARTITION_TABLE_VERSION 1 + /** The version number of this partition table */ + uint16_t version; + /** The number of partition entries that follow this */ + uint16_t partition_entries_no; + /** Generation level */ + uint32_t gen_level; + /** The CRC of all the above components */ + uint32_t crc; +}; + +/** Partition Entry */ +struct partition_entry { + /** The type of the flash component */ + uint8_t type; + /** The device id, internal flash is always id 0 */ + uint8_t device; + /** A descriptive component name */ + char name[MAX_NAME]; + /** Start address on the given device */ + uint32_t start; + /** Size on the given device */ + uint32_t size; + /** Generation level */ + uint32_t gen_level; +}; + +/** The various components in a flash layout */ +enum flash_comp { + /** The secondary stage boot loader to assist firmware bootup */ + FC_COMP_BOOT2 = 0, + /** The firmware image. There can be a maximum of two firmware + * components available in a flash layout. These will be used in an + * active-passive mode if rfget module is enabled. + */ + FC_COMP_FW, + /** The wlan firmware image. There can be one wlan firmware image in the + * system. The contents of this location would be downloaded to the WLAN + * chip. + */ + FC_COMP_WLAN_FW, + /** The FTFS image. */ + FC_COMP_FTFS, + /** The PSM data */ + FC_COMP_PSM, + /** Application Specific component */ + FC_COMP_USER_APP, + /** The BT firmware image if external BT/BLE chip is used */ + FC_COMP_BT_FW, +}; + +/* + * Firmware magic signature + * + * First word is the string "MRVL" and is endian invariant. + * Second word = magic value 0x2e9cf17. + * Third word = time stamp (seconds since 00:00:00 UTC, January 1, 1970). + */ +struct img_hdr { + uint32_t magic_str; + uint32_t magic_sig; + uint32_t time; + uint32_t seg_cnt; + uint32_t entry; +}; + +/* Maximum number of segments */ +#define SEG_CNT 9 + +struct seg_hdr { + uint32_t type; + uint32_t offset; + uint32_t len; + uint32_t laddr; + uint32_t crc; +}; + +struct wlan_fw_header { + uint32_t magic; + uint32_t length; +}; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ +static uint32_t crc_table[CRC_TABLE_SIZE]; +static const int rcrc32 = 0xEDB88320; +static char gbuffer[MAX_BUFFER_SIZE]; +static struct partition_table g_flash_table; +static struct partition_entry g_flash_parts[MAX_FL_COMP]; +static uint8_t gsection[MAX_SECT_SIZE]; + +/******************************************************************************* + * Code + ******************************************************************************/ +static void die_usage(const char *argv0) +{ + fprintf(stderr, "Usage: %s